[add] 卷册目录、工程单价
This commit is contained in:
		@ -0,0 +1,112 @@
 | 
			
		||||
package org.dromara.design.controller;
 | 
			
		||||
 | 
			
		||||
import cn.dev33.satoken.annotation.SaCheckPermission;
 | 
			
		||||
import jakarta.annotation.Resource;
 | 
			
		||||
import jakarta.validation.constraints.NotEmpty;
 | 
			
		||||
import jakarta.validation.constraints.NotNull;
 | 
			
		||||
import org.dromara.common.core.domain.R;
 | 
			
		||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
 | 
			
		||||
import org.dromara.common.log.annotation.Log;
 | 
			
		||||
import org.dromara.common.log.enums.BusinessType;
 | 
			
		||||
import org.dromara.common.mybatis.core.page.PageQuery;
 | 
			
		||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
 | 
			
		||||
import org.dromara.common.web.core.BaseController;
 | 
			
		||||
import org.dromara.design.domain.DesVolumeFile;
 | 
			
		||||
import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogCreateReq;
 | 
			
		||||
import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogQueryReq;
 | 
			
		||||
import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogUpdateReq;
 | 
			
		||||
import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo;
 | 
			
		||||
import org.dromara.design.domain.vo.volumefile.DesVolumeFileVo;
 | 
			
		||||
import org.dromara.design.service.IDesVolumeCatalogService;
 | 
			
		||||
import org.dromara.design.service.IDesVolumeFileService;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.*;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 卷册目录
 | 
			
		||||
 *
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30
 | 
			
		||||
 */
 | 
			
		||||
@Validated
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/design/volumeCatalog")
 | 
			
		||||
public class DesVolumeCatalogController extends BaseController {
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private IDesVolumeCatalogService desVolumeCatalogService;
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private IDesVolumeFileService volumeFileService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询卷册目录列表
 | 
			
		||||
     */
 | 
			
		||||
    @SaCheckPermission("design:volumeCatalog:list")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo<DesVolumeCatalogVo> list(DesVolumeCatalogQueryReq req, PageQuery pageQuery) {
 | 
			
		||||
        return desVolumeCatalogService.queryPageList(req, pageQuery);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取卷册目录详细信息
 | 
			
		||||
     *
 | 
			
		||||
     * @param id 主键
 | 
			
		||||
     */
 | 
			
		||||
    @SaCheckPermission("design:volumeCatalog:query")
 | 
			
		||||
    @GetMapping("/{id}")
 | 
			
		||||
    public R<DesVolumeCatalogVo> getInfo(@NotNull(message = "主键不能为空")
 | 
			
		||||
                                         @PathVariable Long id) {
 | 
			
		||||
        return R.ok(desVolumeCatalogService.queryById(id));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取卷册目录文件列表
 | 
			
		||||
     *
 | 
			
		||||
     * @param id 主键
 | 
			
		||||
     */
 | 
			
		||||
    @SaCheckPermission("design:volumeCatalog:listFile")
 | 
			
		||||
    @GetMapping("/listFileById/{id}")
 | 
			
		||||
    public R<List<DesVolumeFileVo>> listFileById(@NotNull(message = "主键不能为空")
 | 
			
		||||
                                                 @PathVariable Long id) {
 | 
			
		||||
        List<DesVolumeFile> volumeFiles = desVolumeCatalogService.queryFileListById(id);
 | 
			
		||||
        return R.ok(volumeFileService.getVoList(volumeFiles));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增卷册目录
 | 
			
		||||
     */
 | 
			
		||||
    @SaCheckPermission("design:volumeCatalog:add")
 | 
			
		||||
    @Log(title = "卷册目录", businessType = BusinessType.INSERT)
 | 
			
		||||
    @RepeatSubmit()
 | 
			
		||||
    @PostMapping()
 | 
			
		||||
    public R<Void> add(@Validated @RequestBody DesVolumeCatalogCreateReq req) {
 | 
			
		||||
        return toAjax(desVolumeCatalogService.insertByBo(req));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改卷册目录
 | 
			
		||||
     */
 | 
			
		||||
    @SaCheckPermission("design:volumeCatalog:edit")
 | 
			
		||||
    @Log(title = "卷册目录", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @RepeatSubmit()
 | 
			
		||||
    @PutMapping()
 | 
			
		||||
    public R<Void> edit(@Validated @RequestBody DesVolumeCatalogUpdateReq req) {
 | 
			
		||||
        return toAjax(desVolumeCatalogService.updateByBo(req));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除卷册目录
 | 
			
		||||
     *
 | 
			
		||||
     * @param ids 主键串
 | 
			
		||||
     */
 | 
			
		||||
    @SaCheckPermission("design:volumeCatalog:remove")
 | 
			
		||||
    @Log(title = "卷册目录", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{ids}")
 | 
			
		||||
    public R<Void> remove(@NotEmpty(message = "主键不能为空")
 | 
			
		||||
                          @PathVariable Long[] ids) {
 | 
			
		||||
        return toAjax(desVolumeCatalogService.deleteByIds(List.of(ids)));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,71 @@
 | 
			
		||||
package org.dromara.design.controller;
 | 
			
		||||
 | 
			
		||||
import cn.dev33.satoken.annotation.SaCheckPermission;
 | 
			
		||||
import jakarta.annotation.Resource;
 | 
			
		||||
import jakarta.validation.constraints.NotEmpty;
 | 
			
		||||
import jakarta.validation.constraints.NotNull;
 | 
			
		||||
import org.dromara.common.core.domain.R;
 | 
			
		||||
import org.dromara.common.core.validate.AddGroup;
 | 
			
		||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
 | 
			
		||||
import org.dromara.common.log.annotation.Log;
 | 
			
		||||
import org.dromara.common.log.enums.BusinessType;
 | 
			
		||||
import org.dromara.common.web.core.BaseController;
 | 
			
		||||
import org.dromara.design.domain.dto.volumefile.DesVolumeFileCreateReq;
 | 
			
		||||
import org.dromara.design.domain.vo.volumefile.DesVolumeFileVo;
 | 
			
		||||
import org.dromara.design.service.IDesVolumeFileService;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.*;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 卷册文件
 | 
			
		||||
 *
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30
 | 
			
		||||
 */
 | 
			
		||||
@Validated
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/design/volumeFile")
 | 
			
		||||
public class DesVolumeFileController extends BaseController {
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private IDesVolumeFileService desVolumeFileService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取卷册文件详细信息
 | 
			
		||||
     *
 | 
			
		||||
     * @param id 主键
 | 
			
		||||
     */
 | 
			
		||||
    @SaCheckPermission("design:volumeFile:query")
 | 
			
		||||
    @GetMapping("/{id}")
 | 
			
		||||
    public R<DesVolumeFileVo> getInfo(@NotNull(message = "主键不能为空")
 | 
			
		||||
                                      @PathVariable Long id) {
 | 
			
		||||
        return R.ok(desVolumeFileService.queryById(id));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增卷册文件
 | 
			
		||||
     */
 | 
			
		||||
    @SaCheckPermission("design:volumeFile:add")
 | 
			
		||||
    @Log(title = "卷册文件", businessType = BusinessType.INSERT)
 | 
			
		||||
    @RepeatSubmit()
 | 
			
		||||
    @PostMapping()
 | 
			
		||||
    public R<Void> add(@Validated(AddGroup.class) @RequestBody DesVolumeFileCreateReq req) {
 | 
			
		||||
        return toAjax(desVolumeFileService.insertByBo(req));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除卷册文件
 | 
			
		||||
     *
 | 
			
		||||
     * @param ids 主键串
 | 
			
		||||
     */
 | 
			
		||||
    @SaCheckPermission("design:volumeFile:remove")
 | 
			
		||||
    @Log(title = "卷册文件", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{ids}")
 | 
			
		||||
    public R<Void> remove(@NotEmpty(message = "主键不能为空")
 | 
			
		||||
                          @PathVariable Long[] ids) {
 | 
			
		||||
        return toAjax(desVolumeFileService.deleteByIds(List.of(ids)));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,56 @@
 | 
			
		||||
package org.dromara.design.domain;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableId;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 卷册目录对象 des_volume_catalog
 | 
			
		||||
 *
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
@EqualsAndHashCode(callSuper = true)
 | 
			
		||||
@TableName("des_volume_catalog")
 | 
			
		||||
public class DesVolumeCatalog extends BaseEntity {
 | 
			
		||||
 | 
			
		||||
    @Serial
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 主键ID
 | 
			
		||||
     */
 | 
			
		||||
    @TableId(value = "id")
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 项目ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long projectId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 设计子项ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long designSubitemId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 卷册号
 | 
			
		||||
     */
 | 
			
		||||
    private String volumeNumber;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 资料名称
 | 
			
		||||
     */
 | 
			
		||||
    private String documentName;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 备注
 | 
			
		||||
     */
 | 
			
		||||
    private String remark;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,60 @@
 | 
			
		||||
package org.dromara.design.domain;
 | 
			
		||||
 | 
			
		||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.*;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 卷册文件对象 des_volume_file
 | 
			
		||||
 *
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
@EqualsAndHashCode(callSuper = true)
 | 
			
		||||
@TableName("des_volume_file")
 | 
			
		||||
public class DesVolumeFile extends BaseEntity {
 | 
			
		||||
 | 
			
		||||
    @Serial
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 主键ID
 | 
			
		||||
     */
 | 
			
		||||
    @TableId(value = "id")
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 卷册目录ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long volumeCatalogId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 文件名
 | 
			
		||||
     */
 | 
			
		||||
    private String fileName;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 文件ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long fileId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 说明
 | 
			
		||||
     */
 | 
			
		||||
    private String explainText;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 状态(1正常 2作废)
 | 
			
		||||
     */
 | 
			
		||||
    private String status;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 备注
 | 
			
		||||
     */
 | 
			
		||||
    private String remark;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,44 @@
 | 
			
		||||
package org.dromara.design.domain;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableId;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 卷册文件查阅人对象 des_volume_file_viewer
 | 
			
		||||
 *
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
@TableName("des_volume_file_viewer")
 | 
			
		||||
public class DesVolumeFileViewer implements Serializable {
 | 
			
		||||
 | 
			
		||||
    @Serial
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 主键ID
 | 
			
		||||
     */
 | 
			
		||||
    @TableId(value = "id")
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 卷册目录ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long volumeCatalogId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long userId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 状态(1未查阅 2已查阅)
 | 
			
		||||
     */
 | 
			
		||||
    private String status;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,48 @@
 | 
			
		||||
package org.dromara.design.domain.dto.volumecatalog;
 | 
			
		||||
 | 
			
		||||
import jakarta.validation.constraints.NotBlank;
 | 
			
		||||
import jakarta.validation.constraints.NotNull;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30 17:42
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class DesVolumeCatalogCreateReq implements Serializable {
 | 
			
		||||
 | 
			
		||||
    @Serial
 | 
			
		||||
    private static final long serialVersionUID = -3744599698793487153L;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 项目ID
 | 
			
		||||
     */
 | 
			
		||||
    @NotNull(message = "项目ID不能为空")
 | 
			
		||||
    private Long projectId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 设计子项ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long designSubitemId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 卷册号
 | 
			
		||||
     */
 | 
			
		||||
    @NotBlank(message = "卷册号不能为空")
 | 
			
		||||
    private String volumeNumber;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 资料名称
 | 
			
		||||
     */
 | 
			
		||||
    @NotBlank(message = "资料名称不能为空")
 | 
			
		||||
    private String documentName;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 备注
 | 
			
		||||
     */
 | 
			
		||||
    private String remark;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,38 @@
 | 
			
		||||
package org.dromara.design.domain.dto.volumecatalog;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30 17:42
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class DesVolumeCatalogQueryReq implements Serializable {
 | 
			
		||||
 | 
			
		||||
    @Serial
 | 
			
		||||
    private static final long serialVersionUID = 7351269273770370158L;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 项目ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long projectId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 设计子项ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long designSubitemId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 卷册号
 | 
			
		||||
     */
 | 
			
		||||
    private String volumeNumber;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 资料名称
 | 
			
		||||
     */
 | 
			
		||||
    private String documentName;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,40 @@
 | 
			
		||||
package org.dromara.design.domain.dto.volumecatalog;
 | 
			
		||||
 | 
			
		||||
import jakarta.validation.constraints.NotNull;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30 17:42
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class DesVolumeCatalogUpdateReq implements Serializable {
 | 
			
		||||
 | 
			
		||||
    @Serial
 | 
			
		||||
    private static final long serialVersionUID = -7149075378890527995L;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 主键ID
 | 
			
		||||
     */
 | 
			
		||||
    @NotNull(message = "主键ID不能为空")
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 卷册号
 | 
			
		||||
     */
 | 
			
		||||
    private String volumeNumber;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 资料名称
 | 
			
		||||
     */
 | 
			
		||||
    private String documentName;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 备注
 | 
			
		||||
     */
 | 
			
		||||
    private String remark;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,49 @@
 | 
			
		||||
package org.dromara.design.domain.dto.volumefile;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30 19:00
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class DesVolumeFileCreateReq implements Serializable {
 | 
			
		||||
 | 
			
		||||
    @Serial
 | 
			
		||||
    private static final long serialVersionUID = -8891991367976083609L;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 卷册目录ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long volumeCatalogId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 文件ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long fileId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 作废文件id列表
 | 
			
		||||
     */
 | 
			
		||||
    private List<Long> cancellationIds;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查阅人id列表
 | 
			
		||||
     */
 | 
			
		||||
    private List<Long> userIds;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 说明
 | 
			
		||||
     */
 | 
			
		||||
    private String explainText;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 备注
 | 
			
		||||
     */
 | 
			
		||||
    private String remark;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,72 @@
 | 
			
		||||
package org.dromara.design.domain.vo.volumecatalog;
 | 
			
		||||
 | 
			
		||||
import io.github.linpeilie.annotations.AutoMapper;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.dromara.design.domain.DesVolumeCatalog;
 | 
			
		||||
import org.dromara.design.domain.vo.volumefile.DesVolumeFileVo;
 | 
			
		||||
import org.dromara.system.domain.vo.SysUserVo;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 卷册目录视图对象 des_volume_catalog
 | 
			
		||||
 *
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
@AutoMapper(target = DesVolumeCatalog.class)
 | 
			
		||||
public class DesVolumeCatalogVo implements Serializable {
 | 
			
		||||
 | 
			
		||||
    @Serial
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 主键ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 项目ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long projectId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 设计子项ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long designSubitemId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 卷册号
 | 
			
		||||
     */
 | 
			
		||||
    private String volumeNumber;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 资料名称
 | 
			
		||||
     */
 | 
			
		||||
    private String documentName;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 文件列表
 | 
			
		||||
     */
 | 
			
		||||
    private List<DesVolumeFileVo> fileVoList;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查阅人列表
 | 
			
		||||
     */
 | 
			
		||||
    private List<SysUserVo> viewerList;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 未查阅人列表
 | 
			
		||||
     */
 | 
			
		||||
    private List<SysUserVo> noViewerList;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 备注
 | 
			
		||||
     */
 | 
			
		||||
    private String remark;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,64 @@
 | 
			
		||||
package org.dromara.design.domain.vo.volumefile;
 | 
			
		||||
 | 
			
		||||
import io.github.linpeilie.annotations.AutoMapper;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.dromara.design.domain.DesVolumeFile;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 卷册文件视图对象 des_volume_file
 | 
			
		||||
 *
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
@AutoMapper(target = DesVolumeFile.class)
 | 
			
		||||
public class DesVolumeFileVo implements Serializable {
 | 
			
		||||
 | 
			
		||||
    @Serial
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 主键ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 卷册目录ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long volumeCatalogId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 文件ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long fileId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 文件名
 | 
			
		||||
     */
 | 
			
		||||
    private String fileName;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 文件路径
 | 
			
		||||
     */
 | 
			
		||||
    private String fileUrl;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 说明
 | 
			
		||||
     */
 | 
			
		||||
    private String explainText;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 状态(1正常 2作废)
 | 
			
		||||
     */
 | 
			
		||||
    private String status;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 备注
 | 
			
		||||
     */
 | 
			
		||||
    private String remark;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,37 @@
 | 
			
		||||
package org.dromara.design.domain.vo.volumefileviewer;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30 19:52
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class DesVolumeFileViewerVo implements Serializable {
 | 
			
		||||
 | 
			
		||||
    @Serial
 | 
			
		||||
    private static final long serialVersionUID = 8098890355435832859L;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 主键ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 卷册目录ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long volumeCatalogId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long userId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 状态(1未查阅 2已查阅)
 | 
			
		||||
     */
 | 
			
		||||
    private String status;
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,15 @@
 | 
			
		||||
package org.dromara.design.mapper;
 | 
			
		||||
 | 
			
		||||
import org.dromara.design.domain.DesVolumeCatalog;
 | 
			
		||||
import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo;
 | 
			
		||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 卷册目录Mapper接口
 | 
			
		||||
 *
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30
 | 
			
		||||
 */
 | 
			
		||||
public interface DesVolumeCatalogMapper extends BaseMapperPlus<DesVolumeCatalog, DesVolumeCatalogVo> {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,15 @@
 | 
			
		||||
package org.dromara.design.mapper;
 | 
			
		||||
 | 
			
		||||
import org.dromara.design.domain.DesVolumeFile;
 | 
			
		||||
import org.dromara.design.domain.vo.volumefile.DesVolumeFileVo;
 | 
			
		||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 卷册文件Mapper接口
 | 
			
		||||
 *
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30
 | 
			
		||||
 */
 | 
			
		||||
public interface DesVolumeFileMapper extends BaseMapperPlus<DesVolumeFile, DesVolumeFileVo> {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,15 @@
 | 
			
		||||
package org.dromara.design.mapper;
 | 
			
		||||
 | 
			
		||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 | 
			
		||||
import org.dromara.design.domain.DesVolumeFileViewer;
 | 
			
		||||
import org.dromara.design.domain.vo.volumefileviewer.DesVolumeFileViewerVo;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 卷册文件查阅人Mapper接口
 | 
			
		||||
 *
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30
 | 
			
		||||
 */
 | 
			
		||||
public interface DesVolumeFileViewerMapper extends BaseMapperPlus<DesVolumeFileViewer, DesVolumeFileViewerVo> {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,106 @@
 | 
			
		||||
package org.dromara.design.service;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.service.IService;
 | 
			
		||||
import org.dromara.common.mybatis.core.page.PageQuery;
 | 
			
		||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
 | 
			
		||||
import org.dromara.design.domain.DesVolumeCatalog;
 | 
			
		||||
import org.dromara.design.domain.DesVolumeFile;
 | 
			
		||||
import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogCreateReq;
 | 
			
		||||
import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogQueryReq;
 | 
			
		||||
import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogUpdateReq;
 | 
			
		||||
import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo;
 | 
			
		||||
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 卷册目录Service接口
 | 
			
		||||
 *
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30
 | 
			
		||||
 */
 | 
			
		||||
public interface IDesVolumeCatalogService extends IService<DesVolumeCatalog> {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询卷册目录
 | 
			
		||||
     *
 | 
			
		||||
     * @param id 主键
 | 
			
		||||
     * @return 卷册目录
 | 
			
		||||
     */
 | 
			
		||||
    DesVolumeCatalogVo queryById(Long id);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 分页查询卷册目录列表
 | 
			
		||||
     *
 | 
			
		||||
     * @param req       查询条件
 | 
			
		||||
     * @param pageQuery 分页参数
 | 
			
		||||
     * @return 卷册目录分页列表
 | 
			
		||||
     */
 | 
			
		||||
    TableDataInfo<DesVolumeCatalogVo> queryPageList(DesVolumeCatalogQueryReq req, PageQuery pageQuery);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询符合条件的卷册目录列表
 | 
			
		||||
     *
 | 
			
		||||
     * @param req 查询条件
 | 
			
		||||
     * @return 卷册目录列表
 | 
			
		||||
     */
 | 
			
		||||
    List<DesVolumeCatalogVo> queryList(DesVolumeCatalogQueryReq req);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据id查询卷册目录文件列表
 | 
			
		||||
     *
 | 
			
		||||
     * @param id 卷册目录id
 | 
			
		||||
     * @return 卷册目录文件列表
 | 
			
		||||
     */
 | 
			
		||||
    List<DesVolumeFile> queryFileListById(Long id);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增卷册目录
 | 
			
		||||
     *
 | 
			
		||||
     * @param req 卷册目录
 | 
			
		||||
     * @return 是否新增成功
 | 
			
		||||
     */
 | 
			
		||||
    Boolean insertByBo(DesVolumeCatalogCreateReq req);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改卷册目录
 | 
			
		||||
     *
 | 
			
		||||
     * @param req 卷册目录
 | 
			
		||||
     * @return 是否修改成功
 | 
			
		||||
     */
 | 
			
		||||
    Boolean updateByBo(DesVolumeCatalogUpdateReq req);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 批量删除卷册目录信息
 | 
			
		||||
     *
 | 
			
		||||
     * @param ids 待删除的主键集合
 | 
			
		||||
     * @return 是否删除成功
 | 
			
		||||
     */
 | 
			
		||||
    Boolean deleteByIds(Collection<Long> ids);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 构建卷册目录封装对象
 | 
			
		||||
     *
 | 
			
		||||
     * @param volumeCatalog 卷册目录
 | 
			
		||||
     * @return 卷册目录封装对象
 | 
			
		||||
     */
 | 
			
		||||
    DesVolumeCatalogVo getVo(DesVolumeCatalog volumeCatalog);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 构建查询条件
 | 
			
		||||
     *
 | 
			
		||||
     * @param req 查询条件
 | 
			
		||||
     * @return 查询条件
 | 
			
		||||
     */
 | 
			
		||||
    LambdaQueryWrapper<DesVolumeCatalog> buildQueryWrapper(DesVolumeCatalogQueryReq req);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取卷册目录对象视图
 | 
			
		||||
     *
 | 
			
		||||
     * @param volumeCatalogPage 卷册目录对象
 | 
			
		||||
     * @return 卷册目录对象视图
 | 
			
		||||
     */
 | 
			
		||||
    Page<DesVolumeCatalogVo> getVoPage(Page<DesVolumeCatalog> volumeCatalogPage);
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,67 @@
 | 
			
		||||
package org.dromara.design.service;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.service.IService;
 | 
			
		||||
import org.dromara.design.domain.DesVolumeFile;
 | 
			
		||||
import org.dromara.design.domain.dto.volumefile.DesVolumeFileCreateReq;
 | 
			
		||||
import org.dromara.design.domain.vo.volumefile.DesVolumeFileVo;
 | 
			
		||||
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 卷册文件Service接口
 | 
			
		||||
 *
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30
 | 
			
		||||
 */
 | 
			
		||||
public interface IDesVolumeFileService extends IService<DesVolumeFile> {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询卷册文件
 | 
			
		||||
     *
 | 
			
		||||
     * @param id 主键
 | 
			
		||||
     * @return 卷册文件
 | 
			
		||||
     */
 | 
			
		||||
    DesVolumeFileVo queryById(Long id);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增卷册文件
 | 
			
		||||
     *
 | 
			
		||||
     * @param req 卷册文件
 | 
			
		||||
     * @return 是否新增成功
 | 
			
		||||
     */
 | 
			
		||||
    Boolean insertByBo(DesVolumeFileCreateReq req);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 批量删除卷册文件信息
 | 
			
		||||
     *
 | 
			
		||||
     * @param ids 待删除的主键集合
 | 
			
		||||
     * @return 是否删除成功
 | 
			
		||||
     */
 | 
			
		||||
    Boolean deleteByIds(Collection<Long> ids);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 构建卷册目录封装对象
 | 
			
		||||
     *
 | 
			
		||||
     * @param volumeFile 卷册目录
 | 
			
		||||
     * @return 卷册目录封装对象
 | 
			
		||||
     */
 | 
			
		||||
    DesVolumeFileVo getVo(DesVolumeFile volumeFile);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取卷册目录列表视图
 | 
			
		||||
     *
 | 
			
		||||
     * @param volumeFileList 卷册目录列表
 | 
			
		||||
     * @return 卷册目录列表视图
 | 
			
		||||
     */
 | 
			
		||||
    List<DesVolumeFileVo> getVoList(List<DesVolumeFile> volumeFileList);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取卷册目录对象视图
 | 
			
		||||
     *
 | 
			
		||||
     * @param volumeFilePage 卷册目录对象
 | 
			
		||||
     * @return 卷册目录对象视图
 | 
			
		||||
     */
 | 
			
		||||
    Page<DesVolumeFileVo> getVoPage(Page<DesVolumeFile> volumeFilePage);
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,14 @@
 | 
			
		||||
package org.dromara.design.service;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.extension.service.IService;
 | 
			
		||||
import org.dromara.design.domain.DesVolumeFileViewer;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 卷册文件查阅人Service接口
 | 
			
		||||
 *
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30
 | 
			
		||||
 */
 | 
			
		||||
public interface IDesVolumeFileViewerService extends IService<DesVolumeFileViewer> {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,265 @@
 | 
			
		||||
package org.dromara.design.service.impl;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.collection.CollUtil;
 | 
			
		||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
			
		||||
import jakarta.annotation.Resource;
 | 
			
		||||
import org.dromara.common.core.constant.HttpStatus;
 | 
			
		||||
import org.dromara.common.core.exception.ServiceException;
 | 
			
		||||
import org.dromara.common.core.utils.ObjectUtils;
 | 
			
		||||
import org.dromara.common.core.utils.StringUtils;
 | 
			
		||||
import org.dromara.common.mybatis.core.page.PageQuery;
 | 
			
		||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
 | 
			
		||||
import org.dromara.design.domain.DesVolumeCatalog;
 | 
			
		||||
import org.dromara.design.domain.DesVolumeFile;
 | 
			
		||||
import org.dromara.design.domain.DesVolumeFileViewer;
 | 
			
		||||
import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogCreateReq;
 | 
			
		||||
import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogQueryReq;
 | 
			
		||||
import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogUpdateReq;
 | 
			
		||||
import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo;
 | 
			
		||||
import org.dromara.design.mapper.DesVolumeCatalogMapper;
 | 
			
		||||
import org.dromara.design.service.IDesVolumeCatalogService;
 | 
			
		||||
import org.dromara.design.service.IDesVolumeFileService;
 | 
			
		||||
import org.dromara.design.service.IDesVolumeFileViewerService;
 | 
			
		||||
import org.dromara.project.service.IBusProjectService;
 | 
			
		||||
import org.springframework.beans.BeanUtils;
 | 
			
		||||
import org.springframework.context.annotation.Lazy;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
import org.springframework.transaction.annotation.Transactional;
 | 
			
		||||
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 卷册目录Service业务层处理
 | 
			
		||||
 *
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30
 | 
			
		||||
 */
 | 
			
		||||
@Service
 | 
			
		||||
public class DesVolumeCatalogServiceImpl extends ServiceImpl<DesVolumeCatalogMapper, DesVolumeCatalog>
 | 
			
		||||
    implements IDesVolumeCatalogService {
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private IBusProjectService projectService;
 | 
			
		||||
 | 
			
		||||
    @Lazy
 | 
			
		||||
    @Resource
 | 
			
		||||
    private IDesVolumeFileService volumeFileService;
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private IDesVolumeFileViewerService volumeFileViewerService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询卷册目录
 | 
			
		||||
     *
 | 
			
		||||
     * @param id 主键
 | 
			
		||||
     * @return 卷册目录
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public DesVolumeCatalogVo queryById(Long id) {
 | 
			
		||||
        DesVolumeCatalog volumeCatalog = this.getById(id);
 | 
			
		||||
        if (volumeCatalog == null) {
 | 
			
		||||
            throw new ServiceException("卷册目录信息不存在", HttpStatus.NOT_FOUND);
 | 
			
		||||
        }
 | 
			
		||||
        return this.getVo(volumeCatalog);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 分页查询卷册目录列表
 | 
			
		||||
     *
 | 
			
		||||
     * @param req       查询条件
 | 
			
		||||
     * @param pageQuery 分页参数
 | 
			
		||||
     * @return 卷册目录分页列表
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public TableDataInfo<DesVolumeCatalogVo> queryPageList(DesVolumeCatalogQueryReq req, PageQuery pageQuery) {
 | 
			
		||||
        Page<DesVolumeCatalog> result = this.page(pageQuery.build(), this.buildQueryWrapper(req));
 | 
			
		||||
        return TableDataInfo.build(this.getVoPage(result));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询符合条件的卷册目录列表
 | 
			
		||||
     *
 | 
			
		||||
     * @param req 查询条件
 | 
			
		||||
     * @return 卷册目录列表
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<DesVolumeCatalogVo> queryList(DesVolumeCatalogQueryReq req) {
 | 
			
		||||
        return this.list(this.buildQueryWrapper(req)).stream().map(this::getVo).toList();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据id查询卷册目录文件列表
 | 
			
		||||
     *
 | 
			
		||||
     * @param id 卷册目录id
 | 
			
		||||
     * @return 卷册目录文件列表
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<DesVolumeFile> queryFileListById(Long id) {
 | 
			
		||||
        return volumeFileService.lambdaQuery()
 | 
			
		||||
            .eq(DesVolumeFile::getVolumeCatalogId, id)
 | 
			
		||||
            .list();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增卷册目录
 | 
			
		||||
     *
 | 
			
		||||
     * @param req 卷册目录
 | 
			
		||||
     * @return 是否新增成功
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public Boolean insertByBo(DesVolumeCatalogCreateReq req) {
 | 
			
		||||
        Long projectId = req.getProjectId();
 | 
			
		||||
        if (projectService.getById(projectId) == null) {
 | 
			
		||||
            throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND);
 | 
			
		||||
        }
 | 
			
		||||
        // 判断是否重名
 | 
			
		||||
        Long count = this.lambdaQuery()
 | 
			
		||||
            .eq(DesVolumeCatalog::getProjectId, projectId)
 | 
			
		||||
            .and(lqw -> lqw
 | 
			
		||||
                .eq(DesVolumeCatalog::getVolumeNumber, req.getVolumeNumber())
 | 
			
		||||
                .or()
 | 
			
		||||
                .eq(DesVolumeCatalog::getDocumentName, req.getDocumentName()))
 | 
			
		||||
            .count();
 | 
			
		||||
        if (count > 0) {
 | 
			
		||||
            throw new ServiceException("卷册目录已存在", HttpStatus.BAD_REQUEST);
 | 
			
		||||
        }
 | 
			
		||||
        DesVolumeCatalog volumeCatalog = new DesVolumeCatalog();
 | 
			
		||||
        BeanUtils.copyProperties(req, volumeCatalog);
 | 
			
		||||
        boolean save = this.save(volumeCatalog);
 | 
			
		||||
        if (!save) {
 | 
			
		||||
            throw new ServiceException("卷册目录新增失败", HttpStatus.ERROR);
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改卷册目录
 | 
			
		||||
     *
 | 
			
		||||
     * @param req 卷册目录
 | 
			
		||||
     * @return 是否修改成功
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public Boolean updateByBo(DesVolumeCatalogUpdateReq req) {
 | 
			
		||||
        // 判断卷册目录是否存在
 | 
			
		||||
        DesVolumeCatalog oldVolumeCatalog = this.getById(req.getId());
 | 
			
		||||
        if (oldVolumeCatalog == null) {
 | 
			
		||||
            throw new ServiceException("卷册目录不存在", HttpStatus.ERROR);
 | 
			
		||||
        }
 | 
			
		||||
        // 判断是否重名
 | 
			
		||||
        Long count = this.lambdaQuery()
 | 
			
		||||
            .eq(DesVolumeCatalog::getProjectId, oldVolumeCatalog.getProjectId())
 | 
			
		||||
            .and(lqw -> lqw
 | 
			
		||||
                .eq(DesVolumeCatalog::getVolumeNumber, req.getVolumeNumber())
 | 
			
		||||
                .or()
 | 
			
		||||
                .eq(DesVolumeCatalog::getDocumentName, req.getDocumentName()))
 | 
			
		||||
            .ne(DesVolumeCatalog::getId, req.getId())
 | 
			
		||||
            .count();
 | 
			
		||||
        if (count > 0) {
 | 
			
		||||
            throw new ServiceException("卷册目录已存在", HttpStatus.BAD_REQUEST);
 | 
			
		||||
        }
 | 
			
		||||
        // 修改数据
 | 
			
		||||
        DesVolumeCatalog volumeCatalog = new DesVolumeCatalog();
 | 
			
		||||
        BeanUtils.copyProperties(req, volumeCatalog);
 | 
			
		||||
        boolean update = this.updateById(volumeCatalog);
 | 
			
		||||
        if (!update) {
 | 
			
		||||
            throw new ServiceException("卷册目录修改失败", HttpStatus.ERROR);
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 批量删除卷册目录信息
 | 
			
		||||
     *
 | 
			
		||||
     * @param ids 待删除的主键集合
 | 
			
		||||
     * @return 是否删除成功
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    @Transactional(rollbackFor = Exception.class)
 | 
			
		||||
    public Boolean deleteByIds(Collection<Long> ids) {
 | 
			
		||||
        // 查询卷册下是否有文件
 | 
			
		||||
        Long count = volumeFileService.lambdaQuery()
 | 
			
		||||
            .in(DesVolumeFile::getVolumeCatalogId, ids)
 | 
			
		||||
            .count();
 | 
			
		||||
        if (count > 0) {
 | 
			
		||||
            throw new ServiceException("请先删除卷册下的文件", HttpStatus.CONFLICT);
 | 
			
		||||
        }
 | 
			
		||||
        // 关联删除查阅人信息
 | 
			
		||||
        List<DesVolumeFileViewer> viewerList = volumeFileViewerService.lambdaQuery()
 | 
			
		||||
            .in(DesVolumeFileViewer::getVolumeCatalogId, ids)
 | 
			
		||||
            .list();
 | 
			
		||||
        if (CollUtil.isNotEmpty(viewerList)) {
 | 
			
		||||
            volumeFileViewerService.removeBatchByIds(viewerList);
 | 
			
		||||
        }
 | 
			
		||||
        return this.removeBatchByIds(ids);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 构建卷册目录封装对象
 | 
			
		||||
     *
 | 
			
		||||
     * @param volumeCatalog 卷册目录
 | 
			
		||||
     * @return 卷册目录封装对象
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public DesVolumeCatalogVo getVo(DesVolumeCatalog volumeCatalog) {
 | 
			
		||||
        DesVolumeCatalogVo vo = new DesVolumeCatalogVo();
 | 
			
		||||
        if (volumeCatalog == null) {
 | 
			
		||||
            return vo;
 | 
			
		||||
        }
 | 
			
		||||
        BeanUtils.copyProperties(volumeCatalog, vo);
 | 
			
		||||
        // 关联文件信息
 | 
			
		||||
        List<DesVolumeFile> volumeFiles = this.queryFileListById(volumeCatalog.getId());
 | 
			
		||||
        vo.setFileVoList(volumeFileService.getVoList(volumeFiles));
 | 
			
		||||
        return vo;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 构建查询条件
 | 
			
		||||
     *
 | 
			
		||||
     * @param req 查询条件
 | 
			
		||||
     * @return 查询条件
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public LambdaQueryWrapper<DesVolumeCatalog> buildQueryWrapper(DesVolumeCatalogQueryReq req) {
 | 
			
		||||
        LambdaQueryWrapper<DesVolumeCatalog> lqw = new LambdaQueryWrapper<>();
 | 
			
		||||
        if (req == null) {
 | 
			
		||||
            return lqw;
 | 
			
		||||
        }
 | 
			
		||||
        Long projectId = req.getProjectId();
 | 
			
		||||
        Long designSubitemId = req.getDesignSubitemId();
 | 
			
		||||
        String volumeNumber = req.getVolumeNumber();
 | 
			
		||||
        String documentName = req.getDocumentName();
 | 
			
		||||
        lqw.like(StringUtils.isNotBlank(documentName), DesVolumeCatalog::getDocumentName, documentName);
 | 
			
		||||
        lqw.eq(StringUtils.isNotBlank(volumeNumber), DesVolumeCatalog::getVolumeNumber, volumeNumber);
 | 
			
		||||
        lqw.eq(ObjectUtils.isNotEmpty(projectId), DesVolumeCatalog::getProjectId, projectId);
 | 
			
		||||
        lqw.eq(ObjectUtils.isNotEmpty(designSubitemId), DesVolumeCatalog::getDesignSubitemId, designSubitemId);
 | 
			
		||||
        return lqw;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取卷册目录对象视图
 | 
			
		||||
     *
 | 
			
		||||
     * @param volumeCatalogPage 卷册目录对象
 | 
			
		||||
     * @return 卷册目录对象视图
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public Page<DesVolumeCatalogVo> getVoPage(Page<DesVolumeCatalog> volumeCatalogPage) {
 | 
			
		||||
        List<DesVolumeCatalog> volumeCatalogList = volumeCatalogPage.getRecords();
 | 
			
		||||
        Page<DesVolumeCatalogVo> volumeCatalogVoPage = new Page<>(
 | 
			
		||||
            volumeCatalogPage.getCurrent(),
 | 
			
		||||
            volumeCatalogPage.getSize(),
 | 
			
		||||
            volumeCatalogPage.getTotal());
 | 
			
		||||
        if (CollUtil.isEmpty(volumeCatalogList)) {
 | 
			
		||||
            return volumeCatalogVoPage;
 | 
			
		||||
        }
 | 
			
		||||
        List<DesVolumeCatalogVo> volumeCatalogVoList = volumeCatalogList.stream().map(entity -> {
 | 
			
		||||
            DesVolumeCatalogVo volumeCatalogVo = new DesVolumeCatalogVo();
 | 
			
		||||
            BeanUtils.copyProperties(entity, volumeCatalogVo);
 | 
			
		||||
            return volumeCatalogVo;
 | 
			
		||||
        }).toList();
 | 
			
		||||
        return volumeCatalogVoPage.setRecords(volumeCatalogVoList);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,195 @@
 | 
			
		||||
package org.dromara.design.service.impl;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.collection.CollUtil;
 | 
			
		||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
			
		||||
import jakarta.annotation.Resource;
 | 
			
		||||
import org.dromara.common.core.constant.HttpStatus;
 | 
			
		||||
import org.dromara.common.core.exception.ServiceException;
 | 
			
		||||
import org.dromara.design.domain.DesVolumeCatalog;
 | 
			
		||||
import org.dromara.design.domain.DesVolumeFile;
 | 
			
		||||
import org.dromara.design.domain.DesVolumeFileViewer;
 | 
			
		||||
import org.dromara.design.domain.dto.volumefile.DesVolumeFileCreateReq;
 | 
			
		||||
import org.dromara.design.domain.vo.volumefile.DesVolumeFileVo;
 | 
			
		||||
import org.dromara.design.mapper.DesVolumeFileMapper;
 | 
			
		||||
import org.dromara.design.service.IDesVolumeCatalogService;
 | 
			
		||||
import org.dromara.design.service.IDesVolumeFileService;
 | 
			
		||||
import org.dromara.design.service.IDesVolumeFileViewerService;
 | 
			
		||||
import org.dromara.system.domain.vo.SysOssVo;
 | 
			
		||||
import org.dromara.system.service.ISysOssService;
 | 
			
		||||
import org.springframework.beans.BeanUtils;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
import org.springframework.transaction.annotation.Transactional;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDate;
 | 
			
		||||
import java.time.format.DateTimeFormatter;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 卷册文件Service业务层处理
 | 
			
		||||
 *
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30
 | 
			
		||||
 */
 | 
			
		||||
@Service
 | 
			
		||||
public class DesVolumeFileServiceImpl extends ServiceImpl<DesVolumeFileMapper, DesVolumeFile>
 | 
			
		||||
    implements IDesVolumeFileService {
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private ISysOssService ossService;
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private IDesVolumeCatalogService volumeCatalogService;
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private IDesVolumeFileViewerService volumeFileViewerService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询卷册文件
 | 
			
		||||
     *
 | 
			
		||||
     * @param id 主键
 | 
			
		||||
     * @return 卷册文件
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public DesVolumeFileVo queryById(Long id) {
 | 
			
		||||
        DesVolumeFile volumeFile = getById(id);
 | 
			
		||||
        if (volumeFile == null) {
 | 
			
		||||
            throw new ServiceException("对应卷册文件信息不存在", HttpStatus.NOT_FOUND);
 | 
			
		||||
        }
 | 
			
		||||
        return getVo(volumeFile);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增卷册文件
 | 
			
		||||
     *
 | 
			
		||||
     * @param req 卷册文件
 | 
			
		||||
     * @return 是否新增成功
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    @Transactional(rollbackFor = Exception.class)
 | 
			
		||||
    public Boolean insertByBo(DesVolumeFileCreateReq req) {
 | 
			
		||||
        // 查看卷册是否存在
 | 
			
		||||
        Long volumeCatalogId = req.getVolumeCatalogId();
 | 
			
		||||
        DesVolumeCatalog volumeCatalog = volumeCatalogService.getById(volumeCatalogId);
 | 
			
		||||
        if (volumeCatalog == null) {
 | 
			
		||||
            throw new ServiceException("对应卷册目录不存在", HttpStatus.NOT_FOUND);
 | 
			
		||||
        }
 | 
			
		||||
        // 查看文件是否存在
 | 
			
		||||
        SysOssVo ossVo = ossService.getById(req.getFileId());
 | 
			
		||||
        if (ossVo == null) {
 | 
			
		||||
            throw new ServiceException("对应文件不存在", HttpStatus.NOT_FOUND);
 | 
			
		||||
        }
 | 
			
		||||
        // 判断是否需要废除其他文件
 | 
			
		||||
        List<Long> cancellationIds = req.getCancellationIds();
 | 
			
		||||
        if (CollUtil.isNotEmpty(cancellationIds)) {
 | 
			
		||||
            List<DesVolumeFile> list = this.listByIds(cancellationIds);
 | 
			
		||||
            list.forEach(item -> {
 | 
			
		||||
                String name = item.getFileName();
 | 
			
		||||
                String modified = name.replaceAll("((\\d{8}))", "($1-已作废)");
 | 
			
		||||
                item.setFileName(modified);
 | 
			
		||||
                item.setStatus("2");
 | 
			
		||||
            });
 | 
			
		||||
            boolean update = this.updateBatchById(list);
 | 
			
		||||
            if (!update) {
 | 
			
		||||
                throw new ServiceException("更新卷册文件信息异常", HttpStatus.ERROR);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        DesVolumeFile file = new DesVolumeFile();
 | 
			
		||||
        BeanUtils.copyProperties(req, file);
 | 
			
		||||
        String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
 | 
			
		||||
        file.setFileName(ossVo.getFileName() + "(" + today + ")");
 | 
			
		||||
        // 新增审阅人
 | 
			
		||||
        List<Long> userIds = req.getUserIds();
 | 
			
		||||
        List<DesVolumeFileViewer> viewerList = userIds.stream().map(userId -> {
 | 
			
		||||
            DesVolumeFileViewer viewer = new DesVolumeFileViewer();
 | 
			
		||||
            viewer.setVolumeCatalogId(volumeCatalogId);
 | 
			
		||||
            viewer.setUserId(userId);
 | 
			
		||||
            return viewer;
 | 
			
		||||
        }).toList();
 | 
			
		||||
        if (CollUtil.isNotEmpty(viewerList)) {
 | 
			
		||||
            // 删除以前的审阅人
 | 
			
		||||
            boolean remove = volumeFileViewerService.remove(new LambdaQueryWrapper<DesVolumeFileViewer>()
 | 
			
		||||
                .eq(DesVolumeFileViewer::getVolumeCatalogId, volumeCatalogId));
 | 
			
		||||
            if (!remove) {
 | 
			
		||||
                throw new ServiceException("修改审阅人失败", HttpStatus.ERROR);
 | 
			
		||||
            }
 | 
			
		||||
            boolean result = volumeFileViewerService.saveBatch(viewerList);
 | 
			
		||||
            if (!result) {
 | 
			
		||||
                throw new ServiceException("修改审阅人失败", HttpStatus.ERROR);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        boolean save = this.save(file);
 | 
			
		||||
        if (!save) {
 | 
			
		||||
            throw new ServiceException("新增卷册文件信息异常", HttpStatus.ERROR);
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 批量删除卷册文件信息
 | 
			
		||||
     *
 | 
			
		||||
     * @param ids 待删除的主键集合
 | 
			
		||||
     * @return 是否删除成功
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    @Transactional(rollbackFor = Exception.class)
 | 
			
		||||
    public Boolean deleteByIds(Collection<Long> ids) {
 | 
			
		||||
        return this.removeBatchByIds(ids);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 构建卷册目录封装对象
 | 
			
		||||
     *
 | 
			
		||||
     * @param volumeFile 卷册目录
 | 
			
		||||
     * @return 卷册目录封装对象
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public DesVolumeFileVo getVo(DesVolumeFile volumeFile) {
 | 
			
		||||
        DesVolumeFileVo vo = new DesVolumeFileVo();
 | 
			
		||||
        if (volumeFile == null) {
 | 
			
		||||
            return vo;
 | 
			
		||||
        }
 | 
			
		||||
        BeanUtils.copyProperties(volumeFile, vo);
 | 
			
		||||
        // 关联文件信息
 | 
			
		||||
        Long fileId = volumeFile.getFileId();
 | 
			
		||||
        SysOssVo ossVo = ossService.getById(fileId);
 | 
			
		||||
        vo.setFileUrl(ossVo.getUrl());
 | 
			
		||||
        vo.setFileName(ossVo.getFileName());
 | 
			
		||||
        return vo;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取卷册目录列表视图
 | 
			
		||||
     *
 | 
			
		||||
     * @param volumeFileList 卷册目录列表
 | 
			
		||||
     * @return 卷册目录列表视图
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<DesVolumeFileVo> getVoList(List<DesVolumeFile> volumeFileList) {
 | 
			
		||||
        return volumeFileList.stream().map(this::getVo).toList();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取卷册目录对象视图
 | 
			
		||||
     *
 | 
			
		||||
     * @param volumeFilePage 卷册目录对象
 | 
			
		||||
     * @return 卷册目录对象视图
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public Page<DesVolumeFileVo> getVoPage(Page<DesVolumeFile> volumeFilePage) {
 | 
			
		||||
        List<DesVolumeFile> volumeFileList = volumeFilePage.getRecords();
 | 
			
		||||
        Page<DesVolumeFileVo> volumeFileVoPage = new Page<>(
 | 
			
		||||
            volumeFilePage.getCurrent(),
 | 
			
		||||
            volumeFilePage.getSize(),
 | 
			
		||||
            volumeFilePage.getTotal());
 | 
			
		||||
        if (CollUtil.isEmpty(volumeFileList)) {
 | 
			
		||||
            return volumeFileVoPage;
 | 
			
		||||
        }
 | 
			
		||||
        List<DesVolumeFileVo> volumeFileVoList = volumeFileList.stream().map(this::getVo).toList();
 | 
			
		||||
        volumeFileVoPage.setRecords(volumeFileVoList);
 | 
			
		||||
        return volumeFileVoPage;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,19 @@
 | 
			
		||||
package org.dromara.design.service.impl;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
			
		||||
import org.dromara.design.domain.DesVolumeFileViewer;
 | 
			
		||||
import org.dromara.design.mapper.DesVolumeFileViewerMapper;
 | 
			
		||||
import org.dromara.design.service.IDesVolumeFileViewerService;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 卷册文件查阅人Service业务层处理
 | 
			
		||||
 *
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-30
 | 
			
		||||
 */
 | 
			
		||||
@Service
 | 
			
		||||
public class DesVolumeFileViewerServiceImpl extends ServiceImpl<DesVolumeFileViewerMapper, DesVolumeFileViewer>
 | 
			
		||||
    implements IDesVolumeFileViewerService {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -6,14 +6,13 @@ import jakarta.servlet.http.HttpServletResponse;
 | 
			
		||||
import jakarta.validation.constraints.NotEmpty;
 | 
			
		||||
import jakarta.validation.constraints.NotNull;
 | 
			
		||||
import org.dromara.common.core.domain.R;
 | 
			
		||||
import org.dromara.common.core.validate.AddGroup;
 | 
			
		||||
import org.dromara.common.core.validate.EditGroup;
 | 
			
		||||
import org.dromara.common.excel.utils.ExcelUtil;
 | 
			
		||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
 | 
			
		||||
import org.dromara.common.log.annotation.Log;
 | 
			
		||||
import org.dromara.common.log.enums.BusinessType;
 | 
			
		||||
import org.dromara.common.web.core.BaseController;
 | 
			
		||||
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryCreateReq;
 | 
			
		||||
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryCreatePriceReq;
 | 
			
		||||
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryQueryReq;
 | 
			
		||||
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryUpdateReq;
 | 
			
		||||
import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryCoordinateVo;
 | 
			
		||||
@ -110,14 +109,14 @@ public class PgsProgressCategoryController extends BaseController {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增进度类别
 | 
			
		||||
     * 新增分项工程单价
 | 
			
		||||
     */
 | 
			
		||||
    @SaCheckPermission("progress:progressCategory:add")
 | 
			
		||||
    @Log(title = "进度类别", businessType = BusinessType.INSERT)
 | 
			
		||||
    @RepeatSubmit()
 | 
			
		||||
    @PostMapping()
 | 
			
		||||
    public R<Long> add(@Validated(AddGroup.class) @RequestBody PgsProgressCategoryCreateReq req) {
 | 
			
		||||
        return R.ok(pgsProgressCategoryService.insertByBo(req));
 | 
			
		||||
    @PostMapping("/price")
 | 
			
		||||
    public R<Void> addPrice(@Validated @RequestBody PgsProgressCategoryCreatePriceReq req) {
 | 
			
		||||
        return toAjax(pgsProgressCategoryService.insertPrice(req));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
@ -59,6 +59,21 @@ public class PgsProgressCategory extends BaseEntity {
 | 
			
		||||
     */
 | 
			
		||||
    private String unitType;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 计量单位
 | 
			
		||||
     */
 | 
			
		||||
    private String unit;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 综合单价
 | 
			
		||||
     */
 | 
			
		||||
    private BigDecimal unitPrice;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 产值金额
 | 
			
		||||
     */
 | 
			
		||||
    private BigDecimal outputValue;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 总数量/百分比
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,39 @@
 | 
			
		||||
package org.dromara.progress.domain.dto.progresscategory;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025/5/26 9:46
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class PgsProgressCategoryCreatePriceReq {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 类别id
 | 
			
		||||
     */
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 计量单位
 | 
			
		||||
     */
 | 
			
		||||
    private String unit;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 综合单价
 | 
			
		||||
     */
 | 
			
		||||
    private BigDecimal unitPrice;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 产值金额
 | 
			
		||||
     */
 | 
			
		||||
    private BigDecimal outputValue;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 备注
 | 
			
		||||
     */
 | 
			
		||||
    private String remark;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -1,42 +0,0 @@
 | 
			
		||||
package org.dromara.progress.domain.dto.progresscategory;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025/5/26 9:46
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class PgsProgressCategoryCreateReq {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 父类别id
 | 
			
		||||
     */
 | 
			
		||||
    private Long pid;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 项目id
 | 
			
		||||
     */
 | 
			
		||||
    private Long projectId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 方阵id
 | 
			
		||||
     */
 | 
			
		||||
    private Long matrixId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 类别名称
 | 
			
		||||
     */
 | 
			
		||||
    private String name;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 计量方式(0无 1数量 2百分比)
 | 
			
		||||
     */
 | 
			
		||||
    private String unitType;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 备注
 | 
			
		||||
     */
 | 
			
		||||
    private String remark;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,49 @@
 | 
			
		||||
package org.dromara.progress.domain.dto.progressplan;
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonFormat;
 | 
			
		||||
import jakarta.validation.constraints.NotNull;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-31 11:09
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class PgsProgressPlanCompletionQueryReq implements Serializable {
 | 
			
		||||
 | 
			
		||||
    @Serial
 | 
			
		||||
    private static final long serialVersionUID = -164680742400225346L;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 项目id
 | 
			
		||||
     */
 | 
			
		||||
    @NotNull(message = "项目id不能为空")
 | 
			
		||||
    private Long projectId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 方阵id
 | 
			
		||||
     */
 | 
			
		||||
    private Long matrixId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 进度类型id
 | 
			
		||||
     */
 | 
			
		||||
    private Long progressCategoryId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 开始时间
 | 
			
		||||
     */
 | 
			
		||||
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
 | 
			
		||||
    private Date startDate;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 结束时间
 | 
			
		||||
     */
 | 
			
		||||
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
 | 
			
		||||
    private Date endDate;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,37 @@
 | 
			
		||||
package org.dromara.progress.domain.vo.progressplan;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author lilemy
 | 
			
		||||
 * @date 2025-07-31 11:05
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class PgsProgressPlanCompletionVo implements Serializable {
 | 
			
		||||
 | 
			
		||||
    @Serial
 | 
			
		||||
    private static final long serialVersionUID = -8747773569107876299L;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 子项目id
 | 
			
		||||
     */
 | 
			
		||||
    private Long subProjectId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 子项目名称
 | 
			
		||||
     */
 | 
			
		||||
    private String subProjectName;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 方阵id
 | 
			
		||||
     */
 | 
			
		||||
    private Long matrixId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 方阵名称
 | 
			
		||||
     */
 | 
			
		||||
    private String matrixName;
 | 
			
		||||
}
 | 
			
		||||
@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.service.IService;
 | 
			
		||||
import org.dromara.facility.domain.FacMatrix;
 | 
			
		||||
import org.dromara.progress.domain.PgsProgressCategory;
 | 
			
		||||
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryCreateReq;
 | 
			
		||||
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryCreatePriceReq;
 | 
			
		||||
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryQueryReq;
 | 
			
		||||
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryUpdateReq;
 | 
			
		||||
import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryCoordinateVo;
 | 
			
		||||
@ -48,12 +48,12 @@ public interface IPgsProgressCategoryService extends IService<PgsProgressCategor
 | 
			
		||||
    PgsProgressCategoryLastTimeVo queryLastTimeById(Long id);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增进度类别
 | 
			
		||||
     * 新增分项工程单价
 | 
			
		||||
     *
 | 
			
		||||
     * @param req 进度类别
 | 
			
		||||
     * @return 新增进度类别id
 | 
			
		||||
     * @return 是否新增成功
 | 
			
		||||
     */
 | 
			
		||||
    Long insertByBo(PgsProgressCategoryCreateReq req);
 | 
			
		||||
    Boolean insertPrice(PgsProgressCategoryCreatePriceReq req);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改进度类别
 | 
			
		||||
 | 
			
		||||
@ -7,8 +7,10 @@ import org.dromara.common.mybatis.core.page.PageQuery;
 | 
			
		||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
 | 
			
		||||
import org.dromara.progress.domain.PgsProgressCategory;
 | 
			
		||||
import org.dromara.progress.domain.PgsProgressPlan;
 | 
			
		||||
import org.dromara.progress.domain.dto.progressplan.PgsProgressPlanCompletionQueryReq;
 | 
			
		||||
import org.dromara.progress.domain.dto.progressplan.PgsProgressPlanCreateReq;
 | 
			
		||||
import org.dromara.progress.domain.dto.progressplan.PgsProgressPlanQueryReq;
 | 
			
		||||
import org.dromara.progress.domain.vo.progressplan.PgsProgressPlanCompletionVo;
 | 
			
		||||
import org.dromara.progress.domain.vo.progressplan.PgsProgressPlanVo;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
@ -38,6 +40,15 @@ public interface IPgsProgressPlanService extends IService<PgsProgressPlan> {
 | 
			
		||||
     */
 | 
			
		||||
    TableDataInfo<PgsProgressPlanVo> queryPageList(PgsProgressPlanQueryReq req, PageQuery pageQuery);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 分项工程完成明细列表
 | 
			
		||||
     *
 | 
			
		||||
     * @param req       查询条件
 | 
			
		||||
     * @param pageQuery 分页参数
 | 
			
		||||
     * @return 分项工程完成明细列表
 | 
			
		||||
     */
 | 
			
		||||
    TableDataInfo<PgsProgressPlanCompletionVo> queryPageCompletionDetailList(PgsProgressPlanCompletionQueryReq req, PageQuery pageQuery);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询符合条件的进度计划列表
 | 
			
		||||
     *
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,7 @@ import org.dromara.progress.domain.PgsProgressCategory;
 | 
			
		||||
import org.dromara.progress.domain.PgsProgressCategoryTemplate;
 | 
			
		||||
import org.dromara.progress.domain.PgsProgressPlan;
 | 
			
		||||
import org.dromara.progress.domain.PgsProgressPlanDetail;
 | 
			
		||||
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryCreateReq;
 | 
			
		||||
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryCreatePriceReq;
 | 
			
		||||
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryQueryReq;
 | 
			
		||||
import org.dromara.progress.domain.dto.progresscategory.PgsProgressCategoryUpdateReq;
 | 
			
		||||
import org.dromara.progress.domain.enums.PgsCoordinateTypeEnum;
 | 
			
		||||
@ -156,24 +156,25 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl<PgsProgressCateg
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增进度类别
 | 
			
		||||
     * 新增分项工程单价
 | 
			
		||||
     *
 | 
			
		||||
     * @param req 进度类别
 | 
			
		||||
     * @return 新增进度类别id
 | 
			
		||||
     * @return 是否新增成功
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public Long insertByBo(PgsProgressCategoryCreateReq req) {
 | 
			
		||||
        // 将实体类和 DTO 进行转换
 | 
			
		||||
        PgsProgressCategory progressCategory = new PgsProgressCategory();
 | 
			
		||||
        BeanUtils.copyProperties(req, progressCategory);
 | 
			
		||||
        // 数据校验
 | 
			
		||||
        validEntityBeforeSave(progressCategory);
 | 
			
		||||
        // 写入数据库
 | 
			
		||||
        boolean result = this.save(progressCategory);
 | 
			
		||||
        if (!result) {
 | 
			
		||||
            throw new ServiceException("新增进度类别失败,数据库异常", HttpStatus.ERROR);
 | 
			
		||||
    public Boolean insertPrice(PgsProgressCategoryCreatePriceReq req) {
 | 
			
		||||
        // 查询分项工程是否存在
 | 
			
		||||
        PgsProgressCategory progressCategory = this.getById(req.getId());
 | 
			
		||||
        if (progressCategory == null) {
 | 
			
		||||
            throw new ServiceException("该分项工程不存在", HttpStatus.BAD_REQUEST);
 | 
			
		||||
        }
 | 
			
		||||
        return progressCategory.getId();
 | 
			
		||||
        // 填入数据
 | 
			
		||||
        progressCategory.setUnit(req.getUnit());
 | 
			
		||||
        progressCategory.setUnitPrice(req.getUnitPrice());
 | 
			
		||||
        progressCategory.setOutputValue(req.getOutputValue());
 | 
			
		||||
        progressCategory.setRemark(req.getRemark());
 | 
			
		||||
        // 写入数据库
 | 
			
		||||
        return this.updateById(progressCategory);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
@ -17,11 +17,13 @@ import org.dromara.facility.service.IFacMatrixService;
 | 
			
		||||
import org.dromara.progress.domain.PgsProgressCategory;
 | 
			
		||||
import org.dromara.progress.domain.PgsProgressPlan;
 | 
			
		||||
import org.dromara.progress.domain.PgsProgressPlanDetail;
 | 
			
		||||
import org.dromara.progress.domain.dto.progressplan.PgsProgressPlanCompletionQueryReq;
 | 
			
		||||
import org.dromara.progress.domain.dto.progressplan.PgsProgressPlanCreateReq;
 | 
			
		||||
import org.dromara.progress.domain.dto.progressplan.PgsProgressPlanQueryReq;
 | 
			
		||||
import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailCreateDto;
 | 
			
		||||
import org.dromara.progress.domain.enums.PgsDelayStatusEnum;
 | 
			
		||||
import org.dromara.progress.domain.enums.PgsFinishStatusEnum;
 | 
			
		||||
import org.dromara.progress.domain.vo.progressplan.PgsProgressPlanCompletionVo;
 | 
			
		||||
import org.dromara.progress.domain.vo.progressplan.PgsProgressPlanVo;
 | 
			
		||||
import org.dromara.progress.domain.vo.progressplandetail.PgsProgressPlanDetailNumVo;
 | 
			
		||||
import org.dromara.progress.mapper.PgsProgressPlanMapper;
 | 
			
		||||
@ -92,6 +94,18 @@ public class PgsProgressPlanServiceImpl extends ServiceImpl<PgsProgressPlanMappe
 | 
			
		||||
        return TableDataInfo.build(this.getVoPage(result));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 分项工程完成明细列表
 | 
			
		||||
     *
 | 
			
		||||
     * @param req       查询条件
 | 
			
		||||
     * @param pageQuery 分页参数
 | 
			
		||||
     * @return 分项工程完成明细列表
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public TableDataInfo<PgsProgressPlanCompletionVo> queryPageCompletionDetailList(PgsProgressPlanCompletionQueryReq req, PageQuery pageQuery) {
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询符合条件的进度计划列表
 | 
			
		||||
     *
 | 
			
		||||
@ -353,7 +367,7 @@ public class PgsProgressPlanServiceImpl extends ServiceImpl<PgsProgressPlanMappe
 | 
			
		||||
        List<PgsProgressPlan> delayPlanList = this.list(lqw);
 | 
			
		||||
        if (CollUtil.isEmpty(delayPlanList)) {
 | 
			
		||||
            log.info("无新增延期的施工进度");
 | 
			
		||||
            return true;
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        Map<Long, List<PgsProgressPlan>> delayPlanMap = delayPlanList
 | 
			
		||||
            .stream().collect(Collectors.groupingBy(PgsProgressPlan::getProgressCategoryId));
 | 
			
		||||
 | 
			
		||||
@ -145,6 +145,11 @@ public class BusProject extends BaseEntity {
 | 
			
		||||
     */
 | 
			
		||||
    private String showHidden;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * go项目id
 | 
			
		||||
     */
 | 
			
		||||
    private Long goId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否删除(0正常 1删除)
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
@ -190,4 +190,9 @@ public class BusProjectVo implements Serializable {
 | 
			
		||||
     */
 | 
			
		||||
    private List<Punchrange> punchrangeList;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * go项目id
 | 
			
		||||
     */
 | 
			
		||||
    private Long goId;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -39,4 +39,9 @@ public class BusLoginUserProjectRelevancyVo implements Serializable {
 | 
			
		||||
     * 项目简称
 | 
			
		||||
     */
 | 
			
		||||
    private String shortName;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * go项目id
 | 
			
		||||
     */
 | 
			
		||||
    private Long goId;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -303,7 +303,7 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl<BusUserProje
 | 
			
		||||
            return new ArrayList<>();
 | 
			
		||||
        }
 | 
			
		||||
        Map<Long, List<BusProject>> projectMap = projectService.lambdaQuery()
 | 
			
		||||
            .select(BusProject::getId, BusProject::getPId, BusProject::getProjectName, BusProject::getShortName)
 | 
			
		||||
            .select(BusProject::getId, BusProject::getPId, BusProject::getProjectName, BusProject::getShortName, BusProject::getGoId)
 | 
			
		||||
            .in(BusProject::getId, projectIdList)
 | 
			
		||||
            .eq(BusProject::getPId, BusProjectConstant.PARENT_ID)
 | 
			
		||||
            .list()
 | 
			
		||||
@ -323,6 +323,7 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl<BusUserProje
 | 
			
		||||
                    loginUserProjectRelevancy.setProjectId(projectId);
 | 
			
		||||
                    loginUserProjectRelevancy.setProjectName(project.getProjectName());
 | 
			
		||||
                    loginUserProjectRelevancy.setShortName(project.getShortName());
 | 
			
		||||
                    loginUserProjectRelevancy.setGoId(project.getGoId());
 | 
			
		||||
                    return loginUserProjectRelevancy;
 | 
			
		||||
                }
 | 
			
		||||
                return null;
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,7 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" ?>
 | 
			
		||||
<!DOCTYPE mapper
 | 
			
		||||
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		||||
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 | 
			
		||||
<mapper namespace="org.dromara.design.mapper.DesVolumeCatalogMapper">
 | 
			
		||||
 | 
			
		||||
</mapper>
 | 
			
		||||
@ -0,0 +1,7 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" ?>
 | 
			
		||||
<!DOCTYPE mapper
 | 
			
		||||
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		||||
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 | 
			
		||||
<mapper namespace="org.dromara.design.mapper.DesVolumeFileMapper">
 | 
			
		||||
 | 
			
		||||
</mapper>
 | 
			
		||||
@ -0,0 +1,7 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" ?>
 | 
			
		||||
<!DOCTYPE mapper
 | 
			
		||||
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 | 
			
		||||
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 | 
			
		||||
<mapper namespace="org.dromara.design.mapper.DesVolumeFileViewerMapper">
 | 
			
		||||
 | 
			
		||||
</mapper>
 | 
			
		||||
		Reference in New Issue
	
	Block a user