package com.panzhihua.service_community.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.extra.pinyin.PinyinUtil; 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.sanshuo.ComSanshuoExpertDTO; import com.panzhihua.common.model.vos.LoginUserInfoVO; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.sanshuo.ComSanshuoExpertVO; 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.*; import com.panzhihua.service_community.entity.ComEvent; import com.panzhihua.service_community.entity.ComSanshuoExpert; import com.panzhihua.service_community.entity.ComSanshuoIndustryCenter; import com.panzhihua.service_community.model.dos.ComActDO; import com.panzhihua.service_community.model.dos.ComSanshuoExpertTwoDO; import com.panzhihua.service_community.model.dos.ComStreetDO; import com.panzhihua.service_community.service.ComSanShuoExpertService; import lombok.extern.slf4j.Slf4j; 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 @Slf4j public class ComSanShuoExpertServiceImpl extends ServiceImpl 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 @Transactional(rollbackFor = Exception.class) public R addOrUpdateExpert(ComSanshuoExpertDTO comSanshuoExpertDTO) { if (isNull(comSanshuoExpertDTO.getId())){ //是否重名 List 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()+"调解室"); }else{ expert.setUnit("区三说会堂"); } expert.setStatus(1); expert.setDelFlag(1); int insert = comSanshuoExpertDao.insert(expert); if (insert>0){ try { comSanshuoExpertDTO.setPassword(comSanshuoExpertDTO.getPassword()); } catch (Exception e) { e.printStackTrace(); } //生成后台账号 //如果是普达社区专家则不生成后台账号 if (nonNull(expert.getCommunityId()) && !expert.getCommunityId().equals(10172)){ return R.ok(); } 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()); userService.sanShuoAddUser(user); return R.ok(); } }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){ if (nonNull(expert.getUnitId())){ expert.setCommunityId(Long.parseLong(expert.getUnitId())); expert.setUnit(comActDAO.selectById(expert.getUnitId()).getName()+"调解站"); } } return R.ok(comSanshuoExpertDao.updateById(expert)); } return R.fail("操作失败"); } /** * 后台获取专家列表 * @param page * @param keyWord * @param size * @param loginUserInfo 登陆账号信息 * @return 处理结果 * */ @Override public R expertPage(String keyWord, Integer page, Integer size, LoginUserInfoVO loginUserInfo,Integer level) { //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(); }else if (loginUserInfo.getType().equals(7)){ //街道后台 range=3; id=loginUserInfo.getStreetId(); }else if (loginUserInfo.getType().equals(12)){ range=2; id=comSanshuoIndustryCenterDao.selectOne(new QueryWrapper().lambda().eq(ComSanshuoIndustryCenter::getAccount,loginUserInfo.getAccount() )).getId(); }else if (loginUserInfo.getType().equals(3)){ //社区后台账号 range=4; id=loginUserInfo.getCommunityId(); } } } if (loginUserInfo.getAccount().equals("admin")){ //三说会堂查看所有专家 id=null; range=1; } log.info(""); IPage comSanshuoExpertVOIPage = comSanshuoExpertDao.expertPage(new Page(page, size), keyWord, range, id, level,loginUserInfo.getAppId()); for (ComSanshuoExpertVO record : comSanshuoExpertVOIPage.getRecords()) { //获取调解次数和成功率 record.setCount(comEventMapper.selectCount(new QueryWrapper().lambda().eq(ComEvent::getSpecialistId, record.getId()))); record.setSuccessCount(comEventMapper.selectCount(new QueryWrapper().lambda().eq(ComEvent::getSpecialistId, record.getId()).eq(ComEvent::getEventResult,2 ))); if (nonNull(record.getCount()) && nonNull(record.getSuccessCount())){ if (!record.getCount().equals(0) && !record.getSuccessCount().equals(0)){ record.setRate(NumberUtil.div(record.getSuccessCount(), record.getCount(),2)); } } } return R.ok(comSanshuoExpertVOIPage); } /** * 专家风采 * */ @Override public R expertShow(String appId) { List expertShowVOS = comSanshuoExpertDao.expertShow(appId); for (ExpertShowVO expertShowVO : expertShowVOS) { if (nonNull(expertShowVO.getLevel())){ if (1==expertShowVO.getLevel()) { expertShowVO.setName("区三说会堂调解专家"); expertShowVO.setCount(comSanshuoExpertDao.selectExpertVoList()); }else if (2==expertShowVO.getLevel()){ expertShowVO.setName("行业分中心调解专家"); List expertShowVOS1 = comSanshuoExpertDao.selectExpertIndustry(); expertShowVO.setChildList(expertShowVOS1); }else if (3==expertShowVO.getLevel()){ expertShowVO.setName("镇/街道调解站调解专家"); List expertShowVOS1 = comSanshuoExpertDao.selectExpertStreet(); expertShowVO.setChildList(expertShowVOS1); }else { expertShowVO.setName("村/社区调解站调解专家"); List expertShowVOS1 = comSanshuoExpertDao.selectExpertCommunity(appId); expertShowVO.setChildList(expertShowVOS1); } } } return R.ok(expertShowVOS); } /** * 专家级别与单位范围 * */ @Override public R expertRange(LoginUserInfoVO loginUserInfo) { // if (loginUserInfo!=null){ if (loginUserInfo.getAccount().equals("zhengfawei") || loginUserInfo.getAccount().equals("admin")){ List 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 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 list=new ArrayList<>(); ExpertRangeVO vo=new ExpertRangeVO(); vo.setLevel(2); vo.setName("行业分中心"); vo.setId(comSanshuoIndustryCenterDao.selectOne(new QueryWrapper().lambda().eq(ComSanshuoIndustryCenter::getAccount, loginUserInfo.getAccount())).getId()); list.add(vo); return R.ok(list); }else if (loginUserInfo.getType().equals(3)) { //社区账号 ComActDO comStreetDO = comActDAO.selectById(loginUserInfo.getCommunityId()); List list = new ArrayList<>(); ExpertRangeVO vo = new ExpertRangeVO(); vo.setLevel(4); vo.setName(comStreetDO.getName() + "调解室"); vo.setId(loginUserInfo.getCommunityId()); list.add(vo); return R.ok(list); } else if (loginUserInfo.getType().equals(7)){ //街道账号 ComStreetDO comActDO = comStreetDAO.selectById(loginUserInfo.getStreetId()); List 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.ok("测试陈宫:"+loginUserInfo.getUserType()); } /** * 小程序获取专家列表 * */ @Override public R selectExpertList(Integer type,Long id,Long cid) { List list=new ArrayList<>(); if (type.equals(1)){ //行业分中心下属专家 list=comSanshuoExpertDao.selectList(new QueryWrapper().lambda(). eq(ComSanshuoExpert::getStatus, 1). eq(ComSanshuoExpert::getDelFlag,1 ). eq(ComSanshuoExpert::getIndustryCenterId, id)); }else { if (nonNull(id)){ list=comSanshuoExpertDao.selectList(new QueryWrapper().lambda(). eq(ComSanshuoExpert::getStatus, 1). eq(ComSanshuoExpert::getDelFlag,1 ). eq(ComSanshuoExpert::getCommunityId, id)); }else { list=comSanshuoExpertDao.selectList(new QueryWrapper().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,String appId) { QueryWrapper wrapper=new QueryWrapper<>(); if (level==0){ wrapper.eq("app_id",appId ); }else { if (level!=7){ wrapper.eq("level",level); wrapper.eq("app_id",appId); wrapper.eq("status",1 ); wrapper.eq("del_flag",1 ); 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 ); } }else { wrapper.eq("id",id ); } } wrapper.orderByDesc("(select count(*) FROM com_sanshuo_event_info where specialist_id=com_sanshuo_expert.id and event_process_status=6 and event_result=2)/(select count(*) FROM com_sanshuo_event_info where specialist_id=com_sanshuo_expert.id and event_process_status=6 ) "); wrapper.orderByDesc("(select count(*) FROM com_sanshuo_event_info where specialist_id=com_sanshuo_expert.id and event_process_status=6 )"); List comSanshuoExperts = comSanshuoExpertDao.selectList(wrapper); for (ComSanshuoExpert comSanshuoExpert : comSanshuoExperts) { //获取成功率 //查询成功率 Integer count = comEventMapper.selectCount(new QueryWrapper().lambda().eq(ComEvent::getSpecialistId, comSanshuoExpert.getId()).eq(ComEvent::getEventProcessStatus, 6)); Integer successCount = comEventMapper.selectCount(new QueryWrapper().lambda().eq(ComEvent::getSpecialistId, comSanshuoExpert.getId()).eq(ComEvent::getEventProcessStatus, 6).eq(ComEvent::getEventResult, 2)); comSanshuoExpert.setCount(count); if (nonNull(successCount) && nonNull(count)){ if (!successCount.equals(0) && !count.equals(0)){ //计算成功率 comSanshuoExpert.setRate(NumberUtil.div(successCount, count,2)); } else { comSanshuoExpert.setRate(new BigDecimal(0)); } }else { comSanshuoExpert.setRate(new BigDecimal(0)); } } ComSanshuoExpertTwoDO comSanshuoExpertTwoVo=new ComSanshuoExpertTwoDO(); List comSanshuoExpertsOne=new ArrayList<>(); List comSanshuoExpertsTwo=new ArrayList<>(); for (ComSanshuoExpert comSanshuoExpert : comSanshuoExperts){ if (comSanshuoExpert.getId()%2==1){ comSanshuoExpertsOne.add(comSanshuoExpert); }else { comSanshuoExpertsTwo.add(comSanshuoExpert); } } if (level==0){ comSanshuoExpertTwoVo.setComSanshuoExperts(comSanshuoExpertsOne); comSanshuoExpertTwoVo.setComSanshuoExpertsTwo(comSanshuoExpertsTwo); return R.ok(comSanshuoExpertTwoVo); } else { return R.ok(comSanshuoExperts); } } @Override public void insertExpert(ComSanshuoExpert 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); expert.setCreateBy("admin"); expert.setCreateTime(new Date()); expert.setAdded(0); expert.setPassword("Huacheng@123"); expert.setAccount(PinyinUtil.getPinyin(expert.getName(),"")); int insert = comSanshuoExpertDao.insert(expert); if (insert>0){ log.info(expert.getName()+"添加完成"); } // 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()); // userService.sanShuoAddUser(user); // } } @Override public R backstageList(Integer level,LoginUserInfoVO loginUserInfoVO,Integer page,Integer size,String keyWord) { if (nonNull(level)){ if (level.equals(1)){ //三说会堂权限,查看所有 return R.ok(comSanshuoExpertDao.expertList(new Page(page,size),level,null ,loginUserInfoVO.getAppId(),keyWord)); }else if (level.equals(2)){ //行业分中心 ComSanshuoIndustryCenter center = comSanshuoIndustryCenterDao.selectOne(new QueryWrapper().lambda().eq(ComSanshuoIndustryCenter::getAccount, loginUserInfoVO.getAccount())); return R.ok(comSanshuoExpertDao.expertList(new Page(page,size),level,center.getId(),loginUserInfoVO.getAppId(),keyWord)); }else if (level.equals(3)){ //街道 return R.ok(comSanshuoExpertDao.expertList(new Page(page,size),level,loginUserInfoVO.getStreetId(),loginUserInfoVO.getAppId(),keyWord)); }else if(level.equals(4)){ return R.ok(comSanshuoExpertDao.expertList(new Page(page,size),level,loginUserInfoVO.getCommunityId(),loginUserInfoVO.getAppId(),keyWord)); } }else { return R.ok(comSanshuoExpertDao.expertList(new Page(page,size),level,loginUserInfoVO.getCommunityId(),loginUserInfoVO.getAppId(),keyWord)); } return null; } @Override public R rangeList() { List 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); } }