zhoushihao
2025-10-11 4b1d2b9c80eb4a914121aa1566e22249a6a24a0c
Merge remote-tracking branch 'origin/master'

# Conflicts:
# hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassRelationInfoController.java
# hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassRelationInfoMapper.java
# hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassRelationInfoMapper.xml
9个文件已修改
196 ■■■■ 已修改文件
UI-Project/src/views/EngineerScheduling/engineerScheduling.vue 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassRelationInfoController.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/LackDetailsDTO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowBigStorageDetailsQueryVO.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassRelationInfoMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassRelationInfoService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassRelationInfoMapper.xml 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/EngineerScheduling/engineerScheduling.vue
@@ -39,17 +39,17 @@
const fetchDataSource = async () => {
    try {
        // 根据当前标签页选择不同的接口
        const apiUrl = activeTab.value === 'tempered'
            ? '/cacheVerticalGlass/bigStorageCageDetails/queryEngineer'
        const apiUrl = activeTab.value === 'tempered'
            ? '/cacheVerticalGlass/bigStorageCageDetails/queryEngineer'
            : '/loadGlass/optimizeProject/queryEngineer';
        const response = await request.post(apiUrl)
        if (response.code === 200) {
            dataSource.value = response.data.map((item: any) => {
                const projectNo = activeTab.value === 'tempered' ? item.engineerId : item.projectNo
                const name = activeTab.value === 'tempered' ? item.engineerId : (item.projectNo + "-" + item.projectName)
                return {
                    key: projectNo,
                    label: name,
@@ -81,11 +81,11 @@
            type: type
        })
        if (response.code === 200) {
        if (response.code === 200) {
            // 对于所有标签页,使用projectNo作为key
            targetKeys.value = response.data.map((item: any) => item.projectNo)
            // 重要:将右侧数据添加到dataSource中,确保Transfer组件能找到对应的项
            // 将右侧数据添加到dataSource中,确保Transfer组件能找到对应的项
            response.data.forEach((item: any) => {
                // 检查dataSource中是否已存在该项
                const exists = dataSource.value.some(dataItem => dataItem.key === item.projectNo)
@@ -119,7 +119,7 @@
        } else if (activeTab.value === 'tempered') {
            type = 3; // 钢化
        }
        const engineerList = targetKeys.value.map(projectNo => {
            const dataItem = dataSource.value.find(item => item.key === projectNo)
            return {
@@ -127,7 +127,7 @@
                projectName: dataItem ? dataItem.projectName : ''
            }
        })
        const response = await request.post(`/loadGlass/optimizeProject/updateEngineerScheduling?type=${type}`, engineerList)
        if (response.code === 200) {
@@ -178,14 +178,14 @@
        </el-tabs>
        <div class="transfer-wrapper">
            <el-transfer
                v-model="targetKeys"
                filterable
                :data="dataSource"
                :titles="['待排产', getRightListTitle]"
                :button-texts="['', '']"
            />
            <el-transfer v-model="targetKeys" class="custom-transfer" filterable :data="dataSource"
                :titles="['待排产', getRightListTitle]" :button-texts="['', '']">
                <template #right-empty>
                    <el-empty :image-size="80" description="No data" />
                </template>
            </el-transfer>
            <div class="transfer-save">
                <el-button type="primary" @click="saveScheduling">
                    {{ t('searchOrder.makesure') }}
@@ -233,8 +233,8 @@
    height: 440px;
}
::v-deep(.el-transfer-panel-body-height) {
    height: 470px;
.custom-transfer {
    --el-transfer-panel-body-height: 400px;
}
::v-deep(.el-transfer-panel__header) {
hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java
@@ -2,6 +2,7 @@
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.engineering.entity.Engineering;
@@ -20,7 +21,7 @@
/**
 * <p>
 *  服务实现类
 * 服务实现类
 * </p>
 *
 * @author wu
@@ -40,7 +41,7 @@
    //开始/暂停任务
    @Override
    public  boolean  changeTask(String projectId, Integer state) {
    public boolean changeTask(String projectId, Integer state) {
        //暂停正在进行工程
//        LambdaUpdateChainWrapper<Engineering> pauseWrapper = new LambdaUpdateChainWrapper<>(this.getBaseMapper());
//        pauseWrapper.set(Engineering::getState,0);
@@ -48,8 +49,8 @@
//        boolean pause = pauseWrapper.update();
        //使用projectId作为条件开始工程
        LambdaUpdateChainWrapper<Engineering> wrapper = new LambdaUpdateChainWrapper<>(this.getBaseMapper());
        wrapper.set(Engineering::getState,state);
        wrapper.eq(Engineering::getEngineerId,projectId);
        wrapper.set(Engineering::getState, state);
        wrapper.eq(Engineering::getEngineerId, projectId);
        boolean pause = wrapper.update();
        return pause;
    }
@@ -66,30 +67,30 @@
            optimizeEngineerings = optimizeProjectMapper.selectList(wrapper);
        }
        List<Engineering> resultList=new ArrayList<>();
        List<Engineering> resultList = new ArrayList<>();
// 遍历查询结果赋值
        if (optimizeEngineerings != null) {
            for (OptimizeProject map : optimizeEngineerings) {
                // 创建一个新的 OptimizeProject 对象
                Engineering engineering = new Engineering();
                // 将 Map 中的每个键值对映射到 OptimizeProject 对象的相应字段上
                engineering.setEngineerId( map.getProjectNo());//工程id
                engineering.setEngineerName( map.getProjectName());//工程名称
                engineering.setAvgAvailability( map.getAvgCutPct());//平均优化率
                engineering.setValidAvailability( map.getValidCutPct());//有效优化率
                engineering.setLastAvailability( map.getLastCutPct());//尾片优化率
                engineering.setEngineerId(map.getProjectNo());//工程id
                engineering.setEngineerName(map.getProjectName());//工程名称
                engineering.setAvgAvailability(map.getAvgCutPct());//平均优化率
                engineering.setValidAvailability(map.getValidCutPct());//有效优化率
                engineering.setLastAvailability(map.getLastCutPct());//尾片优化率
                engineering.setState(0);//状态
                engineering.setGlassTotal( map.getGlassTotal());//小片玻璃总数
                engineering.setGlassTotalArea( map.getGlassTotalArea());//小片总面积
                engineering.setPlanPatternTotal( map.getRawStockQty());//计划原片总数
                engineering.setPlanPatternTotalArea( map.getRawStockArea());//计划原片总面积
                engineering.setFilmsId( map.getGlassType());//膜系
                engineering.setNotes( map.getRemark());//备注
                engineering.setGlassTotal(map.getGlassTotal());//小片玻璃总数
                engineering.setGlassTotalArea(map.getGlassTotalArea());//小片总面积
                engineering.setPlanPatternTotal(map.getRawStockQty());//计划原片总数
                engineering.setPlanPatternTotalArea(map.getRawStockArea());//计划原片总面积
                engineering.setFilmsId(map.getGlassType());//膜系
                engineering.setNotes(map.getRemark());//备注
                // 将映射后的对象添加到结果列表中
                resultList.add(engineering);
            }
        }
        log.info("查询出钢化工程集合保存到实体类{}",resultList);
        log.info("查询出钢化工程集合保存到实体类{}", resultList);
        return resultList;
    }
@@ -107,8 +108,9 @@
                .last("limit 1");
        return engineeringMapper.selectOne(wrapper);
    }
    @Override
    public Engineering selectInitiates(Integer state,Integer cell) {
    public Engineering selectInitiates(Integer state, Integer cell) {
        //查询是否有开始上片的工程任务
        QueryWrapper<Engineering> wrapper = new QueryWrapper<>();
        wrapper.eq("state", state)
@@ -156,24 +158,30 @@
    @Override
    public boolean deleteTask(String engineerId) {
        //删除工程表
        QueryWrapper<Engineering> wrapper = new QueryWrapper<>();
        wrapper.eq("engineer_id", engineerId);
        return this.remove(wrapper);
//        QueryWrapper<Engineering> wrapper = new QueryWrapper<>();
//        wrapper.eq("engineer_id", engineerId);
//        return this.remove(wrapper);
        //修改工程表状态
        return this.update(
                new LambdaUpdateWrapper<Engineering>()
                        .eq(Engineering::getEngineerId, engineerId)
                        .set(Engineering::getState, 6)
        );
    }
    @Override
    public boolean changeTasks(Engineering engineering) {
        //暂停正在进行工程
        LambdaUpdateChainWrapper<Engineering> pauseWrapper = new LambdaUpdateChainWrapper<>(this.getBaseMapper());
        pauseWrapper.set(Engineering::getState,0);
        pauseWrapper.eq(Engineering::getState,1);
        pauseWrapper.eq(Engineering::getStationCell,engineering.getStationCell());
        pauseWrapper.set(Engineering::getState, 0);
        pauseWrapper.eq(Engineering::getState, 1);
        pauseWrapper.eq(Engineering::getStationCell, engineering.getStationCell());
        pauseWrapper.update();
        LambdaUpdateChainWrapper<Engineering> wrapper = new LambdaUpdateChainWrapper<>(this.getBaseMapper());
        wrapper.set(Engineering::getState,engineering.getState());
        wrapper.set(Engineering::getStationCell,engineering.getStationCell());
        wrapper.eq(Engineering::getEngineerId,engineering.getEngineerId());
        wrapper.set(Engineering::getState, engineering.getState());
        wrapper.set(Engineering::getStationCell, engineering.getStationCell());
        wrapper.eq(Engineering::getEngineerId, engineering.getEngineerId());
        return wrapper.update();
    }
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassRelationInfoController.java
@@ -40,12 +40,25 @@
    }
    @ApiOperation("查询指定流程卡及层数的缺片详情")
    @PostMapping("/queryAllLackByFlowCard")
    public Result<List<LackDetailsDTO>> queryAllLackByFlowCard() {
        List<LackDetailsDTO> lackDetailsList = hollowGlassRelationInfoService.queryAllLackByFlowCard();
    @PostMapping("/queryLackByFlowCard")
    public Result<List<LackDetailsDTO>> queryLackByFlowCard() {
        List<LackDetailsDTO> lackDetailsList = hollowGlassRelationInfoService.queryLackByFlowCard();
        return Result.success(lackDetailsList);
    }
    @ApiOperation("缺片玻璃信息详情")
    @PostMapping("/queryLackGlassByFlowCard")
    public Result<List<GlassInfo>> queryLackGlassByFlowCard(@RequestBody HollowBigStorageDetailsQueryVO query) {
        List<GlassInfo> lackGlassList = hollowGlassRelationInfoService.queryLackGlassByFlowCard(query);
        return Result.success(lackGlassList);
    }
//    @ApiOperation("查询指定流程卡及层数的缺片详情")
//    @PostMapping("/queryLackByFlowCard")
//    public Result<List<LackDetailsDTO>> queryLackByFlowCard(String flowCardId) {
//        List<LackDetailsDTO> lackDetailsList = hollowGlassRelationInfoService.queryLackByFlowCard(flowCardId);
//        return Result.success(lackDetailsList);
//    }
    @ApiOperation("查询指定流程卡及层数的缺片详情")
    @PostMapping("/queryLackByFlowCard")
    public Result<Map<Integer,List<LackDetailsDTO>>> queryLackByFlowCard(String flowCardId) {
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/LackDetailsDTO.java
@@ -56,6 +56,10 @@
     * /*破损片数
     */
    private Integer damageCount;
    /**
     * /*补片数量
     */
    private Integer patchCount;
    /**
     * 工序
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowBigStorageDetailsQueryVO.java
@@ -33,5 +33,13 @@
     * 产品名称
     */
    private String productName;
    /**
     * 序号
     */
    private Integer orderSort;
    /**
     * 层
     */
    private Integer layer;
}
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassRelationInfoMapper.java
@@ -30,7 +30,15 @@
    void clearDirtyFlowCardData(@Param("flowCardId") String flowCardId, @Param("layer") int layer);
    /**
     * 按照流程卡获取产品名称
     *
     * @param flowCardId
     * @return
     */
    OrderDetailsDTO queryProductNameByFlowCardId(@Param("flowCardId") String flowCardId, @Param("productName") String productName, @Param("customerName") String customerName);
    List<LackDetailsDTO> queryLackByFlowCard(@Param("flowCardId")  String flowCardId);
    List<GlassInfo> queryLackGlassByFlowCard(@Param("flowCardId") String flowCardId, @Param("orderSort") Integer orderSort, @Param("layer") Integer layer);
}
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassRelationInfoService.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.damage.entity.request.DamageRequest;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.hollow.entity.HollowGlassRelationInfo;
import com.mes.hollow.entity.dto.FlowCardGlassInfoDTO;
import com.mes.hollow.entity.dto.HollowBigStorageDTO;
@@ -54,5 +55,7 @@
    Boolean hollowBigStorageGlassDamage(DamageRequest request);
    OrderDetailsDTO queryProductNameByFlowCardId(String flowCardId, String productName, String customerName);
    List<GlassInfo> queryLackGlassByFlowCard(HollowBigStorageDetailsQueryVO query);
}
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java
@@ -429,7 +429,9 @@
        List<GlassInfo> glassInfos = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>()
                .eq(GlassInfo::getFlowCardId, request.getFlowCardId())
                .eq(GlassInfo::getLayer, request.getLayer())
                .eq(GlassInfo::getGlassType, request.getGlassType()));
                .eq(GlassInfo::getGlassType, request.getGlassType())
                .eq(request.getGlassId() != null, GlassInfo::getGlassId, request.getGlassId())
        );
        for (GlassInfo glassInfo : glassInfos) {
            //掰片报破损
            damageService.autoSubmitReport(glassInfo.getGlassId(), request.getLine(), request.getWorkingProcedure(), request.getRemark(), request.getState());
@@ -438,6 +440,11 @@
    }
    @Override
    public List<GlassInfo> queryLackGlassByFlowCard(HollowBigStorageDetailsQueryVO query) {
        return baseMapper.queryLackGlassByFlowCard(query.getFlowCardId(), query.getOrderSort(), query.getLayer());
    }
    @Override
    public OrderDetailsDTO queryProductNameByFlowCardId(String flowCardId, String productName, String customerName) {
        OrderDetailsDTO dto = hollowGlassOutRelationInfoService.queryProductNameByFlowCardId(flowCardId);
        if ((StringUtils.isBlank(productName) || dto.getProductName().contains(productName)) && (StringUtils.isBlank(customerName) || dto.getCustomerName().contains(customerName))) {
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassRelationInfoMapper.xml
@@ -139,18 +139,18 @@
                 group by flow_card_id, layer, order_sort, films_id, first_length, second_Length, thickness
             ),
             damage_count_temp as (
                 select process_id        as flow_card_id,
                        technology_number as layer,
                        order_number      as order_sort,
                        count(1)          as damage_count
                 select process_id                                                                     as flow_card_id,
                        technology_number                                                              as layer,
                        order_number                                                                   as order_sort,
                        count(distinct
                              case when type = 8 and status &lt; 3 then glass_id else null end)        as damage_count,
                        count(distinct case when type = 8 and status >= 3 then glass_id else null end) as patch_count
                 from damage
                 where process_id in (select flow_card_id from flow_card_id_info)
                   and type in (8, 9)
                   and status &lt; 3
                 group by process_id, technology_number, order_number
             ),
             result_count as (
                 select t.*, IFNULL(t1.damage_count, 0) damage_count
                 select t.*, IFNULL(t1.damage_count, 0) damage_count, IFNULL(t1.patch_count, 0) patch_count
                 from lack_count_temp t
                          left join damage_count_temp t1 on t.flow_card_id = t1.flow_card_id and t.layer = t1.layer and
                                                            t.order_sort = t1.order_sort
@@ -164,6 +164,37 @@
        from hollow_glass_relation_info
        where flow_card_id = #{flowCardId}
    </select>
    <select id="queryProductNameByFlowCardId" resultType="com.mes.hollow.entity.dto.OrderDetailsDTO">
        select t.product_name, t1.customer_name
        from sd.order_detail t
        inner join sd.order t1 on t.order_id = t1.order_id
        where (t.order_id, t.order_number) = (
        select min(order_id) as order_id, min(order_number) as order_number
        from pp.flow_card
        where process_id = #{flowCardId}
        <if test="productName != null and productName != ''">
            and t.product_name like concat('%', #{productName}, '%')
        </if>
        <if test="customerName != null and customerName != ''">
            and t1.customer_name like concat('%', #{customerName}, '%')
        </if>
        )
        limit 1
    </select>
    <select id="queryLackGlassByFlowCard" resultType="com.mes.glassinfo.entity.GlassInfo">
        with glass_id_info as (
        select glass_id,order_sort from hollow_glass_relation_info where flow_card_id=#{flowCardId} and
        order_sort=#{orderSort} and layer=#{layer} and glass_id is not null
        ),
        damage_glass_id as (
        select glass_id from damage where process_id=#{flowCardId} and order_number=#{orderSort} and
        technology_number=#{layer} and type=8 and status &lt; 3 and glass_id is not null
        )
        select t.* from glass_info t left join glass_id_info t1 on t.glass_id=t1.glass_id
        left join damage_glass_id t2 on t.glass_id=t2.glass_id
        where t.flow_card_id=#{flowCardId} and t.glass_type=#{orderSort} and t.layer=#{layer} and t1.glass_id is null
        and t2.glass_id is null
    </select>
    <select id="queryLackByFlowCard" resultType="com.mes.hollow.entity.dto.LackDetailsDTO">
        with hollow_flow_temp AS (
            SELECT DISTINCT flow_card_id