09-23-工单纪录
This commit is contained in:
		| @ -6,6 +6,8 @@ import lombok.RequiredArgsConstructor; | ||||
| import jakarta.servlet.http.HttpServletResponse; | ||||
| import jakarta.validation.constraints.*; | ||||
| import cn.dev33.satoken.annotation.SaCheckPermission; | ||||
| import org.dromara.inspection.domain.vo.OrderRecordVo; | ||||
| import org.dromara.inspection.service.impl.OpsInspectionOrderServiceImpl; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
| import org.dromara.common.idempotent.annotation.RepeatSubmit; | ||||
| @ -35,7 +37,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||
| @RequestMapping("/order") | ||||
| public class OpsInspectionOrderController extends BaseController { | ||||
|  | ||||
|     private final IOpsInspectionOrderService opsInspectionOrderService; | ||||
|     private final OpsInspectionOrderServiceImpl opsInspectionOrderService; | ||||
|  | ||||
|     /** | ||||
|      * 查询运维-巡检-工单列表 | ||||
| @ -103,4 +105,13 @@ public class OpsInspectionOrderController extends BaseController { | ||||
|                           @PathVariable("ids") Long[] ids) { | ||||
|         return toAjax(opsInspectionOrderService.deleteWithValidByIds(List.of(ids), true)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取纪录 | ||||
|      */ | ||||
|     @SaCheckPermission("inspection:order:record") | ||||
|     @GetMapping("/record") | ||||
|     public R<OrderRecordVo> record(Long projectId) { | ||||
|         return opsInspectionOrderService.record(projectId); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -71,7 +71,7 @@ public class OpsInspectionOrder extends BaseEntity { | ||||
|     /** | ||||
|      * 文件ID | ||||
|      */ | ||||
|     private Long fileId; | ||||
|     private String fileId; | ||||
|  | ||||
|     /** | ||||
|      * 文件路径 | ||||
|  | ||||
| @ -77,7 +77,7 @@ public class OpsInspectionOrderBo extends BaseEntity { | ||||
|     /** | ||||
|      * 文件ID | ||||
|      */ | ||||
|     private Long fileId; | ||||
|     private String fileId; | ||||
|  | ||||
|     /** | ||||
|      * 文件路径 | ||||
|  | ||||
| @ -9,6 +9,7 @@ import cn.idev.excel.annotation.ExcelProperty; | ||||
| import io.github.linpeilie.annotations.AutoMapper; | ||||
| import lombok.Data; | ||||
| import org.dromara.personnel.domain.vo.OpsUserVo; | ||||
| import org.dromara.system.api.domain.vo.RemoteUserVo; | ||||
|  | ||||
| import java.io.Serial; | ||||
| import java.io.Serializable; | ||||
| @ -87,7 +88,7 @@ public class OpsInspectionOrderVo implements Serializable { | ||||
|      * 文件ID | ||||
|      */ | ||||
|     @ExcelProperty(value = "文件ID") | ||||
|     private Long fileId; | ||||
|     private String fileId; | ||||
|  | ||||
|     /** | ||||
|      * 文件路径 | ||||
| @ -149,7 +150,7 @@ public class OpsInspectionOrderVo implements Serializable { | ||||
|  | ||||
|     private Long getOrderPerson; | ||||
|  | ||||
|     private OpsUserVo getOrderPersonVo; | ||||
|     private RemoteUserVo getOrderPersonVo; | ||||
|  | ||||
|     /** | ||||
|      * 完成时间 | ||||
| @ -169,8 +170,10 @@ public class OpsInspectionOrderVo implements Serializable { | ||||
|     @ExcelProperty(value = "是否重点跟踪1是2否") | ||||
|     private String point; | ||||
|  | ||||
|     private Long create_by; | ||||
|     private Date createTime; | ||||
|  | ||||
|     private OpsUserVo sendOrderPersonVo; | ||||
|     private Long createBy; | ||||
|  | ||||
|     private RemoteUserVo sendOrderPersonVo; | ||||
|  | ||||
| } | ||||
|  | ||||
| @ -0,0 +1,43 @@ | ||||
| package org.dromara.inspection.domain.vo; | ||||
|  | ||||
| import lombok.Data; | ||||
|  | ||||
| @Data | ||||
| public class OrderRecordVo { | ||||
|  | ||||
|     /** | ||||
|      * 本月派单数 | ||||
|      */ | ||||
|     private String bypds; | ||||
|  | ||||
|     /** | ||||
|      * 拍单数增长率 | ||||
|      */ | ||||
|     private String pdzzl; | ||||
|  | ||||
|     /** | ||||
|      * 平均响应时间 | ||||
|      */ | ||||
|     private String pjxysj; | ||||
|  | ||||
|     /** | ||||
|      * 响应时间增长率 | ||||
|      */ | ||||
|     private String xysjzzl; | ||||
|  | ||||
|     /** | ||||
|      * 待接收工单 | ||||
|      */ | ||||
|     private String djsgd; | ||||
|  | ||||
|     /** | ||||
|      * 按时完成率 | ||||
|      */ | ||||
|     private String aswcl; | ||||
|  | ||||
|     /** | ||||
|      * 完成增长率 | ||||
|      */ | ||||
|     private String wczzl; | ||||
|  | ||||
| } | ||||
| @ -103,6 +103,7 @@ public class OpsInspectionNodeServiceImpl implements IOpsInspectionNodeService { | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| //            log.info("{}", StringUtils.join(ids, ",")); | ||||
|             return R.ok(StringUtils.join(ids, ",")); | ||||
|         }else{ | ||||
|             return R.fail(); | ||||
|  | ||||
| @ -1,5 +1,7 @@ | ||||
| package org.dromara.inspection.service.impl; | ||||
|  | ||||
| import org.apache.dubbo.config.annotation.DubboReference; | ||||
| import org.dromara.common.core.domain.R; | ||||
| import org.dromara.common.core.utils.MapstructUtils; | ||||
| import org.dromara.common.core.utils.StringUtils; | ||||
| import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||
| @ -11,24 +13,27 @@ import lombok.RequiredArgsConstructor; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
| import org.dromara.common.satoken.utils.LoginHelper; | ||||
| import org.dromara.inspection.domain.OpsInspectionNode; | ||||
| import org.dromara.inspection.domain.vo.OpsInspectionNodeVo; | ||||
| import org.dromara.inspection.domain.bo.OpsInspectionRepairBo; | ||||
| import org.dromara.inspection.domain.vo.*; | ||||
| import org.dromara.inspection.mapper.OpsInspectionNodeMapper; | ||||
| import org.dromara.personnel.domain.vo.OpsUserVo; | ||||
| import org.dromara.personnel.mapper.OpsUserMapper; | ||||
| import org.dromara.resource.api.RemoteFileService; | ||||
| import org.dromara.system.api.RemoteUserService; | ||||
| import org.dromara.system.api.domain.vo.RemoteUserVo; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.dromara.inspection.domain.bo.OpsInspectionOrderBo; | ||||
| import org.dromara.inspection.domain.vo.OpsInspectionOrderVo; | ||||
| import org.dromara.inspection.domain.OpsInspectionOrder; | ||||
| import org.dromara.inspection.mapper.OpsInspectionOrderMapper; | ||||
| import org.dromara.inspection.service.IOpsInspectionOrderService; | ||||
|  | ||||
| import java.math.BigDecimal; | ||||
| import java.math.RoundingMode; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Collection; | ||||
| import java.time.LocalDate; | ||||
| import java.time.ZoneId; | ||||
| import java.util.*; | ||||
| import java.util.concurrent.TimeUnit; | ||||
|  | ||||
| /** | ||||
|  * 运维-巡检-工单Service业务层处理 | ||||
| @ -46,7 +51,10 @@ public class OpsInspectionOrderServiceImpl implements IOpsInspectionOrderService | ||||
|  | ||||
|     private final OpsInspectionNodeMapper nodeMapper; | ||||
|  | ||||
|     private final OpsUserMapper userMapper; | ||||
|     @DubboReference | ||||
|     private RemoteFileService remoteFileService; | ||||
|     @DubboReference | ||||
|     private RemoteUserService remoteUserService; | ||||
|  | ||||
|     /** | ||||
|      * 查询运维-巡检-工单 | ||||
| @ -111,6 +119,21 @@ public class OpsInspectionOrderServiceImpl implements IOpsInspectionOrderService | ||||
|     public Boolean insertByBo(OpsInspectionOrderBo bo) { | ||||
|         OpsInspectionOrder add = MapstructUtils.convert(bo, OpsInspectionOrder.class); | ||||
|         validEntityBeforeSave(add); | ||||
|  | ||||
|         if (add.getFileId() != null){ | ||||
|             String[] split = add.getFileId().split(","); | ||||
|             List<String> urls = new ArrayList<>(); | ||||
|             for (String s : split) { | ||||
|                 String ossUrl = remoteFileService.selectUrlByIds(s); | ||||
|                 if (ossUrl != null){ | ||||
|                     urls.add(ossUrl); | ||||
|                 } | ||||
|             } | ||||
|             String join = String.join(",", urls); | ||||
|             add.setFileUrl(join); | ||||
|             bo.setFileUrl(join); | ||||
|         } | ||||
|  | ||||
|         boolean flag = baseMapper.insert(add) > 0; | ||||
|         if (flag) { | ||||
|             bo.setId(add.getId()); | ||||
| @ -177,16 +200,16 @@ public class OpsInspectionOrderServiceImpl implements IOpsInspectionOrderService | ||||
|             } | ||||
|  | ||||
|             //处理派单人 | ||||
|             OpsUserVo opsUserVo = userMapper.selectVoById(vo.getCreate_by()); | ||||
|             if (opsUserVo !=  null){ | ||||
|                 vo.setSendOrderPersonVo(opsUserVo); | ||||
|             List<RemoteUserVo> remoteUserVos = remoteUserService.selectListByIds(List.of(vo.getCreateBy())); | ||||
|             if (remoteUserVos !=  null && !remoteUserVos.isEmpty()){ | ||||
|                 vo.setSendOrderPersonVo(remoteUserVos.getFirst()); | ||||
|             } | ||||
|  | ||||
|             //处理接单人 | ||||
|             if (vo.getGetOrderPerson() != null){ | ||||
|                 opsUserVo = userMapper.selectVoById(vo.getGetOrderPerson()); | ||||
|                 if (opsUserVo != null){ | ||||
|                     vo.setGetOrderPersonVo(opsUserVo); | ||||
|                 remoteUserVos = remoteUserService.selectListByIds(Collections.singletonList(vo.getGetOrderPerson())); | ||||
|                 if (remoteUserVos !=  null && !remoteUserVos.isEmpty()){ | ||||
|                     vo.setGetOrderPersonVo(remoteUserVos.getFirst()); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
| @ -206,4 +229,66 @@ public class OpsInspectionOrderServiceImpl implements IOpsInspectionOrderService | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取纪录 | ||||
|      */ | ||||
|     public R<OrderRecordVo> record(Long projectId){ | ||||
|         //变量初始化 | ||||
|         OrderRecordVo recordVo = new OrderRecordVo(); | ||||
|  | ||||
|         OpsInspectionOrderBo bo = new OpsInspectionOrderBo(); | ||||
|         bo.setProjectId(projectId); | ||||
|         //日期初始化 | ||||
|         Date startDate = Date.from(LocalDate.now().withDayOfMonth(1).atStartOfDay(ZoneId.systemDefault()).toInstant()); | ||||
|         Date endDate = Date.from(LocalDate.now().withDayOfMonth(1).plusMonths(1).minusDays(1).atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant()); | ||||
|         //查询当前项目的本月数据 | ||||
|         List<OpsInspectionOrderVo> vos = queryList(bo); | ||||
|         //过滤本月数据 | ||||
|         List<OpsInspectionOrderVo> thisMonth = vos.stream() | ||||
|             .filter(vo -> vo.getCreateTime().after(startDate)) | ||||
|             .filter(vo -> vo.getCreateTime().before(endDate)) | ||||
|             .toList(); | ||||
|         //本月派单总数 | ||||
|         BigDecimal bypdzs = BigDecimal.valueOf(thisMonth.size()); | ||||
|         //统计平均响应时间 | ||||
|         Long zgxysj = 0L;//总共响应时间 | ||||
|         for (OpsInspectionOrderVo orderVo : thisMonth) { | ||||
|             if (orderVo.getGetOrderTime() != null) { | ||||
|                 zgxysj += orderVo.getGetOrderTime().getTime() - orderVo.getCreateTime().getTime(); | ||||
|             } | ||||
|         } | ||||
|         //平均响应时间 | ||||
|         BigDecimal avg = BigDecimal.valueOf(TimeUnit.MILLISECONDS.toMinutes(zgxysj)); | ||||
|         //统计待接收工单 | ||||
|         int waiting = thisMonth.stream().filter(vo -> vo.getStatus().equals("2")).toList().size(); | ||||
|         //待接单数 | ||||
|         BigDecimal djds = BigDecimal.valueOf(waiting); | ||||
|         //按时完成率 找到完成的工单 获取工单完成时间 | ||||
|  | ||||
|         //获取所有完成数 | ||||
|         int sywcs = thisMonth.stream() | ||||
|             .filter(vo -> vo.getStatus().equals("4")) | ||||
|             .toList().size(); | ||||
|  | ||||
|         //获取按时完成数 | ||||
|         int aswcs = thisMonth.stream() | ||||
|             .filter(vo -> vo.getStatus().equals("4")) | ||||
|             .filter(vo -> vo.getFinishiOrderTime().before(endDate)) | ||||
|             .toList().size(); | ||||
|         //按时完成率 | ||||
|         BigDecimal aswcl; | ||||
|         if (sywcs > 0) { | ||||
|             aswcl = BigDecimal.valueOf(aswcs).divide(BigDecimal.valueOf(sywcs), 2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100.00)); | ||||
|         }else { | ||||
|             aswcl = BigDecimal.valueOf(0); | ||||
|         } | ||||
|  | ||||
|         recordVo.setBypds(String.valueOf(bypdzs)); | ||||
|         recordVo.setPjxysj(String.valueOf(avg)); | ||||
|         recordVo.setDjsgd(String.valueOf(djds)); | ||||
|         recordVo.setAswcl(String.valueOf(aswcl)); | ||||
|  | ||||
|         return R.ok(recordVo); | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user