UI-Project/src/views/EngineerScheduling/engineerScheduling.vue
@@ -157,6 +157,11 @@ const saveScheduling = async () => { try { let type = 1; // 1. 动态确定 type 和接口路径(根据 activeTab 切换) const apiPath = activeTab.value === 'tempered' ? 'updateEngineerScheduling' : 'updateCuttingLayout'; if (activeTab.value === 'cutting2') type = 2; else if (activeTab.value === 'tempered') type = 3; @@ -167,8 +172,7 @@ })) const response = await request.post( `/loadGlass/optimizeProject/updateEngineerScheduling?type=${type}`, engineerList `/loadGlass/optimizeProject/${apiPath}?type=${type}`, engineerList ) if (response.code === 200) { @@ -285,7 +289,7 @@ // 查找所有非进行中任务的位置 const nonProgressIndices = newList .map((item, i) => ({ item, index: i })) .map((item, i) => ({item, index: i})) .filter(item => item.item.state !== 1) .map(item => item.index); @@ -392,7 +396,8 @@ width="90" :formatter="stateFormatter" /> <el-table-column :label="t('scheduling.operate')" :width="activeTab === 'tempered' ? 200 : 300" :align="center"> <el-table-column :label="t('scheduling.operate')" :width="activeTab === 'tempered' ? 200 : 300" :align="center"> <template #default="{ row }"> <div style="display: flex; gap: 5px; align-items: center;"> <el-button @@ -482,6 +487,7 @@ align-items: center; gap: 20px; margin-bottom: 20px; overflow: auto; } /* 详情表格样式 */ UI-Project/src/views/Returns/upreturns.vue
@@ -110,7 +110,7 @@ }; const selectgong = async (queryString: string) => { try { const response = await request.post('/loadGlass/optimizeProject/listByState', { const response = await request.post('/loadGlass/engineerScheduling/queryEngineerScheduling', { ...requestData, query: queryString }); hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineerScheduling/controller/EngineerSchedulingController.java
@@ -1,9 +1,19 @@ package com.mes.engineerScheduling.controller; import org.springframework.web.bind.annotation.RequestMapping; import com.mes.engineerScheduling.entity.EngineerScheduling; import com.mes.engineerScheduling.service.EngineerSchedulingService; import com.mes.pp.entity.OptimizeProject; import com.mes.pp.entity.request.OptimizeRequest; import com.mes.pp.service.OptimizeProjectService; import com.mes.utils.Result; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * <p> @@ -14,8 +24,21 @@ * @since 2025-10-27 */ @RestController @RequestMapping("/engineerScheduling/engineer-scheduling") @RequestMapping("/engineerScheduling") @Slf4j @Api(tags = "排产信息") public class EngineerSchedulingController { @Autowired //获取待选择的工程号 private EngineerSchedulingService engineerSchedulingService; @ApiOperation("显示工程选择信息") @PostMapping("/queryEngineerScheduling") //显示工程选择信息 @ResponseBody public Result<List<EngineerScheduling>> queryEngineerScheduling() { //获取待选择的工程号 List<EngineerScheduling> engineerScheduling = engineerSchedulingService.listByState(); return Result.build(200, "", engineerScheduling); } } hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineerScheduling/service/EngineerSchedulingService.java
@@ -1,7 +1,10 @@ package com.mes.engineerScheduling.service; import com.baomidou.dynamic.datasource.annotation.DS; import com.mes.engineerScheduling.entity.EngineerScheduling; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; /** * <p> @@ -11,6 +14,15 @@ * @author wf * @since 2025-10-27 */ @DS("north_glass_mes") public interface EngineerSchedulingService extends IService<EngineerScheduling> { //查询当前切割排版的工程号 List<EngineerScheduling> listByState(); //查询当前钢化排版工程号 List<EngineerScheduling> queryByType(Integer type); //修改已取消的钢化排版状态 void updateState(List<String> engineerIds); //取消当前类型的工程排产信息 void updateByType(Integer type); } hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineerScheduling/service/impl/EngineerSchedulingServiceImpl.java
@@ -1,10 +1,14 @@ package com.mes.engineerScheduling.service.impl; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.mes.engineerScheduling.entity.EngineerScheduling; import com.mes.engineerScheduling.mapper.EngineerSchedulingMapper; import com.mes.engineerScheduling.service.EngineerSchedulingService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import java.util.List; /** * <p> @@ -15,6 +19,38 @@ * @since 2025-10-27 */ @Service @DS("north_glass_mes") public class EngineerSchedulingServiceImpl extends ServiceImpl<EngineerSchedulingMapper, EngineerScheduling> implements EngineerSchedulingService { @Override public List<EngineerScheduling> listByState() { QueryWrapper<EngineerScheduling> wrapper = new QueryWrapper<>(); wrapper.lt("type", 3); return baseMapper.selectList(wrapper); } @Override public List<EngineerScheduling> queryByType(Integer type) { QueryWrapper<EngineerScheduling> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("type", type); return baseMapper.selectList(queryWrapper); } @Override public void updateState(List<String> engineerIds) { QueryWrapper<EngineerScheduling> queryWrapper = new QueryWrapper<>(); queryWrapper.in("project_no", engineerIds); EngineerScheduling engineerScheduling = new EngineerScheduling(); engineerScheduling.setState(200); baseMapper.update(engineerScheduling, queryWrapper); } @Override public void updateByType(Integer type) { QueryWrapper<EngineerScheduling> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("type", type); EngineerScheduling engineerScheduling = new EngineerScheduling(); engineerScheduling.setState(200); baseMapper.update(engineerScheduling, queryWrapper); } } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeProjectController.java
@@ -65,6 +65,13 @@ List<OptimizeProject> resultList = optimizeProjectService.updateEngineerScheduling(type, engineerList); return Result.build(200, "更新成功", resultList); } @ApiOperation("更新切割工程信息") @PostMapping("/updateCuttingLayout") //更新工程排产信息 engineerScheduling表 @ResponseBody public Result<List<OptimizeProject>> updateCuttingLayout(@RequestParam Integer type, @RequestBody List<OptimizeProject> engineerList) { List<OptimizeProject> resultList = optimizeProjectService.updateCuttingLayout(type, engineerList); return Result.build(200, "更新成功", resultList); } @ApiOperation("查询工程进度") @PostMapping("/selectProgress") //更新工程排产信息 engineerScheduling表 @ResponseBody hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java
@@ -67,6 +67,13 @@ List<OptimizeProject> updateEngineerScheduling(Integer type, List<OptimizeProject> engineerList); /** * 更新工程排产信息 * * @return */ List<OptimizeProject> updateCuttingLayout(Integer type, List<OptimizeProject> engineerList); /** * 删除工程排产信息 * * @return hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java
@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.github.yulichang.base.MPJBaseServiceImpl; import com.mes.engineerScheduling.entity.EngineerScheduling; import com.mes.engineerScheduling.service.EngineerSchedulingService; import com.mes.engineering.entity.Engineering; import com.mes.engineering.service.EngineeringService; import com.mes.pp.entity.OptimizeProject; @@ -20,7 +22,11 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; /** * <p> @@ -36,6 +42,8 @@ public class OptimizeProjectServiceImpl extends MPJBaseServiceImpl<OptimizeProjectMapper, OptimizeProject> implements OptimizeProjectService { @Autowired private EngineeringService engineeringService; @Autowired private EngineerSchedulingService engineerSchedulingService; @Override public List<OptimizeProject> listByState(OptimizeRequest optimizeRequest) { @@ -109,7 +117,6 @@ public List<OptimizeProject> updateEngineerScheduling(Integer type, List<OptimizeProject> projectList) { // 1. 删除对应类型的数据 baseMapper.deleteByType(type); // 2. 设置值 projectList.forEach(project -> { project.setType(type); @@ -123,6 +130,76 @@ return projectList; } @Override @Transactional(rollbackFor = Exception.class) @DS("north_glass_mes") public List<OptimizeProject> updateCuttingLayout(Integer type, List<OptimizeProject> projectList) { //获取当前钢化排版信息 List<EngineerScheduling> engineerScheduling = engineerSchedulingService.queryByType(3); List<EngineerScheduling> cutting = new ArrayList<>(); if(type==1){ cutting = engineerSchedulingService.queryByType(2); }else { cutting = engineerSchedulingService.queryByType(1); } //保存新增钢化排版信息 List<EngineerScheduling> newSchedulingList = new ArrayList<>(); Set<String> existingProjectNoSet = engineerScheduling.stream() .map(EngineerScheduling::getProjectNo) .collect(Collectors.toSet()); // 获取当前排版新增工程 for (OptimizeProject project : projectList) { String projectNo = project.getProjectNo(); // 工程号非空,且不在已有钢化排产数据中 if (projectNo != null && !existingProjectNoSet.contains(projectNo)) { EngineerScheduling newEs = new EngineerScheduling(); newEs.setProjectNo(projectNo); newEs.setProjectName(project.getProjectName()); newEs.setType(3); newEs.setState(100); newSchedulingList.add(newEs); } } //获取当前排版取消工程 Set<String> cuttingProjectNos = new HashSet<>(); for (EngineerScheduling es : cutting) { if (es.getProjectNo() != null) { // 避免空指针 cuttingProjectNos.add(es.getProjectNo()); } } engineerScheduling = engineerScheduling.stream() .filter(es -> es.getProjectNo() == null || !cuttingProjectNos.contains(es.getProjectNo())) .collect(Collectors.toList()); //1号线钢化数据对比1号线切割数据 Set<String> projectNoSet2 = new HashSet<>(); for (OptimizeProject project : projectList) { String projectNo = project.getProjectNo(); if (projectNo != null) { // 避免空指针 projectNoSet2.add(projectNo); } } // 2. 筛选并收集符合条件的工程号(String类型)到 List<String> List<String> missingProjectNos = engineerScheduling.stream() .map(EngineerScheduling::getProjectNo) // 提取 engineerScheduling 中的工程号 .filter(esProjectNo -> esProjectNo != null // 排除空工程号 && !projectNoSet2.contains(esProjectNo)) // 排除 projectList 中存在的工程号 .collect(Collectors.toList()); // 收集结果到 List<String> for (OptimizeProject project : projectList) { project.setType(type); project.setState(100); } //新增钢化排版数据 engineerSchedulingService.saveBatch(newSchedulingList); //更新已取消的钢化排版状态 if(CollectionUtils.isNotEmpty(missingProjectNos)){ engineerSchedulingService.updateState(missingProjectNos); } //取消当前类型的工程排产信息 engineerSchedulingService.updateByType(type); //保存当前新切割排版数据 baseMapper.batchInsert(projectList); return projectList; } @Override public void deleteengineerSchedulingByid(String engineerId, List<Integer> types) {