diff --git a/urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApi.java b/urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApi.java
index f81b7aa..969bd8a 100644
--- a/urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApi.java
+++ b/urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApi.java
@@ -1,6 +1,10 @@
package com.zteits.urbanops.module.bpm.api.task;
+import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO;
+import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskReturnReqVO;
+import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
+import org.springframework.web.bind.annotation.RequestBody;
/**
* 流程任务 Api 接口
@@ -18,4 +22,18 @@ public interface BpmProcessTaskApi {
void triggerTask(@NotEmpty(message = "流程实例的编号不能为空") String processInstanceId,
@NotEmpty(message = "任务 Key 不能为空") String taskDefineKey);
+ /**
+ * 通过
+ *
+ * @param reqVO 流程实例编号
+ */
+ void approveTask(@Valid BpmTaskApproveReqVO reqVO);
+
+ /**
+ * 退回
+ *
+ * @param reqVO 流程实例编号
+ */
+ void returnTask(@Valid BpmTaskReturnReqVO reqVO);
+
}
diff --git a/urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApiImpl.java b/urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApiImpl.java
index 8f52fc2..b7effd8 100644
--- a/urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApiImpl.java
+++ b/urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApiImpl.java
@@ -1,10 +1,14 @@
package com.zteits.urbanops.module.bpm.api.task;
+import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO;
+import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskReturnReqVO;
import com.zteits.urbanops.module.bpm.service.task.BpmTaskService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
+import static com.zteits.urbanops.framework.web.core.util.WebFrameworkUtils.getLoginUserId;
+
/**
* 流程任务 Api 实现类
*
@@ -22,4 +26,14 @@ public class BpmProcessTaskApiImpl implements BpmProcessTaskApi {
bpmTaskService.triggerTask(processInstanceId, taskDefineKey);
}
+ @Override
+ public void approveTask(BpmTaskApproveReqVO reqVO) {
+ bpmTaskService.approveTask(getLoginUserId(), reqVO);
+ }
+
+ @Override
+ public void returnTask(BpmTaskReturnReqVO reqVO) {
+ bpmTaskService.returnTask(getLoginUserId(), reqVO);
+ }
+
}
diff --git a/urbanops-module-garden/pom.xml b/urbanops-module-garden/pom.xml
index 8ea1192..7393e28 100644
--- a/urbanops-module-garden/pom.xml
+++ b/urbanops-module-garden/pom.xml
@@ -126,6 +126,12 @@
urbanops-module-system
${revision}
+
+ com.zteits.boot
+ urbanops-module-bpm
+ 2025.10-SNAPSHOT
+ compile
+
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/AssignTasksInfoController.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/AssignTasksInfoController.java
index 10860f2..a263297 100644
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/AssignTasksInfoController.java
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/AssignTasksInfoController.java
@@ -9,6 +9,7 @@ import com.zteits.urbanops.framework.excel.core.util.ExcelUtils;
import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoPageReqVO;
import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoRespVO;
import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoSaveReqVO;
+import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoUpdReqVO;
import com.zteits.urbanops.module.garden.convert.AssignTaskConvert;
import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO;
import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO;
@@ -160,7 +161,7 @@ public class AssignTasksInfoController {
@PreAuthorize("@ss.hasPermission('garden:assign-tasks-info:update')")
@Operation(summary = "派单任务-驳回")
@PutMapping(value = "/reject")
- public CommonResult reject(@RequestBody AssignTasksInfoSaveReqVO assignTaskCompany) {
+ public CommonResult reject(@RequestBody AssignTasksInfoUpdReqVO assignTaskCompany) {
return success(assignTasksInfoService.rejectAssignTaskCompany(assignTaskCompany));
}
@@ -168,7 +169,7 @@ public class AssignTasksInfoController {
@PreAuthorize("@ss.hasPermission('garden:assign-tasks-info:update')")
@Operation(summary = "派单任务-催交")
@PutMapping(value = "/submission")
- public CommonResult submission(@RequestBody AssignTasksInfoSaveReqVO assignTaskCompany) {
+ public CommonResult submission(@RequestBody AssignTasksInfoUpdReqVO assignTaskCompany) {
return success(assignTasksInfoService.submissionAssignTaskCompany(assignTaskCompany));
}
@@ -176,7 +177,7 @@ public class AssignTasksInfoController {
@PreAuthorize("@ss.hasPermission('garden:assign-tasks-info:update')")
@Operation(summary = "派单任务-反馈")
@PutMapping(value = "/feedback")
- public CommonResult feedback(@RequestBody AssignTasksInfoSaveReqVO assignTaskCompany) {
+ public CommonResult feedback(@RequestBody AssignTasksInfoUpdReqVO assignTaskCompany) {
return success(assignTasksInfoService.feedbackAssignTaskCompany(assignTaskCompany));
}
}
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/vo/AssignTasksInfoUpdReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/vo/AssignTasksInfoUpdReqVO.java
new file mode 100644
index 0000000..b483e1f
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/vo/AssignTasksInfoUpdReqVO.java
@@ -0,0 +1,25 @@
+package com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - 派单任务-单位关联表(记录单位接收派单后的执行详情)新增/修改 Request VO")
+@Data
+public class AssignTasksInfoUpdReqVO {
+
+ @Schema(description = "自增ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12148")
+ private Long id;
+ @Schema(description = "驳回备注(当finish=2时,说明驳回原因)", example = "你说的对")
+ private String rejectRemark;
+
+ @Schema(description = "备注", example = "你猜")
+ private String remark;
+ @Schema(description = "单位提交的任务文件路径(如:填报表格、现场照片等)")
+ private List dataFile;
+
+}
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/assigntasks/AssignTasksDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/assigntasks/AssignTasksDO.java
index 2f1cabb..a3b2253 100644
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/assigntasks/AssignTasksDO.java
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/assigntasks/AssignTasksDO.java
@@ -58,6 +58,8 @@ public class AssignTasksDO extends BaseDO {
*/
private String note;
+ /*流程id*/
+ private String processInstanceId;
@Data
public static class TemplateFileDO implements Serializable {
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/AssignTasksConstants.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/AssignTasksConstants.java
index 40d32b1..cc798f5 100644
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/AssignTasksConstants.java
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/AssignTasksConstants.java
@@ -31,4 +31,8 @@ public class AssignTasksConstants {
public static final int ASSIGN_TASK_SCENE = 6;
/*办理人角色*/
public static final String ASSIGN_ROLE_KEY = "zgs_leader";
+ /**
+ * bpm流程标识 任务管理
+ */
+ public static final String ASSIGN_TASK_PROCESS = "common_assign_task";
}
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasks/AssignTasksServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasks/AssignTasksServiceImpl.java
index 05a3936..8bc015e 100644
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasks/AssignTasksServiceImpl.java
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasks/AssignTasksServiceImpl.java
@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zteits.urbanops.framework.common.pojo.PageResult;
import com.zteits.urbanops.framework.common.util.object.BeanUtils;
+import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils;
+import com.zteits.urbanops.module.bpm.api.task.BpmProcessInstanceApi;
+import com.zteits.urbanops.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.AssignTasksPageReqVO;
import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.AssignTasksSaveReqVO;
import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO;
@@ -12,8 +15,9 @@ import com.zteits.urbanops.module.garden.dal.mysql.assigntasks.AssignTasksMapper
import com.zteits.urbanops.module.garden.dal.mysql.assigntasksinfo.AssignTasksInfoMapper;
import com.zteits.urbanops.module.garden.enums.AssignTasksConstants;
import com.zteits.urbanops.module.garden.service.assigntasksinfo.AssignTasksInfoService;
-import com.zteits.urbanops.module.system.api.dept.DeptApi;
-import com.zteits.urbanops.module.system.api.dept.dto.DeptRespDTO;
+import com.zteits.urbanops.module.system.api.permission.RoleApi;
+import com.zteits.urbanops.module.system.api.user.AdminUserApi;
+import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -22,13 +26,14 @@ import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.function.Function;
import java.util.stream.Collectors;
+import static com.zteits.urbanops.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST;
import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.*;
+import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception0;
+import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getCompanyId;
import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.ASSIGN_TASKS_NOT_EXISTS;
import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.ASSIGN_TASKS_NOT_EXISTS_002;
@@ -53,9 +58,15 @@ public class AssignTasksServiceImpl implements AssignTasksService {
@Resource
private AssignTasksInfoMapper assignTasksInfoMapper;
+ //@Resource
+ //private DeptApi deptApi;
@Resource
- private DeptApi deptApi;
+ private RoleApi roleApi;
+ @Resource
+ AdminUserApi userApi;
+ @Resource
+ private BpmProcessInstanceApi processInstanceApi;
@Transactional(rollbackFor = Exception.class)
@Override
@@ -65,8 +76,8 @@ public class AssignTasksServiceImpl implements AssignTasksService {
assignTasksMapper.insert(assignTasks);
//保存单位明细
assignTasksInfoService.saveAssignTasksInfos(createReqVO.getCompanyIds(), assignTasks);
- //保存单位明细
-
+ //发起工作流
+ //processInstance(createReqVO, assignTasks.getId());
// 返回
return assignTasks.getId();
}
@@ -120,9 +131,7 @@ public class AssignTasksServiceImpl implements AssignTasksService {
// 删除
assignTasksMapper.deleteById(id);
//删除关联的明细
- List ids = new ArrayList<>();
- ids.add(id);
- assiAssignTasksInfoMapper.deleteAssignTaskInfoByTaskId(ids);
+ assiAssignTasksInfoMapper.deleteAssignTaskInfoByTaskId(Arrays.asList(id));
}
@Override
@@ -174,8 +183,6 @@ public class AssignTasksServiceImpl implements AssignTasksService {
if(allSubTaskFinished) {
assignTasks.setParentFinish(AssignTasksConstants.ASSIGN_TASK_FINISH_1);
assignTasks.setFinishTime(LocalDateTime.now());
- assignTasks.setUpdateTime(LocalDateTime.now());
- assignTasks.setUpdater(String.valueOf(getLoginUserId()));
assignTasksMapper.updateById(assignTasks);
} else {
throw exception(ASSIGN_TASKS_NOT_EXISTS_002);
@@ -242,4 +249,65 @@ public class AssignTasksServiceImpl implements AssignTasksService {
return updatedCount;
}
+ /**
+ * @Author wangqian
+ * @Description 创建工作流
+ * @Date 2025/12/14 10:46
+ * @Param createReqVO
+ * @param id
+ * @Return void
+ */
+ private void processInstance(AssignTasksSaveReqVO createReqVO, Long id){
+ //流程处理人
+// List userIds = roleApi.getUserIdsByRoleCode(AssignTasksConstants.ASSIGN_ROLE_KEY);
+// if (userIds == null) {
+// throw exception0(BAD_REQUEST.getCode(),"上报人未配置");
+// }
+// List companyIdStrs = createReqVO.getCompanyIds();
+//
+// List users = userApi.getUserList(userIds);
+// Map> deptUserMap = users.stream()
+// .filter(user -> user.getDeptId() != null)
+// .collect(Collectors.groupingBy(AdminUserRespDTO::getDeptId));
+// //转换公司ID为Long并校验存在性
+// Set companyIdSet = new HashSet<>();
+// for (String companyIdStr : companyIdStrs) {
+// Long companyId = Long.parseLong(companyIdStr);
+// companyIdSet.add(companyId);
+// if (!deptUserMap.containsKey(companyId)) {
+// throw exception0(BAD_REQUEST.getCode(), "上报人未配置");
+// }
+// }
+// //提取每个部门的第一个用户
+// List distinctUsers = deptUserMap.entrySet().stream()
+// .filter(entry -> companyIdSet.contains(entry.getKey())) // 仅保留目标公司的用户
+// .map(entry -> entry.getValue().get(0))
+// .collect(Collectors.toList());
+//
+// // 5. 提取用户ID列表
+// List userIds = distinctUsers.stream().map(AdminUserRespDTO::getId).collect(Collectors.toList());
+
+ List userIds = new ArrayList<>();
+ userIds.add(148L);
+ userIds.add(151L);
+ //发起工作流
+ Map> startUserSelectAssignees = new HashMap<>();
+ startUserSelectAssignees.put("Activity_1r880r6",userIds);
+
+ // 发起 BPM 流程
+ Map processInstanceVariables = new HashMap<>();
+ processInstanceVariables.put("taskName", createReqVO.getTaskName());
+ processInstanceVariables.put("taskType", createReqVO.getTaskType());
+ processInstanceVariables.put("deadline", createReqVO.getDeadline());
+ String processInstanceId = processInstanceApi.createProcessInstance(SecurityFrameworkUtils.getLoginUserId(),
+ new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(AssignTasksConstants.ASSIGN_TASK_PROCESS)
+ .setVariables(processInstanceVariables)
+ .setBusinessKey(String.valueOf(id))
+ .setStartUserSelectAssignees(startUserSelectAssignees));
+
+ // 将工作流的编号,更新到 工单中
+ assignTasksMapper.updateById(new AssignTasksDO().setId(id).setProcessInstanceId(processInstanceId));
+
+ }
+
}
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoService.java
index bcde302..1a93180 100644
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoService.java
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoService.java
@@ -3,6 +3,7 @@ package com.zteits.urbanops.module.garden.service.assigntasksinfo;
import com.zteits.urbanops.framework.common.pojo.PageResult;
import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoPageReqVO;
import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoSaveReqVO;
+import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoUpdReqVO;
import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO;
import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO;
import jakarta.validation.Valid;
@@ -86,19 +87,19 @@ public interface AssignTasksInfoService {
* @Date 2025/8/22 19:53
* @Return int
*/
- public int rejectAssignTaskCompany(@Valid AssignTasksInfoSaveReqVO tdAssignTaskCompany);
+ public int rejectAssignTaskCompany(@Valid AssignTasksInfoUpdReqVO tdAssignTaskCompany);
/**
* @Author wangqian
* @Description 派单提醒
* @Date 2025/8/22 19:53
* @Return int
*/
- public int submissionAssignTaskCompany(@Valid AssignTasksInfoSaveReqVO tdAssignTaskCompany);
+ public int submissionAssignTaskCompany(@Valid AssignTasksInfoUpdReqVO tdAssignTaskCompany);
/**
* @Author wangqian
* @Description 派单反馈
* @Date 2025/8/22 19:53
* @Return int
*/
- public int feedbackAssignTaskCompany(@Valid AssignTasksInfoSaveReqVO tdAssignTaskCompany);
+ public int feedbackAssignTaskCompany(@Valid AssignTasksInfoUpdReqVO tdAssignTaskCompany);
}
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoServiceImpl.java
index 32a8c85..51d60cf 100644
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoServiceImpl.java
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoServiceImpl.java
@@ -1,20 +1,25 @@
package com.zteits.urbanops.module.garden.service.assigntasksinfo;
import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.zteits.urbanops.framework.common.pojo.PageResult;
import com.zteits.urbanops.framework.common.util.object.BeanUtils;
import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoPageReqVO;
import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoSaveReqVO;
+import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoUpdReqVO;
import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO;
import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO;
import com.zteits.urbanops.module.garden.dal.mysql.assigntasks.AssignTasksMapper;
import com.zteits.urbanops.module.garden.dal.mysql.assigntasksinfo.AssignTasksInfoMapper;
import com.zteits.urbanops.module.garden.enums.AssignTasksConstants;
-import com.zteits.urbanops.module.garden.util.http.OkHttpClientUtil;
import com.zteits.urbanops.module.system.api.dept.DeptApi;
import com.zteits.urbanops.module.system.api.dept.dto.DeptRespDTO;
+import com.zteits.urbanops.module.system.api.permission.RoleApi;
+import com.zteits.urbanops.module.system.api.sms.SmsCodeApi;
+import com.zteits.urbanops.module.system.api.sms.dto.code.SmsCodeSendReqDTO;
import com.zteits.urbanops.module.system.api.user.AdminUserApi;
import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO;
+import com.zteits.urbanops.module.system.dal.dataobject.permission.RoleDO;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@@ -30,7 +35,10 @@ import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
+import static com.zteits.urbanops.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST;
import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception0;
+import static com.zteits.urbanops.framework.common.util.servlet.ServletUtils.getClientIP;
import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserNickname;
import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*;
@@ -52,10 +60,14 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService {
@Resource
private DeptApi deptApi;
+
+ @Resource
+ private RoleApi roleApi;
@Resource
private AdminUserApi adminUserApi;
- private String SEND_SMS_CODE_URL = "";
+ @Resource
+ private SmsCodeApi smsCodeApi;
// 时间格式常量(与之前保持一致)
public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss";
@@ -148,7 +160,7 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService {
//派单驳回
@Override
- public int rejectAssignTaskCompany(AssignTasksInfoSaveReqVO tdAssignTaskCompany) {
+ public int rejectAssignTaskCompany(AssignTasksInfoUpdReqVO tdAssignTaskCompany) {
AssignTasksInfoDO assignTaskInfo = assignTasksInfoMapper.selectById(tdAssignTaskCompany.getId());
//单位任务完成状态(0:未完成,1:已完成)
if (assignTaskInfo != null && 1 == assignTaskInfo.getFinish()) {
@@ -166,7 +178,7 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService {
}
@Override
- public int submissionAssignTaskCompany(AssignTasksInfoSaveReqVO taskInfo) {
+ public int submissionAssignTaskCompany(AssignTasksInfoUpdReqVO taskInfo) {
// 2. 查询任务详情(判断任务是否存在)
AssignTasksInfoDO existingTask = assignTasksInfoMapper.selectById(taskInfo.getId());
if (existingTask == null) {
@@ -180,51 +192,53 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService {
: ""; // 或 null
//填报人信息
AdminUserRespDTO user = adminUserApi.getUser(getLoginUserId());
+ //用户角色
+ List roles = roleApi.getRoleIdsByUserId(user.getId());
+ RoleDO roleDO = roleApi.getRoleIdByRoleCode(AssignTasksConstants.ASSIGN_ROLE_KEY);
+ if (roleDO == null) {
+ //未配置
+ throw exception0(BAD_REQUEST.getCode(),"系统未配置填报人角色");
+ }
+ if(!roles.contains(roleDO.getId())) {
+ //没有权限
+ throw exception0(BAD_REQUEST.getCode(),"该用户未授权");
+ }
String phonenumber = user.getMobile();
- Map resultMap = new HashMap();
- Map templateParams = new HashMap();
+ if (StringUtils.isEmpty(phonenumber)) {
+ throw exception0(BAD_REQUEST.getCode(),"该用户未配置手机号码");
+ }
+ Map templateParams = new HashMap();
templateParams.put("companyName", existingTask.getCompanyName());
templateParams.put("taskName", assignTasksDO.getTaskName());
templateParams.put("deadline", formattedDeadline);
- resultMap.put("mobile", phonenumber);//手机号
- resultMap.put("scene", AssignTasksConstants.ASSIGN_TASK_SCENE);//短信场景
- resultMap.put("templateParams", templateParams);//短信参数
// 5. 发送短信通知
- log.info("派单发送短信 signMap: {}", JSONObject.toJSONString(resultMap));
- Map headers = new HashMap<>(4);
- headers.put("Content-Type","application/json");
- headers.put("Connection","keep-alive");
- headers.put("Accept","*/*");
- headers.put("Accept-Encoding","gzip, deflate, br");
- try {
- String response = OkHttpClientUtil.doPostJson(SEND_SMS_CODE_URL, resultMap, headers);
- log.info("派单发送短信 response: {}", JSONObject.toJSONString(response));
-
- JSONObject jsonObject = JSONObject.parseObject(response);
-
- if (jsonObject.getString("code").equals("0")) {
- log.info("提交单位任务成功,已通知填报人:手机号={},任务ID={}", phonenumber, existingTask.getId());
-
- int newRushNum = (existingTask.getRushNum() == null) ? 1: existingTask.getRushNum() + 1;
- //催办次数+1
- AssignTasksInfoDO assignTaskInfo = new AssignTasksInfoDO();
- assignTaskInfo.setId(existingTask.getId());
- assignTaskInfo.setRushNum(newRushNum);
- assignTasksInfoMapper.updateById(assignTaskInfo);
- } else {
- throw exception(ASSIGN_TASKS_INFO_004);
- }
- } catch (Exception e) {
- log.error("提交单位任务成功,但短信通知失败:手机号={},任务ID={}",
- phonenumber, existingTask.getId(), e);
- throw exception(ASSIGN_TASKS_INFO_005);
+ log.info("派单发送短信 signMap: {}", JSONObject.toJSONString(templateParams));
+ SmsCodeSendReqDTO reqDTO = new SmsCodeSendReqDTO();
+ reqDTO.setScene(AssignTasksConstants.ASSIGN_TASK_SCENE);
+ reqDTO.setMobile(phonenumber);//手机号
+ reqDTO.setTemplateParams(templateParams);//短信参数
+ reqDTO.setCreateIp(getClientIP());
+ Long sendLogId = smsCodeApi.openSendSmsCode(reqDTO);
+ log.info("派单发送短信 sendLogId: {}", sendLogId);
+
+ if (sendLogId != null) {
+ log.info("提交单位任务成功,已通知填报人:手机号={},任务ID={}", phonenumber, existingTask.getId());
+
+ int newRushNum = (existingTask.getRushNum() == null) ? 1: existingTask.getRushNum() + 1;
+ //催办次数+1
+ AssignTasksInfoDO assignTaskInfo = new AssignTasksInfoDO();
+ assignTaskInfo.setId(existingTask.getId());
+ assignTaskInfo.setRushNum(newRushNum);
+ assignTasksInfoMapper.updateById(assignTaskInfo);
+ } else {
+ throw exception(ASSIGN_TASKS_INFO_004);
}
return 1;
}
@Override
- public int feedbackAssignTaskCompany(AssignTasksInfoSaveReqVO tdAssignTaskCompany) {
+ public int feedbackAssignTaskCompany(AssignTasksInfoUpdReqVO tdAssignTaskCompany) {
AssignTasksInfoDO assignTaskInfo = assignTasksInfoMapper.selectById(tdAssignTaskCompany.getId());
if (assignTaskInfo != null) {
AdminUserRespDTO user = adminUserApi.getUser(getLoginUserId());
diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApi.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApi.java
index 4ca9538..5d68412 100644
--- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApi.java
+++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApi.java
@@ -44,4 +44,21 @@ public interface RoleApi {
* @return 角色ID列表
*/
List getRoleIdsByUserId(Long userId);
+
+
+ /**
+ * 通过角色类型,获得用户编号列表
+ *
+ * @param roleCode 角色编码
+ * @return 用户ID列表
+ */
+ List getUserIdsByRoleCode(String roleCode);
+
+ /**
+ * 通过角色类型,获得角色
+ *
+ * @param roleCode 角色编码
+ * @return 角色
+ */
+ RoleDO getRoleIdByRoleCode(String roleCode);
}
diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApiImpl.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApiImpl.java
index a3eb71e..b2b1ebf 100644
--- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApiImpl.java
+++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApiImpl.java
@@ -39,4 +39,14 @@ public class RoleApiImpl implements RoleApi {
public List getRoleIdsByUserId(Long userId) {
return roleService.getRoleIdsByUserId(userId);
}
+
+ @Override
+ public List getUserIdsByRoleCode(String roleCode) {
+ return roleService.getUserIdsByRoleCode(roleCode);
+ }
+
+ @Override
+ public RoleDO getRoleIdByRoleCode(String roleCode) {
+ return roleService.getRoleIdByRoleCode(roleCode);
+ }
}
diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApi.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApi.java
index 4e0e51e..1fb0b47 100644
--- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApi.java
+++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApi.java
@@ -36,5 +36,10 @@ public interface SmsCodeApi {
* @param reqDTO 校验请求
*/
void validateSmsCode(@Valid SmsCodeValidateReqDTO reqDTO);
-
+ /**
+ * 根据模板发送短信
+ *
+ * @param reqDTO 发送请求
+ */
+ Long openSendSmsCode(@Valid SmsCodeSendReqDTO reqDTO);
}
diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApiImpl.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApiImpl.java
index 7506ebf..097a8bd 100644
--- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApiImpl.java
+++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApiImpl.java
@@ -36,4 +36,9 @@ public class SmsCodeApiImpl implements SmsCodeApi {
smsCodeService.validateSmsCode(reqDTO);
}
+ @Override
+ public Long openSendSmsCode(SmsCodeSendReqDTO reqDTO) {
+ return smsCodeService.openSendSmsCode(reqDTO);
+ }
+
}
diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java
index 7e47b4b..f8a0496 100644
--- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java
+++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java
@@ -8,6 +8,8 @@ import lombok.Data;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
+import java.util.Map;
+
/**
* 短信验证码的发送 Request DTO
*
@@ -34,4 +36,5 @@ public class SmsCodeSendReqDTO {
@NotEmpty(message = "发送 IP 不能为空")
private String createIp;
+ private Map templateParams;
}
diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/enums/sms/SmsSceneEnum.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/enums/sms/SmsSceneEnum.java
index b936eb8..1e5314a 100644
--- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/enums/sms/SmsSceneEnum.java
+++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/enums/sms/SmsSceneEnum.java
@@ -20,6 +20,8 @@ public enum SmsSceneEnum implements ArrayValuable {
MEMBER_UPDATE_MOBILE(2, "user-update-mobile", "会员用户 - 修改手机"),
MEMBER_UPDATE_PASSWORD(3, "user-update-password", "会员用户 - 修改密码"),
MEMBER_RESET_PASSWORD(4, "user-reset-password", "会员用户 - 忘记密码"),
+ USER_SMS_LOGIN(5, "SMS_319860269", "用户 - 手机号登陆"),
+ YL_USER_SMS_SUBMISSION(6, "SMS_493695107", "园林派单业务催交发送短信"),
ADMIN_MEMBER_LOGIN(21, "admin-sms-login", "后台用户 - 手机号登录"),
ADMIN_MEMBER_REGISTER(22, "admin-sms-register", "后台用户 - 手机号注册"),
diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleService.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleService.java
index 5d0b654..c37568d 100644
--- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleService.java
+++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleService.java
@@ -140,4 +140,13 @@ public interface RoleService {
* 通过用户编号,获得角色列表
*/
List getRoleIdsByUserId(Long userId);
+
+ /**
+ * 通过角色类型,获得用户列表
+ */
+ List getUserIdsByRoleCode(String roleCode);
+ /**
+ * 通过角色类型,获得角色
+ */
+ RoleDO getRoleIdByRoleCode(String roleCode);
}
diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleServiceImpl.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleServiceImpl.java
index ff3e3b8..ed00444 100644
--- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleServiceImpl.java
+++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleServiceImpl.java
@@ -288,6 +288,26 @@ public class RoleServiceImpl implements RoleService {
return list.stream().map(UserRoleDO::getRoleId).toList();
}
+ @Override
+ public List getUserIdsByRoleCode(String roleCode) {
+ RoleDO roleDO = roleMapper.selectOne(RoleDO::getCode, roleCode);
+ if (roleDO == null) {
+ return null;
+ }
+ QueryWrapper sql = new QueryWrapper<>();
+ sql.select("user_id");
+ List list = userRoleMapper.selectList(sql.lambda().eq(UserRoleDO::getRoleId, roleDO.getId()));
+ if (CollectionUtil.isEmpty(list)) {
+ return Collections.emptyList();
+ }
+ return list.stream().map(UserRoleDO::getUserId).toList();
+ }
+
+ @Override
+ public RoleDO getRoleIdByRoleCode(String roleCode) {
+ return roleMapper.selectOne(RoleDO::getCode, roleCode);
+ }
+
/**
* 获得自身的代理对象,解决 AOP 生效问题
*
diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeService.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeService.java
index 741801f..920c1c6 100644
--- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeService.java
+++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeService.java
@@ -36,5 +36,10 @@ public interface SmsCodeService {
* @param reqDTO 校验请求
*/
void validateSmsCode(@Valid SmsCodeValidateReqDTO reqDTO);
-
+ /**
+ * 发送短信
+ *
+ * @param reqDTO 校验请求
+ */
+ Long openSendSmsCode(@Valid SmsCodeSendReqDTO reqDTO);
}
diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeServiceImpl.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeServiceImpl.java
index 6cb0deb..cdc4b44 100644
--- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeServiceImpl.java
+++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeServiceImpl.java
@@ -109,4 +109,13 @@ public class SmsCodeServiceImpl implements SmsCodeService {
return lastSmsCode;
}
+ @Override
+ public Long openSendSmsCode(SmsCodeSendReqDTO reqDTO) {
+ SmsSceneEnum sceneEnum = SmsSceneEnum.getCodeByScene(reqDTO.getScene());
+ Assert.notNull(sceneEnum, "验证码场景({}) 查找不到配置", reqDTO.getScene());
+
+ // 发送验证码
+ return smsSendService.sendSingleSms(reqDTO.getMobile(), null, null,
+ sceneEnum.getTemplateCode(), reqDTO.getTemplateParams());
+ }
}