From e83c793bebdb1b9ecdcd79fab8d83fd167baa817 Mon Sep 17 00:00:00 2001
From: wankeda <Administrator@DESKTOP-HAU3ST3>
Date: 星期一, 19 一月 2026 15:51:56 +0800
Subject: [PATCH] 盘点流程
---
WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderService.cs | 300 +++++++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 246 insertions(+), 54 deletions(-)
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderService.cs
index 425e7f8..4d77cb4 100644
--- a/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderService.cs
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderService.cs
@@ -1,16 +1,22 @@
锘縰sing AutoMapper;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
+using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common;
+using WIDESEA_Common.OrderEnum;
using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.CodeConfigEnum;
+using WIDESEA_Core.DB;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
+using WIDESEA_Core.Seed;
using WIDESEA_Core.Utilities;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.Outbound;
@@ -28,25 +34,31 @@
public partial class OutboundOrderService : ServiceBase<Dt_OutboundOrder, IOutboundOrderRepository>, IOutboundOrderService
{
private readonly IMapper _mapper;
+ private readonly IUnitOfWorkManage _unitOfWorkManage;
private readonly IMaterielInfoService _materielInfoService;
private readonly IStockInfoService _stockService;
private readonly IStockInfoDetailService _stockDetailService;
private readonly IOutboundOrder_HtyService _outboundOrder_HtyService;
private readonly IOutboundOrderDetail_HtyService _outboundOrderDetail_HtyService;
private readonly IOutboundOrderDetailService _outboundOrderDetailService;
+ private readonly INewOutboundOrderDetailService _newOutboundOrderDetailService;
+ private readonly INewOutboundOrderService _newOutboundOrderService;
//private readonly ITaskService _taskService;
public IOutboundOrderRepository Repository => BaseDal;
- public OutboundOrderService(IOutboundOrderRepository BaseDal, IMapper mapper, IMaterielInfoService materielInfoService, IOutboundOrderDetailService outboundOrderDetailService, IOutboundOrder_HtyService outboundOrder_HtyService, IOutboundOrderDetail_HtyService outboundOrderDetail_HtyService, IStockInfoDetailService stockDetailService, IStockInfoService stockInfoService) : base(BaseDal)
+ public OutboundOrderService(IOutboundOrderRepository BaseDal, IMapper mapper, IMaterielInfoService materielInfoService, IUnitOfWorkManage unitOfWorkManage, IOutboundOrderDetailService outboundOrderDetailService, IOutboundOrder_HtyService outboundOrder_HtyService, IOutboundOrderDetail_HtyService outboundOrderDetail_HtyService, IStockInfoDetailService stockDetailService, IStockInfoService stockInfoService, INewOutboundOrderDetailService newOutboundOrderDetailService, INewOutboundOrderService newOutboundOrderService) : base(BaseDal)
{
_mapper = mapper;
+ _unitOfWorkManage = unitOfWorkManage;
_materielInfoService = materielInfoService;
_stockDetailService = stockDetailService;
_stockService = stockInfoService;
_outboundOrder_HtyService = outboundOrder_HtyService;
- _outboundOrderDetail_HtyService = outboundOrderDetail_HtyService;
+ _outboundOrderDetail_HtyService = outboundOrderDetail_HtyService;
_outboundOrderDetailService = outboundOrderDetailService;
+ _newOutboundOrderDetailService = newOutboundOrderDetailService;
+ _newOutboundOrderService = newOutboundOrderService;
//_taskService = taskService;
}
@@ -58,6 +70,7 @@
{
BatchNo = x.FirstOrDefault()?.BatchNo ?? "",
MaterielCode = x.Key,
+ MaterielName = x.FirstOrDefault()?.MaterielName ?? "",
OrderQuantity = x.Sum(x => x.OrderQuantity),
Remark = x.FirstOrDefault(v => !string.IsNullOrEmpty(v.Remark))?.Remark ?? ""
}).ToList();
@@ -149,7 +162,7 @@
//}
/// <summary>
- /// 鍗曟嵁鍙栨秷
+ /// 鍑哄簱鍗曟嵁鍙栨秷
/// </summary>
/// <returns></returns>
public WebResponseContent CancelOut(HouseCancelOut houseCancelOut)
@@ -160,64 +173,77 @@
OutboundOrderAddDTO orderAddDTO1 = new OutboundOrderAddDTO();
orderAddDTO1.OrderNo = houseCancelOut.No;
orderAddDTO1.Details = houseCancelOut.DetailList.DicToIEnumerable<OutboundOrderDetailAddDTO>();
- Dt_OutboundOrder oldOutboundOrder = BaseDal.Db.Queryable<Dt_OutboundOrder>().Where(x => x.OrderNo == orderAddDTO1.OrderNo).Includes(x => x.Details).First();
- Dt_OutboundOrderDetail OutboundOrderDetail = BaseDal.Db.Queryable<Dt_OutboundOrderDetail>().Where(x => x.OrderId == oldOutboundOrder.Id).First();
+ Dt_OutboundOrder? oldOutboundOrder = BaseDal.Db.Queryable<Dt_OutboundOrder>().Where(x => x.OrderNo == orderAddDTO1.OrderNo).Includes(x => x.Details).First();
if (oldOutboundOrder == null)
{
return WebResponseContent.Instance.Error("鏈壘鍒版鍑哄簱鍗曟嵁");
}
- if (oldOutboundOrder.OrderStatus != InboundStatusEnum.鏈紑濮�.ObjToInt())
+ if (oldOutboundOrder != null)
{
- return WebResponseContent.Instance.Error("璇ュ叆搴撳崟浠诲姟宸插紑濮嬫墽琛�,涓嶅彲鍙栨秷");
- }
- oldOutboundOrder.OrderStatus = InboundStatusEnum.鍙栨秷.ObjToInt();
- BaseDal.UpdateData(oldOutboundOrder);
+ Dt_OutboundOrderDetail OutboundOrderDetail = BaseDal.Db.Queryable<Dt_OutboundOrderDetail>().Where(x => x.OrderId == oldOutboundOrder.Id).First();
- Dt_OutboundOrder_Hty inboundOrder_Hty = new Dt_OutboundOrder_Hty
- {
- OrderStatus = oldOutboundOrder.OrderStatus,
- CreateType = oldOutboundOrder.CreateType,
- //SourceId = oldOutboundOrder.SourceId,
- UpperOrderNo = oldOutboundOrder.UpperOrderNo,
- OrderNo = oldOutboundOrder.OrderNo,
- OutWareHouse = oldOutboundOrder.OutWareHouse,
- TransactionCode = oldOutboundOrder.TransactionCode,
- InoutType = oldOutboundOrder.InoutType,
- OrderType = oldOutboundOrder.OrderType,
- Creater = "WMS",
- CreateDate = DateTime.Now,
- };
- _outboundOrder_HtyService.AddData(inboundOrder_Hty);
-
- foreach (var item in oldOutboundOrder.Details)
- {
- Dt_OutboundOrderDetail_Hty dt_InboundOrderDetail_Hty = new Dt_OutboundOrderDetail_Hty
+ if (oldOutboundOrder.OrderStatus > OutOrderStatusEnum.鏈紑濮�.ObjToInt())
{
- OrderId = OutboundOrderDetail.OrderId,
- MaterielCode = OutboundOrderDetail.MaterielCode,
- MaterielName = OutboundOrderDetail.MaterielName,
- BatchNo = OutboundOrderDetail.BatchNo,
- OrderQuantity = OutboundOrderDetail.OrderQuantity,
- OrderDetailStatus = OutboundOrderDetail.OrderDetailStatus,
+ return WebResponseContent.Instance.Error("姝ゅ崟鎹凡寮�濮嬫墽琛岋紝涓嶅厑璁稿彇娑�");
+ }
+ oldOutboundOrder.OrderStatus = OutboundStatusEnum.鍙栨秷.ObjToInt();
+ BaseDal.UpdateData(oldOutboundOrder);
+
+ Dt_OutboundOrder_Hty inboundOrder_Hty = new Dt_OutboundOrder_Hty
+ {
+ OrderStatus = oldOutboundOrder.OrderStatus,
+ CreateType = oldOutboundOrder.CreateType,
+ //SourceId = oldOutboundOrder.SourceId,
+ UpperOrderNo = oldOutboundOrder.UpperOrderNo,
+ OrderNo = oldOutboundOrder.OrderNo,
+ OutWareHouse = oldOutboundOrder.OutWareHouse,
+ TransactionCode = oldOutboundOrder.TransactionCode,
+ InoutType = oldOutboundOrder.InoutType,
+ OrderType = oldOutboundOrder.OrderType,
Creater = "WMS",
CreateDate = DateTime.Now,
};
- _outboundOrderDetail_HtyService.AddData(dt_InboundOrderDetail_Hty);
- _outboundOrderDetailService.DeleteData(item);
+ _outboundOrder_HtyService.AddData(inboundOrder_Hty);
+
+ foreach (var item in oldOutboundOrder.Details)
+ {
+ Dt_OutboundOrderDetail_Hty dt_InboundOrderDetail_Hty = new Dt_OutboundOrderDetail_Hty
+ {
+ OrderId = OutboundOrderDetail.OrderId,
+ MaterielCode = OutboundOrderDetail.MaterielCode,
+ MaterielName = OutboundOrderDetail.MaterielName,
+ BatchNo = OutboundOrderDetail.BatchNo,
+ OrderQuantity = OutboundOrderDetail.OrderQuantity,
+ OrderDetailStatus = OutboundOrderDetail.OrderDetailStatus,
+ Creater = "WMS",
+ CreateDate = DateTime.Now,
+ };
+ _outboundOrderDetail_HtyService.AddData(dt_InboundOrderDetail_Hty);
+ _outboundOrderDetailService.DeleteData(item);
+ }
+ BaseDal.DeleteData(oldOutboundOrder);
}
- BaseDal.DeleteData(oldOutboundOrder);
+ Dt_NewOutboundOrder dt_NewOutboundOrder = BaseDal.Db.Queryable<Dt_NewOutboundOrder>().Where(x => x.OrderNo == orderAddDTO1.OrderNo).Includes(x => x.Details).First();
+ if (dt_NewOutboundOrder == null)
+ {
+ return WebResponseContent.Instance.Error("鏈壘鍒版鍑哄簱鍗曟嵁");
+ }
+ if (dt_NewOutboundOrder != null)
+ {
- //#region 楠岃瘉鏁版嵁
- //(bool, string, object?) result = CheckOutboundOrderAddData(orderAddDTO1);
- //if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2);
- //#endregion
-
- //Dt_OutboundOrder inboundOrder = _mapper.Map<Dt_OutboundOrder>(orderAddDTO1);
- //inboundOrder.OrderStatus = InboundStatusEnum.鏈紑濮�.ObjToInt();
- //inboundOrder.OrderType = OutOrderTypeEnum.OutInventory.ObjToInt();
- //inboundOrder.Creater = "WMS";
- //inboundOrder.CreateDate = DateTime.Now;
- //bool a = BaseDal.Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand();
+ if (dt_NewOutboundOrder.OrderStatus > OutOrderStatusEnum.鏈紑濮�.ObjToInt())
+ {
+ return WebResponseContent.Instance.Error("姝ゅ崟鎹凡寮�濮嬫墽琛岋紝涓嶅厑璁稿彇娑�");
+ }
+ List<Dt_NewOutboundOrderDetail> newOutboundOrderDetail = BaseDal.Db.Queryable<Dt_NewOutboundOrderDetail>().Where(x => x.OrderId == dt_NewOutboundOrder.Id).ToList();
+ dt_NewOutboundOrder.OrderStatus = OutboundStatusEnum.鍙栨秷.ObjToInt();
+ foreach (var item in newOutboundOrderDetail)
+ {
+ item.OrderDetailStatus = OutboundStatusEnum.鍙栨秷.ObjToInt();
+ }
+ _newOutboundOrderService.UpdateData(dt_NewOutboundOrder);
+ _newOutboundOrderDetailService.UpdateData(newOutboundOrderDetail);
+ }
content = WebResponseContent.Instance.OK();
}
catch (Exception ex)
@@ -258,19 +284,185 @@
return (true, "鎴愬姛", outboundOrderAddDTO);
}
-
- public WebResponseContent ReleaseOutOrder(int orderId)
+ /// <summary>
+ /// 閲嶅啓鍑哄簱鏂板缓椤甸潰
+ /// </summary>
+ /// <param name="orderAddDTO"></param>
+ /// <returns></returns>
+ public WebResponseContent Save(OutboundOrderAddDTO orderAddDTO)
{
- WebResponseContent content = new WebResponseContent();
try
{
+ List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
+ Random random = new Random();
+ if (orderAddDTO.Details != null)
+ {
+ foreach (var model in orderAddDTO.Details)
+ {
+ Dt_OutboundOrderDetail outboundOrderDetail = new Dt_OutboundOrderDetail()
+ {
+ MaterielCode = model.MaterielCode,
+ MaterielName = model.MaterielName,
+ OrderQuantity = model.OrderQuantity,
+ BatchNo = model.BatchNo,
+ OrderDetailStatus = InOrderStatusEnum.鏈紑濮�.ObjToInt(),
+ Creater = "WMS",
+ CreateDate = DateTime.Now,
+
+ };
+ outboundOrderDetails.Add(outboundOrderDetail);
+ }
+ }
+ int randomNum2 = random.Next(1, 1000);
+ string datePart2 = DateTime.Now.ToString("yyyyMMdd");
+ Dt_Warehouse warehouse = BaseDal.Db.Queryable<Dt_Warehouse>().Where(x => x.WarehouseId == orderAddDTO.WarehouseId).First();
+ if (warehouse == null)
+ {
+ return WebResponseContent.Instance.Error("璇ヤ粨搴撲俊鎭皻鏈厤缃�");
+ }
+ Dt_OutboundOrder outboundOrder = new Dt_OutboundOrder()
+ {
+ OrderNo = "WMSOUT" + $"{datePart2}{randomNum2}",
+ UpperOrderNo = "WMSOUT" + $"{datePart2}{randomNum2}",
+ OutWareHouse = warehouse.WarehouseCode,
+ OrderType = OrderTypeEnum.鐢熶骇鍑哄簱鍗�.ObjToInt(),
+ InoutType = InoutTypeEnum.OtherOut.ToString(),
+ OrderStatus = InOrderStatusEnum.鏈紑濮�.ObjToInt(),
+ CreateType = OrderCreateTypeEnum.CreateInSystem.ObjToInt(),
+ System = "WMS",
+ Details = outboundOrderDetails,
+ Creater = "WMS",
+ CreateDate = DateTime.Now,
+ };
+ _unitOfWorkManage.BeginTran();
+ Db.InsertNav(outboundOrder).Include(x => x.Details).ExecuteCommand();
+ _unitOfWorkManage.CommitTran();
+ return WebResponseContent.Instance.OK();
}
catch (Exception ex)
{
-
+ _unitOfWorkManage.RollbackTran();
+ return WebResponseContent.Instance.Error(ex.Message);
}
- return content;
+
}
+
+ public WebResponseContent GetCodeByWarehouse(int warehouseId)
+ {
+ try
+ {
+ //鑾峰彇鎵�鏈夊簱瀛樺瀷鍙�
+ List<Dt_StockInfoDetail> StockInfoDetails = _stockService.Db.Queryable<Dt_StockInfo, Dt_StockInfoDetail>((master, detail) => master.Id == detail.StockId)
+ .Where((master, detail) => master.WarehouseId == warehouseId)
+ .Select((master, detail) => detail)
+ .ToList();
+ //杩囨护閲嶅
+ List<string> code = StockInfoDetails.Select(x => x.MaterielCode).Distinct().ToList();
+ return WebResponseContent.Instance.OK("鎴愬姛", data: code);
+ }
+ catch (Exception ex)
+ {
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
+
+ public WebResponseContent GetVersionByCode(string materielCode, int warehouseId)
+ {
+ try
+ {
+ //鑾峰彇鎸囧畾浜у搧搴撳瓨鐗堟湰
+ List<Dt_StockInfoDetail> StockInfoDetails = _stockService.Db.Queryable<Dt_StockInfo, Dt_StockInfoDetail>((master, detail) => master.Id == detail.StockId)
+ .Where((master, detail) => master.WarehouseId == warehouseId && detail.MaterielCode == materielCode)
+ .Select((master, detail) => detail)
+ .ToList();
+ //杩囨护閲嶅
+ List<string> materielName = StockInfoDetails.Select(x => x.MaterielName).Distinct().ToList();
+ return WebResponseContent.Instance.OK("鎴愬姛", data: materielName);
+ }
+ catch (Exception ex)
+ {
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
+
+ public WebResponseContent GetLotNoByCode(string materielCode, int warehouseId)
+ {
+ try
+ {
+ List<Dt_StockInfoDetail> StockInfoDetails = _stockService.Db.Queryable<Dt_StockInfo, Dt_StockInfoDetail>((master, detail) => master.Id == detail.StockId)
+ .Where((master, detail) => master.WarehouseId == warehouseId && detail.MaterielCode == materielCode)
+ .Select((master, detail) => detail)
+ .ToList();
+ //杩囨护閲嶅
+ List<string> batchNo = StockInfoDetails.Select(x => x.BatchNo).Distinct().ToList();
+ return WebResponseContent.Instance.OK("鎴愬姛", data: batchNo);
+ }
+ catch (Exception ex)
+ {
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
+
+ static object lock_code = new object();
+ public string CreateCodeByRule(string ruleCode)
+ {
+ lock (lock_code)
+ {
+
+ string code = string.Empty;
+ DateTime dateTime = DateTime.Now;
+ DateTime now = DateTime.Now;
+ try
+ {
+ if (string.IsNullOrEmpty(ruleCode))
+ throw new ArgumentNullException(nameof(ruleCode));
+ SqlSugarClient sugarClient = new SqlSugarClient(new ConnectionConfig
+ {
+ IsAutoCloseConnection = true,
+ DbType = DbType.SqlServer,
+ ConnectionString = DBContext.ConnectionString
+ });
+ Dt_CodeRuleConfig codeRuleConfig = sugarClient.Queryable<Dt_CodeRuleConfig>().Where(x => x.RuleCode == ruleCode).First();
+ if (codeRuleConfig == null)
+ throw new ArgumentNullException(nameof(codeRuleConfig));
+ if (codeRuleConfig.ModifyDate != null)
+ {
+ dateTime = Convert.ToDateTime(codeRuleConfig.ModifyDate);
+ }
+ else
+ {
+ dateTime = Convert.ToDateTime(codeRuleConfig.CreateDate);
+ }
+
+ if (now.Year == dateTime.Year && now.Month == dateTime.Month && now.Day == dateTime.Day)
+ {
+ now = dateTime;
+ codeRuleConfig.CurrentVal = Convert.ToInt32(codeRuleConfig.CurrentVal) + 1;
+ }
+ else
+ {
+ codeRuleConfig.CurrentVal = 1;
+ }
+ codeRuleConfig.ModifyDate = DateTime.Now;
+ code = codeRuleConfig.Format;
+ code = code.Replace($"[{CodeFormatTypeEnum.YYYY}]", now.Year.ToString().PadLeft(4, '0'));
+ code = code.Replace($"[{CodeFormatTypeEnum.MM}]", now.Month.ToString().PadLeft(2, '0'));
+ code = code.Replace($"[{CodeFormatTypeEnum.DD}]", now.Day.ToString().PadLeft(2, '0'));
+ code = code.Replace($"[{CodeFormatTypeEnum.ST}]", codeRuleConfig.StartStr?.ToString() ?? "");
+ code = code.Replace($"[{CodeFormatTypeEnum.NUM}]", codeRuleConfig.CurrentVal.ToString().PadLeft(codeRuleConfig.Length, '0'));
+ Dictionary<string, object> keyValuePairs = new Dictionary<string, object>() { { nameof(codeRuleConfig.CurrentVal), codeRuleConfig.CurrentVal }, { nameof(codeRuleConfig.Id), codeRuleConfig.Id }, { nameof(codeRuleConfig.ModifyDate), DateTime.Now } };
+ sugarClient.Updateable(keyValuePairs).AS(MainDb.CodeRuleConfig).WhereColumns(nameof(codeRuleConfig.Id)).ExecuteCommand();
+ sugarClient.Updateable(codeRuleConfig);
+
+ }
+ catch (Exception ex)
+ {
+
+ }
+ return code;
+ }
+ }
+
}
}
--
Gitblit v1.9.3