瀏覽代碼

完善uniapp农事模块

jiuling 9 月之前
父節點
當前提交
c30202ff8e

+ 0 - 3
ruoyi-modules/ruoyi-base/pom.xml

@@ -98,9 +98,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <configuration>
-                    <classifier>exec</classifier>
-                </configuration>
                 <executions>
                     <execution>
                         <goals>

+ 76 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/controller/AgriculturalTasksController.java

@@ -1,10 +1,16 @@
 package com.ruoyi.base.controller;
 
 import java.util.List;
+import java.io.File;
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
 import javax.servlet.http.HttpServletResponse;
 
 import com.ruoyi.common.core.domain.R;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.multipart.MultipartFile;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -37,6 +43,9 @@ public class AgriculturalTasksController extends BaseController
     @Autowired
     private IAgriculturalTasksService agriculturalTasksService;
 
+    @Value("${upload.task-image-dir}")
+    private String uploadDir;
+
     /**
      * 查询农事任务列表
      */
@@ -110,4 +119,71 @@ public class AgriculturalTasksController extends BaseController
 
         return R.ok(agriculturalTasksService.countStatusTypeTasks(agriculturalTasks));
     }
+    
+    /**
+     * 上传农事任务相关图片
+     */
+    @PostMapping("/uploadTaskImage")
+    public AjaxResult uploadTaskImage(MultipartFile file, String directory) throws IOException {
+        // 校验文件是否为空
+        if (file == null || file.isEmpty()) {
+            return AjaxResult.error("上传文件不能为空");
+        }
+        
+        // 校验文件大小(限制为5MB)
+        long maxSize = 5 * 1024 * 1024; // 5MB
+        if (file.getSize() > maxSize) {
+            return AjaxResult.error("文件大小不能超过5MB");
+        }
+        
+        // 校验文件类型
+        String originalFilename = file.getOriginalFilename();
+        String fileExtension = "";
+        if (originalFilename != null && originalFilename.contains(".")) {
+            fileExtension = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();
+        }
+        
+        // 只允许图片格式
+        if (!".jpg".equals(fileExtension) && !".jpeg".equals(fileExtension) 
+            && !".png".equals(fileExtension) && !".gif".equals(fileExtension)) {
+            return AjaxResult.error("只能上传JPG、JPEG、PNG、GIF格式的图片");
+        }
+        
+        // 设置默认目录,如果未指定
+        if (directory == null || directory.trim().isEmpty()) {
+            directory = uploadDir; // 默认目录
+        }
+        
+        // 检查目标目录是否存在,不存在则创建
+        File targetDir = new File(directory);
+        if (!targetDir.exists()) {
+            if (!targetDir.mkdirs()) {
+                return AjaxResult.error("无法创建目录:" + directory);
+            }
+        }
+        
+        // 生成唯一文件名避免冲突
+        String newFileName = UUID.randomUUID().toString().replace("-", "") + fileExtension;
+        File targetFile = new File(directory, newFileName);
+        
+        try {
+            // 保存文件
+            file.transferTo(targetFile);
+            
+            // 构造访问URL(这里需要根据实际项目配置的静态资源访问路径来设置)
+            String baseUrl = "/profile/"; // 静态资源访问基础路径,根据实际情况修改
+            String accessUrl = baseUrl + newFileName;
+            
+            // 返回结果
+            Map<String, String> result = new HashMap<>();
+            result.put("url", accessUrl);
+            result.put("fileName", newFileName);
+            result.put("originalFileName", originalFilename);
+            
+            return AjaxResult.success("上传成功", result);
+        } catch (IOException e) {
+            e.printStackTrace();
+            return AjaxResult.error("文件上传失败:" + e.getMessage());
+        }
+    }
 }

+ 17 - 138
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/AgriculturalTasks.java

@@ -2,6 +2,9 @@ package com.ruoyi.base.domain;
 
 import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.core.annotation.Excel;
@@ -13,6 +16,9 @@ import com.ruoyi.common.core.web.domain.BaseEntity;
  * @author ruoyi
  * @date 2025-07-22
  */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
 public class AgriculturalTasks extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
@@ -41,154 +47,27 @@ public class AgriculturalTasks extends BaseEntity
     private String taskStatus;
 
     /** 计划执行时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "计划执行时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+    @Excel(name = "计划执行时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm")
     private Date executeTime;
 
     /** 负责人名称 */
-    @Excel(name = "负责人名称")
+    @Excel(name = "负责人ID")
     private Long assigneeId;
 
+    /*
+    * 负责人名称
+    * */
+    @Excel(name = "负责人名称")
+    private String assigneeName;
+
     /** 实际完成时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "实际完成时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+    @Excel(name = "实际完成时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm")
     private Date completionTime;
 
     /** 完成说明 */
     @Excel(name = "完成说明")
     private String completionDesc;
 
-    /** 创建人ID */
-    @Excel(name = "创建人ID")
-    private Long creatorId;
-
-    public void setId(Long id) 
-    {
-        this.id = id;
-    }
-
-    public Long getId() 
-    {
-        return id;
-    }
-
-    public void setPlotId(Long plotId) 
-    {
-        this.plotId = plotId;
-    }
-
-    public Long getPlotId() 
-    {
-        return plotId;
-    }
-
-    public void setTaskName(String taskName) 
-    {
-        this.taskName = taskName;
-    }
-
-    public String getTaskName() 
-    {
-        return taskName;
-    }
-
-    public void setTaskImages(String taskImages) 
-    {
-        this.taskImages = taskImages;
-    }
-
-    public String getTaskImages() 
-    {
-        return taskImages;
-    }
-
-    public void setTypeName(String typeName) 
-    {
-        this.typeName = typeName;
-    }
-
-    public String getTypeName() 
-    {
-        return typeName;
-    }
-
-    public void setTaskStatus(String taskStatus) 
-    {
-        this.taskStatus = taskStatus;
-    }
-
-    public String getTaskStatus() 
-    {
-        return taskStatus;
-    }
-
-    public void setExecuteTime(Date executeTime) 
-    {
-        this.executeTime = executeTime;
-    }
-
-    public Date getExecuteTime() 
-    {
-        return executeTime;
-    }
-
-    public void setAssigneeId(Long assigneeId) 
-    {
-        this.assigneeId = assigneeId;
-    }
-
-    public Long getAssigneeId() 
-    {
-        return assigneeId;
-    }
-
-    public void setCompletionTime(Date completionTime) 
-    {
-        this.completionTime = completionTime;
-    }
-
-    public Date getCompletionTime() 
-    {
-        return completionTime;
-    }
-
-    public void setCompletionDesc(String completionDesc) 
-    {
-        this.completionDesc = completionDesc;
-    }
-
-    public String getCompletionDesc() 
-    {
-        return completionDesc;
-    }
-
-    public void setCreatorId(Long creatorId) 
-    {
-        this.creatorId = creatorId;
-    }
-
-    public Long getCreatorId() 
-    {
-        return creatorId;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("plotId", getPlotId())
-            .append("taskName", getTaskName())
-            .append("taskImages", getTaskImages())
-            .append("typeName", getTypeName())
-            .append("taskStatus", getTaskStatus())
-            .append("executeTime", getExecuteTime())
-            .append("assigneeId", getAssigneeId())
-            .append("remark", getRemark())
-            .append("completionTime", getCompletionTime())
-            .append("completionDesc", getCompletionDesc())
-            .append("creatorId", getCreatorId())
-            .append("createTime", getCreateTime())
-            .append("updateTime", getUpdateTime())
-            .toString();
-    }
 }

+ 6 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/domain/vo/FieldVO.java

@@ -15,6 +15,12 @@ public class FieldVO {
      * 地块ID
      * */
     private Long id;
+
+    /*
+    * 所属农场ID
+    * */
+    private Long farmId;
+
     /*
      * 地块编号
      * */

+ 3 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/AgriculturalTasksServiceImpl.java

@@ -2,6 +2,7 @@ package com.ruoyi.base.service.impl;
 
 import java.util.List;
 import com.ruoyi.common.core.utils.DateUtils;
+import com.ruoyi.common.security.utils.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.base.mapper.AgriculturalTasksMapper;
@@ -53,6 +54,7 @@ public class AgriculturalTasksServiceImpl implements IAgriculturalTasksService
     @Override
     public int insertAgriculturalTasks(AgriculturalTasks agriculturalTasks)
     {
+        agriculturalTasks.setCreateBy(SecurityUtils.getUsername());
         agriculturalTasks.setCreateTime(DateUtils.getNowDate());
         return agriculturalTasksMapper.insertAgriculturalTasks(agriculturalTasks);
     }
@@ -66,6 +68,7 @@ public class AgriculturalTasksServiceImpl implements IAgriculturalTasksService
     @Override
     public int updateAgriculturalTasks(AgriculturalTasks agriculturalTasks)
     {
+        agriculturalTasks.setUpdateBy(SecurityUtils.getUsername());
         agriculturalTasks.setUpdateTime(DateUtils.getNowDate());
         return agriculturalTasksMapper.updateAgriculturalTasks(agriculturalTasks);
     }

+ 1 - 0
ruoyi-modules/ruoyi-base/src/main/java/com/ruoyi/base/service/impl/FieldServiceImpl.java

@@ -278,6 +278,7 @@ public class FieldServiceImpl implements IFieldService
 
         FieldVO vo = new FieldVO();
         vo.setId(field.getId());
+        vo.setFarmId(field.getFarmId());
         vo.setCode(field.getFieldCode());
         vo.setName(field.getFieldName());
         vo.setFarmName(field.getFarmName());

+ 14 - 6
ruoyi-modules/ruoyi-base/src/main/resources/mapper/base/AgriculturalTasksMapper.xml

@@ -13,16 +13,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="taskStatus"    column="task_status"    />
         <result property="executeTime"    column="execute_time"    />
         <result property="assigneeId"    column="assignee_id"    />
+        <result property="assigneeName"    column="assignee_name"    />
         <result property="remark"    column="remark"    />
         <result property="completionTime"    column="completion_time"    />
         <result property="completionDesc"    column="completion_desc"    />
-        <result property="creatorId"    column="creator_id"    />
+        <result property="createBy"    column="create_by"    />
         <result property="createTime"    column="create_time"    />
         <result property="updateTime"    column="update_time"    />
+        <result property="updateBy"    column="update_by"    />
     </resultMap>
 
     <sql id="selectAgriculturalTasksVo">
-        select id, plot_id, task_name, task_images, type_name, task_status, execute_time, assignee_id, remark, completion_time, completion_desc, creator_id, create_time, update_time from agricultural_tasks
+        select id, plot_id, task_name, task_images, type_name, task_status, execute_time, assignee_id, assignee_name, remark, completion_time, completion_desc, create_by, create_time, update_time, update_by from agricultural_tasks
     </sql>
 
     <select id="selectAgriculturalTasksList" parameterType="AgriculturalTasks" resultMap="AgriculturalTasksResult">
@@ -37,7 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="assigneeId != null "> and assignee_id = #{assigneeId}</if>
             <if test="completionTime != null "> and completion_time = #{completionTime}</if>
             <if test="completionDesc != null  and completionDesc != ''"> and completion_desc = #{completionDesc}</if>
-            <if test="creatorId != null "> and creator_id = #{creatorId}</if>
+            <if test="createBy != null "> and create_by = #{createBy}</if>
         </where>
     </select>
     
@@ -64,12 +66,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="taskStatus != null">task_status,</if>
             <if test="executeTime != null">execute_time,</if>
             <if test="assigneeId != null">assignee_id,</if>
+            <if test="assigneeName != null">assignee_name,</if>
             <if test="remark != null">remark,</if>
             <if test="completionTime != null">completion_time,</if>
             <if test="completionDesc != null">completion_desc,</if>
-            <if test="creatorId != null">creator_id,</if>
+            <if test="createBy != null">create_by,</if>
             <if test="createTime != null">create_time,</if>
             <if test="updateTime != null">update_time,</if>
+            <if test="updateBy != null">update_by,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="plotId != null">#{plotId},</if>
@@ -79,12 +83,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="taskStatus != null">#{taskStatus},</if>
             <if test="executeTime != null">#{executeTime},</if>
             <if test="assigneeId != null">#{assigneeId},</if>
+            <if test="assigneeName != null">#{assigneeName},</if>
             <if test="remark != null">#{remark},</if>
             <if test="completionTime != null">#{completionTime},</if>
             <if test="completionDesc != null">#{completionDesc},</if>
-            <if test="creatorId != null">#{creatorId},</if>
+            <if test="createBy != null">#{createBy},</if>
             <if test="createTime != null">#{createTime},</if>
             <if test="updateTime != null">#{updateTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
          </trim>
     </insert>
 
@@ -98,12 +104,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="taskStatus != null">task_status = #{taskStatus},</if>
             <if test="executeTime != null">execute_time = #{executeTime},</if>
             <if test="assigneeId != null">assignee_id = #{assigneeId},</if>
+            <if test="assigneeName != null">assignee_name = #{assigneeName},</if>
             <if test="remark != null">remark = #{remark},</if>
             <if test="completionTime != null">completion_time = #{completionTime},</if>
             <if test="completionDesc != null">completion_desc = #{completionDesc},</if>
-            <if test="creatorId != null">creator_id = #{creatorId},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
             <if test="createTime != null">create_time = #{createTime},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
         </trim>
         where id = #{id}
     </update>