manailin
2022-09-24 ffb18ccfe6750f4a65bce6e02e7f6edb54a5d76f
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComEventServiceImpl.java
@@ -1,22 +1,39 @@
package com.panzhihua.service_community.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
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.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,12 +46,47 @@
@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);
        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);
            comEvent1.setIcon(userService.getUserInfoByUserId(comEvent1.getRequestUserId().toString()).getData().getImageUrl());
            ComMediateType category = commediateTypeService.getById(comEvent1.getEventCategory());
            comEvent1.setEventCategoryName(category.getName());
        });
        return R.ok(list);
    }
@@ -50,25 +102,66 @@
    @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(2);
        }
        if (!StringUtils.isEmpty(comEvent.getCenterId())) {
            ComSanshuoIndustryCenter center = comSanShuoIndustryCenterService.getById(comEvent.getCenterId());
            comEvent.setCurrentOrgName(center.getName());
            comEvent.setCurrentOrgId(center.getId().toString());
            comEvent.setCurrentProcessType(1);
        }
        comEvent.setUserEventStatus(2);
        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);
        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);
        }
        }*/
        int flag = baseMapper.updateById(comEvent);
        return flag > 0 ? R.ok(comEvent, ReturnMsgConstants.UPDATE_SUCCESS) : R.fail(ReturnMsgConstants.UPDATE_FALSE);
    }
@@ -85,6 +178,299 @@
        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) {
        saveEventImageList(comEventConciliationVO.getImages(), comEventConciliationVO.getId(),null,4);
        ComEvent comEvent = baseMapper.selectById(comEventConciliationVO.getId());
        comEvent.setEventSucceed(comEventConciliationVO.getEventSucceed());
        comEvent.setEventResult(comEventConciliationVO.getEventResult());
        comEvent.setReportSuperior(comEventConciliationVO.getReportSuperior());
        if(comEventConciliationVO.getEventSucceed() ==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();
                }
            }
        }
        int flag = baseMapper.updateById(comEvent);
        ComEventTransferRecord comEventTransferRecord = new ComEventTransferRecord();
        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());
        saveEventImageList(comEvent.getImages(),comEvent.getId(),comEventTransferRecord.getId(),4);
        comEventTransferRecordService.insertComEventTransferRecord(comEventTransferRecord);
        return flag > 0 ? R.ok() : R.fail(ReturnMsgConstants.UPDATE_FALSE);
    }
    @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(SanShuoEventStatusEnum.CANCEL.getCode());
            comEvent.setRevokeDes("用户手动取消");
            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);
        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));
        transferRecord.forEach(comEventTransferRecord -> {
            List<ComEventResource> list = comEventResourceService.list(new QueryWrapper<ComEventResource>().lambda().eq(ComEventResource::getTransferId, comEventTransferRecord.getId()));
            List<ComEventRequestImageVO> ImageVO = CopyUtil.deepCopyListObject(list, ComEventRequestImageVO.class);
            comEventTransferRecord.setImages(ImageVO);
        });
        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.ACCEPT.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);
        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()).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.setEventStatus(comEvent.getEventProcessStatus());
        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);