/* * @Author: Sakura * @LastEditors: Sakura * @Date: 2024-02-28 9:55:04 * @Description: 计划任务 ---- 机台任务 */ /* eslint-disable */ import React, { useEffect, useRef, useState } from "react"; import moment from "moment"; import { Carousel, Col, Row, Button, Input, Modal, Space, Dropdown, message, Tooltip, Form, Select } from "antd"; import { DownOutlined } from '@ant-design/icons'; import { SettingTwoTone } from "@ant-design/icons"; import * as commonFunc from "@/components/Common/commonFunc"; import * as commonUtils from "@/utils/utils"; import * as commonConfig from "@/utils/config"; import * as commonBusiness from "@/components/Common/commonBusiness"; import * as commonServices from "@/services/services"; import useCommonBase from "@/components/Common/CommonHooks/useCommonBase"; import StaticEditTable from "@/components/Common/CommonTable"; import styles from "./index.less"; import taskInfoIcon from "../assets/taskInfo2.png"; import statusIcon from "../assets/status.png"; import taskIcon from "../assets/task.png"; import timeIcon from "../assets/time.png"; import { handleOeeBtnEent } from "./common/handlePause"; import { operationFetch } from "../../productionExec/productionExecMain/operationFetch"; // 业务层 const useInfoEvent = props => { const { formData } = props; const [refreshCount, setRefreshCount] = useState(0); useEffect( async () => { if (commonUtils.isNotEmptyArr(formData)) { const colunmData = handleGetColumnData(formData, true); const result = await handleGetData(formData, true); const addState = { ...colunmData, ...result }; props.onSaveState(addState); } }, [formData, refreshCount] ); // 获取表头数据 const handleGetColumnData = (formData = [], isWait) => { let addState = {}; for (let i = 0; i < formData.length; i++) { const config = formData[i]; const column = commonFunc.getHeaderConfig(config); addState = { ...addState, [`slave${i}Column`]: column, [`slave${i}Config`]: config }; } if (isWait) { return addState; } else { props.onSaveState(addState); } }; // 获取数据集 const handleGetData = async (formData = [], isWait, filter) => { let addState = {}; for (let i = 0; i < formData.length; i++) { const config = formData[i]; if (!config) continue; const conditonValues = props.onGetSqlConditionValues(config); if (config.sSqlStr === "Sp_OEE_ProductionReport") { conditonValues.sMachineId_s_pro = props.app.sMachineNameSId; } // 前期生产或反馈问题表必须有非空过滤条件 if ( (i === 1 && Object.values(conditonValues).includes("")) || Object.values(conditonValues).includes(undefined) ) { continue; } const bFilter = []; if (filter) { Object.keys(filter).forEach(key => { bFilter.push({ bFilterName: key, bFilterCondition: "like", bFilterValue: filter[key] }); }); } const result = (await props.onGetDataSet({ name: `slave${i}`, configData: config, condition: { bFilter, sSqlCondition: { ...conditonValues } }, isWait: true })) || {}; props.setTempRef(result); addState = { ...addState, ...result }; } props.setTempRef({}, true); if (isWait) { return addState; } else { props.onSaveState(addState); } }; // 查询 const handleSearch = sWorkOrderNo => { handleGetData([formData[0]], false, { sWorkOrderNo }); }; // 开工事件 const handleStartWork = async params => { const { sModelsId, token, app } = props; const { name, record, config, tableData, iFlag, pauseValue } = params; const { sMachineId, sId, sSlaveId } = record; // /* 若设置了禁止跳单 选择数据不是第一条时进行提示 */ // const iIndex = app.systemData.findIndex(item => item.sName === "CkxNoSkip"); // if (iIndex > -1) { // const sValue = app.systemData[iIndex].sValue; // if (sValue === "1") { // /* 如果设置了进制跳单 */ // const indexFirst = tableData.findIndex( // item => sId === item.sId || sSlaveId === item.sSlaveId // ); // if (indexFirst > 0) { // message.warn("禁止跳单!"); // return; // } // } // } // // 验证是否单据是否被使用 // const dataUrl = `${ // commonConfig.server_host // }bill/billCopyToCheckWork?sModelsId=${sModelsId}`; // const values = { sMachineId }; // const dataReturn = (await commonServices.postValueService( // token, // values, // dataUrl // )).data; // if (dataReturn.code !== 1) { // props.getServiceError(dataReturn); // return; // } // 单据可以使用 const { startWorkConfig = {} } = config; const { sAssignField } = startWorkConfig; const allTableData = { [name]: record }; let rowData = commonFunc.getDefaultData(config, allTableData); // 取默认值 rowData = { ...rowData, ...commonFunc.getAssignFieldValue(sAssignField, record, allTableData), handleType: "add", sId: commonUtils.createSid(), sTeamId: app.sTeamNameSId, sMachineId: app.sMachineNameSId, sParentId: record.sId, tCreateDate: new Date() }; const valuesNew = {}; valuesNew.data = []; valuesNew.data.push( commonBusiness.mergeData(name, "plc_machinedata", [rowData], []) ); if ((iFlag || Object.is(iFlag, 0)) && valuesNew.data[0]) { valuesNew.data[0].iFlag = iFlag; } if (pauseValue) { valuesNew.data[0].sWorkOrderChangeMemo = pauseValue; } const BtnSave = commonFunc.showMessage( app.commonConst, "BtnSave" ); /* 保存 */ params.optName = BtnSave; params.sClientType = "1"; const returnData = await commonBusiness.saveData({ token, value: valuesNew, sModelsId, bMachineTask: true }); return returnData; // if (commonUtils.isEmptyObject(returnData)) return; // props.onSaveState( // { // [`${name}SelectedRowKeys`]: [record.sId] // }, // () => { // props.dispatch({ // type: "app/saveGlobalData", // payload: { // currentStartWorkMachineTaskDataRow: rowData // } // }); // handleRefresh(); // setTimeout(() => { // props.onChangeRouter({ // type: "name", // path: ["生产执行", "生产执行"] // }); // }, 500); // } // ); // this.props.onSaveCurrentState(slaveData, true, undefined, undefined, 1); }; // 更新工单状态 const handleUpdateStatus = async params => { const { doWorkState, record } = params; const { sModelsId, app } = props; const value = { plcMachinedata: record }; const url = `${commonConfig.server_host }oee/doUpdateStatus/${doWorkState}?sModelsId=${sModelsId}&sMachineId=${record.sMachineId }`; const returnData = (await commonServices.postValueService( app.token, value, url )).data; if (returnData.code !== 1) { props.getServiceError(returnData); return false; } return true; }; // 监听机台任务选中行变化 const { slave0SelectedRowKeys = [], slave0Data = [], sModelsId } = props; useEffect( () => { if (!slave0Data.length) return; const globalData = commonUtils.convertStrToObj( localStorage.xlybusinessglobalData ); const { currentSelectedMachineTaskDataRow = {} } = globalData; // 当前选中行sId,默认取缓存数据 let currentSelectedRowKey = slave0SelectedRowKeys[0]; if ( !currentSelectedRowKey && sModelsId === currentSelectedMachineTaskDataRow?.sModelsId ) { currentSelectedRowKey = currentSelectedMachineTaskDataRow.sId; } if (!currentSelectedRowKey) { currentSelectedRowKey = slave0Data[0].sId; } // 默认选中第一行 if (!slave0SelectedRowKeys.length) { props.onSaveState({ slave0SelectedRowKeys: [currentSelectedRowKey] }); } // 将当前选中行保存到全局 props.dispatch({ type: "app/saveGlobalData", payload: { currentSelectedMachineTaskDataRow: { ...(slave0Data.find(item => item.sId === currentSelectedRowKey) || {}), sModelsId } } }); // 前期生产或反馈问题数据根据机台任务选中行变化 handleGetData(["", formData[1]], false); }, [slave0SelectedRowKeys[0], slave0Data.length] ); // 监听开工任务变化 useEffect( () => { if (commonUtils.isEmptyObject(props.slave0Data)) return; const startRowData = props.slave0Data.find(item => item.iStar === 1); if (!startRowData) return; props.dispatch({ type: "app/saveGlobalData", payload: { currentStartWorkMachineTaskDataRow: startRowData } }); }, [JSON.stringify(props.slave0Data)] ); // 刷新页面 const handleRefresh = () => { setRefreshCount(refreshCount + 1); }; const itemClickRef = useRef(); // 开工、暂停事件 const handleTableBtnClick = async item => { const { tableName, index, record, tableData, config, iFlag } = item; const { showName, sControlName } = config; if (sControlName === 'BtnProductionReporting') { props.onTableBtnClick(item); return; } let value = true const handleChange = val => { value = val } if (showName === "完工") { Modal.confirm({ title: "温馨提示:", content:
{/*
确认完工?
*/}
是否确认完工清场?
setSSrcNo(e.target.value)} />

{feedbackIssues}

{issue?.map(item => ( ))} {component(issueType)}
{carouselData.map(item => (

{item.title}

{item.content}

))}

设备信息

{taskInfoData.sMachineNameTitle}

{taskInfoData.sMachineNameTitle}:

{taskInfoData.sMachineNameConent}

{taskInfoData.sStatusNameTitle}

{taskInfoData.sStatusNameTitle}:

{taskInfoData.sStatusNameConent}

{taskInfoData.tStartingUpTimeTitle}

{taskInfoData.tStartingUpTimeTitle}:

{taskInfoData.tStartingUpTimeConent}

{taskInfoData.tNorRunTimeTitle}:

{taskInfoData.tNorRunTimeConent}

{taskInfoData.tExeWaitTimeTitle}:

{taskInfoData.tExeWaitTimeConent}

{taskInfoData.tNorWaitTimeTitle}:

{taskInfoData.tNorWaitTimeConent}

{taskInfoData.tMaintenceTimeTitle}:

{taskInfoData.tMaintenceTimeConent}
{taskInfoData.tStartingUpTimeTitle}

今日完成任务批次/产量(个):

{taskInfoData.iFinishTaskBatchConent} /{" "} {taskInfoData.iFinishProductionNumConent}

); }; const TaskConfirmModal = props => { const { taskConfirmModalVisible, taskConfirmModalMsg, bPauseOnly = true } = props; if (!taskConfirmModalVisible) return ""; const handleClose = () => { props.itemClickRef.current = null; props.onSaveState({ taskConfirmModalVisible: false, bPauseOnly: false, pauseCallback: null }); }; const [pauseValue, setPauseValue] = useState(""); return ( 提示!} open={taskConfirmModalVisible} width={500} height={250} className="mesCommonModal" footer={ {bPauseOnly ? ( ) : ( <> )} } onCancel={handleClose} >
{taskConfirmModalMsg}
{/*
暂停原因
setPauseValue(e.target.value)} />
*/}
); }; // 全屏状态 const StatusBtnComponent = () => { const items = [ { key: "4", label: 转产, value: { conent2: "转产", backgroundColor: "#752AFE" } }, { key: "1", label: 测试, value: { conent2: "转产", backgroundColor: "#21C9FE" }, children: [ { key: "1-1", label: 产品打样, value: { conent2: "产品打样", backgroundColor: "#21C9FE" } }, { key: "1-2", label: 工艺测试, value: { conent2: "工艺测试", backgroundColor: "#21C9FE" } } ] }, { key: "2", label: 保养, value: { conent2: "保养", backgroundColor: "#FF6600" }, children: [ { key: "2-1", label: 日常保养, value: { conent2: "日常保养", backgroundColor: "#FF6600" } }, { key: "2-2", label: 一级保养, value: { conent2: "一级保养", backgroundColor: "#FF6600" } }, { key: "2-3", label: 二级保养, value: { conent2: "二级保养", backgroundColor: "#FF6600" } }, { key: "2-4", label: 一级+二级保养, value: { conent2: "一级+二级保养", backgroundColor: "#FF6600", fontSize: 130 } }, { key: "2-5", label: 年度保养, value: { conent2: "年度保养", backgroundColor: "#FF6600" } } ] } ]; const handleMenuClick = e => { message.success({ top: 0, duration: 0, className: styles.machineStatus, content: }); }; return (
); }; const MachineMessageComponent = ({ e }) => { const value = e.item?.props?.value || {}; const { current: startTime } = useRef(moment().format("YYYY-MM-DD HH:mm:ss")); const { backgroundColor, conent2, fontSize } = value; const [currentTime, setCurrentTime] = useState(""); const [diffHours, setDiffHours] = useState(0); const [diffMins, setDiffMins] = useState(0); const [diffSecs, setDiffSecs] = useState(0); const flagRef = useRef(0); useEffect(() => { const getTime = () => { const currentTimeNew = moment().format("YYYY-MM-DD HH:mm:ss"); setCurrentTime(currentTimeNew); const duration = moment.duration( moment(currentTimeNew).diff(moment(startTime)) ); const hours = duration .asHours() .toString() .split(".")[0]; const minutes = (duration.asMinutes() % 60).toString().split(".")[0]; const seconds = duration.asSeconds() % 60; setDiffHours(hours); setDiffMins(minutes); setDiffSecs(seconds); }; getTime(); const timer = setInterval(() => { getTime(); }, 1000); const handleMenuClose = () => { if (flagRef.current) return; flagRef.current++; Modal.confirm({ title: "温馨提示:", content:
确认退出该页面?
, okText: "确认", cancelText: "取消", zIndex: 2000, onOk() { message.destroy(); }, onCancel() { setTimeout(() => { flagRef.current = 0; }, 500); } }); }; setInterval(() => { document.addEventListener("click", handleMenuClose); }, 1000); return () => { clearInterval(timer); document.removeEventListener("click", handleMenuClose); }; }, []); return (
设备停机状态告知
{conent2}
停机开始时间: {startTime}
系统当前时间: {currentTime}
此次停机耗时: 约: {diffHours}时 {diffMins}分 {diffSecs}秒
); }; export default MachineTasks;