| 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_DTO; | 
| using WIDESEA_DTO.ERP; | 
| using WIDESEA_External.ERPService; | 
| using WIDESEA_External.Model; | 
| 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; | 
|         private readonly IInvokeERPService _invokeERPService; | 
|   | 
|         public CheckOrderService(ICheckOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IApprovalFlowRepository approvalFlowRepository, IApprovalNodeRepository approvalNodeRepository, IApprovalTaskRepository approvalTaskRepository, ISys_UserRepository userRepository, WebSocketServer webSocketServer, IInvokeERPService invokeERPService) : base(BaseDal) | 
|         { | 
|             _unitOfWorkManage = unitOfWorkManage; | 
|             _approvalFlowRepository = approvalFlowRepository; | 
|             _approvalNodeRepository = approvalNodeRepository; | 
|             _approvalTaskRepository = approvalTaskRepository; | 
|             _userRepository = userRepository; | 
|             _webSocketServer = webSocketServer; | 
|             _invokeERPService = invokeERPService; | 
|         } | 
|   | 
|         #region 不使用 | 
|         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); | 
|             } | 
|         } | 
|         #endregion | 
|         /// <summary> | 
|         /// 检验完推送ERP | 
|         /// </summary> | 
|         /// <param name="checkOrder"></param> | 
|         /// <param name="checkOrderResults"></param> | 
|         /// <returns></returns> | 
|         public WebResponseContent FeedbackCheckResult(Dt_CheckOrder checkOrder,List<Dt_CheckOrderResult> checkOrderResults) | 
|         { | 
|             try | 
|             { | 
|                 //增加个上传状态 质检单结果 | 
|                 List<ERPCheckResult> checkResults = new List<ERPCheckResult>(); | 
|                 foreach (var item in checkOrderResults) | 
|                 { | 
|                     ERPCheckResult checkResult = new ERPCheckResult() | 
|                     { | 
|                         DefectCode = item.DefectCode, | 
|                         Note = item.Note, | 
|                         Quantity = item.Quantity.ToString(), | 
|                         Result = item.Result | 
|                     }; | 
|                     checkResults.Add(checkResult); | 
|                 } | 
|                 ERPCheckModel model = new ERPCheckModel() | 
|                 { | 
|                     Code = checkOrder.CheckOrderNo, | 
|                     CompanyId = "HATC", | 
|                     Result = checkOrder.Result, | 
|                     CreatorCode = checkOrder.CheckUserName, | 
|                     DefectedNote = checkOrder.DefectedNote, | 
|                     MaterialsCode = checkOrder.MaterielCode, | 
|                     PlantsId = "HA02", | 
|                     QtyDefected = checkOrder.DefectedQuantity.GetValueOrDefault().ToString(), | 
|                     QtyInspected = checkOrder.ReceivedQuantity.ToString(), | 
|                     QtyQualified = checkOrder.QualifiedQuantity.GetValueOrDefault().ToString(), | 
|                     QtyReturn = checkOrder.ReturnQuantity.GetValueOrDefault().ToString(), | 
|                     QtyScrapped = checkOrder.ScrappedQuantity.GetValueOrDefault().ToString(), | 
|                     ReceiptCode = checkOrder.ReceiveOrderNo, | 
|                     ReceiveDate = checkOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"), | 
|                     SerNo = checkOrder.ReceiveDetailRowNo.ToString(), | 
|                     TestDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), | 
|                     UniqueTag = checkOrder.CheckOrderId.ToString(), | 
|                     Way = 1, | 
|                     Details = checkResults | 
|                 }; | 
|   | 
|                 string response = _invokeERPService.InvokeCheckOrderApi(model); | 
|                 ErpRequestContent requestContent = response.DeserializeObject<ErpRequestContent>(); | 
|                 if (requestContent.res!=1) | 
|                 { | 
|                     return WebResponseContent.Instance.Error(requestContent.Data); | 
|                 } | 
|                 return WebResponseContent.Instance.OK(); | 
|             } | 
|             catch (Exception ex) | 
|             { | 
|                 return WebResponseContent.Instance.Error(ex.Message); | 
|             } | 
|         } | 
|         /// <summary> | 
|         /// 送检验完推送ERP | 
|         /// </summary> | 
|         /// <param name="checkOrder"></param> | 
|         /// <param name="checkOrderResults"></param> | 
|         /// <returns></returns> | 
|         public WebResponseContent FeedbackInspectResult(Dt_CheckOrder checkOrder, List<Dt_CheckOrderResult> checkOrderResults) | 
|         { | 
|             try | 
|             { | 
|                 //增加个上传状态 质检单结果 | 
|                 List<ERPCheckResult> checkResults = new List<ERPCheckResult>(); | 
|                 foreach (var item in checkOrderResults) | 
|                 { | 
|                     ERPCheckResult checkResult = new ERPCheckResult() | 
|                     { | 
|                         DefectCode = item.DefectCode, | 
|                         Note = item.Note, | 
|                         Quantity = item.Quantity.ToString(), | 
|                         Result = item.Result | 
|                     }; | 
|                     checkResults.Add(checkResult); | 
|                 } | 
|                 ERPInspectModel model = new ERPInspectModel() | 
|                 { | 
|                     Code = checkOrder.CheckOrderNo, | 
|                     CompanyId = "HATC", | 
|                     Result = checkOrder.Result, | 
|                     CreatorCode = checkOrder.CheckUserName, | 
|                     DefectedNote = checkOrder.DefectedNote, | 
|                     MaterialsCode = checkOrder.MaterielCode, | 
|                     PlantsId = "HA02", | 
|                     QtyDefected = checkOrder.DefectedQuantity.GetValueOrDefault().ToString(), | 
|                     QtyInspected = checkOrder.ReceivedQuantity.ToString(), | 
|                     QtyQualified = checkOrder.QualifiedQuantity.GetValueOrDefault().ToString(), | 
|                     QtyReturn = checkOrder.ReturnQuantity.GetValueOrDefault().ToString(), | 
|                     QtyScrapped = checkOrder.ScrappedQuantity.GetValueOrDefault().ToString(), | 
|                     Recheckcode = checkOrder.ReceiveOrderNo, | 
|                     ReceiveDate = checkOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"), | 
|                     TestDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), | 
|                     UniqueTag = checkOrder.CheckOrderId.ToString(), | 
|                     Way = 1, | 
|                     Details = checkResults | 
|                 }; | 
|   | 
|                 string response = _invokeERPService.InvokeInspectApi(model); | 
|                 ErpRequestContent requestContent = response.DeserializeObject<ErpRequestContent>(); | 
|                 if (requestContent.res != 1) | 
|                 { | 
|                     return WebResponseContent.Instance.Error(requestContent.Data); | 
|                 } | 
|                 return WebResponseContent.Instance.OK(); | 
|             } | 
|             catch (Exception ex) | 
|             { | 
|                 return WebResponseContent.Instance.Error(ex.Message); | 
|             } | 
|         } | 
|         /// <summary> | 
|         /// 质检完上报至ERP | 
|         /// </summary> | 
|         /// <param name="id"></param> | 
|         /// <returns></returns> | 
|         public WebResponseContent FeedbackCheckResult(int id) | 
|         { | 
|             try | 
|             { | 
|                 //增加个上传状态 质检单结果 | 
|                 Dt_CheckOrder checkOrder = Db.Queryable<Dt_CheckOrder>().Where(x => x.CheckOrderId == id).Includes(x => x.Details).First(); | 
|                 if (checkOrder == null) | 
|                 { | 
|                     return WebResponseContent.Instance.Error($"未找到质检单据"); | 
|                 } | 
|   | 
|                 List<ERPCheckResult> checkResults = new List<ERPCheckResult>(); | 
|                 foreach (var item in checkOrder.Details) | 
|                 { | 
|                     ERPCheckResult checkResult = new ERPCheckResult() | 
|                     { | 
|                         DefectCode = item.DefectCode, | 
|                         Note = item.Note, | 
|                         Quantity = item.Quantity.ToString(), | 
|                         Result = item.Result | 
|                     }; | 
|                     checkResults.Add(checkResult); | 
|                 } | 
|   | 
|                 ERPCheckModel model = new ERPCheckModel() | 
|                 { | 
|                     Code = checkOrder.CheckOrderNo, | 
|                     CompanyId = "HATC", | 
|                     Result = checkOrder.Result, | 
|                     CreatorCode = checkOrder.CheckUserName, | 
|                     DefectedNote = checkOrder.DefectedNote, | 
|                     MaterialsCode = checkOrder.MaterielCode, | 
|                     PlantsId = "HA02", | 
|                     QtyDefected = checkOrder.DefectedQuantity.GetValueOrDefault().ToString(), | 
|                     QtyInspected = checkOrder.ReceivedQuantity.ToString(), | 
|                     QtyQualified = checkOrder.QualifiedQuantity.GetValueOrDefault().ToString(), | 
|                     QtyReturn = checkOrder.ReturnQuantity.GetValueOrDefault().ToString(), | 
|                     QtyScrapped = checkOrder.ScrappedQuantity.GetValueOrDefault().ToString(), | 
|                     ReceiptCode = checkOrder.ReceiveOrderNo, | 
|                     ReceiveDate = checkOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"), | 
|                     SerNo = checkOrder.ReceiveDetailRowNo.ToString(), | 
|                     TestDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), | 
|                     UniqueTag = checkOrder.CheckOrderId.ToString(), | 
|                     Way = 1, | 
|                     Details = checkResults | 
|                 }; | 
|   | 
|                 string response = _invokeERPService.InvokeCheckOrderApi(model); | 
|   | 
|                 return WebResponseContent.Instance.OK(); | 
|             } | 
|             catch (Exception ex) | 
|             { | 
|                 return WebResponseContent.Instance.Error(ex.Message); | 
|             } | 
|         } | 
|     } | 
| } |