From 3c884ccd7b51edf3b36840bf99de5edaa41a38a7 Mon Sep 17 00:00:00 2001
From: 张天森 <1292933220@qq.com>
Date: 星期三, 12 十月 2022 19:05:28 +0800
Subject: [PATCH] 三说会堂事件流程处理

---
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComEventServiceImpl.java |  555 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 542 insertions(+), 13 deletions(-)

diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComEventServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComEventServiceImpl.java
index cded5bb..a696575 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComEventServiceImpl.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComEventServiceImpl.java
@@ -1,22 +1,42 @@
 package com.panzhihua.service_community.service.impl;
 
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.generator.SnowflakeGenerator;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.RandomUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.panzhihua.common.constants.ReturnMsgConstants;
+import com.panzhihua.common.enums.SanShuoEventStatusEnum;
+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.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.entity.ComEvent;
-import com.panzhihua.service_community.service.IComEventService;
+import com.panzhihua.service_community.dao.ComStreetDAO;
+import com.panzhihua.service_community.entity.*;
+import com.panzhihua.service_community.model.dos.ComActDO;
+import com.panzhihua.service_community.model.dos.ComStreetDO;
+import com.panzhihua.service_community.service.*;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.RandomUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
+import javax.annotation.Resource;
+import java.util.*;
+
+import static java.util.Objects.nonNull;
 
 /**
  * Description 三说会堂事件表业务层实现类
@@ -29,18 +49,104 @@
 @Service("comEventService")
 public class ComEventServiceImpl extends ServiceImpl<ComEventMapper, ComEvent> implements IComEventService {
 
+    @Resource
+    private IComEventTransferRecordService comEventTransferRecordService;
+
+    @Resource
+    private ComSanShuoExpertService comSanShuoExpertService;
+
+    @Resource
+    private IComEventResourceService comEventResourceService;
+
+    @Resource
+    private ComActDAO comActDAO;
+
+    @Resource
+    private ComStreetDAO comStreetDAO;
+
+    @Resource
+    private ComSanShuoIndustryCenterService comSanShuoIndustryCenterService;
+
+    @Resource
+    private ComEventMapper comEventMapper;
+
+    @Resource
+    private UserService userService;
+
+    @Resource
+    private CommediateTypeService commediateTypeService;
+
+
     @Override
-    public R pageByComEvent(ComEvent comEvent, Page pagination) {
-        IPage<ComEvent> list = baseMapper.pageByComEvent(comEvent, pagination);
+    public R pageByComEvent(ComEvent comEvent, Page pagination,LoginUserInfoVO loginUserInfoVO) {
+        log.info("当前登陆的用户信息,用户类型"+loginUserInfoVO.getType()+"社区id"+loginUserInfoVO.getCommunityId());
+        Boolean isExpertCheck=false;
+        Long expertId=null;
+        if (nonNull(comEvent.getUserType())){
+            if (comEvent.getUserType().equals(1)){
+                //个人账号权限
+                comEvent.setRequestUserId(loginUserInfoVO.getUserId());
+            }else if (comEvent.getUserType().equals(2) || loginUserInfoVO.getType().equals(13)){
+                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());
+            }
+        }
+        IPage<ComEvent> list=null;
+        if (isExpertCheck){
+            list = comEventMapper.pageByComEventExpert(comEventMapper.listEventIds(expertId), comEvent, pagination);
+        }else{
+            list = baseMapper.pageByComEvent(comEvent, pagination);
+        }
+
         if (list.getRecords().size() < 1) {
             return R.ok(Collections.emptyList());
         }
+        list.getRecords().forEach(comEvent1 -> {
+            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());
+            }
+            ComMediateType category = commediateTypeService.getById(comEvent1.getEventCategory());
+            comEvent1.setEventCategoryName(category.getName());
+            //当前账号能否操作此条记录,根据事件流转记录是否有归档的记录决定当前用户能否对添加归档记录
+            ComEventTransferRecord archiveRecord = comEventTransferRecordService.getOne(new QueryWrapper<ComEventTransferRecord>().lambda().eq(ComEventTransferRecord::getEventId, comEvent1.getId()).eq(ComEventTransferRecord::getFromUserId, loginUserInfoVO.getUserId()).eq(ComEventTransferRecord::getEventStatus, 7));
+            comEvent1.setIsArchive(1);
+            if(nonNull(archiveRecord)){
+                comEvent1.setIsArchive(0);
+            }
+        });
         return R.ok(list);
     }
 
     @Override
-    public List<ComEvent> listByComEvent(ComEvent comEvent) {
-        List<ComEvent> list = baseMapper.listByComEvent(comEvent);
+    public List<ComEvent> listByComEvent(ComEvent comEvent,LoginUserInfoVO loginUserInfoVO) {
+        List<ComEvent> list = baseMapper.listByComEvent(comEvent,null);
         if (list.size() < 1) {
             return Collections.emptyList();
         }
@@ -50,25 +156,76 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public R insertComEvent(ComEvent comEvent) {
-        if (checkExist( comEvent.getOrderSn(), null)) {
-            return R.fail(ReturnMsgConstants.DATA_EXIST);
+        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(5);
         }
+        if (!StringUtils.isEmpty(comEvent.getCenterId())) {
+            //创建时处理级别都是专家
+            ComSanshuoIndustryCenter center = comSanShuoIndustryCenterService.getById(comEvent.getCenterId());
+            comEvent.setCurrentOrgName(center.getName());
+            comEvent.setCurrentOrgId(center.getId().toString());
+            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));
+        comEvent.setInvalid(true);
         comEvent.setId(Snowflake.getId());
+        comEvent.setSubmitDate(new Date());
         comEvent.setCreateAt(new Date());
+        comEvent.setCreateBy(comEvent.getRequestUserId());
+        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);
         }
+        //提交不视为一次流转记录,不保存图片
+        saveEventImageList(comEvent.getImages(), comEvent.getId(),null,1);
         return R.ok(ReturnMsgConstants.SAVE_SUCCESS);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean saveEventImageList(List<ComEventRequestImageVO> images, Long id,Long transferId,Integer status) {
+        List<ComEventResource> comEventResourceList = new ArrayList<>();
+        if (!StringUtils.isEmpty(images)) {
+            List<ComEventRequestImageVO> imagesList = images;
+            imagesList.forEach(comEventRequestImageVO -> {
+                ComEventResource comEventResource = new ComEventResource();
+                comEventResource.setId(Snowflake.getId());
+                comEventResource.setRefId(id);
+                comEventResource.setTransferId(transferId);
+                comEventResource.setStatus(status);
+                comEventResource.setType(1);
+                comEventResource.setResourceName(comEventRequestImageVO.getName());
+                comEventResource.setResourceSize(comEventRequestImageVO.getSize());
+                comEventResource.setUrl(comEventRequestImageVO.getUrl());
+                comEventResource.setDeleteFlag(false);
+                comEventResourceList.add(comEventResource);
+            });
+        }
+        return comEventResourceService.saveBatch(comEventResourceList);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public R updateComEvent(ComEvent comEvent) {
-        if (checkExist(comEvent.getOrderSn(), null)) {
+/*        if (checkExist(comEvent.getOrderSn(), comEvent.getId())) {
             return R.fail(ReturnMsgConstants.DATA_EXIST);
-        }
+        }*/
+        //清除专家信息
+        comEvent.setSpecialistId(null);
+        comEvent.setSpecialistName(null);
         int flag = baseMapper.updateById(comEvent);
         return flag > 0 ? R.ok(comEvent, ReturnMsgConstants.UPDATE_SUCCESS) : R.fail(ReturnMsgConstants.UPDATE_FALSE);
     }
@@ -85,6 +242,378 @@
         return flag ? R.ok(comEvent, ReturnMsgConstants.UPDATE_SUCCESS) : R.fail(ReturnMsgConstants.UPDATE_FALSE);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R conciliationEvent(ComEventConciliationVO comEventConciliationVO, LoginUserInfoVO loginUserInfo) {
+        ComEvent comEvent = baseMapper.selectById(comEventConciliationVO.getId());
+        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() == 5) {
+                //获取专家账号级别决定上报的级别
+                ComSanshuoExpert expert = comSanShuoExpertService.getById(comEvent.getSpecialistId());
+                if (expert.getLevel().equals(4)){
+                    //上报到社区
+                    //查询社区账号,由专家转交到社区
+                    comEvent.setCurrentProcessType(2);
+                    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.setCurrentProcessType(1);
+                    comEvent.setCurrentOrgId(expert.getIndustryCenterId().toString());
+                    //生成一次流转记录
+                    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.setCurrentEventProcessResult("行业分中心上报到区三说会堂");
+                comEventTransferRecord.setFromId(comEvent.getSpecialistId());
+                comEventTransferRecord.setToId(99999L);
+                comEventTransferRecord.setReportLevel(5);
+                comEvent.setReportLevel(5);
+            }else if(comEvent.getCurrentProcessType() == 2){
+                //社区上报到街道
+                comEvent.setCurrentProcessType(3);
+                //获取街道id
+                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.setCurrentOrgId("99999");
+                //生成一次流转记录
+                comEvent.setCurrentEventProcessResult("街道上报到区三说会堂");
+                comEventTransferRecord.setFromId(comEvent.getSpecialistId());
+                comEventTransferRecord.setToId(99999L);
+                comEventTransferRecord.setReportLevel(1);
+                comEvent.setReportLevel(1);
+            }else {
+                //已是最高上报级别,无法上报
+            }
+        }
+        int flag = baseMapper.updateById(comEvent);
+        comEventTransferRecord.setEventId(comEvent.getId());
+        comEventTransferRecord.setSave(true);
+        comEventTransferRecord.setProcessResult(comEvent.getCurrentEventProcessResult());
+        comEventTransferRecord.setProcessResultData(new Date().toString());
+        comEventTransferRecord.setProcessDate(new Date());
+        comEventTransferRecord.setProcessBy(loginUserInfo.getUserId());
+        comEventTransferRecord.setProcessByName(loginUserInfo.getName());
+        comEventTransferRecord.setProcessType(1);
+        comEventTransferRecord.setCreateAt(new Date());
+        comEventTransferRecord.setSpecialistId(comEvent.getSpecialistId());
+        comEventTransferRecord.setSpecialistOrg(comEvent.getCurrentOrgId());
+        comEventTransferRecord.setSpecialistLevel(comEvent.getSpecialistLevel());
+        comEventTransferRecord.setSpecialistName(comEvent.getSpecialistName());
+        comEventTransferRecord.setEventResult(comEvent.getEventSucceed());
+        comEventTransferRecord.setEventStatus(comEvent.getEventProcessStatus());
+        //雪花id失效,使用eventId随机生成
+        comEventTransferRecord.setId(Snowflake.getId());
+        //saveEventImageList(comEvent.getImages(),comEvent.getId(),comEventTransferRecord.getId(),4);
+        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
+    @Transactional(rollbackFor = Exception.class)
+    public R cancelRequest(Long id) {
+        ComEvent comEvent = baseMapper.selectById(id);
+        if (comEvent.getEventProcessStatus() == SanShuoEventStatusEnum.UNDO.getCode().intValue()
+                || comEvent.getEventProcessStatus() == SanShuoEventStatusEnum.VALID.getCode().intValue()) {
+            comEvent.setId(id);
+            comEvent.setUserEventStatus(4);
+            comEvent.setEventProcessStatus(8);
+            comEvent.setRevokeDes("用户手动取消");
+            comEvent.setRevokeDate(new Date());
+            int flag = baseMapper.updateById(comEvent);
+            return flag > 0 ? R.ok() : R.fail(ReturnMsgConstants.UPDATE_FALSE);
+        } else {
+            return R.fail("当前申请已经受理,不能取消!");
+        }
+    }
+
+    @Override
+    public HashMap detail(String id) {
+        HashMap map = new HashMap(3);
+        ComEventDetailVO comEventDetailVO = new ComEventDetailVO();
+        ComEvent comEvent = baseMapper.selectById(id);
+        ComSanshuoExpert specter = comSanShuoExpertService.getById(comEvent.getSpecialistId());
+        CopyUtil.copyProperties(comEvent, comEventDetailVO);
+        comEventDetailVO.setCategoryName(commediateTypeService.getById(comEventDetailVO.getEventCategory()).getName());
+        List<ComEventResource> resourceList = comEventResourceService.list(new QueryWrapper<ComEventResource>().lambda().eq(ComEventResource::getRefId, id)
+                .eq(ComEventResource::getStatus,1));
+        List<ComEventRequestImageVO> comEventRequestImageVO = CopyUtil.deepCopyListObject(resourceList, ComEventRequestImageVO.class);
+        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));
+        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);
+            comEventTransferRecord.setImages(ImageVO);
+            if (comEventTransferRecord.getEventStatus().equals(7)){
+                map.put("archiveLog", comEventTransferRecord);
+            }
+        });
+        //迭代器迭代删除归档记录
+        Iterator<ComEventTransferRecord> iterator = transferRecord.iterator();
+        while (iterator.hasNext()){
+            ComEventTransferRecord comEventTransferRecord = iterator.next();
+            if (comEventTransferRecord.getEventStatus().equals(7)){
+                iterator.remove();
+            }
+        }
+        map.put("transferLog", transferRecord);
+        List<ComEventResource> resource = comEventResourceService.list(new QueryWrapper<ComEventResource>().lambda().eq(ComEventResource::getRefId, id)
+                .eq(ComEventResource::getStatus, 5));
+        map.put("archiveImage", resource);
+        return map;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R acceptRequest(Long id, Long specterId) {
+        ComEvent comEvent = new ComEvent();
+        comEvent.setId(id);
+        comEvent.setSpecialistId(specterId);
+        ComSanshuoExpert specter = comSanShuoExpertService.getById(specterId);
+        comEvent.setSpecialistAcceptTime(new Date());
+        comEvent.setSpecialistName(specter.getName());
+        comEvent.setEventProcessStatus(SanShuoEventStatusEnum.conciliation.getCode());
+        int flag = baseMapper.updateById(comEvent);
+        return flag > 0 ? R.ok() : R.fail(ReturnMsgConstants.UPDATE_FALSE);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R reappoint(Long id, Long specialistId) {
+        ComEvent comEvent = new ComEvent();
+        comEvent.setId(id);
+        comEvent.setSpecialistId(specialistId);
+        ComSanshuoExpert specter = comSanShuoExpertService.getById(specialistId);
+        comEvent.setSpecialistAcceptTime(new Date());
+        comEvent.setSpecialistName(specter.getName());
+        comEvent.setEventProcessStatus(SanShuoEventStatusEnum.ACCEPT.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();
+        ComEventCalculateVO comEventCalculateVO =new ComEventCalculateVO();
+        comEventCalculateVO.setStatus("0");
+        comEventCalculateVO.setSum(baseMapper.selectCount(new QueryWrapper<ComEvent>().lambda().notIn(ComEvent::getEventProcessStatus,(9))).toString());
+        calculateList.add(comEventCalculateVO);
+        return R.ok(calculateList);
+    }
+
+
+    @Override
+    @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);
+//        }
+        comEvent.setResult(comEventArchiveVO.getResult());
+        baseMapper.updateById(comEvent);
+        ComEventTransferRecord comEventTransferRecord = new ComEventTransferRecord();
+        comEventTransferRecord.setEventId(comEvent.getId());
+        comEventTransferRecord.setSave(true);
+        comEventTransferRecord.setProcessResult(comEventArchiveVO.getResult());
+        comEventTransferRecord.setProcessResultData(new Date().toString());
+        comEventTransferRecord.setProcessDate(new Date());
+        comEventTransferRecord.setProcessBy(sysUser.getUserId());
+        comEventTransferRecord.setProcessByName(sysUser.getName());
+        comEventTransferRecord.setProcessType(1);
+        comEventTransferRecord.setCreateAt(new Date());
+        comEventTransferRecord.setSpecialistId(comEvent.getSpecialistId());
+        comEventTransferRecord.setSpecialistOrg(comEvent.getCurrentOrgId());
+        comEventTransferRecord.setSpecialistLevel(comEvent.getSpecialistLevel());
+        comEventTransferRecord.setSpecialistName(comEvent.getSpecialistName());
+        comEventTransferRecord.setEventResult(comEvent.getEventSucceed());
+        comEventTransferRecord.setFromUserId(sysUser.getUserId());
+        //归档操作统一设置为7
+        comEventTransferRecord.setEventStatus(7);
+        comEventTransferRecord.setId(Snowflake.getId());
+        saveEventImageList(comEventArchiveVO.getImages(), comEvent.getId(), comEventTransferRecord.getId(), 5);
+        return comEventTransferRecordService.insertComEventTransferRecord(comEventTransferRecord);
+    }
+
+
+    /**
+     * 大屏事件统计
+     * @param indexDataDTO  查询入参
+     * */
+    @Override
+    public R indexData(IndexDateDTO indexDataDTO) {
+        IndexDateVO vo = comEventMapper.dateAnalysis(indexDataDTO,DateUtil.beginOfMonth(new Date()),DateUtil.endOfMonth(new Date()));
+        //计算率
+        if (nonNull(vo.getSuccess()) && !vo.getSuccess().equals(0)){
+            if (nonNull(vo.getAccepted()) && !vo.getAccepted().equals(0)){
+                //计算成功率
+                vo.setSuccessRate(NumberUtil.div(vo.getSuccess(),vo.getAccepted(),2));
+            }
+        }
+        //折线图X轴
+        List<Date> dates = pastTwelveMoth();
+        vo.setX(getYAndM(dates));
+        //新增
+        List<Integer> Y1=new ArrayList<>();
+        List<Integer> Y2=new ArrayList<>();
+        for (Date date : dates) {
+            Y1.add(comEventMapper.dateAnalysisY(date,DateUtil.endOfMonth(date),indexDataDTO));
+            Y2.add(comEventMapper.dateAnalysisYTwo(date,DateUtil.endOfMonth(date),indexDataDTO));
+        }
+        vo.setY1(Y1);
+        vo.setY2(Y2);
+        return R.ok(vo);
+    }
+
+    @Override
+    public R eventIndexData(Integer type) {
+        //获取事件总数
+        Integer eventCount = comEventMapper.selectCount(new QueryWrapper<ComEvent>().notIn("event_process_status", (7), (8)));
+        if (type.equals(1)){
+            //受理级别占比
+            List<EventRateVO> eventRateVOS = comEventMapper.eventRate();
+            for (EventRateVO eventRateVO : eventRateVOS) {
+                if (nonNull(eventRateVO)){
+                    eventRateVO.setName(typeToName(eventRateVO.getType()));
+                    if (nonNull(eventCount) && !eventCount.equals(0)){
+                        //计算占比
+                        eventRateVO.setRate(NumberUtil.div(eventRateVO.getCount(),eventCount,2));
+                    }
+                }
+            }
+            return R.ok(eventRateVOS);
+        }else if (type.equals(2)){
+            //专家级别
+            List<EventRateVO> eventRateVOS = comEventMapper.expertRate();
+            for (EventRateVO eventRateVO : eventRateVOS) {
+                if (nonNull(eventRateVO)){
+                    eventRateVO.setName(typeToNameExpert(eventRateVO.getType()));
+                    if (nonNull(eventCount) && !eventCount.equals(0)){
+                        //计算占比
+                        eventRateVO.setRate(NumberUtil.div(eventRateVO.getCount(),eventCount,2));
+                    }
+                }
+            }
+            return R.ok(eventRateVOS);
+        }else{
+            //事件类型占比
+            List<EventRateVO> eventRateVOS = comEventMapper.mediateTypeRate();
+            for (EventRateVO eventRateVO : eventRateVOS) {
+                if (nonNull(eventRateVO)){
+                    if (nonNull(eventCount) && !eventCount.equals(0)){
+                        //计算占比
+                        eventRateVO.setRate(NumberUtil.div(eventRateVO.getCount(),eventCount,2));
+                    }
+                }
+            }
+            return R.ok(eventRateVOS);
+        }
+    }
+    public String typeToName(Integer type){
+        switch (type){
+            case 1:
+                return "行业分中心受理";
+            case 2:
+                return "街道调解站受理";
+            case 3:
+                return "社区调解站受理";
+            case 4:
+                return "区三说会堂受理";
+        }
+        return null;
+    }
+
+    public String typeToNameExpert(Integer type){
+        switch (type){
+            case 1:
+                return "区三说会堂专家";
+            case 2:
+                return "行业分中心专家";
+            case 3:
+                return "街道调解站专家";
+            case 4:
+                return "社区调解站专家";
+        }
+        return null;
+    }
+
+    /**
+     * 过去12个月的月份
+     * */
+    private List<Date> pastTwelveMoth(){
+        List<Date> list=new ArrayList<>();
+        Date now = new Date();
+        for (int i = 0; i < 12; i++) {
+            //本月
+            DateTime dateTime = DateUtil.beginOfMonth(now);
+            DateUtil.format(dateTime,"yyyy-MM-dd");
+            list.add(dateTime);
+            //减一天进入下一个月
+            now=DateUtil.offsetDay(dateTime,-1);
+        }
+        return list;
+    }
+
+    /**
+     * 截取年,月
+     * */
+    private List<String> getYAndM(List<Date> dateList){
+        List<String> list=new ArrayList<>();
+        for (Date date : dateList) {
+            list.add(DateUtil.format(date,"yyyy-MM").toString());
+        }
+        return list;
+    }
+
+
     private Boolean checkExist(String sn, Long id) {
         ComEvent comEvent = new ComEvent();
         comEvent.setOrderSn(sn);

--
Gitblit v1.7.1