fix(征求意见): 详情完善

This commit is contained in:
yjz
2023-12-05 14:46:02 +08:00
parent 3e6b549e06
commit 73b8de934a
6 changed files with 196 additions and 40 deletions
@@ -4,9 +4,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.common.aspect.annotation.Translation;
import com.jero.modules.activiti.process.fb.entity.ProcessFbConsultationList;
import com.jero.modules.activiti.process.fb.entity.ProcessFbStandardConsultation;
import com.jero.modules.laws.consultation.service.IConsultationService;
import com.jero.modules.laws.consultation.vo.ProcessFbConsultationListVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@@ -18,7 +18,6 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* @ClassName: ConsultationController
@@ -60,8 +59,10 @@ public class ConsultationController {
@ApiOperation(value="征求意见-详情", notes="征求意见-详情")
@GetMapping(value = "/queryDetailByBusinessId")
@Translation
public Result<List<ProcessFbConsultationList>> queryDetailByBusinessId(String businessId) {
return Result.OK(consultationService.queryDetailByBusinessId(businessId));
public Result<ProcessFbConsultationListVO> queryDetailByBusinessId(String businessId,
@ApiParam("当前页") @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@ApiParam("每页条数") @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
return Result.OK(consultationService.queryDetailByBusinessId(businessId, pageNo, pageSize));
}
/**
@@ -3,6 +3,7 @@ package com.jero.modules.laws.consultation.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.modules.activiti.process.fb.entity.ProcessFbConsultationList;
import com.jero.modules.activiti.process.fb.entity.ProcessFbStandardConsultation;
import com.jero.modules.laws.consultation.vo.ProcessFbConsultationListVO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -39,4 +40,13 @@ public interface IConsultationService {
* @param response
*/
void exportExcel(String businessId, HttpServletRequest request, HttpServletResponse response);
/**
* 征求意见-详情
* @param businessId
* @param pageNo
* @param pageSize
* @return
*/
ProcessFbConsultationListVO queryDetailByBusinessId(String businessId, Integer pageNo, Integer pageSize);
}
@@ -11,8 +11,11 @@ import com.jero.modules.activiti.process.fb.entity.ProcessFbStandardConsultation
import com.jero.modules.activiti.process.fb.service.IProcessFbConsultationListService;
import com.jero.modules.activiti.process.fb.service.IProcessFbStandardConsultationService;
import com.jero.modules.laws.consultation.service.IConsultationService;
import com.jero.modules.laws.consultation.vo.ProcessFbConsultationListVO;
import com.jero.modules.laws.standard.entity.LawsDomesticStandard;
import com.jero.modules.laws.standard.entity.LawsOverseasStandard;
import com.jero.modules.laws.standard.service.ILawsDomesticStandardService;
import com.jero.modules.laws.standard.service.ILawsOverseasStandardService;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.service.IOSSFileService;
import com.jero.modules.system.entity.SysDepart;
@@ -30,6 +33,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
@@ -48,17 +52,20 @@ public class ConsultationServiceImpl implements IConsultationService {
private final IProcessFbStandardConsultationService processFbStandardConsultationService;
private final IProcessFbConsultationListService processFbConsultationListService;
private final ILawsDomesticStandardService lawsDomesticStandardService;
private final ILawsOverseasStandardService lawsOverseasStandardService;
private final ISysDepartService sysDepartService;
private final IOSSFileService ossFileService;
public ConsultationServiceImpl(IProcessFbStandardConsultationService processFbStandardConsultationService,
IProcessFbConsultationListService processFbConsultationListService,
ILawsDomesticStandardService lawsDomesticStandardService,
ILawsOverseasStandardService lawsOverseasStandardService,
ISysDepartService sysDepartService,
IOSSFileService ossFileService) {
this.processFbStandardConsultationService = processFbStandardConsultationService;
this.processFbConsultationListService = processFbConsultationListService;
this.lawsDomesticStandardService = lawsDomesticStandardService;
this.lawsOverseasStandardService = lawsOverseasStandardService;
this.sysDepartService = sysDepartService;
this.ossFileService = ossFileService;
}
@@ -77,20 +84,33 @@ public class ConsultationServiceImpl implements IConsultationService {
.or().like(ProcessFbStandardConsultation::getStandardName, processFbStandardConsultation.getStandardNameNumber()));
}
IPage<ProcessFbStandardConsultation> page = processFbStandardConsultationService.page(new Page<>(pageNo, pageSize), queryWrapper);
List<ProcessFbStandardConsultation> records = page.getRecords();
fillProperty(records);
return page;
}
private void fillProperty(List<ProcessFbStandardConsultation> processFbStandardConsultations) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
for (ProcessFbStandardConsultation StandardConsultation : page.getRecords()) {
LawsDomesticStandard lawsDomesticStandard = lawsDomesticStandardService.getOne(new LambdaQueryWrapper<LawsDomesticStandard>()
.eq(LawsDomesticStandard::getStandardNumber, StandardConsultation.getStandardNumber()), false);
for (ProcessFbStandardConsultation StandardConsultation : processFbStandardConsultations) {
String standardName = StandardConsultation.getStandardName();
if (!Objects.isNull(lawsDomesticStandard) && StringUtils.isNotBlank(lawsDomesticStandard.getStandardName())){
// 国标
LawsDomesticStandard lawsDomesticStandard = lawsDomesticStandardService.getById(StandardConsultation.getStandardId());
// 海外
LawsOverseasStandard lawsOverseasStandard = lawsOverseasStandardService.getById(StandardConsultation.getStandardId());
if (!Objects.isNull(lawsDomesticStandard)){
standardName = lawsDomesticStandard.getStandardName();
StandardConsultation.setSource("1");
}else if (!Objects.isNull(lawsOverseasStandard)){
standardName = lawsOverseasStandard.getStandardName();
StandardConsultation.setSource("2");
}
StandardConsultation.setStandardNameNumber(StandardConsultation.getStandardNumber() + " " + standardName);
StandardConsultation.setConsultationPeriod(
dateFormat.format(StandardConsultation.getConsultationBeginDate()) + " ~ " +
dateFormat.format(StandardConsultation.getConsultationEndDate()));
}
return page;
}
@Override
@@ -98,6 +118,11 @@ public class ConsultationServiceImpl implements IConsultationService {
List<ProcessFbConsultationList> list = processFbConsultationListService.list(
new LambdaQueryWrapper<ProcessFbConsultationList>()
.eq(ProcessFbConsultationList::getBusinessId, businessId));
setProperty(list);
return list;
}
private void setProperty(List<ProcessFbConsultationList> list) {
// 提出部门
for (ProcessFbConsultationList consultationList : list) {
List<SysDepart> sysDeparts = sysDepartService.queryUserDeparts(consultationList.getDesignEngineerId());
@@ -112,7 +137,6 @@ public class ConsultationServiceImpl implements IConsultationService {
consultationList.setBasisFileName(fileList.stream().map(OSSFile::getFileName).collect(Collectors.joining(",")));
}
}
return list;
}
@Override
@@ -153,6 +177,22 @@ public class ConsultationServiceImpl implements IConsultationService {
}
}
@Override
public ProcessFbConsultationListVO queryDetailByBusinessId(String businessId, Integer pageNo, Integer pageSize) {
ProcessFbConsultationListVO processFbConsultationListVO = new ProcessFbConsultationListVO();
ProcessFbStandardConsultation processFbStandardConsultation = processFbStandardConsultationService.getById(businessId);
List<ProcessFbStandardConsultation> processFbStandardConsultations = new ArrayList<>();
processFbStandardConsultations.add(processFbStandardConsultation);
fillProperty(processFbStandardConsultations);
processFbConsultationListVO.setProcessFbStandardConsultation(processFbStandardConsultations.get(0));
LambdaQueryWrapper<ProcessFbConsultationList> queryWrapper = new LambdaQueryWrapper<ProcessFbConsultationList>()
.eq(ProcessFbConsultationList::getBusinessId, businessId);
IPage<ProcessFbConsultationList> page = processFbConsultationListService.page(new Page<>(pageNo, pageSize), queryWrapper);
setProperty(page.getRecords());
processFbConsultationListVO.setProcessFbConsultationList(page);
return processFbConsultationListVO;
}
private void setContent(List<ProcessFbConsultationList> processFbConsultationLists, XSSFSheet sheet, CellStyle cellStyle) {
for (int i = 0; i < processFbConsultationLists.size(); i++) {
int index = i + 2;
@@ -0,0 +1,27 @@
package com.jero.modules.laws.consultation.vo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.modules.activiti.process.fb.entity.ProcessFbConsultationList;
import com.jero.modules.activiti.process.fb.entity.ProcessFbStandardConsultation;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* @ClassName: ProcessFbConsultationListVO
* @Description:
* @Author: yjz
* @Date: 2023-12-05 11:33
* @Version: 1.0
**/
@Data
public class ProcessFbConsultationListVO {
/**标准征求意见*/
@Excel(name = "标准征求意见流程表", width = 15)
@ApiModelProperty(value = "标准征求意见流程表")
private ProcessFbStandardConsultation processFbStandardConsultation;
/**标准征求意见流程-征求意见列表表*/
@Excel(name = "标准征求意见流程-征求意见列表表", width = 15)
@ApiModelProperty(value = "标准征求意见流程-征求意见列表表")
private IPage<ProcessFbConsultationList> processFbConsultationList;
}
@@ -1,6 +1,7 @@
package com.jero.modules.laws.documenttool.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -43,7 +44,9 @@ import com.jero.modules.split.service.ISarFileSplitInfoService;
import com.jero.modules.split.service.ISarFileSplitMenuEOService;
import com.jero.modules.split.service.impl.FileSpiltService;
import com.jero.modules.sys.entity.LawsEnterpriseStandardLevel;
import com.jero.modules.sys.entity.LawsGrade;
import com.jero.modules.sys.service.ILawsEnterpriseStandardLevelService;
import com.jero.modules.sys.service.ILawsGradeService;
import com.jero.modules.system.entity.SysDict;
import com.jero.modules.system.entity.SysDictItem;
import com.jero.modules.system.entity.SysUser;
@@ -56,6 +59,7 @@ import com.jero.modules.tag.entity.LawsTag;
import com.jero.modules.tag.enums.LawsFieldTypeEnum;
import com.jero.modules.tag.enums.TableNameEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.ss.usermodel.*;
@@ -104,6 +108,7 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
private final ISysUserService sysUserService;
private final EnterpriseStandardAuthDeptService enterpriseStandardAuthDeptService;
private final ISysUserDepartService sysUserDepartService;
private final ILawsGradeService lawsGradeService;
private static final String INFO_ID = "info_id";
private static final String ID = "id";
private static final String IDS = "ids";
@@ -114,6 +119,7 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
private static final String INTERPRETATION_ARTICLES_LIST = "interpretationArticlesList";
private static final String MENU_ID = "menu_id";
private static final String CREATE_TIME = "create_time";
private static final String SPLIT_STATUS = "split_status";
public DocumentSplitServiceImpl(DocumentSplitMapper documentSplitMapper,
ISarFileSplitInfoService sarFileSplitInfoService,
LawsCommonMapper lawsCommonMapper,
@@ -128,7 +134,8 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
EnterpriseStandardAuthUserService enterpriseStandardAuthUserService,
ISysUserService sysUserService,
EnterpriseStandardAuthDeptService enterpriseStandardAuthDeptService,
ISysUserDepartService sysUserDepartService) {
ISysUserDepartService sysUserDepartService,
ILawsGradeService lawsGradeService) {
this.documentSplitMapper = documentSplitMapper;
this.sarFileSplitInfoService = sarFileSplitInfoService;
this.lawsCommonMapper = lawsCommonMapper;
@@ -144,12 +151,15 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
this.sysUserService = sysUserService;
this.enterpriseStandardAuthDeptService = enterpriseStandardAuthDeptService;
this.sysUserDepartService = sysUserDepartService;
this.lawsGradeService = lawsGradeService;
}
@Value("${jero.path.exportExcelTempPath}")
private String exportExcelTempPath;
@Value("${draftDepartName}")
private String draftDepartName;
@Value("#{'${adminRoleCode}'.split(',')}")
private List<String> adminRoleCodeList;
@Override
public IPage<DocumentSplitInfo> queryByPage(DocumentSplitInfo documentSplitInfo, Integer pageNo, Integer pageSize) {
@@ -351,6 +361,13 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
}
// 登陆人信息
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
// 管理员有所有企标的权限
List<String> roleIdList = Arrays.asList(sysUser.getRoleIds().split(","));
Collection<String> intersection = CollectionUtils.intersection(adminRoleCodeList, roleIdList);
if (!intersection.isEmpty()){
// 有权限
return;
}
// 登陆人所在部门
List<DepartIdModel> departIdModels = sysUserDepartService.queryDepartIdsOfUser(sysUser.getId());
List<String> departIds = departIdModels.stream().map(DepartIdModel::getKey).collect(Collectors.toList());
@@ -369,53 +386,98 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
authUserWrapper.eq(EnterpriseStandardAuthUser::getAuthUser, sysUser.getId());
authUserWrapper.ge(EnterpriseStandardAuthUser::getAuthExpireDate, date);
List<EnterpriseStandardAuthUser> authUserList = enterpriseStandardAuthUserService.list(authUserWrapper);
if (!authUserList.isEmpty()){
// 有权限
return;
}
// 查询授权部门-和临时授权部门
LambdaQueryWrapper<EnterpriseStandardAuthDept> authDeptWrapper = new LambdaQueryWrapper<>();
authDeptWrapper.eq(EnterpriseStandardAuthDept::getStandardId, id);
authDeptWrapper.in(CollUtil.isNotEmpty(departIds), EnterpriseStandardAuthDept::getAuthDept, departIds);
List<EnterpriseStandardAuthDept> authDeptList = enterpriseStandardAuthDeptService.list(authDeptWrapper);
if (!authDeptList.isEmpty()){
LambdaQueryWrapper<EnterpriseStandardAuthDept> tempAuthDeptWrapper = new LambdaQueryWrapper<>();
tempAuthDeptWrapper.eq(EnterpriseStandardAuthDept::getStandardId, id);
tempAuthDeptWrapper.in(CollUtil.isNotEmpty(departIds), EnterpriseStandardAuthDept::getAuthDept, departIds);
tempAuthDeptWrapper.isNotNull(EnterpriseStandardAuthDept::getAuthExpireDate);
tempAuthDeptWrapper.isNotNull(EnterpriseStandardAuthDept::getAuthDept);
List<EnterpriseStandardAuthDept> tempAuthDeptList = enterpriseStandardAuthDeptService.list(tempAuthDeptWrapper);
if (!tempAuthDeptList.isEmpty()){
// 有权限
return;
}
authDeptWrapper.ge(EnterpriseStandardAuthDept::getAuthExpireDate, date);
List<EnterpriseStandardAuthDept> authDeptExpireDateList = enterpriseStandardAuthDeptService.list(authDeptWrapper);
tempAuthDeptWrapper.ge(EnterpriseStandardAuthDept::getAuthExpireDate, date);
List<EnterpriseStandardAuthDept> authDeptExpireDateList = enterpriseStandardAuthDeptService.list(tempAuthDeptWrapper);
if (!authDeptExpireDateList.isEmpty()){
// 有权限
return;
}
// 查询授权部门
LambdaQueryWrapper<EnterpriseStandardAuthDept> authDeptWrapper = new LambdaQueryWrapper<>();
authDeptWrapper.eq(EnterpriseStandardAuthDept::getStandardId, id);
authDeptWrapper.isNull(EnterpriseStandardAuthDept::getAuthExpireDate);
List<EnterpriseStandardAuthDept> authDeptList = enterpriseStandardAuthDeptService.list(authDeptWrapper);
// 企标级别授权的部门
List<LawsEnterpriseStandardLevel> standardLevelList = lawsEnterpriseStandardLevelService.list();
List<String> levelDeptIds = standardLevelList.stream().map(LawsEnterpriseStandardLevel::getDeptId).collect(Collectors.toList());
LawsGrade one = lawsGradeService.getOne(new LambdaQueryWrapper<LawsGrade>().eq(LawsGrade::getLevel, 1), false);
LawsGrade two = lawsGradeService.getOne(new LambdaQueryWrapper<LawsGrade>().eq(LawsGrade::getLevel, 2), false);
List<String> levelOneDeptIds = standardLevelList.stream().filter(l -> l.getGradeId().equals(one.getId()))
.map(LawsEnterpriseStandardLevel::getDeptId).collect(Collectors.toList());
List<String> levelTwoDeptIds = standardLevelList.stream().filter(l -> l.getGradeId().equals(two.getId()))
.map(LawsEnterpriseStandardLevel::getDeptId).collect(Collectors.toList());
if (levelCheck(lawsEnterpriseStandard, departIds, levelDeptIds)) return;
Set<EnterpriseStandardAuthDept> curAuthSet = authDeptList.stream()
.filter(e -> e.getAuthDept() != null)
.filter(e -> CharSequenceUtil.isNotEmpty(e.getAuthDept()))
.filter(e -> e.getStandardId().equals(id))
.filter(e -> !e.getAuthDept().equals(lawsEnterpriseStandard.getMainDraftingUnit()))
.collect(Collectors.toSet());
// 临时权限
if (authUserList.stream().map(EnterpriseStandardAuthUser::getStandardId).collect(Collectors.toList()).contains(id)) {
// 有权限
return;
}
// 等级分类
String gradeClassification = lawsEnterpriseStandard.getGradeClassification();
// 创建人可以看
if (sysUser.getUsername().equals(lawsEnterpriseStandard.getCreateBy())) {
// 有权限
return;
}
// 全公司可以看
if ("1".equals(gradeClassification)) {
// 有权限
return;
}
// 授权部门
if (!curAuthSet.isEmpty()) {
// 如果授权部门不等于0
if (curAuthSet.stream().map(EnterpriseStandardAuthDept::getAuthDept).anyMatch(departIds::contains)) {
// 有权限
return;
}
} else {
// 企标等级分类级别可查看部门
if ("2".equals(gradeClassification)) {
if (levelOneDeptIds.stream().anyMatch(departIds::contains)) {
// 有权限
return;
}
}
if ("3".equals(gradeClassification)) {
if (levelTwoDeptIds.stream().anyMatch(departIds::contains)) {
// 有权限
return;
}
}
if ("4".equals(gradeClassification)) {
// 主起草部门有企标的查看权限
if (!departNames.isEmpty() && departNames.contains(lawsEnterpriseStandard.getMainDraftingUnit())) {
// 有权限
return;
}
}
}
// 无权限
noAccess();
}
}
private static boolean levelCheck(LawsEnterpriseStandard lawsEnterpriseStandard, List<String> departIds, List<String> levelDeptIds) {
// 等级
String gradeClassification = lawsEnterpriseStandard.getGradeClassification();
// 全公司可以看
if ("1".equals(gradeClassification)) {
// 有权限
return true;
}
// 企标等级分类级别可查看部门
return ("2".equals(gradeClassification) || "3".equals(gradeClassification))
&& levelDeptIds.stream().anyMatch(departIds::contains);
}
private void noAccess() {
if(LanguageEnum.CN.equals(MessageUtils.getLanguage())) {
throw new JeroBootException("无权限!");
@@ -1265,7 +1327,7 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
// 文本状态
queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getFileType()), "file_type", documentSplitInfo.getFileType());
// 拆分状态
queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getSplitStatus()), "split_status", documentSplitInfo.getSplitStatus());
queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getSplitStatus()), SPLIT_STATUS, documentSplitInfo.getSplitStatus());
// 编辑人
queryWrapper.like(StringUtils.isNotBlank(documentSplitInfo.getAuthor()), "realname", documentSplitInfo.getAuthor());
// 发布前id
@@ -1274,6 +1336,12 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
}else {
queryWrapper.isNull("publish_before_id");
}
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
// 发布的只有自己可见,发布的数据所有人可见
queryWrapper.and(qw ->
qw.and(qwi -> qwi.eq(SPLIT_STATUS, DocumentSplitCommon.SPLIT_STATUS1)
.eq("author", loginUser.calcNameWorkNo()))
.or().eq(SPLIT_STATUS, DocumentSplitCommon.SPLIT_STATUS2));
// 逻辑删除
queryWrapper.eq("del_flag", 0);
// 排序