From 60afc1c228318d136a273cd0b389217f87583277 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期六, 11 十月 2025 11:29:33 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-system/src/main/resources/mapper/system/AssetMainMapper.xml | 52 +++ ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetRepairRecordAssetVO.java | 56 ++++ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetRepairRecordServiceImpl.java | 185 ++++++++++++ ruoyi-system/src/main/java/com/ruoyi/system/service/AssetMainService.java | 7 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetRepairRecordDetailVO.java | 80 +++++ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java | 24 - ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetRepairCompleteDTO.java | 34 ++ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationsServiceImpl.java | 20 + ruoyi-system/src/main/java/com/ruoyi/system/constants/ApprovalApplicationCodePrefix.java | 17 + ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetMainController.java | 54 +++ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationDisposeServiceImpl.java | 16 - ruoyi-system/src/main/java/com/ruoyi/system/model/AssetRepairRecordItem.java | 14 + ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetRepairRecordPageVO.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetMainMapper.java | 7 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationPurchaseServiceImpl.java | 27 - ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetRepairRecordMapper.java | 8 ruoyi-system/src/main/java/com/ruoyi/system/query/AssetMainPageQuery.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/service/AssetRepairRecordService.java | 31 ++ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java | 23 - ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRequestController.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationsService.java | 7 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRecordController.java | 39 ++ ruoyi-system/src/main/resources/mapper/system/AssetRepairRecordMapper.xml | 27 + ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationChangeServiceImpl.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java | 6 ruoyi-system/src/main/java/com/ruoyi/system/dto/AssetRepairRecordAddDTO.java | 56 ++++ ruoyi-system/src/main/java/com/ruoyi/system/model/AssetRepairRecord.java | 4 27 files changed, 710 insertions(+), 95 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetMainController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetMainController.java index 4d1beb1..4ade46e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetMainController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetMainController.java @@ -3,8 +3,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.system.constants.AssetDeptConstant; import com.ruoyi.system.query.AssetMainPageQuery; import com.ruoyi.system.service.AssetMainService; +import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.vo.asset.AssetMainPageVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -30,13 +33,64 @@ public class AssetMainController { private final AssetMainService assetMainService; + private final ISysUserService sysUserService; @ApiOperation("获取审批通过且可用的资产分页列表(排除已领用、已处置、未归还借用)") @PostMapping("/page-list") public R<IPage<AssetMainPageVO>> getApprovedAssetPageList(@RequestBody AssetMainPageQuery pageQuery) { + // 数据权限:超级管理员/资产管理部查看所有数据,其他部门查看当前及下级部门的数据 + Long userId = SecurityUtils.getUserId(); + boolean isAdmin = SecurityUtils.isAdmin(userId); + + if (!isAdmin) { + try { + // 获取当前用户的部门名称 + String deptName = sysUserService.selectUserById(userId).getDept().getDeptName(); + + // 非超级管理员且非资产管理部,设置部门权限 + if (!AssetDeptConstant.ASSET_DEPARTMENT_NAME.equals(deptName)) { + pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId())); + } + } catch (Exception e) { + // 如果获取部门信息失败,默认设置部门权限 + try { + pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId())); + } catch (Exception ex) { + // ignore parse, leave null if cannot parse + } + } + } IPage<AssetMainPageVO> page = assetMainService.getApprovedPageList(pageQuery); return R.ok(page); } + @ApiOperation("获取已入库的资产列表") + @PostMapping("/page-list-all") + public R<IPage<AssetMainPageVO>> getAssetPageList(@RequestBody AssetMainPageQuery pageQuery) { + // 数据权限:超级管理员/资产管理部查看所有数据,其他部门查看当前及下级部门的数据 + Long userId = SecurityUtils.getUserId(); + boolean isAdmin = SecurityUtils.isAdmin(userId); + + if (!isAdmin) { + try { + // 获取当前用户的部门名称 + String deptName = sysUserService.selectUserById(userId).getDept().getDeptName(); + + // 非超级管理员且非资产管理部,设置部门权限 + if (!AssetDeptConstant.ASSET_DEPARTMENT_NAME.equals(deptName)) { + pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId())); + } + } catch (Exception e) { + // 如果获取部门信息失败,默认设置部门权限 + try { + pageQuery.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId())); + } catch (Exception ex) { + // ignore parse, leave null if cannot parse + } + } + } + IPage<AssetMainPageVO> page = assetMainService.getAssetPageList(pageQuery); + return R.ok(page); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRecordController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRecordController.java index 4d6acc7..0d9bfda 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRecordController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRecordController.java @@ -2,23 +2,30 @@ import com.baomidou.mybatisplus.core.metadata.IPage; -import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.domain.R; -import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.system.constants.AssetDeptConstant; +import com.ruoyi.system.dto.AssetRepairRecordAddDTO; +import com.ruoyi.system.dto.asset.AssetRepairCompleteDTO; import com.ruoyi.system.query.AssetRepairRecordPageQuery; import com.ruoyi.system.service.AssetRepairRecordService; import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.system.vo.asset.AssetRepairRecordDetailVO; import com.ruoyi.system.vo.asset.AssetRepairRecordPageVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Lazy; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; /** * <p> @@ -28,6 +35,7 @@ * @author WuGuanFengYue * @since 2025-09-15 */ +@Validated @RestController @Api(tags = {"资产维修记录相关接口"}) @RequiredArgsConstructor(onConstructor_ = {@Lazy}) @@ -67,5 +75,32 @@ return R.ok(page); } + @ApiOperation("新增维修记录") + @PostMapping("/add") + public R<?> addRepairRecord(@Valid @RequestBody AssetRepairRecordAddDTO addDTO) { + assetRepairRecordService.addRepairRecord(addDTO); + return R.ok(); + } + + @ApiOperation("获取维修记录详情") + @PostMapping("/detail/{id}") + public R<AssetRepairRecordDetailVO> getRepairRecordDetail( @ApiParam(name = "id",value = "维修记录ID") @PathVariable Integer id) { + AssetRepairRecordDetailVO detail = assetRepairRecordService.getRepairRecordDetail(id); + return R.ok(detail); + } + + @ApiOperation("完成维修") + @PostMapping("/complete") + public R<?> completeRepair(@Valid @RequestBody AssetRepairCompleteDTO dto) { + assetRepairRecordService.completeRepair(dto); + return R.ok(); + } + + @ApiOperation("删除") + @DeleteMapping("/{id}") + public R<?> deleteById(@ApiParam(name = "id",value = "维修记录ID")@PathVariable Integer id){ + assetRepairRecordService.deleteById(id); + return R.ok(); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRequestController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRequestController.java index 4f34495..1b64135 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRequestController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRequestController.java @@ -18,6 +18,9 @@ import com.ruoyi.system.query.AssetRepairRequestListQuery; import com.ruoyi.system.query.AssetStatisticsListQuery; import com.ruoyi.system.service.*; +import com.ruoyi.system.service.AssetMainService; +import com.ruoyi.system.service.AssetRepairRecordService; +import com.ruoyi.system.service.TDeptService; import com.ruoyi.system.vo.AssetRepairListVO; import com.ruoyi.system.vo.AssetRepairRequestVO; import com.ruoyi.system.vo.AssetStatisticsVO; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/constants/ApprovalApplicationCodePrefix.java b/ruoyi-system/src/main/java/com/ruoyi/system/constants/ApprovalApplicationCodePrefix.java new file mode 100644 index 0000000..d26387d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/constants/ApprovalApplicationCodePrefix.java @@ -0,0 +1,17 @@ +package com.ruoyi.system.constants; + +/** + * @author mitao + * @date 2025/10/9 + */ +public interface ApprovalApplicationCodePrefix { + /*资产相关*/ + String ASSET_PURCHASE = "CG"; // 采购申请 + String ASSET_STOCK_IN = "RK"; // 入库申请 + String ASSET_RECEIVE = "LY"; // 领用申请 + String ASSET_BORROW = "JY"; // 借用申请 + String ASSET_RETURN = "GH"; // 归还申请 + String ASSET_DISPOSE = "CZ"; // 处置申请 + String ASSET_CHANGE = "BG"; // 变更申请 + String ASSET_REPAIR = "WX"; // 维修申请 +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AssetRepairRecordAddDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AssetRepairRecordAddDTO.java new file mode 100644 index 0000000..66571e5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AssetRepairRecordAddDTO.java @@ -0,0 +1,56 @@ +package com.ruoyi.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.List; + +/** + * <p> + * 新增维修记录DTO + * </p> + * + * @author WuGuanFengYue + * @since 2025-10-09 + */ +@Data +@ApiModel(value="AssetRepairRecordAddDTO对象", description="新增维修记录DTO") +public class AssetRepairRecordAddDTO { + + @ApiModelProperty(value = "事项标题", required = true) + @NotBlank(message = "事项标题不能为空") + private String title; + + @ApiModelProperty(value = "维护资产类型ID", required = true) + @NotBlank(message = "维护资产类型ID不能为空") + private String assetTypeId; + + @ApiModelProperty(value = "当前维修状态:0-维修中,1-无需维修,2-维修完成", required = true) + @NotNull(message = "维修状态不能为空") + private Integer repairStatus; + + @ApiModelProperty(value = "维修费用", required = true) + @NotNull(message = "维修费用不能为空") + private BigDecimal totalFee; + + @ApiModelProperty(value = "维修人", required = true) + @NotBlank(message = "维修人不能为空") + private String repairBy; + + @ApiModelProperty(value = "附件URL列表(多个附件使用英文逗号拼接)") + private String attachmentUrls; + + @ApiModelProperty(value = "维修备注") + private String repairRemarks; + + @ApiModelProperty(value = "关联报修单号(非必填,保存时需要校验报修单是否存在)") + private String repairRequestNo; + + @ApiModelProperty(value = "维修资产ID列表", required = true) + @NotNull(message = "维修资产ID列表不能为空") + private List<Integer> assetMainIds; +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetRepairCompleteDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetRepairCompleteDTO.java new file mode 100644 index 0000000..ccbb246 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/AssetRepairCompleteDTO.java @@ -0,0 +1,34 @@ +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.NotNull; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author mitao + * @date 2025/10/9 + */ +@Data +@ApiModel(value = "资产维修完成DTO") +public class AssetRepairCompleteDTO { + @ApiModelProperty(value = "维修记录ID") + @NotNull(message = "维修记录ID不能为空") + private Integer repairRecordId; + + @ApiModelProperty(value = "维修资产ID") + @NotNull(message = "维修资产ID不能为空") + private Integer assetMainId; + + @ApiModelProperty(value = "维修花费" ) + @NotNull(message = "维修花费不能为空") + private BigDecimal repairFee; + + @ApiModelProperty(value = "维修完成时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime repairFinishTime; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetMainMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetMainMapper.java index 3abb27a..681a043 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetMainMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetMainMapper.java @@ -23,4 +23,11 @@ */ IPage<AssetMainPageVO> selectApprovedAssetPage(Page<?> page, @Param("query") AssetMainPageQuery query); + /** + * 获取已入库的资产列表 + * @param page + * @param pageQuery + * @return + */ + IPage<AssetMainPageVO> getAssetPageList(Page<AssetMainPageVO> page, @Param("query") AssetMainPageQuery pageQuery); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetRepairRecordMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetRepairRecordMapper.java index fe565f7..8bcddd2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetRepairRecordMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetRepairRecordMapper.java @@ -9,6 +9,7 @@ import com.ruoyi.system.query.AssetRepairRequestListQuery; import com.ruoyi.system.query.AssetStatisticsListQuery; import com.ruoyi.system.vo.AssetRepairRequestVO; +import com.ruoyi.system.vo.asset.AssetRepairRecordAssetVO; import com.ruoyi.system.vo.asset.AssetRepairRecordPageVO; import org.apache.ibatis.annotations.Param; @@ -34,5 +35,12 @@ */ IPage<AssetRepairRecordPageVO> getRepairRecordPageList(Page<AssetRepairRecordPageVO> page, @Param("query") AssetRepairRecordPageQuery pageQuery); + /** + * 查询维修记录关联的资产列表 + * @param repairRecordId 维修记录ID + * @return 维修资产列表 + */ + List<AssetRepairRecordAssetVO> getRepairAssetList(@Param("repairRecordId") Integer repairRecordId); + List<AssetRepairRequestVO> listAll(@Param("query")AssetRepairRequestListQuery query); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetRepairRecord.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetRepairRecord.java index 42b6d44..ce2dca4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetRepairRecord.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetRepairRecord.java @@ -33,7 +33,7 @@ @TableId(value = "id", type = IdType.AUTO) private Integer id; - @ApiModelProperty(value = "保修单ID") + @ApiModelProperty(value = "报修单ID") @TableField("repair_request_id") private Integer repairRequestId; @@ -67,7 +67,7 @@ @ApiModelProperty(value = "报修状态:0-维修中,1-无需维修,2-维修完成") @TableField("repair_status") - private Boolean repairStatus; + private Integer repairStatus; @ApiModelProperty(value = "维修费用") @TableField("total_fee") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetRepairRecordItem.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetRepairRecordItem.java index 3d56f2a..98f6aa5 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetRepairRecordItem.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetRepairRecordItem.java @@ -10,6 +10,8 @@ import lombok.EqualsAndHashCode; import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; /** * <p> @@ -39,5 +41,17 @@ @TableField("asset_main_id") private Integer assetMainId; + @ApiModelProperty(value = "维修完成时间") + @TableField("repair_finish_time") + private LocalDateTime repairFinishTime; + + @ApiModelProperty(value = "维修花费" ) + @TableField("repair_fee") + private BigDecimal repairFee; + + @ApiModelProperty(value = "维修状态:0-维修中,1-维修完成") + @TableField("status") + private Integer status; + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetMainPageQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetMainPageQuery.java index b5af8fa..ada367e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetMainPageQuery.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetMainPageQuery.java @@ -26,5 +26,8 @@ @ApiModelProperty("关键字(资产名称/资产编码)") private String keyword; + + @ApiModelProperty("所属部门ID,前端不传") + private Integer deptId; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetMainService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetMainService.java index ba22234..3c3eec9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetMainService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetMainService.java @@ -42,4 +42,11 @@ * @return */ List<AssetMainVO> getListByIds(List<Integer> assetMainIds); + + /** + * 获取所有资产分页列表 + * @param pageQuery + * @return + */ + IPage<AssetMainPageVO> getAssetPageList(AssetMainPageQuery pageQuery); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetRepairRecordService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetRepairRecordService.java index 08bf94b..0b24b6f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetRepairRecordService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetRepairRecordService.java @@ -3,12 +3,13 @@ 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.AssetRepairCompleteDTO; import com.ruoyi.system.model.AssetRepairRecord; import com.ruoyi.system.query.AssetRepairRecordPageQuery; import com.ruoyi.system.query.AssetRepairRequestListQuery; -import com.ruoyi.system.query.AssetStatisticsListQuery; import com.ruoyi.system.vo.AssetRepairRequestVO; -import com.ruoyi.system.vo.AssetStatisticsVO; +import com.ruoyi.system.vo.asset.AssetRepairRecordDetailVO; import com.ruoyi.system.vo.asset.AssetRepairRecordPageVO; import java.util.List; @@ -32,5 +33,31 @@ */ IPage<AssetRepairRecordPageVO> getRepairRecordPageList(AssetRepairRecordPageQuery pageQuery); + /** + * 新增维修记录 + * + * @param addDTO 新增维修记录DTO + */ + void addRepairRecord(AssetRepairRecordAddDTO addDTO); + + /** + * 获取维修记录详情 + * + * @param id + * @return 维修记录详情 + */ + AssetRepairRecordDetailVO getRepairRecordDetail(Integer id); + + /** + * 完成维修 + * @param dto + */ + void completeRepair(AssetRepairCompleteDTO dto); + + /** + * 删除 + * @param id + */ + void deleteById(Integer id); List<AssetRepairRequestVO> listAll(AssetRepairRequestListQuery query); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationsService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationsService.java index 89dd256..3a82b69 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationsService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationsService.java @@ -22,4 +22,11 @@ * @param app */ void assembleApplicationDetail(OaApprovalApplications app); + + /** + * 生成申请单编号 + * @param prefix + * @return + */ + String generateApplicationCode(String prefix); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java index 0e8b51d..323ecf7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java @@ -312,4 +312,10 @@ } return Collections.emptyList(); } + + @Override + public IPage<AssetMainPageVO> getAssetPageList(AssetMainPageQuery pageQuery) { + Page<AssetMainPageVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()); + return this.baseMapper.getAssetPageList(page, pageQuery); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetRepairRecordServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetRepairRecordServiceImpl.java index 604de85..4593555 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetRepairRecordServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetRepairRecordServiceImpl.java @@ -1,25 +1,41 @@ package com.ruoyi.system.service.impl; +import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageInfo; +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.AssetRepairCompleteDTO; import com.ruoyi.system.mapper.AssetRepairRecordMapper; import com.ruoyi.system.model.AssetRepairRecord; -import com.ruoyi.system.model.AssetType; +import com.ruoyi.system.model.AssetRepairRecordItem; +import com.ruoyi.system.model.AssetRepairRequest; import com.ruoyi.system.query.AssetRepairRecordPageQuery; import com.ruoyi.system.query.AssetRepairRequestListQuery; -import com.ruoyi.system.query.AssetStatisticsListQuery; +import com.ruoyi.system.service.AssetRepairRecordItemService; import com.ruoyi.system.service.AssetRepairRecordService; -import com.ruoyi.system.vo.AssetIdleListVO; +import com.ruoyi.system.service.AssetRepairRequestService; +import com.ruoyi.system.service.AssetTypeService; import com.ruoyi.system.vo.AssetRepairRequestVO; -import com.ruoyi.system.vo.AssetStatisticsVO; +import com.ruoyi.system.vo.asset.AssetRepairRecordAssetVO; +import com.ruoyi.system.vo.asset.AssetRepairRecordDetailVO; import com.ruoyi.system.vo.asset.AssetRepairRecordPageVO; +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; +import java.util.Objects; /** * <p> @@ -30,7 +46,12 @@ * @since 2025-09-15 */ @Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class AssetRepairRecordServiceImpl extends ServiceImpl<AssetRepairRecordMapper, AssetRepairRecord> implements AssetRepairRecordService { + + private final AssetRepairRequestService assetRepairRequestService; + private final AssetRepairRecordItemService assetRepairRecordItemService; + private final AssetTypeService assetTypeService; @Override public PageInfo<AssetRepairRequestVO> pageList(AssetRepairRequestListQuery query) { @@ -47,6 +68,158 @@ } @Override + @Transactional(rollbackFor = Exception.class) + public void addRepairRecord(AssetRepairRecordAddDTO addDTO) { + // 1. 生成维修单号 + String repairNo = generateRepairNo(); + + // 2. 校验报修单是否存在(如果提供了报修单号) + Integer repairRequestId = null; + if (StringUtils.hasText(addDTO.getRepairRequestNo())) { + repairRequestId = validateRepairRequest(addDTO.getRepairRequestNo()); + } + + // 3. 创建维修记录实体 + AssetRepairRecord repairRecord = new AssetRepairRecord(); + repairRecord.setRepairNo(repairNo); + repairRecord.setRepairRequestId(repairRequestId); + BeanUtil.copyProperties(addDTO, repairRecord); + repairRecord.setCreateBy(SecurityUtils.getUsername()); + + // 4. 保存维修记录主表 + boolean saved = this.save(repairRecord); + if (!saved) { + throw new RuntimeException("保存维修记录失败"); + } + + // 5. 保存维修资产关联关系 + saveRepairRecordItems(repairRecord.getId(), addDTO.getAssetMainIds()); + } + + /** + * 生成维修单号 + * 格式:WX + 日期 + 4位序号 + */ + private String generateRepairNo() { + String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + + // 查询当天已生成的维修单号数量 + Long count = this.lambdaQuery() + .likeRight(AssetRepairRecord::getRepairNo, ApprovalApplicationCodePrefix.ASSET_REPAIR) + .ge(AssetRepairRecord::getCreateTime, LocalDate.now().atStartOfDay()) + .lt(AssetRepairRecord::getCreateTime, LocalDate.now().plusDays(1).atStartOfDay()) + .count(); + + // 生成4位序号,从0001开始 + int sequence = (count != null ? count.intValue() : 0) + 1; + String sequenceStr = String.format("%04d", sequence); + + return ApprovalApplicationCodePrefix.ASSET_REPAIR + dateStr + sequenceStr; + } + + /** + * 校验报修单是否存在 + * @param repairRequestNo 报修单号 + * @return 报修单ID + */ + private Integer validateRepairRequest(String repairRequestNo) { + AssetRepairRequest repairRequest = assetRepairRequestService.lambdaQuery() + .eq(AssetRepairRequest::getRepairNo, repairRequestNo) + .eq(AssetRepairRequest::getDisabled, false) + .one(); + + if (repairRequest == null) { + throw new RuntimeException("报修单不存在:" + repairRequestNo); + } + + return repairRequest.getId(); + } + + /** + * 保存维修记录资产关联关系 + * @param repairRecordId 维修记录ID + * @param assetMainIds 资产ID列表 + */ + private void saveRepairRecordItems(Integer repairRecordId, List<Integer> assetMainIds) { + if (assetMainIds == null || assetMainIds.isEmpty()) { + throw new RuntimeException("维修资产ID列表不能为空"); + } + + List<AssetRepairRecordItem> items = new ArrayList<>(); + for (Integer assetMainId : assetMainIds) { + AssetRepairRecordItem item = new AssetRepairRecordItem(); + item.setRepairRecordId(repairRecordId); + item.setAssetMainId(assetMainId); + items.add(item); + } + + boolean saved = assetRepairRecordItemService.saveBatch(items); + if (!saved) { + throw new RuntimeException("保存维修资产关联关系失败"); + } + } + + @Override + public AssetRepairRecordDetailVO getRepairRecordDetail(Integer id) { + // 1. 查询主表信息 + AssetRepairRecord repairRecord = this.getById(id); + if (repairRecord == null) { + throw new RuntimeException("维修记录不存在"); + } + + // 2. 转换主表信息到VO + AssetRepairRecordDetailVO detailVO = new AssetRepairRecordDetailVO(); + BeanUtil.copyProperties(repairRecord, detailVO); + + // 4. 查询关联的资产列表 + List<AssetRepairRecordAssetVO> assetList = this.baseMapper.getRepairAssetList(id); + detailVO.setAssetList(assetList); + + return detailVO; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void completeRepair(AssetRepairCompleteDTO dto) { + //查询维修记录资产关联表 + AssetRepairRecordItem item = assetRepairRecordItemService.lambdaQuery().eq(AssetRepairRecordItem::getRepairRecordId, dto.getRepairRecordId()) + .eq(AssetRepairRecordItem::getAssetMainId, dto.getAssetMainId()).one(); + if (Objects.isNull(item)) { + throw new ServiceException("维修记录不存在"); + } + item.setRepairFinishTime(Objects.nonNull(dto.getRepairFinishTime()) ? dto.getRepairFinishTime() : LocalDateTime.now()); + item.setRepairFee(dto.getRepairFee()); + item.setStatus(1); + assetRepairRecordItemService.updateById(item); + //统计未维修的资产数量 TODO 待验证 + Long count = assetRepairRecordItemService.lambdaQuery() + .eq(AssetRepairRecordItem::getRepairRecordId, dto.getRepairRecordId()).eq(AssetRepairRecordItem::getStatus, 0) + .count(); + if (count.equals(0L)) { + //更新主表状态 + AssetRepairRecord repairRecord = this.getById(dto.getRepairRecordId()); + repairRecord.setRepairStatus(2); + this.updateById(repairRecord); + //查询关联保修单 + if (Objects.nonNull(repairRecord.getRepairRequestId())) { + //更新关联报修单状态 + assetRepairRequestService.lambdaUpdate().set(AssetRepairRequest::getRepairStatus, 1) + .eq(AssetRepairRequest::getId, repairRecord.getRepairRequestId()) + .update(); + } + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(Integer id) { + this.removeById(id); + assetRepairRecordItemService.lambdaUpdate() + .eq(AssetRepairRecordItem::getRepairRecordId, id) + .remove(); + } + + @Override public List<AssetRepairRequestVO> listAll(AssetRepairRequestListQuery query) { List<AssetRepairRequestVO> list = this.baseMapper.listAll(query); return list; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java index 0232b33..17cfd99 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java @@ -8,6 +8,7 @@ import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.system.bo.OaApprovalApplicationAssetReturnBO; +import com.ruoyi.system.constants.ApprovalApplicationCodePrefix; import com.ruoyi.system.dto.asset.OaApprovalApplicationAssetReceiveDTO; import com.ruoyi.system.dto.asset.OaApprovalApplicationAssetReturnDTO; import com.ruoyi.system.emums.ApprovalStatusEnum; @@ -36,7 +37,6 @@ import org.springframework.util.CollectionUtils; import java.time.LocalDate; -import java.time.format.DateTimeFormatter; import java.util.Collections; import java.util.List; import java.util.Map; @@ -109,7 +109,8 @@ private OaApprovalApplications buildOaApprovalApplications(OaApprovalApplicationAssetReceiveDTO dto) { OaApprovalApplications applications = new OaApprovalApplications(); - applications.setApplicationCode(generateApplicationCode(dto.getType().equals(0) ? "LY" : "JY")); + applications.setApplicationCode(oaApprovalApplicationsService.generateApplicationCode(dto.getType().equals(0) ? + ApprovalApplicationCodePrefix.ASSET_RECEIVE : ApprovalApplicationCodePrefix.ASSET_BORROW)); applications.setApprovalId(dto.getType().equals(0) ? ApprovalTypeEnum.GRAB.getCode() : ApprovalTypeEnum.BORROW.getCode()); applications.setApplicantUserId(dto.getApplicantUserId()); applications.setApplicantName(dto.getApplicantName()); @@ -128,22 +129,6 @@ asset.setApprovalApplicationId(applicationId); asset.setType(dto.getType()); return asset; - } - - /** - * 生成申请单号:LY + yyyyMMdd + 3位序号 - */ - private String generateApplicationCode(String prefix) { - String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); - prefix = prefix + dateStr; - Long count = oaApprovalApplicationsService.lambdaQuery() - .like(OaApprovalApplications::getApplicationCode, prefix) - .ge(OaApprovalApplications::getCreateTime, LocalDate.now().atStartOfDay()) - .lt(OaApprovalApplications::getCreateTime, LocalDate.now().plusDays(1).atStartOfDay()) - .count(); - int sequence = (count != null ? count.intValue() : 0) + 1; - String sequenceStr = String.format("%03d", sequence); - return prefix + sequenceStr; } @Override @@ -257,7 +242,7 @@ oaApprovalApplicationAssetItemService.validateAssetStatus(dto.getAssetMainIds()); // 1. 构建并保存审批主表 OaApprovalApplications applications = BeanUtil.copyProperties(dto, OaApprovalApplications.class); - applications.setApplicationCode(generateApplicationCode("GH")); + applications.setApplicationCode(oaApprovalApplicationsService.generateApplicationCode(ApprovalApplicationCodePrefix.ASSET_RETURN)); applications.setApprovalId(ApprovalTypeEnum.RETURN.getCode()); applications.setApplicationDate(LocalDate.now()); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationChangeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationChangeServiceImpl.java index 5caf438..b626667 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationChangeServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationChangeServiceImpl.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.system.constants.ApprovalApplicationCodePrefix; import com.ruoyi.system.dto.asset.OaApprovalApplicationChangeDTO; import com.ruoyi.system.emums.ApprovalStatusEnum; import com.ruoyi.system.emums.ApprovalTypeEnum; @@ -88,7 +89,7 @@ private OaApprovalApplications buildOaApprovalApplications(OaApprovalApplicationChangeDTO dto) { OaApprovalApplications applications = BeanUtil.copyProperties(dto, OaApprovalApplications.class); - applications.setApplicationCode(generateApplicationCode("BG")); + applications.setApplicationCode(oaApprovalApplicationsService.generateApplicationCode(ApprovalApplicationCodePrefix.ASSET_CHANGE)); applications.setApprovalId(ApprovalTypeEnum.ASSET_CHANGE.getCode()); applications.setApplicationDate(LocalDate.now()); applications.setApprovalStatus(ApprovalStatusEnum.PENDING.getCode()); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationDisposeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationDisposeServiceImpl.java index 15a4143..d0c21e9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationDisposeServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationDisposeServiceImpl.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.system.constants.ApprovalApplicationCodePrefix; import com.ruoyi.system.dto.asset.OaApprovalApplicationDisposeDTO; import com.ruoyi.system.emums.ApprovalStatusEnum; import com.ruoyi.system.emums.ApprovalTypeEnum; @@ -29,7 +30,6 @@ import org.springframework.util.CollectionUtils; import java.time.LocalDate; -import java.time.format.DateTimeFormatter; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -93,7 +93,7 @@ private OaApprovalApplications buildOaApprovalApplications(OaApprovalApplicationDisposeDTO dto) { OaApprovalApplications applications = BeanUtil.copyProperties(dto, OaApprovalApplications.class); - applications.setApplicationCode(generateApplicationCode("CZ")); + applications.setApplicationCode(oaApprovalApplicationsService.generateApplicationCode(ApprovalApplicationCodePrefix.ASSET_DISPOSE)); applications.setApprovalId(ApprovalTypeEnum.ASSET_DISPOSE.getCode()); applications.setApplicationDate(LocalDate.now()); applications.setApprovalStatus(ApprovalStatusEnum.PENDING.getCode()); @@ -116,18 +116,6 @@ throw new ServiceException("未找到有效的审批流程配置"); } return flowNodes.get(0); - } - - /** - * 生成申请单号:CZ + yyyyMMdd + 3位序号 - */ - private String generateApplicationCode(String prefix) { - String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); - prefix = prefix + dateStr; - Long count = oaApprovalApplicationsService.lambdaQuery() - .like(OaApprovalApplications::getApplicationCode, prefix) - .count(); - return prefix + String.format("%03d", count + 1); } @Override diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationPurchaseServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationPurchaseServiceImpl.java index 33e9534..3a08cd6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationPurchaseServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationPurchaseServiceImpl.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.system.constants.ApprovalApplicationCodePrefix; import com.ruoyi.system.dto.asset.OaApprovalApplicationPurchaseDTO; import com.ruoyi.system.emums.ApprovalStatusEnum; import com.ruoyi.system.emums.ApprovalTypeEnum; @@ -20,8 +21,6 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; import java.util.List; /** @@ -87,7 +86,7 @@ */ private OaApprovalApplications buildOaApprovalApplications(OaApprovalApplicationPurchaseDTO dto) { OaApprovalApplications applications = new OaApprovalApplications(); - applications.setApplicationCode(generateApplicationCode()); + applications.setApplicationCode(oaApprovalApplicationsService.generateApplicationCode(ApprovalApplicationCodePrefix.ASSET_PURCHASE)); applications.setApprovalId(ApprovalTypeEnum.PURCHASE.getCode()); applications.setApplicantUserId(dto.getApplicantUserId()); applications.setApplicantName(dto.getApplicantName()); @@ -134,27 +133,5 @@ return purchaseItem; }) .collect(java.util.stream.Collectors.toList()); - } - - /** - * 生成申请单号 - * 格式:CG + 年月日 + 3位序号 - */ - private String generateApplicationCode() { - String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); - String prefix = "CG" + dateStr; - - // 查询当天已生成的申请单号数量 - Long count = oaApprovalApplicationsService.lambdaQuery() - .like(OaApprovalApplications::getApplicationCode, prefix) - .ge(OaApprovalApplications::getCreateTime, LocalDate.now().atStartOfDay()) - .lt(OaApprovalApplications::getCreateTime, LocalDate.now().plusDays(1).atStartOfDay()) - .count(); - - // 生成3位序号,从001开始 - int sequence = (count != null ? count.intValue() : 0) + 1; - String sequenceStr = String.format("%03d", sequence); - - return prefix + sequenceStr; } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java index 97d8f45..1602eac 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java @@ -8,6 +8,7 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.entity.TDept; import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.system.constants.ApprovalApplicationCodePrefix; import com.ruoyi.system.dto.asset.OaApprovalApplicationStorageGeneralDTO; import com.ruoyi.system.dto.asset.OaApprovalApplicationStoragePropertyDTO; import com.ruoyi.system.dto.asset.OaApprovalApplicationStorageVehicleDTO; @@ -47,7 +48,6 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; -import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -369,7 +369,7 @@ } applications.setApprovalId(ApprovalTypeEnum.IN_STOCK.getCode()); applications.setApplicationDate(LocalDate.now()); - applications.setApplicationCode(generateApplicationCode()); + applications.setApplicationCode(oaApprovalApplicationsService.generateApplicationCode(ApprovalApplicationCodePrefix.ASSET_STOCK_IN)); applications.setApprovalStatus(ApprovalStatusEnum.PENDING.getCode()); return applications; } @@ -393,26 +393,6 @@ } return storage; - } - - /** - * 生成申请单号 - * 格式:RK + 年月日 + 3位序号 - */ - private String generateApplicationCode() { - String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); - String prefix = "RK" + dateStr; - - Long count = oaApprovalApplicationsService.lambdaQuery() - .like(OaApprovalApplications::getApplicationCode, prefix) - .ge(OaApprovalApplications::getCreateTime, LocalDate.now().atStartOfDay()) - .lt(OaApprovalApplications::getCreateTime, LocalDate.now().plusDays(1).atStartOfDay()) - .count(); - - int sequence = (count != null ? count.intValue() : 0) + 1; - String sequenceStr = String.format("%03d", sequence); - - return prefix + sequenceStr; } @Override diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationsServiceImpl.java index 3748ef0..ffb53ed 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationsServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationsServiceImpl.java @@ -14,6 +14,8 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Objects; @@ -51,4 +53,22 @@ app.setDeptName(dept.getDeptName()); } } + + @Override + public String generateApplicationCode(String prefix) { + String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + + // 查询当天已生成的申请单号数量 + Long count = this.lambdaQuery() + .likeRight(OaApprovalApplications::getApplicationCode, prefix) + .ge(OaApprovalApplications::getCreateTime, LocalDate.now().atStartOfDay()) + .lt(OaApprovalApplications::getCreateTime, LocalDate.now().plusDays(1).atStartOfDay()) + .count(); + + // 生成4位序号,从0001开始 + int sequence = (count != null ? count.intValue() : 0) + 1; + String sequenceStr = String.format("%04d", sequence); + + return prefix + dateStr + sequenceStr; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetRepairRecordAssetVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetRepairRecordAssetVO.java new file mode 100644 index 0000000..5b54ffe --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetRepairRecordAssetVO.java @@ -0,0 +1,56 @@ +package com.ruoyi.system.vo.asset; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * <p> + * 资产维修记录资产项VO + * </p> + * + * @author WuGuanFengYue + * @since 2025-10-09 + */ +@Data +@ApiModel(value="AssetRepairRecordAssetVO对象", description="资产维修记录资产项VO") +public class AssetRepairRecordAssetVO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "资产ID") + private Integer id; + + @ApiModelProperty(value = "资产编码") + private String assetCode; + + @ApiModelProperty(value = "资产名称") + private String assetName; + + @ApiModelProperty(value = "所属部门") + private String deptName; + + @ApiModelProperty(value = "资产大类(关联的资产类型的父级类型)") + private String parentAssetType; + + @ApiModelProperty(value = "资产小类(关联的资产类型)") + private String assetType; + + @ApiModelProperty(value = "资产状态") + private String assetStatus; + + @ApiModelProperty(value = "维修完成时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime repairFinishTime; + + @ApiModelProperty(value = "维修花费") + private BigDecimal repairFee; + + @ApiModelProperty(value = "维修状态") + private Integer status; +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetRepairRecordDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetRepairRecordDetailVO.java new file mode 100644 index 0000000..c12e603 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetRepairRecordDetailVO.java @@ -0,0 +1,80 @@ +package com.ruoyi.system.vo.asset; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * <p> + * 资产维修记录详情VO + * </p> + * + * @author WuGuanFengYue + * @since 2025-10-09 + */ +@Data +@ApiModel(value="AssetRepairRecordDetailVO对象", description="资产维修记录详情VO") +public class AssetRepairRecordDetailVO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "维修记录ID") + private Integer id; + + @ApiModelProperty(value = "维修单号") + private String repairNo; + + @ApiModelProperty(value = "事项标题") + private String title; + + @ApiModelProperty(value = "维修资产类型") + private String assetTypeName; + + @ApiModelProperty(value = "维修资产一级类型") + private String assetTypeFirstLevel; + + @ApiModelProperty(value = "维修开始时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime repairTime; + + @ApiModelProperty(value = "当前维修状态:0-维修中,1-无需维修,2-维修完成") + private Integer repairStatus; + + @ApiModelProperty(value = "维修人") + private String repairBy; + + @ApiModelProperty(value = "维修费用") + private BigDecimal totalFee; + + @ApiModelProperty(value = "维修备注") + private String repairRemarks; + + @ApiModelProperty(value = "附件URL列表(多个附件使用英文逗号拼接)") + private String attachmentUrls; + + @ApiModelProperty(value = "关联报修单ID") + private Integer repairRequestId; + + @ApiModelProperty(value = "维修资产列表") + private List<AssetRepairRecordAssetVO> assetList; + + @ApiModelProperty(value = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime createTime; + + @ApiModelProperty(value = "创建人") + private String createBy; + + @ApiModelProperty(value = "更新时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime updateTime; + + @ApiModelProperty(value = "更新人") + private String updateBy; +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetRepairRecordPageVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetRepairRecordPageVO.java index 209612b..0da1ddd 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetRepairRecordPageVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/AssetRepairRecordPageVO.java @@ -41,5 +41,5 @@ private LocalDateTime repairTime; @ApiModelProperty(value = "处理状态:0-维修中,1-无需维修,2-维修完成") - private Boolean repairStatus; + private Integer repairStatus; } \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/AssetMainMapper.xml b/ruoyi-system/src/main/resources/mapper/system/AssetMainMapper.xml index 6927d64..5ecaeba 100644 --- a/ruoyi-system/src/main/resources/mapper/system/AssetMainMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/AssetMainMapper.xml @@ -92,6 +92,58 @@ AND (am.asset_name LIKE CONCAT('%', #{query.keyword}, '%') OR am.asset_code LIKE CONCAT('%', #{query.keyword}, '%')) </if> + <if test="query.deptId != null"> + AND (od.id = #{query.deptId} OR FIND_IN_SET(#{query.deptId}, od.parent_id)) + </if> + </where> + ORDER BY COALESCE(oas.storage_time, DATE(am.create_time)) DESC, am.id DESC + </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, + at.type_name AS assetTypeName, + od.dept_name AS ownershipDeptName, + am.asset_status AS assetStatus, + oas.storage_time AS storageTime, + CASE + WHEN am.address_type = 0 THEN + ud.dept_name + WHEN am.address_type = 1 THEN + am.warehouse_name + WHEN am.address_type = 2 THEN + am.address + ELSE '' + END AS useDeptOrLocation + FROM asset_main am + INNER JOIN oa_approval_applications aaa ON aaa.id = am.approval_application_id + LEFT JOIN oa_approval_application_storage oas ON oas.approval_application_id = am.approval_application_id + LEFT JOIN asset_type at ON at.id = am.asset_type_id + LEFT JOIN t_dept od ON od.id = am.ownership_dept_id + LEFT JOIN t_dept ud ON ud.id = am.use_dept_id + LEFT JOIN oa_approval_application_asset_item oaaai ON oaaai.asset_main_id = am.id + LEFT JOIN oa_approval_applications oaa ON oaa.id = oaaai.approval_application_id + <where> + AND IFNULL(am.disabled, 0) = 0 + AND IFNULL(aaa.disabled, 0) = 0 + AND aaa.approval_status = 2 AND aaa.approval_id = '${@com.ruoyi.system.emums.ApprovalTypeEnum@IN_STOCK.getCode()}' + <if test="query != null and query.assetTypeId != null"> + AND am.asset_type_id = #{query.assetTypeId} + </if> + <if test="query != null and query.ownershipDeptId != null"> + AND am.ownership_dept_id = #{query.ownershipDeptId} + </if> + <if test="query != null and query.assetStatus != null and query.assetStatus != ''"> + AND am.asset_status = #{query.assetStatus} + </if> + <if test="query != null and query.keyword != null and query.keyword != ''"> + AND (am.asset_name LIKE CONCAT('%', #{query.keyword}, '%') + OR am.asset_code LIKE CONCAT('%', #{query.keyword}, '%')) + </if> + <if test="query.deptId != null"> + AND (od.id = #{query.deptId} OR FIND_IN_SET(#{query.deptId}, od.parent_id)) + </if> </where> ORDER BY COALESCE(oas.storage_time, DATE(am.create_time)) DESC, am.id DESC </select> diff --git a/ruoyi-system/src/main/resources/mapper/system/AssetRepairRecordMapper.xml b/ruoyi-system/src/main/resources/mapper/system/AssetRepairRecordMapper.xml index 84761b5..b42e869 100644 --- a/ruoyi-system/src/main/resources/mapper/system/AssetRepairRecordMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/AssetRepairRecordMapper.xml @@ -14,6 +14,7 @@ <result column="repair_remarks" property="repairRemarks" /> <result column="attachment_urls" property="attachmentUrls" /> <result column="repair_status" property="repairStatus" /> + <result column="total_fee" property="totalFee" /> <result column="create_time" property="createTime" /> <result column="create_by" property="createBy" /> <result column="update_time" property="updateTime" /> @@ -23,7 +24,7 @@ <!-- 通用查询结果列 --> <sql id="Base_Column_List"> - id, repair_request_id, repair_no, title, repair_time, repair_by, asset_type_id, repair_remarks, attachment_urls, repair_status, create_time, create_by, update_time, update_by, disabled + id, repair_request_id, repair_no, title, repair_time, repair_by, asset_type_id, repair_remarks, attachment_urls, repair_status, total_fee, create_time, create_by, update_time, update_by, disabled </sql> <select id="pageList" resultType="com.ruoyi.system.vo.AssetRepairRequestVO"> select t1.*,t2.asset_main_id as assetMainId,t3.nick_name as reporterName from asset_repair_request t1 @@ -93,4 +94,28 @@ order by t1.repair_status, t1.urgency_level asc </select> + <!-- 查询维修记录关联的资产列表 --> + <select id="getRepairAssetList" resultType="com.ruoyi.system.vo.asset.AssetRepairRecordAssetVO"> + SELECT + am.id, + am.asset_code, + am.asset_name, + dept.dept_name, + parent_type.type_name AS parentAssetType, + current_type.type_name AS assetType, + am.asset_status, + arri.repair_finish_time, + arri.repair_fee, + arri.status + FROM asset_repair_record_item arri + LEFT JOIN asset_main am ON arri.asset_main_id = am.id + LEFT JOIN asset_type current_type ON am.asset_type_id = current_type.id + LEFT JOIN asset_type parent_type ON current_type.parent_id = parent_type.id + LEFT JOIN t_dept dept ON am.use_dept_id = dept.dept_id + LEFT JOIN asset_repair_record arr ON arri.repair_record_id = arr.id + WHERE arri.repair_record_id = #{repairRecordId} + AND am.disabled = 0 + ORDER BY am.asset_code + </select> + </mapper> -- Gitblit v1.7.1