{"id":13427792,"url":"https://github.com/nju-softeng/dingtalk-app-server","last_synced_at":"2025-03-16T00:32:13.762Z","repository":{"id":37107452,"uuid":"221240208","full_name":"nju-softeng/dingtalk-app-server","owner":"nju-softeng","description":"🥝 基于钉钉的实验室绩效管理系统 (Spring Boot)","archived":false,"fork":false,"pushed_at":"2024-10-04T08:14:00.000Z","size":4525,"stargazers_count":126,"open_issues_count":10,"forks_count":41,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-10-16T01:05:05.756Z","etag":null,"topics":["dingding","dingtalk","dingtalk-sdk","spring-boot","springboot"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nju-softeng.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-11-12T14:42:27.000Z","updated_at":"2024-08-17T06:22:32.000Z","dependencies_parsed_at":"2024-03-03T05:31:54.615Z","dependency_job_id":"4af8fa0c-846c-46c9-8cd7-4aceed1cf69e","html_url":"https://github.com/nju-softeng/dingtalk-app-server","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nju-softeng%2Fdingtalk-app-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nju-softeng%2Fdingtalk-app-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nju-softeng%2Fdingtalk-app-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nju-softeng%2Fdingtalk-app-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nju-softeng","download_url":"https://codeload.github.com/nju-softeng/dingtalk-app-server/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221631813,"owners_count":16855012,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dingding","dingtalk","dingtalk-sdk","spring-boot","springboot"],"created_at":"2024-07-31T01:00:40.477Z","updated_at":"2024-10-27T05:30:25.696Z","avatar_url":"https://github.com/nju-softeng.png","language":"Java","funding_links":[],"categories":["开源应用"],"sub_categories":["微应用"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg width=\"100\" src=\"https://i.loli.net/2020/11/12/8pP5y6eHwX1VfLd.png\" alt=\"logo\"\u003e\n  \u003ch2 align=\"center\"\u003eDingtalk App Server\u003c/h2\u003e\n  \u003cp align=\"center\"\u003e\n    \u003ca href=\"https://www.codefactor.io/repository/github/nju-softeng/dingtalk-app-server\"\u003e\u003cimg src=\"https://www.codefactor.io/repository/github/nju-softeng/dingtalk-app-server/badge\" alt=\"CodeFactor\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/nju-softeng/dingtalk-app-server/actions?query=workflow%3ARelease\"\u003e\n      \u003cimg src=\"https://github.com/nju-softeng/dingtalk-app-server/actions/workflows/release.yml/badge.svg?branch=release\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/nju-softeng/dingtalk-app-server/actions?query=workflow%3AMain\"\u003e\n      \u003cimg src=\"https://github.com/nju-softeng/dingtalk-app-server/actions/workflows/main.yml/badge.svg?branch=main\"\u003e\n    \u003c/a\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\n### 目标与期望\n基于钉钉微应用开发的实验室绩效管理系统，将实验室的绩效、学分、论文评审管理与钉钉对接。  \n主要功能有：绩效、学分申请与审核，论文评审投票及学分管理，实验室助研金计算等，导出绩效和助研金报表。\n\n### 开发环境\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"middle\"\u003e\n        \u003ca href=\"https://spring.io/projects/spring-boot\" target=\"_blank\"\u003e\n          \u003cimg width=\"50px\" src=\"https://spring.io/images/spring-initializr-4291cc0115eb104348717b82161a81de.svg\"\u003e\n        \u003c/a\u003e\n        \u003cp\u003e\n          \u003csub\u003eSpringBoot\u003c/sub\u003e\n        \u003c/p\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"middle\"\u003e\n        \u003ca href=\"https://spring.io/projects/spring-data-jpa#overview\" target=\"_blank\"\u003e\n          \u003cimg width=\"50px\" src=\"https://i.loli.net/2020/11/13/pR8OtwsSacyuDU7.png\"\u003e\n        \u003c/a\u003e\n        \u003cp\u003e\n          \u003csub\u003eJPA\u003c/sub\u003e\n        \u003c/p\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"middle\"\u003e\n        \u003ca href=\"https://mybatis.org/mybatis-3/\" target=\"_blank\"\u003e\n          \u003cimg width=\"50px\" src=\"https://i.loli.net/2021/01/06/lSeIVLagyb4TFWN.png\"\u003e\n        \u003c/a\u003e\n        \u003cp\u003e\n          \u003csub\u003eMybatis\u003c/sub\u003e\n        \u003c/p\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"middle\"\u003e\n        \u003ca href=\"https://dev.mysql.com/downloads/mysql/\"\u003e\n          \u003cimg width=\"50px\" src=\"https://i.loli.net/2020/11/13/GQE3xMAbWd72hVc.png\"\u003e\n        \u003c/a\u003e\n        \u003cp\u003e\n          \u003csub\u003eMySQL 8\u003c/sub\u003e\n        \u003c/p\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"middle\"\u003e\n        \u003ca href=\"https://ding-doc.dingtalk.com/doc#/faquestions/vzbp02\" target=\"_blank\"\u003e\n          \u003cimg width=\"50px\" src=\"https://i.loli.net/2020/11/13/DVpc9nF2JToQyHg.png\"\u003e\n        \u003c/a\u003e\n        \u003cp\u003e\n          \u003csub\u003eDingtalk SDK\u003c/sub\u003e\n        \u003c/p\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"middle\"\u003e\n        \u003ca href=\"https://docs.docker.com/\" target=\"_blank\"\u003e\n          \u003cimg width=\"50px\" src=\"https://i.loli.net/2020/11/13/27eyNzt698aoilM.png\"\u003e\n        \u003c/a\u003e\n        \u003cp\u003e\n          \u003csub\u003eDocker\u003c/sub\u003e\n        \u003c/p\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"middle\"\u003e\n        \u003ca href=\"https://docs.docker.com/compose/\" target=\"_blank\"\u003e\n          \u003cimg width=\"50px\" src=\"https://i.loli.net/2020/11/13/TcewOXGMWHLiNtE.jpg\"\u003e\n        \u003c/a\u003e\n        \u003cp\u003e\n          \u003csub\u003eDocker Compose\u003c/sub\u003e\n        \u003c/p\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"middle\"\u003e\n        \u003ca href=\"https://github.com/features/actions\" target=\"_blank\"\u003e\n          \u003cimg width=\"50px\" src=\"https://i.loli.net/2021/01/06/EcsNSzQZl2TPyB6.png\"\u003e\n        \u003c/a\u003e\n        \u003cp\u003e\n          \u003csub\u003eGithub Actions\u003c/sub\u003e\n        \u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n+ 钉钉SDK的封装 👉 ：[com.softeng.dingtalk.api](https://github.com/nju-softeng/dingtalk-app-server/tree/main/src/main/java/com/softeng/dingtalk/api)\n+ 项目前端代码  👉 ：[dingtalk-app-web](https://github.com/nju-softeng/dingtalk-app-web)\n\n### 注意事项  \n+ 使用了lombok 插件简化代码，idea 需要安装lombok 插件，否则编译过不去\n+ 系统启动时，[初始化操作](https://github.com/nju-softeng/dingtalk-app-server/blob/9e302075e2e8d55eb3736162066bf4bf203232c9/src/main/java/com/softeng/dingtalk/service/InitSys.java#L20)会调用钉钉SDK，拉取钉钉组织的所有用户, **请先在开发平台设置出口IP**\n\n### 持续部署  \n本项目使用 GitHub Actions 实现 CI，受外网网速限制，没有采用在 GitHub 机器上构件镜像，再拉取到服务器上运行的方式。而是在每次 CI 触发后，GitHub 机器 ssh 登陆服务器，执行脚本来拉取最新代码，构建镜像，并运行容器，具体如下：\n1. 从GitHub仓库中拉去最新代码到服务器本地仓库\n2. 使用mvn构建项目\n3. `docker-compose build` 构建镜像\n4. `docker-compose up -d` 在后台启动容器\n5. `docker image prune -f` 清理无用的镜像 \n   \n部署相关脚本如下\n+ 生产环境CI脚本：[.github/workflows/release.yml](https://github.com/nju-softeng/dingtalk-app-server/blob/main/.github/workflows/release.yml)  \n+ 测试环境CI脚本：[.github/workflows/main.yml](https://github.com/nju-softeng/dingtalk-app-server/blob/main/.github/workflows/main.yml)  \n+ 对应的构建部署脚本：[dingtalk-app-build (private)](https://github.com/nju-softeng/dingtalk-app-build)\n+ docker-compose 配置：[docker-compose.yml 配置文件](https://github.com/nju-softeng/dingtalk-app-server/wiki/docker_compose.yml)\n\n### 系统运维  \n+ [定时备份docker中的数据库](https://www.yuque.com/zhanyeye/devops/gii4pk)\n+ [bin log日志恢复误删数据](https://www.cnblogs.com/dslx/p/11578972.html)\n\n### 前端预览  \n![01](https://user-images.githubusercontent.com/35565811/147812078-ee6d23d6-183b-46ee-9cab-fa511a9db3e1.png)\n![02](https://user-images.githubusercontent.com/35565811/147812086-3de4a6d8-0951-45fa-b954-012c1bdecf0e.png)\n![03](https://user-images.githubusercontent.com/35565811/147812088-b7efadb5-4cb7-492b-8b91-3fdcf1d45f33.png)\n![04](https://user-images.githubusercontent.com/35565811/147812093-98630a58-0f5c-4f57-b004-e63d017ad573.png)\n![05](https://user-images.githubusercontent.com/35565811/147812102-c0d0771b-5260-4475-89fe-6a5ca2e70bc5.png)\n![06](https://user-images.githubusercontent.com/35565811/147812111-2b46366e-be0a-4ab1-9790-32e8346afccc.png)\n![07](https://user-images.githubusercontent.com/35565811/147812115-381fe5c5-5090-44ba-8adb-fe4126f702b8.png)\n![08](https://user-images.githubusercontent.com/35565811/147812121-983cac86-4d19-42c8-8c79-d72117603c46.png)\n![09](https://user-images.githubusercontent.com/35565811/147812126-3a237f3d-3305-4428-b9f2-7ad2b36075eb.png)\n![10](https://user-images.githubusercontent.com/35565811/147812129-0294e664-6eed-46cf-b04e-128b153b974d.png)\n![11](https://user-images.githubusercontent.com/35565811/147812136-f8fea23c-0d52-4af9-a017-cc8cfaf2b4aa.png)\n![12](https://user-images.githubusercontent.com/35565811/147812141-fcc1ba3f-5b27-4c92-b311-148117e31aef.png)\n![13](https://user-images.githubusercontent.com/35565811/147812148-e3b09cc8-3499-402b-b45c-087d2651b205.png)\n![14](https://user-images.githubusercontent.com/35565811/147812150-7f8a93a7-a6b8-4e73-82ab-24d17210b46c.png)\n![15](https://user-images.githubusercontent.com/35565811/147812155-ad4aadc4-9e23-4595-983e-7f648cd888cc.png)\n![16](https://user-images.githubusercontent.com/35565811/147812167-b1e5ee61-550b-49fe-be29-75db3e656a8c.png)\n![17](https://user-images.githubusercontent.com/35565811/147812171-74e74dc2-a89e-4efe-9792-32894b697004.png)\n![18](https://user-images.githubusercontent.com/35565811/147812176-5587bd9a-8297-43bf-9941-64204d07f6e6.png)\n![19](https://user-images.githubusercontent.com/35565811/147812180-e26104c1-cff6-4faa-b190-bffc4e793b43.png)\n\n![project-detail-1.png](https://i.loli.net/2021/01/11/w8Tr7lUkK1pOaL9.png)\n![project-detail-2.png](https://i.loli.net/2021/01/11/UihclBsEJA5wZab.png)\n\n| \u003cimg src=\"https://i.loli.net/2020/12/12/j4s6RKzX7JTqyiM.png\"/\u003e | \u003cimg src=\"https://i.loli.net/2020/12/12/FTiDv3c1HGk5eKM.png\"/\u003e | \u003cimg src=\"https://i.loli.net/2020/12/12/GqWDFnU4dLmwXa7.png\"/\u003e |\n| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ |\n\n\n  \n\n \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnju-softeng%2Fdingtalk-app-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnju-softeng%2Fdingtalk-app-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnju-softeng%2Fdingtalk-app-server/lists"}