101captain
2022-03-14 85cf42314fc04a637f1a44e78c1e476a445bf0f3
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComFmsServiceServiceImpl.java
New file
@@ -0,0 +1,423 @@
package com.panzhihua.service_community.service.impl;
import static java.util.Objects.isNull;
import static java.util.Objects.nonNull;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import com.panzhihua.service_community.dao.ComFmsTeamMemberDAO;
import com.panzhihua.service_community.entity.ComFmsTeamMember;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.model.dtos.community.fms.AddFmsServiceAdminDTO;
import com.panzhihua.common.model.dtos.community.fms.ApplyFmsServiceDTO;
import com.panzhihua.common.model.dtos.community.fms.ApprovalFmsServiceAdminDTO;
import com.panzhihua.common.model.dtos.community.fms.FeedbackFmsServiceDTO;
import com.panzhihua.common.model.dtos.community.fms.PageFmsServiceAdminDTO;
import com.panzhihua.common.model.dtos.community.fms.PageFmsServiceAppletsDTO;
import com.panzhihua.common.model.vos.LoginUserInfoVO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.community.fms.ComFmsServiceEvaluateVO;
import com.panzhihua.common.model.vos.community.fms.ComFmsServiceImportExcelVO;
import com.panzhihua.common.model.vos.community.fms.ComFmsServiceRecordVO;
import com.panzhihua.common.model.vos.community.fms.ComFmsServiceVO;
import com.panzhihua.common.utlis.DateUtils;
import com.panzhihua.service_community.dao.ComFmsServiceDAO;
import com.panzhihua.service_community.dao.ComFmsServiceEvaluationsDAO;
import com.panzhihua.service_community.dao.ComFmsServiceRecordDAO;
import com.panzhihua.service_community.entity.ComFmsService;
import com.panzhihua.service_community.entity.ComFmsServiceEvaluations;
import com.panzhihua.service_community.entity.ComFmsServiceRecord;
import com.panzhihua.service_community.service.ComFmsServiceService;
/**
 * 五微服务-微服务(ComFmsService)表服务实现类
 *
 * @author makejava
 * @since 2022-02-11 13:35:53
 */
@Service("comFmsServiceService")
public class ComFmsServiceServiceImpl extends ServiceImpl<ComFmsServiceDAO, ComFmsService>
    implements ComFmsServiceService {
    @Resource
    private ComFmsServiceRecordDAO comFmsServiceRecordDAO;
    @Resource
    private ComFmsServiceEvaluationsDAO comFmsServiceEvaluationsDAO;
    @Resource
    private ComFmsTeamMemberDAO comFmsTeamMemberDAO;
    /**
     * 后台新增微服务
     * @param adminDTO
     * @return
     */
    @Override
    public R addFmsServiceAdmin(AddFmsServiceAdminDTO adminDTO) {
        ComFmsService comFmsService = new ComFmsService();
        BeanUtils.copyProperties(adminDTO, comFmsService);
        comFmsService.setServiceStatus(ComFmsService.ServiceStatus.ywc);
        comFmsService.setApprovalAt(new Date());
        int num = this.baseMapper.insert(comFmsService);
        if (num > 0) {
            //服务记录
            ComFmsServiceRecord comFmsServiceRecord = new ComFmsServiceRecord();
            comFmsServiceRecord.setServiceId(comFmsService.getId());
            comFmsServiceRecord.setContent(adminDTO.getServiceProcess());
            comFmsServiceRecord.setImage(adminDTO.getProcessImage());
            comFmsServiceRecord.setStage(ComFmsServiceRecord.Stage.WCFW);
            comFmsServiceRecord.setCreatedBy(adminDTO.getCreatedBy());
            comFmsServiceRecordDAO.insert(comFmsServiceRecord);
            //默认好评
            ComFmsServiceEvaluations evaluation = new ComFmsServiceEvaluations();
            evaluation.setServiceId(comFmsService.getId());
            evaluation.setStarLevel(5);
            evaluation.setEvaluateContent("系统默认好评!");
            evaluation.setUserId(comFmsService.getUserId());
            comFmsServiceEvaluationsDAO.insert(evaluation);
            return R.ok();
        }
        return R.fail("操作失败,请重新尝试");
    }
    /**
     * 后台分页查询微服务
     * @param adminDTO
     * @return
     */
    @Override
    public R pageFmsServiceAdmin(PageFmsServiceAdminDTO adminDTO) {
        Page page = new Page<>();
        page.setSize(adminDTO.getPageSize());
        page.setCurrent(adminDTO.getPageNum());
        return R.ok(this.baseMapper.pageFmsServiceAdmin(page, adminDTO));
    }
    /**
     * 后台核实微服务
     * @param adminDTO
     * @return
     */
    @Override
    public R approvalFmsService(ApprovalFmsServiceAdminDTO adminDTO) {
        ComFmsService comFmsService = this.baseMapper.selectById(adminDTO.getServiceId());
        if (isNull(comFmsService)) {
            return R.fail("资源不存在");
        }
        comFmsService.setServiceStatus(adminDTO.getIsPass() ? ComFmsService.ServiceStatus.jxz : ComFmsService.ServiceStatus.wtg);
        comFmsService.setApprovalContent(adminDTO.getContent());
        comFmsService.setApprovalAt(new Date());
        if (adminDTO.getIsPass()) {
            comFmsService.setMemberId(adminDTO.getMemberId());
        }
        comFmsService.setUpdatedBy(adminDTO.getUpdatedBy());
        int num = this.baseMapper.updateById(comFmsService);
        if (num > 0) {
            ComFmsServiceRecord comFmsServiceRecord = new ComFmsServiceRecord();
            comFmsServiceRecord.setServiceId(comFmsService.getId());
            comFmsServiceRecord.setContent(adminDTO.getContent());
            comFmsServiceRecord.setStage(adminDTO.getIsPass() ? ComFmsServiceRecord.Stage.SHTG : ComFmsServiceRecord.Stage.HSBTG);
            comFmsServiceRecord.setCreatedBy(adminDTO.getUpdatedBy());
            comFmsServiceRecordDAO.insert(comFmsServiceRecord);
            return R.ok();
        }
        return R.fail("操作失败,请重新尝试");
    }
    /**
     * 后台查看微服务详情
     * @param serviceId
     * @return
     */
    @Override
    public R detailFmsServiceAdmin(Long serviceId) {
        ComFmsServiceVO serviceVO = this.baseMapper.detailFmsServiceAdmin(serviceId);
        if (isNull(serviceVO)) {
            return R.fail("资源不存在");
        }
        List<ComFmsServiceRecord> serviceRecords = comFmsServiceRecordDAO.selectList(new LambdaQueryWrapper<ComFmsServiceRecord>()
                .eq(ComFmsServiceRecord::getServiceId, serviceId)
                .orderByDesc(ComFmsServiceRecord::getCreatedAt));
        if (!serviceRecords.isEmpty()) {
            List<ComFmsServiceRecordVO> recordVOList = new ArrayList<>();
            serviceRecords.forEach(e -> {
                ComFmsServiceRecordVO recordVO = new ComFmsServiceRecordVO();
                BeanUtils.copyProperties(e, recordVO);
                recordVOList.add(recordVO);
            });
            serviceVO.setServiceRecords(recordVOList);
        }
        return R.ok(serviceVO);
    }
    /**
     * 后台删除微服务
     * @param serviceId
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R deleteFmsServiceAdmin(Long serviceId) {
        int num = this.baseMapper.deleteById(serviceId);
        if (num > 0) {
            comFmsServiceRecordDAO.delete(new LambdaQueryWrapper<ComFmsServiceRecord>().eq(ComFmsServiceRecord::getServiceId, serviceId));
            comFmsServiceEvaluationsDAO.delete(new LambdaQueryWrapper<ComFmsServiceEvaluations>().eq(ComFmsServiceEvaluations::getServiceId, serviceId));
            return R.ok();
        }
        return R.fail("操作失败,请重新尝试");
    }
    /**
     * 微服务顶部统计
     * @param communityId
     * @return
     */
    @Override
    public R statisticsFmsService(Long communityId) {
        return R.ok(this.baseMapper.statisticsFmsService(communityId));
    }
    /**
     * 后台导入微服务数据
     * @param voList
     * @param communityId
     * @param userId
     * @return
     */
    @Override
    public R listSaveFmsServiceExcelVO(List<ComFmsServiceImportExcelVO> voList, Long communityId, Long userId) {
        voList.forEach(e -> {
            ComFmsService comFmsService = new ComFmsService();
            BeanUtils.copyProperties(e, comFmsService);
            comFmsService.setCommunityId(communityId);
            comFmsService.setCreatedBy(userId);
            comFmsService.setUpdatedBy(userId);
            comFmsService.setServiceStatus(ComFmsService.ServiceStatus.ywc);
            int num = this.baseMapper.insert(comFmsService);
            if (num > 0) {
                ComFmsServiceRecord comFmsServiceRecord = new ComFmsServiceRecord();
                comFmsServiceRecord.setServiceId(comFmsService.getId());
                comFmsServiceRecord.setContent(e.getServiceProcess());
                comFmsServiceRecord.setStage(ComFmsServiceRecord.Stage.WCFW);
                comFmsServiceRecord.setCreatedBy(userId);
                comFmsServiceRecordDAO.insert(comFmsServiceRecord);
                //默认好评
                ComFmsServiceEvaluations evaluation = new ComFmsServiceEvaluations();
                evaluation.setServiceId(comFmsService.getId());
                evaluation.setStarLevel(5);
                evaluation.setEvaluateContent("系统默认好评!");
                evaluation.setUserId(comFmsService.getUserId());
                comFmsServiceEvaluationsDAO.insert(evaluation);
            }
        });
        return R.ok();
    }
    /**
     * 小程序分页查询微服务
     * @param adminDTO
     * @return
     */
    @Override
    public R pageFmsServiceApplets(PageFmsServiceAppletsDTO adminDTO) {
        Page page = new Page<>();
        page.setSize(adminDTO.getPageSize());
        page.setCurrent(adminDTO.getPageNum());
        return R.ok(this.baseMapper.pageFmsServiceAdminApplets(page, adminDTO));
    }
    /**
     * 小程序查看微服务详情
     * @param serviceId
     * @param userId
     * @return
     */
    @Override
    public R detailFmsServiceApplets(Long serviceId, Long userId) {
        ComFmsServiceVO serviceDetail = this.baseMapper.detailFmsServiceApplets(serviceId);
        if (nonNull(serviceDetail)) {
            List<ComFmsServiceRecord> serviceRecords = comFmsServiceRecordDAO.selectList(new LambdaQueryWrapper<ComFmsServiceRecord>()
                    .eq(ComFmsServiceRecord::getServiceId, serviceId)
                    .orderByDesc(ComFmsServiceRecord::getCreatedAt));
            if (!serviceRecords.isEmpty()) {
                List<ComFmsServiceRecordVO> recordVOList = new ArrayList<>();
                serviceRecords.forEach(e -> {
                    ComFmsServiceRecordVO recordVO = new ComFmsServiceRecordVO();
                    BeanUtils.copyProperties(e, recordVO);
                    recordVOList.add(recordVO);
                });
                serviceDetail.setServiceRecords(recordVOList);
            }
            ComFmsServiceEvaluations evaluation = comFmsServiceEvaluationsDAO.selectOne(new LambdaQueryWrapper<ComFmsServiceEvaluations>()
                    .eq(ComFmsServiceEvaluations::getServiceId, serviceId));
            if (nonNull(evaluation)) {
                ComFmsServiceEvaluateVO evaluateVO = new ComFmsServiceEvaluateVO();
                BeanUtils.copyProperties(evaluation, evaluateVO);
                serviceDetail.setEvaluateVO(evaluateVO);
            }
            serviceDetail.setIsMyself(nonNull(userId) && userId.equals(serviceDetail.getUserId()));
            if (serviceDetail.getServiceStatus().equals(ComFmsService.ServiceStatus.dpj)) {
                Date autoEvaluateAt = DateUtils.addDay(serviceDetail.getCreatedAt(), 3);
                Date nowDate = new Date();
                serviceDetail.setAutoEvaluateAt(autoEvaluateAt.getTime() - nowDate.getTime());
            }
        }
        return R.ok(serviceDetail);
    }
    /**
     * 微服务申请
     * @param adminDTO
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R applyFmsService(ApplyFmsServiceDTO adminDTO) {
        LoginUserInfoVO userInfo = adminDTO.getUserInfo();
        ComFmsService comFmsService = new ComFmsService();
        BeanUtils.copyProperties(adminDTO, comFmsService);
        comFmsService.setCommunityId(userInfo.getCommunityId());
        comFmsService.setCreatedBy(userInfo.getUserId());
        comFmsService.setUpdatedBy(userInfo.getUserId());
        comFmsService.setUserId(userInfo.getUserId());
        comFmsService.setUserName(userInfo.getNickName());
        comFmsService.setPhone(userInfo.getPhone());
        int num = this.baseMapper.insert(comFmsService);
        if (num > 0) {
            ComFmsServiceRecord comFmsServiceRecord = new ComFmsServiceRecord();
            comFmsServiceRecord.setServiceId(comFmsService.getId());
            comFmsServiceRecord.setContent(adminDTO.getServiceContent());
            comFmsServiceRecord.setImage(adminDTO.getServiceImage());
            comFmsServiceRecord.setStage(ComFmsServiceRecord.Stage.TJFWSQ);
            comFmsServiceRecord.setCreatedBy(userInfo.getUserId());
            comFmsServiceRecordDAO.insert(comFmsServiceRecord);
            return R.ok();
        }
        return R.fail("操作失败,请重新尝试");
    }
    /**
     * 分页查询我的微服务
     * @param adminDTO
     * @return
     */
    @Override
    public R pageMyFmsService(PageFmsServiceAppletsDTO adminDTO) {
        Page page = new Page<>();
        page.setSize(adminDTO.getPageSize());
        page.setCurrent(adminDTO.getPageNum());
        IPage<ComFmsServiceVO> serviceVOIPage = this.baseMapper.pageMyFmsService(page, adminDTO);
        List<ComFmsServiceVO> serviceVOList = serviceVOIPage.getRecords();
        if (!serviceVOList.isEmpty()) {
            serviceVOList.forEach(e -> {
                if (e.getServiceStatus().equals(ComFmsService.ServiceStatus.dpj)) {
                    Date autoEvaluateAt = DateUtils.addDay(e.getCreatedAt(), 3);
                    Date nowDate = new Date();
                    e.setAutoEvaluateAt(autoEvaluateAt.getTime() - nowDate.getTime());
                }
            });
        }
        return R.ok(serviceVOList);
    }
    /**
     * 微团队成员分页查询服务处理
     * @param adminDTO
     * @return
     */
    @Override
    public R pageDealFmsService(PageFmsServiceAppletsDTO adminDTO) {
        Page page = new Page<>();
        page.setSize(adminDTO.getPageSize());
        page.setCurrent(adminDTO.getPageNum());
        LoginUserInfoVO userInfo = adminDTO.getUserInfo();
        ComFmsTeamMember comFmsTeamMember = comFmsTeamMemberDAO.selectOne(new LambdaQueryWrapper<ComFmsTeamMember>()
                .eq(ComFmsTeamMember::getPhone, userInfo.getPhone())
                .eq(ComFmsTeamMember::getCommunityId, userInfo.getCommunityId()));
        if (nonNull(comFmsTeamMember)) {
            adminDTO.setMemberId(comFmsTeamMember.getId());
        }
        return R.ok(this.baseMapper.pageDealFmsService(page, adminDTO));
    }
    /**
     * 微团队成员服务反馈
     * @param adminDTO
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R feedbackFmsService(FeedbackFmsServiceDTO adminDTO) {
        ComFmsService comFmsService = this.baseMapper.selectById(adminDTO.getServiceId());
        if (isNull(comFmsService)) {
            return R.fail("资源不存在");
        }
        if (isNull(comFmsService.getMemberId())) {
            return R.fail("还未分配服务人员");
        }
        LoginUserInfoVO userInfo = adminDTO.getUserInfo();
        ComFmsTeamMember comFmsTeamMember = comFmsTeamMemberDAO.selectOne(new LambdaQueryWrapper<ComFmsTeamMember>()
                .eq(ComFmsTeamMember::getPhone, userInfo.getPhone())
                .eq(ComFmsTeamMember::getCommunityId, userInfo.getCommunityId()));
        if (isNull(comFmsTeamMember) || !comFmsService.getMemberId().equals(comFmsTeamMember.getId())) {
            return R.fail("不是指定的分配服务人员");
        }
        Boolean isEnd = adminDTO.getIsEnd();
        ComFmsServiceRecord comFmsServiceRecord = new ComFmsServiceRecord();
        comFmsServiceRecord.setServiceId(comFmsService.getId());
        comFmsServiceRecord.setContent(adminDTO.getFeedbackContent());
        comFmsServiceRecord.setImage(adminDTO.getImage());
        comFmsServiceRecord.setStage(isEnd ? ComFmsServiceRecord.Stage.WCFW : ComFmsServiceRecord.Stage.FWFK);
        comFmsServiceRecord.setCreatedBy(adminDTO.getUserId());
        int num = comFmsServiceRecordDAO.insert(comFmsServiceRecord);
        if (num > 0) {
            if (isEnd) {
                comFmsService.setServiceStatus(ComFmsService.ServiceStatus.dpj);
                comFmsService.setServiceAt(new Date());
                this.baseMapper.updateById(comFmsService);
            }
            return R.ok();
        }
        return R.fail("操作失败,请重新尝试");
    }
    /**
     * 定时任务针对服务结束后3天还未评价的用户默认好评
     * @return
     */
    @Override
    public R defaultPraise() {
        List<ComFmsService> fmsServiceList = this.baseMapper.selectList(new QueryWrapper<ComFmsService>().lambda()
                .eq(ComFmsService::getServiceStatus, ComFmsService.ServiceStatus.dpj)
                .le(ComFmsService::getServiceAt, DateUtils.addDay(new Date(), -3)));
        if (!fmsServiceList.isEmpty()) {
            List<ComFmsServiceEvaluations> evaluations = new ArrayList<>();
            fmsServiceList.forEach(e -> {
                ComFmsServiceEvaluations evaluation = new ComFmsServiceEvaluations();
                evaluation.setServiceId(e.getId());
                evaluation.setStarLevel(5);
                evaluation.setEvaluateContent("系统默认好评!");
                evaluation.setUserId(e.getUserId());
                evaluations.add(evaluation);
            });
            int num = comFmsServiceEvaluationsDAO.insertBatch(evaluations);
            if (num > 0) {
                fmsServiceList.forEach(e -> e.setServiceStatus(ComFmsService.ServiceStatus.ywc));
                this.updateBatchById(fmsServiceList);
            }
        }
        return R.ok();
    }
}