Commit 258c2824f79dc6096999371dfe07afbe92cb03cd

Authored by wangqian
1 parent a7316779

派单及人机材功能迁移

Showing 13 changed files with 389 additions and 153 deletions
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasks/AssignTasksController.java
1 package com.zteits.urbanops.module.garden.controller.admin.assigntasks; 1 package com.zteits.urbanops.module.garden.controller.admin.assigntasks;
2 2
3 -import jakarta.annotation.security.PermitAll;  
4 -import org.springframework.util.CollectionUtils;  
5 -import org.springframework.web.bind.annotation.*;  
6 -import jakarta.annotation.Resource;  
7 -import org.springframework.validation.annotation.Validated;  
8 -import org.springframework.security.access.prepost.PreAuthorize;  
9 -import io.swagger.v3.oas.annotations.tags.Tag;  
10 -import io.swagger.v3.oas.annotations.Parameter;  
11 -import io.swagger.v3.oas.annotations.Operation;  
12 -  
13 -import jakarta.validation.constraints.*;  
14 -import jakarta.validation.*;  
15 -import jakarta.servlet.http.*;  
16 -import java.util.*;  
17 -import java.io.IOException;  
18 - 3 +import cn.hutool.core.collection.CollectionUtil;
  4 +import cn.hutool.core.util.StrUtil;
  5 +import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog;
  6 +import com.zteits.urbanops.framework.common.pojo.CommonResult;
19 import com.zteits.urbanops.framework.common.pojo.PageParam; 7 import com.zteits.urbanops.framework.common.pojo.PageParam;
20 import com.zteits.urbanops.framework.common.pojo.PageResult; 8 import com.zteits.urbanops.framework.common.pojo.PageResult;
21 -import com.zteits.urbanops.framework.common.pojo.CommonResult;  
22 import com.zteits.urbanops.framework.common.util.object.BeanUtils; 9 import com.zteits.urbanops.framework.common.util.object.BeanUtils;
23 -import static com.zteits.urbanops.framework.common.pojo.CommonResult.success;  
24 -  
25 import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; 10 import com.zteits.urbanops.framework.excel.core.util.ExcelUtils;
26 -  
27 -import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog;  
28 -import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*;  
29 -  
30 -import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.*; 11 +import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.AssignTasksPageReqVO;
  12 +import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.AssignTasksRespVO;
  13 +import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.AssignTasksSaveReqVO;
31 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO; 14 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO;
  15 +import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO;
32 import com.zteits.urbanops.module.garden.service.assigntasks.AssignTasksService; 16 import com.zteits.urbanops.module.garden.service.assigntasks.AssignTasksService;
  17 +import com.zteits.urbanops.module.garden.service.assigntasksinfo.AssignTasksInfoService;
  18 +import io.swagger.v3.oas.annotations.Operation;
  19 +import io.swagger.v3.oas.annotations.Parameter;
  20 +import io.swagger.v3.oas.annotations.tags.Tag;
  21 +import jakarta.annotation.Resource;
  22 +import jakarta.annotation.security.PermitAll;
  23 +import jakarta.servlet.http.HttpServletResponse;
  24 +import jakarta.validation.Valid;
  25 +import org.springframework.security.access.prepost.PreAuthorize;
  26 +import org.springframework.validation.annotation.Validated;
  27 +import org.springframework.web.bind.annotation.*;
  28 +
  29 +import java.io.IOException;
  30 +import java.util.Collections;
  31 +import java.util.List;
  32 +import java.util.stream.Collectors;
  33 +
  34 +import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
  35 +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success;
33 36
34 @Tag(name = "管理后台 - 派单任务主表(记录派单任务基本信息)") 37 @Tag(name = "管理后台 - 派单任务主表(记录派单任务基本信息)")
35 @RestController 38 @RestController
@@ -39,6 +42,8 @@ public class AssignTasksController { @@ -39,6 +42,8 @@ public class AssignTasksController {
39 42
40 @Resource 43 @Resource
41 private AssignTasksService assignTasksService; 44 private AssignTasksService assignTasksService;
  45 + @Resource
  46 + private AssignTasksInfoService asignTasksInfoService;
42 47
43 @PostMapping("/create") 48 @PostMapping("/create")
44 @Operation(summary = "创建派单任务主表(记录派单任务基本信息)") 49 @Operation(summary = "创建派单任务主表(记录派单任务基本信息)")
@@ -79,7 +84,20 @@ public class AssignTasksController { @@ -79,7 +84,20 @@ public class AssignTasksController {
79 @PreAuthorize("@ss.hasPermission('garden:assign-tasks:query')") 84 @PreAuthorize("@ss.hasPermission('garden:assign-tasks:query')")
80 public CommonResult<AssignTasksRespVO> getAssignTasks(@RequestParam("id") Long id) { 85 public CommonResult<AssignTasksRespVO> getAssignTasks(@RequestParam("id") Long id) {
81 AssignTasksDO assignTasks = assignTasksService.getAssignTasks(id); 86 AssignTasksDO assignTasks = assignTasksService.getAssignTasks(id);
82 - return success(BeanUtils.toBean(assignTasks, AssignTasksRespVO.class)); 87 + AssignTasksRespVO assignTasksRespVO = BeanUtils.toBean(assignTasks, AssignTasksRespVO.class);
  88 + List<AssignTasksInfoDO> assignTaskInfoList = asignTasksInfoService.getAssignTasksInfos(assignTasks.getId());
  89 + assignTasksRespVO.setAssignTaskInfoList(assignTaskInfoList);
  90 + //获取单位集合
  91 + List<String> companyIds = CollectionUtil.isEmpty(assignTaskInfoList)
  92 + ? Collections.emptyList()
  93 + : assignTaskInfoList.stream()
  94 + .map(AssignTasksInfoDO::getCompanyId)
  95 + .map(StrUtil::toString) // Hutool 工具类:自动处理 null(转为 null 字符串,需配合过滤)
  96 + .filter(StrUtil::isNotEmpty) // 过滤 null/空字符串
  97 + .distinct()
  98 + .collect(Collectors.toList());
  99 + assignTasksRespVO.setCompanyIds(companyIds);
  100 + return success(assignTasksRespVO);
83 } 101 }
84 102
85 @GetMapping("/page") 103 @GetMapping("/page")
@@ -111,10 +129,18 @@ public class AssignTasksController { @@ -111,10 +129,18 @@ public class AssignTasksController {
111 BeanUtils.toBean(list, AssignTasksRespVO.class)); 129 BeanUtils.toBean(list, AssignTasksRespVO.class));
112 } 130 }
113 131
  132 + @Operation(summary = "任务确认" )
  133 + @PreAuthorize("@ss.hasPermi('assign:tasks:query')")
  134 + @GetMapping(value = "/confirm/{id}")
  135 + public CommonResult confirm(@PathVariable("id") Long id) {
  136 + return success(assignTasksService.confirmAssignTasksById(id));
  137 + }
114 @Operation(summary = "定时任务处理超时" ) 138 @Operation(summary = "定时任务处理超时" )
115 @PostMapping(value= "/tasksOutTimeAuto") 139 @PostMapping(value= "/tasksOutTimeAuto")
116 @PermitAll 140 @PermitAll
117 public CommonResult tasksOutTimeAuto() { 141 public CommonResult tasksOutTimeAuto() {
118 return success(assignTasksService.tasksOutTimeAuto()); 142 return success(assignTasksService.tasksOutTimeAuto());
119 } 143 }
  144 +
  145 +
120 } 146 }
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasks/vo/AssignTasksRespVO.java
1 package com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo; 1 package com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo;
2 2
  3 +import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
  4 +import cn.idev.excel.annotation.ExcelProperty;
  5 +import com.fasterxml.jackson.annotation.JsonFormat;
  6 +import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO;
3 import io.swagger.v3.oas.annotations.media.Schema; 7 import io.swagger.v3.oas.annotations.media.Schema;
4 -import lombok.*;  
5 -import java.util.*;  
6 -import org.springframework.format.annotation.DateTimeFormat;  
7 -import java.time.LocalDateTime;  
8 -import cn.idev.excel.annotation.*; 8 +import lombok.Data;
  9 +
  10 +import java.util.Date;
  11 +import java.util.List;
  12 +
  13 +import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
9 14
10 @Schema(description = "管理后台 - 派单任务主表(记录派单任务基本信息) Response VO") 15 @Schema(description = "管理后台 - 派单任务主表(记录派单任务基本信息) Response VO")
11 @Data 16 @Data
@@ -26,7 +31,8 @@ public class AssignTasksRespVO { @@ -26,7 +31,8 @@ public class AssignTasksRespVO {
26 31
27 @Schema(description = "任务截止时间", requiredMode = Schema.RequiredMode.REQUIRED) 32 @Schema(description = "任务截止时间", requiredMode = Schema.RequiredMode.REQUIRED)
28 @ExcelProperty("任务截止时间") 33 @ExcelProperty("任务截止时间")
29 - private LocalDateTime deadline; 34 + @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  35 + private Date deadline;
30 36
31 @Schema(description = "派单模板文件路径(如:任务详情模板、填报表格等)") 37 @Schema(description = "派单模板文件路径(如:任务详情模板、填报表格等)")
32 @ExcelProperty("派单模板文件路径(如:任务详情模板、填报表格等)") 38 @ExcelProperty("派单模板文件路径(如:任务详情模板、填报表格等)")
@@ -38,7 +44,8 @@ public class AssignTasksRespVO { @@ -38,7 +44,8 @@ public class AssignTasksRespVO {
38 44
39 @Schema(description = "整体完成时间(仅当parent_finish=1时有值)") 45 @Schema(description = "整体完成时间(仅当parent_finish=1时有值)")
40 @ExcelProperty("整体完成时间(仅当parent_finish=1时有值)") 46 @ExcelProperty("整体完成时间(仅当parent_finish=1时有值)")
41 - private LocalDateTime finishTime; 47 + @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  48 + private Date finishTime;
42 49
43 @Schema(description = "任务备注(如:特殊要求、注意事项等)") 50 @Schema(description = "任务备注(如:特殊要求、注意事项等)")
44 @ExcelProperty("任务备注(如:特殊要求、注意事项等)") 51 @ExcelProperty("任务备注(如:特殊要求、注意事项等)")
@@ -50,11 +57,15 @@ public class AssignTasksRespVO { @@ -50,11 +57,15 @@ public class AssignTasksRespVO {
50 57
51 @Schema(description = "任务创建时间(派单时间)", requiredMode = Schema.RequiredMode.REQUIRED) 58 @Schema(description = "任务创建时间(派单时间)", requiredMode = Schema.RequiredMode.REQUIRED)
52 @ExcelProperty("任务创建时间(派单时间)") 59 @ExcelProperty("任务创建时间(派单时间)")
53 - private LocalDateTime createTime; 60 + @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  61 + private Date createTime;
54 62
55 @Schema(description = "修改人(关联用户ID,最后修改人)") 63 @Schema(description = "修改人(关联用户ID,最后修改人)")
56 @ExcelProperty("修改人(关联用户ID,最后修改人)") 64 @ExcelProperty("修改人(关联用户ID,最后修改人)")
57 private String updater; 65 private String updater;
58 66
  67 + private List<String> companyIds;
  68 + private List<AssignTasksInfoDO> assignTaskInfoList;
  69 +
59 70
60 } 71 }
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasks/vo/AssignTasksSaveReqVO.java
1 package com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo; 1 package com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo;
2 2
  3 +import com.fasterxml.jackson.annotation.JsonFormat;
3 import io.swagger.v3.oas.annotations.media.Schema; 4 import io.swagger.v3.oas.annotations.media.Schema;
4 -import lombok.*;  
5 -import java.util.*;  
6 -import jakarta.validation.constraints.*;  
7 -import org.springframework.format.annotation.DateTimeFormat;  
8 -import java.time.LocalDateTime; 5 +import jakarta.validation.constraints.NotEmpty;
  6 +import jakarta.validation.constraints.NotNull;
  7 +import lombok.Data;
  8 +
  9 +import java.util.Date;
  10 +import java.util.List;
  11 +
  12 +import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
9 13
10 @Schema(description = "管理后台 - 派单任务主表(记录派单任务基本信息)新增/修改 Request VO") 14 @Schema(description = "管理后台 - 派单任务主表(记录派单任务基本信息)新增/修改 Request VO")
11 @Data 15 @Data
@@ -24,7 +28,12 @@ public class AssignTasksSaveReqVO { @@ -24,7 +28,12 @@ public class AssignTasksSaveReqVO {
24 28
25 @Schema(description = "任务截止时间", requiredMode = Schema.RequiredMode.REQUIRED) 29 @Schema(description = "任务截止时间", requiredMode = Schema.RequiredMode.REQUIRED)
26 @NotNull(message = "任务截止时间不能为空") 30 @NotNull(message = "任务截止时间不能为空")
27 - private LocalDateTime deadline; 31 + @JsonFormat(
  32 + pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND,
  33 + timezone = "GMT+8",
  34 + shape = JsonFormat.Shape.STRING
  35 + )
  36 + private Date deadline;
28 37
29 @Schema(description = "派单模板文件路径(如:任务详情模板、填报表格等)") 38 @Schema(description = "派单模板文件路径(如:任务详情模板、填报表格等)")
30 private String templateFile; 39 private String templateFile;
@@ -34,7 +43,8 @@ public class AssignTasksSaveReqVO { @@ -34,7 +43,8 @@ public class AssignTasksSaveReqVO {
34 private Integer parentFinish; 43 private Integer parentFinish;
35 44
36 @Schema(description = "整体完成时间(仅当parent_finish=1时有值)") 45 @Schema(description = "整体完成时间(仅当parent_finish=1时有值)")
37 - private LocalDateTime finishTime; 46 + @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  47 + private Date finishTime;
38 48
39 @Schema(description = "任务备注(如:特殊要求、注意事项等)") 49 @Schema(description = "任务备注(如:特殊要求、注意事项等)")
40 private String note; 50 private String note;
@@ -47,6 +57,7 @@ public class AssignTasksSaveReqVO { @@ -47,6 +57,7 @@ public class AssignTasksSaveReqVO {
47 private String updater; 57 private String updater;
48 58
49 /*单位集合*/ 59 /*单位集合*/
50 - private String[] companyIds; 60 + @NotEmpty(message = "派发单位不能为空")
  61 + private List<String> companyIds;
51 62
52 } 63 }
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/AssignTasksInfoController.java
1 package com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo; 1 package com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo;
2 2
3 -import org.springframework.web.bind.annotation.*;  
4 -import jakarta.annotation.Resource;  
5 -import org.springframework.validation.annotation.Validated;  
6 -import org.springframework.security.access.prepost.PreAuthorize;  
7 -import io.swagger.v3.oas.annotations.tags.Tag;  
8 -import io.swagger.v3.oas.annotations.Parameter;  
9 -import io.swagger.v3.oas.annotations.Operation;  
10 -  
11 -import jakarta.validation.constraints.*;  
12 -import jakarta.validation.*;  
13 -import jakarta.servlet.http.*;  
14 -import java.util.*;  
15 -import java.io.IOException;  
16 - 3 +import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog;
  4 +import com.zteits.urbanops.framework.common.pojo.CommonResult;
17 import com.zteits.urbanops.framework.common.pojo.PageParam; 5 import com.zteits.urbanops.framework.common.pojo.PageParam;
18 import com.zteits.urbanops.framework.common.pojo.PageResult; 6 import com.zteits.urbanops.framework.common.pojo.PageResult;
19 -import com.zteits.urbanops.framework.common.pojo.CommonResult;  
20 import com.zteits.urbanops.framework.common.util.object.BeanUtils; 7 import com.zteits.urbanops.framework.common.util.object.BeanUtils;
21 -import static com.zteits.urbanops.framework.common.pojo.CommonResult.success;  
22 -  
23 import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; 8 import com.zteits.urbanops.framework.excel.core.util.ExcelUtils;
24 -  
25 -import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog;  
26 -import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*;  
27 -  
28 -import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.*; 9 +import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoPageReqVO;
  10 +import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoRespVO;
  11 +import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoSaveReqVO;
29 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO; 12 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO;
30 import com.zteits.urbanops.module.garden.service.assigntasksinfo.AssignTasksInfoService; 13 import com.zteits.urbanops.module.garden.service.assigntasksinfo.AssignTasksInfoService;
  14 +import io.swagger.v3.oas.annotations.Operation;
  15 +import io.swagger.v3.oas.annotations.Parameter;
  16 +import io.swagger.v3.oas.annotations.tags.Tag;
  17 +import jakarta.annotation.Resource;
  18 +import jakarta.servlet.http.HttpServletResponse;
  19 +import jakarta.validation.Valid;
  20 +import org.springframework.security.access.prepost.PreAuthorize;
  21 +import org.springframework.validation.annotation.Validated;
  22 +import org.springframework.web.bind.annotation.*;
  23 +
  24 +import java.io.IOException;
  25 +import java.util.List;
  26 +
  27 +import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
  28 +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success;
31 29
32 @Tag(name = "管理后台 - 派单任务-单位关联表(记录单位接收派单后的执行详情)") 30 @Tag(name = "管理后台 - 派单任务-单位关联表(记录单位接收派单后的执行详情)")
33 @RestController 31 @RestController
@@ -107,4 +105,28 @@ public class AssignTasksInfoController { @@ -107,4 +105,28 @@ public class AssignTasksInfoController {
107 BeanUtils.toBean(list, AssignTasksInfoRespVO.class)); 105 BeanUtils.toBean(list, AssignTasksInfoRespVO.class));
108 } 106 }
109 107
  108 +
  109 + //打回
  110 + @PreAuthorize("@ss.hasPermission('garden:assign-tasks-info:update')")
  111 + @Operation(summary = "派单任务-驳回")
  112 + @PutMapping(value = "/reject")
  113 + public CommonResult reject(@RequestBody AssignTasksInfoSaveReqVO assignTaskCompany) {
  114 + return success(assignTasksInfoService.rejectAssignTaskCompany(assignTaskCompany));
  115 + }
  116 +
  117 + //催交
  118 + @PreAuthorize("@ss.hasPermission('garden:assign-tasks-info:update')")
  119 + @Operation(summary = "派单任务-催交")
  120 + @PutMapping(value = "/submission")
  121 + public CommonResult submission(@RequestBody AssignTasksInfoSaveReqVO assignTaskCompany) {
  122 + return success(assignTasksInfoService.submissionAssignTaskCompany(assignTaskCompany));
  123 + }
  124 +
  125 + //反馈
  126 + @PreAuthorize("@ss.hasPermission('garden:assign-tasks-info:update')")
  127 + @Operation(summary = "派单任务-反馈")
  128 + @PutMapping(value = "/feedback")
  129 + public CommonResult feedback(@RequestBody AssignTasksInfoSaveReqVO assignTaskCompany) {
  130 + return success(assignTasksInfoService.feedbackAssignTaskCompany(assignTaskCompany));
  131 + }
110 } 132 }
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/vo/AssignTasksInfoSaveReqVO.java
@@ -46,7 +46,7 @@ public class AssignTasksInfoSaveReqVO { @@ -46,7 +46,7 @@ public class AssignTasksInfoSaveReqVO {
46 private Integer isOverdue; 46 private Integer isOverdue;
47 47
48 @Schema(description = "单位提交的任务文件路径(如:填报表格、现场照片等)") 48 @Schema(description = "单位提交的任务文件路径(如:填报表格、现场照片等)")
49 - private String dataFile; 49 + private List<String> dataFile;
50 50
51 @Schema(description = "催缴次数(未完成时的提醒次数)", requiredMode = Schema.RequiredMode.REQUIRED) 51 @Schema(description = "催缴次数(未完成时的提醒次数)", requiredMode = Schema.RequiredMode.REQUIRED)
52 @NotNull(message = "催缴次数(未完成时的提醒次数)不能为空") 52 @NotNull(message = "催缴次数(未完成时的提醒次数)不能为空")
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/assigntasksinfo/AssignTasksInfoDO.java
@@ -71,7 +71,7 @@ public class AssignTasksInfoDO extends BaseDO { @@ -71,7 +71,7 @@ public class AssignTasksInfoDO extends BaseDO {
71 * 单位提交的任务文件路径(如:填报表格、现场照片等) 71 * 单位提交的任务文件路径(如:填报表格、现场照片等)
72 */ 72 */
73 @TableField(typeHandler = JacksonTypeHandler.class) 73 @TableField(typeHandler = JacksonTypeHandler.class)
74 - private List dataFile; 74 + private List<String> dataFile;
75 /** 75 /**
76 * 催缴次数(未完成时的提醒次数) 76 * 催缴次数(未完成时的提醒次数)
77 */ 77 */
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/AssignTasksConstants.java
@@ -13,4 +13,22 @@ public class AssignTasksConstants { @@ -13,4 +13,22 @@ public class AssignTasksConstants {
13 /* 完成*/ 13 /* 完成*/
14 public static final Integer ASSIGN_TASK_FINISH_1 = 1; 14 public static final Integer ASSIGN_TASK_FINISH_1 = 1;
15 15
  16 + /* 未读*/
  17 + public static final Integer ASSIGN_TASK_NEWFLAG_0 = 0;
  18 +
  19 + /*已读*/
  20 + public static final Integer ASSIGN_TASK_NEWFLAG_1 = 1;
  21 +
  22 + /*驳回*/
  23 + public static final Integer ASSIGN_TASK_REJECT_1 = 1;
  24 +
  25 + /*未超时*/
  26 + public static final Integer ASSIGN_TASK_IS_OVER_DUE_0 = 0;
  27 + /*超时*/
  28 + public static final Integer ASSIGN_TASK_IS_OVER_DUE_1 = 1;
  29 +
  30 + /* 催办短信场景配置*/
  31 + public static final int ASSIGN_TASK_SCENE = 6;
  32 + /*办理人角色*/
  33 + public static final String ASSIGN_ROLE_KEY = "zgs_leader";
16 } 34 }
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/ErrorCodeConstants.java
@@ -13,15 +13,18 @@ public interface ErrorCodeConstants { @@ -13,15 +13,18 @@ public interface ErrorCodeConstants {
13 // ========== server 派单 1-100-001-000 ========== 13 // ========== server 派单 1-100-001-000 ==========
14 ErrorCode ASSIGN_TASKS_NOT_EXISTS = new ErrorCode(1-100-001-000, "派单任务主表(记录派单任务基本信息)不存在"); 14 ErrorCode ASSIGN_TASKS_NOT_EXISTS = new ErrorCode(1-100-001-000, "派单任务主表(记录派单任务基本信息)不存在");
15 15
16 - ErrorCode ASSIGN_TASKS_NOT_EXISTS_001 = new ErrorCode(1-100-001-001, "派单任务主表(记录派单任务基本信息)不存在"); 16 + ErrorCode ASSIGN_TASKS_IS_FINISH = new ErrorCode(1-100-001-001, "派单任务已完成,不允许修改");
17 ErrorCode ASSIGN_TASKS_NOT_EXISTS_002 = new ErrorCode(1-100-001-002, "未全部完成,不能确认"); 17 ErrorCode ASSIGN_TASKS_NOT_EXISTS_002 = new ErrorCode(1-100-001-002, "未全部完成,不能确认");
18 - ErrorCode ASSIGN_TASKS_INFO_NOT_EXISTS_001 = new ErrorCode(1-100-001-003, "派发单位不能为空");  
19 18
20 - ErrorCode ASSIGN_TASKS_INFO_NOT_EXISTS_004 = new ErrorCode(1-100-002-004, "派单已完成,不允许删除"); 19 + ErrorCode ASSIGN_TASKS_INFO_NOT_EXISTS = new ErrorCode(1-100-002-000, "派单任务不存在");
  20 + ErrorCode ASSIGN_TASKS_INFO_TASKID_NOT_EXISTS = new ErrorCode(1-100-002-001, "派发Id不能为空");
21 21
22 - ErrorCode ASSIGN_TASKS_INFO_NOT_EXISTS_003 = new ErrorCode(1-100-002-003, "更新派单任务失败:任务ID不能为空"); 22 + ErrorCode ASSIGN_TASKS_INFO_TASKID_REJECT = new ErrorCode(1-100-002-002,"打回异常");
23 23
24 - ErrorCode ASSIGN_TASKS_INFO_NOT_EXISTS = new ErrorCode(1-100-002-000, "派发单位不能为空"); 24 + ErrorCode ASSIGN_TASKS_INFO_003 = new ErrorCode(1-100-002-003,"派发任务已删除,无法提交");
  25 + ErrorCode ASSIGN_TASKS_INFO_004 = new ErrorCode(1-100-002-004,"短信发送失败");
  26 +
  27 + ErrorCode ASSIGN_TASKS_INFO_005 = new ErrorCode(1-100-002-005,"任务提交成功,但通知短信发送失败,请联系管理员");
25 28
26 // ========== 人机材料 1-100-003-000========== 29 // ========== 人机材料 1-100-003-000==========
27 30
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasks/AssignTasksServiceImpl.java
@@ -12,6 +12,8 @@ import com.zteits.urbanops.module.garden.dal.mysql.assigntasks.AssignTasksMapper @@ -12,6 +12,8 @@ import com.zteits.urbanops.module.garden.dal.mysql.assigntasks.AssignTasksMapper
12 import com.zteits.urbanops.module.garden.dal.mysql.assigntasksinfo.AssignTasksInfoMapper; 12 import com.zteits.urbanops.module.garden.dal.mysql.assigntasksinfo.AssignTasksInfoMapper;
13 import com.zteits.urbanops.module.garden.enums.AssignTasksConstants; 13 import com.zteits.urbanops.module.garden.enums.AssignTasksConstants;
14 import com.zteits.urbanops.module.garden.service.assigntasksinfo.AssignTasksInfoService; 14 import com.zteits.urbanops.module.garden.service.assigntasksinfo.AssignTasksInfoService;
  15 +import com.zteits.urbanops.module.system.api.dept.DeptApi;
  16 +import com.zteits.urbanops.module.system.api.dept.dto.DeptRespDTO;
15 import jakarta.annotation.Resource; 17 import jakarta.annotation.Resource;
16 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
17 import org.springframework.stereotype.Service; 19 import org.springframework.stereotype.Service;
@@ -22,10 +24,14 @@ import org.springframework.validation.annotation.Validated; @@ -22,10 +24,14 @@ import org.springframework.validation.annotation.Validated;
22 import java.time.LocalDateTime; 24 import java.time.LocalDateTime;
23 import java.util.ArrayList; 25 import java.util.ArrayList;
24 import java.util.List; 26 import java.util.List;
  27 +import java.util.Objects;
  28 +import java.util.stream.Collectors;
25 29
26 import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; 30 import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception;
  31 +import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserDeptId;
27 import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; 32 import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
28 -import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*; 33 +import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.ASSIGN_TASKS_NOT_EXISTS;
  34 +import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.ASSIGN_TASKS_NOT_EXISTS_002;
29 35
30 /** 36 /**
31 * 派单任务主表(记录派单任务基本信息) Service 实现类 37 * 派单任务主表(记录派单任务基本信息) Service 实现类
@@ -46,6 +52,11 @@ public class AssignTasksServiceImpl implements AssignTasksService { @@ -46,6 +52,11 @@ public class AssignTasksServiceImpl implements AssignTasksService {
46 @Resource 52 @Resource
47 private AssignTasksInfoService assignTasksInfoService; 53 private AssignTasksInfoService assignTasksInfoService;
48 54
  55 + @Resource
  56 + private AssignTasksInfoMapper assignTasksInfoMapper;
  57 + @Resource
  58 + private DeptApi deptApi;
  59 +
49 60
50 @Transactional(rollbackFor = Exception.class) 61 @Transactional(rollbackFor = Exception.class)
51 @Override 62 @Override
@@ -54,10 +65,6 @@ public class AssignTasksServiceImpl implements AssignTasksService { @@ -54,10 +65,6 @@ public class AssignTasksServiceImpl implements AssignTasksService {
54 AssignTasksDO assignTasks = BeanUtils.toBean(createReqVO, AssignTasksDO.class); 65 AssignTasksDO assignTasks = BeanUtils.toBean(createReqVO, AssignTasksDO.class);
55 assignTasksMapper.insert(assignTasks); 66 assignTasksMapper.insert(assignTasks);
56 //保存单位明细 67 //保存单位明细
57 - String[] originalCompanyIds = createReqVO.getCompanyIds();  
58 - if (originalCompanyIds == null || originalCompanyIds.length == 0) {  
59 - throw exception(ASSIGN_TASKS_NOT_EXISTS_001);  
60 - }  
61 assignTasksInfoService.saveAssignTasksInfos(createReqVO.getCompanyIds(), assignTasks.getId()); 68 assignTasksInfoService.saveAssignTasksInfos(createReqVO.getCompanyIds(), assignTasks.getId());
62 //保存单位明细 69 //保存单位明细
63 70
@@ -74,13 +81,37 @@ public class AssignTasksServiceImpl implements AssignTasksService { @@ -74,13 +81,37 @@ public class AssignTasksServiceImpl implements AssignTasksService {
74 AssignTasksDO updateObj = BeanUtils.toBean(updateReqVO, AssignTasksDO.class); 81 AssignTasksDO updateObj = BeanUtils.toBean(updateReqVO, AssignTasksDO.class);
75 assignTasksMapper.updateById(updateObj); 82 assignTasksMapper.updateById(updateObj);
76 83
  84 + // 1. 处理关联的单位任务信息(仅当存在单位ID列表时)
  85 + List<String> companyIds = updateReqVO.getCompanyIds();
77 // add by wq 20251116 86 // add by wq 20251116
78 - String[] originalCompanyIds = updateReqVO.getCompanyIds();  
79 - if (originalCompanyIds == null || originalCompanyIds.length == 0) {  
80 - throw exception(ASSIGN_TASKS_NOT_EXISTS_001); 87 + List<AssignTasksInfoDO> assignTaskInfoList = assignTasksInfoMapper.selectList(AssignTasksInfoDO::getTaskId, updateObj.getId());
  88 + if (CollectionUtils.isEmpty(assignTaskInfoList)) {
  89 + // 检查当前派单的公司ID是否不在保留列表中
  90 + for (AssignTasksInfoDO taskInfo : assignTaskInfoList) {
  91 + // 检查当前派单的公司ID是否不在保留列表中
  92 + if (!companyIds.contains(taskInfo.getCompanyId())) {
  93 + // 已读状态(newFlag=1)不允许删除,抛出异常
  94 + if (taskInfo.getFinish() != 1) {
  95 + //throw exception(ASSIGN_TASKS_IS_FINISH);
  96 + } else {
  97 + // 未读状态,执行删除操作
  98 + assignTasksInfoService.deleteAssignTasksInfo(taskInfo.getId());
  99 + }
  100 + }
  101 + }
81 } 102 }
82 103
83 - assignTasksInfoService.updateAssignTasksInfos(updateReqVO.getCompanyIds(), updateObj.getId()); 104 +
  105 + //获取已添加单位集合
  106 + List<String> existingCompanyIds = assignTaskInfoList.stream()
  107 + .map(info -> String.valueOf(info.getCompanyId()))
  108 + .collect(Collectors.toList());
  109 + //排除 existingCompanyIds 中的元素 作为新增的单位
  110 + List<String> filteredCompanyIds = companyIds.stream()
  111 + .filter(Objects::nonNull)
  112 + .filter(id -> !existingCompanyIds.contains(id)) // 直接用列表 contains()
  113 + .collect(Collectors.toList());
  114 + assignTasksInfoService.saveAssignTasksInfos(filteredCompanyIds, updateObj.getId());
84 } 115 }
85 116
86 @Override 117 @Override
@@ -89,6 +120,10 @@ public class AssignTasksServiceImpl implements AssignTasksService { @@ -89,6 +120,10 @@ public class AssignTasksServiceImpl implements AssignTasksService {
89 validateAssignTasksExists(id); 120 validateAssignTasksExists(id);
90 // 删除 121 // 删除
91 assignTasksMapper.deleteById(id); 122 assignTasksMapper.deleteById(id);
  123 + //删除关联的明细
  124 + List<Long> ids = new ArrayList<>();
  125 + ids.add(id);
  126 + assiAssignTasksInfoMapper.deleteAssignTaskInfoByTaskId(ids);
92 } 127 }
93 128
94 @Override 129 @Override
@@ -114,7 +149,13 @@ public class AssignTasksServiceImpl implements AssignTasksService { @@ -114,7 +149,13 @@ public class AssignTasksServiceImpl implements AssignTasksService {
114 149
115 @Override 150 @Override
116 public PageResult<AssignTasksDO> getAssignTasksPage(AssignTasksPageReqVO pageReqVO) { 151 public PageResult<AssignTasksDO> getAssignTasksPage(AssignTasksPageReqVO pageReqVO) {
117 - return assignTasksMapper.selectPage(pageReqVO); 152 + //add by wq 派单任务只能总公司查询
  153 + DeptRespDTO deptRespDTO = deptApi.getDept(getLoginUserDeptId());
  154 + if (deptRespDTO.getParentId() != 0) {
  155 + return null;
  156 + }
  157 + //add by wq 派单任务只能总公司查询
  158 + return assignTasksMapper.selectPage(pageReqVO);
118 } 159 }
119 160
120 161
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoService.java
@@ -67,8 +67,36 @@ public interface AssignTasksInfoService { @@ -67,8 +67,36 @@ public interface AssignTasksInfoService {
67 * @param taskId 67 * @param taskId
68 * @Return java.lang.Long 68 * @Return java.lang.Long
69 */ 69 */
70 - public void saveAssignTasksInfos(String[] companyIds, Long taskId); 70 + public void saveAssignTasksInfos(List<String> companyIds, Long taskId);
71 71
72 - public void updateAssignTasksInfos(String[] companyIds, Long taskId); 72 + /**
  73 + * @Author wangqian
  74 + * @Description 根据任务id查询详情
  75 + * @Date 2025/11/25 11:22
  76 + * @Param taskId
  77 + * @Return void
  78 + */
  79 + public List<AssignTasksInfoDO> getAssignTasksInfos(Long taskId);
73 80
  81 + /**
  82 + * @Author wangqian
  83 + * @Description 派单驳回
  84 + * @Date 2025/8/22 19:53
  85 + * @Return int
  86 + */
  87 + public int rejectAssignTaskCompany(@Valid AssignTasksInfoSaveReqVO tdAssignTaskCompany);
  88 + /**
  89 + * @Author wangqian
  90 + * @Description 派单提醒
  91 + * @Date 2025/8/22 19:53
  92 + * @Return int
  93 + */
  94 + public int submissionAssignTaskCompany(@Valid AssignTasksInfoSaveReqVO tdAssignTaskCompany);
  95 + /**
  96 + * @Author wangqian
  97 + * @Description 派单反馈
  98 + * @Date 2025/8/22 19:53
  99 + * @Return int
  100 + */
  101 + public int feedbackAssignTaskCompany(@Valid AssignTasksInfoSaveReqVO tdAssignTaskCompany);
74 } 102 }
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoServiceImpl.java
1 package com.zteits.urbanops.module.garden.service.assigntasksinfo; 1 package com.zteits.urbanops.module.garden.service.assigntasksinfo;
2 2
  3 +import com.alibaba.fastjson.JSONObject;
3 import com.zteits.urbanops.framework.common.pojo.PageResult; 4 import com.zteits.urbanops.framework.common.pojo.PageResult;
4 import com.zteits.urbanops.framework.common.util.object.BeanUtils; 5 import com.zteits.urbanops.framework.common.util.object.BeanUtils;
5 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoPageReqVO; 6 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoPageReqVO;
6 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoSaveReqVO; 7 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoSaveReqVO;
  8 +import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO;
7 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO; 9 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO;
  10 +import com.zteits.urbanops.module.garden.dal.mysql.assigntasks.AssignTasksMapper;
8 import com.zteits.urbanops.module.garden.dal.mysql.assigntasksinfo.AssignTasksInfoMapper; 11 import com.zteits.urbanops.module.garden.dal.mysql.assigntasksinfo.AssignTasksInfoMapper;
  12 +import com.zteits.urbanops.module.garden.enums.AssignTasksConstants;
  13 +import com.zteits.urbanops.module.garden.util.http.OkHttpClientUtil;
  14 +import com.zteits.urbanops.module.system.api.dept.DeptApi;
  15 +import com.zteits.urbanops.module.system.api.dept.dto.DeptRespDTO;
  16 +import com.zteits.urbanops.module.system.api.user.AdminUserApi;
  17 +import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO;
9 import jakarta.annotation.Resource; 18 import jakarta.annotation.Resource;
10 import lombok.extern.slf4j.Slf4j; 19 import lombok.extern.slf4j.Slf4j;
11 -import org.apache.commons.lang3.StringUtils; 20 +import org.apache.commons.collections4.CollectionUtils;
12 import org.springframework.stereotype.Service; 21 import org.springframework.stereotype.Service;
13 import org.springframework.validation.annotation.Validated; 22 import org.springframework.validation.annotation.Validated;
14 23
15 -import java.util.*; 24 +import java.time.LocalDateTime;
  25 +import java.time.ZoneId;
  26 +import java.time.format.DateTimeFormatter;
  27 +import java.util.HashMap;
  28 +import java.util.List;
  29 +import java.util.Map;
  30 +import java.util.Objects;
16 import java.util.stream.Collectors; 31 import java.util.stream.Collectors;
17 32
18 import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; 33 import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception;
19 import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; 34 import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
  35 +import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserNickname;
20 import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*; 36 import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*;
21 37
22 /** 38 /**
@@ -31,13 +47,28 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService { @@ -31,13 +47,28 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService {
31 47
32 @Resource 48 @Resource
33 private AssignTasksInfoMapper assignTasksInfoMapper; 49 private AssignTasksInfoMapper assignTasksInfoMapper;
  50 + @Resource
  51 + private AssignTasksMapper assignTasksMapper;
  52 +
  53 + @Resource
  54 + private DeptApi deptApi;
  55 + @Resource
  56 + private AdminUserApi adminUserApi;
34 57
  58 + private String SEND_SMS_CODE_URL = "";
  59 +
  60 + // 时间格式常量(与之前保持一致)
  61 + public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss";
  62 +
  63 + // 1. 定义线程安全的格式化器(全局复用,无需重复创建)
  64 + private static final DateTimeFormatter DEADLINE_FORMATTER = DateTimeFormatter
  65 + .ofPattern(FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  66 + .withZone(ZoneId.of("GMT+8")); // 时区与之前配置一致,避免偏移
35 @Override 67 @Override
36 public Long createAssignTasksInfo(AssignTasksInfoSaveReqVO createReqVO) { 68 public Long createAssignTasksInfo(AssignTasksInfoSaveReqVO createReqVO) {
37 // 插入 69 // 插入
38 AssignTasksInfoDO assignTasksInfo = BeanUtils.toBean(createReqVO, AssignTasksInfoDO.class); 70 AssignTasksInfoDO assignTasksInfo = BeanUtils.toBean(createReqVO, AssignTasksInfoDO.class);
39 assignTasksInfoMapper.insert(assignTasksInfo); 71 assignTasksInfoMapper.insert(assignTasksInfo);
40 -  
41 // 返回 72 // 返回
42 return assignTasksInfo.getId(); 73 return assignTasksInfo.getId();
43 } 74 }
@@ -83,16 +114,25 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService { @@ -83,16 +114,25 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService {
83 } 114 }
84 115
85 @Override 116 @Override
86 - public void saveAssignTasksInfos(String[] companyIds, Long taskId) { 117 + public void saveAssignTasksInfos(List<String> companyIds, Long taskId) {
87 // 获得用户基本信息 118 // 获得用户基本信息
88 - String userId = String.valueOf(getLoginUserId());  
89 - if (companyIds != null && companyIds.length > 0) { 119 + if (companyIds != null && companyIds.size() > 0) {
  120 + //1、获取单位集合
  121 + List<DeptRespDTO> deptList = deptApi.getChildDeptList(0L);
  122 + Map<Long, String> companyIdToNameMap = CollectionUtils.isEmpty(deptList)
  123 + ? Map.of() // 空列表返回空不可变 Map(避免 null)
  124 + : deptList.stream()
  125 + // 转 Map:key=companyId,value=companyName;key 冲突时保留最后一个(可调整)
  126 + .collect(Collectors.toMap(
  127 + DeptRespDTO::getId, // key 映射:取 companyId
  128 + dept -> dept.getName().trim(), // value 映射:取 companyName(去空格)
  129 + (oldValue, newValue) -> newValue
  130 + ));
90 for (String companyId : companyIds) { 131 for (String companyId : companyIds) {
91 AssignTasksInfoSaveReqVO assignTaskInfo = new AssignTasksInfoSaveReqVO(); 132 AssignTasksInfoSaveReqVO assignTaskInfo = new AssignTasksInfoSaveReqVO();
92 assignTaskInfo.setCompanyId(companyId); 133 assignTaskInfo.setCompanyId(companyId);
93 - //assignTaskInfo.setCompanyName(CompanyConstant.getCompanyName(Long.parseLong(companyId))); 134 + assignTaskInfo.setCompanyName(companyIdToNameMap.get(Long.valueOf(companyId)));
94 assignTaskInfo.setTaskId(taskId); 135 assignTaskInfo.setTaskId(taskId);
95 - assignTaskInfo.setUpdater(userId);  
96 AssignTasksInfoDO assignTasksInfo = BeanUtils.toBean(assignTaskInfo, AssignTasksInfoDO.class); 136 AssignTasksInfoDO assignTasksInfo = BeanUtils.toBean(assignTaskInfo, AssignTasksInfoDO.class);
97 137
98 assignTasksInfoMapper.insert(assignTasksInfo); 138 assignTasksInfoMapper.insert(assignTasksInfo);
@@ -101,74 +141,108 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService { @@ -101,74 +141,108 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService {
101 } 141 }
102 142
103 @Override 143 @Override
104 - public void updateAssignTasksInfos(String[] companyIds, Long taskId) {  
105 - // 1. 日志与入参校验(提前拦截无效参数)  
106 - log.info("开始更新派单任务的公司关联信息 | 任务ID:{},目标公司ID列表:{}",  
107 - taskId, Arrays.toString(companyIds));  
108 - 144 + public List<AssignTasksInfoDO> getAssignTasksInfos(Long taskId) {
109 if (taskId == null) { 145 if (taskId == null) {
110 - log.error("更新派单任务失败:任务ID不能为空");  
111 - throw exception(ASSIGN_TASKS_INFO_NOT_EXISTS_003); // 假设 PARAM_ERROR 是通用参数错误码,需替换为实际枚举 146 + throw exception(ASSIGN_TASKS_INFO_TASKID_NOT_EXISTS);
112 } 147 }
  148 + return assignTasksInfoMapper.selectList(AssignTasksInfoDO::getTaskId, taskId);
  149 + }
113 150
114 - // 2. 获取当前登录用户(校验用户有效性)  
115 - Long loginUserId = getLoginUserId();  
116 -  
117 - // 3. 预处理目标公司ID列表(避免重复转换,处理null场景)  
118 - List<String> targetCompanyIdStrs = Optional.ofNullable(companyIds)  
119 - .map(Arrays::asList)  
120 - .orElse(Collections.emptyList())  
121 - .stream()  
122 - .filter(StringUtils::isNotBlank) // 过滤空字符串(避免无效数据)  
123 - .distinct() // 去重:避免重复添加同一公司  
124 - .collect(Collectors.toList());  
125 -  
126 - // 4. 查询该任务下已关联的派单记录  
127 - List<AssignTasksInfoDO> existingAssignTaskInfos = assignTasksInfoMapper  
128 - .selectList(AssignTasksInfoDO::getTaskId, taskId);  
129 - log.info("当前任务已关联的派单记录数:{}", existingAssignTaskInfos.size());  
130 -  
131 - // 4.1 提取已关联的公司ID(String类型,用于后续判断)  
132 - List<String> existingCompanyIdStrs = existingAssignTaskInfos.stream()  
133 - .map(info -> String.valueOf(info.getCompanyId())) // 统一转为String,避免类型不匹配  
134 - .collect(Collectors.toList());  
135 -  
136 - // 5. 处理需要删除的派单记录(不在目标列表中且未读的记录)  
137 - List<Long> needDeleteIds = new ArrayList<>();  
138 - for (AssignTasksInfoDO existingTask : existingAssignTaskInfos) {  
139 - String existingCompanyIdStr = String.valueOf(existingTask.getCompanyId());  
140 - // 目标列表不包含当前公司ID → 需要删除  
141 - if (!targetCompanyIdStrs.contains(existingCompanyIdStr)) {  
142 - // 已读状态(finish=1)不允许删除  
143 - if (Objects.equals(existingTask.getFinish(), 1)) {  
144 - log.error("删除派单失败:任务已读不允许删除 | 派单ID:{},公司ID:{}",  
145 - existingTask.getId(), existingCompanyIdStr);  
146 - throw exception(ASSIGN_TASKS_INFO_NOT_EXISTS_004); // 建议修改异常码语义为“已读任务不允许删除”  
147 - }  
148 - needDeleteIds.add(existingTask.getId());  
149 - } 151 + //派单驳回
  152 + @Override
  153 + public int rejectAssignTaskCompany(AssignTasksInfoSaveReqVO tdAssignTaskCompany) {
  154 + AssignTasksInfoDO assignTaskInfo = assignTasksInfoMapper.selectById(tdAssignTaskCompany.getId());
  155 + //单位任务完成状态(0:未完成,1:已完成)
  156 + if (assignTaskInfo != null && 1 == assignTaskInfo.getFinish()) {
  157 + AssignTasksInfoDO updateAssignTaskInfo = new AssignTasksInfoDO();
  158 + updateAssignTaskInfo.setId(tdAssignTaskCompany.getId());
  159 + updateAssignTaskInfo.setFinish(AssignTasksConstants.ASSIGN_TASK_FINISH_0);
  160 + updateAssignTaskInfo.setNewFlagTime(null);
  161 + updateAssignTaskInfo.setIsReject(AssignTasksConstants.ASSIGN_TASK_REJECT_1);
  162 + updateAssignTaskInfo.setRejectRemark(tdAssignTaskCompany.getRejectRemark());
  163 + updateAssignTaskInfo.setNewFlag(AssignTasksConstants.ASSIGN_TASK_NEWFLAG_0);
  164 + return assignTasksInfoMapper.updateById(updateAssignTaskInfo);
  165 + } else {
  166 + throw exception(ASSIGN_TASKS_INFO_TASKID_REJECT);
150 } 167 }
  168 + }
151 169
152 - // 5.1 批量删除(减少数据库交互)  
153 - if (!needDeleteIds.isEmpty()) {  
154 - this.deleteAssignTasksInfoListByIds(needDeleteIds);  
155 - log.info("批量删除派单记录成功 | 删除ID列表:{}", needDeleteIds); 170 + @Override
  171 + public int submissionAssignTaskCompany(AssignTasksInfoSaveReqVO taskInfo) {
  172 + // 2. 查询任务详情(判断任务是否存在)
  173 + AssignTasksInfoDO existingTask = assignTasksInfoMapper.selectById(taskInfo.getId());
  174 + if (existingTask == null) {
  175 + throw exception(ASSIGN_TASKS_INFO_NOT_EXISTS);
156 } 176 }
157 -  
158 - // 6. 处理需要新增的派单记录(目标列表中不存在于已关联列表的公司)  
159 - for (String targetCompanyId : targetCompanyIdStrs) {  
160 - if (!existingCompanyIdStrs.contains(targetCompanyId)) {  
161 - // 直接构建DO对象(跳过VO转换,减少开销)  
162 - AssignTasksInfoSaveReqVO assignTaskInfo = new AssignTasksInfoSaveReqVO();  
163 - assignTaskInfo.setCompanyId(targetCompanyId);  
164 - //assignTaskInfo.setCompanyName(CompanyConstant.getCompanyName(Long.parseLong(companyId)));  
165 - assignTaskInfo.setTaskId(taskId);  
166 - assignTaskInfo.setCreator(String.valueOf(loginUserId));  
167 - AssignTasksInfoDO assignTasksInfo = BeanUtils.toBean(assignTaskInfo, AssignTasksInfoDO.class);  
168 -  
169 - assignTasksInfoMapper.insert(assignTasksInfo);  
170 - 177 + AssignTasksDO assignTasksDO = assignTasksMapper.selectById(existingTask.getTaskId());
  178 + LocalDateTime deadline = assignTasksDO.getDeadline();
  179 +
  180 + String formattedDeadline = Objects.nonNull(deadline)
  181 + ? DEADLINE_FORMATTER.format(deadline)
  182 + : ""; // 或 null
  183 + //填报人信息
  184 + AdminUserRespDTO user = adminUserApi.getUser(getLoginUserId());
  185 + String phonenumber = user.getMobile();
  186 + Map<String, Object> resultMap = new HashMap<String, Object>();
  187 + Map<String, String> templateParams = new HashMap<String, String>();
  188 + templateParams.put("companyName", existingTask.getCompanyName());
  189 + templateParams.put("taskName", assignTasksDO.getTaskName());
  190 + templateParams.put("deadline", formattedDeadline);
  191 + resultMap.put("mobile", phonenumber);//手机号
  192 + resultMap.put("scene", AssignTasksConstants.ASSIGN_TASK_SCENE);//短信场景
  193 + resultMap.put("templateParams", templateParams);//短信参数
  194 +
  195 + // 5. 发送短信通知
  196 + log.info("派单发送短信 signMap: {}", JSONObject.toJSONString(resultMap));
  197 + Map<String, String> headers = new HashMap<>(4);
  198 + headers.put("Content-Type","application/json");
  199 + headers.put("Connection","keep-alive");
  200 + headers.put("Accept","*/*");
  201 + headers.put("Accept-Encoding","gzip, deflate, br");
  202 + try {
  203 + String response = OkHttpClientUtil.doPostJson(SEND_SMS_CODE_URL, resultMap, headers);
  204 + log.info("派单发送短信 response: {}", JSONObject.toJSONString(response));
  205 +
  206 + JSONObject jsonObject = JSONObject.parseObject(response);
  207 +
  208 + if (jsonObject.getString("code").equals("0")) {
  209 + log.info("提交单位任务成功,已通知填报人:手机号={},任务ID={}", phonenumber, existingTask.getId());
  210 +
  211 + int newRushNum = (existingTask.getRushNum() == null) ? 1: existingTask.getRushNum() + 1;
  212 + //催办次数+1
  213 + AssignTasksInfoDO assignTaskInfo = new AssignTasksInfoDO();
  214 + assignTaskInfo.setId(existingTask.getId());
  215 + assignTaskInfo.setRushNum(newRushNum);
  216 + assignTasksInfoMapper.updateById(assignTaskInfo);
  217 + } else {
  218 + throw exception(ASSIGN_TASKS_INFO_004);
171 } 219 }
  220 + } catch (Exception e) {
  221 + log.error("提交单位任务成功,但短信通知失败:手机号={},任务ID={}",
  222 + phonenumber, existingTask.getId(), e);
  223 + throw exception(ASSIGN_TASKS_INFO_005);
  224 + }
  225 + return 1;
  226 + }
  227 +
  228 + @Override
  229 + public int feedbackAssignTaskCompany(AssignTasksInfoSaveReqVO tdAssignTaskCompany) {
  230 + AssignTasksInfoDO assignTaskInfo = assignTasksInfoMapper.selectById(tdAssignTaskCompany.getId());
  231 + if (assignTaskInfo != null) {
  232 + AdminUserRespDTO user = adminUserApi.getUser(getLoginUserId());
  233 + AssignTasksInfoDO updateAssignTaskInfo = new AssignTasksInfoDO();
  234 + updateAssignTaskInfo.setId(tdAssignTaskCompany.getId());
  235 + updateAssignTaskInfo.setFinish(AssignTasksConstants.ASSIGN_TASK_FINISH_1);//已完成
  236 + updateAssignTaskInfo.setDataFile(tdAssignTaskCompany.getDataFile());
  237 + updateAssignTaskInfo.setRemark(tdAssignTaskCompany.getRemark());
  238 + updateAssignTaskInfo.setWriteTime(LocalDateTime.now());
  239 + //填报人信息
  240 + updateAssignTaskInfo.setWritePersonId(String.valueOf(user.getId()));
  241 + updateAssignTaskInfo.setWritePerson(getLoginUserNickname());
  242 + updateAssignTaskInfo.setWritePersonPhone(user.getMobile());
  243 + return assignTasksInfoMapper.updateById(updateAssignTaskInfo);
  244 + } else {
  245 + throw exception(ASSIGN_TASKS_INFO_NOT_EXISTS);
172 } 246 }
173 } 247 }
174 } 248 }
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/personalcost/PersonalCostServiceImpl.java
@@ -7,6 +7,7 @@ import com.zteits.urbanops.module.garden.controller.admin.personalcost.vo.Person @@ -7,6 +7,7 @@ import com.zteits.urbanops.module.garden.controller.admin.personalcost.vo.Person
7 import com.zteits.urbanops.module.garden.dal.dataobject.personalcost.PersonalCostDO; 7 import com.zteits.urbanops.module.garden.dal.dataobject.personalcost.PersonalCostDO;
8 import com.zteits.urbanops.module.garden.dal.dataobject.teambizdomainrel.TeamBizdomainRelDO; 8 import com.zteits.urbanops.module.garden.dal.dataobject.teambizdomainrel.TeamBizdomainRelDO;
9 import com.zteits.urbanops.module.garden.dal.mysql.personalcost.PersonalCostMapper; 9 import com.zteits.urbanops.module.garden.dal.mysql.personalcost.PersonalCostMapper;
  10 +import com.zteits.urbanops.module.system.api.dept.DeptApi;
10 import jakarta.annotation.Resource; 11 import jakarta.annotation.Resource;
11 import org.springframework.stereotype.Service; 12 import org.springframework.stereotype.Service;
12 import org.springframework.transaction.annotation.Transactional; 13 import org.springframework.transaction.annotation.Transactional;
@@ -30,6 +31,9 @@ public class PersonalCostServiceImpl implements PersonalCostService { @@ -30,6 +31,9 @@ public class PersonalCostServiceImpl implements PersonalCostService {
30 @Resource 31 @Resource
31 private PersonalCostMapper personalCostMapper; 32 private PersonalCostMapper personalCostMapper;
32 33
  34 + @Resource
  35 + private DeptApi deptApi;
  36 +
33 @Override 37 @Override
34 @Transactional 38 @Transactional
35 public Long createPersonalCost(PersonalCostSaveReqVO createReqVO) { 39 public Long createPersonalCost(PersonalCostSaveReqVO createReqVO) {
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/wasterecord/WasteRecordServiceImpl.java
@@ -31,8 +31,6 @@ public class WasteRecordServiceImpl implements WasteRecordService { @@ -31,8 +31,6 @@ public class WasteRecordServiceImpl implements WasteRecordService {
31 @Resource 31 @Resource
32 private WasteRecordMapper wasteRecordMapper; 32 private WasteRecordMapper wasteRecordMapper;
33 33
34 - @Resource  
35 - TeamBizdomainRelService teamBizdomainRelService;  
36 @Override 34 @Override
37 @Transactional 35 @Transactional
38 public Long createWasteRecord(WasteRecordSaveReqVO createReqVO) { 36 public Long createWasteRecord(WasteRecordSaveReqVO createReqVO) {