package com.dy.pipIrrApp.workOrder; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.dy.common.webUtil.QueryResultVo; import com.dy.pipIrrApp.workOrder.qo.QoWorkOrder; import com.dy.pipIrrGlobal.daoBa.BaUserMapper; import com.dy.pipIrrGlobal.daoOp.OpeApproveResultMapper; import com.dy.pipIrrGlobal.daoOp.OpeProcessingResultMapper; import com.dy.pipIrrGlobal.daoOp.OpeTaskTypeMapper; import com.dy.pipIrrGlobal.daoOp.OpeWorkOrderMapper; import com.dy.pipIrrGlobal.pojoOp.OpeApproveResult; import com.dy.pipIrrGlobal.pojoOp.OpeProcessingResult; import com.dy.pipIrrGlobal.pojoOp.OpeWorkOrder; import com.dy.pipIrrGlobal.voBa.VoRoleSimple; import com.dy.pipIrrGlobal.voOp.VoProcessingResult; import com.dy.pipIrrGlobal.voOp.VoProcessingResult_temp; import com.dy.pipIrrGlobal.voOp.VoTaskType; import com.dy.pipIrrGlobal.voOp.VoWorkOrder; 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.stereotype.Service; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Optional; /** * @author ZhuBaoMin * @date 2024-11-04 9:29 * @LastEditTime 2024-11-04 9:29 * @Description 工单服务类 */ @Slf4j @Service public class WorkOrderSv { @Autowired private OpeWorkOrderMapper opeWorkOrderMapper; @Autowired private OpeProcessingResultMapper opeProcessingResultMapper; @Autowired private OpeApproveResultMapper opeApproveResultMapper; @Autowired private OpeTaskTypeMapper opeTaskTypeMapper; @Autowired private BaUserMapper baUserMapper; /** * 添加工单记录 * @param po * @return */ public Long insertWorkOrder(OpeWorkOrder po) { po.setDispatchTime(new Date()); po.setState((byte) 1); po.setRejectTimes(0); po.setDeleted(0L); opeWorkOrderMapper.insert(po); return po.getId(); } /** * 获取指定派单人的指定未删除工单,删除工单前判断使用使用 * @param dispatcherId * @param workOrderId * @return */ public OpeWorkOrder getWorkOrder(Long workOrderId, Long dispatcherId) { return opeWorkOrderMapper.getWorkOrder(workOrderId, dispatcherId); } /** * 逻辑删除一个未删除的工单 * @param workOrderId * @return */ public Integer deleteWorkOrder(Long workOrderId) { return opeWorkOrderMapper.deleteWorkOrder(workOrderId); } /** * 根据指定条件获取工单 * @param qo * @return */ public QueryResultVo> getWorkOrders(QoWorkOrder qo) { qo.completionTime() ; Map params = (Map) PojoUtils.generalize(qo); Long itemTotal = opeWorkOrderMapper.getWorkOrdersCount(params); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = opeWorkOrderMapper.getWorkOrders(params); return rsVo ; } /** * 根据工单主键获取工单视图对象 * @param workOrderId * @return */ public VoWorkOrder getWorkOrderById(Long workOrderId) { return opeWorkOrderMapper.getWorkOrderById(workOrderId); } /** * 上报工单处理结果 * @param po * @return */ public String addProcessingResult(OpeProcessingResult po) { String result = ""; OpeProcessingResult processingResult = opeProcessingResultMapper.getByWorkOrderId(po.getWorkOrderId()); if(processingResult == null) { // 无处理结果上报处理结果 po.setReportTime(new Date()); po.setState((byte)1); po.setDeleted(0L); opeProcessingResultMapper.insert(po); if(po.getId() == 0) { result = "工单处理结果上报失败"; return result; } result = "success"; return result; } switch (processingResult.getState()) { case 1: result = "工单处理结果已上报,请勿重复上报"; break; case 2: result = "工单处理结果已通过"; break; case 3: // 处理结果被驳回时,删除当前处理结果,上报新的处理结果 processingResult.setDeleted(System.currentTimeMillis()/1000); opeProcessingResultMapper.updateByPrimaryKeySelective(processingResult); po.setReportTime(new Date()); po.setState((byte)1); po.setDeleted(0L); opeProcessingResultMapper.insert(po); result = "success"; break; } return result; } /** * 获取指定巡检员的指定未删除且未审批的处理结果上报,删除处理结果前判断使用使用 * @param proResultId * @param inspectorId * @return */ public OpeProcessingResult getProResult(Long proResultId, Long inspectorId) { return opeProcessingResultMapper.getProResult(proResultId, inspectorId); } /** * 逻辑删除一个未删除的处理结果 * @param proResultId * @return */ public Integer deleteProResult(Long proResultId) { return opeProcessingResultMapper.deleteProResult(proResultId); } /** * 获取处理结果详情 * @param proResultId * @return */ public VoProcessingResult getProResultById(Long proResultId) { VoProcessingResult_temp result_temp = opeProcessingResultMapper.getProResultById(proResultId); VoProcessingResult result = new VoProcessingResult(); BeanUtils.copyProperties(result_temp, result); JSONArray images_array = Optional.ofNullable(JSON.parseArray(result_temp.getImages())).orElse(new JSONArray()); JSONArray audios_array = Optional.ofNullable(JSON.parseArray(result_temp.getAudios())).orElse(new JSONArray()); JSONArray videos_array = Optional.ofNullable(JSON.parseArray(result_temp.getVideos())).orElse(new JSONArray()); result.setImages(images_array); result.setAudios(audios_array); result.setVideos(videos_array); return result; } /** * 审核工单处理结果 * 1. 判断指定的工单及处理结果是否存在且未完成 * 2. 添加审核记录 * 3. 如果审核通过 * 处理结果状态改为已通过 * 工单补充任务完成时间 * 工单状态改为已完成 * 4. 如果驳回 * 任务处理结果改为驳回 * 工单驳回次数加1 * @param po * @return */ public String approveProResult(OpeApproveResult po) { OpeProcessingResult processingResult = opeProcessingResultMapper.selectByPrimaryKey(po.getProcessingResultId()); if(processingResult == null || processingResult.getDeleted() != 0 || processingResult.getState() != 1) { return "处理结果不存在或已完成审核"; } OpeWorkOrder workOrder = opeWorkOrderMapper.selectByPrimaryKey(po.getWorkOrderId()); if(workOrder == null || workOrder.getDeleted() != 0 || workOrder.getState() == 2) { return "工单不存在或已完成"; } po.setApproveTime(new Date()); po.setDeleted(0L); if(opeApproveResultMapper.insert(po) == 0) { return "审核记录添加失败"; } if(po.getApproveResult() == 1) { // 审核通过 processingResult.setState((byte)2); opeProcessingResultMapper.updateByPrimaryKeySelective(processingResult); workOrder.setCompleteTime(processingResult.getCompleteTime()); workOrder.setState((byte)2); opeWorkOrderMapper.updateByPrimaryKeySelective(workOrder); } else { // 驳回 processingResult.setState((byte)3); opeProcessingResultMapper.updateByPrimaryKeySelective(processingResult); workOrder.setRejectTimes(workOrder.getRejectTimes() + 1); opeWorkOrderMapper.updateByPrimaryKeySelective(workOrder); } return "success"; } /** * 获取任务类型列表 * @return */ public List getTaskTypes() { return opeTaskTypeMapper.getTaskTypes(); } /** * 获取巡检员列表 * @param inspector * @return */ public List getInspectors(String inspector) { return baUserMapper.getInspectors(inspector); } }