From 2c86a8bd60deed0dd0e044bad6fb83f75d19a332 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期日, 26 十月 2025 15:05:50 +0800
Subject: [PATCH] Merge branch 'feature-task'
---
ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java | 328 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 328 insertions(+), 0 deletions(-)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java
new file mode 100644
index 0000000..f35b74e
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java
@@ -0,0 +1,328 @@
+package com.ruoyi.web.controller.task;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.system.domain.SysTask;
+import com.ruoyi.system.domain.SysTaskLog;
+import com.ruoyi.system.domain.vo.TaskQueryVO;
+import com.ruoyi.system.domain.vo.TaskCreateVO;
+import com.ruoyi.system.domain.vo.TaskUpdateVO;
+import com.ruoyi.system.domain.vo.TaskStatisticsVO;
+import com.ruoyi.system.domain.enums.TaskStatus;
+import com.ruoyi.system.service.ISysTaskService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 浠诲姟绠$悊Controller
+ *
+ * @author ruoyi
+ * @date 2024-01-15
+ */
+@RestController
+@RequestMapping("/task")
+public class SysTaskController extends BaseController {
+
+ @Autowired
+ private ISysTaskService sysTaskService;
+
+ /**
+ * 鏌ヨ浠诲姟绠$悊鍒楄〃
+ */
+ @PreAuthorize("@ss.hasPermi('task:general:query')")
+ @GetMapping("/list")
+ public TableDataInfo list(TaskQueryVO queryVO) {
+ // 鍦ㄥ悗绔嚜鍔ㄨ幏鍙栧綋鍓嶇敤鎴蜂俊鎭紝瀹炵幇缁煎悎鏌ヨ
+ // 缁煎悎鏌ヨ锛氬綋鍓嶇敤鎴锋墍鍦ㄦ満鏋勪换鍔� + 褰撳墠鐢ㄦ埛鍒涘缓鐨勪换鍔� + 鍒嗛厤缁欏綋鍓嶇敤鎴风殑浠诲姟
+ Long currentUserId = getUserId();
+ Long currentDeptId = getDeptId();
+
+ // 濡傛灉鍓嶇娌℃湁浼犻�掕繖浜涘弬鏁帮紝鍒欎娇鐢ㄥ綋鍓嶇櫥褰曠敤鎴蜂俊鎭�
+ if (queryVO.getCreatorId() == null && queryVO.getAssigneeId() == null && queryVO.getDeptId() == null) {
+ queryVO.setDeptId(currentDeptId);
+ queryVO.setCreatorId(currentUserId);
+ queryVO.setAssigneeId(currentUserId);
+ }
+
+ startPage();
+ List<SysTask> list = sysTaskService.selectSysTaskList(queryVO);
+ return getDataTable(list);
+ }
+
+ /**
+ * 瀵煎嚭浠诲姟绠$悊鍒楄〃
+ */
+ @PreAuthorize("@ss.hasPermi('task:general:export')")
+ @Log(title = "浠诲姟绠$悊", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, TaskQueryVO queryVO) {
+ List<SysTask> list = sysTaskService.selectSysTaskList(queryVO);
+ ExcelUtil<SysTask> util = new ExcelUtil<SysTask>(SysTask.class);
+ util.exportExcel(response, list, "浠诲姟绠$悊鏁版嵁");
+ }
+
+ /**
+ * 鑾峰彇浠诲姟绠$悊璇︾粏淇℃伅
+ */
+ @PreAuthorize("@ss.hasPermi('task:general:query')")
+ @GetMapping(value = "/{taskId}")
+ public AjaxResult getInfo(@PathVariable("taskId") Long taskId) {
+ return success(sysTaskService.getTaskDetail(taskId));
+ }
+
+ /**
+ * 鏂板浠诲姟绠$悊
+ */
+ @PreAuthorize("@ss.hasPermi('task:general:add')")
+ @Log(title = "浠诲姟绠$悊", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody TaskCreateVO createVO) {
+ return toAjax(sysTaskService.insertSysTask(createVO));
+ }
+
+ /**
+ * 淇敼浠诲姟绠$悊
+ */
+ @PreAuthorize("@ss.hasPermi('task:general:edit')")
+ @Log(title = "浠诲姟绠$悊", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody TaskUpdateVO updateVO) {
+ return toAjax(sysTaskService.updateSysTask(updateVO));
+ }
+
+ /**
+ * 鍒犻櫎浠诲姟绠$悊
+ */
+ @PreAuthorize("@ss.hasPermi('task:general:remove')")
+ @Log(title = "浠诲姟绠$悊", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{taskIds}")
+ public AjaxResult remove(@PathVariable Long[] taskIds) {
+ return toAjax(sysTaskService.deleteSysTaskByTaskIds(taskIds));
+ }
+
+ /**
+ * 鍒嗛厤浠诲姟
+ */
+ @PreAuthorize("@ss.hasPermi('task:general:assign')")
+ @Log(title = "浠诲姟鍒嗛厤", businessType = BusinessType.UPDATE)
+ @PutMapping("/{taskId}/assign")
+ public AjaxResult assignTask(@PathVariable Long taskId, @RequestBody AssignTaskRequest request) {
+ return toAjax(sysTaskService.assignTask(taskId, request.getAssigneeId(), request.getRemark()));
+ }
+
+ /**
+ * 鏇存柊浠诲姟鐘舵��
+ */
+ @PreAuthorize("@ss.hasPermi('task:general:status')")
+ @Log(title = "浠诲姟鐘舵�佸彉鏇�", businessType = BusinessType.UPDATE)
+ @PutMapping("/{taskId}/status")
+ public AjaxResult changeTaskStatus(@PathVariable Long taskId, @RequestBody ChangeStatusRequest request) {
+ TaskStatus newStatus = TaskStatus.getByCode(request.getTaskStatus());
+ if (newStatus == null) {
+ return error("鏃犳晥鐨勪换鍔$姸鎬�");
+ }
+
+ // 濡傛灉鍖呭惈GPS浣嶇疆淇℃伅锛屼娇鐢ㄥ甫浣嶇疆鐨勬柟娉�
+ if (request.getLatitude() != null && request.getLongitude() != null) {
+ SysTaskLog locationLog = new SysTaskLog();
+ locationLog.setLatitude(request.getLatitude());
+ locationLog.setLongitude(request.getLongitude());
+ locationLog.setLocationAddress(request.getLocationAddress());
+ locationLog.setLocationProvince(request.getLocationProvince());
+ locationLog.setLocationCity(request.getLocationCity());
+ locationLog.setLocationDistrict(request.getLocationDistrict());
+ locationLog.setGpsAccuracy(request.getGpsAccuracy());
+ locationLog.setAltitude(request.getAltitude());
+ locationLog.setSpeed(request.getSpeed());
+ locationLog.setHeading(request.getHeading());
+
+ return toAjax(sysTaskService.changeTaskStatusWithLocation(taskId, newStatus, request.getRemark(), locationLog));
+ }
+
+ return toAjax(sysTaskService.changeTaskStatus(taskId, newStatus, request.getRemark()));
+ }
+
+ /**
+ * 鏌ヨ浠诲姟缁熻淇℃伅
+ */
+ @PreAuthorize("@ss.hasPermi('task:general:query')")
+ @GetMapping("/statistics")
+ public AjaxResult getStatistics() {
+ TaskStatisticsVO statistics = sysTaskService.getTaskStatistics();
+ return success(statistics);
+ }
+
+ /**
+ * 鏌ヨ瓒呮椂浠诲姟鍒楄〃
+ */
+ @PreAuthorize("@ss.hasPermi('task:general:query')")
+ @GetMapping("/overdue")
+ public AjaxResult getOverdueTasks() {
+ List<SysTask> list = sysTaskService.selectOverdueTasks();
+ return success(list);
+ }
+
+ /**
+ * 鏌ヨ鎴戠殑浠诲姟鍒楄〃
+ */
+ @PreAuthorize("@ss.hasPermi('task:general:query')")
+ @GetMapping("/my")
+ public AjaxResult getMyTasks() {
+ List<SysTask> list = sysTaskService.selectMyTasks(getUserId());
+ return success(list);
+ }
+
+ /**
+ * 鍒嗛厤浠诲姟璇锋眰瀵硅薄
+ */
+ public static class AssignTaskRequest {
+ private Long assigneeId;
+ private String remark;
+
+ public Long getAssigneeId() {
+ return assigneeId;
+ }
+
+ public void setAssigneeId(Long assigneeId) {
+ this.assigneeId = assigneeId;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+ }
+
+ /**
+ * 鍙樻洿鐘舵�佽姹傚璞�
+ */
+ public static class ChangeStatusRequest {
+ private String taskStatus;
+ private String remark;
+
+ // GPS浣嶇疆淇℃伅瀛楁
+ private Double latitude;
+ private Double longitude;
+ private String locationAddress;
+ private String locationProvince;
+ private String locationCity;
+ private String locationDistrict;
+ private Double gpsAccuracy;
+ private Double altitude;
+ private Double speed;
+ private Double heading;
+
+ public String getTaskStatus() {
+ return taskStatus;
+ }
+
+ public void setTaskStatus(String taskStatus) {
+ this.taskStatus = taskStatus;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public Double getLatitude() {
+ return latitude;
+ }
+
+ public void setLatitude(Double latitude) {
+ this.latitude = latitude;
+ }
+
+ public Double getLongitude() {
+ return longitude;
+ }
+
+ public void setLongitude(Double longitude) {
+ this.longitude = longitude;
+ }
+
+ public String getLocationAddress() {
+ return locationAddress;
+ }
+
+ public void setLocationAddress(String locationAddress) {
+ this.locationAddress = locationAddress;
+ }
+
+ public String getLocationProvince() {
+ return locationProvince;
+ }
+
+ public void setLocationProvince(String locationProvince) {
+ this.locationProvince = locationProvince;
+ }
+
+ public String getLocationCity() {
+ return locationCity;
+ }
+
+ public void setLocationCity(String locationCity) {
+ this.locationCity = locationCity;
+ }
+
+ public String getLocationDistrict() {
+ return locationDistrict;
+ }
+
+ public void setLocationDistrict(String locationDistrict) {
+ this.locationDistrict = locationDistrict;
+ }
+
+ public Double getGpsAccuracy() {
+ return gpsAccuracy;
+ }
+
+ public void setGpsAccuracy(Double gpsAccuracy) {
+ this.gpsAccuracy = gpsAccuracy;
+ }
+
+ public Double getAltitude() {
+ return altitude;
+ }
+
+ public void setAltitude(Double altitude) {
+ this.altitude = altitude;
+ }
+
+ public Double getSpeed() {
+ return speed;
+ }
+
+ public void setSpeed(Double speed) {
+ this.speed = speed;
+ }
+
+ public Double getHeading() {
+ return heading;
+ }
+
+ public void setHeading(Double heading) {
+ this.heading = heading;
+ }
+ }
+}
--
Gitblit v1.9.1