郑永安
2023-06-19 2fcd97552d16718cc7997629fd637a73a5a4483f
src/main/java/com/gk/firework/Service/ServiceImpl/HiddenDangerReportServiceImpl.java
对比新文件
@@ -0,0 +1,464 @@
package com.gk.firework.Service.ServiceImpl;
import com.alibaba.fastjson.JSONArray;
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.gk.firework.Domain.Enterprise;
import com.gk.firework.Domain.Enum.HiddenDangerReportStatus;
import com.gk.firework.Domain.Exception.BusinessException;
import com.gk.firework.Domain.HiddenDangerReport;
import com.gk.firework.Domain.HiddenDangerReportDetail;
import com.gk.firework.Domain.UserInfo;
import com.gk.firework.Domain.Utils.FilterObject;
import com.gk.firework.Domain.Utils.Properties;
import com.gk.firework.Domain.Utils.StringUtils;
import com.gk.firework.Domain.Utils.UploadUtil;
import com.gk.firework.Domain.Vo.CheckReportVo;
import com.gk.firework.Domain.Vo.HiddenDangerTableRow;
import com.gk.firework.Mapper.HiddenDangerReportMapper;
import com.gk.firework.Service.EnterpriseService;
import com.gk.firework.Service.HiddenDangerReportDetailService;
import com.gk.firework.Service.HiddenDangerReportService;
import com.gk.firework.Service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.util.*;
@Service("hiddenDangerReportService")
public class HiddenDangerReportServiceImpl extends ServiceImpl<HiddenDangerReportMapper, HiddenDangerReport> implements HiddenDangerReportService {
    @Autowired
    private EnterpriseService enterpriseService;
    @Autowired
    private HiddenDangerReportDetailService hiddenDangerReportDetailService;
    @Autowired
    private HiddenDangerReportMapper hiddenDangerReportMapper;
    @Autowired
    private UserService userService;
    /**
    * @Description: 提交自检报告
    * @date 2021/4/8 14:58
    */
    @Override
    @Transactional
    public void addCheck(CheckReportVo checkReportVo, UserInfo user) {
        //自检报告基本信息
        HiddenDangerReport report = new HiddenDangerReport();
        {
            //自动生成code
            report.setCode("SR"+System.currentTimeMillis());
            report.setApplyperson(checkReportVo.getApplyperson());
            report.setCreateby(user.getUsername());
            report.setCreatetime(new Date());
            report.setEnterpriseid(user.getId());
            report.setEnterprisename(user.getUsername());
            report.setStatus(HiddenDangerReportStatus.PENDING);
            UserInfo userInfo = userService.getById(user.getId());
            Enterprise enterprise = enterpriseService.getById(userInfo.getCompanyid());
            assert enterprise != null;
            report.setCycle(enterprise.getSelfrecordingcycle());
            report.setEnterprisenumber(enterprise.getEnterprisenumber());
            report.setMajornum(0);
            report.setNormalnum(0);
            report.setOverduenum(0);
            report.setUndealnum(0);
            report.setViewcount(0);
            report.setTotalnum(0);
        }
        //新增自检已选选项
        {
            JSONArray jsonArray = JSONArray.parseArray(checkReportVo.getReport());
            if (jsonArray != null) {
                List<HiddenDangerTableRow> rows = jsonArray.toJavaList(HiddenDangerTableRow.class);
                List<HiddenDangerReportDetail> adds;
                if (rows != null && rows.size() > 0) {
                    adds = new ArrayList<>();
                    for (HiddenDangerTableRow row : rows) {
                        //合格
                        if (row.isQualified() && !row.isUnqualified()) {
                            HiddenDangerTableRow.Unqualified cu = row.getAnswer();
                            HiddenDangerReportDetail q = new HiddenDangerReportDetail();
                            q.setResultid(cu.getResultid());
                            q.setReportcode(report.getCode());
                            q.setValidflag(true);
                            q.setIsqualified(true);
                            q.setChecktypeid(row.getChecktypeid());
                            adds.add(q);
                        }
                        //不合格
                        if (row.isUnqualified() && !row.isQualified()) {
                            HiddenDangerTableRow.Unqualified cu = row.getAnswer();
                            //重大危险
                            if (cu.getLevel() == 2) {
                                report.setMajornum(report.getMajornum() + 1);
                            }else{
                                report.setNormalnum(report.getNormalnum() + 1);
                            }
                            //未处理完个数
                            if (cu.getRectifystatus() == 1) {
                                report.setUndealnum(report.getUndealnum() + 1);
                            }
                            HiddenDangerReportDetail uq = new HiddenDangerReportDetail();
                            uq.setChecktypeid(row.getChecktypeid());
                            uq.setResultid(cu.getResultid());
                            uq.setFindtime(cu.getFindtime());
                            uq.setLevel(cu.getLevel());
                            uq.setReportcode(report.getCode());
                            uq.setRectifyprincipal(cu.getRectifyprincipal());
                            uq.setMemo(cu.getMemo());
                            uq.setRectifycompletedate(cu.getRectifycompletedate());
                            uq.setRectifymeasure(cu.getRectifymeasure());
                            uq.setRectifydeadline(cu.getRectifydeadline());
                            uq.setRectifystatus(cu.getRectifystatus());
                            uq.setIsqualified(false);
                            uq.setValidflag(true);
                            uq.setUrl(cu.getUrl());
                            adds.add(uq);
                        }
                    }
                    if (adds.size() > 0) {
                        report.setTotalnum(adds.size());
                        hiddenDangerReportDetailService.saveBatch(adds);
                    }
                }
            }
        }
        //新增自检报告->执行
        {
            report.setValidflag(true);
            this.save(report);
        }
    }
    /**
    * @Description: 报告统计分页
    * @date 2021/4/8 18:31
    */
    @Override
    public IPage reportList(Page<HiddenDangerReport> page, Map filter,UserInfo user) {
        UserInfo userInfo = userService.getById(user.getId());
        Map<String, Object> params = new HashMap<>();
        //监管部门(companyid = null)可视范围为已提交的,否则只能看自己提交的信息
        params.put("enterprisenumber", userInfo.getCompanynumber());
        params.put("committed", HiddenDangerReportStatus.COMMITTED);
        // 过滤条件
        params.put("province", user.getProvince());
        params.put("city", user.getCity());
        params.put("district", user.getArea());
        params.put("street", user.getTown());
        params.put("committee", user.getCommunity());
        params.put("filterProvince", filter.get("province"));
        params.put("filterCity", filter.get("city"));
        params.put("filterDistrict", filter.get("district"));
        params.put("filterStreet", filter.get("street"));
        params.put("filterCommittee", filter.get("committee"));
        params.put("safetysupervision", filter.get("safetysupervision"));
        params.put("cycle", filter.get("cycle"));
        params.put("enterprisename", filter.get("enterprisename"));
        params.put("starttime", filter.get("starttime"));
        params.put("endtime", filter.get("endtime"));
        params.put("range", filter.get("range"));
        List<HiddenDangerReport> list = hiddenDangerReportMapper.selectReportList(page, params);
        if (list.size() > 0) {
            for (HiddenDangerReport report : list) {
                //过期并且未处理
                report.setOverduenum(hiddenDangerReportDetailService.countOverdueByReportCode(report.getCode()));
            }
        }
        return page.setRecords(list);
    }
    /**
    * @Description: 根据Id获取单条自检报告
    * @date 2021/4/8 18:38
    */
    @Override
    public List<HiddenDangerTableRow> getReport(String code) {
        return hiddenDangerReportMapper.selectReport(code);
    }
    /**
    * @Description: 修改报告
    * @date 2021/4/9 10:09
    */
    @Override
    public void modReport(CheckReportVo checkReportVo, UserInfo user) {
            HiddenDangerReport report = new HiddenDangerReport();
            report.setId(checkReportVo.getReportid());
            report.setApplyperson(checkReportVo.getApplyperson());
            report.setMajornum(0);
            report.setNormalnum(0);
            report.setOverduenum(0);
            report.setUndealnum(0);
            report.setTotalnum(0);
        JSONArray jsonArray = JSONArray.parseArray(checkReportVo.getReport());
        if (jsonArray != null) {
            List<HiddenDangerTableRow> rows = jsonArray.toJavaList(HiddenDangerTableRow.class);
            List<HiddenDangerReportDetail> adds;
            List<HiddenDangerReportDetail> upds2Unqualified;
            List<HiddenDangerReportDetail> upds2Qualified;
            List<HiddenDangerReportDetail> dels;
            if (rows != null && rows.size() > 0) {
                adds = new ArrayList<>();
                upds2Unqualified = new ArrayList<>();
                upds2Qualified = new ArrayList<>();
                dels = new ArrayList<>();
                for (HiddenDangerTableRow row : rows) {
                    //合格
                    HiddenDangerTableRow.Unqualified cu = row.getAnswer();
                    if (row.isQualified() && !row.isUnqualified()) {
                        HiddenDangerReportDetail q = new HiddenDangerReportDetail();
                        if (cu.getId() != null) {
                            q.setId(cu.getId());
                            q.setIsqualified(true);
                            q.setResultid(cu.getResultid());
                            upds2Qualified.add(q);
                        }else{
                            q.setResultid(cu.getResultid());
                            q.setReportcode(checkReportVo.getReportcode());
                            q.setValidflag(true);
                            q.setIsqualified(true);
                            q.setChecktypeid(row.getChecktypeid());
                            q.setReportcode(checkReportVo.getReportcode());
                            adds.add(q);
                        }
                    }
                    //不合格
                    if (row.isUnqualified() && !row.isQualified()) {
                        HiddenDangerReportDetail uq = new HiddenDangerReportDetail();
                        //重大危险
                        if (cu.getLevel() == 2) {
                            report.setMajornum(report.getMajornum() + 1);
                        }else{
                            report.setNormalnum(report.getNormalnum() + 1);
                        }
                        //未处理完个数
                        if (cu.getRectifystatus() == 1) {
                            report.setUndealnum(report.getUndealnum() + 1);
                        }
                        uq.setChecktypeid(row.getChecktypeid());
                        uq.setResultid(cu.getResultid());
                        uq.setFindtime(cu.getFindtime());
                        uq.setLevel(cu.getLevel());
                        uq.setReportcode(checkReportVo.getReportcode());
                        uq.setRectifyprincipal(cu.getRectifyprincipal());
                        uq.setMemo(cu.getMemo());
                        uq.setRectifystatus(cu.getRectifystatus());
                        uq.setLevel(cu.getLevel());
                        uq.setRectifycompletedate(cu.getRectifycompletedate());
                        uq.setRectifymeasure(cu.getRectifymeasure());
                        uq.setRectifydeadline(cu.getRectifydeadline());
                        uq.setUrl(cu.getUrl());
                        if (cu.getId() != null) {
                            uq.setId(cu.getId());
                            uq.setIsqualified(false);
                            upds2Unqualified.add(uq);
                        }else{
                            uq.setIsqualified(false);
                            uq.setValidflag(true);
                            adds.add(uq);
                        }
                    }
                    //删除数据
                    if (!row.isUnqualified() && !row.isQualified()) {
                        if (cu.getId() != null) {
                            HiddenDangerReportDetail deleteOne = new HiddenDangerReportDetail();
                            deleteOne.setId(cu.getId());
                            deleteOne.setValidflag(false);
                            dels.add(deleteOne);
                        }
                    }
                }
                if (adds.size() > 0) {
                    hiddenDangerReportDetailService.saveBatch(adds);
                }
                if (upds2Unqualified.size() > 0) {
                    hiddenDangerReportDetailService.updateBatchById(upds2Unqualified);
                }
                if (upds2Qualified.size() > 0) {
                    hiddenDangerReportDetailService.update2Qualified(upds2Qualified);
                }
                report.setTotalnum(adds.size() + upds2Unqualified.size() + upds2Qualified.size());
                if (dels.size() > 0) {
                    hiddenDangerReportDetailService.updateBatchById(dels);
                }
            }
            this.updateById(report);
        }
    }
    /**
    * @Description: 文件上传
    * @date 2021/4/9 14:57
    */
    @Override
    public String upload(MultipartFile file) {
        try {
            String name = UploadUtil.uploadFile(file, Properties.transportCertificatePath);
            return Properties.transportCertificate + name;
        } catch (Exception e) {
            e.printStackTrace();
            throw new BusinessException("上传文件失败,请联系管理员");
        }
    }
    /**
    * @Description: 查看检查单子
    * @date 2021/4/13 10:12
    */
    @Override
    public List<HiddenDangerTableRow> viewReport(String code) {
        return hiddenDangerReportMapper.viewReport(code);
    }
    /**
    * @Description: 提交单子,更新单子状态->已提交
    * @date 2021/4/13 9:41
    */
    @Override
    public void commitReport(String code) {
        hiddenDangerReportMapper.updateStatusByCode(HiddenDangerReportStatus.COMMITTED,code);
    }
    /**
    * @Description: 修改检查
    * @date 2021/4/13 10:12
    */
    @Override
    public void checkMod(CheckReportVo checkReportVo) {
        HiddenDangerReport report = this.getById(checkReportVo.getReportid());
        if (report.getStatus() == HiddenDangerReportStatus.COMMITTED) {
            throw new BusinessException("已提交状态无法修改");
        }
    }
    /**
    * @Description: 重复提交判断
    * @date 2021/4/13 10:10
    */
    @Override
    public void checkCommit(String code) {
        HiddenDangerReport report = this.getReportByCode(code);
        if (report.getStatus() == HiddenDangerReportStatus.COMMITTED) {
            throw new BusinessException("不能重复提交");
        }
    }
    /**
    * @Description: 根据code获取单子的基本数据
    * @date 2021/4/13 10:12
    */
    @Override
    public HiddenDangerReport getReportByCode(String code) {
        return hiddenDangerReportMapper.getReportByCode(code);
    }
    /**
    * @Description: 报告新增不能为空
    * @date 2021/4/15 16:47
    */
    @Override
    public void checkAdd(CheckReportVo checkReportVo, UserInfo user) {
        if (StringUtils.isBlank(user.getCompanynumber())) {
            throw new BusinessException("没有权限新建");
        }
        if (StringUtils.isBlank(checkReportVo.getApplyperson())) {
            throw new BusinessException("报告人不能为空");
        }
    }
    /**
    * @Description: 导出隐患自检目录
    * @date 2021/4/19 16:39
    */
    @Override
    public List<Map> selectExportReport(Map filter, UserInfo user) {
        UserInfo userInfo = userService.getById(user.getId());
        Map<String, Object> params = new HashMap<>();
        //监管部门(companyid = null)可视范围为已提交的,否则只能看自己提交的信息
        params.put("enterprisenumber", userInfo.getCompanynumber());
        params.put("committed", HiddenDangerReportStatus.COMMITTED);
        // 过滤条件
        params.put("province", user.getProvince());
        params.put("city", user.getCity());
        params.put("district", user.getArea());
        params.put("street", user.getTown());
        params.put("committee", user.getCommunity());
        params.put("filterProvince", filter.get("province"));
        params.put("filterCity", filter.get("city"));
        params.put("filterDistrict", filter.get("district"));
        params.put("filterStreet", filter.get("street"));
        params.put("filterCommittee", filter.get("committee"));
        params.put("safetysupervision", filter.get("safetysupervision"));
        params.put("cycle", filter.get("cycle"));
        params.put("enterprisename", filter.get("enterprisename"));
        params.put("starttime", filter.get("starttime"));
        params.put("endtime", filter.get("endtime"));
        params.put("range", filter.get("range"));
        List<Map> reports = hiddenDangerReportMapper.selectExportReport(params);
        if (reports.size() > 0) {
            for (Map report : reports) {
                report.put("overduenum", hiddenDangerReportDetailService.countOverdueByReportCode((String) report.get("code")));
            }
        }
        return reports;
    }
}