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 < 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 < 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 < 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