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 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 rows = jsonArray.toJavaList(HiddenDangerTableRow.class); List 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 page, Map filter,UserInfo user) { UserInfo userInfo = userService.getById(user.getId()); Map 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 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 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 rows = jsonArray.toJavaList(HiddenDangerTableRow.class); List adds; List upds2Unqualified; List upds2Qualified; List 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 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 selectExportReport(Map filter, UserInfo user) { UserInfo userInfo = userService.getById(user.getId()); Map 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 reports = hiddenDangerReportMapper.selectExportReport(params); if (reports.size() > 0) { for (Map report : reports) { report.put("overduenum", hiddenDangerReportDetailService.countOverdueByReportCode((String) report.get("code"))); } } return reports; } }