using HslCommunication.WebSocket;
|
using NetTaste;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEA_ApprovalRepository;
|
using WIDESEA_Common.CommonEnum;
|
using WIDESEA_Core;
|
using WIDESEA_Core.BaseRepository;
|
using WIDESEA_Core.BaseServices;
|
using WIDESEA_Core.Helper;
|
using WIDESEA_IApprovalRepository;
|
using WIDESEA_IApprovalService;
|
using WIDESEA_ICheckRepository;
|
using WIDESEA_ISystemRepository;
|
using WIDESEA_Model.Models;
|
|
namespace WIDESEA_ApprovalService
|
{
|
public class ApprovalTaskService : ServiceBase<Dt_ApprovalTask, IApprovalTaskRepository>, IApprovalTaskService
|
{
|
private readonly IUnitOfWorkManage _unitOfWorkManage;
|
private readonly IApprovalFlowRepository _approvalFlowRepository;
|
private readonly IApprovalNodeRepository _approvalNodeRepository;
|
private readonly ICheckOrderRepository _checkOrderRepository;
|
private readonly WebSocketServer _webSocketServer;
|
private readonly ISys_UserRepository _userRepository;
|
|
public IApprovalTaskRepository Repository => BaseDal;
|
|
public ApprovalTaskService(IApprovalTaskRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IApprovalFlowRepository approvalFlowRepository, IApprovalNodeRepository approvalNodeRepository, ICheckOrderRepository checkOrderRepository, WebSocketServer webSocketServer, ISys_UserRepository userRepository) : base(BaseDal)
|
{
|
_unitOfWorkManage = unitOfWorkManage;
|
_approvalFlowRepository = approvalFlowRepository;
|
_approvalNodeRepository = approvalNodeRepository;
|
_checkOrderRepository = checkOrderRepository;
|
_webSocketServer = webSocketServer;
|
_userRepository = userRepository;
|
}
|
|
|
|
public WebResponseContent AuditAgree(int sourceKey)
|
{
|
try
|
{
|
Dt_ApprovalFlow approvalFlow = _approvalFlowRepository.QueryFirst(x => x.FlowCode == "IQC");
|
if (approvalFlow == null)
|
{
|
return WebResponseContent.Instance.Error($"未定义该审批流");
|
}
|
List<Dt_ApprovalNode> approvalNodes = _approvalNodeRepository.QueryData(x => x.FlowId == approvalFlow.Id);
|
if (approvalNodes == null || approvalNodes.Count <= 0)
|
{
|
return WebResponseContent.Instance.Error($"未定义该审批流程节点");
|
}
|
|
Dt_ApprovalNode? currentNode = approvalNodes.FirstOrDefault(x => x.ApproverRole == App.User.RoleId);
|
if (currentNode == null)
|
{
|
return WebResponseContent.Instance.OK($"未找到当前角色审批节点");
|
}
|
|
Dt_ApprovalTask approvalTask = BaseDal.QueryFirst(x => x.SourceKey == sourceKey && x.NodeId == currentNode.Id);
|
if (approvalTask == null)
|
{
|
return WebResponseContent.Instance.Error($"未找到该审批数据");
|
}
|
|
if (approvalTask.Status != AuditStatusEnum.Auditing.ObjToInt())
|
{
|
return WebResponseContent.Instance.Error($"该审批已完成");
|
}
|
|
Dt_CheckOrder checkOrder = _checkOrderRepository.QueryFirst(x => x.CheckOrderId == sourceKey);
|
if (checkOrder == null)
|
{
|
return WebResponseContent.Instance.Error($"未找到来源数据(质检单)");
|
}
|
|
Dt_ApprovalNode? nextNode = approvalNodes.Where(x => x.NodeSequence > currentNode.NodeSequence).OrderBy(x => x.NodeSequence).FirstOrDefault();
|
if (nextNode == null)//审批流程结束
|
{
|
approvalTask.Status = AuditStatusEnum.Agree.ObjToInt();
|
|
checkOrder.AuditStatus = AuditStatusEnum.Agree.ObjToInt();
|
_unitOfWorkManage.BeginTran();
|
_checkOrderRepository.UpdateData(checkOrder);
|
|
BaseDal.UpdateData(approvalTask);
|
//BaseDal.DeleteAndMoveIntoHty(approvalTask, WIDESEA_Core.Enums.OperateTypeEnum.自动完成);
|
|
WebSocketSession? webSocketSession = _webSocketServer.OnlineSessions.FirstOrDefault(x => x.Url.Contains(approvalTask.ApplicantUserName));
|
if (webSocketSession != null)
|
{
|
_webSocketServer.SendClientPayload(webSocketSession, "同意");
|
}
|
_unitOfWorkManage.CommitTran();
|
}
|
else//进入下一级审批节点
|
{
|
object obj = new
|
{
|
title = "IQC质检结果审批",
|
formData = checkOrder,
|
tableData = checkOrder.Details,
|
message = "推送测试信息体",
|
date = DateTime.Now.ToString(),
|
};
|
List<Dt_ApprovalTask> approvalTasks = new List<Dt_ApprovalTask>();
|
List<string> userNames = new List<string>();
|
List<Sys_User> users = _userRepository.QueryData(x => x.RoleId == nextNode.ApproverRole);
|
foreach (Sys_User user in users)
|
{
|
Dt_ApprovalTask newApprovalTask = new Dt_ApprovalTask()
|
{
|
FlowId = approvalFlow.Id,
|
NodeId = nextNode.Id,
|
ApplicantUserId = App.User.UserId,
|
ApplicantUserName = user.UserName,
|
Status = AuditStatusEnum.Auditing.ObjToInt(),
|
AuditUser = user.UserName,
|
SourceKey = approvalTask.SourceKey
|
};
|
approvalTasks.Add(newApprovalTask);
|
userNames.Add(user.UserName);
|
}
|
|
approvalTask.Status = AuditStatusEnum.Agree.ObjToInt();
|
BaseDal.UpdateData(approvalTask);
|
BaseDal.AddData(approvalTasks);
|
foreach (string userName in userNames)
|
{
|
WebSocketSession? socketSessions = _webSocketServer.OnlineSessions.FirstOrDefault(x => x.Url.Contains(userName));
|
if (socketSessions != null)
|
{
|
_webSocketServer.SendClientPayload(socketSessions, obj.Serialize());
|
}
|
}
|
}
|
return WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return WebResponseContent.Instance.Error(ex.Message);
|
}
|
}
|
|
public WebResponseContent AuditReject(int sourceKey)
|
{
|
try
|
{
|
Dt_ApprovalFlow approvalFlow = _approvalFlowRepository.QueryFirst(x => x.FlowCode == "IQC");
|
if (approvalFlow == null)
|
{
|
return WebResponseContent.Instance.Error($"未定义该审批流");
|
}
|
List<Dt_ApprovalNode> approvalNodes = _approvalNodeRepository.QueryData(x => x.FlowId == approvalFlow.Id);
|
if (approvalNodes == null || approvalNodes.Count <= 0)
|
{
|
return WebResponseContent.Instance.Error($"未定义该审批流程节点");
|
}
|
|
Dt_ApprovalNode? currentNode = approvalNodes.FirstOrDefault(x => x.ApproverRole == App.User.RoleId);
|
if (currentNode == null)
|
{
|
return WebResponseContent.Instance.OK($"未找到当前角色审批节点");
|
}
|
|
Dt_ApprovalTask approvalTask = BaseDal.QueryFirst(x => x.SourceKey == sourceKey);
|
if (approvalTask == null)
|
{
|
return WebResponseContent.Instance.Error($"未找到该审批数据");
|
}
|
|
if (approvalTask.Status != AuditStatusEnum.Auditing.ObjToInt())
|
{
|
return WebResponseContent.Instance.Error($"该审批已完成");
|
}
|
|
Dt_CheckOrder checkOrder = _checkOrderRepository.QueryFirst(x => x.CheckOrderId == sourceKey);
|
if (checkOrder == null)
|
{
|
return WebResponseContent.Instance.Error($"未找到来源数据(质检单)");
|
}
|
|
approvalTask.Status = AuditStatusEnum.Reject.ObjToInt();
|
|
checkOrder.AuditStatus = AuditStatusEnum.Reject.ObjToInt();
|
_unitOfWorkManage.BeginTran();
|
_checkOrderRepository.UpdateData(checkOrder);
|
|
BaseDal.UpdateData(approvalTask);
|
//BaseDal.DeleteAndMoveIntoHty(approvalTask, WIDESEA_Core.Enums.OperateTypeEnum.自动完成);
|
|
WebSocketSession? webSocketSession = _webSocketServer.OnlineSessions.FirstOrDefault(x => x.Url.Contains(approvalTask.ApplicantUserName));
|
if (webSocketSession != null)
|
{
|
_webSocketServer.SendClientPayload(webSocketSession, "驳回");
|
}
|
_unitOfWorkManage.CommitTran();
|
return WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return WebResponseContent.Instance.Error(ex.Message);
|
}
|
}
|
}
|
}
|