From 2cafdd83b5173ca7e78dffcde63897b4be251179 Mon Sep 17 00:00:00 2001
From: wxw <Administrator@DESKTOP-5BIMHQ3>
Date: 星期五, 11 七月 2025 08:38:29 +0800
Subject: [PATCH] PDA增加AGV转运空托盘页面
---
Wms/Wms/Controllers/PdaCrController.cs | 16 ++
Pda/View/HouseDataSetting/AgvNullPallet.html | 232 +++++++++++++++++++++++++++++
Wms/Model/ModelVm/PdaVm/PdaCrVm.cs | 4
Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs | 160 ++++++++++++++++++++
Wms/WMS.IBLL/IPdaServer/IPdaCrServer.cs | 11 +
5 files changed, 423 insertions(+), 0 deletions(-)
diff --git a/Pda/View/HouseDataSetting/AgvNullPallet.html b/Pda/View/HouseDataSetting/AgvNullPallet.html
new file mode 100644
index 0000000..a8a2a28
--- /dev/null
+++ b/Pda/View/HouseDataSetting/AgvNullPallet.html
@@ -0,0 +1,232 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+ <meta name="viewport" content="user-scalable=0,width=device-width,initial-scale=1.0" />
+ <meta charset="UTF-8" />
+ <!-- <meta name="viewport" content="width=device-width, initial-scale=0.665, minimum-scale=0.5, maximum-scale=1, user-scalable=no" /> -->
+ <!-- <meta name="viewport" content="width=device-width, initial-scale=0.665" /> -->
+ <meta http-equiv="X-UA-Compatible" content="ie=edge" />
+ <title>Boxline PDA</title>
+
+ <link rel="stylesheet" href="/layui/css/layui.css" />
+ <link rel="stylesheet" href="/css/style.css" />
+ <script src="/js/adaptive.js"></script>
+ <link rel="stylesheet" href="/css/my.css" />
+ <style type="text/css">
+ td {
+ word-break: break-all;
+ word-wrap: break-word;
+ }
+
+ .layui-form-switch {
+ margin-top: 0;
+ }
+
+ /* 鏍囩鏍峰紡 */
+ .tableyang-this a {
+ margin: 10px 10px 0px 0px;
+ line-height: 30px;
+ width: 100px;
+ color: #999;
+ text-align: center;
+ float: left;
+ background: #f7f7f7;
+ user-select: none;
+ position: relative;
+ z-index: 1;
+ cursor: pointer;
+ border-radius: 5px;
+ border: 1px solid #ccc;
+ transition: all 0.3s ease;
+ }
+
+ .tableyang-this a.hover {
+ color: #5298ff;
+ background-color: #eff2ff;
+ border: 1px solid #5298ff;
+ }
+
+ /* 鍐呭灞呬腑 */
+ .tableyang-tab {
+ display: flex;
+ /* justify-content: center; */
+ /* align-items: center; */
+ flex-direction: column;
+ height: 90vh;
+ }
+
+ /* 蹇呯敤鏍峰紡 */
+ .tableyang-2,
+ .tableyang-3 {
+ display: none;
+ }
+
+ ul {
+ list-style-type: none;
+ padding: 0;
+ }
+
+ li {
+ cursor: pointer;
+ background-color: lightgray;
+ padding: 10px;
+ margin-bottom: 5px;
+ }
+ </style>
+ <link rel="stylesheet" href="/css/adapter.css" />
+ <script src="../../js/jquery.js"></script>
+ <script src="../../js/jquery-3.5.1.min.js"></script>
+</head>
+
+<body>
+ <div id="" class="main-content">
+
+ <div id="" class="layout-title">
+ <table border="" cellspacing="" cellpadding="">
+ <tr>
+ <td class="img-back"><a href="../index.html"><img src="/assets/back.jpg"></a></td>
+ <td class="title-text" lang>AGV绌烘墭杞繍</td>
+ <td class="title-menu-icon"><img id="menuImg" src="/assets/menu.jpg"></td>
+ </tr>
+ </table>
+ </div>
+
+ <div id="" class="layout-sub-content">
+ <div id="menuList" class="menu">
+ <ul class="" style="text-align: center;">
+ <li><a href="../index.html" lang>涓婚〉</a></li>
+ <!-- <li><a href="productEnterConfirm.html">鍏ュ簱淇℃伅纭</a></li> -->
+ <li><a href="../login.html" lang>閲嶆柊鐧诲綍</a></li>
+ </ul>
+ </div>
+
+ <!-- 鏈夌爜 -->
+ <div id="content1">
+ <div id="zongDiv" class="layout-bill-info" style="height: 170px;">
+ <form class="layui-form" action="">
+ <div id="" class="layui-form-item layout-input">
+ <label class="layui-form-label" lang>鎵樼洏鏉$爜锛�</label>
+ <div class="layui-input-block">
+ <input id="STOCKCODE" type="text" lay-verify="stock" lang langholder
+ placeholder="璇锋壂鎻忔墭鐩樻潯鐮�" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ <div id="" class="layui-form-item layout-input">
+ <label class="layui-form-label" lang>璧峰鍦扮爜锛�</label>
+ <div class="layui-input-block">
+ <input id="LocatNo" type="text" lay-verify="stock" lang langholder placeholder="璧峰鍦扮爜"
+ autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ <div id="" class="layui-form-item layout-dropdownlist">
+ <label class="layui-form-label" lang>鐩爣鍖哄煙锛�</label>
+ <div class="layui-input-block" id="selectQuyu">
+ <select id="Quyu" lay-filter="getQuyu" lay-search>
+ <option value="B08" selected>B08-搴撳墠绌烘墭瀛樻斁鍖�</option>
+ </select>
+ <img src="/assets/down_arraw.png">
+ </div>
+ </div>
+
+
+ <table class="layout-tbl-submit" border="" cellspacing="" cellpadding="">
+ <tr>
+ <td style="width: 23%;"></td>
+ <td>
+ <button class="layout-btn layout-btn-red" lang type="button" lay-submit
+ lay-filter="formCall">鍙皬杞�</button>
+ </td>
+ <td style="width: 33%;"></td>
+
+ </tr>
+ </table>
+ </form>
+ </div>
+
+ <br>
+
+
+
+ </div>
+ </div>
+ </div>
+ <script src="/js/jquery-3.5.1.min.js"></script>
+ <script src="/layui/layui.js"></script>
+ <script src="/js/public.js"></script>
+ <script src="/js/language.js"></script>
+ <script src="/js/jquery.cookie.js"></script>
+ <script>
+ layui.use(['form', 'jquery'], function () {
+ var form = layui.form
+
+
+ //鍛煎彨灏忚溅浜嬩欢
+ form.on('submit(formCall)', function (data) {
+ if ($("#STOCKCODE").val() == "") {
+ layer.msg('璇锋壂鎻忔墭鐩樻潯鐮�', {
+ icon: 2,
+ time: 2000 //2绉掑叧闂紙濡傛灉涓嶉厤缃紝榛樿鏄�3绉掞級
+ });
+ return;
+ }
+ if ($("#LocatNo").val() == "") {
+ layer.msg('璇锋壂鎻忚捣濮嬪湴鐮�', {
+ icon: 2,
+ time: 2000 //2绉掑叧闂紙濡傛灉涓嶉厤缃紝榛樿鏄�3绉掞級
+ });
+ return;
+ }
+
+ var param = {
+ PalletNo: $("#STOCKCODE").val(),
+ AreaNo: $("#Quyu").val(),
+ LocatNo: $("#LocatNo").val()
+ }
+ //鍛煎彨灏忚溅
+ sendData(IP + "/PdaCr/AgvNullPallet", param, 'post', function (res) {
+ if (res.code == 0) { //鎴愬姛
+ layer.msg(res.msg, {
+ icon: 1,
+ time: 1000 //2绉掑叧闂紙濡傛灉涓嶉厤缃紝榛樿鏄�3绉掞級
+ }, function () {
+
+ });
+ } else { //涓嶆垚鍔�
+ layer.msg(res.msg, {
+ icon: 2,
+ time: 2000 //2绉掑叧闂紙濡傛灉涓嶉厤缃紝榛樿鏄�3绉掞級
+ }, function () {
+ //鍥炶皟
+ });
+ }
+ });
+
+ return false; //闃绘琛ㄥ崟璺宠浆銆傚鏋滈渶瑕佽〃鍗曡烦杞紝鍘绘帀杩欐鍗冲彲銆�
+ });
+
+
+
+
+ /*鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺��*/
+
+
+ $("#menuImg").click(function (e) {
+ //console.log("menuImg")
+ e.stopPropagation()
+
+ if ($("#menuList").is(":hidden")) {
+ $("#menuList").show()
+ } else {
+ $("#menuList").hide()
+ }
+ })
+ $('body').click(function () {
+ // //console.log("body")
+ $("#menuList").hide()
+ })
+ })
+ </script>
+</body>
+
+</html>
\ No newline at end of file
diff --git a/Wms/Model/ModelVm/PdaVm/PdaCrVm.cs b/Wms/Model/ModelVm/PdaVm/PdaCrVm.cs
index ca186de..13e05ca 100644
--- a/Wms/Model/ModelVm/PdaVm/PdaCrVm.cs
+++ b/Wms/Model/ModelVm/PdaVm/PdaCrVm.cs
@@ -68,6 +68,10 @@
/// 鍏ュ簱鍙�
/// </summary>
public string Ruku { get; set; }
+ /// <summary>
+ /// 璧峰鍦扮爜
+ /// </summary>
+ public string LocatNo { get; set; }
}
public class PdaPalletUnBindVm
diff --git a/Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs b/Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs
index 3e14ce4..89f6e78 100644
--- a/Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs
+++ b/Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs
@@ -947,6 +947,166 @@
}
}
/// <summary>
+ /// 鍛煎彨agv杞繍绌烘墭鐩�
+ /// </summary>
+ /// <param name="palletNo"></param>
+ /// <param name="areaNo"></param>
+ /// <param name="locatNo"></param>
+ /// <param name="url"></param>
+ /// <param name="userId"></param>
+ /// <returns></returns>
+ /// <exception cref="Exception"></exception>
+ public async Task AgvNullPallet(string palletNo, string areaNo, string locatNo, string url, int userId)
+ {
+ try
+ {
+ if (string.IsNullOrEmpty(palletNo))
+ {
+ throw Oops.Bah("璇锋壂鎻忔墭鐩樻潯鐮侊紒");
+ }
+ if (string.IsNullOrEmpty(locatNo))
+ {
+ throw Oops.Bah("璇锋壂鎻忚捣濮嬪湴鐮侊紒");
+ }
+ if (string.IsNullOrEmpty(areaNo))
+ {
+ throw Oops.Bah("璇烽�夋嫨鐩爣鍖哄煙锛�");
+ }
+ string EndLocat = string.Empty;//鐩爣浣嶇疆
+
+ var log = await Db.Queryable<LogTask>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == palletNo && (w.Status == "0" || w.Status == "1"));
+ if (log != null)
+ {
+ throw Oops.Bah("璇ユ墭鐩樺凡鏈夌瓑寰呮墽琛屾垨姝e湪鎵ц鐨勪换鍔�!");
+ }
+ var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == palletNo);
+ if (stockDetail != null)
+ {
+ throw Oops.Bah("鎵樼洏涓婄墿鏂欏瓨鍦ㄥ簱瀛樻槑缁嗕俊鎭�,璇锋鏌�!");
+ }
+
+ var storageArea = await Db.Queryable<SysStorageArea>().FirstAsync(w => w.IsDel == "0" && w.AreaNo == areaNo);
+ if (storageArea == null)
+ {
+ throw Oops.Bah("鎵�閫夊尯鍩熶俊鎭笉瀛樺湪,璇锋鏌�!");
+ }
+ var palletInfo = await Db.Queryable<SysPallets>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == palletNo);
+ if (palletInfo == null)
+ {
+ throw Oops.Bah("璇ユ墭鐩樹俊鎭笉瀛樺湪!");
+ }
+ if (palletInfo.Status!="0")
+ {
+ throw Oops.Bah("璇ユ墭鐩樹笉鏄┖鎵樼洏!");
+ }
+ //鏍规嵁鐩爣鍖哄煙鑾峰彇鐩爣鍌ㄤ綅鍦板潃
+ EndLocat = await GetLocat(areaNo);
+
+ //璧峰鍌ㄤ綅淇℃伅
+ var storageLocat = await Db.Queryable<SysStorageLocat>().FirstAsync(w => w.IsDel == "0" && w.LocatNo == stockDetail.LocatNo);
+ if (storageLocat == null)
+ {
+ throw Oops.Bah("鍌ㄤ綅淇℃伅涓嶅瓨鍦�,璇锋鏌�!");
+ }
+ //鐩爣鍌ㄤ綅淇℃伅
+ //var storageLocatEnd = new SysStorageLocat();
+
+ var storageLocatEnd = await Db.Queryable<SysStorageLocat>().FirstAsync(w => w.IsDel == "0" && w.LocatNo == EndLocat && w.Flag == "0");
+ if (storageLocatEnd == null)
+ {
+ throw Oops.Bah("鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�,璇锋鏌�!");
+ }
+
+ //娣诲姞鍑哄簱浠诲姟
+ var taskNo = new Common().GetMaxNo("TK");
+ var moveTask = new LogTask
+ {
+ TaskNo = taskNo,
+ Sender = "WMS",
+ Receiver = "WCS",
+ IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+
+ StartLocat = stockDetail.LocatNo,//璧峰浣嶇疆
+ EndLocat = EndLocat,//鐩爣浣嶇疆
+ PalletNo = palletNo,//鎵樼洏鐮�
+ Msg = string.Format("杞繍浠诲姟锛歿0}=>>{1}", stockDetail.LocatNo, EndLocat),
+ IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+ IsCancel = 1,//鏄惁鍙彇娑�
+ IsFinish = 1,//鏄惁鍙畬鎴�
+ Type = "2",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟
+ Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+ OrderType = "3",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗�
+
+ CreateTime = DateTime.Now
+ };
+ await Db.Insertable(moveTask).ExecuteCommandAsync();
+
+ //淇敼璧峰鍌ㄤ綅鍦板潃鐘舵��
+ storageLocat.Status = "5";//0锛氱┖鍌ㄤ綅 1锛氭湁鐗╁搧 2锛氬叆搴撲腑 3锛氬嚭搴撲腑 4锛氱Щ鍏ヤ腑 5锛氱Щ鍑轰腑
+ await Db.Updateable(storageLocat).ExecuteCommandAsync();
+
+ //淇敼鐩爣鍌ㄤ綅鍦板潃鐘舵��
+ if (storageLocatEnd != null)
+ {
+ storageLocatEnd.Status = "4";//0锛氱┖鍌ㄤ綅 1锛氭湁鐗╁搧 2锛氬叆搴撲腑 3锛氬嚭搴撲腑 4锛氱Щ鍏ヤ腑 5锛氱Щ鍑轰腑
+ await Db.Updateable(storageLocatEnd).ExecuteCommandAsync();
+ }
+ //娣诲姞鎿嶄綔鏃ュ織璁板綍
+ var k = new OperationCrServer().AddLogOperationCr("PDA妯″潡", "AGV绌烘墭杞繍", palletNo, "绉诲簱", $"PDA鍛煎彨灏忚溅瀵规墭鐩樺彿锛歿palletNo}鍙戣捣杞繍", userId);
+
+ var outDto = new List<OutCommandDto>
+ {
+ new OutCommandDto()
+ {
+ TaskNo = moveTask.TaskNo, // 浠诲姟鍙�
+ TaskType = "2",// 浠诲姟绫诲瀷 0鍏� 1鍑� 2绉�
+ PalletNo = moveTask.PalletNo,//鎵樼洏鍙�
+
+ StartLocate = moveTask.StartLocat, // 璧峰浣嶇疆
+ EndLocate = EndLocat, // 鐩爣浣嶇疆
+
+ Order = 999,
+ Type = PLCTypeEnum.AGV
+
+ }
+ };
+
+ // 姝e紡杩愯绋嬪簭鏀惧紑
+ var list2 = outDto.Select(m => m.TaskNo).ToList();
+ var jsonData = JsonConvert.SerializeObject(outDto);
+ string response = "";
+
+ try
+ {
+ var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss")
+ response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS");
+ var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss")
+
+ //瑙f瀽杩斿洖鏁版嵁
+ var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response);
+ if (wcsModel.code == 200)
+ {
+ // 鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�//
+ new TaskServer().EditTaskIssueOk(list2, time1, time2);
+ }
+ else
+ {
+ new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.message);
+ throw new Exception(wcsModel.message);
+ }
+ }
+ catch (Exception ex)
+ {
+ throw new Exception(ex.Message);
+ }
+
+ }
+ catch (Exception e)
+ {
+ throw new Exception(e.Message);
+ }
+ }
+ /// <summary>
/// agv杞繍鍛煎彨灏忚溅鍙栬揣
/// </summary>
/// <param name="soNo"></param>
diff --git a/Wms/WMS.IBLL/IPdaServer/IPdaCrServer.cs b/Wms/WMS.IBLL/IPdaServer/IPdaCrServer.cs
index 32610f4..541550c 100644
--- a/Wms/WMS.IBLL/IPdaServer/IPdaCrServer.cs
+++ b/Wms/WMS.IBLL/IPdaServer/IPdaCrServer.cs
@@ -134,6 +134,17 @@
/// <param name="url"></param>
Task AgvTransport(string palletNo, string areaNo, string ruku, string url, int userId);
/// <summary>
+ /// 鍛煎彨agv杞繍绌烘墭鐩�
+ /// </summary>
+ /// <param name="palletNo"></param>
+ /// <param name="areaNo"></param>
+ /// <param name="locatNo"></param>
+ /// <param name="url"></param>
+ /// <param name="userId"></param>
+ /// <returns></returns>
+ /// <exception cref="Exception"></exception>
+ Task AgvNullPallet(string palletNo, string areaNo, string locatNo, string url, int userId);
+ /// <summary>
/// agv杞繍鍛煎彨灏忚溅鍙栬揣
/// </summary>
/// <param name="soNo"></param>
diff --git a/Wms/Wms/Controllers/PdaCrController.cs b/Wms/Wms/Controllers/PdaCrController.cs
index fbd3020..552d088 100644
--- a/Wms/Wms/Controllers/PdaCrController.cs
+++ b/Wms/Wms/Controllers/PdaCrController.cs
@@ -238,6 +238,18 @@
await _pdaCrSvc.AgvTransport(model.PalletNo, model.AreaNo, model.Ruku, _config.WcsHost+ _config.IssueComApiUrl, _userManager.UserId);
}
/// <summary>
+ /// 鍛煎彨agv杞繍绌烘墭鐩�
+ /// </summary>
+ /// <param name="model"></param>
+ /// <returns></returns>
+ [HttpPost]
+ [ServiceFilter(typeof(ApiResponseActionFilter))]
+ [UnitOfWork]
+ public async Task AgvNullPallet(PdaAgvTransportVm model)
+ {
+ await _pdaCrSvc.AgvNullPallet(model.PalletNo, model.AreaNo, model.LocatNo, _config.WcsHost + _config.IssueComApiUrl, _userManager.UserId);
+ }
+ /// <summary>
/// agv杞繍鍛煎彨灏忚溅鍙栬揣
/// </summary>
/// <param name="model"></param>
@@ -252,6 +264,10 @@
#endregion
+ #region AGV绌烘墭鐩樿浆杩�
+
+ #endregion
+
#region 闆剁瑙g粦
/// <summary>
/// 闆剁瑙g粦
--
Gitblit v1.8.0