| | |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_IApprovalRepository; |
| | | using WIDESEA_IApprovalService; |
| | | using WIDESEA_ICheckRepository; |
| | | using WIDESEA_ISystemRepository; |
| | | using WIDESEA_Model.Models; |
| | | |
| | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | } |