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_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;
|
}
|
|
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);
|
}
|
}
|
/// <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($"未找到质检单据");
|
}
|
if(checkOrder.AuditStatus != AuditStatusEnum.Agree.ObjToInt())
|
{
|
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.Creater,//测试
|
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);
|
}
|
}
|
}
|
}
|