Commit a9253b35fbb619c583cba62872619d8462a39474

Authored by 王彪总
2 parents 17773423 575fc6d7

Merge remote-tracking branch 'origin/dev' into dev

Showing 14 changed files with 371 additions and 14 deletions
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/homepage/AppHomepageSummaryController.java
@@ -2,10 +2,7 @@ package com.zteits.urbanops.module.garden.controller.app.homepage; @@ -2,10 +2,7 @@ package com.zteits.urbanops.module.garden.controller.app.homepage;
2 2
3 import com.zteits.urbanops.framework.common.pojo.CommonResult; 3 import com.zteits.urbanops.framework.common.pojo.CommonResult;
4 import com.zteits.urbanops.framework.common.pojo.PageResult; 4 import com.zteits.urbanops.framework.common.pojo.PageResult;
5 -import com.zteits.urbanops.module.garden.controller.app.homepage.vo.AppHomePageSummaryPageReqVO;  
6 -import com.zteits.urbanops.module.garden.controller.app.homepage.vo.AppHomePageSummaryReqVO;  
7 -import com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskCompletionStatusRspVo;  
8 -import com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskDetailsRspVo; 5 +import com.zteits.urbanops.module.garden.controller.app.homepage.vo.*;
9 import com.zteits.urbanops.module.garden.service.homepage.HomepageSummaryService; 6 import com.zteits.urbanops.module.garden.service.homepage.HomepageSummaryService;
10 import io.swagger.v3.oas.annotations.Operation; 7 import io.swagger.v3.oas.annotations.Operation;
11 import io.swagger.v3.oas.annotations.tags.Tag; 8 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -15,7 +12,6 @@ import jakarta.validation.Valid; @@ -15,7 +12,6 @@ import jakarta.validation.Valid;
15 import org.springframework.web.bind.annotation.*; 12 import org.springframework.web.bind.annotation.*;
16 13
17 import java.util.List; 14 import java.util.List;
18 -import java.util.Map;  
19 15
20 import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; 16 import static com.zteits.urbanops.framework.common.pojo.CommonResult.success;
21 17
@@ -51,4 +47,9 @@ public class AppHomepageSummaryController { @@ -51,4 +47,9 @@ public class AppHomepageSummaryController {
51 homepageSummaryService.countTaskNumberByUserId(busiDate); 47 homepageSummaryService.countTaskNumberByUserId(busiDate);
52 } 48 }
53 49
  50 + @PostMapping("/iWorkOrderSummary")
  51 + @Operation(summary = "工单情况统计")
  52 + public CommonResult<List<AppWorkOrderSummaryRspVo>> iWorkOrderSummary(@Valid @RequestBody AppWorkOrderSummaryReqVo req) {
  53 + return success(homepageSummaryService.iWorkOrderSummary(req));
  54 + }
54 } 55 }
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/homepage/vo/AppWorkOrderSummaryReqVo.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.controller.app.homepage.vo;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import jakarta.validation.constraints.NotEmpty;
  5 +import lombok.Data;
  6 +
  7 +/**
  8 + * @Classname AppWorkOrderSummaryReqVo
  9 + * @Description 全域工单统计
  10 + * @Date 2026/5/26 23:42
  11 + * @Created by wangqian
  12 + */
  13 +@Data
  14 +public class AppWorkOrderSummaryReqVo {
  15 +
  16 + @NotEmpty
  17 + @Schema(description = "查询类型", example = "0:全部工单 1:全域工单")
  18 + public String queryType;
  19 + @NotEmpty
  20 + @Schema(description = "开始时间", example = "2025-01-01")
  21 + public String beginTime;
  22 + /*结束时间*/
  23 + @NotEmpty
  24 + @Schema(description = "结束时间", example = "2025-12-10")
  25 + public String endTime;
  26 +}
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/homepage/vo/AppWorkOrderSummaryRspVo.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.controller.app.homepage.vo;
  2 +
  3 +import lombok.Data;
  4 +
  5 +import java.util.List;
  6 +
  7 +/**
  8 + * @Classname TaskCompletionStatusRspVo
  9 + * @Description 任务完成情况
  10 + * @Date 2026/1/7 9:44
  11 + * @Created by wangqian
  12 + */
  13 +@Data
  14 +public class AppWorkOrderSummaryRspVo {
  15 + /*单位名称列表*/
  16 + private List<String> legend;
  17 + /*总条数*/
  18 + private String totalNum;
  19 + /*占比*/
  20 + private List<Integer> percents;
  21 + /*单位工单统计*/
  22 + private List<AppWorkOrderSummaryVo> table;
  23 +
  24 +}
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/homepage/vo/AppWorkOrderSummaryVo.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.controller.app.homepage.vo;
  2 +
  3 +import lombok.Data;
  4 +
  5 +/**
  6 + * @Classname TaskCompletionStatusRspVo
  7 + * @Description 任务完成情况
  8 + * @Date 2026/1/7 9:44
  9 + * @Created by wangqian
  10 + */
  11 +@Data
  12 +public class AppWorkOrderSummaryVo {
  13 +
  14 + /*公司ID*/
  15 + private Long companyId;
  16 + /*公司名称*/
  17 + private String companyName;
  18 + /*总工单数量*/
  19 + private Integer total;
  20 + /* 已完成数量*/
  21 + private Integer finish;
  22 + /*待完成数量*/
  23 + private Integer ongoing;
  24 +}
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/homepage/HomepageSummaryMapper.java
@@ -6,6 +6,7 @@ import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.CommitTask @@ -6,6 +6,7 @@ import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.CommitTask
6 import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.CommitWorkOrderRespVo; 6 import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.CommitWorkOrderRespVo;
7 import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.CommitWorkOrderSourceRespVo; 7 import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.CommitWorkOrderSourceRespVo;
8 import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.WorkOrderTrendRespVo; 8 import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.WorkOrderTrendRespVo;
  9 +import com.zteits.urbanops.module.garden.controller.app.homepage.vo.AppWorkOrderSummaryVo;
9 import com.zteits.urbanops.module.garden.controller.app.homepage.vo.CommonTaskStatusVo; 10 import com.zteits.urbanops.module.garden.controller.app.homepage.vo.CommonTaskStatusVo;
10 import com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskCompletionStatusRspVo; 11 import com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskCompletionStatusRspVo;
11 import com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskDetailsRspVo; 12 import com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskDetailsRspVo;
@@ -206,4 +207,13 @@ public interface HomepageSummaryMapper extends BaseMapperX&lt;DepartmentCostDO&gt; { @@ -206,4 +207,13 @@ public interface HomepageSummaryMapper extends BaseMapperX&lt;DepartmentCostDO&gt; {
206 * @Date 2026/1/12 0:45 207 * @Date 2026/1/12 0:45
207 */ 208 */
208 List<TaskStatisticsDO> getUserAll(@Param("busiDate") String busiDate); 209 List<TaskStatisticsDO> getUserAll(@Param("busiDate") String busiDate);
  210 +
  211 + /**
  212 + * @Author wangqian
  213 + * @Description 按单位+时间统计工单数量 总量 | 已完成|
  214 + * @Date 2026/5/26 22:46
  215 + * @Param null
  216 + * @Return
  217 + */
  218 + List<AppWorkOrderSummaryVo> countWorkOrder(@Param("queryType") String queryType, @Param("beginTime") String beginTime, @Param("endTime") String endTime);
209 } 219 }
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryService.java
1 package com.zteits.urbanops.module.garden.service.homepage; 1 package com.zteits.urbanops.module.garden.service.homepage;
2 2
3 import com.zteits.urbanops.framework.common.pojo.PageResult; 3 import com.zteits.urbanops.framework.common.pojo.PageResult;
4 -import com.zteits.urbanops.module.garden.controller.app.homepage.vo.AppHomePageSummaryPageReqVO;  
5 -import com.zteits.urbanops.module.garden.controller.app.homepage.vo.AppHomePageSummaryReqVO;  
6 -import com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskCompletionStatusRspVo;  
7 -import com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskDetailsRspVo; 4 +import com.zteits.urbanops.module.garden.controller.app.homepage.vo.*;
8 5
9 import java.util.List; 6 import java.util.List;
10 -import java.util.Map;  
11 7
12 /** 8 /**
13 * @Classname HomepageSummaryService 9 * @Classname HomepageSummaryService
@@ -42,4 +38,14 @@ public interface HomepageSummaryService { @@ -42,4 +38,14 @@ public interface HomepageSummaryService {
42 * @Return void 38 * @Return void
43 */ 39 */
44 public void countTaskNumberByUserId(String busiDate); 40 public void countTaskNumberByUserId(String busiDate);
  41 + /**
  42 + * @Author wangqian
  43 + * @Description 工单情况统计
  44 + * @Date 2026/5/26 22:34
  45 + * @Param req
  46 + * @Return java.util.List<WorkOrderStatisticsRspVo>
  47 + */
  48 + List<AppWorkOrderSummaryRspVo> iWorkOrderSummary(AppWorkOrderSummaryReqVo req);
  49 +
  50 +
45 } 51 }
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryServiceImpl.java
@@ -5,9 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -5,9 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
5 import com.baomidou.mybatisplus.core.metadata.IPage; 5 import com.baomidou.mybatisplus.core.metadata.IPage;
6 import com.esotericsoftware.minlog.Log; 6 import com.esotericsoftware.minlog.Log;
7 import com.zteits.urbanops.framework.common.pojo.PageResult; 7 import com.zteits.urbanops.framework.common.pojo.PageResult;
8 -import com.zteits.urbanops.framework.common.util.date.DateUtils;  
9 import com.zteits.urbanops.framework.common.util.date.LocalDateTimeUtils; 8 import com.zteits.urbanops.framework.common.util.date.LocalDateTimeUtils;
10 -import com.zteits.urbanops.framework.mybatis.core.query.QueryWrapperX;  
11 import com.zteits.urbanops.framework.mybatis.core.util.MyBatisUtils; 9 import com.zteits.urbanops.framework.mybatis.core.util.MyBatisUtils;
12 import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; 10 import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils;
13 import com.zteits.urbanops.module.garden.controller.app.homepage.vo.*; 11 import com.zteits.urbanops.module.garden.controller.app.homepage.vo.*;
@@ -17,7 +15,6 @@ import com.zteits.urbanops.module.garden.dal.mysql.taskstatistics.TaskStatistics @@ -17,7 +15,6 @@ import com.zteits.urbanops.module.garden.dal.mysql.taskstatistics.TaskStatistics
17 import com.zteits.urbanops.module.system.api.dept.DeptApi; 15 import com.zteits.urbanops.module.system.api.dept.DeptApi;
18 import com.zteits.urbanops.module.system.api.permission.RoleApi; 16 import com.zteits.urbanops.module.system.api.permission.RoleApi;
19 import com.zteits.urbanops.module.system.api.user.AdminUserApi; 17 import com.zteits.urbanops.module.system.api.user.AdminUserApi;
20 -import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO;  
21 import jakarta.annotation.Resource; 18 import jakarta.annotation.Resource;
22 import org.apache.commons.collections4.CollectionUtils; 19 import org.apache.commons.collections4.CollectionUtils;
23 import org.apache.commons.lang3.StringUtils; 20 import org.apache.commons.lang3.StringUtils;
@@ -28,7 +25,6 @@ import java.text.DateFormat; @@ -28,7 +25,6 @@ import java.text.DateFormat;
28 import java.text.ParseException; 25 import java.text.ParseException;
29 import java.text.SimpleDateFormat; 26 import java.text.SimpleDateFormat;
30 import java.time.LocalDateTime; 27 import java.time.LocalDateTime;
31 -import java.time.LocalTime;  
32 import java.time.format.DateTimeFormatter; 28 import java.time.format.DateTimeFormatter;
33 import java.util.*; 29 import java.util.*;
34 import java.util.stream.Collectors; 30 import java.util.stream.Collectors;
@@ -287,6 +283,56 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ @@ -287,6 +283,56 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{
287 //批量保存 283 //批量保存
288 taskStatisticsMapper.insertBatch(taskStatisticsDOList); 284 taskStatisticsMapper.insertBatch(taskStatisticsDOList);
289 } 285 }
  286 +
  287 + @Override
  288 + public List<AppWorkOrderSummaryRspVo> iWorkOrderSummary(AppWorkOrderSummaryReqVo req) {
  289 + // 1. 创建返回对象
  290 + AppWorkOrderSummaryRspVo respVo = new AppWorkOrderSummaryRspVo();
  291 +
  292 + // 2. 查询工单列表
  293 + List<AppWorkOrderSummaryVo> workOrderList = homepageSummaryMapper.countWorkOrder(
  294 + req.getQueryType(),
  295 + req.getBeginTime(),
  296 + req.getEndTime()
  297 + );
  298 +
  299 + // 3. 提取公司名称列表(修复:toList() 或 toList())
  300 + List<String> companyNameList = workOrderList.stream()
  301 + .map(AppWorkOrderSummaryVo::getCompanyName)
  302 + .collect(Collectors.toList());
  303 +
  304 + // 4. 总数量求和
  305 + int totalNum = workOrderList.stream()
  306 + .mapToInt(AppWorkOrderSummaryVo::getTotal)
  307 + .sum();
  308 +
  309 + List<Integer> percents;
  310 + if (totalNum <= 0) {
  311 + percents = Collections.singletonList(0);
  312 + } else {
  313 + // 3. 先计算四舍五入占比
  314 + List<Integer> tempPercents = workOrderList.stream()
  315 + .map(vo -> (int) Math.round((vo.getTotal() * 100.0) / totalNum))
  316 + .collect(Collectors.toList());
  317 +
  318 + // 4. 核心:修正总和 = 100%(把差值补到最后一项)
  319 + int sum = tempPercents.stream().mapToInt(Integer::intValue).sum();
  320 + int diff = 100 - sum;
  321 + if (diff != 0 && !tempPercents.isEmpty()) {
  322 + int lastIndex = tempPercents.size() - 1;
  323 + tempPercents.set(lastIndex, tempPercents.get(lastIndex) + diff);
  324 + }
  325 + percents = tempPercents;
  326 + }
  327 + // 6. 封装返回数据
  328 + respVo.setLegend(companyNameList);
  329 + respVo.setTable(workOrderList);
  330 + respVo.setTotalNum(String.valueOf(totalNum)); // 转字符串
  331 + respVo.setPercents(percents); //占比
  332 + // 7. 包装成 List 返回(因为方法声明返回 List)
  333 + return List.of(respVo);
  334 + }
  335 +
290 /** 336 /**
291 * @Author wangqian 337 * @Author wangqian
292 * @Description 初始化对象集合 338 * @Description 初始化对象集合
urbanops-module-garden/src/main/resources/mapper/homepage/HomepageSummaryMapper.xml
@@ -587,4 +587,30 @@ @@ -587,4 +587,30 @@
587 INNER JOIN dept_recursive dr ON u.dept_id = dr.id 587 INNER JOIN dept_recursive dr ON u.dept_id = dr.id
588 GROUP BY u.id, u.nickname, u.dept_id, u.busi_line, dr.companyId, dr.companyName; 588 GROUP BY u.id, u.nickname, u.dept_id, u.busi_line, dr.companyId, dr.companyName;
589 </select> 589 </select>
  590 +
  591 + <!--app工单数量汇总-->
  592 + <select id="countWorkOrder" resultType="com.zteits.urbanops.module.garden.controller.app.homepage.vo.AppWorkOrderSummaryVo">
  593 + SELECT
  594 + w.worker_company_id AS companyId,
  595 + d.name AS companyName,
  596 + COUNT(*) AS total,
  597 + SUM(CASE WHEN w.status = 2 THEN 1 ELSE 0 END) AS finish,
  598 + SUM(CASE WHEN w.status != 2 THEN 1 ELSE 0 END) AS ongoing
  599 + FROM system_dept d
  600 + LEFT JOIN workorder_main_info w ON w.worker_company_id = d.id
  601 + WHERE w.order_type !='Q'
  602 + <!-- queryType = 1 时,才拼接 督察工单(IWO开头)条件 -->
  603 + <if test='queryType != null and queryType == "1"'>
  604 + AND w.order_no LIKE 'IWO%'
  605 + </if>
  606 + <if test="beginTime != null and beginTime != ''">
  607 + AND w.create_time >= #{beginTime}
  608 + </if>
  609 + <if test="endTime != null and endTime != ''">
  610 + AND w.create_time &lt;= #{endTime}
  611 + </if>
  612 + GROUP BY w.worker_company_id, d.name
  613 + </select>
  614 +
  615 +
590 </mapper> 616 </mapper>
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoPageReqVO.java
@@ -130,4 +130,5 @@ public class MainInfoPageReqVO extends PageParam { @@ -130,4 +130,5 @@ public class MainInfoPageReqVO extends PageParam {
130 @Schema(description = "部门id") 130 @Schema(description = "部门id")
131 private Set<Long> deptIds; 131 private Set<Long> deptIds;
132 132
  133 +
133 } 134 }
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/maininfo/AppMainInfoController.java 0 → 100644
  1 +package com.zteits.urbanops.module.workorder.controller.app.maininfo;
  2 +
  3 +import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog;
  4 +import com.zteits.urbanops.framework.common.pojo.CommonResult;
  5 +import com.zteits.urbanops.framework.common.pojo.PageParam;
  6 +import com.zteits.urbanops.framework.common.pojo.PageResult;
  7 +import com.zteits.urbanops.framework.common.util.object.BeanUtils;
  8 +import com.zteits.urbanops.framework.excel.core.util.ExcelUtils;
  9 +import com.zteits.urbanops.module.system.api.user.AdminUserApi;
  10 +import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO;
  11 +import com.zteits.urbanops.module.system.dal.dataobject.dept.DeptDO;
  12 +import com.zteits.urbanops.module.system.service.dept.DeptService;
  13 +import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.AdminMainInfoRespVO;
  14 +import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.MainInfoPageReqVO;
  15 +import com.zteits.urbanops.module.workorder.controller.app.maininfo.vo.AppMainInfoPageReqVO;
  16 +import com.zteits.urbanops.module.workorder.convert.maininfo.MainInfoConvert;
  17 +import com.zteits.urbanops.module.workorder.dal.dataobject.attachment.AttachmentDO;
  18 +import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO;
  19 +import com.zteits.urbanops.module.workorder.dto.MainInfoRespVO;
  20 +import com.zteits.urbanops.module.workorder.service.attachment.AttachmentService;
  21 +import com.zteits.urbanops.module.workorder.service.maininfo.MainInfoService;
  22 +import io.swagger.v3.oas.annotations.Operation;
  23 +import io.swagger.v3.oas.annotations.Parameter;
  24 +import io.swagger.v3.oas.annotations.tags.Tag;
  25 +import jakarta.annotation.Resource;
  26 +import jakarta.servlet.http.HttpServletResponse;
  27 +import jakarta.validation.Valid;
  28 +import org.apache.commons.collections4.CollectionUtils;
  29 +import org.springframework.security.access.prepost.PreAuthorize;
  30 +import org.springframework.validation.annotation.Validated;
  31 +import org.springframework.web.bind.annotation.GetMapping;
  32 +import org.springframework.web.bind.annotation.RequestMapping;
  33 +import org.springframework.web.bind.annotation.RequestParam;
  34 +import org.springframework.web.bind.annotation.RestController;
  35 +
  36 +import java.io.IOException;
  37 +import java.util.*;
  38 +import java.util.stream.Collectors;
  39 +
  40 +import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
  41 +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success;
  42 +
  43 +@Tag(name = "app - 工单信息")
  44 +@RestController
  45 +@RequestMapping("/workorder/main-info")
  46 +@Validated
  47 +public class AppMainInfoController {
  48 +
  49 + @Resource
  50 + private MainInfoService mainInfoService;
  51 +
  52 + @Resource
  53 + private AttachmentService attachmentService;
  54 +
  55 + @Resource
  56 + private DeptService deptService;
  57 + @Resource
  58 + private AdminUserApi adminUserApi;
  59 +
  60 + @GetMapping("/get")
  61 + @Operation(summary = "获得工单信息")
  62 + @Parameter(name = "id", description = "编号", required = true, example = "1024")
  63 + @PreAuthorize("@ss.hasPermission('workorder:main-info:query')")
  64 + public CommonResult<AdminMainInfoRespVO> getMainInfo(@RequestParam("id") Long id) {
  65 + MainInfoDO mainInfo = mainInfoService.getMainInfo(id);
  66 +
  67 + // 若订单号列表非空,查询附件;否则跳过
  68 + Map<String, AttachmentDO> attachmentMap = Collections.emptyMap();
  69 + if (mainInfo != null) {
  70 + List<AttachmentDO> attachmentDOList = attachmentService.getAttachmentByOrderNo(Arrays.asList(mainInfo.getOrderNo()));
  71 + // 构建订单号→附件对象的映射(处理重复key,取第一个对象)
  72 + if (!CollectionUtils.isEmpty(attachmentDOList)) {
  73 + attachmentMap = attachmentDOList.stream()
  74 + .filter(attachmentDO -> "01".equals(attachmentDO.getBusiType()))
  75 + .collect(Collectors.toMap(
  76 + AttachmentDO::getOrderNo, // key:订单号
  77 + attachmentDO -> attachmentDO, // value:附件对象
  78 + (existing, replacement) -> existing // 重复key时保留已有值
  79 + ));
  80 + }
  81 + }
  82 +
  83 + String companyName = "";
  84 + if (mainInfo.getWorkerCompanyId() != null) {
  85 + DeptDO dept = deptService.getDept(mainInfo.getWorkerCompanyId());
  86 + if (dept != null) {
  87 + companyName = dept.getName();
  88 + }
  89 + }
  90 +
  91 + Set<Long> userIds = new HashSet<>();
  92 + if (mainInfo.getCoHandlers() != null) {
  93 + mainInfo.getCoHandlers().stream()
  94 + .filter(Objects::nonNull) // 过滤null ID
  95 + .forEach(userIds::add);
  96 + }
  97 + userIds.add(mainInfo.getUserId());
  98 + Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds);
  99 + return success(MainInfoConvert.INSTANCE.buildMainInfo(mainInfo, attachmentMap, companyName, userMap));
  100 + }
  101 +
  102 + @GetMapping("/page")
  103 + @Operation(summary = "获得工单信息分页")
  104 + @PreAuthorize("@ss.hasPermission('workorder:main-info:query')")
  105 + public CommonResult<PageResult<AdminMainInfoRespVO>> getMainInfoPage(@Valid AppMainInfoPageReqVO pageReqVO) {
  106 +
  107 + PageResult<MainInfoDO> pageResult = mainInfoService.selectPageExcludeQuickOrder(pageReqVO);
  108 + // 6. 转换并返回结果
  109 + return success(MainInfoConvert.INSTANCE.buildMainInfoPage(pageResult, null, null, null));
  110 + }
  111 +
  112 + @GetMapping("/export-excel")
  113 + @Operation(summary = "导出工单信息 Excel")
  114 + @PreAuthorize("@ss.hasPermission('workorder:main-info:export')")
  115 + @ApiAccessLog(operateType = EXPORT)
  116 + public void exportMainInfoExcel(@Valid MainInfoPageReqVO pageReqVO,
  117 + HttpServletResponse response) throws IOException {
  118 + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
  119 + List<MainInfoDO> list = mainInfoService.getMainInfoPage(pageReqVO).getList();
  120 + // 导出 Excel
  121 + ExcelUtils.write(response, "工单信息.xls", "数据", MainInfoRespVO.class,
  122 + BeanUtils.toBean(list, MainInfoRespVO.class));
  123 + }
  124 +
  125 +}
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/maininfo/vo/AppMainInfoPageReqVO.java 0 → 100644
  1 +package com.zteits.urbanops.module.workorder.controller.app.maininfo.vo;
  2 +
  3 +import com.zteits.urbanops.framework.common.pojo.PageParam;
  4 +import io.swagger.v3.oas.annotations.media.Schema;
  5 +import lombok.Data;
  6 +import org.springframework.format.annotation.DateTimeFormat;
  7 +
  8 +import java.time.LocalDateTime;
  9 +
  10 +import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
  11 +
  12 +@Schema(description = "APP - 工单信息分页 Request VO")
  13 +@Data
  14 +public class AppMainInfoPageReqVO extends PageParam {
  15 +
  16 + @Schema(description = "工单号")
  17 + private String orderNo;
  18 +
  19 + @Schema(description = "工单名称", example = "张三")
  20 + private String orderName;
  21 +
  22 + @Schema(description = "审批状态", example = "2")
  23 + private Integer status;
  24 +
  25 + @Schema(description = "创建时间")
  26 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  27 + private LocalDateTime[] createTime;
  28 +
  29 + @Schema(description = "实施人员部门id", example = "12")
  30 + private Long workerCompanyId;
  31 +
  32 +}
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/maininfo/MainInfoMapper.java
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
6 import com.zteits.urbanops.framework.common.pojo.PageResult; 6 import com.zteits.urbanops.framework.common.pojo.PageResult;
7 import com.zteits.urbanops.framework.mybatis.core.query.LambdaQueryWrapperX; 7 import com.zteits.urbanops.framework.mybatis.core.query.LambdaQueryWrapperX;
8 import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX; 8 import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX;
  9 +import com.zteits.urbanops.module.workorder.controller.app.maininfo.vo.AppMainInfoPageReqVO;
9 import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO; 10 import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO;
10 import org.apache.ibatis.annotations.Mapper; 11 import org.apache.ibatis.annotations.Mapper;
11 import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.*; 12 import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.*;
@@ -135,4 +136,24 @@ public interface MainInfoMapper extends BaseMapperX&lt;MainInfoDO&gt; { @@ -135,4 +136,24 @@ public interface MainInfoMapper extends BaseMapperX&lt;MainInfoDO&gt; {
135 return selectList(new QueryWrapper<MainInfoDO>().in(field, values)); 136 return selectList(new QueryWrapper<MainInfoDO>().in(field, values));
136 } 137 }
137 138
  139 + /**
  140 + * 获得工单信息分页 不查询快速工单
  141 + *
  142 + * @param reqVO 分页查询
  143 + * @return 工单信息分页
  144 + */
  145 + default PageResult<MainInfoDO> selectPageExcludeQuickOrder(AppMainInfoPageReqVO reqVO) {
  146 +
  147 + LambdaQueryWrapperX<MainInfoDO> queryWrapper = new LambdaQueryWrapperX<>();
  148 + // 不查询快速工单 → 订单类型 != "Q"
  149 + queryWrapper.ne(MainInfoDO::getOrderType, "Q");
  150 + queryWrapper.eqIfPresent(MainInfoDO::getWorkerCompanyId, reqVO.getWorkerCompanyId())
  151 + .likeIfPresent(MainInfoDO::getOrderNo, reqVO.getOrderNo())
  152 + .likeIfPresent(MainInfoDO::getOrderName, reqVO.getOrderName())
  153 + .eqIfPresent(MainInfoDO::getStatus, reqVO.getStatus())
  154 + .betweenIfPresent(MainInfoDO::getCreateTime, reqVO.getCreateTime())
  155 + .orderByDesc(MainInfoDO::getId);
  156 + return selectPage(reqVO, queryWrapper);
  157 + }
  158 +
138 } 159 }
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/maininfo/MainInfoService.java
1 package com.zteits.urbanops.module.workorder.service.maininfo; 1 package com.zteits.urbanops.module.workorder.service.maininfo;
2 2
3 import java.util.*; 3 import java.util.*;
  4 +
  5 +import com.zteits.urbanops.module.workorder.controller.app.maininfo.vo.AppMainInfoPageReqVO;
4 import jakarta.validation.*; 6 import jakarta.validation.*;
5 import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.*; 7 import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.*;
6 import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO; 8 import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO;
@@ -67,4 +69,12 @@ public interface MainInfoService { @@ -67,4 +69,12 @@ public interface MainInfoService {
67 */ 69 */
68 MainInfoDO getMainInfoByOrderNo(String orderNo); 70 MainInfoDO getMainInfoByOrderNo(String orderNo);
69 71
  72 + /**
  73 + * 获得工单信息分页
  74 + *
  75 + * @param pageReqVO 分页查询
  76 + * @return 工单信息分页
  77 + */
  78 + PageResult<MainInfoDO> selectPageExcludeQuickOrder(AppMainInfoPageReqVO pageReqVO);
  79 +
70 } 80 }
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/maininfo/MainInfoServiceImpl.java
@@ -4,6 +4,7 @@ import com.zteits.urbanops.framework.common.pojo.PageResult; @@ -4,6 +4,7 @@ import com.zteits.urbanops.framework.common.pojo.PageResult;
4 import com.zteits.urbanops.framework.common.util.object.BeanUtils; 4 import com.zteits.urbanops.framework.common.util.object.BeanUtils;
5 import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.MainInfoPageReqVO; 5 import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.MainInfoPageReqVO;
6 import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.MainInfoSaveReqVO; 6 import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.MainInfoSaveReqVO;
  7 +import com.zteits.urbanops.module.workorder.controller.app.maininfo.vo.AppMainInfoPageReqVO;
7 import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO; 8 import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO;
8 import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoMapper; 9 import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoMapper;
9 import jakarta.annotation.Resource; 10 import jakarta.annotation.Resource;
@@ -82,4 +83,8 @@ public class MainInfoServiceImpl implements MainInfoService { @@ -82,4 +83,8 @@ public class MainInfoServiceImpl implements MainInfoService {
82 return mainInfoMapper.selectOne(MainInfoDO::getOrderNo, orderNo); 83 return mainInfoMapper.selectOne(MainInfoDO::getOrderNo, orderNo);
83 } 84 }
84 85
  86 + public PageResult<MainInfoDO> selectPageExcludeQuickOrder(AppMainInfoPageReqVO pageReqVO) {
  87 + return mainInfoMapper.selectPageExcludeQuickOrder(pageReqVO);
  88 + }
  89 +
85 } 90 }