张天森
2022-10-17 e63b5ff9c4b734d1c6f988d341c99a2216f0564d
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComEventServiceImpl.java
@@ -1,8 +1,11 @@
package com.panzhihua.service_community.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.generator.SnowflakeGenerator;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -14,12 +17,14 @@
import com.panzhihua.common.model.dtos.community.sanshuo.IndexDateDTO;
import com.panzhihua.common.model.vos.LoginUserInfoVO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.community.switchs.CommunitySwitchAllAppletsVO;
import com.panzhihua.common.model.vos.sanshuo.*;
import com.panzhihua.common.service.user.UserService;
import com.panzhihua.common.utlis.CopyUtil;
import com.panzhihua.common.utlis.DateUtils;
import com.panzhihua.common.utlis.Snowflake;
import com.panzhihua.common.utlis.StringUtils;
import com.panzhihua.service_community.api.ComSanShuoEventTransferRecordController;
import com.panzhihua.service_community.dao.ComActDAO;
import com.panzhihua.service_community.dao.ComEventMapper;
import com.panzhihua.service_community.dao.ComStreetDAO;
@@ -35,6 +40,7 @@
import javax.annotation.Resource;
import java.util.*;
import static java.util.Objects.isNull;
import static java.util.Objects.nonNull;
/**
@@ -78,16 +84,28 @@
    @Override
    public R pageByComEvent(ComEvent comEvent, Page pagination,LoginUserInfoVO loginUserInfoVO) {
        log.info("=================当前登陆的用户信息,用户类型"+loginUserInfoVO.getType()+"社区id"+loginUserInfoVO.getCommunityId());
        Boolean isExpertCheck=false;
        Long expertId=null;
        Boolean isStretAccount = isStreetAccount(loginUserInfoVO);
        if (nonNull(comEvent.getUserType())){
            if (comEvent.getUserType().equals(1)){
                //个人账号权限
                comEvent.setRequestUserId(loginUserInfoVO.getUserId());
            }else if (comEvent.getUserType().equals(2) || loginUserInfoVO.getType().equals(11)){
                //专家账号权限
                ComSanshuoExpert expert = comSanShuoExpertService.getOne(new QueryWrapper<ComSanshuoExpert>().lambda().eq(ComSanshuoExpert::getPhone, loginUserInfoVO.getPhone()));
            }else if (comEvent.getUserType().equals(2) || loginUserInfoVO.getType().equals(13) || loginUserInfoVO.getType().equals(11)){
                ComSanshuoExpert expert=new ComSanshuoExpert();
                //专家账号权限(小程序和后台)
                if (nonNull(loginUserInfoVO.getPhone())){
                    expert = comSanShuoExpertService.getOne(new QueryWrapper<ComSanshuoExpert>().lambda().eq(ComSanshuoExpert::getPhone, loginUserInfoVO.getPhone()));
                }else{
                    //账号获取
                    expert = comSanShuoExpertService.getOne(new QueryWrapper<ComSanshuoExpert>().lambda().eq(ComSanshuoExpert::getAccount, loginUserInfoVO.getAccount()));
                }
                comEvent.setUserType(2);
                if (nonNull(expert)){
                    comEvent.setSpecialistId(expert.getId());
                    isExpertCheck=true;
                    expertId=expert.getId();
                }
            }else if (loginUserInfoVO.getType().equals(12)){
                //行业分中心权限
@@ -101,9 +119,31 @@
                //社区后台权限
                comEvent.setUserType(4);
                comEvent.setCommunityId(loginUserInfoVO.getCommunityId());
            }else if (isStretAccount){
                //街道权限,查看街道范围下的所有社区事件
                //获取街道下属社区id
                List<Long> cids = comActDAO.selectCommunityByStreetId(loginUserInfoVO.getStreetId());
                comEvent.setUserType(5);
                comEvent.setCommunityIds(cids);
            }
        }
        IPage<ComEvent> list = baseMapper.pageByComEvent(comEvent, pagination);
//        if (nonNull(loginUserInfoVO.getAccount())){
//            if (loginUserInfoVO.getAccount().equals("admin")){
//                comEvent.setUserType(null);
//            }
//        }
        IPage<ComEvent> list=null;
        log.info("=====================当前的userType"+comEvent.getUserType());
        log.info("=====================是否专家账号查看"+isExpertCheck);
        //是否为专家查看自己发布的事件
        if (isExpertCheck && comEvent.getUserType()!=1){
            if (nonNull(comEventMapper.listEventIds(expertId))){
                list = comEventMapper.pageByComEventExpert(comEventMapper.listEventIds(expertId), comEvent, pagination);
            }
        }else{
            list = baseMapper.pageByComEvent(comEvent, pagination);
        }
        if (list.getRecords().size() < 1) {
            return R.ok(Collections.emptyList());
        }
@@ -111,17 +151,313 @@
            List<ComEventResource> resourceList = comEventResourceService.list(new QueryWrapper<ComEventResource>().lambda().eq(ComEventResource::getRefId, comEvent1.getId()));
            List<ComEventRequestImageVO> comEventRequestImageVO = CopyUtil.deepCopyListObject(resourceList, ComEventRequestImageVO.class);
            comEvent1.setImages(comEventRequestImageVO);
//            if (nonNull(userService.getUserInfoByUserId(comEvent1.getRequestUserId().toString()).getData().getImageUrl())){
//                comEvent1.setIcon(userService.getUserInfoByUserId(comEvent1.getRequestUserId().toString()).getData().getImageUrl());
//            }
            if (nonNull(userService.getUserInfoByUserId(comEvent1.getRequestUserId().toString()).getData().getImageUrl())){
                comEvent1.setIcon(userService.getUserInfoByUserId(comEvent1.getRequestUserId().toString()).getData().getImageUrl());
            }
            ComMediateType category = commediateTypeService.getById(comEvent1.getEventCategory());
            comEvent1.setEventCategoryName(category.getName());
            ComSanshuoExpert byId = comSanShuoExpertService.getById(comEvent1.getSpecialistId());
            if (nonNull(byId)){
                comEvent1.setExpertAvatar(byId.getAvatar());
            comEvent1.setHasPerm(hasPermission(comEvent1,loginUserInfoVO ));
            if (!comEvent.getUserType().equals(1)){
                this.accountMenu(comEvent1,comEvent.getUserType(),loginUserInfoVO,isStretAccount);
            }
        });
        return R.ok(list);
    }
    /**
     * 当前账号对事件的操作权限
     * 1有权限 0无权限
     * 1、用户提交调解申请后,调解专家状态为待受理,可操作受理、查看,专家所在部门状态为待受理,可操作受理(帮专家进行受理处理)、查看、删除,
     * 所在部门上级部门状态为待受理,仅可查看、删除;ok
     * 2、专家拒绝受理后,专家看不到该调解申请,所在单位状态变为待分配,可操作分配、调解、查看、删除,所在单位的上级单位状态变为待分配,仅可查看、删除; ok
     * 3、专家受理后,专家状态变为调解中,可操作调解、查看,专家所在部门状态变为调解中,可操作调解、查看、删除,专家做在单位的上级单位状态变为调解中,仅可查看、删除;
     * 4、专家调解调解完成未上报上级,专家状态变为已完成、可操作归档、查看,专家所在部门状态变为已完成,可操作归档、查看,专家所在部门的上级单位状态变为已完成,
     * 可查看、删除;
     * 5、专家所在部门调解完成未上报上级,专家状态变为已完成、可操作归档、查看,专家所在部门状态变为已完成,可操作归档、查看,专家所在部门的上级单位状态变为已完成,
     * 可查看、删除;
     * 6、专家调解完成上报上级,专家状态变为已完成、可操作归档、查看,专家所在部门状态变为待分配,可操作分配专家、调解、查看、删除,专家所在部门的上级单位状态变为调解中,可查看、删除;
     * 7、专家所在部门调解完成上报上级,专家状态变为已完成、可操作归档、查看,专家所在部门状态变为已完成,可操作归档、查看、删除,专家所在部门的上级单位状态变为待分配,可分配专家、查看、删除,
     * 上上级单位状态变为调解中,可查看、删除;
     * 8、专家调解/专家所在部门调解未完成,专家状态变为调解中,可操作调解、查看,专家所在部门状态变为调解中,可操作更换专家、调解、查看、删除,专家所在部门的上级单位状态变为调解中,可查看、删除;
     * 9、专家所在部门分配给专家后,专家状态变为待受理,可操作受理、查看,专家所在部门状态变为待受理,可操作受理(帮专家进行受理处理)、查看、删除,专家所在部门的上级部门状态变为待受理,
     * 仅可查看、删除;
     * 10、专家所在部门更换专家,原专家状态已完成,专家所在部门状态不变,专家所在部门的上级单位状态不变;
     * */
    public void accountMenu(ComEvent comEvent,Integer userType,LoginUserInfoVO loginUserInfoVO,Boolean isStreet){
        //四个账号级别
        Boolean isAdmin=false;
        if (isNull(userType)){
            isAdmin=true;
        }
        comEvent.setDelete(1);
        comEvent.setArchive(1);
        comEvent.setSolve(1);
        comEvent.setConciliation(1);
        comEvent.setDistribution(1);
        comEvent.setChangeExpert(1);
        if (userType.equals(2)){
            //专家后台权限,根据事件的流转信息决定专家对此事件的操作权限
            //细分到事件的每个状态和流转情况
            ComSanshuoExpert expert=new ComSanshuoExpert();
            comEvent.setDistribution(0);
            comEvent.setChangeExpert(0);
            comEvent.setDelete(0);
            if (nonNull(loginUserInfoVO.getPhone())){
                expert = comSanShuoExpertService.getOne(new QueryWrapper<ComSanshuoExpert>().lambda().eq(ComSanshuoExpert::getPhone, loginUserInfoVO.getPhone()));
            }else{
                //账号获取
                expert = comSanShuoExpertService.getOne(new QueryWrapper<ComSanshuoExpert>().lambda().eq(ComSanshuoExpert::getAccount, loginUserInfoVO.getAccount()));
            }
            if (!comEvent.getSpecialistId().equals(expert.getId()) || !comEvent.getCurrentProcessType().equals(5)){
                //已经上报或者重新分配专家,只能查看
                comEvent.setConciliation(0);
                //comEvent.setArchive(0);
                comEvent.setSolve(0);
                return;
            }//未上报,根据状态决定权限
            if (comEvent.getEventProcessStatus().equals(1) || comEvent.getEventProcessStatus().equals(2)){
                //待受理和待验证状态,仅有查看和受理权限,可能为用户选择该专家或上级单位分配给该专家
                //关闭调解和归档
                comEvent.setArchive(0);
                comEvent.setConciliation(0);
            } else if (comEvent.getEventProcessStatus().equals(5)){
                //调解中,可以查看,调解
                comEvent.setArchive(0);
                comEvent.setSolve(0);
            }else if (comEvent.getEventProcessStatus().equals(3)){
                //重新分配给该专家的事件,可以进行受理
               // comEvent.setSolve(0);
                comEvent.setConciliation(0);
                comEvent.setArchive(0);
            } else if (comEvent.getEventProcessStatus().equals(6)){
                //调解完成,可以归档,查看
                comEvent.setSolve(0);
                comEvent.setConciliation(0);
            }
        }else if (userType.equals(4)){
            //社区后台权限
            //如果未上报到街道,当前事件权限和专家一样
            if (comEvent.getCurrentProcessType().equals(5)){
                //根据事件状态决定权限
                if (comEvent.getEventProcessStatus().equals(1) || comEvent.getEventProcessStatus().equals(2)){
                    //待受理和待验证状态,可以受理,分配专家
                    //关闭调解和归档
                    comEvent.setArchive(0);
                    comEvent.setConciliation(0);
                    comEvent.setChangeExpert(0);
                } else if (comEvent.getEventProcessStatus().equals(5)){
                    //调解中,可以查看,调解,更换专家,删除
                    comEvent.setDistribution(0);
                    comEvent.setSolve(0);
                    comEvent.setArchive(0);
                } else if (comEvent.getEventProcessStatus().equals(6) && comEvent.getEventSucceed().equals(2)){
                    //调解完成,可以归档,查看
                    comEvent.setSolve(0);
                    comEvent.setDistribution(0);
                    comEvent.setChangeExpert(0);
                    comEvent.setConciliation(0);
                }
            }else if (comEvent.getCurrentProcessType().equals(2)){
                //上报到社区后,增加分配专家权限
                if (comEvent.getEventProcessStatus().equals(1) || comEvent.getEventProcessStatus().equals(2)){
                    //待受理和待验证状态,可以受理,更换专家
                    //关闭调解和归档
                    comEvent.setArchive(0);
                    comEvent.setConciliation(0);
                    comEvent.setDistribution(0);
                } else if (comEvent.getEventProcessStatus().equals(5)){
                    //调解中,可以查看,调解,更换专家,删除
                    comEvent.setSolve(0);
                    comEvent.setArchive(0);
                    comEvent.setDistribution(0);
                } else if (comEvent.getEventProcessStatus().equals(6) && comEvent.getEventResult().equals(1)){
                    //上报并且调解失败,此时事件的状态为6,事件结果为调解失败
                    //comEvent.setDistribution(0);
                    comEvent.setEventResult(null);
                    comEvent.setEventProcessStatus(2);
                    comEvent.setChangeExpert(0);
                    comEvent.setSolve(0);
                    //comEvent.setConciliation(0);
                    comEvent.setArchive(0);
                }else if (comEvent.getEventProcessStatus().equals(6)  && comEvent.getEventResult().equals(2) && comEvent.getEventSucceed().equals(2)){
                    //调解完成,可以归档,查看
                    //关闭所有权限
                    comEvent.setDistribution(0);
                    comEvent.setChangeExpert(0);
                    comEvent.setSolve(0);
                    comEvent.setConciliation(0);
                    //comEvent.setArchive(0);
                }
                else if (comEvent.getEventProcessStatus().equals(6)  && comEvent.getEventSucceed().equals(2)){
                    //调解完成,可以归档,查看
                    //关闭所有权限
                    comEvent.setDistribution(0);
                    comEvent.setSolve(0);
                    comEvent.setArchive(0);
                }
            }
            else{
                //已上报到街道或三说会堂,社区没有分配和受理权限权限
                comEvent.setDistribution(0);
                comEvent.setChangeExpert(0);
                //comEvent.setDelete(0);
                comEvent.setSolve(0);
                comEvent.setConciliation(0);
            }
        }else if (userType.equals(3)){
            //分配行业分中心操作权限
            //是否上报到行业分中心
            if (comEvent.getReportCenter().equals(1) || comEvent.getCurrentProcessType().equals(1)){
                //已经报到行业分中心
                if (comEvent.getEventProcessStatus().equals(1) || comEvent.getEventProcessStatus().equals(2)){
                    //待受理和待验证状态,可以受理,分配专家
                    //关闭调解和归档
                    comEvent.setArchive(0);
                    comEvent.setConciliation(0);
                } else if (comEvent.getEventProcessStatus().equals(5)){
                    //调解中,可以查看,调解,更换专家,删除
                    comEvent.setDistribution(0);
                    comEvent.setArchive(0);
                }  else if (comEvent.getEventProcessStatus().equals(6) && comEvent.getEventResult().equals(1)){
                    //调解完成,可以归档,查看
                    comEvent.setEventResult(null);
                    comEvent.setEventProcessStatus(2);
                    comEvent.setSolve(0);
                    comEvent.setDistribution(0);
                    comEvent.setChangeExpert(0);
                }
                else if (comEvent.getEventProcessStatus().equals(6) && comEvent.getEventSucceed().equals(2)){
                    //调解完成,可以归档,查看
                    comEvent.setSolve(0);
                    comEvent.setDistribution(0);
                    comEvent.setChangeExpert(0);
                }
            }else{
                //未上上报到行业分中心,或者已上报到区三说会堂,仅查看
                comEvent.setArchive(0);
                comEvent.setSolve(0);
                comEvent.setDistribution(0);
                comEvent.setChangeExpert(0);
            }
        }else if (userType.equals(5)  || isStreet){
            //街道权限,操作街道下属社区的所有事件
            //是否上报到街道
            if (comEvent.getReportStreet().equals(1) || comEvent.getCurrentProcessType().equals(3)){
                //已上报到街道
                if (comEvent.getEventProcessStatus().equals(1) || comEvent.getEventProcessStatus().equals(2)){
                    //待受理和待验证状态,可以受理,分配专家
                    //关闭调解和归档
                    comEvent.setArchive(0);
                    comEvent.setConciliation(0);
                    comEvent.setChangeExpert(0);
                    //comEvent.setDistribution(0);
                    comEvent.setSolve(0);
                } else if (comEvent.getEventProcessStatus().equals(5)){
                    //调解中,可以查看,调解,更换专家,删除
                    comEvent.setDistribution(0);
                    comEvent.setArchive(0);
                }else if (comEvent.getEventProcessStatus().equals(3)){
                    //分配新专家后
                    comEvent.setDistribution(0);
                    comEvent.setArchive(0);
                    comEvent.setChangeExpert(0);
                    comEvent.setEventResult(null);
                    comEvent.setEventProcessStatus(1);
                }
                else if (comEvent.getEventProcessStatus().equals(6) && comEvent.getEventResult().equals(1)){
                    //设置为待受理
                    comEvent.setEventResult(null);
                    comEvent.setEventProcessStatus(2);
                    //上报到单位,并且调解失败,
                    //调解完成,可以归档,查看
                    comEvent.setSolve(0);
                    //comEvent.setDistribution(0);
                    comEvent.setChangeExpert(0);
                    //comEvent.setConciliation(0);
                    comEvent.setArchive(0);
                }
                else if (comEvent.getEventProcessStatus().equals(6) && comEvent.getEventSucceed().equals(2)){
                    //调解完成,可以归档,查看
                    comEvent.setSolve(0);
                    comEvent.setDistribution(0);
                    comEvent.setChangeExpert(0);
                    comEvent.setConciliation(0);
                }
            }else{
                //未上报到街道,仅查看
                comEvent.setArchive(0);
                comEvent.setSolve(0);
                comEvent.setDistribution(0);
                comEvent.setChangeExpert(0);
                comEvent.setConciliation(0);
            }
        }else if (isAdmin){
            //区三说会堂账号,最高权限全部开放
            // 是否上报到三说会堂
            if (comEvent.getCurrentProcessType().equals(4) || comEvent.getReportHall().equals(1)){
                //已上报到三说会堂,可以操作
                if (comEvent.getEventProcessStatus().equals(1) || comEvent.getEventProcessStatus().equals(2)){
                    //待受理和待验证状态,可以受理,分配专家
                    //关闭调解和归档
                    comEvent.setArchive(0);
                    comEvent.setConciliation(0);
                } else if (comEvent.getEventProcessStatus().equals(5)){
                    //调解中,可以查看,调解,更换专家,删除
                    comEvent.setDistribution(0);
                    comEvent.setArchive(0);
                } else if (comEvent.getEventProcessStatus().equals(6) && comEvent.getEventSucceed().equals(2)){
                    //调解完成,可以归档,查看
                    comEvent.setSolve(0);
                    comEvent.setDistribution(0);
                    comEvent.setChangeExpert(0);
                }
            }else{
                //未上报到三说会堂,仅查看
                comEvent.setArchive(0);
                comEvent.setSolve(0);
                comEvent.setDistribution(0);
                comEvent.setChangeExpert(0);
            }
        }
    }
    /**
     * 当前账号是否有操作事件权限
     * */
    public Integer hasPermission(ComEvent comEvent,LoginUserInfoVO sysUser){
        String account="";
        Integer perm=1;
        if (nonNull(sysUser.getAccount())){
            account=sysUser.getAccount();
        }
        //上报级别是否匹配当前账号级别
        if (sysUser.getType().equals(12) ){
            if (!comEvent.getCurrentProcessType().equals(1)){
                perm=0;
            }
        }else if (account.equals("admin")){
            if (!comEvent.getCurrentProcessType().equals(4)){
                perm=0;
            }
        }else if (isStreetAccount(sysUser)){
            if (!comEvent.getCurrentProcessType().equals(3)){
                perm=0;
            }
        }
        return perm;
    }
    /**
     * 是否为综治后台街道账号
     * */
    public Boolean isStreetAccount(LoginUserInfoVO sysUser){
        Boolean flag=false;
        String[] account={"glpz","qxpjd","tjdjd","dbdjd","yqjd","bcg","hmkjd","dhjd","jsgyy","dzhljd"};
        if (nonNull(sysUser.getAccount())){
            if (ArrayUtil.contains(account,sysUser.getAccount() )){
                flag=true;
            }
        }
        return flag;
    }
    @Override
@@ -138,18 +474,22 @@
    public R insertComEvent(ComEvent comEvent) {
        ComSanshuoExpert expert = comSanShuoExpertService.getById(comEvent.getSpecialistId());
        if (comEvent.getRequestUserCommunity() != null) {
            //创建时处理级别都是专家
            ComActDO community = comActDAO.selectById(comEvent.getRequestUserCommunity());
            comEvent.setCurrentOrgName(community.getName());
            comEvent.setCurrentOrgId(community.getCommunityId().toString());
            comEvent.setCurrentProcessType(2);
            comEvent.setCurrentProcessType(5);
        }
        if (!StringUtils.isEmpty(comEvent.getCenterId())) {
            //创建时处理级别都是专家
            ComSanshuoIndustryCenter center = comSanShuoIndustryCenterService.getById(comEvent.getCenterId());
            comEvent.setCurrentOrgName(center.getName());
            comEvent.setCurrentOrgId(center.getId().toString());
            comEvent.setCurrentProcessType(1);
            comEvent.setCurrentProcessType(5);
        }
        comEvent.setUserEventStatus(2);
        //设置为未上报
        comEvent.setReportLevel(0);
        comEvent.setEventProcessStatus(SanShuoEventStatusEnum.UNDO.getCode());
        comEvent.setSpecialistName(expert.getName());
        comEvent.setOrderSn(DateUtils.getDateFormatString(new Date(), "yyyyMMddHHmmss") + RandomUtils.nextLong(1, 10000));
@@ -161,6 +501,8 @@
        comEvent.setUpdateBy(comEvent.getRequestUserId());
        comEvent.setUpdateAt(new Date());
        boolean flag = save(comEvent);
        //添加一条对应记录
        comEventMapper.insertEventAndExpertRecord(comEvent.getId(),expert.getId(),0);
        if (!flag) {
            return R.fail(ReturnMsgConstants.DATA_EXIST);
        }
@@ -223,30 +565,85 @@
        comEvent.setEventSucceed(comEventConciliationVO.getEventSucceed());
        comEvent.setEventResult(comEventConciliationVO.getEventResult());
        comEvent.setReportSuperior(comEventConciliationVO.getReportSuperior());
        ComEventTransferRecord comEventTransferRecord = new ComEventTransferRecord();
        if(comEventConciliationVO.getEventSucceed().equals(2)){
            comEvent.setEventProcessStatus(6);
        }
        comEvent.setCurrentEventProcessResult(comEventConciliationVO.getCurrentEventProcessResult());
        //如果当前请求,需要上报上级进行处理
        if (comEventConciliationVO.getReportSuperior()) {
            if (comEvent.getCurrentProcessType() == 2) {
                //查询街道的账号
                comEvent.setCurrentProcessType(3);
                ComActDO comActDO = comActDAO.selectById(comEvent.getCurrentOrgId());
                comEvent.setCurrentOrgId(comActDO.getStreetId().toString());
            } else {
                //查询街道的上级区域账号
                comEvent.setCurrentProcessType(4);
                try {
                    ComStreetDO street = comStreetDAO.selectById(comEvent.getCurrentOrgId());
                    comEvent.setCurrentOrgId(street.getAreaCode().toString());
                } catch (Exception e) {
                    e.printStackTrace();
            //判断当前的处理级别
            if (comEvent.getCurrentProcessType() == 5) {
                //获取专家账号级别决定上报的级别
                ComSanshuoExpert expert = comSanShuoExpertService.getById(comEvent.getSpecialistId());
                if (expert.getLevel().equals(4)){
                    //上报到社区
                    //查询社区账号,由专家转交到社区
                    comEvent.setCurrentProcessType(2);
                    comEvent.setSpecialistName("待分配");
                    comEvent.setSpecialistId(99999L);
                    comEvent.setReportCommunity(1);
                    ComActDO comActDO = comActDAO.selectById(expert.getCommunityId());
                    comEvent.setCurrentOrgId(comActDO.getStreetId().toString());
                    //生成一次流转记录
                    comEvent.setCurrentEventProcessResult("专家上报到社区");
                    comEventTransferRecord.setFromId(comEvent.getSpecialistId());
                    comEventTransferRecord.setToId(Long.parseLong(comEvent.getCurrentOrgId()));
                    comEventTransferRecord.setReportLevel(4);
                    comEvent.setReportLevel(4);
                }else if (expert.getLevel().equals(2)){
                    //上报到行业分中心
                    comEvent.setReportCenter(1);
                    comEvent.setCurrentProcessType(1);
                    comEvent.setCurrentOrgId(expert.getIndustryCenterId().toString());
                    comEvent.setSpecialistName("待分配");
                    comEvent.setSpecialistId(99999L);
                    //生成一次流转记录
                    comEvent.setCurrentEventProcessResult("专家上报到行业分中心");
                    comEventTransferRecord.setFromId(comEvent.getSpecialistId());
                    comEventTransferRecord.setToId(expert.getIndustryCenterId());
                    comEventTransferRecord.setReportLevel(3);
                    comEvent.setReportLevel(3);
                }
            }else if (comEvent.getCurrentProcessType() == 1){
                //行业分中心上报到区三说会堂
                comEvent.setCurrentProcessType(4);
                comEvent.setCurrentOrgId("99999");
                //生成一次流转记录
                comEvent.setReportHall(1);
                comEvent.setCurrentEventProcessResult("行业分中心上报到区三说会堂");
                comEventTransferRecord.setFromId(comEvent.getSpecialistId());
                comEventTransferRecord.setToId(99999L);
                comEventTransferRecord.setReportLevel(5);
                comEvent.setReportLevel(5);
            }else if(comEvent.getCurrentProcessType() == 2){
                //社区上报到街道
                comEvent.setCurrentProcessType(3);
                //获取街道id
                comEvent.setReportStreet(1);
                ComActDO comActDO = comActDAO.selectOne(new QueryWrapper<ComActDO>().lambda().eq(ComActDO::getCommunityId, comEvent.getRequestUserCommunity()).eq(ComActDO::getAppId, "wx0cef797390444b75"));
                comEvent.setCurrentOrgId(comActDO.getStreetId().toString());
                //生成一次流转记录
                comEvent.setCurrentEventProcessResult("社区报到街道");
                comEventTransferRecord.setFromId(comEvent.getRequestUserCommunity());
                comEventTransferRecord.setToId(comActDO.getStreetId());
                comEventTransferRecord.setReportLevel(2);
                comEvent.setReportLevel(2);
            }else if(comEvent.getCurrentProcessType() == 3){
                //街道上报到区三说会堂
                comEvent.setCurrentProcessType(4);
                comEvent.setReportHall(1);
                comEvent.setCurrentOrgId("99999");
                //生成一次流转记录
                comEvent.setCurrentEventProcessResult("街道上报到区三说会堂");
                comEventTransferRecord.setFromId(Long.parseLong(comEvent.getCurrentOrgId()));
                comEventTransferRecord.setReportLevel(1);
                comEvent.setReportLevel(1);
            }else {
                //已是最高上报级别,无法上报
            }
        }
        int flag = baseMapper.updateById(comEvent);
        ComEventTransferRecord comEventTransferRecord = new ComEventTransferRecord();
        comEventTransferRecord.setEventId(comEvent.getId());
        comEventTransferRecord.setSave(true);
        comEventTransferRecord.setProcessResult(comEvent.getCurrentEventProcessResult());
@@ -268,6 +665,14 @@
        saveEventImageList(comEventConciliationVO.getImages(), comEventConciliationVO.getId(),comEventTransferRecord.getId(),4);
        comEventTransferRecordService.insertComEventTransferRecord(comEventTransferRecord);
        return flag > 0 ? R.ok() : R.fail(ReturnMsgConstants.UPDATE_FALSE);
    }
    /**
     * 创建上报记录
     * */
    public  void createTransferLog(ComEventTransferRecord record) {
        record.setId(Snowflake.getId());
        comEventTransferRecordService.insertComEventTransferRecord(record);
    }
    @Override
@@ -302,7 +707,7 @@
        comEventDetailVO.setImages(comEventRequestImageVO);
        map.put("specter", specter);
        map.put("eventDetail", comEventDetailVO);
        List<ComEventTransferRecord> transferRecord = comEventTransferRecordService.list(new QueryWrapper<ComEventTransferRecord>().lambda().eq(ComEventTransferRecord::getEventId, id).orderByAsc(ComEventTransferRecord::getCreateAt));
        List<ComEventTransferRecord> transferRecord = comEventTransferRecordService.list(new QueryWrapper<ComEventTransferRecord>().lambda().eq(ComEventTransferRecord::getEventId, id).orderByDesc(ComEventTransferRecord::getCreateAt));
        transferRecord.forEach(comEventTransferRecord -> {
            List<ComEventResource> list = comEventResourceService.list(new QueryWrapper<ComEventResource>().lambda().eq(ComEventResource::getRefId, comEvent.getId()).notIn(ComEventResource::getStatus,(1)).eq(ComEventResource::getTransferId, comEventTransferRecord.getId()));
            List<ComEventRequestImageVO> ImageVO = CopyUtil.deepCopyListObject(list, ComEventRequestImageVO.class);
@@ -349,17 +754,72 @@
        ComSanshuoExpert specter = comSanShuoExpertService.getById(specialistId);
        comEvent.setSpecialistAcceptTime(new Date());
        comEvent.setSpecialistName(specter.getName());
        comEvent.setEventProcessStatus(SanShuoEventStatusEnum.ACCEPT.getCode());
        comEvent.setEventProcessStatus(SanShuoEventStatusEnum.VALID.getCode());
        int flag = baseMapper.updateById(comEvent);
        //添加一条对应记录
        comEventMapper.insertEventAndExpertRecord(id, specialistId,1);
        return flag > 0 ? R.ok() : R.fail(ReturnMsgConstants.UPDATE_FALSE);
    }
    @Override
    public R calculate() {
        List<ComEventCalculateVO> calculateList = baseMapper.calculate();
    public R calculate(LoginUserInfoVO loginUserInfoVO) {
        ComEvent comEvent=new ComEvent();
        comEvent.setUserType(3);
        Boolean isExpertCheck=false;
        Long expertId=null;
        Boolean isStretAccount = isStreetAccount(loginUserInfoVO);
        if (nonNull(comEvent.getUserType())){
             if (loginUserInfoVO.getType().equals(13) || loginUserInfoVO.getType().equals(11)){
                ComSanshuoExpert expert=new ComSanshuoExpert();
                //专家账号权限(后台)
                if (nonNull(loginUserInfoVO.getPhone())){
                    expert = comSanShuoExpertService.getOne(new QueryWrapper<ComSanshuoExpert>().lambda().eq(ComSanshuoExpert::getPhone, loginUserInfoVO.getPhone()));
                }else{
                    //账号获取
                    expert = comSanShuoExpertService.getOne(new QueryWrapper<ComSanshuoExpert>().lambda().eq(ComSanshuoExpert::getAccount, loginUserInfoVO.getAccount()));
                }
                comEvent.setUserType(2);
                if (nonNull(expert)){
                    comEvent.setSpecialistId(expert.getId());
                    isExpertCheck=true;
                    expertId=expert.getId();
                }
            }else if (loginUserInfoVO.getType().equals(12)){
                //行业分中心权限
                comEvent.setUserType(3);
                //获取行业分中心id
                ComSanshuoIndustryCenter center = comSanShuoIndustryCenterService.getOne(new QueryWrapper<ComSanshuoIndustryCenter>().lambda().eq(ComSanshuoIndustryCenter::getAccount, loginUserInfoVO.getAccount()));
                if (nonNull(center)){
                    comEvent.setCenterId(center.getId().toString());
                }
            }else if (loginUserInfoVO.getType().equals(3)){
                //社区后台权限
                comEvent.setUserType(4);
                comEvent.setCommunityId(loginUserInfoVO.getCommunityId());
            }else if (isStretAccount){
                //街道权限,查看街道范围下的所有社区事件
                //获取街道下属社区id
                List<Long> cids = comActDAO.selectCommunityByStreetId(loginUserInfoVO.getStreetId());
                comEvent.setUserType(5);
                comEvent.setCommunityIds(cids);
            }
        }
        if (isExpertCheck && comEvent.getUserType()!=1){
            if (nonNull(comEventMapper.listEventIds(expertId))){
                List<Long> eventIds = comEventMapper.listEventIds(expertId);
                comEvent.setEventIds(eventIds);
            }
        }
        if (nonNull(loginUserInfoVO.getAccount())){
            if (loginUserInfoVO.getAccount().equals("admin")){
                comEvent.setUserType(null);
            }
        }
        List<ComEventCalculateVO> calculateList = baseMapper.calculate(comEvent);
        ComEventCalculateVO comEventCalculateVO =new ComEventCalculateVO();
        comEventCalculateVO.setStatus("0");
        comEventCalculateVO.setSum(baseMapper.selectCount(new QueryWrapper<ComEvent>().lambda().notIn(ComEvent::getEventProcessStatus,(9))).toString());
        comEventCalculateVO.setSum(baseMapper.caculateSum(comEvent)+"");
        calculateList.add(comEventCalculateVO);
        return R.ok(calculateList);
    }
@@ -369,11 +829,12 @@
    @Transactional(rollbackFor = Exception.class)
    public R archiveRequest(ComEventArchiveVO comEventArchiveVO, LoginUserInfoVO sysUser) {
        ComEvent comEvent = baseMapper.selectById(comEventArchiveVO.getId());
        if (comEvent.getEventSucceed() == 2) {
            comEvent.setEventProcessStatus(7);
        } else {
            comEvent.setEventProcessStatus(6);
        }
        //不再设置已归档状态
//        if (comEvent.getEventSucceed() == 2) {
//            comEvent.setEventProcessStatus(7);
//        } else {
//            comEvent.setEventProcessStatus(6);
//        }
        comEvent.setResult(comEventArchiveVO.getResult());
        baseMapper.updateById(comEvent);
        ComEventTransferRecord comEventTransferRecord = new ComEventTransferRecord();
@@ -391,7 +852,9 @@
        comEventTransferRecord.setSpecialistLevel(comEvent.getSpecialistLevel());
        comEventTransferRecord.setSpecialistName(comEvent.getSpecialistName());
        comEventTransferRecord.setEventResult(comEvent.getEventSucceed());
        comEventTransferRecord.setEventStatus(comEvent.getEventProcessStatus());
        comEventTransferRecord.setFromUserId(sysUser.getUserId());
        //归档操作统一设置为7
        comEventTransferRecord.setEventStatus(7);
        comEventTransferRecord.setId(Snowflake.getId());
        saveEventImageList(comEventArchiveVO.getImages(), comEvent.getId(), comEventTransferRecord.getId(), 5);
        return comEventTransferRecordService.insertComEventTransferRecord(comEventTransferRecord);
@@ -471,6 +934,13 @@
            return R.ok(eventRateVOS);
        }
    }
    @Override
    public void updateEventStransferRecord(Long id) {
        ComEvent comEvent = comEventMapper.selectById(id);
        comEventMapper.updateLog(id,comEvent.getSpecialistId());
    }
    public String typeToName(Integer type){
        switch (type){
            case 1: