From 6c82b0f944a0d3547659db5ec1f640a9ec7d3fd3 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Wed, 15 Jun 2022 11:08:52 +0800 Subject: [PATCH] 20220606 --- src/main/java/com/xcong/farmer/cms/modules/system/util/CaptchaUtil.java | 38 +++ src/main/java/com/xcong/farmer/cms/modules/system/util/UUIDUtil.java | 11 + src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java | 19 + src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddMessageDto.java | 35 +++ pom.xml | 7 src/main/java/com/xcong/farmer/cms/modules/system/entity/ValidateCodeProperties.java | 35 +++ src/main/resources/mapper/UserMapper.xml | 4 src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java | 55 +++++ src/main/java/com/xcong/farmer/cms/configurations/security/WebSecurityConfig.java | 2 src/main/resources/mapper/NavigationBarMapper.xml | 4 src/main/java/com/xcong/farmer/cms/modules/system/entity/MessageBoardEntity.java | 34 +++ src/main/resources/mapper/RoleMapper.xml | 4 src/main/java/com/xcong/farmer/cms/modules/system/service/ICommonService.java | 7 src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/MessageBoardServiceImpl.java | 98 +++++++++ src/main/resources/mapper/ArticleMapper.xml | 4 src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminMessageBoardVo.java | 32 +++ src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminCommonController.java | 9 src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminMessageBoardController.java | 49 ++++ src/main/resources/mapper/ColumnMapper.xml | 4 src/main/java/com/xcong/farmer/cms/modules/system/config/KaptchaConfig.java | 46 ++++ src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminLoginDto.java | 7 src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminMessageBoardDto.java | 19 + src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ArticleServiceImpl.java | 5 src/main/java/com/xcong/farmer/cms/modules/system/mapper/MessageBoardMapper.java | 13 + src/main/resources/application.yml | 2 src/main/java/com/xcong/farmer/cms/modules/system/service/IMessageBoardService.java | 19 + src/main/resources/mapper/MessageBoardMapper.xml | 25 ++ 27 files changed, 565 insertions(+), 22 deletions(-) diff --git a/pom.xml b/pom.xml index e228198..e99d630 100644 --- a/pom.xml +++ b/pom.xml @@ -30,6 +30,13 @@ </properties> <dependencies> + + <dependency> + <groupId>com.github.penggle</groupId> + <artifactId>kaptcha</artifactId> + <version>2.3.2</version> + </dependency> + <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> diff --git a/src/main/java/com/xcong/farmer/cms/configurations/security/WebSecurityConfig.java b/src/main/java/com/xcong/farmer/cms/configurations/security/WebSecurityConfig.java index 9456823..82bc12a 100644 --- a/src/main/java/com/xcong/farmer/cms/configurations/security/WebSecurityConfig.java +++ b/src/main/java/com/xcong/farmer/cms/configurations/security/WebSecurityConfig.java @@ -43,8 +43,10 @@ .antMatchers("/webjars/**").permitAll() .antMatchers("/v2/**").permitAll() .antMatchers("/api/common/login").permitAll() + .antMatchers("/api/common/captcha").permitAll() .antMatchers("/api/common/doUpload").permitAll() .antMatchers("/api/common/uploadFile").permitAll() + .antMatchers("/api/messageBoard/addMessage").permitAll() .antMatchers("/image/**").permitAll() .anyRequest().authenticated() .and().apply(securityConfiguereAdapter()); diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/config/KaptchaConfig.java b/src/main/java/com/xcong/farmer/cms/modules/system/config/KaptchaConfig.java new file mode 100644 index 0000000..2018344 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/config/KaptchaConfig.java @@ -0,0 +1,46 @@ +package com.xcong.farmer.cms.modules.system.config; + +import com.google.code.kaptcha.impl.DefaultKaptcha; +import com.google.code.kaptcha.util.Config; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import java.util.Properties; + +@Configuration +public class KaptchaConfig { + @Bean + public DefaultKaptcha producer() { + //Properties类 + Properties properties = new Properties(); + // 图片边框 + properties.setProperty("kaptcha.border", "no"); + // 边框颜色 +// properties.setProperty("kaptcha.border.color", "105,179,90"); + // 字体颜色 + properties.setProperty("kaptcha.textproducer.font.color", "black"); + // 图片宽 + properties.setProperty("kaptcha.image.width", "160"); + // 图片高 + properties.setProperty("kaptcha.image.height", "58"); + // 文字间隔 + properties.setProperty("kaptcha.textproducer.font.space", "5"); + // 字体大小 + properties.setProperty("kaptcha.textproducer.font.size", "38"); + // session key + properties.setProperty("kaptcha.session.key", "code"); + // 验证码长度 + properties.setProperty("kaptcha.textproducer.char.length", "4"); + // 字体 + properties.setProperty("kaptcha.textproducer.font.names", "Arial, Courier"); + //图片干扰 +// properties.setProperty("kaptcha.noise.impl","com.google.code.kaptcha.impl.DefaultNoise"); + //去除Kaptcha方法得到验证码的干扰线 + properties.setProperty("kaptcha.noise.impl","com.google.code.kaptcha.impl.NoNoise"); + //Kaptcha 使用上述配置 + Config config = new Config(properties); + //DefaultKaptcha对象使用上述配置, 并返回这个Bean + DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); + defaultKaptcha.setConfig(config); + return defaultKaptcha; + } +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminCommonController.java b/src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminCommonController.java index 9b7517a..eed8bdb 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminCommonController.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminCommonController.java @@ -1,7 +1,6 @@ package com.xcong.farmer.cms.modules.system.controller; import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.StrUtil; import com.xcong.farmer.cms.common.contants.AppContants; import com.xcong.farmer.cms.common.response.Result; import com.xcong.farmer.cms.modules.system.dto.AdminLoginDto; @@ -18,6 +17,8 @@ import java.io.File; import java.io.IOException; +import java.util.Map; + @RestController @RequestMapping(value = "/api/common") @@ -34,6 +35,12 @@ return iCommonService.login(adminLoginDto); } + @ApiOperation(value = "获取验证码", notes = "获取验证码") + @GetMapping("/captcha") + public Result captcha() throws IOException { + return iCommonService.captchaCreator(); + } + /** * 用户退出登录 * @return diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminMessageBoardController.java b/src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminMessageBoardController.java new file mode 100644 index 0000000..74794b2 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminMessageBoardController.java @@ -0,0 +1,49 @@ +package com.xcong.farmer.cms.modules.system.controller; + +import com.xcong.farmer.cms.common.response.Result; +import com.xcong.farmer.cms.modules.system.dto.AdminAddMessageDto; +import com.xcong.farmer.cms.modules.system.dto.AdminDeleteDto; +import com.xcong.farmer.cms.modules.system.dto.AdminMessageBoardDto; +import com.xcong.farmer.cms.modules.system.service.IMessageBoardService; +import com.xcong.farmer.cms.modules.system.vo.AdminMessageBoardVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; + +@RestController +@RequestMapping(value = "/api/messageBoard") +@Slf4j +@Api(value = "留言板", tags = "留言板") +public class AdminMessageBoardController { + + @Resource + private IMessageBoardService iMessageBoardService; + + @ApiOperation(value = "留言板分页列表", notes = "留言板分页列表") + @ApiResponses({@ApiResponse(code = 200, message = "ok", response = AdminMessageBoardVo.class)}) + @PostMapping(value = "/messageInPage") + public Result getMessageInPage(@RequestBody @Valid AdminMessageBoardDto adminMessageBoardDto) { + return iMessageBoardService.getMessageInPage(adminMessageBoardDto); + } + + @ApiOperation(value = "删除留言", notes = "删除留言") + @PostMapping(value = "/delObjs") + public Result delObjs(@RequestBody @Valid AdminDeleteDto adminDeleteDto) { + return iMessageBoardService.delObjs(adminDeleteDto); + } + + @ApiOperation(value = "新增留言", notes = "新增留言") + @PostMapping(value = "/addMessage") + public Result addMessage(HttpServletRequest request,@RequestBody @Valid AdminAddMessageDto adminAddMessageDto) { + return iMessageBoardService.addMessage(request,adminAddMessageDto); + } + + +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddMessageDto.java b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddMessageDto.java new file mode 100644 index 0000000..1ca8fd7 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddMessageDto.java @@ -0,0 +1,35 @@ +package com.xcong.farmer.cms.modules.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +@ApiModel(value = "AdminAddMessageDto", description = "参数接收类") +public class AdminAddMessageDto { + + @ApiModelProperty(value = "姓名") + @NotNull(message = "请输入姓名") + private String name; + + @ApiModelProperty(value = "联系方式") + @NotNull(message = "请输入联系方式") + private String contactValue; + + @ApiModelProperty(value = "留言标题") + @NotNull(message = "请输入留言标题") + private String title; + + @ApiModelProperty(value = "留言描述") + @NotNull(message = "请输入留言描述") + private String remark; + + @ApiModelProperty(value = "备注1") + private String paramOne; + + @ApiModelProperty(value = "备注2") + private String paramTwo; + +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminLoginDto.java b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminLoginDto.java index b6871be..c76f9ba 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminLoginDto.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminLoginDto.java @@ -15,4 +15,11 @@ @NotBlank(message = "请输入密码") private String password; + private String codeToken; + + @NotBlank(message = "请输入验证码") + private String codeValue; + + + } diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminMessageBoardDto.java b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminMessageBoardDto.java new file mode 100644 index 0000000..179f4bb --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminMessageBoardDto.java @@ -0,0 +1,19 @@ +package com.xcong.farmer.cms.modules.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "AdminMessageBoardDto", description = "参数接收类") +public class AdminMessageBoardDto { + + @ApiModelProperty(value = "查询条件", example = "张三") + private String queryKey; + + @ApiModelProperty(value = "每页条数", example = "10") + private Integer pageSize; + + @ApiModelProperty(value = "第几页", example = "1") + private Integer pageNum; +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/entity/MessageBoardEntity.java b/src/main/java/com/xcong/farmer/cms/modules/system/entity/MessageBoardEntity.java new file mode 100644 index 0000000..53ad8c5 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/entity/MessageBoardEntity.java @@ -0,0 +1,34 @@ +package com.xcong.farmer.cms.modules.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.util.Date; +import lombok.Data; + +/** + * 留言板表 + */ +@Data +@TableName("t_message_board") +public class MessageBoardEntity { + //ID + + @TableId(value = "id",type = IdType.AUTO) + private Long id; + //姓名 + private String name; + //联系方式 + private String contactValue; + //留言标题 + private String title; + //留言描述 + private String remark; + //所属公司ID + private Long companyId; + //创建时间 + private Date createTime; + + private String paramOne; + private String paramTwo; +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/entity/ValidateCodeProperties.java b/src/main/java/com/xcong/farmer/cms/modules/system/entity/ValidateCodeProperties.java new file mode 100644 index 0000000..38f75f3 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/entity/ValidateCodeProperties.java @@ -0,0 +1,35 @@ +package com.xcong.farmer.cms.modules.system.entity; + +import lombok.Data; + +@Data +public class ValidateCodeProperties { + + /** + * 验证码有效时间,单位秒 + */ + private Long time = 120L; + /** + * 验证码类型,可选值 png和 gif + */ + private String type = "png"; + /** + * 图片宽度,px + */ + private Integer width = 130; + /** + * 图片高度,px + */ + private Integer height = 48; + /** + * 验证码位数 + */ + private Integer length = 4; + /** + * 验证码值的类型 + * 1. 数字加字母 + * 2. 纯数字 + * 3. 纯字母 + */ + private Integer charType = 2; +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/MessageBoardMapper.java b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/MessageBoardMapper.java new file mode 100644 index 0000000..1f46ad3 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/MessageBoardMapper.java @@ -0,0 +1,13 @@ +package com.xcong.farmer.cms.modules.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xcong.farmer.cms.modules.system.entity.MessageBoardEntity; +import com.xcong.farmer.cms.modules.system.vo.AdminMessageBoardVo; +import org.apache.ibatis.annotations.Param; + +public interface MessageBoardMapper extends BaseMapper<MessageBoardEntity> { + + IPage<AdminMessageBoardVo> selectAdminMessageBoardInPage(Page<AdminMessageBoardVo> page, @Param("record") MessageBoardEntity messageBoardEntity); +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/ICommonService.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/ICommonService.java index ef6dc9b..04d7f74 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/service/ICommonService.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/ICommonService.java @@ -4,10 +4,17 @@ import com.xcong.farmer.cms.common.response.Result; import com.xcong.farmer.cms.modules.system.dto.AdminLoginDto; import com.xcong.farmer.cms.modules.system.entity.UserEntity; +import java.io.IOException; + +import java.util.Map; public interface ICommonService extends IService<UserEntity> { Result login(AdminLoginDto adminLoginDto); Result memberLogout(); + //生成token + Map<String, Object> createToken(String captcha); + //生成captcha验证码 + Result captchaCreator() throws IOException; } diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/IMessageBoardService.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/IMessageBoardService.java new file mode 100644 index 0000000..aecafb6 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/IMessageBoardService.java @@ -0,0 +1,19 @@ +package com.xcong.farmer.cms.modules.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.xcong.farmer.cms.common.response.Result; +import com.xcong.farmer.cms.modules.system.dto.AdminAddMessageDto; +import com.xcong.farmer.cms.modules.system.dto.AdminDeleteDto; +import com.xcong.farmer.cms.modules.system.dto.AdminMessageBoardDto; +import com.xcong.farmer.cms.modules.system.entity.MessageBoardEntity; + +import javax.servlet.http.HttpServletRequest; + +public interface IMessageBoardService extends IService<MessageBoardEntity> { + + Result getMessageInPage(AdminMessageBoardDto adminMessageBoardDto); + + Result delObjs(AdminDeleteDto adminDeleteDto); + + Result addMessage(HttpServletRequest request, AdminAddMessageDto adminAddMessageDto); +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ArticleServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ArticleServiceImpl.java index 7de2ada..1cb5399 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ArticleServiceImpl.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ArticleServiceImpl.java @@ -133,10 +133,7 @@ return Result.fail("文章不存在"); } Integer releaseStatus = adminUpdateArticleDto.getReleaseStatus(); - if(!ArticleEntity.RELEASE_STATUS_YES.equals(releaseStatus)){ - return Result.fail("请先取消文章的发布状态"); - } - articleEntity.getReleaseStatus(); + articleEntity.setReleaseStatus(releaseStatus); String title = adminUpdateArticleDto.getTitle(); articleEntity.setTitle(title); String childTitle = adminUpdateArticleDto.getChildTitle(); diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java index dffba4e..51f3f21 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java @@ -8,17 +8,24 @@ import com.xcong.farmer.cms.common.response.Result; import com.xcong.farmer.cms.configurations.properties.ApplicationProperties; import com.xcong.farmer.cms.configurations.properties.SecurityProperties; -import com.xcong.farmer.cms.modules.member.entity.MemberEntity; import com.xcong.farmer.cms.modules.system.dto.AdminLoginDto; import com.xcong.farmer.cms.modules.system.entity.UserEntity; import com.xcong.farmer.cms.modules.system.mapper.UserMapper; import com.xcong.farmer.cms.modules.system.service.ICommonService; +import com.xcong.farmer.cms.modules.system.util.CaptchaUtil; import com.xcong.farmer.cms.modules.system.util.LoginUserUtil; -import com.xcong.farmer.cms.utils.MessageSourceUtils; +import com.xcong.farmer.cms.modules.system.util.UUIDUtil; import com.xcong.farmer.cms.utils.RedisUtils; +import java.util.concurrent.TimeUnit; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; + +import java.io.IOException; import java.util.HashMap; import java.util.Map; @@ -40,9 +47,33 @@ private ApplicationProperties applicationProperties; @Resource private SecurityProperties securityProperties; + @Autowired + private RedisTemplate<String, Object> redisTemplate; + @Autowired + private UUIDUtil uuidUtil; + @Autowired + private CaptchaUtil captchaUtil; + //从SpringBoot的配置文件中取出过期时间 + @Value("${server.servlet.session.timeout}") + private Integer timeout; @Override public Result login(AdminLoginDto adminLoginDto) { + + //根据前端传回的token在redis中找对应的value + ValueOperations<String, Object> valueOperations = redisTemplate.opsForValue(); + String codeToken = adminLoginDto.getCodeToken(); + String codeValue = adminLoginDto.getCodeValue(); + if (redisTemplate.hasKey(codeToken)) { + //验证通过, 删除对应的key + if (valueOperations.get(codeToken).equals(codeValue)) { + redisTemplate.delete(codeToken); + } else { + return Result.fail("请输入正确验证码"); + } + } else { + return Result.fail("验证码已过期,请刷新当前页面"); + } String username = adminLoginDto.getUsername(); String password = adminLoginDto.getPassword(); UserEntity userEntity = userMapper.selectByUserNameAndPassword(username, SecureUtil.md5(password)); @@ -93,6 +124,26 @@ return Result.ok("退出成功"); } + @Override + public Map<String, Object> createToken(String captcha) { + //生成一个token + String key = uuidUtil.getUUID32(); + //生成验证码对应的token 以token为key 验证码为value存在redis中 + ValueOperations<String, Object> valueOperations = redisTemplate.opsForValue(); + valueOperations.set(key, captcha); + //设置验证码过期时间 + redisTemplate.expire(key, timeout, TimeUnit.MINUTES); + Map<String, Object> map = new HashMap<>(); + map.put("token", key); + map.put("expire", timeout); + return map; + } + + @Override + public Result captchaCreator() throws IOException { + return captchaUtil.catchaImgCreator(); + } + public String generateAsaToken(String token) { RSA rsa = new RSA(null, securityProperties.getPublicKey()); return rsa.encryptBase64(token + "_" + System.currentTimeMillis(), KeyType.PublicKey); diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/MessageBoardServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/MessageBoardServiceImpl.java new file mode 100644 index 0000000..79cd77e --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/MessageBoardServiceImpl.java @@ -0,0 +1,98 @@ +package com.xcong.farmer.cms.modules.system.service.Impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xcong.farmer.cms.common.response.Result; +import com.xcong.farmer.cms.modules.system.dto.AdminAddMessageDto; +import com.xcong.farmer.cms.modules.system.dto.AdminDeleteDto; +import com.xcong.farmer.cms.modules.system.dto.AdminMessageBoardDto; +import com.xcong.farmer.cms.modules.system.entity.CompanyEntity; +import com.xcong.farmer.cms.modules.system.entity.MessageBoardEntity; +import com.xcong.farmer.cms.modules.system.entity.UserEntity; +import com.xcong.farmer.cms.modules.system.mapper.CompanyMapper; +import com.xcong.farmer.cms.modules.system.mapper.MessageBoardMapper; +import com.xcong.farmer.cms.modules.system.service.IMessageBoardService; +import com.xcong.farmer.cms.modules.system.util.LoginUserUtil; +import com.xcong.farmer.cms.modules.system.vo.AdminMessageBoardVo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.date.DateUtil; + +import cn.hutool.core.collection.CollUtil; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +@Service +@Slf4j +public class MessageBoardServiceImpl extends ServiceImpl<MessageBoardMapper, MessageBoardEntity> implements IMessageBoardService { + + @Resource + private CompanyMapper companyMapper; + + @Override + public Result getMessageInPage(AdminMessageBoardDto adminMessageBoardDto) { + MessageBoardEntity messageBoardEntity = new MessageBoardEntity(); + UserEntity userlogin = LoginUserUtil.getLoginUser(); + Long companyId = userlogin.getCompanyId(); + if(UserEntity.USER_BELONG_TOP != companyId){ + messageBoardEntity.setCompanyId(companyId); + } + String queryKey = adminMessageBoardDto.getQueryKey(); + if(StrUtil.isNotEmpty(queryKey)){ + messageBoardEntity.setName(queryKey); + messageBoardEntity.setRemark(queryKey); + } + Page<AdminMessageBoardVo> page = new Page<>(adminMessageBoardDto.getPageNum(), adminMessageBoardDto.getPageSize()); + IPage<AdminMessageBoardVo> list = this.baseMapper.selectAdminMessageBoardInPage(page, messageBoardEntity); + return Result.ok(list); + } + + @Override + @Transactional + public Result delObjs(AdminDeleteDto adminDeleteDto) { + String ids = adminDeleteDto.getIds(); + if(StrUtil.isNotEmpty(ids)){ + String[] messageIds = ids.split(StringPool.COMMA); + for(String messageIdStr : messageIds){ + Long messageId = Long.valueOf(messageIdStr); + this.baseMapper.deleteById(messageId); + } + } + return Result.ok("删除成功"); + } + + @Override + public Result addMessage(HttpServletRequest request, AdminAddMessageDto adminAddMessageDto) { + StringBuffer requestURL = request.getRequestURL(); + List<CompanyEntity> companyEntities = companyMapper.selectList(new QueryWrapper<>()); + Long companyId = 0L; + if(CollUtil.isNotEmpty(companyEntities)){ + for(CompanyEntity companyEntity : companyEntities){ + boolean contains = StrUtil.contains(requestURL, companyEntity.getWebAddress()); + if(contains){ + companyId = companyEntity.getId(); + } + } + } + MessageBoardEntity messageBoardEntity = new MessageBoardEntity(); + messageBoardEntity.setName(adminAddMessageDto.getName()); + messageBoardEntity.setContactValue(adminAddMessageDto.getContactValue()); + messageBoardEntity.setTitle(adminAddMessageDto.getTitle()); + messageBoardEntity.setRemark(adminAddMessageDto.getRemark()); + messageBoardEntity.setCreateTime(DateUtil.date()); + messageBoardEntity.setParamOne(adminAddMessageDto.getParamOne()); + messageBoardEntity.setParamTwo(adminAddMessageDto.getParamTwo()); + if(companyId > 0L){ + messageBoardEntity.setCompanyId(companyId); + } + this.baseMapper.insert(messageBoardEntity); + return Result.ok("留言成功"); + } +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java index 04baff4..54e461c 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java @@ -251,11 +251,20 @@ List<UserRoleEntity> userRoleEntities = userRoleMapper.selectList(userRoleQueryWrapper); if(CollUtil.isNotEmpty(userRoleEntities)){ List menuIds = new ArrayList<Long>(); - for(UserRoleEntity userRoleEntity : userRoleEntities){ - List<RoleMenuEntity> roleMenuEntities = roleMenuMapper.selectListByRoleId(userRoleEntity.getRoleId()); - if(CollUtil.isNotEmpty(roleMenuEntities)){ - for(RoleMenuEntity roleMenuEntity : roleMenuEntities){ - menuIds.add(roleMenuEntity.getMenuId()); + if(UserEntity.USERNAME_DEFAULT.equals(loginUser.getUsername())){ + List<MenuEntity> menuEntities = menuMapper.selectList(new QueryWrapper<>()); + if(CollUtil.isNotEmpty(menuEntities)){ + for(MenuEntity menuEntity : menuEntities){ + menuIds.add(menuEntity.getId()); + } + } + }else{ + for(UserRoleEntity userRoleEntity : userRoleEntities){ + List<RoleMenuEntity> roleMenuEntities = roleMenuMapper.selectListByRoleId(userRoleEntity.getRoleId()); + if(CollUtil.isNotEmpty(roleMenuEntities)){ + for(RoleMenuEntity roleMenuEntity : roleMenuEntities){ + menuIds.add(roleMenuEntity.getMenuId()); + } } } } diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/util/CaptchaUtil.java b/src/main/java/com/xcong/farmer/cms/modules/system/util/CaptchaUtil.java new file mode 100644 index 0000000..3179140 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/util/CaptchaUtil.java @@ -0,0 +1,38 @@ +package com.xcong.farmer.cms.modules.system.util; + +import com.google.code.kaptcha.impl.DefaultKaptcha; +import com.xcong.farmer.cms.common.response.Result; +import com.xcong.farmer.cms.modules.system.service.ICommonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import sun.misc.BASE64Encoder; +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Map; + +@Component +public class CaptchaUtil { + + @Autowired + private DefaultKaptcha producer; + @Autowired + private ICommonService iCommonService; + //生成catchCreator的map + public Result catchaImgCreator() throws IOException { + //生成文字验证码 + String text = producer.createText(); + //生成文字对应的图片验证码 + BufferedImage image = producer.createImage(text); + //将图片写出 + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ImageIO.write(image, "jpg", outputStream); + //对写出的字节数组进行Base64编码 ==> 用于传递8比特字节码 + BASE64Encoder encoder = new BASE64Encoder(); + //生成token + Map<String, Object> token = iCommonService.createToken(text); + token.put("img", encoder.encode(outputStream.toByteArray())); + return Result.ok(token); + } +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/util/UUIDUtil.java b/src/main/java/com/xcong/farmer/cms/modules/system/util/UUIDUtil.java new file mode 100644 index 0000000..092fa42 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/util/UUIDUtil.java @@ -0,0 +1,11 @@ +package com.xcong.farmer.cms.modules.system.util; + +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import java.util.UUID; +@Component public class UUIDUtil { + /** * 生成32位的随机UUID * @return 字符形式的小写UUID */ + @Bean public String getUUID32() { + return UUID.randomUUID().toString() .replace("-", "").toLowerCase(); + } +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminMessageBoardVo.java b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminMessageBoardVo.java new file mode 100644 index 0000000..57adb85 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminMessageBoardVo.java @@ -0,0 +1,32 @@ +package com.xcong.farmer.cms.modules.system.vo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.google.type.Date; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "AdminMessageBoardVo", description = "留言板列表返回") +public class AdminMessageBoardVo { + + //ID + private Long id; + + @ApiModelProperty(value = "姓名") + private String name; + + @ApiModelProperty(value = "联系方式") + private String contactValue; + + @ApiModelProperty(value = "留言标题") + private String title; + + @ApiModelProperty(value = "留言描述") + private String remark; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 0f0a173..bc48d12 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -2,6 +2,8 @@ port: 8878 servlet: context-path: / + session: + timeout: 1 spring: datasource: diff --git a/src/main/resources/mapper/ArticleMapper.xml b/src/main/resources/mapper/ArticleMapper.xml index ef9352b..38bc01b 100644 --- a/src/main/resources/mapper/ArticleMapper.xml +++ b/src/main/resources/mapper/ArticleMapper.xml @@ -15,8 +15,8 @@ <if test="record.columnId != null"> and a.column_id = #{record.columnId} </if> - <if test="record.belongId != null"> - and a.company_id = #{record.belongId} + <if test="record.companyId != null"> + and a.company_id = #{record.companyId} </if> <if test="record.title!=null"> and a.title like concat ('%',#{record.title},'%') diff --git a/src/main/resources/mapper/ColumnMapper.xml b/src/main/resources/mapper/ColumnMapper.xml index 3fdb807..3ea4d55 100644 --- a/src/main/resources/mapper/ColumnMapper.xml +++ b/src/main/resources/mapper/ColumnMapper.xml @@ -12,8 +12,8 @@ <if test="record.parentId != null"> and a.parent_id = #{record.parentId} </if> - <if test="record.belongId != null"> - and a.company_id = #{record.belongId} + <if test="record.companyId != null"> + and a.company_id = #{record.companyId} </if> </if> </where> diff --git a/src/main/resources/mapper/MessageBoardMapper.xml b/src/main/resources/mapper/MessageBoardMapper.xml new file mode 100644 index 0000000..5fd7925 --- /dev/null +++ b/src/main/resources/mapper/MessageBoardMapper.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.xcong.farmer.cms.modules.system.mapper.MessageBoardMapper"> + + <select id="selectAdminMessageBoardInPage" resultType="com.xcong.farmer.cms.modules.system.vo.AdminMessageBoardVo"> + SELECT + a.* + FROM + t_message_board a + <where> + <if test="record != null" > + <if test="record.name!=null"> + and a.name like concat ('%',#{record.name},'%') + </if> + <if test="record.remark!=null"> + and a.remark like concat ('%',#{record.remark},'%') + </if> + <if test="record.companyId!=null"> + and a.company_id = #{record.companyId} + </if> + </if> + </where> + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/NavigationBarMapper.xml b/src/main/resources/mapper/NavigationBarMapper.xml index 1893c71..0aef3ca 100644 --- a/src/main/resources/mapper/NavigationBarMapper.xml +++ b/src/main/resources/mapper/NavigationBarMapper.xml @@ -12,8 +12,8 @@ <if test="record.parentId != null"> and a.parent_id = #{record.parentId} </if> - <if test="record.belongId != null"> - and a.company_id = #{record.belongId} + <if test="record.companyId != null"> + and a.company_id = #{record.companyId} </if> </if> </where> diff --git a/src/main/resources/mapper/RoleMapper.xml b/src/main/resources/mapper/RoleMapper.xml index 2d4e3a5..485e29f 100644 --- a/src/main/resources/mapper/RoleMapper.xml +++ b/src/main/resources/mapper/RoleMapper.xml @@ -12,8 +12,8 @@ <if test="record.roleName!=null"> and a.role_name like concat ('%',#{record.roleName},'%') </if> - <if test="record.belongId!=null"> - and a.company_id = #{record.belongId} + <if test="record.companyId!=null"> + and a.company_id = #{record.companyId} </if> </if> </where> diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml index c406e22..fb8962c 100644 --- a/src/main/resources/mapper/UserMapper.xml +++ b/src/main/resources/mapper/UserMapper.xml @@ -17,8 +17,8 @@ <if test="record.username!=null"> and a.username like concat ('%',#{record.username},'%') </if> - <if test="record.belongId!=null"> - and a.company_id = #{record.belongId} + <if test="record.companyId!=null"> + and a.company_id = #{record.companyId} </if> </if> </where> -- Gitblit v1.9.1