From 06eb604f71605c47f015b88b1620b72b6f69df8c Mon Sep 17 00:00:00 2001 From: helongyang <647556386@qq.com> Date: 星期一, 22 九月 2025 05:20:41 +0800 Subject: [PATCH] 功能增加,代码优化 --- 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/测试架仓/GroundStationJob_CSJ.cs | 18 代码管理/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.js | 20 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs | 6 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs | 6 代码管理/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/TestFrameWarehouse.vue | 411 ++++++++ 代码管理/WMS/WIDESEA_WMSClient/src/extension/taskinfo/task.js | 2 代码管理/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfoDetail.js | 20 代码管理/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue | 18 代码管理/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/BoardWarehouse.vue | 360 ++++++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs | 2 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs | 12 代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail.vue | 20 代码管理/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue | 7 代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue | 9 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs | 2 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs | 23 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/测试架仓/CSJReadData.cs | 108 ++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Completed.cs | 33 代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail.js | 20 代码管理/WMS/WIDESEA_WMSClient/src/views/stock/stockInfo.vue | 54 + 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/BCReadData.cs | 41 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs | 246 +++++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs | 6 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/StackerCraneJob_BC.cs | 16 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs | 8 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/测试架仓/StackerCraneJob_CSJ.cs | 15 代码管理/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue | 148 ++- 代码管理/WCS/WIDESEAWCS_Client/src/views/Home.vue | 5 代码管理/WCS/WIDESEAWCS_Client/src/views/Login.vue | 1182 +++++++----------------- 29 files changed, 1,833 insertions(+), 985 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/Home.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/Home.vue" index 41ecf97..f851270 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/Home.vue" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/Home.vue" @@ -39,13 +39,12 @@ setup() { // 瀹氫箟浠撳簱鍒楄〃 const warehouses = [ - { name: '鏉挎潗浠�', component: BoardWarehouse }, - { name: '娴嬭瘯鏋朵粨', component: TestFrameWarehouse }, { name: '闃荤剨浠�', component: SolderMaskWarehouse }, { name: 'PP浠�', component: PpWarehouse }, + { name: '鏉挎潗浠�', component: BoardWarehouse }, + { name: '娴嬭瘯鏋朵粨', component: TestFrameWarehouse }, { name: '娌瑰ⅷ浠�', component: InkWarehouse }, { name: '杈呮枡浠�', component: AuxiliaryWarehouse }, - { name: '鎴愬搧浠�', component: BoardWarehouse }, { name: '骞茶啘浠�', component: DryFilmWarehouse}, ]; diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/Login.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/Login.vue" index 78a3fb9..81243fa 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/Login.vue" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/Login.vue" @@ -1,864 +1,408 @@ <template> - <div id="vol-container" :class="['vol-theme-' + theme]"> - <div class="vol-aside" :style="{ width: menuWidth + 'px' }"> - <div class="header" :style="{ width: menuWidth - 1 + 'px' }"> - <img v-show="!isCollapse" v-bind:src="logo" /> - <i - @click="toggleLeft" - class="collapse-menu" - :class="isCollapse ? 'el-icon-s-unfold' : 'el-icon-s-fold'" - /> - </div> - <div class="vol-menu"> - <el-scrollbar style="height: 100%"> - <VolMenu - :currentMenuId="currentMenuId" - :on-select="onSelect" - :enable="true" - :open-select="false" - :isCollapse="isCollapse" - :list="menuOptions" - ></VolMenu> - </el-scrollbar> - </div> - </div> - <div class="vol-container" :style="{ left: menuWidth - 1 + 'px' }"> - <div class="vol-header"> - <div class="project-name">WMS</div> - <div class="header-text"> - <div class="h-link"> - <a - href="javascript:void(0)" - @click="to(item)" - v-for="(item, index) in links.filter((c) => { - return !c.icon; - })" - :key="index" - > - <span v-if="!item.icon">{{ item.text }}</span> - <i v-else :class="item.icon"></i> - </a> - </div> - </div> - <div class="header-info"> - <div class="h-link"> - <a - href="javascript:void(0)" - @click="to(item)" - v-for="(item, index) in links.filter((c) => { - return c.icon; - })" - :key="index" - > - <span v-if="!item.icon">{{ item.text }}</span> - <i v-else :class="item.icon"></i> - </a> - </div> - <!--娑堟伅绠$悊--> - <div class="h-link" @click="messageModel = true"> - <a> - <i class="el-icon-message-solid"> - <el-badge - :value="messageList.length" - :type="messageList.length > 0 ? 'danger' : 'success'" - class="item" - style="width: 10px" - ></el-badge> - </i> - </a> - </div> + <div class="login-container"> + <div class="project-name">WIDESEA_WMS</div> + <div class="login-form"> + <div class="form-user" @keypress="loginPress"> + <div class="login-text"> <div> - <img class="user-header" :src="userImg" :onerror="errorImg" /> + <div>娆㈣繋鐧诲綍...</div> + <div class="login-line"></div> </div> - <div class="user"> - <span>{{ userName }}</span> - <span id="index-date"></span> - </div> - <div class="settings"> - <i style="font-size: 20px" class="el-icon-s-tools" @click="drawer_model = true" /> - </div> + <div style="flex: 1"></div> </div> - </div> - <div class="vol-path"> - <el-tabs - @tab-click="selectNav" - @tab-remove="removeNav" - @contextmenu.prevent="bindRightClickMenu(false)" - type="border-card" - class="header-navigation" - v-model="selectId" - :strtch="false" - > - <el-tab-pane - v-for="(item, navIndex) in navigation" - type="card" - :name="navIndex + ''" - :closable="navIndex > 0" - :key="navIndex" - :label="item.name" - > - <span style="display: none">{{ navIndex }}</span> - </el-tab-pane> - </el-tabs> - <!-- 鍙抽敭鑿滃崟 --> - <div v-show="contextMenuVisible"> - <ul :style="{ left: menuLeft + 'px', top: menuTop + 'px' }" class="contextMenu"> - <li v-show="visibleItem.all"> - <el-button link @click="closeTabs()"> - <i class="el-icon-close"></i> - {{ - navigation.length == 2 ? "鍏抽棴鑿滃崟" : "鍏抽棴鎵�鏈�" - }} - </el-button> - </li> - <li v-show="visibleItem.left"> - <el-button link @click="closeTabs('left')"> - <i class="el-icon-back"></i>鍏抽棴宸﹁竟 - </el-button> - </li> - <li v-show="visibleItem.right"> - <el-button link @click="closeTabs('right')"> - <i class="el-icon-right"></i>鍏抽棴鍙宠竟 - </el-button> - </li> - <li v-show="visibleItem.other"> - <el-button link @click="closeTabs('other')"> - <i class="el-icon-right"></i>鍏抽棴鍏朵粬 - </el-button> - </li> - </ul> + <div class="login-text-small">WELCOME TO LOGIN</div> + <div class="item"> + <div class="input-icon el-icon-user"></div> + <input + type="text" + v-focus + v-model="userInfo.userName" + placeholder="璇疯緭鍏ヨ处鍙�" + /> </div> - </div> - <div class="vol-main" id="vol-main"> - <el-scrollbar style="height: 100%" v-if="permissionInited"> - <loading v-show="$store.getters.isLoading()"></loading> - <router-view v-slot="{ Component }"> - <keep-alive> - <component - :is="Component" - :key="$route.name" - v-if=" - !$route.meta || - ($route.meta && !$route.meta.hasOwnProperty('keepAlive')) - " - /> - </keep-alive> - <component - :is="Component" - :key="$route.name" - v-if="$route.meta && $route.meta.hasOwnProperty('keepAlive')" - /> - </router-view> - </el-scrollbar> - </div> - </div> - <el-drawer title="閫夋嫨涓婚" v-model="drawer_model" direction="rtl" destroy-on-close> - <div class="theme-selector"> - <div - @click="changeTheme(item.name)" - class="item" - v-for="(item, index) in theme_color" - :key="index" - :style="{ background: item.color }" - > - <div - v-show="item.leftColor" - :style="{ background: item.leftColor }" - style="height: 100%; width: 20px" - class="t-left" - ></div> - <div class="t-right"></div> + <div class="item"> + <div class="input-icon el-icon-lock"></div> + <input + type="password" + v-focus + v-model="userInfo.password" + placeholder="璇疯緭鍏ュ瘑鐮�" + /> </div> - </div> - </el-drawer> + <div class="item"> + <div class="input-icon el-icon-mobile"></div> - <el-drawer title="娑堟伅鍒楄〃" v-model="messageModel" direction="rtl" destroy-on-close size="40%"> - <Message :list="messageList"></Message> - </el-drawer> + <input + v-focus + type="text" + v-model="userInfo.verificationCode" + placeholder="杈撳叆楠岃瘉鐮�" + /> + <div class="code" @click="getVierificationCode"> + <img v-show="codeImgSrc != ''" :src="codeImgSrc" /> + </div> + </div> + </div> + <div class="loging-btn"> + <el-button + size="large" + :loading="loading" + color="#3a6cd1" + :dark="true" + @click="login" + long + > + <span v-if="!loading">鐧诲綍</span> + <span v-else>姝e湪鐧诲綍...</span> + </el-button> + </div> + + <!-- 璐﹀彿淇℃伅 --> + <!-- <div class="account-info"> + <p>婕旂ず璐﹀彿锛歛dmin666 瀵嗙爜:123456</p> + <p>鏈湴璐﹀彿锛歛dmin 瀵嗙爜:123456</p> + <p><a href="https://jq.qq.com/?_wv=1027&k=Sqstuy0M" style="text-decoration: none" + target="_blank">QQ3缇�:743852316</a> + + <a href="http://v2.volcore.xyz/document/guide" style="text-decoration: none" target="_blank">妗嗘灦鏂囨。</a> + </p> + </div> --> + <!-- 閾炬帴浣嶇疆 --> + <!-- <div class="app-link" > + <a href="#" style="text-decoration: none">绉诲姩绔壂鐮�</a> + <a> + <i class="el-icon-chat-dot-round"></i> 灏忕▼搴� + <img src="https://app-1256993465.cos.ap-nanjing.myqcloud.com/wechat.jpg" /></a> + <a> + <i class="el-icon-apple"></i> + Android + <img src="https://app-1256993465.cos.ap-nanjing.myqcloud.com/Android.png" /></a> + <a> + <i class="el-icon-document"></i> + H5 + <img src="https://app-1256993465.cos.ap-nanjing.myqcloud.com/H5.png" /></a> + </div> --> + </div> + + <!-- 椤甸潰搴曢儴 --> + <!-- <div class="login-footer"> + <a style="text-decoration: none" href="https://beian.miit.gov.cn/" target="_blank">浜琁CP澶�19056538鍙�-1</a> + + + <a href="https://dotnet9.com/" style="text-decoration: none" target="blank">Dotnet9</a> + <a href="https://space.bilibili.com/525836469" style="text-decoration: none" target="blank">NET瑙嗛鏁欑▼(寰蒋MVP-ACE褰曞埗)</a> + <a href="https://www.cctalk.com/m/group/90268531" style="text-decoration: none" target="blank">VOL妗嗘灦瑙嗛</a> + <a href="http://120.48.115.252:9990" style="text-decoration: none" target="blank">瑙嗛婕旂ず鍦板潃</a> + </div> --> + + <img class="login-bg" src="/static/login_bg.png" /> </div> </template> -<style lang="less" scoped> -@import "./index/index.less"; -</style> -<script> -import loading from "@/components/basic/RouterLoading"; -import VolMenu from "@/components/basic/VolElementMenu.vue"; -import Message from "./index/Message.vue"; -import MessageConfig from "./index/MessageConfig.js"; -var imgUrl = require("@/assets/imgs/wms_x.png"); -var $this; -var $interval; -var $indexDate; + + +<script > import { defineComponent, - reactive, ref, - watch, - onMounted, + reactive, + toRefs, getCurrentInstance, - h } from "vue"; import { useRouter, useRoute } from "vue-router"; import store from "../store/index"; import http from "@/../src/api/http.js"; -import { ElNotification } from "element-plus"; -import { useStore } from "vuex"; - export default defineComponent({ - components: { - VolMenu, - loading, - Message - }, - - data() { - return { - allTabs: true, - leftTabs: true, - rightTabs: true, - otherTabs: true, - menuLeft: 0, - menuTop: 0 - }; - }, setup(props, context) { - let client = ref(null); - // 鑺傛祦鐩稿叧鍙橀噺锛堝欢杩熸椂闂村缓璁�300-500ms锛屾牴鎹悗绔帹閫侀鐜囪皟鏁达級 - const THROTTLE_DELAY = 300; // 寤惰繜鏇存柊鏃堕棿锛堟绉掞級 - let lastUpdateTime = ref(0); // 涓婁竴娆℃洿鏂版椂闂� - let latestWsData = ref(null); // 缂撳瓨鏈�鏂扮殑WebSocket鏁版嵁 - let throttleTimer = ref(null); // 鑺傛祦瀹氭椂鍣� - - // 鑾峰彇鍏ㄥ眬灞炴�у拰鏂规硶 - const { proxy } = getCurrentInstance(); - - // 鑿滃崟瀵艰埅榛樿瀹藉害 - const menuWidth = ref(200); - const contextMenuVisible = ref(false); - const isCollapse = ref(false); - const drawer_model = ref(false); - const messageModel = ref(false); - const theme_color = ref([ - { name: "blue", color: "rgb(45, 140, 240)" }, - { name: "blue2", color: "rgb(45, 140, 240)", leftColor: "#0068d6" }, - { name: "red", color: "rgb(237, 64, 20)" }, - { name: "red2", color: "rgb(237, 64, 20)", leftColor: "#a90000" }, - { name: "dark", color: "#272929" }, - { name: "orange", color: "#ff9900" }, - { name: "orange2", color: "#ff9900", leftColor: "rgb(232 141 5)" }, - { name: "green", color: "rgb(25, 190, 107)" }, - { name: "green2", color: "rgb(25, 190, 107)", leftColor: "#019e4f" }, - { name: "white", color: "#fff" } - ]); - const links = ref([ - { text: "涓汉涓績", path: "/UserInfo", id: -1, icon: "el-icon-s-custom" }, - { - text: "瀹夊叏閫�鍑�", - path: "/login", - id: -4, - icon: "el-icon-switch-button" - } - ]); - const errorImg = ref( - 'this.src="' + require("@/assets/imgs/error-img.png") + '"' - ); - const selectId = ref("1"); - // 銆愰椤点�戞爣绛惧簭鍙�(褰撳墠鍙抽敭閫変腑鐨勮彍鍗�) - const selectMenuIndex = ref("0"); - //2022.05.29澧炲姞tab閫夐」涓庤彍鍗曡仈鍔ㄥ姛鑳� - const currentMenuId = ref(0); - const userName = ref("--"); - const userTrueName = ref("--"); - const userInfo = ref({}); - const visibleItem = reactive({ - left: false, - right: false, - all: false, - other: false + store.commit("clearUserInfo", ""); + const loading = ref(false); + const codeImgSrc = ref(""); + const userInfo = reactive({ + userName: "", + password: "", + verificationCode: "", + UUID: undefined, }); - const userImg = ref(""); - const navigation = reactive([ - { orderNo: "0", id: "1", name: "棣栭〉", path: "/home" } - ]); - const logo = ref(imgUrl); - const theme = ref("blue2"); - const menuOptions = ref([]); - const permissionInited = ref(false); - const messageList = reactive([]); - let _config = getCurrentInstance().appContext.config.globalProperties; + + const getVierificationCode = () => { + http.get("/api/User/getVierificationCode").then((x) => { + codeImgSrc.value = "data:image/png;base64," + x.img; + userInfo.UUID = x.uuid; + }); + }; + getVierificationCode(); + + let appContext = getCurrentInstance().appContext; + let $message = appContext.config.globalProperties.$message; let router = useRouter(); - const toggleLeft = () => { - isCollapse.value = !isCollapse.value; - menuWidth.value = isCollapse.value ? 63 : 200; - }; - //2021.08.28寮�鏀炬墜鍔ㄦ姌鍙犺彍鍗曟柟娉� - _config.menu = { - show() { - toggleLeft(); - }, - hide() { - toggleLeft(); + + const login = () => { + if (!userInfo.userName) return $message.error("璇疯緭鍏ョ敤鎴峰悕"); + if (!userInfo.password) return $message.error("璇疯緭鍏ュ瘑鐮�"); + if (!userInfo.verificationCode) { + return $message.error("璇疯緭鍏ラ獙璇佺爜"); } - }; - const Store = useStore(); - const s = ref(null); - - // 鑺傛祦澶勭悊WebSocket鏁版嵁锛堟牳蹇冮�昏緫锛� - const handleThrottledWsData = (rawData) => { - // 缂撳瓨鏈�鏂版暟鎹紙纭繚鏈�缁堟洿鏂扮敤鐨勬槸鏈�鏂板�硷級 - latestWsData.value = rawData; - const now = Date.now(); - - // 鎯呭喌1锛氳窛绂讳笂娆℃洿鏂拌秴杩囧欢杩熸椂闂达紝鐩存帴澶勭悊 - if (now - lastUpdateTime.value >= THROTTLE_DELAY) { - processAndUpdateData(); - lastUpdateTime.value = now; - } - // 鎯呭喌2锛氭湭瓒呰繃寤惰繜鏃堕棿锛岀敤瀹氭椂鍣ㄥ欢杩熷鐞嗭紙閬垮厤閲嶅瑙﹀彂锛� - else { - if (throttleTimer.value) clearTimeout(throttleTimer.value); - throttleTimer.value = setTimeout(() => { - processAndUpdateData(); - lastUpdateTime.value = Date.now(); - }, THROTTLE_DELAY); - } - }; - - // 缁熶竴澶勭悊骞舵洿鏂版暟鎹紙閬垮厤閲嶅浠g爜锛� - const processAndUpdateData = () => { - if (!latestWsData.value) return; - try { - // 瑙f瀽WebSocket鏁版嵁 - const parsedData = typeof latestWsData.value === 'string' - ? JSON.parse(latestWsData.value) - : latestWsData.value; + loading.value = true; + http.post("/api/User/login", userInfo, "姝e湪鐧诲綍....").then((result) => { + if (!result.status) { + loading.value = false; + getVierificationCode(); + return $message.error(result.message); + } + $message.success("鐧诲綍鎴愬姛,姝e湪璺宠浆!"); + store.commit("setUserInfo", result.data); - // 1. 鏇存柊Vuex涓殑homedata - store.dispatch("sethomedata", parsedData); - - // 2. 澶勭悊娑堟伅鍒楄〃 - if (parsedData.title && parsedData.message) { - messageList.push(parsedData); - // 鏄剧ず閫氱煡 - ElNotification({ - title: parsedData.title, - message: h("i", { style: "color: teal" }, parsedData.message), - position: "bottom-right" - }); - } - } catch (err) { - console.error("WebSocket鏁版嵁澶勭悊澶辫触锛�", err); - } - }; - - // WebSocket杩炴帴閫昏緫锛堜娇鐢ㄨ妭娴佸鐞嗘暟鎹級 - const createSocket = url => { - // 鍏抽棴宸叉湁杩炴帴锛堥伩鍏嶉噸澶嶈繛鎺ワ級 - if (client.value) { - client.value.close(); - } - - // 鍒涘缓WebSocket杩炴帴 - client.value = new WebSocket("ws:localhost:9260/"); - - client.value.onopen = function() { - console.log("WebSocket 杩炴帴鎴愬姛"); - }; - - // 鏀跺埌娑堟伅鍚庝氦缁欒妭娴佸嚱鏁板鐞� - client.value.onmessage = function(event) { - if (event && event.data) { - handleThrottledWsData(event.data); - } - }; - - client.value.onclose = function() { - console.log("WebSocket 杩炴帴鍏抽棴"); - // 閲嶈繛閫昏緫 - setTimeout(() => createSocket(url), 5000); - }; - - client.value.onerror = function(err) { - console.log("WebSocket 杩炴帴閿欒: ", err); - // 閿欒鍚庨噸杩� - setTimeout(() => createSocket(url), 5000); - }; - }; - - const changeTheme = name => { - if (theme.value != name) { - theme.value = name; - } - localStorage.setItem("vol3_theme", name); - }; - const to = item => { - if (item.path == "#") { - window.open("https://github.com/cq-panda/Vue.NetCore"); - return; - } - if (item.path.indexOf("http") != -1) { - window.open(item.path); - return; - } - if (typeof item == "string" || item.path == "/login") { - if (item == "/login" || item.path == "/login") { - store.commit("clearUserInfo", ""); - window.location.href = "/"; - return; - } - router.push({ path: item }); - return; - } - if (item.path == "#") return; - open(item); - }; - const open = (item, useRoute) => { - let _index = navigation.findIndex(x => { - return x.path == item.path; - }); - if (_index == -1) { - navigation.push({ - id: item.id + "", - name: item.name || item.text || "鏃犳爣棰�", - path: item.path, - query: item.query - }); - selectId.value = navigation.length - 1 + ""; - } else { - selectId.value = _index + ""; - } - if (useRoute === undefined) { - setItem(item); - router.push(item); - } - currentMenuId.value = item.id * 1; - // tab鑿滃崟缁戝畾鍙抽敭浜嬩欢 - proxy.$nextTick(function(e) { - proxy.bindRightClickMenu(true); + router.push({ path: "/" }); }); }; - const close = path => { - let index = navigation.findIndex(x => { - return x.path == path; - }); - if (index == -1) { - return _config.$Message.error("鏈壘鍒拌彍鍗�"); + const loginPress = (e) => { + if (e.keyCode == 13) { + login(); } - removeNav(index); }; - const setItem = item => { - localStorage.setItem( - window.location.origin + "_tabs", - JSON.stringify(item) - ); + const openUrl = (url) => { + window.open(url, "_blank"); }; - const getItem = () => { - let nav = localStorage.getItem(window.location.origin + "_tabs"); - return nav ? JSON.parse(nav) : null; - }; - const selectNav = item => { - selectId.value = item.props.name; - let _path = navigation[item.index].path; - currentMenuId.value = ( - menuOptions.value.find(c => { - return c.path == _path; - }) || { id: 0 } - ).id; - - router.push({ - path: navigation[item.index].path, - query: navigation[item.index].query - }); - }; - - const removeNav = _index => { - return new Promise(() => { - //鍏抽棴鐨勫綋鍓嶉」,璺宠浆鍒板墠涓�涓〉闈� - if (selectId.value == _index + "") { - setItem(navigation[_index - 1]); - router.push({ - path: navigation[_index - 1].path, - query: navigation[_index - 1].query - }); - navigation.splice(_index, 1); - selectId.value = selectId.value - 1 + ""; - return; - } - if (_index < selectId.value) { - selectId.value = selectId.value - 1 + ""; - } - navigation.splice(_index, 1); - currentMenuId.value = ( - menuOptions.value.find(c => { - return c.path == navigation[selectId.value * 1].path; - }) || { id: 0 } - ).id; - }); - }; - - const getSelectMenuName = id => { - return menuOptions.value.find(function(x) { - return x.id == id; - }); - }; - const onSelect = treeId => { - var item = getSelectMenuName(treeId); - open(item, false); - }; - - /** - * 鏄剧ず鍙抽敭鑿滃崟 - */ - const openTabsMenu = function(e) { - e.preventDefault(); - let tabId = e.target.id.split("-")[1] * 1; - - //璁板綍褰撳墠閫変腑鐨勮彍鍗昳ndex - selectMenuIndex.value = - document.getElementById("pane-" + tabId).children[0].textContent * 1; - //鍙湁棣栭〉鏃朵笉鏄剧ず - if (navigation.length == 1) { - return; - } - - //棣栭〉璁剧疆鏄剧ず鍏抽棴鍙宠竟鑿滃崟 - if (!selectMenuIndex.value) { - visibleItem.all = false; - visibleItem.right = true; - visibleItem.left = false; - visibleItem.other = false; - } else { - visibleItem.all = true; - //涓嶆槸鏈�鍚庝竴涓樉绀哄叧闂彸杈硅彍鍗� - visibleItem.right = selectMenuIndex.value != navigation.length - 1; - //鍙湁涓や釜鑿滃崟鏃朵笉鏄剧ず鍏抽棴宸﹁竟 - visibleItem.left = navigation.length != 2; - //鍙湁涓や釜鑿滃崟鏃朵笉鏄剧ず鍏抽棴鍏朵粬 - visibleItem.other = navigation.length != 2; - } - contextMenuVisible.value = true; - // 璁剧疆鍙抽敭鑿滃崟鏄剧ず鐨勪綅缃� - proxy.menuLeft = - e.target.getBoundingClientRect().left - (isCollapse.value ? 63 : 198); - proxy.menuTop = 36; - }; - - /** - * 鍏抽棴鍙抽敭鑿滃崟 - */ - const closeTabsMenu = () => { - contextMenuVisible.value = false; - }; - const toHome = () => { - open({ - text: navigation[0].name, - path: navigation[0].path - }); - }; - /** - * 鍏抽棴鍏跺畠鏍囩椤� - */ - const closeTabs = value => { - let _menuId = navigation[selectId.value * 1].id; - let currnetIndex = selectId.value * 1; - switch (value) { - case "left": { - // 鍒犻櫎宸︿晶tab鏍囩 - navigation.splice(1, currnetIndex - 1); - break; - } - case "right": { - // 鍒犻櫎鍙充晶tab鏍囩 - if (selectMenuIndex.value == 0) { - navigation.splice(currnetIndex); - toHome(); - } else { - navigation.splice(currnetIndex + 1); - if (selectMenuIndex.value < currnetIndex) { - navigation.splice( - selectMenuIndex.value, - currnetIndex - selectMenuIndex.value - ); - } - } - break; - } - case "other": { - // 鍒犻櫎鍏朵粬鎵�鏈塼ab鏍囩 - navigation.splice(currnetIndex + 1); - navigation.splice(1, currnetIndex - 1); - break; - } - default: { - //鍏抽棴鎵�鏈� - navigation.splice(1, navigation.length); - toHome(); - break; - } - } - selectId.value = - navigation.findIndex(c => { - return c.id == _menuId; - }) + ""; - closeTabsMenu(); - }; - - watch( - () => contextMenuVisible.value, - (newVal, oldVal) => { - if (newVal) { - document.body.addEventListener("click", closeTabsMenu); - } else { - document.body.removeEventListener("click", closeTabsMenu); - } - } - ); - - /** - * 绯荤粺鍒涘缓寮�濮� - */ - const created = () => { - let _theme = localStorage.getItem("vol3_theme"); - if (_theme) { - theme.value = _theme; - } - - let _userInfo = store.getters.getUserInfo(); - if (_userInfo) { - userName.value = _userInfo.userName; - userTrueName.value = _userInfo.userTrueName; - if (_userInfo.img) { - userImg.value = _config.base.getImgSrc(_userInfo.img, http.ipAddress); - } - } - - createSocket(window.webConfig.webSocketUrl); - - Object.assign(_config.$tabs, { open: open, close: close }); - - http.get("api/Sys_Menu/getTreeMenu", {}, true).then(data => { - data.push({ id: "1", name: "棣栭〉", url: "/home" }); - data.forEach(d => { - d.path = (d.url || "").replace("/Manager", ""); - d.to = (d.url || "").replace("/Manager", ""); - if (!d.icon || d.icon.substring(0, 3) != "el-") { - d.icon = "el-icon-menu"; - } - }); - - store.dispatch("setPermission", data); - menuOptions.value = data; - permissionInited.value = true; - - //寮�鍚秷鎭帹閫� - if (_config.$global.signalR) { - MessageConfig(http, result => { - messageList.unshift(result); - }); - } - - //褰撳墠鍒锋柊鏄笉鏄椤� - if (router.currentRoute.value.path != navigation[0].path) { - //鏌ユ壘绯荤粺鑿滃崟 - let item = menuOptions.value.find(x => { - return x.path == router.currentRoute.value.path; - }); - if (item) return onSelect(item.id); - //鏌ユ壘椤堕儴蹇嵎杩炴帴 - item = links.value.find(x => { - return x.path == router.currentRoute.value.path; - }); - //鏌ユ壘鏈�鍚庝竴娆¤烦杞殑椤甸潰 - if (!item) { - item = getItem(); - } - if (item) { - return open(item, false); - } - } - selectId.value = "1"; - }); - }; - created(); return { - menuWidth, - isCollapse, - drawer_model, - theme_color, - errorImg, + loading, + codeImgSrc, + getVierificationCode, + login, userInfo, - userName, - userTrueName, - userImg, - selectId, - selectMenuIndex, - navigation, - links, - onSelect, - openTabsMenu, - selectNav, - getSelectMenuName, - removeNav, - logo, - theme, - menuOptions, - permissionInited, - changeTheme, - to, - toggleLeft, - messageModel, - messageList, - contextMenuVisible, - visibleItem, - closeTabsMenu, - closeTabs, - currentMenuId + loginPress, + openUrl, }; }, - /** - * 鎸傝浇閽╁瓙鍑芥暟 - */ - mounted() { - let _date = showTime(); - $indexDate = document.getElementById("index-date"); - $indexDate.innerText = _date; - $interval = setInterval(function() { - $indexDate.innerText = showTime(); - }, 1000); - - this.bindRightClickMenu(true); + directives: { + focus: { + inserted: function (el) { + el.focus(); + }, + }, }, +}); +</script> +<style lang="less" scoped> +.login-container { + display: flex; + width: 100%; + height: 100%; + background: rgb(246, 247, 252); + justify-content: flex-end; + align-items: center; +} - methods: { - /** - * 缁戝畾鍙抽敭浜嬩欢 - */ - bindRightClickMenu(enable) { - if (!enable) return; - let that = this; - // 浣跨敤鍘熺敓js 涓哄崟涓猟om缁戝畾榧犳爣鍙冲嚮浜嬩欢 - that.$nextTick(() => { - let tab_top_dom = Object.assign( - [], - document.getElementsByClassName("el-tabs__item is-top") - ); - tab_top_dom.forEach((item, index) => { - item.oncontextmenu = that.openTabsMenu; - }); - }); - } - }, +.login-form { + align-items: center; + width: 50%; + display: flex; + flex-direction: column; + // margin-right: 150px; + z-index: 999; - /** - * 閿�姣侀挬瀛愬嚱鏁� - */ - destroyed() { - $this = null; - clearInterval($interval); - // 鍏抽棴WebSocket杩炴帴 - if (client && client.value) { - client.value.close(); + .form-user { + // margin: 25px 0; + + .item { + border-radius: 5px; + border: 1px solid #ececec; + display: flex; + margin-bottom: 30px; + background: #ffff; + height: 45px; + padding-left: 20px; + display: flex; + + .code { + position: relative; + cursor: pointer; + width: 74px; + padding: 5px 10px 0 0; + } + + .input-icon { + line-height: 45px; + color: #7a7a7a; + padding-right: 20px; + } } } -}); -const week = new Array( - "鏄熸湡涓�", - "鏄熸湡浜�", - "鏄熸湡涓�", - "鏄熸湡鍥�", - "鏄熸湡浜�", - "鏄熸湡鍏�", - "鏄熸湡鏃�" -); -function showTime() { - let date = new Date(); - let year = date.getFullYear(); - let month = date.getMonth() + 1; - let day = date.getDate(); - let hour = date.getHours(); - let minutes = date.getMinutes(); - let second = date.getSeconds(); - return ( - year + - "." + - (month < 10 ? "0" + month : month) + - "." + - (day < 10 ? "0" + day : day) + - "" + - " " + - (hour < 10 ? "0" + hour : hour) + - ":" + - (minutes < 10 ? "0" + minutes : minutes) + - ":" + - (second < 10 ? "0" + second : second) + - " " + - (week[date.getDay() - 1] || week[6]) - ); + input:-webkit-autofill { + box-shadow: 0 0 0px 1000px white inset; + -webkit-box-shadow: 0 0 0px 1000px white inset !important; + } + + input { + background: white; + display: block; + box-sizing: border-box; + width: 100%; + min-width: 0; + margin: 0; + padding: 0; + color: #323233; + line-height: inherit; + text-align: left; + border: 0; + outline: none; + font-size: 16px; + line-height: 20px; + } } -</script> + +.form-user, +.loging-btn { + width: 400px; +} + +.loging-btn { + box-shadow: 2px 4px 11px #a4c2ff; + margin-top: 10px; + + button { + padding: 21px; + font-size: 14px !important; + width: 100%; + } +} + +.login-text { + font-weight: bolder; + font-size: 20px; + letter-spacing: 2px; + + position: relative; + display: flex; + + .login-line { + z-index: -1; + padding: 5px; + position: relative; + top: -8px; + width: 100%; + background-image: linear-gradient(to right, #6598ff, white); + } +} + +.login-text-small { + margin-bottom: 20px; + font-size: 13px; + color: #7d7c7c; +} + +.login-bg { + left: 0; + position: absolute; + height: 100%; + width: 50%; + z-index: 0; +} + +.project-name { + position: absolute; + top: 40px; + left: 40px; + z-index: 9999; + font-weight: bolder; + background-image: linear-gradient(to right, #1850c1, #9c009c); + -webkit-background-clip: text; + color: transparent; + font-size: 25px; +} +</style> +<style lang="less" scoped> +.app-link { + // font-weight: bolder; + text-align: center; + padding-top: 5px; + font-size: 12px; + width: 400px; + padding-left: 40px; + display: flex; + + a { + flex: 1; + position: relative; + cursor: pointer; + width: 70px; + color: #666666; + margin: 2px 10px 0 0; + } + + img { + display: none; + } + + a:hover { + color: #0545f6 !important; + + img { + display: block; + position: absolute; + z-index: 999999999; + top: -130px; + width: 120px; + left: -22px; + + border: 1px solid #b1b1b1; + } + } +} + +.login-footer { + position: absolute; + width: 50%; + bottom: 0.5rem; + font-size: 12px; + text-align: center; + padding-bottom: 10px; + color: #4f4f4f; + + a { + margin-right: 10px; + font-size: 12px; + color: #4f4f4f; + } + + div { + margin-bottom: 5px; + } + + a:hover { + cursor: pointer; + color: #0540e3 !important; + } +} + +.account-info { + font-size: 12px; + color: #636363; + margin-top: 15px; +} +</style> <style lang="less" scoped> -.vol-container .vol-path ::v-deep(.el-tabs__content) { - padding: 0; -} +@media screen and (max-width: 700px) { + .login-bg, + .account-info, + .app-link, + .login-footer, + .project-name { + display: none; + } -.item { - margin-top: -20px; - margin-right: 40px; -} + .login-container { + padding: 2rem; + justify-content: center; + } -.contextMenu { - width: 120px; - margin: 0; - border: 1px solid #eaeaea; - background: #fff; - z-index: 30000; - position: absolute; - list-style-type: none; - padding: 5px 0; - border-radius: 4px; - font-size: 14px; - color: #333; - box-shadow: 2px 2px 3px 0 rgb(182 182 182 / 20%); - i, - button { - font-size: 14px !important; + .login-form { + width: 100%; + } + + .form-user, + .loging-btn { + width: 100%; } } - -.contextMenu li { - margin: 0; - padding: 5px 17px; -} - -.contextMenu li:hover { - background: #fafafa; - cursor: pointer; -} - -.contextMenu li button { - color: #626060; - font-size: 14px; - letter-spacing: 1px; -} - -.el-tabs.el-tabs--top.el-tabs--border-card.header-navigation - > .el-tabs__header - .el-tabs__item:last-child, -.el-tabs--top.el-tabs--border-card.header-navigation - > .el-tabs__header - .el-tabs__item:nth-child(2) { - padding: 0; -} - -.header-navigation ::v-deep(.el-tabs__item.is-top) { - padding: 0 15px; -} -</style> -<style> -.horizontal-collapse-transition { - transition: 0s width ease-in-out, 0s padding-left ease-in-out, - 0s padding-right ease-in-out; -} -</style> +</style> \ No newline at end of file diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/BoardWarehouse.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/BoardWarehouse.vue" index 8b42e03..0e5e0f5 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/BoardWarehouse.vue" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/BoardWarehouse.vue" @@ -1,45 +1,341 @@ <template> - <div class="message-container"> - <div class="item" v-for="(item, index) in list" :key="index"> - <div class="title">{{ item.title }}({{ item.date }})</div> - <div class="content">{{ item.message }}</div> + <div id="title"> + <div id="bkuang" style="border-top: none"> + <!-- BC浠撳爢鍨涙満鐘舵�侀潰鏉� --> + <div class="skuang"> + <div class="bcuname">鏉挎枡浠撳爢鍨涙満</div> + <div class="bcankuang"> + <div class="xname">鍫嗗灈鏈虹姸鎬�:</div> + <div class="xbci" :title="bcData.R_BC_Status">{{ bcData.R_BC_Status || '-' }}</div> + </div> + <div class="bcankuang"> + <div class="xname">鍫嗗灈鏈烘墜鑷姩鐘舵��:</div> + <div class="xbci" :title="bcData.R_BC_AutoStatus">{{ bcData.R_BC_AutoStatus || '-' }}</div> + </div> + <div class="bcankuang"> + <div class="xname">姝e湪鎵ц鐨勪换鍔″彿:</div> + <div class="xbci" :title="bcData.R_BC_TaskNum">{{ bcData.R_BC_TaskNum || '-' }}</div> + </div> + <div class="bcankuang"> + <div class="xname">鍫嗗灈鏈哄伐浣滅姸鎬�:</div> + <div class="xbci" :title="bcData.R_BC_WorkStatus">{{ bcData.R_BC_WorkStatus || '-' }}</div> + </div> + <div class="bcankuang"> + <div class="xname">浣滀笟绫诲瀷:</div> + <div class="xbci" :title="bcData.R_BC_WorkType">{{ bcData.R_BC_WorkType || '-' }}</div> + </div> + <div class="bcankuang"> + <div class="xname">鎵樼洏绫诲瀷:</div> + <div class="xbci" :title="bcData.R_BC_TrayType">{{ bcData.R_BC_TrayType || '-' }}</div> + </div> + </div> + + + </div> </div> </template> <script> +import { ref, nextTick, watch, onUnmounted } from "vue"; +import { useStore } from "vuex"; +import { onMounted } from "vue"; + export default { - props: { - list: { - type: Array, - default: () => { - return []; - } - } + data() { + return { + xuan: 0 + }; }, - created() { - if (!this.list.length) { - this.list.push({ - title: '娑堟伅娴嬭瘯鏍噏weqweqweqw棰�', - message: '娑堟伅娴嬭瘯鍐呭娑堟伅娴嬭瘯鍐呭娑堟伅娴嬭瘯鍐呭娑堟伅娴嬭瘯鍐呭', - date: '2022-05-02 03:10' + setup() { + const store = useStore(); + // 浠呭瓨鍌˙C鏁版嵁锛屼笌鍏朵粬鏁版嵁闅旂 + const bcData = ref({}); + + // 寤惰繜鏇存柊閰嶇疆锛岃В鍐抽棯鐑侀棶棰� + const UPDATE_DELAY = 300; // 寤惰繜300ms鏇存柊UI + let updateTimer = null; // 瀹氭椂鍣ㄥ疄渚� + + // BC鏁版嵁鏄犲皠瑙勫垯 + const bcStatusMap = { + R_BC_Status: { + 1: "姝e父", + 2: "鏁呴殰", + 3: "鎬ュ仠", + }, + R_BC_AutoStatus: { + 0: "缁翠慨", + 1: "鎵嬪姩", + 2: "鍗婅嚜鍔�", + 3: "鑷姩", + }, + R_BC_WorkStatus: { + 0: "寰呮満", + 1: "鍙栬揣涓�", + 2: "鍙栬揣瀹屾垚", + 4: "鏀捐揣涓�", + 5: "鏀捐揣瀹屾垚", + 6: "浠诲姟瀹屾垚", + }, + R_BC_WorkType: { + 0: "鏃犱綔涓氫换鍔�(0)", + 1: "鍙栨斁璐т綔涓�(1)", + 2: "鍙彇璐т綔涓�(2)", + 3: "鍙斁璐т綔涓�(3)", + 4: "绉诲姩鍒版寚瀹氫綅缃�" + }, + R_BC_TrayType: { + "-1": "绌虹(-1)", + 1: "灏忔墭鐩�(1)", + 2: "涓墭鐩�(2)", + 3: "澶ф墭鐩�(3)", + 4: "鐗瑰ぇ鎵樼洏(4)", + } + }; + + // BC瀛楁鍒嗙粍 + const bcFieldGroups = { + permissionFields: { + keys: ["R_BC_IsCanPut1", "R_BC_IsCanTake1", "R_BC_IsCanPut2", "R_BC_IsCanTake2", + "R_BC_IsCanPut3", "R_BC_IsCanTake3", "R_BC_IsCanPut4", "R_BC_IsCanTake4"], + map: { true: "鏄�", false: "鍚�" } + }, + requestFields: { + keys: ["W_BC_PutRequest1", "W_BC_TakeRequest1", "W_BC_PutRequest2", "W_BC_TakeRequest2", + "W_BC_PutRequest3", "W_BC_TakeRequest3", "W_BC_PutRequest4", "W_BC_TakeRequest4"], + map: { true: "鏄�", false: "鍚�" } + }, + finishFields: { + keys: ["W_BC_PutFinish1", "W_BC_TakeFinish1", "W_BC_PutFinish2", "W_BC_TakeFinish2", + "W_BC_PutFinish3", "W_BC_TakeFinish3", "W_BC_PutFinish4", "W_BC_TakeFinish4"], + map: { true: "鏄�", false: "鍚�" } + }, + palletTypeFields: { + keys: ["R_BC_TakePalletType1", "R_BC_TakePalletType2", "R_BC_TakePalletType3", "R_BC_TakePalletType4", + "W_BC_PutPalletType1", "W_BC_PutPalletType2", "W_BC_PutPalletType3", "W_BC_PutPalletType4"], + map: { "-1": "绌虹(-1)", 1: "灏忔墭鐩�(1)", 2: "涓墭鐩�(2)", 3: "澶ф墭鐩�(3)", 4: "鐗瑰ぇ鎵樼洏(4)" } + } + }; + + // 澶勭悊BC鍘熷鏁版嵁 + const processBCData = (rawData) => { + if (!rawData) return {}; + const processedData = { ...rawData }; + + // 澶勭悊鏍稿績鐘舵�佸瓧娈� + Object.keys(bcStatusMap).forEach(key => { + if (processedData.hasOwnProperty(key)) { + processedData[key] = bcStatusMap[key][processedData[key]] || processedData[key]; + } }); - } + + // 澶勭悊鍒嗙粍瀛楁 + Object.values(bcFieldGroups).forEach(group => { + group.keys.forEach(key => { + if (processedData.hasOwnProperty(key)) { + processedData[key] = group.map[processedData[key]] || processedData[key]; + } + }); + }); + + return processedData; + }; + + // 寤惰繜鏇存柊BC鏁版嵁锛岄伩鍏嶉珮棰戝埛鏂� + const delayedUpdateBCData = (newRawData) => { + if (updateTimer) { + clearTimeout(updateTimer); + } + + updateTimer = setTimeout(() => { + // 鍙鐞嗗寘鍚獴C鐗瑰緛瀛楁鐨勬暟鎹� + if (newRawData && newRawData.R_BC_Status !== undefined) { + bcData.value = processBCData(newRawData); + + // 鏇存柊鏍峰紡 + nextTick(() => { + const valueElements = document.getElementsByClassName("xbci"); + for (let i = 0; i < valueElements.length; i++) { + if (valueElements[i].innerHTML === "鏄�") { + valueElements[i].style.color = "yellow"; + } else if (valueElements[i].innerHTML === "鍚�") { + valueElements[i].style.color = "red"; + } + } + }); + } + }, UPDATE_DELAY); + }; + + onMounted(() => { + // 鍒濆鍔犺浇鏁版嵁 + const initialData = store.state.homedata; + if (initialData && initialData.R_BC_Status !== undefined) { + bcData.value = processBCData(initialData); + } + + // 鐩戝惉鏁版嵁鍙樺寲锛屽彧澶勭悊BC鏁版嵁 + const unwatch = watch( + () => store.state.homedata, + (newData) => { + if (newData && newData.R_BC_Status !== undefined) { + delayedUpdateBCData(newData); + } + }, + { deep: true } + ); + + // 缁勪欢鍗歌浇鏃舵竻鐞� + onUnmounted(() => { + unwatch(); + if (updateTimer) { + clearTimeout(updateTimer); + } + }); + }); + + return { + bcData + }; } }; </script> -<style scoped lang="less"> -.message-container { - .title { - padding-bottom: 10px; - } - .item { - border-bottom: 1px solid #eee; - padding: 10px 20px; - } - .content { - color: #7e7e7e; - font-size: 13px; - } + +<style scoped> +.ding { + float: left; + width: 20px; + height: 20px; + margin-top: 7px; } -</style> \ No newline at end of file +.yan { + color: white; + float: left; + font-size: 25px; +} +.dakuang { + width: 250px; + height: 50px; + position: absolute; + top: 150px; + left: 200px; +} +#xiugai { + width: 100px; + height: 30px; + float: left; + border-radius: 5px; + text-align: center; + line-height: 30px; + cursor: pointer; + border: 1px solid white; + color: white; + background: rgba(255, 255, 255, 0.5); + font-size: 25px; + position: absolute; + top: 150px; + left: 450px; +} +#xiugai:hover { + background: #f60; +} +#shu1, +#shu2 { + width: 200px; + height: 30px; + float: left; + margin-top: 0px; + margin-right: 0px; + border-radius: 5px; + border: 1px solid white; +} +#guan { + width: 40px; + height: 40px; + float: left; + font-size: 1.1cqw; + text-align: center; + line-height: 40px; + cursor: pointer; + margin-left: 560px; + color: white; + position: absolute; +} +#ti { + width: 600px; + height: 300px; + position: relative; + background: rgba(255, 255, 255, 1); + border-radius: 10px; + top: 230px; + left: 35%; + display: none; + background-image: url("../../img/1.png"); + background-repeat: no-repeat; + background-size: 170%; + background-position: -220px 0px; +} +.bcuname { + width: 100%; + height: 5vh; + float: left; + text-align: center; + line-height: 50px; + font-weight: 700; + font-size: 1.1cqw; + color: white; +} +.xname { + width: 70%; + height: 80px; + float: left; + line-height: 7vh; + font-size: 1.1cqw; + color: white; +} +.xbci { + width: 30%; + height: 7vh; + float: left; + line-height: 50px; + font-size: 1.1cqw; + color: rgb(242, 242, 50); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.bcankuang { + width: 45%; + height: 3vh; + margin-top: 10px; + margin-left: 5%; + float: left; +} +#title { + float: left; + width: 95%; + height: 88vh; + margin-top: 40px; + margin-left: 3%; + background-image: url("../../img/1.png"); + background-repeat: no-repeat; + background-size: 100%; + container-type: inline-size; +} +#bkuang { + width: 100%; + height: 55vh; + float: left; +} +.skuang { + width: 31%; + height: 55vh; + float: left; + border-top: none; + border-left: none; + border-bottom: none; + background: rgba(255, 255, 255, 0.2); + margin-left: 1.7%; + border-radius: 10px; +} +</style> diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/TestFrameWarehouse.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/TestFrameWarehouse.vue" index e6514a3..ffa70bb 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/TestFrameWarehouse.vue" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/TestFrameWarehouse.vue" @@ -1,45 +1,394 @@ <template> - <div class="message-container"> - <div class="item" v-for="(item, index) in list" :key="index"> - <div class="title">{{ item.title }}({{ item.date }})</div> - <div class="content">{{ item.message }}</div> + <div id="title"> + <div id="bkuang" style="border-top: none"> + <!-- CSJ浠撳爢鍨涙満鐘舵�侀潰鏉� --> + <div class="skuang"> + <div class="csjuname">娴嬭瘯鏋朵粨鍫嗗灈鏈�</div> + <div class="csjankuang"> + <div class="xname">鍫嗗灈鏈虹姸鎬�:</div> + <div class="xcsji" :title="csjData.R_CSJ_Status">{{ csjData.R_CSJ_Status || '-' }}</div> + </div> + <div class="csjankuang"> + <div class="xname">鍫嗗灈鏈烘墜鑷姩鐘舵��:</div> + <div class="xcsji" :title="csjData.R_CSJ_AutoStatus">{{ csjData.R_CSJ_AutoStatus || '-' }}</div> + </div> + <div class="csjankuang"> + <div class="xname">姝e湪鎵ц鐨勪换鍔″彿:</div> + <div class="xcsji" :title="csjData.R_CSJ_TaskNum">{{ csjData.R_CSJ_TaskNum || '-' }}</div> + </div> + <div class="csjankuang"> + <div class="xname">鍫嗗灈鏈哄伐浣滅姸鎬�:</div> + <div class="xcsji" :title="csjData.R_CSJ_WorkStatus">{{ csjData.R_CSJ_WorkStatus || '-' }}</div> + </div> + <div class="csjankuang"> + <div class="xname">浣滀笟绫诲瀷:</div> + <div class="xcsji" :title="csjData.R_CSJ_WorkType">{{ csjData.R_CSJ_WorkType || '-' }}</div> + </div> + <div class="csjankuang"> + <div class="xname">鎵樼洏绫诲瀷:</div> + <div class="xcsji" :title="csjData.R_CSJ_TrayType">{{ csjData.R_CSJ_TrayType || '-' }}</div> + </div> + </div> + + <!-- CSJ鍏宠仈绔欏彴锛堝嚭搴�303+鍑哄簱304锛� --> + <div class="skuang"> + <div class="csjuname">鍑哄簱103绔欏彴</div> + <div class="csjankuang"> + <div class="xname">鏄惁鍏佽鏀捐揣(璇�):</div> + <div class="xcsji" :title="csjData.R_CSJ_IsCanPut3">{{ csjData.R_CSJ_IsCanPut3 || '-' }}</div> + </div> + <div class="csjankuang"> + <div class="xname">鏄惁鍏佽鍙栬揣(璇�):</div> + <div class="xcsji" :title="csjData.R_CSJ_IsCanTake3">{{ csjData.R_CSJ_IsCanTake3 || '-' }}</div> + </div> + <div class="csjankuang"> + <div class="xname">鏀捐揣璇锋眰(鍐�):</div> + <div class="xcsji" :title="csjData.W_CSJ_PutRequest3">{{ csjData.W_CSJ_PutRequest3 || '-' }}</div> + </div> + <div class="csjankuang"> + <div class="xname">鏀捐揣瀹屾垚(鍐�):</div> + <div class="xcsji" :title="csjData.W_CSJ_PutFinish3">{{ csjData.W_CSJ_PutFinish3 || '-' }}</div> + </div> + <div class="csjankuang"> + <div class="xname">鍙栬揣璇锋眰(鍐�):</div> + <div class="xcsji" :title="csjData.W_CSJ_TakeRequest3">{{ csjData.W_CSJ_TakeRequest3 || '-' }}</div> + </div> + <div class="csjankuang"> + <div class="xname">鍙栬揣瀹屾垚(鍐�):</div> + <div class="xcsji" :title="csjData.W_CSJ_TakeFinish3">{{ csjData.W_CSJ_TakeFinish3 || '-' }}</div> + </div> + + <div class="csjuname">鍑哄簱104绔欏彴</div> + <div class="csjankuang"> + <div class="xname">鏄惁鍏佽鏀捐揣(璇�):</div> + <div class="xcsji" :title="csjData.R_CSJ_IsCanPut4">{{ csjData.R_CSJ_IsCanPut4 || '-' }}</div> + </div> + <div class="csjankuang"> + <div class="xname">鏄惁鍏佽鍙栬揣(璇�):</div> + <div class="xcsji" :title="csjData.R_CSJ_IsCanTake4">{{ csjData.R_CSJ_IsCanTake4 || '-' }}</div> + </div> + + <div class="csjankuang"> + <div class="xname">鏀捐揣璇锋眰(鍐�):</div> + <div class="xcsji" :title="csjData.W_CSJ_PutRequest4">{{ csjData.W_CSJ_PutRequest4 || '-' }}</div> + </div> + <div class="csjankuang"> + <div class="xname">鏀捐揣瀹屾垚(鍐�):</div> + <div class="xcsji" :title="csjData.W_CSJ_PutFinish4">{{ csjData.W_CSJ_PutFinish4 || '-' }}</div> + </div> + <div class="csjankuang"> + <div class="xname">鍙栬揣璇锋眰(鍐�):</div> + <div class="xcsji" :title="csjData.W_CSJ_TakeRequest4">{{ csjData.W_CSJ_TakeRequest4 || '-' }}</div> + </div> + <div class="csjankuang"> + <div class="xname">鍙栬揣瀹屾垚(鍐�):</div> + <div class="xcsji" :title="csjData.W_CSJ_TakeFinish4">{{ csjData.W_CSJ_TakeFinish4 || '-' }}</div> + </div> + </div> </div> </div> </template> <script> +import { ref, nextTick, watch, onUnmounted } from "vue"; +import { useStore } from "vuex"; +import { onMounted } from "vue"; + export default { - props: { - list: { - type: Array, - default: () => { - return []; - } - } + data() { + return { + xuan: 0 + }; }, - created() { - if (!this.list.length) { - this.list.push({ - title: '娑堟伅werwer娴嬭瘯鏍囬', - message: '娑堟伅娴嬭瘯鍐呭娑堟伅娴嬭瘯鍐呭娑堟伅娴嬭瘯鍐呭娑堟伅娴嬭瘯鍐呭', - date: '2022-05-02 03:10' + setup() { + const store = useStore(); + // 浠呭瓨鍌–SJ鏁版嵁锛屼笌鍏朵粬鏁版嵁闅旂 + const csjData = ref({}); + + // 寤惰繜鏇存柊閰嶇疆锛岃В鍐抽棯鐑侀棶棰� + const UPDATE_DELAY = 300; // 寤惰繜300ms鏇存柊UI + let updateTimer = null; // 瀹氭椂鍣ㄥ疄渚� + + // CSJ鏁版嵁鏄犲皠瑙勫垯 + const csjStatusMap = { + R_CSJ_Status: { + 1: "姝e父", + 2: "鏁呴殰", + 3: "鎬ュ仠", + }, + R_CSJ_AutoStatus: { + 0: "缁翠慨", + 1: "鎵嬪姩", + 2: "鍗婅嚜鍔�", + 3: "鑷姩", + }, + R_CSJ_WorkStatus: { + 0: "寰呮満", + 1: "鍙栬揣涓�", + 2: "鍙栬揣瀹屾垚", + 4: "鏀捐揣涓�", + 5: "鏀捐揣瀹屾垚", + 6: "浠诲姟瀹屾垚", + }, + R_CSJ_WorkType: { + 0: "鏃犱綔涓氫换鍔�(0)", + 1: "鍙栨斁璐т綔涓�(1)", + 2: "鍙彇璐т綔涓�(2)", + 3: "鍙斁璐т綔涓�(3)", + 4: "绉诲姩鍒版寚瀹氫綅缃�" + }, + R_CSJ_TrayType: { + "-1": "绌虹(-1)", + 1: "灏忔墭鐩�(1)", + 2: "涓墭鐩�(2)", + 3: "澶ф墭鐩�(3)", + 4: "鐗瑰ぇ鎵樼洏(4)", + } + }; + + // CSJ瀛楁鍒嗙粍 + const csjFieldGroups = { + permissionFields: { + keys: ["R_CSJ_IsCanPut1", "R_CSJ_IsCanTake1", "R_CSJ_IsCanPut2", "R_CSJ_IsCanTake2", + "R_CSJ_IsCanPut3", "R_CSJ_IsCanTake3", "R_CSJ_IsCanPut4", "R_CSJ_IsCanTake4"], + map: { true: "鏄�", false: "鍚�" } + }, + requestFields: { + keys: ["W_CSJ_PutRequest1", "W_CSJ_TakeRequest1", "W_CSJ_PutRequest2", "W_CSJ_TakeRequest2", + "W_CSJ_PutRequest3", "W_CSJ_TakeRequest3", "W_CSJ_PutRequest4", "W_CSJ_TakeRequest4"], + map: { true: "鏄�", false: "鍚�" } + }, + finishFields: { + keys: ["W_CSJ_PutFinish1", "W_CSJ_TakeFinish1", "W_CSJ_PutFinish2", "W_CSJ_TakeFinish2", + "W_CSJ_PutFinish3", "W_CSJ_TakeFinish3", "W_CSJ_PutFinish4", "W_CSJ_TakeFinish4"], + map: { true: "鏄�", false: "鍚�" } + }, + palletTypeFields: { + keys: ["R_CSJ_TakePalletType1", "R_CSJ_TakePalletType2", "R_CSJ_TakePalletType3", "R_CSJ_TakePalletType4", + "W_CSJ_PutPalletType1", "W_CSJ_PutPalletType2", "W_CSJ_PutPalletType3", "W_CSJ_PutPalletType4"], + map: { "-1": "绌虹(-1)", 1: "灏忔墭鐩�(1)", 2: "涓墭鐩�(2)", 3: "澶ф墭鐩�(3)", 4: "鐗瑰ぇ鎵樼洏(4)" } + } + }; + + // 澶勭悊CSJ鍘熷鏁版嵁 + const processCSJData = (rawData) => { + if (!rawData) return {}; + const processedData = { ...rawData }; + + // 澶勭悊鏍稿績鐘舵�佸瓧娈� + Object.keys(csjStatusMap).forEach(key => { + if (processedData.hasOwnProperty(key)) { + processedData[key] = csjStatusMap[key][processedData[key]] || processedData[key]; + } }); - } + + // 澶勭悊鍒嗙粍瀛楁 + Object.values(csjFieldGroups).forEach(group => { + group.keys.forEach(key => { + if (processedData.hasOwnProperty(key)) { + processedData[key] = group.map[processedData[key]] || processedData[key]; + } + }); + }); + + return processedData; + }; + + // 寤惰繜鏇存柊CSJ鏁版嵁锛岄伩鍏嶉珮棰戝埛鏂� + const delayedUpdateCSJData = (newRawData) => { + if (updateTimer) { + clearTimeout(updateTimer); + } + + updateTimer = setTimeout(() => { + // 鍙鐞嗗寘鍚獵SJ鐗瑰緛瀛楁鐨勬暟鎹� + if (newRawData && newRawData.R_CSJ_Status !== undefined) { + csjData.value = processCSJData(newRawData); + + // 鏇存柊鏍峰紡 + nextTick(() => { + const valueElements = document.getElementsByClassName("xcsji"); + for (let i = 0; i < valueElements.length; i++) { + if (valueElements[i].innerHTML === "鏄�") { + valueElements[i].style.color = "yellow"; + } else if (valueElements[i].innerHTML === "鍚�") { + valueElements[i].style.color = "red"; + } + } + }); + } + }, UPDATE_DELAY); + }; + + onMounted(() => { + // 鍒濆鍔犺浇鏁版嵁 + const initialData = store.state.homedata; + if (initialData && initialData.R_CSJ_Status !== undefined) { + csjData.value = processCSJData(initialData); + } + + // 鐩戝惉鏁版嵁鍙樺寲锛屽彧澶勭悊CSJ鏁版嵁 + const unwatch = watch( + () => store.state.homedata, + (newData) => { + if (newData && newData.R_CSJ_Status !== undefined) { + delayedUpdateCSJData(newData); + } + }, + { deep: true } + ); + + // 缁勪欢鍗歌浇鏃舵竻鐞� + onUnmounted(() => { + unwatch(); + if (updateTimer) { + clearTimeout(updateTimer); + } + }); + }); + + return { + csjData + }; } }; </script> -<style scoped lang="less"> -.message-container { - .title { - padding-bottom: 10px; - } - .item { - border-bottom: 1px solid #eee; - padding: 10px 20px; - } - .content { - color: #7e7e7e; - font-size: 13px; - } + +<style scoped> +.ding { + float: left; + width: 20px; + height: 20px; + margin-top: 7px; +} +.yan { + color: white; + float: left; + font-size: 25px; +} +.dakuang { + width: 250px; + height: 50px; + position: absolute; + top: 150px; + left: 200px; +} +#xiugai { + width: 100px; + height: 30px; + float: left; + border-radius: 5px; + text-align: center; + line-height: 30px; + cursor: pointer; + border: 1px solid white; + color: white; + background: rgba(255, 255, 255, 0.5); + font-size: 25px; + position: absolute; + top: 150px; + left: 450px; +} +#xiugai:hover { + background: #f60; +} +#shu1, +#shu2 { + width: 200px; + height: 30px; + float: left; + margin-top: 0px; + margin-right: 0px; + border-radius: 5px; + border: 1px solid white; +} +#guan { + width: 40px; + height: 40px; + float: left; + font-size: 1.1cqw; + text-align: center; + line-height: 40px; + cursor: pointer; + margin-left: 560px; + color: white; + position: absolute; +} +#ti { + width: 600px; + height: 300px; + position: relative; + background: rgba(255, 255, 255, 1); + border-radius: 10px; + top: 230px; + left: 35%; + display: none; + background-image: url("../../img/1.png"); + background-repeat: no-repeat; + background-size: 170%; + background-position: -220px 0px; +} +.csjuname { + width: 100%; + height: 5vh; + float: left; + text-align: center; + line-height: 50px; + font-weight: 700; + font-size: 1.1cqw; + color: white; +} +.xname { + width: 70%; + height: 80px; + float: left; + line-height: 7vh; + font-size: 1.1cqw; + color: white; +} +.xcsji { + width: 30%; + height: 7vh; + float: left; + line-height: 50px; + font-size: 1.1cqw; + color: rgb(242, 242, 50); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.csjankuang { + width: 45%; + height: 3vh; + margin-top: 10px; + margin-left: 5%; + float: left; +} +#title { + float: left; + width: 95%; + height: 88vh; + margin-top: 40px; + margin-left: 3%; + background-image: url("../../img/1.png"); + background-repeat: no-repeat; + background-size: 100%; + container-type: inline-size; +} +#bkuang { + width: 100%; + height: 55vh; + float: left; +} +.skuang { + width: 31%; + height: 55vh; + float: left; + border-top: none; + border-left: none; + border-bottom: none; + background: rgba(255, 255, 255, 0.2); + margin-left: 1.7%; + border-radius: 10px; } </style> diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs" index e90eadd..4c25144 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs" @@ -290,5 +290,11 @@ /// <param name="taskNum"></param> /// <returns></returns> public WebResponseContent RecWMSTaskCompleted(int taskNum); + /// <summary> + /// 鎺ユ敹wcs浠诲姟鍙栨秷 + /// </summary> + /// <param name="taskNum"></param> + /// <returns></returns> + public WebResponseContent RecWMSTaskHandCancel(int taskNum); } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs" index 4e0d43d..d5a346d 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs" @@ -121,7 +121,7 @@ { return WebResponseContent.Instance.Error("鏈壘鍒拌浠诲姟淇℃伅"); } - if(task.TaskState == TaskStatusEnum.SC_Executing.ObjToInt()) + if (task.TaskState == TaskStatusEnum.SC_Executing.ObjToInt() || (task.DeviceCode.Contains("SC01")&& task.TaskState == TaskStatusEnum.Pending.ObjToInt())) { _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute); } @@ -164,5 +164,11 @@ return WebResponseContent.Instance.Error(ex.Message); } } + + [HttpPost, HttpGet, Route("RecWMSTaskHandCancel"), AllowAnonymous] + public WebResponseContent RecWMSTaskHandCancel(int taskNum) + { + return Service.RecWMSTaskHandCancel(taskNum); + } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" index 575691f..2422365 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" @@ -1010,5 +1010,28 @@ return WebResponseContent.Instance.Error(ex.Message); } } + + /// <summary> + /// 鎺ュ彈WMS鎵嬪姩鍙栨秷浠诲姟 + /// </summary> + /// <param name="taskNum"></param> + /// <returns></returns> + public WebResponseContent RecWMSTaskHandCancel(int taskNum) + { + try + { + Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); + if (task != null) + { + task.TaskState = TaskStatusEnum.Cancel.ObjToInt(); + BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.浜哄伐鍒犻櫎); + } + return WebResponseContent.Instance.OK(); + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } + } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/BCReadData.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/BCReadData.cs" new file mode 100644 index 0000000..aed91ab --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/BCReadData.cs" @@ -0,0 +1,41 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WIDESEAWCS_Tasks.鏉挎潗浠� +{ + public class BCReadData + { + /// <summary> + /// 鍫嗗灈鏈虹姸鎬� + /// </summary> + public short R_BC_Status; + + /// <summary> + /// 鍫嗗灈鏈烘墜鑷姩鐘舵�� + /// </summary> + public short R_BC_AutoStatus; + + /// <summary> + /// 褰撳墠姝e湪鎵ц鐨勪换鍔″彿 + /// </summary> + public int R_BC_TaskNum; + + /// <summary> + /// 鍫嗗灈鏈哄伐浣滅姸鎬� + /// </summary> + public short R_BC_WorkStatus; + + /// <summary> + /// 浣滀笟绫诲瀷 + /// </summary> + public short R_BC_WorkType; + + /// <summary> + /// 鎵樼洏绫诲瀷 + /// </summary> + public short R_BC_TrayType; + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs" index 5574504..6e7ce35 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs" @@ -31,6 +31,9 @@ using Autofac.Core; using WIDESEAWCS_DTO.TaskInfo; using AutoMapper; +using WIDESEAWCS_Tasks.鏉挎潗浠�; +using HslCommunication.WebSocket; +using WIDESEAWCS_Tasks.娴嬭瘯鏋朵粨; namespace WIDESEAWCS_Tasks { @@ -45,10 +48,12 @@ private readonly IRouterService _routerService; private readonly IStationMangerRepository _stationMangerRepository; private readonly IRouterRepository _routerRepository; + public static BCReadData bCReadData = new BCReadData(); private List<Dt_ApiInfo> apiInfos; private readonly List<Dt_WarehouseDevice> warehouseDevices; + private WebSocketServer _webSocketServer; - public StackerCraneJob_BC(IMapper mapper, ITaskService taskService, ICacheService cacheService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository) + public StackerCraneJob_BC(IMapper mapper, ITaskService taskService, ICacheService cacheService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository,WebSocketServer webSocketServer) { _mapper = mapper; _taskService = taskService; @@ -58,6 +63,7 @@ _stationMangerRepository = stationMangerRepository; _cacheService = cacheService; _routerRepository = routerRepository; + _webSocketServer = webSocketServer; string? apiInfoStr = _cacheService.Get("apiInfos"); if (!string.IsNullOrEmpty(apiInfoStr)) @@ -127,6 +133,14 @@ } } } + bCReadData.R_BC_Status = ((short)commonStackerCrane.StackerCraneStatusValue); + bCReadData.R_BC_AutoStatus = ((short)commonStackerCrane.StackerCraneAutoStatusValue); + bCReadData.R_BC_WorkStatus = ((short)commonStackerCrane.StackerCraneWorkStatusValue); + bCReadData.R_BC_TaskNum = commonStackerCrane.CurrentTaskNum.ObjToInt(); + bCReadData.R_BC_WorkType = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType); + bCReadData.R_BC_TrayType = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.TrayType); + string bCData = JsonConvert.SerializeObject(bCReadData); + _webSocketServer.PublishAllClientPayload(bCData); } } catch (Exception ex) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/CSJReadData.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/CSJReadData.cs" new file mode 100644 index 0000000..756296d --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/CSJReadData.cs" @@ -0,0 +1,108 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WIDESEAWCS_Tasks.娴嬭瘯鏋朵粨 +{ + public class CSJReadData + { + /// <summary> + /// 鍫嗗灈鏈虹姸鎬� + /// </summary> + public short R_CSJ_Status; + + /// <summary> + /// 鍫嗗灈鏈烘墜鑷姩鐘舵�� + /// </summary> + public short R_CSJ_AutoStatus; + + /// <summary> + /// 褰撳墠姝e湪鎵ц鐨勪换鍔″彿 + /// </summary> + public int R_CSJ_TaskNum; + + /// <summary> + /// 鍫嗗灈鏈哄伐浣滅姸鎬� + /// </summary> + public short R_CSJ_WorkStatus; + + /// <summary> + /// 浣滀笟绫诲瀷 + /// </summary> + public short R_CSJ_WorkType; + + /// <summary> + /// 鎵樼洏绫诲瀷 + /// </summary> + public short R_CSJ_TrayType; + + + ///鍚勭珯鍙拌鍙�103 + + ///鍙栬揣鎵樼洏绫诲瀷(璇�) + public short R_CSJ_TakePalletType3; + /// <summary> + /// 鏀捐揣鎵樼洏绫诲瀷(鍐�) + /// </summary> + public short W_CSJ_PutPalletType3; + /// <summary> + /// 鏄惁鍏佽鏀捐揣(璇�) + /// </summary> + public bool R_CSJ_IsCanPut3; + /// <summary> + /// 鏄惁鍏佽鍙栬揣(璇�) + /// </summary> + public bool R_CSJ_IsCanTake3; + /// <summary> + /// 鏀捐揣璇锋眰(鍐�) + /// </summary> + public bool W_CSJ_PutRequest3; + /// <summary> + /// 鏀捐揣瀹屾垚(鍐�) + /// </summary> + public bool W_CSJ_PutFinish3; + /// <summary> + /// 鍙栬揣璇锋眰(鍐�) + /// </summary> + public bool W_CSJ_TakeRequest3; + /// <summary> + /// 鍙栬揣瀹屾垚(鍐�) + /// </summary> + public bool W_CSJ_TakeFinish3; + + ///鍚勭珯鍙拌鍙�104 + + ///鍙栬揣鎵樼洏绫诲瀷(璇�) + public short R_CSJ_TakePalletType4; + /// <summary> + /// 鏀捐揣鎵樼洏绫诲瀷(鍐�) + /// </summary> + public short W_CSJ_PutPalletType4; + /// <summary> + /// 鏄惁鍏佽鏀捐揣(璇�) + /// </summary> + public bool R_CSJ_IsCanPut4; + /// <summary> + /// 鏄惁鍏佽鍙栬揣(璇�) + /// </summary> + public bool R_CSJ_IsCanTake4; + /// <summary> + /// 鏀捐揣璇锋眰(鍐�) + /// </summary> + public bool W_CSJ_PutRequest4; + /// <summary> + /// 鏀捐揣瀹屾垚(鍐�) + /// </summary> + public bool W_CSJ_PutFinish4; + /// <summary> + /// 鍙栬揣璇锋眰(鍐�) + /// </summary> + public bool W_CSJ_TakeRequest4; + /// <summary> + /// 鍙栬揣瀹屾垚(鍐�) + /// </summary> + public bool W_CSJ_TakeFinish4; + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/GroundStationJob_CSJ.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/GroundStationJob_CSJ.cs" index d2ae90d..d72b0aa 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/GroundStationJob_CSJ.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/GroundStationJob_CSJ.cs" @@ -89,6 +89,24 @@ _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, currentAddress: stationManger.StackerCraneStationCode, targetAddress: locationCode, nextAddress: locationCode, deviceCode: stationManger.StackerCraneCode); } } + if (item.StationCode == "103") + { + StackerCraneJob_CSJ.cSJReadData.R_CSJ_IsCanPut3 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanPut, item.StationCode); + StackerCraneJob_CSJ.cSJReadData.R_CSJ_IsCanTake3 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanTake, item.StationCode); + StackerCraneJob_CSJ.cSJReadData.W_CSJ_PutRequest3 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_PutRequest, item.StationCode); + StackerCraneJob_CSJ.cSJReadData.W_CSJ_PutFinish3 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_PutFinish, item.StationCode); + StackerCraneJob_CSJ.cSJReadData.W_CSJ_TakeRequest3 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_TakeRequest, item.StationCode); + StackerCraneJob_CSJ.cSJReadData.W_CSJ_TakeFinish3 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_TakeFinish, item.StationCode); + } + else if (item.StationCode == "104") + { + StackerCraneJob_CSJ.cSJReadData.R_CSJ_IsCanPut4 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanPut, item.StationCode); + StackerCraneJob_CSJ.cSJReadData.R_CSJ_IsCanTake4 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanTake, item.StationCode); + StackerCraneJob_CSJ.cSJReadData.W_CSJ_PutRequest4 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_PutRequest, item.StationCode); + StackerCraneJob_CSJ.cSJReadData.W_CSJ_PutFinish4 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_PutFinish, item.StationCode); + StackerCraneJob_CSJ.cSJReadData.W_CSJ_TakeRequest4 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_TakeRequest, item.StationCode); + StackerCraneJob_CSJ.cSJReadData.W_CSJ_TakeFinish4 = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_TakeFinish, item.StationCode); + } } catch (Exception ex) { diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/StackerCraneJob_CSJ.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/StackerCraneJob_CSJ.cs" index 1672eaf..b12e821 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/StackerCraneJob_CSJ.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/StackerCraneJob_CSJ.cs" @@ -1,4 +1,5 @@ 锘縰sing AutoMapper; +using HslCommunication.WebSocket; using Microsoft.AspNetCore.Components.Routing; using Newtonsoft.Json; using Quartz; @@ -27,6 +28,7 @@ using WIDESEAWCS_QuartzJob.StackerCrane.Enum; using WIDESEAWCS_Tasks.HoisterJob; using WIDESEAWCS_Tasks.StackerCraneJob; +using WIDESEAWCS_Tasks.娴嬭瘯鏋朵粨; namespace WIDESEAWCS_Tasks { @@ -36,13 +38,15 @@ private readonly IMapper _mapper; private readonly ICacheService _cacheService; private readonly ITaskService _taskService; + public static CSJReadData cSJReadData = new CSJReadData(); private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly ITaskRepository _taskRepository; private readonly IRouterService _routerService; private readonly IStationMangerRepository _stationMangerRepository; + private WebSocketServer _webSocketServer; private List<Dt_ApiInfo> apiInfos; - public StackerCraneJob_CSJ(ITaskService taskService, ICacheService cacheService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository, IMapper mapper) + public StackerCraneJob_CSJ(ITaskService taskService, ICacheService cacheService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository, IMapper mapper, WebSocketServer webSocketServer) { _taskService = taskService; _taskExecuteDetailService = taskExecuteDetailService; @@ -51,6 +55,7 @@ _stationMangerRepository = stationMangerRepository; _cacheService = cacheService; _mapper = mapper; + _webSocketServer = webSocketServer; string? apiInfoStr = _cacheService.Get("apiInfos"); if (!string.IsNullOrEmpty(apiInfoStr)) @@ -101,6 +106,14 @@ } } } + cSJReadData.R_CSJ_Status = ((short)commonStackerCrane.StackerCraneStatusValue); + cSJReadData.R_CSJ_AutoStatus = ((short)commonStackerCrane.StackerCraneAutoStatusValue); + cSJReadData.R_CSJ_WorkStatus = ((short)commonStackerCrane.StackerCraneWorkStatusValue); + cSJReadData.R_CSJ_TaskNum = commonStackerCrane.CurrentTaskNum.ObjToInt(); + cSJReadData.R_CSJ_WorkType = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType); + cSJReadData.R_CSJ_TrayType = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.TrayType); + string cSJData = JsonConvert.SerializeObject(cSJReadData); + _webSocketServer.PublishAllClientPayload(cSJData); } } catch (Exception ex) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail.js" index 24e1d94..79d0141 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail.js" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/outboundOrderDetail.js" @@ -45,12 +45,20 @@ this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�; }, modelOpenAfter(row) { - //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁 - //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add'; - //(2)缁欏脊鍑烘璁剧疆榛樿鍊� - //(3)this.editFormFields.瀛楁='xxx'; - //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊� - //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions) + // 鐐瑰嚮缂栬緫鎸夐挳寮瑰嚭妗嗗悗鎵ц + if (this.currentAction === 'Edit') { // 鍒ゆ柇褰撳墠鏄紪杈戞搷浣� + // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛锛堝亣璁句粠鍏ㄥ眬鍙橀噺鑾峰彇锛屽叿浣撴牴鎹綘鐨勯」鐩疄鐜帮級 + const currentUser = this.$store.state.userInfo?.username || '琚汉宸ヤ慨鏀�'; + + // 鑾峰彇褰撳墠鏃堕棿骞舵牸寮忓寲涓哄悗绔渶瑕佺殑鏍煎紡 + const now = new Date(); + const formattedDate = now.toISOString().slice(0, 19).replace('T', ' '); + + // 璁剧疆淇敼浜哄瓧娈� + this.editFormFields.modifier = currentUser; + // 璁剧疆淇敼鏃堕棿瀛楁 + this.editFormFields.modifyDate = formattedDate; + } } } }; diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.js" index 6292426..99ff80d 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.js" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.js" @@ -46,12 +46,20 @@ this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�; }, modelOpenAfter(row) { - //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁 - //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add'; - //(2)缁欏脊鍑烘璁剧疆榛樿鍊� - //(3)this.editFormFields.瀛楁='xxx'; - //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊� - //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions) + // 鐐瑰嚮缂栬緫鎸夐挳寮瑰嚭妗嗗悗鎵ц + if (this.currentAction === 'Edit') { // 鍒ゆ柇褰撳墠鏄紪杈戞搷浣� + // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛锛堝亣璁句粠鍏ㄥ眬鍙橀噺鑾峰彇锛屽叿浣撴牴鎹綘鐨勯」鐩疄鐜帮級 + const currentUser = this.$store.state.userInfo?.username || 'system'; + + // 鑾峰彇褰撳墠鏃堕棿骞舵牸寮忓寲涓哄悗绔渶瑕佺殑鏍煎紡 + const now = new Date(); + const formattedDate = now.toISOString().slice(0, 19).replace('T', ' '); + + // 璁剧疆淇敼浜哄瓧娈� + this.editFormFields.modifier = currentUser; + // 璁剧疆淇敼鏃堕棿瀛楁 + this.editFormFields.modifyDate = formattedDate; + } } } }; diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfoDetail.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfoDetail.js" index 24e1d94..43dce0e 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfoDetail.js" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfoDetail.js" @@ -45,12 +45,20 @@ this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�; }, modelOpenAfter(row) { - //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁 - //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add'; - //(2)缁欏脊鍑烘璁剧疆榛樿鍊� - //(3)this.editFormFields.瀛楁='xxx'; - //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊� - //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions) + // 鐐瑰嚮缂栬緫鎸夐挳寮瑰嚭妗嗗悗鎵ц + if (this.currentAction === 'Edit') { // 鍒ゆ柇褰撳墠鏄紪杈戞搷浣� + // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛锛堝亣璁句粠鍏ㄥ眬鍙橀噺鑾峰彇锛屽叿浣撴牴鎹綘鐨勯」鐩疄鐜帮級 + const currentUser = this.$store.state.userInfo?.username || 'system'; + + // 鑾峰彇褰撳墠鏃堕棿骞舵牸寮忓寲涓哄悗绔渶瑕佺殑鏍煎紡 + const now = new Date(); + const formattedDate = now.toISOString().slice(0, 19).replace('T', ' '); + + // 璁剧疆淇敼浜哄瓧娈� + this.editFormFields.modifier = currentUser; + // 璁剧疆淇敼鏃堕棿瀛楁 + this.editFormFields.modifyDate = formattedDate; + } } } }; diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/taskinfo/task.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/taskinfo/task.js" index 451917f..924e36f 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/taskinfo/task.js" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/taskinfo/task.js" @@ -32,7 +32,7 @@ var param = rows[0].taskNum; var warehouseId = rows[0].warehouseId; this.http - .post("api/Task/TaskHandCancel?taskNum="+param+"&&warehouseId="+warehouseId, "鏁版嵁澶勭悊涓�...") + .post("api/Task/TaskHandCancel?taskNum="+param, "鏁版嵁澶勭悊涓�...") .then((x) => { if (x.status) { this.$Message.success('浠诲姟鍙栨秷鎴愬姛.'); diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue" index 87db604..faba829 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue" @@ -115,6 +115,7 @@ require: true, align: "left", }, + { field: "inboundOrderNo", title: "鍗曟嵁缂栧彿", @@ -154,6 +155,7 @@ align: "left", bind: { key: "inboundState", data: [] }, }, + { field: "createType", title: "鍒涘缓鏂瑰紡", @@ -163,6 +165,13 @@ bind: { key: "createType", data: [] }, }, { + field: "id", + title: "鍏ュ簱鍗曚富閿�", + type: "int", + width: 90, + align: "left", + }, + { field: "creater", title: "鍒涘缓浜�", type: "string", diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail.vue" index 5046820..ad1446e 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail.vue" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrderDetail.vue" @@ -90,11 +90,20 @@ deviceStatus: "", }); const searchFormOptions = ref([ - [ - { title: "璁惧缂栧彿", field: "deviceCode" }, - { title: "璁惧绫诲瀷", field: "deviceType" }, - { title: "璁惧鐘舵��", field: "deviceStatus" }, - ], + [ + { title: "鐗╂枡缂栧彿", field: "materielCode", type: "like" }, + { title: "鐗╂枡鍚嶇О", field: "materielName", type: "like" }, + { title: "鍏ュ簱鍗曚富閿�", field: "orderId", type: "int" }, + { title: "鎵规鍙�", field: "batchNo", type: "like" }, + ], + [ + { + field: "orderDetailStatus",title: "璁㈠崟鏄庣粏鐘舵��",type: "select",dataKey:"orderDetailStatusEnum", data: [] + }, + { title: "鍒涘缓鑰�", field: "creater", type: "like" }, + { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" }, + ], + ]); const columns = ref([ { @@ -162,6 +171,7 @@ type: "string", width: 180, align: "left", + bind: { key: "orderDetailStatusEnum", data: [] }, }, { field: "creater", diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue" index 2a93044..bbfcc76 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue" @@ -181,6 +181,13 @@ bind: { key: "createType", data: [] }, }, { + field: "id", + title: "鍑哄簱鍗曚富閿�", + type: "string", + width: 90, + align: "left", + }, + { field: "departmentCode", title: "淇敼鏃堕棿", type: "string", diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue" index e992c4c..a6540fa 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrderDetail.vue" @@ -38,51 +38,91 @@ }); const editFormOptions = ref([ [ - { - title: "璁惧缂栧彿", - required: true, - field: "deviceCode", - type: "string", - }, - { - title: "璁惧鍚嶇О", - required: true, - field: "deviceName", - type: "string", - }, - { - title: "璁惧绫诲瀷", - required: true, - field: "deviceType", - type: "string", - }, - { - title: "璁惧鐘舵��", - required: true, - field: "deviceStatus", - type: "string", - }, - ], - [ - { title: "璁惧IP", required: true, field: "deviceIp", type: "string" }, - { - title: "璁惧绔彛", - required: true, - field: "devicePort", - type: "string", - }, - { - title: "PLC绫诲瀷", - required: true, - field: "devicePlcType", - type: "string", - }, - { - title: "澶囨敞", - field: "deviceRemark", - type: "string", - }, - ], + { + title: "搴撳瓨涓婚敭", + readonly:true, + field: "orderId", + type: "string", + }, + + { + title: "鐗╂枡缂栧彿", + required: true, + field: "materielCode", + type: "string", + readonly: true, + }, + { + title: "鐗╂枡鍚嶇О", + required: true, + field: "materielName", + type: "string", + }, + { + title: "琛屽彿", + readonly: true, + field: "rowNo", + type: "string", + }, + + ], + [ + { + title: "鎵规鍙�", + field: "batchNo", + type: "string", + }, + { + field: "orderQuantity", + title: "鍗曟嵁鏁伴噺", + type: "string", + width: 90, + align: "left", + readonly: true, + }, + { + field: "lockQuantity", + title: "閿佸畾鏁伴噺", + type: "int", + width: 120, + align: "left", + readonly: true, + }, + { + field: "overOutQuantity", + title: "宸插嚭鏁伴噺", + type: "string", + width: 200, + align: "left", + readonly: true, + }, + + ], + [ + { + field: "orderDetailStatus", + title: "璁㈠崟鏄庣粏鐘舵��", + type: "select",dataKey:"orderDetailStatusEnum", + data: [], + readonly: true, + }, + { + field: "modifier", + title: "淇敼浜�", + type: "string", + width: 100, + align: "left", + readonly:true, + }, + { + field: "modifyDate", + title: "淇敼鏃堕棿", + type: "datetime", + width: 160, + align: "left", + readonly:true, + }, + ], ]); const searchFormFields = ref({ deviceCode: "", @@ -91,10 +131,18 @@ }); const searchFormOptions = ref([ [ - { title: "璁惧缂栧彿", field: "deviceCode" }, - { title: "璁惧绫诲瀷", field: "deviceType" }, - { title: "璁惧鐘舵��", field: "deviceStatus" }, - ], + { title: "鐗╂枡缂栧彿", field: "materielCode", type: "like" }, + { title: "鐗╂枡鍚嶇О", field: "materielName", type: "like" }, + { title: "鍑哄簱鍗曚富閿�", field: "orderId", type: "int" }, + { title: "鎵规鍙�", field: "batchNo", type: "like" }, + ], + [ + { + field: "orderDetailStatus",title: "璁㈠崟鏄庣粏鐘舵��",type: "select",dataKey:"orderDetailStatusEnum", data: [] + }, + { title: "鍒涘缓鑰�", field: "creater", type: "like" }, + { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" }, + ], ]); const columns = ref([ { @@ -112,7 +160,6 @@ type: "string", width: 90, align: "left", - hidden: true, }, { field: "materielCode", @@ -162,6 +209,7 @@ type: "string", width: 180, align: "left", + bind: { key: "orderDetailStatusEnum", data: [] }, }, { field: "creater", diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfo.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfo.vue" index 22f2eea..f4d0f57 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfo.vue" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfo.vue" @@ -38,8 +38,27 @@ }); const editFormOptions = ref([ [ - {field:'palletCode',title:'鎵樼洏缂栧彿',type:'string'}, - {field:'locationCode',title:'璐т綅缂栧彿',type:'string'}, + { title: "鎵樼洏缂栧彿", field: "palletCode", type :"string"}, + { title: "璐т綅缂栧彿", field: "locationCode",type:"string",readonly: true, }, + { title: "鎵�灞炰粨搴�", field: "warehouseId",type: "select",dataKey: "warehouses",data: [],readonly: true,}, + {title: "搴撳瓨鏄庣粏鐘舵��",field: "stockStatus",type: "select",dataKey:"stockStatusEmun", data: [],readonly: true,}, + + ], + [ + { title: "鎵樼洏绫诲瀷", field: "palletType", type :"select",dataKey:"locationTypeEnum",data:[]}, + { + field: "modifier", + title: "淇敼浜�", + type: "string", + readonly: true, + }, + { + field: "modifyDate", + title: "淇敼鏃堕棿", + type: "datetime", + readonly: true, + }, + ] ]); const searchFormFields = ref({ @@ -48,8 +67,10 @@ }); const searchFormOptions = ref([ [ - { title: "鎵樼洏缂栧彿", field: "palletCode" }, - { title: "璐т綅缂栧彿", field: "locationCode" }, + { title: "鎵樼洏缂栧彿", field: "palletCode", type :"like"}, + { title: "璐т綅缂栧彿", field: "locationCode",type:"like" }, + { title: "鎵�灞炰粨搴�", field: "warehouseId",type: "select",dataKey: "warehouses",data: [],}, + {title: "搴撳瓨鏄庣粏鐘舵��",field: "status",type: "select",dataKey:"stockStatusEmun", data: []}, ], ]); const columns = ref([ @@ -64,6 +85,13 @@ align: "left", }, { + field: "id", + title: "搴撳瓨涓婚敭", + type: "string", + width: 90, + align: "left", + }, + { field: "palletCode", title: "鎵樼洏缂栧彿", type: "string", @@ -71,12 +99,28 @@ align: "left", }, { + field: "palletType", + title: "鎵樼洏绫诲瀷", + type: "select", + width: 120, + align: "left", + bind: { key: "locationTypeEnum", data: [] }, + }, + { field: "locationCode", title: "璐т綅缂栧彿", type: "string", width: 150, align: "left", }, + { + field: "stockStatus", + title: "搴撳瓨鏄庣粏鐘舵��", + type: "string", + width: 120, + align: "left", + bind: { key: "stockStatusEmun", data: [] }, + }, // { // field: "isFull", // title: "鏄惁婊$洏", @@ -113,7 +157,6 @@ type: "string", width: 100, align: "left", - hidden:true }, { field: "modifyDate", @@ -121,7 +164,6 @@ type: "datetime", width: 160, align: "left", - hidden:true }, { field: "remark", diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue" index e601c24..3d264d4 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue" @@ -91,9 +91,9 @@ }, { title: "鍑哄簱鏁伴噺", - required: true, field: "outboundQuantity", type: "string", + readonly:true }, { title: "搴撳瓨鏄庣粏鐘舵��", @@ -107,6 +107,22 @@ field: "inboundOrderRowNo", type: "string", }, + { + field: "modifier", + title: "淇敼浜�", + type: "string", + width: 100, + align: "left", + hidden:true + }, + { + field: "modifyDate", + title: "淇敼鏃堕棿", + type: "datetime", + width: 160, + align: "left", + hidden:true + }, ], ]); diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs" index d32e6fa..3a3404c 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs" @@ -82,5 +82,11 @@ /// </summary> [Description("QMS鏉ユ枡妫�楠屾帴鍙�")] WMS_QMSReceiveCheckApi, + + /// <summary> + /// 鍥炶皟WCS浠诲姟瀹屾垚 + /// </summary> + [Description("鍥炶皟WCS浠诲姟鍙栨秷")] + FeedBackWCSTaskHandCancel, } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs" index 02de6cb..c52acc1 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs" @@ -397,6 +397,6 @@ /// <param name="taskNum"></param> /// <param name="warehouseId"></param> /// <returns></returns> - public Task<WebResponseContent> TaskHandCancel(int taskNum, int warehouseId); + public Task<WebResponseContent> TaskHandCancel(int taskNum); } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs" index ac08ba2..fc6cb0c 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs" @@ -414,7 +414,7 @@ var requestBody = new { msgtype = "text", - text = new { content = "灏忔磱涓讳汉璇�: 灏忔磱瑕佸拰灏忓澶╀笅绗竴鏈�鏈�濂�" }, + text = new { content = "閽夐拤娑堟伅鎺ㄩ��" }, }; var jsonBody = JsonConvert.SerializeObject(requestBody); var content = new StringContent(jsonBody, Encoding.UTF8, "application/json"); diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" index 8b82537..5677732 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" @@ -243,6 +243,7 @@ if (task.TaskType == TaskTypeEnum.MesPalletLargeReturn.ObjToInt() || task.TaskType == TaskTypeEnum.MesPalletSmallReturn.ObjToInt()) { task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); + FeedBackWCSTaskCompleted(taskNum); _unitOfWorkManage.BeginTran(); BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐瀹屾垚 : OperateTypeEnum.鑷姩瀹屾垚); _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚); @@ -271,6 +272,7 @@ { stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); + FeedBackWCSTaskCompleted(taskNum); stockInfo.Details.ForEach(x => { x.Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); @@ -1156,7 +1158,7 @@ return content; } - public WebResponseContent InboundTaskHandCancel(int taskNum, int warehouseId) + public WebResponseContent InboundTaskHandCancel(int taskNum) { try { @@ -1165,10 +1167,70 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅"); } + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId); + if (warehouse.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString()) + { + if(task.TaskType == TaskTypeEnum.EmptyProductBack.ObjToInt()) + { + task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt(); + FeedBackWCSTaskHandCancel(taskNum); + _unitOfWorkManage.BeginTran(); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎); + _unitOfWorkManage.CommitTran(); + return WebResponseContent.Instance.OK(); + } + Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.proStockInfoDetails).First(); + if (proStockInfo == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒拌兌妗嗕负{task.PalletCode}缁勭洏淇℃伅"); + } + Dt_LocationInfo prolocationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress); + if (prolocationInfo != null) + { + if (prolocationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt()) + { + return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘"); + } + prolocationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); + } + if(task.TaskType == TaskTypeEnum.InProduct.ObjToInt()) + { + task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt(); + _unitOfWorkManage.BeginTran(); + FeedBackWCSTaskHandCancel(taskNum); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎); + _stockService.ProStockInfoService.Repository.DeleteAndMoveIntoHty(proStockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎); + _stockService.ProStockInfoDetailService.Repository.DeleteAndMoveIntoHty(proStockInfo.proStockInfoDetails, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎); + _basicService.LocationInfoService.UpdateLocationStatus(prolocationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId); + _unitOfWorkManage.CommitTran(); + return WebResponseContent.Instance.OK(); + } + else + { + proStockInfo.StockStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt(); + proStockInfo.proStockInfoDetails.ForEach(x => + { + x.ProOutDetailStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt(); + }); + task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt(); + _unitOfWorkManage.BeginTran(); + FeedBackWCSTaskHandCancel(taskNum); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎); + _stockService.ProStockInfoService.Repository.UpdateData(proStockInfo); + _stockService.ProStockInfoDetailService.Repository.UpdateData(proStockInfo.proStockInfoDetails); + _basicService.LocationInfoService.UpdateLocationStatus(prolocationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId); + _unitOfWorkManage.CommitTran(); + return WebResponseContent.Instance.OK(); + } + } Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).Includes(x => x.Details).First(); if (stockInfo == null) { return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺搴旂殑缁勭洏淇℃伅"); + } + if (!string.IsNullOrEmpty(stockInfo.LocationCode)) + { + return WebResponseContent.Instance.Error($"璇ユ墭鐩樺凡缁戝畾璐т綅"); } if (stockInfo.Details.Count == 0 && stockInfo.PalletType != PalletTypeEnum.Empty.ObjToInt()) { @@ -1178,6 +1240,7 @@ { task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt(); _unitOfWorkManage.BeginTran(); + FeedBackWCSTaskHandCancel(taskNum); BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎); _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎); _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎); @@ -1191,17 +1254,190 @@ { return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘"); } - - LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus; - locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); + locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); } + Dt_InboundOrder? inboundOrder = _inboundRepository.InboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == stockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First(); + Dt_InboundOrderDetail? inboundOrderDetail = null; + Dt_ReturnOrder? returnOrder = null; + //鏍囧噯鍏ュ簱娴佺▼鏌ユ壘鍏ュ簱鍗曟嵁 + if (inboundOrder != null && stockInfo.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()&&(task.WarehouseId == WarehouseEnum.HA152.ObjToInt()|| task.WarehouseId == WarehouseEnum.HA58.ObjToInt())) + { + inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.RowNo == stockInfo.Details.FirstOrDefault()?.InboundOrderRowNo); + foreach (var item in stockInfo.Details) + { + if (inboundOrderDetail == null) + { + continue; + } + inboundOrderDetail.ReceiptQuantity -= item.StockQuantity; + } + //鍒ゆ柇鏄惁涓洪��鏂欏叆搴撳崟 + if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt()) + { + returnOrder = _inboundRepository.ReturnOrderRepository.Db.Queryable<Dt_ReturnOrder>().Where(x => x.OrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First(); + returnOrder.ReturnOrderStatus = ReturnOrderStatusEnum.Returned.ObjToInt(); + foreach (var item in inboundOrder.Details) + { + Dt_ReturnOrderDetail returnOrderDetail = returnOrder.Details?.FirstOrDefault(x => x.MCode == item.MaterielCode); + if (returnOrderDetail != null) + { + returnOrderDetail.ReturnQty -= item.ReceiptQuantity; + } + } + } + } + if(task.WarehouseId == WarehouseEnum.HA154.ObjToInt()|| task.WarehouseId == WarehouseEnum.HA152.ObjToInt() || task.WarehouseId == WarehouseEnum.HA58.ObjToInt()) + { + _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎); + _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎); + }else + { + stockInfo.StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(); + } + + task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt(); + FeedBackWCSTaskHandCancel(taskNum); + _unitOfWorkManage.BeginTran(); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎); + _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId); + _stockRepository.StockInfoRepository.UpdateData(stockInfo); + if (inboundOrder != null && inboundOrderDetail != null) + { + _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder); + _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetail); + } + if (returnOrder != null) + { + _inboundRepository.ReturnOrderRepository.UpdateData(returnOrder); + _inboundRepository.ReturnOrderDetailRepository.UpdateData(returnOrder.Details); + } + _unitOfWorkManage.CommitTran(); return WebResponseContent.Instance.OK(); - + } catch(Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } } + + public WebResponseContent OutboundTaskHandCancel(int taskNum) + { + try + { + Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); + if (task == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅"); + } + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId); + if (warehouse.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString()) + { + + Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.proStockInfoDetails).First(); + if (proStockInfo == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒拌兌妗嗕负{task.PalletCode}缁勭洏淇℃伅"); + } + Dt_LocationInfo prolocationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); + if (prolocationInfo != null) + { + if (prolocationInfo.LocationStatus == LocationStatusEnum.Free.ObjToInt()) + { + return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘"); + } + prolocationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); + } + proStockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); + proStockInfo.proStockInfoDetails.ForEach(x => + { + x.ProOutDetailStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); + x.OutboundQuantity = 0; + }); + task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt(); + _unitOfWorkManage.BeginTran(); + FeedBackWCSTaskHandCancel(taskNum); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎); + _stockService.ProStockInfoService.Repository.UpdateData(proStockInfo); + _stockService.ProStockInfoDetailService.Repository.UpdateData(proStockInfo.proStockInfoDetails); + _basicService.LocationInfoService.UpdateLocationStatus(prolocationInfo, proStockInfo.PalletType, LocationStatusEnum.InStock, proStockInfo.WarehouseId); + _unitOfWorkManage.CommitTran(); + return WebResponseContent.Instance.OK(); + } + Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).Includes(x => x.Details).First(); + if (stockInfo == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺搴旂殑缁勭洏淇℃伅"); + } + if (string.IsNullOrEmpty(stockInfo.LocationCode)) + { + return WebResponseContent.Instance.Error($"璇ユ墭鐩樺湪绔嬪簱鏈粦瀹氳揣浣�"); + } + if (stockInfo.Details.Count == 0 && stockInfo.PalletType != PalletTypeEnum.Empty.ObjToInt()) + { + return WebResponseContent.Instance.Error($"鏈壘鍒拌鎵樼洏搴撳瓨鏄庣粏淇℃伅"); + } + Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); + if (locationInfo != null) + { + if (locationInfo.LocationStatus == LocationStatusEnum.Free.ObjToInt()) + { + return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘"); + } + locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); + } + + stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); + stockInfo.Details.ForEach(x => + { + x.Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); + x.OutboundQuantity = 0; + }); + task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt(); + FeedBackWCSTaskHandCancel(taskNum); + _unitOfWorkManage.BeginTran(); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎); + _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId); + _stockRepository.StockInfoRepository.UpdateData(stockInfo); + _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details); + _unitOfWorkManage.CommitTran(); + return WebResponseContent.Instance.OK(); + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } + } + + public WebResponseContent RelocationTaskHandCancel(Dt_Task task) + { + Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); + if (stockInfo == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒板搴旇揣浣嶇殑搴撳瓨淇℃伅"); + } + + Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); + if (locationInfoStart == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑璧风偣璐т綅淇℃伅"); + } + + Dt_LocationInfo locationInfoEnd = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress); + if (locationInfoEnd == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅"); + } + task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt(); + FeedBackWCSTaskHandCancel(task.TaskNum); + _unitOfWorkManage.BeginTran(); + stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); + _stockService.StockInfoService.Repository.UpdateData(stockInfo); + _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId); + _basicService.LocationInfoService.UpdateLocationStatus(locationInfoEnd, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.浜哄伐鍒犻櫎 : WIDESEA_Core.Enums.OperateTypeEnum.鑷姩鍒犻櫎); + _unitOfWorkManage.CommitTran(); + return WebResponseContent.Instance.OK(); + } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Completed.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Completed.cs" index 88eaa6f..d24aae0 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Completed.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Completed.cs" @@ -136,13 +136,38 @@ return WebResponseContent.Instance.Error(ex.Message); } } + + /// <summary> + /// 鍥炶皟wcs鎵嬪姩鍙栨秷浠诲姟 + /// </summary> + /// <param name="taskNum"></param> + /// <returns></returns> + public WebResponseContent FeedBackWCSTaskHandCancel(int taskNum) + { + try + { + Dt_ApiInfo? url = _apiInfoRepository.QueryData(x => x.ApiCode == APIEnum.FeedBackWCSTaskHandCancel.ToString()).First(); + string? apiAddress = url.ApiAddress; + if (string.IsNullOrEmpty(apiAddress)) + { + return WebResponseContent.Instance.Error($"{taskNum},鏈壘鍒癢CS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�"); + } + string responseStr = HttpHelper.Get(apiAddress + "?taskNum=" + taskNum); + WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? WebResponseContent.Instance.Error("鏈壘鍒颁换鍔″畬鎴愯繑鍥炲��"); + return content; + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } + } /// <summary> /// 浠诲姟鍙栨秷 /// </summary> /// <param name="taskNum"></param> /// <param name="warehouseId"></param> /// <returns></returns> - public async Task<WebResponseContent> TaskHandCancel(int taskNum,int warehouseId) + public async Task<WebResponseContent> TaskHandCancel(int taskNum) { try { @@ -153,15 +178,15 @@ } if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) { - return await Task.FromResult(InboundTaskCompleted(taskNum)); + return await Task.FromResult(InboundTaskHandCancel(taskNum)); } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { - return await Task.FromResult(OutboundTaskCompleted(taskNum)); + return await Task.FromResult(OutboundTaskHandCancel(taskNum)); } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup) { - return await Task.FromResult(RelocationTaskCompleted(task)); + return await Task.FromResult(RelocationTaskHandCancel(task)); } else { diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs" index 4cbe66d..7319ce3 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs" @@ -49,7 +49,7 @@ } else { - Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == needRelocationItem.LocationCode); + Dt_StockInfo stockInfo = _stockService.StockInfoService.Db.Queryable<Dt_StockInfo>().Where(x => x.LocationCode == needRelocationItem.LocationCode).Includes(x => x.Details).First(); if (stockInfo == null) { return WebResponseContent.Instance.Error($"鏈壘鍒板搴旇揣浣嶇殑搴撳瓨淇℃伅"); @@ -94,7 +94,15 @@ TaskStatus = 0, TaskType = TaskTypeEnum.Relocation.ObjToInt() }; - + string MaterielCode = stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode; + float Quantity = (float)stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity); + string BatchNo = stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.BatchNo; + if (MaterielCode != null && Quantity != null && BatchNo != null) + { + newTask.MaterielCode = MaterielCode; + newTask.Quantity = Quantity; + newTask.BatchNo = BatchNo; + } if (stockInfo.StockLength>0) { newTask.TaskLength = stockInfo.StockLength; diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" index 7b10097..9dc6662 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" @@ -413,10 +413,10 @@ /// </summary> /// <param name="taskNum">浠诲姟鍙�</param> /// <returns></returns> - [HttpPost, HttpGet, Route("TaskHandCa"), AllowAnonymous] - public async Task<WebResponseContent> TaskHandCancel(int taskNum ,int warehouseId) + [HttpPost, HttpGet, Route("TaskHandCancel"), AllowAnonymous] + public async Task<WebResponseContent> TaskHandCancel(int taskNum) { - return await Service.TaskHandCancel(taskNum,warehouseId); + return await Service.TaskHandCancel(taskNum); } } } -- Gitblit v1.9.3