wangxinhui
5 小时以前 67348f250a1b7970059698002949a5e0a5f3c52f
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_ApprovalService/ApprovalTaskService.cs
@@ -13,7 +13,6 @@
using WIDESEA_Core.Helper;
using WIDESEA_IApprovalRepository;
using WIDESEA_IApprovalService;
using WIDESEA_ICheckRepository;
using WIDESEA_ISystemRepository;
using WIDESEA_Model.Models;
@@ -24,199 +23,19 @@
        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)
        public ApprovalTaskService(IApprovalTaskRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IApprovalFlowRepository approvalFlowRepository, IApprovalNodeRepository approvalNodeRepository,  WebSocketServer webSocketServer, ISys_UserRepository userRepository) : base(BaseDal)
        {
            _unitOfWorkManage = unitOfWorkManage;
            _approvalFlowRepository = approvalFlowRepository;
            _approvalNodeRepository = approvalNodeRepository;
            _checkOrderRepository = checkOrderRepository;
            _webSocketServer = webSocketServer;
            _userRepository = userRepository;
        }
        /// <summary>
        /// å®¡æ‰¹åŒæ„
        /// </summary>
        /// <param name="sourceKey">源主键</param>
        /// <returns></returns>
        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);
            }
        }
        /// <summary>
        /// å®¡æ‰¹é©³å›ž
        /// </summary>
        /// <param name="sourceKey">源主键</param>
        /// <returns></returns>
        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);
            }
        }
    }
}