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<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
|
@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()+"调解室");
|
}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<ComSanshuoIndustryCenter>().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<ComSanshuoExpertVO> comSanshuoExpertVOIPage = comSanshuoExpertDao.expertPage(new Page(page, size), keyWord, range, id, level,loginUserInfo.getAppId());
|
for (ComSanshuoExpertVO record : comSanshuoExpertVOIPage.getRecords()) {
|
//获取调解次数和成功率
|
record.setCount(comEventMapper.selectCount(new QueryWrapper<ComEvent>().lambda().eq(ComEvent::getSpecialistId, record.getId())));
|
record.setSuccessCount(comEventMapper.selectCount(new QueryWrapper<ComEvent>().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<ExpertShowVO> 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<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(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<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(comSanshuoIndustryCenterDao.selectOne(new QueryWrapper<ComSanshuoIndustryCenter>().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<ExpertRangeVO> 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<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.ok("测试陈宫:"+loginUserInfo.getUserType());
|
}
|
|
/**
|
* 小程序获取专家列表
|
* */
|
@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,String appId) {
|
QueryWrapper<ComSanshuoExpert> 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<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(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<ComSanshuoExpert> comSanshuoExpertsOne=new ArrayList<>();
|
List<ComSanshuoExpert> 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<ComSanshuoIndustryCenter>().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<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);
|
}
|
|
|
}
|