mitao
7 天以前 1093b185322515aebcccee208018346e7f9edbb3
资产盘点任务接口
1 文件已重命名
14个文件已修改
2个文件已添加
423 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetInventoryTaskController.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRecordController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetInventoryTaskItemUpdateDTO.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetInventoryUserUpdateDTO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetRepairRecordAddDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/emums/AssetInventoryTaskStatusEnum.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/AssetInventoryTask.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/AssetInventoryTaskItem.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/InventoryTaskQuery.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/AssetInventoryTaskService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/AssetRepairRecordService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetInventoryTaskServiceImpl.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetRepairRecordServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetMainInventoryVO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetMainPageVO.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/AssetInventoryTaskMapper.xml 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/AssetMainMapper.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetInventoryTaskController.java
@@ -5,6 +5,7 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.dto.asset.AssetInventoryTaskDTO;
import com.ruoyi.system.dto.asset.AssetInventoryTaskItemDTO;
import com.ruoyi.system.dto.asset.AssetInventoryTaskItemUpdateDTO;
import com.ruoyi.system.dto.asset.AssetInventoryUserUpdateDTO;
import com.ruoyi.system.query.AssertInventoryQuery;
import com.ruoyi.system.query.InventoryTaskQuery;
@@ -114,7 +115,7 @@
    @ApiOperation("开始盘点")
    @GetMapping("/start/{id}")
    public R<?> start( @ApiParam(name = "id", value = "盘点任务ID", required = true)
    public R<?> start(@ApiParam(name = "id", value = "盘点任务ID", required = true)
                           @PathVariable Integer id){
        assetInventoryTaskService.start(id);
        return R.ok();
@@ -132,9 +133,27 @@
    @ApiOperation("盘点结果处理")
    @PostMapping("/result")
    public R<?> handleResult(@RequestBody List<AssetInventoryTaskItemDTO> dtoList) {
    public R<?> handleResult(@Valid @RequestBody List<AssetInventoryTaskItemDTO> dtoList) {
        assetInventoryTaskService.handleResult(dtoList);
        return R.ok();
    }
    @ApiOperation("取消盘点")
    @PostMapping("/cancel/{id}")
    public R<?> cancel (@ApiParam(name = "id", value = "盘点任务ID", required = true)
                            @PathVariable Integer id){
        if (assetInventoryTaskService.cancel(id)) {
            return R.ok();
        } else {
            return R.fail("取消失败");
        }
    }
    @ApiOperation("保存盘点")
    @PostMapping("/save")
    public R<?> saveInventory(@Valid @RequestBody List<AssetInventoryTaskItemUpdateDTO> dtoList) {
        assetInventoryTaskService.saveInventory(dtoList);
        return R.ok();
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRecordController.java
@@ -5,7 +5,7 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.constants.AssetDeptConstant;
import com.ruoyi.system.dto.AssetRepairRecordAddDTO;
import com.ruoyi.system.dto.asset.AssetRepairRecordAddDTO;
import com.ruoyi.system.dto.asset.AssetRepairCompleteDTO;
import com.ruoyi.system.query.AssetRepairRecordPageQuery;
import com.ruoyi.system.service.AssetRepairRecordService;
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetInventoryTaskItemUpdateDTO.java
New file
@@ -0,0 +1,32 @@
package com.ruoyi.system.dto.asset;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
 * @author mitao
 * @date 2025/10/13
 */
@Data
@ApiModel("保存盘点数据传输对象")
public class AssetInventoryTaskItemUpdateDTO {
    @ApiModelProperty("盘点任务关联表ID")
    @NotNull(message = "盘点任务关联表ID不能为空")
    private Integer assetInventoryTaskItemId;
    @ApiModelProperty(value = "盘点结果 0-未盘点,1-正常,2-异常")
    private Integer resultStatus;
    @ApiModelProperty(value = "实存部门名称")
    private String realDeptName;
    @ApiModelProperty(value = "实存使用人")
    private String realUserName;
    @ApiModelProperty(value = "异常说明")
    private String exceptionExplain;
}
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetInventoryUserUpdateDTO.java
@@ -4,8 +4,10 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
/**
 * 修改盘点人DTO
@@ -24,8 +26,8 @@
    private Integer taskId;
    @ApiModelProperty("资产ID")
    @NotNull(message = "资产ID不能为空")
    private Integer assetId;
    @NotEmpty(message = "资产ID列表不能为空")
    private List<Integer> assetIds;
    @ApiModelProperty("用户ID")
    @NotNull(message = "用户ID不能为空")
ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetRepairRecordAddDTO.java
File was renamed from ruoyi-system/src/main/java/com/ruoyi/system/dto/AssetRepairRecordAddDTO.java
@@ -1,4 +1,4 @@
package com.ruoyi.system.dto;
package com.ruoyi.system.dto.asset;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
ruoyi-system/src/main/java/com/ruoyi/system/emums/AssetInventoryTaskStatusEnum.java
New file
@@ -0,0 +1,24 @@
package com.ruoyi.system.emums;
import lombok.Getter;
import lombok.AllArgsConstructor;
@Getter
@AllArgsConstructor
public enum AssetInventoryTaskStatusEnum {
    NOT_STARTED(0, "未开始"),
    IN_PROGRESS(1, "进行中"),
    COMPLETED(2, "已完成"),
    CANCELED(3, "已取消");
    private final Integer code;
    private final String desc;
    public static AssetInventoryTaskStatusEnum getEnumByCode(Integer code) {
        for (AssetInventoryTaskStatusEnum e : AssetInventoryTaskStatusEnum.values()) {
            if (e.code.equals(code)) {
                return e;
            }
        }
        return null;
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/model/AssetInventoryTask.java
@@ -49,8 +49,8 @@
    @ApiModelProperty(value = "盘点日期")
    @TableField("execute_date")
    private LocalDate executeDate;
    @ApiModelProperty(value = "盘点状态 0-未开始,1-进行中,2-已完成")
//0:未开始;1:进行中;2:已完成;3:已取消;
    @ApiModelProperty(value = "盘点状态 0-未开始,1-进行中,2-已完成, 3-已取消")
    @TableField("status")
    private Integer status;
ruoyi-system/src/main/java/com/ruoyi/system/model/AssetInventoryTaskItem.java
@@ -50,9 +50,13 @@
    @TableField("real_dept_id")
    private Integer realDeptId;
    @ApiModelProperty(value = "实存部门名称")
    @TableField("real_dept_name")
    private String realDeptName;
    @ApiModelProperty(value = "实存使用人")
    @TableField("real_user_id")
    private Integer realUserId;
    @TableField("real_user_name")
    private String realUserName;
    @ApiModelProperty(value = "异常说明")
    @TableField("exception_explain")
ruoyi-system/src/main/java/com/ruoyi/system/query/InventoryTaskQuery.java
@@ -14,7 +14,7 @@
 */
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel("资产盘点分页列表query")
@ApiModel("资产盘点任务分页列表query")
public class InventoryTaskQuery extends BasePage {
    private static final long serialVersionUID = 5972537443752522968L;
ruoyi-system/src/main/java/com/ruoyi/system/service/AssetInventoryTaskService.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.dto.asset.AssetInventoryTaskDTO;
import com.ruoyi.system.dto.asset.AssetInventoryTaskItemDTO;
import com.ruoyi.system.dto.asset.AssetInventoryTaskItemUpdateDTO;
import com.ruoyi.system.dto.asset.AssetInventoryUserUpdateDTO;
import com.ruoyi.system.model.AssetInventoryTask;
import com.ruoyi.system.query.AssertInventoryQuery;
@@ -86,4 +87,16 @@
     * @param dtoList
     */
    void handleResult(List<AssetInventoryTaskItemDTO> dtoList);
    /**
     * 取消盘点
     * @param id
     */
    boolean cancel(Integer id);
    /**
     * 保存盘点
     * @param dtoList
     */
    void saveInventory(List<AssetInventoryTaskItemUpdateDTO> dtoList);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/AssetRepairRecordService.java
@@ -3,7 +3,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.system.dto.AssetRepairRecordAddDTO;
import com.ruoyi.system.dto.asset.AssetRepairRecordAddDTO;
import com.ruoyi.system.dto.asset.AssetRepairCompleteDTO;
import com.ruoyi.system.model.AssetRepairRecord;
import com.ruoyi.system.query.AssetRepairRecordPageQuery;
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetInventoryTaskServiceImpl.java
@@ -1,6 +1,7 @@
package com.ruoyi.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -12,7 +13,9 @@
import com.ruoyi.system.constants.AssetDeptConstant;
import com.ruoyi.system.dto.asset.AssetInventoryTaskDTO;
import com.ruoyi.system.dto.asset.AssetInventoryTaskItemDTO;
import com.ruoyi.system.dto.asset.AssetInventoryTaskItemUpdateDTO;
import com.ruoyi.system.dto.asset.AssetInventoryUserUpdateDTO;
import com.ruoyi.system.emums.AssetInventoryTaskStatusEnum;
import com.ruoyi.system.mapper.AssetInventoryTaskMapper;
import com.ruoyi.system.model.AssetInventoryRecord;
import com.ruoyi.system.model.AssetInventoryTask;
@@ -208,6 +211,7 @@
        // 1. 查询所有有效的盘点任务,支持筛选条件
        LambdaQueryWrapper<AssetInventoryTask> taskWrapper = new LambdaQueryWrapper<>();
        taskWrapper.eq(AssetInventoryTask::getDisabled, false)
                .ne(AssetInventoryTask::getStatus, AssetInventoryTaskStatusEnum.CANCELED.getCode())
                   .orderByDesc(AssetInventoryTask::getCreateTime);
        // 按部门筛选
        if (hasNoPermission) {
@@ -399,24 +403,24 @@
        // 3. 查询并更新对应的资产盘点项
        LambdaQueryWrapper<AssetInventoryTaskItem> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(AssetInventoryTaskItem::getInventoryTaskId, dto.getTaskId())
               .eq(AssetInventoryTaskItem::getAssetMainId, dto.getAssetId());
               .in(AssetInventoryTaskItem::getAssetMainId, dto.getAssetIds());
        AssetInventoryTaskItem taskItem = assetInventoryTaskItemService.getOne(wrapper);
        if (taskItem == null) {
        List<AssetInventoryTaskItem> taskItems = assetInventoryTaskItemService.list(wrapper);
        if (CollUtil.isEmpty(taskItems)) {
            throw new ServiceException("未找到对应的盘点资产项");
        }
        // 4. 更新盘点人
        String currentUserName = SecurityUtils.getLoginUser().getUser().getNickName();
        taskItem.setUserId(dto.getUserId());
        boolean updated = assetInventoryTaskItemService.updateById(taskItem);
        taskItems.forEach(item->item.setUserId(dto.getUserId()));
        boolean updated = assetInventoryTaskItemService.updateBatchById(taskItems);
        if (!updated) {
            throw new ServiceException("修改盘点人失败");
        }
        log.info("成功修改盘点人,任务ID:{},资产ID:{},新盘点人ID:{},操作人:{}",
                dto.getTaskId(), dto.getAssetId(), dto.getUserId(), currentUserName);
                dto.getTaskId(), dto.getAssetIds(), dto.getUserId(), currentUserName);
    }
    /**
@@ -456,6 +460,7 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void handleResult(List<AssetInventoryTaskItemDTO> dtoList) {
        Map<Integer, Integer> taskItemMap = dtoList.stream()
                .collect(Collectors.toMap(AssetInventoryTaskItemDTO::getAssetInventoryTaskItemId, AssetInventoryTaskItemDTO::getDeal));
@@ -471,5 +476,128 @@
            }
        }
        assetInventoryTaskItemService.updateBatchById(assetInventoryTaskItems);
        // 更新任务状态为已完成(盘点结果处理完成)
        if (CollUtil.isNotEmpty(dtoList) && CollUtil.isNotEmpty(assetInventoryTaskItems)) {
            // 获取任务ID(从第一个盘点项获取)
            Integer taskId = assetInventoryTaskItems.get(0).getInventoryTaskId();
            updateTaskStatusToCompleted(taskId);
        }
    }
    /**
     * 直接更新任务状态为已完成
     *
     * @param taskId 盘点任务ID
     */
    private void updateTaskStatusToCompleted(Integer taskId) {
        // 参数验证
        if (taskId == null) {
            log.warn("任务ID为空,无法更新任务状态");
            return;
        }
        // 检查任务是否存在
        AssetInventoryTask task = this.getById(taskId);
        if (task == null) {
            log.warn("任务不存在,任务ID:{}", taskId);
            return;
        }
        // 检查任务是否已经是已完成状态
        if (task.getStatus() != null && task.getStatus().equals(AssetInventoryTaskStatusEnum.COMPLETED.getCode())) {
            log.debug("任务已经是已完成状态,任务ID:{}", taskId);
            return;
        }
        // 更新任务状态为已完成
        task.setStatus(AssetInventoryTaskStatusEnum.COMPLETED.getCode());
        task.setUpdateBy(SecurityUtils.getLoginUser().getUser().getNickName());
        this.updateById(task);
        log.info("盘点任务状态更新为已完成,任务ID:{},任务名称:{},操作人:{}",
                taskId, task.getTaskName(), task.getUpdateBy());
    }
    @Override
    public boolean cancel(Integer id) {
        AssetInventoryTask assetInventoryTask = this.getById(id);
        if (Objects.nonNull(assetInventoryTask) && !assetInventoryTask.getStatus() .equals(AssetInventoryTaskStatusEnum.COMPLETED.getCode())) {
            assetInventoryTask.setStatus(AssetInventoryTaskStatusEnum.CANCELED.getCode()); //已取消
            assetInventoryTask.setUpdateBy(SecurityUtils.getLoginUser().getUser().getNickName());
            return this.updateById(assetInventoryTask);
        }
        return false;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveInventory(List<AssetInventoryTaskItemUpdateDTO> dtoList) {
        Map<Integer, AssetInventoryTaskItemUpdateDTO> dtoMap = dtoList.stream()
                .collect(Collectors.toMap(AssetInventoryTaskItemUpdateDTO::getAssetInventoryTaskItemId, dto -> dto));
        List<AssetInventoryTaskItem> assetInventoryTaskItems = assetInventoryTaskItemService.listByIds(dtoMap.keySet());
        for (AssetInventoryTaskItem assetInventoryTaskItem : assetInventoryTaskItems) {
            AssetInventoryTaskItemUpdateDTO dto = dtoMap.get(assetInventoryTaskItem.getId());
            assetInventoryTaskItem.setResultStatus(dto.getResultStatus());
            assetInventoryTaskItem.setRealDeptName(dto.getRealDeptName());
            assetInventoryTaskItem.setRealUserName(dto.getRealUserName());
            assetInventoryTaskItem.setExceptionExplain(dto.getExceptionExplain());
        }
        assetInventoryTaskItemService.updateBatchById(assetInventoryTaskItems);
        // 检查并更新任务状态(保存盘点数据完成)
        if (CollUtil.isNotEmpty(dtoList) && CollUtil.isNotEmpty(assetInventoryTaskItems)) {
            // 获取任务ID(从第一个盘点项获取)
            Integer taskId = assetInventoryTaskItems.get(0).getInventoryTaskId();
            checkAndUpdateTaskCompletionStatus(taskId);
        }
    }
    /**
     * 检查并更新任务完成状态
     * 如果任务的所有盘点项都为正常状态,则将任务状态更新为已完成
     *
     * @param taskId                  盘点任务ID
     */
    private void checkAndUpdateTaskCompletionStatus(Integer taskId) {
        // 参数验证
        if (taskId == null) {
            log.warn("任务ID为空,无法检查任务完成状态");
            return;
        }
        // 1. 检查任务是否存在
        AssetInventoryTask task = this.getById(taskId);
        if (task == null) {
            log.warn("任务不存在,任务ID:{}", taskId);
            return;
        }
        // 2. 查询任务的所有盘点项
        LambdaQueryWrapper<AssetInventoryTaskItem> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(AssetInventoryTaskItem::getInventoryTaskId, taskId);
        List<AssetInventoryTaskItem> allTaskItems = assetInventoryTaskItemService.list(wrapper);
        // 3. 检查是否所有项都已完成且为正常状态(resultStatus = 1)
        boolean allNormal = !allTaskItems.isEmpty() &&
                allTaskItems.stream()
                        .allMatch(item -> item.getResultStatus() != null && item.getResultStatus() == 1);
        // 4. 如果都正常,更新任务状态为已完成
        if (allNormal) {
            // 检查任务是否已经是已完成状态
            if (task.getStatus() != null && !task.getStatus().equals(AssetInventoryTaskStatusEnum.COMPLETED.getCode())) {
                task.setStatus(AssetInventoryTaskStatusEnum.COMPLETED.getCode());
                task.setUpdateBy(SecurityUtils.getLoginUser().getUser().getNickName());
                this.updateById(task);
                log.info("盘点任务已完成,任务ID:{},任务名称:{},操作人:{}",
                        taskId, task.getTaskName(), task.getUpdateBy());
            } else {
                log.debug("任务已经是已完成状态,任务ID:{}", taskId);
            }
        } else {
            log.debug("任务未完全完成,跳过状态更新,任务ID:{},盘点项总数:{}",
                    taskId, allTaskItems.size());
        }
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetRepairRecordServiceImpl.java
@@ -8,7 +8,7 @@
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.constants.ApprovalApplicationCodePrefix;
import com.ruoyi.system.dto.AssetRepairRecordAddDTO;
import com.ruoyi.system.dto.asset.AssetRepairRecordAddDTO;
import com.ruoyi.system.dto.asset.AssetRepairCompleteDTO;
import com.ruoyi.system.mapper.AssetRepairRecordMapper;
import com.ruoyi.system.model.AssetRepairRecord;
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetMainInventoryVO.java
@@ -20,9 +20,11 @@
    @ApiModelProperty(value = "资产ID")
    private Integer id;
    @ApiModelProperty(value = "盘点任务关联表ID")
    private Integer assetInventoryTaskItemId;
    @ApiModelProperty(value = "资产编码")
    private String assetCode;
    @ApiModelProperty(value = "资产名称")
    private String assetName;
@@ -85,8 +87,23 @@
    @ApiModelProperty(value = "使用部门")
    private String useDeptName;
    @ApiModelProperty(value = "盘点人")
    @ApiModelProperty(value = "使用部门/位置ID")
    private Integer useDeptId;
    @ApiModelProperty(value = "仓库ID,关联warehouse表")
    private Integer warehouseId;
    @ApiModelProperty(value = "仓库名称(冗余字段)")
    private String warehouseName;
    @ApiModelProperty(value = "所在位置")
    private String address;
    @ApiModelProperty(value = "使用人")
    private String userName;
    @ApiModelProperty(value = "盘点人")
    private String checkUserName;
    @ApiModelProperty(value = "盘点状态 盘点结果 0-未盘点,1-正常,2-异常 未找到资产")
    private Integer inventoryStatus;
@@ -96,5 +113,8 @@
    @ApiModelProperty(value = "实存使用人")
    private String realUserName;
    @ApiModelProperty(value = "异常说明")
    private String exceptionExplain;
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetMainPageVO.java
@@ -6,6 +6,7 @@
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
@@ -40,5 +41,93 @@
    @ApiModelProperty(value = "使用部门/位置")
    private String useDeptOrLocation;
    @ApiModelProperty(value = "审批申请记录ID")
    private Integer approvalApplicationId;
    @ApiModelProperty(value = "资产原编码")
    private String assetOriginalCode;
    @ApiModelProperty(value = "规格型号")
    private String specificationModel;
    @ApiModelProperty(value = "类别")
    private String category;
    @ApiModelProperty(value = "资产类别ID,关联asset_type表")
    private Integer assetTypeId;
    @ApiModelProperty(value = "类别名称(冗余字段)")
    private String assetCategory;
    @ApiModelProperty(value = "资产主类型:0-通用资产,1-房产资产,2-车辆资产")
    private Integer assetMainType;
    @ApiModelProperty(value = "计量单位")
    private String measurementUnit;
    @ApiModelProperty(value = "数量")
    private Integer quantity;
    @ApiModelProperty(value = "单价")
    private BigDecimal unitPrice;
    @ApiModelProperty(value = "总价值(数量*单价)")
    private BigDecimal totalValue;
    @ApiModelProperty(value = "使用年限(年)")
    private Integer usefulLife;
    @ApiModelProperty(value = "权属单位/部门ID")
    private Integer ownershipDeptId;
    @ApiModelProperty(value = "使用人")
    private String userName;
    @ApiModelProperty(value = "位置类型 0-部门,1-仓库,2-录入地址")
    private Integer addressType;
    @ApiModelProperty(value = "使用部门/位置ID")
    private Integer useDeptId;
    @ApiModelProperty(value = "仓库ID,关联warehouse表")
    private Integer warehouseId;
    @ApiModelProperty(value = "仓库名称(冗余字段)")
    private String warehouseName;
    @ApiModelProperty(value = "所在位置")
    private String address;
    @ApiModelProperty(value = "备注")
    private String remarks;
    @ApiModelProperty(value = "入账状态")
    private String accountingStatus;
    @ApiModelProperty(value = "入账时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate accountingDate;
    @ApiModelProperty(value = "会计凭证号")
    private String accountingVoucherNo;
    @ApiModelProperty(value = "会计科目")
    private String accountingSubject;
    @ApiModelProperty(value = "入账金额")
    private BigDecimal accountingAmount;
    @ApiModelProperty(value = "附件URL列表(多个附件使用英文逗号拼接)")
    private String attachmentUrls;
    @ApiModelProperty(value = "是否被处置")
    private Integer disposed;
    @ApiModelProperty(value = "是否借用未归还")
    private Integer borrowed;
    @ApiModelProperty(value = "是否被领用")
    private Integer inUse;
}
ruoyi-system/src/main/resources/mapper/system/AssetInventoryTaskMapper.xml
@@ -36,37 +36,45 @@
            am.measurement_unit,
            am.quantity,
            am.unit_price,
            ( am.quantity * am.unit_price ) AS total_value,
            am.total_value,
            am.accounting_voucher_no,
            am.accounting_subject,
            am.accounting_status,
            am.accounting_amount,
            am.accounting_date,
            am.asset_status,
            od.dept_name AS ownership_dept_name,
            td.dept_name AS ownership_dept_name,
            am.ownership_dept_id,
            am.asset_type_id,
            am.address_type,
            am.address,
            am.use_dept_id,
            am.warehouse_id,
            od2.dept_name AS use_dept_name,
            su.nick_name AS user_name,
            am.user_name,
            aw.warehouse_name,
            td2.dept_name AS use_dept_name,
            su.nick_name AS check_user_name,
            aiti.result_status AS inventory_status,
            aiti.real_dept_name,
            aiti.real_user_name
            aiti.real_user_name,
            aiti.id AS asset_inventory_task_item_id,
            aiti.exception_explain
        FROM
            asset_inventory_task_item aiti
        INNER JOIN
            asset_main am ON aiti.asset_main_id = am.id
        LEFT JOIN
            asset_type at2 ON am.asset_type_id = at.id
            asset_type at2 ON am.asset_type_id = at2.id
        LEFT JOIN
            asset_type at1 ON at1.id = (CASE WHEN at2.level = 2 THEN at2.parent_id ELSE at2.id END)
        LEFT JOIN
            sys_dept od ON am.ownership_dept_id = od.dept_id
            t_dept td ON am.ownership_dept_id = td.id
        LEFT JOIN
            sys_user su ON aiti.user_id = su.user_id
        LEFT JOIN sys_dept od2 ON am.address_type = 0 AND am.use_dept_id = od2.id
        LEFT JOIN
            t_dept td2 ON am.address_type = 0 AND am.use_dept_id = td2.id
        LEFT JOIN
            asset_warehouse aw ON am.address_type = 1 AND am.warehouse_id = aw.id
        WHERE
            aiti.inventory_task_id = #{taskId}
        ORDER BY
@@ -99,24 +107,29 @@
        am.measurement_unit,
        am.quantity,
        am.unit_price,
        ( am.quantity * am.unit_price ) AS total_value,
        am.total_value,
        am.accounting_voucher_no,
        am.accounting_subject,
        am.accounting_status,
        am.accounting_amount,
        am.accounting_date,
        am.asset_status,
        od.dept_name AS ownership_dept_name,
        td.dept_name AS ownership_dept_name,
        am.ownership_dept_id,
        am.asset_type_id,
        am.address_type,
        am.address,
        am.use_dept_id,
        am.warehouse_id,
        od2.dept_name AS use_dept_name,
        su.nick_name AS user_name,
        am.user_name,
        aw.warehouse_name,
        td2.dept_name AS use_dept_name,
        su.nick_name AS check_user_name,
        aiti.result_status AS inventory_status,
        aiti.real_dept_name,
        aiti.real_user_name
        aiti.real_user_name,
        aiti.id AS asset_inventory_task_item_id,
        aiti.exception_explain
        FROM
        asset_inventory_task_item aiti
        INNER JOIN
@@ -124,10 +137,13 @@
        LEFT JOIN
        asset_type at ON am.asset_type_id = at.id
        LEFT JOIN
        sys_dept od ON am.ownership_dept_id = od.dept_id
        t_dept td ON am.ownership_dept_id = td.id
        LEFT JOIN
        sys_user su ON aiti.user_id = su.user_id
        LEFT JOIN sys_dept od2 ON am.address_type = 0 AND am.use_dept_id = od2.id
        LEFT JOIN
            t_dept td2 ON am.address_type = 0 AND am.use_dept_id = td2.id
        LEFT JOIN
            asset_warehouse aw ON am.address_type = 1 AND am.warehouse_id = aw.id
        <where>
            aiti.inventory_task_id = #{query.id}
            <if test="query.keyword != null and query.keyword != ''">
ruoyi-system/src/main/resources/mapper/system/AssetMainMapper.xml
@@ -100,9 +100,7 @@
    </select>
    <select id="getAssetPageList" resultType="com.ruoyi.system.vo.asset.AssetMainPageVO">
        SELECT
        am.id AS id,
        am.asset_code AS assetCode,
        am.asset_name AS assetName,
        am.*,
        at.type_name AS assetTypeName,
        od.dept_name AS ownershipDeptName,
        am.asset_status AS assetStatus,