From 6bc8d28f628be77b8847edc5eaf414f5c0a4ba3b Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期六, 11 一月 2025 09:57:04 +0800
Subject: [PATCH] 11
---
service/Wom/WwGdManager.cs | 368 +++++++++++++++++++++++++++++++++++++++++++++++++++
Controllers/Wom/WwGdController.cs | 43 +++++
2 files changed, 403 insertions(+), 8 deletions(-)
diff --git a/Controllers/Wom/WwGdController.cs b/Controllers/Wom/WwGdController.cs
index a1a34f0..2f9e7bb 100644
--- a/Controllers/Wom/WwGdController.cs
+++ b/Controllers/Wom/WwGdController.cs
@@ -19,7 +19,7 @@
/// <param name="query">鎵爜璇锋眰鍙傛暟</param>
/// <returns>ResponseResult瀵硅薄锛屽寘鍚姸鎬併�佹秷鎭拰鏁版嵁</returns>
/// // Demo Request:
- // POST /api/WwGdController/ScanCode
+ // POST /api/WwGd/ScanCode
// Body:
// {
// "query": {
@@ -55,7 +55,7 @@
/// <param name="query">鎵爜纭璇锋眰鍙傛暟</param>
/// <returns>ResponseResult瀵硅薄锛屽寘鍚姸鎬併�佹秷鎭拰鏁版嵁</returns>
/// // Demo Request:
- // POST /api/WwGdController/ScanCodeCF
+ // POST /api/WwGd/ScanCodeCF
// Body:
// {
// "query": {
@@ -91,7 +91,7 @@
/// <param name="query">宸ュ崟鍙疯姹傚弬鏁�</param>
/// <returns>ResponseResult瀵硅薄锛屽寘鍚姸鎬併�佹秷鎭拰鏁版嵁</returns>
// Demo Request:
- // POST /api/WwGdController/GetItemsByDaa001
+ // POST /api/WwGd/GetItemsByDaa001
// Body:
// {
// "query": {
@@ -121,6 +121,43 @@
}
/// <summary>
+ /// 濮斿宸ュ崟閫�鏂欐壂鐮�
+ /// </summary>
+ /// <param name="barcode">鏉″舰鐮佸彿</param>
+ /// <returns>ResponseResult瀵硅薄锛屽寘鍚姸鎬併�佹秷鎭拰鏁版嵁</returns>
+ // Demo Request:
+ // POST /api/WwGd/WwblScanBarcode
+ // Body:
+ // {
+ // 鍙傛暟璇存槑:
+ // - billNo: 鍗曟嵁鍙�(蹇呭~)
+ // - barcode: 鏉$爜(蹇呭~)
+ // - userName: 鐢ㄦ埛鍚�
+ // - blNo: 琛ユ枡鍗曞彿(蹇呭~)
+ // }
+ [HttpPost("WwblScanBarcode")]
+ public ResponseResult WwblScanBarcode(WarehouseQuery query)
+ {
+ try
+ {
+ // 璋冪敤WwGdManager鐨刉wblScanBarcode鏂规硶鑾峰彇鐗╂枡淇℃伅
+ dynamic resultInfos = new ExpandoObject();
+ resultInfos.materialInfo = m.WwblScanBarcode(query);
+ return new ResponseResult
+ {
+ status = 0,
+ message = "OK",
+ data = resultInfos
+ };
+ }
+ catch (Exception ex)
+ {
+ // 濡傛灉鍙戠敓寮傚父锛岃繑鍥為敊璇俊鎭�
+ return ResponseResult.ResponseError(ex);
+ }
+ }
+
+ /// <summary>
/// 鑾峰彇鎵�鏈�
/// </summary>
/// <returns></returns>
diff --git a/service/Wom/WwGdManager.cs b/service/Wom/WwGdManager.cs
index 5803cf3..7a64858 100644
--- a/service/Wom/WwGdManager.cs
+++ b/service/Wom/WwGdManager.cs
@@ -4,6 +4,7 @@
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.entity;
+using NewPdaSqlServer.util;
using SqlSugar;
namespace NewPdaSqlServer.service.Wom;
@@ -143,7 +144,7 @@
{
if (string.IsNullOrEmpty(query.daa001)) throw new Exception("宸ュ崟鍙蜂负绌�");
- var womdaa = Db.Queryable<WwGd, MesItems>((a, i) =>
+ var wwgd = Db.Queryable<WwGd, MesItems>((a, i) =>
new JoinQueryInfos(JoinType.Left,
a.Daa003 == i.ItemId))
.Where((a, i) => a.Daa001 == query.daa001)
@@ -152,9 +153,10 @@
a.Daa001, a.RwdGuid
}).First();
- if (womdaa?.Daa001 == null) throw new Exception("宸ュ崟鍙蜂笉瀛樺湪");
+ if (wwgd?.Daa001 == null) throw new Exception("宸ュ崟鍙蜂笉瀛樺湪");
- var womdabs = Db.Queryable<WwGd, WwGdDetail, MesItems, ProductionOrderSub>(
+ var womdabs = Db
+ .Queryable<WwGd, WwGdDetail, MesItems, ProductionOrderSub>(
(a, b, c, d) =>
new JoinQueryInfos(
JoinType.Left,
@@ -201,12 +203,12 @@
.ToList();
var womcaa = Db.Queryable<ProductionOrder>()
- .Where(s => s.Guid == womdaa.RwdGuid)
+ .Where(s => s.Guid == wwgd.RwdGuid)
.First();
var dto = new ProductionPickDto
{
- daa001 = womdaa.Daa001,
+ daa001 = wwgd.Daa001,
PlanNo = womcaa.ErpProductionOrderNo,
totals1 = womdabs,
daisao1 = list,
@@ -215,4 +217,360 @@
return dto;
}
+
+
+ #region 濮斿琛ユ枡
+
+ /// <summary>
+ /// 濮斿宸ュ崟閫�鏂欐壂鐮�
+ /// 鎵弿鏉$爜 prc_rf_pda_scan_zout_barcode3
+ /// </summary>
+ /// <param name="query">鏌ヨ鍙傛暟</param>
+ /// <returns>鎵弿缁撴灉</returns>
+ /// <remarks>
+ /// 鍙傛暟璇存槑:
+ /// - billNo: 鍗曟嵁鍙�(蹇呭~)
+ /// - barcode: 鏉$爜(蹇呭~)
+ /// - userName: 鐢ㄦ埛鍚�
+ /// - blNo: 琛ユ枡鍗曞彿(蹇呭~)
+ /// </remarks>
+ public (WarehouseQuery item, List<MesItemBlDetail> pendingList)
+ WwblScanBarcode(WarehouseQuery query)
+ {
+ if (string.IsNullOrEmpty(query.billNo))
+ throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒");
+
+ if (string.IsNullOrEmpty(query.barcode))
+ throw new Exception("璇锋壂鎻忔潯鐮侊紒");
+
+ if (string.IsNullOrEmpty(query.userName))
+ throw new Exception("鐢ㄦ埛鍚嶄笉鑳戒负绌猴紒");
+
+ if (string.IsNullOrEmpty(query.blNo))
+ throw new Exception("琛ユ枡鍗曞彿涓嶈兘涓虹┖锛�");
+
+
+ // 妫�楠屾槸鍚﹂噸澶嶆壂鎻�
+ var exists = Db.Queryable<MesInvItemOutCDetails>()
+ .Where(b => b.ItemBarcode == query.barcode)
+ .Any();
+
+ if (exists)
+ throw new Exception("姝ゆ潯鐮佸凡鎵弿,鍕块噸澶嶆壂鐮侊紒");
+
+ // 鏌ヨ鏉$爜搴撳瓨淇℃伅
+ var stockBarcode = Db.Queryable<MesInvItemStocks>()
+ .Where(t => t.ItemBarcode == query.barcode && t.Quantity > 0)
+ .First();
+
+ if (stockBarcode == null)
+ throw new Exception($"搴撳瓨涓棤姝ゆ潯鐮�,璇锋牳瀵癸紒{query.barcode}");
+
+ // 妫�鏌ヨˉ鏂欏崟鐘舵��
+ var mesItemBl = Db.Queryable<MesItemBl>()
+ .Where(a => a.BlNo == query.blNo)
+ .First();
+
+ if (mesItemBl == null)
+ throw new Exception($"鐢宠鍗� {query.blNo} 宸叉挙鍥烇紒");
+
+ if (mesItemBl.Bl018 != true)
+ throw new Exception($"鐢宠鍗� {query.blNo} 鏈鏍革紒");
+
+ if (mesItemBl.Bl019 == true)
+ throw new Exception($"鐢宠鍗� {query.blNo} 宸插畬缁擄紒");
+
+ // 鑾峰彇琛ユ枡鍗曟槑缁嗗苟鏍¢獙
+ var blDetail = Db.Queryable<MesItemBlDetail>()
+ .Where(b =>
+ b.Mid == mesItemBl.Id && b.Bld012 == stockBarcode.ItemId)
+ .First();
+
+ if (blDetail == null)
+ throw new Exception($"鐢宠鍗曚笉瀛樺湪姝ょ墿鏂� {stockBarcode.ItemNo} 璇风‘璁わ紒");
+
+ // 妫�鏌ュ緟琛ユ暟閲�
+ var quantity = (blDetail.Bld007 ?? 0) - (blDetail.Bld008 ?? 0);
+ if (quantity == 0)
+ throw new Exception("鐗╂枡宸叉壂鐮佸畬鎴愶紝璇锋牳瀵癸紒");
+
+ // 妫�鏌ュ伐鍗曚俊鎭�
+ var wwgd = Db.Queryable<WwGd>()
+ .Where(a => a.Daa001 == query.billNo)
+ .First();
+
+ if (wwgd == null)
+ throw new Exception($"宸ュ崟 {query.billNo} 涓嶅瓨鍦紝璇风‘璁わ紒");
+
+ // 妫�鏌ュ鏂欐槑缁�
+ var womdab = Db.Queryable<WwGdDetail>()
+ .Where(b => b.Dab001 == query.billNo && b.Erpid == blDetail.Bld014)
+ .First();
+
+ if (womdab == null)
+ throw new Exception($"澶囨枡鏄庣粏涓嶅瓨鍦ㄦ鐗╂枡 {stockBarcode.ItemNo} 璇风‘璁わ紒");
+
+ if (stockBarcode.Quantity > quantity)
+ {
+ // 鑾峰彇寰呭彂鏂欐槑缁嗗垪琛�
+ var pendingList = Db.Queryable<MesItemBl, MesItemBlDetail>((a, b) =>
+ new JoinQueryInfos(JoinType.Left, a.Id == b.Mid))
+ .Where((a, b) => a.BlNo == query.blNo
+ && (b.Bld007 ?? 0) - (b.Bld008 ?? 0) > 0)
+ .Select((a, b) => new MesItemBlDetail
+ {
+ Bld012 = b.Bld012,
+ Bld002 = b.Bld002,
+ Bld003 = b.Bld003,
+ Bld004 = b.Bld004,
+ Bld007 = b.Bld007,
+ Bld008 = b.Bld008
+ })
+ .ToList();
+
+
+ query.Num = stockBarcode.Quantity;
+ query.Fum = quantity;
+
+ return (query, pendingList);
+ }
+
+ // 寮�鍚簨鍔″鐞�
+ var success = UseTransaction(db =>
+ {
+ // 鑾峰彇鎴栧垱寤哄嚭搴撳崟
+ var outId = Guid.NewGuid();
+ var outNo = BillNo.GetBillNo("BL(宸ュ崟琛ユ枡)");
+
+ var existingOut = db.Queryable<MesInvItemOuts>()
+ .Where(a => a.BbillNo == query.blNo
+ && a.DepotCode == womdab.Dab017
+ && a.OutDate.Value.Date.ToString("yyyy-MM-dd") ==
+ DateTime.Now.Date.ToString("yyyy-MM-dd")
+ && a.BillTypeId == 200
+ && a.TransactionNo == 209
+ && a.Status == 0)
+ .First();
+
+ if (existingOut != null)
+ {
+ outId = existingOut.Guid;
+ outNo = existingOut.ItemOutNo;
+ }
+ else
+ {
+ // 鎻掑叆鍑哄簱鍗曚富琛�
+ db.Insertable(new MesInvItemOuts
+ {
+ Guid = outId,
+ ItemOutNo = outNo,
+ TaskNo = query.blNo,
+ CreateBy = query.userName,
+ CreateDate = DateTime.Now,
+ LastupdateBy = query.userName,
+ LastupdateDate = DateTime.Now,
+ BillTypeId = 200,
+ TransactionNo = 209,
+ Remark = mesItemBl.Bl007,
+ DepotCode = womdab.Dab017,
+ OutPart = wwgd.Daa013.ToString(),
+ FType = 0,
+ Factory = stockBarcode.Factory,
+ Company = stockBarcode.Company,
+ // WorkNo = wwgd.Daa021,
+ // BoardItem = wwgd.Daa002,
+ PbillNo = wwgd.Daa001,
+ OutDate = DateTime.Now,
+ Status = 0,
+ BbillNo = query.blNo
+ }).IgnoreColumns(true).ExecuteCommand();
+ }
+
+ // 妫�鏌ュ苟鏇存柊鍑哄簱鍗曠墿鏂欐槑缁�
+ var itemCount = db.Queryable<MesInvItemOutItems>()
+ .Where(i =>
+ i.ItemOutId == outId && i.ItemId == stockBarcode.ItemId)
+ .Count();
+
+ if (itemCount > 0)
+ // 鏇存柊宸插瓨鍦ㄧ殑鐗╂枡鏄庣粏鏁伴噺
+ db.Updateable<MesInvItemOutItems>()
+ .SetColumns(i =>
+ i.Quantity == i.Quantity + stockBarcode.Quantity)
+ .Where(i =>
+ i.ItemOutId == outId && i.ItemId == stockBarcode.ItemId)
+ .ExecuteCommand();
+ else
+ // 鎻掑叆鏂扮殑鐗╂枡鏄庣粏璁板綍
+ db.Insertable(new MesInvItemOutItems
+ {
+ Guid = Guid.NewGuid(),
+ ItemOutId = outId,
+ ItemNo = blDetail.Bld002,
+ Quantity = stockBarcode.Quantity,
+ CreateBy = query.userName,
+ CreateDate = DateTime.Now,
+ LastupdateBy = query.userName,
+ LastupdateDate = DateTime.Now,
+ Factory = stockBarcode.Factory,
+ Company = stockBarcode.Company,
+ DepotCode = womdab.Dab017,
+ TaskNo = query.blNo,
+ // WorkNo = wwgd.Daa021,
+ WorkLine = blDetail.Bld013,
+ ErpItemNo = womdab.Dab003.ToString(),
+ ErpId = womdab.Eid,
+ ErpAutoid = womdab.Erpid,
+ PbillNo = query.billNo,
+ ItemId = blDetail.Bld012
+ // Unit = blDetail.Bld009,
+ // DepotId = (int)stockBarcode.DepotsId
+ }).IgnoreColumns(true).ExecuteCommand();
+
+ // 鎻掑叆鍑哄簱鍗曟潯鐮佹槑缁�
+ db.Insertable(new MesInvItemOutCDetails
+ {
+ Guid = Guid.NewGuid(),
+ ItemOutId = outId,
+ ItemBarcode = stockBarcode.ItemBarcode,
+ ItemNo = stockBarcode.ItemNo,
+ LotNo = stockBarcode.LotNo,
+ Quantity = stockBarcode.Quantity,
+ ForceOutFlag = 0,
+ CreateBy = query.userName,
+ CreateDate = DateTime.Now,
+ LastupdateBy = query.userName,
+ LastupdateDate = DateTime.Now,
+ DepotCode = stockBarcode.DepotsCode,
+ DepotSectionCode = stockBarcode.DepotSectionsCode,
+ Remark = blDetail.Bld010,
+ Factory = stockBarcode.Factory,
+ Company = stockBarcode.Company,
+ TaskNoy = mesItemBl.Bl013,
+ BoardStyle = mesItemBl.Bl002,
+ TaskNo = query.blNo,
+ WorkNo = blDetail.Bld001,
+ WorkLine = blDetail.Bld013,
+ SuppNo = stockBarcode.SuppNo,
+ PbillNo = query.billNo,
+ ItemId = blDetail.Bld012,
+ Unit = blDetail.Bld009,
+ DepotId = (int)stockBarcode.DepotsId,
+ EbelnK3id = womdab.Eid,
+ LineK3id = womdab.Erpid
+ }).IgnoreColumns(true).ExecuteCommand();
+
+ // 鎻掑叆涓氬姟浜ゆ槗璁板綍
+ db.Insertable(new MesInvBusiness2
+ {
+ Guid = Guid.NewGuid(),
+ Status = 1,
+ BillTypeId = 200, // p_bill_type_id
+ TransactionCode = "210", // p_transaction_no
+ BusinessType = -1,
+ ItemBarcode = stockBarcode.ItemBarcode,
+ ItemNo = stockBarcode.ItemNo,
+ LotNo = stockBarcode.LotNo,
+ EpFlag = true,
+ Quantity = stockBarcode.Quantity,
+ FromInvDepotsCode = stockBarcode.DepotsCode,
+ FromInvDepotSectionsCode = stockBarcode.DepotSectionsCode,
+ CreateBy = query.userName,
+ CreateDate = DateTime.Now,
+ LastupdateBy = query.userName,
+ LastupdateDate = DateTime.Now,
+ Factory = stockBarcode.Factory,
+ Company = stockBarcode.Company,
+ TaskNo = mesItemBl.Bl012, // Matches C_QTCK.Bl012
+ BillNo = query.blNo,
+ WorkNo = blDetail.Bld001, // Matches C_QTCK_D.Bld001
+ WorkLine = blDetail.Bld013, // Matches C_QTCK_D.Bld013
+ SuppNo = stockBarcode.SuppNo,
+ ItemId = stockBarcode.ItemId
+ // CkDepot = stockBarcode.DepotsId
+ }).IgnoreColumns(true).ExecuteCommand();
+
+
+ // 鏇存柊宸ュ崟琛ㄦ暟閲�
+ db.Updateable<WwGdDetail>()
+ .SetColumns(it => new WwGdDetail
+ {
+ Dab007 = (it.Dab007 ?? 0) + (int)stockBarcode.Quantity,
+ Dab020 = (it.Dab020 ?? 0) + (int)stockBarcode.Quantity,
+ Dab021 = (it.Dab021 ?? 0) + (int)stockBarcode.Quantity
+ })
+ .Where(it => it.Id == womdab.Id && it.Dab003 == womdab.Dab003)
+ .ExecuteCommand();
+
+ // 鏇存柊琛ユ枡鍗曟槑缁嗗凡琛ユ暟閲�
+ db.Updateable<MesItemBlDetail>()
+ .SetColumns(it => new MesItemBlDetail
+ {
+ Bld008 = (it.Bld008 ?? 0) + (int)stockBarcode.Quantity
+ })
+ .Where(it => it.Id == blDetail.Id)
+ .ExecuteCommand();
+
+ // 妫�鏌ヨˉ鏂欏崟鏄庣粏鏄惁瀹屾垚
+ var blDetail1 = db.Queryable<MesItemBlDetail>()
+ .Where(it => it.Id == blDetail.Id)
+ .First();
+
+ if ((blDetail1.Bld007 ?? 0) <= (blDetail1.Bld008 ?? 0))
+ // 鏇存柊鏄庣粏瀹屾垚鐘舵��
+ db.Updateable<MesItemBlDetail>()
+ .SetColumns(it => it.Bld011 == 1)
+ .Where(it => it.Id == blDetail1.Id)
+ .ExecuteCommand();
+
+ // 鏇存柊搴撳瓨鏁伴噺涓�0
+ db.Updateable<MesInvItemStocks>()
+ .SetColumns(it => it.Quantity == 0)
+ .Where(it => it.Guid == stockBarcode.Guid)
+ .ExecuteCommand();
+
+
+ // 妫�鏌ユ槸鍚︽墍鏈夋槑缁嗛兘宸插畬鎴�
+ var unfinishedDetail = db.Queryable<MesItemBlDetail>()
+ .LeftJoin<MesItemBl>((b, a) => a.Id == b.Mid)
+ .Where((b, a) => a.BlNo == query.blNo && (b.Bld011 ?? 0) == 0)
+ .Select((b, a) => b)
+ .First();
+
+ if (unfinishedDetail == null)
+ // 濡傛灉娌℃湁鏈畬鎴愮殑鏄庣粏锛屾洿鏂拌ˉ鏂欏崟鐘舵�佷负宸插畬鎴�
+ db.Updateable<MesItemBl>()
+ .SetColumns(it => new MesItemBl
+ {
+ Bl019 = true,
+ WcUser = query.userName,
+ WcTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+ })
+ .Where(it => it.Id == mesItemBl.Id)
+ .ExecuteCommand();
+
+ return 1;
+ });
+
+ // 鑾峰彇鏈�缁堢殑寰呭彂鏂欐槑缁嗗垪琛�
+ var finalPendingList = Db.Queryable<MesItemBl, MesItemBlDetail>(
+ (a, b) =>
+ new JoinQueryInfos(JoinType.Left, a.Id == b.Mid))
+ .Where((a, b) => a.BlNo == query.blNo
+ && (b.Bld007 ?? 0) - (b.Bld008 ?? 0) > 0)
+ .Select((a, b) => new MesItemBlDetail
+ {
+ Bld012 = b.Bld012,
+ Bld002 = b.Bld002,
+ Bld003 = b.Bld003,
+ Bld004 = b.Bld004,
+ Bld007 = b.Bld007,
+ Bld008 = b.Bld008
+ })
+ .ToList();
+
+ return (query, finalPendingList);
+ }
+
+ #endregion
}
\ No newline at end of file
--
Gitblit v1.9.3