liujie
2025-06-16 5af3d2fa829a7a454c8ddbb6ffb2a7685ceb9c77
springcloud_k8s_panzhihuazhihuishequ/service_westcommittee/src/main/java/com/panzhihua/westcommittee/service/impl/ComplaintServiceImpl.java
@@ -27,6 +27,7 @@
import com.panzhihua.westcommittee.model.query.ComplaintQuery;
import com.panzhihua.westcommittee.model.vo.*;
import com.panzhihua.westcommittee.service.*;
import com.panzhihua.westcommittee.utils.AliSmsUtil;
import com.panzhihua.westcommittee.warpper.*;
import jodd.util.StringUtil;
import lombok.RequiredArgsConstructor;
@@ -78,6 +79,7 @@
    private final IPartyMemberService partyMemberService;
    private final IdentityInformationService identityInformationService;
    private final IDepartmentService departmentService;
    private final RedisUtils redisUtils;
    @Override
@@ -113,12 +115,6 @@
        if (identity == 2) {
            accountLevel = systemUser.getAccountLevel();
            switch (accountLevel) {
                case 1:
                    //市级
                    complaint.setCityCode(510400);
                    complaint.setReportUserName(systemUser.getName());
                    complaint.setReportUserPhone(systemUser.getPhone());
                    break;
                case 2:
                    //区县级
                    complaint.setCityCode(510400);
@@ -175,15 +171,25 @@
//            }
        } else {
            PartyMember partyMember = partyMemberService.getPartyMemberByPhone(loginUserInfoVO.getPhone());
            //党员
            complaint.setCityCode(510400);
            complaint.setDistrictsCode(Integer.valueOf(partyMember.getDistrictsCode()));
            complaint.setStreetId(Long.valueOf(partyMember.getStreetId()));
            complaint.setCommunityId(partyMember.getCommunityId());
            complaint.setPartyMemberId(partyMember.getId());
            complaint.setReportUserName(partyMember.getName());
            complaint.setReportUserPhone(partyMember.getPhone());
            complaint.setSuperiorId(partyMember.getCommunityId());
            if(partyMember!=null){
                //党员
                complaint.setDistrictsCode(Integer.valueOf(partyMember.getDistrictsCode()));
                complaint.setStreetId(Long.valueOf(partyMember.getStreetId()));
                complaint.setCommunityId(partyMember.getCommunityId());
                complaint.setPartyMemberId(partyMember.getId());
                complaint.setReportUserName(partyMember.getName());
                complaint.setReportUserPhone(partyMember.getPhone());
                complaint.setSuperiorId(partyMember.getCommunityId());
            }else {
                complaint.setDistrictsCode(Integer.valueOf(loginUserInfoVO.getAreaCode()));
                complaint.setStreetId(loginUserInfoVO.getStreetId());
                complaint.setCommunityId(loginUserInfoVO.getCommunityId());
                complaint.setReportUserName(loginUserInfoVO.getName());
                complaint.setReportUserPhone(loginUserInfoVO.getPhone());
                complaint.setSuperiorId(loginUserInfoVO.getCommunityId());
            }
            // 添加处理人
//            SystemUser one = systemUserService.getOne(new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getAccountLevel, 4).eq(SystemUser::getIsDeptAdmin, 1).eq(SystemUser::getCommunityId, partyMember.getCommunityId()).ne(SystemUser::getStatus, 3));
@@ -211,6 +217,7 @@
            throw new ServiceException("工单事项未配置,请联系管理员");
        }
        complaint.setNowLevelTime(new Date());
        complaint.setNowLevelSms(0);
        // 保存诉求记录
        save(complaint);
    }
@@ -282,7 +289,11 @@
            systemUser = null;
            //党员
            PartyMember partyMember = partyMemberService.getPartyMemberByPhone(loginUserInfoVO.getPhone());
            targetId = partyMember.getCommunityId();
            if(partyMember!=null){
                targetId = partyMember.getCommunityId();
            }else {
                targetId = loginUserInfoVO.getCommunityId();
            }
        }
        //查询对应诉求
        //page = baseMapper.selectComplaintPage(page, query, targetId, isSuperior);
@@ -295,15 +306,16 @@
                // 是管理员 看所有的
                page = baseMapper.selectComplaintPage3(page, query, accountLevel, targetId);
            } else {
                // 不是管理员 看到指派给我的单位的诉求
                page = baseMapper.selectComplaintPage4(page, query, systemUser.getOneDepartmentId());
            }
        } else if (accountLevel == 3) {
            // 街道 1
            if (systemUser.getSystemRoleId() == 1) {
                // 获取这个街道所管的社区id
                List<Long> communityIds = comActService.list(new LambdaQueryWrapper<ComAct>().eq(ComAct::getStreetId,systemUser.getStreetId())).stream().map(ComAct::getCommunityId).collect(Collectors.toList());
                // 是管理员 可以看到下派来的  也可以看到上派待审核的
                page = baseMapper.selectComplaintPage5(page, query, systemUser.getStreetId(), null);
                page = baseMapper.selectComplaintPage5(page, query, systemUser.getStreetId(), communityIds);
            } else {
                // 不是管理员 看指派给我的
                page = baseMapper.selectComplaintPage4(page, query, systemUser.getOneDepartmentId());
@@ -320,7 +332,58 @@
            }
        }
        Date date = new Date();
        WorkOrderItemConfig config = workOrderItemConfigService.getById(1);
        for (ComplaintVO record : page.getRecords()) {
            // 处理页面颜色展示和倒计时
            Date nowLevelTime = record.getNowLevelTime();
            if(record.getNowLevel()==2){
                Integer HandlingTime = config.getDistrictHandlingTime();
                Integer DeadlineReminder = config.getDistrictDeadlineReminder();
                // 判断是超时 还是  临期
                if (nowLevelTime.getTime()  + HandlingTime * 24 * 60 * 60 * 1000< date.getTime()) {
                    record.setRemindStatus(2);
                }else if (nowLevelTime.getTime() + DeadlineReminder * 24 * 60 * 60 * 1000 < date.getTime()) {
                    record.setRemindStatus(1);
                }
                long l = nowLevelTime.getTime() + HandlingTime * 24 * 60 * 60 * 1000 - date.getTime();
                double days = (double) l / (24 * 60 * 60 * 1000); // 毫秒转天数
                BigDecimal result = new BigDecimal(days).setScale(1, RoundingMode.HALF_UP); // 保留1位小数
                record.setRemindTime(result.doubleValue());
            }else if(record.getNowLevel()==3){
                Integer HandlingTime = config.getStreetHandlingTime();
                Integer DeadlineReminder = config.getStreetDeadlineReminder();
                // 判断是超时 还是  临期
                if (nowLevelTime.getTime()  + HandlingTime * 24 * 60 * 60 * 1000< date.getTime()) {
                    record.setRemindStatus(2);
                }else if (nowLevelTime.getTime() + DeadlineReminder * 24 * 60 * 60 * 1000 < date.getTime()) {
                    record.setRemindStatus(1);
                }
                long l = nowLevelTime.getTime() + HandlingTime * 24 * 60 * 60 * 1000 - date.getTime();
                double days = (double) l / (24 * 60 * 60 * 1000); // 毫秒转天数
                BigDecimal result = new BigDecimal(days).setScale(1, RoundingMode.HALF_UP); // 保留1位小数
                record.setRemindTime(result.doubleValue());
            } else if(record.getNowLevel()==4){
                Integer HandlingTime = config.getCommunityHandlingTime();
                Integer DeadlineReminder = config.getCommunityDeadlineReminder();
                // 判断是超时 还是  临期
                if (nowLevelTime.getTime()  + HandlingTime * 24 * 60 * 60 * 1000< date.getTime()) {
                    record.setRemindStatus(2);
                }else if (nowLevelTime.getTime() + DeadlineReminder * 24 * 60 * 60 * 1000 < date.getTime()) {
                    record.setRemindStatus(1);
                }
                long l = nowLevelTime.getTime() + HandlingTime * 24 * 60 * 60 * 1000 - date.getTime();
                double days = (double) l / (24 * 60 * 60 * 1000); // 毫秒转天数
                BigDecimal result = new BigDecimal(days).setScale(1, RoundingMode.HALF_UP); // 保留1位小数
                record.setRemindTime(result.doubleValue());
            }
            int count = complaintCommentService.count(new LambdaQueryWrapper<ComplaintComment>().eq(ComplaintComment::getComplaintId, record.getId()));
            if (count > 0) {
                record.setEvaluateButtonStatus(1);
@@ -614,7 +677,12 @@
        } else {
            //党员
            PartyMember partyMember = partyMemberService.getPartyMemberByPhone(loginUserInfoVO.getPhone());
            targetId = partyMember.getId().toString();
            if(partyMember!=null){
                targetId = partyMember.getId().toString();
            }else {
                targetId =loginUserInfoVO.getUserId().toString();
            }
        }
        // 更新状态 此时status是表中的状态 未做变动
        // 如果是区级
@@ -631,7 +699,7 @@
                    }
                }
                if (detail.getFirstStatus() == 0) {
                    detail.setStatus(-2);
                    detail.setStatus(5);
                }
            }
@@ -646,7 +714,7 @@
                    }
                }
                if (detail.getFirstStatus() == 0) {
                    detail.setStatus(-2);
                    detail.setStatus(5);
                }
            }
            if (systemUser.getAccountLevel() == 4) {
@@ -660,14 +728,14 @@
                    }
                }
                if (detail.getFirstStatus() == 0) {
                    detail.setStatus(-2);
                    detail.setStatus(5);
                }
            }
        } else {
            if (detail.getFirstStatus() == 1 && detail.getStatus() != 3  && detail.getStatus() != 8) {
                detail.setStatus(0);
            } else if(detail.getFirstStatus()==0){
                detail.setStatus(-2);
                detail.setStatus(5);
            }else if(detail.getFirstStatus() == 1 && detail.getStatus() == 3  ){
                detail.setStatus(3);
            }else if(detail.getFirstStatus() == 1 && detail.getStatus() == 8){
@@ -676,8 +744,8 @@
        }
        if (detail.getStatus().equals(0)) {
            List<ComplaintFlow> list = complaintFlowService.lambdaQuery().eq(ComplaintFlow::getComplaintId, id).orderByAsc(ComplaintFlow::getSort).list();
        if (true) {
            List<ComplaintFlow> list = complaintFlowService.lambdaQuery().eq(ComplaintFlow::getComplaintId, id).orderByDesc(ComplaintFlow::getCreateTime).orderByAsc(ComplaintFlow::getType).list();
            detail.setComplaintFlows(list);
        }
        //查询办理进度
@@ -724,14 +792,14 @@
        if (detail.getFirstStatus() == 1 && detail.getStatus() != 3  && detail.getStatus() != 8) {
            detail.setStatus(0);
        } else if(detail.getFirstStatus()==0){
            detail.setStatus(-2);
            detail.setStatus(5);
        }else if(detail.getFirstStatus() == 1 && detail.getStatus() == 3  ){
            detail.setStatus(3);
        }else if(detail.getFirstStatus() == 1 && detail.getStatus() == 8){
            detail.setStatus(8);
        }
        List<ComplaintFlow> list = complaintFlowService.lambdaQuery().eq(ComplaintFlow::getComplaintId, id).orderByAsc(ComplaintFlow::getSort).list();
        List<ComplaintFlow> list = complaintFlowService.lambdaQuery().eq(ComplaintFlow::getComplaintId, id).orderByDesc(ComplaintFlow::getCreateTime).orderByAsc(ComplaintFlow::getType).list();
        detail.setComplaintFlows(list);
        //查询办理进度
        List<ComplaintProgress> list1 = complaintProgressService.lambdaQuery().eq(ComplaintProgress::getComplaintId, id)
@@ -824,6 +892,16 @@
        double handlingDay = new BigDecimal(l).divide(new BigDecimal("24"), 2, RoundingMode.HALF_UP).doubleValue();
        complaint.setHandlingDay(handlingDay);
        this.updateById(complaint);
        if(dto.getStatus()==3){
            // 发送短信
            Long createBy = complaint.getCreateBy();
            String phone = systemUserService.getCreateByIdPhone(createBy);
            if(StringUtils.isNotEmpty(phone)){
                AliSmsUtil.sendSuccessMessage(phone);
            }
        }
    }
    /**
@@ -935,6 +1013,7 @@
        complaint.setLastLevel(nowLevel + 1);
        complaint.setAssignStatus(0);
        complaint.setNowLevelTime(new Date());
        complaint.setNowLevelSms(0);
        updateById(complaint);
        // 标记最新
@@ -1080,6 +1159,7 @@
        complaint.setNowLevel(nowLevel);
        complaint.setLastLevel(nowLevel);
        complaint.setNowLevelTime(new Date());
        complaint.setNowLevelSms(0);
        this.updateById(complaint);
        complaintAuditRecord.setSuperiorId(superiorId);
@@ -1145,6 +1225,9 @@
            complaintAuditRecord2.setReportType(complaintAuditRecord.getReporterLevel());
            complaintFlowService.createFlow(complaintAuditRecord2, 0, loginUserInfoVO.getUserId());
            // 通过修改状态  已经修改superiorId  和层级  不需要修改 superiorId
            Complaint complaint = this.getById(complaintReporAuditDTO.getId());
            complaint.setAssignPersonId(complaintReporAuditDTO.getDeptId());
@@ -1153,8 +1236,25 @@
            complaint.setLastLevel(complaint.getNowLevel());
            complaint.setRemark(complaintReporAuditDTO.getRemark());
            complaint.setNowLevelTime(new Date());
            this.updateById(complaint);
            complaint.setNowLevelSms(0);
            // 分配流转
            ComplaintFlow complaintFlow = new ComplaintFlow();
            complaintFlow.setComplaintId(complaintReporAuditDTO.getId());
            complaintFlow.setLevel(complaintAuditRecord.getReporterLevel());
            Department byId = departmentService.getById(complaintReporAuditDTO.getDeptId());
            complaintFlow.setName(byId.getName());
            complaintFlow.setType(1);
            complaintFlow.setCreateTime(new Date(System.currentTimeMillis()+1000));
            complaintFlowService.save(complaintFlow);
            this.updateById(complaint);
            List<SystemUser> list = systemUserService.list(new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getOneDepartmentId, complaintReporAuditDTO.getDeptId()).eq(SystemUser::getSystemRoleId, 1).eq(SystemUser::getStatus, 1));
            if(!list.isEmpty()){
                List<String> phoneList = list.stream().map(SystemUser::getPhone).collect(Collectors.toList());
                AliSmsUtil.sendAssignMessageAdmin(phoneList,complaint.getSerialNumber());
            }
        } else {
            complaintAuditRecord.setRejectReason(complaintReporAuditDTO.getRejectReason());
@@ -1169,6 +1269,7 @@
            complaint.setSuperiorId(complaint.getLastSuperiorId());
            complaint.setNowLevel(complaint.getLastLevel());
            complaint.setNowLevelTime(new Date());
            complaint.setNowLevelSms(0);
            this.updateById(complaint);
        }
@@ -2013,7 +2114,25 @@
            complaint.setAssignStatus(1);
            complaint.setRemark(remark);
            complaint.setNowLevelTime(new Date());
            complaint.setNowLevelSms(0);
            baseMapper.updateById(complaint);
            Department department = departmentService.getById(userId);
            ComplaintFlow complaintFlow = new ComplaintFlow();
            complaintFlow.setComplaintId(complainId);
            complaintFlow.setLevel(complaint.getNowLevel());
            complaintFlow.setName(department.getName());
            complaintFlow.setCreateTime(new Date());
            complaintFlow.setType(1);
            complaintFlowService.save(complaintFlow);
            List<SystemUser> list = systemUserService.list(new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getOneDepartmentId, userId).eq(SystemUser::getSystemRoleId, 1).eq(SystemUser::getStatus, 1));
            if(!list.isEmpty()){
                List<String> phoneList = list.stream().map(SystemUser::getPhone).collect(Collectors.toList());
                AliSmsUtil.sendAssignMessageAdmin(phoneList,complaint.getSerialNumber());
            }
        } else {
            throw new ServiceException("你没有分配权限");
        }
@@ -2027,15 +2146,13 @@
        // 已分派了的
        Page<ComplaintVO> page = new Page<>(query.getPageNum(), query.getPageSize());
        String address = this.baseMapper.getHouseAddressFromId(query.getHouseId());
        query.setAddress(address);
        page = baseMapper.pageScreenList(page, query);
        page.getRecords().forEach(detail -> {
            if (detail.getFirstStatus() == 1 && detail.getStatus() != 3  && detail.getStatus() != 8) {
                detail.setStatus(0);
            } else if(detail.getFirstStatus()==0){
                detail.setStatus(-2);
                detail.setStatus(5);
            }else if(detail.getFirstStatus() == 1 && detail.getStatus() == 3  ){
                detail.setStatus(3);
            }else if(detail.getFirstStatus() == 1 && detail.getStatus() == 8){