From 7ea5eece501c98a91555a5358931367e78e9d23b Mon Sep 17 00:00:00 2001
From: baizonghao <1719256278@qq.com>
Date: 星期四, 25 五月 2023 15:40:09 +0800
Subject: [PATCH] 11

---
 src/main/java/com/example/jz/service/impl/ReportServiceImpl.java |  279 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 276 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/example/jz/service/impl/ReportServiceImpl.java b/src/main/java/com/example/jz/service/impl/ReportServiceImpl.java
index 924ec9f..3acd551 100644
--- a/src/main/java/com/example/jz/service/impl/ReportServiceImpl.java
+++ b/src/main/java/com/example/jz/service/impl/ReportServiceImpl.java
@@ -1,10 +1,50 @@
 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.alibaba.excel.metadata.data.ImageData;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import com.alibaba.excel.util.IoUtils;
+import com.alibaba.excel.util.StringUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.example.jz.dao.ReportDao;
-import com.example.jz.modle.entity.Report;
+import com.example.jz.dao.*;
+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.ReportParamDto;
+import com.example.jz.modle.entity.*;
+import com.example.jz.modle.vo.ExportExcelReportVo;
+import com.example.jz.modle.vo.NewCauseVo;
+import com.example.jz.modle.vo.ReportListVo;
+import com.example.jz.modle.vo.ReportVXVO;
+import com.example.jz.service.MinIOService;
 import com.example.jz.service.ReportService;
+import com.example.jz.service.UserService;
+import lombok.SneakyThrows;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+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 javax.servlet.http.HttpServletResponse;
+import java.io.Serializable;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
 
 /**
  * 鎶ユ琛�(Report)琛ㄦ湇鍔″疄鐜扮被
@@ -15,5 +55,238 @@
 @Service("reportService")
 public class ReportServiceImpl extends ServiceImpl<ReportDao, Report> implements ReportService {
 
-}
+    @Autowired
+    private ReportDao reportDao;
+    @Autowired
+    private GroupDao groupDao;
+    @Autowired
+    private GroupUserDao groupUserDao;
 
+    @Resource
+    CauseDao causeDao;
+
+    @Resource
+    UserDao userDao;
+    @Resource
+    UserService userService;
+    @Resource
+    ReportService reportService;
+
+    @Resource
+    MinIOService minIOService;
+
+    /**
+     * 瀹℃牳鎶ユ
+     *
+     * @param report
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean audit(Report report) {
+        // 1. 鏇存柊鎶ユ琛�
+        report.setStatus(1);
+        report.setIsInGroup(1);
+        reportDao.updateById(report);
+        // 2. 鏇存柊缇ょ敤鎴疯〃
+        Group group = groupDao.selectOne(new LambdaQueryWrapper<>(Group.class)
+                .eq(Group::getCauseId, report.getCauseId()));
+        if (!groupUserDao.selectUserList(group.getId()).contains(report.getUserId())) {
+            GroupUser groupUser = new GroupUser().setGroupId(group.getId()).setUserId(report.getId()).setCtime(new Date()).setBanSpeech(0);
+            return groupUserDao.insert(groupUser) == 1 ? true : false;
+        }
+        return true;
+    }
+
+    @Override
+    public void leaveGroup(Integer id, Integer groupId) {
+        Report report = new Report();
+        report.setIsInGroup(0);
+        report.setId(id);
+        reportDao.updateById(report);
+        groupUserDao.delete(new QueryWrapper<GroupUser>().eq("user_id", id).eq("group_id", groupId));
+    }
+
+//    @Override
+//    @SneakyThrows
+//    public void exportReporter(Integer id, HttpServletResponse response) {
+//        //鏌ヨ鎶ユ浜虹浉鍏充俊鎭�氳繃妗堜欢
+//        List<Report> reports = reportDao.selectList(new QueryWrapper<Report>().eq("cause_id", id).orderByDesc());
+//        ArrayList<ExportExcelReportVo> exportExcelReportVos = new ArrayList<>();
+//        reports.forEach(
+//                new Consumer<Report>() {
+//                    @Override
+//                    public void accept(Report a) {
+//                        ExportExcelReportVo exportExcelReportVo = new ExportExcelReportVo();
+//                        User user = userDao.selectOne(new QueryWrapper<User>().eq("id", a.getUserId()));
+//                        BeanUtils.copyProperties(a, exportExcelReportVo);
+//                        exportExcelReportVo.setUserIdcard(user.getUserIdcard());
+//                        exportExcelReportVo.setUserMobile(user.getUserMobile());
+//                        exportExcelReportVo.setRealName(user.getRealName());
+//                        WriteCellData<List<ImageData>> objectWriteCellData = new WriteCellData<>();
+//                        ArrayList<ImageData> imageDataList = new ArrayList<>();
+//                        if (StringUtils.isNotBlank(a.getReportMaterials())) {
+//                            String[] urls = a.getReportMaterials().split(",");
+//                            if (urls.length == 1) {
+//                                int width = 600;
+//                                try {
+//                                    ImageData imageData = new ImageData();
+//                                    imageData.setImage(IoUtils.toByteArray(new URL(minIOService.getPreviewFileUrl(urls[0])).openConnection().getInputStream()));
+//                                    imageData.setRight(width / 2);
+//                                    imageDataList.add(imageData);
+//                                } catch (Exception e) {
+//                                    throw new RuntimeException(e);
+//                                }
+//                            } else {
+//                                for (int i = 0; i < urls.length; i++) {
+//                                    int width = 600;
+//                                    try {
+//                                        ImageData imageData = new ImageData();
+//                                        imageData.setImage(IoUtils.toByteArray(new URL(minIOService.getPreviewFileUrl(urls[i])).openConnection().getInputStream()));
+//                                        imageData.setLeft(width / urls.length * i);
+//                                        imageData.setRight(width - width / urls.length * (i + 1));
+//                                        imageDataList.add(imageData);
+//                                    } catch (Exception e) {
+//                                        throw new RuntimeException(e);
+//                                    }
+//                                }
+//                            }
+//                        }
+//                        objectWriteCellData.setImageDataList(imageDataList);
+//                        exportExcelReportVo.setWriteCellData(objectWriteCellData);
+//                        exportExcelReportVos.add(exportExcelReportVo);
+//                    }
+//                }
+//        );
+//        String name = causeDao.selectOne(new QueryWrapper<Cause>().eq("id", id)).getName();
+//        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+//        response.setCharacterEncoding("utf-8");
+//        response.setHeader("Content-disposition", "attachment;filename=" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + URLEncoder.encode(name + ".xlsx", "utf-8"));
+//        EasyExcel.write(response.getOutputStream(), ExportExcelReportVo.class).sheet("鏉愭枡瀵煎嚭").doWrite(exportExcelReportVos);
+//    }
+
+    @Override
+    public Page<ReportListVo> getPage(Page<ReportListVo> page, ReportParamDto reportParamDto) {
+        return reportDao.getPage(page, reportParamDto);
+    }
+
+    @Override
+    public ReportListVo getReportListVoById(Serializable id) {
+        return reportDao.getReportListVoById(id);
+    }
+
+    @Override
+    public Page<ReportListVo> getPageByGroupId(Page<ReportListVo> page, ReportParamDto reportParamDto, Integer causeId) {
+        Long size = (page.getCurrent() - 1) * page.getSize();
+        Long current = page.getSize();
+        Page<ReportListVo> aaa = new PageParam<>();
+        List<ReportListVo> list = reportDao.getPageByGroupId(reportParamDto, causeId, size, current);
+        list.forEach(item -> {
+            if (item.getIsInGroup() == 1) {
+                item.setGroupId(groupDao.selectOne(new QueryWrapper<Group>().eq("cause_id", causeId)).getId());
+            }
+        });
+        aaa.setRecords(list);
+        Integer pageByGroupIdCount = reportDao.getPageByGroupIdCount(reportParamDto, causeId);
+        aaa.setTotal(pageByGroupIdCount);
+        aaa.getRecords().stream().forEach(x -> x.setIdcard(x.getIdcard().replaceAll("(?<=[\\d]{3})\\d(?=[\\d]{4})", "*")));
+        return aaa;
+    }
+
+    @Override
+    @Transactional
+    public Boolean addReport(AddReportDto addReportDto) {
+        User user = userDao.selectOne(new LambdaQueryWrapper<User>(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()).setCtime(new Date());
+            userService.save(user);
+        }
+        // 娣诲姞浜哄憳杩涚兢缁�
+//        groupUserDao.insert(new GroupUser()
+//                .setGroupId(groupDao.selectOne(new QueryWrapper<Group>().eq("cause_id", addReportDto.getCauseId())).getId())
+//                .setUserId(user.getId()).setCtime(new Date())
+//                .setBanSpeech(0));
+        // 娣诲姞鎶ユ淇℃伅
+        Report report = new Report();
+        BeanUtils.copyProperties(addReportDto, report);
+        report
+                .setCreator(userDao.selectOne(new QueryWrapper<User>().eq("login_username", SecurityContextHolder.getContext().getAuthentication().getPrincipal())).getId())
+                .setUserId(user.getId())
+                .setCtime(new Date())
+                .setStatus(0)
+                .setIsInGroup(0)
+                .setReportMethod("鐜板満鎶ユ")
+                .setIsCommission("0")
+                .setReportTime(new Date())
+                .setCauseId(addReportDto.getCauseId());
+        return reportService.save(report);
+    }
+
+    @Override
+    public List<Report> listGroup(Integer id) {
+        return reportDao.selectListGroup(id);
+    }
+
+    @Override
+    @SneakyThrows
+    public void loadFileReport(MultipartFile multipartFile, Integer causeId) {
+        EasyExcel.read(multipartFile.getInputStream(), AddReportLoadDto.class, new AnalysisEventListener<AddReportLoadDto>() {
+                    @Override
+                    public void invoke(AddReportLoadDto data, AnalysisContext context) {
+                        if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(data.getReporterName()) && com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(data.getIdcard())) {
+                            AddReportDto addReportDto = new AddReportDto();
+                            BeanUtils.copyProperties(data, addReportDto);
+                            addReportDto.setCauseId(causeId);
+                            addReport(addReportDto);
+                        }
+
+                    }
+
+                    @Override
+                    public void doAfterAllAnalysed(AnalysisContext context) {
+
+                    }
+                })
+                .autoCloseStream(true)
+                .doReadAll();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean reject(Integer id, String reason) {
+        Report report = reportDao.selectReportByReportId(id);
+        // 1. 鏇存柊鎶ユ琛�
+        report.setStatus(2);
+        report.setIsInGroup(2);
+        report.setRemarks(reason);
+        reportDao.updateById(report);
+        return true;
+    }
+
+    @Override
+    public ReportVXVO getRejectReportById(Integer id) {
+        ReportVXVO reportVXVO = new ReportVXVO();
+        Report report = reportDao.selectOne(new LambdaQueryWrapper<Report>().eq(Report::getId, id));
+        User user = userDao.selectOne(new LambdaQueryWrapper<User>().eq(User::getId, report.getUserId()));
+        BeanUtils.copyProperties(report, reportVXVO);
+        reportVXVO.setLocation(user.getLocation());
+        reportVXVO.setWorkingLocation(user.getWorkingLocation());
+        reportVXVO.setSex(user.getSex());
+        reportVXVO.setRealName(user.getRealName());
+        reportVXVO.setUserIdCard(user.getUserIdcard());
+        reportVXVO.setDescription(causeDao.selectOne(new LambdaQueryWrapper<Cause>().eq(Cause::getId, reportDao.selectOne(new LambdaQueryWrapper<Report>().eq(Report::getId, id)).getCauseId())).getName());
+        return reportVXVO;
+    }
+
+    @Override
+    public NewCauseVo rejectCauseList(Integer id) {
+        Report report = reportDao.selectOne(new LambdaQueryWrapper<Report>().eq(Report::getId, id));
+        Cause cause = causeDao.selectOne(new LambdaQueryWrapper<Cause>().eq(Cause::getId, report.getCauseId()));
+        NewCauseVo newCauseVo = new NewCauseVo();
+        newCauseVo.setId(cause.getId());
+        newCauseVo.setName(cause.getName());
+        return newCauseVo;
+    }
+}
\ No newline at end of file

--
Gitblit v1.8.0