修改部分bug

This commit is contained in:
tangcy 2026-04-08 17:47:23 +08:00
parent e78bd59a1a
commit e227639e8a
25 changed files with 412 additions and 18 deletions

View File

@ -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())

View File

@ -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();

View File

@ -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);
}

View File

@ -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("物业完工复核处理失败");
}
}

View File

@ -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));
}
/**

View File

@ -53,6 +53,9 @@ public class WorkPlan extends BaseEntity {
@Schema(description = "作业负责人职位")
private String supervisorPosition;
@Schema(description = "施工负责人电话")
private String supervisorPhone;
@Schema(description = "作业班成员用户IDJSON数组存储用户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;

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
/**
* 审批工作票驳回

View File

@ -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("作业内容完成度必须为 1100%完成、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);
}
}

View File

@ -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);

View File

@ -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<PcRiskProjectAllocDetailVO> list = pcRiskProjectService.selectApplicationsWithAllocRecordsByProjectId(projectId);
return success(list);
}
}

View File

@ -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<PcCameraAlloc> allocRecords;
}

View File

@ -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<PcRiskProjectAllocDetailVO> selectApplicationsWithAllocRecordsByProjectId(Long projectId);
public List<PcRiskProject> selectProjectCompletionReviewList(PcRiskProject pcRiskProject);
@ -43,4 +52,4 @@ public interface IPcRiskProjectService {
*/
int updateWorkTicketId(Long applicationId, Long workTicketId);
}
}

View File

@ -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<PcRiskProjectAllocDetailVO> selectApplicationsWithAllocRecordsByProjectId(Long projectId) {
if (projectId == null) {
throw new ServiceException("项目ID不能为空");
}
PcRiskProject query = new PcRiskProject();
query.setProjectId(projectId);
List<PcRiskProject> applications = pcRiskProjectMapper.selectPcRiskProjectList(query);
List<PcRiskProjectAllocDetailVO> result = new ArrayList<>();
if (applications == null || applications.isEmpty()) {
return result;
}
for (PcRiskProject application : applications) {
PcRiskProjectAllocDetailVO vo = new PcRiskProjectAllocDetailVO();
vo.setApplication(application);
List<PcCameraAlloc> 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) {

View File

@ -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'
<if test="projectName != null and projectName != ''">
and wp.project_name like concat('%', #{projectName}, '%')
</if>

View File

@ -17,6 +17,7 @@
<result property="supervisorId" column="supervisor_id" />
<result property="supervisorName" column="supervisor_name" />
<result property="supervisorPosition" column="supervisor_position" />
<result property="supervisorPhone" column="supervisor_phone" />
<result property="sysUsers" column="team_members" />
<result property="constructionUnitId" column="construction_unit_id" />
<result property="constructionUnitName" column="construction_unit_name" />
@ -45,9 +46,19 @@
<result property="accessPermitValidity" column="access_permit_validity" />
<result property="accessPermitStatus" column="access_permit_status" />
<result property="propertyReviewStatus" column="property_review_status" />
<result property="propertyWorkContentCompletion" column="property_work_content_completion" />
<result property="propertySiteCleaningCondition" column="property_site_cleaning_condition" />
<result property="propertyReviewPhotos" column="property_review_photos" />
<result property="propertyReviewComment" column="property_review_comment" />
<result property="propertyReviewBy" column="property_review_by" />
<result property="propertyReviewTime" column="property_review_time" />
<result property="workPeriod" column="work_period" />
<result property="aiIssueCount" column="ai_issue_count" />
<result property="completionReviewResult" column="completion_review_result" />
<result property="completionReviewPhotos" column="completion_review_photos" />
<result property="completionReviewBy" column="completion_review_by" />
<result property="completionReviewTime" column="completion_review_time" />
<result property="completionReviewRemark" column="completion_review_remark" />
</resultMap>
<select id="selectWorkPlanById" parameterType="Long" resultMap="WorkPlanResult">
@ -213,6 +224,7 @@
wp.supervisor_id,
wp.supervisor_name,
wp.supervisor_position,
su.phonenumber as supervisor_phone,
wp.team_members,
wp.construction_unit_id,
wp.construction_unit_name,
@ -227,6 +239,10 @@
wp.approval_time,
wp.approval_comment,
wp.completion_review_result,
wp.completion_review_photos,
wp.completion_review_by,
wp.completion_review_time,
wp.completion_review_remark,
wp.current_progress,
wp.remark,
wp.del_flag,
@ -234,14 +250,21 @@
wp.create_time,
wp.update_by,
wp.update_time,
wp.property_review_status,
wp.property_work_content_completion,
wp.property_site_cleaning_condition,
wp.property_review_photos,
wp.property_review_comment,
wp.property_review_by,
wp.property_review_time,
wt_normal.status as work_ticket_status,
wt_hazardous.status as hazardous_work_ticket_status,
wt_normal.reviewer as issuer,
ap.permit_number as access_permit_number,
concat(ap.validity_start_time, ' 至 ', ap.validity_end_time) as access_permit_validity,
ap.status as access_permit_status,
'' as property_review_status
ap.status as access_permit_status
from work_plan wp
left join sys_user su on su.user_id = wp.supervisor_id and su.del_flag = '0'
left join (
select project_id, status, ticket_type, reviewer,
row_number() over (partition by project_id order by create_time desc) as rn
@ -315,5 +338,31 @@
where project_id = #{projectId}
</update>
<!-- 更新物业完工复核信息(提交通过/驳回) -->
<update id="updatePropertyCompletionReview" parameterType="com.admin.contractor.domain.dto.WorkPlanPropertyCompletionReviewDTO">
update work_plan
<set>
property_review_status = #{propertyReviewStatus},
property_work_content_completion = #{workContentCompletion},
property_site_cleaning_condition = #{siteCleaningCondition},
property_review_photos = #{propertyReviewPhotos},
<if test="propertyReviewComment != null">property_review_comment = #{propertyReviewComment},</if>
property_review_by = #{propertyReviewBy},
property_review_time = #{propertyReviewTime},
<choose>
<when test='propertyReviewStatus == "1"'>
project_status = '3',
implementation_status = '4',
</when>
<otherwise>
project_status = '2',
implementation_status = '2',
</otherwise>
</choose>
update_time = now()
</set>
where project_id = #{projectId}
</update>
</mapper>

View File

@ -35,6 +35,7 @@ import com.ruoyi.system.api.domain.SysDept;
import com.ruoyi.system.api.domain.SysRole;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.model.LoginUser;
import com.ruoyi.system.mapper.SysIssuerProjectMapper;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.system.service.ISysPermissionService;
@ -76,6 +77,9 @@ public class SysUserController extends BaseController
@Autowired
private TokenService tokenService;
@Autowired(required = false)
private SysIssuerProjectMapper issuerProjectMapper;
/**
* 获取用户列表
*/
@ -131,6 +135,15 @@ public class SysUserController extends BaseController
return R.fail("用户名或密码错误");
}
// 角色集合
if (issuerProjectMapper != null)
{
// 回填签发人管理项目范围
sysUser.setIssuerProjectScope(issuerProjectMapper.selectIssuerProjectScopeByUserId(sysUser.getUserId()));
}
if (issuerProjectMapper != null)
{
sysUser.setIssuerProjectScope(issuerProjectMapper.selectIssuerProjectScopeByUserId(sysUser.getUserId()));
}
Set<String> roles = permissionService.getRolePermission(sysUser);
// 权限集合
Set<String> permissions = permissionService.getMenuPermission(sysUser);
@ -181,7 +194,16 @@ public class SysUserController extends BaseController
{
LoginUser loginUser = SecurityUtils.getLoginUser();
SysUser user = loginUser.getSysUser();
if (issuerProjectMapper != null)
{
// 回填签发人管理项目范围
user.setIssuerProjectScope(issuerProjectMapper.selectIssuerProjectScopeByUserId(user.getUserId()));
}
// 角色集合
if (issuerProjectMapper != null)
{
user.setIssuerProjectScope(issuerProjectMapper.selectIssuerProjectScopeByUserId(user.getUserId()));
}
Set<String> roles = permissionService.getRolePermission(user);
// 权限集合
Set<String> permissions = permissionService.getMenuPermission(user);

View File

@ -0,0 +1,17 @@
package com.ruoyi.system.mapper;
import org.apache.ibatis.annotations.Param;
/**
* 签发人管理项目范围查询
*/
public interface SysIssuerProjectMapper
{
/**
* 根据用户ID查询签发人管理项目范围逗号分隔项目名
*
* @param userId 用户ID
* @return 项目范围
*/
String selectIssuerProjectScopeByUserId(@Param("userId") Long userId);
}

View File

@ -26,6 +26,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="auditOpinion" column="audit_opinion" />
<result property="auditBy" column="audit_by" />
<result property="auditTime" column="audit_time" />
<result property="projectCount" column="project_count" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
@ -33,10 +34,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectDeptVo">
select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.dept_type, d.region_id, d.credit_code, d.address, d.qual_file_url, d.remark, d.del_flag, d.audit_status, d.audit_opinion, d.audit_by, d.audit_time, d.create_by, d.create_time, d.update_by, d.update_time,
select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.dept_type, d.region_id, d.credit_code, d.address, d.qual_file_url, d.remark, d.del_flag, d.audit_status, d.audit_opinion, d.audit_by, d.audit_time, ifnull(pc.project_count, 0) as project_count, d.create_by, d.create_time, d.update_by, d.update_time,
p.dept_name as parent_name
from sys_dept d
left join sys_dept p on d.parent_id = p.dept_id
left join (
select t.dept_id, count(distinct t.project_id) as project_count
from (
select wp.construction_unit_id as dept_id, wp.project_id
from work_plan wp
where wp.del_flag = '0' and wp.construction_unit_id is not null
union all
select wp.supervision_unit_id as dept_id, wp.project_id
from work_plan wp
where wp.del_flag = '0' and wp.supervision_unit_id is not null
) t
group by t.dept_id
) pc on pc.dept_id = d.dept_id
</sql>
<select id="selectDeptList" parameterType="com.ruoyi.system.api.domain.SysDept" resultMap="SysDeptResult">
@ -201,9 +215,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{deptId}
</foreach>
</update>
<delete id="deleteDeptById" parameterType="Long">
delete from sys_dept where dept_id = #{deptId}
</delete>
</mapper>
</mapper>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.SysIssuerProjectMapper">
<select id="selectIssuerProjectScopeByUserId" resultType="java.lang.String">
select group_concat(wp.project_name order by wp.project_id separator '')
from owner_issuer o
left join owner_issuer_project oip on oip.issuer_id = o.id
left join work_plan wp on wp.project_id = oip.project_id and wp.del_flag = '0'
where o.user_id = #{userId}
and (o.del_flag = '0' or o.del_flag is null)
</select>
</mapper>

View File

@ -0,0 +1,4 @@
-- 业主端-准入事件审计新增附件URL字段逗号分隔
ALTER TABLE owner_access_audit_event
ADD COLUMN attachment_urls VARCHAR(2000) NULL COMMENT '附件URL多个用逗号分隔' AFTER page_notes;

View File

@ -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`;

View File

@ -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`;