浏览代码

游客可以重置密码

wuweihao 4 年之前
父节点
当前提交
ef68b9c081
共有 34 个文件被更改,包括 557 次插入118 次删除
  1. 81 5
      gis_admin/src/main/java/com/gis/admin/controller/LoginController.java
  2. 2 1
      gis_admin/src/main/java/com/gis/admin/controller/SysUserController.java
  3. 8 0
      gis_admin/src/main/java/com/gis/admin/entity/dto/PasswordDto.java
  4. 3 3
      gis_cms/src/main/java/com/gis/cms/entity/dto/ResetPasswordDto.java
  5. 4 0
      gis_admin/src/main/java/com/gis/admin/mapper/SysRoleMapper.java
  6. 8 0
      gis_admin/src/main/java/com/gis/admin/mapper/SysUserMapper.java
  7. 58 0
      gis_admin/src/main/java/com/gis/admin/mapper/provider/SysUserProvider.java
  8. 7 1
      gis_admin/src/main/java/com/gis/admin/service/SysUserService.java
  9. 20 0
      gis_admin/src/main/java/com/gis/admin/service/impl/SysRoleServiceImpl.java
  10. 65 7
      gis_admin/src/main/java/com/gis/admin/service/impl/SysUserServiceImpl.java
  11. 1 1
      gis_application/src/main/resources/application.properties
  12. 11 6
      gis_cms/src/main/java/com/gis/cms/controller/GoodsController.java
  13. 1 1
      gis_cms/src/main/java/com/gis/cms/controller/MournController.java
  14. 12 1
      gis_cms/src/main/java/com/gis/cms/controller/NewsController.java
  15. 1 1
      gis_cms/src/main/java/com/gis/cms/controller/QuestionGroupController.java
  16. 26 0
      gis_cms/src/main/java/com/gis/cms/controller/WebController.java
  17. 8 0
      gis_cms/src/main/java/com/gis/cms/controller/WebManageController.java
  18. 4 1
      gis_cms/src/main/java/com/gis/cms/entity/dto/GoodsDto.java
  19. 0 56
      gis_cms/src/main/java/com/gis/cms/entity/dto/RegisterDto.java
  20. 3 0
      gis_cms/src/main/java/com/gis/cms/entity/po/GoodsEntity.java
  21. 1 3
      gis_cms/src/main/java/com/gis/cms/entity/po/QuestionAnswerEntity.java
  22. 5 1
      gis_cms/src/main/java/com/gis/cms/mapper/MournMapper.java
  23. 2 2
      gis_cms/src/main/java/com/gis/cms/mapper/provider/BarrageProvider.java
  24. 2 0
      gis_cms/src/main/java/com/gis/cms/service/MournService.java
  25. 3 0
      gis_cms/src/main/java/com/gis/cms/service/NewsService.java
  26. 34 21
      gis_cms/src/main/java/com/gis/cms/service/impl/GoodsServiceImpl.java
  27. 3 3
      gis_cms/src/main/java/com/gis/cms/service/impl/MartyrServiceImpl.java
  28. 5 0
      gis_cms/src/main/java/com/gis/cms/service/impl/MournServiceImpl.java
  29. 51 2
      gis_cms/src/main/java/com/gis/cms/service/impl/NewsServiceImpl.java
  30. 2 2
      gis_cms/src/main/java/com/gis/cms/service/impl/QuestionGroupServiceImpl.java
  31. 14 0
      gis_common/src/main/java/com/gis/common/base/entity/dto/UserPageDateDto.java
  32. 3 0
      gis_common/src/main/java/com/gis/common/constant/MsgCode.java
  33. 107 0
      gis_common/src/main/java/com/gis/common/util/Base64Converter.java
  34. 2 0
      gis_common/src/main/java/com/gis/common/util/RedisUtil.java

+ 81 - 5
gis_admin/src/main/java/com/gis/admin/controller/LoginController.java

@@ -4,10 +4,7 @@ import com.gis.admin.entity.po.SysRoleEntity;
 import com.gis.common.base.entity.po.LogEntity;
 import com.gis.common.base.service.LogService;
 import com.gis.common.constant.ConfigConstant;
-import com.gis.common.util.JwtUtil;
-import com.gis.common.util.PasswordUtils;
-import com.gis.common.util.RedisUtil;
-import com.gis.common.util.Result;
+import com.gis.common.util.*;
 import com.gis.admin.entity.po.SysUserEntity;
 import com.gis.admin.service.SysResourceService;
 import com.gis.admin.service.SysRoleService;
@@ -99,8 +96,12 @@ public class LoginController {
                  return Result.failure("非法用户");
          }
 
+        // 解密密码
+        String password = Base64Converter.decodePassword(param.getPassword());
+
         // 验证密码,解密出来是明文密码,在跟输入密码比较
-        boolean decryptName = PasswordUtils.decrypt(entity.getPassword(), param.getPassword(), PasswordUtils.getStaticSalt());
+        boolean decryptName = PasswordUtils.decrypt(entity.getPassword(), password, PasswordUtils.getStaticSalt());
+//        boolean decryptName = PasswordUtils.decrypt(entity.getPassword(), param.getPassword(), PasswordUtils.getStaticSalt());
         if (!decryptName) {
             log.error("密码错误");
             return Result.failure("密码错误");
@@ -156,6 +157,81 @@ public class LoginController {
     }
 
 
+    @ApiOperation("test-登录")
+    @PostMapping(value = "test/admin/login")
+    public Result testLogin(@Valid @RequestBody LoginDto param)  {
+
+        String from = param.getFrom();
+        String[] checkFrom = {"cms","web"};
+        List<String> fromList = Arrays.asList(checkFrom);
+        if (!fromList.contains(from)) {
+            log.error("from: {}", from);
+            return Result.failure("非法用户");
+        }
+
+        // 1.获取用户
+        SysUserEntity entity = userService.findByUserName(param.getUserName());
+        if (entity == null){
+            log.error("用户不存在");
+            return Result.failure("用户不存在");
+        }
+
+        Long userId = entity.getId();
+        Object role = getRoleKey(userId);
+//        SysRoleEntity role = getRole(userId);
+        log.info("role: {}", role);
+//        String roleKey = role.getRoleKey();
+
+        if ("cms".equals(from) && ((Set)role).contains("sys_visitor")) {
+            log.error("游客不能登录管理后台");
+            return Result.failure("非法用户");
+        }
+
+        // 验证密码,解密出来是明文密码,在跟输入密码比较
+        boolean decryptName = PasswordUtils.decrypt(entity.getPassword(), param.getPassword(), PasswordUtils.getStaticSalt());
+        if (!decryptName) {
+            log.error("密码错误");
+            return Result.failure("密码错误");
+        }
+
+        // 检查账号是否启用
+        if (entity.getIsEnabled() != 1) {
+            log.error("此账号已停用: {}", entity.getUserName());
+            return Result.failure("此账号已停用");
+        }
+
+        // 创建新token
+        HashMap<String, Object> tokenMap = new HashMap<>();
+        tokenMap.put("userName", entity.getUserName());
+        tokenMap.put("id", userId);
+        tokenMap.put("role", role);
+
+        String token = JwtUtil.createJWT(TOKEN_EXPIRE, tokenMap);
+
+
+        HashMap<String, Object> result = new HashMap<>();
+        result.put("user", entity);
+        result.put("token", token);
+        // 角色控制系统管理(sys_admin)、内容管理
+        result.put("role", role);
+//        result.put("roleName", role.getRoleName());
+
+
+        // 保存操作日志
+        saveLog(userId);
+
+
+        // 更新到 redis, 有效期24h, 旧token无效, 做单用户登录 86400s-> 24H
+//        redisTemplate.opsForValue().set(configConstant.redisPrefix + token, token, Long.parseLong("23"), TimeUnit.HOURS);
+
+        redisUtil.set(configConstant.redisPrefix + token, token, 86400);
+
+
+        return Result.success(result);
+
+    }
+
+
 
 
 

+ 2 - 1
gis_admin/src/main/java/com/gis/admin/controller/SysUserController.java

@@ -3,6 +3,7 @@ package com.gis.admin.controller;
 
 import com.gis.common.base.aop.WebControllerLog;
 import com.gis.common.base.entity.dto.PageDto;
+import com.gis.common.base.entity.dto.UserPageDateDto;
 import com.gis.common.util.Result;
 import com.gis.admin.entity.dto.PasswordDto;
 import com.gis.admin.entity.dto.UserDto;
@@ -34,7 +35,7 @@ public class SysUserController {
     @RequiresRoles(value = {"sys_admin"}, logical = Logical.OR)
     @ApiOperation("用户列表")
     @PostMapping("list")
-    public Result<SysUserEntity> list(@RequestBody PageDto param) {
+    public Result<SysUserEntity> list(@RequestBody UserPageDateDto param) {
         return userService.search(param);
     }
 

+ 8 - 0
gis_admin/src/main/java/com/gis/admin/entity/dto/PasswordDto.java

@@ -18,4 +18,12 @@ public class PasswordDto {
     @NotBlank(message = "新密码不能为空")
     @ApiModelProperty(value = "新密码", name = "newPassword", required = true)
     private String newPassword;
+
+    /**门户网站使用*/
+    @ApiModelProperty(value = "身份码")
+    private String userName;
+
+    /**门户网站使用*/
+    @ApiModelProperty(value = "验证码")
+    private String code;
 }

+ 3 - 3
gis_cms/src/main/java/com/gis/cms/entity/dto/ResetPasswordDto.java

@@ -1,4 +1,4 @@
-package com.gis.cms.entity.dto;
+package com.gis.admin.entity.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -15,7 +15,7 @@ public class ResetPasswordDto {
     @ApiModelProperty(value = "姓名",  required = true)
     private String realName;
 
-    @NotBlank(message = "身份证号不能为空")
-    @ApiModelProperty(value = "身份证号",  required = true)
+    @NotBlank(message = "身份不能为空")
+    @ApiModelProperty(value = "身份",  required = true)
     private String userName;
 }

+ 4 - 0
gis_admin/src/main/java/com/gis/admin/mapper/SysRoleMapper.java

@@ -46,4 +46,8 @@ public interface SysRoleMapper extends IBaseMapper<SysRoleEntity, Long> {
 
     @Select(value = "select a.* from sys_role a left join sys_user_role b on a.id = b.role_id where a.is_delete=0 and b.user_id = #{userId}")
     SysRoleEntity findByUserId(Long userId);
+
+    /** 该角色是否有用户在使用*/
+    @Select("select a.id from sys_role a left join sys_user_role b on a.id=b.role_id left join sys_user c on c.id=b.user_id where a.is_delete=0 and c.is_delete=0 and a.id=#{roleId}")
+    Integer checkUseByRoleId(Long roleId);
 }

+ 8 - 0
gis_admin/src/main/java/com/gis/admin/mapper/SysUserMapper.java

@@ -1,10 +1,14 @@
 package com.gis.admin.mapper;
 
 
+import com.gis.admin.mapper.provider.SysRoleProvider;
+import com.gis.admin.mapper.provider.SysUserProvider;
+import com.gis.common.base.entity.dto.UserPageDateDto;
 import com.gis.common.base.mapper.IBaseMapper;
 import com.gis.admin.entity.po.SysUserEntity;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.SelectProvider;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -27,4 +31,8 @@ public interface SysUserMapper extends IBaseMapper<SysUserEntity, Long> {
             "left join sys_user_role b on b.user_id = a.id " +
             "left join sys_role c on c.id=b.role_id where a.is_delete = 0 ")
     List<SysUserEntity> findListMapper();
+
+    @SelectProvider(type = SysUserProvider.class, method = "search")
+    List<SysUserEntity> search(UserPageDateDto param);
+
 }

+ 58 - 0
gis_admin/src/main/java/com/gis/admin/mapper/provider/SysUserProvider.java

@@ -0,0 +1,58 @@
+package com.gis.admin.mapper.provider;
+
+import com.gis.common.base.entity.dto.PageDto;
+import com.gis.common.base.entity.dto.UserPageDateDto;
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.annotations.Select;
+
+
+/**
+ * Created by owen on 2020/6/13 0013 10:56
+ */
+@Log4j2
+public class SysUserProvider {
+
+
+    @Select(value = "select a.*, b.role_id as roleId, c.role_name as roleName, c.role_key as roleKey from sys_user a " +
+            "left join sys_user_role b on b.user_id = a.id " +
+            "left join sys_role c on c.id=b.role_id where a.is_delete = 0 ")
+
+    public String search(UserPageDateDto param) {
+        StringBuffer sql = new StringBuffer(
+                "select a.*, b.role_id as roleId, c.role_name as roleName, c.role_key as roleKey from sys_user a " +
+                        "left join sys_user_role b on b.user_id = a.id " +
+                        "left join sys_role c on c.id=b.role_id where a.is_delete = 0 ");
+
+
+        if (StringUtils.isNotBlank(param.getStartTime()) && StringUtils.isNotBlank(param.getEndTime())) {
+
+            sql.append(" and a.create_time >= ").append("'").append(param.getStartTime()).append("'");
+            sql.append(" and a.create_time <= ").append("'").append(param.getEndTime()).append("'");
+        }
+
+        String searchKey = param.getSearchKey();
+        if (!StringUtils.isAllBlank(searchKey)) {
+            searchKey = StringUtils.trim(searchKey);
+            sql.append(" and (");
+            sql.append( "a.real_name like '%").append(searchKey).append("%'");
+//            sql.append( " or a.unit like '%").append(searchKey).append("%'");
+            sql.append(")");
+        }
+
+        Long roleId = param.getRoleId();
+        if (roleId != null) {
+            sql.append(" and c.id=").append(roleId);
+        }
+
+
+        sql.append(" order by a.create_time desc");
+        log.info("sql: {}", sql.toString());
+        return sql.toString();
+    }
+
+
+}
+
+
+

+ 7 - 1
gis_admin/src/main/java/com/gis/admin/service/SysUserService.java

@@ -1,7 +1,9 @@
 package com.gis.admin.service;
 
 
+import com.gis.admin.entity.dto.ResetPasswordDto;
 import com.gis.common.base.entity.dto.PageDto;
+import com.gis.common.base.entity.dto.UserPageDateDto;
 import com.gis.common.base.service.IBaseService;
 import com.gis.common.util.Result;
 import com.gis.admin.entity.dto.PasswordDto;
@@ -22,7 +24,7 @@ public interface SysUserService extends IBaseService<SysUserEntity, Long> {
 
     Result removes(String ids);
 
-    Result<SysUserEntity> search(PageDto param);
+    Result<SysUserEntity> search(UserPageDateDto param);
 
     Result updatePwd(PasswordDto param);
 
@@ -35,4 +37,8 @@ public interface SysUserService extends IBaseService<SysUserEntity, Long> {
     Result getRole();
 
     Result<SysUserEntity> detail(Long id);
+
+    Result retrievePassword(ResetPasswordDto param);
+
+    Result updatePwdByWeb(PasswordDto param);
 }

+ 20 - 0
gis_admin/src/main/java/com/gis/admin/service/impl/SysRoleServiceImpl.java

@@ -143,11 +143,31 @@ public class SysRoleServiceImpl extends IBaseServiceImpl<SysRoleEntity, Long> im
         if (roleEntity.getRoleKey().startsWith("sys_")) {
             return Result.failure("系统预设角色不能删除");
         }
+
+        // 检测是否有用户在使用该角色
+        if (checkUse(id)) {
+            return Result.failure("该角色已绑定用户,不能删除");
+        }
+
         // db数据真删除, 会把中间表数据也删除
         this.deleteById(id);
         return Result.success();
     }
 
+    /**
+     *
+     * @param roleId 角色id
+     * @return true: 有用户在使用
+     * false : 没有用户在使用
+     */
+    private Boolean checkUse(Long roleId){
+        Integer integer = entityMapper.checkUseByRoleId(roleId);
+        if (integer != null) {
+            return true;
+        }
+        return false;
+    }
+
     @Override
     public Result detail(Long id) {
         SysRoleEntity roleEntity = this.findById(id);

+ 65 - 7
gis_admin/src/main/java/com/gis/admin/service/impl/SysUserServiceImpl.java

@@ -1,13 +1,17 @@
 package com.gis.admin.service.impl;
 
+import cn.hutool.core.util.RandomUtil;
+import com.gis.admin.entity.dto.ResetPasswordDto;
 import com.gis.admin.entity.po.SysRoleEntity;
 import com.gis.common.base.aop.WebControllerLog;
 import com.gis.common.base.entity.dto.PageDto;
+import com.gis.common.base.entity.dto.UserPageDateDto;
 import com.gis.common.base.entity.po.LogEntity;
 import com.gis.common.base.exception.BaseRuntimeException;
 import com.gis.common.base.mapper.IBaseMapper;
 import com.gis.common.base.service.LogService;
 import com.gis.common.base.service.impl.IBaseServiceImpl;
+import com.gis.common.constant.MsgCode;
 import com.gis.common.util.JwtUtil;
 import com.gis.common.util.PasswordUtils;
 import com.gis.common.util.Result;
@@ -20,11 +24,13 @@ import com.gis.admin.service.SysRoleService;
 import com.gis.admin.service.SysUserService;
 import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.RandomUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import tk.mybatis.mapper.entity.Condition;
 
+import javax.validation.constraints.NotBlank;
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Set;
@@ -46,6 +52,9 @@ public class SysUserServiceImpl extends IBaseServiceImpl<SysUserEntity, Long> im
     @Autowired
     LogService logService;
 
+    /**重置密码redis key*/
+    final static String RESET_PASSWORD_KEY = "reset_password_";
+
     @Override
     public IBaseMapper<SysUserEntity, Long> getBaseMapper() {
         return this.entityMapper;
@@ -63,7 +72,7 @@ public class SysUserServiceImpl extends IBaseServiceImpl<SysUserEntity, Long> im
         if (id == null) {
             entity = this.findByUserName(param.getUserName());
             if (entity != null) {
-                return Result.failure("身份证号已存在");
+                return Result.failure("身份已存在");
             }
             entity = new SysUserEntity();
             BeanUtils.copyProperties(param, entity);
@@ -124,9 +133,9 @@ public class SysUserServiceImpl extends IBaseServiceImpl<SysUserEntity, Long> im
     }
 
     @Override
-    public Result<SysUserEntity> search(PageDto param) {
+    public Result<SysUserEntity> search(UserPageDateDto param) {
         startPage(param);
-        PageInfo<SysUserEntity> page = new PageInfo<>(entityMapper.findListMapper());
+        PageInfo<SysUserEntity> page = new PageInfo<>(entityMapper.search(param));
         return Result.success(page);
     }
 
@@ -149,18 +158,22 @@ public class SysUserServiceImpl extends IBaseServiceImpl<SysUserEntity, Long> im
     @Override
     public Result updatePwd(PasswordDto param) {
         SysUserEntity user = this.findByUserName(JwtUtil.getUsername(getToken()));
+        updatePwd(param, user);
+
+        return Result.success();
+    }
 
+    private void updatePwd(PasswordDto param, SysUserEntity user){
         // 验证原密码
         Boolean isBoolean = PasswordUtils.decrypt(user.getPassword(), param.getOldPassword(), PasswordUtils.getStaticSalt());
         if (!isBoolean) {
             log.error("原始密码错误");
-            return Result.failure("原始密码错误");
+            throw new BaseRuntimeException("原始密码错误");
         }
 
         user.setPassword(PasswordUtils.encrypt(user.getUserName(), param.getNewPassword(), PasswordUtils.getStaticSalt()));
         user.setUpdateTime(LocalDateTime.now());
         this.update(user);
-        return Result.success();
     }
 
     @Override
@@ -209,8 +222,8 @@ public class SysUserServiceImpl extends IBaseServiceImpl<SysUserEntity, Long> im
 
         SysUserEntity entity = this.findByUserName(param.getUserName());
         if (entity != null) {
-            log.error("该身份证号已注册: {}", param.getUserName());
-            return Result.failure("该身份证号已注册");
+            log.error("该身份已注册: {}", param.getUserName());
+            return Result.failure("该身份已注册");
         }
 
         entity = new SysUserEntity();
@@ -246,5 +259,50 @@ public class SysUserServiceImpl extends IBaseServiceImpl<SysUserEntity, Long> im
         return Result.success(user);
     }
 
+    /**
+     * 不正确返回空
+     * 正确返回 code
+     * @param param
+     * @return
+     */
+    @Override
+    public Result retrievePassword(ResetPasswordDto param) {
+        String userName = param.getUserName();
+        SysUserEntity entity = entityMapper.findByUserName(param.getUserName());
+        if (entity == null) {
+            return Result.success();
+        }
+
+        if (!param.getRealName().equals(entity.getRealName())) {
+            return Result.success();
+        }
+
+        String redisKey = RESET_PASSWORD_KEY + userName;
+        String code = RandomUtil.randomString(9);
+
+        // code 有效期5分钟
+        redisUtil.set(redisKey, code , 300);
+        return Result.success(code);
+    }
+
+    @Override
+    public Result updatePwdByWeb(PasswordDto param) {
+        String userName = param.getUserName();
+        SysUserEntity entity = entityMapper.findByUserName(userName);
+        if (entity == null) {
+            return Result.failure(MsgCode.e3001, "对象不存在");
+        }
+
+        String redisKey = RESET_PASSWORD_KEY + userName;
+        String redisCode = (String)redisUtil.get(redisKey);
+        if (!redisCode.equals(param.getCode())) {
+            return Result.failure(MsgCode.e3005, "验证码失效");
+        }
+
+        updatePwd(param, entity);
+
+        return Result.success();
+    }
+
 
 }

+ 1 - 1
gis_application/src/main/resources/application.properties

@@ -9,7 +9,7 @@ project.sc=\u65B0\u7586\u6B66\u8B66\u519B\u53F2\u9986
 redis.prefix=${project.en}_token_
 
 # \u5141\u8BB8\u4E0A\u4F20\u6587\u4EF6\u540E\u7F00
-server.file.allow=.jpg,.gif,.png,.ico,.bmp,.jpeg,.zip,.zp,.rar,.mp3,.mp4,.avi,.mov,.4dage,.wav,.wma,.m4a
+server.file.allow=.jpg,.gif,.png,.ico,.bmp,.jpeg,.zip,.zp,.rar,.mp3,.mp4,.avi,.mov,.4dage,.wav,.wma,.m4a,.obj
 
 
 

+ 11 - 6
gis_cms/src/main/java/com/gis/cms/controller/GoodsController.java

@@ -77,12 +77,17 @@ public class GoodsController  {
 
     }
 
-    @WebControllerLog(description = "精品典藏-图片置顶", addDb = true)
-    @ApiOperation(value = "图片置顶")
-    @GetMapping("setIndex/{fileId}")
-    public Result setIndex(@PathVariable Long fileId) {
-        return entityService.setIndex(fileId);
-    }
+    /**
+     * 废弃
+     * @param fileId
+     * @return
+     */
+//    @WebControllerLog(description = "精品典藏-图片置顶", addDb = true)
+//    @ApiOperation(value = "图片置顶")
+//    @GetMapping("setIndex/{fileId}")
+//    public Result setIndex(@PathVariable Long fileId) {
+//        return entityService.setIndex(fileId);
+//    }
 
     @WebControllerLog(description = "烈士管理-提审", addDb = true)
     @ApiOperation("提审")

+ 1 - 1
gis_cms/src/main/java/com/gis/cms/controller/MournController.java

@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.*;
  * Created by owen on 2021/6/24 0008 9:54
  */
 @Slf4j
-@Api(tags = "烈士悼念管理")
+@Api(tags = "缅怀致敬管理")
 @RestController
 @RequestMapping("cms/mourn")
 public class MournController {

+ 12 - 1
gis_cms/src/main/java/com/gis/cms/controller/NewsController.java

@@ -12,6 +12,7 @@ import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.Valid;
 
@@ -19,7 +20,7 @@ import javax.validation.Valid;
  * Created by owen on 2021/6/24 0008 9:54
  */
 @Slf4j
-@Api(tags = "知识管理")
+@Api(tags = "学习园地管理")
 @RestController
 @RequestMapping("cms/news")
 public class NewsController  {
@@ -83,4 +84,14 @@ public class NewsController  {
     public Result updateDisplay(@PathVariable Long id, @PathVariable Integer display) {
         return entityService.updateDisplay(id, display);
     }
+
+
+
+
+    @WebControllerLog(description = "知识管理-富文本上传")
+    @ApiOperation(value = "富文本上传", notes = "类型, file:文件, video:视频, img:图片; 视频、文件使用原名存储(中文转拼音),相同名称会覆盖")
+    @PostMapping("upload/{type}")
+    public Result upload(MultipartFile file, @PathVariable String type) {
+        return entityService.upload(file, type);
+    }
 }

+ 1 - 1
gis_cms/src/main/java/com/gis/cms/controller/QuestionGroupController.java

@@ -35,7 +35,7 @@ public class QuestionGroupController  {
     @ApiOperation("题组管理-列表")
     @PostMapping("list")
     public Result<QuestionGroupEntity> search(@Valid @RequestBody StatusPageDataDto param) {
-        return entityService.search(param, 1);
+        return entityService.search(param, null);
     }
 
     @WebControllerLog(description = "题组管理-新增/修改", addDb = true)

+ 26 - 0
gis_cms/src/main/java/com/gis/cms/controller/WebController.java

@@ -1,5 +1,7 @@
 package com.gis.cms.controller;
 
+import com.gis.admin.entity.dto.PasswordDto;
+import com.gis.admin.entity.dto.ResetPasswordDto;
 import com.gis.cms.entity.dto.NewsPageDataDto;
 import com.gis.admin.entity.dto.RegisterDto;
 import com.gis.cms.entity.dto.StatusPageDataDto;
@@ -135,6 +137,15 @@ public class WebController {
         return mournService.search(param, 1);
     }
 
+
+    @WebControllerLog(description = "门户网站-拜祭访问量")
+    @ApiOperation("拜祭访问量")
+    @GetMapping("mourn/visit/{id}")
+    public Result mournVisit(@PathVariable Long id){
+        mournService.addVisit(id);
+        return Result.success();
+    }
+
     @WebControllerLog(description = "门户网站-悼念烈士留言")
     @ApiOperation("门户网站-悼念烈士留言")
     @GetMapping("mourn/comment/{martyrId}")
@@ -186,5 +197,20 @@ public class WebController {
 
     }
 
+    @WebControllerLog(description = "门户网站-找回密码", addDb = true)
+    @ApiOperation(value = "门户网站-找回密码", notes = "验证正确返回code, 否则为空对象")
+    @PostMapping("retrieve/password")
+    public Result retrievePassword(@RequestBody ResetPasswordDto param){
+        return sysUserService.retrievePassword(param);
+    }
+
+    @WebControllerLog(description = "门户网站-修改密码", addDb = true)
+    @ApiOperation("门户网站-修改密码")
+    @PostMapping("updatePwd")
+    public Result updatePwd(@Valid @RequestBody PasswordDto param) {
+        return sysUserService.updatePwdByWeb(param);
+
+    }
+
 
 }

+ 8 - 0
gis_cms/src/main/java/com/gis/cms/controller/WebManageController.java

@@ -1,5 +1,6 @@
 package com.gis.cms.controller;
 
+import com.gis.admin.entity.dto.UserDto;
 import com.gis.admin.entity.po.SysUserEntity;
 import com.gis.admin.service.SysUserService;
 import com.gis.cms.entity.po.QuestionGroupEntity;
@@ -122,4 +123,11 @@ public class WebManageController {
         return sysUserService.detail(id);
     }
 
+    @WebControllerLog(description = "用户管理-修改用户", addDb = true)
+    @ApiOperation("新增/修改用户信息")
+    @PostMapping("save")
+    public Result save(@Valid @RequestBody UserDto param) {
+        return sysUserService.saveEntity(param);
+    }
+
 }

+ 4 - 1
gis_cms/src/main/java/com/gis/cms/entity/dto/GoodsDto.java

@@ -24,7 +24,7 @@ public class GoodsDto {
     @ApiModelProperty(value = "类型, model:模型, img:图片, video:视频", required = true)
     private String type;
 
-    @ApiModelProperty(value = "缩略图url")
+    @ApiModelProperty(value = "缩略图url", notes = "修改前端控制")
     private String thumb;
 
     @ApiModelProperty(value = "文件地址")
@@ -47,6 +47,9 @@ public class GoodsDto {
     @ApiModelProperty(value = "是否展示,0:不展示,1:展示, 默认展示", required = true)
     private Integer display;
 
+    @ApiModelProperty(value = "封面图id")
+    private Long indexId;
+
 
 
 

+ 0 - 56
gis_cms/src/main/java/com/gis/cms/entity/dto/RegisterDto.java

@@ -1,56 +0,0 @@
-//package com.gis.entity.dto;
-//
-//import io.swagger.annotations.ApiModelProperty;
-//import lombok.Data;
-//import org.hibernate.validator.constraints.Length;
-//
-//import javax.validation.constraints.NotBlank;
-//import javax.validation.constraints.NotNull;
-//
-///**
-// * Created by owen on 2020/5/28 0028 16:36
-// * 游客注册
-// */
-//@Data
-//public class RegisterDto {
-//
-//    @NotBlank(message = "真实姓名不能为空")
-//    @ApiModelProperty(value = "真实姓名")
-//    private String realName;
-//
-//
-//    @NotBlank(message = "身份证号(军号)不能为空")
-//    @ApiModelProperty(value = "身份证号(军号)", required = true)
-//    private String userName;
-//
-//    @NotBlank(message = "昵称不能为空")
-//    @ApiModelProperty(value = "昵称")
-//    private String nickName;
-//
-//    @NotNull(message = "性别不能为空")
-//    @ApiModelProperty(value = "性别 0:男  1:女")
-//    private Integer sex;
-//
-//    @ApiModelProperty(value = "电话")
-//    private String phone;
-//
-////    @NotBlank(message = "单位不能为空")
-//    @ApiModelProperty(value = "单位")
-//    private String unit;
-//
-//    @ApiModelProperty(value = "地址")
-//    private String address;
-//
-//    @Length(min = 6,message = "长度不能小于6位")
-//    @Length(max = 12, message = "长度不能大于12位")
-//    @ApiModelProperty(value = "登录密码")
-//    private String password;
-//
-//    @Length(min = 6,message = "长度不能小于6位")
-//    @Length(max = 12, message = "长度不能大于12位")
-//    @ApiModelProperty(value = "确认密码")
-//    private String verifyPassword;
-//
-//
-//
-//}

+ 3 - 0
gis_cms/src/main/java/com/gis/cms/entity/po/GoodsEntity.java

@@ -50,4 +50,7 @@ public class GoodsEntity extends BaseEntity {
     @ApiModelProperty(value = "浏览量")
     private Integer visit;
 
+    @ApiModelProperty(value = "封面图id")
+    private Long indexId;
+
 }

+ 1 - 3
gis_cms/src/main/java/com/gis/cms/entity/po/QuestionAnswerEntity.java

@@ -1,7 +1,5 @@
 package com.gis.cms.entity.po;
 
-import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.annotation.JSONField;
 import com.gis.common.base.entity.po.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -25,7 +23,7 @@ public class QuestionAnswerEntity extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "答案" )
     private String answer;
 
-    @JSONField(serialize = false)
+//    @JSONField(serialize = false)
     @ApiModelProperty(value = "正确答案" )
     private String correct;
 

+ 5 - 1
gis_cms/src/main/java/com/gis/cms/mapper/MournMapper.java

@@ -9,6 +9,7 @@ import com.gis.cms.entity.po.MournEntity;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.SelectProvider;
+import org.apache.ibatis.annotations.Update;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -22,6 +23,9 @@ public interface MournMapper extends IBaseMapper<MournEntity, Long> {
 
     @Select("select a.*, b.unit, b.real_name, b.nick_name " +
             "from tb_mourn a left join sys_user b on b.id=a.user_id " +
-            "where a.is_delete = '0' and a.martyr_id=#{martyrId} and display=1")
+            "where a.is_delete = '0' and a.martyr_id=#{martyrId} and display=1 order by a.create_time desc")
     List<MournVo> findByMartyrIdMapper(Long martyrId);
+
+    @Update("update tb_mourn set visit = visit + 1 , update_time = NOW() where is_delete = 0  and id = #{id}")
+    void addVisit(Long id);
 }

+ 2 - 2
gis_cms/src/main/java/com/gis/cms/mapper/provider/BarrageProvider.java

@@ -27,8 +27,8 @@ public class BarrageProvider {
         if(!StringUtils.isAllBlank(searchKey)){
             searchKey = StringUtils.trim(searchKey);
             sql.append(" and (");
-            sql.append("  b.nick_name like '%").append(searchKey).append("%'");
-            sql.append(" or ( b.real_name like '%").append(searchKey).append("%' )");
+            sql.append("  a.content like '%").append(searchKey).append("%'");
+//            sql.append(" or ( b.real_name like '%").append(searchKey).append("%' )");
             sql.append(" )");
         }
 

+ 2 - 0
gis_cms/src/main/java/com/gis/cms/service/MournService.java

@@ -27,4 +27,6 @@ public interface MournService extends IBaseService<MournEntity, Long> {
     Result updateDisplay(Long id, Integer display);
 
     Result mournComment(Long martyrId);
+
+    void addVisit(Long id);
 }

+ 3 - 0
gis_cms/src/main/java/com/gis/cms/service/NewsService.java

@@ -7,6 +7,7 @@ import com.gis.cms.entity.dto.NewsPageDataDto;
 import com.gis.cms.entity.po.NewsEntity;
 import com.gis.common.base.service.IBaseService;
 import com.gis.common.util.Result;
+import org.springframework.web.multipart.MultipartFile;
 
 
 /**
@@ -32,4 +33,6 @@ public interface NewsService extends IBaseService<NewsEntity, Long> {
     Result updateDisplay(Long id, Integer display);
 
     void addVisit(Long id);
+
+    Result upload(MultipartFile file, String type);
 }

+ 34 - 21
gis_cms/src/main/java/com/gis/cms/service/impl/GoodsServiceImpl.java

@@ -94,32 +94,35 @@ public class GoodsServiceImpl extends IBaseServiceImpl<GoodsEntity, Long> implem
         if (StringUtils.isNotBlank(fileIds)) {
             Long moduleId = entity.getId();
             fileService.addModuleIdToFile(fileIds, moduleId, TypeCode.MODULE_GOODS);
-
-            // 设置初始封面
-            setIndex(fileIds, moduleId);
         }
 
-        return Result.success(entity);
-    }
 
-    /**
-     * 设置首张图片
-     * @param fileIds 文件id
-     * @param moduleId 模块id
-     */
-    private void setIndex(String fileIds, Long moduleId){
-        List<FileEntity> entities = fileService.findIndexByModule(moduleId, TypeCode.MODULE_GOODS);
-        if (entities.size() == 0) {
-            // 初始页面不存在,设置第一张为初始页面
-            String[] split = fileIds.split(",");
-            Long indexId = Long.valueOf(split[0]);
-            fileService.indexEnabled(indexId);
-            // 设置缩略图
-            FileEntity fileEntity = fileService.findById(indexId);
-            setThumbByIndex(moduleId, fileEntity.getFilePath());
+        // 设置初始封面
+        Long indexId = param.getIndexId();
+        if (indexId != null){
+            setIndex(indexId, TypeCode.MODULE_GOODS, entity);
         }
+        return Result.success(entity);
     }
 
+//    /**
+//     * 设置首张图片
+//     * @param fileIds 文件id
+//     * @param moduleId 模块id
+//     */
+//    private void setIndex(String fileIds, Long moduleId){
+//        List<FileEntity> entities = fileService.findIndexByModule(moduleId, TypeCode.MODULE_GOODS);
+//        if (entities.size() == 0) {
+//            // 初始页面不存在,设置第一张为初始页面
+//            String[] split = fileIds.split(",");
+//            Long indexId = Long.valueOf(split[0]);
+//            fileService.indexEnabled(indexId);
+//            // 设置缩略图
+//            FileEntity fileEntity = fileService.findById(indexId);
+//            setThumbByIndex(moduleId, fileEntity.getFilePath());
+//        }
+//    }
+
     @Override
     public Result remove(Long id) {
         GoodsEntity entity = this.findById(id);
@@ -162,10 +165,20 @@ public class GoodsServiceImpl extends IBaseServiceImpl<GoodsEntity, Long> implem
         return Result.success();
     }
 
+    private void setIndex(Long fileId, String module, GoodsEntity entity) {
+        Long goodId = entity.getId();
+        fileService.indexDisable(goodId, module);
+        fileService.indexEnabled(fileId);
+
+        // 设置缩略图
+//        setThumbByIndex(goodId, entity.getFilePath());
+
+    }
+
     /**
      * 将封面图更新为缩略图
      */
-    public void setThumbByIndex(Long goodId, String thumb){
+    private void setThumbByIndex(Long goodId, String thumb){
         GoodsEntity entity = this.findById(goodId);
         entity.setThumb(thumb);
         entity.setUpdateTime(LocalDateTime.now());

+ 3 - 3
gis_cms/src/main/java/com/gis/cms/service/impl/MartyrServiceImpl.java

@@ -41,9 +41,9 @@ public class MartyrServiceImpl extends IBaseServiceImpl<MartyrEntity, Long> impl
     @Autowired
     private MartyrMapper entityMapper;
 
-
-    @Resource
-    public HttpServletRequest request;
+//
+//    @Resource
+//    public HttpServletRequest request;
 
     @Autowired
     FileService fileService;

+ 5 - 0
gis_cms/src/main/java/com/gis/cms/service/impl/MournServiceImpl.java

@@ -64,6 +64,11 @@ public class MournServiceImpl extends IBaseServiceImpl<MournEntity, Long> implem
         return Result.success(list);
     }
 
+    @Override
+    public void addVisit(Long id) {
+        entityMapper.addVisit(id);
+    }
+
 
     @Override
     public Result saveEntity(MournDto param) {

+ 51 - 2
gis_cms/src/main/java/com/gis/cms/service/impl/NewsServiceImpl.java

@@ -1,5 +1,7 @@
 package com.gis.cms.service.impl;
 
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileUtil;
 import com.gis.cms.entity.dto.AuditDto;
 import com.gis.cms.entity.dto.NewsDto;
 import com.gis.cms.entity.dto.NewsPageDataDto;
@@ -13,6 +15,7 @@ import com.gis.common.base.mapper.IBaseMapper;
 import com.gis.common.base.service.impl.IBaseServiceImpl;
 import com.gis.common.constant.MsgCode;
 import com.gis.common.constant.TypeCode;
+import com.gis.common.util.RegexUtil;
 import com.gis.common.util.Result;
 import com.gis.cms.service.FileService;
 import com.gis.cms.service.NewsService;
@@ -22,11 +25,14 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 import tk.mybatis.mapper.entity.Condition;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.time.LocalDateTime;
+import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 
 
@@ -74,8 +80,8 @@ public class NewsServiceImpl extends IBaseServiceImpl<NewsEntity, Long> implemen
         String searchKey = param.getSearchKey();
         if (StringUtils.isNotBlank(searchKey)) {
             searchKey = StringUtils.trim(searchKey);
-            condition.and().orLike("name", "%" + searchKey + "%")
-                    .orLike("description", "%" + searchKey + "%");
+            condition.and().orLike("name", "%" + searchKey + "%");
+//                    .orLike("description", "%" + searchKey + "%");
         }
         String startTime = param.getStartTime();
         String endTime = param.getEndTime();
@@ -141,6 +147,49 @@ public class NewsServiceImpl extends IBaseServiceImpl<NewsEntity, Long> implemen
         entityMapper.addVisit(id);
     }
 
+    @Override
+    public Result upload(MultipartFile file, String type) {
+
+        // 检查非法文件上传
+        boolean checkFile = fileUtils.checkFile(file);
+        if (!checkFile) {
+            return Result.failure("上传文件格式有误, 请重新上传");
+        }
+
+        // 判断后缀名,需要包含这以下四个
+        String [] typeCheck = {"video","file","img"};
+        if (!Arrays.asList(typeCheck).contains(type)) {
+            return Result.failure("非法类型");
+        }
+
+        // 文件目录
+        String newName = "";
+        String fileName = file.getOriginalFilename();
+        String suffix = StringUtils.substringAfterLast(fileName, ".");
+
+
+        // 视频、模型使用原名存储(中文转拼音)
+        if ("video".equals(type) || "file".equals(type)) {
+            newName = RegexUtil.getPinyinName(fileName);
+        } else {
+            newName = DateUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmssSSS");
+            newName = newName + "." + suffix;
+        }
+        String urlPath = "/news/" + type + "/" + newName;
+        String savePath = configConstant.serverBasePath + urlPath;
+        log.info("保存文件地址:{}", savePath);
+
+        try {
+            FileUtil.writeFromStream(file.getInputStream(), savePath);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        HashMap<String, Object> result = new HashMap<>();
+        result.put("fileName", fileName);
+        result.put("filePath", urlPath);
+        return Result.success(result);
+    }
+
 
     private void updateStatus(Long id, Integer status){
         NewsEntity entity = this.findById(id);

+ 2 - 2
gis_cms/src/main/java/com/gis/cms/service/impl/QuestionGroupServiceImpl.java

@@ -84,7 +84,7 @@ public class QuestionGroupServiceImpl extends IBaseServiceImpl<QuestionGroupEnti
         }
         condition.orderBy("createTime").desc();
 
-        PageInfo<QuestionGroupEntity> pageInfo = this.findAll(condition, param.getPageNum(), param.getPageSize());
+        PageInfo<QuestionGroupEntity> pageInfo = findAll(condition, param.getPageNum(), param.getPageSize());
         List<QuestionGroupEntity> list = pageInfo.getList();
 
         List<QuestionGroupEntity> result = new ArrayList<>();
@@ -170,7 +170,7 @@ public class QuestionGroupServiceImpl extends IBaseServiceImpl<QuestionGroupEnti
         QuestionGroupEntity entity = null;
         if (id == null) {
             entity = new QuestionGroupEntity();
-            entity.setDisplay(1);
+//            entity.setDisplay(1);
             entity.setName(param.getName());
             entity.setUserName(getTokenUserName());
             this.save(entity);

+ 14 - 0
gis_common/src/main/java/com/gis/common/base/entity/dto/UserPageDateDto.java

@@ -0,0 +1,14 @@
+package com.gis.common.base.entity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by owen on 2021/8/19 0019 20:36
+ */
+@Data
+public class UserPageDateDto extends PageDateDto {
+
+    @ApiModelProperty(value = "角色id")
+    private Long roleId;
+}

+ 3 - 0
gis_common/src/main/java/com/gis/common/constant/MsgCode.java

@@ -16,4 +16,7 @@ public class MsgCode {
 
     /** 状态非法*/
     public static final Integer e3004 = 3004;
+
+    /** 验证码失效*/
+    public static final Integer e3005 = 3005;
 }

+ 107 - 0
gis_common/src/main/java/com/gis/common/util/Base64Converter.java

@@ -0,0 +1,107 @@
+package com.gis.common.util;
+
+import org.junit.Test;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Base64;
+
+/**
+ * Created by Hb_zzZ on 2020/4/17.
+ */
+public class Base64Converter {
+
+    final static Base64.Encoder encoder = Base64.getEncoder();
+    final static Base64.Decoder decoder = Base64.getDecoder();
+
+    /**
+     * 给字符串加密
+     * @param text
+     * @return
+     */
+    public static String encode(String text) {
+        byte[] textByte = new byte[0];
+        try {
+            textByte = text.getBytes("UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        String encodedText = encoder.encodeToString(textByte);
+        return encodedText;
+    }
+
+    /**
+     * 将加密后的字符串进行解密
+     * @param encodedText
+     * @return
+     */
+    public static String decode(String encodedText) {
+        String text = null;
+        try {
+            text = new String(decoder.decode(encodedText), "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        return text;
+    }
+
+    /**
+     * 根据逻辑截取加密后的密码
+     * @param text
+     * @return
+     */
+    public static String subText(String text){
+        //去掉前8位字符串
+        text = text.substring(8);
+        //去掉后8位字符串
+        text = text.substring(0, text.length() - 8);
+        //最后两个字符串换到前面,并且去掉剩下的后8位字符串
+        String result = text.substring(text.length() - 2) + text.substring(0, text.length() - 10);
+        return result;
+    }
+
+    public static void main(String[] args) throws UnsupportedEncodingException {
+
+//        String username = "Miracle Luna";
+//        String password = "AUPhhlhkExMTExMTExMQ==tGC1irnLMTLF9V7HLh";
+        String password = "1UxELRpIExMTExcWG627AcMTQBIN2mog";
+
+        password = password.substring(8);
+        System.out.println(password);
+        password = password.substring(0, password.length() - 8);
+        System.out.println(password);
+        String key = password.substring(password.length() - 2) + password.substring(0, password.length() - 10);
+        System.out.println(key);
+
+
+        // 加密
+//        System.out.println("====  [加密后] 用户名/密码  =====");
+//        System.out.println(Base64Converter.encode(username));
+//        System.out.println(Base64Converter.encode(password));
+
+        // 解密
+        System.out.println("\n====  [解密后] 用户名/密码  =====");
+//        System.out.println(Base64Converter.decode(Base64Converter.encode(username)));
+        System.out.println(Base64Converter.decode(key));
+    }
+
+
+    @Test
+    public void test(){
+        String password = "1UxELRpIExMTExcWG627AcMTQBIN2mog";
+        System.out.println(decodePassword(password));
+    }
+
+
+    /**
+     *
+     *
+     * 将加密后的字符串进行解密
+     * @param ciphertext 密文
+     * @return 明文
+     */
+    public static String decodePassword(String ciphertext){
+        String key = subText(ciphertext);
+        return decode(key);
+
+    }
+}

+ 2 - 0
gis_common/src/main/java/com/gis/common/util/RedisUtil.java

@@ -46,6 +46,8 @@ public class RedisUtil {
         }
     }
 
+
+
     /**
      * 普通缓存放入
      *