From c6d44f17873d10ed80efe6583feb775f3181a271 Mon Sep 17 00:00:00 2001 From: "Mr.j" <2221464500@qq.com> Date: Thu, 7 Aug 2025 08:37:30 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=BF=BD=E7=95=A5=E6=8F=90=E4=BA=A4pom.xml?= =?UTF-8?q?=EF=BC=8Cyaml=E6=96=87=E4=BB=B6=EF=BC=8C=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E9=87=87=E8=B4=AD=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=92=8C=E7=BC=96=E8=BE=91=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 8 +++++++- .../com/dite/znpt/domain/vo/EquipmentResp.java | 17 ++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 5c11c82..fa488e5 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,10 @@ build/ ### VS Code ### .vscode/ target/ -logs/ \ No newline at end of file +logs/ + +### Maven ### +pom.xml + +### YAML ### +*.yaml diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java index 4aac551..d936b01 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java @@ -1,5 +1,6 @@ package com.dite.znpt.domain.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -29,7 +30,7 @@ public class EquipmentResp implements Serializable { @ApiModelProperty("设备名称") private String equipmentName; - @ApiModelProperty("设备类型") + @ApiModelProperty("类型") private String equipmentType; @ApiModelProperty("设备类型描述") @@ -75,21 +76,27 @@ public class EquipmentResp implements Serializable { private String healthStatusLabel; @ApiModelProperty("采购时间") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8") private LocalDateTime purchaseTime; @ApiModelProperty("入库时间") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8") private LocalDateTime inStockTime; @ApiModelProperty("启用时间") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8") private LocalDateTime activationTime; @ApiModelProperty("预计报废时间") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8") private LocalDateTime expectedScrapTime; @ApiModelProperty("实际报废时间") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8") private LocalDateTime actualScrapTime; @ApiModelProperty("状态变更时间") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8") private LocalDateTime statusChangeTime; @ApiModelProperty("采购订单") @@ -115,12 +122,15 @@ public class EquipmentResp implements Serializable { private BigDecimal salvageValue; @ApiModelProperty("保修截止日期") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8") private LocalDateTime warrantyExpireDate; @ApiModelProperty("上次维护日期") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8") private LocalDateTime lastMaintenanceDate; @ApiModelProperty("下次维护日期") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8") private LocalDateTime nextMaintenanceDate; @ApiModelProperty("维护人员") @@ -168,12 +178,15 @@ public class EquipmentResp implements Serializable { private String usingDepartment; @ApiModelProperty("领用时间") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8") private LocalDateTime borrowingTime; @ApiModelProperty("归还时间") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8") private LocalDateTime returnTime; @ApiModelProperty("出库时间") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8") private LocalDateTime outStockTime; @ApiModelProperty("总使用时间") @@ -234,8 +247,10 @@ public class EquipmentResp implements Serializable { private String name; @ApiModelProperty("创建时间") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8") private LocalDateTime createTime; @ApiModelProperty("更新时间") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8") private LocalDateTime updateTime; } From 40c11dd9748d4d9cb43b1866ed344690b8e4e0f5 Mon Sep 17 00:00:00 2001 From: "Mr.j" <2221464500@qq.com> Date: Thu, 7 Aug 2025 16:47:42 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E5=8F=B0=E7=9A=84=E5=9F=BA=E7=A1=80=E6=9F=A5=E8=AF=A2=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/EquipmentApprovalEntity.java | 91 ++++++++ .../mapper/EquipmentApprovalMapper.java | 14 ++ .../domain/vo/EquipmentApprovalListReq.java | 54 +++++ .../znpt/domain/vo/EquipmentApprovalReq.java | 33 +++ .../znpt/domain/vo/EquipmentApprovalResp.java | 86 ++++++++ .../service/EquipmentApprovalService.java | 44 ++++ .../impl/EquipmentApprovalServiceImpl.java | 199 ++++++++++++++++++ .../EquipmentApprovalController.java | 73 +++++++ 8 files changed, 594 insertions(+) create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/EquipmentApprovalEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/mapper/EquipmentApprovalMapper.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/EquipmentApprovalListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/EquipmentApprovalReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/EquipmentApprovalResp.java create mode 100644 core/src/main/java/com/dite/znpt/service/EquipmentApprovalService.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/EquipmentApprovalServiceImpl.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/EquipmentApprovalController.java diff --git a/core/src/main/java/com/dite/znpt/domain/entity/EquipmentApprovalEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/EquipmentApprovalEntity.java new file mode 100644 index 0000000..69eded6 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/EquipmentApprovalEntity.java @@ -0,0 +1,91 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author Bear.G + * @date 2025/1/8/周三 17:26 + * @description 设备审批实体 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("equipment_approval") +@ApiModel(value="EquipmentApprovalEntity对象", description="设备审批信息表") +public class EquipmentApprovalEntity extends AuditableEntity implements Serializable { + private static final long serialVersionUID = -6665040704562461286L; + + @ApiModelProperty("审批ID") + @TableId(type = IdType.ASSIGN_ID) + private String approvalId; + + @ApiModelProperty("设备ID") + private String equipmentId; + + @ApiModelProperty("设备名称") + private String equipmentName; + + @ApiModelProperty("设备类型") + private String equipmentType; + + @ApiModelProperty("设备型号") + private String equipmentModel; + + @ApiModelProperty("品牌") + private String brand; + + @ApiModelProperty("供应商名称") + private String supplierName; + + @ApiModelProperty("采购价格") + private BigDecimal purchasePrice; + + @ApiModelProperty("总价") + private BigDecimal totalPrice; + + @ApiModelProperty("数量") + private Integer quantity; + + @ApiModelProperty("申请人") + private String applicantName; + + @ApiModelProperty("申请人ID") + private String applicantId; + + @ApiModelProperty("申请时间") + private LocalDateTime applyTime; + + @ApiModelProperty("申请原因") + private String applyReason; + + @ApiModelProperty("业务类型,PROCUREMENT-采购,BORROW-借用,RETURN-归还") + private String businessType; + + @ApiModelProperty("审批状态,PENDING-待审批,APPROVED-已通过,REJECTED-已拒绝") + private String approvalStatus; + + @ApiModelProperty("审批人") + private String approverName; + + @ApiModelProperty("审批人ID") + private String approverId; + + @ApiModelProperty("审批时间") + private LocalDateTime approvalTime; + + @ApiModelProperty("审批意见") + private String approvalComment; + + @ApiModelProperty("删除标志(0代表存在 1代表删除)") + @TableLogic + private String delFlag; +} diff --git a/core/src/main/java/com/dite/znpt/domain/mapper/EquipmentApprovalMapper.java b/core/src/main/java/com/dite/znpt/domain/mapper/EquipmentApprovalMapper.java new file mode 100644 index 0000000..92a9818 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/mapper/EquipmentApprovalMapper.java @@ -0,0 +1,14 @@ +package com.dite.znpt.domain.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.EquipmentApprovalEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author Bear.G + * @date 2025/1/8/周三 17:30 + * @description 设备审批Mapper接口 + */ +@Mapper +public interface EquipmentApprovalMapper extends BaseMapper { +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentApprovalListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentApprovalListReq.java new file mode 100644 index 0000000..39b5833 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentApprovalListReq.java @@ -0,0 +1,54 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author Bear.G + * @date 2025/1/8/周三 17:45 + * @description 设备审批列表查询请求VO + */ +@Data +@ApiModel(value="EquipmentApprovalListReq对象", description="设备审批列表查询请求") +public class EquipmentApprovalListReq implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String equipmentName; + + @ApiModelProperty("申请人") + private String applicantName; + + @ApiModelProperty("业务类型,PROCUREMENT-采购,BORROW-借用,RETURN-归还") + private String businessType; + + @ApiModelProperty("审批状态") + private String approvalStatus; + + @ApiModelProperty("申请时间开始") + private String applyTimeStart; + + @ApiModelProperty("申请时间结束") + private String applyTimeEnd; + + @ApiModelProperty("审批时间开始") + private String approvalTimeStart; + + @ApiModelProperty("审批时间结束") + private String approvalTimeEnd; + + @ApiModelProperty("当前页码") + private Integer page; + + @ApiModelProperty("每页大小") + private Integer pageSize; + + @ApiModelProperty("排序字段") + private String orderBy; + + @ApiModelProperty("排序方向") + private String orderDirection; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentApprovalReq.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentApprovalReq.java new file mode 100644 index 0000000..e1ff546 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentApprovalReq.java @@ -0,0 +1,33 @@ +package com.dite.znpt.domain.vo; + +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.io.Serializable; + +/** + * @author Bear.G + * @date 2025/1/8/周三 17:35 + * @description 设备审批请求VO + */ +@Data +@ApiModel(value="EquipmentApprovalReq对象", description="设备审批请求") +public class EquipmentApprovalReq implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("审批意见") + private String approvalComment; + + @ApiModelProperty("审批结果,APPROVED-通过,REJECTED-拒绝") + @NotBlank(message = "审批结果不能为空") + private String approvalResult; + + @ApiModelProperty("审批人") + private String approverName; + + @ApiModelProperty("审批人ID") + private String approverId; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentApprovalResp.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentApprovalResp.java new file mode 100644 index 0000000..3fc8e50 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentApprovalResp.java @@ -0,0 +1,86 @@ +package com.dite.znpt.domain.vo; + +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; + +/** + * @author Bear.G + * @date 2025/1/8/周三 17:40 + * @description 设备审批响应VO + */ +@Data +@ApiModel(value="EquipmentApprovalResp对象", description="设备审批响应") +public class EquipmentApprovalResp implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("审批ID") + private String approvalId; + + @ApiModelProperty("设备ID") + private String equipmentId; + + @ApiModelProperty("设备名称") + private String equipmentName; + + @ApiModelProperty("设备类型") + private String equipmentType; + + @ApiModelProperty("设备型号") + private String equipmentModel; + + @ApiModelProperty("品牌") + private String brand; + + @ApiModelProperty("供应商名称") + private String supplierName; + + @ApiModelProperty("采购价格") + private BigDecimal purchasePrice; + + @ApiModelProperty("总价") + private BigDecimal totalPrice; + + @ApiModelProperty("数量") + private Integer quantity; + + @ApiModelProperty("申请人") + private String applicantName; + + @ApiModelProperty("申请人ID") + private String applicantId; + + @ApiModelProperty("申请时间") + private LocalDateTime applyTime; + + @ApiModelProperty("申请原因") + private String applyReason; + + @ApiModelProperty("业务类型,PROCUREMENT-采购,BORROW-借用,RETURN-归还") + private String businessType; + + @ApiModelProperty("审批状态") + private String approvalStatus; + + @ApiModelProperty("审批人") + private String approverName; + + @ApiModelProperty("审批人ID") + private String approverId; + + @ApiModelProperty("审批时间") + private LocalDateTime approvalTime; + + @ApiModelProperty("审批意见") + private String approvalComment; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; +} diff --git a/core/src/main/java/com/dite/znpt/service/EquipmentApprovalService.java b/core/src/main/java/com/dite/znpt/service/EquipmentApprovalService.java new file mode 100644 index 0000000..685c7c4 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/EquipmentApprovalService.java @@ -0,0 +1,44 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.dite.znpt.domain.vo.EquipmentApprovalListReq; +import com.dite.znpt.domain.vo.EquipmentApprovalReq; +import com.dite.znpt.domain.vo.EquipmentApprovalResp; + +/** + * @author Bear.G + * @date 2025/1/8/周三 17:50 + * @description 设备审批服务接口 + */ +public interface EquipmentApprovalService { + + /** + * 分页查询待审批的设备采购申请 + */ + IPage getPendingApprovals(EquipmentApprovalListReq req); + + /** + * 分页查询已审批的设备采购申请 + */ + IPage getApprovedApprovals(EquipmentApprovalListReq req); + + /** + * 审批通过 + */ + void approve(String approvalId, EquipmentApprovalReq req); + + /** + * 审批拒绝 + */ + void reject(String approvalId, EquipmentApprovalReq req); + + /** + * 获取审批详情 + */ + EquipmentApprovalResp getApprovalDetail(String approvalId); + + /** + * 获取审批统计信息 + */ + Object getApprovalStats(); +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/EquipmentApprovalServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/EquipmentApprovalServiceImpl.java new file mode 100644 index 0000000..6d1fced --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/EquipmentApprovalServiceImpl.java @@ -0,0 +1,199 @@ +package com.dite.znpt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dite.znpt.domain.entity.EquipmentApprovalEntity; +import com.dite.znpt.domain.mapper.EquipmentApprovalMapper; +import com.dite.znpt.domain.vo.EquipmentApprovalListReq; +import com.dite.znpt.domain.vo.EquipmentApprovalReq; +import com.dite.znpt.domain.vo.EquipmentApprovalResp; +import com.dite.znpt.service.EquipmentApprovalService; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author Bear.G + * @date 2025/1/8/周三 17:55 + * @description 设备审批服务实现类 + */ +@Service +public class EquipmentApprovalServiceImpl implements EquipmentApprovalService { + + @Resource + private EquipmentApprovalMapper equipmentApprovalMapper; + + @Override + public IPage getPendingApprovals(EquipmentApprovalListReq req) { + // 创建分页对象,处理null值 + Integer pageNum = req.getPage() != null ? req.getPage() : 1; + Integer pageSize = req.getPageSize() != null ? req.getPageSize() : 10; + Page page = new Page<>(pageNum, pageSize); + + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(EquipmentApprovalEntity::getApprovalStatus, "PENDING"); + + // 添加查询条件 + addQueryConditions(wrapper, req); + + IPage result = equipmentApprovalMapper.selectPage(page, wrapper); + + return convertToRespPage(result); + } + + @Override + public IPage getApprovedApprovals(EquipmentApprovalListReq req) { + // 创建分页对象,处理null值 + Integer pageNum = req.getPage() != null ? req.getPage() : 1; + Integer pageSize = req.getPageSize() != null ? req.getPageSize() : 10; + Page page = new Page<>(pageNum, pageSize); + + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(EquipmentApprovalEntity::getApprovalStatus, "APPROVED", "REJECTED"); + + // 添加查询条件 + addQueryConditions(wrapper, req); + + IPage result = equipmentApprovalMapper.selectPage(page, wrapper); + + return convertToRespPage(result); + } + + @Override + public void approve(String approvalId, EquipmentApprovalReq req) { + EquipmentApprovalEntity entity = equipmentApprovalMapper.selectById(approvalId); + if (entity == null) { + throw new RuntimeException("审批记录不存在"); + } + + entity.setApprovalStatus("APPROVED"); + entity.setApproverName(req.getApproverName()); + entity.setApproverId(req.getApproverId()); + entity.setApprovalTime(LocalDateTime.now()); + entity.setApprovalComment(req.getApprovalComment()); + + equipmentApprovalMapper.updateById(entity); + } + + @Override + public void reject(String approvalId, EquipmentApprovalReq req) { + EquipmentApprovalEntity entity = equipmentApprovalMapper.selectById(approvalId); + if (entity == null) { + throw new RuntimeException("审批记录不存在"); + } + + entity.setApprovalStatus("REJECTED"); + entity.setApproverName(req.getApproverName()); + entity.setApproverId(req.getApproverId()); + entity.setApprovalTime(LocalDateTime.now()); + entity.setApprovalComment(req.getApprovalComment()); + + equipmentApprovalMapper.updateById(entity); + } + + @Override + public EquipmentApprovalResp getApprovalDetail(String approvalId) { + EquipmentApprovalEntity entity = equipmentApprovalMapper.selectById(approvalId); + if (entity == null) { + return null; + } + + return convertToResp(entity); + } + + @Override + public Object getApprovalStats() { + Map stats = new HashMap<>(); + + // 待审批数量 + LambdaQueryWrapper pendingWrapper = new LambdaQueryWrapper<>(); + pendingWrapper.eq(EquipmentApprovalEntity::getApprovalStatus, "PENDING"); + long pendingCount = equipmentApprovalMapper.selectCount(pendingWrapper); + stats.put("pendingCount", pendingCount); + + // 已通过数量 + LambdaQueryWrapper approvedWrapper = new LambdaQueryWrapper<>(); + approvedWrapper.eq(EquipmentApprovalEntity::getApprovalStatus, "APPROVED"); + long approvedCount = equipmentApprovalMapper.selectCount(approvedWrapper); + stats.put("approvedCount", approvedCount); + + // 已拒绝数量 + LambdaQueryWrapper rejectedWrapper = new LambdaQueryWrapper<>(); + rejectedWrapper.eq(EquipmentApprovalEntity::getApprovalStatus, "REJECTED"); + long rejectedCount = equipmentApprovalMapper.selectCount(rejectedWrapper); + stats.put("rejectedCount", rejectedCount); + + return stats; + } + + /** + * 添加查询条件 + */ + private void addQueryConditions(LambdaQueryWrapper wrapper, EquipmentApprovalListReq req) { + if (StringUtils.hasText(req.getEquipmentName())) { + wrapper.like(EquipmentApprovalEntity::getEquipmentName, req.getEquipmentName()); + } + + if (StringUtils.hasText(req.getApplicantName())) { + wrapper.like(EquipmentApprovalEntity::getApplicantName, req.getApplicantName()); + } + + if (StringUtils.hasText(req.getBusinessType())) { + wrapper.eq(EquipmentApprovalEntity::getBusinessType, req.getBusinessType()); + } + + if (StringUtils.hasText(req.getApprovalStatus())) { + wrapper.eq(EquipmentApprovalEntity::getApprovalStatus, req.getApprovalStatus()); + } + + if (StringUtils.hasText(req.getApplyTimeStart())) { + wrapper.ge(EquipmentApprovalEntity::getApplyTime, req.getApplyTimeStart()); + } + + if (StringUtils.hasText(req.getApplyTimeEnd())) { + wrapper.le(EquipmentApprovalEntity::getApplyTime, req.getApplyTimeEnd()); + } + + if (StringUtils.hasText(req.getApprovalTimeStart())) { + wrapper.ge(EquipmentApprovalEntity::getApprovalTime, req.getApprovalTimeStart()); + } + + if (StringUtils.hasText(req.getApprovalTimeEnd())) { + wrapper.le(EquipmentApprovalEntity::getApprovalTime, req.getApprovalTimeEnd()); + } + + // 排序 + wrapper.orderByDesc(EquipmentApprovalEntity::getCreateTime); + } + + /** + * 转换为响应对象 + */ + private EquipmentApprovalResp convertToResp(EquipmentApprovalEntity entity) { + EquipmentApprovalResp resp = new EquipmentApprovalResp(); + BeanUtils.copyProperties(entity, resp); + return resp; + } + + /** + * 转换为响应分页对象 + */ + private IPage convertToRespPage(IPage page) { + List records = page.getRecords().stream() + .map(this::convertToResp) + .collect(Collectors.toList()); + + Page respPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal()); + respPage.setRecords(records); + + return respPage; + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/EquipmentApprovalController.java b/web/src/main/java/com/dite/znpt/web/controller/EquipmentApprovalController.java new file mode 100644 index 0000000..a49fa5f --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/EquipmentApprovalController.java @@ -0,0 +1,73 @@ +package com.dite.znpt.web.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.EquipmentApprovalListReq; +import com.dite.znpt.domain.vo.EquipmentApprovalReq; +import com.dite.znpt.domain.vo.EquipmentApprovalResp; +import com.dite.znpt.service.EquipmentApprovalService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Bear.G + * @date 2025/1/8/周三 18:00 + * @description 设备审批控制器 + */ +@Api(tags = "设备审批管理") +@RestController +@RequestMapping("/equipment/approval") +public class EquipmentApprovalController { + + private static final Logger log = LoggerFactory.getLogger(EquipmentApprovalController.class); + + @Resource + private EquipmentApprovalService equipmentApprovalService; + + @ApiOperation(value = "分页查询待审批的设备采购申请", httpMethod = "GET") + @GetMapping("/pending") + public PageResult getPendingApprovals(EquipmentApprovalListReq req) { + IPage page = equipmentApprovalService.getPendingApprovals(req); + return PageResult.ok(page.getRecords(), page.getTotal()); + } + + @ApiOperation(value = "分页查询已审批的设备采购申请", httpMethod = "GET") + @GetMapping("/approved") + public PageResult getApprovedApprovals(EquipmentApprovalListReq req) { + IPage page = equipmentApprovalService.getApprovedApprovals(req); + return PageResult.ok(page.getRecords(), page.getTotal()); + } + + @ApiOperation(value = "审批通过", httpMethod = "POST") + @PostMapping("/{approvalId}/approve") + public Result approve(@PathVariable String approvalId, @Validated @RequestBody EquipmentApprovalReq req) { + equipmentApprovalService.approve(approvalId, req); + return Result.ok(); + } + + @ApiOperation(value = "审批拒绝", httpMethod = "POST") + @PostMapping("/{approvalId}/reject") + public Result reject(@PathVariable String approvalId, @Validated @RequestBody EquipmentApprovalReq req) { + equipmentApprovalService.reject(approvalId, req); + return Result.ok(); + } + + @ApiOperation(value = "获取审批详情", httpMethod = "GET") + @GetMapping("/{approvalId}") + public Result getApprovalDetail(@PathVariable String approvalId) { + return Result.ok(equipmentApprovalService.getApprovalDetail(approvalId)); + } + + @ApiOperation(value = "获取审批统计信息", httpMethod = "GET") + @GetMapping("/stats") + public Result getApprovalStats() { + return Result.ok(equipmentApprovalService.getApprovalStats()); + } +}