Browse Source

wxz本地暂存

dev_shibei_match
wxz 4 years ago
parent
commit
34ff292b02
  1. 13
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
  2. 10
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmettduck/form/TDuckDetailFormDTO.java
  3. 9
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmettduck/result/PermissionValidateResultDTO.java
  4. 47
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/EpmetTDuckController.java
  5. 9
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/QuestionnaireService.java
  6. 10
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmettduck/PrUserProjectService.java
  7. 7
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmettduck/impl/PrUserProjectServiceImpl.java
  8. 128
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/QuestionnaireServiceImpl.java

13
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java

@ -543,4 +543,17 @@ public class RedisKeys {
public static String getGridInfoKey(String gridId) { public static String getGridInfoKey(String gridId) {
return rootPrefix.concat("gov:grid:").concat(gridId); return rootPrefix.concat("gov:grid:").concat(gridId);
} }
/**
* @description 调查问卷accessKey
*
* @param userId
* @param qKey
* @return
* @author wxz
* @date 2021.09.23 17:38:37
*/
public static String getQuestionnaireAccessKey(String userId, String qKey) {
return rootPrefix.concat("questionnaire:accesskey:").concat(userId).concat(":").concat(qKey);
}
} }

10
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmettduck/form/TDuckDetailFormDTO.java

@ -17,15 +17,23 @@ public class TDuckDetailFormDTO implements Serializable {
private static final long serialVersionUID = 3793280475377993346L; private static final long serialVersionUID = 3793280475377993346L;
public interface TDuckDetailForm{} public interface TDuckDetailForm{}
public interface PermissionValidate{}
/** /**
* 项目key * 项目key
*/ */
@NotBlank(message = "项目key不能为空",groups = TDuckDetailForm.class) @NotBlank(message = "项目key不能为空",groups = { TDuckDetailForm.class, PermissionValidate.class })
private String key; private String key;
/** /**
* 是否显示类型 * 是否显示类型
*/ */
@NotNull(message = "是否显示类型不能为空",groups = TDuckDetailForm.class) @NotNull(message = "是否显示类型不能为空",groups = TDuckDetailForm.class)
private Boolean displayType; private Boolean displayType;
/** 当前操作人所在的组织的类型(grid:网格,agency:单位) */
@NotBlank(message = "当前操作人所在的Org类型不能为空",groups = { PermissionValidate.class })
private String orgType;
/** 当前操作人所在的组织的ID(当orgType为grid的时候必填,为agency的时候留空) */
private String orgId;
} }

9
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmettduck/result/PermissionValidateResultDTO.java

@ -0,0 +1,9 @@
package com.epmet.dataaggre.dto.epmettduck.result;
import lombok.Data;
@Data
public class PermissionValidateResultDTO {
private Boolean permitted;
private String accessKey;
}

47
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/EpmetTDuckController.java

@ -1,6 +1,10 @@
package com.epmet.dataaggre.controller; package com.epmet.dataaggre.controller;
import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.exception.ValidateException;
import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.commons.tools.validator.ValidatorUtils;
@ -9,14 +13,15 @@ import com.epmet.dataaggre.dto.epmettduck.form.*;
import com.epmet.dataaggre.dto.epmettduck.result.*; import com.epmet.dataaggre.dto.epmettduck.result.*;
import com.epmet.dataaggre.entity.epmettduck.PrUserProjectEntity; import com.epmet.dataaggre.entity.epmettduck.PrUserProjectEntity;
import com.epmet.dataaggre.entity.epmettduck.PrUserProjectItemEntity; import com.epmet.dataaggre.entity.epmettduck.PrUserProjectItemEntity;
import com.epmet.dataaggre.service.QuestionnaireService;
import com.epmet.dataaggre.service.epmettduck.PrUserProjectItemService; import com.epmet.dataaggre.service.epmettduck.PrUserProjectItemService;
import com.epmet.dataaggre.service.epmettduck.PrUserProjectService; import com.epmet.dataaggre.service.epmettduck.PrUserProjectService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody; import sun.tools.jstat.Token;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import java.util.List; import java.util.List;
/** /**
@ -31,6 +36,8 @@ public class EpmetTDuckController {
private PrUserProjectService prUserProjectService; private PrUserProjectService prUserProjectService;
@Autowired @Autowired
private PrUserProjectItemService projectItemService; private PrUserProjectItemService projectItemService;
@Autowired
private QuestionnaireService questionnaireService;
/** /**
@ -142,4 +149,36 @@ public class EpmetTDuckController {
public Result<RedPointResultDTO> redPoint(@LoginUser TokenDto tokenDto) { public Result<RedPointResultDTO> redPoint(@LoginUser TokenDto tokenDto) {
return new Result<RedPointResultDTO>().ok(prUserProjectService.redPoint(tokenDto)); return new Result<RedPointResultDTO>().ok(prUserProjectService.redPoint(tokenDto));
} }
/**
* @description 校验权限并且获取accesskey
*
* @param input
* @return
* @author wxz
* @date 2021.09.23 15:13:53
*/
@PostMapping("/permission-validate")
public Result<PermissionValidateResultDTO> permissionValidate(@RequestBody TDuckDetailFormDTO input, @LoginUser TokenDto loginUserInfo, @RequestHeader("customerId") String customerId) {
ValidatorUtils.validateEntity(input, TDuckDetailFormDTO.PermissionValidate.class);
// 所用端的类型:gov:工作端,resi居民端
String app = loginUserInfo.getApp();
String orgId = input.getOrgId();
String projectKey = input.getKey();
String userId = loginUserInfo.getUserId();
PermissionValidateResultDTO r = null;
if (AppClientConstant.APP_RESI.equals(app)) {
if (StringUtils.isBlank(orgId)) {
// 居民端,orgId是网格id,必填
throw new ValidateException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode(), "缺少orgId参数");
}
r = questionnaireService.resiPermissionValidate(projectKey, userId, orgId);
} else if (AppClientConstant.APP_GOV.equals(app)) {
// 工作端
r = questionnaireService.govPermissionValidate(projectKey, userId, customerId);
}
return new Result<PermissionValidateResultDTO>().ok(r);
}
} }

9
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/QuestionnaireService.java

@ -0,0 +1,9 @@
package com.epmet.dataaggre.service;
import com.epmet.dataaggre.dto.epmettduck.result.PermissionValidateResultDTO;
public interface QuestionnaireService {
PermissionValidateResultDTO resiPermissionValidate(String projectKey, String userId, String gridId);
PermissionValidateResultDTO govPermissionValidate(String projectKey, String staffId, String customerId);
}

10
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmettduck/PrUserProjectService.java

@ -174,4 +174,14 @@ public interface PrUserProjectService extends BaseService<PrUserProjectEntity> {
* @Date 2021/9/23 10:05 * @Date 2021/9/23 10:05
*/ */
RedPointResultDTO redPoint(TokenDto tokenDto); RedPointResultDTO redPoint(TokenDto tokenDto);
/**
* @description 根据key查询问卷
*
* @param key
* @return
* @author wxz
* @date 2021.09.23 22:25:57
*/
PrUserProjectEntity getProjectEntityBykey(String key);
} }

7
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmettduck/impl/PrUserProjectServiceImpl.java

@ -706,4 +706,11 @@ public class PrUserProjectServiceImpl extends BaseServiceImpl<PrUserProjectDao,
} }
return result; return result;
} }
@Override
public PrUserProjectEntity getProjectEntityBykey(String key) {
LambdaQueryWrapper<PrUserProjectEntity> query = new LambdaQueryWrapper<>();
query.eq(PrUserProjectEntity::getKey, key);
return baseDao.selectOne(query);
}
} }

128
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/QuestionnaireServiceImpl.java

@ -0,0 +1,128 @@
package com.epmet.dataaggre.service.impl;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.dto.form.IdAndNameDTO;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dataaggre.dto.epmettduck.result.PermissionValidateResultDTO;
import com.epmet.dataaggre.entity.epmettduck.PrUserProjectEntity;
import com.epmet.dataaggre.service.QuestionnaireService;
import com.epmet.dataaggre.service.epmettduck.PrPublishRangeService;
import com.epmet.dataaggre.service.epmettduck.PrUserProjectService;
import com.epmet.dto.CustomerGridDTO;
import com.epmet.dto.form.CustomerGridFormDTO;
import com.epmet.feign.GovOrgOpenFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.UUID;
@Service
public class QuestionnaireServiceImpl implements QuestionnaireService, ResultDataResolver {
@Autowired
private PrUserProjectService prUserProjectService;
@Autowired
private PrPublishRangeService prPublishRangeService;
@Autowired
private GovOrgOpenFeignClient govOrgOpenFeignClient;
@Autowired
private RedisUtils redisUtils;
@Autowired
private CustomerStaffRedis customerStaffRedis;
/**
* @description 居民端调查问卷权限校验
*
* @param projectKey
* @param userId
* @param gridId
* @return
* @author wxz
* @date 2021.09.23 17:45:25
*/
public PermissionValidateResultDTO resiPermissionValidate(String projectKey, String userId, String gridId) {
PrUserProjectEntity projectEntity = prUserProjectService.getProjectEntityBykey(projectKey);
if (!AppClientConstant.APP_RESI.equals(projectEntity.getClient())) {
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(),
String.format("【调查问卷详情权限校验】该调查问卷发布端为[%s],当前用户为[%s]", projectEntity.getClient(), AppClientConstant.APP_RESI));
}
CustomerGridFormDTO form = new CustomerGridFormDTO();
form.setGridId(gridId);
Result<CustomerGridDTO> gridInfoResult = govOrgOpenFeignClient.getGridBaseInfoByGridId(form);
CustomerGridDTO gridInfo = getResultDataOrThrowsException(gridInfoResult, ServiceConstant.GOV_ORG_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "【调查问卷】校验访问权限,查询网格信息失败");
// 网格父级ID列表:网格ID(拼接起来,冒号分割)
String gridIdPath = gridInfo.getPids().concat(":").concat(gridInfo.getId());
List<String> rangeList = prPublishRangeService.getRangeOrgList(projectKey);
PermissionValidateResultDTO r = new PermissionValidateResultDTO();
for (String range : rangeList) {
if (gridIdPath.contains(range)) {
r.setPermitted(true);
r.setAccessKey(generateQuestionnaireAccessKey(userId, projectKey));
return r;
}
}
r.setPermitted(false);
return r;
}
/**
* @description 生成调查问卷accessKey
*
* @param userId
* @param qKey
* @return
* @author wxz
* @date 2021.09.23 17:43:50
*/
private String generateQuestionnaireAccessKey(String userId, String qKey) {
String accessKey = UUID.randomUUID().toString();
redisUtils.set(RedisKeys.getQuestionnaireAccessKey(userId, qKey), accessKey);
return accessKey;
}
@Override
public PermissionValidateResultDTO govPermissionValidate(String projectKey, String staffId, String customerId) {
CustomerStaffInfoCacheResult staffInfo = customerStaffRedis.getStaffInfo(customerId, staffId);
PermissionValidateResultDTO r = null;
//if ("agency".equals(staffInfo.getFromOrgType())) {
// // 来自agency
//
//} else if ("grid".equals(staffInfo.getFromOrgType())) {
// List<IdAndNameDTO> belongGridList = staffInfo.getGridList();
//
//} else if ("dept".equals(staffInfo.getFromOrgType())) {
//
//}
String agencyId = staffInfo.getAgencyId();
List<IdAndNameDTO> gridList = staffInfo.getGridList();
for (IdAndNameDTO gridIdAndName : gridList) {
}
return r;
}
//private CustomerGridDTO getGridInfoById(String gridId) {
// CustomerGridFormDTO gridInfoForm = new CustomerGridFormDTO();
// gridInfoForm.setGridId(gridId);
// Result<CustomerGridDTO> result = govOrgOpenFeignClient.getGridBaseInfoByGridId(gridInfoForm);
// return getResultDataOrThrowsException(result, ServiceConstant.GOV_ORG_SERVER, EpmetErrorCode.SERVER_ERROR.getCode(), "【调查问卷】获取网格信息失败");
//}
}
Loading…
Cancel
Save