package com.example.jz.service.impl; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.example.jz.dao.*; import com.example.jz.enums.CauseEnums; import com.example.jz.exception.BusinessException; import com.example.jz.modle.PageParam; import com.example.jz.modle.dto.AddReportDto; import com.example.jz.modle.dto.AddReportLoadDto; import com.example.jz.modle.dto.CauseDto; import com.example.jz.modle.dto.CauseLoadDto; import com.example.jz.modle.entity.*; import com.example.jz.modle.vo.CauseReportVo; import com.example.jz.modle.vo.CauseVo; import com.example.jz.modle.vo.NewCauseVo; import com.example.jz.modle.vo.UserVo; import com.example.jz.service.CauseService; import com.example.jz.service.ReportService; import com.example.jz.service.UserService; import com.example.jz.utils.IdUtils; import lombok.SneakyThrows; import org.springframework.beans.BeanUtils; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.*; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; /** * 案件表(Cause)表服务实现类 * * @author makejava * @since 2022-07-13 11:52:58 */ @Service("causeService") public class CauseServiceImpl extends ServiceImpl implements CauseService { @Resource CauseDao causeDao; @Resource UserDao userDao; @Resource ReportDao reportDao; @Resource CauseService causeService; @Resource GroupDao groupDao; @Resource GroupUserDao groupUserDao; @Resource UserService userService; @Resource ReportService reportService; @Resource MessageDao messageDao; @Resource AnnouncementDao announcementDao; @Override @Transactional(rollbackFor = Exception.class) public Integer addCause(CauseDto causeDto) { //�������� Cause cause = new Cause(); BeanUtils.copyProperties(causeDto, cause); cause.setCtime(new Date()); causeService.save(cause); //创建群组 Group group = new Group(); group.setCtime(new Date()); group.setGroupName(causeDto.getName()); group.setUserId(causeDto.getUserId()); group.setCauseId(cause.getId()); return groupDao.insert(group); } @Override public PageParam getCauserListByCondition(String cause, Integer status, Integer size, Integer current) { QueryWrapper causeQueryWrapper = new QueryWrapper<>(); if (StringUtils.isNotBlank(cause)) { causeQueryWrapper.and(a -> a.like(StringUtils.isNotBlank(cause), "number", cause) .or(StringUtils.isNotBlank(cause)) .like(StringUtils.isNotBlank(cause), "name", cause)); } if (status != null) { causeQueryWrapper.eq("status", status); } causeQueryWrapper.orderByDesc("ctime"); PageParam causePageParam = new PageParam<>(); if (size != null) { causePageParam.setSize(size); } if (current != null) { causePageParam.setCurrent(current); } PageParam causePage = causeDao.selectPage(causePageParam, causeQueryWrapper); List causeVos = causePage.getRecords().stream().map( a -> { CauseVo causeVo = new CauseVo(); BeanUtils.copyProperties(a, causeVo); causeVo.setUserName(userDao.selectOne(new QueryWrapper().eq("id", a.getUserId())).getRealName()); causeVo.setReportNumber(reportDao.selectCount(new QueryWrapper().eq("cause_id", a.getId()))); causeVo.setGroupId(groupDao.selectOne(new QueryWrapper().eq("cause_id", a.getId())).getId()); return causeVo; }).collect(Collectors.toList()); PageParam causeVoPageParam = new PageParam<>(); BeanUtils.copyProperties(causePage, causeVoPageParam); causeVoPageParam.setRecords(causeVos); return causeVoPageParam; } @Override public PageParam getCauserListByCondition(String cause, Integer status, Integer size, Integer current, Integer id) { QueryWrapper causeQueryWrapper = new QueryWrapper<>(); if (StringUtils.isNotBlank(cause)) { causeQueryWrapper.and(a -> a.like(StringUtils.isNotBlank(cause), "number", cause) .or(StringUtils.isNotBlank(cause)) .like(StringUtils.isNotBlank(cause), "name", cause)); } if (status != null) { causeQueryWrapper.eq("status", status); } causeQueryWrapper.eq("user_id", id); causeQueryWrapper.orderByDesc("ctime"); PageParam causePageParam = new PageParam<>(); if (size != null) { causePageParam.setSize(size); } if (current != null) { causePageParam.setCurrent(current); } PageParam causePage = causeDao.selectPage(causePageParam, causeQueryWrapper); List causeVos = causePage.getRecords().stream().map( a -> { CauseVo causeVo = new CauseVo(); BeanUtils.copyProperties(a, causeVo); causeVo.setUserName(userDao.selectOne(new QueryWrapper().eq("id", a.getUserId())).getRealName()); causeVo.setReportNumber(reportDao.selectCount(new QueryWrapper().eq("cause_id", a.getId()))); causeVo.setGroupId(groupDao.selectOne(new QueryWrapper().eq("cause_id", a.getId())).getId()); return causeVo; }).collect(Collectors.toList()); PageParam causeVoPageParam = new PageParam<>(); BeanUtils.copyProperties(causePage, causeVoPageParam); causeVoPageParam.setRecords(causeVos); return causeVoPageParam; } @Override public List getVxCauseList(String phone) { User user = userDao.selectOne(new LambdaQueryWrapper().eq(User::getUserMobile, phone)); List reports = reportDao.selectList(new LambdaQueryWrapper().eq(Report::getUserId, user.getId())); List list = reports.stream() .map(item -> item.getCauseId()) .filter(integer -> integer != null) .distinct() .collect(Collectors.toList()); List res; if (!Objects.isNull(list) && list.size()!= 0){ List causes = causeDao.selectList(new LambdaQueryWrapper().notIn(Cause::getId, list)); res = causes.stream() .map(item -> { NewCauseVo newCauseVo = new NewCauseVo(); newCauseVo.setName(item.getName()); newCauseVo.setId(item.getId()); return newCauseVo; }).collect(Collectors.toList()); }else { List causes = causeDao.selectList(null); res = causes.stream() .map(item -> { NewCauseVo newCauseVo = new NewCauseVo(); newCauseVo.setName(item.getName()); newCauseVo.setId(item.getId()); return newCauseVo; }).collect(Collectors.toList()); } return res; } @Override public List getManagerList() { return userDao.selectList(new QueryWrapper().eq("role", 1)).stream().map(a -> { UserVo userVo = new UserVo(); userVo.setUserId(a.getId()); userVo.setUserName(a.getRealName()); return userVo; }).collect(Collectors.toList()); } @Override public Integer updateCause(CauseDto causeDto, Integer id) { Cause cause = new Cause(); BeanUtils.copyProperties(causeDto, cause); cause.setId(id); groupDao.update(null, Wrappers.lambdaUpdate(Group.class) .set(Group::getGroupName, causeDto.getName()) .set(Group::getUserId, causeDto.getUserId()) .eq(Group::getCauseId, id)); return causeDao.updateById(cause); } @Override public PageParam getReporterList(Integer causeId) { PageParam PageParam = new PageParam<>(); PageParam reportPageParam = reportDao.selectPage(PageParam, new QueryWrapper().eq("cause_id", causeId).orderByDesc("ctime")); PageParam causeReportVoPageParam = new PageParam<>(); BeanUtils.copyProperties(reportPageParam, causeReportVoPageParam); if (!reportPageParam.getRecords().isEmpty()) { List causeReportVos = reportPageParam.getRecords().stream() .map( a -> { CauseReportVo causeReportVo = new CauseReportVo(); User user = userDao.selectOne(new QueryWrapper().eq("id", a.getUserId())); BeanUtils.copyProperties(a, causeReportVo); causeReportVo.setMobile(user.getUserMobile()); causeReportVo.setIdcard(user.getUserIdcard().replaceAll("(?<=[\\d]{3})\\d(?=[\\d]{4})", "*")); causeReportVo.setReporterName(user.getRealName()); if (causeReportVo.getIsInGroup() == 1) { causeReportVo.setGroupId(groupDao.selectOne(new QueryWrapper().eq("cause_id", causeId)).getId()); } return causeReportVo; } ).collect(Collectors.toList()); causeReportVoPageParam.setRecords(causeReportVos); } return causeReportVoPageParam; } @Override public List getGroupAnnouncement(Integer groupId) { return announcementDao.selectList(new QueryWrapper().eq("group_id", groupId)); } @Override public void deleteCause(Integer id) { List reports = reportDao.selectList(new LambdaQueryWrapper().eq(Report::getCauseId, id)); for (Report report : reports) { reportDao.deleteById(report.getId()); } causeDao.deleteById(id); Group group = groupDao.selectOne(new LambdaQueryWrapper().eq(Group::getCauseId, id)); if (group != null) { messageDao.delete(new LambdaQueryWrapper().eq(Message::getGroupId, group.getId())); groupUserDao.delete(new LambdaQueryWrapper().eq(GroupUser::getGroupId, group.getId())); } groupDao.delete(new QueryWrapper().eq("cause_id", id)); } @Override @SneakyThrows @Transactional(rollbackFor = BusinessException.class) public void loadFile(MultipartFile multipartFile) { ArrayList causeLoadDtos = new ArrayList<>(); EasyExcel.read(multipartFile.getInputStream(), CauseLoadDto.class, new AnalysisEventListener() { @Override public void invoke(CauseLoadDto data, AnalysisContext context) { if (StringUtils.isNotBlank(data.getName()) && StringUtils.isNotBlank(data.getUserName())) { causeLoadDtos.add(data); } } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { } }) .autoCloseStream(true) .doReadAll(); causeLoadDtos.forEach( a -> { Cause cause = new Cause(); BeanUtils.copyProperties(a, cause); cause.setNumber(IdUtils.getAduitId()); if (StringUtils.isBlank(a.getStatus())) { throw new BusinessException("状态不能为空"); } if (a.getStatus().equals(CauseEnums.UNCHECKED.getMsg())) { cause.setStatus(CauseEnums.UNCHECKED.value()); } if (a.getStatus().equals(CauseEnums.NOTTOPUTONRECORD.getMsg())) { cause.setStatus(CauseEnums.NOTTOPUTONRECORD.value()); } if (a.getStatus().equals(CauseEnums.UNDERCONSIDERATION.getMsg())) { cause.setStatus(CauseEnums.UNDERCONSIDERATION.value()); } if (a.getStatus().equals(CauseEnums.CASECLOSED.getMsg())) { cause.setStatus(CauseEnums.CASECLOSED.value()); } if (a.getStatus().equals(CauseEnums.HASBEENDROPPED.getMsg())) { cause.setStatus(CauseEnums.HASBEENDROPPED.value()); } cause.setCtime(new Date()); if (StringUtils.isBlank(a.getUserName())) { throw new BusinessException("负责人不允许为空"); } if (userDao.selectOne(new QueryWrapper().eq("real_name", a.getUserName())) == null) { throw new BusinessException("负责人不存在"); } Integer id = userDao.selectOne(new QueryWrapper().eq("real_name", a.getUserName())).getId(); cause.setUserId(id); causeService.save(cause); Group group = new Group(); group.setCtime(new Date()); group.setUserId(id); group.setGroupName(a.getName()); group.setCauseId(cause.getId()); groupDao.insert(group); }); } @Override @Transactional public Boolean addReportPeople(AddReportDto addReportDto) { User user = userDao.selectOne(new LambdaQueryWrapper(User.class).eq(User::getUserIdcard, addReportDto.getIdcard())); if (user == null) { // 如果用户不存在 则添加用户 user = new User().setUserIdcard(addReportDto.getIdcard()).setUserMobile(addReportDto.getMobile()).setRealName(addReportDto.getReporterName()) .setModifyTime(new Date()).setUserRegtime(new Date()).setPic(addReportDto.getPic()); userService.save(user); } Group group = groupDao.selectOne(new QueryWrapper().eq("cause_id", addReportDto.getCauseId())); // 添加人员进群组 // groupUserDao.insert(new GroupUser().setGroupId(group.getId()).setUserId(user.getId()).setCtime(new Date()).setBanSpeech(0)); // 添加报案信息 Report report = new Report(); BeanUtils.copyProperties(addReportDto, report); report .setIsInGroup(1) .setCreator(userDao.selectOne(new QueryWrapper().eq("login_username", SecurityContextHolder.getContext().getAuthentication().getPrincipal())).getId()) .setUserId(user.getId()) .setCtime(new Date()) .setStatus(1) .setReportMethod("现场报案") .setIsCommission("0") .setReportTime(new Date()) .setCauseId(addReportDto.getCauseId()); reportService.save(report); return groupUserDao.insert(new GroupUser().setGroupId(group.getId()).setUserId(report.getId()).setCtime(new Date()).setBanSpeech(0)) > 0; } @Override public List> getCauseIdAndName() { ArrayList> maps = new ArrayList<>(); causeDao.selectList(new QueryWrapper().eq("status", 0).or().eq("status", 2)).stream().forEach(a -> { Map map = new HashMap<>(); map.put("id", a.getId().toString()); map.put("name", a.getName()); maps.add(map); }); return maps; } @Override @SneakyThrows public void loadFileReport(MultipartFile multipartFile, Integer causeId) { EasyExcel.read(multipartFile.getInputStream(), AddReportLoadDto.class, new AnalysisEventListener() { @Override public void invoke(AddReportLoadDto data, AnalysisContext context) { if (StringUtils.isNotBlank(data.getReporterName()) && StringUtils.isNotBlank(data.getIdcard())) { AddReportDto addReportDto = new AddReportDto(); BeanUtils.copyProperties(data, addReportDto); addReportDto.setCauseId(causeId); addReportPeople(addReportDto); } } @Override public void doAfterAllAnalysed(AnalysisContext context) { } }) .autoCloseStream(true) .doReadAll(); } }