@@ -2,18 +2,18 @@ package com.hz.pm.api.common.helper.impl; | |||||
import cn.hutool.core.collection.CollUtil; | import cn.hutool.core.collection.CollUtil; | ||||
import cn.hutool.core.text.StrPool; | import cn.hutool.core.text.StrPool; | ||||
import com.hz.pm.api.sys.service.IRegionService; | |||||
import com.ningdatech.basic.exception.BizException; | |||||
import com.ningdatech.basic.util.CollUtils; | |||||
import com.hz.pm.api.common.model.constant.RegionConst; | |||||
import com.hz.pm.api.common.helper.RegionCacheHelper; | import com.hz.pm.api.common.helper.RegionCacheHelper; | ||||
import com.hz.pm.api.common.helper.basic.AbstractRegionCacheHelper; | import com.hz.pm.api.common.helper.basic.AbstractRegionCacheHelper; | ||||
import com.hz.pm.api.common.model.RegionMapKey; | import com.hz.pm.api.common.model.RegionMapKey; | ||||
import com.hz.pm.api.common.model.constant.RegionConst; | |||||
import com.hz.pm.api.common.util.StrUtils; | import com.hz.pm.api.common.util.StrUtils; | ||||
import com.hz.pm.api.sys.convert.RegionConverter; | import com.hz.pm.api.sys.convert.RegionConverter; | ||||
import com.hz.pm.api.sys.model.dto.RegionDTO; | import com.hz.pm.api.sys.model.dto.RegionDTO; | ||||
import com.hz.pm.api.sys.model.dto.RegionTreeDTO; | import com.hz.pm.api.sys.model.dto.RegionTreeDTO; | ||||
import com.hz.pm.api.sys.model.vo.RegionTreeVO; | import com.hz.pm.api.sys.model.vo.RegionTreeVO; | ||||
import com.hz.pm.api.sys.service.IRegionService; | |||||
import com.ningdatech.basic.exception.BizException; | |||||
import com.ningdatech.basic.util.CollUtils; | |||||
import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||
import org.apache.commons.collections4.CollectionUtils; | import org.apache.commons.collections4.CollectionUtils; | ||||
import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
@@ -34,9 +34,6 @@ public class QxPurchase { | |||||
@ApiModelProperty("采购方式") | @ApiModelProperty("采购方式") | ||||
private String purchaseMethod; | private String purchaseMethod; | ||||
@ApiModelProperty("采购单位ID") | |||||
private Long purchaseUnitId; | |||||
@ApiModelProperty("采购单位名称") | @ApiModelProperty("采购单位名称") | ||||
private String purchaseUnitName; | private String purchaseUnitName; | ||||
@@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; | |||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||
import com.hz.pm.api.common.model.constant.MhUnitConst; | |||||
import com.hz.pm.api.common.util.BizUtils; | |||||
import com.hz.pm.api.projectlib.entity.MhSystemReplaceInfo; | import com.hz.pm.api.projectlib.entity.MhSystemReplaceInfo; | ||||
import com.hz.pm.api.projectlib.entity.QxProject; | import com.hz.pm.api.projectlib.entity.QxProject; | ||||
import com.hz.pm.api.projectlib.entity.QxProjectSystemReplaceInfos; | import com.hz.pm.api.projectlib.entity.QxProjectSystemReplaceInfos; | ||||
@@ -24,8 +24,8 @@ import com.hz.pm.api.projectlib.service.IMhSystemReplaceInfoService; | |||||
import com.hz.pm.api.projectlib.service.IQxProjectService; | import com.hz.pm.api.projectlib.service.IQxProjectService; | ||||
import com.hz.pm.api.projectlib.service.IQxProjectSystemReplaceInfosService; | import com.hz.pm.api.projectlib.service.IQxProjectSystemReplaceInfosService; | ||||
import com.hz.pm.api.projectlib.service.IQxPurchaseService; | import com.hz.pm.api.projectlib.service.IQxPurchaseService; | ||||
import com.hz.pm.api.user.helper.MhUnitCache; | |||||
import com.hz.pm.api.user.security.model.UserInfoDetails; | |||||
import com.hz.pm.api.user.helper.MhUnitQueryHelper; | |||||
import com.hz.pm.api.user.helper.MhUnitQueryHelper.UnitQueryState; | |||||
import com.hz.pm.api.user.util.LoginUserUtil; | import com.hz.pm.api.user.util.LoginUserUtil; | ||||
import com.ningdatech.basic.exception.BizException; | import com.ningdatech.basic.exception.BizException; | ||||
import com.ningdatech.basic.model.PageVo; | import com.ningdatech.basic.model.PageVo; | ||||
@@ -51,7 +51,7 @@ import java.util.Map; | |||||
@RequiredArgsConstructor | @RequiredArgsConstructor | ||||
public class QxProjectManage { | public class QxProjectManage { | ||||
private final MhUnitCache mhUnitCache; | |||||
private final MhUnitQueryHelper unitQueryHelper; | |||||
private final IQxProjectService qxProjectService; | private final IQxProjectService qxProjectService; | ||||
private final IMhSystemReplaceInfoService mhSystemReplaceInfoService; | private final IMhSystemReplaceInfoService mhSystemReplaceInfoService; | ||||
private final IQxProjectSystemReplaceInfosService qxProjectSystemReplaceInfosService; | private final IQxProjectSystemReplaceInfosService qxProjectSystemReplaceInfosService; | ||||
@@ -187,21 +187,11 @@ public class QxProjectManage { | |||||
"select 1 from qx_project_system_replace_infos " + | "select 1 from qx_project_system_replace_infos " + | ||||
"where qx_project_system_replace_infos.project_id = qx_project.id " + | "where qx_project_system_replace_infos.project_id = qx_project.id " + | ||||
"and replace_type = {0}", req.getReplaceType()); | "and replace_type = {0}", req.getReplaceType()); | ||||
UserInfoDetails userDetail = LoginUserUtil.loginUserDetail(); | |||||
if (req.getBuildOrgCode() != null) { | |||||
if (!userDetail.hasSuperAdmin()) { | |||||
List<Long> viewUnitIds = mhUnitCache.getViewChildIdsRecursion(userDetail.getMhUnitId()); | |||||
if (!viewUnitIds.contains(req.getBuildOrgCode())) { | |||||
return PageVo.empty(); | |||||
} | |||||
} | |||||
query.in(QxProject::getBuildOrgCode, mhUnitCache.getViewChildIdsRecursion(req.getBuildOrgCode())); | |||||
} else { | |||||
if (!LoginUserUtil.loginUserDetail().hasSuperAdmin() | |||||
&& MhUnitConst.ROOT_UNIT_ID != userDetail.getMhUnitId()) { | |||||
query.in(QxProject::getBuildOrgCode, mhUnitCache.getViewChildIdsRecursion(userDetail.getMhUnitId())); | |||||
} | |||||
UnitQueryState unitQuery = unitQueryHelper.listCanViewUnitIds(req.getBuildOrgCode()); | |||||
if (!unitQuery.isState()) { | |||||
return PageVo.empty(); | |||||
} | } | ||||
BizUtils.notEmpty(unitQuery.getUnitIds(), w -> query.in(QxProject::getBuildOrgCode, w)); | |||||
Page<QxProject> page = qxProjectService.page(req.page(), query); | Page<QxProject> page = qxProjectService.page(req.page(), query); | ||||
return PageVo.of(BeanUtil.copyToList(page.getRecords(), QxProjectVO.class), page.getTotal()); | return PageVo.of(BeanUtil.copyToList(page.getRecords(), QxProjectVO.class), page.getTotal()); | ||||
} | } | ||||
@@ -33,10 +33,6 @@ public class QxPurchaseRecordReq { | |||||
@NotBlank(message = "采购方式不能为空") | @NotBlank(message = "采购方式不能为空") | ||||
private String purchaseMethod; | private String purchaseMethod; | ||||
@ApiModelProperty("采购单位ID") | |||||
@NotNull(message = "采购单位ID不能为空") | |||||
private Long purchaseUnitId; | |||||
@ApiModelProperty("采购单位名称") | @ApiModelProperty("采购单位名称") | ||||
@NotBlank(message = "采购单位名称不能为空") | @NotBlank(message = "采购单位名称不能为空") | ||||
private String purchaseUnitName; | private String purchaseUnitName; | ||||
@@ -30,9 +30,6 @@ public class QxPurchaseVO { | |||||
@ApiModelProperty("采购方式") | @ApiModelProperty("采购方式") | ||||
private String purchaseMethod; | private String purchaseMethod; | ||||
@ApiModelProperty("采购单位ID") | |||||
private Long purchaseUnitId; | |||||
@ApiModelProperty("采购单位名称") | @ApiModelProperty("采购单位名称") | ||||
private String purchaseUnitName; | private String purchaseUnitName; | ||||
@@ -35,8 +35,9 @@ public class MhUnitController { | |||||
@GetMapping("/tree") | @GetMapping("/tree") | ||||
@ApiOperation("单位树") | @ApiOperation("单位树") | ||||
public List<MhUnitTreeDTO> getMhUnitTree(@RequestParam(required = false) String name) { | |||||
return mhUnitManage.getMhUnitTree(name); | |||||
public List<MhUnitTreeDTO> getMhUnitTree(@RequestParam(required = false) String name, | |||||
@RequestParam(required = false) Long unitId) { | |||||
return mhUnitManage.getMhUnitTree(name, unitId); | |||||
} | } | ||||
@GetMapping("/wflowModelConfig/tree") | @GetMapping("/wflowModelConfig/tree") | ||||
@@ -0,0 +1,67 @@ | |||||
package com.hz.pm.api.user.helper; | |||||
import com.hz.pm.api.common.model.constant.MhUnitConst; | |||||
import com.hz.pm.api.user.security.model.UserInfoDetails; | |||||
import com.hz.pm.api.user.util.LoginUserUtil; | |||||
import lombok.Data; | |||||
import lombok.RequiredArgsConstructor; | |||||
import org.springframework.stereotype.Component; | |||||
import java.util.List; | |||||
/** | |||||
* <p> | |||||
* MhUnitQueryHelper | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 16:31 2024/8/31 | |||||
*/ | |||||
@Component | |||||
@RequiredArgsConstructor | |||||
public class MhUnitQueryHelper { | |||||
private final MhUnitCache unitCache; | |||||
@Data | |||||
public static class UnitQueryState { | |||||
private boolean state = true; | |||||
private List<Long> unitIds; | |||||
} | |||||
/** | |||||
* 获取可查看的子部门ID列表 | |||||
* | |||||
* @param unitId 当前单位 | |||||
* @param user 用户信息 | |||||
* @return 可查看的子部门ID列表 | |||||
*/ | |||||
public UnitQueryState listCanViewUnitIds(Long unitId, UserInfoDetails user) { | |||||
UnitQueryState state = new UnitQueryState(); | |||||
if (unitId == null) { | |||||
if (!user.hasSuperAdmin() && MhUnitConst.ROOT_UNIT_ID != user.getMhUnitId()) { | |||||
state.setUnitIds(unitCache.getViewChildIdsRecursion(user.getMhUnitId())); | |||||
} | |||||
} else { | |||||
if (!user.hasSuperAdmin() && !unitId.equals(user.getMhUnitId())) { | |||||
List<Long> unitIdPaths = unitCache.getUnitIdPaths(unitId); | |||||
if (!unitIdPaths.contains(user.getMhUnitId())) { | |||||
state.setState(false); | |||||
return state; | |||||
} | |||||
} | |||||
if (!unitId.equals(MhUnitConst.ROOT_UNIT_ID)) { | |||||
state.setUnitIds(unitCache.getViewChildIdsRecursion(unitId)); | |||||
} | |||||
} | |||||
return state; | |||||
} | |||||
public UnitQueryState listCanViewUnitIds(Long unitId) { | |||||
return listCanViewUnitIds(unitId, LoginUserUtil.loginUserDetail()); | |||||
} | |||||
} |
@@ -2,7 +2,9 @@ package com.hz.pm.api.user.manage; | |||||
import cn.hutool.core.bean.BeanUtil; | import cn.hutool.core.bean.BeanUtil; | ||||
import cn.hutool.core.collection.CollUtil; | import cn.hutool.core.collection.CollUtil; | ||||
import cn.hutool.core.collection.ListUtil; | |||||
import cn.hutool.core.text.CharSequenceUtil; | import cn.hutool.core.text.CharSequenceUtil; | ||||
import cn.hutool.core.util.ObjUtil; | |||||
import cn.hutool.core.util.StrUtil; | import cn.hutool.core.util.StrUtil; | ||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||
@@ -55,13 +57,25 @@ public class MhUnitManage { | |||||
private final MhUnitCache mhUnitCache; | private final MhUnitCache mhUnitCache; | ||||
private final IUserInfoService userInfoService; | private final IUserInfoService userInfoService; | ||||
public List<MhUnitTreeDTO> getMhUnitTree(String name) { | |||||
public List<MhUnitTreeDTO> getMhUnitTree(String name, Long unitId) { | |||||
List<UnitDTO> retUnits; | List<UnitDTO> retUnits; | ||||
List<UnitDTO> allUnits = mhUnitCache.all(); | List<UnitDTO> allUnits = mhUnitCache.all(); | ||||
if (StrUtils.isNotBlank(name)) { | |||||
allUnits.removeIf(w -> !w.getName().contains(name)); | |||||
if (StrUtil.isNotBlank(name) || unitId != null) { | |||||
if (StrUtil.isNotBlank(name)) { | |||||
allUnits.removeIf(w -> !w.getName().contains(name)); | |||||
} | |||||
retUnits = allUnits.stream() | retUnits = allUnits.stream() | ||||
.map(w -> mhUnitCache.getUnitIdPaths(w.getId())) | |||||
.map(w -> { | |||||
List<Long> unitIdPaths = mhUnitCache.getUnitIdPaths(w.getId()); | |||||
if (unitId != null) { | |||||
if (!unitIdPaths.contains(unitId)) { | |||||
return null; | |||||
} | |||||
return unitIdPaths.subList(unitIdPaths.indexOf(unitId), unitIdPaths.size()); | |||||
} | |||||
return unitIdPaths; | |||||
}) | |||||
.filter(Objects::nonNull) | |||||
.flatMap(Collection::stream) | .flatMap(Collection::stream) | ||||
.distinct() | .distinct() | ||||
.map(mhUnitCache::getById) | .map(mhUnitCache::getById) | ||||
@@ -78,7 +92,13 @@ public class MhUnitManage { | |||||
node.setStrip(node.getType().getStrip()); | node.setStrip(node.getType().getStrip()); | ||||
return node; | return node; | ||||
}).collect(Collectors.toList()); | }).collect(Collectors.toList()); | ||||
return TreeUtil.convertToTree(nodes, unitRootParentId); | |||||
Long tmpRootParentId; | |||||
if (unitId != null) { | |||||
tmpRootParentId = mhUnitCache.getById(unitId).getParentId(); | |||||
} else { | |||||
tmpRootParentId = unitRootParentId; | |||||
} | |||||
return TreeUtil.convertToTree(nodes, tmpRootParentId); | |||||
} | } | ||||
public List<MhUnitTreeDTO> getMhUnitStripTree() { | public List<MhUnitTreeDTO> getMhUnitStripTree() { | ||||