基于Vue+MySQL实现(Web)外包项目信息系统

基于Vue+MySQL实现(Web)外包项目信息系统

外包项目信息系统

一、需求说明

外包比赛项目发布与任务管理系统:

1、 系统账号分为三类,均允许自行注册:发包方(发布项目、查看当前账号的项目详情与开发任务进度、验收项目)、承包方管理员(承包项目、查看已经承包的项目详情与开发任务进度、设置项目开发任务、分配任务)、承包方开发人员(查看当前分配的开发任务、完成任务、注:此类账号由承包方管理员创建)

2、 关于项目:创建时至少包含名称、项目说明、期望完成时间、项目需求文档(附件形式)等内容,此时状态为初始化,发布后改变为已发布,即允许承包方管理员在已发布项目列表中选择承包。一个项目只允许一个承包方承包。

3、 承包后,承包方管理员可创建开发人员账号,在承包项目中根据项目需求文档分解并创建开发任务,包含任务名称、开发内容、设计文档(附件形式)、预计人天、实际人天、开始时间、结束时间,状态为初始化。分配给开发人员后任务状态为已分配,并设置开始时间。

4、 开发人员完成开发后即可完成任务,需要设置任务状态为已完成,并设置结束时间,并计算实际人天(按照每日 8 小时计算,去掉周末)。

5、 当所有开发任务均已完成,承包方管理员可发起验收(项目状态改为待验收),发包方验证通过后项目即可验收通过(项目状态改为已验收)

6、 项目与开发任务查看功能:可查看所有项目信息(加入汇总字段:开发人数、实际人天数、项目开发开始与结束时间等)与其下的所有开发任务情况,并展示每个任务预计人天与实际人天对比,建议任务以卡片列表的形式展现。

发包方创建并发布项目,承包方承包项目后对开发人员进行任务分配,开发人员上传任务结果并填写任务完成时间完成任务,所有任务完成后承包方管理员对任务进行检查后上传项目工程发起验收,最后发包方验收项目。

二、系统功能说明

用户管理:

管理员类用户注册

找回密码

开发人员用户注册(承包方管理员进行开发人员的注册)

发包方管理员 sendadmin:

1.注册、找回、登录

2.创建项目、发布项目

3.未发布的项目可以删除、已发布但未被承包的项目可以撤回

4.查看未发布、已发布未被承包、开发中、待验收、已验收项目列表

5.以上各项目列表页均可根据项目名进行模糊查找

6.开发中项目列表页可查看项目开发进度

7.验收项目和已验收项目列表页可查看发人员名单、下载项目工程

8.验收项目功能

承包方管理员 readmin:

1.注册、找回、登录

2.承包项目

3.对承包的项目进行任务分配与开发人员的设置

4.查看待开发、开发中、等待检查、待验收、已验收项目列表

5.以上各项目列表页均可根据项目名进行模糊查找

6.开发中项目列表页可通过查看开发人员任务信息查看项目开发进度

7.待检查项目列表页可查看任务信息下载任务工程,上传项目工程并发起验收

8.待验收和已验收项目列表页可查看发人员名单、下载项目工程

开发人员 reuser:

1.登录

2.查看项目详情可下载项目需求文档

3.查看任务详情并可下载任务需求文档

3.完成任务后上传任务工程填写任务完成时间

4.查看已完成的任务并可下载任务工程

三.数据库设计

用户表 user:

字段名称

数据类型

字段

编号

bigint

id(主键)

用户名

varchar

name

密码 1

varchar

password

密码 2

varchar

repassword

身份证号

varchar

cardid

角色

varchar

role

管理员 id

bigint

leadid

项目表 projects:

字段名称

数据类型

字段

编号

bigint

Pid(主键)

名称

varchar

proname

期望完成时间

datetime

expecttime

项目需求文档

varchar

prodocument

状态

varchar

state

项目说明

varchar

proexplain

发包方 id

bigint

sendid

承包方 id

bigint

receiveid

发包方

varchar

sendname

承包方

varchar

rename

项目开始时间

datetime

pstarttime

项目完成时间

datetime

pendtime

预计人天

bigint

pexpectdays

实际人天

bigint

pfactdays

开发人数

bigint

devnumbers

已完成任务数

bigint

comnumbers

项目工程

varchar

finalpro

任务表 task:

字段名称

数据类型

字段

编号

bigint

tid

任务名

varchar

taskname

项目 id

bigint

pid

开发人员 id

bigint

uid

开发人员

varchar

username

开发人员密码

varchar

upassword

项目名

varchar

proname

承包方

varchar

rname

承包方 id

bigint

reid

任务状态

varchar

tstate

开发说明

varchar

taskexplain

任务设计文档

varchar

taskdocument

开始时间

datetime

starttime

完成时间

datetime

endtime

预计人天

bigint

expectdays

实际人天

bigint

factdays

任务工程

varchar

Taskupload

期望完成时间

varchar

Texpecttime

四、功能截图

登录界面

用户注册

找回密码

发包方管理端:

创建项目

未发布列表页

待承包列表页

开发中项目列表

待验收项目列表并验收项目

已验收项目列表

承包方管理端

项目信息发布网承包项目

待开发项目列表

任务分配

开发中

查看项目进度

检查项目上传工程并验收

待验收项目列表

已验收项目列表

开发人员端

查看项目信息

查看任务信息

完成任务

查看已完成的任务

E—R 图:

部分关键代码:

UserService 方法:

void create(User user); //创建用户 User getUser(long id); //用过id查找用户 User getUserCardid(String cardid); //用过cardid查找用户 User getUser(String name,String password); //通过用户名和密码查找用户 User getUser(String name); //通过用户名查找用户 ProjectsService部分方法: void create(Projects projects); //创建项目 List<Projects> getStartoneProjectList(Long sendid, String pstate); //获取当前用户未发布的项目列表 List<Projects> getStarttwoProjectList(Long receiveid, String pstate); //获取当前用户待承包的项目列表 Projects getProject(long pid); //根据项目pid查找项目 List<Projects> getProjectList(Long pid); //根据项目pid查找项目列表 int deleteProject(Long pid); //根据pid删除项目 List<Projects> getALLProjectList(String pstate); //获取所有已发布的项目列表 List<Projects> getALLdevProjectList(String pstate1 ,String pstate2 ,String pstate3 ,String pstate4); //获取所有正在开发的项目列表 List<Projects> getALLSenddevProjectList(Long sendid ,String pstate1 ,String pstate2); //获取所有已验收的项目列表 List<Projects> getLikeSendidStateList(Long sendid ,String pstate ,String proname); //模糊查询项目列表 List<Projects> getLikeSendtwoStateList(Long sendid ,String pstate1 ,String pstate2 ,String proname); //模糊查询项目列表 List<Projects> getLikereidStateList(Long receiveid ,String pstate ,String proname); //模糊查询项目列表

Task 部分方法:

void create(Task task); //创建任务 List<Task> getDeveloptaskList(Long id, String tstate); //获取当前用户未发布的项目列表 int CountTasknumbers(Long pid); //统计项目任务数量 Long CountTaskExpectdays(Long pid); //统计预计人天 Long CountTaskFactdays(Long pid); //统计实际人天 List<Task> getDevuserList(Long pid); //获取任务列表 Task getUsertTask(Long uid); //获取当前用户任务 Long CountCompletetask(Long pid, String tstate); //统计已完成任务数量 Long Countdays(Long uid); //计算实际人天 Task getMaxEndtime(Long pid); //找出最大完成时间 /** * 管理员注册 */ // @UserLoginToken @RequestMapping(value = "/registeradmins",method = RequestMethod.POST) public R<String> Registeradmin(@RequestBody User user){ if (user.getName().equals("")){ return R.fail("用户名不能为空"); } User user1 = service.getUser(user.getName()); User user2 = service.getUserCardid(user.getCardid()); if(user1 != null) { return R.fail("用户已存在"); } else if(user.getPassword().equals("")){ return R.fail("请设置密码"); } else if(!user.getPassword().equals(user.getRepassword())){ return R.fail("两次密码不一致"); } else if(user.getCardid().equals("")){ return R.fail("请输入身份证号"); } else if(user2 != null){ return R.fail("身份证号已存在"); } else if(user.getRole().equals("")){ return R.fail("请选择用户类型"); } else { user.setSalt(Hashkit.generateSalt(8)); user.setPassword(Hashkit.md5(user.getPassword()+user.getSalt())); service.create(user); return R.success("创建成功"); } } /** * 创建项目 */ @UserLoginToken @RequestMapping(value = "/createprojects",method = RequestMethod.POST) public R<String> Createproject(@RequestBody Projects projects, HttpServletRequest httpServletRequest){ //获取Token String token = httpServletRequest.getHeader("token"); //通过token获取当前用户的id Jws<Claims> jwt = Jwts.parser().setSigningKey(R.KEY).parseClaimsJws(token); Long sendid = jwt.getBody().get("id",Long.class); Date date = new Date(); java.sql.Date nowtime = new java.sql.Date(date.getTime()); if (projects.getProname().equals("")){ return R.fail("请设置项目名称"); } else if (projects.getExpecttime() == null){ return R.fail("请设置期望完成时间"); } else if ( nowtime.compareTo(projects.getExpecttime()) > -1){ return R.fail("期望完成时间应大于当前时间"); } else if (projects.getProdocument().equals("")){ return R.fail("请上传项目需求文档"); } else if (projects.getProexplain().equals("")){ return R.fail("请填写项目说明"); } else { User user = userService.getUser(sendid); projects.setSendid(sendid); projects.setSendname(user.getName()); projects.setPstate("未发布"); projectsService.create(projects); return R.success("项目创建成功"); } } /** * 创建任务 */ @UserLoginToken @RequestMapping(value = "/createtasks",method = RequestMethod.POST) public R<String> Createtask(@RequestBody Task task, HttpServletRequest httpServletRequest){ //获取Token String token = httpServletRequest.getHeader("token"); //通过token获取当前用户的id Jws<Claims> jwt = Jwts.parser().setSigningKey(R.KEY).parseClaimsJws(token); Long readminid = jwt.getBody().get("id",Long.class); Projects projects = projectsService.getProject(task.getPid()); if (task.getTaskname() == null){ return R.fail("请填写任务名"); } else if (task.getStarttime() == null){ return R.fail("请设置任务开始时间"); } else if ( projects.getPstarttime().compareTo(task.getStarttime()) > -1){ return R.fail("任务开始时间应大于项目开始时间"); } else if (task.getTexpecttime() == null){ return R.fail("请填写任务期望完成时间"); } else if ( task.getStarttime().compareTo(task.getTexpecttime()) > -1){ return R.fail("任务期望完成时间应大于任务开始时间"); } else if ( task.getTexpecttime().compareTo(projects.getExpecttime()) > -1){ return R.fail("任务期望完成时间应小于项目期望完成时间"); } else if (task.getTaskexplain() == null){ return R.fail("请填写任务说明"); } else if (task.getTaskdocument() == null){ return R.fail("请上传任务需求文档"); } else if (task.getUsername() == null){ return R.fail("请设置开发人员用户名"); } else if (task.getUpassword() ==null ){ return R.fail("请设置开发人员密码"); } User user =new User(); User user2 = userService.getUser(readminid); User user1 = userService.getUser(user2.getName()+task.getUsername()); if (user1 != null){ return R.fail("用户已存在"); } user.setName(task.getUsername()); user.setName(user2.getName()+user.getName()); user.setPassword(task.getUpassword()); user.setRepassword(task.getUpassword()); user.setLeadid(readminid); user.setRole("user"); user.setSalt(Hashkit.generateSalt(8)); user.setPassword(Hashkit.md5(user.getPassword()+user.getSalt())); task.setTstate("开发中"); userService.create(user); User user3 = userService.getUser(user.getName()); task.setUid(user3.getId()); task.setFactdays(0L); task.setExpectdays(task.getUid()); taskService.create(task); return R.success("任务创建成功"); } /** * 文件上传 */ @PostMapping("/uploadfile") @ResponseBody public String uoload(@RequestParam("file") MultipartFile file) throws IOException{ log.info("[文件类型]-[{}]",file.getContentType()); log.info("[文件名称]-[{}]",file.getOriginalFilename()); log.info("[文件大小]-[{}]",file.getSize()); //文件上传的目录 file.transferTo(new File("E:\\uploadproject\\"+file.getOriginalFilename())); return file.getOriginalFilename(); //Jws<Claims> jwt = Jwts.parser().setSigningKey(R.KEY).parseClaimsJws(token); } /** * 文件下载 */ @UserLoginToken @ResponseBody @RequestMapping(value = "/downloadfile/{prodocument}",method = RequestMethod.GET) public R<String> downloadfile(@PathVariable String prodocument) throws IOException { String url1 = "E:\\uploadproject\\"+prodocument;// 源文件路径 String url2 = "E:\\downloadproject\\"+prodocument; // 复制到目标路 FileInputStream in = new FileInputStream(new File(url1)); FileOutputStream out = new FileOutputStream(new File(url2)); byte[] buff = new byte[512]; int n = 0; while ((n = in.read(buff)) != -1) { out.write(buff, 0, n); } out.flush(); in.close(); out.close(); return R.success("已成功下载"+prodocument); }

 ♻️ 资源

大小: 2.57MB

➡️ 资源下载:https://download.ZEEKLOG.net/download/s1t16/87404253

注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!

Read more

【论文笔记】A Survey on Data Synthesis and Augmentation for Large Language Models

【论文笔记】A Survey on Data Synthesis and Augmentation for Large Language Models

A Survey on Data Synthesis and Augmentation for Large Language Models(大型语言模型的数据合成与增强综述) 1. 作者 2. 年份 2024 零、摘要 大型语言模型(LLM)的成功与否,本质上与用于训练和评估的海量、多样化和高质量数据的可用性息息相关。然而,高质量数据的增长速度明显落后于训练数据集的扩展速度,从而导致迫在眉睫的数据耗尽危机。这突显了提高数据效率和探索新数据来源的迫切需求。在此背景下,合成数据已成为一种有前景的解决方案。目前,数据生成主要包括两种主要方法:数据增强和合成。本文全面回顾并总结了LLM生命周期中的数据生成技术,包括数据准备、预训练、微调、指令调整、偏好对齐和应用。此外,我们还讨论了这些方法目前面临的限制,并探讨了未来发展和研究的潜在途径。我们的愿望是使研究人员清楚地了解这些方法,使他们能够在构建LLM时迅速确定适当的数据生成策略,同时为未来的探索提供有价值的见解。 一、介绍 * 近年来,LLM在许多行业取得了巨大的进步。但是大模型的性能高度依赖它们接受训练的数据的质量和

dify平台集成OCR:低代码+AI模型打造智能表单识别系统

dify平台集成OCR:低代码+AI模型打造智能表单识别系统 📖 项目背景与技术选型动因 在企业数字化转型过程中,大量纸质表单、发票、合同等非结构化文档需要转化为可处理的结构化数据。传统人工录入方式效率低、成本高、易出错,而通用OCR服务往往对中文支持不完善,尤其在复杂背景或手写体场景下识别准确率骤降。 为此,我们基于 dify 低代码平台,集成了一套轻量级但高精度的 OCR 文字识别系统。该系统采用经典的 CRNN(Convolutional Recurrent Neural Network)模型架构,专为中英文混合文本识别优化,在无GPU依赖的前提下实现 <1秒 的平均响应时间,真正做到了“开箱即用”的工业级OCR能力。 本方案的核心价值在于: - 低代码集成:通过dify平台快速接入AI能力,无需深度开发即可构建智能表单应用 - 高识别精度:相比传统轻量模型,CRNN在中文长文本、模糊图像、倾斜排版等复杂场景下表现更优 - 双模输出支持:同时提供可视化Web界面和标准REST API,

【AirSim 教程指南】Part 4:无人机物理引擎与动力学模拟(碰撞、风场、传感器噪声、飞行动力学)

【AirSim 教程指南】Part 4:无人机物理引擎与动力学模拟(碰撞、风场、传感器噪声、飞行动力学)

AirSim 教程指南——Part 4:无人机物理引擎与动力学模拟(碰撞、风场、传感器噪声、飞行动力学) 🚁 面向准备进行 真实无人机仿真、控制算法验证(MPC / PID / RL) 的开发者 🌪 全面解析 AirSim 如何模拟无人机的动力学、环境扰动与噪声模型 🎯 让你的仿真结果“更像真机”,避免算法过拟合虚拟环境 📌 目录 1. AirSim 中的无人机动力学:从六自由度到推进模型 2. 碰撞系统:检测、事件回调与恢复策略 3. 风场模型:风向、风速、阵风、湍流 4. 噪声系统:传感器噪声、动力噪声、IMU 噪声 5. 真机一致性:如何校准仿真让它接近你的无人机 1. AirSim 中的无人机动力学: