From 9441a216b632f9fb8f549a8278fc337367a08a4e Mon Sep 17 00:00:00 2001
From: 南骏 池 <chiffly@163.com>
Date: 星期三, 06 八月 2025 09:02:13 +0800
Subject: [PATCH] 1.调拨出库优化 2.其他出库优化调整
---
service/Warehouse/TransferOutManager.cs | 174 ++++++++++++++++++++++++++++++++-----------
service/Warehouse/MesItemQtManager.cs | 38 ++++++---
Dto/service/ProductionPickDto.cs | 2
Controllers/Warehouse/TransferOutController.cs | 26 ++++-
4 files changed, 174 insertions(+), 66 deletions(-)
diff --git a/Controllers/Warehouse/TransferOutController.cs b/Controllers/Warehouse/TransferOutController.cs
index 314ce0f..dacb59c 100644
--- a/Controllers/Warehouse/TransferOutController.cs
+++ b/Controllers/Warehouse/TransferOutController.cs
@@ -1,6 +1,7 @@
锘縰sing System.Dynamic;
using Microsoft.AspNetCore.Mvc;
using NewPdaSqlServer.Dto.service;
+using NewPdaSqlServer.service.@base;
using NewPdaSqlServer.service.Warehouse;
using NewPdaSqlServer.util;
@@ -14,6 +15,8 @@
public class TransferOutController : ControllerBase
{
private readonly TransferOutManager _manager = new();
+
+ private readonly MesPrintMangeer _mCf = new();
#region 鍩虹CRUD
@@ -197,9 +200,16 @@
try
{
dynamic resultInfos = new ExpandoObject();
- var (form, items) = _manager.ScanMoveBarcode(query);
- resultInfos.form = form;
- resultInfos.items = items;
+ resultInfos.tbBillList = _manager.ScanMoveBarcode(query);
+ if (resultInfos.tbBillList.result == "2")
+ {
+ return new ResponseResult
+ {
+ status = Convert.ToInt32(resultInfos.tbBillList.result),
+ message = resultInfos.tbBillList.strMsg,
+ data = resultInfos
+ };
+ }
return new ResponseResult
{
status = 0,
@@ -236,14 +246,16 @@
/// </remarks>
/// <response code="200">鍒嗗壊鎴愬姛</response>
/// <response code="400">鍒嗗壊澶辫触锛岃繑鍥炲叿浣撻敊璇俊鎭�</response>
- [HttpPost("SplitBarcode")]
- public ResponseResult SplitBarcode([FromBody] WarehouseQuery query)
+ [HttpPost("ScanCodeCF")]
+ public ResponseResult ScanCodeCF(WarehouseQuery query)
{
try
{
dynamic resultInfos = new ExpandoObject();
- var message = _manager.SplitBarcode(query);
- resultInfos.tbBillList = message;
+ resultInfos.tbBillList = new ExpandoObject();
+ resultInfos.tbBillList.printInfo = _mCf.getPrintInfo(query);
+ var scanResult = _manager.ScanCodeCF(query);
+ resultInfos.tbBillList.cfBarInfo = _mCf.getCfInfo(scanResult);
return new ResponseResult
{
status = 0,
diff --git a/Dto/service/ProductionPickDto.cs b/Dto/service/ProductionPickDto.cs
index 935b3a2..dc51f2c 100644
--- a/Dto/service/ProductionPickDto.cs
+++ b/Dto/service/ProductionPickDto.cs
@@ -6,6 +6,8 @@
public class ProductionPickDto
{
public string? ItemModel { get; set; }
+
+ public string? itemNo { get; set; }
public string? PlanNo { get; set; }
public string? daa001 { get; set; }
diff --git a/service/Warehouse/MesItemQtManager.cs b/service/Warehouse/MesItemQtManager.cs
index 68f2121..c2507f1 100644
--- a/service/Warehouse/MesItemQtManager.cs
+++ b/service/Warehouse/MesItemQtManager.cs
@@ -16,13 +16,14 @@
/// <returns>閫�鏂欏崟鍙峰垪琛�</returns>
public List<string> GetPendingQtList()
{
- const string sql = @"SELECT qtck
- FROM MES_ITEM_QT
- WHERE qt015 = 1
- AND qt026 = 1
- AND QT029 = 1
- AND qt032 = 1
- AND QT014 = 0 ";
+ const string sql = @"SELECT qtck
+FROM MES_ITEM_QT
+WHERE qt015 = 1
+ AND qt026 = 1
+ AND QT029 = 1
+ AND qt032 = 1
+ AND QT014 = 0
+ORDER BY qt002";
return Db.Ado.SqlQuery<string>(sql);
}
@@ -51,8 +52,8 @@
// throw new Exception($"鍏朵粬鍑哄簱鐢宠鍗� {p_bill_no} 鏈鏍革紝璇风‘璁わ紒");
// 妫�鏌ラ��鏂欏崟鐨勫畬缁撶姸鎬�(Qt014)锛屽凡瀹岀粨鍒欐姏鍑哄紓甯�
- if (mesItemQt.Qt014 == true)
- throw new Exception($"鍏朵粬鍑哄簱鐢宠鍗� {p_bill_no} 宸插畬缁擄紝璇风‘璁わ紒");
+ //if (mesItemQt.Qt014 == true)
+ // throw new Exception($"鍏朵粬鍑哄簱鐢宠鍗� {p_bill_no} 宸插畬缁擄紝璇风‘璁わ紒");
var sql = @"SELECT c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel,
ISNULL(A.qd007,0) FQty,ISNULL(A.qd008,0) SQty,ISNULL(A.qd007,0) - ISNULL(A.qd008,0) DSQty,
@@ -116,6 +117,9 @@
if (barcode == null)
throw new Exception($"mes涓笉瀛樺湪姝ゆ潯鐮�,璇锋牳瀵癸紒{p_item_barcode}");
+
+
+
// 鑾峰彇搴撳瓨淇℃伅
var stock = Db.Queryable<MesInvItemStocks>()
.Where(it => it.ItemBarcode == p_item_barcode && it.Quantity > 0)
@@ -146,6 +150,9 @@
.Where(it => it.Qtck == p_bill_no && it.Qt015 == true && it.Qt026 == true && it.Qt029 == true && it.Qt032 == true)
.First();
+ if (mesItemQt == null)
+ throw new Exception($"鍏朵粬鍑哄簱鐢宠鍗� {p_bill_no} 涓嶅瓨鍦紝璇风‘璁わ紒");
+
// 鑾峰彇鍑哄簱鍗曟槑缁�
var qtDetail = Db.Queryable<MesItemQtDatall>()
.Where(it =>
@@ -153,17 +160,20 @@
it.ItemId == stock.ItemId.ToString())
.First();
- if (mesItemQt == null)
- throw new Exception($"鍏朵粬鍑哄簱鐢宠鍗� {p_bill_no} 涓嶅瓨鍦紝璇风‘璁わ紒");
+ if (qtDetail == null) throw new Exception("鎵爜鐗╂枡闈炴湰娆″嚭搴撶敵璇风墿鏂欙紝璇锋牳瀵癸紒");
+
+
+ if (mesItemQt.Qt014 == true)
+ throw new Exception($"鍏朵粬鍑哄簱鐢宠鍗� {p_bill_no} 宸插畬缁擄紝璇风‘璁わ紒");
// 妫�鏌ヤ粨搴撴槸鍚︿竴鑷�
- if (Convert.ToInt32(qtDetail.DepotId) != stock.DepotId)
+ if (qtDetail.DepotId != stock.DepotId)
throw new Exception(
$"鎵爜鍑鸿揣浠撳簱id{qtDetail.DepotId}涓庡叾浠栧嚭搴撶敵璇蜂粨搴搟stock.DepotId}涓嶄竴鑷达紝璇锋牳瀵癸紒");
- if (qtDetail == null) throw new Exception("鎵爜鐗╂枡闈炴湰娆″嚭搴撶敵璇风墿鏂欙紝璇锋牳瀵癸紒");
+
// 妫�鏌ュ墿浣欐暟閲�
var remainingQty = (qtDetail.Qd007 ?? 0) - (qtDetail.Qd008 ?? 0);
@@ -194,6 +204,8 @@
var message =
$"璇风‘璁ゅ彂鏂欐暟閲忥紒锛佸凡甯﹀嚭婊¤冻鍏朵粬鍑哄簱鍗曠殑鍙戞枡鏁伴噺 {remainingQty} 纭鍚庤鐐瑰嚮鏉$爜鎷嗗垎";
+ throw new Exception($"鏉$爜鏁伴噺瓒呭嚭鍙戞枡鏁伴噺锛岃鎷嗗垎鍚庡啀鎵弿锛�");
+
query.itemNo = stock.ItemNo;
query.Num = stock.Quantity;
query.Fum = remainingQty;
diff --git a/service/Warehouse/TransferOutManager.cs b/service/Warehouse/TransferOutManager.cs
index 06d5955..473982e 100644
--- a/service/Warehouse/TransferOutManager.cs
+++ b/service/Warehouse/TransferOutManager.cs
@@ -42,6 +42,7 @@
// 鏍规嵁pid鏌ヨ瀵瑰簲鐨勫嚭搴撳崟鍙�
var billNos = Db.Queryable<MesDbck>()
.Where(x => result.Contains(x.Id) && x.FApproveStatus == 1)
+ .OrderBy(x => x.FCreateDate)
.Select(x => x.FBillNo)
.ToList();
@@ -53,41 +54,71 @@
/// </summary>
/// <param name="query">鏌ヨ鍙傛暟,鍖呭惈鍗曟嵁鍙�</param>
/// <returns>寰呭鐞嗙殑璋冩嫧鍑哄簱鏄庣粏鍒楄〃</returns>
- public List<ItemDetailModel> GetTransferOutDetailListByBillNo(
+ public ProductionPickDto GetTransferOutDetailListByBillNo(
WarehouseQuery query)
{
- var p_bill_no = query.billNo;
+ if (string.IsNullOrEmpty(query.billNo)) throw new Exception("璋冩嫧鍗曞彿涓虹┖");
- // 鏍规嵁SQL鏌ヨ鏉′欢鑾峰彇寰呭鐞嗙殑鍑哄簱鏄庣粏
- // 鍏宠仈鏌ヨTransferOutDetail銆乀ransferOut鍜孧esItems涓夊紶琛�
- // 绛涢�夋潯浠�:鏈畬鎴愭暟閲忓ぇ浜�0涓斿崟鎹凡瀹℃牳
- var result = Db.Queryable<MesDbckDetail, MesDbck, MesItems>(
- (b, a, s) => new JoinQueryInfos(
- JoinType.Left, b.Pid == a.Id,
- JoinType.Left, b.FMaterialId == s.Id.ToString()))
- .Where((b, a, s) =>
- !((b.FQty ?? 0) == (b.SQty ?? 0) && (b.FQty ?? 0) == (b.RQty ?? 0))
- && a.FBillNo == p_bill_no // 鍖归厤鍗曟嵁鍙�
- && a.FApproveStatus == 1) // 鍗曟嵁宸插鏍�
- .OrderBy((b, a, s) => s.ItemNo)
- .Select((b, a, s) => new ItemDetailModel
- {
- ItemNo = s.ItemNo,
- ItemName = s.ItemName,
- ItemModel = s.ItemModel,
- FQty = b.FQty, // 鐢宠鏁伴噺
- SQty = b.SQty, // 宸叉壂鏁伴噺
- RQty = b.RQty, // 宸叉壂鏁伴噺
- // 淇濈暀鍏朵粬蹇呰瀛楁...
- Pid = b.Pid.ToString(),
- FMaterialId = b.FMaterialId,
- Id = b.Id.ToString()
- })
- .ToList();
+ var sql1 = string.Format(@"SELECT * FROM MES_DBCK WHERE FDocumentStatus = 'C' AND FBillNo = '{0}'", query.billNo);
- if(result.Count < 1) throw new Exception("璇ヨ皟鎷ㄥ崟涓嶅瓨鍦ㄦ垨宸叉壂瀹岋紝璇烽噸鏂版壂鎻�");
+ var dbck = Db.Ado.SqlQuery<ItemDetailModel>(sql1);
- return result;
+ if (dbck.Count < 1) throw new Exception("璋冩嫧鍗曞彿涓嶅瓨鍦ㄦ垨鏈鏍革紒");
+
+ var sql2 = string.Format(@"SELECT c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel,b.FQty FQty,b.SQty SQty,b.FQty - b.SQty DSQty ,
+ dbo.F_QX_GETRECODEPOTSE(B.FMATERIALID,'','','') as RecoKw
+ FROM MES_DBCK_DETAIL B
+ LEFT JOIN MES_DBCK A ON A.ID = B.pid
+ LEFT JOIN MES_ITEMS C ON B.FMATERIALID = C.item_id
+ LEFT JOIN WOMCAB D ON B.erpid = D.ERPID
+ WHERE A.FBillNo = '{0}' ORDER BY FSEQ", query.billNo);
+
+ var womdabs = Db.Ado.SqlQuery<ItemDetailModel>(sql2);
+
+
+ var DS_list = womdabs.Where(s => s.DSQty > 0).ToList();
+
+ var YS_list = womdabs.Where(s => s.SQty > 0).ToList();
+
+ //var p_bill_no = query.billNo;
+
+ //// 鏍规嵁SQL鏌ヨ鏉′欢鑾峰彇寰呭鐞嗙殑鍑哄簱鏄庣粏
+ //// 鍏宠仈鏌ヨTransferOutDetail銆乀ransferOut鍜孧esItems涓夊紶琛�
+ //// 绛涢�夋潯浠�:鏈畬鎴愭暟閲忓ぇ浜�0涓斿崟鎹凡瀹℃牳
+ //var result = Db.Queryable<MesDbckDetail, MesDbck, MesItems>(
+ // (b, a, s) => new JoinQueryInfos(
+ // JoinType.Left, b.Pid == a.Id,
+ // JoinType.Left, b.FMaterialId == s.Id.ToString()))
+ // .Where((b, a, s) =>
+ // !((b.FQty ?? 0) == (b.SQty ?? 0) && (b.FQty ?? 0) == (b.RQty ?? 0))
+ // && a.FBillNo == p_bill_no // 鍖归厤鍗曟嵁鍙�
+ // && a.FApproveStatus == 1) // 鍗曟嵁宸插鏍�
+ // .OrderBy((b, a, s) => s.ItemNo)
+ // .Select((b, a, s) => new ItemDetailModel
+ // {
+ // ItemNo = s.ItemNo,
+ // ItemName = s.ItemName,
+ // ItemModel = s.ItemModel,
+ // FQty = b.FQty, // 鐢宠鏁伴噺
+ // SQty = b.SQty, // 宸叉壂鏁伴噺
+ // RQty = b.RQty, // 宸叉壂鏁伴噺
+ // // 淇濈暀鍏朵粬蹇呰瀛楁...
+ // Pid = b.Pid.ToString(),
+ // FMaterialId = b.FMaterialId,
+ // Id = b.Id.ToString()
+ // })
+ // .ToList();
+
+ //if(result.Count < 1) throw new Exception("璇ヨ皟鎷ㄥ崟涓嶅瓨鍦ㄦ垨宸叉壂瀹岋紝璇烽噸鏂版壂鎻�");
+
+ var dto = new ProductionPickDto
+ {
+ items = DS_list,
+ Ysitems = YS_list
+ // yisao = mesInvItemOutCDetailsList
+ };
+
+ return dto;
}
public List<ItemDetailModel> GetDBCKDetal(
@@ -130,7 +161,7 @@
/// </summary>
/// <param name="query">鍖呭惈鍗曟嵁鍙枫�佺敤鎴峰悕鍜屾潯鐮佷俊鎭殑鏌ヨ鍙傛暟</param>
/// <returns>澶勭悊鍚庣殑琛ㄥ崟鍜屽緟澶勭悊鏄庣粏鍒楄〃</returns>
- public (WarehouseQuery form, List<ItemDetailModel> items)
+ public ProductionPickDto
ScanMoveBarcode(WarehouseQuery query)
{
var p_bill_no = query.billNo;
@@ -148,8 +179,7 @@
// 鏌ヨ鏉$爜搴撳瓨淇℃伅骞堕獙璇�
var stock = Db.Queryable<MesInvItemStocks>()
.Where(x => x.ItemBarcode == p_item_barcode
- && x.Quantity > 0
- && !string.IsNullOrEmpty(x.DepotsCode))
+ && x.Quantity > 0)
.First();
if (stock == null) throw new Exception($"搴撳瓨涓棤姝ゆ潯鐮侊紝璇锋牳瀵癸紒{p_item_barcode}");
@@ -200,7 +230,18 @@
query.Fum = Convert.ToDecimal(splitNum);
// 杩斿洖鏇存柊鍚庣殑琛ㄥ崟鍜屽緟澶勭悊鏄庣粏
- return (query, GetDBCKDetal(query));
+ //return (query, GetDBCKDetal(query));
+ var dto = new ProductionPickDto
+ {
+ itemNo = item.ItemNo,
+ barcodeNum = barcodeNum,
+ splitNum = splitNum,
+ barcode = query.barcode,
+ strMsg = _strMsg,
+ result = _intSum
+ };
+
+ return dto;
}
catch (Exception ex)
{
@@ -309,14 +350,45 @@
}
}
- //璋冩嫧鍑哄簱鎷嗗垎 prc_pda_DBCK_CF
- public string SplitBarcode(WarehouseQuery query)
+ public ProductionPickDto ScanCodeCF(WarehouseQuery query)
{
+ var p_bill_no = query.daa001;
+ var p_item_barcode = query.barcode;
+
+ var barinfo = Db.Queryable<MesInvItemStocks>()
+ .Where(x => x.ItemBarcode == p_item_barcode)
+ .First();
+
+ // 楠岃瘉鍗曟嵁鍙�
+ if (string.IsNullOrEmpty(p_bill_no)) throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒");
+
+ // 鏌ヨ鍑哄簱鍗曞苟楠岃瘉鐘舵��
+ var transferOut = Db.Queryable<MesDbck>()
+ .Where(x => x.FBillNo == p_bill_no && x.FApproveStatus == 1)
+ .First();
+ if (transferOut == null) throw new Exception("鏈壘鍒拌皟鎷ㄧ敵璇峰崟鎴栬�呰皟鎷ㄧ敵璇峰崟娌″鏍�");
+
+ // 鏌ヨ鏉$爜搴撳瓨淇℃伅骞堕獙璇�
+ var stock = Db.Queryable<MesDbckDetail>()
+ .Where(x => x.FMaterialId == barinfo.ItemId.ToString()
+ && x.FQty > 0
+ && !string.IsNullOrEmpty(x.FStockInId)
+ && !string.IsNullOrEmpty(x.FOwnerInId))
+ .First();
+ if (stock == null) throw new Exception($"璋冩嫧鏄庣粏涓� 銆愮墿鏂欍�戞垨 銆愯皟鍏ヤ粨搴撱�戞垨銆愯皟鍏ヨ揣涓汇�戜俊鎭笉瀛樺湪锛岃鏍稿锛亄p_item_barcode}");
+
+ // 鏌ヨ鐗╂枡淇℃伅
+ var item = Db.Queryable<MesItems>()
+ .Where(x => x.Id.ToString() == stock.FMaterialId)
+ .First();
+ if (item == null) throw new Exception("鏈壘鍒扮墿鏂�");
+
var _strMsg = "";
var _intSum = "";
+ var _cfBar = "";
using (var conn = new SqlConnection(DbHelperSQL.strConn))
{
- using (var cmd = new SqlCommand("[prc_pda_DBRK]", conn))
+ using (var cmd = new SqlCommand("[prc_pda_DBCK_CF]", conn))
{
try
{
@@ -324,27 +396,36 @@
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter[] parameters =
{
- new("@outMsg", SqlDbType.NVarChar, 300),
+ new("@outMsg", SqlDbType.NVarChar, 2000),
new("@outSum", SqlDbType.NVarChar, 300),
- new("@c_user", query.userName),
- new("@p_bill_no", query.billNo),
+ new("@outCfBar", SqlDbType.NVarChar, 300),
+ new("@c_User", query.userName),
+ new("@p_biLL_no", query.daa001),
new("@p_item_barcode", query.barcode),
- new("@NUM", query.Fum),
+ new("@num", query.Num)
};
-
parameters[0].Direction = ParameterDirection.Output;
parameters[1].Direction = ParameterDirection.Output;
-
+ parameters[2].Direction = ParameterDirection.Output;
foreach (var parameter in parameters)
cmd.Parameters.Add(parameter);
cmd.ExecuteNonQuery();
_strMsg = parameters[0].Value.ToString();
_intSum = parameters[1].Value.ToString();
-
+ _cfBar = parameters[2].Value.ToString();
+
+
var result = Convert.ToInt32(_intSum);
if (result <= 0) throw new Exception(_strMsg);
-
- return _strMsg;
+
+ var dto = new ProductionPickDto
+ {
+ daa001 = query.daa001,
+ barcode = query.barcode,//鍘熸潯鐮�
+ cfBarcode = _cfBar//鎷嗗垎鍚庢潯鐮�
+ };
+
+ return dto;
}
catch (Exception ex)
{
@@ -357,4 +438,5 @@
}
}
}
+
}
\ No newline at end of file
--
Gitblit v1.9.3