diff --git a/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java index e6d836b..642ee6e 100644 --- a/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java +++ b/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java @@ -177,6 +177,9 @@ public class EquipmentEntity extends AuditableEntity implements Serializable { @ApiModelProperty("发票状态") private String invoiceStatus; + @ApiModelProperty("采购状态,NOT_STARTED-未开始,PENDING_APPROVAL-待审批,APPROVED-已通过,REJECTED-已拒绝,COMPLETED-已完成") + private String procurementStatus; + @ApiModelProperty("附件") private String attachments; 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 d936b01..04642f2 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 @@ -154,6 +154,9 @@ public class EquipmentResp implements Serializable { @ApiModelProperty("总价") private BigDecimal totalPrice; + @ApiModelProperty("采购状态,NOT_STARTED-未开始,PENDING_APPROVAL-待审批,APPROVED-已通过,REJECTED-已拒绝,COMPLETED-已完成") + private String procurementStatus; + // 移除备用状态字段,使用现有的 location_status 字段 // @ApiModelProperty("备用状态") // private String spareStatus; diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectKanbanDataResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectKanbanDataResp.java index 2e7e598..ed1748d 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectKanbanDataResp.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectKanbanDataResp.java @@ -17,20 +17,29 @@ import java.util.List; @ApiModel(value="ProjectKanbanDataResp对象", description="项目看板数据响应") public class ProjectKanbanDataResp { - @ApiModelProperty("待施工项目列表") + @ApiModelProperty("未开工项目列表") private List pendingProjects; - @ApiModelProperty("施工中项目列表") + @ApiModelProperty("筹备中项目列表") + private List preparingProjects; + + @ApiModelProperty("开工中项目列表") private List inProgressProjects; + @ApiModelProperty("暂停中项目列表") + private List suspendedProjects; + @ApiModelProperty("已完工项目列表") private List completedProjects; - @ApiModelProperty("已审核项目列表") - private List auditedProjects; + @ApiModelProperty("验收中项目列表") + private List acceptanceProjects; - @ApiModelProperty("已验收项目列表") - private List acceptedProjects; + @ApiModelProperty("回款中项目列表") + private List collectionProjects; + + @ApiModelProperty("已结算项目列表") + private List settledProjects; @Data @ApiModel(value="ProjectKanbanItem对象", description="项目看板项目项") diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectKanbanStatsResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectKanbanStatsResp.java index fe2f6f0..d15296a 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectKanbanStatsResp.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectKanbanStatsResp.java @@ -19,17 +19,26 @@ public class ProjectKanbanStatsResp { @ApiModelProperty("待施工项目数") private Long pendingProjectCount; - @ApiModelProperty("施工中项目数") + @ApiModelProperty("筹备中项目数") + private Long preparingProjectCount; + + @ApiModelProperty("开工中项目数") private Long inProgressProjectCount; + @ApiModelProperty("暂停中项目数") + private Long suspendedProjectCount; + @ApiModelProperty("已完工项目数") private Long completedProjectCount; - @ApiModelProperty("已审核项目数") - private Long auditedProjectCount; + @ApiModelProperty("验收中项目数") + private Long acceptanceProjectCount; - @ApiModelProperty("已验收项目数") - private Long acceptedProjectCount; + @ApiModelProperty("回款中项目数") + private Long collectionProjectCount; + + @ApiModelProperty("已结算项目数") + private Long settledProjectCount; @ApiModelProperty("总机组数") private Long totalTurbineCount; diff --git a/core/src/main/java/com/dite/znpt/domain/vo/TeamMemberUpdateReq.java b/core/src/main/java/com/dite/znpt/domain/vo/TeamMemberUpdateReq.java new file mode 100644 index 0000000..f375d8c --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/TeamMemberUpdateReq.java @@ -0,0 +1,60 @@ +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.time.LocalDate; + +/** + * @author wangna + * @date 2025/08/05 + * @Description: 团队成员更新请求类(用于更新操作,移除必填验证) + */ +@Data +@ApiModel(value="TeamMemberUpdateReq对象", description="团队成员更新请求类") +public class TeamMemberUpdateReq implements Serializable { + + @ApiModelProperty("项目ID") + private String projectId; + + @ApiModelProperty("机组ID(可选)") + private String turbineId; + + @ApiModelProperty("任务组ID(可选)") + private String taskGroupId; + + @ApiModelProperty("任务ID(可选)") + private String taskId; + + @ApiModelProperty("用户ID") + private String userId; + + @ApiModelProperty("项目角色类型:PROJECT_MANAGER-项目经理,SAFETY_OFFICER-安全员,QUALITY_OFFICER-质量员,CONSTRUCTOR-施工人员,TEAM_LEADER-施工组长") + private String roleType; + + @ApiModelProperty("具体岗位代码(如:GROUND_SERVICE-地勤,DRIVER-司机,ASCENDING-登高等)") + private String jobCode; + + @ApiModelProperty("岗位描述") + private String jobDesc; + + @ApiModelProperty("加入时间") + private LocalDate joinDate; + + @ApiModelProperty("离开时间") + private LocalDate leaveDate; + + @ApiModelProperty("状态:ACTIVE-在职,INACTIVE-离职,PENDING-待入职") + private String status = "ACTIVE"; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("用户电话") + private String phone; + + @ApiModelProperty("用户邮箱") + private String email; +} diff --git a/core/src/main/java/com/dite/znpt/enums/ProjectStatusEnum.java b/core/src/main/java/com/dite/znpt/enums/ProjectStatusEnum.java index 7836468..7fbbeff 100644 --- a/core/src/main/java/com/dite/znpt/enums/ProjectStatusEnum.java +++ b/core/src/main/java/com/dite/znpt/enums/ProjectStatusEnum.java @@ -15,11 +15,14 @@ import java.util.List; @Getter @AllArgsConstructor public enum ProjectStatusEnum { - PENDING(0, "待施工"), - IN_PROGRESS(1, "施工中"), - COMPLETED(2, "已完工"), - AUDITED(3, "已审核"), - ACCEPTED(4, "已验收"); + PENDING(0, "未开工"), + PREPARING(1, "筹备中"), + IN_PROGRESS(2, "开工中"), + SUSPENDED(3, "暂停中"), + COMPLETED(4, "已完工"), + IN_ACCEPTANCE(5, "验收中"), + IN_COLLECTION(6, "回款中"), + SETTLED(7, "已结算"); private final int code; private final String desc; diff --git a/core/src/main/java/com/dite/znpt/mapper/BusinessDataFileMapper.java b/core/src/main/java/com/dite/znpt/mapper/BusinessDataFileMapper.java index 02d682b..0fa1dd8 100644 --- a/core/src/main/java/com/dite/znpt/mapper/BusinessDataFileMapper.java +++ b/core/src/main/java/com/dite/znpt/mapper/BusinessDataFileMapper.java @@ -17,13 +17,23 @@ public interface BusinessDataFileMapper { // 新增文件预览方法 - public List List(@Param("folderId") Long folderId, @Param("fileName") String fileName); - void delete(@Param("fileId") Long fileId,@Param("folderId") Long folderId); +// public List List(@Param("folderId") Long folderId, @Param("fileName") String fileName); + + public List List( + @Param("folderId") Long folderId, + @Param("fileName") String fileName, + @Param("sortField") String sortField, + @Param("sortOrder") String sortOrder); + void delete(@Param("fileId") Long fileId, + @Param("folderId") Long folderId); void add(BusinessDataFileEntity businessDataFileEntity); String getPath(Long fileId); // 在接口中添加重命名方法 - void reName(@Param("fileId") Long fileId, @Param("newFileName") String newFileName, @Param("newFilePath") String newFilePath); + void reName(@Param("fileId") Long fileId, + @Param("newFileName") String newFileName, + @Param("newFilePath") String newFilePath); + } diff --git a/core/src/main/java/com/dite/znpt/service/BusinessDataFileService.java b/core/src/main/java/com/dite/znpt/service/BusinessDataFileService.java index 9eafc83..b4af5dc 100644 --- a/core/src/main/java/com/dite/znpt/service/BusinessDataFileService.java +++ b/core/src/main/java/com/dite/znpt/service/BusinessDataFileService.java @@ -14,8 +14,10 @@ import javax.servlet.http.HttpServletResponse; @Service public interface BusinessDataFileService { +// @ApiOperation("分页查询文件") +// PageBean pageSelect(Integer page, Integer pageSize, Long folderId, String fileName); @ApiOperation("分页查询文件") - PageBean pageSelect(Integer page, Integer pageSize, Long folderId, String fileName); + PageBean pageSelect(Integer page, Integer pageSize, Long folderId, String fileName, String sortField, String sortOrder); @ApiOperation("删除文件") Result delete(@RequestParam(value = "fileId", required = false) Long fileId,@RequestParam(value = "foldelId", required = false) Long folderId); diff --git a/core/src/main/java/com/dite/znpt/service/EquipmentStatusUpdateService.java b/core/src/main/java/com/dite/znpt/service/EquipmentStatusUpdateService.java new file mode 100644 index 0000000..2963dde --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/EquipmentStatusUpdateService.java @@ -0,0 +1,51 @@ +package com.dite.znpt.service; + +/** + * 设备状态更新服务接口 + * 用于处理设备审批后的状态更新,避免循环依赖 + * + * @author Bear.G + * @date 2025/1/8/周三 17:50 + */ +public interface EquipmentStatusUpdateService { + + /** + * 更新设备采购状态 + * + * @param equipmentId 设备ID + * @param status 新状态 + */ + void updateProcurementStatus(String equipmentId, String status); + + /** + * 更新设备借用状态 + * + * @param equipmentId 设备ID + * @param status 新状态 + */ + void updateBorrowStatus(String equipmentId, String status); + + /** + * 更新设备归还状态 + * + * @param equipmentId 设备ID + * @param status 新状态 + */ + void updateReturnStatus(String equipmentId, String status); + + /** + * 更新设备位置状态 + * + * @param equipmentId 设备ID + * @param locationStatus 新位置状态 + */ + void updateLocationStatus(String equipmentId, String locationStatus); + + /** + * 更新设备使用状态 + * + * @param equipmentId 设备ID + * @param useStatus 新使用状态 + */ + void updateUseStatus(String equipmentId, String useStatus); +} diff --git a/core/src/main/java/com/dite/znpt/service/ProjectMemberService.java b/core/src/main/java/com/dite/znpt/service/ProjectMemberService.java index 939ff8a..c622b9e 100644 --- a/core/src/main/java/com/dite/znpt/service/ProjectMemberService.java +++ b/core/src/main/java/com/dite/znpt/service/ProjectMemberService.java @@ -27,6 +27,11 @@ public interface ProjectMemberService extends IService { */ ProjectMemberResp updateTeamMember(String memberId, TeamMemberReq req); + /** + * 更新团队成员信息(使用更新专用请求类) + */ + ProjectMemberResp updateTeamMember(String memberId, TeamMemberUpdateReq req); + /** * 删除团队成员(支持单个或批量删除) */ diff --git a/core/src/main/java/com/dite/znpt/service/impl/BusinessDataFileServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/BusinessDataFileServiceImpl.java index 660f034..6cfe2f6 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/BusinessDataFileServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/BusinessDataFileServiceImpl.java @@ -52,15 +52,33 @@ public class BusinessDataFileServiceImpl implements BusinessDataFileService { private BusinessDataService businessDataService; - @ApiOperation("分页查询文件") - @Override - public PageBean pageSelect(Integer page, Integer pageSize, Long folderId, String fileName) { - PageHelper.startPage(page, pageSize); - List list = businessDataFileMapper.List(folderId, fileName); - Page p = (Page) list; - PageBean pageBean = new PageBean(p.getTotal(), p.getResult()); - return pageBean; - } +// @ApiOperation("分页查询文件") +// @Override +// public PageBean pageSelect(Integer page, Integer pageSize, Long folderId, String fileName) { +// PageHelper.startPage(page, pageSize); +// List list = businessDataFileMapper.List(folderId, fileName); +// Page p = (Page) list; +// PageBean pageBean = new PageBean(p.getTotal(), p.getResult()); +// return pageBean; +// } +// @ApiOperation("分页查询文件") +// @Override +// public PageBean pageSelect(Integer page, Integer pageSize, Long folderId, String fileName, String sortField, String sortOrder) { +// PageHelper.startPage(page, pageSize); +// List list = businessDataFileMapper.List(folderId, fileName, sortField, sortOrder); +// Page p = (Page) list; +// PageBean pageBean = new PageBean(p.getTotal(), p.getResult()); +// return pageBean; +// } + @ApiOperation("分页查询文件") + @Override + public PageBean pageSelect(Integer page, Integer pageSize, Long folderId, String fileName, String sortField, String sortOrder) { + PageHelper.startPage(page, pageSize); + List list = businessDataFileMapper.List(folderId, fileName, sortField, sortOrder); + Page p = (Page) list; + PageBean pageBean = new PageBean(p.getTotal(), p.getResult()); + return pageBean; + } @ApiOperation("删除文件") public Result delete(Long fileId, Long folderId) { //删除数据库数据 @@ -228,7 +246,7 @@ public class BusinessDataFileServiceImpl implements BusinessDataFileService { byte[] bytes = file.getBytes(); String uploadDir = businessDataService.getPath(folderId); - File uploadedFile = new File(uploadDir + "\\" + file.getOriginalFilename()); + File uploadedFile = new File(uploadDir + "/" + file.getOriginalFilename()); if (uploadedFile.exists()) { return Result.error("文件已存在"); } @@ -238,12 +256,11 @@ public class BusinessDataFileServiceImpl implements BusinessDataFileService { BusinessDataFileEntity fileEntity = new BusinessDataFileEntity(); fileEntity.setFolderId(folderId); fileEntity.setFileName(file.getOriginalFilename()); - fileEntity.setFilePath(uploadDir + "\\" + file.getOriginalFilename()); + fileEntity.setFilePath(uploadDir + "/" + file.getOriginalFilename()); fileEntity.setFileType(file.getContentType()); fileEntity.setFileSize(file.getSize()/1024); fileEntity.setUploadTime(new Date()); fileEntity.setUploaderId(loginIdAsLong); - System.out.println(uploadDir + "\\" + file.getOriginalFilename()); add(fileEntity); return Result.okM("上传成功"); 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 index f311a84..480734d 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/EquipmentApprovalServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/EquipmentApprovalServiceImpl.java @@ -10,6 +10,7 @@ import com.dite.znpt.domain.vo.EquipmentApprovalReq; import com.dite.znpt.domain.vo.EquipmentApprovalResp; import com.dite.znpt.domain.vo.EquipmentProcurementApplyReq; import com.dite.znpt.service.EquipmentApprovalService; +import com.dite.znpt.service.EquipmentStatusUpdateService; import com.dite.znpt.websocket.SimpleWebSocketHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -34,6 +35,9 @@ public class EquipmentApprovalServiceImpl implements EquipmentApprovalService { @Resource private EquipmentApprovalMapper equipmentApprovalMapper; + + @Resource + private EquipmentStatusUpdateService equipmentStatusUpdateService; @Override public IPage getPendingApprovals(EquipmentApprovalListReq req) { @@ -85,6 +89,21 @@ public class EquipmentApprovalServiceImpl implements EquipmentApprovalService { entity.setApprovalComment(req.getApprovalComment()); equipmentApprovalMapper.updateById(entity); + + // 审批通过后,更新设备状态 + try { + if ("PROCUREMENT".equals(entity.getBusinessType())) { + equipmentStatusUpdateService.updateProcurementStatus(entity.getEquipmentId(), "APPROVED"); + } else if ("BORROW".equals(entity.getBusinessType())) { + equipmentStatusUpdateService.updateBorrowStatus(entity.getEquipmentId(), "APPROVED"); + } else if ("RETURN".equals(entity.getBusinessType())) { + equipmentStatusUpdateService.updateReturnStatus(entity.getEquipmentId(), "APPROVED"); + } + log.info("设备状态更新成功,设备ID: {}, 审批ID: {}", entity.getEquipmentId(), approvalId); + } catch (Exception e) { + log.error("设备状态更新失败,设备ID: {}, 审批ID: {}", entity.getEquipmentId(), approvalId, e); + // 不抛出异常,避免影响审批流程 + } } @Override @@ -101,6 +120,21 @@ public class EquipmentApprovalServiceImpl implements EquipmentApprovalService { entity.setApprovalComment(req.getApprovalComment()); equipmentApprovalMapper.updateById(entity); + + // 审批拒绝后,更新设备状态 + try { + if ("PROCUREMENT".equals(entity.getBusinessType())) { + equipmentStatusUpdateService.updateProcurementStatus(entity.getEquipmentId(), "REJECTED"); + } else if ("BORROW".equals(entity.getBusinessType())) { + equipmentStatusUpdateService.updateBorrowStatus(entity.getEquipmentId(), "REJECTED"); + } else if ("RETURN".equals(entity.getBusinessType())) { + equipmentStatusUpdateService.updateReturnStatus(entity.getEquipmentId(), "REJECTED"); + } + log.info("设备状态更新成功,设备ID: {}, 审批ID: {}", entity.getEquipmentId(), approvalId); + } catch (Exception e) { + log.error("设备状态更新失败,设备ID: {}, 审批ID: {}", entity.getEquipmentId(), approvalId, e); + // 不抛出异常,避免影响审批流程 + } } @Override @@ -264,7 +298,7 @@ public class EquipmentApprovalServiceImpl implements EquipmentApprovalService { // 更新设备采购状态 - 新增逻辑 try { - updateEquipmentProcurementStatus(req.getEquipmentId(), "PENDING_APPROVAL"); + equipmentStatusUpdateService.updateProcurementStatus(req.getEquipmentId(), "PENDING_APPROVAL"); log.info("设备采购状态更新成功,设备ID: {}", req.getEquipmentId()); } catch (Exception e) { log.error("设备采购状态更新失败,设备ID: {}", req.getEquipmentId(), e); @@ -297,7 +331,7 @@ public class EquipmentApprovalServiceImpl implements EquipmentApprovalService { log.warn("设备ID为空,跳过状态更新"); return; } - + try { log.info("准备更新设备采购状态,设备ID: {}, 新状态: {}", equipmentId, status); @@ -316,6 +350,108 @@ public class EquipmentApprovalServiceImpl implements EquipmentApprovalService { } } + + + /** + * 审批通过后更新设备状态 + */ + private void updateEquipmentStatusAfterApproval(EquipmentApprovalEntity entity) { + if (entity == null || entity.getEquipmentId() == null) { + log.warn("审批实体或设备ID为空,跳过状态更新"); + return; + } + + try { + log.info("审批通过后更新设备状态,设备ID: {}, 业务类型: {}", entity.getEquipmentId(), entity.getBusinessType()); + + // 根据业务类型更新不同的设备状态 + if ("PROCUREMENT".equals(entity.getBusinessType())) { + // 采购审批通过,更新设备状态为已采购 + updateEquipmentProcurementStatus(entity.getEquipmentId(), "APPROVED"); + } else if ("BORROW".equals(entity.getBusinessType())) { + // 借用审批通过,更新设备状态为已借用 + updateEquipmentBorrowStatus(entity.getEquipmentId(), "APPROVED"); + } else if ("RETURN".equals(entity.getBusinessType())) { + // 归还审批通过,更新设备状态为已归还 + updateEquipmentReturnStatus(entity.getEquipmentId(), "APPROVED"); + } + + log.info("设备状态更新成功,设备ID: {}", entity.getEquipmentId()); + } catch (Exception e) { + log.error("审批通过后更新设备状态失败,设备ID: {}", entity.getEquipmentId(), e); + throw e; + } + } + + /** + * 审批拒绝后更新设备状态 + */ + private void updateEquipmentStatusAfterRejection(EquipmentApprovalEntity entity) { + if (entity == null || entity.getEquipmentId() == null) { + log.warn("审批实体或设备ID为空,跳过状态更新"); + return; + } + + try { + log.info("审批拒绝后更新设备状态,设备ID: {}, 业务类型: {}", entity.getEquipmentId(), entity.getBusinessType()); + + // 根据业务类型更新不同的设备状态 + if ("PROCUREMENT".equals(entity.getBusinessType())) { + // 采购审批拒绝,更新设备状态为审批拒绝 + updateEquipmentProcurementStatus(entity.getEquipmentId(), "REJECTED"); + } else if ("BORROW".equals(entity.getBusinessType())) { + // 借用审批拒绝,更新设备状态为借用拒绝 + updateEquipmentBorrowStatus(entity.getEquipmentId(), "REJECTED"); + } else if ("RETURN".equals(entity.getBusinessType())) { + // 归还审批拒绝,更新设备状态为归还拒绝 + updateEquipmentReturnStatus(entity.getEquipmentId(), "REJECTED"); + } + + log.info("设备状态更新成功,设备ID: {}", entity.getEquipmentId()); + } catch (Exception e) { + log.error("审批拒绝后更新设备状态失败,设备ID: {}", entity.getEquipmentId(), e); + throw e; + } + } + + /** + * 更新设备借用状态 + */ + private void updateEquipmentBorrowStatus(String equipmentId, String status) { + if (equipmentId == null || equipmentId.trim().isEmpty()) { + log.warn("设备ID为空,跳过借用状态更新"); + return; + } + + try { + log.info("准备更新设备借用状态,设备ID: {}, 新状态: {}", equipmentId, status); + // 这里可以添加具体的更新逻辑 + // 例如:equipmentMapper.updateBorrowStatus(equipmentId, status); + } catch (Exception e) { + log.error("更新设备借用状态失败,设备ID: {}, 状态: {}", equipmentId, status, e); + throw e; + } + } + + /** + * 更新设备归还状态 + */ + private void updateEquipmentReturnStatus(String equipmentId, String status) { + if (equipmentId == null || equipmentId.trim().isEmpty()) { + log.warn("设备ID为空,跳过归还状态更新"); + return; + } + + try { + log.info("准备更新设备归还状态,设备ID: {}, 新状态: {}", equipmentId, status); + // 这里可以添加具体的更新逻辑 + // 例如:equipmentMapper.updateReturnStatus(equipmentId, status); + } catch (Exception e) { + log.error("更新设备归还状态失败,设备ID: {}, 状态: {}", equipmentId, status, e); + throw e; + } + } + @Override public IPage getMyProcurementApplications(EquipmentApprovalListReq req) { log.info("开始获取我的采购申请,请求参数: {}", req); diff --git a/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java index 8f15c6e..ebaac5c 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java @@ -562,6 +562,9 @@ public class EquipmentServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(EquipmentEntity::getEquipmentId, equipmentId); + + // 根据状态设置相应的字段 + if ("APPROVED".equals(status)) { + // 审批通过:设置采购状态为已通过,位置状态为库存中,使用状态为空闲中 + updateWrapper.set(EquipmentEntity::getProcurementStatus, "APPROVED"); + updateWrapper.set(EquipmentEntity::getLocationStatus, "in_stock"); + updateWrapper.set(EquipmentEntity::getUseStatus, "0"); + updateWrapper.set(EquipmentEntity::getInStockTime, LocalDateTime.now()); + updateWrapper.set(EquipmentEntity::getStatusChangeTime, LocalDateTime.now()); + log.info("设备采购审批通过,设置状态为已通过"); + } else if ("REJECTED".equals(status)) { + // 审批拒绝:设置采购状态为已拒绝,位置状态为未入库,使用状态为空闲中 + updateWrapper.set(EquipmentEntity::getProcurementStatus, "REJECTED"); + updateWrapper.set(EquipmentEntity::getLocationStatus, "not_in_stock"); + updateWrapper.set(EquipmentEntity::getUseStatus, "0"); + updateWrapper.set(EquipmentEntity::getStatusChangeTime, LocalDateTime.now()); + log.info("设备采购审批拒绝,设置状态为已拒绝"); + } else if ("PENDING_APPROVAL".equals(status) || "PENDING".equals(status)) { + // 待审批:设置采购状态为待审批,位置状态为待审批,使用状态为空闲中 + updateWrapper.set(EquipmentEntity::getProcurementStatus, "PENDING_APPROVAL"); + updateWrapper.set(EquipmentEntity::getLocationStatus, "pending_approval"); + updateWrapper.set(EquipmentEntity::getUseStatus, "0"); + updateWrapper.set(EquipmentEntity::getStatusChangeTime, LocalDateTime.now()); + log.info("设备采购申请提交,设置状态为待审批"); + } else if ("COMPLETED".equals(status)) { + // 采购完成:设置采购状态为已完成,位置状态为库存中,使用状态为空闲中 + updateWrapper.set(EquipmentEntity::getProcurementStatus, "COMPLETED"); + updateWrapper.set(EquipmentEntity::getLocationStatus, "in_stock"); + updateWrapper.set(EquipmentEntity::getUseStatus, "0"); + updateWrapper.set(EquipmentEntity::getInStockTime, LocalDateTime.now()); + updateWrapper.set(EquipmentEntity::getStatusChangeTime, LocalDateTime.now()); + log.info("设备采购完成,设置状态为已完成"); + } + + // 执行更新 + int updateCount = equipmentMapper.update(null, updateWrapper); + if (updateCount > 0) { + log.info("设备采购状态更新成功,设备ID: {}, 新状态: {}, 影响行数: {}", equipmentId, status, updateCount); + } else { + log.warn("设备采购状态更新失败,设备ID: {}, 新状态: {}, 可能设备不存在", equipmentId, status); + } + + } catch (Exception e) { + log.error("更新设备采购状态失败,设备ID: {}, 状态: {}", equipmentId, status, e); + throw e; + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateBorrowStatus(String equipmentId, String status) { + if (equipmentId == null || equipmentId.trim().isEmpty()) { + log.warn("设备ID为空,跳过借用状态更新"); + return; + } + + try { + log.info("开始更新设备借用状态,设备ID: {}, 新状态: {}", equipmentId, status); + + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(EquipmentEntity::getEquipmentId, equipmentId); + + if ("APPROVED".equals(status)) { + // 借用审批通过:设置位置状态为外借中,使用状态为使用中 + updateWrapper.set(EquipmentEntity::getLocationStatus, "borrowed"); + updateWrapper.set(EquipmentEntity::getUseStatus, "1"); + updateWrapper.set(EquipmentEntity::getBorrowingTime, LocalDateTime.now()); + updateWrapper.set(EquipmentEntity::getStatusChangeTime, LocalDateTime.now()); + log.info("设备借用审批通过,设置状态为外借中"); + } else if ("REJECTED".equals(status)) { + // 借用审批拒绝:保持原有状态 + updateWrapper.set(EquipmentEntity::getStatusChangeTime, LocalDateTime.now()); + log.info("设备借用审批拒绝,保持原有状态"); + } + + // 执行更新 + int updateCount = equipmentMapper.update(null, updateWrapper); + if (updateCount > 0) { + log.info("设备借用状态更新成功,设备ID: {}, 新状态: {}, 影响行数: {}", equipmentId, status, updateCount); + } else { + log.warn("设备借用状态更新失败,设备ID: {}, 新状态: {}, 可能设备不存在", equipmentId, status); + } + + } catch (Exception e) { + log.error("更新设备借用状态失败,设备ID: {}, 状态: {}", equipmentId, status, e); + throw e; + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateReturnStatus(String equipmentId, String status) { + if (equipmentId == null || equipmentId.trim().isEmpty()) { + log.warn("设备ID为空,跳过归还状态更新"); + return; + } + + try { + log.info("开始更新设备归还状态,设备ID: {}, 新状态: {}", equipmentId, status); + + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(EquipmentEntity::getEquipmentId, equipmentId); + + if ("APPROVED".equals(status)) { + // 归还审批通过:设置位置状态为库存中,使用状态为空闲中 + updateWrapper.set(EquipmentEntity::getLocationStatus, "in_stock"); + updateWrapper.set(EquipmentEntity::getUseStatus, "0"); + updateWrapper.set(EquipmentEntity::getReturnTime, LocalDateTime.now()); + updateWrapper.set(EquipmentEntity::getStatusChangeTime, LocalDateTime.now()); + log.info("设备归还审批通过,设置状态为库存中"); + } else if ("REJECTED".equals(status)) { + // 归还审批拒绝:保持原有状态 + updateWrapper.set(EquipmentEntity::getStatusChangeTime, LocalDateTime.now()); + log.info("设备归还审批拒绝,保持原有状态"); + } + + // 执行更新 + int updateCount = equipmentMapper.update(null, updateWrapper); + if (updateCount > 0) { + log.info("设备归还状态更新成功,设备ID: {}, 新状态: {}, 影响行数: {}", equipmentId, status, updateCount); + } else { + log.warn("设备归还状态更新失败,设备ID: {}, 新状态: {}, 可能设备不存在", equipmentId, status); + } + + } catch (Exception e) { + log.error("更新设备归还状态失败,设备ID: {}, 状态: {}", equipmentId, status, e); + throw e; + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateLocationStatus(String equipmentId, String locationStatus) { + if (equipmentId == null || equipmentId.trim().isEmpty()) { + log.warn("设备ID为空,跳过位置状态更新"); + return; + } + + try { + log.info("开始更新设备位置状态,设备ID: {}, 新位置状态: {}", equipmentId, locationStatus); + + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(EquipmentEntity::getEquipmentId, equipmentId); + updateWrapper.set(EquipmentEntity::getLocationStatus, locationStatus); + updateWrapper.set(EquipmentEntity::getStatusChangeTime, LocalDateTime.now()); + + // 执行更新 + int updateCount = equipmentMapper.update(null, updateWrapper); + if (updateCount > 0) { + log.info("设备位置状态更新成功,设备ID: {}, 新位置状态: {}, 影响行数: {}", equipmentId, locationStatus, updateCount); + } else { + log.warn("设备位置状态更新失败,设备ID: {}, 新位置状态: {}, 可能设备不存在", equipmentId, locationStatus); + } + + } catch (Exception e) { + log.error("更新设备位置状态失败,设备ID: {}, 位置状态: {}", equipmentId, locationStatus, e); + throw e; + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateUseStatus(String equipmentId, String useStatus) { + if (equipmentId == null || equipmentId.trim().isEmpty()) { + log.warn("设备ID为空,跳过使用状态更新"); + return; + } + + try { + log.info("开始更新设备使用状态,设备ID: {}, 新使用状态: {}", equipmentId, useStatus); + + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(EquipmentEntity::getEquipmentId, equipmentId); + updateWrapper.set(EquipmentEntity::getUseStatus, useStatus); + updateWrapper.set(EquipmentEntity::getStatusChangeTime, LocalDateTime.now()); + + // 执行更新 + int updateCount = equipmentMapper.update(null, updateWrapper); + if (updateCount > 0) { + log.info("设备使用状态更新成功,设备ID: {}, 新使用状态: {}, 影响行数: {}", equipmentId, useStatus, updateCount); + } else { + log.warn("设备使用状态更新失败,设备ID: {}, 新使用状态: {}, 可能设备不存在", equipmentId, useStatus); + } + + } catch (Exception e) { + log.error("更新设备使用状态失败,设备ID: {}, 使用状态: {}", equipmentId, useStatus, e); + throw e; + } + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/ProjectMemberServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ProjectMemberServiceImpl.java index 1c03097..c5fbc62 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/ProjectMemberServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/ProjectMemberServiceImpl.java @@ -1,5 +1,6 @@ package com.dite.znpt.service.impl; +import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; @@ -18,6 +19,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -188,6 +190,14 @@ public class ProjectMemberServiceImpl extends ServiceImpl list = this.baseMapper.queryTeamMembers(query); - return list.stream() - .filter(member -> member.getMemberId().equals(memberId)) + ProjectMemberResp member = list.stream() + .filter(m -> m.getMemberId().equals(memberId)) .findFirst() .orElse(null); + + if (member != null) { + // 丰富成员信息 + enrichMemberInfo(CollUtil.toList(member)); + } + + return member; } // ========================== 项目看板相关方法实现 ========================== @@ -300,11 +454,14 @@ public class ProjectMemberServiceImpl extends ServiceImpl turbineStatusList = jobService.calCrewStatus(ListUtil.of(turbineId)); @@ -234,7 +234,7 @@ public class TurbineServiceImpl extends ServiceImpl + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + delete from business_data_part_file diff --git a/web/src/main/java/com/dite/znpt/web/controller/BusinessDataFileController.java b/web/src/main/java/com/dite/znpt/web/controller/BusinessDataFileController.java index f838342..a8b3451 100644 --- a/web/src/main/java/com/dite/znpt/web/controller/BusinessDataFileController.java +++ b/web/src/main/java/com/dite/znpt/web/controller/BusinessDataFileController.java @@ -43,15 +43,26 @@ public class BusinessDataFileController { @Resource private BusinessDataFileMapper businessDataFileMapper; - @ApiOperation(value = "分页查询文件", httpMethod = "GET") - @GetMapping("/list") - public Result pageSelect(@RequestParam(defaultValue = "1") Integer page, - @RequestParam(defaultValue = "10") Integer pageSize, - @RequestParam(defaultValue = "0") Long folderId, - @RequestParam(required = false) String fileName) { - PageBean pageBean = businessDataFileService.pageSelect(page, pageSize, folderId, fileName); - return Result.ok(pageBean); - } +// @ApiOperation(value = "分页查询文件", httpMethod = "GET") +// @GetMapping("/list") +// public Result pageSelect(@RequestParam(defaultValue = "1") Integer page, +// @RequestParam(defaultValue = "10") Integer pageSize, +// @RequestParam(defaultValue = "0") Long folderId, +// @RequestParam(required = false) String fileName) { +// PageBean pageBean = businessDataFileService.pageSelect(page, pageSize, folderId, fileName); +// return Result.ok(pageBean); +// } + @ApiOperation(value = "分页查询文件", httpMethod = "GET") + @GetMapping("/list") + public Result pageSelect(@RequestParam(defaultValue = "1") Integer page, + @RequestParam(defaultValue = "10") Integer pageSize, + @RequestParam(defaultValue = "0") Long folderId, + @RequestParam(required = false) String fileName, + @RequestParam(required = false) String sortField, + @RequestParam(required = false) String sortOrder) { + PageBean pageBean = businessDataFileService.pageSelect(page, pageSize, folderId, fileName, sortField, sortOrder); + return Result.ok(pageBean); + } @ApiOperation(value = "增加文件") @PostMapping("/add") diff --git a/web/src/main/java/com/dite/znpt/web/controller/ProjectMemberController.java b/web/src/main/java/com/dite/znpt/web/controller/ProjectMemberController.java index 220ccfa..fa66e14 100644 --- a/web/src/main/java/com/dite/znpt/web/controller/ProjectMemberController.java +++ b/web/src/main/java/com/dite/znpt/web/controller/ProjectMemberController.java @@ -45,7 +45,7 @@ public class ProjectMemberController { @PutMapping("/team-member/{memberId}") public Result updateTeamMember( @PathVariable String memberId, - @Valid @RequestBody TeamMemberReq req) { + @RequestBody TeamMemberUpdateReq req) { return Result.ok(projectMemberService.updateTeamMember(memberId, req)); } diff --git a/web/src/main/java/com/dite/znpt/web/controller/UserController.java b/web/src/main/java/com/dite/znpt/web/controller/UserController.java index 057e6b5..430d6a1 100644 --- a/web/src/main/java/com/dite/znpt/web/controller/UserController.java +++ b/web/src/main/java/com/dite/znpt/web/controller/UserController.java @@ -79,5 +79,13 @@ public class UserController { userService.deleteById(userId); return Result.ok(); } + + @ApiOperation(value = "根据姓名模糊查询用户", httpMethod = "GET") + @GetMapping("/searchByName") + public PageResult searchByName(@RequestParam String name) { + UserListReq req = new UserListReq(); + req.setName(name); + return PageResult.ok(userService.list(req)); + } }