From 25a8e4b5b1bf215f7775e116d8e374b7657d7a79 Mon Sep 17 00:00:00 2001 From: ronger Date: Mon, 24 Jan 2022 16:22:23 +0800 Subject: [PATCH 1/7] =?UTF-8?q?:art:=20=E5=88=A0=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E6=95=88=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/api/common/CommonApiController.java | 35 ++++++++----------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/rymcu/forest/web/api/common/CommonApiController.java b/src/main/java/com/rymcu/forest/web/api/common/CommonApiController.java index 6436038..4d1035d 100644 --- a/src/main/java/com/rymcu/forest/web/api/common/CommonApiController.java +++ b/src/main/java/com/rymcu/forest/web/api/common/CommonApiController.java @@ -44,10 +44,10 @@ public class CommonApiController { map.put("message", GlobalResultMessage.SEND_SUCCESS.getMessage()); User user = userService.findByAccount(email); if (user != null) { - map.put("message","该邮箱已被注册!"); + map.put("message", "该邮箱已被注册!"); } else { Integer result = javaMailService.sendEmailCode(email); - if(result == 0){ + if (result == 0) { map.put("message", GlobalResultMessage.SEND_FAIL.getMessage()); } } @@ -61,35 +61,35 @@ public class CommonApiController { User user = userService.findByAccount(email); if (user != null) { Integer result = javaMailService.sendForgetPasswordEmail(email); - if(result == 0){ + if (result == 0) { map.put("message", GlobalResultMessage.SEND_FAIL.getMessage()); } } else { - map.put("message","该邮箱未注册!"); + map.put("message", "该邮箱未注册!"); } return GlobalResultGenerator.genSuccessResult(map); } @PostMapping("/register") - public GlobalResult register(@RequestBody UserRegisterInfoDTO registerInfo){ + public GlobalResult register(@RequestBody UserRegisterInfoDTO registerInfo) { Map map = userService.register(registerInfo.getEmail(), registerInfo.getPassword(), registerInfo.getCode()); return GlobalResultGenerator.genSuccessResult(map); } @PostMapping("/login") - public GlobalResult login(@RequestBody User user){ + public GlobalResult login(@RequestBody User user) { Map map = userService.login(user.getAccount(), user.getPassword()); return GlobalResultGenerator.genSuccessResult(map); } @GetMapping("/heartbeat") - public GlobalResult heartbeat(){ + public GlobalResult heartbeat() { return GlobalResultGenerator.genSuccessResult("heartbeat"); } @GetMapping("/articles") @VisitLogger - public GlobalResult articles(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "10") Integer rows, ArticleSearchDTO searchDTO){ + public GlobalResult articles(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "10") Integer rows, ArticleSearchDTO searchDTO) { PageHelper.startPage(page, rows); List list = articleService.findArticles(searchDTO); PageInfo pageInfo = new PageInfo(list); @@ -98,8 +98,7 @@ public class CommonApiController { } @GetMapping("/announcements") - @VisitLogger - public GlobalResult announcements(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "5") Integer rows){ + public GlobalResult announcements(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "5") Integer rows) { PageHelper.startPage(page, rows); List list = articleService.findAnnouncements(); PageInfo pageInfo = new PageInfo(list); @@ -109,29 +108,23 @@ public class CommonApiController { @GetMapping("/article/{id}") @VisitLogger - public GlobalResult> article(@PathVariable Integer id){ - ArticleDTO articleDTO = articleService.findArticleDTOById(id,1); + public GlobalResult> article(@PathVariable Integer id) { + ArticleDTO articleDTO = articleService.findArticleDTOById(id, 1); Map map = new HashMap<>(1); map.put("article", articleDTO); return GlobalResultGenerator.genSuccessResult(map); } - @GetMapping("/token/{token}") - public GlobalResult token(@PathVariable String token){ - TokenUser tokenUser = UserUtils.getTokenUser(token); - return GlobalResultGenerator.genSuccessResult(tokenUser); - } - @PatchMapping("/forget-password") - public GlobalResult forgetPassword(@RequestBody ForgetPasswordDTO forgetPassword){ + public GlobalResult forgetPassword(@RequestBody ForgetPasswordDTO forgetPassword) { Map map = userService.forgetPassword(forgetPassword.getCode(), forgetPassword.getPassword()); return GlobalResultGenerator.genSuccessResult(map); } @GetMapping("/portfolio/{id}") @VisitLogger - public GlobalResult> portfolio(@PathVariable Integer id){ - PortfolioDTO portfolioDTO = portfolioService.findPortfolioDTOById(id,1); + public GlobalResult> portfolio(@PathVariable Integer id) { + PortfolioDTO portfolioDTO = portfolioService.findPortfolioDTOById(id, 1); Map map = new HashMap<>(1); map.put("portfolio", portfolioDTO); return GlobalResultGenerator.genSuccessResult(map); From 5d221f7f04586f811d7f78d4527b3428b32a982d Mon Sep 17 00:00:00 2001 From: ronger Date: Mon, 24 Jan 2022 21:50:13 +0800 Subject: [PATCH 2/7] =?UTF-8?q?:bug:=20=E6=89=B9=E9=87=8F=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E7=BD=91=E7=BB=9C=E8=B5=84=E6=BA=90=E6=96=87=E4=BB=B6?= =?UTF-8?q?=20md5=20=E5=80=BC=E8=8E=B7=E5=8F=96=E5=BC=82=E5=B8=B8=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/rymcu/forest/web/api/common/UploadController.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/rymcu/forest/web/api/common/UploadController.java b/src/main/java/com/rymcu/forest/web/api/common/UploadController.java index a3ff0a9..788eb28 100644 --- a/src/main/java/com/rymcu/forest/web/api/common/UploadController.java +++ b/src/main/java/com/rymcu/forest/web/api/common/UploadController.java @@ -128,7 +128,7 @@ public class UploadController { data.put("message", "上传失败!"); return GlobalResultGenerator.genSuccessResult(data); } - String md5 = DigestUtils.md5DigestAsHex(multipartFile.getInputStream()); + String md5 = DigestUtils.md5DigestAsHex(multipartFile.getBytes()); String orgName = multipartFile.getOriginalFilename(); String fileType = FileUtils.getExtend(orgName); String fileUrl = forestFileService.getFileUrlByMd5(md5, tokenUser.getIdUser(), fileType); @@ -190,8 +190,8 @@ public class UploadController { continue; } String fileType = FileUtils.getExtend(orgName); - try (InputStream in = multipartFile.getInputStream()) { - String md5 = DigestUtils.md5DigestAsHex(in); + try { + String md5 = DigestUtils.md5DigestAsHex(multipartFile.getBytes()); String fileUrl = forestFileService.getFileUrlByMd5(md5, tokenUser.getIdUser(), fileType); if (StringUtils.isNotEmpty(fileUrl)) { successMap.put(orgName, fileUrl); @@ -281,7 +281,7 @@ public class UploadController { return GlobalResultGenerator.genSuccessResult(data); } // 获取文件md5值 - String md5 = DigestUtils.md5DigestAsHex(inputStream); + String md5 = DigestUtils.md5DigestAsHex(getData); String fileType = "." + MimeTypeUtils.parseMimeType(conn.getContentType()).getSubtype(); String fileUrl = forestFileService.getFileUrlByMd5(md5, tokenUser.getIdUser(), fileType); From 2500be0fc39fc215db7aa11ab17375fb0f570252 Mon Sep 17 00:00:00 2001 From: ronger Date: Thu, 17 Feb 2022 16:46:36 +0800 Subject: [PATCH 3/7] =?UTF-8?q?:bug:=20=E4=BF=AE=E6=94=B9=E6=96=87?= =?UTF-8?q?=E7=AB=A0=E6=A0=87=E7=AD=BE=E6=9D=83=E9=99=90=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/service/security/AuthorshipAspect.java | 12 +++++++++++- src/main/java/com/rymcu/forest/enumerate/Module.java | 3 ++- src/main/java/com/rymcu/forest/util/UserUtils.java | 1 + .../forest/web/api/article/ArticleController.java | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/rymcu/forest/core/service/security/AuthorshipAspect.java b/src/main/java/com/rymcu/forest/core/service/security/AuthorshipAspect.java index b937046..093b48d 100644 --- a/src/main/java/com/rymcu/forest/core/service/security/AuthorshipAspect.java +++ b/src/main/java/com/rymcu/forest/core/service/security/AuthorshipAspect.java @@ -8,6 +8,7 @@ import com.rymcu.forest.entity.Article; import com.rymcu.forest.entity.Portfolio; import com.rymcu.forest.enumerate.Module; import com.rymcu.forest.jwt.def.JwtConstants; +import com.rymcu.forest.mapper.UserMapper; import com.rymcu.forest.service.ArticleService; import com.rymcu.forest.service.PortfolioService; import com.rymcu.forest.util.UserUtils; @@ -52,6 +53,8 @@ public class AuthorshipAspect { private ArticleService articleService; @Resource private PortfolioService portfolioService; + @Resource + private UserMapper userMapper; /** * 检查用户修改信息权限 @@ -119,7 +122,14 @@ public class AuthorshipAspect { TokenUser tokenUser = UserUtils.getTokenUser(authHeader); if (Objects.nonNull(tokenUser)) { if (!idAuthor.equals(tokenUser.getIdUser())) { - throw new BaseApiException(ErrorCode.ACCESS_DENIED); + boolean hasPermission = false; + if (Module.ARTICLE_TAG.equals(log.moduleName())) { + // 判断管理员权限 + hasPermission = userMapper.hasAdminPermission(tokenUser.getAccount()); + } + if (!hasPermission) { + throw new BaseApiException(ErrorCode.ACCESS_DENIED); + } } } else { throw new BaseApiException(ErrorCode.ACCESS_DENIED); diff --git a/src/main/java/com/rymcu/forest/enumerate/Module.java b/src/main/java/com/rymcu/forest/enumerate/Module.java index c25fa6e..2b47a3a 100644 --- a/src/main/java/com/rymcu/forest/enumerate/Module.java +++ b/src/main/java/com/rymcu/forest/enumerate/Module.java @@ -8,5 +8,6 @@ package com.rymcu.forest.enumerate; */ public enum Module { ARTICLE, - PORTFOLIO; + PORTFOLIO, + ARTICLE_TAG; } diff --git a/src/main/java/com/rymcu/forest/util/UserUtils.java b/src/main/java/com/rymcu/forest/util/UserUtils.java index 2343060..c69b70e 100644 --- a/src/main/java/com/rymcu/forest/util/UserUtils.java +++ b/src/main/java/com/rymcu/forest/util/UserUtils.java @@ -69,6 +69,7 @@ public class UserUtils { if (user != null) { TokenUser tokenUser = new TokenUser(); BeanCopierUtil.copy(user, tokenUser); + tokenUser.setAccount(user.getEmail()); tokenUser.setToken(token); tokenUser.setWeights(userMapper.selectRoleWeightsByUser(user.getIdUser())); return tokenUser; diff --git a/src/main/java/com/rymcu/forest/web/api/article/ArticleController.java b/src/main/java/com/rymcu/forest/web/api/article/ArticleController.java index 700cbe8..a21f5e8 100644 --- a/src/main/java/com/rymcu/forest/web/api/article/ArticleController.java +++ b/src/main/java/com/rymcu/forest/web/api/article/ArticleController.java @@ -94,7 +94,7 @@ public class ArticleController { } @PostMapping("/update-tags") - @AuthorshipInterceptor(moduleName = Module.ARTICLE) + @AuthorshipInterceptor(moduleName = Module.ARTICLE_TAG) public GlobalResult updateTags(@RequestBody Article article) throws BaseApiException, UnsupportedEncodingException { Map map = articleService.updateTags(article.getIdArticle(), article.getArticleTags()); return GlobalResultGenerator.genSuccessResult(map); From 8f7ddddc448ed3beca45940b3642cec12f74f7ee Mon Sep 17 00:00:00 2001 From: ronger Date: Sun, 6 Mar 2022 11:09:32 +0800 Subject: [PATCH 4/7] =?UTF-8?q?:arrow=5Fup:=20=E4=BE=9D=E8=B5=96=E5=8D=87?= =?UTF-8?q?=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 36 ++++++++++++------- .../service/impl/WxUserServiceImpl.java | 7 ---- .../wx/miniapp/config/WxMaConfiguration.java | 2 +- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/pom.xml b/pom.xml index 2d18bc8..8d90720 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ 1.8 - 8.0.0 + 8.11.1 @@ -43,7 +43,7 @@ org.mybatis.spring.boot mybatis-spring-boot-starter - 2.2.0 + 2.2.2 @@ -101,7 +101,7 @@ com.alibaba fastjson - 1.2.78 + 1.2.79 @@ -130,17 +130,17 @@ commons-io commons-io - 2.7 + 2.11.0 org.apache.commons commons-text - 1.8 + 1.9 commons-codec commons-codec - 1.14 + 1.15 io.jsonwebtoken @@ -197,12 +197,12 @@ org.jodd jodd-http - 6.0.6 + 6.2.0 com.github.binarywang weixin-java-open - 4.0.0 + 4.2.5.B commons-codec @@ -221,7 +221,7 @@ com.thoughtworks.xstream xstream - 1.4.18 + 1.4.19 com.github.jedis-lock @@ -231,7 +231,7 @@ com.baidu.aip java-sdk - 4.16.2 + 4.16.5 org.slf4j @@ -273,12 +273,24 @@ cn.hutool hutool-core - 5.5.9 + 5.7.20 cn.hutool hutool-http - 5.5.9 + 5.7.20 + + + + com.warrenstrange + googleauth + 1.5.0 + + + commons-codec + commons-codec + + diff --git a/src/main/java/com/rymcu/forest/service/impl/WxUserServiceImpl.java b/src/main/java/com/rymcu/forest/service/impl/WxUserServiceImpl.java index 9a6c89a..f67d7d5 100644 --- a/src/main/java/com/rymcu/forest/service/impl/WxUserServiceImpl.java +++ b/src/main/java/com/rymcu/forest/service/impl/WxUserServiceImpl.java @@ -45,18 +45,11 @@ public class WxUserServiceImpl extends AbstractService implements WxUser } private WxUser copyWxUser(WxMpUser wxMpUser, WxUser wxUser) { - wxUser.setNickname(wxMpUser.getNickname()); - wxUser.setHeadImgUrl(wxMpUser.getHeadImgUrl()); - wxUser.setCountry(wxMpUser.getCountry()); - wxUser.setProvince(wxMpUser.getProvince()); - wxUser.setCity(wxMpUser.getCity()); - wxUser.setSex(wxMpUser.getSex()); wxUser.setSubscribe(wxMpUser.getSubscribe()); wxUser.setSubscribeTime(wxMpUser.getSubscribeTime()); wxUser.setUnionId(wxMpUser.getUnionId()); wxUser.setOpenId(wxMpUser.getOpenId()); wxUser.setLanguage(wxMpUser.getLanguage()); - wxUser.setSexDesc(wxMpUser.getSexDesc()); return wxUser; } } diff --git a/src/main/java/com/rymcu/forest/wx/miniapp/config/WxMaConfiguration.java b/src/main/java/com/rymcu/forest/wx/miniapp/config/WxMaConfiguration.java index 73f28e6..2c4ddd0 100644 --- a/src/main/java/com/rymcu/forest/wx/miniapp/config/WxMaConfiguration.java +++ b/src/main/java/com/rymcu/forest/wx/miniapp/config/WxMaConfiguration.java @@ -92,7 +92,7 @@ public class WxMaConfiguration { service.getMsgService().sendSubscribeMsg(WxMaSubscribeMessage.builder() .templateId("此处更换为自己的模板id") .data(Lists.newArrayList( - new WxMaSubscribeMessage.Data("keyword1", "339208499"))) + new WxMaSubscribeMessage.MsgData("keyword1", "339208499"))) .toUser(wxMessage.getFromUser()) .build()); return null; From 28641bb94219076d93d9ea6d10b02ecec027a14d Mon Sep 17 00:00:00 2001 From: ronger Date: Sun, 13 Mar 2022 23:18:01 +0800 Subject: [PATCH 5/7] =?UTF-8?q?:sparkles:=20=E4=BB=AA=E8=A1=A8=E7=9B=98?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E6=96=B0=E5=A2=9E=E6=96=87=E7=AB=A0/?= =?UTF-8?q?=E7=94=A8=E6=88=B7/=E9=93=B6=E8=A1=8C=E8=B4=A6=E6=88=B7?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BF=A1=E6=81=AF=E5=88=97=E8=A1=A8=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../forest/enumerate/TransactionEnum.java | 3 +- .../rymcu/forest/mapper/DashboardMapper.java | 25 +++- .../mapper/TransactionRecordMapper.java | 7 + .../forest/service/DashboardService.java | 21 +++ .../service/TransactionRecordService.java | 8 ++ .../service/impl/DashboardServiceImpl.java | 30 ++++- .../impl/TransactionRecordServiceImpl.java | 14 ++ .../web/api/admin/DashboardController.java | 48 +++++++ .../api/bank/TransactionRecordController.java | 6 + src/main/java/mapper/DashboardMapper.xml | 123 +++++++++++++++--- .../java/mapper/TransactionRecordMapper.xml | 27 +++- 11 files changed, 284 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/rymcu/forest/enumerate/TransactionEnum.java b/src/main/java/com/rymcu/forest/enumerate/TransactionEnum.java index fcfe846..6b6c8de 100644 --- a/src/main/java/com/rymcu/forest/enumerate/TransactionEnum.java +++ b/src/main/java/com/rymcu/forest/enumerate/TransactionEnum.java @@ -9,7 +9,8 @@ import java.util.Arrays; public enum TransactionEnum { ArticleSponsor("0", 20, "文章赞赏"), Answer("1", 30, "答题奖励"), - CorrectAnswer("2", 50, "答题奖励"); + CorrectAnswer("2", 50, "答题奖励"), + NewbieRewards("3", 200, "新手奖励"); private String dataType; diff --git a/src/main/java/com/rymcu/forest/mapper/DashboardMapper.java b/src/main/java/com/rymcu/forest/mapper/DashboardMapper.java index ce2a08e..40550d7 100644 --- a/src/main/java/com/rymcu/forest/mapper/DashboardMapper.java +++ b/src/main/java/com/rymcu/forest/mapper/DashboardMapper.java @@ -1,5 +1,8 @@ package com.rymcu.forest.mapper; +import com.rymcu.forest.dto.ArticleDTO; +import com.rymcu.forest.dto.BankAccountDTO; +import com.rymcu.forest.dto.UserInfoDTO; import com.rymcu.forest.dto.admin.DashboardData; import java.util.List; @@ -63,18 +66,38 @@ public interface DashboardMapper { List selectLastThirtyDaysVisitData(); /** - * + * 获取历史 1 年文章数据 * @return */ List selectHistoryArticleData(); /** + * 获取历史 1 年用户数据 * @return */ List selectHistoryUserData(); /** + * 获取历史 1 年访问数据 * @return */ List selectHistoryVisitData(); + + /** + * 获取新增用户列表 + * @return + */ + List selectNewUsers(); + + /** + * 获取新增银行账号列表 + * @return + */ + List selectNewBankAccounts(); + + /** + * 获取新增文章列表 + * @return + */ + List selectNewArticles(); } diff --git a/src/main/java/com/rymcu/forest/mapper/TransactionRecordMapper.java b/src/main/java/com/rymcu/forest/mapper/TransactionRecordMapper.java index 065efe7..f35350f 100644 --- a/src/main/java/com/rymcu/forest/mapper/TransactionRecordMapper.java +++ b/src/main/java/com/rymcu/forest/mapper/TransactionRecordMapper.java @@ -37,4 +37,11 @@ public interface TransactionRecordMapper extends Mapper { * @return */ Boolean existsWithBankAccountAndFunds(@Param("bankAccount") String bankAccount, @Param("funds") String funds); + + /** + * 查询是否已发放 + * @param bankAccount + * @return + */ + Boolean existsWithNewbieRewards(@Param("bankAccount") String bankAccount); } diff --git a/src/main/java/com/rymcu/forest/service/DashboardService.java b/src/main/java/com/rymcu/forest/service/DashboardService.java index 2a1639a..f65670f 100644 --- a/src/main/java/com/rymcu/forest/service/DashboardService.java +++ b/src/main/java/com/rymcu/forest/service/DashboardService.java @@ -1,7 +1,11 @@ package com.rymcu.forest.service; +import com.rymcu.forest.dto.ArticleDTO; +import com.rymcu.forest.dto.BankAccountDTO; +import com.rymcu.forest.dto.UserInfoDTO; import com.rymcu.forest.dto.admin.Dashboard; +import java.util.List; import java.util.Map; /** @@ -26,4 +30,21 @@ public interface DashboardService { * @return */ Map history(); + + /** + * 获取新增用户列表 + * @return + */ + List newUsers(); + + /**获取新增银行账号列表 + * @return + */ + List newBankAccounts(); + + /** + * 获取新增文章列表 + * @return + */ + List newArticles(); } diff --git a/src/main/java/com/rymcu/forest/service/TransactionRecordService.java b/src/main/java/com/rymcu/forest/service/TransactionRecordService.java index 28e406a..e5da803 100644 --- a/src/main/java/com/rymcu/forest/service/TransactionRecordService.java +++ b/src/main/java/com/rymcu/forest/service/TransactionRecordService.java @@ -46,4 +46,12 @@ public interface TransactionRecordService extends Service { * @throws Exception */ TransactionRecord bankTransfer(Integer idUser, TransactionEnum transactionType) throws Exception; + + /** + * 发放新手奖励 + * @param transactionRecord + * @return + * @throws Exception + */ + TransactionRecord newbieRewards(TransactionRecord transactionRecord) throws Exception; } diff --git a/src/main/java/com/rymcu/forest/service/impl/DashboardServiceImpl.java b/src/main/java/com/rymcu/forest/service/impl/DashboardServiceImpl.java index dd02b84..293e085 100644 --- a/src/main/java/com/rymcu/forest/service/impl/DashboardServiceImpl.java +++ b/src/main/java/com/rymcu/forest/service/impl/DashboardServiceImpl.java @@ -1,7 +1,12 @@ package com.rymcu.forest.service.impl; +import com.rymcu.forest.dto.ArticleDTO; +import com.rymcu.forest.dto.ArticleTagDTO; +import com.rymcu.forest.dto.BankAccountDTO; +import com.rymcu.forest.dto.UserInfoDTO; import com.rymcu.forest.dto.admin.Dashboard; import com.rymcu.forest.dto.admin.DashboardData; +import com.rymcu.forest.mapper.ArticleMapper; import com.rymcu.forest.mapper.DashboardMapper; import com.rymcu.forest.service.DashboardService; import org.springframework.stereotype.Service; @@ -18,6 +23,8 @@ public class DashboardServiceImpl implements DashboardService { @Resource private DashboardMapper dashboardMapper; + @Resource + private ArticleMapper articleMapper; @Override public Dashboard dashboard() { @@ -46,7 +53,6 @@ public class DashboardServiceImpl implements DashboardService { while (now.isAfter(localDate)) { String date = localDate.toString(); dates.add(date); - articles.forEach(article->{ if (date.equals(article.getLabel())) { articleData.add(article.getValue()); @@ -88,7 +94,7 @@ public class DashboardServiceImpl implements DashboardService { @Override public Map history() { - Map map = new HashMap(4); + Map map = new HashMap(4); ArrayList dates = new ArrayList(30); ArrayList articleData = new ArrayList(30); ArrayList userData = new ArrayList(30); @@ -177,4 +183,24 @@ public class DashboardServiceImpl implements DashboardService { map.put("visits", visitData); return map; } + + @Override + public List newUsers() { + return dashboardMapper.selectNewUsers(); + } + + @Override + public List newBankAccounts() { + return dashboardMapper.selectNewBankAccounts(); + } + + @Override + public List newArticles() { + List list = dashboardMapper.selectNewArticles(); + list.forEach(article -> { + List tags = articleMapper.selectTags(article.getIdArticle()); + article.setTags(tags); + }); + return list; + } } diff --git a/src/main/java/com/rymcu/forest/service/impl/TransactionRecordServiceImpl.java b/src/main/java/com/rymcu/forest/service/impl/TransactionRecordServiceImpl.java index 7298956..af8856f 100644 --- a/src/main/java/com/rymcu/forest/service/impl/TransactionRecordServiceImpl.java +++ b/src/main/java/com/rymcu/forest/service/impl/TransactionRecordServiceImpl.java @@ -106,6 +106,20 @@ public class TransactionRecordServiceImpl extends AbstractService list = dashboardService.newUsers(); + PageInfo pageInfo = new PageInfo<>(list); + Map map = new HashMap(2); + map.put("users", pageInfo.getList()); + Map pagination = Utils.getPagination(pageInfo); + map.put("pagination", pagination); + return GlobalResultGenerator.genSuccessResult(map); + } + + @GetMapping("/new-bank-accounts") + public GlobalResult newBankAccounts(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "10") Integer rows) { + PageHelper.startPage(page, rows); + List list = dashboardService.newBankAccounts(); + PageInfo pageInfo = new PageInfo(list); + Map map = new HashMap(2); + map.put("bankAccounts", pageInfo.getList()); + Map pagination = new HashMap(4); + pagination.put("pageSize", pageInfo.getPageSize()); + pagination.put("total", pageInfo.getTotal()); + pagination.put("currentPage", pageInfo.getPageNum()); + map.put("pagination", pagination); + return GlobalResultGenerator.genSuccessResult(map); + } + + @GetMapping("/new-articles") + public GlobalResult newArticles(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "10") Integer rows) { + PageHelper.startPage(page, rows); + List list = dashboardService.newArticles(); + PageInfo pageInfo = new PageInfo<>(list); + Map map = new HashMap<>(2); + map.put("articles", pageInfo.getList()); + Map pagination = Utils.getPagination(pageInfo); + map.put("pagination", pagination); + return GlobalResultGenerator.genSuccessResult(map); + } } diff --git a/src/main/java/com/rymcu/forest/web/api/bank/TransactionRecordController.java b/src/main/java/com/rymcu/forest/web/api/bank/TransactionRecordController.java index 2cc999b..c3a230a 100644 --- a/src/main/java/com/rymcu/forest/web/api/bank/TransactionRecordController.java +++ b/src/main/java/com/rymcu/forest/web/api/bank/TransactionRecordController.java @@ -27,4 +27,10 @@ public class TransactionRecordController { return GlobalResultGenerator.genSuccessResult(transactionRecord); } + @PostMapping("/newbie-rewards") + public GlobalResult newbieRewards(@RequestBody TransactionRecord transactionRecord) throws Exception { + transactionRecord = transactionRecordService.newbieRewards(transactionRecord); + return GlobalResultGenerator.genSuccessResult(transactionRecord); + } + } diff --git a/src/main/java/mapper/DashboardMapper.xml b/src/main/java/mapper/DashboardMapper.xml index 0be4881..e0da515 100644 --- a/src/main/java/mapper/DashboardMapper.xml +++ b/src/main/java/mapper/DashboardMapper.xml @@ -5,46 +5,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/mapper/TransactionRecordMapper.xml b/src/main/java/mapper/TransactionRecordMapper.xml index f0dd586..7a6b022 100644 --- a/src/main/java/mapper/TransactionRecordMapper.xml +++ b/src/main/java/mapper/TransactionRecordMapper.xml @@ -12,17 +12,32 @@ - update forest_bank_account set account_balance = account_balance - #{money} where bank_account = #{formBankAccount}; - update forest_bank_account set account_balance = account_balance + #{money} where bank_account = #{toBankAccount}; + update forest_bank_account + set account_balance = account_balance - #{money} + where bank_account = #{formBankAccount}; + update forest_bank_account + set account_balance = account_balance + #{money} + where bank_account = #{toBankAccount}; + \ No newline at end of file From 38f211480af6f76b35889947c63c0eb291e4eb49 Mon Sep 17 00:00:00 2001 From: ronger Date: Mon, 14 Mar 2022 13:48:41 +0800 Subject: [PATCH 6/7] =?UTF-8?q?:sparkles:=20=E4=BB=AA=E8=A1=A8=E7=9B=98-?= =?UTF-8?q?=E8=AE=BF=E5=AE=A2=E6=95=B0=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rymcu/forest/mapper/DashboardMapper.java | 16 ++++- .../service/impl/DashboardServiceImpl.java | 60 +++++++++++++++---- src/main/java/mapper/DashboardMapper.xml | 28 ++++++++- 3 files changed, 87 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/rymcu/forest/mapper/DashboardMapper.java b/src/main/java/com/rymcu/forest/mapper/DashboardMapper.java index 40550d7..73f1cbf 100644 --- a/src/main/java/com/rymcu/forest/mapper/DashboardMapper.java +++ b/src/main/java/com/rymcu/forest/mapper/DashboardMapper.java @@ -54,13 +54,13 @@ public interface DashboardMapper { List selectLastThirtyDaysArticleData(); /** - * 获取最近 30 天文章数据 + * 获取最近 30 天用户数据 * @return */ List selectLastThirtyDaysUserData(); /** - * 获取最近 30 天文章数据 + * 获取最近 30 天流量数据 * @return */ List selectLastThirtyDaysVisitData(); @@ -100,4 +100,16 @@ public interface DashboardMapper { * @return */ List selectNewArticles(); + + /** + * 获取最近 30 天访客数据 + * @return + */ + List selectLastThirtyDaysVisitIpData(); + + /** + * 获取历史 1 年访客数据 + * @return + */ + List selectHistoryVisitIpData(); } diff --git a/src/main/java/com/rymcu/forest/service/impl/DashboardServiceImpl.java b/src/main/java/com/rymcu/forest/service/impl/DashboardServiceImpl.java index 293e085..8c6bf0c 100644 --- a/src/main/java/com/rymcu/forest/service/impl/DashboardServiceImpl.java +++ b/src/main/java/com/rymcu/forest/service/impl/DashboardServiceImpl.java @@ -40,20 +40,22 @@ public class DashboardServiceImpl implements DashboardService { @Override public Map lastThirtyDaysData() { - Map map = new HashMap(4); + Map map = new HashMap(5); ArrayList dates = new ArrayList(30); ArrayList articleData = new ArrayList(30); ArrayList userData = new ArrayList(30); ArrayList visitData = new ArrayList(30); + ArrayList visitIpData = new ArrayList(30); List articles = dashboardMapper.selectLastThirtyDaysArticleData(); List users = dashboardMapper.selectLastThirtyDaysUserData(); List visits = dashboardMapper.selectLastThirtyDaysVisitData(); + List visitIps = dashboardMapper.selectLastThirtyDaysVisitIpData(); LocalDate now = LocalDate.now().plusDays(1); LocalDate localDate = LocalDate.now().plusDays(-29); while (now.isAfter(localDate)) { String date = localDate.toString(); dates.add(date); - articles.forEach(article->{ + articles.forEach(article -> { if (date.equals(article.getLabel())) { articleData.add(article.getValue()); return; @@ -63,7 +65,7 @@ public class DashboardServiceImpl implements DashboardService { articleData.add(0); } - users.forEach(user->{ + users.forEach(user -> { if (date.equals(user.getLabel())) { userData.add(user.getValue()); return; @@ -73,7 +75,7 @@ public class DashboardServiceImpl implements DashboardService { userData.add(0); } - visits.forEach(visit->{ + visits.forEach(visit -> { if (date.equals(visit.getLabel())) { visitData.add(visit.getValue()); return; @@ -83,34 +85,47 @@ public class DashboardServiceImpl implements DashboardService { visitData.add(0); } + visitIps.forEach(visitIp -> { + if (date.equals(visitIp.getLabel())) { + visitIpData.add(visitIp.getValue()); + return; + } + }); + if (visitIpData.size() < dates.size()) { + visitIpData.add(0); + } + localDate = localDate.plusDays(1); } map.put("dates", dates); map.put("articles", articleData); map.put("users", userData); map.put("visits", visitData); + map.put("visitIps", visitIpData); return map; } @Override public Map history() { - Map map = new HashMap(4); + Map map = new HashMap(5); ArrayList dates = new ArrayList(30); ArrayList articleData = new ArrayList(30); ArrayList userData = new ArrayList(30); ArrayList visitData = new ArrayList(30); + ArrayList visitIpData = new ArrayList(30); List articles = dashboardMapper.selectHistoryArticleData(); List users = dashboardMapper.selectHistoryUserData(); List visits = dashboardMapper.selectHistoryVisitData(); + List visitIps = dashboardMapper.selectHistoryVisitIpData(); LocalDate now = LocalDate.now().plusMonths(1); LocalDate localDate = LocalDate.now().plusYears(-1).plusMonths(1); while (now.getYear() >= localDate.getYear()) { if (now.getYear() == localDate.getYear()) { - if (now.getMonthValue() > localDate.getMonthValue()){ + if (now.getMonthValue() > localDate.getMonthValue()) { String date = localDate.getYear() + "-" + (localDate.getMonthValue() < 10 ? "0" + localDate.getMonthValue() : localDate.getMonthValue()); dates.add(date); - articles.forEach(article->{ + articles.forEach(article -> { if (date.equals(article.getLabel())) { articleData.add(article.getValue()); return; @@ -120,7 +135,7 @@ public class DashboardServiceImpl implements DashboardService { articleData.add(0); } - users.forEach(user->{ + users.forEach(user -> { if (date.equals(user.getLabel())) { userData.add(user.getValue()); return; @@ -130,7 +145,7 @@ public class DashboardServiceImpl implements DashboardService { userData.add(0); } - visits.forEach(visit->{ + visits.forEach(visit -> { if (date.equals(visit.getLabel())) { visitData.add(visit.getValue()); return; @@ -139,12 +154,22 @@ public class DashboardServiceImpl implements DashboardService { if (visitData.size() < dates.size()) { visitData.add(0); } + + visitIps.forEach(visitIp -> { + if (date.equals(visitIp.getLabel())) { + visitIpData.add(visitIp.getValue()); + return; + } + }); + if (visitIpData.size() < dates.size()) { + visitIpData.add(0); + } } } else { String date = localDate.getYear() + "-" + (localDate.getMonthValue() < 10 ? "0" + localDate.getMonthValue() : localDate.getMonthValue()); dates.add(date); - articles.forEach(article->{ + articles.forEach(article -> { if (date.equals(article.getLabel())) { articleData.add(article.getValue()); return; @@ -154,7 +179,7 @@ public class DashboardServiceImpl implements DashboardService { articleData.add(0); } - users.forEach(user->{ + users.forEach(user -> { if (date.equals(user.getLabel())) { userData.add(user.getValue()); return; @@ -164,7 +189,7 @@ public class DashboardServiceImpl implements DashboardService { userData.add(0); } - visits.forEach(visit->{ + visits.forEach(visit -> { if (date.equals(visit.getLabel())) { visitData.add(visit.getValue()); return; @@ -173,6 +198,16 @@ public class DashboardServiceImpl implements DashboardService { if (visitData.size() < dates.size()) { visitData.add(0); } + + visitIps.forEach(visitIp -> { + if (date.equals(visitIp.getLabel())) { + visitIpData.add(visitIp.getValue()); + return; + } + }); + if (visitIpData.size() < dates.size()) { + visitIpData.add(0); + } } localDate = localDate.plusMonths(1); @@ -181,6 +216,7 @@ public class DashboardServiceImpl implements DashboardService { map.put("articles", articleData); map.put("users", userData); map.put("visits", visitData); + map.put("visitIps", visitIpData); return map; } diff --git a/src/main/java/mapper/DashboardMapper.xml b/src/main/java/mapper/DashboardMapper.xml index e0da515..8ce6df1 100644 --- a/src/main/java/mapper/DashboardMapper.xml +++ b/src/main/java/mapper/DashboardMapper.xml @@ -109,7 +109,7 @@ + + \ No newline at end of file From 9019e515d3c0e501e1b1e231c9458512c661de47 Mon Sep 17 00:00:00 2001 From: ronger Date: Mon, 14 Mar 2022 14:53:34 +0800 Subject: [PATCH 7/7] =?UTF-8?q?:sparkles:=20=E5=BC=80=E6=94=BE=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rymcu/forest/config/WebMvcConfigurer.java | 2 +- .../rymcu/forest/service/OpenDataService.java | 26 +++++++ .../service/impl/OpenDataServiceImpl.java | 78 +++++++++++++++++++ .../web/api/open/OpenDataController.java | 40 ++++++++++ 4 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/rymcu/forest/service/OpenDataService.java create mode 100644 src/main/java/com/rymcu/forest/service/impl/OpenDataServiceImpl.java create mode 100644 src/main/java/com/rymcu/forest/web/api/open/OpenDataController.java diff --git a/src/main/java/com/rymcu/forest/config/WebMvcConfigurer.java b/src/main/java/com/rymcu/forest/config/WebMvcConfigurer.java index f41fa32..7ce6c50 100644 --- a/src/main/java/com/rymcu/forest/config/WebMvcConfigurer.java +++ b/src/main/java/com/rymcu/forest/config/WebMvcConfigurer.java @@ -71,7 +71,7 @@ public class WebMvcConfigurer extends WebMvcConfigurationSupport { public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(restAuthTokenInterceptor()).addPathPatterns("/api/**") .excludePathPatterns("/api/v1/console/**", "/api/v1/article/articles/**", "/api/v1/article/detail/**" - , "/api/v1/topic/**", "/api/v1/user/**", "/api/v1/article/*/comments", "/api/v1/rule/currency/**", "/api/v1/lucene/**"); + , "/api/v1/topic/**", "/api/v1/user/**", "/api/v1/article/*/comments", "/api/v1/rule/currency/**", "/api/v1/lucene/**", "/api/v1/open-data/**"); } diff --git a/src/main/java/com/rymcu/forest/service/OpenDataService.java b/src/main/java/com/rymcu/forest/service/OpenDataService.java new file mode 100644 index 0000000..d4023e5 --- /dev/null +++ b/src/main/java/com/rymcu/forest/service/OpenDataService.java @@ -0,0 +1,26 @@ +package com.rymcu.forest.service; + +import com.rymcu.forest.dto.admin.Dashboard; + +import java.util.Map; + +/** + * Created on 2022/3/14 13:51. + * + * @author ronger + * @email ronger-x@outlook.com + * @packageName com.rymcu.forest.service + */ +public interface OpenDataService { + /** + * 获取最近 30 天开放数据 + * @return + */ + Map lastThirtyDaysData(); + + /** + * 获取统计数据 + * @return + */ + Dashboard dashboard(); +} diff --git a/src/main/java/com/rymcu/forest/service/impl/OpenDataServiceImpl.java b/src/main/java/com/rymcu/forest/service/impl/OpenDataServiceImpl.java new file mode 100644 index 0000000..29cd7e3 --- /dev/null +++ b/src/main/java/com/rymcu/forest/service/impl/OpenDataServiceImpl.java @@ -0,0 +1,78 @@ +package com.rymcu.forest.service.impl; + +import com.rymcu.forest.dto.admin.Dashboard; +import com.rymcu.forest.dto.admin.DashboardData; +import com.rymcu.forest.mapper.DashboardMapper; +import com.rymcu.forest.service.OpenDataService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created on 2022/3/14 13:51. + * + * @author ronger + * @email ronger-x@outlook.com + * @packageName com.rymcu.forest.service.impl + */ +@Service +public class OpenDataServiceImpl implements OpenDataService { + + @Resource + private DashboardMapper dashboardMapper; + + @Override + public Map lastThirtyDaysData() { + Map map = new HashMap(5); + ArrayList dates = new ArrayList(30); + ArrayList visitData = new ArrayList(30); + ArrayList visitIpData = new ArrayList(30); + List visits = dashboardMapper.selectLastThirtyDaysVisitData(); + List visitIps = dashboardMapper.selectLastThirtyDaysVisitIpData(); + LocalDate now = LocalDate.now().plusDays(1); + LocalDate localDate = LocalDate.now().plusDays(-29); + while (now.isAfter(localDate)) { + String date = localDate.toString(); + dates.add(date); + + visits.forEach(visit -> { + if (date.equals(visit.getLabel())) { + visitData.add(visit.getValue()); + return; + } + }); + if (visitData.size() < dates.size()) { + visitData.add(0); + } + + visitIps.forEach(visitIp -> { + if (date.equals(visitIp.getLabel())) { + visitIpData.add(visitIp.getValue()); + return; + } + }); + if (visitIpData.size() < dates.size()) { + visitIpData.add(0); + } + + localDate = localDate.plusDays(1); + } + map.put("dates", dates); + map.put("visits", visitData); + map.put("visitIps", visitIpData); + return map; + } + + @Override + public Dashboard dashboard() { + Dashboard dashboard = new Dashboard(); + dashboard.setCountUserNum(dashboardMapper.selectUserCount()); + dashboard.setCountArticleNum(dashboardMapper.selectArticleCount()); + return dashboard; + } +} diff --git a/src/main/java/com/rymcu/forest/web/api/open/OpenDataController.java b/src/main/java/com/rymcu/forest/web/api/open/OpenDataController.java new file mode 100644 index 0000000..b52fb74 --- /dev/null +++ b/src/main/java/com/rymcu/forest/web/api/open/OpenDataController.java @@ -0,0 +1,40 @@ +package com.rymcu.forest.web.api.open; + +import com.rymcu.forest.core.result.GlobalResult; +import com.rymcu.forest.core.result.GlobalResultGenerator; +import com.rymcu.forest.dto.admin.Dashboard; +import com.rymcu.forest.service.OpenDataService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.Map; + +/** + * Created on 2022/3/14 13:49. + * + * @author ronger + * @email ronger-x@outlook.com + * @packageName com.rymcu.forest.web.api.open + */ +@RestController +@RequestMapping("/api/v1/open-data") +public class OpenDataController { + + @Resource + private OpenDataService openDataService; + + @GetMapping("/dashboard") + public GlobalResult dashboard() { + Dashboard dashboard = openDataService.dashboard(); + return GlobalResultGenerator.genSuccessResult(dashboard); + } + + @GetMapping("/last-thirty-days") + public GlobalResult LastThirtyDaysData() { + Map map = openDataService.lastThirtyDaysData(); + return GlobalResultGenerator.genSuccessResult(map); + } + +}