package cn.iocoder.yudao.module.asset.controller.admin.requisition; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.asset.controller.admin.requisition.vo.AssetRequisitionPageReqVO; import cn.iocoder.yudao.module.asset.controller.admin.requisition.vo.AssetRequisitionRespVO; import cn.iocoder.yudao.module.asset.controller.admin.requisition.vo.AssetRequisitionReturnReqVO; import cn.iocoder.yudao.module.asset.controller.admin.requisition.vo.AssetRequisitionSaveReqVO; import cn.iocoder.yudao.module.asset.dal.dataobject.requisition.AssetRequisitionDO; import cn.iocoder.yudao.module.asset.enums.AssetCategoryEnum; import cn.iocoder.yudao.module.asset.enums.AssetReturnStatusEnum; import cn.iocoder.yudao.module.asset.service.requisition.AssetRequisitionService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 资产领用") @RestController @RequestMapping("/asset/requisition") @Validated public class AssetRequisitionController { @Resource private AssetRequisitionService requisitionService; @PostMapping("/create") @Operation(summary = "创建资产领用") @PreAuthorize("@ss.hasPermission('asset:requisition:create')") public CommonResult createRequisition(@Valid @RequestBody AssetRequisitionSaveReqVO reqVO) { return success(requisitionService.createRequisition(reqVO)); } @PutMapping("/update") @Operation(summary = "更新资产领用(仅领用人、用途、预计归还日期、备注)") @PreAuthorize("@ss.hasPermission('asset:requisition:update')") public CommonResult updateRequisition(@Valid @RequestBody AssetRequisitionSaveReqVO reqVO) { requisitionService.updateRequisition(reqVO); return success(true); } @DeleteMapping("/delete") @Operation(summary = "删除资产领用(未发生归还时冲销库存)") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('asset:requisition:delete')") public CommonResult deleteRequisition(@RequestParam("id") Long id) { requisitionService.deleteRequisition(id); return success(true); } @PutMapping("/return") @Operation(summary = "归还资产") @PreAuthorize("@ss.hasPermission('asset:requisition:return')") public CommonResult returnRequisition(@Valid @RequestBody AssetRequisitionReturnReqVO reqVO) { requisitionService.returnRequisition(reqVO); return success(true); } @GetMapping("/get") @Operation(summary = "获得资产领用") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('asset:requisition:query')") public CommonResult getRequisition(@RequestParam("id") Long id) { return success(buildRespVO(requisitionService.getRequisition(id))); } @GetMapping("/page") @Operation(summary = "获得资产领用分页") @PreAuthorize("@ss.hasPermission('asset:requisition:query')") public CommonResult> getRequisitionPage( @Valid AssetRequisitionPageReqVO reqVO) { PageResult pageResult = requisitionService.getRequisitionPage(reqVO); return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal())); } private AssetRequisitionRespVO buildRespVO(AssetRequisitionDO requisition) { if (requisition == null) { return null; } return buildRespVOList(java.util.Collections.singletonList(requisition)).get(0); } private List buildRespVOList(List list) { return BeanUtils.toBean(list, AssetRequisitionRespVO.class, vo -> { vo.setCategoryName(AssetCategoryEnum.nameOf(vo.getCategory())); vo.setReturnStatusName(AssetReturnStatusEnum.nameOf(vo.getReturnStatus())); int quantity = vo.getQuantity() == null ? 0 : vo.getQuantity(); int returned = vo.getReturnedQuantity() == null ? 0 : vo.getReturnedQuantity(); vo.setRemainingQuantity(Math.max(quantity - returned, 0)); }); } }