huminmin
2026-05-15 549bad4e3b36337dc9d3b436efba0103cc0761ff
src/main/java/com/ruoyi/production/service/impl/ProductionOperationTaskServiceImpl.java
@@ -19,6 +19,7 @@
import com.ruoyi.common.config.FileProperties;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.MatrixToImageWriter;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.production.bean.dto.ProductionOperationTaskDto;
import com.ruoyi.production.bean.vo.ProductionOperationTaskVo;
@@ -58,14 +59,16 @@
    @Override
    public IPage<ProductionOperationTaskVo> pageProductionOperationTask(Page<ProductionOperationTaskDto> page, ProductionOperationTaskDto dto) {
        // 分页查询生产工序任务
        Page<ProductionOperationTaskVo> voPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
        IPage<ProductionOperationTaskVo> result = baseMapper.pageProductionOperationTask(voPage, dto);
        IPage<ProductionOperationTaskVo> result = baseMapper.pageProductionOperationTask(voPage, dto, SecurityUtils.getLoginUser().getUserId());
        fillUserNames(result.getRecords());
        return result;
    }
    @Override
    public List<ProductionOperationTaskVo> listProductionOperationTask(ProductionOperationTaskDto dto) {
        // 查询工序任务列表
        List<ProductionOperationTaskVo> result = BeanUtil.copyToList(this.list(buildQueryWrapper(dto)), ProductionOperationTaskVo.class);
        fillUserNames(result);
        return result;
@@ -73,6 +76,7 @@
    @Override
    public ProductionOperationTaskVo getProductionOperationTaskInfo(Long id) {
        // 获取生产工序任务详情
        ProductionOperationTask item = this.getById(id);
        if (item == null) {
            return null;
@@ -90,21 +94,25 @@
    @Override
    public boolean saveProductionOperationTask(ProductionOperationTask productionOperationTask) {
        // 保存生产工序任务
        return this.saveOrUpdate(productionOperationTask);
    }
    @Override
    public boolean removeProductionOperationTask(List<Long> ids) {
        // 删除生产工序任务
        return ids != null && !ids.isEmpty() && this.removeByIds(ids);
    }
    @Override
    public int updateProductWorkOrder(ProductionOperationTaskDto dto) {
        // 更新工序任务对应的工单信息
        return baseMapper.updateById(dto);
    }
    @Override
    public boolean assign(ProductionOperationTaskDto dto) {
        // 分配工序任务执行人
        if (dto == null || dto.getId() == null) {
            throw new ServiceException("工单ID不能为空");
        }
@@ -119,7 +127,28 @@
        return true;
    }
    @Override
    public boolean assignTeamUser(ProductionOperationTaskDto dto) {
        // 指派班组成员
        if (dto == null || dto.getId() == null) {
            throw new ServiceException("工单ID不能为空");
        }
        if (dto.getTeamUserId() == null) {
            throw new ServiceException("班组用户ID不能为空");
        }
        ProductionOperationTask update = new ProductionOperationTask();
        update.setId(dto.getId());
        update.setTeamUserId(dto.getTeamUserId());
        int rows = baseMapper.updateById(update);
        if (rows <= 0) {
            throw new ServiceException("工单不存在或已删除");
        }
        return true;
    }
    private LambdaQueryWrapper<ProductionOperationTask> buildQueryWrapper(ProductionOperationTaskDto dto) {
        // 按条件动态构建数据库查询条件
        ProductionOperationTask query = dto == null ? new ProductionOperationTask() : dto;
        return Wrappers.<ProductionOperationTask>lambdaQuery()
                .eq(query.getId() != null, ProductionOperationTask::getId, query.getId())
@@ -133,10 +162,12 @@
    }
    private void fillUserNames(List<ProductionOperationTaskVo> voList) {
        // 填充用户名称
        if (voList == null || voList.isEmpty()) {
            return;
        }
        Set<Long> userIdSet = new LinkedHashSet<>();
        // 遍历处理数据并组装结果
        for (ProductionOperationTaskVo vo : voList) {
            if (vo == null) {
                continue;
@@ -172,6 +203,7 @@
    }
    private List<Long> parseUserIdList(String userIds, boolean strict) {
        // 解析并校验用户ID数组字符串
        if (StringUtils.isBlank(userIds)) {
            if (strict) {
                throw new ServiceException("userIds格式不正确,必须为JSON数字数组");
@@ -199,6 +231,7 @@
    @Override
    public void down(HttpServletResponse response, ProductionOperationTaskDto dto) {
        // 导出工序任务数据
        if (dto == null || dto.getId() == null) {
            throw new ServiceException("工单ID不能为空");
        }
@@ -250,15 +283,18 @@
    }
    private List<Map<String, Object>> buildTaskAttachmentImages(Long taskId) {
        // 组装任务附件图片数据用于导出
        List<Map<String, Object>> images = new ArrayList<>();
        StorageAttachmentDTO storageAttachmentDTO = new StorageAttachmentDTO();
        storageAttachmentDTO.setRecordType(RecordTypeEnum.PRODUCTION_OPERATION_TASK.getType());
        storageAttachmentDTO.setRecordId(taskId);
        List<StorageBlobVO> taskWorkOrderFiles =
                fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(storageAttachmentDTO);
        // 参数与前置条件校验
        if (CollectionUtils.isEmpty(taskWorkOrderFiles)) {
            return images;
        }
        // 遍历处理数据并组装结果
        for (StorageBlobVO blobVO : taskWorkOrderFiles) {
            if (blobVO == null) {
                continue;
@@ -286,6 +322,7 @@
    }
    private File resolveImageFile(StorageBlobVO blobVO) {
        // 将附件信息解析为本地图片文件对象
        if (blobVO == null || StringUtils.isBlank(blobVO.getUidFilename())) {
            return null;
        }
@@ -296,6 +333,7 @@
    }
    private PictureType resolvePictureType(StorageBlobVO blobVO) {
        // 按文件名或内容类型识别图片格式
        if (blobVO == null) {
            return null;
        }
@@ -311,6 +349,7 @@
    }
    private PictureType parsePictureTypeByFileName(String fileName) {
        // 根据文件后缀解析图片格式
        if (StringUtils.isBlank(fileName) || !fileName.contains(".")) {
            return null;
        }
@@ -322,6 +361,7 @@
    }
    private PictureType parsePictureTypeByContentType(String contentType) {
        // 根据Content-Type解析图片格式
        if (StringUtils.isBlank(contentType)) {
            return null;
        }
@@ -350,6 +390,7 @@
    @Override
    public List<ProductionOperationTaskVo> getOperation(ProductionOperationTaskDto dto) {
        // 查询工序任务列表
        return baseMapper.getOperation(dto);
    }
}