ycl-common/src/main/java/constant/RedisConstant.java
@@ -6,4 +6,8 @@ //车辆、人脸在线率 Redis 每月数据中断次数 Hash key public final static String Check_Car_ViewConnect = "CarViewConnectNoData"; public final static String Check_Face_ViewConnect = "FaceViewConnectNoData"; /** 点位在线,hash的key */ public final static String ONLINE_KEY = "ONLINE_"; } ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java
@@ -24,7 +24,7 @@ /** * 工单号 */ private String workOrderNo; private String keyword; /** * 运维处理时间 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/OnlineThreadVO.java
New file @@ -0,0 +1,21 @@ package com.ycl.platform.domain.vo; import com.ycl.platform.domain.entity.WorkOrder; import lombok.Data; /** * 监测在线的线程返回对象 * * @author:xp * @date:2024/9/10 11:44 */ @Data public class OnlineThreadVO { private Boolean online; private String ip; private WorkOrder workOrder; } ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderDetailVO.java
New file @@ -0,0 +1,79 @@ package com.ycl.platform.domain.vo; import com.fasterxml.jackson.annotation.JsonFormat; import com.ycl.platform.base.AbsVo; import com.ycl.platform.domain.entity.WorkOrder; import lombok.Data; import org.springframework.beans.BeanUtils; import org.springframework.lang.NonNull; import java.time.LocalDateTime; import java.util.Date; import java.util.List; /** * 工单展示 * * @author xp * @since 2024-03-05 */ @Data public class WorkOrderDetailVO extends AbsVo { /** 工单号 */ private String workOrderNo; /** 状态 */ private String status; /** 运维单位 */ private Integer unitId; private String unitName; private String unitContact; private String unitContactPhone; /** 工单来源/设备名称 */ private String source; /** * 设备编号 */ private String serialNumber; /** * 处理时限 */ private Integer processingPeriod; /** * 是否重点点位 */ private Boolean important; /** 故障类型 */ private List<String> errorTypeList; /** 故障类型 */ private String errorType; /** 0未超时 1超时 */ private Integer overtime; /** 下发时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date distributeTime; /** * 是否报备 */ private Boolean hasReport; public static WorkOrderDetailVO getVoByEntity(@NonNull WorkOrder entity, WorkOrderDetailVO vo) { if(vo == null) { vo = new WorkOrderDetailVO(); } BeanUtils.copyProperties(entity, vo); return vo; } } ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderVO.java
@@ -7,6 +7,8 @@ import java.time.LocalDateTime; import java.util.Date; import java.util.List; import enumeration.general.WorkOrderStatusEnum; import org.springframework.lang.NonNull; import org.springframework.beans.BeanUtils; import io.swagger.annotations.ApiModel; @@ -27,7 +29,7 @@ private String workOrderNo; /** 状态 */ private String status; private WorkOrderStatusEnum status; /** 运维单位 */ private Integer unitId; ycl-server/src/main/java/com/ycl/platform/controller/ReportController.java
@@ -127,4 +127,11 @@ ExcelUtil<ReportVO> util = new ExcelUtil<>(ReportVO.class); util.exportExcel(response, list, "运维单位"); } @GetMapping("/list/{gb}") @ApiOperation(value = "根据国标码查报备", notes = "根据国标码查报备") public Result getListByGb(@PathVariable("gb") String gb) { return reportService.getListByGb(gb); } } ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java
@@ -1,9 +1,11 @@ package com.ycl.platform.controller; import com.ycl.platform.domain.entity.WorkOrderAuditingRecord; import com.ycl.platform.domain.form.*; import com.ycl.platform.domain.query.DistributeWorkOrderQuery; import com.ycl.platform.domain.query.WorkOrderQuery; import com.ycl.platform.domain.vo.DistributeWorkOrderVO; import com.ycl.platform.domain.vo.WorkOrderYwConditionRecordVO; import com.ycl.platform.service.WorkOrderService; import com.ycl.system.Result; import com.ycl.system.domain.group.Add; @@ -143,4 +145,27 @@ public Result list() { return workOrderService.all(); } @GetMapping("/detail/info/{workOrderNo}") @ApiOperation(value = "详情", notes = "详情") @PreAuthorize("@ss.hasPermi('work:order:detail')") public Result detailByNo(@PathVariable("workOrderNo") String workOrderNo) { return workOrderService.detailByNo(workOrderNo); } @GetMapping("/yw-condition-list/{workOrderNo}") @ApiOperation(value = "运维情况记录列表", notes = "运维情况记录列表") public Result ywCondition(@PathVariable String workOrderNo) { List<WorkOrderYwConditionRecordVO> data = workOrderService.selectYwConditionByYwId(workOrderNo); return Result.ok().data(data); } @GetMapping("/yw-auditing-list/{workOrderNo}") @ApiOperation(value = "运维审核记录", notes = "运维审核记录") public Result ywAuditingByYwId(@PathVariable String workOrderNo) { List<WorkOrderAuditingRecord> data = workOrderService.selectYwAuditingListByYwId(workOrderNo); return Result.ok().data(data); } } ycl-server/src/main/java/com/ycl/platform/mapper/ReportMapper.java
@@ -49,4 +49,12 @@ * @return */ List<Report> getTogether(@Param("pid") String pid); /** * 国标码查设备 * * @param gb * @return */ List<ReportVO> getListByGb(@Param("gb") String gb); } ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java
@@ -156,13 +156,14 @@ * * @return */ List<String> getDistinctIP(); List<TMonitor> getDistinctIP(); /** * 根据ip修改点位表的是否在线字段 * @param online * @param onlineList */ void updateOnline(@Param("online") UpdateOnlineVO online); void updateOnline(@Param("onlineList") List<UpdateOnlineVO> onlineList); /** * 点位在线率 ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderErrorTypeMapper.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ycl.platform.domain.entity.WorkOrderErrorType; import com.ycl.system.entity.SysDictData; import org.apache.ibatis.annotations.Param; import org.springframework.security.core.parameters.P; import org.springframework.stereotype.Repository; @@ -87,4 +88,11 @@ */ int addMany(@Param("errorTypeList") List<WorkOrderErrorType> errorTypeList); /** * 获取故障类型,连表字典 * * @param workOrderNo * @return */ List<SysDictData> getErrorList(@Param("workOrderNo") String workOrderNo); } ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java
@@ -5,6 +5,7 @@ import com.ycl.platform.domain.entity.WorkOrder; import com.ycl.platform.domain.query.*; import com.ycl.platform.domain.vo.DeviceInfoVO; import com.ycl.platform.domain.vo.WorkOrderDetailVO; import com.ycl.platform.domain.vo.WorkOrderVO; import com.ycl.platform.domain.vo.YwPointJobVO; import com.ycl.platform.domain.vo.screen.ScreenWorkOrderVO; @@ -92,4 +93,12 @@ * @return */ List<WorkOrder> getNotFinishedWorkOrders(@Param("list") List<String> serialNumberList); /** * 工单号查详情 * * @param workOrderNo * @return */ WorkOrderDetailVO detailByNo(@Param("workOrderNo") String workOrderNo); } ycl-server/src/main/java/com/ycl/platform/service/ReportService.java
@@ -109,4 +109,12 @@ * @return */ Result getTogether(String pid); /** * 国标码查报备记录 * * @param gb * @return */ Result getListByGb(String gb); } ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java
@@ -26,13 +26,12 @@ public interface WorkOrderService extends IService<WorkOrder> { /** * 系统内部的添加,下发 * 系统内部的添加 * * @param workOrderList * @return */ Boolean innerAddWorkOrder(List<WorkOrder> workOrderList); /** * 添加 @@ -216,4 +215,12 @@ * @return */ Result processImg(String workOrderNo); /** * 工单详情 * * @param workOrderNo * @return */ Result detailByNo(String workOrderNo); } ycl-server/src/main/java/com/ycl/platform/service/impl/ReportServiceImpl.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.platform.domain.dto.ReportImportDTO; import com.ycl.platform.domain.entity.*; @@ -386,4 +387,18 @@ } return Result.ok("操作成功"); } @Override public Result getListByGb(String gb) { List<ReportVO> list = baseMapper.getListByGb(gb); for (ReportVO report : list) { List<ReportErrorType> errors = new LambdaQueryChainWrapper<>(reportErrorTypeService.getBaseMapper()) .eq(ReportErrorType::getReportId, report.getId()) .orderByDesc(ReportErrorType::getCreateTime) .list(); String err = errors.stream().map(ReportErrorType::getErrorType).collect(Collectors.joining(",")); report.setErrorType(err); } return Result.ok().data(list); } } ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -26,6 +26,7 @@ import com.ycl.platform.wvp.WVPResult; import com.ycl.system.Result; import com.ycl.system.domain.SysConfig; import com.ycl.system.entity.SysDictData; import com.ycl.system.mapper.SysConfigMapper; import com.ycl.system.mapper.SysDictDataMapper; import com.ycl.system.model.LoginUser; @@ -55,11 +56,6 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import javax.imageio.ImageIO; import javax.swing.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.*; @@ -782,4 +778,19 @@ } return Result.ok().data(process); } @Override public Result detailByNo(String workOrderNo) { WorkOrderDetailVO workOrder = baseMapper.detailByNo(workOrderNo); // 是否报备 boolean hasReport = new LambdaQueryChainWrapper<>(reportMapper) .eq(Report::getSerialNumber, workOrder.getSerialNumber()) .exists(); workOrder.setHasReport(hasReport); // 故障类型 List<SysDictData> errorList = workOrderErrorTypeService.getBaseMapper().getErrorList(workOrder.getWorkOrderNo()); List<String> errList = errorList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList()); workOrder.setErrorTypeList(errList); return Result.ok().data(workOrder); } } ycl-server/src/main/java/com/ycl/task/ClearRedisTask.java
New file @@ -0,0 +1,28 @@ package com.ycl.task; import constant.RedisConstant; import lombok.RequiredArgsConstructor; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; /** * 定时清理redis中的数据 * * @author:xp * @date:2024/9/10 15:26 */ @RequiredArgsConstructor @Component("clearRedisTask") public class ClearRedisTask { private final RedisTemplate redisTemplate; /** * 清除在线监测的redis计离线次数 * */ public void clearOnlineData() { redisTemplate.delete(RedisConstant.ONLINE_KEY); } } ycl-server/src/main/java/com/ycl/task/UYTask.java
@@ -3,24 +3,33 @@ import com.alibaba.fastjson2.JSONObject; import com.mongodb.client.result.DeleteResult; import com.ycl.feign.UYClient; import com.ycl.platform.domain.entity.TMonitor; import com.ycl.platform.domain.entity.WorkOrder; import com.ycl.platform.domain.entity.YwPoint; import com.ycl.platform.domain.param.UY.*; import com.ycl.platform.domain.result.UY.RecordMetaDSumResult; import com.ycl.platform.domain.result.UY.*; import com.ycl.platform.domain.vo.OnlineThreadVO; import com.ycl.platform.domain.vo.UpdateOnlineVO; import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.platform.service.UYErrorTypeCheckService; import com.ycl.platform.service.WorkOrderService; import com.ycl.platform.service.YwPointService; import com.ycl.system.domain.SysConfig; import com.ycl.system.mapper.SysConfigMapper; import com.ycl.thread.OnlineCheckThread; import com.ycl.utils.DateUtils; import com.ycl.utils.http.HttpUtils; import com.ycl.utils.http.SelfHttpUtil; import constant.ApiConstants; import constant.RedisConstant; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatusCode; import org.springframework.http.ResponseEntity; @@ -30,14 +39,10 @@ import java.io.IOException; import java.net.InetAddress; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.*; import java.util.concurrent.*; import java.util.stream.Collectors; import java.util.stream.Stream; //优云对接数据任务 @Slf4j @@ -51,6 +56,9 @@ private final YwPointService pointService; private final TMonitorMapper monitorMapper; private final SelfHttpUtil selfHttpUtil; private final RedisTemplate redisTemplate; private final WorkOrderService workOrderService; private final SysConfigMapper sysConfigMapper; @Value("${youYun.tenantId}") private String tenantId; @@ -170,44 +178,51 @@ /** * 点位在线检测 */ public void pointOnline() { public void pointOnline() throws ExecutionException, InterruptedException { log.info("开始检测点位在线"); // 先查出设备IP集合 List<String> ipList = monitorMapper.getDistinctIP(); String prefix = "http://"; Date now = new Date(); for (String ip : ipList) { executorService.submit(() -> { // 先检测能否访问该ip的网页 ResponseEntity<Object> res = null; UpdateOnlineVO online = new UpdateOnlineVO(); online.setIp(ip); if ("127.0.0.1".equals(ip)) { online.setOnline(Boolean.FALSE); monitorMapper.updateOnline(online); return; } try { res = selfHttpUtil.get(prefix + ip, null, null); online.setOnline(Objects.nonNull(res) && HttpStatus.OK == res.getStatusCode()); } catch (Exception e) { online.setOnline(Boolean.FALSE); } online.setUpdateTime(now); // 如果http得到的不在线,那么再ping一下 boolean reachable = false; if (! online.getOnline()) { try { reachable = InetAddress.getByName(ip).isReachable(3000); } catch (IOException e) { e.printStackTrace(); } online.setOnline(reachable); } monitorMapper.updateOnline(online); }); Integer times = 2; SysConfig config = new SysConfig(); config.setConfigKey("DAY_OF_POINT_OUTLINE_TIMES"); SysConfig sysConfig = sysConfigMapper.selectConfig(config); if (Objects.nonNull(sysConfig)) { times = Integer.valueOf(sysConfig.getConfigValue()); } else { log.error("请配置离线次数,此次设置为默认值2"); } // 先查出设备IP集合 List<TMonitor> monitorList = monitorMapper.getDistinctIP(); List<Future<OnlineThreadVO>> futureList = new ArrayList<>(48); List<OnlineThreadVO> dataList = new ArrayList<>(48); for (TMonitor monitor : monitorList) { OnlineCheckThread thread = new OnlineCheckThread(monitor, redisTemplate, selfHttpUtil, times); Future<OnlineThreadVO> future = executorService.submit(thread); futureList.add(future); } for (Future<OnlineThreadVO> future : futureList) { dataList.add(future.get()); // get方法会阻塞,知道拿到结果才继续执行for } // 更新point表的在线标识 Date now = new Date(); List<UpdateOnlineVO> willUpdateList = dataList.stream().map(item -> { UpdateOnlineVO vo = new UpdateOnlineVO(); vo.setOnline(item.getOnline()); vo.setIp(item.getIp()); vo.setUpdateTime(now); return vo; }).collect(Collectors.toList()); monitorMapper.updateOnline(willUpdateList); // 工单 List<WorkOrder> workOrderList = dataList.stream() .filter(item -> Objects.nonNull(item.getWorkOrder())) .map(OnlineThreadVO::getWorkOrder) .collect(Collectors.toList()); if (CollectionUtils.isEmpty(workOrderList)) { return; } workOrderService.innerAddWorkOrder(workOrderList); log.info("点位在线监测完成"); } //点位在线率 ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java
New file @@ -0,0 +1,129 @@ package com.ycl.thread; import com.ycl.platform.domain.entity.TMonitor; import com.ycl.platform.domain.entity.WorkOrder; import com.ycl.platform.domain.vo.OnlineThreadVO; import com.ycl.platform.domain.vo.UpdateOnlineVO; import com.ycl.utils.http.SelfHttpUtil; import constant.RedisConstant; import enumeration.ErrorType; import enumeration.general.WorkOrderStatusEnum; import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import java.io.IOException; import java.net.InetAddress; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.concurrent.Callable; /** * @author:xp * @date:2024/9/10 11:43 */ @Slf4j public class OnlineCheckThread implements Callable<OnlineThreadVO> { private TMonitor monitor; private RedisTemplate redisTemplate; private SelfHttpUtil selfHttpUtil; private Integer times; public OnlineCheckThread(TMonitor monitor, RedisTemplate redisTemplate, SelfHttpUtil selfHttpUtil, Integer times) { this.monitor = monitor; this.redisTemplate = redisTemplate; this.selfHttpUtil = selfHttpUtil; this.times = times; } public Integer getTimes() { return times; } public void setTimes(Integer times) { this.times = times; } public SelfHttpUtil getSelfHttpUtil() { return selfHttpUtil; } public void setSelfHttpUtil(SelfHttpUtil selfHttpUtil) { this.selfHttpUtil = selfHttpUtil; } public TMonitor getMonitor() { return monitor; } public void setMonitor(TMonitor monitor) { this.monitor = monitor; } public RedisTemplate getRedisTemplate() { return redisTemplate; } public void setRedisTemplate(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } @Override public OnlineThreadVO call() throws Exception { // 先检测能否访问该ip的网页 ResponseEntity<Object> res = null; OnlineThreadVO vo = new OnlineThreadVO(); vo.setIp(monitor.getIp()); log.info("监测IP:" + monitor.getIp()); String prefix = "http://"; if ("127.0.0.1".equals(monitor.getIp())) { vo.setOnline(Boolean.FALSE); return vo; } try { res = selfHttpUtil.get(prefix + monitor.getIp(), null, null); vo.setOnline(Objects.nonNull(res) && HttpStatus.OK == res.getStatusCode()); } catch (Exception e) { vo.setOnline(Boolean.FALSE); } // 如果http得到的不在线,那么再ping一下 boolean reachable = false; if (!vo.getOnline()) { try { reachable = InetAddress.getByName(monitor.getIp()).isReachable(3000); } catch (IOException e) { e.printStackTrace(); } vo.setOnline(reachable); } if (!vo.getOnline()) { Integer outLineTimes = (Integer) redisTemplate.opsForHash().get(RedisConstant.ONLINE_KEY, monitor.getIp()); if (Objects.isNull(outLineTimes)) { outLineTimes = 1; } else { outLineTimes += 1; } redisTemplate.opsForHash().put(RedisConstant.ONLINE_KEY, monitor.getIp(), outLineTimes); // 一天内监测到离线1次以上,生成工单 if (outLineTimes >= times) { WorkOrder workOrder = new WorkOrder(); workOrder.setSerialNumber(monitor.getSerialNumber()); List<String> errList = new ArrayList<>(); errList.add(ErrorType.DEVICE_OFFLINE.getValue()); workOrder.setErrorTypeList(errList); workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED); vo.setWorkOrder(workOrder); } } return vo; } } ycl-server/src/main/resources/application-dev.yml
@@ -37,9 +37,9 @@ spring: # 数据源配置 datasource: url: jdbc:mysql://localhost:3306/zgyw?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true&allowPublicKeyRetrieval=true url: jdbc:mysql://101.35.247.188:3306/zgyw?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true&allowPublicKeyRetrieval=true username: root password: 1234 password: ycl@202466 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml
@@ -61,6 +61,34 @@ ORDER BY r.update_time DESC </select> <select id="getListByGb" resultType="com.ycl.platform.domain.vo.ReportVO"> SELECT DISTINCT r.id, r.report_materials, r.create_time, r.report_type, r.report_content, r.status, r.serial_number as pointId, r.begin_create_time, r.end_create_time, r.import_batch_number, r.update_time, u.unit_name, p.yw_person_name as peopleName, pt.point_name FROM t_report r INNER JOIN t_report_error_type ret ON ret.report_id = r.id and ret.deleted = 0 LEFT JOIN t_yw_unit u ON r.unit_id = u.id and u.deleted = 0 LEFT JOIN t_yw_people p ON r.people_id = p.id and p.deleted = 0 LEFT JOIN t_yw_point pt ON r.serial_number = pt.serial_number and pt.deleted = 0 WHERE r.serial_number = #{gb} AND r.deleted = 0 ORDER BY r.update_time DESC </select> <select id="examineRecord" resultMap="BaseResultMap"> SELECT r.*, u.unit_name, p.yw_person_name as peopleName, pt.point_name, ar.result, ar.result_remark, ar.create_time as auditing_time ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
@@ -594,16 +594,22 @@ serial_number in <foreach collection="gbList" open="(" separator="," close=")" item="no">#{no}</foreach> </select> <select id="getDistinctIP" resultType="string"> <select id="getDistinctIP" resultType="com.ycl.platform.domain.entity.TMonitor"> SELECT DISTINCT ip DISTINCT ip, serial_number FROM t_monitor </select> <update id="updateOnline"> update t_yw_ponit set online = #{online.online}, update_time = #{online.updateTime} WHERE EXISTS ( SELECT 1 FROM t_monitor WHERE ip = #{online.ip} AND t_monitor.serial_number = t_yw_point.serial_number ); <foreach collection="onlineList" item="online" separator=";"> UPDATE t_yw_point SET online = #{online.online}, update_time = #{online.updateTime} WHERE EXISTS (SELECT 1 FROM t_monitor WHERE ip = #{online.ip} AND t_monitor.serial_number = t_yw_point.serial_number) </foreach> </update> </mapper> ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml
@@ -97,4 +97,8 @@ </foreach> </insert> <select id="getErrorList" resultType="com.ycl.system.entity.SysDictData"> SELECT da.dict_value, da.dict_label FROM t_work_order_error_type oer INNER JOIN sys_dict_data da ON oer.error_name = da.dict_value WHERE oer.work_order_no = #{workOrderNo} </select> </mapper> ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
@@ -32,7 +32,17 @@ <select id="page" resultMap="BaseResultMap"> SELECT wo.id,wo.status, wo.work_order_no, wo.serial_number,wo.create_time, wo.unit_id, wo.yw_people_id, wo.yw_handle_time, wo.yw_result, wo.yw_check_result, wo.overtime, wo.deduct, wo.id,wo.status, wo.work_order_no, wo.serial_number, wo.create_time, wo.unit_id, wo.yw_people_id, wo.yw_handle_time, wo.yw_result, wo.yw_check_result, wo.overtime, wo.deduct, u.unit_name, p.yw_person_name, tm.name as source, @@ -52,14 +62,11 @@ <if test="query.unitId != null"> AND wo.unit_id = #{query.unitId} </if> <if test="query.workOrderNo != null and query.workOrderNo != ''"> AND wo.work_order_no = #{query.workOrderNo} <if test="query.keyword != null and query.keyword != ''"> AND (wo.work_order_no like concat('%', #{query.keyword}, '%') or tm.name like concat('%', #{query.keyword}, '%')) </if> <if test="query.status != null and query.status != ''"> AND wo.status = #{query.status} </if> <if test="query.status == null or query.status == ''"> AND wo.status = 'DISTRIBUTED' </if> <if test="query.start != null"> AND wo.yw_handle_time BETWEEN #{query.start} AND #{query.end} @@ -289,4 +296,24 @@ <result column="status" property="status" typeHandler="com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler"/> <result column="error_names" property="errorType"/> </resultMap> <select id="detailByNo" resultType="com.ycl.platform.domain.vo.WorkOrderDetailVO"> SELECT wo.id, wo.work_order_no, wo.serial_number, dr.create_time as distributeTime, m.name as source, yw.unit_name, yw.unit_contact, yw.unit_contact_phone, wo.overtime, wo.processing_period, wo.status FROM t_work_order wo INNER JOIN t_work_order_distribute_record dr ON wo.work_order_no = dr.work_order_no AND dr.deleted = 0 AND wo.work_order_no = #{workOrderNo} INNER JOIN t_monitor m ON m.serial_number = wo.serial_number LEFT JOIN t_yw_unit yw ON yw.id = wo.unit_id AND yw.deleted = 0 </select> </mapper>