# part-time-crowdsourcing **Repository Path**: gitc_1_0/part-time-crowdsourcing ## Basic Information - **Project Name**: part-time-crowdsourcing - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-05 - **Last Updated**: 2026-01-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # part-time-crowdsourcing(兼职接单 + 任务众包系统) 一套基于 Spring Boot + Vue2 + uni-app 的「任务众包 / 兼职接单」项目,包含后台管理端(Web)、移动端(H5/小程序/App)与后端服务。 ## 模块说明 - `part-time-crowdsourcing-admin`:后端 Web 服务入口(打包产物 `crowdsourcing-admin.jar`) - `part-time-crowdsourcing-framework`:框架核心(鉴权、权限、拦截器、通用配置等) - `part-time-crowdsourcing-system`:业务系统模块(领域模型、Service、Mapper、XML 等) - `part-time-crowdsourcing-common`:公共工具与通用能力(常量、通用返回、工具类等) - `part-time-crowdsourcing-quartz`:定时任务能力(Quartz) - `part-time-crowdsourcing-generator`:代码生成模块 - `part-time-crowdsourcing-ui`:后台管理前端(Vue2 + Element UI) - `part-time-crowdsourcing-app`:移动端(uni-app,支持 H5/微信小程序/App) - `sql`:数据库初始化与补丁脚本 - `bin`:Windows 下的构建/运行脚本 ## 技术栈 - 后端:Java 8 / Spring Boot 2.5.x / Spring Security / MyBatis / Redis / Quartz(可选) - 后台前端:Vue 2 / Vue CLI 4 / Element UI - 移动端:uni-app / uni-ui - 数据库:MySQL(建议 5.7/8.0) ## 业务概述(论文写作友好) 本项目是一套“任务众包 / 兼职接单”平台,核心业务可抽象为: - 发布方(雇主)发布任务,设置预算与截止时间 - 服务商(接单方)报名任务,提交报名说明 - 发布方在报名列表中选择服务商(通过/拒绝/移除),并对任务进行支付(对接微信支付) - 任务进入进行中,双方通过站内私聊沟通交付 - 发布方确认完成后,对服务商进行评价,平台沉淀信用评分 移动端一套代码覆盖 H5/微信小程序/App;后台管理端用于运营与审核(分类、轮播图、实名认证审核、用户/角色/菜单等系统管理)。 ## 业务角色与权限模型 系统采用基于 Spring Security 的 RBAC: - **系统管理员(admin)**:通过后台管理端进行系统配置、菜单/角色/用户管理、业务审核等 - **发布方(common 角色)**:在移动端发布任务、管理报名、支付、确认完成与评价 - **服务商(provider 角色)**:在移动端报名任务、查看/处理接单订单、提交实名认证 在后端接口层通过注解进行权限保护,例如: - 任务报名接口限制服务商:[@PreAuthorize("@ss.hasRole('provider')")](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-admin/src/main/java/com/crowdsourcing/web/controller/app/AppTaskController.java#L103-L110) - 报名列表/支付/评价等发布方能力限制 common:[@PreAuthorize("@ss.hasRole('common')")](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-admin/src/main/java/com/crowdsourcing/web/controller/app/AppTaskController.java#L91-L101) - 管理端使用细粒度权限标识(`permi`),对应菜单与按钮权限(见 `sys_menu` 表与管理端接口) ## 功能清单(按端划分) ### 1)移动端(uni-app:H5/小程序/App) 典型页面路由可在 [pages.json](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-app/pages.json) 看到,核心功能包括: - **任务大厅**:分类筛选、关键词搜索、任务列表与详情浏览 - **发布任务(发布方)**:发布/编辑/删除任务,设置预算区间、截止时间、标签等 - **报名任务(服务商)**:提交报名说明,查看报名状态 - **报名管理(发布方)**:查看报名列表,对服务商执行通过/拒绝/移除,并发起私聊联系 - **订单中心**:按“我发布/我接单”视角展示任务进度与状态筛选 - **支付与履约(发布方)**:支付后进入进行中;确认完成后进入已完成 - **评价体系(发布方→服务商)**:星级评分 + 文本评价,形成服务商信用数据 - **消息中心**:会话列表、私聊/群聊、消息已读与未读数 - **我的/资料**:个人信息、头像、账号设置 - **实名认证(服务商)**:提交实名信息与证件照片,等待审核结果 ### 2)后台管理端(Vue2 + Element UI) 后台主要用于系统配置与运营审核,包含: - **系统管理(RuoYi 基座)**:用户、角色、菜单、部门、岗位、字典、参数配置等 - **监控与审计**:登录日志、操作日志、在线用户、定时任务(Quartz) - **业务运营**: - 任务分类管理:[CrowdCategoryController](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-admin/src/main/java/com/crowdsourcing/web/controller/crowd/CrowdCategoryController.java) - 轮播图管理:[CsBannerController](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-admin/src/main/java/com/crowdsourcing/web/controller/system/CsBannerController.java) - 服务商实名认证审核:[CsProviderKycController](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-admin/src/main/java/com/crowdsourcing/web/controller/system/CsProviderKycController.java) ## 核心数据模型(简化) 与“任务众包”主链路相关的核心表(创建见 [ptc_20250522.sql](file:///d:/part-time-crowdsourcing/sql/ptc_20250522.sql)): - `cs_task_category`:任务分类 - `cs_task`:任务主表(发布方、标题、内容、预算、截止时间、状态等) - `cs_task_apply`:任务报名表(服务商报名、报名说明、报名状态等) - `cs_task_status_log`:任务状态流转记录(用于审计与追溯) - `cs_provider_rate`:服务商评价表(发布方对服务商的评分/评价内容) - `cs_message_session` / `cs_message_session_user` / `cs_message`:站内消息与会话(私聊/群聊) - `cs_provider_kyc`:服务商实名认证资料与审核状态 系统管理相关表(来自 RuoYi 基座): - `sys_user / sys_role / sys_user_role`:用户与角色 - `sys_menu / sys_role_menu`:菜单与按钮权限(`permi`) - `sys_dict_* / sys_config`:字典与配置项 - `sys_oper_log / sys_logininfor`:操作日志与登录日志 ## 核心业务流程 ### 1)任务生命周期(状态机) 任务状态由 `cs_task.status` 表示,在服务层映射为可读文本(见 [toStatusText](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-system/src/main/java/com/crowdsourcing/system/service/impl/AppTaskServiceImpl.java#L2024-L2052)): - `0`:招募中(发布后默认状态,可报名、可选择服务商) - `1`:进行中(发布方支付后进入该状态) - `2`:已完成(发布方确认完成) - `3`:已关闭(关闭/下架等场景) 对应关键接口(移动端通过 [task.js](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-app/api/task.js) 调用): - 发布任务:`POST /api/app/tasks` - 报名任务:`POST /api/app/tasks/{taskId}/apply` - 更新报名状态(通过/拒绝/移除):`POST /api/app/tasks/{taskId}/applies/{applyId}/status?status=...` - 支付(微信支付):`POST /api/app/tasks/{taskId}/pay` - 确认完成:`POST /api/app/tasks/{taskId}/complete` - 评价服务商:`POST /api/app/tasks/{taskId}/applies/{applyId}/rate?rate=...&content=...` ### 2)报名与服务商选择 报名主体为服务商(provider 角色),报名记录写入 `cs_task_apply`。报名状态在移动端展示为: - `0`:已报名 - `1`:已取消 - `2`:已拒绝 - `3`:已通过 发布方在报名列表中对服务商做选择(通过/拒绝/移除)后,系统据“是否存在通过的报名”决定能否支付与进入进行中状态(见 [payTask](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-system/src/main/java/com/crowdsourcing/system/service/impl/AppTaskServiceImpl.java#L1104-L1138) 的 acceptedApplyCount 校验)。 ### 3)支付与订单视图 移动端“订单”页面将任务按“我发布/我接单”视角进行聚合展示,并通过状态筛选展示进度(见 [order/index.vue](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-app/pages/order/index.vue#L250-L279))。 支付流程对接微信支付(小程序/App 场景),服务端提供: - 初始化支付参数(返回 `payParams/outTradeNo`)与支付确认回调 - 支付成功后任务状态从“招募中”流转为“进行中” ### 4)确认完成与评价(信用体系) 发布方确认完成后,任务进入“已完成”,并可对已通过的服务商进行评价: - 评分与文本写入 `cs_provider_rate`(同一任务同一发布方唯一,防重复评价) - 评价数据用于服务商信用展示(接口示例:`GET /api/app/provider/ratings`) ## 消息与沟通(私聊/群聊) 消息系统以“会话 + 消息”建模: - 会话:`cs_message_session` - 会话成员:`cs_message_session_user`(包含未读数等) - 消息:`cs_message` “联系”按钮的核心逻辑是:调用 `POST /api/app/messages/private` 获取或创建与对方的私聊会话,然后跳转聊天页。 - 前端请求: [getOrCreatePrivateSession](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-app/api/task.js#L168-L175) - 后端入口: [privateSession](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-admin/src/main/java/com/crowdsourcing/web/controller/app/AppTaskController.java#L439-L450) - 会话创建: [getOrCreatePrivateSession](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-system/src/main/java/com/crowdsourcing/system/service/impl/AppTaskServiceImpl.java#L478-L522) 为提升实时性,后端通过 WebSocket 推送新消息给在线用户(见 [MessageWebSocketHandler](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-admin/src/main/java/com/crowdsourcing/web/websocket/MessageWebSocketHandler.java))。 ## 实名认证(服务商准入) 服务商可提交实名认证资料(姓名、证件号、证件照片等),写入 `cs_provider_kyc`,并由后台审核通过/拒绝: - 移动端查询我的认证状态: [AppProviderKycController](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-admin/src/main/java/com/crowdsourcing/web/controller/app/AppProviderKycController.java) - 管理端审核: [CsProviderKycController](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-admin/src/main/java/com/crowdsourcing/web/controller/system/CsProviderKycController.java) ## 文件与图片(头像/证件/上传) 系统支持本地文件与 MinIO(对象存储)两种方式: - MinIO 配置与开关见 [application.yml](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-admin/src/main/resources/application.yml#L140-L153) - 为兼容小程序跨域/外链限制,后端提供 MinIO 代理访问(`/common/minio?object=...`),并在用户信息/认证信息返回时进行 URL 转换 ## 登录与鉴权(统一说明) 系统登录采用 Token(JWT)方案,客户端以 HTTP Header 传递: - `Authorization: Bearer ` 移动端统一请求封装见 [request.js](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-app/utils/request.js#L16-L98),包含: - 自动注入 Token - 统一处理 401(引导重新登录)、403(提示/跳转认证)、500 等错误码 登录包含账号密码与微信登录场景(小程序/App),后端在 [SysLoginService](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-framework/src/main/java/com/crowdsourcing/framework/web/service/SysLoginService.java) 中实现微信 openId 获取与用户创建/角色绑定。 ## 环境要求 - JDK 8 - Maven 3.x - MySQL 5.7/8.0 - Redis 6.x+ - Node.js(`part-time-crowdsourcing-ui/package.json` 标注 `>=8.9`,建议使用较新的 LTS) ## 快速开始 ### 1)准备数据库 1. 创建数据库(默认示例:`ry-vue`) 2. 导入初始化脚本: - `sql/ptc_20250522.sql` - 如需启用 Quartz 持久化任务表,再导入:`sql/quartz.sql` 3. 如仓库提供了补丁脚本(`sql/patch_*.sql`),按需依次执行 ### 2)启动后端 后端配置文件: - `part-time-crowdsourcing-admin/src/main/resources/application.yml`:端口、Redis、Swagger、业务配置等 - `part-time-crowdsourcing-admin/src/main/resources/application-druid.yml`:MySQL 数据源配置 构建并运行(推荐): ```bash mvn -DskipTests package java -jar part-time-crowdsourcing-admin/target/crowdsourcing-admin.jar ``` 或在 Windows 下使用脚本: ```bat bin\package.bat bin\run.bat ``` 默认端口: - 后端:`http://localhost:8080` 接口文档(Swagger 开启时): - `http://localhost:8080/dev-api/swagger-ui/index.html` ### 3)启动后台管理前端(Web) ```bash cd part-time-crowdsourcing-ui npm install npm run dev ``` 默认访问地址: - `http://localhost`(默认端口在 [vue.config.js](file:///d:/part-time-crowdsourcing/part-time-crowdsourcing-ui/vue.config.js#L14) 中为 80) 开发环境接口代理: - 前端以 `VUE_APP_BASE_API=/dev-api` 发起请求,并通过代理转发到后端 `http://localhost:8080` 默认账号(来自初始化 SQL): - 用户名:`admin` - 密码:`admin123` ### 4)运行移动端(uni-app) 1. 使用 HBuilderX 打开目录:`part-time-crowdsourcing-app` 2. 根据实际后端地址调整:`part-time-crowdsourcing-app/config.js` 的 `baseUrl` 3. 在 HBuilderX 中运行到: - H5 - 微信小程序 - App(如需) ## 配置要点 - 后端 API 前缀: - 开发前端默认走 `/dev-api`(见 `part-time-crowdsourcing-ui/.env.development`) - 生产环境常用 `/prod-api`(见 `part-time-crowdsourcing-ui/.env.production`),一般由 Nginx 反代转发到后端 - 上传/文件路径: - `application.yml` 中 `crowdsourcing.profile` 控制上传目录 - MinIO: - 支持通过环境变量覆盖:`MINIO_ENDPOINT` / `MINIO_ACCESS_KEY` / `MINIO_SECRET_KEY` 等(见 `application.yml`) - 微信配置: - 可使用 Spring Boot 环境变量覆盖(示例:`WECHAT_MINIAPP_APPID`、`WECHAT_MINIAPP_SECRET`),避免在仓库中保存真实密钥 ## 论文撰写建议(可直接引用的结构) 如需将项目写入论文,推荐按以下结构组织“系统设计与实现”章节: - 需求分析:角色(发布方/服务商/管理员)、核心场景(发布-报名-选择-支付-交付-评价) - 总体架构:三端一体(后台 Web + 移动端多端 + 后端服务),分层(Controller/Service/Mapper) - 权限与安全:RBAC(角色/菜单/按钮权限)、Token 鉴权、日志审计 - 业务流程:任务状态机、报名状态机、支付状态、评价与信用沉淀 - 关键技术点:对象存储(MinIO 代理)、消息系统(会话建模 + WebSocket 推送)、跨端适配(uni-app) ## 构建与部署(概览) - 后端:`mvn -DskipTests package` 生成 `part-time-crowdsourcing-admin/target/crowdsourcing-admin.jar` - 后台前端:`npm run build:prod` 生成 `part-time-crowdsourcing-ui/dist/` - Nginx 反代示例(仅示意): ```nginx location /prod-api/ { proxy_pass http://127.0.0.1:8080/; } ``` ## License 见仓库根目录 `LICENSE`。