From bf0248478c94e9b26fc5086a44b9c0f97f057b48 Mon Sep 17 00:00:00 2001 From: liuxy Date: Tue, 14 Jan 2025 15:43:20 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E9=A1=B9=E7=9B=AE=E6=90=AD?= =?UTF-8?q?=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nladmin-system/nlsso-server/pom.xml | 7 + .../tools/ToolLocalStorageController.java | 8 + .../controller/user/UserController.java | 6 + ...deRuleMapper.xml => DemandTaskService.xml} | 0 ...ConfigMapper.xml => DemandTaskService.xml} | 0 ...ysLogMapper.xml => DemanDmanageMapper.xml} | 0 ...{StageMapper.xml => DemandTaskService.xml} | 0 ...ysMenuMapper.xml => DemandTaskService.xml} | 0 ...sParamMapper.xml => DemandTaskService.xml} | 0 ...rtzLogMapper.xml => DemandTaskService.xml} | 0 .../tools/IToolLocalStorageService.java | 5 +- .../service/tools/dao/ToolLocalStorage.java | 5 + .../impl/ToolLocalStorageServiceImpl.java | 26 +- .../system/service/user/ISysUserService.java | 8 + .../user/impl/ISysUserServiceImpl.java | 9 + .../org/nl/system/util/ImageCompress.java | 58 ++ .../controller/DemanDmanageController.java | 81 +++ .../work/controller/DemandTaskController.java | 93 ++++ .../org/nl/work/enums/NeedStatusEnum.java | 27 + .../java/org/nl/work/enums/NeedTypeEnum.java | 39 ++ .../org/nl/work/sch/AutoUpdateTaskDate.java | 48 ++ .../demandmanage/DemanDmanageService.java | 87 +++ .../demandmanage/dao/DemanDmanage.java | 123 +++++ .../dao/mapper/DemanDmanageMapper.java | 16 + .../dao/mapper/DemanDmanageMapper.xml | 5 + .../impl/DemanDmanageServiceImpl.java | 246 +++++++++ .../service/demandtask/DemandTaskService.java | 95 ++++ .../service/demandtask/dao/DemandTask.java | 129 +++++ .../dao/mapper/DemandTaskMapper.java | 36 ++ .../dao/mapper/DemandTaskService.xml | 53 ++ .../impl/DemandTaskServiceImpl.java | 165 ++++++ nladmin-ui/package.json | 5 + nladmin-ui/src/assets/icons/svg/工作台.svg | 1 + nladmin-ui/src/assets/icons/svg/需求池.svg | 1 + .../src/components/Crud/CRUD.operation.vue | 6 + nladmin-ui/src/components/Crud/Pagination.vue | 1 + .../src/components/Crud/UD.operation.vue | 4 +- nladmin-ui/src/components/Crud/crud.js | 4 +- nladmin-ui/src/layout/components/Navbar.vue | 1 - nladmin-ui/src/main.js | 3 +- .../views/components/VxeTableRender/index.js | 1 - nladmin-ui/src/views/monitor/server/index.vue | 511 ++++++++++-------- .../src/views/monitor/server/首页备份.vue | 291 ++++++++++ .../views/nlsystem/demandmanage/AddDialog.vue | 235 ++++++++ .../nlsystem/demandmanage/FileDialog.vue | 199 +++++++ .../nlsystem/demandmanage/demandmanage.js | 43 ++ .../demandmanage/echarts/BarChart.vue | 120 ++++ .../demandmanage/echarts/BarChart2.vue | 126 +++++ .../demandmanage/echarts/lineChart.vue | 127 +++++ .../demandmanage/filePreviewModel.vue | 181 +++++++ .../src/views/nlsystem/demandmanage/index.vue | 392 ++++++++++++++ .../demandmanage/task/AddTaskDialog.vue | 154 ++++++ .../nlsystem/demandmanage/task/TaskDialog.vue | 180 ++++++ .../views/nlsystem/demandtask/AddDialog.vue | 155 ++++++ .../views/nlsystem/demandtask/demanDialog.vue | 188 +++++++ .../views/nlsystem/demandtask/demantask.js | 67 +++ .../src/views/nlsystem/demandtask/index.vue | 301 +++++++++++ .../system/logicflow/editor/constant/index.js | 2 +- nladmin-ui/src/views/system/menu/dd/index.vue | 2 +- nladmin-ui/src/views/system/menu/index.vue | 2 +- nladmin-ui/src/views/system/param/index.vue | 2 +- nladmin-ui/src/views/system/user/user.js | 9 +- nladmin-ui/src/views/tools/storage/index.vue | 2 +- 63 files changed, 4439 insertions(+), 252 deletions(-) rename nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/dao/mapper/{SysCodeRuleMapper.xml => DemandTaskService.xml} (100%) rename nladmin-system/nlsso-server/src/main/java/org/nl/system/service/generator/dao/mapper/{CodeColumnConfigMapper.xml => DemandTaskService.xml} (100%) rename nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/dao/mapper/{SysLogMapper.xml => DemanDmanageMapper.xml} (100%) rename nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logicflow/dao/mapper/{StageMapper.xml => DemandTaskService.xml} (100%) rename nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dao/mapper/{SysMenuMapper.xml => DemandTaskService.xml} (100%) rename nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/dao/mapper/{SysParamMapper.xml => DemandTaskService.xml} (100%) rename nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/dao/mapper/{SysQuartzLogMapper.xml => DemandTaskService.xml} (100%) create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/system/util/ImageCompress.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/work/controller/DemanDmanageController.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/work/controller/DemandTaskController.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/work/enums/NeedStatusEnum.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/work/enums/NeedTypeEnum.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/work/sch/AutoUpdateTaskDate.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/DemanDmanageService.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/dao/DemanDmanage.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/dao/mapper/DemanDmanageMapper.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/dao/mapper/DemanDmanageMapper.xml create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/impl/DemanDmanageServiceImpl.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/DemandTaskService.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/dao/DemandTask.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/dao/mapper/DemandTaskMapper.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/dao/mapper/DemandTaskService.xml create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/impl/DemandTaskServiceImpl.java create mode 100644 nladmin-ui/src/assets/icons/svg/工作台.svg create mode 100644 nladmin-ui/src/assets/icons/svg/需求池.svg create mode 100644 nladmin-ui/src/views/monitor/server/首页备份.vue create mode 100644 nladmin-ui/src/views/nlsystem/demandmanage/AddDialog.vue create mode 100644 nladmin-ui/src/views/nlsystem/demandmanage/FileDialog.vue create mode 100644 nladmin-ui/src/views/nlsystem/demandmanage/demandmanage.js create mode 100644 nladmin-ui/src/views/nlsystem/demandmanage/echarts/BarChart.vue create mode 100644 nladmin-ui/src/views/nlsystem/demandmanage/echarts/BarChart2.vue create mode 100644 nladmin-ui/src/views/nlsystem/demandmanage/echarts/lineChart.vue create mode 100644 nladmin-ui/src/views/nlsystem/demandmanage/filePreviewModel.vue create mode 100644 nladmin-ui/src/views/nlsystem/demandmanage/index.vue create mode 100644 nladmin-ui/src/views/nlsystem/demandmanage/task/AddTaskDialog.vue create mode 100644 nladmin-ui/src/views/nlsystem/demandmanage/task/TaskDialog.vue create mode 100644 nladmin-ui/src/views/nlsystem/demandtask/AddDialog.vue create mode 100644 nladmin-ui/src/views/nlsystem/demandtask/demanDialog.vue create mode 100644 nladmin-ui/src/views/nlsystem/demandtask/demantask.js create mode 100644 nladmin-ui/src/views/nlsystem/demandtask/index.vue diff --git a/nladmin-system/nlsso-server/pom.xml b/nladmin-system/nlsso-server/pom.xml index 8ad737a..8e6cc9e 100644 --- a/nladmin-system/nlsso-server/pom.xml +++ b/nladmin-system/nlsso-server/pom.xml @@ -293,6 +293,13 @@ 5.23 + + + net.coobird + thumbnailator + 0.4.8 + + com.github.pagehelper pagehelper-spring-boot-starter diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/tools/ToolLocalStorageController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/tools/ToolLocalStorageController.java index a774089..1d2f4e5 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/tools/ToolLocalStorageController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/tools/ToolLocalStorageController.java @@ -15,12 +15,14 @@ import org.nl.system.service.tools.IToolLocalStorageService; import org.nl.system.service.tools.dao.ToolLocalStorage; import org.nl.system.service.tools.dto.ToolLocalStorageQuery; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.util.Map; import java.util.Set; /** @@ -44,6 +46,12 @@ public class ToolLocalStorageController { } + @GetMapping("/queryId") + public ResponseEntity queryId(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(localStorageService.queryId(whereJson, page), HttpStatus.OK); + } + + @PostMapping @SaIgnore public ResponseEntity create(@RequestParam String name, @RequestParam("file") MultipartFile file) { diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java index 6fb8bef..ba35cea 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java @@ -126,4 +126,10 @@ public class UserController { return new ResponseEntity<>(HttpStatus.OK); } + @Log("获取用户集合") + @PostMapping("/getUserList") + public ResponseEntity getUserList(@RequestBody JSONObject whereJson){ + return new ResponseEntity<>(userService.getUserList(whereJson), HttpStatus.OK); + } + } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/dao/mapper/SysCodeRuleMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/dao/mapper/DemandTaskService.xml similarity index 100% rename from nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/dao/mapper/SysCodeRuleMapper.xml rename to nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/dao/mapper/DemandTaskService.xml diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/generator/dao/mapper/CodeColumnConfigMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/generator/dao/mapper/DemandTaskService.xml similarity index 100% rename from nladmin-system/nlsso-server/src/main/java/org/nl/system/service/generator/dao/mapper/CodeColumnConfigMapper.xml rename to nladmin-system/nlsso-server/src/main/java/org/nl/system/service/generator/dao/mapper/DemandTaskService.xml diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/dao/mapper/SysLogMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/dao/mapper/DemanDmanageMapper.xml similarity index 100% rename from nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/dao/mapper/SysLogMapper.xml rename to nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/dao/mapper/DemanDmanageMapper.xml diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logicflow/dao/mapper/StageMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logicflow/dao/mapper/DemandTaskService.xml similarity index 100% rename from nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logicflow/dao/mapper/StageMapper.xml rename to nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logicflow/dao/mapper/DemandTaskService.xml diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dao/mapper/SysMenuMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dao/mapper/DemandTaskService.xml similarity index 100% rename from nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dao/mapper/SysMenuMapper.xml rename to nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/dao/mapper/DemandTaskService.xml diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/dao/mapper/SysParamMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/dao/mapper/DemandTaskService.xml similarity index 100% rename from nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/dao/mapper/SysParamMapper.xml rename to nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/dao/mapper/DemandTaskService.xml diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/dao/mapper/SysQuartzLogMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/dao/mapper/DemandTaskService.xml similarity index 100% rename from nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/dao/mapper/SysQuartzLogMapper.xml rename to nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/dao/mapper/DemandTaskService.xml diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/tools/IToolLocalStorageService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/tools/IToolLocalStorageService.java index 2c428a3..bf90b44 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/tools/IToolLocalStorageService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/tools/IToolLocalStorageService.java @@ -8,6 +8,7 @@ import org.nl.system.service.tools.dto.ToolLocalStorageQuery; import org.springframework.data.domain.Pageable; import org.springframework.web.multipart.MultipartFile; +import java.util.Map; import java.util.Set; /** @@ -34,7 +35,7 @@ public interface IToolLocalStorageService extends IService { * @param file * @return */ - Object create(String name, MultipartFile file); + ToolLocalStorage create(String name, MultipartFile file); /** * 修改文件 @@ -47,4 +48,6 @@ public interface IToolLocalStorageService extends IService { * @param ids */ void deleteAll(Set ids); + + Map queryId(Map whereJson, Pageable page); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/tools/dao/ToolLocalStorage.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/tools/dao/ToolLocalStorage.java index 88a1296..6badc35 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/tools/dao/ToolLocalStorage.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/tools/dao/ToolLocalStorage.java @@ -87,5 +87,10 @@ public class ToolLocalStorage implements Serializable { */ private String update_time; + /** + * 源单标识 + */ + private String source_bill_id; + } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/tools/impl/ToolLocalStorageServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/tools/impl/ToolLocalStorageServiceImpl.java index 0210b4a..6370760 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/tools/impl/ToolLocalStorageServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/tools/impl/ToolLocalStorageServiceImpl.java @@ -4,7 +4,9 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.nl.common.domain.query.PageQuery; import org.nl.config.FileProperties; import org.nl.common.exception.BadRequestException; @@ -16,12 +18,16 @@ import org.nl.system.service.tools.dao.mapper.ToolLocalStorageMapper; import org.nl.system.service.tools.IToolLocalStorageService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.nl.system.service.tools.dto.ToolLocalStorageQuery; +import org.nl.work.service.demandmanage.dao.DemanDmanage; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.File; +import java.util.HashMap; +import java.util.Map; import java.util.Set; /** @@ -47,7 +53,7 @@ public class ToolLocalStorageServiceImpl extends ServiceImpl queryId(Map whereJson, Pageable page) { + Map mapResult = new HashMap<>(); + + // 组织查询条件 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (whereJson.containsKey("search")) { + queryWrapper.like(ToolLocalStorage::getName, whereJson.get("search")); + } + if (whereJson.containsKey("id")) { + queryWrapper.eq(ToolLocalStorage::getSource_bill_id, whereJson.get("id")); + } + IPage resultPage = localStorageMapper.selectPage(new Page<>(page.getPageNumber() + 1, page.getPageSize()), queryWrapper); + mapResult.put("content", resultPage.getRecords()); + mapResult.put("totalElements", resultPage.getTotal()); + return mapResult; + } } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/ISysUserService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/ISysUserService.java index 3c76802..6092954 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/ISysUserService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/ISysUserService.java @@ -1,5 +1,6 @@ package org.nl.system.service.user; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.common.domain.query.PageQuery; import org.nl.system.service.user.dao.SysUser; @@ -80,4 +81,11 @@ public interface ISysUserService extends IService { * @return List */ List getUserIdByDeptId(String deptId); + + /** + * 获取用户集合 + * @param whereJson {查询参数} + * @return List: 用户集合 + */ + List getUserList(JSONObject whereJson); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java index 9f025f6..cb00001 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java @@ -3,6 +3,8 @@ package org.nl.system.service.user.impl; import cn.dev33.satoken.secure.SaSecureUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.SneakyThrows; @@ -156,4 +158,11 @@ public class ISysUserServiceImpl extends ServiceImpl imp public List getUserIdByDeptId(String deptId) { return sysUserMapper.getUserIdByDeptId(deptId); } + + @Override + public List getUserList(JSONObject whereJson) { + LambdaQueryWrapper sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysUserLambdaQueryWrapper.eq(SysUser::getIs_used, true); + return sysUserMapper.selectList(sysUserLambdaQueryWrapper); + } } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/util/ImageCompress.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/util/ImageCompress.java new file mode 100644 index 0000000..a4ec948 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/util/ImageCompress.java @@ -0,0 +1,58 @@ +package org.nl.system.util; + +import net.coobird.thumbnailator.Thumbnails; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.FileUtil; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.File; +import java.math.BigDecimal; + +/* + * @author Liuxy + * @Date 2024/12/24 4:17 下午 + */ +public class ImageCompress { + + + public static Long imgCompress(File file,Long desFileSize,Double accuracy,int threshold){ + if (threshold>5){ + return file.length(); + } + long length = file.length(); + //小于目标压缩文件大小的2倍就不压缩了 + if (length>desFileSize*1024*2){ + try { + BufferedImage bim = ImageIO.read(file); + int imgWidth = bim.getWidth(); + int imgHeight = bim.getHeight(); + int desWidth = new BigDecimal(imgWidth).multiply( + new BigDecimal(accuracy)).intValue(); + int desHeight = new BigDecimal(imgHeight).multiply( + new BigDecimal(accuracy)).intValue(); + Thumbnails.of(file.getPath()).size(desWidth, desHeight).outputQuality(accuracy).toFile(file.getPath()); + //如果不满足要求,递归直至满足要求 + imgCompress(file, desFileSize, accuracy,threshold); + }catch (Exception ex){ + ex.printStackTrace(); + } + } + return file.length(); + }; + public static Long imgCompress(String path,Long desFileSize,Double accuracy){ + File file; + try { + file = new File(path); + String suffix = FileUtil.getExtensionName(file.getName()); + if (!"图片".equals(FileUtil.getFileType(suffix))) { + return file.length(); + } + }catch (Exception ex){ + throw new BadRequestException("文件不存在"); + } + int i = 0; + //小于目标压缩文件大小的2倍就不压缩了 + return imgCompress(file, desFileSize==null?100L:desFileSize, accuracy==null?0.8:accuracy,i); + }; +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/work/controller/DemanDmanageController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/work/controller/DemanDmanageController.java new file mode 100644 index 0000000..3bbe147 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/work/controller/DemanDmanageController.java @@ -0,0 +1,81 @@ +package org.nl.work.controller; + + +import com.alibaba.fastjson.JSONObject; +import org.nl.common.logging.annotation.Log; +import org.nl.work.service.demandmanage.DemanDmanageService; +import org.nl.work.service.demandmanage.dao.DemanDmanage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Map; +import java.util.Set; + +/** + *

+ * 前端控制器 + *

+ * + * @author author + * @since 2024-12-23 + */ +@RestController +@RequestMapping("/api/demandManage") +public class DemanDmanageController { + + @Autowired + private DemanDmanageService demanDmanageService; + + @GetMapping + @Log("查询需求") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(demanDmanageService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping({"/queryData"}) + @Log("查询ui数据") + public ResponseEntity queryData(@RequestBody JSONObject dao) { + return new ResponseEntity<>(demanDmanageService.queryData(dao),HttpStatus.OK); + } + + @PostMapping + @Log("新增需求") + public ResponseEntity create(@Validated @RequestBody DemanDmanage dao) { + demanDmanageService.create(dao); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PutMapping + @Log("修改需求") + public ResponseEntity update(@Validated @RequestBody DemanDmanage dao) { + demanDmanageService.update(dao); + return new ResponseEntity<>(HttpStatus.OK); + } + + @DeleteMapping + @Log("删除需求") + public ResponseEntity delete(@RequestBody Set ids) { + demanDmanageService.delete(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping({"/uploadFile/{id}"}) + @Log("文件上传") + public ResponseEntity uploadFile(@RequestParam MultipartFile file, @PathVariable String id) { + demanDmanageService.uploadFile(file,id); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping({"/confirm"}) + @Log("确认完成") + public ResponseEntity confirm(@RequestBody DemanDmanage dao) { + demanDmanageService.confirm(dao); + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/work/controller/DemandTaskController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/work/controller/DemandTaskController.java new file mode 100644 index 0000000..6fe6a76 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/work/controller/DemandTaskController.java @@ -0,0 +1,93 @@ +package org.nl.work.controller; + + +import com.alibaba.fastjson.JSONObject; +import org.nl.common.logging.annotation.Log; +import org.nl.work.service.demandtask.DemandTaskService; +import org.nl.work.service.demandtask.dao.DemandTask; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; + +/** + *

+ * 前端控制器 + *

+ * + * @author author + * @since 2024-12-25 + */ +@RestController +@RequestMapping("/api/demandTask") +public class DemandTaskController { + + @Autowired + private DemandTaskService demandTaskService; + + @GetMapping + @Log("查询任务") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(demandTaskService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增任务") + public ResponseEntity create(@Validated @RequestBody DemandTask dao) { + demandTaskService.create(dao); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PutMapping + @Log("修改任务") + public ResponseEntity update(@Validated @RequestBody DemandTask dao) { + demandTaskService.update(dao); + return new ResponseEntity<>(HttpStatus.OK); + } + + @DeleteMapping + @Log("删除任务") + public ResponseEntity delete(@RequestBody Set ids) { + demandTaskService.delete(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/queryUser") + @Log("获取参与人员名称") + public ResponseEntity queryUser(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(demandTaskService.queryUser(whereJson),HttpStatus.OK); + } + + @PostMapping("/relevancyDemand") + @Log("关联需求") + public ResponseEntity relevancyDemand(@RequestBody DemandTask dao) { + demandTaskService.relevancyDemand(dao); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/getUser") + @Log("获取开发人员角色") + public ResponseEntity getUser(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(demandTaskService.getUser(whereJson),HttpStatus.OK); + } + + @PostMapping("/confirmUser") + @Log("指派人员") + public ResponseEntity confirmUser(@RequestBody DemandTask dao) { + demandTaskService.confirmUser(dao); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/startTask") + @Log("开始任务") + public ResponseEntity startTask(@RequestBody DemandTask dao) { + demandTaskService.startTask(dao); + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/work/enums/NeedStatusEnum.java b/nladmin-system/nlsso-server/src/main/java/org/nl/work/enums/NeedStatusEnum.java new file mode 100644 index 0000000..20eb4eb --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/work/enums/NeedStatusEnum.java @@ -0,0 +1,27 @@ +package org.nl.work.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 需求状态 + */ +@Getter +@AllArgsConstructor +public enum NeedStatusEnum { + /** + * 生成 + */ + CREATE("1", "生成"), + /** + * 开发中 + */ + DEVELOPING("2", "开发中"), + /** + * 完成 + */ + CONFIRM("3", "完成"); + + private final String value; + private final String name; +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/work/enums/NeedTypeEnum.java b/nladmin-system/nlsso-server/src/main/java/org/nl/work/enums/NeedTypeEnum.java new file mode 100644 index 0000000..8125df7 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/work/enums/NeedTypeEnum.java @@ -0,0 +1,39 @@ +package org.nl.work.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 需求类型 + */ +@Getter +@AllArgsConstructor +public enum NeedTypeEnum { + /** + * 生成 + */ + ITEM("1", "项目"), + /** + * 开发中 + */ + DEVELOP("2", "研发"), + /** + * 完成 + */ + OTHER("3", "其他"), + /** + * P1 + */ + P1("P1", "P1"), + /** + * P2 + */ + P2("P2", "P2"), + /** + * P3 + */ + P3("P3", "P3"); + + private final String value; + private final String name; +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/work/sch/AutoUpdateTaskDate.java b/nladmin-system/nlsso-server/src/main/java/org/nl/work/sch/AutoUpdateTaskDate.java new file mode 100644 index 0000000..1704316 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/work/sch/AutoUpdateTaskDate.java @@ -0,0 +1,48 @@ +package org.nl.work.sch; + + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.work.enums.NeedStatusEnum; +import org.nl.work.service.demandtask.DemandTaskService; +import org.nl.work.service.demandtask.dao.DemandTask; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class AutoUpdateTaskDate { + + @Autowired + private DemandTaskService demandTaskService; + + public void run() { + // 查询未完成任务 + List demandTaskList = demandTaskService.list( + new QueryWrapper().lambda() + .ne(DemandTask::getTaskStatus, NeedStatusEnum.DEVELOPING.getValue()) + ); + + for(DemandTask dao : demandTaskList) { + // 计算消耗时间:当前时间 - 开始时间 + DateTime nowDate = DateUtil.parse(DateUtil.now()); + DateTime startDate = DateUtil.parse(dao.getStartDate()); + long useDate = DateUtil.between(nowDate, startDate, DateUnit.HOUR); + // 计算剩余时间:预计完成时间 -消耗时间 + String surplusDate = NumberUtil.sub(dao.getPlanDate(), String.valueOf(useDate)).toString(); + + dao.setUseDate(String.valueOf(useDate)); + dao.setSurplusDate(surplusDate); + } + // 更新 + demandTaskService.updateBatchById(demandTaskList); + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/DemanDmanageService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/DemanDmanageService.java new file mode 100644 index 0000000..b7079be --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/DemanDmanageService.java @@ -0,0 +1,87 @@ +package org.nl.work.service.demandmanage; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.work.service.demandmanage.dao.DemanDmanage; +import org.springframework.data.domain.Pageable; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + *

+ * 服务类 + *

+ * + * @author author + * @since 2024-12-23 + */ +public interface DemanDmanageService extends IService { + + /** + * 分页查询 + * @param whereJson:{ + * search:模糊搜索(需求描述、需求版本、项目名称、项目编码) + * demandType:需求类型 + * priority:优先级别 + * } + * @param page : 分页参数 + * @return Map : { + * content:分页数据 + * totalElements:条数 + * } + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * UI数据 + * @return JSONObject: ui数据 + */ + JSONObject queryData(JSONObject dao); + + /** + * 新增需求 + * @param dao:需求实体对象 + */ + void create(DemanDmanage dao); + + /** + * 修改需求 + * @param dao:需求实体对象 + */ + void update(DemanDmanage dao); + + /** + * 删除需求 + * @param ids : {集合} + */ + void delete(Set ids); + + /** + * 根据项目编码找对应项目 + * @param code: 编码 + * @return List : 需求集合 + */ + List queryItemCode(String code); + + /** + * 上传文件 + * @param file:文件 + * @param id:需求id + */ + void uploadFile(MultipartFile file, String id); + + /** + * 确认完成 + * @param dao:需求实体类 + */ + void confirm(DemanDmanage dao); + + /** + * 更新需求状态 + * @param id: 需求id + */ + void updateStatus(String id); +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/dao/DemanDmanage.java b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/dao/DemanDmanage.java new file mode 100644 index 0000000..adeedcd --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/dao/DemanDmanage.java @@ -0,0 +1,123 @@ +package org.nl.work.service.demandmanage.dao; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author author + * @since 2024-12-23 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("nl_demandmanage") +public class DemanDmanage implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 需求标识 + */ + @TableId(value = "id") + private String id; + + /** + * 需求类型 + */ + private String demandType; + + /** + * 需求描述 + */ + private String demandRemark; + + /** + * 需求版本 + */ + private String demandVersion; + + /** + * 项目名称 + */ + private String projectName; + + /** + * 项目编码 + */ + private String projectCode; + + /** + * 项目负责人 + */ + private String projectPerson; + + /** + * 上线日期 + */ + private String onlineDate; + + /** + * 提出日期 + */ + private String createDate; + + /** + * 提出人 + */ + private String createId; + + /** + * 提出人名称 + */ + private String createName; + + /** + * 计划完成日期 + */ + private String planDate; + + /** + * 优先级 + */ + private String priority; + + /** + * 开发人日 + */ + private String developDate; + + /** + * 开发状态 + */ + private String developStatus; + + /** + * 备注 + */ + private String remark; + + /** + * 完成人 + */ + private String confirmId; + + /** + * 完成人名称 + */ + private String confirmName; + + /** + * 完成时间 + */ + private String confirmDate; + + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/dao/mapper/DemanDmanageMapper.java b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/dao/mapper/DemanDmanageMapper.java new file mode 100644 index 0000000..63ed66e --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/dao/mapper/DemanDmanageMapper.java @@ -0,0 +1,16 @@ +package org.nl.work.service.demandmanage.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.work.service.demandmanage.dao.DemanDmanage; + +/** + *

+ * Mapper 接口 + *

+ * + * @author author + * @since 2024-12-23 + */ +public interface DemanDmanageMapper extends BaseMapper { + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/dao/mapper/DemanDmanageMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/dao/mapper/DemanDmanageMapper.xml new file mode 100644 index 0000000..979e9f3 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/dao/mapper/DemanDmanageMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/impl/DemanDmanageServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/impl/DemanDmanageServiceImpl.java new file mode 100644 index 0000000..9d9a6bf --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandmanage/impl/DemanDmanageServiceImpl.java @@ -0,0 +1,246 @@ +package org.nl.work.service.demandmanage.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.FileUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.IdUtil; +import org.nl.system.service.tools.IToolLocalStorageService; +import org.nl.system.service.tools.dao.ToolLocalStorage; +import org.nl.system.util.ImageCompress; +import org.nl.work.enums.NeedStatusEnum; +import org.nl.work.enums.NeedTypeEnum; +import org.nl.work.service.demandmanage.DemanDmanageService; +import org.nl.work.service.demandmanage.dao.DemanDmanage; +import org.nl.work.service.demandmanage.dao.mapper.DemanDmanageMapper; +import org.nl.work.service.demandtask.DemandTaskService; +import org.nl.work.service.demandtask.dao.DemandTask; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author author + * @since 2024-12-23 + */ +@Service +public class DemanDmanageServiceImpl extends ServiceImpl implements DemanDmanageService { + + @Autowired + private DemanDmanageMapper demanDmanageMapper; + + @Autowired + private DemandTaskService demandTaskService; + + @Autowired + private IToolLocalStorageService iToolLocalStorageService; + + @Override + public Map queryAll(Map whereJson, Pageable page) { + Map mapResult = new HashMap<>(); + + // 组织查询条件 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (whereJson.containsKey("search")) { + queryWrapper.like(DemanDmanage::getDemandRemark, whereJson.get("search")) + .or().like(DemanDmanage::getDemandVersion, whereJson.get("search")) + .or().like(DemanDmanage::getProjectName, whereJson.get("search")) + .or().like(DemanDmanage::getProjectCode, whereJson.get("search")); + } + if (whereJson.containsKey("demandType")) { + queryWrapper.eq(DemanDmanage::getDemandType, whereJson.get("demandType")); + } + if (whereJson.containsKey("priority")) { + queryWrapper.eq(DemanDmanage::getPriority, whereJson.get("priority")); + } + + IPage resultPage = demanDmanageMapper.selectPage(new Page<>(page.getPageNumber() + 1, page.getPageSize()), queryWrapper); + mapResult.put("content", resultPage.getRecords()); + mapResult.put("totalElements", resultPage.getTotal()); + return mapResult; + } + + /** + * 1.查询项目数量:完成需求、未完成需求 + * 2.项目类型:项目、研发、其他 + * 3.项目等级:P1.P2.P3 + * 4.七天内上线项目 + * @return JSONObject: 查询数据 + */ + @Override + public JSONObject queryData(JSONObject json) { + JSONObject result = new JSONObject(); + List demanDmanageList = this.baseMapper.selectList( + new QueryWrapper().lambda() + ); + + // 1.查询项目数量:完成需求、未完成需求 + // 完成需求量 + long accomplish = demanDmanageList.stream() + .filter(row -> row.getDevelopStatus().equals(NeedStatusEnum.CONFIRM.getValue())).count(); + // 未完成 + long unfinished = demanDmanageList.stream() + .filter(row -> !row.getDevelopStatus().equals(NeedStatusEnum.CONFIRM.getValue())).count(); + + // 2.项目类型:项目、研发、其他 + List itemTypeList = demanDmanageList.stream() + .filter(row -> !row.getDevelopStatus().equals(NeedStatusEnum.CONFIRM.getValue())) + .collect(Collectors.toList()); + result.put("accomplish",accomplish); + result.put("unfinished",unfinished); + + // 项目 + long item = itemTypeList.stream() + .filter(row -> row.getDemandType().equals(NeedTypeEnum.ITEM.getValue())).count(); + // 研发 + long develop = itemTypeList.stream() + .filter(row -> row.getDemandType().equals(NeedTypeEnum.DEVELOP.getValue())).count(); + // 其他 + long other = itemTypeList.stream() + .filter(row -> row.getDemandType().equals(NeedTypeEnum.OTHER.getValue())).count(); + Long[] typeList = {item, develop, other}; + result.put("typeList",typeList); + + // 3.项目等级:P1.P2.P3 + // P1 + long p1 = itemTypeList.stream() + .filter(row -> row.getPriority().equals(NeedTypeEnum.P1.getValue())).count(); + // P2 + long p2 = itemTypeList.stream() + .filter(row -> row.getPriority().equals(NeedTypeEnum.P2.getValue())).count(); + // P3 + long p3 = itemTypeList.stream() + .filter(row -> row.getPriority().equals(NeedTypeEnum.P3.getValue())).count(); + Long[] rankList = {p1, p2, p3}; + result.put("rankList",rankList); + // 4.七天内上线项目 + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(DemanDmanage dao) { + // 判断当前项目编码和版本必须唯一 + checkItem(dao); + // 组织数据 + dao.setId(IdUtil.getStringId()); + dao.setCreateDate(DateUtil.today()); + dao.setCreateId(SecurityUtils.getCurrentUserId()); + dao.setCreateName(SecurityUtils.getCurrentNickName()); + dao.setCreateDate(DateUtil.now()); + dao.setDevelopStatus(NeedStatusEnum.CREATE.getValue()); + demanDmanageMapper.insert(dao); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(DemanDmanage dao) { + demanDmanageMapper.updateById(dao); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Set ids) { + demanDmanageMapper.deleteBatchIds(ids); + } + + @Override + public List queryItemCode(String code) { + return demanDmanageMapper.selectList( + new QueryWrapper().lambda() + .eq(DemanDmanage::getProjectCode, code) + ); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void uploadFile(MultipartFile file, String id) { + // 插数据 + ToolLocalStorage toolLocalStorage = iToolLocalStorageService.create(null, file); + Long compressSize = ImageCompress.imgCompress(toolLocalStorage.getPath(), 100L, 0.8); + toolLocalStorage.setSize(FileUtil.getSize(compressSize)); + toolLocalStorage.setSource_bill_id(id); + iToolLocalStorageService.update(toolLocalStorage); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void confirm(DemanDmanage dao) { + // 完成需求逻辑:需求下的任务必须全部都为完成 + List taskList = demandTaskService.queryIDList(dao.getId()); + // 校验任务是否都为完成 + boolean isStatus = taskList.stream() + .allMatch(row -> row.getTaskStatus().equals(NeedStatusEnum.CONFIRM.getValue())); + + if (!isStatus) { + throw new BadRequestException("此需求下的任务还未全部完成,不能完成需求!"); + } + + // 更新状态 + dao.setDevelopStatus(NeedStatusEnum.CONFIRM.getValue()); + dao.setConfirmId(SecurityUtils.getCurrentUserId()); + dao.setConfirmName(SecurityUtils.getCurrentNickName()); + dao.setConfirmDate(DateUtil.today()); + this.demanDmanageMapper.updateById(dao); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateStatus(String id) { + DemanDmanage demanDmanageDao = this.baseMapper.selectById(id); + // 判断此需求下的任务 + List demandTaskList = this.demandTaskService.queryIDList(id); + + boolean isConfirm = demandTaskList.stream() + .allMatch(row -> row.getTaskStatus().equals(NeedStatusEnum.CONFIRM.getValue())); + + boolean isDeveloping = demandTaskList.stream() + .anyMatch(row -> row.getTaskStatus().equals(NeedStatusEnum.CREATE.getValue()) || + row.getTaskStatus().equals(NeedStatusEnum.DEVELOPING.getValue()) + ); + + // 完成 + if (isConfirm) { + demanDmanageDao.setDevelopStatus(NeedStatusEnum.CONFIRM.getValue()); + } + // 开发中 + if (isDeveloping) { + demanDmanageDao.setDevelopStatus(NeedStatusEnum.DEVELOPING.getValue()); + } + this.baseMapper.updateById(demanDmanageDao); + } + + /** + * 新增修改时校验需求是否重复 + * @param dao: 需求实体类 + */ + private void checkItem(DemanDmanage dao) { + List demandList = queryItemCode(dao.getProjectCode()); + + List collect = demandList.stream() + .filter(row -> row.getDemandVersion().equals(dao.getDemandVersion()) + && !row.getDevelopStatus().equals(NeedStatusEnum.CONFIRM.getValue())) + .collect(Collectors.toList()); + + if (ObjectUtil.isNotEmpty(collect)) { + throw new BadRequestException("当前项目编码【"+dao.getProjectCode()+"】存在相同版本的需求!"); + } + + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/DemandTaskService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/DemandTaskService.java new file mode 100644 index 0000000..f517714 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/DemandTaskService.java @@ -0,0 +1,95 @@ +package org.nl.work.service.demandtask; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.work.service.demandtask.dao.DemandTask; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + *

+ * 服务类 + *

+ * + * @author author + * @since 2024-12-25 + */ +public interface DemandTaskService extends IService { + + /** + * 查询任务 + * @param whereJson:{ + * search:模糊搜索(需求版本、任务编码/描述、项目名称/编码) + * developId:开发人员 + * taskStatus:任务状态 + * } + * @param page : 分页参数 + * @return Map : { + * content:分页数据 + * totalElements:条数 + * } + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 新增任务 + * @param dao:任务实体类 + */ + void create(DemandTask dao); + + /** + * 修改任务 + * @param dao:需求实体对象 + */ + void update(DemandTask dao); + + /** + * 获取参与人员名称 + * @param whereJson : { + * demandId: 需求ID + * } + * @return List + */ + List queryUser(JSONObject whereJson); + + /** + * 根据需求id查询任务 + * @param demandId : 需求id + * @return List:任务集合 + */ + List queryIDList(String demandId); + + /** + * 删除任务 + * @param ids:标识集合 + */ + void delete(Set ids); + + /** + * 关联需求 + * @param dao:任务实体类 + */ + void relevancyDemand(DemandTask dao); + + /** + * 获取开发人员角色 + * @param whereJson {} + * @return List + */ + List getUser(JSONObject whereJson); + + /** + * 指派人员 + * @param dao 任务实体类 + */ + void confirmUser(DemandTask dao); + + /** + * 开始任务 + * @param dao 任务实体类 + */ + void startTask(DemandTask dao); +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/dao/DemandTask.java b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/dao/DemandTask.java new file mode 100644 index 0000000..91a32fe --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/dao/DemandTask.java @@ -0,0 +1,129 @@ +package org.nl.work.service.demandtask.dao; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + *

+ * + *

+ * + * @author author + * @since 2024-12-25 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("nl_demandtask") +public class DemandTask implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id标识 + */ + @TableId(value = "id") + private String id; + + /** + * 任务编码 + */ + private String taskCode; + + /** + * 任务描述 + */ + private String taskName; + + /** + * 任务状态 + */ + private String taskStatus; + + /** + * 开发人员 + */ + private String developId; + + /** + * 开发人员名称 + */ + private String developName; + + /** + * 需求标识 + */ + private String demandId; + + /** + * 创建人 + */ + private String createId; + + /** + * 创建人名称 + */ + private String createName; + + /** + * 创建时间 + */ + private String createDate; + + /** + * 完成人 + */ + private String confirmId; + + /** + * 完成人名称 + */ + private String confirmName; + + /** + * 完成时间 + */ + private String confirmDate; + + /** + * 预计完成时间 + */ + private String planDate; + + /** + * 开始时间 + */ + private String startDate; + + /** + * 消耗时间 + */ + private String useDate; + + /** + * 剩余时间 + */ + private String surplusDate; + + /** + * 截止日期 + */ + private String overDate; + + /** + * 开发状态 + */ + private String developStatus; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/dao/mapper/DemandTaskMapper.java b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/dao/mapper/DemandTaskMapper.java new file mode 100644 index 0000000..f5ec531 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/dao/mapper/DemandTaskMapper.java @@ -0,0 +1,36 @@ +package org.nl.work.service.demandtask.dao.mapper; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.nl.work.service.demandtask.dao.DemandTask; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** + *

+ * Mapper 接口 + *

+ * + * @author author + * @since 2024-12-25 + */ +public interface DemandTaskMapper extends BaseMapper { + + /** + * 分页查询 + * @param query:{查询参数} + * @param pageQuery {分页参数} + * @return List: 返回集合 + */ + List getPageQuery(@Param("query") Map query, @Param("pageQuery") Pageable pageQuery); + + /** + * 获取开发人员 + * @return List + */ + List getUser(); + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/dao/mapper/DemandTaskService.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/dao/mapper/DemandTaskService.xml new file mode 100644 index 0000000..a616171 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/dao/mapper/DemandTaskService.xml @@ -0,0 +1,53 @@ + + + + + + diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/impl/DemandTaskServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/impl/DemandTaskServiceImpl.java new file mode 100644 index 0000000..1a24c28 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/work/service/demandtask/impl/DemandTaskServiceImpl.java @@ -0,0 +1,165 @@ +package org.nl.work.service.demandtask.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.IdUtil; +import org.nl.system.service.user.ISysUserService; +import org.nl.system.service.user.dao.SysUser; +import org.nl.work.enums.NeedStatusEnum; +import org.nl.work.service.demandmanage.DemanDmanageService; +import org.nl.work.service.demandmanage.dao.DemanDmanage; +import org.nl.work.service.demandtask.DemandTaskService; +import org.nl.work.service.demandtask.dao.DemandTask; +import org.nl.work.service.demandtask.dao.mapper.DemandTaskMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author author + * @since 2024-12-25 + */ +@Service +public class DemandTaskServiceImpl extends ServiceImpl implements DemandTaskService { + + @Autowired + private ISysUserService iSysUserService; + + @Autowired + private DemanDmanageService demanDmanageService; + + @Override + public Map queryAll(Map whereJson, Pageable pageaBle) { + Map mapResult = new HashMap<>(); + + Page page = PageHelper.startPage(pageaBle.getPageNumber() + 1, pageaBle.getPageSize()); + page.setOrderBy("createDate DESC"); + List content = this.baseMapper.getPageQuery(whereJson, pageaBle); + + mapResult.put("content", content); + mapResult.put("totalElements", page.getTotal()); + return mapResult; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(DemandTask dao) { + // 组织数据 + dao.setId(IdUtil.getStringId()); + dao.setTaskCode(CodeUtil.getNewCode("TASK_CODE")); + dao.setTaskStatus(NeedStatusEnum.CREATE.getValue()); + // 查找用户名称 + if (ObjectUtil.isNotEmpty(dao.getDevelopId())) { + SysUser userDao = iSysUserService.getById(dao.getDevelopId()); + dao.setDevelopName(userDao.getPerson_name()); + } + dao.setCreateId(SecurityUtils.getCurrentUserId()); + dao.setCreateName(SecurityUtils.getCurrentNickName()); + dao.setCreateDate(DateUtil.now()); + dao.setDevelopStatus(NeedStatusEnum.CREATE.getValue()); + this.baseMapper.insert(dao); + + // 如果需求id不为空则调用 + if (ObjectUtil.isNotEmpty(dao.getDemandId())) { + this.demanDmanageService.updateStatus(dao.getDemandId()); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(DemandTask dao) { + // 查找用户名称 + if (ObjectUtil.isNotEmpty(dao.getDevelopId())) { + SysUser userDao = iSysUserService.getById(dao.getDevelopId()); + dao.setDevelopName(userDao.getPerson_name()); + } + this.baseMapper.updateById(dao); + } + + @Override + public List queryUser(JSONObject whereJson) { + return this.baseMapper.selectList( + new QueryWrapper().lambda() + .eq(DemandTask::getDemandId, whereJson.getString("demandId")) + ).stream() + .map(DemandTask::getDevelopName) + .collect(Collectors.toList()); + } + + @Override + public List queryIDList(String demandId) { + return this.baseMapper.selectList( + new QueryWrapper().lambda() + .eq(DemandTask::getDemandId, demandId) + ); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Set ids) { + this.baseMapper.deleteBatchIds(ids); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void relevancyDemand(DemandTask dao) { + // 判断需求是否完成 + DemanDmanage demandDao = demanDmanageService.getById(dao.getDemandId()); + if (demandDao.getDevelopStatus().equals(NeedStatusEnum.CONFIRM.getValue())) { + throw new BadRequestException("不能绑定已完成需求!"); + } + + // 判断是否已经绑定需求 + DemandTask demandTask = this.baseMapper.selectById(dao.getId()); + if (ObjectUtil.isNotEmpty(demandTask.getDemandId())) { + throw new BadRequestException("该任务已经绑定需求!"); + } + + // 更新需求任务 + this.baseMapper.updateById(dao); + // 更新需求状态 + demandDao.setDevelopStatus(NeedStatusEnum.DEVELOPING.getValue()); + demanDmanageService.updateById(demandDao); + } + + @Override + public List getUser(JSONObject whereJson) { + return this.baseMapper.getUser(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void confirmUser(DemandTask dao) { + this.baseMapper.updateById(dao); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void startTask(DemandTask dao) { + dao.setStartDate(DateUtil.now()); + dao.setTaskStatus(NeedStatusEnum.DEVELOPING.getValue()); + this.baseMapper.updateById(dao); + } +} diff --git a/nladmin-ui/package.json b/nladmin-ui/package.json index 1912240..9c9e7e3 100644 --- a/nladmin-ui/package.json +++ b/nladmin-ui/package.json @@ -36,6 +36,10 @@ "@logicflow/core": "^1.1.22", "@logicflow/extension": "^1.1.22", "@riophae/vue-treeselect": "0.4.0", + "@vue-office/docx": "^1.6.3", + "@vue-office/excel": "^1.7.12", + "@vue-office/pdf": "^2.0.10", + "@vue/composition-api": "^1.7.2", "af-table-column": "^1.0.3", "ansi_up": "^5.1.0", "axios": "0.18.1", @@ -70,6 +74,7 @@ "vue-color": "^2.8.1", "vue-count-to": "1.0.13", "vue-cropper": "0.4.9", + "vue-demi": "^0.14.10", "vue-easy-print": "0.0.8", "vue-echarts": "^5.0.0-beta.0", "vue-highlightjs": "^1.3.3", diff --git a/nladmin-ui/src/assets/icons/svg/工作台.svg b/nladmin-ui/src/assets/icons/svg/工作台.svg new file mode 100644 index 0000000..144a364 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/工作台.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/需求池.svg b/nladmin-ui/src/assets/icons/svg/需求池.svg new file mode 100644 index 0000000..d6d166f --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/需求池.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/components/Crud/CRUD.operation.vue b/nladmin-ui/src/components/Crud/CRUD.operation.vue index c7d6281..e37f6ed 100644 --- a/nladmin-ui/src/components/Crud/CRUD.operation.vue +++ b/nladmin-ui/src/components/Crud/CRUD.operation.vue @@ -9,6 +9,7 @@ class="filter-item" size="mini" type="primary" + plain icon="el-icon-plus" @click="crud.toAdd" > @@ -20,6 +21,7 @@ class="filter-item" size="mini" type="success" + plain icon="el-icon-edit" :disabled="crud.selections.length !== 1" @click="crud.toEdit(crud.selections[0])" @@ -32,6 +34,7 @@ v-permission="permission.del" class="filter-item" type="danger" + plain icon="el-icon-delete" size="mini" :loading="crud.delAllLoading" @@ -47,6 +50,7 @@ class="filter-item" size="mini" type="warning" + plain icon="el-icon-download" @click="crud.doExport" >{{ $t('common.Export') }} @@ -64,6 +68,7 @@
- {{ $t('common.Update') }} +

{{ msg }}

{{ $t('common.Cancel') }} {{ $t('common.Confirm') }}
- {{ $t('common.Delete') }} +
diff --git a/nladmin-ui/src/components/Crud/crud.js b/nladmin-ui/src/components/Crud/crud.js index 3025671..95d2ccf 100644 --- a/nladmin-ui/src/components/Crud/crud.js +++ b/nladmin-ui/src/components/Crud/crud.js @@ -57,7 +57,7 @@ function CRUD(options) { reset: true }, // 自定义一些扩展属性 - props: {}, + props: { size: 10 }, // 在主页准备 queryOnPresenterCreated: true, // 调试开关 @@ -98,7 +98,7 @@ function CRUD(options) { // 页码 page: 0, // 每页数据条数 - size: 10, + size: options.props.size, // 总数据条数 total: 0 }, diff --git a/nladmin-ui/src/layout/components/Navbar.vue b/nladmin-ui/src/layout/components/Navbar.vue index 4c8e4e8..0da8064 100644 --- a/nladmin-ui/src/layout/components/Navbar.vue +++ b/nladmin-ui/src/layout/components/Navbar.vue @@ -3,7 +3,6 @@ -