diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysDept.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysDept.java index d38bfd02..eb036969 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysDept.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysDept.java @@ -97,6 +97,9 @@ public class SysDept extends BaseEntity /** 部门全路径名称 */ private String fullPathName; + /** 组织关联项目数量 */ + private Integer projectCount; + public Long getDeptId() { return deptId; @@ -323,6 +326,16 @@ public class SysDept extends BaseEntity this.fullPathName = fullPathName; } + public Integer getProjectCount() + { + return projectCount; + } + + public void setProjectCount(Integer projectCount) + { + this.projectCount = projectCount; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) @@ -347,6 +360,7 @@ public class SysDept extends BaseEntity .append("auditTime", getAuditTime()) .append("companyScore", getCompanyScore()) .append("fullPathName", getFullPathName()) + .append("projectCount", getProjectCount()) .append("createBy", getCreateBy()) .append("createTime", getCreateTime()) .append("updateBy", getUpdateBy()) diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java index 1bd313f1..828f3eee 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java @@ -113,6 +113,9 @@ public class SysUser extends BaseEntity /** 关键字(用于模糊查询用户名、昵称、手机号等) */ private String keyword; + /** 签发人管理项目范围(逗号分隔项目名称) */ + private String issuerProjectScope; + /** 开始时间 */ private String beginTime; @@ -392,6 +395,16 @@ public class SysUser extends BaseEntity this.keyword = keyword; } + public String getIssuerProjectScope() + { + return issuerProjectScope; + } + + public void setIssuerProjectScope(String issuerProjectScope) + { + this.issuerProjectScope = issuerProjectScope; + } + public String getBeginTime() { return beginTime; @@ -440,6 +453,7 @@ public class SysUser extends BaseEntity .append("remark", getRemark()) .append("dept", getDept()) .append("roleNames", getRoleNames()) + .append("issuerProjectScope", getIssuerProjectScope()) .append("beginTime", getBeginTime()) .append("endTime", getEndTime()) .toString(); diff --git a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/controller/ProjectImplementationController.java b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/controller/ProjectImplementationController.java index 756c8b75..3f2ed2f2 100644 --- a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/controller/ProjectImplementationController.java +++ b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/controller/ProjectImplementationController.java @@ -54,10 +54,10 @@ public class ProjectImplementationController extends BaseController { if (workPlan == null) { return error("项目不存在"); } - // 验证项目是否已审批通过(允许查看未实施和实施中的项目) - if (!"2".equals(workPlan.getProjectStatus()) || !"1".equals(workPlan.getApprovalStatus())) { - return error("项目未进入实施阶段"); - } +// // 验证项目是否已审批通过(允许查看未实施和实施中的项目) +// if (!"2".equals(workPlan.getProjectStatus()) || !"1".equals(workPlan.getApprovalStatus())) { +// return error("项目未进入实施阶段"); +// } return success(workPlan); } diff --git a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/controller/WorkPlanController.java b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/controller/WorkPlanController.java index 634204bf..fb5d6c85 100644 --- a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/controller/WorkPlanController.java +++ b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/controller/WorkPlanController.java @@ -2,6 +2,7 @@ package com.admin.contractor.controller; import com.admin.contractor.domain.WorkPlan; import com.admin.contractor.domain.dto.WorkPlanCompletionReviewDTO; +import com.admin.contractor.domain.dto.WorkPlanPropertyCompletionReviewDTO; import com.admin.contractor.service.IWorkPlanService; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.domain.AjaxResult; @@ -161,4 +162,17 @@ public class WorkPlanController extends BaseController { } return error("现场完工复核失败"); } + /** + * 物业完工复核(提交通过/驳回) + */ + @Operation(summary = "物业完工复核") + @Log(title = "物业完工复核", businessType = BusinessType.UPDATE) + @PutMapping("/propertyCompletionReview") + public AjaxResult propertyCompletionReview(@Validated @RequestBody WorkPlanPropertyCompletionReviewDTO dto) { + int rows = workPlanService.propertyCompletionReview(dto); + if (rows > 0) { + return success("物业完工复核处理成功"); + } + return error("物业完工复核处理失败"); + } } diff --git a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/controller/WorkTicketController.java b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/controller/WorkTicketController.java index 7992df6d..49f085be 100644 --- a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/controller/WorkTicketController.java +++ b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/controller/WorkTicketController.java @@ -144,12 +144,11 @@ public class WorkTicketController extends BaseController { @PutMapping("/approve/{ticketId}") public AjaxResult approve(@Parameter(description = "工作票 ID") @PathVariable("ticketId") Long ticketId, @Parameter(description = "审核意见") @RequestParam(required = false) String reviewComment, - @Parameter(description = "审批后状态:2已签发(默认)") @RequestParam(required = false, defaultValue = "2") String status, @Parameter(description = "施工作业必要性:0 不必要 1 必要") @RequestParam(required = false) String reviewNecessity, @Parameter(description = "施工作业可行性:0 不可行 1 可行") @RequestParam(required = false) String reviewFeasibility, @Parameter(description = "票证内容完整性(JSON 数组)") @RequestParam(required = false) String reviewCompleteness, @Parameter(description = "施工条件确认:0 不符合 1 符合") @RequestParam(required = false) String reviewCondition) { - return toAjax(workTicketService.approveWorkTicket(ticketId, reviewComment, status, reviewNecessity, reviewFeasibility, reviewCompleteness, reviewCondition)); + return toAjax(workTicketService.approveWorkTicket(ticketId, reviewComment, reviewNecessity, reviewFeasibility, reviewCompleteness, reviewCondition)); } /** diff --git a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/domain/WorkPlan.java b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/domain/WorkPlan.java index 4f767168..6d14f802 100644 --- a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/domain/WorkPlan.java +++ b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/domain/WorkPlan.java @@ -53,6 +53,9 @@ public class WorkPlan extends BaseEntity { @Schema(description = "作业负责人职位") private String supervisorPosition; + + @Schema(description = "施工负责人电话") + private String supervisorPhone; @Schema(description = "作业班成员用户ID(JSON数组,存储用户ID)") private String sysUsers; @@ -143,6 +146,24 @@ public class WorkPlan extends BaseEntity { @Schema(description = "物业复核状态(关联查询)") private String propertyReviewStatus; + + @Schema(description = "物业完工复核-作业内容完成度:1-100%完成,2-部分完成,3-未完成") + private String propertyWorkContentCompletion; + + @Schema(description = "物业完工复核-现场清理情况:1-符合要求,0-不符合") + private String propertySiteCleaningCondition; + + @Schema(description = "物业完工复核-现场复核照片URL,多个逗号分隔") + private String propertyReviewPhotos; + + @Schema(description = "物业完工复核-复核意见") + private String propertyReviewComment; + + @Schema(description = "物业完工复核-复核人") + private String propertyReviewBy; + + @Schema(description = "物业完工复核-复核时间") + private String propertyReviewTime; @Schema(description = "作业周期(关联查询,格式:开始时间 至 结束时间)") private String workPeriod; diff --git a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/domain/dto/WorkPlanPropertyCompletionReviewDTO.java b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/domain/dto/WorkPlanPropertyCompletionReviewDTO.java new file mode 100644 index 00000000..6d32c9e0 --- /dev/null +++ b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/domain/dto/WorkPlanPropertyCompletionReviewDTO.java @@ -0,0 +1,36 @@ +package com.admin.contractor.domain.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 物业完工复核 DTO + */ +@Data +@Schema(description = "物业完工复核请求") +public class WorkPlanPropertyCompletionReviewDTO { + + @Schema(description = "项目ID", required = true, example = "1001") + private Long projectId; + + @Schema(description = "物业复核动作:1-提交通过,2-驳回", required = true, example = "1") + private String propertyReviewStatus; + + @Schema(description = "作业内容完成度:1-100%完成,2-部分完成,3-未完成", required = true, example = "1") + private String workContentCompletion; + + @Schema(description = "现场清理情况:1-符合要求,0-不符合", required = true, example = "1") + private String siteCleaningCondition; + + @Schema(description = "现场复核照片URL,多个逗号分隔,至少3张", required = true) + private String propertyReviewPhotos; + + @Schema(description = "复核意见") + private String propertyReviewComment; + + @Schema(description = "复核人(后端自动填充)") + private String propertyReviewBy; + + @Schema(description = "复核时间(后端自动填充)") + private String propertyReviewTime; +} diff --git a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/mapper/WorkPlanMapper.java b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/mapper/WorkPlanMapper.java index c1abb11a..a52067f4 100644 --- a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/mapper/WorkPlanMapper.java +++ b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/mapper/WorkPlanMapper.java @@ -2,6 +2,7 @@ package com.admin.contractor.mapper; import com.admin.contractor.domain.WorkPlan; import com.admin.contractor.domain.dto.WorkPlanCompletionReviewDTO; +import com.admin.contractor.domain.dto.WorkPlanPropertyCompletionReviewDTO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -133,5 +134,12 @@ public interface WorkPlanMapper { */ int updateCompletionReviewWithStatus(WorkPlanCompletionReviewDTO dto); + /** + * 更新物业完工复核信息 + * + * @param dto 物业完工复核请求参数 + * @return 结果 + */ + int updatePropertyCompletionReview(WorkPlanPropertyCompletionReviewDTO dto); } diff --git a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/IWorkPlanService.java b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/IWorkPlanService.java index d02a4b2e..8ac9eac1 100644 --- a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/IWorkPlanService.java +++ b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/IWorkPlanService.java @@ -2,6 +2,7 @@ package com.admin.contractor.service; import com.admin.contractor.domain.WorkPlan; import com.admin.contractor.domain.dto.WorkPlanCompletionReviewDTO; +import com.admin.contractor.domain.dto.WorkPlanPropertyCompletionReviewDTO; import java.util.List; @@ -126,4 +127,12 @@ public interface IWorkPlanService { * @return 结果 */ int completionReview(WorkPlanCompletionReviewDTO dto); + + /** + * 物业完工复核 + * + * @param dto 物业完工复核请求参数 + * @return 结果 + */ + int propertyCompletionReview(WorkPlanPropertyCompletionReviewDTO dto); } diff --git a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/IWorkTicketService.java b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/IWorkTicketService.java index 1b6e8a2f..271470d4 100644 --- a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/IWorkTicketService.java +++ b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/IWorkTicketService.java @@ -82,7 +82,7 @@ public interface IWorkTicketService { * @param reviewComment 审核意见 * @return 结果 */ - int approveWorkTicket(Long ticketId, String reviewComment, String status, String reviewNecessity, String reviewFeasibility, String reviewCompleteness, String reviewCondition); + int approveWorkTicket(Long ticketId, String reviewComment, String reviewNecessity, String reviewFeasibility, String reviewCompleteness, String reviewCondition); /** * 审批工作票(驳回) diff --git a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/impl/WorkPlanServiceImpl.java b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/impl/WorkPlanServiceImpl.java index 5203c555..a4e1ed21 100644 --- a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/impl/WorkPlanServiceImpl.java +++ b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/impl/WorkPlanServiceImpl.java @@ -4,6 +4,7 @@ import com.admin.contractor.domain.RiskControlCard; import com.admin.contractor.domain.WorkPlan; import com.admin.contractor.domain.WorkTicket; import com.admin.contractor.domain.dto.WorkPlanCompletionReviewDTO; +import com.admin.contractor.domain.dto.WorkPlanPropertyCompletionReviewDTO; import com.admin.contractor.mapper.AccessPermitMapper; import com.admin.contractor.mapper.ConstructionIssueFeedbackMapper; import com.admin.contractor.mapper.ConstructionIssueRectificationMapper; @@ -749,4 +750,70 @@ public class WorkPlanServiceImpl implements IWorkPlanService { throw new ServiceException("现场完工复核失败:" + e.getMessage()); } } + /** + * 物业完工复核(提交通过/驳回) + */ + @Override + @Transactional + public int propertyCompletionReview(WorkPlanPropertyCompletionReviewDTO dto) { + if (dto == null || dto.getProjectId() == null) { + throw new ServiceException("项目ID不能为空"); + } + + WorkPlan workPlan = workPlanMapper.selectWorkPlanById(dto.getProjectId()); + if (workPlan == null) { + throw new ServiceException("工作计划不存在"); + } + + String reviewStatus = dto.getPropertyReviewStatus(); + if (!"1".equals(reviewStatus) && !"2".equals(reviewStatus)) { + throw new ServiceException("物业复核动作必须为 1(提交通过)或 2(驳回)"); + } + + // 提交通过前校验:项目申请的球机必须全部归还入库 + if ("1".equals(reviewStatus) && pcCameraAllocMapper != null) { + int notInboundCount = pcCameraAllocMapper.countNotInboundByProjectIds(new Long[]{dto.getProjectId()}); + if (notInboundCount > 0) { + throw new ServiceException("当前项目仍有 " + notInboundCount + " 台球机未归还入库,不能提交通过"); + } + } + + String completion = dto.getWorkContentCompletion(); + if (!"1".equals(completion) && !"2".equals(completion) && !"3".equals(completion)) { + throw new ServiceException("作业内容完成度必须为 1(100%完成)、2(部分完成)或 3(未完成)"); + } + + String cleaning = dto.getSiteCleaningCondition(); + if (!"1".equals(cleaning) && !"0".equals(cleaning)) { + throw new ServiceException("现场清理情况必须为 1(符合要求)或 0(不符合)"); + } + + String photos = dto.getPropertyReviewPhotos(); + if (StringUtils.isEmpty(photos) || photos.trim().isEmpty()) { + throw new ServiceException("现场复核照片不能为空"); + } + String[] photoArray = photos.split(","); + long validPhotoCount = 0; + for (String photo : photoArray) { + if (StringUtils.isNotEmpty(photo) && !photo.trim().isEmpty()) { + validPhotoCount++; + } + } + if (validPhotoCount < 3) { + throw new ServiceException("现场复核照片至少需要上传 3 张,当前上传 " + validPhotoCount + " 张"); + } + + if ("2".equals(reviewStatus) && (StringUtils.isEmpty(dto.getPropertyReviewComment()) || dto.getPropertyReviewComment().trim().isEmpty())) { + throw new ServiceException("驳回时复核意见不能为空"); + } + + String currentUsername = SecurityUtils.getUsername(); + if (StringUtils.isEmpty(currentUsername) || currentUsername.trim().isEmpty()) { + throw new ServiceException("无法获取当前用户信息"); + } + + dto.setPropertyReviewBy(currentUsername); + dto.setPropertyReviewTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + return workPlanMapper.updatePropertyCompletionReview(dto); + } } diff --git a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/impl/WorkTicketServiceImpl.java b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/impl/WorkTicketServiceImpl.java index 5786a416..588b37bd 100644 --- a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/impl/WorkTicketServiceImpl.java +++ b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/contractor/service/impl/WorkTicketServiceImpl.java @@ -237,7 +237,7 @@ public class WorkTicketServiceImpl implements IWorkTicketService { */ @Override @Transactional - public int approveWorkTicket(Long ticketId, String reviewComment, String status, String reviewNecessity, String reviewFeasibility, String reviewCompleteness, String reviewCondition) { + public int approveWorkTicket(Long ticketId, String reviewComment, String reviewNecessity, String reviewFeasibility, String reviewCompleteness, String reviewCondition) { WorkTicket ticket = workTicketMapper.selectWorkTicketById(ticketId); if (ticket == null) { throw new ServiceException("工作票申请不存在"); @@ -260,10 +260,8 @@ public class WorkTicketServiceImpl implements IWorkTicketService { } } String reviewer = SecurityUtils.getUsername(); - // 默认审批通过后置为已签发 - if (StringUtils.isEmpty(status)) { - status = "2"; - } + // 审批通过后固定置为已签发 + String status = "2"; // 更新状态为已签发,并保存审核确认信息 WorkTicket updateTicket = new WorkTicket(); updateTicket.setTicketId(ticketId); @@ -313,6 +311,7 @@ public class WorkTicketServiceImpl implements IWorkTicketService { // 更新状态为已驳回,并保存审核确认信息 WorkTicket updateTicket = new WorkTicket(); updateTicket.setTicketId(ticketId); + updateTicket.setStatus("3"); updateTicket.setReviewer(reviewer); updateTicket.setReviewTime(new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); updateTicket.setReviewComment(reviewComment); diff --git a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/property/controller/PcRiskProjectController.java b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/property/controller/PcRiskProjectController.java index fc19effb..7f8139df 100644 --- a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/property/controller/PcRiskProjectController.java +++ b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/property/controller/PcRiskProjectController.java @@ -1,6 +1,7 @@ package com.admin.property.controller; import com.admin.property.service.IPcRiskProjectService; +import com.admin.property.domain.vo.PcRiskProjectAllocDetailVO; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.TableDataInfo; @@ -15,6 +16,7 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import static com.ruoyi.common.security.utils.SecurityUtils.getUsername; +import java.util.List; @Tag(name = "移动监控球机申领管理") @RestController @@ -89,4 +91,13 @@ public class PcRiskProjectController extends BaseController { public AjaxResult getWorkPlanInfoByTicketId(@PathVariable Long ticketId) { return success(pcRiskProjectService.getWorkPlanInfoByTicketId(ticketId)); } + + /** 按项目ID查询球机申请单及球机申请记录 */ + @Operation(summary = "按项目ID查询球机申请及申请记录") + @PreAuthorize("@ss.hasPermi('property:cameraApplication:query')") + @GetMapping("/project/{projectId}/allocRecords") + public AjaxResult getApplicationsWithAllocRecordsByProjectId(@PathVariable Long projectId) { + List list = pcRiskProjectService.selectApplicationsWithAllocRecordsByProjectId(projectId); + return success(list); + } } diff --git a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/property/domain/vo/PcRiskProjectAllocDetailVO.java b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/property/domain/vo/PcRiskProjectAllocDetailVO.java new file mode 100644 index 00000000..2c9db4e6 --- /dev/null +++ b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/property/domain/vo/PcRiskProjectAllocDetailVO.java @@ -0,0 +1,22 @@ +package com.admin.property.domain.vo; + +import com.admin.property.domain.PcCameraAlloc; +import com.admin.property.domain.PcRiskProject; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * 项目球机申请及分配记录明细 + */ +@Data +@Schema(description = "项目球机申请及分配记录明细") +public class PcRiskProjectAllocDetailVO { + + @Schema(description = "球机申请单信息") + private PcRiskProject application; + + @Schema(description = "球机申请记录(分配/回收/入库记录)") + private List allocRecords; +} diff --git a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/property/service/IPcRiskProjectService.java b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/property/service/IPcRiskProjectService.java index 26eb51d9..6ab3d9a3 100644 --- a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/property/service/IPcRiskProjectService.java +++ b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/property/service/IPcRiskProjectService.java @@ -1,6 +1,7 @@ package com.admin.property.service; import com.admin.property.domain.PcRiskProject; +import com.admin.property.domain.vo.PcRiskProjectAllocDetailVO; import java.util.List; @@ -23,6 +24,14 @@ public interface IPcRiskProjectService { */ PcRiskProject getWorkPlanInfoByTicketId(Long ticketId); + /** + * 按项目ID查询球机申请单及对应申请记录 + * + * @param projectId 项目ID + * @return 申请单及申请记录列表 + */ + List selectApplicationsWithAllocRecordsByProjectId(Long projectId); + public List selectProjectCompletionReviewList(PcRiskProject pcRiskProject); @@ -43,4 +52,4 @@ public interface IPcRiskProjectService { */ int updateWorkTicketId(Long applicationId, Long workTicketId); -} \ No newline at end of file +} diff --git a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/property/service/impl/PcRiskProjectServiceImpl.java b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/property/service/impl/PcRiskProjectServiceImpl.java index 5b26d5f4..9f687f4d 100644 --- a/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/property/service/impl/PcRiskProjectServiceImpl.java +++ b/ruoyi-modules/aidmt-manage-ms/src/main/java/com/admin/property/service/impl/PcRiskProjectServiceImpl.java @@ -2,7 +2,9 @@ package com.admin.property.service.impl; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; +import com.admin.property.domain.PcCameraAlloc; import com.admin.property.domain.PcRiskProject; +import com.admin.property.domain.vo.PcRiskProjectAllocDetailVO; import com.admin.property.mapper.PcRiskProjectMapper; import com.admin.property.mapper.PcCameraAllocMapper; import com.admin.property.service.IPcRiskProjectService; @@ -316,6 +318,30 @@ public class PcRiskProjectServiceImpl implements IPcRiskProjectService { return result; } + @Override + public List selectApplicationsWithAllocRecordsByProjectId(Long projectId) { + if (projectId == null) { + throw new ServiceException("项目ID不能为空"); + } + PcRiskProject query = new PcRiskProject(); + query.setProjectId(projectId); + List applications = pcRiskProjectMapper.selectPcRiskProjectList(query); + List result = new ArrayList<>(); + if (applications == null || applications.isEmpty()) { + return result; + } + for (PcRiskProject application : applications) { + PcRiskProjectAllocDetailVO vo = new PcRiskProjectAllocDetailVO(); + vo.setApplication(application); + List allocRecords = pcCameraAllocMapper == null + ? new ArrayList<>() + : pcCameraAllocMapper.selectAllocListByProjectId(application.getApplicationId()); + vo.setAllocRecords(allocRecords); + result.add(vo); + } + return result; + } + @Override @Transactional public int updateWorkTicketId(Long applicationId, Long workTicketId) { diff --git a/ruoyi-modules/aidmt-manage-ms/src/main/resources/mapper/PcRiskProjectMapper.xml b/ruoyi-modules/aidmt-manage-ms/src/main/resources/mapper/PcRiskProjectMapper.xml index b6280460..33049f72 100644 --- a/ruoyi-modules/aidmt-manage-ms/src/main/resources/mapper/PcRiskProjectMapper.xml +++ b/ruoyi-modules/aidmt-manage-ms/src/main/resources/mapper/PcRiskProjectMapper.xml @@ -250,6 +250,7 @@ left join sys_dept d on d.dept_id = u.dept_id and d.del_flag = '0' left join work_ticket wt on wt.ticket_id = r.work_ticket_id and wt.del_flag = '0' where r.del_flag='0' + and wp.approval_status = '1' and wp.project_name like concat('%', #{projectName}, '%') diff --git a/ruoyi-modules/aidmt-manage-ms/src/main/resources/mapper/WorkPlanMapper.xml b/ruoyi-modules/aidmt-manage-ms/src/main/resources/mapper/WorkPlanMapper.xml index 2e0f1409..7bc8f3bc 100644 --- a/ruoyi-modules/aidmt-manage-ms/src/main/resources/mapper/WorkPlanMapper.xml +++ b/ruoyi-modules/aidmt-manage-ms/src/main/resources/mapper/WorkPlanMapper.xml @@ -17,6 +17,7 @@ + @@ -45,9 +46,19 @@ + + + + + + + + + + @@ -201,9 +215,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{deptId} - + delete from sys_dept where dept_id = #{deptId} - \ No newline at end of file + diff --git a/ruoyi-modules/aidmt-system-ms/src/main/resources/mapper/system/SysIssuerProjectMapper.xml b/ruoyi-modules/aidmt-system-ms/src/main/resources/mapper/system/SysIssuerProjectMapper.xml new file mode 100644 index 00000000..e33a7a19 --- /dev/null +++ b/ruoyi-modules/aidmt-system-ms/src/main/resources/mapper/system/SysIssuerProjectMapper.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/sql/owner_access_audit_event_add_attachment_urls.sql b/sql/owner_access_audit_event_add_attachment_urls.sql new file mode 100644 index 00000000..5fe933be --- /dev/null +++ b/sql/owner_access_audit_event_add_attachment_urls.sql @@ -0,0 +1,4 @@ +-- 业主端-准入事件审计:新增附件URL字段(逗号分隔) +ALTER TABLE owner_access_audit_event +ADD COLUMN attachment_urls VARCHAR(2000) NULL COMMENT '附件URL(多个用逗号分隔)' AFTER page_notes; + diff --git a/sql/work_plan_add_property_completion_review_fields.sql b/sql/work_plan_add_property_completion_review_fields.sql new file mode 100644 index 00000000..73fa10ba --- /dev/null +++ b/sql/work_plan_add_property_completion_review_fields.sql @@ -0,0 +1,9 @@ +-- 为 work_plan 增加物业完工复核字段 +ALTER TABLE `work_plan` + ADD COLUMN `property_review_status` varchar(1) DEFAULT NULL COMMENT '物业完工复核状态:1-通过,2-驳回' AFTER `completion_review_remark`, + ADD COLUMN `property_work_content_completion` varchar(1) DEFAULT NULL COMMENT '作业内容完成度:1-100%完成,2-部分完成,3-未完成' AFTER `property_review_status`, + ADD COLUMN `property_site_cleaning_condition` varchar(1) DEFAULT NULL COMMENT '现场清理情况:1-符合要求,0-不符合' AFTER `property_work_content_completion`, + ADD COLUMN `property_review_photos` text COMMENT '物业完工复核现场照片URL,多个逗号分隔' AFTER `property_site_cleaning_condition`, + ADD COLUMN `property_review_comment` varchar(1000) DEFAULT NULL COMMENT '物业完工复核意见' AFTER `property_review_photos`, + ADD COLUMN `property_review_by` varchar(64) DEFAULT NULL COMMENT '物业完工复核人' AFTER `property_review_comment`, + ADD COLUMN `property_review_time` varchar(30) DEFAULT NULL COMMENT '物业完工复核时间' AFTER `property_review_by`; diff --git a/sql/work_ticket_add_review_fields.sql b/sql/work_ticket_add_review_fields.sql new file mode 100644 index 00000000..90e8b54b --- /dev/null +++ b/sql/work_ticket_add_review_fields.sql @@ -0,0 +1,13 @@ +-- 工作票审批审核要点确认字段 + +ALTER TABLE `work_ticket` +ADD COLUMN `review_necessity` char(1) DEFAULT NULL COMMENT '审核要点确认-施工作业必要性:0 不必要 1 必要' AFTER `review_comment`, +ADD COLUMN `review_feasibility` char(1) DEFAULT NULL COMMENT '审核要点确认-施工作业可行性:0 不可行 1 可行' AFTER `review_necessity`, +ADD COLUMN `review_completeness` varchar(500) DEFAULT NULL COMMENT '审核要点确认-票证内容完整性(JSON 数组:基础信息完整、风险描述清晰、安全措施完备、附件齐全)' AFTER `review_feasibility`, +ADD COLUMN `review_condition` char(1) DEFAULT NULL COMMENT '审核要点确认-施工条件确认:0 不符合 1 符合' AFTER `review_completeness`; + +ALTER TABLE `work_ticket_hazardous` +ADD COLUMN `review_necessity` char(1) DEFAULT NULL COMMENT '审核要点确认-施工作业必要性:0 不必要 1 必要' AFTER `review_comment`, +ADD COLUMN `review_feasibility` char(1) DEFAULT NULL COMMENT '审核要点确认-施工作业可行性:0 不可行 1 可行' AFTER `review_necessity`, +ADD COLUMN `review_completeness` varchar(500) DEFAULT NULL COMMENT '审核要点确认-票证内容完整性(JSON 数组:基础信息完整、风险描述清晰、安全措施完备、附件齐全)' AFTER `review_feasibility`, +ADD COLUMN `review_condition` char(1) DEFAULT NULL COMMENT '审核要点确认-施工条件确认:0 不符合 1 符合' AFTER `review_completeness`;