平?jīng)鍪凶》亢统青l(xiāng)建設(shè)局網(wǎng)站sem賬戶托管外包
博主介紹:?全網(wǎng)粉絲3W+,全棧開發(fā)工程師,從事多年軟件開發(fā),在大廠呆過。持有軟件中級(jí)、六級(jí)等證書??商峁┪⒎?wù)項(xiàng)目搭建與畢業(yè)項(xiàng)目實(shí)戰(zhàn)?
博主作品:《微服務(wù)實(shí)戰(zhàn)》專欄是本人的實(shí)戰(zhàn)經(jīng)驗(yàn)總結(jié),《Spring家族及微服務(wù)系列》專注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源碼解讀、熱門面試題、架構(gòu)設(shè)計(jì)等。除此之外還有不少文章等你來細(xì)細(xì)品味,更多驚喜等著你哦
🍅開源項(xiàng)目免費(fèi)哦:點(diǎn)擊這里克隆或者下載?🍅
🍅文末獲取聯(lián)系🍅精彩專欄推薦訂閱👇🏻👇🏻 不然下次找不到喲
??【微服務(wù)】Nacos為什么丟棄短連接(http)而選擇擁抱長(zhǎng)連接(gRPC)
目錄
一、前言
二、系統(tǒng)設(shè)計(jì)
1、系統(tǒng)運(yùn)行環(huán)境
2、系統(tǒng)架構(gòu)設(shè)計(jì)?編輯
3、項(xiàng)目結(jié)構(gòu)
3.1、后端項(xiàng)目
3.2、vue項(xiàng)目
3.3、uniapp項(xiàng)目
4、登錄設(shè)計(jì)
5、管理員維護(hù)訂單時(shí)序圖設(shè)計(jì):
三、非功能性與可行性分析
四、功能截圖
后端管理:
1、登錄界面
2、首頁
3、運(yùn)營(yíng)基礎(chǔ)
3.1、課程管理
4、會(huì)員管理
4.1、會(huì)員信息
4.2、會(huì)員等級(jí)
5、app配置
5.1、首頁輪播圖
6、營(yíng)銷管理
6.1、VIP會(huì)員卡
7、門店管理
7.1、門店信息
7.2、教練列表
8、優(yōu)惠券管理
8.1、優(yōu)惠券配置
9、系統(tǒng)管理
9.1、用戶管理
9.2、角色管理
9.3、菜單管理
9.4、部門管理
9.5、崗位管理
9.6、字典管理
uniapp客戶端:
1、首頁
1.1、首頁圖1
1.2、首頁圖2
1.3、首頁圖3
1.4、首頁圖4
1.5、首頁圖5?
2、門店
2.1、列表圖1
2.2、列表圖2
2.3、地圖
3、我的
五、實(shí)現(xiàn)代碼?
1、角色控制器
2、服務(wù)接口
3、實(shí)現(xiàn)類
六、獲取源碼
一、前言
? ? 縱觀當(dāng)下世界,科學(xué)技術(shù)日新月異,信息技術(shù)節(jié)節(jié)攀高,經(jīng)濟(jì)活動(dòng)也越發(fā)高漲。一方面,信息科技迅猛發(fā)展帶來了信息時(shí)代的興起,其中互聯(lián)網(wǎng)技術(shù)自出現(xiàn)以來便吸引了全球人類的目光,深刻地變革了人類的生存及生活方式;而另一方面,經(jīng)濟(jì)活動(dòng)的快速發(fā)展也對(duì)安全和便利提出了更高、更為嚴(yán)苛的要求。人們不僅僅滿足于有一個(gè)好工作,更加關(guān)注于自己的生活方方面面,而健身也是工作者下班后或周末經(jīng)常提及的。但是對(duì)于健身場(chǎng)所的數(shù)據(jù)信息等沒有及時(shí)獲悉,而錯(cuò)過一些上課機(jī)會(huì)等等。故該健身系統(tǒng)app可以實(shí)時(shí)給客戶提供健身館的最新消息,環(huán)境、設(shè)備以及課程等消息,方便客戶掌握健身館的最新動(dòng)態(tài);同時(shí)也方便健身館吸引客戶,管理與運(yùn)營(yíng)等。
二、系統(tǒng)設(shè)計(jì)
1、系統(tǒng)運(yùn)行環(huán)境
開發(fā)系統(tǒng):Windows10
架構(gòu)模式:MVC/前后端分離
JDK版本:Java JDK1.8
開發(fā)工具:IDEA
數(shù)據(jù)庫(kù)版本: mysql5.7
數(shù)據(jù)庫(kù)可視化工具: SQL yog或Navicat for MySQL
服務(wù)器:SpringBoot自帶 apache tomcat
主要技術(shù):Java、SpringBoot、MyBatis-plus、SpringSecurity、JWT、MySQL、Redis、Uniapp、Html、Vue、Elementui等
2、系統(tǒng)架構(gòu)設(shè)計(jì)

3、項(xiàng)目結(jié)構(gòu)
3.1、后端項(xiàng)目
3.2、vue項(xiàng)目
3.3、uniapp項(xiàng)目
4、登錄設(shè)計(jì)
? ? 借鑒微服務(wù)單點(diǎn)登錄設(shè)計(jì)
5、管理員維護(hù)訂單時(shí)序圖設(shè)計(jì):
三、非功能性與可行性分析
2.5非功能性需求分析
非功能性需求:用戶對(duì)軟件質(zhì)量屬性、運(yùn)行環(huán)境、資源約束、外部接口等方面的要求或期望,包括:
2.5.1性能需求:
用戶在軟件響應(yīng)速度、結(jié)果精度、運(yùn)行時(shí)資源消耗量等方面的要求。
2.5.2可行性需求:
用戶在軟件失效的頻率、嚴(yán)重程度、易恢復(fù)性,以及故障可預(yù)測(cè)性等方面的要求。
2.5.3易用性需求:
用戶在界面的易用性、美觀性,以及對(duì)面向用戶的文檔和培訓(xùn)資料等方面的要求。
2.5.4安全性需求:
用戶在身份證、授權(quán)控制、私密性等方面的要求。
2.5.5運(yùn)行環(huán)境約束:
用戶對(duì)軟件系統(tǒng)運(yùn)行環(huán)境的要求。
2.5.6外部接口:
用戶對(duì)待開發(fā)軟件系統(tǒng)與其它軟件系統(tǒng)或設(shè)備之間的接口要求
2.6可行性分析
可行性分析是從不同的角度,對(duì)可能影響系統(tǒng)的各方面因素進(jìn)行分析,確認(rèn)系統(tǒng)在實(shí)際生活上是可行的。本系統(tǒng)只是單純地從經(jīng)濟(jì)、法律、技術(shù)、操作可行性四個(gè)方面來分析說明。
2.6.1技術(shù)可行性
技術(shù)上的可行性分析主要分析技術(shù)條件能否順利完成開發(fā)工作,軟、硬件能否滿足需要。本系統(tǒng)采用Vue+Elementui開發(fā)出友好美觀的人機(jī)界面,便于用戶理解、操作。數(shù)據(jù)庫(kù)管理系統(tǒng)采用MySQL,它能夠處理大量數(shù)據(jù),同時(shí)保持?jǐn)?shù)據(jù)的完整性、安全性和持久性。后端技術(shù)使用SpringBoot、MyBatis,這些技術(shù)在許多公司已經(jīng)被商用了,因此本系統(tǒng)的開發(fā)平臺(tái)已成熟可行。硬件方面,在科技飛速發(fā)展的今天,硬件更新速度越來越快,容量越來越大,可靠性越來越高,價(jià)格越來越便宜,因此硬件平臺(tái)也能夠滿足本系統(tǒng)所需。
2.6.2經(jīng)濟(jì)可行性
? 項(xiàng)目放在阿里學(xué)生服務(wù)器或者本地虛擬機(jī)的linux環(huán)境,故可行。
2.6.3法律可行性
? 可行,自己寫的項(xiàng)目,目的明確,沒有違法違規(guī)。
2.6.4操作可行性
操作較為簡(jiǎn)單,而且當(dāng)下信息科技發(fā)達(dá),界面的設(shè)計(jì)也著實(shí)考慮到用戶的體驗(yàn),系統(tǒng)也是為用戶而生。故操作是可行的,不存在難度大的操作。
四、功能截圖
后端管理:
1、登錄界面
2、首頁
3、運(yùn)營(yíng)基礎(chǔ)
3.1、課程管理
4、會(huì)員管理
4.1、會(huì)員信息
4.2、會(huì)員等級(jí)
5、app配置
5.1、首頁輪播圖
6、營(yíng)銷管理
6.1、VIP會(huì)員卡
7、門店管理
7.1、門店信息
7.2、教練列表
8、優(yōu)惠券管理
8.1、優(yōu)惠券配置
9、系統(tǒng)管理
9.1、用戶管理
9.2、角色管理
9.3、菜單管理
9.4、部門管理
9.5、崗位管理
9.6、字典管理
uniapp客戶端:
1、首頁
1.1、首頁圖1
1.2、首頁圖2
1.3、首頁圖3
1.4、首頁圖4
1.5、首頁圖5?
2、門店
2.1、列表圖1
2.2、列表圖2
2.3、地圖
3、我的
五、實(shí)現(xiàn)代碼?
1、角色控制器
/*** <p>* 角色表 前端控制器* </p>** @author CeaM* @since 2023-01-28*/
@RestController
@AllArgsConstructor
@RequestMapping("/api/roles")
public class CeamSysRoleController {private final ICeamSysRoleService ceamSysRoleService;private final ICeamSysUserService ceamSysUserService;@GetMappingpublic ResponseEntity<IPage<CeaMSysRoleVO>> getRoles(PageableDTO pageable) {IPage<CeaMSysRoleVO> mapIPage = ceamSysRoleService.pageCeaMSysRoleVO(pageable);return ResponseEntity.ok(mapIPage);}@GetMapping(value = "/level")public ResponseEntity<Object> getLevel() {return new ResponseEntity<>(Dict.create().set("level", getLevels(null)), HttpStatus.OK);}@PutMapping(value = "/menu")public ResponseEntity<Object> updateMenu(@RequestBody CeaMSysRoleDTO roleDTO) {CeamSysRole role = ceamSysRoleService.getById(roleDTO.getId());getLevels(role.getLevel());ceamSysRoleService.updateMenu(roleDTO, role);return new ResponseEntity<>(HttpStatus.NO_CONTENT);}/*** 獲取用戶的角色級(jí)別* @return /*/private int getLevels(Integer level) {CeaMSysUserDTO user = ceamSysUserService.loadUserInfo(SecurityUtils.getUsername());List<RoleDTO> roleDTOS = ceamSysRoleService.listByUserId(user.getId());List<Integer> levels = roleDTOS.stream().map(RoleDTO::getLevel).collect(Collectors.toList());int min = Collections.min(levels);if (level != null) {if (level < min) {throw new ServiceException("權(quán)限不足,你的角色級(jí)別:" + min + ",低于操作的角色級(jí)別:" + level);}}return min;}
}
2、服務(wù)接口
/*** <p>* 角色表 服務(wù)類* </p>** @author CeaM* @since 2023-01-28*/
public interface ICeamSysRoleService extends IService<CeamSysRole> {IPage<CeaMSysRoleVO> pageCeaMSysRoleVO(PageableDTO pageable);/*** 獲取用戶權(quán)限信息* @param userId 用戶信息* @return 權(quán)限信息*/Collection<SimpleGrantedAuthority> grantedAuthorities(Long userId);/**** @param userId 用戶ID* @return RoleItemVOs*/List<RoleDTO> listByUserId(Long userId);void updateMenu(CeaMSysRoleDTO roleDTO, CeamSysRole role);
}
3、實(shí)現(xiàn)類
/*** <p>* 角色表 服務(wù)實(shí)現(xiàn)類* </p>** @author CeaM* @since 2023-01-28*/
@Slf4j
@Service
@AllArgsConstructor
public class CeamSysRoleServiceImpl extends ServiceImpl<CeamSysRoleMapper, CeamSysRole> implements ICeamSysRoleService {private ICeamSysMenuService ceamSysMenuService;private ICeamRoleMenuService ceamRoleMenuService;@Overridepublic IPage<CeaMSysRoleVO> pageCeaMSysRoleVO(PageableDTO pageable) {LambdaQueryWrapper<CeamSysRole> queryWrapper = Wrappers.<CeamSysRole>lambdaQuery().eq(CeamSysRole::getDeleted, GlobalConstants.FALSE);Page<CeamSysRole> page = new Page<>(pageable.getPage(), pageable.getSize());// 手動(dòng)設(shè)置當(dāng)前頁,不然分頁失效page.setCurrent((long)pageable.getPage() + GlobalConstants.ONE);Page<CeamSysRole> ceamSysRolePage = page(page, queryWrapper);IPage<CeaMSysRoleVO> ceaMSysRoleVOIPage = PageVOUtil.copyToPageVO(ceamSysRolePage, CeaMSysRoleVO.class);for (CeaMSysRoleVO role : ceaMSysRoleVOIPage.getRecords()) {List<MenuDTO> menuDTOS = ceamSysMenuService.findByRoleId(role.getId(), GlobalConstants.ZERO);role.setMenus(menuDTOS);}return ceaMSysRoleVOIPage;}@Overridepublic Collection<SimpleGrantedAuthority> grantedAuthorities(Long userId) {List<RoleDTO> roleItemDTOS = this.baseMapper.listByUserId(userId);if (CollectionUtils.isEmpty(roleItemDTOS)) {throw new ServiceException("沒有分配角色");}List<MenuDTO> menuDTOS = ceamSysMenuService.findByRoles(roleItemDTOS, GlobalConstants.ZERO);// 角色Set<String> permissions = roleItemDTOS.stream().filter(role -> StringUtils.isNotBlank(role.getName())).map(RoleDTO::getName).collect(Collectors.toSet());permissions.addAll(menuDTOS.stream().filter(menu -> StringUtils.isNotBlank(menu.getPermission())).map(MenuDTO::getPermission).collect(Collectors.toSet()));return permissions.stream().map(SimpleGrantedAuthority::new).collect(Collectors.toList());}@Overridepublic List<RoleDTO> listByUserId(Long userId) {return this.baseMapper.listByUserId(userId);}@Overridepublic void updateMenu(CeaMSysRoleDTO roleDTO, CeamSysRole role) {if (roleDTO.getMenus().size() > 0) {List<CeamRoleMenu> rolesMenusList = roleDTO.getMenus().stream().map(i -> {CeamRoleMenu rolesMenus = new CeamRoleMenu();rolesMenus.setRoleId(roleDTO.getId());rolesMenus.setMenuId(i.getId());return rolesMenus;}).collect(Collectors.toList());ceamRoleMenuService.remove(new LambdaQueryWrapper<CeamRoleMenu>().eq(CeamRoleMenu::getRoleId, roleDTO.getId()));ceamRoleMenuService.saveBatch(rolesMenusList);}}
}
六、獲取源碼
?大家點(diǎn)贊、收藏、關(guān)注、評(píng)論啦?、關(guān)注下方公眾號(hào)獲取聯(lián)系方式👇🏻👇🏻
🍅免費(fèi)下載🍅商業(yè)使用需授權(quán):點(diǎn)擊這里下載
后期可能會(huì)出uniapp搭建教程,敬請(qǐng)期待!!!