From 004a418bd6674d62d06587030e29897ce430f0f2 Mon Sep 17 00:00:00 2001
From: 南骏 池 <chiffly@163.com>
Date: 星期三, 30 四月 2025 15:57:04 +0800
Subject: [PATCH] 1.异常处置单推送OA 2.现场管理新增现场收料的条码查询功能
---
service/Wom/MesWorkProdManager.cs | 162 ++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 109 insertions(+), 53 deletions(-)
diff --git a/service/Wom/MesWorkProdManager.cs b/service/Wom/MesWorkProdManager.cs
index 04a170c..07d18e1 100644
--- a/service/Wom/MesWorkProdManager.cs
+++ b/service/Wom/MesWorkProdManager.cs
@@ -11,53 +11,80 @@
//褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
/// <summary>
- /// PDA鎵弿鐢熶骇鎶ュ伐
+ /// PDA鎵弿鐢熶骇鎶ュ伐
/// </summary>
+ /// <param name="request">
+ /// 鎶ュ伐璇锋眰鍙傛暟锛屽寘鍚�:
+ /// - StaffNo: 鍛樺伐宸ュ彿锛屽繀濉�
+ /// - ItemBarcode: 鐗╂枡鏉$爜锛屽繀濉�
+ /// - UserNo: 鎿嶄綔鐢ㄦ埛璐﹀彿锛屽繀濉�
+ /// </param>
+ /// <returns>
+ /// 杩斿洖鎶ュ伐缁撴灉瀵硅薄锛屽寘鍚�:
+ /// - TaskNo: 宸ュ崟鍙�
+ /// - ItemNo: 鐗╂枡缂栧彿
+ /// - PlanQty: 璁″垝鏁伴噺
+ /// - ReportedQty: 宸叉姤宸ユ暟閲�
+ /// - CurrentQty: 鏈鎶ュ伐鏁伴噺
+ /// - BarcodeQty: 鏉$爜鏁伴噺
+ /// - ItemName: 鐗╂枡鍚嶇О
+ /// - ItemModel: 鐗╂枡鍨嬪彿
+ /// - Message: 澶勭悊缁撴灉娑堟伅
+ /// </returns>
+ /// <exception cref="Exception">
+ /// - 褰撳憳宸ヤ笉瀛樺湪鏃舵姏鍑哄紓甯�
+ /// - 褰撴潯鐮佷笉瀛樺湪鏃舵姏鍑哄紓甯�
+ /// - 褰撶墿鏂欎笉瀛樺湪鏃舵姏鍑哄紓甯�
+ /// - 褰撴潯鐮侀噸澶嶆壂鎻忔椂鎶涘嚭寮傚父
+ /// - 褰撳伐鍗曚笉瀛樺湪鏃舵姏鍑哄紓甯�
+ /// - 褰撴姤宸ユ暟閲忓皬浜庣瓑浜�0鏃舵姏鍑哄紓甯�
+ /// - 褰撴姤宸ユ�绘暟閲忚秴杩囪鍒掓暟閲忔椂鎶涘嚭寮傚父
+ /// </exception>
public ScanWorkResult ScanWorkAsync(ScanWorkRequest request)
{
- // 鏌ヨ浜哄憳淇℃伅
+ // 1. 楠岃瘉鍛樺伐淇℃伅
var staff = Db.Queryable<MesStaff>()
.Where(x => x.StaffNo == request.StaffNo)
.First();
if (staff == null)
throw new Exception("璇峰厛閫夋嫨浜哄憳");
- // 鏌ヨ鏉$爜淇℃伅
+ // 2. 楠岃瘉鏉$爜淇℃伅
var barcode = Db.Queryable<MesInvItemBarcodes>()
.Where(x => x.ItemBarcode == request.ItemBarcode)
.First();
if (barcode == null)
throw new Exception($"鏃犳鏉$爜锛岃鏍稿锛亄request.ItemBarcode}");
- // 鏌ヨ鐗╂枡淇℃伅
+ // 3. 楠岃瘉鐗╂枡淇℃伅
var item = Db.Queryable<MesItems>()
.Where(x => x.Id == barcode.ItemId)
.First();
if (item == null)
throw new Exception($"鏃犳鐗╂枡锛岃鏍稿锛亄request.ItemBarcode}");
- // 纭畾鍗曟嵁绫诲瀷
- int billTypeId = 900;
- int transactionNo = 902;
+ // 4. 鏍规嵁鏉$爜澶囨敞纭畾鍗曟嵁绫诲瀷鍜屼氦鏄撳彿
+ var billTypeId = 900; // 榛樿鍗曟嵁绫诲瀷
+ var transactionNo = 902; // 榛樿浜ゆ槗鍙�
switch (barcode.Memo?.Trim() ?? "0")
{
case "涓濆嵃":
- transactionNo = 901;
+ transactionNo = 901; // 涓濆嵃宸ュ簭
break;
case "鍗婃垚鍝�":
- transactionNo = 902;
+ transactionNo = 902; // 鍗婃垚鍝佸伐搴�
break;
case "鍖呰":
case "鎴愬搧":
- transactionNo = 903;
+ transactionNo = 903; // 鎴愬搧/鍖呰宸ュ簭
break;
}
- // 妫�鏌ユ潯鐮佹槸鍚﹂噸澶嶆壂鎻�
+ // 5. 妫�鏌ユ潯鐮佹槸鍚﹂噸澶嶆壂鎻�
var exists = Db.Queryable<MesWorkProd, MesWorkProdCDetails>(
(a, b) =>
new JoinQueryInfos(JoinType.Inner,
- a.BillNo == b.BillNo))
+ a.Id == b.MesWorkProdId))
.Where((a, b) => b.ItemBarcode == request.ItemBarcode
&& a.BillTypeId == billTypeId
&& a.TransactionNo == transactionNo)
@@ -66,7 +93,7 @@
if (exists)
throw new Exception("鏉$爜閲嶅鎵弿锛岃鏍稿锛�");
- // 鑾峰彇宸叉姤宸ユ暟閲�
+ // 6. 鑾峰彇宸叉姤宸ユ暟閲�
var reportedQty = Db.Queryable<MesWorkProd, MesWorkProdCDetails>(
(a, b) =>
new JoinQueryInfos(JoinType.Inner,
@@ -76,7 +103,7 @@
&& a.TaskNo == barcode.BillNo)
.Sum((a, b) => b.Quantity);
- // 鑾峰彇宸ュ崟璁″垝鏁伴噺鍜屽瀷鍙�
+ // 7. 鑾峰彇宸ュ崟璁″垝鏁伴噺鍜屽瀷鍙�
var workOrder = Db.Queryable<Womdaa>()
.Where(x => x.Daa001 == barcode.BillNo)
.First();
@@ -86,9 +113,10 @@
var planQty = workOrder.Daa008;
var itemModel = workOrder.Daa004;
+ // 8. 浣跨敤浜嬪姟澶勭悊鎶ュ伐鏁版嵁
UseTransaction(db =>
{
- // 鏈夋暟閲忔潯鐮佽嚜鍔ㄦ姤宸�
+ // 9. 澶勭悊鏈夋暟閲忔潯鐮佺殑鑷姩鎶ュ伐
if (barcode.Quantity > 0)
{
var reportQty = barcode.Quantity;
@@ -101,17 +129,17 @@
throw new Exception(
$"鏈鎶ュ伐鏁伴噺锛歿reportQty} 澶т簬鍓╀綑鎶ュ伐鏁伴噺锛歿workOrder.Daa008 - reportedQty ?? 0}锛岃鏍稿锛�");
- // 鏇存柊鏉$爜鐘舵��
+ // 10. 鏇存柊鏉$爜鐘舵��
db.Updateable<MesInvItemBarcodes>()
.SetColumns(x => new MesInvItemBarcodes
{
- WorkFlg = true,
- Quantity = reportQty
+ WorkFlg = true
+ //Quantity = reportQty
})
.Where(x => x.Guid == barcode.Guid)
- .ExecuteCommandAsync();
+ .ExecuteCommand();
- // 鑾峰彇鎴栧垱寤烘姤宸ュ崟
+ // 11. 鑾峰彇鎴栧垱寤烘姤宸ュ崟
var workProd = db.Queryable<MesWorkProd>()
.Where(x => x.TaskNo == barcode.BillNo
&& x.CreateDate.Value.Date.ToString(
@@ -119,13 +147,15 @@
DateTime.Now.Date.ToString("yyyy-MM-dd")
&& x.BillTypeId == billTypeId
&& x.TransactionNo == transactionNo
- && x.Status == 0)
+ && x.ReportBy == request.StaffNo)
.First();
+ var id = Guid.Empty;
+ var billNo = "";
if (workProd == null)
{
- var id = Guid.NewGuid();
- var billNo = BillNo.GetBillNo("MES_WORK");
+ id = Guid.NewGuid();
+ billNo = BillNo.GetBillNo("BG(鎶ュ伐)");
workProd = new MesWorkProd
{
@@ -140,19 +170,27 @@
LastupdateDate = DateTime.Now,
BillTypeId = billTypeId,
TransactionNo = transactionNo,
- TaskNo = barcode.BillNo
+ TaskNo = barcode.BillNo,
+ ReportBy = request.StaffNo,
+ ReportDate = DateTime.Now
};
db.Insertable(workProd).IgnoreColumns(true)
.ExecuteCommand();
}
+ else
+ {
+ id = workProd.Id;
+ billNo = workProd.BillNo;
+ }
- // 鎻掑叆鎶ュ伐鏄庣粏
+ // 12. 鎻掑叆鎶ュ伐鏄庣粏
var detailId = Guid.NewGuid();
db.Insertable(new MesWorkProdCDetails
{
Id = detailId,
- BillNo = workProd.BillNo,
+ MesWorkProdId = id,
+ BillNo = billNo,
ItemBarcode = request.ItemBarcode,
Quantity = (int)reportQty,
Company = barcode.Company,
@@ -166,18 +204,19 @@
SilkPqty = barcode.SilkPqty,
SilkId = barcode.SilkId,
Silk = barcode.Silk,
- BgYg = staff.Id
+ BgYg = request.StaffNo
}).IgnoreColumns(true).ExecuteCommand();
- // 鏇存柊宸ュ崟宸叉姤宸ユ暟閲�
+ // 13. 鏇存柊宸ュ崟宸叉姤宸ユ暟閲�
db.Updateable<Womdaa>()
- .SetColumns(x =>
- x.Daa011 == (x.Daa011 ?? 0) + (int)barcode.Quantity
- )
- .Where(x => x.Daa001 == barcode.BillNo)
- .ExecuteCommandAsync();
+ .SetColumns(x => new Womdaa
+ {
+ Daa011 = (x.Daa011 ?? 0) + (int)barcode.Quantity
+ })
+ .Where(x => x.Daa001 == barcode.BillNo)
+ .ExecuteCommand();
- // 閲嶆柊鑾峰彇宸叉姤宸ユ暟閲�
+ // 14. 閲嶆柊鑾峰彇鏈�鏂板凡鎶ュ伐鏁伴噺
reportedQty = db.Queryable<MesWorkProd, MesWorkProdCDetails>(
(a, b) =>
new JoinQueryInfos(JoinType.Inner,
@@ -191,9 +230,10 @@
return 1;
});
+ // 15. 杩斿洖澶勭悊缁撴灉
return new ScanWorkResult
{
- TaskNo = barcode.TaskNo,
+ TaskNo = barcode.BillNo,
ItemNo = item.ItemNo,
PlanQty = planQty ?? 0,
ReportedQty = reportedQty ?? 0,
@@ -207,45 +247,59 @@
/// <summary>
- /// PDA鎵弿鐢熶骇鎶ュ伐 prc_rf_pda_scan_work_prod
+ /// PDA鎵弿鐢熶骇鎶ュ伐 prc_rf_pda_scan_work_prod
/// </summary>
+ /// <param name="request">
+ /// 鎶ュ伐璇锋眰鍙傛暟锛屽寘鍚�:
+ /// - ItemBarcode: 鐗╂枡鏉$爜锛屽繀濉�
+ /// - Quantity: 鎶ュ伐鏁伴噺锛屽繀濉笖澶т簬0
+ /// - UserNo: 鎿嶄綔鐢ㄦ埛璐﹀彿锛屽繀濉�
+ /// </param>
+ /// <returns>杩斿洖甯冨皵鍊硷紝true琛ㄧず鎶ュ伐鎴愬姛锛宖alse琛ㄧず鎶ュ伐澶辫触</returns>
+ /// <exception cref="Exception">
+ /// - 褰撴姤宸ユ暟閲忓皬浜庣瓑浜�0鏃舵姏鍑哄紓甯�
+ /// - 褰撴潯鐮佷笉瀛樺湪鏃舵姏鍑哄紓甯�
+ /// - 褰撳伐鍗曚笉瀛樺湪鏃舵姏鍑哄紓甯�
+ /// - 褰撴姤宸ユ�绘暟閲忚秴杩囪鍒掓暟閲忔椂鎶涘嚭寮傚父
+ /// </exception>
public bool ScanWorkProdAsync(ScanWorkRequest request)
{
+ // 1. 楠岃瘉鎶ュ伐鏁伴噺鏄惁澶т簬0
if (request.Quantity <= 0)
throw new Exception("鎶ュ伐鏁伴噺涓嶈兘灏忎簬绛変簬 0锛岃鏍稿锛�");
- // 鏌ヨ鏉$爜淇℃伅
+ // 2. 鏌ヨ鏉$爜淇℃伅锛岄獙璇佹潯鐮佹槸鍚﹀瓨鍦�
var barcode = Db.Queryable<MesInvItemBarcodes>()
.Where(x => x.ItemBarcode == request.ItemBarcode)
.First();
if (barcode == null)
throw new Exception($"搴撳瓨涓棤姝ゆ潯鐮侊紝璇锋牳瀵癸紒{request.ItemBarcode}");
- // 鏌ヨ宸ュ崟淇℃伅
+ // 3. 鏌ヨ宸ュ崟淇℃伅锛岄獙璇佸伐鍗曟槸鍚﹀瓨鍦�
var womdaa = Db.Queryable<Womdaa>()
.Where(x => x.Daa001 == barcode.BillNo)
.First();
if (womdaa == null)
throw new Exception($"鏉$爜涓嶆槸鎶ュ伐鏉$爜/鏃犲搴斿伐鍗曪紝璇锋牳瀵癸紒{request.ItemBarcode}");
- // 纭畾鍗曟嵁绫诲瀷
- int billTypeId = 900;
- int transactionNo = 902;
+ // 4. 鏍规嵁鏉$爜澶囨敞纭畾鍗曟嵁绫诲瀷鍜屼氦鏄撳彿
+ var billTypeId = 900; // 榛樿鍗曟嵁绫诲瀷
+ var transactionNo = 902; // 榛樿浜ゆ槗鍙�(鍗婃垚鍝佸伐搴�)
switch (barcode.Memo?.Trim() ?? "0")
{
case "涓濆嵃":
- transactionNo = 901;
+ transactionNo = 901; // 涓濆嵃宸ュ簭
break;
case "鍗婃垚鍝�":
- transactionNo = 902;
+ transactionNo = 902; // 鍗婃垚鍝佸伐搴�
break;
case "鎴愬搧":
case "鍖呰":
- transactionNo = 903;
+ transactionNo = 903; // 鎴愬搧/鍖呰宸ュ簭
break;
}
- // 姹囨�诲凡鎵潯鐮佹暟閲�
+ // 5. 姹囨�诲凡鎵潯鐮佹暟閲忥紝楠岃瘉鏄惁瓒呭嚭璁″垝鏁伴噺
var sumQty = Db.Queryable<MesWorkProd, MesWorkProdCDetails>((a, b) =>
new JoinQueryInfos(JoinType.Inner, a.BillNo == b.BillNo))
.Where((a, b) => a.BillTypeId == billTypeId
@@ -260,16 +314,17 @@
throw new Exception(
$"鏈鎶ュ伐鏁伴噺锛歿request.Quantity} 澶т簬鍓╀綑鎶ュ伐鏁伴噺锛歿womdaa.Daa008 - (sumQty - request.Quantity)}锛岃鏍稿锛�");
+ // 6. 寮�鍚簨鍔″鐞嗘姤宸ユ暟鎹�
return UseTransaction(db =>
{
- // 鏇存柊鏉$爜淇℃伅
+ // 6.1 鏇存柊鏉$爜淇℃伅锛岃缃凡鎶ュ伐鏍囪鍜屾暟閲�
db.Updateable<MesInvItemBarcodes>()
.SetColumns(x => x.WorkFlg == true)
.SetColumns(x => x.Quantity == request.Quantity)
.Where(x => x.Guid == barcode.Guid)
.ExecuteCommand();
- // 鑾峰彇鎴栧垱寤烘姤宸ュ崟
+ // 6.2 鑾峰彇鎴栧垱寤烘姤宸ュ崟
var workProd = db.Queryable<MesWorkProd>()
.Where(x => x.TaskNo == barcode.BillNo
&& x.CreateDate.Value.Date.ToString("yyyy-MM-dd") ==
@@ -279,12 +334,13 @@
&& x.Status == 0)
.First();
+ // 6.3 濡傛灉鎶ュ伐鍗曚笉瀛樺湪鍒欏垱寤烘柊鐨勬姤宸ュ崟
if (workProd == null)
{
- var billNo = BillNo.GetBillNo("MES_WORK");
+ var billNo = BillNo.GetBillNo("BG(鎶ュ伐缂栧彿)");
workProd = new MesWorkProd
{
- Id = Guid.NewGuid(),
+ Id = Guid.NewGuid(),
BillNo = billNo,
LineNo = barcode.LineNo,
Company = barcode.Company,
@@ -293,7 +349,7 @@
CreateDate = DateTime.Now,
LastupdateBy = request.UserNo,
LastupdateDate = DateTime.Now,
- PbillNo = barcode.BillNo, // Added PbillNo field
+ PbillNo = barcode.BillNo,
BillTypeId = billTypeId,
TransactionNo = transactionNo,
TaskNo = barcode.BillNo
@@ -302,10 +358,10 @@
db.Insertable(workProd).IgnoreColumns(true).ExecuteCommand();
}
- // 鎻掑叆鎶ュ伐鏄庣粏
+ // 6.4 鎻掑叆鎶ュ伐鏄庣粏璁板綍
var detail = new MesWorkProdCDetails
{
- Id = Guid.NewGuid(),
+ Id = Guid.NewGuid(),
BillNo = workProd.BillNo,
ItemBarcode = request.ItemBarcode,
Quantity = (int)request.Quantity,
@@ -316,7 +372,7 @@
LastupdateBy = request.UserNo,
LastupdateDate = DateTime.Now,
ItemNo = barcode.ItemNo,
- PbillNo = barcode.BillNo, // Added PbillNo from barcode
+ PbillNo = barcode.BillNo,
WorkLast = barcode.WorkLast,
SilkPqty = barcode.SilkPqty,
SilkId = barcode.SilkId,
--
Gitblit v1.9.3