using HslCommunication.WebSocket;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEA_Common.CommonEnum;
|
using WIDESEA_Common.OrderEnum;
|
using WIDESEA_Core;
|
using WIDESEA_Core.BaseRepository;
|
using WIDESEA_Core.BaseServices;
|
using WIDESEA_Core.Helper;
|
using WIDESEA_IApprovalRepository;
|
using WIDESEA_ICheckRepository;
|
using WIDESEA_ICheckService;
|
using WIDESEA_ISystemRepository;
|
using WIDESEA_Model.Models;
|
|
namespace WIDESEA_CheckService
|
{
|
public class CheckOrderService : ServiceBase<Dt_CheckOrder, ICheckOrderRepository>, ICheckOrderService
|
{
|
private readonly IUnitOfWorkManage _unitOfWorkManage;
|
private readonly IApprovalFlowRepository _approvalFlowRepository;
|
private readonly IApprovalNodeRepository _approvalNodeRepository;
|
private readonly IApprovalTaskRepository _approvalTaskRepository;
|
private readonly ISys_UserRepository _userRepository;
|
private readonly WebSocketServer _webSocketServer;
|
|
public CheckOrderService(ICheckOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IApprovalFlowRepository approvalFlowRepository, IApprovalNodeRepository approvalNodeRepository, IApprovalTaskRepository approvalTaskRepository, ISys_UserRepository userRepository, WebSocketServer webSocketServer) : base(BaseDal)
|
{
|
_unitOfWorkManage = unitOfWorkManage;
|
_approvalFlowRepository = approvalFlowRepository;
|
_approvalNodeRepository = approvalNodeRepository;
|
_approvalTaskRepository = approvalTaskRepository;
|
_userRepository = userRepository;
|
_webSocketServer = webSocketServer;
|
}
|
|
public WebResponseContent CommitAudit(int checkOrderId)
|
{
|
try
|
{
|
Dt_CheckOrder checkOrder = BaseDal.Db.Queryable<Dt_CheckOrder>().Where(x => x.CheckOrderId == checkOrderId).Includes(x => x.Details).First();
|
if (checkOrder == null)
|
{
|
return WebResponseContent.Instance.Error($"未找到该质检单");
|
}
|
if(checkOrder.CheckOrderStatus != CheckOrderStatusEnum.Checked.ObjToInt())
|
{
|
return WebResponseContent.Instance.Error($"该质检单还未检验完成");
|
}
|
|
if (checkOrder.AuditStatus != AuditStatusEnum.NotCommited.ObjToInt())
|
{
|
return WebResponseContent.Instance.Error($"该数据不可再次提交审批");
|
}
|
|
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? approvalNode = approvalNodes.OrderBy(x => x.NodeSequence).FirstOrDefault();
|
if (approvalNode == null)
|
{
|
return WebResponseContent.Instance.Error($"数据错误");
|
}
|
|
List<Dt_ApprovalTask> approvalTasks = new List<Dt_ApprovalTask>();
|
List<string> userNames = new List<string>();
|
List<Sys_User> users = _userRepository.QueryData(x => x.RoleId == approvalNode.ApproverRole);
|
foreach (Sys_User user in users)
|
{
|
Dt_ApprovalTask approvalTask = new Dt_ApprovalTask()
|
{
|
FlowId = approvalFlow.Id,
|
NodeId = approvalNode.Id,
|
ApplicantUserId = App.User.UserId,
|
ApplicantUserName = user.UserName,
|
Status = AuditStatusEnum.Auditing.ObjToInt(),
|
AuditUser = user.UserName
|
};
|
approvalTasks.Add(approvalTask);
|
userNames.Add(user.UserName);
|
}
|
_unitOfWorkManage.BeginTran();
|
_approvalTaskRepository.AddData(approvalTasks);
|
checkOrder.AuditStatus = AuditStatusEnum.Auditing.ObjToInt();
|
BaseDal.UpdateData(checkOrder);
|
|
object obj = new
|
{
|
title = "IQC质检结果审批",
|
formData = checkOrder,
|
tableData = checkOrder.Details,
|
message = "推送测试信息体",
|
date = DateTime.Now.ToString(),
|
};
|
|
foreach (string userName in userNames)
|
{
|
WebSocketSession? socketSessions = _webSocketServer.OnlineSessions.FirstOrDefault(x => x.Url.Contains(userName));
|
if (socketSessions != null)
|
{
|
_webSocketServer.SendClientPayload(socketSessions, obj.Serialize());
|
}
|
}
|
_unitOfWorkManage.CommitTran();
|
return WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return WebResponseContent.Instance.Error(ex.Message);
|
}
|
}
|
}
|
}
|