From 2fea5db25bbe781b39af980d6e63abebbbe56c55 Mon Sep 17 00:00:00 2001 From: gjh <1421wake> Date: Sun, 8 Jun 2025 23:07:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=90=8C=E7=AE=A1=E7=90=86=E5=8A=A0?= =?UTF-8?q?=E5=85=A5=E8=A7=92=E8=89=B2=E6=9D=83=E9=99=90=E8=BF=87=E6=BB=A4?= =?UTF-8?q?,=E9=A1=B9=E7=9B=AE=E7=AE=A1=E7=90=86=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E5=8D=8F=E5=95=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../platform/controller/ExcelController.java | 25 ++++--- .../platform/domain/vo/WorkOrderInfoVo.java | 26 ++++--- .../listener/WorkOrderInfoListener.java | 67 +++++++++++++++++++ .../service/impl/ContractInfoServiceImpl.java | 24 +++++-- 4 files changed, 117 insertions(+), 25 deletions(-) create mode 100644 ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java index b3671e0..ec188e1 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java @@ -5,22 +5,14 @@ import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.log.enums.BusinessType; -import org.dromara.platform.domain.PerformanceManagement; -import org.dromara.platform.domain.PointInfo; -import org.dromara.platform.domain.bo.PerformanceManagementBo; import org.dromara.platform.domain.bo.PointInfoBo; import org.dromara.platform.domain.bo.WorkOrderInfoBo; -import org.dromara.platform.domain.vo.PerformanceManagementVo; import org.dromara.platform.domain.vo.PointInfoVo; import org.dromara.platform.domain.vo.WorkOrderInfoVo; -import org.dromara.platform.listener.PerformanceManagementListener; import org.dromara.platform.listener.PointInfoListener; +import org.dromara.platform.listener.WorkOrderInfoListener; import org.dromara.platform.service.IPointInfoService; -import org.dromara.platform.service.IProjectInfoService; import org.dromara.platform.service.IWorkOrderInfoService; -import org.dromara.platform.service.ProjectManagerService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -51,7 +43,7 @@ public class ExcelController { response.setContentType("text/html;charset=utf8"); long t2 = System.currentTimeMillis(); response.getWriter().println("导入数据成功!,共用时:"+(t2-t1)+"ms"); - log.info("批量导入点位信息项目成功! 共用时:{}ms",(t2-t1)); + log.info("批量导入点位信息成功! 共用时:{}ms",(t2-t1)); } @@ -97,4 +89,17 @@ public class ExcelController { .sheet("工单信息"+currentDate) .doWrite(list); } + + + + @PostMapping("/uploadWorkOrderInfo") + public void uploadWorkOrderInfo(MultipartFile file, HttpServletResponse response) throws IOException { + long t1 = System.currentTimeMillis(); + // 业务层 + EasyExcel.read(file.getInputStream(), WorkOrderInfoVo.class, new WorkOrderInfoListener(workOrderInfoService)).sheet().doRead(); + response.setContentType("text/html;charset=utf8"); + long t2 = System.currentTimeMillis(); + response.getWriter().println("导入数据成功!,共用时:"+(t2-t1)+"ms"); + log.info("批量点位上报成功! 共用时:{}ms",(t2-t1)); + } } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderInfoVo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderInfoVo.java index dbb5fed..69d0fc1 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderInfoVo.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderInfoVo.java @@ -1,5 +1,6 @@ package org.dromara.platform.domain.vo; +import com.alibaba.excel.annotation.ExcelIgnore; import com.baomidou.mybatisplus.annotation.TableField; import org.dromara.common.translation.annotation.Translation; import java.util.Date; @@ -50,7 +51,7 @@ public class WorkOrderInfoVo implements Serializable { /** * 合同名称 */ - @ExcelProperty(value = "合同名称") + @ExcelProperty(value = "所属合同") private String contractName; /** @@ -68,25 +69,26 @@ public class WorkOrderInfoVo implements Serializable { /** * 保修人员ID */ - @ExcelProperty(value = "保修人员ID") + //@ExcelProperty(value = "保修人员ID") + @ExcelIgnore private String repairerId; /** * */ - @ExcelProperty(value = "") + @ExcelProperty(value = "维修时间") private Date repairTime; /** - * 是否事故 (0: 否, 1: 是) + * 是否事故 */ - @ExcelProperty(value = "是否事故 (0: 否, 1: 是)") + @ExcelProperty("是否事故") private String isAccident; /** - * 响应级别 (0: 常规, 1: 紧急, 2: 特急) + * */ - @ExcelProperty(value = "响应级别 (0: 常规, 1: 紧急, 2: 特急)") + @ExcelProperty(value = "响应级别") private String responseLevel; /** @@ -104,7 +106,7 @@ public class WorkOrderInfoVo implements Serializable { /** * 故障小类 (0: 电源故障, 1: 光缆故障, 2: 设备故障, 3: 监控故障, 4: 抓拍方向偏移, 5: 树枝遮挡, 6: 无图像, 7: 图像模糊) */ - @ExcelProperty(value = "故障小类 (0: 电源故障, 1: 光缆故障, 2: 设备故障, 3: 监控故障, 4: 抓拍方向偏移, 5: 树枝遮挡, 6: 无图像, 7: 图像模糊)") + @ExcelProperty("故障小类") private String faultSubcategory; /** @@ -139,7 +141,7 @@ public class WorkOrderInfoVo implements Serializable { /** * 维护要求 (0: 修复, 1: 新增, 2: 拆除, 3: 清除, 4: 其他) */ - @ExcelProperty(value = "维护要求 (0: 修复, 1: 新增, 2: 拆除, 3: 清除, 4: 其他)") + @ExcelProperty(value = "维护要求") private String maintenanceRequirement; /** @@ -157,13 +159,15 @@ public class WorkOrderInfoVo implements Serializable { /** * 纬度 */ - @ExcelProperty(value = "纬度") + //@ExcelProperty(value = "纬度") + @ExcelIgnore private String latitude; /** * 经度 */ - @ExcelProperty(value = "经度") + //@ExcelProperty(value = "经度") + @ExcelIgnore private String longitude; /** diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java new file mode 100644 index 0000000..a456856 --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java @@ -0,0 +1,67 @@ +package org.dromara.platform.listener; + +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.platform.domain.bo.WorkOrderInfoBo; +import org.dromara.platform.domain.vo.WorkOrderInfoVo; +import org.dromara.platform.service.IWorkOrderInfoService; +import org.springframework.beans.BeanUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * 自定义监听器读数据 + * + * @author gjh + */ +@Slf4j +public class WorkOrderInfoListener implements ReadListener { + @Resource + private IWorkOrderInfoService workOrderInfoService; + private List list = new ArrayList<>(); + /** + * 自己定义一个缓冲量 + */ + private static final int BATCH_COUNT = 10; + + + public WorkOrderInfoListener(IWorkOrderInfoService workOrderInfoService) { + this.workOrderInfoService = workOrderInfoService; + } + + /** + * 每读一行数据都会调用这个方法 + * + * @param workOrderInfoVo + * @param analysisContext + */ + @Override + public void invoke(WorkOrderInfoVo workOrderInfoVo, AnalysisContext analysisContext) { + WorkOrderInfoBo bo = new WorkOrderInfoBo(); + BeanUtils.copyProperties(workOrderInfoVo, bo); + + + // 读取一行数据就添加到集合 + list.add(bo); + // 判断是否到达缓存量了 + if (list.size() >= BATCH_COUNT) { + list = new ArrayList<>(BATCH_COUNT); + list.forEach(workOrderInfoService::insertByBo); + } + } + + /** + * 读完整个excel之后再调用这个方法 + * + * @param analysisContext + */ + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + if (list.size() > 0) { + list.forEach(workOrderInfoService::insertByBo); + } + } +} diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/ContractInfoServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/ContractInfoServiceImpl.java index b0da851..7c3578b 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/ContractInfoServiceImpl.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/ContractInfoServiceImpl.java @@ -2,6 +2,8 @@ package org.dromara.platform.service.impl; import cn.hutool.core.collection.CollectionUtil; import jakarta.annotation.Resource; +import org.dromara.common.core.domain.dto.RoleDTO; +import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -10,6 +12,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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; @@ -24,10 +27,8 @@ import org.dromara.platform.domain.ContractInfo; import org.dromara.platform.mapper.ContractInfoMapper; import org.dromara.platform.service.IContractInfoService; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; +import java.util.stream.Collectors; /** * 合同信息Service业务层处理 @@ -71,8 +72,23 @@ public class ContractInfoServiceImpl implements IContractInfoService { */ @Override public TableDataInfo queryPageList(ContractInfoBo bo, PageQuery pageQuery) { + LoginUser loginUser = LoginHelper.getLoginUser(); + String username = loginUser.getUsername(); + Set rolePermission = loginUser.getRolePermission(); + LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + List records = result.getRecords(); + List filterRecords = records.stream() + // TODO 角色过滤 + .filter(item -> "admin".equals(username) + || item.getPartyB().equals(loginUser.getDeptName()) + || item.getPartyA().equals(loginUser.getDeptName()) + || rolePermission.contains("jianli") + ) + .collect(Collectors.toList()); + result.setRecords(filterRecords); + result.setTotal(filterRecords.size()); return TableDataInfo.build(result); }