张天森
2022-10-12 3c884ccd7b51edf3b36840bf99de5edaa41a38a7
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSanShuoExpertServiceImpl.java
@@ -1,56 +1,348 @@
package com.panzhihua.service_community.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.digest.MD5;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.panzhihua.common.model.dtos.community.sanshuo.ComSanshuoExpertDTO;
import com.panzhihua.common.model.vos.LoginUserInfoVO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.sanshuo.ExpertRangeVO;
import com.panzhihua.common.model.vos.sanshuo.ExpertShowVO;
import com.panzhihua.common.model.vos.user.AdministratorsUserVO;
import com.panzhihua.common.service.user.UserService;
import com.panzhihua.common.utlis.Snowflake;
import com.panzhihua.service_community.dao.ComSanshuoExpertDao;
import com.panzhihua.common.utlis.StringUtils;
import com.panzhihua.service_community.api.ComSanShuoExpertApi;
import com.panzhihua.service_community.dao.*;
import com.panzhihua.service_community.entity.ComEvent;
import com.panzhihua.service_community.entity.ComSanshuoEvent;
import com.panzhihua.service_community.entity.ComSanshuoExpert;
import com.panzhihua.service_community.model.dos.ComActDO;
import com.panzhihua.service_community.model.dos.ComStreetDO;
import com.panzhihua.service_community.service.ComActService;
import com.panzhihua.service_community.service.ComSanShuoExpertService;
import com.panzhihua.service_community.service.ComStreetService;
import com.panzhihua.service_community.util.MyAESUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import static java.util.Objects.isNull;
import static java.util.Objects.nonNull;
@Service
public class ComSanShuoExpertServiceImpl extends ServiceImpl<ComSanshuoExpertDao, ComSanshuoExpert> implements ComSanShuoExpertService {
public class ComSanShuoExpertServiceImpl  extends ServiceImpl<ComSanshuoExpertDao, ComSanshuoExpert> implements ComSanShuoExpertService {
    @Resource
    private ComSanshuoExpertDao comSanshuoExpertDao;
    @Resource
    private UserService userService;
    @Resource
    private ComSanshuoIndustryCenterDao comSanshuoIndustryCenterDao;
    @Resource
    private ComStreetDAO comStreetDAO;
    @Resource
    private ComActDAO comActDAO;
    @Resource
    private ComEventMapper comEventMapper;
    /**
     * 添加专家
     *
     * @param comSanshuoExpertDTO
     * @return 处理结果
     */
     * */
    @Override
    public R addExpert(ComSanshuoExpertDTO comSanshuoExpertDTO) {
        ComSanshuoExpert expert = new ComSanshuoExpert();
        BeanUtil.copyProperties(comSanshuoExpertDTO, expert);
        expert.setId(Snowflake.getId());
        expert.setCreateTime(new Date());
        int insert = comSanshuoExpertDao.insert(expert);
        if (insert > 0) {
            return R.ok();
    @Transactional(rollbackFor = Exception.class)
    public R addOrUpdateExpert(ComSanshuoExpertDTO comSanshuoExpertDTO) {
        if (isNull(comSanshuoExpertDTO.getId())){
            //是否重名
            List<ComSanshuoExpert> checkExpert=comSanshuoExpertDao.selectExpertByNameOrPhoneOrAccount(comSanshuoExpertDTO);
            if (checkExpert.size() != 0){
                return R.fail("账号信息有重复");
            }
            ComSanshuoExpert expert=new ComSanshuoExpert();
            BeanUtil.copyProperties(comSanshuoExpertDTO,expert);
            if (nonNull(comSanshuoExpertDTO.getUnit())){
                String id = comSanshuoExpertDTO.getUnit();
                String[] split = id.split(",");
                expert.setUnitId(split[split.length-1]);
            }
            expert.setId(Snowflake.getId());
            expert.setCreateTime(new Date());
            if (expert.getLevel()==2){
                expert.setIndustryCenterId(Long.parseLong(expert.getUnitId()));
                expert.setUnit(comSanshuoIndustryCenterDao.selectById(expert.getUnitId()).getName()+"调解站");
            }else if(expert.getLevel()==3){
                expert.setStreetId(Long.parseLong(expert.getUnitId()));
                expert.setUnit(comStreetDAO.selectById(expert.getUnitId()).getName()+"调解站");
            }else if(expert.getLevel()==4){
                expert.setCommunityId(Long.parseLong(expert.getUnitId()));
                expert.setUnit(comActDAO.selectById(expert.getUnitId()).getName()+"调解站");
            }
            expert.setStatus(1);
            expert.setDelFlag(1);
            int insert = comSanshuoExpertDao.insert(expert);
            if (insert>0){
                try {
                    comSanshuoExpertDTO.setPassword(comSanshuoExpertDTO.getPassword());
                } catch (Exception e) {
                    e.printStackTrace();
                }
                //生成后台账号
                AdministratorsUserVO user=new AdministratorsUserVO();
                user.setUserId(Snowflake.getId());
                user.setAccount(comSanshuoExpertDTO.getAccount());
                user.setPassword(comSanshuoExpertDTO.getPassword());
                user.setName(comSanshuoExpertDTO.getName());
                user.setType(11);
                user.setImageUrl(comSanshuoExpertDTO.getAvatar());
                user.setPhone(comSanshuoExpertDTO.getPhone());
                return R.ok(userService.sanShuoAddUser(user));
            }
        }else {
            ComSanshuoExpert expert=new ComSanshuoExpert();
            BeanUtil.copyProperties(comSanshuoExpertDTO,expert);
            if (nonNull(comSanshuoExpertDTO.getUnit())){
                String id = comSanshuoExpertDTO.getUnit();
                String[] split = id.split(",");
                expert.setUnitId(split[split.length-1]);
            }
            expert.setUpdateTime(new Date());
            if (expert.getLevel()==2){
                expert.setIndustryCenterId(Long.parseLong(expert.getUnitId()));
                expert.setUnit(comSanshuoIndustryCenterDao.selectById(expert.getUnitId()).getName()+"调解站");
            }else if(expert.getLevel()==3){
                expert.setStreetId(Long.parseLong(expert.getUnitId()));
                expert.setUnit(comStreetDAO.selectById(expert.getUnitId()).getName()+"调解站");
            }else if(expert.getLevel()==4){
                expert.setCommunityId(Long.parseLong(expert.getUnitId()));
                expert.setUnit(comActDAO.selectById(expert.getUnitId()).getName()+"调解站");
            }
            return R.ok(comSanshuoExpertDao.updateById(expert));
        }
        return R.fail("添加失败");
        return R.fail("操作失败");
    }
    /**
     * 后台获取专家列表
     *
     * @param page
     * @param keyWord
     * @param size
     * @param range   数据范围:1街道下属/2社区下属/3业务中心下属/null三说会堂下属
     * @param id      社区或街道或业务中心id
     * @param loginUserInfo 登陆账号信息
     * @return 处理结果
     */
     * */
    @Override
    public R expertPage(String keyWord, Integer page, Integer size, Integer range, Long id) {
        return R.ok(comSanshuoExpertDao.expertPage(new Page(page, size), keyWord, range, id));
    public R expertPage(String keyWord, Integer page, Integer size, LoginUserInfoVO loginUserInfo) {
        //range:1.三说会堂下属,2业务中心下属,3街道下属,4社区下属
        //id:社区或街道或业务中心id
        //账号级别
        Long id=null;
        Integer range=null;
        if (nonNull(loginUserInfo)){
            if (nonNull(loginUserInfo.getUserType()) || nonNull(loginUserInfo.getType())){
                if (nonNull(loginUserInfo.getUserType())){
                    if (loginUserInfo.getUserType().equals(1)){
                        range=3;
                        id=loginUserInfo.getStreetId();
                    }else if (loginUserInfo.getUserType().equals(2)){
                        range=4;
                        id=loginUserInfo.getCommunityId();
                    }
                }else if (loginUserInfo.getType().equals(11)){
                    range=2;
                    id=loginUserInfo.getCommunityId();
                }
            }
        }
        if (loginUserInfo.getAccount().equals("admin") || loginUserInfo.getAccount().equals("xiqu")){
            id=null;
            range=null;
        }
        return R.ok(comSanshuoExpertDao.expertPage(new Page(page,size),keyWord,range,id));
    }
    /**
     * 专家风采
     * */
    @Override
    public R expertShow() {
        List<ExpertShowVO> expertShowVOS = comSanshuoExpertDao.expertShow();
        for (ExpertShowVO expertShowVO : expertShowVOS) {
            if (nonNull(expertShowVO.getLevel())){
                if (1==expertShowVO.getLevel()) {
                    expertShowVO.setName("区三说会堂调解专家");
                }else if (2==expertShowVO.getLevel()){
                    expertShowVO.setName("行业分中心调解专家");
                    List<ExpertShowVO> expertShowVOS1 = comSanshuoExpertDao.selectExpertIndustry();
                    expertShowVO.setChildList(expertShowVOS1);
                }else if (3==expertShowVO.getLevel()){
                    expertShowVO.setName("镇/街道调解站调解专家");
                    List<ExpertShowVO> expertShowVOS1 = comSanshuoExpertDao.selectExpertStreet();
                    expertShowVO.setChildList(expertShowVOS1);
                }else {
                    expertShowVO.setName("村/社区调解站调解专家");
                    List<ExpertShowVO> expertShowVOS1 = comSanshuoExpertDao.selectExpertCommunity();
                    expertShowVO.setChildList(expertShowVOS1);
                }
            }
        }
        return R.ok(expertShowVOS);
    }
    /**
     * 专家级别与单位范围
     * */
    @Override
    public R expertRange(LoginUserInfoVO loginUserInfo) {
        if (nonNull(loginUserInfo)){
            if (loginUserInfo.getAccount().equals("zhengfawei") || loginUserInfo.getAccount().equals("admin")){
                List<ExpertRangeVO> list=new ArrayList<>();
                for (int i = 1; i < 5; i++) {
                    ExpertRangeVO vo=new ExpertRangeVO();
                    vo.setLevel(i);
                    if (i==2){
                        //设置行业分中心为childList
                        vo.setId(2L);
                        vo.setChildList(comSanshuoIndustryCenterDao.indstryList());
                        vo.setName("行业分中心");
                    }else if (i==3){
                        vo.setId(3L);
                        vo.setChildList(comSanshuoIndustryCenterDao.streetList());
                        vo.setName("街道调解站");
                    }else if (i==4){
                        vo.setId(4L);
                        vo.setChildList(comSanshuoIndustryCenterDao.communityList());
                        vo.setName("社区调解站");
                    }else if(i==1){
                        vo.setId(1L);
                        vo.setName("三说会堂");
                    }
                    list.add(vo);
                }
                return R.ok(list);
            }else if (loginUserInfo.getType().equals(11)){
                //三说会堂后台
                List<ExpertRangeVO> list=new ArrayList<>();
                ExpertRangeVO vo=new ExpertRangeVO();
                vo.setLevel(1);
                vo.setName("区三说会堂");
                list.add(vo);
                return R.ok(list);
            }else if (loginUserInfo.getType().equals(12)){
                //行业分中心后台
                List<ExpertRangeVO> list=new ArrayList<>();
                ExpertRangeVO vo=new ExpertRangeVO();
                vo.setLevel(2);
                vo.setName("行业分中心");
                vo.setId(loginUserInfo.getCommunityId());
                list.add(vo);
                return R.ok(list);
            }else if (nonNull(loginUserInfo.getUserType())){
                if (loginUserInfo.getUserType().equals(1)){
                    //街道账号
                    ComStreetDO comStreetDO = comStreetDAO.selectById(loginUserInfo.getStreetId());
                    List<ExpertRangeVO> list=new ArrayList<>();
                    ExpertRangeVO vo=new ExpertRangeVO();
                    vo.setLevel(3);
                    vo.setName(comStreetDO.getName()+"调解站");
                    vo.setId(loginUserInfo.getStreetId());
                    list.add(vo);
                    return R.ok(list);
                }
                if (loginUserInfo.getUserType().equals(2)){
                    //街道账号
                    ComActDO comActDO = comActDAO.selectById(loginUserInfo.getCommunityId());
                    List<ExpertRangeVO> list=new ArrayList<>();
                    ExpertRangeVO vo=new ExpertRangeVO();
                    vo.setLevel(4);
                    vo.setName(comActDO.getName()+"调解站");
                    vo.setId(loginUserInfo.getStreetId());
                    list.add(vo);
                    return R.ok(list);
                }
            }
        }
        return R.fail();
    }
    /**
     * 小程序获取专家列表
     * */
    @Override
    public R selectExpertList(Integer type,Long id,Long cid) {
        List<ComSanshuoExpert> list=new ArrayList<>();
        if (type.equals(1)){
            //行业分中心下属专家
            list=comSanshuoExpertDao.selectList(new QueryWrapper<ComSanshuoExpert>().lambda().
                    eq(ComSanshuoExpert::getStatus, 1).
                    eq(ComSanshuoExpert::getDelFlag,1 ).
                    eq(ComSanshuoExpert::getIndustryCenterId, id));
        }else {
            if (nonNull(id)){
                list=comSanshuoExpertDao.selectList(new QueryWrapper<ComSanshuoExpert>().lambda().
                        eq(ComSanshuoExpert::getStatus, 1).
                        eq(ComSanshuoExpert::getDelFlag,1 ).
                        eq(ComSanshuoExpert::getCommunityId, id));
            }else {
                list=comSanshuoExpertDao.selectList(new QueryWrapper<ComSanshuoExpert>().lambda().
                        eq(ComSanshuoExpert::getStatus, 1).
                        eq(ComSanshuoExpert::getDelFlag,1 ).
                        eq(ComSanshuoExpert::getCommunityId,cid ));
            }
        }
        return R.ok(list);
    }
    /**
     * 专家风采列表
     * */
    @Override
    public R expertShowList(Integer level, Long id) {
        QueryWrapper<ComSanshuoExpert> wrapper=new QueryWrapper<>();
        wrapper.eq("level",level );
        if (level.equals(2)){
            wrapper.eq("industry_center_id", id);
        }else if (level.equals(3)){
            wrapper.eq("street_id",id );
        }else if (level.equals(4)){
            wrapper.eq("community_id",id );
        }
        List<ComSanshuoExpert> comSanshuoExperts = comSanshuoExpertDao.selectList(wrapper);
        for (ComSanshuoExpert comSanshuoExpert : comSanshuoExperts) {
            //获取成功率
            //查询成功率
            Integer count = comEventMapper.selectCount(new QueryWrapper<ComEvent>().lambda().eq(ComEvent::getSpecialistId, comSanshuoExpert.getId()).eq(ComEvent::getEventProcessStatus, 6));
            Integer successCount = comEventMapper.selectCount(new QueryWrapper<ComEvent>().lambda().eq(ComEvent::getSpecialistId, comSanshuoExpert.getId()).eq(ComEvent::getEventProcessStatus, 6).eq(ComEvent::getEventResult, 2));
            comSanshuoExpert.setCount(count);
            if (nonNull(count) && !count.equals(0)){
                comSanshuoExpert.setCount(count);
                if (nonNull(successCount) && !count.equals(successCount)){
                    //计算成功率
                    comSanshuoExpert.setRate(NumberUtil.div(successCount, count,2));
                }else {
                    comSanshuoExpert.setRate(new BigDecimal(0));
                }
            }else {
                comSanshuoExpert.setCount(0);
            }
        }
        return R.ok(comSanshuoExperts);
    }
}