using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Datory;
using GxPress.Entity.WorkFlow;
using GxPress.EnumConst;
using GxPress.Request.Notice;
using GxPress.Result;
using Newtonsoft.Json;
namespace GxPress.Service.Implement
{
public partial class FlowService
{
///
/// 审核
///
///
///
///
///
public async Task CheckAsync(int todoId, bool isChecked, string message)
{
//拼接
var query = Q.NewQuery();
var todo = await _flowTodoRepository.GetAsync(todoId);
todo.IsChecked = isChecked;
todo.Message = message;
todo.IsDone = true;
//是否当前操作
todo.IsOperate = false;
todo.DoneType = 0;
var updated = await _flowTodoRepository.UpdateAsync(todo);
var flow = await GetAsync(todo.FlowId);
await _flowMessageRepository.InsertAsync(new FlowMessage
{
ProcessId = flow.ProcessId,
FlowId = flow.Id,
UserId = todo.UserId,
Type = nameof(TodoTypeConst.ApproverCheck),
Message = message
});
if (isChecked)
{
//修改状态
if (todo.IsCaseOr && todo.ParentId > 0)
{
query = Q.NewQuery();
query.Where(nameof(Entity.WorkFlow.FlowTodo.ParentId), todo.ParentId);
query.Where(nameof(Entity.WorkFlow.FlowTodo.IsCaseOr), true);
query.Where(nameof(Entity.WorkFlow.FlowTodo.FlowId), todo.FlowId);
var flowDtos = await _flowTodoRepository.GetAllAsync(query);
foreach (var item in flowDtos)
{
item.IsOperate = false;
item.IsDone = true;
item.IsChecked = true;
await _flowTodoRepository.UpdateAsync(item);
}
}
//是否审核通过
var checkedCount = await _flowTodoRepository.CheckedCountAsync(flow.Id);
var allCount = await _flowTodoRepository.AllCountAsync(flow.Id);
//判断是否最后一个通过
if (checkedCount == allCount)
{
await _flowRepository.UpdateStateAsync(flow.Id, nameof(FlowState.Checked));
//发送短信
var user = await _userRepository.GetAsync(flow.UserId);
//Common.Sms.AliySms.FolwStatusSendSms(user.Phone);
// Common.Sms.MasSms.SendSmsTemplate(new List() { user.Phone }, "3c70cbdbcd1e45449b2830871387bdfe");
await smsService.SendSmsTemplate(new List() { user.Phone }, "3c70cbdbcd1e45449b2830871387bdfe", flow.Id, AllTypeConst.Flow.GetHashCode());
}
else
{
//修改可操作人
var flowTodo = await _flowTodoRepository.GetUCheckedAsync(todo.FlowId);
//或签
if (flowTodo.IsCaseOr && flowTodo.ParentId > 0)
{
query = Q.NewQuery();
query.Where(nameof(Entity.WorkFlow.FlowTodo.ParentId), flowTodo.ParentId);
query.Where(nameof(Entity.WorkFlow.FlowTodo.IsCaseOr), flowTodo.IsCaseOr);
query.Where(nameof(Entity.WorkFlow.FlowTodo.FlowId), flowTodo.FlowId);
var flowDtos = await _flowTodoRepository.GetAllAsync(query);
foreach (var item in flowDtos)
{
item.IsOperate = true;
await _flowTodoRepository.UpdateAsync(item);
//发送短信
var user = await _userRepository.GetAsync(item.UserId);
// Common.Sms.AliySms.FolwCheckSendSms(user.Phone);
//Common.Sms.MasSms.SendSmsTemplate(new List() { user.Phone }, "c9bdae1685514a9b821299720e2c5fe8");
await smsService.SendSmsTemplate(new List() { user.Phone }, "c9bdae1685514a9b821299720e2c5fe8", flow.Id, AllTypeConst.Flow.GetHashCode());
}
}
//会签
else if (!flowTodo.IsCaseOr && flowTodo.ParentId > 0)
{
if (flowTodo.IsOperate == false)
{
query = Q.NewQuery();
query.Where(nameof(Entity.WorkFlow.FlowTodo.ParentId), flowTodo.ParentId);
query.Where(nameof(Entity.WorkFlow.FlowTodo.IsCaseOr), flowTodo.IsCaseOr);
query.Where(nameof(Entity.WorkFlow.FlowTodo.FlowId), flowTodo.FlowId);
var flowDtos = await _flowTodoRepository.GetAllAsync(query);
foreach (var item in flowDtos)
{
item.IsOperate = true;
await _flowTodoRepository.UpdateAsync(item);
//发送短信
var user = await _userRepository.GetAsync(item.UserId);
// Common.Sms.AliySms.FolwCheckSendSms(user.Phone);
//Common.Sms.MasSms.SendSmsTemplate(new List() { user.Phone }, "c9bdae1685514a9b821299720e2c5fe8");
await smsService.SendSmsTemplate(new List() { user.Phone }, "c9bdae1685514a9b821299720e2c5fe8", flow.Id, AllTypeConst.Flow.GetHashCode());
}
}
}
else
{
flowTodo.IsOperate = true;
await _flowTodoRepository.UpdateAsync(flowTodo);
//发送短信
var user = await _userRepository.GetAsync(flowTodo.UserId);
//Common.Sms.AliySms.FolwCheckSendSms(user.Phone);
//Common.Sms.MasSms.SendSmsTemplate(new List() { user.Phone }, "c9bdae1685514a9b821299720e2c5fe8");
await smsService.SendSmsTemplate(new List() { user.Phone }, "c9bdae1685514a9b821299720e2c5fe8", flow.Id, AllTypeConst.Flow.GetHashCode());
}
}
}
else
{
//修改工作流程状态
await _flowRepository.UpdateStateAsync(flow.Id, nameof(FlowState.Denied));
//发送短信
var user = await _userRepository.GetAsync(flow.UserId);
//Common.Sms.AliySms.FolwStatusSendSms(user.Phone);
//Common.Sms.MasSms.SendSmsTemplate(new List() { user.Phone }, "c9bdae1685514a9b821299720e2c5fe8");
await smsService.SendSmsTemplate(new List() { user.Phone }, "c9bdae1685514a9b821299720e2c5fe8", flow.Id, AllTypeConst.Flow.GetHashCode());
}
}
public async Task RemindAsync(int flowId, int userId)
{
var flow = await GetFlowResult(flowId);
var flowDto = await _flowRepository.GetAsync(flowId);
var todo = await _flowTodoRepository.GetAsync(Q.Where(nameof(FlowTodo.FlowId), flowId).Where(nameof(FlowTodo.IsOperate), true));
if (todo == null)
return false;
if (todo.IsRemind)
return true;
var user = await _userRepository.GetAsync(todo.UserId);
//发送通知
var request = new NoticeInRequest();
request.Title = "工作流催办";
request.UserId = flowDto.UserId;
request.AddresseeUserMiddles = new List();
request.AddresseeUserMiddles.Add(new Request.UserMiddle.UserMiddleInRequest { MiddleType = 10, SourceType = 0, SourceId = todo.UserId, SourceName = user.Name });
request.NoticeType = NoticeTypeConst.Send;
//构建数据
var resultJson = new List();
// var contentJsonData = JsonConvert.DeserializeObject>(result.Content);
// foreach (var item in contentJsonData)
// item.File = StringUtils.AddDomain(item.File);
// result.Data = contentJsonData;
//文字
var resultJsonText = new ContentJsonData();
resultJsonText.Title = "催办工作流程";
resultJsonText.Type = 1;
resultJson.Add(resultJsonText);
//审批
var resultJsonFlow = new ContentJsonData();
resultJsonFlow.Type = 14;
resultJsonFlow.Id = flowId;
resultJsonFlow.Title = flow.Name;
resultJson.Add(resultJsonFlow);
request.Content = JsonConvert.SerializeObject(resultJson);
var boolValue = await _noticeService.InsertAsync(request);
todo.IsRemind = true;
await _flowTodoRepository.UpdateAsync(todo);
return false;
}
public async Task TransferCheckAsync(int todoId, List transferUserIds, string message, List fileIds)
{
var todo = await _flowTodoRepository.GetAsync(todoId);
// await _flowTodoRepository.DeleteAsync(todo.Id);
var flow = await GetAsync(todo.FlowId);
await _flowMessageRepository.InsertAsync(new FlowMessage
{
ProcessId = flow.ProcessId,
FlowId = flow.Id,
UserId = todo.UserId,
Type = nameof(TodoTypeConst.ApproverCheck),
Message = message,
FileIds = fileIds
});
//修改或签状态
if (todo.IsCaseOr && todo.ParentId > 0)
{
var query = Q.NewQuery();
query.Where(nameof(Entity.WorkFlow.FlowTodo.ParentId), todo.ParentId);
query.Where(nameof(Entity.WorkFlow.FlowTodo.IsCaseOr), true);
query.Where(nameof(Entity.WorkFlow.FlowTodo.FlowId), todo.FlowId);
var flowDtos = await _flowTodoRepository.GetAllAsync(query);
foreach (var item in flowDtos)
{
item.IsOperate = item.UserId == todo.UserId ? true : false;
item.IsDone = true;
item.IsChecked = true;
await _flowTodoRepository.UpdateAsync(item);
}
}
//判断是否存在专审 存在就提示
// var flowTodo = await _flowTodoRepository.GetAllAsync(Q.Where(nameof(Entity.WorkFlow.FlowTodo.FlowId), todo.FlowId).Where(nameof(Entity.WorkFlow.FlowTodo.Type), nameof(TodoTypeConst.ApproverCheck)));
// if (flowTodo.Select(n => n.UserId).Any(n => transferUserIds.Contains(n)))
// {
// throw new Exception("转审人或者审核人已存在!");
// }
if (transferUserIds.Count > 0)
{
//获取其他审核人
var flowTodos = await _flowTodoRepository.GetAllAsync(Q.Where(nameof(Entity.WorkFlow.FlowTodo.FlowId), todo.FlowId).Where(nameof(Entity.WorkFlow.FlowTodo.Sort), ">", todo.Sort));
foreach (var item in flowTodos)
{
item.Sort = item.Sort + transferUserIds.Count;
await _flowTodoRepository.UpdateSortAsync(item);
}
}
var sort = 1;
foreach (var transferUserId in transferUserIds)
{
var flowTo = new Entity.WorkFlow.FlowTodo();
flowTo.UserId = transferUserId;
flowTo.IsChecked = false;
flowTo.IsDone = false;
flowTo.IsRead = false;
flowTo.FlowId = flow.Id;
flowTo.ProcessId = flow.ProcessId;
flowTo.Type = nameof(TodoTypeConst.ApproverCheck);
flowTo.IsOperate = sort == 1 ? true : false;
flowTo.Sort = todo.Sort + sort;
await _flowTodoRepository.InsertAsync(flowTo);
sort++;
if (flowTo.IsOperate)
{
//发送短信
var user = await _userRepository.GetAsync(transferUserId);
await smsService.SendSmsTemplate(new List() { user.Phone }, "c9bdae1685514a9b821299720e2c5fe8", flow.Id, AllTypeConst.Flow.GetHashCode());
}
}
//修改当前用户状态
todo.Message = message;
todo.IsDone = true;
todo.FileIds = fileIds;
todo.IsChecked = true;
todo.IsOperate = false;
//已转审
todo.IsReferral = true;
await _flowTodoRepository.UpdateAsync(todo);
}
}
}