Procházet zdrojové kódy

修改bug,房源列表,禁用的房源登录提示

houweiyu před 5 roky
rodič
revize
e6a0fa0259

+ 0 - 3
fdkanfang-dao/src/main/java/com/fdkanfang/dao/backend/HouseMapper.java

@@ -28,9 +28,6 @@ public interface HouseMapper extends IBaseMapper<HouseEntity, Long> {
     @Select(value = "select * from tb_house where scene_code = #{sceneCode}")
     HouseEntity findBySceneCode(String sceneCode);
 
-    @SelectProvider(type = HouseProvider.class, method = "findBySearchKey")
-    List<HouseResponse> findBySearchKey(String searchKey, Long userId, Long handlerId);
-
     @SelectProvider(type = HouseProvider.class, method = "findBySearchKeyForEditOrUploader")
     List<HouseResponse> findBySearchKeyForEditOrUploader(String searchKey, Long handlerId, Long uploadId);
 }

+ 15 - 47
fdkanfang-dao/src/main/java/com/fdkanfang/dao/backend/provider/HouseProvider.java

@@ -2,10 +2,9 @@ package com.fdkanfang.dao.backend.provider;
 
 import cn.hutool.core.util.StrUtil;
 import lombok.extern.log4j.Log4j2;
-import org.apache.commons.lang3.StringUtils;
 
 /**
- * Created by Hb_zzZ on 2020/3/3.
+ * Created by Abner on 2020/7/23.
  */
 @Log4j2
 public class HouseProvider {
@@ -45,46 +44,8 @@ public class HouseProvider {
         return sql.toString();
     }
 
-
-    /**
-     * 只给edit、upload权限用户获取列表使用
-     *
-     * 不是很通用
-     */
-    public String findBySearchKey(String searchKey, Long userId, Long handlerId){
-        StringBuffer sql = new StringBuffer(
-                "SELECT z.id, z.num, z.address, z.district_name, z.unit_type, z.area, z.floor, z.orientation, z.status, " +
-                        "z.requirement, z.handler, z.create_time, z.update_time, z.web_site, z.scene_code, " +
-                        "u.real_name as upload_name, c.real_name as handler_name FROM " +
-                        "tb_house z left join tb_user u ON z.user_id = u.id left join tb_user c ON z.handler = c.id where z.rec_status = 'A' ");
-        if(StrUtil.isNotBlank(searchKey)){
-            sql.append(" and (");
-            sql.append("  z.district_name like '%").append(searchKey).append("%'");
-            sql.append(" or z.num like '%").append(searchKey).append("%'");
-            sql.append(" or u.real_name like '%").append(searchKey).append("%'");
-            sql.append(" or c.real_name like '%").append(searchKey).append("%'");
-            sql.append( ")");
-        }
-
-        if (userId != null) {
-            sql.append(" and z.user_id = ").append(userId);
-        }
-
-        // or会影响搜索结果, 不加rec_status, 会过滤不了
-        if (handlerId != null) {
-//            sql.append(" or z.handler = ").append(handlerId);
-            sql.append(" or ( z.handler = ").append(handlerId).append(" AND z.rec_status = 'A' ) ");
-        }
-
-        sql.append(" ORDER BY z.create_time DESC");
-        log.info("sql: {}", sql.toString());
-        return sql.toString();
-    }
-
     /**
-     * 只给edit、upload权限用户获取列表使用
-     *
-     * 不是很通用
+     *通用获取房源列表
      */
     public String findBySearchKeyForEditOrUploader(String searchKey, Long handlerId , Long uploadId){
         StringBuffer sql = new StringBuffer(
@@ -103,12 +64,19 @@ public class HouseProvider {
             sql.append(" or house.num like '%").append(searchKey).append("%'");
             sql.append( ")");
         }
-        if (null != handlerId) {
-            sql.append(" and house.handler = ").append(handlerId);
-        }
-
-        if (null != uploadId) {
-            sql.append(" and house.user_id = ").append(uploadId);
+        if (null != handlerId || null != uploadId) {
+            if(null != handlerId || null == uploadId){
+                //只有编辑权限
+                sql.append(" and house.handler = ").append(handlerId);
+            }else if(null == handlerId || null != uploadId){
+                //只有上传权限,没有编辑权限
+                sql.append(" and house.user_id = ").append(uploadId);
+            }else{
+                //同时具有上传权限和编辑权限
+                sql.append(" and (");
+                sql.append(" house.user_id = ").append(uploadId);
+                sql.append(" or house.handler = ").append(handlerId);
+            }
         }
         sql.append(" ORDER BY house.create_time DESC");
         log.info("sql: {}", sql.toString());

+ 1 - 1
fdkanfang-domain/src/main/java/com/fdkanfang/domain/backend/HouseEntity.java

@@ -73,7 +73,7 @@ public class HouseEntity extends BaseModel implements Serializable {
      * 5:模型计算失败
      */
     @Column(length = 2)
-    private int status;
+    private Integer status;
 
     // 制作要求
     @Column

+ 0 - 4
fdkanfang-service/src/main/java/com/fdkanfang/service/backend/HouseService2.java

@@ -22,8 +22,4 @@ public interface HouseService2 extends IBaseMapperService<HouseEntity, Long> {
 
     HouseEntity findBySceneCode(String sceneCode);
 
-    /**
-     * 这个方法只给有edit、upload使用
-     */
-    List<HouseResponse> findBySearchKey(PageDto param, Long userId, Long handlerId);
 }

+ 0 - 5
fdkanfang-service/src/main/java/com/fdkanfang/service/backend/impl/HouseServiceImpl2.java

@@ -56,9 +56,4 @@ public class HouseServiceImpl2 extends BaseMapperServiceImpl<HouseEntity, Long>
         return entityMapper.findBySceneCode(sceneCode);
     }
 
-    @Override
-    public List<HouseResponse> findBySearchKey(PageDto param, Long userId, Long handlerId) {
-        PageHelper.startPage(param.getPageNum(), param.getPageSize());
-        return entityMapper.findBySearchKey(param.getSearchKey(), userId, handlerId);
-    }
 }

+ 12 - 0
fdkanfang-web/src/main/java/com/fdkanfang/web/backend/ExceptionController.java

@@ -1,13 +1,17 @@
 package com.fdkanfang.web.backend;
 
+import com.fdkanfang.common.exception.CommonBaseException;
 import com.fdkanfang.common.util.R;
+import com.fdkanfang.common.util.Result;
 import lombok.extern.log4j.Log4j2;
 import org.apache.shiro.ShiroException;
 import org.apache.shiro.authz.UnauthorizedException;
 import org.springframework.dao.DuplicateKeyException;
 import org.springframework.http.HttpStatus;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 import org.springframework.web.servlet.NoHandlerFoundException;
@@ -46,6 +50,14 @@ public class ExceptionController {
         return new R(getStatus(request).value(), ex.getMessage());
     }
 
+    @ResponseBody
+    @ExceptionHandler(CommonBaseException.class)
+    @ResponseStatus(HttpStatus.OK)
+    public Result runtimeExceptionHandler(HttpServletRequest request, CommonBaseException e) {
+        log.error(request.getRequestURI() + ":" + e.getMsg());
+        return Result.failure(StringUtils.isEmpty(e.getCode()) ? Result.CODE_FAILURE : e.getCode(), e.getMsg());
+    }
+
 
     private HttpStatus getStatus(HttpServletRequest request) {
         Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");

+ 53 - 41
fdkanfang-web/src/main/java/com/fdkanfang/web/backend/HouseController.java

@@ -95,27 +95,46 @@ public class HouseController extends BaseController {
         List<String> userRoles = userUtils.getRolesByToken(token);
         UserEntity user  = userUtils.getUserByToken(token);
         Long userId = user.getId();
-
-                PageInfo<HouseResponse> page = null;
-        if (userRoles.contains("admin")) {
+        PageInfo<HouseResponse> page = null;
+        if(CollectionUtils.isEmpty(userRoles)){
+            log.info("用户权限为空,无法获取房源列表");
+            throw new CommonBaseException(ResultCodeEnum.D101 , "权限不足");
+        }
+        if(userRoles.size() == 3){
+            //管理员获取全部房源列表
             page =  new PageInfo<>(houseService2.findBySearchKeyForEditOrUploader(param, null, null));
-        }  else if (userRoles.contains("edit")){
-
-            if (userRoles.size() == 2) {
-                log.info("有edit、upload权限");
-                // 有edit、upload
-//                page =  new PageInfo<>(houseService2.findAllBySearchKey(param, userId, userId));
+        }else if(userRoles.size() == 2){
+            if(userRoles.contains("edit") && userRoles.contains("upload")){
+                //同时拥有编辑和上传权限
+                page =  new PageInfo<>(houseService2.findBySearchKeyForEditOrUploader(param, userId ,userId));
+            }else if(userRoles.contains("edit") && !userRoles.contains("upload")){
+                //只拥有编辑权限
+                page =  new PageInfo<>(houseService2.findBySearchKeyForEditOrUploader(param, userId ,null));
+            }else if (!userRoles.contains("edit") && userRoles.contains("upload")){
+                //只拥有上传权限
                 page =  new PageInfo<>(houseService2.findBySearchKeyForEditOrUploader(param, null ,userId));
-
-            } else {
-                // 只有edit
-                log.info("只有edit权限");
-                page =  new PageInfo<>(houseService2.findBySearchKeyForEditOrUploader(param,  userId , null));
-
+            }else{
+                //理论上不存在此分支情况
+                log.error("上传的权限超出了当前有效权限范围");
+                throw new CommonBaseException(ResultCodeEnum.D101 , "存在无效权限");
             }
 
-        } else {
-            page =  new PageInfo<>(houseService2.findAllBySearchKey(param, userId, null));
+        }else if(userRoles.size() == 1){
+            if(userRoles.contains("edit")){
+                //只拥有编辑权限
+                page =  new PageInfo<>(houseService2.findBySearchKeyForEditOrUploader(param, userId ,null));
+            }else if (userRoles.contains("upload")){
+                //只拥有上传权限
+                page =  new PageInfo<>(houseService2.findBySearchKeyForEditOrUploader(param, null ,userId));
+            }else{
+                //只有管理用户的权限,理论不应该单独给这种角色
+                log.warn("用户[{}]只单独给了用户管理权限" ,userId);
+                throw new CommonBaseException(ResultCodeEnum.D101 , "当前权限不能查看数据");
+            }
+        }else{
+            log.info("用户[{}]的权限超过3个,默认给拉取所有房源");
+            //默认获取全部
+            page =  new PageInfo<>(houseService2.findBySearchKeyForEditOrUploader(param, null, null));
         }
 
         return new R(2000, page);
@@ -413,17 +432,21 @@ public class HouseController extends BaseController {
     @RequiresRoles(value = {"admin", "edit", "upload"}, logical = Logical.OR)
     @ApiOperation("删除房源(软删除)")
     @GetMapping("removes/{ids}")
+    @Transactional(rollbackFor = Exception.class)
     public R removes(@PathVariable String ids){
 
         List<String> userRoles = userUtils.getRolesByToken(getToken());
-        UserEntity user  = userUtils.getUserByToken(getToken());
-        Long loginUserId = user.getId();
-
-
         String roleKey = null;
-        // 只有一个权限时
         if (userRoles.size() == 1) {
+            // 只有一个权限时
             roleKey = (String)userRoles.get(0);
+            if (!"upload".equals(roleKey)) {
+                log.warn("只有一个权限的非上传者角色,不能删除房源");
+                throw new CommonBaseException(ResultCodeEnum.D101 , "权限不足,不能删除房源");
+            }
+        }else if(userRoles.size() != 3){
+            log.warn("多于一个权限的角色,非管理员,不能删除房源");
+            throw new CommonBaseException(ResultCodeEnum.D101 , "权限不足,不能删除房源");
         }
 
         String[] split = ids.split(",");
@@ -434,31 +457,20 @@ public class HouseController extends BaseController {
                 return new R(MsgCode.e_COMMON_3002,"没有存在的房源");
             }
 
+            if(null != houseEntity.getStatus() && (houseEntity.getStatus().compareTo(0) == 0) || houseEntity.getStatus().compareTo(3) == 0){
+                log.error("只有upload, 房源id!=0,房源计算中不能删除");
+                throw new CommonBaseException(ResultCodeEnum.D101 , "房源计算中不能删除");
 
-
-            if ("upload".equals(roleKey)) {
-                if(null != houseEntity.getAuditResult() && houseEntity.getAuditResult().compareTo(1) == 0){
-                    log.error("只有upload, 房源id!=0,审批通过的房源不能删除");
-                    return new R(MsgCode.e_COMMON_3002,"审批通过的房源不能删除");
-                }
-            }
-
-            if ("edit".equals(roleKey)) {
-                log.error("只有edit,没有权限删除房源");
-                return new R(MsgCode.e_COMMON_3002,"没有权限删除房源");
-            }
-
-            if (!loginUserId.equals(houseEntity.getUserId()) && !userRoles.contains("admin")) {
-                log.error("userId: {}, loginUserId: {}", houseEntity.getUserId(), loginUserId);
-                log.error("用户不相等时, edit,upload不能删除他人房源");
-                return new R(MsgCode.e_COMMON_3002,"没有权限删除房源");
             }
 
             houseEntity.setRecStatus("I");
             houseEntity.setUpdateTime(new Date());
-            houseService2.update(houseEntity);
+            int update = houseService2.update(houseEntity);
+            if(update != 1){
+                log.error( "删除房源失败[{}]" , houseEntity.getId());
+                throw new CommonBaseException(ResultCodeEnum.D101 , "删除房源失败");
+            }
         }
-
         return new R(MsgCode.SUCCESS_CODE, MsgCode.msg_SUCCESS);
     }
 

+ 20 - 2
fdkanfang-web/src/main/java/com/fdkanfang/web/backend/IndexController.java

@@ -26,6 +26,8 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -129,11 +131,27 @@ public class IndexController extends BaseController{
         //解析返回结果
         JSONObject res = JSONObject.parseObject(kankanResult);
         log.info("四维看看返回登录数据:{}" , res.toJSONString());
-        return parseResult(res , "登录失败" , adminRegisterVo);
+
+        Result result =  parseResult(res , "登录失败" , adminRegisterVo);
+        if(result.getCode() == 0){
+            // 1.获取用户
+            UserEntity user = userService2.findByPhone(adminRegisterVo.getPhoneNum());
+            if (user == null){
+                log.error("用户不存在: {}", adminRegisterVo);
+                throw new CommonBaseException(ResultCodeEnum.D3012);
+            }
+            // 检查账号是否启用
+            if (user.getStatus() != 0) {
+                log.error("账户已停用,不能登录: {}", adminRegisterVo.getPhoneNum());
+                throw new CommonBaseException(ResultCodeEnum.D101 , "用户已经停用");
+            }
+        }
+        return result;
     }
 
 
-    private Result parseResult(JSONObject res , String defaultFailMsg ,UserLoginVo adminRegisterVo){
+    @Transactional(propagation = Propagation.REQUIRES_NEW,rollbackFor = Exception.class)
+    public Result parseResult(JSONObject res , String defaultFailMsg ,UserLoginVo adminRegisterVo){
         if(null != res){
             int code = -10;
             if(res.containsKey("code")){