zhoushihao
2025-10-29 2fe150d7351d329fd1bae4f8ef9cbdfc9c172362
Merge remote-tracking branch 'origin/master'
8个文件已修改
186 ■■■■■ 已修改文件
UI-Project/src/views/EngineerScheduling/engineerScheduling.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/upreturns.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineerScheduling/controller/EngineerSchedulingController.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineerScheduling/service/EngineerSchedulingService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineerScheduling/service/impl/EngineerSchedulingServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeProjectController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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) {