Commit a9253b35fbb619c583cba62872619d8462a39474
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<DepartmentCostDO> { | @@ -206,4 +207,13 @@ public interface HomepageSummaryMapper extends BaseMapperX<DepartmentCostDO> { | ||
| 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 <= #{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
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<MainInfoDO> { | @@ -135,4 +136,24 @@ public interface MainInfoMapper extends BaseMapperX<MainInfoDO> { | ||
| 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 | } |