using HslCommunication.WebSocket; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.OrderEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.CodeConfigEnum; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_ICheckService; using WIDESEA_IOutboundService; using WIDESEA_Model.Models; using WIDESEA_Model.Models.Check; namespace WIDESEA_CheckService { public class ReCheckOrderService : ServiceBase>, IReCheckOrderService { private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly WebSocketServer _webSocketServer; private readonly ILogger _logger; public readonly IOutboundService _outboundService; public IRepository Repository => BaseDal; public ReCheckOrderService(IRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, WebSocketServer webSocketServer, ILogger logger, IOutboundService outboundService) : base(BaseDal) { _unitOfWorkManage = unitOfWorkManage; _webSocketServer = webSocketServer; _logger = logger; _outboundService = outboundService; } public async Task ReceiveReCheckOrder(Dt_ReCheckOrder models, int operateType) { try { return operateType switch { 1 =>await AddReCheckOrder(models), 2 =>await UpdateReCheckOrder(models), 3 => DeleteReCheckOrder(models), _ => WebResponseContent.Instance.OK(), }; } catch (Exception ex) { _logger.LogInformation("ReCheckOrderService ReceiveReCheckOrder: " + ex.Message); return WebResponseContent.Instance.Error(ex.Message); } } public async Task AddReCheckOrder(Dt_ReCheckOrder model) { try { if (BaseDal.QueryFirst(x => x.OrderNo == model.OrderNo) != null) { return WebResponseContent.Instance.Error($"单号重复"); } model.Creater = "MES"; model.CreateDate = DateTime.Now; BaseDal.AddData(model); var outboundOrders = ConvertToOutboundOrders(model); await _outboundService.OutboundOrderService.ReceiveOutboundOrder(outboundOrders, 1); return WebResponseContent.Instance.OK(); } catch (Exception ex) { _logger.LogInformation("ReCheckOrderService AddReCheckOrder: " + ex.Message); return WebResponseContent.Instance.Error(ex.Message); } } public async Task UpdateReCheckOrder(Dt_ReCheckOrder model) { try { var recheckOrder = Db.Queryable().Where(x => x.OrderNo == model.OrderNo).First(); if (recheckOrder == null) { return WebResponseContent.Instance.Error($"未找到单信息"); } recheckOrder.OrderNo = model.OrderNo; recheckOrder.MaterielCode = model.MaterielCode; recheckOrder.BatchNo = model.BatchNo; recheckOrder.Unit = model.Unit; recheckOrder.Result = model.Result; recheckOrder.InspectionNumber = model.InspectionNumber; recheckOrder.SignSeq = model.SignSeq; recheckOrder.Qty = model.Qty; recheckOrder.WarehouseCode = model.WarehouseCode; recheckOrder.FactoryArea = model.FactoryArea; recheckOrder.Modifier = "MES"; recheckOrder.ModifyDate = DateTime.Now; BaseDal.UpdateData(recheckOrder); _outboundService.OutboundOrderService.Db.Deleteable().Where(x => x.OrderNo == model.OrderNo).ExecuteCommand(); _outboundService.OutboundOrderDetailService.Db.Deleteable() .Where(p => SqlFunc.Subqueryable().Where(s => s.Id == p.OrderId && s.OrderNo == model.OrderNo).Any()).ExecuteCommand(); var outboundOrders = ConvertToOutboundOrders(model); await _outboundService.OutboundOrderService.ReceiveOutboundOrder(outboundOrders, 1); return WebResponseContent.Instance.OK(); } catch (Exception ex) { _logger.LogInformation("ReCheckOrderService UpdateReCheckOrder: " + ex.Message); return WebResponseContent.Instance.Error(ex.Message); } } public WebResponseContent DeleteReCheckOrder(Dt_ReCheckOrder model) { try { var recheckOrder = Db.Queryable().Where(x => x.OrderNo == model.OrderNo).First(); if (recheckOrder == null) { return WebResponseContent.Instance.Error($"未找到单信息"); } BaseDal.DeleteData(recheckOrder); _outboundService.OutboundOrderService.Db.Deleteable().Where(x => x.OrderNo == model.OrderNo).ExecuteCommand(); _outboundService.OutboundOrderDetailService.Db.Deleteable() .Where(p => SqlFunc.Subqueryable().Where(s => s.Id == p.OrderId && s.OrderNo == model.OrderNo).Any()).ExecuteCommand(); return WebResponseContent.Instance.OK(); } catch (Exception ex) { _logger.LogInformation("ReCheckOrderService DeleteReCheckOrder: " + ex.Message); return WebResponseContent.Instance.Error(ex.Message); } } public Dt_OutboundOrder ConvertToOutboundOrders(Dt_ReCheckOrder reCheckOrder) { var outboundOrder = new Dt_OutboundOrder() { WarehouseId = 0, OrderNo = reCheckOrder.OrderNo, UpperOrderNo = reCheckOrder.OrderNo, OrderType = InOrderTypeEnum.ReCheck.ObjToInt(), OrderStatus = 0, CreateType = 0, BusinessType = "", IsBatch = 0, FactoryArea = reCheckOrder.FactoryArea, Remark = "", DepartmentCode = "", DepartmentName = "", Details = new List() }; outboundOrder.Details.Add( new Dt_OutboundOrderDetail { OrderId = 0, MaterielCode = reCheckOrder.MaterielCode, MaterielName = "", BatchNo = reCheckOrder.BatchNo, OrderQuantity = reCheckOrder.Qty, BarcodeQty = (decimal)reCheckOrder.Qty, BarcodeUnit = reCheckOrder.Unit, LockQuantity = 0, lineNo = "", OverOutQuantity = 0, OrderDetailStatus = 0, Unit = reCheckOrder.Unit, RowNo = 0, SupplyCode = "", WarehouseCode = reCheckOrder.WarehouseCode, } ); return outboundOrder; } } }