Browse Source

Merge branch 'develop' of http://git.elinkit.com.cn:7070/r/epmet-cloud into develop

dev_shibei_match
jianjun 4 years ago
parent
commit
f52f25c90e
  1. 5
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/CustomerStaffInfoCacheResult.java
  2. 13
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
  3. 17
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/constant/TDuckConstant.java
  4. 9
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmettduck/form/TDuckDetailFormDTO.java
  5. 7
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmettduck/form/TDuckListFormDTO.java
  6. 1
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmettduck/result/CascaderDTO.java
  7. 9
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmettduck/result/PermissionValidateResultDTO.java
  8. 18
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmettduck/result/TDuckListResultDTO.java
  9. 46
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/EpmetTDuckController.java
  10. 2
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmettduck/PrUserProjectDao.java
  11. 7
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmettduck/PrUserProjectResultDao.java
  12. 2
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmettduck/PrVistRecordDao.java
  13. 9
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/QuestionnaireService.java
  14. 10
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmettduck/PrPublishRangeService.java
  15. 10
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmettduck/PrUserProjectService.java
  16. 7
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmettduck/impl/PrPublishRangeServiceImpl.java
  17. 113
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmettduck/impl/PrUserProjectServiceImpl.java
  18. 193
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/QuestionnaireServiceImpl.java
  19. 19
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmettduck/PrUserProjectDao.xml
  20. 5
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmettduck/PrUserProjectResultDao.xml
  21. 6
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmettduck/PrVistRecordDao.xml
  22. 1
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerGridServiceImpl.java

5
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/CustomerStaffInfoCacheResult.java

@ -62,6 +62,11 @@ public class CustomerStaffInfoCacheResult implements Serializable {
*/ */
private String headPhoto; private String headPhoto;
/**
* 工作人员是从哪中组织添加的 组织Id
*/
private String fromOrgId;
/** /**
* 工作人员是从哪中组织类型添加的 3个值agencygriddept * 工作人员是从哪中组织类型添加的 3个值agencygriddept
* @see com.epmet.commons.tools.enums.OrgTypeEnum * @see com.epmet.commons.tools.enums.OrgTypeEnum

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

@ -544,4 +544,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);
}
} }

17
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/constant/TDuckConstant.java

@ -0,0 +1,17 @@
package com.epmet.dataaggre.constant;
/**
* @Author zxc
* @DateTime 2021/9/23 4:06 下午
* @DESC
*/
public interface TDuckConstant {
String CLIENT_GOV = "gov";
String CLIENT_RESI = "resi";
String ORG_TYPE_AGENCY = "agency";
String ORG_TYPE_GRID = "grid";
String ORG_TYPE_DEPT = "dept";
}

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

@ -17,15 +17,22 @@ 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:单位) */
private String orgType;
/** 当前操作人所在的组织的ID(当orgType为grid的时候必填,为agency的时候留空) */
private String orgId;
} }

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

@ -30,11 +30,14 @@ public class TDuckListFormDTO implements Serializable {
@NotNull(message = "pageSize不能为空",groups = TDuckListForm.class) @NotNull(message = "pageSize不能为空",groups = TDuckListForm.class)
private Integer pageSize; private Integer pageSize;
@NotBlank(message = "orgIds不能为空",groups = TDuckListForm.class) private String orgId;
private String orgIds;
private String orgType;
@NotBlank(message = "client不能为空",groups = TDuckListForm.class) @NotBlank(message = "client不能为空",groups = TDuckListForm.class)
private String client; private String client;
private String userId; private String userId;
private String customerId;
} }

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

@ -35,5 +35,6 @@ public class CascaderDTO implements Serializable {
* 全路径名字 * 全路径名字
*/ */
private List<String> labels; private List<String> labels;
public String pathName;
} }

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;
}

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

@ -1,6 +1,7 @@
package com.epmet.dataaggre.dto.epmettduck.result; package com.epmet.dataaggre.dto.epmettduck.result;
import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.NumConstant;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
@ -74,11 +75,26 @@ public class TDuckListResultDTO implements Serializable {
*/ */
private Boolean fillStatus; private Boolean fillStatus;
/**
* 是否还能填写问卷true不能false
*/
private Boolean isFillQuestion;
/** /**
* 回收状态 0:未回收1已回收 * 回收状态 0:未回收1已回收
*/ */
private Integer recycled; private Integer recycled;
/**
* 组织名
*/
private String orgName;
private String createdBy;
@JsonIgnore
private Integer isEveryoneWriteOnceUid;
public TDuckListResultDTO() { public TDuckListResultDTO() {
this.customerId = ""; this.customerId = "";
this.key = ""; this.key = "";
@ -92,5 +108,7 @@ public class TDuckListResultDTO implements Serializable {
this.client = ""; this.client = "";
this.createdTime = ""; this.createdTime = "";
this.fillStatus = false; this.fillStatus = false;
this.isFillQuestion = true;
this.orgName = "";
} }
} }

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

@ -1,6 +1,9 @@
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.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 +12,12 @@ 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 org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
/** /**
@ -31,6 +32,8 @@ public class EpmetTDuckController {
private PrUserProjectService prUserProjectService; private PrUserProjectService prUserProjectService;
@Autowired @Autowired
private PrUserProjectItemService projectItemService; private PrUserProjectItemService projectItemService;
@Autowired
private QuestionnaireService questionnaireService;
/** /**
@ -81,6 +84,7 @@ public class EpmetTDuckController {
public Result<List<TDuckListResultDTO>> queryProjectList(@RequestBody TDuckListFormDTO formDTO,@LoginUser TokenDto tokenDto){ public Result<List<TDuckListResultDTO>> queryProjectList(@RequestBody TDuckListFormDTO formDTO,@LoginUser TokenDto tokenDto){
ValidatorUtils.validateEntity(formDTO,TDuckListFormDTO.TDuckListForm.class); ValidatorUtils.validateEntity(formDTO,TDuckListFormDTO.TDuckListForm.class);
formDTO.setUserId(tokenDto.getUserId()); formDTO.setUserId(tokenDto.getUserId());
formDTO.setCustomerId(tokenDto.getCustomerId());
return new Result<List<TDuckListResultDTO>>().ok(prUserProjectService.queryProjectList(formDTO)); return new Result<List<TDuckListResultDTO>>().ok(prUserProjectService.queryProjectList(formDTO));
} }
@ -142,4 +146,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) || !"grid".equals(input.getOrgType())) {
// 居民端,orgId是网格id,必填
throw new ValidateException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode(), "【调查问卷】校验访问权限-居民端 orgId不能为空,且orgType需要为[grid]");
}
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);
}
} }

2
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmettduck/PrUserProjectDao.java

@ -55,7 +55,7 @@ public interface PrUserProjectDao extends BaseDao<PrUserProjectEntity> {
* @author zxc * @author zxc
* @date 2021/9/17 2:16 下午 * @date 2021/9/17 2:16 下午
*/ */
List<String> selectProjectKey(@Param("orgIds")String orgIds); List<String> selectProjectKey(@Param("orgIds")List<String> orgIds);
/** /**
* @Description 根据keys查询project * @Description 根据keys查询project

7
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmettduck/PrUserProjectResultDao.java

@ -3,6 +3,9 @@ package com.epmet.dataaggre.dao.epmettduck;
import com.epmet.commons.mybatis.dao.BaseDao; import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dataaggre.entity.epmettduck.PrUserProjectResultEntity; import com.epmet.dataaggre.entity.epmettduck.PrUserProjectResultEntity;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* 项目表单项 * 项目表单项
@ -12,5 +15,7 @@ import org.apache.ibatis.annotations.Mapper;
*/ */
@Mapper @Mapper
public interface PrUserProjectResultDao extends BaseDao<PrUserProjectResultEntity> { public interface PrUserProjectResultDao extends BaseDao<PrUserProjectResultEntity> {
List<String> selectFillRecordByUserId(@Param("userId")String userId);
} }

2
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmettduck/PrVistRecordDao.java

@ -16,6 +16,6 @@ import java.util.List;
@Mapper @Mapper
public interface PrVistRecordDao extends BaseDao<PrVistRecordEntity> { public interface PrVistRecordDao extends BaseDao<PrVistRecordEntity> {
List<String> selectVisitRecordByUserId(@Param("userId")String userId);
} }

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/PrPublishRangeService.java

@ -102,6 +102,16 @@ public interface PrPublishRangeService extends BaseService<PrPublishRangeEntity>
*/ */
List<String> getRangeOrgList(String projectKey); List<String> getRangeOrgList(String projectKey);
/**
* @description 使用projectKey查询发布范围entity
*
* @param projectKey
* @return
* @author wxz
* @date 2021.09.23 23:04:23
*/
List<PrPublishRangeEntity> getPublishRangeEntity(String projectKey);
/** /**
* @Description 获取组织范围内的问卷 * @Description 获取组织范围内的问卷
* @Param orgList * @Param orgList

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/PrPublishRangeServiceImpl.java

@ -125,6 +125,13 @@ public class PrPublishRangeServiceImpl extends BaseServiceImpl<PrPublishRangeDao
return list.stream().map(PrPublishRangeEntity::getOrgId).collect(Collectors.toList()); return list.stream().map(PrPublishRangeEntity::getOrgId).collect(Collectors.toList());
} }
@Override
public List<PrPublishRangeEntity> getPublishRangeEntity(String projectKey) {
LambdaQueryWrapper<PrPublishRangeEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(PrPublishRangeEntity::getProjectKey, projectKey);
return baseDao.selectList(wrapper);
}
/** /**
* @param orgList * @param orgList
* @Description 获取组织范围内的问卷 * @Description 获取组织范围内的问卷

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

@ -27,11 +27,18 @@ import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant; import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.form.IdAndNameDTO;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dataaggre.constant.DataSourceConstant; import com.epmet.dataaggre.constant.DataSourceConstant;
import com.epmet.dataaggre.constant.TDuckConstant;
import com.epmet.dataaggre.dao.epmettduck.PrUserProjectDao; import com.epmet.dataaggre.dao.epmettduck.PrUserProjectDao;
import com.epmet.dataaggre.dao.epmettduck.PrUserProjectResultDao;
import com.epmet.dataaggre.dao.epmettduck.PrVistRecordDao; import com.epmet.dataaggre.dao.epmettduck.PrVistRecordDao;
import com.epmet.dataaggre.dto.epmettduck.PrPublishRangeDTO; import com.epmet.dataaggre.dto.epmettduck.PrPublishRangeDTO;
import com.epmet.dataaggre.dto.epmettduck.PrUserProjectDTO; import com.epmet.dataaggre.dto.epmettduck.PrUserProjectDTO;
@ -49,6 +56,9 @@ import com.epmet.dataaggre.service.epmettduck.PrPublishRangeService;
import com.epmet.dataaggre.service.epmettduck.PrUserProjectService; import com.epmet.dataaggre.service.epmettduck.PrUserProjectService;
import com.epmet.dataaggre.service.epmettduck.PrVistRecordService; import com.epmet.dataaggre.service.epmettduck.PrVistRecordService;
import com.epmet.dataaggre.service.govorg.GovOrgService; import com.epmet.dataaggre.service.govorg.GovOrgService;
import com.epmet.dto.CustomerGridDTO;
import com.epmet.dto.form.CustomerGridFormDTO;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -76,13 +86,15 @@ import java.util.stream.Stream;
public class PrUserProjectServiceImpl extends BaseServiceImpl<PrUserProjectDao, PrUserProjectEntity> implements PrUserProjectService { public class PrUserProjectServiceImpl extends BaseServiceImpl<PrUserProjectDao, PrUserProjectEntity> implements PrUserProjectService {
@Autowired @Autowired
private PrVistRecordDao visitRecordDao; private PrUserProjectResultDao prUserProjectResultDao;
@Resource @Resource
private PrPublishRangeService prPublishRangeService; private PrPublishRangeService prPublishRangeService;
@Resource @Resource
private GovOrgService govOrgService; private GovOrgService govOrgService;
@Resource @Resource
private PrVistRecordService prVistRecordService; private PrVistRecordService prVistRecordService;
@Autowired
private GovOrgOpenFeignClient govOrgOpenFeignClient;
@Override @Override
public PageData<PrUserProjectDTO> page(Map<String, Object> params) { public PageData<PrUserProjectDTO> page(Map<String, Object> params) {
@ -157,26 +169,109 @@ public class PrUserProjectServiceImpl extends BaseServiceImpl<PrUserProjectDao,
*/ */
@Override @Override
public List<TDuckListResultDTO> queryProjectList(TDuckListFormDTO formDTO) { public List<TDuckListResultDTO> queryProjectList(TDuckListFormDTO formDTO) {
List<String> projectKeys = baseDao.selectProjectKey(formDTO.getOrgIds()); List<String> orgIds = new ArrayList<>();
// 工作端不需要传orgId
if (formDTO.getClient().equals(TDuckConstant.CLIENT_GOV)){
// 根据 客户ID 和 人ID 从redis获取信息
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getUserId());
String pids = staffInfo.getAgencyPIds();
String agencyId = staffInfo.getAgencyId();
// 来源于 部门
if (staffInfo.getFromOrgType().equals(TDuckConstant.ORG_TYPE_DEPT)){
List<IdAndNameDTO> deptList = staffInfo.getDeptList();
if (CollectionUtils.isEmpty(deptList)){
return new ArrayList<>();
}
orgIds = joint(pids,agencyId,deptList);
// 来源于 网格
}else if (staffInfo.getFromOrgType().equals(TDuckConstant.ORG_TYPE_GRID)){
List<IdAndNameDTO> gridList = staffInfo.getGridList();
if (CollectionUtils.isEmpty(gridList)){
return new ArrayList<>();
}
orgIds = joint(pids,agencyId,gridList);
}else {
String selfOrg = pids + ":" + agencyId;
orgIds.add(selfOrg);
}
}else {
CustomerGridFormDTO customerGridFormDTO = new CustomerGridFormDTO();
customerGridFormDTO.setGridId(formDTO.getOrgId());
// 查询网格信息
Result<CustomerGridDTO> gridResult = govOrgOpenFeignClient.getGridBaseInfoByGridId(customerGridFormDTO);
if (!gridResult.success()){
throw new RenException("查询网格信息失败了...");
}
CustomerGridDTO data = gridResult.getData();
String oneOrg = data.getPids() + ":" + data.getId();
orgIds.add(oneOrg);
}
// 根据orgIds查询 问卷调查的key
List<String> projectKeys = baseDao.selectProjectKey(orgIds);
if (CollectionUtils.isEmpty(projectKeys)){ if (CollectionUtils.isEmpty(projectKeys)){
return new ArrayList<>(); return new ArrayList<>();
} }
PageInfo<TDuckListResultDTO> projectPageInfo = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize()).doSelectPageInfo(() -> baseDao.queryProjectList(projectKeys, formDTO.getStatus(), formDTO.getClient())); PageInfo<TDuckListResultDTO> projectPageInfo = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize()).doSelectPageInfo(() -> baseDao.queryProjectList(projectKeys, formDTO.getStatus(), formDTO.getClient()));
List<TDuckListResultDTO> result = projectPageInfo.getList(); List<TDuckListResultDTO> result = projectPageInfo.getList();
List<String> records = visitRecordDao.selectVisitRecordByUserId(formDTO.getUserId()); // 查询此人已填写过的问卷 并赋值已填写字段
List<String> records = prUserProjectResultDao.selectFillRecordByUserId(formDTO.getUserId());
if (!CollectionUtils.isEmpty(records)){ if (!CollectionUtils.isEmpty(records)){
for (String r : records) { for (String r : records) {
for (TDuckListResultDTO t : result) { for (TDuckListResultDTO t : result) {
if (t.getIsEveryoneWriteOnceUid() == NumConstant.ONE && r.equals(t.getKey())){
t.setIsFillQuestion(false);
}
if (r.equals(t.getKey())){ if (r.equals(t.getKey())){
t.setFillStatus(true); t.setFillStatus(true);
continue;
} }
} }
} }
} }
//赋值 orgName
result.forEach(r -> {
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), r.getCreatedBy());
String orgName = "";
if (null != staffInfo){
if (staffInfo.getFromOrgType().equals(TDuckConstant.ORG_TYPE_AGENCY)){
orgName = staffInfo.getAgencyName();
}else if (staffInfo.getFromOrgType().equals(TDuckConstant.ORG_TYPE_GRID)){
for (IdAndNameDTO g : staffInfo.getGridList()) {
if (g.getId().equals(staffInfo.getFromOrgId())){
orgName = g.getName();
continue;
}
}
}else if (staffInfo.getFromOrgType().equals(TDuckConstant.ORG_TYPE_DEPT)){
for (IdAndNameDTO d : staffInfo.getDeptList()) {
if (d.getId().equals(staffInfo.getFromOrgId())){
orgName = d.getName();
continue;
}
}
}
}
r.setOrgName(orgName);
});
return result; return result;
} }
/**
* @Description orgIds拼接
* @Param pids
* @Param agencyId
* @Param list
* @author zxc
* @date 2021/9/23 4:48 下午
*/
public List<String> joint(String pids, String agencyId, List<IdAndNameDTO> list){
List<String> orgIds = new ArrayList<>();
list.forEach(l -> {
String oneOrg = pids + ":" + agencyId + ":" + l.getId();
orgIds.add(oneOrg);
});
return orgIds;
}
/** /**
* 分析报告 * 分析报告
* *
@ -385,7 +480,8 @@ public class PrUserProjectServiceImpl extends BaseServiceImpl<PrUserProjectDao,
int totalCount = 0; int totalCount = 0;
Map<String, Integer> resMap = new HashMap<>(); Map<String, Integer> resMap = new HashMap<>();
for (PrUserProjectResultEntity res : resultList) { for (PrUserProjectResultEntity res : resultList) {
JSONObject originalData = JSON.parseObject(res.getOriginalData()); //级联组件,用processdata特殊处理下
JSONObject originalData = JSON.parseObject(res.getProcessData());
if(originalData.containsKey(key)){ if(originalData.containsKey(key)){
List<CascaderDTO> dtoList = JSON.parseArray(originalData.get(key).toString(), CascaderDTO.class); List<CascaderDTO> dtoList = JSON.parseArray(originalData.get(key).toString(), CascaderDTO.class);
if(CollectionUtils.isEmpty(dtoList)){ if(CollectionUtils.isEmpty(dtoList)){
@ -706,4 +802,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);
}
} }

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

@ -0,0 +1,193 @@
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.PrPublishRangeEntity;
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 lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@Service
@Slf4j
public class QuestionnaireServiceImpl implements QuestionnaireService, ResultDataResolver {
/** 调查问卷有效期 15min */
public static final long QUESTIONNAIRE_EXPIRE_SECONDS = 15 * 60;
@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 project = prUserProjectService.getProjectEntityBykey(projectKey);
if (project == null || !AppClientConstant.APP_RESI.equals(project.getClient())) {
// 工作端只能看到发布到居民端的
log.warn("【调查问卷】居民端无法查看发布到工作端的调查问卷,staffId:{}, projectKey:{}", userId, projectKey);
return generateValidateResult(userId, projectKey, false);
}
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<PrPublishRangeEntity> publishRangeEntity = prPublishRangeService.getPublishRangeEntity(projectKey);
PermissionValidateResultDTO r = new PermissionValidateResultDTO();
for (PrPublishRangeEntity rangeEntity : publishRangeEntity) {
if (gridIdPath.contains(rangeEntity.getOrgIds())) {
return generateValidateResult(userId, projectKey, true);
}
}
r.setPermitted(false);
return r;
}
@Override
public PermissionValidateResultDTO govPermissionValidate(String projectKey, String staffId, String customerId) {
PrUserProjectEntity project = prUserProjectService.getProjectEntityBykey(projectKey);
if (project == null || !"gov".equals(project.getClient())) {
// 工作端只能看到发布到工作端的
log.warn("【调查问卷】工作端无法查看发布到居民端的调查问卷,staffId:{}, projectKey:{}", staffId, projectKey);
return generateValidateResult(staffId, projectKey, false);
}
List<String> gridRangeOrgIds = new ArrayList<>();
List<String> agencyRangeOrgIds = new ArrayList<>();
List<String> deptRangeOrgIds = new ArrayList<>();
// 将发布范围分别放到3个不同的列表中
List<PrPublishRangeEntity> publishRangeEntitys = prPublishRangeService.getPublishRangeEntity(projectKey);
publishRangeEntitys.forEach(rangeEntity -> {
if ("grid".equals(rangeEntity.getOrgType())) {
gridRangeOrgIds.add(rangeEntity.getOrgIds());
} else if ("agency".equals(rangeEntity.getOrgType())) {
agencyRangeOrgIds.add(rangeEntity.getOrgIds());
} else if ("dept".equals(rangeEntity.getOrgType())) {
deptRangeOrgIds.add(rangeEntity.getOrgIds());
} else {
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), String.format("【调查问卷】未知的发布范围类型:%s", rangeEntity.getOrgType()));
}
});
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();
String agencyPIds = staffInfo.getAgencyPIds();
// 网格范围内的权限判断
List<IdAndNameDTO> staffGridList = staffInfo.getGridList();
for (IdAndNameDTO gridIdAndName : staffGridList) {
// 工作人员所属的 父orgId路径:网格id
String staffGridIdPath = (StringUtils.isEmpty(agencyPIds) ? "" : agencyPIds.concat(":")).concat(agencyId).concat(":").concat(gridIdAndName.getId());
for (String gridRangeOrgId : gridRangeOrgIds) {
if (staffGridIdPath.contains(gridRangeOrgId)) {
r = generateValidateResult(staffId, projectKey, true);
return r;
}
}
}
// dept范围内的权限判断
List<IdAndNameDTO> staffDeptList = staffInfo.getDeptList();
for (IdAndNameDTO deptIdAndName : staffDeptList) {
// 工作人员所属的 父orgId路径:网格id
String staffDeptIdPath = (StringUtils.isEmpty(agencyPIds) ? "" : agencyPIds.concat(":")).concat(agencyId).concat(":").concat(deptIdAndName.getId());
for (String deptRangeOrgIdPath : deptRangeOrgIds) {
if (staffDeptIdPath.contains(deptRangeOrgIdPath)) {
r = generateValidateResult(staffId, projectKey, true);
return r;
}
}
}
// agency范围内的权限判断
String staffAgencyIdPath = (StringUtils.isEmpty(agencyPIds) ? "" : agencyPIds.concat(":")).concat(agencyId);
for (String agencyRangeOrgId : agencyRangeOrgIds) {
if (staffAgencyIdPath.contains(agencyRangeOrgId)) {
r = generateValidateResult(staffId, projectKey, true);
return r;
}
}
// 如果上述范围中都不能判断通过,那么返回一个不通过的结果给到前端
r = generateValidateResult(staffId, projectKey, false);
return r;
}
/**
* @description 生成权限允许的返回结果
*
* @param userId
* @param projectKey
* @param permitted 是否允许访问
* @return
* @author wxz
* @date 2021.09.23 23:19:17
*/
private PermissionValidateResultDTO generateValidateResult(String userId, String projectKey, Boolean permitted) {
PermissionValidateResultDTO d = new PermissionValidateResultDTO();
d.setPermitted(permitted);
if (permitted) {
String accessKey = UUID.randomUUID().toString().replace("-", "");
redisUtils.set(RedisKeys.getQuestionnaireAccessKey(userId, projectKey), accessKey, QUESTIONNAIRE_EXPIRE_SECONDS);
d.setAccessKey(accessKey);
}
return d;
}
}

19
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmettduck/PrUserProjectDao.xml

@ -73,21 +73,26 @@
DISTINCT project_key DISTINCT project_key
FROM pr_publish_range FROM pr_publish_range
WHERE del_flag = 0 WHERE del_flag = 0
AND #{orgIds} LIKE CONCAT(org_ids,'%') AND (
<foreach collection="orgIds" item="orgId" separator=" OR ">
#{orgId} LIKE CONCAT(org_ids,'%')
</foreach>
)
</select> </select>
<!-- 根据keys查询project --> <!-- 根据keys查询project -->
<select id="queryProjectList" resultType="com.epmet.dataaggre.dto.epmettduck.result.TDuckListResultDTO"> <select id="queryProjectList" resultType="com.epmet.dataaggre.dto.epmettduck.result.TDuckListResultDTO">
select * from pr_user_project select up.*,ps.is_everyone_write_once_uid from pr_user_project up
where del_flag = 0 LEFT JOIN pr_user_project_setting ps ON (ps.project_key = up.`key` AND ps.del_flag = 0)
AND status = #{status} where up.del_flag = 0
AND client = #{client} AND up.status = #{status}
AND `key` in ( AND up.client = #{client}
AND up.`key` in (
<foreach collection="keys" item="key" separator=","> <foreach collection="keys" item="key" separator=",">
#{key} #{key}
</foreach> </foreach>
) )
ORDER BY created_time DESC ORDER BY up.created_time DESC
</select> </select>
</mapper> </mapper>

5
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmettduck/PrUserProjectResultDao.xml

@ -3,4 +3,9 @@
<mapper namespace="com.epmet.dataaggre.dao.epmettduck.PrUserProjectResultDao"> <mapper namespace="com.epmet.dataaggre.dao.epmettduck.PrUserProjectResultDao">
<select id="selectFillRecordByUserId" resultType="java.lang.String">
SELECT DISTINCT project_key FROM pr_user_project_result
WHERE del_flag = 0
AND user_id = #{userId}
</select>
</mapper> </mapper>

6
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmettduck/PrVistRecordDao.xml

@ -3,10 +3,4 @@
<mapper namespace="com.epmet.dataaggre.dao.epmettduck.PrVistRecordDao"> <mapper namespace="com.epmet.dataaggre.dao.epmettduck.PrVistRecordDao">
<!-- 根据userId查询是否已填 -->
<select id="selectVisitRecordByUserId" resultType="java.lang.String">
SELECT project_key FROM pr_vist_record
WHERE del_flag = 0
AND user_id = #{userId}
</select>
</mapper> </mapper>

1
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerGridServiceImpl.java

@ -297,6 +297,7 @@ public class CustomerGridServiceImpl extends BaseServiceImpl<CustomerGridDao, Cu
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result deleteGrid(TokenDto tokenDto,DeleteGridFormDTO deleteGridFormDTO) { public Result deleteGrid(TokenDto tokenDto,DeleteGridFormDTO deleteGridFormDTO) {
redisUtils.delete(RedisKeys.getGridInfoKey(deleteGridFormDTO.getGridId()));
List<UserIdDTO> userIdDTOS = baseDao.selectUserIdByGrid(deleteGridFormDTO.getGridId()); List<UserIdDTO> userIdDTOS = baseDao.selectUserIdByGrid(deleteGridFormDTO.getGridId());
deleteGridFormDTO.setUserId(tokenDto.getUserId()); deleteGridFormDTO.setUserId(tokenDto.getUserId());
if (userIdDTOS.size()==0){ if (userIdDTOS.size()==0){

Loading…
Cancel
Save