From 4ad572c4e51e44e3134def3c70879b3a698ab1d8 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期一, 29 九月 2025 19:56:16 +0800 Subject: [PATCH] 资产变更 --- ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationChangeDTO.java | 63 +++ ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageVehicleDetailVO.java | 2 ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationDisposeMapper.xml | 4 ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationChangeService.java | 30 + ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationDisposeDTO.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java | 161 ++------ ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationDisposeController.java | 13 ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml | 13 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationDisposeDetailVO.java | 79 ++++ ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStoragePropertyDTO.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationDisposeServiceImpl.java | 36 + ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationDisposePageVO.java | 2 generator/src/test/java/com/xizang/CodeGeneratorTests.java | 7 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationChangeController.java | 84 ++++ ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageVehicleDTO.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationAssetPageQuery.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationChangePageVO.java | 47 ++ ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageGeneralDTO.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetDetailVO.java | 7 ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationChange.java | 12 ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationChangeMapper.xml | 34 + ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationChangeMapper.java | 14 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationChangeDetailVO.java | 86 ++++ ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStoragePropertyDetailVO.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java | 29 + ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationDisposeService.java | 12 ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationDisposeMapper.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetService.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageGeneralDetailVO.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationChangePageQuery.java | 24 + ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationChangeServiceImpl.java | 160 ++++++++ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java | 166 ++++++-- ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationStorageAsset.java | 2 33 files changed, 899 insertions(+), 207 deletions(-) diff --git a/generator/src/test/java/com/xizang/CodeGeneratorTests.java b/generator/src/test/java/com/xizang/CodeGeneratorTests.java index 3b0448d..cde9302 100644 --- a/generator/src/test/java/com/xizang/CodeGeneratorTests.java +++ b/generator/src/test/java/com/xizang/CodeGeneratorTests.java @@ -3,7 +3,12 @@ import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.InjectionConfig; -import com.baomidou.mybatisplus.generator.config.*; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.FileOutConfig; +import com.baomidou.mybatisplus.generator.config.GlobalConfig; +import com.baomidou.mybatisplus.generator.config.PackageConfig; +import com.baomidou.mybatisplus.generator.config.StrategyConfig; +import com.baomidou.mybatisplus.generator.config.TemplateConfig; import com.baomidou.mybatisplus.generator.config.po.LikeTable; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationChangeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationChangeController.java index 2ee0916..120bb3e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationChangeController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationChangeController.java @@ -1,8 +1,31 @@ package com.ruoyi.web.controller.api; - +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.dto.asset.OaApprovalApplicationChangeDTO; +import com.ruoyi.system.query.OaApprovalApplicationChangePageQuery; +import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.system.service.OaApprovalApplicationChangeService; +import com.ruoyi.system.vo.asset.OaApprovalApplicationChangeDetailVO; +import com.ruoyi.system.vo.asset.OaApprovalApplicationChangePageVO; +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.GetMapping; +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> @@ -12,9 +35,68 @@ * @author WuGuanFengYue * @since 2025-09-15 */ +@Validated @RestController +@Api(tags = {"OA审批-资产变更相关接口"}) +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) @RequestMapping("/oa-approval-application-change") public class OaApprovalApplicationChangeController { + private final OaApprovalApplicationChangeService oaApprovalApplicationChangeService; + private final ISysUserService sysUserService; + + @ApiOperation("提交资产变更申请") + @PostMapping("/submit-change") + @Log(title = "资产变更申请-提交", businessType = BusinessType.INSERT) + public R<Void> submitChange(@Valid @RequestBody OaApprovalApplicationChangeDTO dto) { + oaApprovalApplicationChangeService.submitChange(dto); + return R.ok(); + } + + @ApiOperation("获取资产变更申请分页列表") + @PostMapping("/page-list") + public R<IPage<OaApprovalApplicationChangePageVO>> getChangePageList(@RequestBody OaApprovalApplicationChangePageQuery pageQuery) { + // 数据权限:超级管理员/资产管理部查看所有数据,其他部门查看当前及下级部门的数据 + Long userId = SecurityUtils.getUserId(); + boolean isAdmin = SecurityUtils.isAdmin(userId); + + if (!isAdmin) { + try { + // 获取当前用户的部门名称 + String deptName = sysUserService.selectUserById(userId).getDept().getDeptName(); + + // 非超级管理员且非资产管理部,设置部门权限 + if (!"资产管理部".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<OaApprovalApplicationChangePageVO> page = oaApprovalApplicationChangeService.getChangePageList(pageQuery); + return R.ok(page); + } + + @ApiOperation("获取资产变更申请详情") + @GetMapping("/detail/{id}") + public R<OaApprovalApplicationChangeDetailVO> getChangeDetail(@ApiParam(name = "id", value = "申请单ID", required = true) @PathVariable Integer id) { + OaApprovalApplicationChangeDetailVO detail = oaApprovalApplicationChangeService.getChangeDetail(id); + return R.ok(detail); + } + + + @ApiOperation("删除资产变更申请") + @DeleteMapping("/{id}") + public R<?> deleteByApplicationId(@ApiParam(name = "id", value = "申请单ID", required = true) @PathVariable Integer id) { + oaApprovalApplicationChangeService.deleteByApplicationId(id); + return R.ok(); + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationDisposeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationDisposeController.java index 03bb7f9..ad93aec 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationDisposeController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationDisposeController.java @@ -5,11 +5,12 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.SecurityUtils; -import com.ruoyi.system.dto.dispose.OaApprovalApplicationDisposeDTO; +import com.ruoyi.system.dto.asset.OaApprovalApplicationDisposeDTO; import com.ruoyi.system.query.OaApprovalApplicationDisposePageQuery; import com.ruoyi.system.service.OaApprovalApplicationDisposeService; import com.ruoyi.system.service.ISysUserService; -import com.ruoyi.system.vo.dispose.OaApprovalApplicationDisposePageVO; +import com.ruoyi.system.vo.asset.OaApprovalApplicationDisposeDetailVO; +import com.ruoyi.system.vo.asset.OaApprovalApplicationDisposePageVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -17,6 +18,7 @@ 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.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -87,5 +89,12 @@ oaApprovalApplicationDisposeService.deleteByApplicationId(id); return R.ok(); } + + @ApiOperation("获取资产处置申请详情") + @GetMapping("/detail/{id}") + public R<OaApprovalApplicationDisposeDetailVO> getDisposeDetail(@ApiParam(name = "id", value = "申请单ID", required = true) @PathVariable Integer id) { + OaApprovalApplicationDisposeDetailVO detail = oaApprovalApplicationDisposeService.getDisposeDetail(id); + return R.ok(detail); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationChangeDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationChangeDTO.java new file mode 100644 index 0000000..04cb751 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationChangeDTO.java @@ -0,0 +1,63 @@ +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.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.time.LocalDate; +import java.util.List; + +/** + * 资产变更申请DTO + * @author mitao + * @date 2025/9/29 + */ +@Data +@ApiModel("资产变更申请DTO") +public class OaApprovalApplicationChangeDTO { + + @ApiModelProperty("事项标题") + @NotNull(message = "事项标题不能为空") + private String title; + + @ApiModelProperty("资产类型ID") + @NotNull(message = "资产类型不能为空") + private Integer assetTypeId; + + @ApiModelProperty("变更日期") + @NotNull(message = "变更日期不能为空") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate changeTime; + + @ApiModelProperty("变更备注") + private String applicationReason; + + @ApiModelProperty(value = "使用/位置类型 0-部门,1-仓库,2-录入地址") + @NotNull(message = "使用/位置类型不能为空") + private Integer addressType; + + @ApiModelProperty(value = "使用部门ID") + private Integer useDeptId; + + @ApiModelProperty(value = "仓库ID") + private Integer warehouseId; + + @ApiModelProperty(value = "所在位置") + private String address; + + @ApiModelProperty(value = "管理部门ID") + @NotNull(message = "管理部门不能为空") + private Integer ownershipDeptId; + + @ApiModelProperty(value = "使用人") + @NotBlank(message = "使用人不能为空") + private String userName; + + @ApiModelProperty("资产列表") + @NotEmpty(message = "资产列表不能为空") + private List<Integer> assetMainIds; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/dispose/OaApprovalApplicationDisposeDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationDisposeDTO.java similarity index 97% rename from ruoyi-system/src/main/java/com/ruoyi/system/dto/dispose/OaApprovalApplicationDisposeDTO.java rename to ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationDisposeDTO.java index 9b75f6b..71500ff 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/dispose/OaApprovalApplicationDisposeDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationDisposeDTO.java @@ -1,4 +1,4 @@ -package com.ruoyi.system.dto.dispose; +package com.ruoyi.system.dto.asset; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageGeneralDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageGeneralDTO.java index 7e64a27..d434cb9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageGeneralDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageGeneralDTO.java @@ -55,7 +55,7 @@ @ApiModelProperty(value = "数量") @NotNull(message = "数量不能为空") - private BigDecimal quantity; + private Integer quantity; @ApiModelProperty(value = "单价") @NotNull(message = "单价不能为空") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStoragePropertyDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStoragePropertyDTO.java index c1a0677..02e2cd3 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStoragePropertyDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStoragePropertyDTO.java @@ -55,7 +55,7 @@ @ApiModelProperty(value = "数量") @NotNull(message = "数量不能为空") - private BigDecimal quantity; + private Integer quantity; @ApiModelProperty(value = "单价") @NotNull(message = "单价不能为空") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageVehicleDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageVehicleDTO.java index 73e8116..f6533bd 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageVehicleDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/asset/OaApprovalApplicationStorageVehicleDTO.java @@ -55,7 +55,7 @@ @ApiModelProperty(value = "数量") @NotNull(message = "数量不能为空") - private BigDecimal quantity; + private Integer quantity; @ApiModelProperty(value = "单价") @NotNull(message = "单价不能为空") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationChangeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationChangeMapper.java index 11c4eaa..1cb3240 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationChangeMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationChangeMapper.java @@ -1,7 +1,11 @@ package com.ruoyi.system.mapper; -import com.ruoyi.system.model.OaApprovalApplicationChange; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.ruoyi.system.model.OaApprovalApplicationChange; +import com.ruoyi.system.query.OaApprovalApplicationChangePageQuery; +import com.ruoyi.system.vo.asset.OaApprovalApplicationChangePageVO; +import org.apache.ibatis.annotations.Param; /** * <p> @@ -13,4 +17,12 @@ */ public interface OaApprovalApplicationChangeMapper extends BaseMapper<OaApprovalApplicationChange> { + /** + * 分页查询资产变更申请列表 + * @param page 分页参数 + * @param pageQuery 查询条件 + * @return 分页结果 + */ + IPage<OaApprovalApplicationChangePageVO> selectChangePage(IPage<OaApprovalApplicationChangePageVO> page, @Param("query") OaApprovalApplicationChangePageQuery pageQuery); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationDisposeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationDisposeMapper.java index 8211d62..a8081e6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationDisposeMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationDisposeMapper.java @@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.system.model.OaApprovalApplicationDispose; import com.ruoyi.system.query.OaApprovalApplicationDisposePageQuery; -import com.ruoyi.system.vo.dispose.OaApprovalApplicationDisposePageVO; +import com.ruoyi.system.vo.asset.OaApprovalApplicationDisposePageVO; import org.apache.ibatis.annotations.Param; /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationChange.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationChange.java index 5d35924..6c79c4f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationChange.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationChange.java @@ -52,12 +52,16 @@ @TableField("ownership_dept_id") private Integer ownershipDeptId; - @ApiModelProperty(value = "仓库ID,关联warehouse表") - @TableField("warehouse_id") + @ApiModelProperty(value = "使用/位置类型 0-部门,1-仓库,2-录入地址") + private Integer addressType; + + @ApiModelProperty(value = "使用部门ID") + private Integer useDeptId; + + @ApiModelProperty(value = "仓库ID") private Integer warehouseId; - @ApiModelProperty(value = "存放地点") - @TableField("address") + @ApiModelProperty(value = "所在位置") private String address; @ApiModelProperty(value = "使用人") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationStorageAsset.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationStorageAsset.java index dac7d99..4ae5eaf 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationStorageAsset.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationStorageAsset.java @@ -64,7 +64,7 @@ private String measurementUnit; @ApiModelProperty(value = "数量") - private BigDecimal quantity; + private Integer quantity; @ApiModelProperty(value = "单价") private BigDecimal unitPrice; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationAssetPageQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationAssetPageQuery.java index 7414d54..f741625 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationAssetPageQuery.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationAssetPageQuery.java @@ -23,5 +23,8 @@ @ApiModelProperty("操作类型 前端不传") private Integer type; // 0-领用,1-借用,2-归还 + + @ApiModelProperty("是否查询归还提醒 前端不传") + private Integer returnNotify = 0; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationChangePageQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationChangePageQuery.java new file mode 100644 index 0000000..fc57489 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/OaApprovalApplicationChangePageQuery.java @@ -0,0 +1,24 @@ +package com.ruoyi.system.query; + +import com.ruoyi.common.core.domain.BasePage; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 资产变更申请分页查询参数 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "资产变更申请分页查询参数") +public class OaApprovalApplicationChangePageQuery extends BasePage { + + private static final long serialVersionUID = 5275799518107306565L; + + @ApiModelProperty(value = "标题/单号") + private String keyword; + + @ApiModelProperty(value = "部门ID") + private Integer deptId; +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetService.java index f06d353..242d43c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetService.java @@ -98,4 +98,6 @@ * @param applicationId */ void deleteByApplicationId(Integer applicationId); + + OaApprovalApplicationAsset getOaApprovalApplicationAssetByApplicationId(Integer applicationId); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationChangeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationChangeService.java index 743cc8f..3c36eb6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationChangeService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationChangeService.java @@ -1,7 +1,12 @@ package com.ruoyi.system.service; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.system.dto.asset.OaApprovalApplicationChangeDTO; import com.ruoyi.system.model.OaApprovalApplicationChange; +import com.ruoyi.system.query.OaApprovalApplicationChangePageQuery; +import com.ruoyi.system.vo.asset.OaApprovalApplicationChangeDetailVO; +import com.ruoyi.system.vo.asset.OaApprovalApplicationChangePageVO; /** * <p> @@ -13,4 +18,29 @@ */ public interface OaApprovalApplicationChangeService extends IService<OaApprovalApplicationChange> { + /** + * 提交变更申请 + * @param dto 变更申请数据 + */ + void submitChange(OaApprovalApplicationChangeDTO dto); + + /** + * 获取资产变更申请分页列表 + * @param pageQuery 分页查询参数 + * @return 分页结果 + */ + IPage<OaApprovalApplicationChangePageVO> getChangePageList(OaApprovalApplicationChangePageQuery pageQuery); + + /** + * 获取资产变更申请详情 + * @param id 申请单ID + * @return 详情信息 + */ + OaApprovalApplicationChangeDetailVO getChangeDetail(Integer id); + + /** + * 删除资产变更申请 + * @param id + */ + void deleteByApplicationId(Integer id); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationDisposeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationDisposeService.java index 2824162..dab3ce2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationDisposeService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationDisposeService.java @@ -2,10 +2,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; -import com.ruoyi.system.dto.dispose.OaApprovalApplicationDisposeDTO; +import com.ruoyi.system.dto.asset.OaApprovalApplicationDisposeDTO; import com.ruoyi.system.model.OaApprovalApplicationDispose; import com.ruoyi.system.query.OaApprovalApplicationDisposePageQuery; -import com.ruoyi.system.vo.dispose.OaApprovalApplicationDisposePageVO; +import com.ruoyi.system.vo.asset.OaApprovalApplicationDisposeDetailVO; +import com.ruoyi.system.vo.asset.OaApprovalApplicationDisposePageVO; /** * <p> @@ -35,4 +36,11 @@ * @param applicationId */ void deleteByApplicationId(Integer applicationId); + + /** + * 获取处置申请详情 + * @param id 申请单ID + * @return 处置申请详情 + */ + OaApprovalApplicationDisposeDetailVO getDisposeDetail(Integer id); } 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 db13495..3a144ff 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 @@ -41,11 +41,12 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -115,20 +116,45 @@ return; } + List<AssetMain> assetMainList = new ArrayList<>(); + Map<Integer, Integer> storageAssetIdToAssetMainIdMap = new HashMap<>(); + Map<Integer, Integer> storageAssetIdToAssetTypeMap = new HashMap<>(); + + // 预查询当天已存在的资产编码数量 + LocalDate currentDate = LocalDate.now(); + Map<Integer, Long> assetTypeCountMap = new HashMap<>(); + for (OaApprovalApplicationStorageAsset storageAsset : storageAssets) { + Integer assetTypeId = storageAsset.getAssetTypeId(); Integer assetMainType = storageAsset.getAssetMainType(); - BigDecimal quantity = storageAsset.getQuantity(); + Integer quantity = storageAsset.getQuantity(); // 根据数量生成对应条数的资产记录 - int assetCount = quantity != null ? quantity.intValue() : 1; + int assetCount = quantity != null ? quantity : 1; + + // 获取该类型资产的编码前缀和当前数量 + String typeCodePrefix = assetTypeService.getAssetCodePrefix(assetTypeId); + String dateStr = currentDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")); + String prefix = typeCodePrefix + dateStr + "-"; + + // 获取当天该类型资产的当前数量(只查询一次) + Long currentCount = assetTypeCountMap.computeIfAbsent(assetTypeId, k -> + this.lambdaQuery() + .like(AssetMain::getAssetCode, prefix) + .ge(AssetMain::getCreateTime, currentDate.atStartOfDay()) + .lt(AssetMain::getCreateTime, currentDate.plusDays(1).atStartOfDay()) + .count() + ); for (int i = 0; i < assetCount; i++) { // 创建资产主表记录 AssetMain assetMain = new AssetMain(); - BeanUtil.copyProperties(storageAsset, assetMain); + BeanUtil.copyProperties(storageAsset, assetMain, "id"); - // 为每个资产生成编码 - String assetCode = generateAssetCode(storageAsset.getAssetTypeId(), LocalDate.now()); + // 生成资产编码,使用递增的序号 + int sequence = (currentCount != null ? currentCount.intValue() : 0) + i + 1; + String sequenceStr = String.format("%04d", sequence); + String assetCode = prefix + sequenceStr; assetMain.setAssetCode(assetCode); // 单个资产的数量设为1 @@ -141,66 +167,102 @@ assetMain.setCreateBy(SecurityUtils.getUsername()); assetMain.setDisabled(false); - // 保存资产主表 - assetMainMapper.insert(assetMain); + assetMainList.add(assetMain); - // 2. 根据资产类型保存扩展信息 - if (assetMainType != null) { - if (assetMainType == 1) { - // 房产资产 - 保存房产扩展信息 - savePropertyExtension(storageAsset.getId(), assetMain.getId()); - } else if (assetMainType == 2) { - // 车辆资产 - 保存车辆扩展信息 - saveVehicleExtension(storageAsset.getId(), assetMain.getId()); - } - // assetMainType == 0 为通用资产,无需保存扩展信息 - } + // 记录storageAssetId和资产类型的映射关系,用于后续创建扩展信息 + storageAssetIdToAssetTypeMap.put(storageAsset.getId(), assetMainType); + } + + // 更新计数器,确保下一个storageAsset的编码序号正确 + if (currentCount != null) { + assetTypeCountMap.put(assetTypeId, currentCount + assetCount); } } - } - - /** - * 保存房产资产扩展信息 - */ - private void savePropertyExtension(Integer storageAssetId, Integer assetMainId) { - // 查询房产扩展信息 - OaApprovalApplicationStorageAssetPropertyExt propertyExt = oaApprovalApplicationStorageAssetPropertyExtMapper - .selectOne(new LambdaQueryWrapper<OaApprovalApplicationStorageAssetPropertyExt>() - .eq(OaApprovalApplicationStorageAssetPropertyExt::getStorageAssetId, storageAssetId)); - if (propertyExt != null) { - AssetPropertyExt assetPropertyExt = new AssetPropertyExt(); - BeanUtil.copyProperties(propertyExt, assetPropertyExt); - assetPropertyExt.setAssetMainId(assetMainId); - assetPropertyExt.setCreateTime(LocalDateTime.now()); - assetPropertyExt.setCreateBy(SecurityUtils.getUsername()); - assetPropertyExt.setDisabled(false); + // 批量保存资产主表 + if (!assetMainList.isEmpty()) { + this.saveBatch(assetMainList); - assetPropertyExtMapper.insert(assetPropertyExt); + // 建立storageAssetId到assetMainId的映射关系 + int assetMainIndex = 0; + for (OaApprovalApplicationStorageAsset storageAsset : storageAssets) { + int quantity = storageAsset.getQuantity() != null ? storageAsset.getQuantity() : 1; + for (int i = 0; i < quantity; i++) { + if (assetMainIndex < assetMainList.size()) { + storageAssetIdToAssetMainIdMap.put(storageAsset.getId(), assetMainList.get(assetMainIndex).getId()); + assetMainIndex++; + } + } + } + + // 准备并保存扩展信息 + saveExtensionInfoBatch(storageAssetIdToAssetMainIdMap, storageAssetIdToAssetTypeMap); } } /** - * 保存车辆资产扩展信息 + * 批量保存扩展信息 */ - private void saveVehicleExtension(Integer storageAssetId, Integer assetMainId) { - // 查询车辆扩展信息 - OaApprovalApplicationStorageAssetVehicleExt vehicleExt = oaApprovalApplicationStorageAssetVehicleExtMapper - .selectOne(new QueryWrapper<OaApprovalApplicationStorageAssetVehicleExt>() - .eq("storage_asset_id", storageAssetId)); + private void saveExtensionInfoBatch(Map<Integer, Integer> storageAssetIdToAssetMainIdMap, Map<Integer, Integer> storageAssetIdToAssetTypeMap) { + List<AssetPropertyExt> propertyExtList = new ArrayList<>(); + List<AssetVehicleExt> vehicleExtList = new ArrayList<>(); - if (vehicleExt != null) { - AssetVehicleExt assetVehicleExt = new AssetVehicleExt(); - BeanUtil.copyProperties(vehicleExt, assetVehicleExt); - assetVehicleExt.setAssetMainId(assetMainId); - assetVehicleExt.setCreateTime(LocalDateTime.now()); - assetVehicleExt.setCreateBy(SecurityUtils.getUsername()); - assetVehicleExt.setDisabled(false); + // 遍历所有需要扩展信息的storageAsset + for (Map.Entry<Integer, Integer> entry : storageAssetIdToAssetMainIdMap.entrySet()) { + Integer storageAssetId = entry.getKey(); + Integer assetMainId = entry.getValue(); + Integer assetMainType = storageAssetIdToAssetTypeMap.get(storageAssetId); - assetVehicleExtMapper.insert(assetVehicleExt); + if (assetMainType == null) { + continue; + } + + if (assetMainType == 1) { + // 房产资产 - 查询并准备房产扩展信息 + OaApprovalApplicationStorageAssetPropertyExt propertyExt = oaApprovalApplicationStorageAssetPropertyExtMapper + .selectOne(new LambdaQueryWrapper<OaApprovalApplicationStorageAssetPropertyExt>() + .eq(OaApprovalApplicationStorageAssetPropertyExt::getStorageAssetId, storageAssetId)); + + if (propertyExt != null) { + AssetPropertyExt assetPropertyExt = new AssetPropertyExt(); + BeanUtil.copyProperties(propertyExt, assetPropertyExt,"id"); + assetPropertyExt.setAssetMainId(assetMainId); + assetPropertyExt.setCreateTime(LocalDateTime.now()); + assetPropertyExt.setCreateBy(SecurityUtils.getUsername()); + assetPropertyExt.setDisabled(false); + + propertyExtList.add(assetPropertyExt); + } + } else if (assetMainType == 2) { + // 车辆资产 - 查询并准备车辆扩展信息 + OaApprovalApplicationStorageAssetVehicleExt vehicleExt = oaApprovalApplicationStorageAssetVehicleExtMapper + .selectOne(new QueryWrapper<OaApprovalApplicationStorageAssetVehicleExt>() + .eq("storage_asset_id", storageAssetId)); + + if (vehicleExt != null) { + AssetVehicleExt assetVehicleExt = new AssetVehicleExt(); + BeanUtil.copyProperties(vehicleExt, assetVehicleExt,"id"); + assetVehicleExt.setAssetMainId(assetMainId); + assetVehicleExt.setCreateTime(LocalDateTime.now()); + assetVehicleExt.setCreateBy(SecurityUtils.getUsername()); + assetVehicleExt.setDisabled(false); + + vehicleExtList.add(assetVehicleExt); + } + } + // assetMainType == 0 为通用资产,无需保存扩展信息 + } + + // 批量保存扩展信息 + if (!propertyExtList.isEmpty()) { + assetPropertyExtService.saveBatch(propertyExtList); + } + if (!vehicleExtList.isEmpty()) { + assetVehicleExtService.saveBatch(vehicleExtList); } } - + + @Override public List<AssetMainVO> getListByIds(List<Integer> assetMainIds) { if (!CollectionUtils.isEmpty(assetMainIds)) { 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 36986e6..0f91b35 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 @@ -166,7 +166,7 @@ if (app == null) { throw new ServiceException("审批主记录不存在"); } - OaApprovalApplicationAsset detail = this.lambdaQuery().eq(OaApprovalApplicationAsset::getApprovalApplicationId, app.getId()).one(); + OaApprovalApplicationAsset detail = getOaApprovalApplicationAssetByApplicationId(app.getId()); if (detail == null) { throw new ServiceException("记录不存在"); } @@ -198,7 +198,7 @@ if (app == null) { throw new ServiceException("审批主记录不存在"); } - OaApprovalApplicationAsset detail = this.lambdaQuery().eq(OaApprovalApplicationAsset::getApprovalApplicationId, app.getId()).one(); + OaApprovalApplicationAsset detail = getOaApprovalApplicationAssetByApplicationId(app.getId()); if (detail == null) { throw new ServiceException("记录不存在"); } @@ -228,6 +228,7 @@ vo.setAssetTypeId(detail.getAssetTypeId()); vo.setOperateTime(detail.getOperateTime()); vo.setExpectReturnDate(detail.getExpectReturnDate()); + vo.setReturnStatus(detail.getReturnStatus()); vo.setItems(assetMainVOS); return vo; } @@ -266,6 +267,7 @@ OaApprovalApplications applications = BeanUtil.copyProperties(dto, OaApprovalApplications.class); applications.setApplicationCode(generateApplicationCode("GH")); applications.setApprovalId(ApprovalTypeEnum.RETURN.getCode()); + applications.setApplicationDate(LocalDate.now()); // 2. 获取流程首节点,设置当前节点,并保存 OaApprovalFlowNode firstFlowNode = getFirstFlowNode(ApprovalTypeEnum.RETURN.getCode()); @@ -308,11 +310,14 @@ @Override public IPage<OaApprovalApplicationAssetPageVO> getReturnNotifyPageList(OaApprovalApplicationAssetPageQuery pageQuery) { Page<OaApprovalApplicationAssetPageVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()); - pageQuery.setType(AssetOperateTypeEnum.RETURN.getCode()); + pageQuery.setType(AssetOperateTypeEnum.BORROW.getCode()); + pageQuery.setReturnNotify(1); IPage<OaApprovalApplicationAssetPageVO> pageByType = this.baseMapper.getPageByType(page, pageQuery); LocalDate toDay = LocalDate.now(); pageByType.getRecords().forEach(item->{ - item.setDueDays(toDay.until(item.getExpectReturnDate()).getDays()); + if (Objects.nonNull(item.getExpectReturnDate())) { + item.setDueDays(toDay.until(item.getExpectReturnDate()).getDays()); + } }); return pageByType; } @@ -323,11 +328,17 @@ if (app == null) { throw new ServiceException("审批主记录不存在"); } - OaApprovalApplicationAsset detail = this.lambdaQuery().eq(OaApprovalApplicationAsset::getApprovalApplicationId, app.getId()).one(); + OaApprovalApplicationAsset detail = getOaApprovalApplicationAssetByApplicationId(id); if (detail == null) { throw new ServiceException("记录不存在"); } oaApprovalApplicationsService.assembleApplicationDetail(app); + //查询借用申请单 + OaApprovalApplications borrowApprovalApplication = oaApprovalApplicationsService.getById(detail.getBorrowApplicationId()); + OaApprovalApplicationAsset borrowApprovalApplicationAsset = null; + if (Objects.nonNull(borrowApprovalApplication)) { + borrowApprovalApplicationAsset = getOaApprovalApplicationAssetByApplicationId(borrowApprovalApplication.getId()); + } List<Integer> assetMainIds = oaApprovalApplicationAssetItemService.lambdaQuery() .eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, app.getId()) .list().stream().map(OaApprovalApplicationAssetItem::getAssetMainId) @@ -335,9 +346,12 @@ List<AssetMainVO> assetMainVOS = assetMainIds.isEmpty() ? Collections.emptyList() : assetMainService.getListByIds(assetMainIds); OaApprovalApplicationAssetDetailVO vo = BeanUtil.copyProperties(app, OaApprovalApplicationAssetDetailVO.class); + vo.setTitle(detail.getTitle()); vo.setAssetTypeId(detail.getAssetTypeId()); vo.setOperateTime(detail.getOperateTime()); + vo.setBorrowDate(Objects.nonNull(borrowApprovalApplicationAsset) ? borrowApprovalApplicationAsset.getOperateTime() : null); + vo.setReturnStatus(detail.getReturnStatus()); vo.setItems(assetMainVOS); return vo; } @@ -348,4 +362,9 @@ oaApprovalApplicationAssetItemService.lambdaUpdate().eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, applicationId).remove(); oaApprovalApplicationsService.removeById(applicationId); } + + @Override + public OaApprovalApplicationAsset getOaApprovalApplicationAssetByApplicationId(Integer applicationId) { + return this.lambdaQuery().eq(OaApprovalApplicationAsset::getApprovalApplicationId, applicationId).one(); + } } 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 5ded75c..e73f360 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 @@ -1,10 +1,40 @@ package com.ruoyi.system.service.impl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +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.exception.ServiceException; +import com.ruoyi.system.dto.asset.OaApprovalApplicationChangeDTO; +import com.ruoyi.system.emums.ApprovalStatusEnum; +import com.ruoyi.system.emums.ApprovalTypeEnum; import com.ruoyi.system.mapper.OaApprovalApplicationChangeMapper; +import com.ruoyi.system.model.OaApprovalApplicationAssetItem; import com.ruoyi.system.model.OaApprovalApplicationChange; +import com.ruoyi.system.model.OaApprovalApplications; +import com.ruoyi.system.model.OaApprovalFlowNode; +import com.ruoyi.system.query.OaApprovalApplicationChangePageQuery; +import com.ruoyi.system.service.AssetMainService; +import com.ruoyi.system.service.OaApprovalApplicationAssetItemService; import com.ruoyi.system.service.OaApprovalApplicationChangeService; +import com.ruoyi.system.service.OaApprovalApplicationsService; +import com.ruoyi.system.service.OaApprovalFlowNodeService; +import com.ruoyi.system.service.OaApprovalTodoService; +import com.ruoyi.system.vo.asset.AssetMainVO; +import com.ruoyi.system.vo.asset.OaApprovalApplicationChangeDetailVO; +import com.ruoyi.system.vo.asset.OaApprovalApplicationChangePageVO; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +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.Objects; +import java.util.stream.Collectors; /** * <p> @@ -15,6 +45,136 @@ * @since 2025-09-15 */ @Service +@RequiredArgsConstructor public class OaApprovalApplicationChangeServiceImpl extends ServiceImpl<OaApprovalApplicationChangeMapper, OaApprovalApplicationChange> implements OaApprovalApplicationChangeService { + private final OaApprovalApplicationsService oaApprovalApplicationsService; + private final OaApprovalFlowNodeService oaApprovalFlowNodeService; + private final OaApprovalTodoService oaApprovalTodoService; + private final OaApprovalApplicationAssetItemService oaApprovalApplicationAssetItemService; + private final AssetMainService assetMainService; + + @Override + @Transactional(rollbackFor = Exception.class) + public void submitChange(OaApprovalApplicationChangeDTO dto) { + if (CollUtil.isEmpty(dto.getAssetMainIds())) { + throw new ServiceException("资产ID列表不能为空"); + } + + // 1. 构建并保存审批主表 + OaApprovalApplications applications = buildOaApprovalApplications(dto); + + // 2. 获取流程首节点,设置当前节点,并保存 + OaApprovalFlowNode firstFlowNode = getFirstFlowNode(ApprovalTypeEnum.ASSET_CHANGE.getCode()); + applications.setCurrentFlowNodeId(firstFlowNode.getId()); + oaApprovalApplicationsService.save(applications); + + // 3. 创建待办 + oaApprovalTodoService.createApprovalTodos(applications.getId(), applications.getApplicationCode(), firstFlowNode, dto.getOwnershipDeptId()); + + // 4. 保存变更明细 + OaApprovalApplicationChange detail = buildOaApprovalApplicationChange(dto, applications.getId()); + this.save(detail); + + // 5. 保存关联的资产项 + List<OaApprovalApplicationAssetItem> items = dto.getAssetMainIds().stream() + .map(i -> { + OaApprovalApplicationAssetItem item = new OaApprovalApplicationAssetItem(); + item.setApprovalApplicationId(applications.getId()); + item.setAssetMainId(i); + return item; + }) + .collect(Collectors.toList()); + oaApprovalApplicationAssetItemService.saveBatch(items); + } + + private OaApprovalApplications buildOaApprovalApplications(OaApprovalApplicationChangeDTO dto) { + OaApprovalApplications applications = BeanUtil.copyProperties(dto, OaApprovalApplications.class); + applications.setApplicationCode(generateApplicationCode("BG")); + applications.setApprovalId(ApprovalTypeEnum.ASSET_CHANGE.getCode()); + applications.setApplicationDate(LocalDate.now()); + applications.setApprovalStatus(ApprovalStatusEnum.PENDING.getCode()); + return applications; + } + + private OaApprovalApplicationChange buildOaApprovalApplicationChange(OaApprovalApplicationChangeDTO dto, Integer applicationId) { + OaApprovalApplicationChange change = BeanUtil.copyProperties(dto, OaApprovalApplicationChange.class); + change.setApprovalApplicationId(applicationId); + return change; + } + + private OaApprovalFlowNode getFirstFlowNode(Integer approvalId) { + List<OaApprovalFlowNode> flowNodes = oaApprovalFlowNodeService.lambdaQuery() + .eq(OaApprovalFlowNode::getApprovalId, approvalId) + .eq(OaApprovalFlowNode::getStatus, 1) + .orderByAsc(OaApprovalFlowNode::getSortOrder) + .list(); + if (CollectionUtils.isEmpty(flowNodes)) { + throw new ServiceException("未找到有效的审批流程配置"); + } + return flowNodes.get(0); + } + + /** + * 生成申请单号:BG + 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 + public IPage<OaApprovalApplicationChangePageVO> getChangePageList(OaApprovalApplicationChangePageQuery pageQuery) { + Page<OaApprovalApplicationChangePageVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()); + return this.baseMapper.selectChangePage(page, pageQuery); + } + + @Override + public OaApprovalApplicationChangeDetailVO getChangeDetail(Integer id) { + OaApprovalApplications app = oaApprovalApplicationsService.getById(id); + if (app == null) { + throw new ServiceException("审批主记录不存在"); + } + OaApprovalApplicationChange detail = this.lambdaQuery().eq(OaApprovalApplicationChange::getApprovalApplicationId, app.getId()).one(); + if (detail == null) { + throw new ServiceException("记录不存在"); + } + oaApprovalApplicationsService.assembleApplicationDetail(app); + List<Integer> assetMainIds = oaApprovalApplicationAssetItemService.lambdaQuery() + .eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, app.getId()) + .list().stream().map(OaApprovalApplicationAssetItem::getAssetMainId) + .distinct().collect(Collectors.toList()); + + List<AssetMainVO> assetMainVOS = assetMainIds.isEmpty() ? Collections.emptyList() : assetMainService.getListByIds(assetMainIds); + OaApprovalApplicationChangeDetailVO vo = BeanUtil.copyProperties(app, OaApprovalApplicationChangeDetailVO.class); + vo.setTitle(detail.getTitle()); + vo.setAssetTypeId(detail.getAssetTypeId()); + vo.setAddressType(detail.getAddressType()); + vo.setUseDeptId(detail.getUseDeptId()); + vo.setWarehouseId(detail.getWarehouseId()); + vo.setAddress(detail.getAddress()); + vo.setOwnershipDeptId(detail.getOwnershipDeptId()); + vo.setUserName(detail.getUserName()); + vo.setItems(assetMainVOS); + return vo; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteByApplicationId(Integer id) { + OaApprovalApplications applications = oaApprovalApplicationsService.getById(id); + if (Objects.isNull(applications)) { + throw new ServiceException("申请记录不存在"); + } + if (!applications.getApprovalStatus().equals(ApprovalStatusEnum.REFUSED.getCode())) { + throw new ServiceException("该申请不能删除"); + } + this.lambdaUpdate().eq(OaApprovalApplicationChange::getApprovalApplicationId, id).remove(); + oaApprovalApplicationAssetItemService.lambdaUpdate().eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, id).remove(); + oaApprovalApplicationsService.removeById(id); + } } 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 edd5be5..6659bdc 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 @@ -6,7 +6,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.dto.dispose.OaApprovalApplicationDisposeDTO; +import com.ruoyi.system.dto.asset.OaApprovalApplicationDisposeDTO; import com.ruoyi.system.emums.ApprovalStatusEnum; import com.ruoyi.system.emums.ApprovalTypeEnum; import com.ruoyi.system.mapper.OaApprovalApplicationDisposeMapper; @@ -15,12 +15,15 @@ import com.ruoyi.system.model.OaApprovalApplications; import com.ruoyi.system.model.OaApprovalFlowNode; import com.ruoyi.system.query.OaApprovalApplicationDisposePageQuery; +import com.ruoyi.system.service.AssetMainService; import com.ruoyi.system.service.OaApprovalApplicationAssetItemService; import com.ruoyi.system.service.OaApprovalApplicationDisposeService; import com.ruoyi.system.service.OaApprovalApplicationsService; import com.ruoyi.system.service.OaApprovalFlowNodeService; import com.ruoyi.system.service.OaApprovalTodoService; -import com.ruoyi.system.vo.dispose.OaApprovalApplicationDisposePageVO; +import com.ruoyi.system.vo.asset.AssetMainVO; +import com.ruoyi.system.vo.asset.OaApprovalApplicationDisposeDetailVO; +import com.ruoyi.system.vo.asset.OaApprovalApplicationDisposePageVO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -28,6 +31,7 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -47,6 +51,7 @@ private final OaApprovalFlowNodeService oaApprovalFlowNodeService; private final OaApprovalTodoService oaApprovalTodoService; private final OaApprovalApplicationAssetItemService oaApprovalApplicationAssetItemService; + private final AssetMainService assetMainService; @Override public IPage<OaApprovalApplicationDisposePageVO> getDisposePageList(OaApprovalApplicationDisposePageQuery pageQuery) { @@ -133,4 +138,31 @@ oaApprovalApplicationAssetItemService.lambdaUpdate().eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, applicationId).remove(); oaApprovalApplicationsService.removeById(applicationId); } + + @Override + public OaApprovalApplicationDisposeDetailVO getDisposeDetail(Integer id) { + OaApprovalApplications app = oaApprovalApplicationsService.getById(id); + if (app == null) { + throw new ServiceException("审批主记录不存在"); + } + OaApprovalApplicationDispose detail = this.lambdaQuery().eq(OaApprovalApplicationDispose::getApprovalApplicationId, app.getId()).one(); + if (detail == null) { + throw new ServiceException("记录不存在"); + } + oaApprovalApplicationsService.assembleApplicationDetail(app); + List<Integer> assetMainIds = oaApprovalApplicationAssetItemService.lambdaQuery() + .eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, app.getId()) + .list().stream().map(OaApprovalApplicationAssetItem::getAssetMainId) + .distinct().collect(Collectors.toList()); + + List<AssetMainVO> assetMainVOS = assetMainIds.isEmpty() ? Collections.emptyList() : assetMainService.getListByIds(assetMainIds); + OaApprovalApplicationDisposeDetailVO vo = BeanUtil.copyProperties(app, OaApprovalApplicationDisposeDetailVO.class); + vo.setTitle(detail.getTitle()); + vo.setAssetTypeId(detail.getAssetTypeId()); + vo.setDisposeTime(detail.getDisposeTime()); + vo.setDisposeType(detail.getDisposeType()); + vo.setDisposeTotalAmount(detail.getDisposeTotalAmount()); + vo.setItems(assetMainVOS); + return vo; + } } 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 8482ca5..97d8f45 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 @@ -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.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -38,6 +39,7 @@ import com.ruoyi.system.vo.asset.OaApprovalApplicationStoragePropertyDetailVO; import com.ruoyi.system.vo.asset.OaApprovalApplicationStorageVehicleDetailVO; import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -213,16 +215,9 @@ * 构建通用资产主表数据 */ private OaApprovalApplicationStorageAsset buildAssetMain(OaApprovalApplicationStorageGeneralDTO.GeneralAssetItemDTO item, Integer applicationId, Integer assetTypeId, LocalDate storageDate, OaApprovalApplicationStorageGeneralDTO baseDto) { - OaApprovalApplicationStorageAsset assetMain = new OaApprovalApplicationStorageAsset(); - assetMain.setApprovalApplicationId(applicationId.intValue()); - assetMain.setAssetOriginalCode(item.getAssetOriginalCode()); - assetMain.setAssetName(item.getAssetName()); - assetMain.setCategory(item.getCategory()); - assetMain.setSpecificationModel(item.getSpecificationModel()); + OaApprovalApplicationStorageAsset assetMain = BeanUtil.copyProperties(item, OaApprovalApplicationStorageAsset.class); + assetMain.setApprovalApplicationId(applicationId); assetMain.setAssetTypeId(assetTypeId); - assetMain.setMeasurementUnit(item.getMeasurementUnit()); - assetMain.setUnitPrice(item.getUnitPrice()); - assetMain.setUsefulLife(item.getUsefulLife()); // 根据权属单位/部门名称填充ID if (item.getOwnershipDeptName() != null && !item.getOwnershipDeptName().isEmpty()) { TDept ownerDept = tDeptService.lambdaQuery() @@ -232,19 +227,9 @@ assetMain.setOwnershipDeptId(ownerDept.getId()); } } - assetMain.setUserName(item.getUserName()); // 根据整单 addressType 写入使用部门ID或仓库ID applyAddressToAssetMain(assetMain, item.getAddressType(), item.getUseDeptName(), item.getWarehouseName(), item.getAddress()); - assetMain.setAddressType(item.getAddressType()); assetMain.setAssetMainType(AssetTypeEnum.GENERAL.getCode()); - assetMain.setAssetStatus(item.getAssetStatus()); - assetMain.setRemarks(item.getRemarks()); - assetMain.setAccountingStatus(item.getAccountingStatus()); - assetMain.setAccountingDate(item.getAccountingDate()); - assetMain.setAccountingVoucherNo(item.getAccountingVoucherNo()); - assetMain.setAccountingSubject(item.getAccountingSubject()); - assetMain.setAccountingAmount(item.getAccountingAmount()); - assetMain.setDisabled(false); return assetMain; } @@ -252,16 +237,9 @@ * 构建房产资产主表数据 */ private OaApprovalApplicationStorageAsset buildAssetMainFromProperty(OaApprovalApplicationStoragePropertyDTO.PropertyAssetItemDTO item, Integer applicationId, Integer assetTypeId, LocalDate storageDate, OaApprovalApplicationStoragePropertyDTO baseDto) { - OaApprovalApplicationStorageAsset assetMain = new OaApprovalApplicationStorageAsset(); - assetMain.setApprovalApplicationId(applicationId.intValue()); - assetMain.setAssetOriginalCode(item.getAssetOriginalCode()); - assetMain.setAssetName(item.getAssetName()); - assetMain.setCategory(item.getCategory()); - assetMain.setSpecificationModel(item.getSpecificationModel()); + OaApprovalApplicationStorageAsset assetMain = BeanUtil.copyProperties(item, OaApprovalApplicationStorageAsset.class); + assetMain.setApprovalApplicationId(applicationId); assetMain.setAssetTypeId(assetTypeId); - assetMain.setMeasurementUnit(item.getMeasurementUnit()); - assetMain.setUnitPrice(item.getUnitPrice()); - assetMain.setUsefulLife(item.getUsefulLife()); if (item.getOwnershipDeptName() != null && !item.getOwnershipDeptName().isEmpty()) { TDept ownerDept = tDeptService.lambdaQuery() .eq(TDept::getDeptName, item.getOwnershipDeptName()) @@ -270,18 +248,8 @@ assetMain.setOwnershipDeptId(ownerDept.getId()); } } - assetMain.setUserName(item.getUserName()); applyAddressToAssetMain(assetMain, item.getAddressType(), item.getUseDeptName(), item.getWarehouseName(), item.getAddress()); - assetMain.setAddressType(item.getAddressType()); assetMain.setAssetMainType(AssetTypeEnum.HOUSE.getCode()); - assetMain.setAssetStatus(item.getAssetStatus()); - assetMain.setRemarks(item.getRemarks()); - assetMain.setAccountingStatus(item.getAccountingStatus()); - assetMain.setAccountingDate(item.getAccountingDate()); - assetMain.setAccountingVoucherNo(item.getAccountingVoucherNo()); - assetMain.setAccountingSubject(item.getAccountingSubject()); - assetMain.setAccountingAmount(item.getAccountingAmount()); - assetMain.setDisabled(false); return assetMain; } @@ -289,16 +257,9 @@ * 构建车辆资产主表数据 */ private OaApprovalApplicationStorageAsset buildAssetMainFromVehicle(OaApprovalApplicationStorageVehicleDTO.VehicleAssetItemDTO item, Integer applicationId, Integer assetTypeId, LocalDate storageDate, OaApprovalApplicationStorageVehicleDTO baseDto) { - OaApprovalApplicationStorageAsset assetMain = new OaApprovalApplicationStorageAsset(); - assetMain.setApprovalApplicationId(applicationId.intValue()); - assetMain.setAssetOriginalCode(item.getAssetOriginalCode()); - assetMain.setAssetName(item.getAssetName()); - assetMain.setCategory(item.getCategory()); - assetMain.setSpecificationModel(item.getSpecificationModel()); + OaApprovalApplicationStorageAsset assetMain = BeanUtil.copyProperties(item, OaApprovalApplicationStorageAsset.class); + assetMain.setApprovalApplicationId(applicationId); assetMain.setAssetTypeId(assetTypeId); - assetMain.setMeasurementUnit(item.getMeasurementUnit()); - assetMain.setUnitPrice(item.getUnitPrice()); - assetMain.setUsefulLife(item.getUsefulLife()); if (item.getOwnershipDeptName() != null && !item.getOwnershipDeptName().isEmpty()) { TDept ownerDept = tDeptService.lambdaQuery() .eq(TDept::getDeptName, item.getOwnershipDeptName()) @@ -307,18 +268,8 @@ assetMain.setOwnershipDeptId(ownerDept.getId()); } } - assetMain.setUserName(item.getUserName()); applyAddressToAssetMain(assetMain, item.getAddressType(), item.getUseDeptName(), item.getWarehouseName(), item.getAddress()); - assetMain.setAddressType(item.getAddressType()); assetMain.setAssetMainType(AssetTypeEnum.VEHICLE.getCode()); - assetMain.setAssetStatus(item.getAssetStatus()); - assetMain.setRemarks(item.getRemarks()); - assetMain.setAccountingStatus(item.getAccountingStatus()); - assetMain.setAccountingDate(item.getAccountingDate()); - assetMain.setAccountingVoucherNo(item.getAccountingVoucherNo()); - assetMain.setAccountingSubject(item.getAccountingSubject()); - assetMain.setAccountingAmount(item.getAccountingAmount()); - assetMain.setDisabled(false); return assetMain; } @@ -368,25 +319,8 @@ * 构建房产资产扩展数据 */ private OaApprovalApplicationStorageAssetPropertyExt buildAssetPropertyExt(OaApprovalApplicationStoragePropertyDTO.PropertyAssetItemDTO item, Integer assetMainId) { - OaApprovalApplicationStorageAssetPropertyExt propertyExt = new OaApprovalApplicationStorageAssetPropertyExt(); + OaApprovalApplicationStorageAssetPropertyExt propertyExt = BeanUtil.copyProperties(item, OaApprovalApplicationStorageAssetPropertyExt.class); propertyExt.setStorageAssetId(assetMainId); - propertyExt.setRegion(item.getRegion()); - propertyExt.setDesignPurpose(item.getDesignPurpose()); - propertyExt.setBuilding(item.getBuilding()); - propertyExt.setRoomNumber(item.getRoomNumber()); - propertyExt.setConstructionArea(item.getConstructionArea()); - propertyExt.setStructureType(item.getStructureType()); - propertyExt.setCertificateNumber(item.getCertificateNumber()); - propertyExt.setCompletionDate(item.getCompletionDate()); - propertyExt.setDetailedLocation(item.getDetailedLocation()); - propertyExt.setProvincialPlatformValue(item.getProvincialPlatformValue()); - propertyExt.setResettlementSituation(item.getResettlementSituation()); - propertyExt.setMortgaged(item.getMortgaged()); - propertyExt.setTenantName(item.getTenantName()); - propertyExt.setRentalAmount(item.getRentalAmount()); - propertyExt.setLeaseStartDate(item.getLeaseStartDate()); - propertyExt.setLeaseEndDate(item.getLeaseEndDate()); - propertyExt.setDisabled(false); return propertyExt; } @@ -394,17 +328,8 @@ * 构建车辆资产扩展数据 */ private OaApprovalApplicationStorageAssetVehicleExt buildAssetVehicleExt(OaApprovalApplicationStorageVehicleDTO.VehicleAssetItemDTO item, Integer assetMainId) { - OaApprovalApplicationStorageAssetVehicleExt vehicleExt = new OaApprovalApplicationStorageAssetVehicleExt(); + OaApprovalApplicationStorageAssetVehicleExt vehicleExt = BeanUtil.copyProperties(item, OaApprovalApplicationStorageAssetVehicleExt.class); vehicleExt.setStorageAssetId(assetMainId); - vehicleExt.setLicensePlate(item.getLicensePlate()); - vehicleExt.setVinCode(item.getVinCode()); - vehicleExt.setEngineNumber(item.getEngineNumber()); - vehicleExt.setDisplacement(item.getDisplacement()); - vehicleExt.setStaffingSituation(item.getStaffingSituation()); - vehicleExt.setOrigin(item.getOrigin()); - vehicleExt.setAcquisitionDate(item.getAcquisitionDate()); - vehicleExt.setPropertyRightForm(item.getPropertyRightForm()); - vehicleExt.setDisabled(false); return vehicleExt; } @@ -431,39 +356,20 @@ */ private OaApprovalApplications buildOaApprovalApplications(Object dto) { OaApprovalApplications applications = new OaApprovalApplications(); - applications.setApprovalId(ApprovalTypeEnum.IN_STOCK.getCode()); - applications.setApplicationDate(LocalDate.now()); + if (dto instanceof OaApprovalApplicationStorageGeneralDTO) { OaApprovalApplicationStorageGeneralDTO generalDTO = (OaApprovalApplicationStorageGeneralDTO) dto; - applications.setApplicantUserId(generalDTO.getApplicantUserId()); - applications.setApplicantName(generalDTO.getApplicantName()); - applications.setDeptId(generalDTO.getDeptId()); - applications.setDeptName(generalDTO.getDeptName()); - applications.setApplicationDate(LocalDate.now()); - applications.setApplicationReason(generalDTO.getApplicationReason()); - applications.setAttachmentUrl(generalDTO.getAttachmentUrl()); + BeanUtils.copyProperties(generalDTO, applications); } else if (dto instanceof OaApprovalApplicationStoragePropertyDTO) { OaApprovalApplicationStoragePropertyDTO propertyDTO = (OaApprovalApplicationStoragePropertyDTO) dto; - applications.setApplicantUserId(propertyDTO.getApplicantUserId()); - applications.setApplicantName(propertyDTO.getApplicantName()); - applications.setDeptId(propertyDTO.getDeptId()); - applications.setDeptName(propertyDTO.getDeptName()); - applications.setApplicationDate(LocalDate.now()); - applications.setApplicationReason(propertyDTO.getApplicationReason()); - applications.setAttachmentUrl(propertyDTO.getAttachmentUrl()); + BeanUtils.copyProperties(propertyDTO, applications); } else if (dto instanceof OaApprovalApplicationStorageVehicleDTO) { OaApprovalApplicationStorageVehicleDTO vehicleDTO = (OaApprovalApplicationStorageVehicleDTO) dto; - applications.setApplicantUserId(vehicleDTO.getApplicantUserId()); - applications.setApplicantName(vehicleDTO.getApplicantName()); - applications.setDeptId(vehicleDTO.getDeptId()); - applications.setDeptName(vehicleDTO.getDeptName()); - applications.setApplicationDate(LocalDate.now()); - applications.setApplicationReason(vehicleDTO.getApplicationReason()); - applications.setAttachmentUrl(vehicleDTO.getAttachmentUrl()); + BeanUtils.copyProperties(vehicleDTO, applications); } - + applications.setApprovalId(ApprovalTypeEnum.IN_STOCK.getCode()); + applications.setApplicationDate(LocalDate.now()); applications.setApplicationCode(generateApplicationCode()); - applications.setDisabled(0); applications.setApprovalStatus(ApprovalStatusEnum.PENDING.getCode()); return applications; } @@ -473,26 +379,17 @@ */ private OaApprovalApplicationStorage buildOaApprovalApplicationStorage(Object dto, Integer applicationId) { OaApprovalApplicationStorage storage = new OaApprovalApplicationStorage(); - storage.setApprovalApplicationId(applicationId.intValue()); + storage.setApprovalApplicationId(applicationId); if (dto instanceof OaApprovalApplicationStorageGeneralDTO) { OaApprovalApplicationStorageGeneralDTO generalDTO = (OaApprovalApplicationStorageGeneralDTO) dto; - storage.setTitle(generalDTO.getTitle()); - storage.setAssetTypeId(generalDTO.getAssetTypeId()); - storage.setStorageType(generalDTO.getStorageType()); - storage.setStorageTime(generalDTO.getStorageTime()); + BeanUtils.copyProperties(generalDTO, storage); } else if (dto instanceof OaApprovalApplicationStoragePropertyDTO) { OaApprovalApplicationStoragePropertyDTO propertyDTO = (OaApprovalApplicationStoragePropertyDTO) dto; - storage.setTitle(propertyDTO.getTitle()); - storage.setAssetTypeId(propertyDTO.getAssetTypeId()); - storage.setStorageType(propertyDTO.getStorageType()); - storage.setStorageTime(propertyDTO.getStorageTime()); + BeanUtils.copyProperties(propertyDTO, storage); } else if (dto instanceof OaApprovalApplicationStorageVehicleDTO) { OaApprovalApplicationStorageVehicleDTO vehicleDTO = (OaApprovalApplicationStorageVehicleDTO) dto; - storage.setTitle(vehicleDTO.getTitle()); - storage.setAssetTypeId(vehicleDTO.getAssetTypeId()); - storage.setStorageType(vehicleDTO.getStorageType()); - storage.setStorageTime(vehicleDTO.getStorageTime()); + BeanUtils.copyProperties(vehicleDTO, storage); } return storage; @@ -791,6 +688,24 @@ public void removeByApplicationId(Integer id) { //删除入库申请相关数据 this.lambdaUpdate().eq(OaApprovalApplicationStorage::getApprovalApplicationId, id).remove(); + List<OaApprovalApplicationStorageAsset> list = oaApprovalApplicationStorageAssetService.lambdaQuery() + .eq(OaApprovalApplicationStorageAsset::getApprovalApplicationId, id).list(); + List<Integer> storageAssetIds = list.stream().map(OaApprovalApplicationStorageAsset::getId).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(storageAssetIds)) { + //删除资产申请扩展表数据 + OaApprovalApplicationStorageAsset oaApprovalApplicationStorageAsset = list.get(0); + if (oaApprovalApplicationStorageAsset.getAssetMainType().equals(AssetTypeEnum.HOUSE.getCode())) { + oaApprovalApplicationStorageAssetPropertyExtService.lambdaUpdate() + .in(OaApprovalApplicationStorageAssetPropertyExt::getStorageAssetId, storageAssetIds).remove(); + + }else if (oaApprovalApplicationStorageAsset.getAssetMainType().equals(AssetTypeEnum.VEHICLE.getCode())) { + oaApprovalApplicationStorageAssetVehicleExtService.lambdaUpdate() + .in(OaApprovalApplicationStorageAssetVehicleExt::getStorageAssetId, storageAssetIds).remove(); + } + } + //删除资产申请主表数据 + oaApprovalApplicationStorageAssetService.lambdaUpdate() + .eq(OaApprovalApplicationStorageAsset::getApprovalApplicationId, id).remove(); //删除入库申请单 oaApprovalApplicationsService.removeById(id); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetDetailVO.java index 6cc9e09..4fefbc6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetDetailVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationAssetDetailVO.java @@ -73,6 +73,13 @@ @ApiModelProperty(value = "借用审批ID,类型为归还时使用。") private Integer borrowApplicationId; + @ApiModelProperty(value = "归还状态 0-待归还,1-部分归还,2-全部归还") + private Integer returnStatus; + + @ApiModelProperty(value = "借用日期") + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + private LocalDate borrowDate; + @ApiModelProperty("关联资产项列表") private List<AssetMainVO> items; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationChangeDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationChangeDetailVO.java new file mode 100644 index 0000000..c5639da --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationChangeDetailVO.java @@ -0,0 +1,86 @@ +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.time.LocalDate; +import java.util.List; + +/** + * 资产领用/借用/归还 详情VO + */ +@Data +@ApiModel("资产变更详情VO") +public class OaApprovalApplicationChangeDetailVO implements Serializable { + + private static final long serialVersionUID = -7331732809498749263L; + + @ApiModelProperty(value = "主键") + private Integer id; + + @ApiModelProperty(value = "申请单号") + private String applicationCode; + + @ApiModelProperty(value = "审批ID") + private Integer approvalId; + + @ApiModelProperty(value = "申请人ID") + private Integer applicantUserId; + + @ApiModelProperty(value = "申请人") + private String applicantName; + + @ApiModelProperty(value = "所属部门") + private String deptName; + + @ApiModelProperty(value = "部门ID") + private Integer deptId; + + @ApiModelProperty(value = "变更日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate applicationDate; + + @ApiModelProperty(value = "事由/原因/说明/备注") + private String applicationReason; + + @ApiModelProperty(value = "审批状态 0-草稿,1-待审批,2-审批通过,3-审批拒绝 ,4-已撤回") + private Integer approvalStatus; + + @ApiModelProperty(value = "当前流程id") + private Integer currentFlowNodeId; + + @ApiModelProperty(value = "事项标题") + private String title; + + @ApiModelProperty(value = "资产类型") + private Integer assetTypeId; + + @ApiModelProperty(value = "变更日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate changeTime; + + @ApiModelProperty(value = "使用/位置类型 0-部门,1-仓库,2-录入地址") + private Integer addressType; + + @ApiModelProperty(value = "使用部门ID") + private Integer useDeptId; + + @ApiModelProperty(value = "仓库ID") + private Integer warehouseId; + + @ApiModelProperty(value = "所在位置") + private String address; + + @ApiModelProperty(value = "管理部门ID") + private Integer ownershipDeptId; + + @ApiModelProperty(value = "使用人") + private String userName; + + @ApiModelProperty("关联资产项列表") + private List<AssetMainVO> items; +} + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationChangePageVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationChangePageVO.java new file mode 100644 index 0000000..0449f8b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationChangePageVO.java @@ -0,0 +1,47 @@ +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.time.LocalDate; + +/** + * 资产变更申请分页列表VO + */ +@Data +@ApiModel(value = "资产变更申请分页列表VO") +public class OaApprovalApplicationChangePageVO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "审批申请ID") + private Integer id; + + @ApiModelProperty(value = "单据号") + private String applicationCode; + + @ApiModelProperty(value = "标题") + private String title; + + @ApiModelProperty(value = "变更部门/公司") + private String deptName; + + @ApiModelProperty(value = "申请人") + private String applicantName; + + @ApiModelProperty(value = "申请原因") + private String applicationReason; + + @ApiModelProperty(value = "申请日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDate applicationDate; + + @ApiModelProperty(value = "审核状态 0-待审核,1-审核中,2-已通过,3-已拒绝") + private Integer approvalStatus; + + @ApiModelProperty(value = "审核状态名称") + private String approvalStatusName; +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationDisposeDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationDisposeDetailVO.java new file mode 100644 index 0000000..98a842d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationDisposeDetailVO.java @@ -0,0 +1,79 @@ +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 org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; + +/** + * 资产领用/借用/归还 详情VO + */ +@Data +@ApiModel("资产处置详情VO") +public class OaApprovalApplicationDisposeDetailVO implements Serializable { + + private static final long serialVersionUID = -7331732809498749263L; + + @ApiModelProperty(value = "主键") + private Integer id; + + @ApiModelProperty(value = "申请单号") + private String applicationCode; + + @ApiModelProperty(value = "审批ID") + private Integer approvalId; + + @ApiModelProperty(value = "申请人ID") + private Integer applicantUserId; + + @ApiModelProperty(value = "申请人") + private String applicantName; + + @ApiModelProperty(value = "所属部门") + private String deptName; + + @ApiModelProperty(value = "部门ID") + private Integer deptId; + + @ApiModelProperty(value = "申请日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate applicationDate; + + @ApiModelProperty(value = "事由/原因/说明/备注") + private String applicationReason; + + @ApiModelProperty(value = "审批状态 0-草稿,1-待审批,2-审批通过,3-审批拒绝 ,4-已撤回") + private Integer approvalStatus; + + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + + @ApiModelProperty(value = "当前流程id") + private Integer currentFlowNodeId; + + @ApiModelProperty(value = "事项标题") + private String title; + + @ApiModelProperty(value = "资产类型") + private Integer assetTypeId; + + @ApiModelProperty("处置日期") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate disposeTime; + + @ApiModelProperty("处置方式 0-报废,1-报损,2-捐赠") + private Integer disposeType; + + @ApiModelProperty("处置总金额(元)") + private BigDecimal disposeTotalAmount; + + @ApiModelProperty("关联资产项列表") + private List<AssetMainVO> items; +} + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/dispose/OaApprovalApplicationDisposePageVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationDisposePageVO.java similarity index 97% rename from ruoyi-system/src/main/java/com/ruoyi/system/vo/dispose/OaApprovalApplicationDisposePageVO.java rename to ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationDisposePageVO.java index bea87a4..9f1e6d3 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/dispose/OaApprovalApplicationDisposePageVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationDisposePageVO.java @@ -1,4 +1,4 @@ -package com.ruoyi.system.vo.dispose; +package com.ruoyi.system.vo.asset; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageGeneralDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageGeneralDetailVO.java index a1a6221..3b793d1 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageGeneralDetailVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageGeneralDetailVO.java @@ -81,7 +81,7 @@ private String measurementUnit; @ApiModelProperty(value = "数量") - private BigDecimal quantity; + private Integer quantity; @ApiModelProperty(value = "单价") private BigDecimal unitPrice; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStoragePropertyDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStoragePropertyDetailVO.java index 7586819..35fe07f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStoragePropertyDetailVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStoragePropertyDetailVO.java @@ -80,7 +80,7 @@ private String measurementUnit; @ApiModelProperty(value = "数量") - private BigDecimal quantity; + private Integer quantity; @ApiModelProperty(value = "单价") private BigDecimal unitPrice; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageVehicleDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageVehicleDetailVO.java index f250691..3b1f624 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageVehicleDetailVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/asset/OaApprovalApplicationStorageVehicleDetailVO.java @@ -80,7 +80,7 @@ private String measurementUnit; @ApiModelProperty(value = "数量") - private BigDecimal quantity; + private Integer quantity; @ApiModelProperty(value = "单价") private BigDecimal unitPrice; diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml index 0dac4af..5c0e42c 100644 --- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml @@ -42,6 +42,9 @@ <where> AND aaa.disabled = 0 AND oaa.type = #{query.type} + <if test="query.returnNotify == 1"> + AND oaa.return_status != 2 + </if> <if test="query != null and query.keyword != null and query.keyword != ''"> AND ( oaa.title LIKE CONCAT('%', #{query.keyword}, '%') @@ -71,7 +74,7 @@ LEFT JOIN oa_approval_application_asset oaaa ON oaaai.approval_application_id = oaaa.approval_application_id LEFT JOIN oa_approval_applications oaa ON oaaai.approval_application_id = oaa.id <where> - oaaa.type = 2 AND oaaa.borrow_application_id = #{applicationId} + oaaa.type = 2 AND oaaa.borrow_application_id = #{applicationId} AND oaa.approval_status = 1 <if test="assetMainIds != null and assetMainIds.size() > 0"> AND oaaai.asset_main_id IN <foreach collection="assetMainIds" item="id" open="(" separator="," close=")"> @@ -86,14 +89,20 @@ parameterType="java.lang.Long"> SELECT oaa.*, + oaaa.title, + oaaa.asset_type_id, oaaa.operate_time FROM oa_approval_applications oaa LEFT JOIN oa_approval_application_asset oaaa ON oaa.id = oaaa.approval_application_id + LEFT JOIN oa_approval_application_asset borrow_oaaa ON borrow_oaaa.borrow_application_id = oaa.id + AND borrow_oaaa.return_status != 2 WHERE oaa.applicant_user_id = #{userId} - AND oaa.approval_status = 1 + AND oaa.approval_status = '${@com.ruoyi.system.emums.ApprovalStatusEnum@PASSED.getCode()}' AND oaaa.type = 1 + AND oaa.approval_id = '${@com.ruoyi.system.emums.ApprovalTypeEnum@BORROW.getCode()}' + </select> </mapper> diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationChangeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationChangeMapper.xml index df95262..ff77153 100644 --- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationChangeMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationChangeMapper.xml @@ -20,4 +20,38 @@ id, approval_application_id, title, asset_type_id, change_time, ownership_dept_id, warehouse_id, address, user_name </sql> + <!-- 分页查询资产变更申请列表 --> + <select id="selectChangePage" resultType="com.ruoyi.system.vo.asset.OaApprovalApplicationChangePageVO"> + SELECT + app.id, + app.application_code AS applicationCode, + change.title, + d.dept_name AS deptName, + u.nick_name AS applicantName, + app.application_reason AS applicationReason, + app.application_date AS applicationDate, + app.approval_status AS approvalStatus, + CASE app.approval_status + WHEN 0 THEN '待审核' + WHEN 1 THEN '审核中' + WHEN 2 THEN '已通过' + WHEN 3 THEN '已拒绝' + ELSE '未知' + END AS approvalStatusName + FROM oa_approval_applications app + INNER JOIN oa_approval_application_change change ON app.id = change.approval_application_id + LEFT JOIN sys_user u ON app.applicant_user_id = u.user_id + LEFT JOIN t_dept d ON app.dept_id = d.id + WHERE app.disabled = 0 + AND app.approval_id = 4 <!-- 资产变更审批类型 --> + <if test="query.keyword != null and query.keyword != ''"> + AND (change.title LIKE CONCAT('%', #{query.keyword}, '%') + OR app.application_code LIKE CONCAT('%', #{query.keyword}, '%')) + </if> + <if test="query.deptId != null"> + AND (d.id = #{query.deptId} OR FIND_IN_SET(#{query.deptId}, d.parent_id)) + </if> + ORDER BY app.create_time DESC + </select> + </mapper> diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationDisposeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationDisposeMapper.xml index 5beab85..ca94849 100644 --- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationDisposeMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationDisposeMapper.xml @@ -19,7 +19,7 @@ </sql> <!-- 分页查询资产处置申请列表 --> - <select id="getDisposePageList" resultType="com.ruoyi.system.vo.dispose.OaApprovalApplicationDisposePageVO"> + <select id="getDisposePageList" resultType="com.ruoyi.system.vo.asset.OaApprovalApplicationDisposePageVO"> SELECT app.id, app.application_code AS applicationCode, @@ -60,7 +60,7 @@ OR app.application_code LIKE CONCAT('%', #{query.keyword}, '%')) </if> <if test="query.deptId != null"> - AND (d.id = #{query.deptId} OR FIND_IN_SET(#{query.deptId}, d.ancestors)) + AND (d.id = #{query.deptId} OR FIND_IN_SET(#{query.deptId}, d.parent_id)) </if> ORDER BY app.create_time DESC </select> -- Gitblit v1.7.1