diff --git a/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixAdmin.java b/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixAdmin.java index 2b0bc81..f1f1731 100644 --- a/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixAdmin.java +++ b/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixAdmin.java @@ -10,4 +10,7 @@ public class MatrixAdmin { private Integer id; private String name; private String password; + private String appIds; + private Integer role;//1超级管理员,2管理员,3普通账号 + private String channel;//fanmiyou,qiji } diff --git a/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixApp.java b/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixApp.java index 030f71d..2aa6455 100644 --- a/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixApp.java +++ b/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixApp.java @@ -11,5 +11,5 @@ public class MatrixApp { private String name; private String code; private String url; - private Integer ownerId; + private Integer income; } diff --git a/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixAdminMapper.java b/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixAdminMapper.java index d5405ae..b45bb57 100644 --- a/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixAdminMapper.java +++ b/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixAdminMapper.java @@ -3,8 +3,12 @@ package awesome.group.game.dao.mapper; import awesome.group.game.dao.bean.MatrixAdmin; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; public interface MatrixAdminMapper extends BaseMapper { @Select("select * from matrix_admin where name = #{name}") MatrixAdmin query(String name); + + @Update("update matrix_admin set app_ids = #{appIds} where id = #{id}") + int updateAppIds(String appIds, int id); } diff --git a/game-service/pom.xml b/game-service/pom.xml index b996ebf..f1e5931 100644 --- a/game-service/pom.xml +++ b/game-service/pom.xml @@ -68,7 +68,11 @@ commons-lang - + + com.google.guava + guava + 23.0 + diff --git a/game-service/src/main/java/awesome/group/game/service/AdminService.java b/game-service/src/main/java/awesome/group/game/service/AdminService.java index 5a09ff9..c8e0681 100644 --- a/game-service/src/main/java/awesome/group/game/service/AdminService.java +++ b/game-service/src/main/java/awesome/group/game/service/AdminService.java @@ -7,6 +7,7 @@ import awesome.group.game.dao.mapper.MatrixAdminMapper; import awesome.group.game.dao.mapper.MatrixAdvRecordMapper; import awesome.group.game.dao.mapper.MatrixAppMapper; import awesome.group.game.service.bo.AdvRecordQuery; +import awesome.group.game.service.bo.MatrixAdminBo; import awesome.group.game.service.bo.MatrixAdvRecordBo; import awesome.group.game.service.bo.PageResult; import awesome.group.game.service.common.exception.PaganiException; @@ -21,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import com.google.common.base.Joiner; import java.sql.Timestamp; import java.text.ParseException; @@ -40,7 +42,11 @@ public class AdminService { @Autowired private MatrixAppMapper appMapper; - public MatrixAdmin login(String name, String pwd) { + public static final int SUPER_ADMIN = 1;//超级管理员 + public static final int NORMAL_ADMIN = 2;//普通管理员 + public static final int OTHER = 3;//普通账号 + + public MatrixAdmin login(String name, String pwd, String channel) { MatrixAdmin admin = adminMapper.query(name); if (admin == null) { throw new PaganiException(PaganiExceptionCode.GENERAL_ERROR, "用户名或密码不正确"); @@ -49,6 +55,9 @@ public class AdminService { if (!password.equals(admin.getPassword())) { throw new PaganiException(PaganiExceptionCode.GENERAL_ERROR, "用户名或密码不正确"); } + if (admin.getRole() != SUPER_ADMIN && !admin.getChannel().equalsIgnoreCase(channel)) { + throw new PaganiException(PaganiExceptionCode.GENERAL_ERROR, "用户名或密码不正确"); + } return admin; } @@ -56,7 +65,8 @@ public class AdminService { return adminMapper.selectById(id); } - public PageResult advList(AdvRecordQuery param, int ownerId) { + public PageResult advList(AdvRecordQuery param, Integer ownerId) { + MatrixAdmin admin = adminMapper.selectById(ownerId); List appList = appMapper.selectList(null); LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); @@ -86,8 +96,8 @@ public class AdminService { } wrapper.orderByDesc(MatrixAdvRecord::getId); - if (ownerId != 1) { - List appIds = appList.stream().filter(x -> x.getOwnerId() != null && x.getOwnerId() == ownerId).map(MatrixApp::getId).toList(); + if (admin.getRole() != SUPER_ADMIN) { + List appIds = Arrays.stream(admin.getAppIds().split(",")).map(Integer::parseInt).toList(); if (CollectionUtils.isEmpty(appIds)) { return new PageResult<>(new ArrayList<>(), 0); } @@ -108,11 +118,55 @@ public class AdminService { } public List appList(Integer adminId) { - if (adminId == 1) { + MatrixAdmin admin = adminMapper.selectById(adminId); + if (adminId == SUPER_ADMIN) { return appMapper.selectList(null); } LambdaQueryWrapper query = Wrappers.lambdaQuery(); - query.eq(MatrixApp::getOwnerId, adminId); + query.in(MatrixApp::getId, Arrays.stream(admin.getAppIds().split(",")).map(Integer::parseInt).toList()); return appMapper.selectList(query); } + + public void grantApp(String appIds, int adminId, Integer currentAdminId) { + List legalAppIds = new ArrayList<>(appList(currentAdminId).stream().map(MatrixApp::getId).toList()); + List paramIds = Arrays.stream(appIds.split(",")).map(Integer::parseInt).toList(); + legalAppIds.retainAll(paramIds); + String str = Joiner.on(",").join(legalAppIds); + adminMapper.updateAppIds(str, adminId); + } + + public List adminList(String channel) { + LambdaQueryWrapper query = Wrappers.lambdaQuery(); + query.eq(MatrixAdmin::getChannel, channel); + List res = adminMapper.selectList(query); + + return res.stream().map(MatrixAdminBo::new).toList(); + } + + public void saveAdmin(MatrixAdminBo bo, String channel) { + MatrixAdmin admin = new MatrixAdmin(); + BeanUtils.copyProperties(bo, admin); + if (!CollectionUtils.isEmpty(bo.getAppIds())) { + admin.setAppIds(Joiner.on(",").join(bo.getAppIds())); + } + admin.setChannel(channel); + if (admin.getId() != null) { + if (StringUtils.hasText(admin.getPassword())) { + admin.setPassword(EncryptUtil.sha1(admin.getPassword())); + } else { + MatrixAdmin origin = adminMapper.selectById(admin.getId()); + admin.setPassword(origin.getPassword()); + } + adminMapper.updateById(admin); + } else { + if(adminMapper.query(bo.getName()) != null) { + throw new PaganiException(PaganiExceptionCode.GENERAL_ERROR, "用户名重复"); + } + if (!StringUtils.hasText(bo.getPassword())) { + throw new PaganiException(PaganiExceptionCode.GENERAL_ERROR, "密码不能为空"); + } + admin.setPassword(EncryptUtil.sha1(bo.getPassword())); + adminMapper.insert(admin); + } + } } diff --git a/game-service/src/main/java/awesome/group/game/service/bo/MatrixAdminBo.java b/game-service/src/main/java/awesome/group/game/service/bo/MatrixAdminBo.java new file mode 100644 index 0000000..4df4a08 --- /dev/null +++ b/game-service/src/main/java/awesome/group/game/service/bo/MatrixAdminBo.java @@ -0,0 +1,29 @@ +package awesome.group.game.service.bo; + +import awesome.group.game.dao.bean.MatrixAdmin; +import lombok.Data; +import org.springframework.beans.BeanUtils; +import org.springframework.util.StringUtils; + +import java.util.Arrays; +import java.util.List; + +@Data +public class MatrixAdminBo { + private Integer id; + private String name; + private String password; + private List appIds; + private Integer role;//1超级管理员,2管理员,3普通账号 + + public MatrixAdminBo() { + } + + public MatrixAdminBo(MatrixAdmin admin) { + BeanUtils.copyProperties(admin, this); + this.password = null; + if (StringUtils.hasText(admin.getAppIds())) { + this.appIds = Arrays.stream(admin.getAppIds().split(",")).map(Integer::parseInt).toList(); + } + } +} diff --git a/game-web/src/main/java/awesome/group/RequestContext.java b/game-web/src/main/java/awesome/group/RequestContext.java index 9324439..cecd31d 100644 --- a/game-web/src/main/java/awesome/group/RequestContext.java +++ b/game-web/src/main/java/awesome/group/RequestContext.java @@ -47,6 +47,22 @@ public class RequestContext { return (HttpServletResponse) THREAD_LOCAL.get().get(KEY_RESPONSE); } + public static String getRequestChannel() { + HttpServletRequest request = getRequest(); + String serverName = request.getServerName(); + if (serverName.equalsIgnoreCase("localhost")) { + return "qiji"; + } + int port = request.getServerPort(); + switch (port) { + case 80: + case 443: + return "qiji"; + case 8888: + return "fanmiyou"; + } + return null; + } public static Integer getUid() { if (THREAD_LOCAL.get() == null) { diff --git a/game-web/src/main/java/awesome/group/rest/matrix/AdminController.java b/game-web/src/main/java/awesome/group/rest/matrix/AdminController.java index 12b9a48..6bbdbcb 100644 --- a/game-web/src/main/java/awesome/group/rest/matrix/AdminController.java +++ b/game-web/src/main/java/awesome/group/rest/matrix/AdminController.java @@ -5,7 +5,10 @@ import awesome.group.aop.RestApi; import awesome.group.game.dao.bean.MatrixAdmin; import awesome.group.game.dao.bean.MatrixApp; import awesome.group.game.service.AdminService; -import awesome.group.game.service.bo.*; +import awesome.group.game.service.bo.AdvRecordQuery; +import awesome.group.game.service.bo.MatrixAdminBo; +import awesome.group.game.service.bo.MatrixAdvRecordBo; +import awesome.group.game.service.bo.PageResult; import awesome.group.game.service.common.response.R; import awesome.group.game.service.util.JwtUtils; import io.swagger.v3.oas.annotations.tags.Tag; @@ -26,7 +29,7 @@ public class AdminController { @PostMapping("/login") @RestApi public R adminLogin(@RequestParam String name, @RequestParam String pwd) { - MatrixAdmin data = adminService.login(name, pwd); + MatrixAdmin data = adminService.login(name, pwd, RequestContext.getRequestChannel()); String token = JwtUtils.generatorToken(data.getId() + "", 15 * 86400); Cookie cookie = new Cookie("MatrixToken", token); RequestContext.getResponse().addCookie(cookie); @@ -53,4 +56,24 @@ public class AdminController { List data = adminService.appList(RequestContext.getAdminID()); return new R<>(R.CODE_SUCCESS, "ok", data); } + + @PostMapping("/grantApp") + @RestApi + public R grantApp(@RequestParam String appIds, @RequestParam int adminId) { + adminService.grantApp(appIds, adminId, RequestContext.getAdminID()); + return new R<>(R.CODE_SUCCESS, "ok", null); + } + + @GetMapping("/adminList") + @RestApi + public R> adminList() { + return new R<>(R.CODE_SUCCESS, "ok", adminService.adminList(RequestContext.getRequestChannel())); + } + + @PostMapping("/saveAdmin") + @RestApi + public R saveAdmin(@RequestBody MatrixAdminBo matrixAdmin) { + adminService.saveAdmin(matrixAdmin, RequestContext.getRequestChannel()); + return new R<>(R.CODE_SUCCESS, "ok", null); + } } diff --git a/pom.xml b/pom.xml index 53a2840..1f08d30 100644 --- a/pom.xml +++ b/pom.xml @@ -58,6 +58,16 @@ springdoc-openapi-starter-webmvc-ui 2.2.0 + + com.google.code.gson + gson + 2.8.5 + + + com.google.guava + guava + 23.0 +