唛盟xm:涵盖项目规划、需求管理、开发迭代、版本控制、缺陷跟踪、测试管理、工时管理、效能分析等环 节,实现项目全过程、全方位管理的一站式企业研发项目管理解决方案
唛盟企业级研发管理系统简称唛盟xm,属于唛盟生态的专业子系统之一,以研发管理为核心,涵盖项目规划、需求管理、开发迭代、版本控制、缺陷跟踪、测试管理、工时管理、效能分析等环节,实现全过程、全方位的研发管理。通过该系统,企业能够优化研发流程,提高研发效率,降低研发成本,提高市场竞争力。
💪唛盟生态遵循 “一个底座+N个专业子系统” 的架构,基于同一个底座的各个专业子系统可以任意组合形成一个大的业务系统。👉聊聊唛盟生态1+n架构
唛盟子系统 | 说明 | 版本 |
---|---|---|
低代码、0代码 | 低代码、0代码框架 | 3.0.0 |
账户、权限、组织管理 | 账户、权限、组织管理,支持多租户 | 3.0.0 |
数据模型 | 表结构设计、表数据增删改查等ddl、dml操作,在线执行sql等 | 3.0.0 |
第三方支付登录等 | 微信支付、支付宝支付、paypal支付、第三方登录 | 3.0.0 |
统一认证中心 | 短信、微信、账号登录 | 3.0.0 |
统一流程中心 | 审批、代办、设计流程、监控流程等 | 3.0.0 |
短信 | 群发消息 | 3.0.0 |
代码生成器 | 自动生成前后端代码 | 3.0.0 |
研发项目管理 | 产品管理、需求管理、任务计划、迭代、测试、效能等 | 3.0.0 |
即时通讯 | 即时通讯、消息、聊天 | 3.0.0 |
财务 | 财务子系统,凭证、报销、会计记账、成本、结算 等 | 3.0.0 |
协同办公 | 办公用品、会议、车辆、资产、档案、用印、采购、绩效等功能 | 3.0.0 |
框架 | 说明 | 版本 |
---|---|---|
Vue | Vue 框架 | 3.3.8 |
Vite | 开发与构建工具 | 4.5.0 |
Element Plus | Element Plus | 2.4.2 |
TypeScript | JavaScript 的超集 | 5.2.2 |
pinia | Vue 存储库 替代 vuex5 | 2.1.7 |
vueuse | 常用工具集 | 10.6.1 |
vue-i18n | 国际化 | 9.6.5 |
vue-router | Vue 路由 | 4.2.5 |
unocss | 原子 css | 0.57.4 |
iconify | 在线图标库 | 3.1.1 |
wangeditor | 富文本编辑器 | 5.1.23 |
form-create | 表单引擎+表单设计器 | vue3版 |
框架 | 说明 | 版本 |
---|---|---|
spring boot | spring boot 框架 | 2.6.11 |
mybatis plus | 数据库操作框架 | 3.5.3.1 |
spring security | 安全框架 | 2.1.7 |
jsqlparse | sql解析引擎 | 4.7+ |
swagger | 接口说明框架 | 2.2.8 |
logback | 日志框架 | 1.2.3 |
jexl13 | 表达式引擎 | 3.1 |
flowable | 流程引擎-可换 | 6.4.2 |
spring cloud | cloud框架-可换 | 2020.0.0 |
spring cloud consul | cloud框架-可换 | 1.10+ |
spring cloud consul | cloud框架-可换 | 1.10+ |
spring oauth2 | 统一认证中心-可换 | 5.2.2 |
前端
推荐 VS Code 开发,配合插件如下:
插件名 | 功能 |
---|---|
node.js | node.js 建议 21.1.0 + |
pnpm | 类似npm的构建工具 最新版即可 |
nvm | node版本管理工具,多版本之间切换很好用 最新版即可 |
TypeScript Vue Plugin (Volar) | 用于 TypeScript 的 Vue 插件 |
Vue Language Features (Volar) | Vue3.0 语法支持 |
unocss | unocss for vscode |
Iconify IntelliSense | Iconify 预览和搜索 |
i18n Ally | 国际化智能提示 |
Stylelint | Css 格式化 |
Prettier | 代码格式化 |
ESLint | 脚本代码检查 |
DotENV | env 文件高亮 |
后端
插件名 | 功能 |
---|---|
idea | java 开发工具 社区版、企业版都可 |
⚠️注意:该项目使用 element plus 版本,所以最低兼容 vue@3.0+ nodejs版本v21.1.0
⚠️注意:强烈建议一定要用pnpm
// 全局安装
npm install pnpm -g
//查看源
pnpm config get registry
//切换淘宝源
pnpm config set registry https://registry.npmmirror.com/
// 使用
pnpm install 包 // 安装依赖
# 克隆项目
git clone https://gitee.com/maimengcloud/xm-ui-web.git
# 安装依赖
pnpm install
# 启动服务
pnpm run dev
浏览器访问 http://localhost:8067
登录api,对接后台接口有两种方式:
VITE_CTX_LOGIN=oauth2client
VITE_CTX_LOGIN=lcode
内容相关接口默认打包进mdp-lcode,所以内容相关接口可以直接对接lcode即可,如果内容相关的服务使用独立的第三方开源工程,独立部署,比如直接使用 mdp-arc-backend
VITE_CTX_ARC=arc
# 配置附件上传的接口,如果不配使用arc内置的地址
VITE_UPLOAD_ATT_URL=
# 配置图片上传的接口,如果不配使用arc内置的地址
VITE_UPLOAD_IMAGE_URL=
VITE_CTX_ARC=lcode
# 配置附件上传的接口,如果不配使用arc内置的地址
VITE_UPLOAD_ATT_URL=
# 配置图片上传的接口,如果不配使用arc内置的地址
VITE_UPLOAD_IMAGE_URL=
前后端对接,涉及api/xm,api/lcode,api/arc,api/oauth2client,api/workflow,api/tpa等开头的api
['/api/xm']: {//低代码平台
target: 'http://localhost:7067',
ws: false,
changeOrigin: true,
rewrite: (path) => path.replace(new RegExp(`^/api/xm`), '/'),
},
['/api/lcode']: {//低代码平台
target: 'http://localhost:7014',
ws: false,
changeOrigin: true,
rewrite: (path) => path.replace(new RegExp(`^/api/lcode`), '/'),
},
['/api/oauth2client']: {//登录相关,如果VITE_CTX_LOGIN=lcode,此代理不需要配置,走的是lcode的代理
target: 'localhost:7014',//如果对接统一认证中心,此处应该改为oauth2client的端口,默认对接lcode
ws: false,
changeOrigin: true,
rewrite: (path) => path.replace(new RegExp(`^/api/oauth2client`), '/'),
},
['/api/arc']: {// 图片、文件、标签、分类等,如果VITE_CTX_ARC=lcode,此代理不需要配置,走的是lcode的代理
target: 'localhost:7014',//如果对接arc-backend,此处应该改为arc的端口,默认对接lcode
ws: false,
changeOrigin: true,
rewrite: (path) => path.replace(new RegExp(`^/api/arc`), '/'),
},
['/api/workflow']: {//工作流
target: 'localhost:7080',
ws: false,
changeOrigin: true,
rewrite: (path) => path.replace(new RegExp(`^/api/workflow`), '/'),
},
['/api/tpa']: {//第三方微信、支付宝登录,支付,二维码等
target: 'localhost:7012',
ws: false,
changeOrigin: true,
rewrite: (path) => path.replace(new RegExp(`^/api/tpa`), '/'),
},
['/api']: {//保底代理
target: 'http://localhost:7014', //不匹配的请求,全部转向lcode
ws: false,
changeOrigin: true,
rewrite: (path) => path.replace(new RegExp(`^/api`), '/'),
},
上述代理实现把以/api/*开头的请求地址(举例/api/lcode/user/list)替换为/user/list,并转发到 http://服务器上的ip:端口 地址
# 构建测试环境
pnpm run build:test
# 构建生产环境
pnpm run build:prod
假设:
# 1.首先登录sit1-static并进入/data/nginx/html/xm/下
cd /data/nginx/html/xm/
# 如果有dist.rar需要先删除
rm -rf dist.rar
# 2.执行rz命令,弹框选择本地dist文件上传到sit1-static服务器
rz
# 3.在弹出的目录选择器中进入C:\Users\xxx\IdeaProjects\xm-ui-web\dist\目录下
全选所有文件->右键->添加到dist.rar->选中dist.rar->上传到服务器商/data/nginx/html/xm/目录下
# 4.执行解压缩命令,至此静态资源发布完成
unrar x dist.rar
解压后m1目录下一般有css、fonts、images、img、js、tinymce、favicon.icon、index.html等文件或者文件夹
location ~*/(mk|mallm|arc|im|sms|workflow|oa|ac|audit|xm|tpa|crowd|lcode) {
root /usr/share/nginx/html;
index index.html;
expires 30d;
}
api/xm, api/lcode, api/arc, api/workflow, api/tpa,等api配置,每个都是同样的逻辑
# lcode 低代码相关api
upstream api-gate-lcode {
server 192.168.0.222:7014;
}
location /api/lcode/ {
#proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://api-gate-lcode/;
proxy_connect_timeout 65s;
proxy_send_timeout 65s;
proxy_read_timeout 65s;
proxy_next_upstream_tries 1;
}
# workflow 工作流相关api
upstream api-gate-workflow {
server 192.168.0.222:7080;
}
location /api/workflow/ {
#proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://api-gate-workflow/;
proxy_connect_timeout 65s;
proxy_send_timeout 65s;
proxy_read_timeout 65s;
proxy_next_upstream_tries 1;
}
# arc 内容相关api
upstream api-gate-arc {
# 如果由lcode提供服务,可以指向lcode所在端口7014
server 192.168.0.222:7012;
}
location /api/arc/ {
#proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://api-gate-arc/;
proxy_connect_timeout 65s;
proxy_send_timeout 65s;
proxy_read_timeout 65s;
proxy_next_upstream_tries 1;
}
# xm 项目管理相关api
upstream api-gate-xm {
server 192.168.0.222:7067;
}
location /api/xm/ {
#proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://api-gate-xm/;
proxy_connect_timeout 65s;
proxy_send_timeout 65s;
proxy_read_timeout 65s;
proxy_next_upstream_tries 1;
}
# oauth2client 登录相关api
upstream api-gate-oauth2client {
# 如果由lcode提供服务,可以指向lcode所在端口7014
server 192.168.0.222:7002;
}
location /api/oauth2client/ {
#proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://api-gate-oauth2client/;
proxy_connect_timeout 65s;
proxy_send_timeout 65s;
proxy_read_timeout 65s;
proxy_next_upstream_tries 1;
}
# tpa 第三方微信/支付宝登录、支付等相关api
upstream api-gate-tpa {
server 192.168.0.222:7125;
}
location /api/tpa/ {
#proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://api-gate-tpa/;
proxy_connect_timeout 65s;
proxy_send_timeout 65s;
proxy_read_timeout 65s;
proxy_next_upstream_tries 1;
}
假设 spring cloud gate部署在192.168.0.222,监听6101端口 下面的目标服务器改为cloud gate的地址端口. 注意cloud环境下不需要像单体般每个子系统api单独配置映射关系。因为所有的api都是经过gate再转发的
upstream api-gate {
server 192.168.0.222:6101;
}
location /api/ {
#proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://api-gate/;
proxy_connect_timeout 65s;
proxy_send_timeout 65s;
proxy_read_timeout 65s;
proxy_next_upstream_tries 1;
}
具体以xm-backend中发布描述为准
日常查询问题,主要通过查询前后端日志,分析出具体原因,再进行针对性解决。
唛盟平台具有多个子业务系统,每个子业务系统都有独立日志,一个前端请求,可能日志散落在多个日志文件,如何才能凑齐这些日志,进行统一分析交易执行情况,进而定位问题?
答复:唛盟平台在每个请求到达服务端的时候,会检测gloNo是否存在,如果不存在,则会自动创建一个gloNo,并注入到日志上下文中,并打印到每一行代码中,另外请求结束,还会把gloNo返回到前端,如果交易中间涉及调用其他子系统,同样会自动上送gloNo,对方交易子系统同样执行上诉逻辑。因此,可以看见,gloNo是能够把所有日志串联起来的。我们只需要在日志文件目录下执行grep命令即可找出对应日志
操作步骤:
1.下面是典型的唛盟接口返回的数据结果集 gloNo就存放在res.data.tips.gloNo中。
{
"total" : 1,
"data" : [ {
"bizFlowState" : null,
"deptName" : null,
"projectCnt" : 1,
"admUserid" : "4hinb8m16",
"del" : "0",
"budgetNouserAt" : null,
"productName" : "唛盟云-财务系统",
"baselineId" : "2022-01-01-base-01",
}],
"tips" : {
"msg" : "成功",
"gloNo" : "20240312200013556UWJZKV",
"isOk" : true,
"reqNo" : "20240312200013556JM3WKN",
"tipscode" : "ok"
}
}
grep "20240312200013556UWJZKV" *.log
consule 的默认控制台 http://ip:8500/
可以调用/bin/service-deregister.sh进行
可以在crontab中配置定时任务,定时调用bin/clear-log.sh即可完成7天循环自动清理及备份日志
使用举例:
# 打开定时任务编辑器
crontab -e
# 查看定时任务
crontab -l
# 增加定时清理备份日志任务
0 1 * * * /bin/bash /home/mall/bin/clear-log.sh
已发布,停更
已发布,持续改进
已发布,持续改进
唛盟项目管理3.5发布: 1.简化系统界面,提升操作效率。废除视图内嵌入视图等复杂界面。 2.解决某些弹框字体模糊问题 3.重磅:添加kpi功能-(业界少有的kpi与项目整合),项目集合功能(任意项目任意组合,pmo关注),风险管理功能 4.重磅:重新优化工作流相关功能,在项目视图中提供统一工作流入口,如 立项申请、结项申请、变更申请等。 5.优化费用、预算等相关 模块 6.计划书树、需求树中树状结构不在区分叶子节点等,树中默认全部展示,计划、需求列表页支持树状结构展示。 7.重磅: 优化了项目计划管理功能,支持按不同项目类型(大概100多个行业级项目类型)导入不同的一级计划功能 8.重磅:项目按阶段抽取菜单形成 立项管理、实施管理、结项管理、结后管理、已关闭管理 9.重磅: 元数据管理支持定制状态之间的转换关系,开发不再需要写大量代码去判断这个状态能不能变成那个状态。同时优化了元数据的操作界面、操作流程等。 10. 项目关键字段变更审核配置-支持按配置字段发起项目变更流程,流程审核通过才同步更新项目信息。提供项目变更的差异对比。审核时快速决策。 11. 产品、项目、需求、计划、任务、风险、kpi等都附带有沟通模块,可以随时发表评论 12. 产品、项目、迭代、需求、计划、任务、风险、kpi等都附带有动态模块,随时可以查看相关动态信息。 13. 工时记录可以进入结算池,可以发起结算审批流。
待解决: 1.合同与项目的整合 2.ai与项目的整合 3.项目计划、需求管理、kpi、等支持脑图编制 4.基线计划的定制、基线版本之间的对比分析
预研中
唛盟xm基于唛盟低代码平台开发,问题都是共性的,请到唛盟低代码查看相关内容
分支 | 说明 |
---|---|
master | 主分支,3.0.0+,受保护分支,此分支不接受 PR。在 dev 分支后经过测试没问题后会合并到此分支。 |
3.0.0-RELEASE | 已发布的版本3.0。 |
2.0.0-RELEASE | 已发布的版本2.0。 |
快扫描下方左侧微信二维码和我们一起交流讨论吧!(备注 唛盟-mdp 进群)
唛盟微信公众号查看一些基础教程
反馈 BUG、提出建议,欢迎新建:issues,开发人员会不定时查看回复。
参与贡献,请查看贡献指南。
感谢所有赞赏以及参与贡献的小伙伴,你们的支持是我们不断更新前进的动力!微信扫一扫,赏杯咖啡呗!
序号 | 合作项目 | 详细介绍 | 费用说明 |
---|---|---|---|
1. | 打赏获得赞助商名额 | 在赞助商列表展示(添加微信沟通) | 不限额度 |
2. | 新组件开发 | 提供组件扩展、优化服务 | 视复杂程度而定 |
3. | 开发问题解答 | 如果使用该产品遇到棘手问题需要解决,添加微信进行沟通解决 | 免费 |
4. | 开发培训 | 提供开发流程介绍、技术介绍、功能介绍、部署流程介绍,仅限线上培训 | 加微信详聊 |
5. | 扩展问题解答 | 如果需要使用该产品进行自有业务系统研发,需要我方提供意见建议,我方收取一定费用后提供相应服务 | 加微信详聊 |
6. | 广告合作 | 广告位(精品项目推荐、赞助商展位) | 加微信沟通 |
注意:如果需要商业使用又不想带擎勤的版权说明,请联系唛盟客服申请版权授权
0.1-唛盟-唛盟生态1+n架构无限扩展、丝滑部署、永不下线
8.2.唛盟-后端工程开发-控制层、服务层、dao层开发详细介绍
10.1-唛盟-复杂查询、多主键crud的实现方案、原理解析
⚠️工程分类:主体工程、基础配套工程、高级配套工程、拓展应用工程、辅助开发工具五大类。
主体工程:本系统业务工程,用于书写本系统相关的业务代码;
基础配套工程:业务工程运行所需的必要工程;如开发底座,系统管理相关功能包
高级配套工程:高级应用,比如需要将业务工程接入oauth2环境、将业务工程发布到cloud环境,才需要下载安装高级配套工程
拓展应用工程: 基于唛盟低代码平台拓展的应用工程,其后端可以单体发布,也可以以微服务方式发布,也可以打成jar被唛盟其它应用引入
辅助开发工具:指开发用到的一些工具
⚠️工程命名规范:业务名称+工程属性
工程属性如下:
-ui: 页面工程
-web: pc端运行的浏览器工程
-backend: 后端服务
-app: 安卓、ios等原生app工程
-uniapp: 基于uniapp开发的应用
-minapp: 小程序
-cloud: 微服务cloud环境
-oauth2: 统一认证中心
-bootstrap: 打包部署工程
唛盟属于前后端严格分离的一套系统,分为前端工程、后端工程两部分
mdp-cloud-backend 非必须
该工程作为spring cloud的扩展工程,如果需要将系统发布到spring cloud环境,需要下载该工程重新打包,不包含任何的业务功能,仅作为后端接入cloud环境使用
mdp-oauth2-backend 非必须
该工程为统一认证中心,作为spring oauth2的扩展工程,如果需要将系统接入oauth2环境,需要下载该工程重新打包,该工程实现分布式单点登陆;支持微信、支付宝、短信、账户密码等多种登陆方式
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型