From 37454e625df68d40897112b2e8c2e3cf4d7163e3 Mon Sep 17 00:00:00 2001
From: heshaofeng <heshaofeng@hnkhzn.com>
Date: 星期三, 25 三月 2026 11:43:10 +0800
Subject: [PATCH] 1
---
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_CheckService/ReCheckOrderService.cs | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 162 insertions(+), 15 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_CheckService/ReCheckOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_CheckService/ReCheckOrderService.cs"
index ce33b32..c049786 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_CheckService/ReCheckOrderService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_CheckService/ReCheckOrderService.cs"
@@ -1,18 +1,27 @@
锘縰sing HslCommunication.WebSocket;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
+using SqlSugar;
+using StackExchange.Profiling.Internal;
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
+using WIDESEA_Common.OrderEnum;
+using WIDESEA_Common.StockEnum;
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_IBasicService;
using WIDESEA_ICheckService;
+using WIDESEA_IOutboundService;
using WIDESEA_Model.Models;
+using WIDESEA_Model.Models.Basic;
using WIDESEA_Model.Models.Check;
namespace WIDESEA_CheckService
@@ -23,22 +32,26 @@
private readonly IUnitOfWorkManage _unitOfWorkManage;
private readonly WebSocketServer _webSocketServer;
private readonly ILogger<ReCheckOrderService> _logger;
+ private readonly IMaterielInfoService _materielInfoService;
+ public readonly IOutboundService _outboundService;
public IRepository<Dt_ReCheckOrder> Repository => BaseDal;
- public ReCheckOrderService(IRepository<Dt_ReCheckOrder> BaseDal, IUnitOfWorkManage unitOfWorkManage, WebSocketServer webSocketServer, ILogger<ReCheckOrderService> logger) : base(BaseDal)
+ public ReCheckOrderService(IRepository<Dt_ReCheckOrder> BaseDal, IUnitOfWorkManage unitOfWorkManage, WebSocketServer webSocketServer, ILogger<ReCheckOrderService> logger, IOutboundService outboundService, IMaterielInfoService materielInfoService) : base(BaseDal)
{
_unitOfWorkManage = unitOfWorkManage;
_webSocketServer = webSocketServer;
_logger = logger;
+ _outboundService = outboundService;
+ _materielInfoService = materielInfoService;
}
- public WebResponseContent ReceiveReCheckOrder(Dt_ReCheckOrder models, int operateType)
+ public async Task<WebResponseContent> ReceiveReCheckOrder(Dt_ReCheckOrder models, int operateType)
{
try
{
return operateType switch
{
- 1 => AddReCheckOrder(models),
- 2 => UpdateReCheckOrder(models),
+ 1 =>await AddReCheckOrder(models),
+ 2 =>await UpdateReCheckOrder(models),
3 => DeleteReCheckOrder(models),
_ => WebResponseContent.Instance.OK(),
@@ -51,20 +64,41 @@
}
}
- public WebResponseContent AddReCheckOrder(Dt_ReCheckOrder model)
+ public async Task<WebResponseContent> AddReCheckOrder(Dt_ReCheckOrder model)
{
try
{
-
+ List<Dt_ReCheckOrder> reCheckOrders = BaseDal.Db.Queryable<Dt_ReCheckOrder>().Where(x => x.MaterielCode == model.MaterielCode && x.BatchNo == model.BatchNo).ToList();
+ if (reCheckOrders.Count() == 3)
+ {
+ return WebResponseContent.Instance.Error($"璇ョ墿鏂欏拰鎵规宸茬粡閲嶆浜嗕笁娆★紝涓嶅厑璁稿啀杩涜閲嶆");
+ }
if (BaseDal.QueryFirst(x => x.OrderNo == model.OrderNo) != null)
{
- return WebResponseContent.Instance.Error($"鍗曞彿閲嶅");
+ return WebResponseContent.Instance.Error($"{model.OrderNo}鍗曞彿閲嶅");
}
+
+ var materielInfo = _materielInfoService.Db.Queryable<Dt_MaterielInfo>().First(x => model.MaterielCode.Equals(x.MaterielCode));
model.Creater = "MES";
model.CreateDate = DateTime.Now;
- BaseDal.AddData(model);
+ model.MaterielName = materielInfo?.MaterielName ?? "";
+ var stockDetailIds = BaseDal.Db.Queryable<Dt_StockInfoDetail>()
+ .Where(x => x.MaterielCode == model.MaterielCode && x.BatchNo == model.BatchNo && x.ValidDate !=null)
+ .Select(x => x.Id)
+ .ToList();
+ if (stockDetailIds.Count > 0)
+ {
+ BaseDal.Db.Updateable<Dt_StockInfoDetail>()
+ .SetColumns(x => x.Status == StockStatusEmun.鎵嬪姩鍐荤粨.ObjToInt())
+ .Where(x => stockDetailIds.Contains(x.Id))
+ .ExecuteCommand();
+ }
+ BaseDal.AddData(model);
+ var outboundOrders = ConvertToOutboundOrders(model);
+
+ await _outboundService.OutboundOrderService.ReceiveOutboundOrder(outboundOrders, 1);
return WebResponseContent.Instance.OK();
}
catch (Exception ex)
@@ -73,15 +107,70 @@
return WebResponseContent.Instance.Error(ex.Message);
}
}
- public WebResponseContent UpdateReCheckOrder(Dt_ReCheckOrder model)
+ public async Task<WebResponseContent> UpdateReCheckOrder(Dt_ReCheckOrder model)
{
try
{
-
+ List<Dt_ReCheckOrder> reCheckOrders = BaseDal.Db.Queryable<Dt_ReCheckOrder>().Where(x=>x.MaterielCode == model.MaterielCode && x.BatchNo == model.BatchNo).ToList();
+
var recheckOrder = Db.Queryable<Dt_ReCheckOrder>().Where(x => x.OrderNo == model.OrderNo).First();
if (recheckOrder == null)
{
return WebResponseContent.Instance.Error($"鏈壘鍒板崟淇℃伅");
+ }
+ var isupdate = false;
+ if (recheckOrder.SignSeq == model.SignSeq)
+ {
+ isupdate = true;
+ }
+ if (model.Result == 1 && recheckOrder.SignSeq != model.SignSeq)
+ {
+ var stockDetailIds = BaseDal.Db.Queryable<Dt_StockInfoDetail>()
+ .Where(x => x.MaterielCode == model.MaterielCode && x.BatchNo == model.BatchNo && x.ValidDate != null && (x.Status == (int)StockStatusEmun.鎵嬪姩鍐荤粨 ||x.Status == (int)StockStatusEmun.閲嶆涓�))
+ .Select(x => x.Id)
+ .ToList();
+
+ if (stockDetailIds.Count > 0)
+ {
+ var datevaliDate = BaseDal.Db.Queryable<Dt_MaterialExpirationDate>().Where(x => x.MaterialCode.Contains(model.MaterielCode.Substring(0, 6))).First();
+ if(datevaliDate == null)
+ {
+ return WebResponseContent.Instance.Error($"璇ョ墿鏂欐湭鎵惧埌MES鎺ㄩ�佺殑鏈夋晥鏈熸暟鎹紝璇峰厛鎺ㄩ�佽鐗╂枡鐨勬湁鏁堟湡鏁版嵁");
+ }
+ BaseDal.Db.Updateable<Dt_StockInfoDetail>()
+ .SetColumns(x => x.Status == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt())
+ .Where(x => stockDetailIds.Contains(x.Id) && x.Status == (int)StockStatusEmun.鎵嬪姩鍐荤粨)
+ .ExecuteCommand();
+
+ //璁$畻褰撳墠澶嶆鍗曟嵁缁撴灉鏃堕棿
+ DateTime newDate;
+
+ if (1 == reCheckOrders.Count())
+ {
+ //鍗曟嵁缁撴灉鎺ㄩ�佹椂闂�+鐗╂枡澶嶆寤堕暱鏃堕棿涓庢湁鏁堟湡鍋氬姣旓紝璋佸ぇ鍙栬皝
+ newDate = Convert.ToDateTime(DateTime.Now).AddDays(Convert.ToDouble(datevaliDate.OneExtensionDays));
+ BaseDal.Db.Updateable<Dt_StockInfoDetail>()
+ .SetColumns(x => x.ValidDate == SqlFunc.IIF(x.ValidDate > newDate, x.ValidDate, newDate))
+ .Where(x => stockDetailIds.Contains(x.Id))
+ .ExecuteCommand();
+ }
+ else if (2 == reCheckOrders.Count())
+ {
+ newDate = Convert.ToDateTime(DateTime.Now).AddDays(Convert.ToDouble(datevaliDate.TwoExtensionDays));
+ BaseDal.Db.Updateable<Dt_StockInfoDetail>()
+ .SetColumns(x => x.ValidDate == SqlFunc.IIF(x.ValidDate > newDate, x.ValidDate, newDate))
+ .Where(x => stockDetailIds.Contains(x.Id))
+ .ExecuteCommand();
+ }
+ else if (3 == reCheckOrders.Count())
+ {
+ newDate = Convert.ToDateTime(DateTime.Now).AddDays(Convert.ToDouble(datevaliDate.ThreeExtensionDays));
+ BaseDal.Db.Updateable<Dt_StockInfoDetail>()
+ .SetColumns(x => x.ValidDate == SqlFunc.IIF(x.ValidDate > newDate, x.ValidDate, newDate))
+ .Where(x => stockDetailIds.Contains(x.Id))
+ .ExecuteCommand();
+ }
+ }
}
recheckOrder.OrderNo = model.OrderNo;
recheckOrder.MaterielCode = model.MaterielCode;
@@ -91,15 +180,24 @@
recheckOrder.InspectionNumber = model.InspectionNumber;
recheckOrder.SignSeq = model.SignSeq;
recheckOrder.Qty = model.Qty;
- recheckOrder.WarehouseCode= model.WarehouseCode;
+ recheckOrder.WarehouseCode = model.WarehouseCode;
recheckOrder.FactoryArea = model.FactoryArea;
recheckOrder.Modifier = "MES";
recheckOrder.ModifyDate = DateTime.Now;
+ var materielInfo = _materielInfoService.Db.Queryable<Dt_MaterielInfo>().First(x => model.MaterielCode.Equals(x.MaterielCode));
+ recheckOrder.MaterielName= materielInfo?.MaterielName??"";
BaseDal.UpdateData(recheckOrder);
+ if (isupdate)
+ {
+ _outboundService.OutboundOrderService.Db.Deleteable<Dt_OutboundOrder>().Where(x => x.OrderNo == model.OrderNo).ExecuteCommand();
+ _outboundService.OutboundOrderDetailService.Db.Deleteable<Dt_OutboundOrderDetail>()
+ .Where(p => SqlFunc.Subqueryable<Dt_OutboundOrder>().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)
@@ -119,9 +217,13 @@
{
return WebResponseContent.Instance.Error($"鏈壘鍒板崟淇℃伅");
}
-
- BaseDal.DeleteData(recheckOrder);
-
+
+ BaseDal.DeleteData(recheckOrder);
+
+ _outboundService.OutboundOrderService.Db.Deleteable<Dt_OutboundOrder>().Where(x => x.OrderNo == model.OrderNo).ExecuteCommand();
+ _outboundService.OutboundOrderDetailService.Db.Deleteable<Dt_OutboundOrderDetail>()
+ .Where(p => SqlFunc.Subqueryable<Dt_OutboundOrder>().Where(s => s.Id == p.OrderId && s.OrderNo == model.OrderNo).Any()).ExecuteCommand();
+
return WebResponseContent.Instance.OK();
}
@@ -132,5 +234,50 @@
}
}
+
+
+ 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 = "30",
+ IsBatch = 0,
+ FactoryArea = reCheckOrder.FactoryArea,
+ Remark = "",
+ DepartmentCode = "",
+ DepartmentName = "",
+ ReturnToMESStatus = 5,
+ Details = new List<Dt_OutboundOrderDetail>()
+ };
+ 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;
+ }
+
}
}
--
Gitblit v1.9.3