Sfoglia il codice sorgente

导出任务单、待约检设备

徐展城 2 settimane fa
parent
commit
b9e85ac5c2

+ 29 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/taskorder/TaskOrderController.java

@@ -4,15 +4,21 @@ import cn.start.tz.framework.common.pojo.CommonResult;
 import cn.start.tz.framework.common.pojo.PageResult;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderPageReqVO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderRespVO;
+import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.TaskOrderExportVO;
 import cn.start.tz.module.pressure2.service.taskorder.TaskOrderService;
+import cn.start.tz.framework.excel.core.util.ExcelUtils;
+import cn.start.tz.framework.apilog.core.annotation.ApiAccessLog;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.IOException;
+import java.util.List;
 
-
+import static cn.start.tz.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.start.tz.framework.common.pojo.CommonResult.success;
 import static cn.start.tz.framework.web.core.util.WebFrameworkUtils.getLoginUserId;
 
@@ -37,4 +43,26 @@ public class TaskOrderController {
         pageReqVO.setUserId(getLoginUserId());
         return success(taskOrderService.getTaskOrderPage(pageReqVO));
     }
+
+    @PostMapping("/page/export-excel")
+    @Operation(summary = "导出统一任务单 Excel")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportTaskOrderPageExcel(@Valid @RequestBody BoilerTaskOrderPageReqVO pageReqVO,
+                                         HttpServletResponse response) throws IOException {
+        pageReqVO.setUserId(getLoginUserId());
+        pageReqVO.setPageNo(1);
+        pageReqVO.setPageSize(2000);
+        PageResult<BoilerTaskOrderRespVO> pageResult = taskOrderService.getTaskOrderPage(pageReqVO);
+        ExcelUtils.write(response, "统一任务单.xls", "数据", BoilerTaskOrderRespVO.class, pageResult.getList());
+    }
+
+    @PostMapping("/item/export-excel")
+    @Operation(summary = "导出任务单设备明细 Excel")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportTaskOrderItemExcel(@Valid @RequestBody BoilerTaskOrderPageReqVO pageReqVO,
+                                         HttpServletResponse response) throws IOException {
+        pageReqVO.setUserId(getLoginUserId());
+        List<TaskOrderExportVO> list = taskOrderService.getTaskOrderItemExportList(pageReqVO);
+        ExcelUtils.write(response, "任务单设备明细.xls", "数据", TaskOrderExportVO.class, list);
+    }
 }

+ 12 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/synchronization/SynchronizationServiceImpl.java

@@ -530,6 +530,18 @@ public class SynchronizationServiceImpl implements SynchronizationService {
             equipBoilerDO.setEquipStreet(area != null ? area.getId() : null);
         }
 
+        // 增城市的设置为增城区
+        if ("440183".equals(boilerDto.AREACODE)){
+            equipBoilerDO.setEquipDistrict(440100);
+            equipBoilerDO.setEquipStreet(440118);
+        }
+
+        // 从化市的设置为从化区
+        if ("440184".equals(boilerDto.AREACODE)){
+            equipBoilerDO.setEquipDistrict(440100);
+            equipBoilerDO.setEquipStreet(440117);
+        }
+
         // 设置设备基本信息
         equipBoilerDO.setEquipCode(boilerDto.REGISTERNO);
         equipBoilerDO.setUseRegisterNo(boilerDto.USENO);

+ 11 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/taskorder/TaskOrderService.java

@@ -3,6 +3,9 @@ package cn.start.tz.module.pressure2.service.taskorder;
 import cn.start.tz.framework.common.pojo.PageResult;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderPageReqVO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderRespVO;
+import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.TaskOrderExportVO;
+
+import java.util.List;
 
 /**
  * 统一任务单 Service 接口
@@ -12,4 +15,12 @@ import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTa
 public interface TaskOrderService {
 
     PageResult<BoilerTaskOrderRespVO> getTaskOrderPage(BoilerTaskOrderPageReqVO pageReqVO);
+
+    /**
+     * 获取任务单设备导出列表(锅炉+管道合并)
+     *
+     * @param pageReqVO 查询条件
+     * @return 导出数据列表
+     */
+    List<TaskOrderExportVO> getTaskOrderItemExportList(BoilerTaskOrderPageReqVO pageReqVO);
 }

+ 93 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/taskorder/TaskOrderServiceImpl.java

@@ -1,12 +1,18 @@
 package cn.start.tz.module.pressure2.service.taskorder;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderPageReqVO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderRespVO;
+import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.TaskOrderExportVO;
+import cn.start.tz.module.pressure2.controller.admin.pipetaskorder.vo.PipeTaskOrderPageReqVO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderuser.BoilerTaskOrderUserDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderuser.PipeTaskOrderUserDO;
+import cn.start.tz.module.pressure2.dal.mysql.boilertaskorderitem.BoilerTaskOrderItemQueryMapper;
 import cn.start.tz.module.pressure2.dal.mysql.boilertaskorderuser.BoilerTaskOrderUserMapper;
+import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderitem.PipeTaskOrderItemQueryMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderuser.PipeTaskOrderUserMapper;
 import cn.start.tz.module.pressure2.dal.mysql.taskorder.UnifiedTaskOrderMapper;
 import cn.start.tz.module.pressure2.util.DeptDataPermissionUtil;
@@ -41,6 +47,12 @@ public class TaskOrderServiceImpl implements TaskOrderService {
     @Resource
     private DeptApi deptApi;
 
+    @Resource
+    private BoilerTaskOrderItemQueryMapper boilerTaskOrderItemQueryMapper;
+
+    @Resource
+    private PipeTaskOrderItemQueryMapper pipeTaskOrderItemQueryMapper;
+
     @Override
     public PageResult<BoilerTaskOrderRespVO> getTaskOrderPage(BoilerTaskOrderPageReqVO pageReqVO) {
         pageReqVO = DeptDataPermissionUtil.generateDeptDataPermissionReq(pageReqVO);
@@ -86,4 +98,85 @@ public class TaskOrderServiceImpl implements TaskOrderService {
 
         return new PageResult<>(taskOrderRespVOS, total);
     }
+
+    @Override
+    public List<TaskOrderExportVO> getTaskOrderItemExportList(BoilerTaskOrderPageReqVO pageReqVO) {
+        // 1. 检验员筛选 → 转换为任务单ID列表
+        if (CollUtil.isNotEmpty(pageReqVO.getInspectorIds())) {
+            List<String> boilerOrderIds = boilerTaskOrderUserMapper.selectList(
+                    new LambdaQueryWrapperX<BoilerTaskOrderUserDO>()
+                            .in(BoilerTaskOrderUserDO::getUserId, pageReqVO.getInspectorIds()))
+                    .stream().map(BoilerTaskOrderUserDO::getOrderId).distinct().toList();
+            List<String> pipeOrderIds = pipeTaskOrderUserMapper.selectList(
+                    new LambdaQueryWrapperX<PipeTaskOrderUserDO>()
+                            .in(PipeTaskOrderUserDO::getUserId, pageReqVO.getInspectorIds()))
+                    .stream().map(PipeTaskOrderUserDO::getOrderId).distinct().toList();
+            List<String> orderIds = new ArrayList<>(boilerOrderIds);
+            orderIds.addAll(pipeOrderIds);
+            orderIds = orderIds.stream().distinct().collect(Collectors.toList());
+            pageReqVO.setIds(CollUtil.isEmpty(orderIds) ? List.of("-1") : orderIds);
+        }
+
+        // 2. submitId(多选逗号分隔字符串)→ submitUserId(List)转换,并清空 submitId 避免 eq 误匹配
+        if (StrUtil.isNotBlank(pageReqVO.getSubmitId()) && CollUtil.isEmpty(pageReqVO.getSubmitUserId())) {
+            List<String> submitUserIdList = Arrays.stream(pageReqVO.getSubmitId().split(","))
+                    .filter(StrUtil::isNotBlank)
+                    .collect(Collectors.toList());
+            if (CollUtil.isNotEmpty(submitUserIdList)) {
+                pageReqVO.setSubmitUserId(submitUserIdList);
+                pageReqVO.setSubmitId(null); // 清空,避免 mapper 中 eq(submitId, "a,b") 无法匹配
+            }
+        }
+
+        // 明细全导出
+        pageReqVO.setTaskStatusList(null);
+
+        // 3. 查询锅炉任务单设备数据
+        List<TaskOrderExportVO> boilerList = boilerTaskOrderItemQueryMapper.selectExportList(pageReqVO);
+
+        // 4. 查询管道任务单设备数据(手动拷贝字段,避免 BeanUtils 泛型丢失)
+        PipeTaskOrderPageReqVO pipeReqVO = new PipeTaskOrderPageReqVO();
+        pipeReqVO.setCheckDate(pageReqVO.getCheckDate());
+        pipeReqVO.setDeptId(pageReqVO.getDeptId());
+        pipeReqVO.setTaskStatusList(pageReqVO.getTaskStatusList());
+        pipeReqVO.setCheckType(pageReqVO.getCheckType());
+        pipeReqVO.setUnitName(pageReqVO.getUnitName());
+        pipeReqVO.setEquipCode(pageReqVO.getEquipCode());
+        pipeReqVO.setOrderNo(pageReqVO.getOrderNo());
+        pipeReqVO.setTaskOrderIds(pageReqVO.getTaskOrderIds());
+        pipeReqVO.setReportNo(pageReqVO.getReportNo());
+        pipeReqVO.setContractNo(pageReqVO.getContractNo());
+        pipeReqVO.setSubmitUserId(pageReqVO.getSubmitUserId());
+        pipeReqVO.setSubmitTime(pageReqVO.getSubmitTime());
+        pipeReqVO.setCheckUserIds(pageReqVO.getCheckUserIds());
+        pipeReqVO.setIds(pageReqVO.getIds());
+        pipeReqVO.setSubmitId(pageReqVO.getSubmitId());
+        pipeReqVO.setInspectorIds(pageReqVO.getInspectorIds());
+        List<TaskOrderExportVO> pipeList = pipeTaskOrderItemQueryMapper.selectExportList(pipeReqVO);
+
+        // 5. 合并结果
+        List<TaskOrderExportVO> allList = new ArrayList<>(boilerList);
+        if (CollUtil.isNotEmpty(pipeList)) {
+            allList.addAll(pipeList);
+        }
+
+        // 6. 批量查询部门名称
+        if (CollUtil.isNotEmpty(allList)) {
+            List<String> deptIds = allList.stream()
+                    .map(TaskOrderExportVO::getDeptId)
+                    .filter(Objects::nonNull)
+                    .distinct()
+                    .collect(Collectors.toList());
+            if (CollUtil.isNotEmpty(deptIds)) {
+                Map<String, DeptRespDTO> deptMap = deptApi.getDeptMap(deptIds);
+                allList.forEach(item -> {
+                    if (item.getDeptId() != null && deptMap.containsKey(item.getDeptId())) {
+                        item.setDeptName(deptMap.get(item.getDeptId()).getName());
+                    }
+                });
+            }
+        }
+
+        return allList;
+    }
 }

+ 12 - 16
tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/mapper/equippipe/EquipPipeMapper.xml

@@ -408,14 +408,12 @@
 
         <where>
             ep.deleted = 0
-            <choose>
-                <when test="isEffective != null and isEffective == '否'">
-                    AND ep.is_effective = '否'
-                </when>
-                <otherwise>
-                    AND ep.is_effective != '否'
-                </otherwise>
-            </choose>
+            <if test='isEffective != null and isEffective == "否"'>
+                AND ep.is_effective = '否'
+            </if>
+            <if test='isEffective != null and isEffective == "是"'>
+                AND ep.is_effective != '否'
+            </if>
 
             <choose>
                 <when test="checkType == 100">
@@ -580,14 +578,12 @@
 
         <where>
             ep.deleted = 0
-            <choose>
-                <when test="isEffective != null and isEffective == '否'">
-                    AND ep.is_effective = '否'
-                </when>
-                <otherwise>
-                    AND ep.is_effective != '否'
-                </otherwise>
-            </choose>
+            <if test='isEffective != null and isEffective == "否"'>
+                AND ep.is_effective = '否'
+            </if>
+            <if test='isEffective != null and isEffective == "是"'>
+                AND ep.is_effective != '否'
+            </if>
 
             <choose>
                 <when test="checkType == 100">