Browse Source

批量点位上报优化

ops-management-platform-backend-dev
gjh 4 days ago
parent
commit
c40242e434
  1. 1
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkOrderInfo.java
  2. 79
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java
  3. 1
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IContractInfoService.java
  4. 2
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IWorkOrderInfoService.java
  5. 5
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/ContractInfoServiceImpl.java
  6. 6
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java

1
ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkOrderInfo.java

@ -61,6 +61,7 @@ public class WorkOrderInfo extends TenantEntity {
/**
*报修时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date repairTime;
/**

79
ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java

@ -1,18 +1,27 @@
package org.dromara.platform.listener;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.platform.domain.PointInfo;
import org.dromara.platform.domain.WorkOrderInfo;
import org.dromara.platform.domain.bo.WorkOrderInfoBo;
import org.dromara.platform.domain.vo.ContractSelectVo;
import org.dromara.platform.domain.vo.WorkOrderInfoVo;
import org.dromara.platform.mapper.ContractInfoMapper;
import org.dromara.platform.service.IContractInfoService;
import org.dromara.platform.service.IWorkOrderInfoService;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Bean;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* 自定义监听器读数据
@ -21,13 +30,16 @@ import java.util.List;
*/
@Slf4j
public class WorkOrderInfoListener implements ReadListener<WorkOrderInfoVo> {
private List<WorkOrderInfo> list = new ArrayList<>();
@Resource
private IWorkOrderInfoService workOrderInfoService;
@Resource
private IContractInfoService contractInfoService;
// 为什么会失效
private List<String> contractNames;
private List<WorkOrderInfoBo> list = new ArrayList<>();
/**
* 自己定义一个缓冲量
*/
@ -38,6 +50,15 @@ public class WorkOrderInfoListener implements ReadListener<WorkOrderInfoVo> {
IContractInfoService contractInfoService) {
this.workOrderInfoService = workOrderInfoService;
this.contractInfoService = contractInfoService;
contractNames = loadContractNames();
}
// 获取系统中全部合同名称
private List<String> loadContractNames() {
List<ContractSelectVo> contractSelectVoList = contractInfoService.getNames();
return contractSelectVoList.stream()
.map(ContractSelectVo::getContractName)
.toList();
}
/**
@ -48,27 +69,30 @@ public class WorkOrderInfoListener implements ReadListener<WorkOrderInfoVo> {
*/
@Override
public void invoke(WorkOrderInfoVo workOrderInfoVo, AnalysisContext analysisContext) {
WorkOrderInfoBo bo = new WorkOrderInfoBo();
BeanUtils.copyProperties(workOrderInfoVo, bo,"id");
WorkOrderInfo info = new WorkOrderInfo();
BeanUtils.copyProperties(workOrderInfoVo, info,"id");
String unit = contractInfoService.getIoCompany(info.getContractName());
if (unit != null){
info.setMaintenanceUnit(unit);
}
info.setRepairTime(new Date());
// TODO 这里需要优化的 改成批量查询 VO转entity
// 读取一行数据就添加到集合
//list.add(bo);
//list.forEach(item -> {
String unit = contractInfoService.getIoCompany(bo.getContractName());
bo.setMaintenanceUnit(unit);
workOrderInfoService.insertByBo(bo);
//});
// 判断是否到达缓存量了
// if (list.size() >= BATCH_COUNT) {
// list = new ArrayList<>(BATCH_COUNT);
// //list.forEach(workOrderInfoService::insertByBo);
// list.forEach(item -> {
// String unit = contractInfoService.getIoCompany(item.getContractName());
// item.setMaintenanceUnit(unit);
// workOrderInfoService.insertByBo(item);
// });
// }
// 如果用户填写的合同名称与系统中的合同名称匹配则进行派遣操作
if (contractNames.contains(info.getContractName())){
list.add(info);
// 判断是否到达缓存量了
if (list.size() >= BATCH_COUNT){
// 操作数据库
list.forEach(item -> {
WorkOrderInfoBo convert = BeanUtil.copyProperties(item, WorkOrderInfoBo.class);
workOrderInfoService.insertByBo(convert);
});
// 清空集合,并准备下一批数据的批量插入
list = new ArrayList<>(BATCH_COUNT);
}
}else {
log.error("点位:{} 上报失败--->合同名称不存在:{}",info.getFaultLocation(),info.getContractName());
}
}
/**
@ -78,12 +102,11 @@ public class WorkOrderInfoListener implements ReadListener<WorkOrderInfoVo> {
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
// if (list.size() > 0) {
// list.forEach(item -> {
// String unit = contractInfoService.getIoCompany(item.getContractName());
// item.setMaintenanceUnit(unit);
// workOrderInfoService.insertByBo(item);
// });
// }
if (list.size()>0){
list.forEach(item -> {
WorkOrderInfoBo convert = BeanUtil.copyProperties(item, WorkOrderInfoBo.class);
workOrderInfoService.insertByBo(convert);
});
}
}
}

1
ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IContractInfoService.java

@ -1,6 +1,7 @@
package org.dromara.platform.service;
import org.dromara.platform.domain.ContractInfo;
import org.dromara.platform.domain.WorkOrderInfo;
import org.dromara.platform.domain.vo.ContractInfoVo;
import org.dromara.platform.domain.bo.ContractInfoBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;

2
ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IWorkOrderInfoService.java

@ -143,4 +143,6 @@ public interface IWorkOrderInfoService {
WorkOrderInfoDto getOverTimeCost(String workOrderId);
void batchReviewOrder(WorkReviewInfoBo bo);
void addData(List<WorkOrderInfo> list);
}

5
ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/ContractInfoServiceImpl.java

@ -14,9 +14,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.platform.domain.Attachment;
import org.dromara.platform.domain.AttachmentSerializer;
import org.dromara.platform.domain.ProjectInfo;
import org.dromara.platform.domain.*;
import org.dromara.platform.domain.vo.ContractSelectVo;
import org.dromara.platform.domain.vo.ProjectInfoVo;
import org.dromara.platform.domain.vo.ProjectSelectVo;
@ -24,7 +22,6 @@ import org.dromara.platform.service.IProjectInfoService;
import org.springframework.stereotype.Service;
import org.dromara.platform.domain.bo.ContractInfoBo;
import org.dromara.platform.domain.vo.ContractInfoVo;
import org.dromara.platform.domain.ContractInfo;
import org.dromara.platform.mapper.ContractInfoMapper;
import org.dromara.platform.service.IContractInfoService;

6
ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java

@ -175,6 +175,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
}
}*/
LambdaQueryWrapper<WorkOrderInfo> lqw = buildQueryWrapper(bo);
lqw.orderByDesc(WorkOrderInfo::getRepairTime);
Page<WorkOrderInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
@ -1734,6 +1735,11 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
}
@Override
public void addData(List<WorkOrderInfo> list) {
baseMapper.insert(list);
}
/**
* 截取超时后面的部分
*/

Loading…
Cancel
Save