using Edu.Common.API;
using Edu.Common.Enum.User;
using Edu.Common.Plugin;
using Edu.Model.CacheModel;
using Edu.Model.Entity.User;
using Edu.Model.Public;
using Edu.Model.ViewModel.User;
using Edu.Repository.User;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using VT.FW.DB;
namespace Edu.Module.User
{
///
/// 流程处理类
///
public class WorkFlowModule
{
private readonly Rb_workdaysetingRepository WDrespository = new Rb_workdaysetingRepository();
private readonly Rb_Workflow_AskforleaveRepository askforleaveRepository = new Rb_Workflow_AskforleaveRepository();
private readonly Rb_technicaldatesRepository technicaldatesRepository = new Rb_technicaldatesRepository();
private readonly Rb_attendance_recordRepository RecordRepository = new Rb_attendance_recordRepository();
private readonly Rb_dictvalueRepository rb_DictvalueRepository = new Rb_dictvalueRepository();
private readonly RB_Attendance_LeaveTimeRepository attendance_LeaveTimeRepository = new RB_Attendance_LeaveTimeRepository();
///
/// 部门
///
private readonly RB_DepartmentRepository departmentRepository = new RB_DepartmentRepository();
///
/// 账号
///
private readonly RB_AccountRepository accountRepository = new RB_AccountRepository();
private readonly Rb_Workflow_TemplateRepository workFlowTemplateRepository = new Rb_Workflow_TemplateRepository();
private readonly Rb_Workflow_ConditionRepository conditionRepository = new Rb_Workflow_ConditionRepository();
private readonly Rb_Workflow_AuditRepository wfAuditRepository = new Rb_Workflow_AuditRepository();
private readonly Rb_Workflow_AuditRelevanceRepository auditRelevanceRepository = new Rb_Workflow_AuditRelevanceRepository();
private readonly Rb_Workflow_AuditUserRepository auditUserRepository = new Rb_Workflow_AuditUserRepository();
private readonly Rb_Workflow_AuditUserRelevanceRepository auditUserRelevanceRepository = new Rb_Workflow_AuditUserRelevanceRepository();
private readonly Rb_Workflow_AuditrecordRepository auditrecordRepository = new Rb_Workflow_AuditrecordRepository();
private readonly Rb_Workflow_EvectionRepository wfEvectionRepository = new Rb_Workflow_EvectionRepository();
private readonly Rb_Workflow_TravelRepository wfTravelRepository = new Rb_Workflow_TravelRepository();
private readonly Rb_Workflow_ReissuecardRepository wfReissuecardRepository = new Rb_Workflow_ReissuecardRepository();
private readonly Rb_Workflow_GoOutRepository wfGoOutRepository = new Rb_Workflow_GoOutRepository();
private readonly Rb_Workflow_CopyToPeopleRepository copyToPeopleRepository = new Rb_Workflow_CopyToPeopleRepository();
private readonly Rb_Workflow_SignInRepository SignInModule = new Rb_Workflow_SignInRepository();
#region OA
///
/// 根据员工id获取审批模板
///
///
///
public List GetTemplateByEmpId(int empId)
{
return workFlowTemplateRepository.GetTemplateByEmpId(empId);
}
#region 获取审批信息
///
/// 获取请假信息
///
///
///
public Rb_Workflow_Askforleave GetAskforleave(int id)
{
return askforleaveRepository.GetEntity(id);
}
///
/// 获取出差信息
///
///
///
public Rb_Workflow_Evection GetEvection(int id)
{
return wfEvectionRepository.GetEntity(id);
}
///
/// 获取出差行程信息
///
///
///
public List GetTravelList(int eveId)
{
return wfTravelRepository.GetTravelListForEvection(eveId);
}
///
/// 获取外出信息
///
///
///
public Rb_Workflow_GoOut GetGoOut(int id)
{
return wfGoOutRepository.GetEntity(id);
}
///
/// 获取补卡信息
///
///
///
public Rb_Workflow_Reissuecard GetReissuecard(int id)
{
return wfReissuecardRepository.GetEntity(id);
}
#endregion
#region 提交申请
#region 获取时长
///
/// 获取午休时间
///
///
///
///
public string GetLunchTime(int RB_Group_id, string key)
{
var list = rb_DictvalueRepository.GetList(new RB_Dictvalue_Extend() { RB_Group_id = RB_Group_id, DictKey = key });
if (list.Count > 0)
{
return list.FirstOrDefault()?.Content;
}
return "";
}
///
/// 获取时长
///
/// 员工id
/// 模板id
/// 开始时间
/// 结束时间
/// 结束时间
///
public object CalculateDuration(int empId, int? templateId, DateTime startTime, DateTime endTime, string LunchTime)
{
double TotalLunch = 0;
double LunchT = 0;
if (!string.IsNullOrWhiteSpace(LunchTime))
{
string LTimeStart = LunchTime.Split('-')[0];
string LTimeEnd = LunchTime.Split('-')[1];
TimeSpan ts = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + LTimeEnd) - Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + LTimeStart);
LunchT = ts.TotalHours;
//首先根据开始结束时间 对应的减去午休时间
string STimeStr = startTime.ToString("yyyy-MM-dd");
string ETimeStr = endTime.ToString("yyyy-MM-dd");
//判断请假的开始结束时间是否在午休范围内
if (STimeStr == ETimeStr)
{
if (startTime > Convert.ToDateTime(STimeStr + " " + LTimeStart) && startTime < Convert.ToDateTime(STimeStr + " " + LTimeEnd) && endTime <= Convert.ToDateTime(ETimeStr + " " + LTimeEnd))
{
startTime = Convert.ToDateTime(STimeStr + " " + LTimeStart);
}
if (startTime > Convert.ToDateTime(STimeStr + " " + LTimeStart) && startTime < Convert.ToDateTime(STimeStr + " " + LTimeEnd) && endTime > Convert.ToDateTime(ETimeStr + " " + LTimeEnd))
{
startTime = Convert.ToDateTime(STimeStr + " " + LTimeEnd);
}
if (endTime > Convert.ToDateTime(ETimeStr + " " + LTimeStart) && endTime < Convert.ToDateTime(ETimeStr + " " + LTimeEnd) && startTime >= Convert.ToDateTime(STimeStr + " " + LTimeStart))
{
endTime = Convert.ToDateTime(ETimeStr + " " + LTimeEnd);
}
if (endTime > Convert.ToDateTime(ETimeStr + " " + LTimeStart) && endTime < Convert.ToDateTime(ETimeStr + " " + LTimeEnd) && startTime < Convert.ToDateTime(STimeStr + " " + LTimeStart))
{
endTime = Convert.ToDateTime(ETimeStr + " " + LTimeStart);
}
}
else
{
if (startTime > Convert.ToDateTime(STimeStr + " " + LTimeStart) && startTime < Convert.ToDateTime(STimeStr + " " + LTimeEnd))
{
startTime = Convert.ToDateTime(STimeStr + " " + LTimeEnd);
}
if (endTime > Convert.ToDateTime(ETimeStr + " " + LTimeStart) && endTime < Convert.ToDateTime(ETimeStr + " " + LTimeEnd))
{
endTime = Convert.ToDateTime(ETimeStr + " " + LTimeStart);
}
}
}
Rb_Workflow_Template template = new Rb_Workflow_Template();
if (templateId != null && templateId != 0)
{
template = workFlowTemplateRepository.GetEntity(templateId);
}
else
{
template = workFlowTemplateRepository.GetTempateByTempateType(empId, (int)WFTTemplateTypeEnum.AskForLeave);
}
//请假时长(天/小时)
double dayOrHour = 0;
if (template != null)
{
//获取特殊日期
List technicalList = technicaldatesRepository.GetSpecialDateList(empId);
//正常打卡日期
List workDayList = WDrespository.GetWorkDayList(empId);
int days = StringHelper.GetDateDayInterval(startTime, endTime);
var empModel = accountRepository.GetEmployeeInfo(empId);
for (int i = 0; i < days; i++)
{
DateTime currentDate = startTime.AddDays(i);
var techlist = technicalList.Where(t => t.Date.Date == currentDate.Date).ToList();
//ld 2019-09-26 增加部门 人员筛选
RB_Technicaldates_Extend technical = null;
if (techlist.Where(x => x.EmployeeId == empId).Any())
{
technical = techlist.Where(x => x.EmployeeId == empId).FirstOrDefault();
}
else if (techlist.Where(x => x.RB_Department_Id == empModel.Dept_Id && x.EmployeeId == 0).Any())
{
technical = techlist.Where(x => x.RB_Department_Id == empModel.Dept_Id && x.EmployeeId == 0).FirstOrDefault();
}
else
{
technical = techlist.FirstOrDefault();
}
if (technical != null)//特殊日期
{
#region 特殊日期
//当天上班时间
DateTime onDateTime = Convert.ToDateTime($"{technical.Date.Year}-{technical.Date.Month}-{technical.Date.Day} {Convert.ToDateTime(technical.BeOnDutyTime).Hour}: {Convert.ToDateTime(technical.BeOnDutyTime).Minute}: {Convert.ToDateTime(technical.BeOnDutyTime).Second}");
//当天下班时间
DateTime offDateTime = Convert.ToDateTime($"{technical.Date.Year}-{technical.Date.Month}-{technical.Date.Day} {Convert.ToDateTime(technical.OffDutyTime).Hour}: {Convert.ToDateTime(technical.OffDutyTime).Minute}: {Convert.ToDateTime(technical.OffDutyTime).Second}");
dayOrHour = GetDayOrHour(startTime, endTime, template, dayOrHour, currentDate, onDateTime, offDateTime);
if (!string.IsNullOrWhiteSpace(LunchTime))
GetLunchTime(startTime, endTime, currentDate, LunchTime, LunchT, ref TotalLunch);
#endregion
}
else
{
RB_WorkdaySeting_Extend workDay = workDayList.Where(t => t.Workday == StringHelper.GetWeek(currentDate.Date)).FirstOrDefault();
if (workDay != null)
{
#region 正常日期
//当天上班时间
DateTime onDateTime = Convert.ToDateTime($"{currentDate.Date.Year}-{currentDate.Date.Month}-{currentDate.Date.Day} {Convert.ToDateTime(workDay.BeOnDutyTime).Hour}: {Convert.ToDateTime(workDay.BeOnDutyTime).Minute}: {Convert.ToDateTime(workDay.BeOnDutyTime).Second}");
//当天下班时间
DateTime offDateTime = Convert.ToDateTime($"{currentDate.Date.Year}-{currentDate.Date.Month}-{currentDate.Date.Day} {Convert.ToDateTime(workDay.OffDutyTime).Hour}: {Convert.ToDateTime(workDay.OffDutyTime).Minute}: {Convert.ToDateTime(workDay.OffDutyTime).Second}");
dayOrHour = GetDayOrHour(startTime, endTime, template, dayOrHour, currentDate, onDateTime, offDateTime);
if (!string.IsNullOrWhiteSpace(LunchTime))
GetLunchTime(startTime, endTime, currentDate, LunchTime, LunchT, ref TotalLunch);
#endregion
}
}
}
if (template.TemplateType != WFTTemplateTypeEnum.Evection)
{
dayOrHour -= TotalLunch;
}
return Math.Round(dayOrHour, 2);
}
else
{
return 0;
}
}
///
/// 获取两个日期间休息的天数
///
/// 员工id
/// 开始时间
/// 结束时间
///
public double GetTimeSpanDays(int empId, DateTime startTime, DateTime endTime)
{
double NotWorkTime = 0;
//获取特殊日期
List technicalList = technicaldatesRepository.GetSpecialDateList(empId);
//正常打卡日期
List workDayList = WDrespository.GetWorkDayList(empId);
//true 上午 false 下午
bool IsStartMorning = DateTime.Compare(startTime, Convert.ToDateTime(startTime.ToString("yyyy-MM-dd") + " 13:00")) < 0;
bool IsEndMorning = DateTime.Compare(endTime, Convert.ToDateTime(endTime.ToString("yyyy-MM-dd") + " 13:00")) <= 0;
int days = StringHelper.GetDateDayInterval(startTime, endTime);
var empModel = accountRepository.GetEmployeeInfo(empId);
for (int i = 0; i < days; i++)
{
DateTime currentDate = startTime.AddDays(i);
//RB_Technicaldates_Extend technical = technicalList.Where(t => t.Date.Date == currentDate.Date).FirstOrDefault();
var techlist = technicalList.Where(t => t.Date.Date == currentDate.Date).ToList();
//ld 2019-09-26 增加部门 人员筛选
RB_Technicaldates_Extend technical = null;
if (techlist.Where(x => x.EmployeeId == empId).Any())
{
technical = techlist.Where(x => x.EmployeeId == empId).FirstOrDefault();
}
else if (techlist.Where(x => x.RB_Department_Id == empModel.Dept_Id && x.EmployeeId == 0).Any())
{
technical = techlist.Where(x => x.RB_Department_Id == empModel.Dept_Id && x.EmployeeId == 0).FirstOrDefault();
}
else
{
technical = techlist.FirstOrDefault();
}
if (technical != null)//特殊日期
{
#region 特殊日期
if (technical.Type == 1)
{
//正常打卡 判断第一天 与 最后一天
if (i == 0)
{//第一天
if (IsStartMorning == false)
{
NotWorkTime += 0.5;
}
else if (i == (days - 1) & IsStartMorning == true & IsEndMorning == true)
{
NotWorkTime += 0.5;
}
}
else if (i == days - 1)
{//最后一天
if (IsEndMorning == true)
{
NotWorkTime += 0.5;
}
}
}
else
{
NotWorkTime += 1;
}
#endregion
}
else
{
RB_WorkdaySeting_Extend workDay = workDayList.Where(t => t.Workday == StringHelper.GetWeek(currentDate.Date)).FirstOrDefault();
if (workDay != null)
{
//正常打卡 判断第一天 与 最后一天
if (i == 0)
{//第一天
if (IsStartMorning == false)
{
NotWorkTime += 0.5;
}
else if (i == (days - 1) & IsStartMorning == true & IsEndMorning == true)
{
NotWorkTime += 0.5;
}
}
else if (i == days - 1)
{//最后一天
if (IsEndMorning == true)
{
NotWorkTime += 0.5;
}
}
}
else
{
NotWorkTime += 1;
}
}
}
return NotWorkTime;
}
private static void GetLunchTime(DateTime startTime, DateTime endTime, DateTime currentDate, string LunchTime, double LunchT, ref double TotalLunch)
{
if (!string.IsNullOrWhiteSpace(LunchTime))
{
string LTimeStart = LunchTime.Split('-')[0];
string LTimeEnd = LunchTime.Split('-')[1];
//首先根据开始结束时间 对应的减去午休时间
string STimeStr = startTime.ToString("yyyy-MM-dd");
string ETimeStr = endTime.ToString("yyyy-MM-dd");
string CTimeStr = currentDate.ToString("yyyy-MM-dd");
if (STimeStr == ETimeStr)
{
//请假在同一天
if (startTime <= Convert.ToDateTime(STimeStr + " " + LTimeStart) && Convert.ToDateTime(ETimeStr + " " + LTimeEnd) <= endTime)
{
TotalLunch = LunchT;
}
}
else
{
if (CTimeStr != STimeStr && ETimeStr != CTimeStr)
{
TotalLunch += LunchT;
}
else if (CTimeStr == STimeStr && ETimeStr != CTimeStr)
{//第一天
if (startTime <= Convert.ToDateTime(STimeStr + " " + LTimeStart))
{
TotalLunch += LunchT;
}
}
else if (CTimeStr != STimeStr && ETimeStr == CTimeStr)
{//最后一天
if (endTime >= Convert.ToDateTime(ETimeStr + " " + LTimeEnd))
{
TotalLunch += LunchT;
}
}
}
}
}
///
/// 获取请假时长
///
/// 请假开始时间
/// 请假拘束时间
/// 请假模板
/// 请假时长
/// 当天日期
/// 当天上班日期
/// 当天下班日期
///
private static double GetDayOrHour(DateTime startTime, DateTime endTime, Rb_Workflow_Template template, double dayOrHour, DateTime currentDate, DateTime onDateTime, DateTime offDateTime)
{
//当天工作时长
double workHour = StringHelper.GetDayTimeSpan(onDateTime, offDateTime).TotalHours;
if (currentDate.Date == startTime.Date && startTime.Date == endTime.Date)//请假一天
{
if (startTime <= onDateTime && endTime >= offDateTime)//考勤时间之外
{
dayOrHour = GetAllDayLong(template, dayOrHour, workHour);
}
else if (startTime >= onDateTime && endTime <= offDateTime)//考勤时间之间
{
dayOrHour = GetComputationDayLong(startTime, template, dayOrHour, endTime, workHour);
}
else if (startTime <= onDateTime && endTime < offDateTime && endTime >= onDateTime)//结束时间在考勤之间
{
dayOrHour = GetComputationDayLong(onDateTime, template, dayOrHour, endTime, workHour);
}
else if (startTime >= onDateTime && endTime >= offDateTime && startTime <= offDateTime)//开始时间在考勤之间
{
dayOrHour = GetComputationDayLong(startTime, template, dayOrHour, offDateTime, workHour);
}
}
else if (currentDate.Date == startTime.Date)//开始时间
{
//一整天
if (startTime < onDateTime)
{
dayOrHour = GetAllDayLong(template, dayOrHour, workHour);
}
else if (startTime >= onDateTime && startTime <= offDateTime)
{
dayOrHour = GetComputationDayLong(startTime, template, dayOrHour, offDateTime, workHour);
}
}
else if (currentDate.Date == endTime.Date)//结束时间
{
//一整天
if (endTime > offDateTime)
{
dayOrHour = GetAllDayLong(template, dayOrHour, workHour);
}
else if (endTime >= onDateTime && endTime <= offDateTime)
{
dayOrHour = GetComputationDayLong(onDateTime, template, dayOrHour, endTime, workHour);
}
}
else//中间时间
{
dayOrHour = GetAllDayLong(template, dayOrHour, workHour);
}
return dayOrHour;
}
///
/// 获取计算时长
///
/// 开始时间
/// 模板
/// 请假时长
/// 结束时间
/// 当天工作时长
///
private static double GetComputationDayLong(DateTime startTime, Rb_Workflow_Template template, double dayOrHour, DateTime endTime, double workHour)
{
TimeSpan timeSpan = StringHelper.GetDayTimeSpan(startTime, endTime);
if (template.TemplateType != WFTTemplateTypeEnum.Evection)
{
dayOrHour += timeSpan.TotalHours;
}
else
{
dayOrHour += timeSpan.TotalHours / workHour;
}
return dayOrHour;
}
///
/// 获取一整天时长
///
/// 模板
/// 请假时长
/// 当天工作时长
///
private static double GetAllDayLong(Rb_Workflow_Template template, double dayOrHour, double workHour)
{
if (template.TemplateType != WFTTemplateTypeEnum.Evection)
{
dayOrHour += workHour;
}
else
{
dayOrHour += 1;
}
return dayOrHour;
}
#endregion
///
/// 提交请假申请
///
///
///
public ApiResult AskForLeaveSubmit(Rb_Workflow_Askforleave_Extend askforleave)
{
var emp = accountRepository.GetEmployeeInfo(askforleave.CreateBy ?? 0);
if (emp != null)
{
askforleave.CreateTime = DateTime.Now;
askforleave.Status = UserWFAuditStatus.InReview;
askforleave.RB_BranchId = emp.School_Id;
askforleave.RB_GroupId = emp.Group_Id;
askforleave.UpdateBy = emp.Id;
askforleave.UpdateTime = DateTime.Now;
askforleave.IsCancel = WFAuditCancelStatus.Normal;
//两时间段相差天数
double dayOrHour = askforleave.Duration.GetValueOrDefault();
//图片处理
List imgList = new List();
List oldImgList = new List();
ImageOperation(askforleave.Images, out imgList);
askforleave.Image = JsonConvert.SerializeObject(imgList);
Rb_Workflow_Condition_Extend condition = GetCondition(askforleave.TemplateId.Value, dayOrHour, askforleave.AskforleaveType.Value);
if (askforleave.AskforleaveType == AskforleaveTypeEnum.AnnualLeave)
{
double AnnualNum = 0;
string startT = askforleave.StartTime.Value.ToString("yyyy-MM-dd");
string endT = askforleave.EndTime.Value.ToString("yyyy-MM-dd");
TimeSpan span = Convert.ToDateTime(endT) - Convert.ToDateTime(startT);
AnnualNum = span.Days + 1 - GetTimeSpanDays(askforleave.CreateBy ?? 0, askforleave.StartTime.Value, askforleave.EndTime.Value);
if (emp.AnnualLeaveDay < AnnualNum)
{
return ApiResult.ParamIsNull("年假的天数不够,当前剩余" + emp.AnnualLeaveDay + "天!");
}
}
//病假必须上传凭证 2019-05-10 新增需求,ld 何娟需求
if (askforleave.AskforleaveType == AskforleaveTypeEnum.SickLeave)
{
if (imgList.Count() <= 0)
{
return ApiResult.ParamIsNull("病假需上传证明!");
}
}
if (condition == null)
{
return ApiResult.Failed("该模板没有审核条件");
}
else
{
#region 时间段验重
List auditTypeList = new List();
string checkStr = AllAuditValverifyTime(emp.Id, askforleave.StartTime.ToString(), askforleave.EndTime.Value.ToString(), out auditTypeList);
//修改
if (askforleave.Id > 0)
{
Rb_Workflow_Askforleave currentAskforleave = askforleaveRepository.GetEntity(askforleave.Id);
oldImgList = JsonConvert.DeserializeObject>(currentAskforleave.Image);
//判断申请审核状态
if (currentAskforleave != null && currentAskforleave.Status != UserWFAuditStatus.InReview)
{
return ApiResult.Failed(message: "该请假申请不能被修改");
}
//判断申请时间段有没有被其他申请占用
if (auditTypeList.Where(t => t.Id != askforleave.Id && t.TemplateType != WFTTemplateTypeEnum.AskForLeave).Count() > 0)
{
return ApiResult.Failed(message: checkStr);
}
else
{
var trans = askforleaveRepository.DbTransaction;
try
{
askforleave.ConditionId = condition.Id;
askforleaveRepository.Update(askforleave, trans);
//删除节点所有相关信息
ModifyAuditDeleteAllInfo(askforleave.Id, (int)WFTTemplateTypeEnum.AskForLeave, trans);
//要发送审核消息的账号
List sendAccount = new List();
//添加审核节点
bool success = InsertAuditRelevance(askforleave.CreateBy.Value, askforleave.Id, askforleave.ConditionId.Value, WFTTemplateTypeEnum.AskForLeave, trans, out sendAccount);
if (success)
{
askforleaveRepository.DBSession.Commit();
PushAuditMessage(sendAccount, askforleave.Id, WFTTemplateTypeEnum.AskForLeave, emp.EmployeeName + "发起请假申请,请尽快审批", "审批通知", askforleave.CreateBy ?? 0, SysTemPushTypeEnum.Audit);
//ThirdCore.Commom.CommonHelper.RemoveNoExitFile(imgList, oldImgList);
return ApiResult.Success("修改成功");
}
else
{
askforleaveRepository.DBSession.Rollback("AskForLeaveSubmit");
return ApiResult.Failed("该流程没有审核人,修改失败");
}
}
catch (Exception ex)
{
LogHelper.Write(ex, "AskForLeaveSubmit");
askforleaveRepository.DBSession.Rollback("AskForLeaveSubmit");
return ApiResult.Success("修改提交失败");
}
}
}
else//新增
{
if (!checkStr.Equals("ok"))
{
return ApiResult.Failed(message: checkStr);
}
else
{
var trans = askforleaveRepository.DbTransaction;
try
{
askforleave.ConditionId = condition.Id;
askforleave.Id = askforleaveRepository.Insert(askforleave.RefMapperTo(), trans);
//要发送审核消息的账号
List sendAccount = new List();
//添加审核节点
bool success = InsertAuditRelevance(askforleave.CreateBy.Value, askforleave.Id, askforleave.ConditionId.Value, WFTTemplateTypeEnum.AskForLeave, trans, out sendAccount);
if (success)
{
askforleaveRepository.DBSession.Commit();
PushAuditMessage(sendAccount, askforleave.Id, WFTTemplateTypeEnum.AskForLeave, emp.EmployeeName + "发起请假申请,请尽快审批", "审批通知", askforleave.CreateBy ?? 0, SysTemPushTypeEnum.Audit);
return ApiResult.Success("申请提交成功");
}
else
{
askforleaveRepository.DBSession.Rollback("AskForLeaveSubmit");
return ApiResult.Failed("该流程没有审核人,申请失败");
}
}
catch (Exception ex)
{
LogHelper.Write(ex, "AskForLeaveSubmit");
askforleaveRepository.DBSession.Rollback("AskForLeaveSubmit");
return ApiResult.Success("申请提交失败");
}
}
}
#endregion
}
}
else
{
return ApiResult.Failed("你的账号异常");
}
}
///
/// 提交出差申请
///
/// 出差数据
///
public ApiResult EvectionSubmit(Rb_Workflow_Evection_Extend evection)
{
var emp = accountRepository.GetEmployeeInfo(evection.CreateBy ?? 0);
if (emp != null)
{
evection.CreateTime = DateTime.Now;
evection.Status = UserWFAuditStatus.InReview;
evection.RB_BranchId = emp.School_Id;
evection.RB_GroupId = emp.Group_Id;
evection.UpdateBy = emp.Id;
evection.UpdateTime = DateTime.Now;
evection.IsCancel = WFAuditCancelStatus.Normal;
//出差时间
double dayOrHour = evection.Traveldays.Value;
Rb_Workflow_Condition_Extend condition = GetCondition(evection.TemplateId.Value, dayOrHour, AskforleaveTypeEnum.AffairLeave);
if (condition == null)
{
return ApiResult.Failed("该模板没有审核条件");
}
else
{
#region 时间段验重
DateTime endTime = new DateTime(2000, 1, 1);
foreach (var item in evection.Travel)
{
//多个行程时间段合理验证
if (item.StartTime <= endTime)
{
return ApiResult.Failed(message: "时段设置不合理");
}
endTime = item.EndTime.Value;
List auditTypeList = new List();
string checkStr = AllAuditValverifyTime(emp.Id, item.StartTime.ToString(), item.EndTime.Value.ToString(), out auditTypeList);
//排除自己占有时间
if (evection.Id > 0)
{
if (auditTypeList.Where(t => t.Id != evection.Id && t.TemplateType != WFTTemplateTypeEnum.Evection).Count() > 0)
{
return ApiResult.Failed(message: checkStr);
}
}
else
{
if (!checkStr.Equals("ok"))
{
return ApiResult.Failed(message: checkStr);
}
}
}
#endregion
evection.ConditionId = condition.Id;
//修改
if (evection.Id > 0)
{
Rb_Workflow_Evection currentEvection = wfEvectionRepository.GetEntity(evection.Id);
//判断申请审核状态
if (currentEvection != null && currentEvection.Status != UserWFAuditStatus.InReview)
{
return ApiResult.Failed(message: "该外出申请不能被修改");
}
var trans = wfEvectionRepository.DbTransaction;
try
{
wfEvectionRepository.Update(evection.RefMapperTo(), trans);
#region 删除原行程
IList whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Travel.EvectionId),
FiledValue = evection.Id,
OperatorEnum = OperatorEnum.Equal
}
};
wfTravelRepository.Delete(whereHelpers, trans);
#endregion
#region 添加新行程
List travelList = evection.Travel;
for (int i = 0; i < travelList.Count(); i++)
{
travelList[i].Sort = i + 1;
travelList[i].EvectionId = evection.Id;
}
wfTravelRepository.InsertBatch(travelList, trans);
#endregion
//删除节点所有相关信息
ModifyAuditDeleteAllInfo(evection.Id, (int)WFTTemplateTypeEnum.Evection, trans);
//要发送审核消息的账号
List sendAccount = new List();
//添加审核节点
bool success = InsertAuditRelevance(evection.CreateBy.Value, evection.Id, evection.ConditionId.Value, WFTTemplateTypeEnum.Evection, trans, out sendAccount);
if (success)
{
wfEvectionRepository.DBSession.Commit();
PushAuditMessage(sendAccount, evection.Id, WFTTemplateTypeEnum.Evection, emp.EmployeeName + "发起出差申请,请尽快审批", "审批通知", evection.CreateBy, SysTemPushTypeEnum.Audit);
return ApiResult.Success("出差修改提交成功");
}
else
{
wfEvectionRepository.DBSession.Rollback("EvectionSubmit");
return ApiResult.Failed("该流程没有审核人,修改失败");
}
}
catch (Exception ex)
{
LogHelper.Write(ex, "EvectionSubmit");
wfEvectionRepository.DBSession.Rollback("EvectionSubmit");
return ApiResult.Success("出差修改提交失败");
}
}
else//新增
{
var trans = wfEvectionRepository.DbTransaction;
try
{
evection.Id = wfEvectionRepository.Insert(evection.RefMapperTo(), trans);
List travelList = evection.Travel;
for (int i = 0; i < travelList.Count(); i++)
{
travelList[i].Sort = i + 1;
travelList[i].EvectionId = evection.Id;
}
wfTravelRepository.InsertBatch(travelList, trans);
//要发送审核消息的账号
List sendAccount = new List();
//添加审核节点
bool success = InsertAuditRelevance(evection.CreateBy.Value, evection.Id, evection.ConditionId.Value, WFTTemplateTypeEnum.Evection, trans, out sendAccount);
if (success)
{
wfEvectionRepository.DBSession.Commit();
PushAuditMessage(sendAccount, evection.Id, WFTTemplateTypeEnum.Evection, emp.EmployeeName + "发起出差申请,请尽快审批", "审批通知", evection.CreateBy, SysTemPushTypeEnum.Audit);
return ApiResult.Success("出差申请提交成功");
}
else
{
wfEvectionRepository.DBSession.Rollback("EvectionSubmit");
return ApiResult.Failed("该流程没有审核人,申请失败");
}
}
catch (Exception ex)
{
LogHelper.Write(ex, "EvectionSubmit");
wfEvectionRepository.DBSession.Rollback("EvectionSubmit");
return ApiResult.Success("出差申请提交失败");
}
}
}
}
else
{
return ApiResult.Failed("你的账号异常");
}
}
///
/// 提交外出申请
///
/// 外出数据
///
public ApiResult GooutSubmit(Rb_Workflow_GoOut_Extend goOut)
{
var emp = accountRepository.GetEmployeeInfo(goOut.CreateBy ?? 0);
if (emp != null)
{
goOut.CreateTime = DateTime.Now;
goOut.Status = UserWFAuditStatus.InReview;
goOut.RB_BranchId = emp.School_Id;
goOut.RB_GroupId = emp.Group_Id;
goOut.UpdateBy = emp.Id;
goOut.UpdateTime = DateTime.Now;
goOut.IsCancel = WFAuditCancelStatus.Normal;
//出差时间
double dayOrHour = goOut.Duration.Value;
//图片处理
List imgList = new List();
ImageOperation(goOut.Images, out imgList);
goOut.Image = JsonConvert.SerializeObject(imgList);
Rb_Workflow_Condition_Extend condition = GetCondition(goOut.TemplateId.Value, dayOrHour, AskforleaveTypeEnum.AffairLeave);
if (condition == null)
{
return ApiResult.Failed("该模板没有审核条件");
}
else
{
#region 时间段验重
List auditTypeList = new List();
string checkStr = AllAuditValverifyTime(emp.Id, goOut.StartTime.ToString(), goOut.EndTime.Value.ToString(), out auditTypeList);
#endregion
//修改
if (goOut.Id > 0)
{
Rb_Workflow_GoOut currentGoOut = wfGoOutRepository.GetEntity(goOut.Id);
List oldImgList = JsonConvert.DeserializeObject>(currentGoOut.Image);
//判断申请审核状态
if (currentGoOut != null && currentGoOut.Status != UserWFAuditStatus.InReview)
{
return ApiResult.Failed(message: "该外出申请不能被修改");
}
//判断申请时间段有没有被其他申请占用
if (auditTypeList.Where(t => t.Id != goOut.Id && t.TemplateType != WFTTemplateTypeEnum.Goout).Count() > 0)
{
return ApiResult.Failed(message: checkStr);
}
else
{
var trans = wfGoOutRepository.DbTransaction;
try
{
goOut.ConditionId = condition.Id;
wfGoOutRepository.Update(goOut.RefMapperTo(), trans);
//删除节点所有相关信息
ModifyAuditDeleteAllInfo(goOut.Id, (int)WFTTemplateTypeEnum.Goout, trans);
//要发送审核消息的账号
List sendAccount = new List();
//添加审核节点
bool success = InsertAuditRelevance(goOut.CreateBy.Value, goOut.Id, goOut.ConditionId.Value, WFTTemplateTypeEnum.Goout, trans, out sendAccount);
if (success)
{
wfGoOutRepository.DBSession.Commit();
PushAuditMessage(sendAccount, goOut.Id, WFTTemplateTypeEnum.Goout, emp.EmployeeName + "发起外出申请,请尽快审批", "审批通知", goOut.CreateBy, SysTemPushTypeEnum.Audit);
//ThirdCore.Commom.CommonHelper.RemoveNoExitFile(imgList, oldImgList);
return ApiResult.Success("修改申请提交成功");
}
else
{
wfGoOutRepository.DBSession.Rollback("GooutSubmit");
return ApiResult.Failed("该流程没有审核人,修改失败");
}
}
catch (Exception ex)
{
LogHelper.Write(ex, "GooutSubmit");
wfGoOutRepository.DBSession.Rollback("GooutSubmit");
return ApiResult.Success("申请提交失败");
}
}
}
else//新增
{
if (!checkStr.Equals("ok"))
{
return ApiResult.Failed(message: checkStr);
}
else
{
var trans = wfGoOutRepository.DbTransaction;
try
{
goOut.ConditionId = condition.Id;
goOut.Id = wfGoOutRepository.Insert(goOut.RefMapperTo(), trans);
//要发送审核消息的账号
List sendAccount = new List();
//添加审核节点
bool success = InsertAuditRelevance(goOut.CreateBy.Value, goOut.Id, goOut.ConditionId.Value, WFTTemplateTypeEnum.Goout, trans, out sendAccount);
if (success)
{
wfGoOutRepository.DBSession.Commit();
PushAuditMessage(sendAccount, goOut.Id, WFTTemplateTypeEnum.Goout, emp.EmployeeName + "发起外出申请,请尽快审批", "审批通知", goOut.CreateBy, SysTemPushTypeEnum.Audit);
return ApiResult.Success("申请提交成功");
}
else
{
wfGoOutRepository.DBSession.Rollback("GooutSubmit");
return ApiResult.Failed("该流程没有审核人,申请失败");
}
}
catch (Exception ex)
{
LogHelper.Write(ex, "GooutSubmit");
wfGoOutRepository.DBSession.Rollback("GooutSubmit");
return ApiResult.Success("申请提交失败");
}
}
}
}
}
else
{
return ApiResult.Failed("你的账号异常");
}
}
///
/// 提交补卡申请
///
/// 补卡数据
///
public ApiResult ReissueCardSubmit(Rb_Workflow_Reissuecard_Extend reissuecard)
{
; var emp = accountRepository.GetEmployeeInfo(reissuecard.CreateBy??0);
if (emp != null)
{
reissuecard.CreateTime = DateTime.Now;
reissuecard.Status = UserWFAuditStatus.InReview;
reissuecard.RB_BranchId = emp.School_Id;
reissuecard.RB_GroupId = emp.Group_Id;
reissuecard.UpdateBy = emp.Id;
reissuecard.UpdateTime = DateTime.Now;
reissuecard.IsCancel = WFAuditCancelStatus.Normal;
//图片处理
List oldImgList = new List();
ImageOperation(reissuecard.Images, out List imgList);
reissuecard.Image = JsonConvert.SerializeObject(imgList);
Rb_Workflow_Condition_Extend condition = GetCondition(reissuecard.TemplateId.Value, 0, AskforleaveTypeEnum.AffairLeave);
if (condition == null)
{
return ApiResult.Failed("该模板没有审核条件");
}
else
{
var trans = wfReissuecardRepository.DbTransaction;
try
{
reissuecard.ConditionId = condition.Id;
if (reissuecard.Id > 0)
{
Rb_Workflow_Reissuecard currentReissuecard = wfReissuecardRepository.GetEntity(reissuecard.Id);
oldImgList = JsonConvert.DeserializeObject>(currentReissuecard.Image);
//判断申请审核状态
if (currentReissuecard != null && currentReissuecard.Status != UserWFAuditStatus.InReview)
{
wfReissuecardRepository.DBSession.Commit();
return ApiResult.Failed(message: "该补卡申请不能被修改");
}
wfReissuecardRepository.Update(reissuecard.RefMapperTo(), trans);
//删除节点所有相关信息
ModifyAuditDeleteAllInfo(reissuecard.Id, (int)WFTTemplateTypeEnum.ReissueCard, trans);
}
else
{
reissuecard.Id = wfReissuecardRepository.Insert(reissuecard.RefMapperTo(), trans);
}
//要发送审核消息的账号
List sendAccount = new List();
//添加审核节点
bool success = InsertAuditRelevance(reissuecard.CreateBy.Value, reissuecard.Id, reissuecard.ConditionId.Value, WFTTemplateTypeEnum.ReissueCard, trans, out sendAccount);
if (success)
{
wfReissuecardRepository.DBSession.Commit();
PushAuditMessage(sendAccount, reissuecard.Id, WFTTemplateTypeEnum.ReissueCard, emp.EmployeeName + "发起补卡申请,请尽快审批", "审批通知", reissuecard.CreateBy, SysTemPushTypeEnum.Audit);
//ThirdCore.Commom.CommonHelper.RemoveNoExitFile(imgList, oldImgList);
return ApiResult.Success("操作提交成功");
}
else
{
wfReissuecardRepository.DBSession.Rollback("ReissueCardSubmit");
return ApiResult.Failed("该流程没有审核人,操作失败");
}
}
catch (Exception ex)
{
LogHelper.Write(ex, "ReissueCardSubmit");
wfReissuecardRepository.DBSession.Rollback("ReissueCardSubmit");
return ApiResult.Success("操作失败");
}
}
}
else
{
return ApiResult.Failed("你的账号异常");
}
}
///
/// 所有申请验证该时间段是否有重复数据
///
/// 员工id
/// 开始时间
/// 结束时间
/// 申请信息
///
public string AllAuditValverifyTime(int empId, string startTime, string endTime, out List auditTypeList)
{
auditTypeList = askforleaveRepository.AllAuditValverifyTime(empId, startTime, endTime);
if (auditTypeList.Count > 0)
{
if (auditTypeList.Where(t => t.TemplateType == WFTTemplateTypeEnum.AskForLeave).Count() > 0)
{
return "该时间段内已存在请假申请";
}
else if (auditTypeList.Where(t => t.TemplateType == WFTTemplateTypeEnum.Evection).Count() > 0)
{
return "该时间段内已存在出差申请";
}
else if (auditTypeList.Where(t => t.TemplateType == WFTTemplateTypeEnum.Goout).Count() > 0)
{
return "该时间段内已存在外出申请";
}
else
{
return "ok";
}
}
else
{
return "ok";
}
}
///
/// 修改申请删除相关节点所有信息
///
///
///
/// 事务连接对象
private void ModifyAuditDeleteAllInfo(int workFlowId, int templateType, IDbTransaction trans)
{
List auditRelevanceList = auditRelevanceRepository.GetAuditRelevanceList(workFlowId, templateType);
#region 删除所有审核节点
{
IList whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_AuditRelevance.WorkFlowId),
FiledValue = workFlowId,
OperatorEnum = OperatorEnum.Equal
},
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_AuditRelevance.TemplateType),
FiledValue = templateType,
OperatorEnum = OperatorEnum.Equal
}
};
auditRelevanceRepository.Delete(whereHelpers, trans);
}
#endregion
#region 删除审核人记录
{
#region 删除审核人
IList whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Auditrecord.WorkFlowId),
FiledValue = workFlowId,
OperatorEnum = OperatorEnum.Equal
},
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Auditrecord.TemplateType),
FiledValue = templateType,
OperatorEnum = OperatorEnum.Equal
}
};
auditrecordRepository.Delete(whereHelpers, trans);
#endregion
}
#endregion
#region 删除指定成员关联信息
foreach (var item in auditRelevanceList)
{
IList whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_AuditUserRelevance.AuditRelevanceId),
FiledValue = item.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditUserRelevanceRepository.Delete(whereHelpers, trans);
}
#endregion
#region 删除抄送人
{
IList whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_AuditRelevance.WorkFlowId),
FiledValue = workFlowId,
OperatorEnum = OperatorEnum.Equal
},
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_AuditRelevance.TemplateType),
FiledValue = templateType,
OperatorEnum = OperatorEnum.Equal
}
};
copyToPeopleRepository.Delete(whereHelpers, trans);
}
#endregion
}
///
/// 图片表单上传处理
///
/// 上传图片
/// 处理后图片地址
private static void ImageOperation(string[] images, out List imgList)
{
imgList = new List();
if (images != null && images.Length > 0)
{
imgList = images.ToList();
}
}
///
/// 添加拷贝审核节点
///
/// 员工id
/// 工作流id
/// 工作流条件id
/// 工作模板
///
/// 推送信息账号
private bool InsertAuditRelevance(int empId, int wfId, int conditionId, WFTTemplateTypeEnum wFTTemplateTypeEnum, System.Data.IDbTransaction trans, out List sendAccount)
{
sendAccount = new List();
List auditList = wfAuditRepository.GetDefaultAudit(conditionId);
List auditRelevanceList = new List();
//首先查询出来 是否是部门负责人
var empModel = accountRepository.GetEmployeeInfo(empId);
if (empModel == null)
{
return false;
}
#region 拷贝审核节点
if (auditList.Count > 0)
{
var depModel = departmentRepository.GetEntity(empModel.Dept_Id);
if (depModel == null)
{
return false;
}
if (("," + depModel.ManagerIds + ",").Contains("," + empId + ","))
{//说明他是部门的负责人 需要遍历出所有直属主管审核 改成第二级 ,如果有第二级 就干掉,
//找出直属主管审批
int roleinNum = 2;
//查询第二级主管是否制单人 是的话 找第三级主管
var dep2 = departmentRepository.GetEntity(depModel.ParentId);
if (dep2 != null && ("," + dep2.ManagerIds + ",").Contains("," + empId + ","))
{
roleinNum = 3;
//查询第三级主管是否制单人 是的话 找第四级主管
var dep3 = departmentRepository.GetEntity(dep2.ParentId);
if (dep3 != null && ("," + dep3.ManagerIds + ",").Contains("," + empId + ","))
{
roleinNum = 4;
var dep4 = departmentRepository.GetEntity(dep3.ParentId);
if (dep4 != null && ("," + dep4.ManagerIds + ",").Contains("," + empId + ","))
{
roleinNum = 5;
var dep5 = departmentRepository.GetEntity(dep4.ParentId);
if (dep5 != null && ("," + dep5.ManagerIds + ",").Contains("," + empId + ","))
{
roleinNum = 6;
}
}
}
}
var AuditDirectorList = auditList.Where(x => x.AuditType == (int)WFTAuditTypeEnum.Director && x.RoleOrInitiator == 1).ToList();
if (AuditDirectorList.Count > 0)
{
//需要 直属主管审核 改成第二级 ,如果有第二级 就干掉,排除掉小级审批的
var AuditDirectorTwoList = auditList.Where(x => x.AuditType == (int)WFTAuditTypeEnum.Director && x.RoleOrInitiator > 1 && x.RoleOrInitiator <= roleinNum).ToList();
if (AuditDirectorTwoList.Count > 0)
{
//有下级部门审批 直接删除直接主管审批
List AIDArr = AuditDirectorTwoList.Select(x => x.Id).ToList();
auditList = auditList.Where(x => !AIDArr.Contains(x.Id)).ToList();
}
//需要只留一条数据
var auditModel = AuditDirectorList[0];
auditModel.RoleOrInitiator = roleinNum;
if (AuditDirectorList.Count > 1)
{
List AIDArr = AuditDirectorList.Where(x => x.Id != auditModel.Id).Select(x => x.Id).ToList();
auditList = auditList.Where(x => !AIDArr.Contains(x.Id)).ToList();
}
}
}
auditList = auditList.OrderBy(x => x.Sort).ToList();
//添加拷贝审核节点
foreach (var item in auditList)
{
Rb_Workflow_AuditRelevance auditRelevance = item.RefMapperTo();
auditRelevance.WorkFlowId = wfId;
auditRelevance.AuditType = (WFTAuditTypeEnum)item.AuditType.Value;
auditRelevance.TemplateType = wFTTemplateTypeEnum;
auditRelevance.OriginalAuditId = item.Id;
auditRelevance.Stauts = WFRrocessStatus.NotAudit;
auditRelevance.AuditWay = (WFTAuditWayEnum)item.AuditWay;
auditRelevance.Id = auditRelevanceRepository.Insert(auditRelevance, trans);
auditRelevanceList.Add(auditRelevance);
//添加审核节点指定审核成员
if (auditRelevance.AuditType == WFTAuditTypeEnum.SpecifiedMember)
{
List audituserList = auditUserRepository.GetConditionAuditUser(item.Id);
if (audituserList.Count > 0)
{
List audituserRelevanceList = new List();
foreach (var audituser in audituserList)
{
Rb_Workflow_AuditUserRelevance auditUserRelevance = audituser.RefMapperTo();
auditUserRelevance.AuditRelevanceId = auditRelevance.Id;
audituserRelevanceList.Add(auditUserRelevance);
}
auditUserRelevanceRepository.InsertBatch(audituserRelevanceList, trans);
}
}
}
}
else//申请拒绝
{
return false;
}
#endregion
#region 添加初始审核人
if (auditRelevanceList.Count > 0)
{
Rb_Workflow_AuditRelevance auditRelevance = auditRelevanceList.OrderBy(t => t.Sort).FirstOrDefault();
//部门负责人审核
if (auditRelevance.AuditType == WFTAuditTypeEnum.Director)
{
var empList = GetEmployeeByDeptTierModule(new Employee_ViewModel() { DeptTier = auditRelevance.RoleOrInitiator ?? 0, Dept_Id = empModel.Dept_Id, Group_Id = empModel.Group_Id });
if (empList.Any())
{
List empIds = empList.Select(x => x.Id).ToList();
InsertBatcheAuditRecord(empIds, wfId, wFTTemplateTypeEnum, trans, auditRelevance);
foreach (var item in empList)
{
sendAccount.Add(new EmAccoutIdModel() { EmAccount = item.Account, EmployeeId = item.Id });
}
}
else
{
return false;
}
}
else if (auditRelevance.AuditType == WFTAuditTypeEnum.Role)//角色审核
{
var empList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel() { Post_Id = auditRelevance.RoleOrInitiator ?? 0, Group_Id = empModel.Group_Id });
if (empList.Count > 0)
{
List empIds = empList.Select(t => t.Id).ToList();
sendAccount = empList.Select(t => new EmAccoutIdModel() { EmAccount = t.Account, EmployeeId = t.Id }).ToList();
InsertBatcheAuditRecord(empIds, wfId, wFTTemplateTypeEnum, trans, auditRelevance);
}
else
{
return false;
}
}
else if (auditRelevance.AuditType == WFTAuditTypeEnum.SpecifiedMember)//指定人审核
{
List audituserList = auditUserRepository.GetConditionAuditUser(auditRelevance.OriginalAuditId.Value);
if (audituserList.Count > 0)
{
List empIds = audituserList.Select(t => t.EmployeeId.Value).ToList();
sendAccount = audituserList.Select(t => new EmAccoutIdModel() { EmAccount = t.EmLoginMobile, EmployeeId = t.EmployeeId ?? 0 }).ToList();
InsertBatcheAuditRecord(empIds, wfId, wFTTemplateTypeEnum, trans, auditRelevance);
}
else
{
return false;
}
}
}
#endregion
#region 添加抄送人
List aduitUserList = auditUserRepository.GetDefaultAuditUser(conditionId);
if (aduitUserList.Count > 0)
{
List copyToPeopleList = new List();
foreach (var item in aduitUserList)
{
Rb_Workflow_CopyToPeople copyToPeople = new Rb_Workflow_CopyToPeople
{
EmployeeId = item.EmployeeId,
ReadStauts = 1,
Stauts = WFRrocessStatus.NotAudit,
WorkFlowId = wfId,
TemplateType = wFTTemplateTypeEnum
};
copyToPeopleList.Add(copyToPeople);
}
copyToPeopleRepository.InsertBatch(copyToPeopleList, trans);
}
#endregion
return true;
}
///
/// 根据员工部门获取员工列表
///
///
///
public List GetEmployeeByDeptTierModule(Employee_ViewModel query)
{
List employeeList = new List();
//获取当前部门所有的上级部门
if (query.DeptTier == 1)
{
var currentDeptModel = departmentRepository.GetEntity(query.Dept_Id);
if (currentDeptModel != null && !string.IsNullOrEmpty(currentDeptModel.ManagerIds))
{
employeeList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel()
{
QIds = currentDeptModel.ManagerIds
});
}
}
else
{
var allDeptList = departmentRepository.GetAllSuperiorDepartmentListRepository(query.Dept_Id);
var subList = allDeptList.Where(qitem => qitem.DeptTier == (query.DeptTier - 1));
if (subList != null && subList.Count() > 0)
{
string managerIds = "0";
foreach (var item in subList)
{
if (!string.IsNullOrEmpty(item.ManagerIds))
{
managerIds += "," + item.ManagerIds;
}
}
if (!string.IsNullOrEmpty(managerIds))
{
employeeList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel()
{
QIds = managerIds
});
}
}
}
return employeeList;
}
///
/// 批量添加审核人
///
/// 审核人id集合
/// 工作流id
/// 工作流模板
/// 事务
/// 审核节点
private void InsertBatcheAuditRecord(List empIds, int wfId, WFTTemplateTypeEnum wFTTemplateTypeEnum, System.Data.IDbTransaction trans, Rb_Workflow_AuditRelevance auditRelevance)
{
List auditrecordList = new List();
foreach (var item in empIds)
{
Rb_Workflow_Auditrecord auditrecord = new Rb_Workflow_Auditrecord
{
AuditEmId = item,
AuditId = auditRelevance.Id,
AuditStatus = WFRrocessStatus.NotAudit,
CreateBy = item,
CreateTime = DateTime.Now,
UpdateBy = item,
UpdateTime = DateTime.Now,
TemplateType = wFTTemplateTypeEnum,
WorkFlowId = wfId
};
auditrecordList.Add(auditrecord);
}
auditrecordRepository.InsertBatch(auditrecordList, trans);
auditRelevance.ToAuditId = string.Join(",", empIds);
auditRelevanceRepository.Update(auditRelevance, trans);
}
///
/// 获取模板条件
///
/// 模板id
/// 申请时常或天数
/// 请假类型
///
private Rb_Workflow_Condition_Extend GetCondition(int templateId, double dayOrHour, AskforleaveTypeEnum askforleaveTypeEnum)
{
List conditionList = conditionRepository.GetConditionByTemplateId(templateId).OrderByDescending(t => t.Sort).ToList();
//找出默认条件
Rb_Workflow_Condition_Extend condition = conditionList.Where(t => t.Sort == 0).FirstOrDefault();
foreach (var item in conditionList)
{
//请假类型和(天数/小时)同时存在
if (!string.IsNullOrWhiteSpace(item.AskforleaveType) && item.StartValue != null)
{
//判断请假类型
if (item.AskforleaveType.Contains(((int)askforleaveTypeEnum).ToString()))
{
#region 条件筛选
//判断(天数/小时)条件
if (item.ConditionType != (int)EquationTypeEnum.InBetween)
{
if (item.ConditionType == (int)EquationTypeEnum.LessThan && dayOrHour < item.StartValue)
{
condition = item;
break;
}
if (item.ConditionType == (int)EquationTypeEnum.LessThanOrEqualTo && dayOrHour <= item.StartValue)
{
condition = item;
break;
}
if (item.ConditionType == (int)EquationTypeEnum.EqualTo && dayOrHour == item.StartValue)
{
condition = item;
break;
}
if (item.ConditionType == (int)EquationTypeEnum.GreaterThanOrEqualTo && dayOrHour >= item.StartValue)
{
condition = item;
break;
}
if (item.ConditionType == (int)EquationTypeEnum.GreaterThan && dayOrHour > item.StartValue)
{
condition = item;
break;
}
}
else
{
if (item.StartType == 1 && item.StartValue < dayOrHour && item.EndType == 1 && dayOrHour < item.EndValue)
{
condition = item;
break;
}
if (item.StartType == 1 && item.StartValue < dayOrHour && item.EndType == 2 && dayOrHour <= item.EndValue)
{
condition = item;
break;
}
if (item.StartType == 2 && dayOrHour >= item.StartValue && item.EndType == 1 && dayOrHour < item.EndValue)
{
condition = item;
break;
}
if (item.StartType == 2 && dayOrHour >= item.StartValue && item.EndType == 2 && dayOrHour <= item.EndValue)
{
condition = item;
break;
}
}
#endregion
}
}
else if (!string.IsNullOrWhiteSpace(item.AskforleaveType) && item.StartValue == null)//请假类型存在和(天数/小时)不存在
{
//判断请假类型
if (item.AskforleaveType.Contains(((int)askforleaveTypeEnum).ToString()))
{
condition = item;
break;
}
}
else if (string.IsNullOrWhiteSpace(item.AskforleaveType) && item.StartValue != null)//请假类型不存在和(天数/小时)存在
{
#region 条件筛选
//判断(天数/小时)条件
if (item.ConditionType != (int)EquationTypeEnum.InBetween)
{
if (item.ConditionType == (int)EquationTypeEnum.LessThan && dayOrHour < item.StartValue)
{
condition = item;
break;
}
if (item.ConditionType == (int)EquationTypeEnum.LessThanOrEqualTo && dayOrHour <= item.StartValue)
{
condition = item;
break;
}
if (item.ConditionType == (int)EquationTypeEnum.EqualTo && dayOrHour == item.StartValue)
{
condition = item;
break;
}
if (item.ConditionType == (int)EquationTypeEnum.GreaterThanOrEqualTo && dayOrHour >= item.StartValue)
{
condition = item;
break;
}
if (item.ConditionType == (int)EquationTypeEnum.GreaterThan && dayOrHour > item.StartValue)
{
condition = item;
break;
}
}
else
{
if (item.StartType == 1 && item.StartValue < dayOrHour && item.EndType == 1 && dayOrHour < item.EndValue)
{
condition = item;
break;
}
if (item.StartType == 1 && item.StartValue < dayOrHour && item.EndType == 2 && dayOrHour <= item.EndValue)
{
condition = item;
break;
}
if (item.StartType == 2 && dayOrHour >= item.StartValue && item.EndType == 1 && dayOrHour < item.EndValue)
{
condition = item;
break;
}
if (item.StartType == 2 && dayOrHour >= item.StartValue && item.EndType == 2 && dayOrHour <= item.EndValue)
{
condition = item;
break;
}
}
#endregion
}
}
return condition;
}
#endregion
#region 获取审核详情信息
///
/// 根据id获取请假数据
///
///
///
public Rb_Workflow_Askforleave_Extend GetAskforleaveModel(int Id)
{
return askforleaveRepository.GetModel(Id);
}
///
/// 根据id获取出差数据
///
///
///
public Rb_Workflow_Evection_Extend GetEvectionModel(int Id)
{
return wfEvectionRepository.GetModel(Id);
}
///
/// 根据id获取外出数据
///
///
///
public Rb_Workflow_GoOut_Extend GetGooutModel(int Id)
{
return wfGoOutRepository.GetModel(Id);
}
///
/// 根据id获取补卡数据
///
///
///
public Rb_Workflow_Reissuecard_Extend GetReissuecarModel(int Id)
{
return wfReissuecardRepository.GetModel(Id);
}
///
/// 通过工作流id 和 模版类型 获取审核记录
///
///
///
///
public List GetAuditRecordList(int WorkFlowId, int TemplateType)
{
List arList = auditRelevanceRepository.GetAuditRelevanceList(WorkFlowId, TemplateType);
List aurList = auditrecordRepository.GetAuditRecordList(WorkFlowId, TemplateType);
List RList = new List();
var arAuditList = arList.Where(x => x.Stauts == WFRrocessStatus.AuditNotThrough || x.Stauts == WFRrocessStatus.AuditThrough).OrderBy(x => x.Sort).ToList();
foreach (var item in arAuditList)
{
var RecordList = aurList.Where(x => x.AuditId == item.Id && (x.AuditStatus == WFRrocessStatus.AuditThrough || x.AuditStatus == WFRrocessStatus.AuditNotThrough)).ToList();
if (RecordList.Count > 0)
{//表示已经审核 或者 即将审核 或者 驳回的
item.AuditRecordList = RecordList;
RList.Add(item);
}
}
int NotThroughCount = arList.Where(x => x.Stauts == WFRrocessStatus.AuditNotThrough).Count();
if (NotThroughCount <= 0)//状态为审核中 或者已审核完毕
{
var listToAudit = arList.Where(x => x.Stauts == WFRrocessStatus.NotAudit && x.ToAuditId != "" && x.ToAuditId != null).OrderBy(x => x.Sort).ToList();
if (listToAudit.Count > 0)
{
var ToAuditModel = listToAudit[0];//获取当前审核
string ToauditId = ToAuditModel.ToAuditId;//获取该流程所有的审核人;
if (string.IsNullOrWhiteSpace(ToauditId))
{//暂无审核人
var rlist = new List();
Rb_Workflow_Auditrecord_Extend arm = new Rb_Workflow_Auditrecord_Extend()
{
AuditEmId = 0,
AuditEmName = "暂无审核人",
AuditEmPhoto = "",
AuditStatus = WFRrocessStatus.Rejected,
Description = "",
Image = "[]",
UpdateTime = DateTime.Now,
CareOfRemarks = ""
};
rlist.Add(arm);
ToAuditModel.AuditRecordList = rlist;
}
else
{
//获取到所有的待审核人
List ToAuditList = JsonConvert.DeserializeObject>("[" + ToauditId + "]");
var RecordList = aurList.Where(x => x.AuditId == ToAuditModel.Id && (x.AuditStatus == WFRrocessStatus.AuditThrough || x.AuditStatus == WFRrocessStatus.AuditNotThrough || x.AuditStatus == WFRrocessStatus.NotAudit)).ToList();
foreach (int auid in ToAuditList)
{
var rcountList = RecordList.Where(x => x.AuditEmId == auid).ToList();
if (rcountList.Count <= 0)
{
var emodel = accountRepository.GetEmployeeInfo(auid);
if (emodel != null)
{
Rb_Workflow_Auditrecord_Extend arm = new Rb_Workflow_Auditrecord_Extend()
{
AuditEmId = emodel.Id,
AuditEmName = emodel.EmployeeName,
AuditEmPhoto = emodel.UserIcon,
AuditStatus = WFRrocessStatus.NotAudit,
Description = "",
Image = "[]",
UpdateTime = DateTime.Now,
CareOfRemarks = ""
};
RecordList.Add(arm);
}
else
{
Rb_Workflow_Auditrecord_Extend arm = new Rb_Workflow_Auditrecord_Extend()
{
AuditEmId = 0,
AuditEmName = "审核人不存在",
AuditEmPhoto = "",
AuditStatus = WFRrocessStatus.Rejected,
Description = "",
Image = "[]",
UpdateTime = DateTime.Now,
CareOfRemarks = ""
};
RecordList.Add(arm);
}
}
}
ToAuditModel.AuditRecordList = RecordList;
}
RList.Add(ToAuditModel);
}
}
return RList;
}
///
/// 获取抄送人列表
///
///
///
///
public List GetCopyToPeopleList(int WorkFlowId, int TemplateType)
{
return copyToPeopleRepository.GetCopyToPeopleList(WorkFlowId, TemplateType);
}
///
/// 获取该申请单下的所有审核步骤
///
///
///
///
public List GetRelevanceForAuditList(int WorkFlowId, int TemplateType)
{
return auditRelevanceRepository.GetAuditRelevanceList(WorkFlowId, TemplateType);
}
///
/// 获取该申请单下所有的审核详情
///
///
///
///
public List GetRecordForAuditList(int WorkFlowId, int TemplateType)
{
return auditrecordRepository.GetAuditRecordList(WorkFlowId, TemplateType);
}
///
/// 获取出差下的所有行程
///
///
///
public List GetTravelListForEvection(int EveId)
{
return wfTravelRepository.GetTravelListForEvection(EveId);
}
///
/// 审核 同意
///
///
///
///
///
///
///
public ApiResult SetConsent(int WorkFlowId, int TemplateType, int empId, string Description, string ImageStr)
{
var trans = wfReissuecardRepository.DbTransaction;
try
{
List AuditAccountList = new List();
List CopyAccountList = new List();
//图片处理
if (!string.IsNullOrWhiteSpace(ImageStr) && ImageStr != "[]")
{
List imgList = new List();
ImageOperation(JsonConvert.DeserializeObject(ImageStr), out imgList);
ImageStr = JsonConvert.SerializeObject(imgList);
}
//首先更改 审核关联 审核记录
List arList = auditRelevanceRepository.GetAuditRelevanceList(WorkFlowId, TemplateType);
List aurList = auditrecordRepository.GetAuditRecordList(WorkFlowId, TemplateType);
//找出当前审核
int Notcount = arList.Where(x => x.Stauts == WFRrocessStatus.AuditNotThrough).Count();
if (Notcount > 0)
{
wfReissuecardRepository.DBSession.Commit();
return ApiResult.Failed("该申请单已被拒绝!");
}
var ToAuditFlow = arList.Where(x => x.Stauts == WFRrocessStatus.NotAudit).OrderBy(x => x.Sort).ToList();
if (ToAuditFlow.Count <= 0)
{
wfReissuecardRepository.DBSession.Commit();
return ApiResult.Failed("该申请单审核已经完结!");
}
if (ToAuditFlow.Count == 1)//目前审核为最后一步 --------------------------------还需要有更新打卡记录表 抄送人状态更新
{
var model = ToAuditFlow[0];
var RecordList = aurList.Where(x => x.AuditId == model.Id).ToList();
if (model.AuditWay == WFTAuditWayEnum.Countersign)
{//会签 所有人必须审核完该流程才算完成
var amodel = RecordList.Where(x => x.AuditStatus == WFRrocessStatus.NotAudit && x.AuditEmId == empId).FirstOrDefault();
if (amodel == null)
{
wfReissuecardRepository.DBSession.Commit();
return ApiResult.Failed("尚未匹配到审核相关信息,请联系管理员!");
}
#region 更新审核记录表状态
IDictionary fileds = new Dictionary
{
{ nameof(Rb_Workflow_Auditrecord.AuditStatus), WFRrocessStatus.AuditThrough },
{ nameof(Rb_Workflow_Auditrecord.Description),Description}
,{ nameof(Rb_Workflow_Auditrecord.Image),ImageStr}
,{ nameof(Rb_Workflow_Auditrecord.UpdateTime),DateTime.Now}
};
IList whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Auditrecord.Id),
FiledValue = amodel.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditrecordRepository.Update(fileds, whereHelpers, trans);
#endregion
int AuditCount = RecordList.Where(x => x.AuditStatus == WFRrocessStatus.NotAudit && x.AuditEmId != empId).Count();
if (AuditCount <= 0)//表示最后一个人就是子集审核 申请单 通过
{
//同时 修改 审核记录状态 审核流程
model.Stauts = WFRrocessStatus.AuditThrough;
if (!string.IsNullOrWhiteSpace(model.AuditedId))
{
model.AuditedId += "," + empId;
}
else
{
model.AuditedId = empId.ToString();
}
#region 更新审核关联表状态
fileds = new Dictionary
{
{ nameof(Rb_Workflow_AuditRelevance.Stauts), model.Stauts },
{ nameof(Rb_Workflow_AuditRelevance.AuditedId), model.AuditedId },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_AuditRelevance.Id),
FiledValue = model.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditRelevanceRepository.Update(fileds, whereHelpers, trans);
#endregion
switch (TemplateType)
{
case (int)WFTTemplateTypeEnum.AskForLeave://修改请假申请状态
fileds = new Dictionary
{
{ nameof(Rb_Workflow_Askforleave.Status), UserWFAuditStatus.Through },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Askforleave.Id),
FiledValue = WorkFlowId,
OperatorEnum = OperatorEnum.Equal
}
};
askforleaveRepository.Update(fileds, whereHelpers, trans);
break;
case (int)WFTTemplateTypeEnum.Evection:
fileds = new Dictionary
{
{ nameof(Rb_Workflow_Evection.Status), UserWFAuditStatus.Through },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Evection.Id),
FiledValue = WorkFlowId,
OperatorEnum = OperatorEnum.Equal
}
};
wfEvectionRepository.Update(fileds, whereHelpers, trans);
break;
case (int)WFTTemplateTypeEnum.Goout:
fileds = new Dictionary
{
{ nameof(Rb_Workflow_GoOut.Status), UserWFAuditStatus.Through },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_GoOut.Id),
FiledValue = WorkFlowId,
OperatorEnum = OperatorEnum.Equal
}
};
wfGoOutRepository.Update(fileds, whereHelpers, trans);
break;
case (int)WFTTemplateTypeEnum.ReissueCard:
fileds = new Dictionary
{
{ nameof(Rb_Workflow_Reissuecard.Status), UserWFAuditStatus.Through },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Reissuecard.Id),
FiledValue = WorkFlowId,
OperatorEnum = OperatorEnum.Equal
}
};
wfReissuecardRepository.Update(fileds, whereHelpers, trans);
break;
}
}
else
{
//同时 修改 审核记录状态 审核流程
model.Stauts = WFRrocessStatus.AuditThrough;
if (!string.IsNullOrWhiteSpace(model.AuditedId))
{
model.AuditedId += "," + empId;
}
else
{
model.AuditedId = empId.ToString();
}
#region 更新审核关联表状态
fileds = new Dictionary
{
{ nameof(Rb_Workflow_AuditRelevance.AuditedId), model.AuditedId },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_AuditRelevance.Id),
FiledValue = model.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditRelevanceRepository.Update(fileds, whereHelpers, trans);
#endregion
}
}
else if (model.AuditWay == WFTAuditWayEnum.OrSign)
{
var amodel = RecordList.Where(x => x.AuditStatus == WFRrocessStatus.NotAudit && x.AuditEmId == empId).FirstOrDefault();
if (amodel == null)
{
wfReissuecardRepository.DBSession.Commit();
return ApiResult.Failed("尚未匹配到审核相关信息,请联系管理员!");
}
//同时 修改 审核记录状态 审核流程
model.Stauts = WFRrocessStatus.AuditThrough;
if (!string.IsNullOrWhiteSpace(model.AuditedId))
{
model.AuditedId += "," + empId;
}
else
{
model.AuditedId = empId.ToString();
}
#region 更新审核记录表状态
IDictionary fileds = new Dictionary
{
{ nameof(Rb_Workflow_Auditrecord.AuditStatus), WFRrocessStatus.AuditThrough },
{ nameof(Rb_Workflow_Auditrecord.Description),Description}
,{ nameof(Rb_Workflow_Auditrecord.Image),ImageStr}
,{ nameof(Rb_Workflow_Auditrecord.UpdateTime),DateTime.Now}
};
IList whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Auditrecord.Id),
FiledValue = amodel.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditrecordRepository.Update(fileds, whereHelpers, trans);
#endregion
#region 更新审核关联表状态
fileds = new Dictionary
{
{ nameof(Rb_Workflow_AuditRelevance.Stauts), model.Stauts },
{ nameof(Rb_Workflow_AuditRelevance.AuditedId), model.AuditedId },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_AuditRelevance.Id),
FiledValue = model.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditRelevanceRepository.Update(fileds, whereHelpers, trans);
#endregion
var list = RecordList.Where(x => x.AuditStatus == WFRrocessStatus.NotAudit && x.AuditEmId != empId).ToList();
int AuditCount = list.Count();
if (AuditCount > 0)//表示最后一个人就是子集审核 申请单 通过
{
foreach (var item in list)
{
fileds = new Dictionary
{
{ nameof(Rb_Workflow_Auditrecord.AuditStatus), WFRrocessStatus.OtherHaveAudit },
{ nameof(Rb_Workflow_Auditrecord.Description),Description}
,{ nameof(Rb_Workflow_Auditrecord.Image),ImageStr}
,{ nameof(Rb_Workflow_Auditrecord.UpdateTime),DateTime.Now}
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Auditrecord.Id),
FiledValue = item.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditrecordRepository.Update(fileds, whereHelpers, trans);
}
}
switch (TemplateType)
{
case (int)WFTTemplateTypeEnum.AskForLeave://修改请假申请状态
fileds = new Dictionary
{
{ nameof(Rb_Workflow_Askforleave.Status), UserWFAuditStatus.Through },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Askforleave.Id),
FiledValue = WorkFlowId,
OperatorEnum = OperatorEnum.Equal
}
};
askforleaveRepository.Update(fileds, whereHelpers, trans);
break;
case (int)WFTTemplateTypeEnum.Evection:
fileds = new Dictionary
{
{ nameof(Rb_Workflow_Evection.Status), UserWFAuditStatus.Through },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Evection.Id),
FiledValue = WorkFlowId,
OperatorEnum = OperatorEnum.Equal
}
};
wfEvectionRepository.Update(fileds, whereHelpers, trans);
break;
case (int)WFTTemplateTypeEnum.Goout:
fileds = new Dictionary
{
{ nameof(Rb_Workflow_GoOut.Status), UserWFAuditStatus.Through },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_GoOut.Id),
FiledValue = WorkFlowId,
OperatorEnum = OperatorEnum.Equal
}
};
wfGoOutRepository.Update(fileds, whereHelpers, trans);
break;
case (int)WFTTemplateTypeEnum.ReissueCard:
fileds = new Dictionary
{
{ nameof(Rb_Workflow_Reissuecard.Status), UserWFAuditStatus.Through },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Reissuecard.Id),
FiledValue = WorkFlowId,
OperatorEnum = OperatorEnum.Equal
}
};
wfReissuecardRepository.Update(fileds, whereHelpers, trans);
break;
}
}
else
{
var amodel = RecordList.Where(x => x.AuditStatus == WFRrocessStatus.NotAudit && x.AuditEmId == empId).FirstOrDefault();
if (amodel == null)
{
wfReissuecardRepository.DBSession.Commit();
return ApiResult.Failed("尚未匹配到审核相关信息,请联系管理员!");
}
var list = RecordList.Where(x => x.AuditStatus == WFRrocessStatus.NotAudit && x.AuditEmId != empId).ToList();
int AuditCount = list.Count();
if (AuditCount > 0)
{
wfReissuecardRepository.DBSession.Commit();
return ApiResult.Failed("流程配置出错啦!非会签,或签 都只能有一个审核人!");
}
//同时 修改 审核记录状态 审核流程
model.Stauts = WFRrocessStatus.AuditThrough;
if (!string.IsNullOrWhiteSpace(model.AuditedId))
{
model.AuditedId += "," + empId;
}
else
{
model.AuditedId = empId.ToString();
}
#region 更新审核记录表状态
IDictionary fileds = new Dictionary
{
{ nameof(Rb_Workflow_Auditrecord.AuditStatus), WFRrocessStatus.AuditThrough },
{ nameof(Rb_Workflow_Auditrecord.Description),Description}
,{ nameof(Rb_Workflow_Auditrecord.Image),ImageStr}
,{ nameof(Rb_Workflow_Auditrecord.UpdateTime),DateTime.Now}
};
IList whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Auditrecord.Id),
FiledValue = amodel.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditrecordRepository.Update(fileds, whereHelpers, trans);
#endregion
#region 更新审核关联表状态
fileds = new Dictionary
{
{ nameof(Rb_Workflow_AuditRelevance.Stauts), model.Stauts },
{ nameof(Rb_Workflow_AuditRelevance.AuditedId), model.AuditedId },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_AuditRelevance.Id),
FiledValue = model.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditRelevanceRepository.Update(fileds, whereHelpers, trans);
#endregion
switch (TemplateType)
{
case (int)WFTTemplateTypeEnum.AskForLeave://修改请假申请状态
fileds = new Dictionary
{
{ nameof(Rb_Workflow_Askforleave.Status), UserWFAuditStatus.Through },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Askforleave.Id),
FiledValue = WorkFlowId,
OperatorEnum = OperatorEnum.Equal
}
};
askforleaveRepository.Update(fileds, whereHelpers, trans);
break;
case (int)WFTTemplateTypeEnum.Evection:
fileds = new Dictionary
{
{ nameof(Rb_Workflow_Evection.Status), UserWFAuditStatus.Through },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Evection.Id),
FiledValue = WorkFlowId,
OperatorEnum = OperatorEnum.Equal
}
};
wfEvectionRepository.Update(fileds, whereHelpers, trans);
break;
case (int)WFTTemplateTypeEnum.Goout:
fileds = new Dictionary
{
{ nameof(Rb_Workflow_GoOut.Status), UserWFAuditStatus.Through },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_GoOut.Id),
FiledValue = WorkFlowId,
OperatorEnum = OperatorEnum.Equal
}
};
wfGoOutRepository.Update(fileds, whereHelpers, trans);
break;
case (int)WFTTemplateTypeEnum.ReissueCard:
fileds = new Dictionary
{
{ nameof(Rb_Workflow_Reissuecard.Status), UserWFAuditStatus.Through },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Reissuecard.Id),
FiledValue = WorkFlowId,
OperatorEnum = OperatorEnum.Equal
}
};
wfReissuecardRepository.Update(fileds, whereHelpers, trans);
break;
}
}
//更新打卡记录表
string Rmsg = UpdateAttendanceRecord(WorkFlowId, TemplateType, empId, trans);
if (Rmsg != "")
{
wfReissuecardRepository.DBSession.Rollback("SetConsent");
return ApiResult.Failed(Rmsg);
}
//更新抄送人状态
var CopyToPeopleList = copyToPeopleRepository.GetCopyToPeopleList(WorkFlowId, TemplateType);
foreach (var item in CopyToPeopleList)
{
item.Stauts = WFRrocessStatus.AuditThrough;
}
CopyAccountList = CopyToPeopleList.Select(x => new EmAccoutIdModel { EmAccount = x.EmLoginMobile, EmployeeId = x.EmployeeId ?? 0 }).Distinct().ToList();
copyToPeopleRepository.UpdateBatch(CopyToPeopleList, trans);
}
else//同时创建下一步审核 复制审核人到审核关联表 创建审核记录表
{
var model = ToAuditFlow[0];
var RecordList = aurList.Where(x => x.AuditId == model.Id).ToList();
if (model.AuditWay == WFTAuditWayEnum.Countersign)
{//会签 所有人必须审核完该流程才算完成
var amodel = RecordList.Where(x => x.AuditStatus == WFRrocessStatus.NotAudit && x.AuditEmId == empId).FirstOrDefault();
if (amodel == null)
{
wfReissuecardRepository.DBSession.Commit();
return ApiResult.Failed("尚未匹配到审核相关信息,请联系管理员!");
}
//审核记录状态
#region 更新审核记录表状态
IDictionary fileds = new Dictionary
{
{ nameof(Rb_Workflow_Auditrecord.AuditStatus), WFRrocessStatus.AuditThrough },
{ nameof(Rb_Workflow_Auditrecord.Description),Description}
,{ nameof(Rb_Workflow_Auditrecord.Image),ImageStr}
,{ nameof(Rb_Workflow_Auditrecord.UpdateTime),DateTime.Now}
};
IList whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Auditrecord.Id),
FiledValue = amodel.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditrecordRepository.Update(fileds, whereHelpers, trans);
#endregion
int AuditCount = RecordList.Where(x => x.AuditStatus == WFRrocessStatus.NotAudit && x.AuditEmId != empId).Count();
if (AuditCount <= 0)//表示最后一个人就是子集审核 申请单 通过
{
//同时 修改 审核流程
model.Stauts = WFRrocessStatus.AuditThrough;
if (!string.IsNullOrWhiteSpace(model.AuditedId))
{
model.AuditedId += "," + empId;
}
else
{
model.AuditedId = empId.ToString();
}
#region 更新审核关联表状态
fileds = new Dictionary
{
{ nameof(Rb_Workflow_AuditRelevance.Stauts), model.Stauts },
{ nameof(Rb_Workflow_AuditRelevance.AuditedId), model.AuditedId },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_AuditRelevance.Id),
FiledValue = model.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditRelevanceRepository.Update(fileds, whereHelpers, trans);
#endregion
//赋值下一步到审核记录中 并更新这一步的待审核人
var modelNext = ToAuditFlow[1];
var flag = InsertAuditRelevanceNext(empId, WorkFlowId, (WFTTemplateTypeEnum)TemplateType, modelNext, trans, out AuditAccountList);
if (flag == false)
{
wfReissuecardRepository.DBSession.Rollback("SetConsent_22");
return ApiResult.Failed("审核流程不完整无法审核,请联系相关负责人!");
}
}
else
{
//同时 修改 审核流程
if (!string.IsNullOrWhiteSpace(model.AuditedId))
{
model.AuditedId += "," + empId;
}
else
{
model.AuditedId = empId.ToString();
}
#region 更新审核关联表状态
fileds = new Dictionary
{
{ nameof(Rb_Workflow_AuditRelevance.AuditedId), model.AuditedId },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_AuditRelevance.Id),
FiledValue = model.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditRelevanceRepository.Update(fileds, whereHelpers, trans);
#endregion
}
}
else if (model.AuditWay == WFTAuditWayEnum.OrSign)
{
var amodel = RecordList.Where(x => x.AuditStatus == WFRrocessStatus.NotAudit && x.AuditEmId == empId).FirstOrDefault();
if (amodel == null)
{
wfReissuecardRepository.DBSession.Commit();
return ApiResult.Failed("尚未匹配到审核相关信息,请联系管理员!");
}
//同时 修改 审核记录状态 审核流程
model.Stauts = WFRrocessStatus.AuditThrough;
if (!string.IsNullOrWhiteSpace(model.AuditedId))
{
model.AuditedId += "," + empId;
}
else
{
model.AuditedId = empId.ToString();
}
#region 更新审核记录表状态
IDictionary fileds = new Dictionary
{
{ nameof(Rb_Workflow_Auditrecord.AuditStatus), WFRrocessStatus.AuditThrough },
{ nameof(Rb_Workflow_Auditrecord.Description),Description}
,{ nameof(Rb_Workflow_Auditrecord.Image),ImageStr}
,{ nameof(Rb_Workflow_Auditrecord.UpdateTime),DateTime.Now}
};
IList whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Auditrecord.Id),
FiledValue = amodel.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditrecordRepository.Update(fileds, whereHelpers, trans);
#endregion
#region 更新审核关联表状态
fileds = new Dictionary
{
{ nameof(Rb_Workflow_AuditRelevance.Stauts), model.Stauts },
{ nameof(Rb_Workflow_AuditRelevance.AuditedId), model.AuditedId },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_AuditRelevance.Id),
FiledValue = model.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditRelevanceRepository.Update(fileds, whereHelpers, trans);
#endregion
var list = RecordList.Where(x => x.AuditStatus == WFRrocessStatus.NotAudit && x.AuditEmId != empId).ToList();
int AuditCount = list.Count();
if (AuditCount > 0)//表示最后一个人就是子集审核 申请单 通过
{
foreach (var item in list)
{
fileds = new Dictionary
{
{ nameof(Rb_Workflow_Auditrecord.AuditStatus), WFRrocessStatus.OtherHaveAudit },
{ nameof(Rb_Workflow_Auditrecord.Description),Description},
{ nameof(Rb_Workflow_Auditrecord.Image),ImageStr},
{ nameof(Rb_Workflow_Auditrecord.UpdateTime),DateTime.Now}
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Auditrecord.Id),
FiledValue = item.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditrecordRepository.Update(fileds, whereHelpers, trans);
}
}
//赋值下一步到审核记录中 并更新这一步的待审核人
var modelNext = ToAuditFlow[1];
var flag = InsertAuditRelevanceNext(empId, WorkFlowId, (WFTTemplateTypeEnum)TemplateType, modelNext, trans, out AuditAccountList);
if (flag == false)
{
wfReissuecardRepository.DBSession.Rollback("SetConsent");
return ApiResult.Failed("审核流程不完整无法审核,请联系相关负责人!");
}
}
else
{
var amodel = RecordList.Where(x => x.AuditStatus == WFRrocessStatus.NotAudit && x.AuditEmId == empId).FirstOrDefault();
if (amodel == null)
{
wfReissuecardRepository.DBSession.Commit();
return ApiResult.Failed("尚未匹配到审核相关信息,请联系管理员!");
}
var list = RecordList.Where(x => x.AuditStatus == WFRrocessStatus.NotAudit && x.AuditEmId != empId).ToList();
int AuditCount = list.Count();
if (AuditCount > 0)
{
wfReissuecardRepository.DBSession.Commit();
return ApiResult.Failed("流程配置出错啦!非会签、或签 都只能有一个审核人!");
}
//同时 修改 审核记录状态 审核流程
model.Stauts = WFRrocessStatus.AuditThrough;
if (!string.IsNullOrWhiteSpace(model.AuditedId))
{
model.AuditedId += "," + empId;
}
else
{
model.AuditedId = empId.ToString();
}
#region 更新审核记录表状态
IDictionary fileds = new Dictionary
{
{ nameof(Rb_Workflow_Auditrecord.AuditStatus), WFRrocessStatus.AuditThrough },
{ nameof(Rb_Workflow_Auditrecord.Description),Description}
,{ nameof(Rb_Workflow_Auditrecord.Image),ImageStr}
,{ nameof(Rb_Workflow_Auditrecord.UpdateTime),DateTime.Now}
};
IList whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Auditrecord.Id),
FiledValue = amodel.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditrecordRepository.Update(fileds, whereHelpers, trans);
#endregion
#region 更新审核关联表状态
fileds = new Dictionary
{
{ nameof(Rb_Workflow_AuditRelevance.Stauts), model.Stauts },
{ nameof(Rb_Workflow_AuditRelevance.AuditedId), model.AuditedId },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_AuditRelevance.Id),
FiledValue = model.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditRelevanceRepository.Update(fileds, whereHelpers, trans);
#endregion
//赋值下一步到审核记录中 并更新这一步的待审核人
var modelNext = ToAuditFlow[1];
var flag = InsertAuditRelevanceNext(empId, WorkFlowId, (WFTTemplateTypeEnum)TemplateType, modelNext, trans, out AuditAccountList);
if (flag == false)
{
wfReissuecardRepository.DBSession.Rollback("SetConsent");
return ApiResult.Failed("审核流程不完整无法审核,请联系相关负责人!");
}
}
}
wfReissuecardRepository.DBSession.Commit();
//发送推送信息
string EmAccout = "";
string EmName = "";
string AskforName = "";
int EmId = 0;
switch (TemplateType)
{
case (int)WFTTemplateTypeEnum.AskForLeave://修改请假申请状态
var askm = askforleaveRepository.GetModel(WorkFlowId);
EmAccout = askm.EmLoginMobile;
EmName = askm.EmName;
AskforName = "请假申请";
EmId = askm.CreateBy.Value;
break;
case (int)WFTTemplateTypeEnum.Evection:
var evem = wfEvectionRepository.GetModel(WorkFlowId);
EmAccout = evem.EmLoginMobile;
EmName = evem.EmName;
AskforName = "出差申请";
EmId = evem.CreateBy.Value;
break;
case (int)WFTTemplateTypeEnum.Goout:
var gooutm = wfGoOutRepository.GetModel(WorkFlowId);
EmAccout = gooutm.EmLoginMobile;
EmName = gooutm.EmName;
AskforName = "外出申请";
EmId = gooutm.CreateBy.Value;
break;
case (int)WFTTemplateTypeEnum.ReissueCard:
var reim = wfReissuecardRepository.GetModel(WorkFlowId);
EmAccout = reim.EmLoginMobile;
EmName = reim.EmName;
AskforName = "补卡申请";
EmId = reim.CreateBy.Value;
break;
}
List EmNameList = new List() { new EmAccoutIdModel { EmAccount = EmAccout, EmployeeId = EmId } };
if (ToAuditFlow.Count == 1)
{//审批完成
PushAuditMessage(EmNameList, WorkFlowId, (WFTTemplateTypeEnum)TemplateType, $@"您的{AskforName}已完成!", "审批完成", empId, SysTemPushTypeEnum.Audit);
//抄送人通知
PushAuditMessage(CopyAccountList, WorkFlowId, (WFTTemplateTypeEnum)TemplateType, $@"{EmName}发起{AskforName}抄送通知!", "抄送通知", empId, SysTemPushTypeEnum.Audit);
//所有审核人
AuditAccountList = aurList.Where(x => x.AuditStatus == WFRrocessStatus.AuditThrough && x.AuditEmId != empId).Select(x => new EmAccoutIdModel() { EmAccount = x.EmLoginMobile, EmployeeId = x.AuditEmId ?? 0 }).Distinct().ToList();
PushAuditMessage(AuditAccountList, WorkFlowId, (WFTTemplateTypeEnum)TemplateType, $@"您参与{EmName}发起{AskforName}审核已完成!", "审核完成通知", empId, SysTemPushTypeEnum.Audit);
}
else
{//审批通过
PushAuditMessage(EmNameList, WorkFlowId, (WFTTemplateTypeEnum)TemplateType, $@"您的{AskforName}已被{(accountRepository.GetEmployeeInfo(empId)?.EmployeeName ?? "")}审批通过!", "审批通过", empId, SysTemPushTypeEnum.Audit);
//下级审核人通知
PushAuditMessage(AuditAccountList, WorkFlowId, (WFTTemplateTypeEnum)TemplateType, $@"{EmName}发起{AskforName},请尽快审批", "审核通知", empId, SysTemPushTypeEnum.Audit);
}
return ApiResult.Success("审核成功!");
}
catch (Exception ex)
{
LogHelper.Write(ex, string.Format("UserModule_SetConsent:WorkFlowId:{0},TemplateType:{1},empId:{2},Description:{3},ImageStr:{4}", WorkFlowId, TemplateType, empId, Description, ImageStr));
wfReissuecardRepository.DBSession.Rollback("UserModule_SetConsent");
return ApiResult.Failed("申请提交失败");
}
}
///
/// 更新打卡记录
///
///
///
///
///
private string UpdateAttendanceRecord(int WorkFlowId, int TemplateType, int empId, System.Data.IDbTransaction trans)
{
string StartTime = "", EndTime = "";
bool IsStartMorning = true, IsEndMorning = true;
List ARecordList = new List();
switch (TemplateType)
{
case (int)WFTTemplateTypeEnum.AskForLeave:
Rb_Workflow_Askforleave_Extend askmodel = GetAskforleaveModel(WorkFlowId);
StartTime = askmodel.StartTime.Value.ToString("yyyy-MM-dd");
EndTime = askmodel.EndTime.Value.ToString("yyyy-MM-dd");
//true 上午 false 下午
IsStartMorning = DateTime.Compare(askmodel.StartTime.Value, Convert.ToDateTime(StartTime + " 13:00")) < 0;
IsEndMorning = DateTime.Compare(askmodel.EndTime.Value, Convert.ToDateTime(EndTime + " 13:00")) <= 0;
//查询出所有在请假范围里的打卡记录表
ARecordList = RecordRepository.GetAttendanceRecordForTimeList(StartTime, EndTime, askmodel.CreateBy.Value);
double AnnualNum = 0;
Employee_ViewModel emodel = new Employee_ViewModel();
if (askmodel.AskforleaveType == AskforleaveTypeEnum.AnnualLeave)
{
emodel = accountRepository.GetEmployeeInfo(askmodel.CreateBy ?? 0);
string startT = askmodel.StartTime.Value.ToString("yyyy-MM-dd");
string endT = askmodel.EndTime.Value.ToString("yyyy-MM-dd");
TimeSpan span = Convert.ToDateTime(endT) - Convert.ToDateTime(startT);
AnnualNum = span.Days + 1 - GetTimeSpanDays(askmodel.CreateBy ?? 0, askmodel.StartTime.Value, askmodel.EndTime.Value);
if (askmodel.IsCancel == WFAuditCancelStatus.Normal && emodel.AnnualLeaveDay < AnnualNum)
{
return "年假的天数不够!";
}
}
if (askmodel.IsCancel == WFAuditCancelStatus.Cancel)//回滚以前的数据
{
if (ARecordList.Count > 0)
{
int num = 0;
foreach (var item in ARecordList)
{
List listH = new List();
if (!string.IsNullOrEmpty(item.History))
{
listH = JsonConvert.DeserializeObject>(item.History);
listH = listH.Where(x => x.WorkFlowId == WorkFlowId && x.TemplateType == TemplateType).OrderByDescending(x => x.Date).ToList();
}
if (listH.Count > 0)
{//有可用的撤回
var Hmodel = listH[0];
num++;
if (num == 1)
{
if (IsStartMorning == IsEndMorning && IsStartMorning)
{
item.BeOnStatus = Hmodel.BeOnStatus;
item.BeOnRelevance = Hmodel.BeOnRelevance;
item.BeOnRelevanceType = Hmodel.BeOnRelevanceType;
}
else if (IsStartMorning != IsEndMorning && IsStartMorning)
{//上午
item.BeOnStatus = Hmodel.BeOnStatus;
item.OffStatus = Hmodel.OffStatus;
item.BeOnRelevance = Hmodel.BeOnRelevance;
item.BeOnRelevanceType = Hmodel.BeOnRelevanceType;
item.OffRelevance = Hmodel.OffRelevance;
item.OffRelevanceType = Hmodel.OffRelevanceType;
}
else
{
item.OffStatus = Hmodel.OffStatus;
item.OffRelevance = Hmodel.OffRelevance;
item.OffRelevanceType = Hmodel.OffRelevanceType;
}
}
else if (num == ARecordList.Count)
{
if (IsEndMorning)
{//上午
item.BeOnStatus = Hmodel.BeOnStatus;
item.BeOnRelevance = Hmodel.BeOnRelevance;
item.BeOnRelevanceType = Hmodel.BeOnRelevanceType;
}
else
{
item.BeOnStatus = Hmodel.BeOnStatus;
item.OffStatus = Hmodel.OffStatus;
item.BeOnRelevance = Hmodel.BeOnRelevance;
item.BeOnRelevanceType = Hmodel.BeOnRelevanceType;
item.OffRelevance = Hmodel.OffRelevance;
item.OffRelevanceType = Hmodel.OffRelevanceType;
}
}
else
{
item.BeOnStatus = Hmodel.BeOnStatus;
item.OffStatus = Hmodel.OffStatus;
item.BeOnRelevance = Hmodel.BeOnRelevance;
item.BeOnRelevanceType = Hmodel.BeOnRelevanceType;
item.OffRelevance = Hmodel.OffRelevance;
item.OffRelevanceType = Hmodel.OffRelevanceType;
}
}
else
{
num++;
if (num == 1)
{
if (IsStartMorning == IsEndMorning && IsStartMorning)
{
item.BeOnStatus = AttendanceEnum.QK;
item.BeOnRelevance = null;
item.BeOnRelevanceType = null;
}
else if (IsStartMorning != IsEndMorning && IsStartMorning)
{//上午
item.BeOnStatus = AttendanceEnum.QK;
item.OffStatus = AttendanceEnum.QK;
item.BeOnRelevance = null;
item.BeOnRelevanceType = null;
item.OffRelevance = null;
item.OffRelevanceType = null;
}
else
{
item.OffStatus = AttendanceEnum.QK;
item.OffRelevance = null;
item.OffRelevanceType = null;
}
}
else if (num == ARecordList.Count)
{
if (IsEndMorning)
{//上午
item.BeOnStatus = AttendanceEnum.QK;
item.BeOnRelevance = null;
item.BeOnRelevanceType = null;
}
else
{
item.BeOnStatus = AttendanceEnum.QK;
item.OffStatus = AttendanceEnum.QK;
item.BeOnRelevance = null;
item.BeOnRelevanceType = null;
item.OffRelevance = null;
item.OffRelevanceType = null;
}
}
else
{
item.BeOnStatus = AttendanceEnum.QK;
item.OffStatus = AttendanceEnum.QK;
item.BeOnRelevance = null;
item.BeOnRelevanceType = null;
item.OffRelevance = null;
item.OffRelevanceType = null;
}
}
}
RecordRepository.UpdateBatch(ARecordList, trans);
}
//同时回滚每月请假时长表
if (askmodel.AskforleaveType == AskforleaveTypeEnum.AffairLeave || askmodel.AskforleaveType == AskforleaveTypeEnum.AnnualLeave || askmodel.AskforleaveType == AskforleaveTypeEnum.SickLeave)
{
if (askmodel.StartTime.Value.ToString("yyyy-MM") == askmodel.EndTime.Value.ToString("yyyy-MM"))
{
//请假在一个月里 直接操作加
var LTmodel = attendance_LeaveTimeRepository.Get(askmodel.CreateBy.Value, askmodel.StartTime.Value.ToString("yyyy-MM"), (int)askmodel.AskforleaveType);
if (LTmodel != null)
{
List LTHList = JsonConvert.DeserializeObject>(LTmodel.History);
var lthmodel = LTHList.Where(x => x.WorkFlowId == askmodel.Id).FirstOrDefault();
if (lthmodel != null)
{
LTmodel.Duration -= lthmodel.Duration;
LTHList.Remove(lthmodel);
LTmodel.History = JsonConvert.SerializeObject(LTHList);
attendance_LeaveTimeRepository.Update(LTmodel);
}
}
}
else
{
int num = 1;
while (true)
{
if (askmodel.StartTime.Value.AddMonths(num).ToString("yyyy-MM") == askmodel.EndTime.Value.ToString("yyyy-MM"))
{
var LTmodel = attendance_LeaveTimeRepository.Get(askmodel.CreateBy.Value, askmodel.StartTime.Value.AddMonths(num - 1).ToString("yyyy-MM"), (int)askmodel.AskforleaveType);
if (LTmodel != null)
{
List LTHList = JsonConvert.DeserializeObject>(LTmodel.History);
var lthmodel = LTHList.Where(x => x.WorkFlowId == askmodel.Id).FirstOrDefault();
if (lthmodel != null)
{
LTmodel.Duration -= lthmodel.Duration;
LTHList.Remove(lthmodel);
LTmodel.History = JsonConvert.SerializeObject(LTHList);
attendance_LeaveTimeRepository.Update(LTmodel);
}
}
LTmodel = attendance_LeaveTimeRepository.Get(askmodel.CreateBy.Value, askmodel.StartTime.Value.AddMonths(num).ToString("yyyy-MM"), (int)askmodel.AskforleaveType);
if (LTmodel != null)
{
List LTHList = JsonConvert.DeserializeObject>(LTmodel.History);
var lthmodel = LTHList.Where(x => x.WorkFlowId == askmodel.Id).FirstOrDefault();
if (lthmodel != null)
{
LTmodel.Duration -= lthmodel.Duration;
LTHList.Remove(lthmodel);
LTmodel.History = JsonConvert.SerializeObject(LTHList);
attendance_LeaveTimeRepository.Update(LTmodel);
}
}
break;
}
else
{
var LTmodel = attendance_LeaveTimeRepository.Get(askmodel.CreateBy.Value, askmodel.StartTime.Value.AddMonths(num - 1).ToString("yyyy-MM"), (int)askmodel.AskforleaveType);
if (LTmodel != null)
{
List LTHList = JsonConvert.DeserializeObject>(LTmodel.History);
var lthmodel = LTHList.Where(x => x.WorkFlowId == askmodel.Id).FirstOrDefault();
if (lthmodel != null)
{
LTmodel.Duration -= lthmodel.Duration;
LTHList.Remove(lthmodel);
LTmodel.History = JsonConvert.SerializeObject(LTHList);
attendance_LeaveTimeRepository.Update(LTmodel);
}
}
}
num++;
}
}
}
if (askmodel.AskforleaveType == AskforleaveTypeEnum.AnnualLeave && emodel != null)
{
emodel.AnnualLeaveDay += AnnualNum;
Dictionary keyValues = new Dictionary() {
{ nameof(RB_Account.AnnualLeaveDay),emodel.AnnualLeaveDay}
};
List wheres = new List() {
new WhereHelper(){
FiledName=nameof(RB_Account.Id),
FiledValue=emodel.Id,
OperatorEnum=OperatorEnum.Equal
}
};
accountRepository.Update(keyValues, wheres, trans);
}
}
else
{
if (ARecordList.Count > 0)
{
int num = 0;
foreach (var item in ARecordList)
{
#region//新增历史记录
var listH = new List();
var Nmodel = item.RefMapperTo();
Nmodel.TemplateType = TemplateType;
Nmodel.WorkFlowId = WorkFlowId;
Nmodel.Date = DateTime.Now;
if (!string.IsNullOrWhiteSpace(item.History))
{//继续追加
listH = JsonConvert.DeserializeObject>(item.History);
}
listH.Add(Nmodel);
string History = JsonConvert.SerializeObject(listH.Select(x => new
{
x.BeOnDutyTime,
x.BeOnStatus,
x.OffStatus,
x.OffDutyTime,
x.Date,
x.TemplateType,
x.WorkFlowId,
x.BeOnRelevance,
x.BeOnRelevanceType,
x.OffRelevance,
x.OffRelevanceType
}));
item.History = History;
#endregion
num++;
if (num == 1)
{
if (IsStartMorning == IsEndMorning && IsStartMorning)
{
item.BeOnStatus = AttendanceEnum.QJ;
item.BeOnRelevance = askmodel.Id;
item.BeOnRelevanceType = (int)WFTTemplateTypeEnum.AskForLeave;
}
else if (IsStartMorning != IsEndMorning && IsStartMorning)
{//上午
item.BeOnStatus = AttendanceEnum.QJ;
item.OffStatus = AttendanceEnum.QJ;
item.BeOnRelevance = askmodel.Id;
item.BeOnRelevanceType = (int)WFTTemplateTypeEnum.AskForLeave;
item.OffRelevance = askmodel.Id;
item.OffRelevanceType = (int)WFTTemplateTypeEnum.AskForLeave;
}
else
{
item.OffStatus = AttendanceEnum.QJ;
item.OffRelevance = askmodel.Id;
item.OffRelevanceType = (int)WFTTemplateTypeEnum.AskForLeave;
}
}
else if (num == ARecordList.Count)
{
if (IsEndMorning)
{//上午
item.BeOnStatus = AttendanceEnum.QJ;
item.BeOnRelevance = askmodel.Id;
item.BeOnRelevanceType = (int)WFTTemplateTypeEnum.AskForLeave;
}
else
{
item.BeOnStatus = AttendanceEnum.QJ;
item.OffStatus = AttendanceEnum.QJ;
item.BeOnRelevance = askmodel.Id;
item.BeOnRelevanceType = (int)WFTTemplateTypeEnum.AskForLeave;
item.OffRelevance = askmodel.Id;
item.OffRelevanceType = (int)WFTTemplateTypeEnum.AskForLeave;
}
}
else
{
item.BeOnStatus = AttendanceEnum.QJ;
item.OffStatus = AttendanceEnum.QJ;
item.BeOnRelevance = askmodel.Id;
item.BeOnRelevanceType = (int)WFTTemplateTypeEnum.AskForLeave;
item.OffRelevance = askmodel.Id;
item.OffRelevanceType = (int)WFTTemplateTypeEnum.AskForLeave;
}
}
RecordRepository.UpdateBatch(ARecordList, trans);
}
//同时更新每月请假时长表
if (askmodel.AskforleaveType == AskforleaveTypeEnum.AffairLeave || askmodel.AskforleaveType == AskforleaveTypeEnum.AnnualLeave || askmodel.AskforleaveType == AskforleaveTypeEnum.SickLeave)
{
if (askmodel.StartTime.Value.ToString("yyyy-MM") == askmodel.EndTime.Value.ToString("yyyy-MM"))
{
//请假在一个月里 直接操作加
var LTmodel = attendance_LeaveTimeRepository.Get(askmodel.CreateBy.Value, askmodel.StartTime.Value.ToString("yyyy-MM"), (int)askmodel.AskforleaveType);
if (LTmodel == null)
{//新增
RB_Attendance_LeaveTime ltm = new RB_Attendance_LeaveTime()
{
AskforleaveMonth = askmodel.StartTime.Value.ToString("yyyy-MM"),
AskforleaveType = (int)askmodel.AskforleaveType,
EmployeeId = askmodel.CreateBy.Value,
Duration = askmodel.Duration
};
LeaveTimeHistory lth = new LeaveTimeHistory()
{
Duration = askmodel.Duration,
WorkFlowId = askmodel.Id
};
List LTHList = new List
{
lth
};
ltm.History = JsonConvert.SerializeObject(LTHList);
attendance_LeaveTimeRepository.Insert(ltm);
}
else
{
LTmodel.Duration += askmodel.Duration;
List LTHList = JsonConvert.DeserializeObject>(LTmodel.History);
LeaveTimeHistory lth = new LeaveTimeHistory()
{
Duration = askmodel.Duration,
WorkFlowId = askmodel.Id
};
LTHList.Add(lth);
LTmodel.History = JsonConvert.SerializeObject(LTHList);
attendance_LeaveTimeRepository.Update(LTmodel);
}
}
else
{
int num = 1;
while (true)
{
if (askmodel.StartTime.Value.AddMonths(num).ToString("yyyy-MM") == askmodel.EndTime.Value.ToString("yyyy-MM"))
{
Double DNum1 = 0;
Double DNum2 = 0;
if (num == 1)
{//求出该月的请假时长
DNum1 = Convert.ToDouble(CalculateDuration(askmodel.CreateBy.Value, askmodel.TemplateId, askmodel.StartTime.Value, Convert.ToDateTime(askmodel.StartTime.Value.AddMonths(num).ToString("yyyy-MM") + "-01").AddSeconds(-1), askmodel.LunchTime));
}
else
{
DNum1 = Convert.ToDouble(CalculateDuration(askmodel.CreateBy.Value, askmodel.TemplateId, Convert.ToDateTime(askmodel.StartTime.Value.AddMonths(num - 1).ToString("yyyy-MM") + "-01"), Convert.ToDateTime(askmodel.StartTime.Value.AddMonths(num).ToString("yyyy-MM") + "-01").AddSeconds(-1), askmodel.LunchTime));
}
DNum2 = Convert.ToDouble(CalculateDuration(askmodel.CreateBy.Value, askmodel.TemplateId, Convert.ToDateTime(askmodel.EndTime.Value.ToString("yyyy-MM") + "-01"), askmodel.EndTime.Value, askmodel.LunchTime));
//请假在一个月里 直接操作加
LeaveTimeUpdate(askmodel, num, DNum1);
//最后一个月
LeaveTimeUpdate(askmodel, num, DNum2);
break;
}
else
{
Double DNum = 0;
if (num == 1)
{//求出该月的请假时长
DNum = Convert.ToDouble(CalculateDuration(askmodel.CreateBy.Value, askmodel.TemplateId, askmodel.StartTime.Value, Convert.ToDateTime(askmodel.StartTime.Value.AddMonths(1).ToString("yyyy-MM") + "-01").AddSeconds(-1), askmodel.LunchTime));
}
else
{
DNum = Convert.ToDouble(CalculateDuration(askmodel.CreateBy.Value, askmodel.TemplateId, Convert.ToDateTime(askmodel.StartTime.Value.AddMonths(num - 1).ToString("yyyy-MM") + "-01"), Convert.ToDateTime(askmodel.StartTime.Value.AddMonths(num).ToString("yyyy-MM") + "-01").AddSeconds(-1), askmodel.LunchTime));
}
//请假在一个月里 直接操作加
LeaveTimeUpdate(askmodel, num, DNum);
}
num++;
}
}
}
if (askmodel.AskforleaveType == AskforleaveTypeEnum.AnnualLeave && emodel != null)
{
emodel.AnnualLeaveDay -= AnnualNum;
Dictionary keyValues = new Dictionary() {
{ nameof(RB_Account.AnnualLeaveDay),emodel.AnnualLeaveDay}
};
List wheres = new List() {
new WhereHelper(){
FiledName=nameof(RB_Account.Id),
FiledValue=emodel.Id,
OperatorEnum=OperatorEnum.Equal
}
};
accountRepository.Update(keyValues, wheres, trans);
}
}
break;
case (int)WFTTemplateTypeEnum.Evection:
Rb_Workflow_Evection_Extend evemodel = GetEvectionModel(WorkFlowId);
List TravelList = wfTravelRepository.GetTravelList(WorkFlowId);
foreach (var trave in TravelList)
{
StartTime = trave.StartTime.Value.ToString("yyyy-MM-dd");
EndTime = trave.EndTime.Value.ToString("yyyy-MM-dd");
//true 上午 false 下午
IsStartMorning = DateTime.Compare(trave.StartTime.Value, Convert.ToDateTime(StartTime + " 13:00")) < 0;
IsEndMorning = DateTime.Compare(trave.EndTime.Value, Convert.ToDateTime(EndTime + " 13:00")) <= 0;
//查询出所有在出差范围里的打卡记录表
ARecordList = RecordRepository.GetAttendanceRecordForTimeList(StartTime, EndTime, evemodel.CreateBy.Value);
if (evemodel.IsCancel == WFAuditCancelStatus.Cancel)//回滚以前的数据
{
if (ARecordList.Count > 0)
{
int num = 0;
foreach (var item in ARecordList)
{
var listH = JsonConvert.DeserializeObject>(item.History);
listH = listH.Where(x => x.WorkFlowId == WorkFlowId && x.TemplateType == TemplateType).OrderByDescending(x => x.Date).ToList();
if (listH.Count > 0)
{//有可用的撤回
var Hmodel = listH[0];
num++;
if (num == 1)
{
if (IsStartMorning == IsEndMorning && IsStartMorning)
{
item.BeOnStatus = Hmodel.BeOnStatus;
item.BeOnRelevance = Hmodel.BeOnRelevance;
item.BeOnRelevanceType = Hmodel.BeOnRelevanceType;
}
else if (IsStartMorning != IsEndMorning && IsStartMorning)
{//上午
item.BeOnStatus = Hmodel.BeOnStatus;
item.OffStatus = Hmodel.OffStatus;
item.BeOnRelevance = Hmodel.BeOnRelevance;
item.BeOnRelevanceType = Hmodel.BeOnRelevanceType;
item.OffRelevance = Hmodel.OffRelevance;
item.OffRelevanceType = Hmodel.OffRelevanceType;
}
else
{
item.OffStatus = Hmodel.OffStatus;
item.OffRelevance = Hmodel.OffRelevance;
item.OffRelevanceType = Hmodel.OffRelevanceType;
}
}
else if (num == ARecordList.Count)
{
if (IsEndMorning)
{//上午
item.BeOnStatus = Hmodel.BeOnStatus;
item.BeOnRelevance = Hmodel.BeOnRelevance;
item.BeOnRelevanceType = Hmodel.BeOnRelevanceType;
}
else
{
item.BeOnStatus = Hmodel.BeOnStatus;
item.OffStatus = Hmodel.OffStatus;
item.BeOnRelevance = Hmodel.BeOnRelevance;
item.BeOnRelevanceType = Hmodel.BeOnRelevanceType;
item.OffRelevance = Hmodel.OffRelevance;
item.OffRelevanceType = Hmodel.OffRelevanceType;
}
}
else
{
item.BeOnStatus = Hmodel.BeOnStatus;
item.OffStatus = Hmodel.OffStatus;
item.BeOnRelevance = Hmodel.BeOnRelevance;
item.BeOnRelevanceType = Hmodel.BeOnRelevanceType;
item.OffRelevance = Hmodel.OffRelevance;
item.OffRelevanceType = Hmodel.OffRelevanceType;
}
}
else
{
num++;
if (num == 1)
{
if (IsStartMorning == IsEndMorning && IsStartMorning)
{
item.BeOnStatus = AttendanceEnum.QK;
item.BeOnRelevance = null;
item.BeOnRelevanceType = null;
}
else if (IsStartMorning != IsEndMorning && IsStartMorning)
{//上午
item.BeOnStatus = AttendanceEnum.QK;
item.OffStatus = AttendanceEnum.QK;
item.BeOnRelevance = null;
item.BeOnRelevanceType = null;
item.OffRelevance = null;
item.OffRelevanceType = null;
}
else
{
item.OffStatus = AttendanceEnum.QK;
item.OffRelevance = null;
item.OffRelevanceType = null;
}
}
else if (num == ARecordList.Count)
{
if (IsEndMorning)
{//上午
item.BeOnStatus = AttendanceEnum.QK;
item.BeOnRelevance = null;
item.BeOnRelevanceType = null;
}
else
{
item.BeOnStatus = AttendanceEnum.QK;
item.OffStatus = AttendanceEnum.QK;
item.BeOnRelevance = null;
item.BeOnRelevanceType = null;
item.OffRelevance = null;
item.OffRelevanceType = null;
}
}
else
{
item.BeOnStatus = AttendanceEnum.QK;
item.OffStatus = AttendanceEnum.QK;
item.BeOnRelevance = null;
item.BeOnRelevanceType = null;
item.OffRelevance = null;
item.OffRelevanceType = null;
}
}
}
RecordRepository.UpdateBatch(ARecordList, trans);
}
}
else
{
if (ARecordList.Count > 0)
{
int num = 0;
foreach (var item in ARecordList)
{
#region//新增历史记录
var listH = new List();
var Nmodel = item.RefMapperTo();
Nmodel.TemplateType = TemplateType;
Nmodel.WorkFlowId = WorkFlowId;
Nmodel.Date = DateTime.Now;
if (!string.IsNullOrWhiteSpace(item.History))
{//继续追加
listH = JsonConvert.DeserializeObject>(item.History);
}
listH.Add(Nmodel);
string History = JsonConvert.SerializeObject(listH.Select(x => new
{
x.BeOnDutyTime,
x.BeOnStatus,
x.OffStatus,
x.OffDutyTime,
x.Date,
x.TemplateType,
x.WorkFlowId,
x.BeOnRelevance,
x.BeOnRelevanceType,
x.OffRelevance,
x.OffRelevanceType
}));
item.History = History;
#endregion
num++;
if (num == 1)
{
if (IsStartMorning == IsEndMorning && IsStartMorning)
{
item.BeOnStatus = AttendanceEnum.CC;
item.BeOnRelevance = evemodel.Id;
item.BeOnRelevanceType = (int)WFTTemplateTypeEnum.Evection;
}
else if (IsStartMorning != IsEndMorning && IsStartMorning)
{//上午
item.BeOnStatus = AttendanceEnum.CC;
item.OffStatus = AttendanceEnum.CC;
item.BeOnRelevance = evemodel.Id;
item.BeOnRelevanceType = (int)WFTTemplateTypeEnum.Evection;
item.OffRelevance = evemodel.Id;
item.OffRelevanceType = (int)WFTTemplateTypeEnum.Evection;
}
else
{
item.OffStatus = AttendanceEnum.CC;
item.OffRelevance = evemodel.Id;
item.OffRelevanceType = (int)WFTTemplateTypeEnum.Evection;
}
}
else if (num == ARecordList.Count)
{
if (IsEndMorning)
{//上午
item.BeOnStatus = AttendanceEnum.CC;
item.BeOnRelevance = evemodel.Id;
item.BeOnRelevanceType = (int)WFTTemplateTypeEnum.Evection;
}
else
{
item.BeOnStatus = AttendanceEnum.CC;
item.OffStatus = AttendanceEnum.CC;
item.BeOnRelevance = evemodel.Id;
item.BeOnRelevanceType = (int)WFTTemplateTypeEnum.Evection;
item.OffRelevance = evemodel.Id;
item.OffRelevanceType = (int)WFTTemplateTypeEnum.Evection;
}
}
else
{
item.BeOnStatus = AttendanceEnum.CC;
item.OffStatus = AttendanceEnum.CC;
item.BeOnRelevance = evemodel.Id;
item.BeOnRelevanceType = (int)WFTTemplateTypeEnum.Evection;
item.OffRelevance = evemodel.Id;
item.OffRelevanceType = (int)WFTTemplateTypeEnum.Evection;
}
}
RecordRepository.UpdateBatch(ARecordList, trans);
}
}
}
break;
case (int)WFTTemplateTypeEnum.Goout:
Rb_Workflow_GoOut_Extend gooutmodel = GetGooutModel(WorkFlowId);
StartTime = gooutmodel.StartTime.Value.ToString("yyyy-MM-dd");
EndTime = gooutmodel.EndTime.Value.ToString("yyyy-MM-dd");
//true 上午 false 下午
IsStartMorning = DateTime.Compare(gooutmodel.StartTime.Value, Convert.ToDateTime(StartTime + " 13:00")) < 0;
IsEndMorning = DateTime.Compare(gooutmodel.EndTime.Value, Convert.ToDateTime(EndTime + " 13:00")) <= 0;
//查询出所有在出差范围里的打卡记录表
ARecordList = RecordRepository.GetAttendanceRecordForTimeList(StartTime, EndTime, gooutmodel.CreateBy.Value);
if (gooutmodel.IsCancel == WFAuditCancelStatus.Cancel)//回滚以前的数据
{
if (ARecordList.Count > 0)
{
int num = 0;
foreach (var item in ARecordList)
{
var listH = JsonConvert.DeserializeObject>(item.History);
listH = listH.Where(x => x.WorkFlowId == WorkFlowId && x.TemplateType == TemplateType).OrderByDescending(x => x.Date).ToList();
if (listH.Count > 0)
{//有可用的撤回
var Hmodel = listH[0];
num++;
if (num == 1)
{
if (IsStartMorning == IsEndMorning && IsStartMorning)
{
item.BeOnStatus = Hmodel.BeOnStatus;
item.BeOnRelevance = Hmodel.BeOnRelevance;
item.BeOnRelevanceType = Hmodel.BeOnRelevanceType;
}
else if (IsStartMorning != IsEndMorning && IsStartMorning)
{//上午
item.BeOnStatus = Hmodel.BeOnStatus;
item.OffStatus = Hmodel.OffStatus;
item.BeOnRelevance = Hmodel.BeOnRelevance;
item.BeOnRelevanceType = Hmodel.BeOnRelevanceType;
item.OffRelevance = Hmodel.OffRelevance;
item.OffRelevanceType = Hmodel.OffRelevanceType;
}
else
{
item.OffStatus = Hmodel.OffStatus;
item.OffRelevance = Hmodel.OffRelevance;
item.OffRelevanceType = Hmodel.OffRelevanceType;
}
}
else if (num == ARecordList.Count)
{
if (IsEndMorning)
{//上午
item.BeOnStatus = Hmodel.BeOnStatus;
item.BeOnRelevance = Hmodel.BeOnRelevance;
item.BeOnRelevanceType = Hmodel.BeOnRelevanceType;
}
else
{
item.BeOnStatus = Hmodel.BeOnStatus;
item.OffStatus = Hmodel.OffStatus;
item.BeOnRelevance = Hmodel.BeOnRelevance;
item.BeOnRelevanceType = Hmodel.BeOnRelevanceType;
item.OffRelevance = Hmodel.OffRelevance;
item.OffRelevanceType = Hmodel.OffRelevanceType;
}
}
else
{
item.BeOnStatus = Hmodel.BeOnStatus;
item.OffStatus = Hmodel.OffStatus;
item.BeOnRelevance = Hmodel.BeOnRelevance;
item.BeOnRelevanceType = Hmodel.BeOnRelevanceType;
item.OffRelevance = Hmodel.OffRelevance;
item.OffRelevanceType = Hmodel.OffRelevanceType;
}
}
else
{
num++;
if (num == 1)
{
if (IsStartMorning == IsEndMorning && IsStartMorning)
{
item.BeOnStatus = AttendanceEnum.QK;
item.BeOnRelevance = null;
item.BeOnRelevanceType = null;
}
else if (IsStartMorning != IsEndMorning && IsStartMorning)
{//上午
item.BeOnStatus = AttendanceEnum.QK;
item.OffStatus = AttendanceEnum.QK;
item.BeOnRelevance = null;
item.BeOnRelevanceType = null;
item.OffRelevance = null;
item.OffRelevanceType = null;
}
else
{
item.OffStatus = AttendanceEnum.QK;
item.OffRelevance = null;
item.OffRelevanceType = null;
}
}
else if (num == ARecordList.Count)
{
if (IsEndMorning)
{//上午
item.BeOnStatus = AttendanceEnum.QK;
item.BeOnRelevance = null;
item.BeOnRelevanceType = null;
}
else
{
item.BeOnStatus = AttendanceEnum.QK;
item.OffStatus = AttendanceEnum.QK;
item.BeOnRelevance = null;
item.BeOnRelevanceType = null;
item.OffRelevance = null;
item.OffRelevanceType = null;
}
}
else
{
item.BeOnStatus = AttendanceEnum.QK;
item.OffStatus = AttendanceEnum.QK;
item.BeOnRelevance = null;
item.BeOnRelevanceType = null;
item.OffRelevance = null;
item.OffRelevanceType = null;
}
}
}
RecordRepository.UpdateBatch(ARecordList, trans);
}
}
else
{
if (ARecordList.Count > 0)
{
int num = 0;
foreach (var item in ARecordList)
{
#region//新增历史记录
var listH = new List();
var Nmodel = item.RefMapperTo();
Nmodel.TemplateType = TemplateType;
Nmodel.WorkFlowId = WorkFlowId;
Nmodel.Date = DateTime.Now;
if (!string.IsNullOrWhiteSpace(item.History))
{//继续追加
listH = JsonConvert.DeserializeObject>(item.History);
}
listH.Add(Nmodel);
string History = JsonConvert.SerializeObject(listH.Select(x => new
{
x.BeOnDutyTime,
x.BeOnStatus,
x.OffStatus,
x.OffDutyTime,
x.Date,
x.TemplateType,
x.WorkFlowId,
x.BeOnRelevance,
x.BeOnRelevanceType,
x.OffRelevance,
x.OffRelevanceType
}));
item.History = History;
#endregion
num++;
if (num == 1)
{
if (IsStartMorning == IsEndMorning && IsStartMorning)
{
item.BeOnStatus = AttendanceEnum.WQ;
item.BeOnRelevance = gooutmodel.Id;
item.BeOnRelevanceType = (int)WFTTemplateTypeEnum.Goout;
}
else if (IsStartMorning != IsEndMorning && IsStartMorning)
{//上午
item.BeOnStatus = AttendanceEnum.WQ;
item.OffStatus = AttendanceEnum.WQ;
item.BeOnRelevance = gooutmodel.Id;
item.BeOnRelevanceType = (int)WFTTemplateTypeEnum.Goout;
item.OffRelevance = gooutmodel.Id;
item.OffRelevanceType = (int)WFTTemplateTypeEnum.Goout;
}
else
{
item.OffStatus = AttendanceEnum.WQ;
item.OffRelevance = gooutmodel.Id;
item.OffRelevanceType = (int)WFTTemplateTypeEnum.Goout;
}
}
else if (num == ARecordList.Count)
{
if (IsEndMorning)
{//上午
item.BeOnStatus = AttendanceEnum.WQ;
item.BeOnRelevance = gooutmodel.Id;
item.BeOnRelevanceType = (int)WFTTemplateTypeEnum.Goout;
}
else
{
item.BeOnStatus = AttendanceEnum.WQ;
item.OffStatus = AttendanceEnum.WQ;
item.BeOnRelevance = gooutmodel.Id;
item.BeOnRelevanceType = (int)WFTTemplateTypeEnum.Goout;
item.OffRelevance = gooutmodel.Id;
item.OffRelevanceType = (int)WFTTemplateTypeEnum.Goout;
}
}
else
{
item.BeOnStatus = AttendanceEnum.WQ;
item.OffStatus = AttendanceEnum.WQ;
item.BeOnRelevance = gooutmodel.Id;
item.BeOnRelevanceType = (int)WFTTemplateTypeEnum.Goout;
item.OffRelevance = gooutmodel.Id;
item.OffRelevanceType = (int)WFTTemplateTypeEnum.Goout;
}
}
RecordRepository.UpdateBatch(ARecordList, trans);
}
}
break;
case (int)WFTTemplateTypeEnum.ReissueCard:
Rb_Workflow_Reissuecard_Extend ReissueCardmodel = GetReissuecarModel(WorkFlowId);
//查询出所有在出差范围里的打卡记录表
var rmodel = RecordRepository.GetEntity(ReissueCardmodel.AttendanceRecordId);
if (ReissueCardmodel.IsCancel == WFAuditCancelStatus.Cancel)
{
var listH = JsonConvert.DeserializeObject>(rmodel.History);
listH = listH.Where(x => x.WorkFlowId == WorkFlowId && x.TemplateType == TemplateType).OrderByDescending(x => x.Date).ToList();
if (listH.Count > 0)
{//有可用的撤回
var Hmdoel = listH[0];
if (ReissueCardmodel.ReissuecardType == 1)
{
//上班打卡
rmodel.BeOnStatus = Hmdoel.BeOnStatus;
rmodel.BeOnDutyTime = Hmdoel.BeOnDutyTime;
rmodel.BeOnRelevance = Hmdoel.BeOnRelevance;
rmodel.BeOnRelevanceType = Hmdoel.BeOnRelevanceType;
}
else
{
//下班打卡
rmodel.OffStatus = Hmdoel.OffStatus;
rmodel.OffDutyTime = Hmdoel.OffDutyTime;
rmodel.OffRelevance = Hmdoel.BeOnRelevance;
rmodel.OffRelevanceType = Hmdoel.BeOnRelevanceType;
}
}
else
{
if (ReissueCardmodel.ReissuecardType == 1)
{
//上班打卡
rmodel.BeOnStatus = AttendanceEnum.QK;
rmodel.BeOnRelevance = null;
rmodel.BeOnRelevanceType = null;
}
else
{
//下班打卡
rmodel.OffStatus = AttendanceEnum.QK;
rmodel.OffRelevance = null;
rmodel.OffRelevanceType = null;
}
}
}
else
{
#region//新增历史记录
var Nmodel = rmodel.RefMapperTo();
var listH = new List();
Nmodel.TemplateType = TemplateType;
Nmodel.WorkFlowId = WorkFlowId;
Nmodel.Date = DateTime.Now;
if (!string.IsNullOrWhiteSpace(rmodel.History))
{//继续追加
listH = JsonConvert.DeserializeObject>(rmodel.History);
}
listH.Add(Nmodel);
string History = JsonConvert.SerializeObject(listH.Select(x => new
{
x.BeOnDutyTime,
x.BeOnStatus,
x.OffStatus,
x.OffDutyTime,
x.Date,
x.TemplateType,
x.WorkFlowId,
x.BeOnRelevance,
x.BeOnRelevanceType,
x.OffRelevance,
x.OffRelevanceType
}));
rmodel.History = History;
#endregion
if (ReissueCardmodel.ReissuecardType == 1)
{
//上班打卡
rmodel.BeOnStatus = AttendanceEnum.BK;
rmodel.BeOnDutyTime = ReissueCardmodel.ReissueCardTime;
rmodel.BeOnRelevance = ReissueCardmodel.Id;
rmodel.BeOnRelevanceType = (int)WFTTemplateTypeEnum.ReissueCard;
}
else
{
//下班打卡
rmodel.OffStatus = AttendanceEnum.BK;
rmodel.OffDutyTime = ReissueCardmodel.ReissueCardTime;
rmodel.OffRelevance = ReissueCardmodel.Id;
rmodel.OffRelevanceType = (int)WFTTemplateTypeEnum.ReissueCard;
}
}
RecordRepository.Update(rmodel, trans);
break;
}
return "";
}
private RB_Attendance_LeaveTime LeaveTimeUpdate(Rb_Workflow_Askforleave_Extend askmodel, int num, double DNum1)
{
var LTmodel = attendance_LeaveTimeRepository.Get(askmodel.CreateBy.Value, askmodel.StartTime.Value.AddMonths(num - 1).ToString("yyyy-MM"), (int)askmodel.AskforleaveType);
if (LTmodel == null)
{//新增
RB_Attendance_LeaveTime ltm = new RB_Attendance_LeaveTime()
{
AskforleaveMonth = askmodel.StartTime.Value.AddMonths(num - 1).ToString("yyyy-MM"),
AskforleaveType = (int)askmodel.AskforleaveType,
EmployeeId = askmodel.CreateBy.Value,
Duration = DNum1
};
List LTHList = new List();
LeaveTimeHistory lth = new LeaveTimeHistory()
{
Duration = DNum1,
WorkFlowId = askmodel.Id
};
LTHList.Add(lth);
ltm.History = JsonConvert.SerializeObject(LTHList);
attendance_LeaveTimeRepository.Insert(ltm);
}
else
{
LTmodel.Duration += DNum1;
List LTHList = JsonConvert.DeserializeObject>(LTmodel.History);
LeaveTimeHistory lth = new LeaveTimeHistory()
{
Duration = DNum1,
WorkFlowId = askmodel.Id
};
LTHList.Add(lth);
LTmodel.History = JsonConvert.SerializeObject(LTHList);
attendance_LeaveTimeRepository.Update(LTmodel);
}
return LTmodel;
}
///
/// 根据员工id获取所在部门
///
///
///
public string GetDepartmentForEmplyoeeId(int eid)
{
return accountRepository.GetEmployeeInfo(eid)?.DeptName ?? "";
}
///
/// 添加拷贝审核节点
///
/// 员工id
/// 工作流id
/// 工作模板
/// 审核关联
///
///
private bool InsertAuditRelevanceNext(int empId, int wfId, WFTTemplateTypeEnum wFTTemplateTypeEnum, Rb_Workflow_AuditRelevance_Extend modelNext, System.Data.IDbTransaction trans, out List AuditAccountList)
{
#region 添加初始审核人
switch ((int)wFTTemplateTypeEnum)
{
case (int)WFTTemplateTypeEnum.AskForLeave://修改请假申请状态
var askm = askforleaveRepository.GetModel(wfId);
empId = askm.CreateBy.Value;
break;
case (int)WFTTemplateTypeEnum.Evection:
var evem = wfEvectionRepository.GetModel(wfId);
empId = evem.CreateBy.Value;
break;
case (int)WFTTemplateTypeEnum.Goout:
var gooutm = wfGoOutRepository.GetModel(wfId);
empId = gooutm.CreateBy.Value;
break;
case (int)WFTTemplateTypeEnum.ReissueCard:
var reim = wfReissuecardRepository.GetModel(wfId);
empId = reim.CreateBy.Value;
break;
}
AuditAccountList = new List();
if (empId <= 0)
{
return false;
}
Rb_Workflow_AuditRelevance auditRelevance = modelNext.RefMapperTo();
//部门负责人审核
if (auditRelevance.AuditType == WFTAuditTypeEnum.Director)
{
var empModel = accountRepository.GetEmployeeInfo(empId);
var empList = GetEmployeeByDeptTierModule(new Employee_ViewModel() { DeptTier = auditRelevance.RoleOrInitiator ?? 0, Dept_Id = empModel.Dept_Id, Group_Id = empModel.Group_Id });
if (empList.Any())
{
List empIds = empList.Select(x => x.Id).ToList();
InsertBatcheAuditRecord(empIds, wfId, wFTTemplateTypeEnum, trans, auditRelevance);
foreach (var item in empList)
{
AuditAccountList = new List() { new EmAccoutIdModel() { EmAccount = item.Account, EmployeeId = item.Id } };
}
}
else
{
return false;
}
}
else if (auditRelevance.AuditType == WFTAuditTypeEnum.Role)//角色审核
{
var empModel = accountRepository.GetEmployeeInfo(empId);
var empList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel() { Post_Id = auditRelevance.RoleOrInitiator ?? 0, Group_Id = empModel.Group_Id });
if (empList.Count > 0)
{
List empIds = empList.Select(t => t.Id).ToList();
AuditAccountList = empList.Select(t => new EmAccoutIdModel() { EmAccount = t.Account, EmployeeId = t.Id }).Distinct().ToList();
InsertBatcheAuditRecord(empIds, wfId, wFTTemplateTypeEnum, trans, auditRelevance);
}
else
{
return false;
}
}
else if (auditRelevance.AuditType == WFTAuditTypeEnum.SpecifiedMember)//指定人审核
{
var audituserList = auditUserRelevanceRepository.GetListForRelevanceId(auditRelevance.Id);
//List audituserList = auditUserRepository.GetConditionAuditUser(auditRelevance.OriginalAuditId.Value);
if (audituserList.Count > 0)
{
AuditAccountList = audituserList.Select(x => new EmAccoutIdModel() { EmAccount = x.EmLoginMobile, EmployeeId = x.EmployeeId ?? 0 }).Distinct().ToList();
List empIds = audituserList.Select(t => t.EmployeeId.Value).ToList();
InsertBatcheAuditRecord(empIds, wfId, wFTTemplateTypeEnum, trans, auditRelevance);
}
else
{
return false;
}
}
#endregion
return true;
}
///
/// 审核 不同意
///
///
///
///
///
///
///
public ApiResult SetNotConsent(int WorkFlowId, int TemplateType, int empId, string Description, string ImageStr)
{
//HK 2020-04-15新增参数【勿删】
string para = string.Format("WorkFlowId:{0} TemplateType:{1} empId:{2} Description:{3} ImageStr:{4}", WorkFlowId, TemplateType, empId, Description, ImageStr);
var trans = wfReissuecardRepository.DbTransaction;
try
{
//图片处理
if (!string.IsNullOrWhiteSpace(ImageStr) && ImageStr != "[]")
{
List imgList = new List();
ImageOperation(JsonConvert.DeserializeObject(ImageStr), out imgList);
ImageStr = JsonConvert.SerializeObject(imgList);
}
//首先更改 审核关联 审核记录
List arList = auditRelevanceRepository.GetAuditRelevanceList(WorkFlowId, TemplateType);
List aurList = auditrecordRepository.GetAuditRecordList(WorkFlowId, TemplateType);
//找出当前审核
int Notcount = arList.Where(x => x.Stauts == WFRrocessStatus.AuditNotThrough).Count();
if (Notcount > 0)
{
wfReissuecardRepository.DBSession.Commit();
return ApiResult.Failed("该申请单已被拒绝!");
}
var ToAuditFlow = arList.Where(x => x.Stauts == WFRrocessStatus.NotAudit).OrderBy(x => x.Sort).ToList();
if (ToAuditFlow.Count <= 0)
{
wfReissuecardRepository.DBSession.Commit();
return ApiResult.Failed("该申请单审核已经完结!");
}
if (ToAuditFlow.Count > 0)
{
var model = ToAuditFlow[0];
var RecordList = aurList.Where(x => x.AuditId == model.Id).ToList();
var amodel = RecordList.Where(x => x.AuditStatus == WFRrocessStatus.NotAudit && x.AuditEmId == empId).FirstOrDefault();
if (amodel == null)
{
wfReissuecardRepository.DBSession.Commit();
return ApiResult.Failed("尚未匹配到审核相关信息,请联系管理员!");
}
//同时 修改 审核记录状态 审核流程
model.Stauts = WFRrocessStatus.AuditNotThrough;
if (!string.IsNullOrWhiteSpace(model.AuditedId))
{
model.AuditedId += "," + empId;
}
else
{
model.AuditedId = empId.ToString();
}
#region 更新审核记录表状态
IDictionary fileds = new Dictionary
{
{ nameof(Rb_Workflow_Auditrecord.AuditStatus), WFRrocessStatus.AuditNotThrough },
{ nameof(Rb_Workflow_Auditrecord.Description),Description}
,{ nameof(Rb_Workflow_Auditrecord.Image),ImageStr}
,{ nameof(Rb_Workflow_Auditrecord.UpdateTime),DateTime.Now}
};
IList whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Auditrecord.Id),
FiledValue = amodel.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditrecordRepository.Update(fileds, whereHelpers, trans);
#endregion
#region 更新审核关联表状态
fileds = new Dictionary
{
{ nameof(Rb_Workflow_AuditRelevance.Stauts), model.Stauts },
{ nameof(Rb_Workflow_AuditRelevance.AuditedId), model.AuditedId },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_AuditRelevance.Id),
FiledValue = model.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditRelevanceRepository.Update(fileds, whereHelpers, trans);
#endregion
var list = RecordList.Where(x => x.AuditStatus == WFRrocessStatus.NotAudit && x.AuditEmId != empId).ToList();
int AuditCount = list.Count();
if (AuditCount > 0)//表示最后一个人就是子集审核 申请单 通过
{
foreach (var item in list)
{
fileds = new Dictionary
{
{ nameof(Rb_Workflow_Auditrecord.AuditStatus), WFRrocessStatus.OtherHaveAudit },
{ nameof(Rb_Workflow_Auditrecord.Description),Description}
,{ nameof(Rb_Workflow_Auditrecord.Image),ImageStr}
,{ nameof(Rb_Workflow_Auditrecord.UpdateTime),DateTime.Now}
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Auditrecord.Id),
FiledValue = item.Id,
OperatorEnum = OperatorEnum.Equal
}
};
auditrecordRepository.Update(fileds, whereHelpers, trans);
}
}
switch (TemplateType)
{
case (int)WFTTemplateTypeEnum.AskForLeave://修改请假申请状态
fileds = new Dictionary
{
{ nameof(Rb_Workflow_Askforleave.Status), UserWFAuditStatus.NotThrough },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Askforleave.Id),
FiledValue = WorkFlowId,
OperatorEnum = OperatorEnum.Equal
}
};
askforleaveRepository.Update(fileds, whereHelpers, trans);
break;
case (int)WFTTemplateTypeEnum.Evection:
fileds = new Dictionary
{
{ nameof(Rb_Workflow_Evection.Status), UserWFAuditStatus.NotThrough },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Evection.Id),
FiledValue = WorkFlowId,
OperatorEnum = OperatorEnum.Equal
}
};
wfEvectionRepository.Update(fileds, whereHelpers, trans);
break;
case (int)WFTTemplateTypeEnum.Goout:
fileds = new Dictionary
{
{ nameof(Rb_Workflow_GoOut.Status), UserWFAuditStatus.NotThrough },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_GoOut.Id),
FiledValue = WorkFlowId,
OperatorEnum = OperatorEnum.Equal
}
};
wfGoOutRepository.Update(fileds, whereHelpers, trans);
break;
case (int)WFTTemplateTypeEnum.ReissueCard:
fileds = new Dictionary
{
{ nameof(Rb_Workflow_Reissuecard.Status), UserWFAuditStatus.NotThrough },
};
whereHelpers = new List
{
new WhereHelper()
{
FiledName = nameof(Rb_Workflow_Reissuecard.Id),
FiledValue = WorkFlowId,
OperatorEnum = OperatorEnum.Equal
}
};
wfReissuecardRepository.Update(fileds, whereHelpers, trans);
break;
}
}
wfReissuecardRepository.DBSession.Commit();
//发送推送信息
string EmAccout = "";
string EmName = "";
string AskforName = "";
int EmId = 0;
switch (TemplateType)
{
case (int)WFTTemplateTypeEnum.AskForLeave://修改请假申请状态
var askm = askforleaveRepository.GetModel(WorkFlowId);
EmAccout = askm.EmLoginMobile;
EmName = askm.EmName;
AskforName = "请假申请";
EmId = askm.CreateBy.Value;
break;
case (int)WFTTemplateTypeEnum.Evection:
var evem = wfEvectionRepository.GetModel(WorkFlowId);
EmAccout = evem.EmLoginMobile;
EmName = evem.EmName;
AskforName = "出差申请";
EmId = evem.CreateBy.Value;
break;
case (int)WFTTemplateTypeEnum.Goout:
var gooutm = wfGoOutRepository.GetModel(WorkFlowId);
EmAccout = gooutm.EmLoginMobile;
EmName = gooutm.EmName;
AskforName = "外出申请";
EmId = gooutm.CreateBy.Value;
break;
case (int)WFTTemplateTypeEnum.ReissueCard:
var reim = wfReissuecardRepository.GetModel(WorkFlowId);
EmAccout = reim.EmLoginMobile;
EmName = reim.EmName;
AskforName = "补卡申请";
EmId = reim.CreateBy.Value;
break;
}
string EmpNowName = (accountRepository.GetEmployeeInfo(empId)?.EmployeeName ?? "");
List