From cd59ff1268d51f959a39fae3fa07c5de842ac4ad Mon Sep 17 00:00:00 2001 From: pengm <674192343@qq.com> Date: Tue, 29 Jul 2025 16:08:33 +0800 Subject: [PATCH] 1.排程超能力要先对数据进行移动 --- src/components/Common/CommonProductionPlanTreeEvent.js | 195 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 184 insertions(+), 11 deletions(-) diff --git a/src/components/Common/CommonProductionPlanTreeEvent.js b/src/components/Common/CommonProductionPlanTreeEvent.js index e5ae932..510e760 100644 --- a/src/components/Common/CommonProductionPlanTreeEvent.js +++ b/src/components/Common/CommonProductionPlanTreeEvent.js @@ -10,7 +10,8 @@ import * as commonUtils from '../../utils/utils'; /* 通用方法 */ import * as commonBusiness from './commonBusiness'; /* 单据业务功能 */ import * as commonServices from '../../services/services'; /* 服务类 */ import commonConfig from '../../utils/config'; -import * as commonFunc from './commonFunc'; /* 通用单据方法 */ +import * as commonFunc from './commonFunc'; +import moment from "moment/moment"; /* 通用单据方法 */ export default (ChildComponent) => { return class extends Component { @@ -516,7 +517,7 @@ export default (ChildComponent) => { }; /** 保存校验 */ - handleValidateSave = (bFresh) => { + handleValidateSave = (bFresh, slaveNewData) => { this.form.validateFields((err) => { /* 验证通过与不通过走不同的流程 */ if (err) { /* 验证失败 */ @@ -526,8 +527,13 @@ export default (ChildComponent) => { } } else { /* 验证成功 */ const { - slaveConfig, slaveData, slaveDelData, app, productionPlanDelData, tableBtnEnabled, charGanttData, bGantt, + slaveConfig, slaveDelData, app, productionPlanDelData, tableBtnEnabled, charGanttData, bGantt, } = this.props; + let { slaveData = [] } = this.props; + if(commonUtils.isNotEmptyArr(slaveNewData) && Array.isArray(slaveNewData)) { + slaveData = slaveNewData; + } + const data = []; if (commonUtils.isEmptyArr(slaveData)) { message.error(commonFunc.showMessage(app.commonConst, 'slaveNotNull')); // 从表不能为空! @@ -573,7 +579,7 @@ export default (ChildComponent) => { for (const item of slaveData) { const { sSlaveId, handleType, iOrder, tStartDate, sMemo, dAdjustHour, sDivRowNew, sDivRow,bEmploy, sDivRowTmp, sDivRowGroupBy, sAPSCodeDirection, dQty2, - dProcessfeesendQty, sMachineId, dCalcHourTz1, dTxHour, tCutDate, dFirstQty, + dProcessfeesendQty, sMachineId, dCalcHourTz1, dTxHour, tCutDate, dFirstQty, sSrcNo, } = item; if (commonUtils.isEmptyObject(sDivRowNew)) { const sIds = sSlaveId.split('-'); @@ -598,6 +604,7 @@ export default (ChildComponent) => { // addState.dAdjustHour = dAdjustHour; // } addState.sMemo = sMemo; + addState.sSrcNo = sSrcNo; addState.dAdjustHour = dAdjustHour; addState.dCalcHourTz1 = dCalcHourTz1; addState.handleType = handleType; @@ -1294,31 +1301,197 @@ export default (ChildComponent) => { } }; + /* 自定义排序号 */ + orderNum = (tableData) => { + const {slaveColumn} = this.props; + tableData.forEach((item, index) => { + item.iOrder = index + 1; + item.handleType = 'update'; + }); + /* 移动后 重新计算分割间隔条数及用时逻辑 */ + const returnFilterData = tableData.filter(item => commonUtils.isNotEmptyObject(item.sDivRowNew) && item.sDivRowNew !==''); + if (commonUtils.isNotEmptyArr(returnFilterData)) { + returnFilterData.forEach((tableDataRow, index) => { + /* 找到白班与晚班区间的汇总条数与工时 */ + let startIndex = 0; /* 找到开始下标 */ + let endindex = 0; /* 找到结束下标 */ + let sliceData =[]; + startIndex = tableData.findIndex(item => item.sId === returnFilterData[index].sId); + if(index +1 < returnFilterData.length) { + endindex = tableData.findIndex(item => item.sId === returnFilterData[index + 1].sId); + } + if(index === returnFilterData.length -1) { + endindex = tableData.length; + } + if(startIndex < endindex) { + sliceData= tableData.slice(startIndex + 1, endindex); + } + let num = 0; + let dTime = 0; + let dPlateQty = 0; /* 付版 */ + let dProcessQty = 0; + let endTime; + /* 找到第二个字段 */ + const scheduleShow = ['16508090850002295893127095467000'].includes(this.props?.sModelsId); + let timeSName = 'dHour1'; + if (scheduleShow) timeSName = 'dSumHour'; + if(commonUtils.isNotEmptyArr(sliceData)) { + num = sliceData.length; + sliceData.forEach((item) => { + if (commonUtils.isNotEmptyNumber(item[timeSName])) { + dTime += item[timeSName]; + dPlateQty += item.dPlateQty; + dProcessQty += item.dProcessQty; + if (item?.tEndDate) { + let value = item.tEndDate; + if (endTime) { + value = moment.max(moment(endTime), moment(item.tEndDate)); + } + endTime = value; + } + const iSrcIndex = tableData.findIndex(itemReturn => itemReturn.sSlaveId === item.sSlaveId); /* 汇总的每行上都加newRow的sSlaveId作为父级Id */ + if(iSrcIndex > -1) { + tableData[iSrcIndex] = {...tableData[iSrcIndex], sDivRowParentId : tableDataRow.sSlaveId, sDivRowTmp : tableDataRow.sDivRowNew} + } + } + }); + let sCount = ''; + if(num > 0) { + sCount += 'F'+ num + '单'; + } + if(dProcessQty > 0) { + sCount += ' - '+ dProcessQty; + } + if(sliceData[0].sType === "1" && !scheduleShow) { + sCount += ' - ' + dPlateQty +'付版'; + } + if(dTime > 0) { + if (scheduleShow) { + sCount += ' - ' + Math.floor(dTime / 24) + "d" + (dTime % 24).toFixed(2) + 'h'; + } else { + sCount += ' - ' + (dTime/60).toFixed(2) + 'h'; + }; + + } + if (endTime) { + sCount += ' - ' + moment(endTime).format('MM月DD日'); + } + const sFileName = commonUtils.isNotEmptyArr(slaveColumn) && slaveColumn.length > 2 ? slaveColumn[1].dataIndex : ''; + if(sCount && sFileName) { + const addState ={}; + addState[sFileName] = tableDataRow.sDivRowNew + sCount; + tableData[startIndex] = {...tableData[startIndex] , ...addState} + } + } + }); + } + return tableData; + }; + + getOrderData = (name, type) => { + const { [`${name}SelectedRowKeys`]: tableselectedRowKeys, app, slavePagination: slavePaginationOld } = this.props; + let { [`${name}Data`]: currentData } = this.props; + if (name === 'slave') { + const tempData = []; + + for (const sId of tableselectedRowKeys) { + let index = 0; + const tableDataIndex = currentData.findIndex(item => item.sId === sId); + if (tableDataIndex > -1) { + const tableDataRow = JSON.parse(JSON.stringify(currentData[tableDataIndex])); + if(commonUtils.isNotEmptyObject(tableDataRow)) { + const iSelectedOrder = tableDataRow.iOrder + index + 100; + const row = {...tableDataRow, iSelectedOrder : iSelectedOrder } + tempData.push(row); + } + } + index +=1; + } + + const tempNew = commonUtils.isNotEmptyArr(tempData) ? JSON.parse(JSON.stringify(tempData)) : []; + if (commonUtils.isEmptyArr(tempNew)) { + message.warn(commonFunc.showMessage(app.commonConst, 'pleaseChooseMoveData'));/* 请选择要移动数据 */ + return; + } + const len = currentData.length; + currentData = this.orderNum(currentData); + const newLen = tempNew.length; + let num = 0.01;/* 循环增加体 */ + let targetiOrder = -1; + if (type === 1) { /* 上移 */ + const iIndex = currentData.findIndex(item => item.sSlaveId === tempNew[0].sSlaveId);/* 选中第一个节点的下标 */ + if (iIndex === 0) { + if (newLen === 1) { + message.warn(commonFunc.showMessage(app.commonConst, 'NoUp'));/* 无需上移 */ + return; + } else { + targetiOrder = 0; + } + } else if (iIndex === 1 && currentData[0].sDivRowNew) { + message.warn(commonFunc.showMessage(app.commonConst, 'NoUp'));/* 无需上移 */ + return; + } else { + targetiOrder = currentData[iIndex - 1].iOrder - 1; /* 目标排序号 */ + } + } + tempNew.forEach((item) => { + const index1 = currentData.findIndex(item1 => item1.sSlaveId === item.sSlaveId); + currentData[index1] = { ...item, iOrder: targetiOrder + num, handleType: 'update' }; + num += 0.01; + }); + currentData = this.sortData(currentData); + currentData = this.orderNum(currentData); + return currentData; + } + }; + + sortData = (tempData) => { + tempData.sort((g1, g2) => { + return g1.iOrder - g2.iOrder; + }); + return tempData; + }; /* 超期计算 */ handleOverExec= async (other) => { const { - app, sModelsId, slaveFilterCondition, slaveSelectedRowKeys, slaveData, masterData, + app, sModelsId, slaveFilterCondition, slaveSelectedRowKeys, slaveData = [], masterData, } = this.props; + if(commonUtils.isNotEmptyArr(slaveSelectedRowKeys)) { + message.error('请选择数据'); + } + let value = {}; this.props.onSaveState({ pageLoading: true }); + + // 创建新的slaveData数组,保持未选中记录顺序不变,只对选中记录重新排序 + let newSlaveData = []; let sRowData = []; if (commonUtils.isNotEmptyObject(this.treeChild) && commonUtils.isNotEmptyObject(this.treeChild.sMachineId)) { const sMachineId = this.treeChild.sMachineId; const slaveSelectedData = slaveData.filter(item => slaveSelectedRowKeys.includes(item.sSlaveId) && commonUtils.isEmptyObject(item.sDivRowNew)); const minSelectedData = this.arrayMin(slaveSelectedData); /* iOrder最小的 */ - if(commonUtils.isNotEmptyArr(slaveSelectedData)) { - slaveSelectedData.forEach((item, index) => { - const tableRow = {}; - tableRow.sId =item.sSlaveId; - sRowData.push(tableRow); + if(commonUtils.isNotEmptyArr(slaveSelectedRowKeys)) { + + newSlaveData = this.getOrderData('slave', 1); + + slaveSelectedRowKeys.forEach(slaveId => { + const item = slaveData.find(item => item.sSlaveId === slaveId && commonUtils.isEmptyObject(item.sDivRowNew)); + if (item) { + const tableRow = { + sId: item.sSlaveId, + iOrder: item.iOrder, + sSrcNo: item.sSrcNo + }; + sRowData.push(tableRow); + } }); } /* 先走保存 */ - await this.handleValidateSave(true); + await this.handleValidateSave(true, newSlaveData); value = { sProName: 'Sp_productionPlan_BtnEventCnl', sProInParam: JSON.stringify({ -- libgit2 0.22.2