mitao
昨天 c758c4e55d74a34902dac5752ff4f160118b19bc
资产借用接口
19个文件已修改
2个文件已添加
381 ■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationAssetController.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationStorageController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationAssetBorrowDTO.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationAssetReceiveDTO.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/emums/ApprovalTypeEnum.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/emums/AssetOperateTypeEnum.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationAssetMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationAssetPageQuery.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetService.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationStorageService.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetDetailVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetPageVO.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageGeneralDetailVO.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStoragePropertyDetailVO.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageVehicleDetailVO.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationStorageMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationAssetController.java
@@ -13,6 +13,7 @@
import com.ruoyi.system.vo.asset.OaApprovalApplicationAssetDetailVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
@@ -42,7 +43,7 @@
    @PostMapping("/submit-receive")
    @Log(title = "资产领用申请-提交", businessType = BusinessType.INSERT)
    public R<Void> submitReceive(@Valid @RequestBody OaApprovalApplicationAssetReceiveDTO dto) {
        oaApprovalApplicationAssetService.submitReceive(dto);
        oaApprovalApplicationAssetService.submitReceiveBorrow(dto);
        return R.ok();
    }
@@ -65,9 +66,34 @@
    @ApiOperation("获取资产领用详情")
    @GetMapping("/detail/receive/{id}")
    public R<OaApprovalApplicationAssetDetailVO> getReceiveDetail(@PathVariable Integer id) {
    public R<OaApprovalApplicationAssetDetailVO> getReceiveDetail(@ApiParam(name = "id", value = "审批单ID", required = true) @PathVariable Integer id) {
        OaApprovalApplicationAssetDetailVO detail = oaApprovalApplicationAssetService.getDetail(id);
        return R.ok(detail);
    }
    @ApiOperation("提交资产借用申请")
    @PostMapping("/submit-borrow")
    @Log(title = "资产借用申请-提交", businessType = BusinessType.INSERT)
    public R<Void> submitBorrow(@Valid @RequestBody OaApprovalApplicationAssetReceiveDTO dto) {
        oaApprovalApplicationAssetService.submitReceiveBorrow(dto);
        return R.ok();
    }
    @ApiOperation("获取资产借用申请分页列表")
    @PostMapping("/page-borrow-list")
    public R<IPage<OaApprovalApplicationAssetPageVO>> getBorrowPageList(@RequestBody OaApprovalApplicationAssetPageQuery pageQuery) {
        // 数据权限:非管理员仅能查看本部门
        Long userId = SecurityUtils.getUserId();
        boolean isAdmin = SecurityUtils.isAdmin(userId);
        if (!isAdmin) {
            try {
                pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getDeptId()));
            } catch (Exception e) {
                // ignore parse, leave null if cannot parse
            }
        }
        IPage<OaApprovalApplicationAssetPageVO> page = oaApprovalApplicationAssetService.getBorrowPageList(pageQuery);
        return R.ok(page);
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationStorageController.java
@@ -23,6 +23,7 @@
import com.ruoyi.system.vo.asset.OaApprovalApplicationStorageVehicleDetailVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
@@ -137,28 +138,28 @@
    @ApiOperation("删除资产入库申请")
    @DeleteMapping("/{id}")
    @Log(title = "资产入库申请-删除", businessType = BusinessType.DELETE)
    public R<Void> delete(@PathVariable Integer id) {
        oaApprovalApplicationStorageService.removeById(id);
    public R<Void> delete(@ApiParam(name = "id",value = "审批单ID",required = true) @PathVariable Integer id) {
        oaApprovalApplicationStorageService.removeByApplicationId(id);
        return R.ok();
    }
    @ApiOperation("获取通用资产入库申请详情")
    @GetMapping("/detail/general/{id}")
    public R<OaApprovalApplicationStorageGeneralDetailVO> getGeneralDetail(@PathVariable Integer id) {
    public R<OaApprovalApplicationStorageGeneralDetailVO> getGeneralDetail(@ApiParam(name = "id",value = "审批单ID",required = true) @PathVariable Integer id) {
        OaApprovalApplicationStorageGeneralDetailVO detail = oaApprovalApplicationStorageService.getGeneralDetail(id);
        return R.ok(detail);
    }
    @ApiOperation("获取房产资产入库申请详情")
    @GetMapping("/detail/property/{id}")
    public R<OaApprovalApplicationStoragePropertyDetailVO> getPropertyDetail(@PathVariable Integer id) {
    public R<OaApprovalApplicationStoragePropertyDetailVO> getPropertyDetail(@ApiParam(name = "id",value = "审批单ID",required = true) @PathVariable Integer id) {
        OaApprovalApplicationStoragePropertyDetailVO detail = oaApprovalApplicationStorageService.getPropertyDetail(id);
        return R.ok(detail);
    }
    @ApiOperation("获取车辆资产入库申请详情")
    @GetMapping("/detail/vehicle/{id}")
    public R<OaApprovalApplicationStorageVehicleDetailVO> getVehicleDetail(@PathVariable Integer id) {
    public R<OaApprovalApplicationStorageVehicleDetailVO> getVehicleDetail(@ApiParam(name = "id",value = "审批单ID",required = true) @PathVariable Integer id) {
        OaApprovalApplicationStorageVehicleDetailVO detail = oaApprovalApplicationStorageService.getVehicleDetail(id);
        return R.ok(detail);
    }
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java
@@ -721,7 +721,7 @@
        BorrowDetailVO res = new BorrowDetailVO();
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.BURROW.getCode())
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.BORROW.getCode())
                .orderByAsc(OaApprovalFlowNode::getSortOrder)
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java
@@ -1,23 +1,18 @@
package com.ruoyi.web.controller.api;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.entity.TDept;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.emums.ApprovalTypeEnum;
import com.ruoyi.system.model.*;
import com.ruoyi.system.query.ApprovalDetailQuery;
import com.ruoyi.system.query.ApprovalTodoListQuery;
import com.ruoyi.system.query.NotificationListQuery;
import com.ruoyi.system.service.*;
import com.ruoyi.system.vo.*;
import com.ruoyi.system.vo.system.NotificationVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.util.StringUtils;
@@ -651,7 +646,7 @@
        BorrowDetailVO res = new BorrowDetailVO();
        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.BURROW.getCode())
                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.BORROW.getCode())
                .orderByAsc(OaApprovalFlowNode::getSortOrder)
                .eq(OaApprovalFlowNode::getStatus, 1).list();
        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationAssetBorrowDTO.java
New file
@@ -0,0 +1,68 @@
package com.ruoyi.system.dto.asset;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.List;
/**
 * 资产领用申请 DTO
 */
@Data
@ApiModel("资产借用申请DTO")
public class OaApprovalApplicationAssetBorrowDTO implements Serializable {
    private static final long serialVersionUID = 2025091801L;
    // 公共字段:领用部门、领用人、领用备注
    @ApiModelProperty("操作类型 0-领用,1-借用,2-归还")
    @NotNull(message = "操作类型不能为空")
    private Integer type;
    @ApiModelProperty("领用/借用部门ID")
    @NotNull(message = "领用/借用部门不能为空")
    private Integer deptId;
    @ApiModelProperty("领用/借用部门名称")
    @NotNull(message = "领用/借用部门名称不能为空")
    private String deptName;
    @ApiModelProperty("领用/借用人用户ID")
    private Integer applicantUserId;
    @ApiModelProperty("领用/借用人名称")
    private String applicantName;
    @ApiModelProperty("领用/借用备注")
    private String applicationReason;
    @ApiModelProperty("附件URL,多个使用英文逗号拼接")
    private String attachmentUrl;
    // 独有字段:事项标题、领用日期、资产类型、预计退还日期、领用资产列表
    @ApiModelProperty("事项标题")
    @NotNull(message = "事项标题不能为空")
    private String title;
    @ApiModelProperty("领用/借用日期")
    @NotNull(message = "领用/借用日期不能为空")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate operateTime;
    @ApiModelProperty("资产类型ID")
    @NotNull(message = "资产类型不能为空")
    private Integer assetTypeId;
    @ApiModelProperty("预计退还日期,借用必填")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate expectReturnDate;
    @ApiModelProperty("领用资产列表")
    @NotEmpty(message = "领用资产列表不能为空")
    private List<Integer> assetMainIds;
}
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationAssetReceiveDTO.java
@@ -20,23 +20,27 @@
    private static final long serialVersionUID = 2025091801L;
    // 公共字段:领用部门、领用人、领用备注
    @ApiModelProperty("领用部门ID")
    @NotNull(message = "领用部门不能为空")
    @ApiModelProperty("操作类型 0-领用,1-借用,2-归还")
    @NotNull(message = "操作类型不能为空")
    private Integer type;
    @ApiModelProperty("领用/借用部门ID")
    @NotNull(message = "领用/借用部门不能为空")
    private Integer deptId;
    @ApiModelProperty("领用部门名称")
    @NotNull(message = "领用部门名称不能为空")
    @ApiModelProperty("领用/借用部门名称")
    @NotNull(message = "领用/借用部门名称不能为空")
    private String deptName;
    @ApiModelProperty("领用人用户ID")
    @NotNull(message = "领用人不能为空")
    @ApiModelProperty("领用/借用人用户ID")
    @NotNull(message = "领用/借用人不能为空")
    private Integer applicantUserId;
    @ApiModelProperty("领用人名称")
    @NotNull(message = "领用人名称不能为空")
    @ApiModelProperty("领用/借用人名称")
    @NotNull(message = "领用/借用人名称不能为空")
    private String applicantName;
    @ApiModelProperty("领用备注")
    @ApiModelProperty("领用/借用备注")
    private String applicationReason;
    @ApiModelProperty("附件URL,多个使用英文逗号拼接")
@@ -47,8 +51,8 @@
    @NotNull(message = "事项标题不能为空")
    private String title;
    @ApiModelProperty("领用日期")
    @NotNull(message = "领用日期不能为空")
    @ApiModelProperty("领用/借用日期")
    @NotNull(message = "领用/借用日期不能为空")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate operateTime;
@@ -56,21 +60,13 @@
    @NotNull(message = "资产类型不能为空")
    private Integer assetTypeId;
    @ApiModelProperty("预计退还日期,可为空")
    @ApiModelProperty("预计退还日期,借用必填")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate expectReturnDate;
    @ApiModelProperty("领用资产列表")
    @NotEmpty(message = "领用资产列表不能为空")
    private List<ReceiveAssetItemDTO> assetItems;
    private List<Integer> assetMainIds;
    @Data
    public static class ReceiveAssetItemDTO implements Serializable {
        private static final long serialVersionUID = 1L;
        @ApiModelProperty("资产主表ID")
        @NotNull(message = "资产ID不能为空")
        private Integer assetMainId;
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/emums/ApprovalTypeEnum.java
@@ -12,7 +12,7 @@
    PURCHASE(5, "采购申请"),
    IN_STOCK(6, "资产入库"),
    GRAB(7, "物品领用"),
    BURROW(8, "物品借用"),
    BORROW(8, "物品借用"),
    RETURN(9, "借用归还"),
    ASSET_DISPOSE(10, "资产处置"),
    ASSET_CHANGE(11, "资产表更"),
ruoyi-system/src/main/java/com/ruoyi/system/emums/AssetOperateTypeEnum.java
New file
@@ -0,0 +1,23 @@
package com.ruoyi.system.emums;
import lombok.Getter;
import lombok.AllArgsConstructor;
@Getter
@AllArgsConstructor
public enum AssetOperateTypeEnum {
    RECEIVE(0, "领用"),
    BORROW(1, "借用"),
    RETURN(2, "归还");
    private final Integer code;
    private final String desc;
    public static AssetOperateTypeEnum getEnumByCode(Integer code) {
        for (AssetOperateTypeEnum e : AssetOperateTypeEnum.values()) {
            if (e.code.equals(code)) {
                return e;
            }
        }
        return null;
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationAssetMapper.java
@@ -18,6 +18,6 @@
 */
public interface OaApprovalApplicationAssetMapper extends BaseMapper<OaApprovalApplicationAsset> {
    IPage<OaApprovalApplicationAssetPageVO> selectReceivePage(Page<OaApprovalApplicationAssetPageVO> page,
    IPage<OaApprovalApplicationAssetPageVO> getPageByType(Page<OaApprovalApplicationAssetPageVO> page,
                                                             @Param("query") OaApprovalApplicationAssetPageQuery query);
}
ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationAssetPageQuery.java
@@ -18,7 +18,10 @@
    @ApiModelProperty("关键词(标题/单据号/部门/领用人)")
    private String keyword;
    @ApiModelProperty("部门ID(非管理员时作为数据权限过滤)")
    @ApiModelProperty("部门ID(非管理员时作为数据权限过滤),前端不传")
    private Integer deptId;
    @ApiModelProperty("操作类型 前端不传")
    private Integer type; // 0-领用,1-借用,2-归还
}
ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetService.java
@@ -19,10 +19,10 @@
public interface OaApprovalApplicationAssetService extends IService<OaApprovalApplicationAsset> {
    /**
     * 提交资产领用申请
     * 提交资产领用/归还申请
     * @param dto 领用申请DTO
     */
    void submitReceive(OaApprovalApplicationAssetReceiveDTO dto);
    void submitReceiveBorrow(OaApprovalApplicationAssetReceiveDTO dto);
    /**
     * 获取资产领用申请分页列表
@@ -34,4 +34,11 @@
     * @param id 领用/借用/归还明细表ID(oa_approval_application_asset.id)
     */
    OaApprovalApplicationAssetDetailVO getDetail(Integer id);
    /**
     * 获取借用资产申请列表
     * @param pageQuery
     * @return
     */
    IPage<OaApprovalApplicationAssetPageVO> getBorrowPageList(OaApprovalApplicationAssetPageQuery pageQuery);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationStorageService.java
@@ -55,21 +55,27 @@
    /**
     * 获取通用资产入库申请详情
     * @param storageId 入库申请存储表ID
     * @param approvalApplicationId 入库申请存储表ID
     */
    OaApprovalApplicationStorageGeneralDetailVO getGeneralDetail(Integer storageId);
    OaApprovalApplicationStorageGeneralDetailVO getGeneralDetail(Integer approvalApplicationId);
    /**
     * 获取房产资产入库申请详情
     * @param storageId 入库申请存储表ID
     * @param approvalApplicationId 入库申请存储表ID
     */
    OaApprovalApplicationStoragePropertyDetailVO getPropertyDetail(Integer storageId);
    OaApprovalApplicationStoragePropertyDetailVO getPropertyDetail(Integer approvalApplicationId);
    /**
     * 获取车辆资产入库申请详情
     * @param storageId 入库申请存储表ID
     * @param approvalApplicationId 入库申请存储表ID
     */
    OaApprovalApplicationStorageVehicleDetailVO getVehicleDetail(Integer storageId);
    OaApprovalApplicationStorageVehicleDetailVO getVehicleDetail(Integer approvalApplicationId);
    PageInfo<StorageListVO> pageList(ApprovalDetailQuery query);
    /**
     * 根据审批单ID删除入库申请
     * @param id
     */
    void removeByApplicationId(Integer id);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java
@@ -7,6 +7,7 @@
import com.ruoyi.system.dto.asset.OaApprovalApplicationAssetReceiveDTO;
import com.ruoyi.system.emums.ApprovalStatusEnum;
import com.ruoyi.system.emums.ApprovalTypeEnum;
import com.ruoyi.system.emums.AssetOperateTypeEnum;
import com.ruoyi.system.mapper.OaApprovalApplicationAssetMapper;
import com.ruoyi.system.model.OaApprovalApplicationAsset;
import com.ruoyi.system.model.OaApprovalApplicationAssetItem;
@@ -49,32 +50,33 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void submitReceive(OaApprovalApplicationAssetReceiveDTO dto) {
        if (CollectionUtils.isEmpty(dto.getAssetItems())) {
            throw new ServiceException("领用资产列表不能为空");
    public void submitReceiveBorrow(OaApprovalApplicationAssetReceiveDTO dto) {
        if (CollectionUtils.isEmpty(dto.getAssetMainIds())) {
            throw new ServiceException("领用资产ID列表不能为空");
        }
        // 1. 构建并保存审批主表
        OaApprovalApplications applications = buildOaApprovalApplications(dto);
        // 2. 获取流程首节点,设置当前节点,并保存
        OaApprovalFlowNode firstFlowNode = getFirstFlowNode(ApprovalTypeEnum.GRAB.getCode());
        OaApprovalFlowNode firstFlowNode = getFirstFlowNode(dto.getType().equals(AssetOperateTypeEnum.RECEIVE.getCode()) ?
                ApprovalTypeEnum.GRAB.getCode() : ApprovalTypeEnum.BORROW.getCode());
        applications.setCurrentFlowNodeId(firstFlowNode.getId());
        oaApprovalApplicationsService.save(applications);
        // 3. 创建待办
        oaApprovalTodoService.createApprovalTodos(applications.getId(), applications.getApplicationCode(), firstFlowNode, dto.getDeptId());
        // 4. 保存领用明细
        // 4. 保存领用/借用明细
        OaApprovalApplicationAsset detail = buildOaApprovalApplicationAsset(dto, applications.getId());
        this.save(detail);
        // 5. 保存关联的资产项
        List<OaApprovalApplicationAssetItem> items = dto.getAssetItems().stream()
        List<OaApprovalApplicationAssetItem> items = dto.getAssetMainIds().stream()
                .map(i -> {
                    OaApprovalApplicationAssetItem item = new OaApprovalApplicationAssetItem();
                    item.setApprovalApplicationId(applications.getId());
                    item.setAssetMainId(i.getAssetMainId());
                    item.setAssetMainId(i);
                    return item;
                })
                .collect(Collectors.toList());
@@ -115,8 +117,7 @@
        asset.setTitle(dto.getTitle());
        asset.setAssetTypeId(dto.getAssetTypeId());
        asset.setOperateTime(dto.getOperateTime());
        asset.setExpectReturnDate(dto.getExpectReturnDate());
        asset.setType(0); // 0-领用
        asset.setType(AssetOperateTypeEnum.RECEIVE.getCode());
        return asset;
    }
@@ -139,19 +140,21 @@
    @Override
    public IPage<OaApprovalApplicationAssetPageVO> getReceivePageList(OaApprovalApplicationAssetPageQuery pageQuery) {
        Page<OaApprovalApplicationAssetPageVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
        return this.baseMapper.selectReceivePage(page, pageQuery);
        pageQuery.setType(0);//领用
        return this.baseMapper.getPageByType(page, pageQuery);
    }
    @Override
    public OaApprovalApplicationAssetDetailVO getDetail(Integer id) {
        OaApprovalApplicationAsset detail = this.getById(id);
        if (detail == null) {
            throw new ServiceException("记录不存在");
        }
        OaApprovalApplications app = oaApprovalApplicationsService.getById(detail.getApprovalApplicationId());
        OaApprovalApplications app = oaApprovalApplicationsService.getById(id);
        if (app == null) {
            throw new ServiceException("审批主记录不存在");
        }
        OaApprovalApplicationAsset detail = this.lambdaQuery().eq(OaApprovalApplicationAsset::getApprovalApplicationId, app.getId()).one();
        if (detail == null) {
            throw new ServiceException("记录不存在");
        }
        List<OaApprovalApplicationAssetItem> items = oaApprovalApplicationAssetItemService.lambdaQuery()
                .eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, app.getId())
                .list();
@@ -160,4 +163,11 @@
        vo.setItems(items);
        return vo;
    }
    @Override
    public IPage<OaApprovalApplicationAssetPageVO> getBorrowPageList(OaApprovalApplicationAssetPageQuery pageQuery) {
        Page<OaApprovalApplicationAssetPageVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
        pageQuery.setType(1);
        return this.baseMapper.getPageByType(page, pageQuery);
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java
@@ -523,14 +523,15 @@
    }
    @Override
    public OaApprovalApplicationStorageGeneralDetailVO getGeneralDetail(Integer storageId) {
        OaApprovalApplicationStorage storage = this.getById(storageId);
        if (storage == null) {
            throw new ServiceException("入库申请不存在");
        }
        OaApprovalApplications app = oaApprovalApplicationsService.getById(storage.getApprovalApplicationId());
    public OaApprovalApplicationStorageGeneralDetailVO getGeneralDetail(Integer approvalApplicationId) {
        OaApprovalApplications app = oaApprovalApplicationsService.getById(approvalApplicationId);
        if (app == null) {
            throw new ServiceException("审批主记录不存在");
        }
        OaApprovalApplicationStorage storage = this.lambdaQuery()
                .eq(OaApprovalApplicationStorage::getApprovalApplicationId, approvalApplicationId).one();
        if (storage == null) {
            throw new ServiceException("入库申请不存在");
        }
        OaApprovalApplicationStorageGeneralDetailVO vo = new OaApprovalApplicationStorageGeneralDetailVO();
@@ -549,18 +550,18 @@
            // 批量查询使用部门
            List<Integer> useDeptIds = mains.stream().map(OaApprovalApplicationStorageAsset::getUseDeptId)
                    .filter(Objects::nonNull).distinct().collect(Collectors.toList());
            Map<Integer, TDept> useDeptMap = ownerIds.isEmpty() ? Collections.emptyMap()
            Map<Integer, TDept> useDeptMap = useDeptIds.isEmpty() ? Collections.emptyMap()
                    : tDeptService.listByIds(useDeptIds).stream().collect(Collectors.toMap(TDept::getId, d -> d));
            // 批量查询仓库
            List<Integer> warehouseIds = mains.stream().map(OaApprovalApplicationStorageAsset::getWarehouseId)
                    .filter(Objects::nonNull).distinct().collect(Collectors.toList());
            Map<Integer, AssetWarehouse> warehouseMap = warehouseIds.isEmpty() ? Collections.emptyMap()
                    : assetWarehouseService.listByIds(useDeptIds).stream().collect(Collectors.toMap(AssetWarehouse::getId, d -> d));
                    : assetWarehouseService.listByIds(warehouseIds).stream().collect(Collectors.toMap(AssetWarehouse::getId, d -> d));
            List<OaApprovalApplicationStorageGeneralDetailVO.GeneralAssetItemVO> items = mains.stream().map(m -> {
                OaApprovalApplicationStorageGeneralDetailVO.GeneralAssetItemVO item = BeanUtil.copyProperties(m, OaApprovalApplicationStorageGeneralDetailVO.GeneralAssetItemVO.class);
                if (m.getOwnershipDeptId() != null) {
                    TDept dept = ownerDeptMap.get(m.getOwnershipDeptId());
                    item.setOwnerShipDeptName(dept != null ? dept.getDeptName() : null);
                    item.setOwnershipDeptName(dept != null ? dept.getDeptName() : null);
                }
                if (m.getAddressType().equals(0) && m.getUseDeptId() != null) {
                    TDept dept = useDeptMap.get(m.getUseDeptId());
@@ -577,14 +578,15 @@
    }
    @Override
    public OaApprovalApplicationStoragePropertyDetailVO getPropertyDetail(Integer storageId) {
        OaApprovalApplicationStorage storage = this.getById(storageId);
        if (storage == null) {
            throw new ServiceException("入库申请不存在");
        }
        OaApprovalApplications app = oaApprovalApplicationsService.getById(storage.getApprovalApplicationId());
    public OaApprovalApplicationStoragePropertyDetailVO getPropertyDetail(Integer approvalApplicationId) {
        OaApprovalApplications app = oaApprovalApplicationsService.getById(approvalApplicationId);
        if (app == null) {
            throw new ServiceException("审批主记录不存在");
        }
        OaApprovalApplicationStorage storage = this.lambdaQuery()
                .eq(OaApprovalApplicationStorage::getApprovalApplicationId, approvalApplicationId).one();
        if (storage == null) {
            throw new ServiceException("入库申请不存在");
        }
        OaApprovalApplicationStoragePropertyDetailVO vo = new OaApprovalApplicationStoragePropertyDetailVO();
@@ -607,19 +609,19 @@
            // 批量查询使用部门
            List<Integer> useDeptIds = mains.stream().map(OaApprovalApplicationStorageAsset::getUseDeptId)
                    .filter(Objects::nonNull).distinct().collect(Collectors.toList());
            Map<Integer, TDept> useDeptMap = ownerIds.isEmpty() ? Collections.emptyMap()
            Map<Integer, TDept> useDeptMap = useDeptIds.isEmpty() ? Collections.emptyMap()
                    : tDeptService.listByIds(useDeptIds).stream().collect(Collectors.toMap(TDept::getId, d -> d));
            // 批量查询仓库
            List<Integer> warehouseIds = mains.stream().map(OaApprovalApplicationStorageAsset::getWarehouseId)
                    .filter(Objects::nonNull).distinct().collect(Collectors.toList());
            Map<Integer, AssetWarehouse> warehouseMap = warehouseIds.isEmpty() ? Collections.emptyMap()
                    : assetWarehouseService.listByIds(useDeptIds).stream().collect(Collectors.toMap(AssetWarehouse::getId, d -> d));
                    : assetWarehouseService.listByIds(warehouseIds).stream().collect(Collectors.toMap(AssetWarehouse::getId, d -> d));
            List<OaApprovalApplicationStoragePropertyDetailVO.PropertyAssetItemVO> items = mains.stream().map(m -> {
                OaApprovalApplicationStoragePropertyDetailVO.PropertyAssetItemVO item = BeanUtil.copyProperties(m, OaApprovalApplicationStoragePropertyDetailVO.PropertyAssetItemVO.class);
                if (m.getOwnershipDeptId() != null) {
                    TDept dept = ownerDeptMap.get(m.getOwnershipDeptId());
                    item.setOwnerShipDeptName(dept != null ? dept.getDeptName() : null);
                    item.setOwnershipDeptName(dept != null ? dept.getDeptName() : null);
                }
                if (m.getAddressType().equals(0) && m.getUseDeptId() != null) {
                    TDept dept = useDeptMap.get(m.getUseDeptId());
@@ -655,14 +657,15 @@
    }
    @Override
    public OaApprovalApplicationStorageVehicleDetailVO getVehicleDetail(Integer storageId) {
        OaApprovalApplicationStorage storage = this.getById(storageId);
        if (storage == null) {
            throw new ServiceException("入库申请不存在");
        }
        OaApprovalApplications app = oaApprovalApplicationsService.getById(storage.getApprovalApplicationId());
    public OaApprovalApplicationStorageVehicleDetailVO getVehicleDetail(Integer approvalApplicationId) {
        OaApprovalApplications app = oaApprovalApplicationsService.getById(approvalApplicationId);
        if (app == null) {
            throw new ServiceException("审批主记录不存在");
        }
        OaApprovalApplicationStorage storage = this.lambdaQuery()
                .eq(OaApprovalApplicationStorage::getApprovalApplicationId, approvalApplicationId).one();
        if (storage == null) {
            throw new ServiceException("入库申请不存在");
        }
        OaApprovalApplicationStorageVehicleDetailVO vo = new OaApprovalApplicationStorageVehicleDetailVO();
@@ -685,18 +688,18 @@
            // 批量查询使用部门
            List<Integer> useDeptIds = mains.stream().map(OaApprovalApplicationStorageAsset::getUseDeptId)
                    .filter(Objects::nonNull).distinct().collect(Collectors.toList());
            Map<Integer, TDept> useDeptMap = ownerIds.isEmpty() ? Collections.emptyMap()
            Map<Integer, TDept> useDeptMap = useDeptIds.isEmpty() ? Collections.emptyMap()
                    : tDeptService.listByIds(useDeptIds).stream().collect(Collectors.toMap(TDept::getId, d -> d));
            // 批量查询仓库
            List<Integer> warehouseIds = mains.stream().map(OaApprovalApplicationStorageAsset::getWarehouseId)
                    .filter(Objects::nonNull).distinct().collect(Collectors.toList());
            Map<Integer, AssetWarehouse> warehouseMap = warehouseIds.isEmpty() ? Collections.emptyMap()
                    : assetWarehouseService.listByIds(useDeptIds).stream().collect(Collectors.toMap(AssetWarehouse::getId, d -> d));
                    : assetWarehouseService.listByIds(warehouseIds).stream().collect(Collectors.toMap(AssetWarehouse::getId, d -> d));
            List<OaApprovalApplicationStorageVehicleDetailVO.VehicleAssetItemVO> items = mains.stream().map(m -> {
                OaApprovalApplicationStorageVehicleDetailVO.VehicleAssetItemVO item = BeanUtil.copyProperties(m, OaApprovalApplicationStorageVehicleDetailVO.VehicleAssetItemVO.class);
                if (m.getOwnershipDeptId() != null) {
                    TDept dept = ownerDeptMap.get(m.getOwnershipDeptId());
                    item.setOwnerShipDeptName(dept != null ? dept.getDeptName() : null);
                    item.setOwnershipDeptName(dept != null ? dept.getDeptName() : null);
                }
                if (m.getAddressType().equals(0) && m.getUseDeptId() != null) {
                    TDept dept = useDeptMap.get(m.getUseDeptId());
@@ -730,6 +733,7 @@
            v.setDeptName(app.getDeptName());
            v.setApplicantUserId(app.getApplicantUserId());
            v.setApplicantName(app.getApplicantName());
            v.setApprovalStatus(app.getApprovalStatus());
            v.setApplicationDate(app.getApplicationDate());
            v.setApplicationReason(app.getApplicationReason());
            v.setAttachmentUrl(app.getAttachmentUrl());
@@ -743,6 +747,7 @@
            v.setDeptName(app.getDeptName());
            v.setApplicantUserId(app.getApplicantUserId());
            v.setApplicantName(app.getApplicantName());
            v.setApprovalStatus(app.getApprovalStatus());
            v.setApplicationDate(app.getApplicationDate());
            v.setApplicationReason(app.getApplicationReason());
            v.setAttachmentUrl(app.getAttachmentUrl());
@@ -756,6 +761,7 @@
            v.setDeptName(app.getDeptName());
            v.setApplicantUserId(app.getApplicantUserId());
            v.setApplicantName(app.getApplicantName());
            v.setApprovalStatus(app.getApprovalStatus());
            v.setApplicationDate(app.getApplicationDate());
            v.setApplicationReason(app.getApplicationReason());
            v.setAttachmentUrl(app.getAttachmentUrl());
@@ -773,4 +779,13 @@
        pageInfo.setRecords(list);
        return pageInfo;
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void removeByApplicationId(Integer id) {
        //删除入库申请相关数据
        this.lambdaUpdate().eq(OaApprovalApplicationStorage::getApprovalApplicationId, id).remove();
        //删除入库申请单
        oaApprovalApplicationsService.removeById(id);
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetDetailVO.java
@@ -42,7 +42,7 @@
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate applicationDate;
    @ApiModelProperty(value = "事由/原因/说明")
    @ApiModelProperty(value = "事由/原因/说明/备注")
    private String applicationReason;
    @ApiModelProperty(value = "审批状态 0-草稿,1-待审批,2-审批通过,3-审批拒绝 ,4-已撤回")
@@ -64,6 +64,7 @@
    private LocalDate operateTime;
    @ApiModelProperty(value = "预计退还日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate expectReturnDate;
    @ApiModelProperty(value = "操作类型 0-领用,1-借用,2-归还")
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetPageVO.java
@@ -25,10 +25,10 @@
    @ApiModelProperty("标题")
    private String title;
    @ApiModelProperty("领用部门")
    @ApiModelProperty("领用/借用部门")
    private String deptName;
    @ApiModelProperty("领用人")
    @ApiModelProperty("领用/借用人")
    private String applicantName;
    @ApiModelProperty("资产一级类型名称")
@@ -37,11 +37,14 @@
    @ApiModelProperty("资产二级类型名称")
    private String secondAssetTypeName;
    @ApiModelProperty("领用日期")
    @ApiModelProperty("领用/借用日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate operateTime;
    @ApiModelProperty("状态 0-草稿,1-待审批,2-通过,3-拒绝,4-撤回")
    private Integer approvalStatus;
    @ApiModelProperty("归还状态 0-待归还,1-部分归还,2-全部归还")
    private Integer returnStatus;
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageGeneralDetailVO.java
@@ -29,6 +29,9 @@
    @ApiModelProperty(value = "申请人姓名")
    private String applicantName;
    @ApiModelProperty(value = "审批状态 0-草稿,1-待审批,2-审批通过,3-审批拒绝 ,4-已撤回")
    private Integer approvalStatus;
    @ApiModelProperty(value = "申请日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate applicationDate;
@@ -58,11 +61,18 @@
    @Data
    @ApiModel("通用资产明细VO")
    public static class GeneralAssetItemVO implements Serializable {
        @ApiModelProperty(value = "资产主表ID")
        private Integer id;
        @ApiModelProperty(value = "资产原编码")
        private String assetOriginalCode;
        @ApiModelProperty(value = "资产名称")
        private String assetName;
        @ApiModelProperty(value = "类别")
        private String category;
        @ApiModelProperty(value = "规格型号")
        private String specificationModel;
@@ -80,7 +90,7 @@
        private Integer usefulLife;
        @ApiModelProperty(value = "权属单位/部门名称")
        private String ownerShipDeptName;
        private String ownershipDeptName;
        @ApiModelProperty(value = "使用人")
        private String userName;
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStoragePropertyDetailVO.java
@@ -29,6 +29,9 @@
    @ApiModelProperty(value = "申请人姓名")
    private String applicantName;
    @ApiModelProperty(value = "审批状态 0-草稿,1-待审批,2-审批通过,3-审批拒绝 ,4-已撤回")
    private Integer approvalStatus;
    @ApiModelProperty(value = "申请日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate applicationDate;
@@ -58,11 +61,17 @@
    @Data
    @ApiModel("房产资产明细VO")
    public static class PropertyAssetItemVO implements Serializable {
        @ApiModelProperty(value = "资产主表ID")
        private Integer id;
        @ApiModelProperty(value = "资产原编码")
        private String assetOriginalCode;
        @ApiModelProperty(value = "资产名称")
        private String assetName;
        @ApiModelProperty(value = "类别")
        private String category;
        @ApiModelProperty(value = "规格型号")
        private String specificationModel;
@@ -80,7 +89,7 @@
        private Integer usefulLife;
        @ApiModelProperty(value = "权属单位/部门名称")
        private String ownerShipDeptName;
        private String ownershipDeptName;
        @ApiModelProperty(value = "使用人")
        private String userName;
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageVehicleDetailVO.java
@@ -29,6 +29,9 @@
    @ApiModelProperty(value = "申请人姓名")
    private String applicantName;
    @ApiModelProperty(value = "审批状态 0-草稿,1-待审批,2-审批通过,3-审批拒绝 ,4-已撤回")
    private Integer approvalStatus;
    @ApiModelProperty(value = "申请日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate applicationDate;
@@ -58,11 +61,17 @@
    @Data
    @ApiModel("车辆资产明细VO")
    public static class VehicleAssetItemVO implements Serializable {
        @ApiModelProperty(value = "资产主表ID")
        private Integer id;
        @ApiModelProperty(value = "资产原编码")
        private String assetOriginalCode;
        @ApiModelProperty(value = "资产名称")
        private String assetName;
        @ApiModelProperty(value = "类别")
        private String category;
        @ApiModelProperty(value = "规格型号")
        private String specificationModel;
@@ -80,7 +89,7 @@
        private Integer usefulLife;
        @ApiModelProperty(value = "权属单位/部门名称")
        private String ownerShipDeptName;
        private String ownershipDeptName;
        @ApiModelProperty(value = "使用人")
        private String userName;
ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml
@@ -20,9 +20,9 @@
</sql>
    <!-- 分页查询:资产领用申请列表(关联审批记录与资产类型) -->
    <select id="selectReceivePage" resultType="com.ruoyi.system.vo.asset.OaApprovalApplicationAssetPageVO">
    <select id="getPageByType" resultType="com.ruoyi.system.vo.asset.OaApprovalApplicationAssetPageVO">
        SELECT
            oaa.id                               AS id,
            aaa.id                               AS id,
            aaa.application_code                 AS applicationCode,
            oaa.title                            AS title,
            aaa.dept_name                        AS deptName,
@@ -31,13 +31,14 @@
            CASE WHEN at2.level = 2 THEN at2.type_name ELSE NULL END         AS secondAssetTypeName,
            oaa.operate_time                     AS operateTime,
            aaa.approval_status                  AS approvalStatus
            oaa.return_status                     AS returnStatus
        FROM oa_approval_application_asset oaa
                 INNER JOIN oa_approval_applications aaa ON aaa.id = oaa.approval_application_id
                 LEFT JOIN asset_type at2 ON at2.id = oaa.asset_type_id
                 LEFT JOIN asset_type at1 ON at1.id = (CASE WHEN at2.level = 2 THEN at2.parent_id ELSE at2.id END)
        <where>
            AND aaa.disabled = 0
            AND oaa.type = 0
            AND oaa.type = #{query.type}
            <if test="query != null and query.keyword != null and query.keyword != ''">
                AND (
                    oaa.title LIKE CONCAT('%', #{query.keyword}, '%')
ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationStorageMapper.xml
@@ -20,7 +20,7 @@
    <!-- 分页查询:资产入库申请列表(关联审批记录与资产类型) -->
    <select id="selectApplicationStoragePage" resultType="com.ruoyi.system.vo.asset.OaApprovalApplicationStoragePageVO">
        SELECT
            oas.id                               AS id,
            aaa.id                               AS id,
            oas.asset_type_id                    AS assetTypeId,
            aaa.dept_name                        AS deptName,
            aaa.application_code                 AS applicationCode,