12.18

一、基础配置文件(必替换)

  1. pom.xml(修正依赖语法错误)
    xml


4.0.0

<groupId>com.company</groupId>
<artifactId>EngineeringQualityDetectionSystem</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>

<<dependencies>
    <!-- Servlet依赖 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    <!-- JSP依赖 -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.2</version>
        <scope>provided</scope>
    </dependency>
    <!-- JSTL依赖 -->
    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>jstl-api</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>
    <!-- MySQL驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
    <!-- Lombok(简化实体类) -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.30</version>
        <scope>provided</scope>
    </dependency>
</</dependencies>

<build>
    <finalName>EngineeringQualityDetectionSystem</finalName>
    <plugins>
        <!-- 编译插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <!-- Tomcat插件(本地运行) -->
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <port>8080</port>
                <path>/EngineeringQualityDetectionSystem</path>
            </configuration>
        </plugin>
    </plugins>
</build>
2. 数据库修正 SQL(执行后生效) sql -- 1. 修改t_user表角色注释,新增委托客户分类 ALTER TABLE t_user MODIFY COLUMN user_category INT NOT NULL COMMENT '人员类别:0=检测员,1=项目经理,2=项目总监,3=委托客户';

-- 2. 新增委托客户测试数据(可直接登录)
INSERT INTO t_user (user_id, user_name, user_pwd, user_category, group_no) VALUES
('20250009', '某委托客户', '123456', 3, 0);

-- 3. 新增任务序列表(可选:解决任务编号重复风险,建议执行)
CREATE TABLE t_seq (
seq_name VARCHAR(20) PRIMARY KEY,
current_val INT NOT NULL DEFAULT 1
);
INSERT INTO t_seq (seq_name) VALUES ('task_seq');

-- 4. 新增获取序列的存储过程(配合任务编号优化)
DELIMITER //
CREATE PROCEDURE get_task_seq(OUT seq INT)
BEGIN
UPDATE t_seq SET current_val = current_val + 1 WHERE seq_name = 'task_seq';
SELECT current_val INTO seq FROM t_seq WHERE seq_name = 'task_seq';
END //
DELIMITER ;
二、DAO 层核心文件(必替换)

  1. TaskDao.java(新增客户查询方法)
    java
    运行
    package com.company.detection.dao;

import com.company.detection.entity.Task;

import java.util.List;

public interface TaskDao {
// 1. 委托客户:提交委托申请
int addTask(Task task);

// 2. 公司总监:查询待确认委托
List<Task> queryPendingConfirmTasks();

// 3. 公司总监:确认委托(生成任务编号)
int confirmTask(String id, String state);

// 4. 分配任务:总监分配经理/经理分配检测员
int assignTask(String id, String manageId, String inspectorId);

// 5. 浏览任务:按角色权限查询(检测员-个人/经理-本组/总监-全部)
List<Task> queryTasksByRole(String userId, Integer userCategory, Integer groupNo, String state);

// 6. 检测员:填写/修改检测单
int updateTaskForm(Task task);

// 7. 检测员:删除检测单
int deleteTaskForm(String id);

// 8. 审批:经理/总监审批(同意/退回)
int approveTask(String id, String state, String rejectReason);

// 9. 委托客户:查询已完成任务详情
Task queryTaskDetail(String id);

// 10. 总监:统计指定时间段检测员完成项目数量
List<Task> statCompletedTasks(String startDate, String endDate);

// 新增:委托客户查询自己提交的任务(按委托单位名)
List<Task> queryTasksByClient(String clientName);

}
2. TaskDaoImpl.java(实现新增方法 + 修正逻辑)
java
运行
package com.company.detection.dao.impl;

import com.company.detection.dao.TaskDao;
import com.company.detection.entity.Task;
import com.company.detection.util.DBUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class TaskDaoImpl implements TaskDao {

// 1. 提交委托申请
@Override
public int addTask(Task task) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    int result = 0;

    String sql = "INSERT INTO t_task (id, commit_date, client_name, item_name, item_content, state) " +
                 "VALUES (?, ?, ?, ?, ?, '待总监确认')";

    try {
        conn = DBUtil.getConnection();
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, task.getId());
        pstmt.setString(2, task.getCommitDate());
        pstmt.setString(3, task.getClientName());
        pstmt.setString(4, task.getItemName());
        pstmt.setString(5, task.getItemContent());
        result = pstmt.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        DBUtil.close(pstmt, conn);
    }
    return result;
}

// 2. 总监查询待确认委托
@Override
public List<Task> queryPendingConfirmTasks() {
    return queryTasksByState("待总监确认");
}

// 通用:按状态查询任务
private List<Task> queryTasksByState(String state) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    List<Task> list = new ArrayList<>();

    String sql = "SELECT * FROM t_task WHERE state = ? ORDER BY commit_date DESC";

    try {
        conn = DBUtil.getConnection();
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, state);
        rs = pstmt.executeQuery();
        list = parseTaskResultSet(rs);
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        DBUtil.close(rs, pstmt, conn);
    }
    return list;
}

// 解析ResultSet为Task列表
private List<Task> parseTaskResultSet(ResultSet rs) throws SQLException {
    List<Task> list = new ArrayList<>();
    while (rs.next()) {
        Task task = new Task();
        task.setId(rs.getString("id"));
        task.setCommitDate(rs.getString("commit_date"));
        task.setClientName(rs.getString("client_name"));
        task.setItemName(rs.getString("item_name"));
        task.setItemContent(rs.getString("item_content"));
        task.setClassType(rs.getString("class"));
        task.setMethod(rs.getString("method"));
        task.setSampleName(rs.getString("sample_name"));
        task.setDryDensity(rs.getDouble("dry_density"));
        task.setMoistDensity(rs.getDouble("moist_density"));
        task.setState(rs.getString("state"));
        task.setOperatingTime(rs.getTimestamp("operating_time"));
        task.setInspectorId(rs.getString("inspector_id"));
        task.setManageId(rs.getString("manage_id"));
        task.setRejectReason(rs.getString("reject_reason"));
        list.add(task);
    }
    return list;
}

// 3. 总监确认委托
@Override
public int confirmTask(String id, String state) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    int result = 0;

    String sql = "UPDATE t_task SET state = ?, operating_time = NOW() WHERE id = ?";

    try {
        conn = DBUtil.getConnection();
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, state);
        pstmt.setString(2, id);
        result = pstmt.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        DBUtil.close(pstmt, conn);
    }
    return result;
}

// 4. 分配任务
@Override
public int assignTask(String id, String manageId, String inspectorId) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    int result = 0;

    String sql = "UPDATE t_task SET manage_id = ?, inspector_id = ?, state = '进行中', operating_time = NOW() WHERE id = ?";

    try {
        conn = DBUtil.getConnection();
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, manageId);
        pstmt.setString(2, inspectorId);
        pstmt.setString(3, id);
        result = pstmt.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        DBUtil.close(pstmt, conn);
    }
    return result;
}

// 5. 按角色查询任务
@Override
public List<Task> queryTasksByRole(String userId, Integer userCategory, Integer groupNo, String state) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    List<Task> list = new ArrayList<>();
    StringBuilder sql = new StringBuilder("SELECT * FROM t_task WHERE 1=1");

    // 按角色过滤
    if (userCategory == 0) { // 检测员:仅个人任务
        sql.append(" AND inspector_id = ?");
    } else if (userCategory == 1) { // 项目经理:本组任务
        sql.append(" AND manage_id = ?");
    }
    // 按状态过滤(可选)
    if (state != null && !state.isEmpty()) {
        sql.append(" AND state = ?");
    }
    sql.append(" ORDER BY commit_date DESC");

    try {
        conn = DBUtil.getConnection();
        pstmt = conn.prepareStatement(sql.toString());
        int paramIndex = 1;
        if (userCategory == 0 || userCategory == 1) {
            pstmt.setString(paramIndex++, userId);
        }
        if (state != null && !state.isEmpty()) {
            pstmt.setString(paramIndex++, state);
        }
        rs = pstmt.executeQuery();
        list = parseTaskResultSet(rs);
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        DBUtil.close(rs, pstmt, conn);
    }
    return list;
}

// 6. 填写/修改检测单
@Override
public int updateTaskForm(Task task) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    int result = 0;

    String sql = "UPDATE t_task SET `class` = ?, method = ?, sample_name = ?, dry_density = ?, moist_density = ?, " +
                 "operating_time = NOW() WHERE id = ?";

    try {
        conn = DBUtil.getConnection();
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, task.getClassType());
        pstmt.setString(2, task.getMethod());
        pstmt.setString(3, task.getSampleName());
        pstmt.setDouble(4, task.getDryDensity());
        pstmt.setDouble(5, task.getMoistDensity());
        pstmt.setString(6, task.getId());
        result = pstmt.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        DBUtil.close(pstmt, conn);
    }
    return result;
}

// 7. 删除检测单
@Override
public int deleteTaskForm(String id) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    int result = 0;

    // 仅删除检测单内容,不删除任务记录
    String sql = "UPDATE t_task SET `class` = NULL, method = NULL, sample_name = NULL, dry_density = NULL, " +
                 "moist_density = NULL WHERE id = ?";

    try {
        conn = DBUtil.getConnection();
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, id);
        result = pstmt.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        DBUtil.close(pstmt, conn);
    }
    return result;
}

// 8. 审批任务
@Override
public int approveTask(String id, String state, String rejectReason) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    int result = 0;

    String sql = "UPDATE t_task SET state = ?, reject_reason = ?, operating_time = NOW() WHERE id = ?";

    try {
        conn = DBUtil.getConnection();
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, state);
        pstmt.setString(2, rejectReason);
        pstmt.setString(3, id);
        result = pstmt.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        DBUtil.close(pstmt, conn);
    }
    return result;
}

// 9. 查询任务详情
@Override
public Task queryTaskDetail(String id) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    Task task = null;

    String sql = "SELECT * FROM t_task WHERE id = ?";

    try {
        conn = DBUtil.getConnection();
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, id);
        rs = pstmt.executeQuery();
        if (rs.next()) {
            task = new Task();
            task.setId(rs.getString("id"));
            task.setCommitDate(rs.getString("commit_date"));
            task.setClientName(rs.getString("client_name"));
            task.setItemName(rs.getString("item_name"));
            task.setItemContent(rs.getString("item_content"));
            task.setClassType(rs.getString("class"));
            task.setMethod(rs.getString("method"));
            task.setSampleName(rs.getString("sample_name"));
            task.setDryDensity(rs.getDouble("dry_density"));
            task.setMoistDensity(rs.getDouble("moist_density"));
            task.setState(rs.getString("state"));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        DBUtil.close(rs, pstmt, conn);
    }
    return task;
}

// 10. 统计完成任务
@Override
public List<Task> statCompletedTasks(String startDate, String endDate) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    List<Task> list = new ArrayList<>();

    String sql = "SELECT u.user_name, COUNT(t.id) AS completed_count " +
                 "FROM t_task t JOIN t_user u ON t.inspector_id = u.user_id " +
                 "WHERE t.state = '已完成' AND t.commit_date BETWEEN ? AND ? " +
                 "GROUP BY u.user_name ORDER BY completed_count DESC";

    try {
        conn = DBUtil.getConnection();
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, startDate);
        pstmt.setString(2, endDate);
        rs = pstmt.executeQuery();
        while (rs.next()) {
            Task task = new Task();
            task.setUserName(rs.getString("user_name"));
            // 用dryDensity暂存完成数量(考试场景可接受)
            task.setDryDensity(rs.getDouble("completed_count"));
            list.add(task);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        DBUtil.close(rs, pstmt, conn);
    }
    return list;
}

// 新增:委托客户查询自己提交的任务
@Override
public List<Task> queryTasksByClient(String clientName) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    List<Task> list = new ArrayList<>();
    String sql = "SELECT * FROM t_task WHERE client_name = ? ORDER BY commit_date DESC";

    try {
        conn = DBUtil.getConnection();
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, clientName);
        rs = pstmt.executeQuery();
        list = parseTaskResultSet(rs);
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        DBUtil.close(rs, pstmt, conn);
    }
    return list;
}

}

posted @ 2026-01-14 19:52  muyuxiaxing  阅读(0)  评论(0)    收藏  举报