| package com.dy.pipIrrApp.issue; | 
|   | 
| import com.alibaba.fastjson2.JSON; | 
| import com.alibaba.fastjson2.JSONArray; | 
| import com.alibaba.fastjson2.JSONObject; | 
| import com.dy.common.util.NumUtil; | 
| import com.dy.common.webUtil.QueryResultVo; | 
| import com.dy.common.webUtil.ResultCodeMsg; | 
| import com.dy.pipIrrApp.issue.dto.DtoDeleteParam; | 
| import com.dy.pipIrrApp.issue.qo.QoIssueReport; | 
| import com.dy.pipIrrGlobal.daoOp.OpeIssueReportMapper; | 
| import com.dy.pipIrrGlobal.daoOp.OpeReportReplyMapper; | 
| import com.dy.pipIrrGlobal.dyFile.FileOperate; | 
| import com.dy.pipIrrGlobal.dyFile.FileRestVo; | 
| import com.dy.pipIrrGlobal.pojoOp.OpeIssueReport; | 
| import com.dy.pipIrrGlobal.pojoOp.OpeReportReply; | 
| import com.dy.pipIrrGlobal.voOp.VoIssueReport; | 
| import com.dy.pipIrrGlobal.voOp.VoIssueReportReply; | 
| import com.dy.pipIrrGlobal.voOp.VoIssueReport_temp; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.apache.dubbo.common.utils.PojoUtils; | 
| import org.springframework.beans.BeanUtils; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.beans.factory.annotation.Value; | 
| import org.springframework.stereotype.Service; | 
|   | 
| import java.util.*; | 
|   | 
| /** | 
|  * @author ZhuBaoMin | 
|  * @date 2024-11-11 16:29 | 
|  * @LastEditTime 2024-11-11 16:29 | 
|  * @Description | 
|  */ | 
|   | 
| @Slf4j | 
| @Service | 
| public class IssueSv { | 
|     @Autowired | 
|     private OpeIssueReportMapper opeIssueReportMapper; | 
|   | 
|     @Autowired | 
|     private OpeReportReplyMapper opeReportReplyMapper; | 
|   | 
|     @Value("${dy.webFile.fmUrl}") | 
|     private String fmUrl ; | 
|   | 
|     @Autowired | 
|     private FileOperate fileOp ; | 
|   | 
|     private void dealWebFilePath(JSONArray jsonArray, boolean hasZipFile, boolean isVideo){ | 
|         for (Object obj : jsonArray){ | 
|             if(obj instanceof JSONObject){ | 
|                 JSONObject jsonObject = (JSONObject) obj; | 
|                 Object hashObj = jsonObject.get("hash") ; | 
|                 if(hashObj != null && NumUtil.isIntNumber(hashObj.toString())){ | 
|                     FileRestVo fvo = fileOp.parseHashcode(fmUrl, Integer.valueOf(hashObj.toString())); | 
|                     if(fvo != null && fvo.fileWebUrl != null){ | 
|                         jsonObject.put("webPath", fvo.fileWebUrl + jsonObject.get("filePath")); | 
|                         if(hasZipFile){ | 
|                             if(!isVideo){ | 
|                                 jsonObject.put("webPathZip", fileOp.getFileZipPath(fvo.fileWebUrl + jsonObject.get("filePath"))); | 
|                             }else{ | 
|                                 jsonObject.put("webPathZip", fileOp.getFileZipPath(fvo.fileWebUrl + jsonObject.get("filePath"), "jpg")); | 
|                             } | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|     } | 
|     /** | 
|      * 添加巡检员问题上报 | 
|      * @param po | 
|      * @return | 
|      */ | 
|     public String addIssueReport(OpeIssueReport po) { | 
|         po.setReportTime(new Date()); | 
|         po.setState((byte)1); | 
|         opeIssueReportMapper.insert(po); | 
|         Long issueReportId = po.getId(); | 
|         if(issueReportId == null) { | 
|             return "巡检员问题上报失败"; | 
|         } | 
|   | 
|         return "success"; | 
|     } | 
|   | 
|     /** | 
|      * 根据条件获取巡检员问题上报记录 | 
|      * @param queryVo | 
|      * @return | 
|      */ | 
|     public QueryResultVo<List<VoIssueReport>> getIssueReports(QoIssueReport queryVo) { | 
|         //完善查询充值记录的起止时间 | 
|         String timeStart = queryVo.getTimeStart(); | 
|         String timeStop = queryVo.getTimeStop(); | 
|         if (timeStart != null) { | 
|             timeStart = timeStart + " 00:00:00"; | 
|             queryVo.setTimeStart(timeStart); | 
|         } | 
|         if (timeStop != null) { | 
|             timeStop = timeStop + " 23:59:59"; | 
|             queryVo.setTimeStop(timeStop); | 
|         } | 
|   | 
|         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo); | 
|   | 
|         Long itemTotal = opeIssueReportMapper.getIssueReportsCount(params); | 
|         //QueryResultVo<List<VoIssueReport_temp>> rsVo = new QueryResultVo<>(); | 
|         QueryResultVo<List<VoIssueReport>> rsVo = new QueryResultVo<>(); | 
|   | 
|         rsVo.pageSize = queryVo.pageSize; | 
|         rsVo.pageCurr = queryVo.pageCurr; | 
|   | 
|         rsVo.calculateAndSet(itemTotal, params); | 
|   | 
|         List<VoIssueReport_temp> list_temp = opeIssueReportMapper.getIssueReports(params); | 
|         List<VoIssueReport> list = new ArrayList<>(); | 
|         for (int i = 0; i < list_temp.size(); i++) { | 
|             VoIssueReport_temp report_temp = list_temp.get(i); | 
|             VoIssueReport report = new VoIssueReport(); | 
|             BeanUtils.copyProperties(report_temp, report); | 
|   | 
|             JSONArray images_array = Optional.ofNullable(JSON.parseArray(report_temp.getImages())).orElse(new JSONArray()); | 
|             JSONArray audios_array = Optional.ofNullable(JSON.parseArray(report_temp.getAudios())).orElse(new JSONArray()); | 
|             JSONArray videos_array = Optional.ofNullable(JSON.parseArray(report_temp.getVideos())).orElse(new JSONArray()); | 
|             this.dealWebFilePath(images_array, true, false) ; | 
|             this.dealWebFilePath(audios_array, false, false) ; | 
|             this.dealWebFilePath(videos_array, true, true) ; | 
|             report.setImages(images_array); | 
|             report.setAudios(audios_array); | 
|             report.setVideos(videos_array); | 
|             list.add(report); | 
|         } | 
|   | 
|         rsVo.obj = list; | 
|         //rsVo.obj = opeIssueReportMapper.getIssueReports(params); | 
|         return rsVo; | 
|     } | 
|   | 
|     /** | 
|      * 根据问题上报记录主键获取获取巡检员问题上报记录视图对象 | 
|      * @param issueReportId | 
|      * @return | 
|      */ | 
|     public VoIssueReport getIssueReportById(Long issueReportId) { | 
|         VoIssueReport_temp issueReport = opeIssueReportMapper.getIssueReportById(issueReportId); | 
|   | 
|         VoIssueReport report = new VoIssueReport(); | 
|         BeanUtils.copyProperties(issueReport, report); | 
|   | 
|         JSONArray images_array = Optional.ofNullable(JSON.parseArray(issueReport.getImages())).orElse(new JSONArray()); | 
|         JSONArray audios_array = Optional.ofNullable(JSON.parseArray(issueReport.getAudios())).orElse(new JSONArray()); | 
|         JSONArray videos_array = Optional.ofNullable(JSON.parseArray(issueReport.getVideos())).orElse(new JSONArray()); | 
|         this.dealWebFilePath(images_array, true, false) ; | 
|         this.dealWebFilePath(audios_array, false, false) ; | 
|         this.dealWebFilePath(videos_array, true, true) ; | 
|   | 
|         report.setImages(images_array); | 
|         report.setAudios(audios_array); | 
|         report.setVideos(videos_array); | 
|         return report; | 
|     } | 
|   | 
|     /** | 
|      * 逻辑删除巡检员问题上报,删除前先判断要删除的上报是否存在 | 
|      * @param po | 
|      * @return | 
|      */ | 
|     public String deleteIssueReport(DtoDeleteParam po) { | 
|         // 根据上报ID及巡检员ID获取未删除的上报,删除上报判断使用 | 
|         OpeIssueReport opeIssueReport = opeIssueReportMapper.getReport(po.getIssueReportId(), po.getInspectorId()); | 
|         if(opeIssueReport == null) { | 
|             return "您要删除的问题上报不存在"; | 
|         } | 
|   | 
|         if(opeIssueReportMapper.deleteIssueReport(po.getIssueReportId()) == 0) { | 
|             return "巡检员问题上报删除失败"; | 
|         } | 
|   | 
|         return "success"; | 
|     } | 
|   | 
|     /** | 
|      * 添加巡检员问题上报回复 | 
|      *  添加问题上报回复记录 | 
|      *  问题上报状态改为已回复 | 
|      * @param po | 
|      * @return | 
|      */ | 
|     public String replyReport(OpeReportReply po) { | 
|         po.setReplyTime(new Date()); | 
|         opeReportReplyMapper.insert(po); | 
|         if(po.getId() == 0) { | 
|             return "回复记录添加失败"; | 
|         } | 
|   | 
|         OpeIssueReport issueReport = new OpeIssueReport(); | 
|         issueReport.setId(po.getReportId()); | 
|         issueReport.setState((byte)2); | 
|         Integer rec = opeIssueReportMapper.updateByPrimaryKeySelective(issueReport); | 
|         if(rec == 0) { | 
|             return "巡检员问题上报状态修改失败"; | 
|         } | 
|         return "sucess"; | 
|     } | 
|   | 
|     /** | 
|      * 获取上报回复信息 | 
|      * @param reportId | 
|      * @return | 
|      */ | 
|     public JSONObject getReportReply(Long reportId) { | 
|         JSONObject result = new JSONObject(); | 
|         if(reportId == null) { | 
|             result.put("code", ResultCodeMsg.RsCode.ERROR_CODE); | 
|             result.put("msg","请选择一个问题上报"); | 
|             return result; | 
|         } | 
|   | 
|         VoIssueReportReply issueReportReply = opeReportReplyMapper.getReportReplyByReportId(reportId); | 
|         if(issueReportReply != null) { | 
|             result.put("code", ResultCodeMsg.RsCode.SUCCESS_CODE); | 
|             result.put("msg","success"); | 
|             result.put("data", issueReportReply); | 
|             return result; | 
|         } | 
|         result.put("code", ResultCodeMsg.RsCode.ERROR_CODE); | 
|         result.put("msg","未获取到上报回复信息"); | 
|         return result; | 
|   | 
|     } | 
|   | 
| } |