Browse Source

项目管理

ouyj 5 tháng trước cách đây
mục cha
commit
4a9fa97839

+ 61 - 0
ygtx-admin/src/main/resources/application-dev.yml

@@ -0,0 +1,61 @@
+# 数据源配置
+spring:
+    datasource:
+        type: com.alibaba.druid.pool.DruidDataSource
+        driverClassName: com.mysql.cj.jdbc.Driver
+        druid:
+            # 主库数据源
+            master:
+                url: jdbc:mysql://localhost:3306/worklog?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                username: root
+                password: 123456
+            # 从库数据源
+            slave:
+                # 从数据源开关/默认关闭
+                enabled: false
+                url:
+                username:
+                password:
+            # 初始连接数
+            initialSize: 5
+            # 最小连接池数量
+            minIdle: 10
+            # 最大连接池数量
+            maxActive: 20
+            # 配置获取连接等待超时的时间
+            maxWait: 60000
+            # 配置连接超时时间
+            connectTimeout: 30000
+            # 配置网络超时时间
+            socketTimeout: 60000
+            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+            timeBetweenEvictionRunsMillis: 60000
+            # 配置一个连接在池中最小生存的时间,单位是毫秒
+            minEvictableIdleTimeMillis: 300000
+            # 配置一个连接在池中最大生存的时间,单位是毫秒
+            maxEvictableIdleTimeMillis: 900000
+            # 配置检测连接是否有效
+            validationQuery: SELECT 1 FROM DUAL
+            testWhileIdle: true
+            testOnBorrow: false
+            testOnReturn: false
+            webStatFilter:
+                enabled: true
+            statViewServlet:
+                enabled: true
+                # 设置白名单,不填则允许所有访问
+                allow:
+                url-pattern: /druid/*
+                # 控制台管理用户名和密码
+                login-username: ruoyi
+                login-password: 123456
+            filter:
+                stat:
+                    enabled: true
+                    # 慢SQL记录
+                    log-slow-sql: true
+                    slow-sql-millis: 1000
+                    merge-sql: true
+                wall:
+                    config:
+                        multi-statement-allow: true

+ 2 - 1
ygtx-admin/src/main/resources/application.yml

@@ -52,7 +52,8 @@ spring:
     # 国际化资源文件路径
     basename: i18n/messages
   profiles:
-    active: druid
+    #active: druid
+    active: dev
   # 文件上传
   servlet:
     multipart:

+ 104 - 0
ygtx-worklog/src/main/java/com/ygtx/worklog/controller/WorkProjectController.java

@@ -0,0 +1,104 @@
+package com.ygtx.worklog.controller;
+
+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.ygtx.common.annotation.Log;
+import com.ygtx.common.core.controller.BaseController;
+import com.ygtx.common.core.domain.AjaxResult;
+import com.ygtx.common.enums.BusinessType;
+import com.ygtx.worklog.domain.WorkProject;
+import com.ygtx.worklog.service.IWorkProjectService;
+import com.ygtx.common.utils.poi.ExcelUtil;
+import com.ygtx.common.core.page.TableDataInfo;
+
+/**
+ * 项目管理Controller
+ * 
+ * @author ouyj
+ * @date 2025-10-27
+ */
+@RestController
+@RequestMapping("/worklog/workProject")
+public class WorkProjectController extends BaseController
+{
+    @Autowired
+    private IWorkProjectService workProjectService;
+
+    /**
+     * 查询项目管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('worklog:workProject:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(WorkProject workProject)
+    {
+        startPage();
+        List<WorkProject> list = workProjectService.selectWorkProjectList(workProject);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出项目管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('worklog:workProject:export')")
+    @Log(title = "项目管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, WorkProject workProject)
+    {
+        List<WorkProject> list = workProjectService.selectWorkProjectList(workProject);
+        ExcelUtil<WorkProject> util = new ExcelUtil<WorkProject>(WorkProject.class);
+        util.exportExcel(response, list, "项目管理数据");
+    }
+
+    /**
+     * 获取项目管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('worklog:workProject:query')")
+    @GetMapping(value = "/{projectId}")
+    public AjaxResult getInfo(@PathVariable("projectId") Long projectId)
+    {
+        return success(workProjectService.selectWorkProjectByProjectId(projectId));
+    }
+
+    /**
+     * 新增项目管理
+     */
+    @PreAuthorize("@ss.hasPermi('worklog:workProject:add')")
+    @Log(title = "项目管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody WorkProject workProject)
+    {
+        return toAjax(workProjectService.insertWorkProject(workProject));
+    }
+
+    /**
+     * 修改项目管理
+     */
+    @PreAuthorize("@ss.hasPermi('worklog:workProject:edit')")
+    @Log(title = "项目管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody WorkProject workProject)
+    {
+        return toAjax(workProjectService.updateWorkProject(workProject));
+    }
+
+    /**
+     * 删除项目管理
+     */
+    @PreAuthorize("@ss.hasPermi('worklog:workProject:remove')")
+    @Log(title = "项目管理", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{projectIds}")
+    public AjaxResult remove(@PathVariable Long[] projectIds)
+    {
+        return toAjax(workProjectService.deleteWorkProjectByProjectIds(projectIds));
+    }
+}

+ 210 - 0
ygtx-worklog/src/main/java/com/ygtx/worklog/domain/WorkProject.java

@@ -0,0 +1,210 @@
+package com.ygtx.worklog.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ygtx.common.annotation.Excel;
+import com.ygtx.common.core.domain.BaseEntity;
+
+/**
+ * 项目管理对象 work_project
+ * 
+ * @author ouyj
+ * @date 2025-10-27
+ */
+public class WorkProject extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 项目ID */
+    private Long projectId;
+
+    /** 父项目ID */
+    @Excel(name = "父项目ID")
+    private Long parentId;
+
+    /** 祖级列表 */
+    @Excel(name = "祖级列表")
+    private String ancestors;
+
+    /** 项目名称 */
+    @Excel(name = "项目名称")
+    private String projectName;
+
+    /** 项目编码 */
+    @Excel(name = "项目编码")
+    private String projectCode;
+
+    /** 层级:0项目, 1模块, 2过程 */
+    @Excel(name = "层级:0项目, 1模块, 2过程")
+    private String level;
+
+    /** 项目经理ID */
+    @Excel(name = "项目经理ID")
+    private Long managerId;
+
+    /** 负责部门ID */
+    @Excel(name = "负责部门ID")
+    private Long deptId;
+
+    /** 开始日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "开始日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date startDate;
+
+    /** 结束日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "结束日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date endDate;
+
+    /** 项目状态:0规划中, 1进行中, 2已完成, 3已暂停 */
+    @Excel(name = "项目状态:0规划中, 1进行中, 2已完成, 3已暂停")
+    private String status;
+
+    /** 删除标志(0代表存在 1代表删除) */
+    private String delFlag;
+
+    public void setProjectId(Long projectId) 
+    {
+        this.projectId = projectId;
+    }
+
+    public Long getProjectId() 
+    {
+        return projectId;
+    }
+
+    public void setParentId(Long parentId) 
+    {
+        this.parentId = parentId;
+    }
+
+    public Long getParentId() 
+    {
+        return parentId;
+    }
+
+    public void setAncestors(String ancestors) 
+    {
+        this.ancestors = ancestors;
+    }
+
+    public String getAncestors() 
+    {
+        return ancestors;
+    }
+
+    public void setProjectName(String projectName) 
+    {
+        this.projectName = projectName;
+    }
+
+    public String getProjectName() 
+    {
+        return projectName;
+    }
+
+    public void setProjectCode(String projectCode) 
+    {
+        this.projectCode = projectCode;
+    }
+
+    public String getProjectCode() 
+    {
+        return projectCode;
+    }
+
+    public void setLevel(String level) 
+    {
+        this.level = level;
+    }
+
+    public String getLevel() 
+    {
+        return level;
+    }
+
+    public void setManagerId(Long managerId) 
+    {
+        this.managerId = managerId;
+    }
+
+    public Long getManagerId() 
+    {
+        return managerId;
+    }
+
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+
+    public void setStartDate(Date startDate) 
+    {
+        this.startDate = startDate;
+    }
+
+    public Date getStartDate() 
+    {
+        return startDate;
+    }
+
+    public void setEndDate(Date endDate) 
+    {
+        this.endDate = endDate;
+    }
+
+    public Date getEndDate() 
+    {
+        return endDate;
+    }
+
+    public void setStatus(String status) 
+    {
+        this.status = status;
+    }
+
+    public String getStatus() 
+    {
+        return status;
+    }
+
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("projectId", getProjectId())
+            .append("parentId", getParentId())
+            .append("ancestors", getAncestors())
+            .append("projectName", getProjectName())
+            .append("projectCode", getProjectCode())
+            .append("level", getLevel())
+            .append("managerId", getManagerId())
+            .append("deptId", getDeptId())
+            .append("startDate", getStartDate())
+            .append("endDate", getEndDate())
+            .append("status", getStatus())
+            .append("remark", getRemark())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 61 - 0
ygtx-worklog/src/main/java/com/ygtx/worklog/mapper/WorkProjectMapper.java

@@ -0,0 +1,61 @@
+package com.ygtx.worklog.mapper;
+
+import java.util.List;
+import com.ygtx.worklog.domain.WorkProject;
+
+/**
+ * 项目管理Mapper接口
+ * 
+ * @author ouyj
+ * @date 2025-10-27
+ */
+public interface WorkProjectMapper 
+{
+    /**
+     * 查询项目管理
+     * 
+     * @param projectId 项目管理主键
+     * @return 项目管理
+     */
+    public WorkProject selectWorkProjectByProjectId(Long projectId);
+
+    /**
+     * 查询项目管理列表
+     * 
+     * @param workProject 项目管理
+     * @return 项目管理集合
+     */
+    public List<WorkProject> selectWorkProjectList(WorkProject workProject);
+
+    /**
+     * 新增项目管理
+     * 
+     * @param workProject 项目管理
+     * @return 结果
+     */
+    public int insertWorkProject(WorkProject workProject);
+
+    /**
+     * 修改项目管理
+     * 
+     * @param workProject 项目管理
+     * @return 结果
+     */
+    public int updateWorkProject(WorkProject workProject);
+
+    /**
+     * 删除项目管理
+     * 
+     * @param projectId 项目管理主键
+     * @return 结果
+     */
+    public int deleteWorkProjectByProjectId(Long projectId);
+
+    /**
+     * 批量删除项目管理
+     * 
+     * @param projectIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteWorkProjectByProjectIds(Long[] projectIds);
+}

+ 61 - 0
ygtx-worklog/src/main/java/com/ygtx/worklog/service/IWorkProjectService.java

@@ -0,0 +1,61 @@
+package com.ygtx.worklog.service;
+
+import java.util.List;
+import com.ygtx.worklog.domain.WorkProject;
+
+/**
+ * 项目管理Service接口
+ * 
+ * @author ouyj
+ * @date 2025-10-27
+ */
+public interface IWorkProjectService 
+{
+    /**
+     * 查询项目管理
+     * 
+     * @param projectId 项目管理主键
+     * @return 项目管理
+     */
+    public WorkProject selectWorkProjectByProjectId(Long projectId);
+
+    /**
+     * 查询项目管理列表
+     * 
+     * @param workProject 项目管理
+     * @return 项目管理集合
+     */
+    public List<WorkProject> selectWorkProjectList(WorkProject workProject);
+
+    /**
+     * 新增项目管理
+     * 
+     * @param workProject 项目管理
+     * @return 结果
+     */
+    public int insertWorkProject(WorkProject workProject);
+
+    /**
+     * 修改项目管理
+     * 
+     * @param workProject 项目管理
+     * @return 结果
+     */
+    public int updateWorkProject(WorkProject workProject);
+
+    /**
+     * 批量删除项目管理
+     * 
+     * @param projectIds 需要删除的项目管理主键集合
+     * @return 结果
+     */
+    public int deleteWorkProjectByProjectIds(Long[] projectIds);
+
+    /**
+     * 删除项目管理信息
+     * 
+     * @param projectId 项目管理主键
+     * @return 结果
+     */
+    public int deleteWorkProjectByProjectId(Long projectId);
+}

+ 96 - 0
ygtx-worklog/src/main/java/com/ygtx/worklog/service/impl/WorkProjectServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ygtx.worklog.service.impl;
+
+import java.util.List;
+import com.ygtx.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ygtx.worklog.mapper.WorkProjectMapper;
+import com.ygtx.worklog.domain.WorkProject;
+import com.ygtx.worklog.service.IWorkProjectService;
+
+/**
+ * 项目管理Service业务层处理
+ * 
+ * @author ouyj
+ * @date 2025-10-27
+ */
+@Service
+public class WorkProjectServiceImpl implements IWorkProjectService 
+{
+    @Autowired
+    private WorkProjectMapper workProjectMapper;
+
+    /**
+     * 查询项目管理
+     * 
+     * @param projectId 项目管理主键
+     * @return 项目管理
+     */
+    @Override
+    public WorkProject selectWorkProjectByProjectId(Long projectId)
+    {
+        return workProjectMapper.selectWorkProjectByProjectId(projectId);
+    }
+
+    /**
+     * 查询项目管理列表
+     * 
+     * @param workProject 项目管理
+     * @return 项目管理
+     */
+    @Override
+    public List<WorkProject> selectWorkProjectList(WorkProject workProject)
+    {
+        return workProjectMapper.selectWorkProjectList(workProject);
+    }
+
+    /**
+     * 新增项目管理
+     * 
+     * @param workProject 项目管理
+     * @return 结果
+     */
+    @Override
+    public int insertWorkProject(WorkProject workProject)
+    {
+        workProject.setCreateTime(DateUtils.getNowDate());
+        return workProjectMapper.insertWorkProject(workProject);
+    }
+
+    /**
+     * 修改项目管理
+     * 
+     * @param workProject 项目管理
+     * @return 结果
+     */
+    @Override
+    public int updateWorkProject(WorkProject workProject)
+    {
+        workProject.setUpdateTime(DateUtils.getNowDate());
+        return workProjectMapper.updateWorkProject(workProject);
+    }
+
+    /**
+     * 批量删除项目管理
+     * 
+     * @param projectIds 需要删除的项目管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteWorkProjectByProjectIds(Long[] projectIds)
+    {
+        return workProjectMapper.deleteWorkProjectByProjectIds(projectIds);
+    }
+
+    /**
+     * 删除项目管理信息
+     * 
+     * @param projectId 项目管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteWorkProjectByProjectId(Long projectId)
+    {
+        return workProjectMapper.deleteWorkProjectByProjectId(projectId);
+    }
+}

+ 125 - 0
ygtx-worklog/src/main/resources/mapper/worklog/WorkProjectMapper.xml

@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ygtx.worklog.mapper.WorkProjectMapper">
+    
+    <resultMap type="WorkProject" id="WorkProjectResult">
+        <result property="projectId"    column="project_id"    />
+        <result property="parentId"    column="parent_id"    />
+        <result property="ancestors"    column="ancestors"    />
+        <result property="projectName"    column="project_name"    />
+        <result property="projectCode"    column="project_code"    />
+        <result property="level"    column="level"    />
+        <result property="managerId"    column="manager_id"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="startDate"    column="start_date"    />
+        <result property="endDate"    column="end_date"    />
+        <result property="status"    column="status"    />
+        <result property="remark"    column="remark"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectWorkProjectVo">
+        select project_id, parent_id, ancestors, project_name, project_code, level, manager_id, dept_id, start_date, end_date, status, remark, del_flag, create_by, create_time, update_by, update_time from work_project
+    </sql>
+
+    <select id="selectWorkProjectList" parameterType="WorkProject" resultMap="WorkProjectResult">
+        <include refid="selectWorkProjectVo"/>
+        <where>  
+            <if test="parentId != null "> and parent_id = #{parentId}</if>
+            <if test="ancestors != null  and ancestors != ''"> and ancestors = #{ancestors}</if>
+            <if test="projectName != null  and projectName != ''"> and project_name like concat('%', #{projectName}, '%')</if>
+            <if test="projectCode != null  and projectCode != ''"> and project_code = #{projectCode}</if>
+            <if test="level != null  and level != ''"> and level = #{level}</if>
+            <if test="managerId != null "> and manager_id = #{managerId}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            <if test="startDate != null "> and start_date = #{startDate}</if>
+            <if test="endDate != null "> and end_date = #{endDate}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+        </where>
+    </select>
+    
+    <select id="selectWorkProjectByProjectId" parameterType="Long" resultMap="WorkProjectResult">
+        <include refid="selectWorkProjectVo"/>
+        where project_id = #{projectId}
+    </select>
+
+    <insert id="insertWorkProject" parameterType="WorkProject" useGeneratedKeys="true" keyProperty="projectId">
+        insert into work_project
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="parentId != null">parent_id,</if>
+            <if test="ancestors != null">ancestors,</if>
+            <if test="projectName != null and projectName != ''">project_name,</if>
+            <if test="projectCode != null">project_code,</if>
+            <if test="level != null">level,</if>
+            <if test="managerId != null">manager_id,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="startDate != null">start_date,</if>
+            <if test="endDate != null">end_date,</if>
+            <if test="status != null">status,</if>
+            <if test="remark != null">remark,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="parentId != null">#{parentId},</if>
+            <if test="ancestors != null">#{ancestors},</if>
+            <if test="projectName != null and projectName != ''">#{projectName},</if>
+            <if test="projectCode != null">#{projectCode},</if>
+            <if test="level != null">#{level},</if>
+            <if test="managerId != null">#{managerId},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="startDate != null">#{startDate},</if>
+            <if test="endDate != null">#{endDate},</if>
+            <if test="status != null">#{status},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateWorkProject" parameterType="WorkProject">
+        update work_project
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="parentId != null">parent_id = #{parentId},</if>
+            <if test="ancestors != null">ancestors = #{ancestors},</if>
+            <if test="projectName != null and projectName != ''">project_name = #{projectName},</if>
+            <if test="projectCode != null">project_code = #{projectCode},</if>
+            <if test="level != null">level = #{level},</if>
+            <if test="managerId != null">manager_id = #{managerId},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="startDate != null">start_date = #{startDate},</if>
+            <if test="endDate != null">end_date = #{endDate},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where project_id = #{projectId}
+    </update>
+
+    <delete id="deleteWorkProjectByProjectId" parameterType="Long">
+        delete from work_project where project_id = #{projectId}
+    </delete>
+
+    <delete id="deleteWorkProjectByProjectIds" parameterType="String">
+        delete from work_project where project_id in 
+        <foreach item="projectId" collection="array" open="(" separator="," close=")">
+            #{projectId}
+        </foreach>
+    </delete>
+</mapper>