Commit 5cf7ff50 by 徐高华

Merge branch 'feature/xgh/2024权限调整' into 'master'

Feature/xgh/2024权限调整

See merge request !1735
parents 051c3a60 57e89231
......@@ -49,6 +49,52 @@ public class HaobanMenuQDTO implements Serializable {
private String ownerShip;
private Integer statusFlag = 1;
private String appCode ;
private Integer funType ;
private Integer noOpenFlag ;
private Integer expireFlag ;
private String appVersions ;
public String getAppCode() {
return appCode;
}
public void setAppCode(String appCode) {
this.appCode = appCode;
}
public Integer getFunType() {
return funType;
}
public void setFunType(Integer funType) {
this.funType = funType;
}
public Integer getNoOpenFlag() {
return noOpenFlag;
}
public void setNoOpenFlag(Integer noOpenFlag) {
this.noOpenFlag = noOpenFlag;
}
public Integer getExpireFlag() {
return expireFlag;
}
public void setExpireFlag(Integer expireFlag) {
this.expireFlag = expireFlag;
}
public String getAppVersions() {
return appVersions;
}
public void setAppVersions(String appVersions) {
this.appVersions = appVersions;
}
public Integer getStatusFlag() {
return statusFlag;
}
......
......@@ -61,6 +61,52 @@ public class HaobanMenuDTO implements Serializable {
private int authControl ;
private String btnCodeRel ;
private String appCode ;
private Integer funType ;
private Integer noOpenFlag ;
private Integer expireFlag ;
private String appVersions ;
public String getAppCode() {
return appCode;
}
public void setAppCode(String appCode) {
this.appCode = appCode;
}
public Integer getFunType() {
return funType;
}
public void setFunType(Integer funType) {
this.funType = funType;
}
public Integer getNoOpenFlag() {
return noOpenFlag;
}
public void setNoOpenFlag(Integer noOpenFlag) {
this.noOpenFlag = noOpenFlag;
}
public Integer getExpireFlag() {
return expireFlag;
}
public void setExpireFlag(Integer expireFlag) {
this.expireFlag = expireFlag;
}
public String getAppVersions() {
return appVersions;
}
public void setAppVersions(String appVersions) {
this.appVersions = appVersions;
}
public int getAuthControl() {
return authControl;
}
......
......@@ -34,5 +34,7 @@ public interface HaobanCommonMQApiService {
public void memberEventDel(String params) ;
// 会员扫码关注
public void memberEventWechat(String params) ;
// 服务开通事件
public void serviceOpenOffEvent(String params) ;
}
......@@ -12,6 +12,7 @@ import java.util.List;
*/
public interface HaobanMenuApiService {
public void deleteByMenuCode(String menuCode) ;
/**
* 添加
*
......@@ -42,7 +43,7 @@ public interface HaobanMenuApiService {
* @param clerkType 职员类型
* @return {@link ServiceResponse}<{@link List}<{@link HaobanMenuDTO}>>
*/
ServiceResponse<List<HaobanMenuDTO>> getHaobanMenuTreeList(String wxEnterpriseId,Integer clerkType);
ServiceResponse<List<HaobanMenuDTO>> getHaobanMenuTreeList(String wxEnterpriseId, String enterpriseId , Integer clerkType);
ServiceResponse<String> getMenuNameByCode(String menuCode);
......
......@@ -44,6 +44,8 @@ public interface HaobanRoleApiService {
*/
ServiceResponse<HaobanRoleDTO> getMenuByWxEnterpriseIdAndClerkType(String wxEnterpriseId, Integer clerkType,Integer systemFlag);
ServiceResponse<HaobanRoleDTO> getMenuByWxEnterpriseIdAndClerkType(String wxEnterpriseId, Integer clerkType,Integer systemFlag , String enterpriseId);
/**
*
* 默认生成好办小程序权限
......@@ -55,13 +57,6 @@ public interface HaobanRoleApiService {
*/
ServiceResponse addHaobanRole(String wxEnterpriseId);
/**
* 角色初始化
* @param wxEnterpriseId wx企业标识
* @return {@link ServiceResponse}
*/
ServiceResponse addHaobanRoleInit(String wxEnterpriseId);
/**
* 查询菜单权限
......
......@@ -248,22 +248,6 @@ public class TestController extends WebBaseController {
}
@RequestMapping("/addHaobanRoleInit")
public HaobanResponse addHaobanRoleInit(String wxEnterpriseId) {
haobanRoleApiService.addHaobanRoleInit(wxEnterpriseId);
return resultResponse(HaoBanErrCode.ERR_1);
}
@RequestMapping("/addHaobanRoleInitAll")
public HaobanResponse addHaobanRoleInitAll() {
List<YwWxEnterpriseDTO> ywWxEnterpriseDTOS = wxEnterpriseApiService.listAll();
for (YwWxEnterpriseDTO ywWxEnterpriseDTO : ywWxEnterpriseDTOS) {
haobanRoleApiService.addHaobanRoleInit(ywWxEnterpriseDTO.getWxEnterpriseId());
}
return resultResponse(HaoBanErrCode.ERR_1);
}
@RequestMapping("/get-cache")
@ResponseBody
public Object getCache(String key) {
......
......@@ -103,5 +103,7 @@ public interface TabHaobanMenuMapper {
TabHaobanMenu getMenuByCode(@Param("menuCode") String menuCode);
void deleteAll();
void deleteByMenuCode(@Param("menuCode")String menuCode) ;
}
......@@ -3,6 +3,7 @@ package com.gic.haoban.manage.service.pojo.bo.role;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
*
......@@ -190,5 +191,19 @@ public class HaobanMenuBO implements Serializable {
public void setOwnerShip(String ownerShip) {
this.ownerShip = ownerShip;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
HaobanMenuBO that = (HaobanMenuBO) o;
return Objects.equals(menuCode, that.menuCode);
}
@Override
public int hashCode() {
return Objects.hash(menuCode);
}
}
......@@ -8,6 +8,7 @@ import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.commons.util.StringUtil;
import com.gic.haoban.manage.api.dto.MemberUnionidWechatAccountQDTO;
import com.gic.haoban.manage.api.service.ExternalClerkRelatedApiService;
import com.gic.haoban.manage.service.service.role.HaobanMenuService;
import com.gic.haoban.manage.service.util.EventUtils;
import com.gic.member.api.dto.MemberInfoChangeNotifyDTO;
import com.gic.member.api.dto.event.wechat.WeChatOfficialAccountEventParam;
......@@ -48,6 +49,8 @@ public class HaobanCommonMQApiServiceImpl implements HaobanCommonMQApiService {
private ExternalClerkRelatedApiService externalClerkRelatedApiService ;
@Autowired
private StaffClerkRelationService staffClerkRelationService ;
@Autowired
private HaobanMenuService haobanMenuService ;
@Override
public void putCommonMessage(CommonMQDTO dto) {
......@@ -233,4 +236,9 @@ public class HaobanCommonMQApiServiceImpl implements HaobanCommonMQApiService {
log.error("通知好办失败", e);
}
}
@Override
public void serviceOpenOffEvent(String params) {
this.haobanMenuService.saveMenuFromGicEvent(params);
}
}
......@@ -19,6 +19,10 @@ public class HaobanMenuApiServiceImpl implements HaobanMenuApiService {
@Autowired
private HaobanMenuService haobanMenuService;
@Override
public void deleteByMenuCode(String menuCode) {
this.haobanMenuService.deleteByMenuCode(menuCode);
}
@Override
public ServiceResponse add(List<HaobanMenuQDTO> haobanMenuDTOList) {
......@@ -55,8 +59,8 @@ public class HaobanMenuApiServiceImpl implements HaobanMenuApiService {
}
@Override
public ServiceResponse<List<HaobanMenuDTO>> getHaobanMenuTreeList(String wxEnterpriseId, Integer clerkType) {
List<HaobanMenuBO> haobanMenuBOList = haobanMenuService.getHaobanMenuTreeList(wxEnterpriseId, clerkType);
public ServiceResponse<List<HaobanMenuDTO>> getHaobanMenuTreeList(String wxEnterpriseId, String enterpriseId ,Integer clerkType) {
List<HaobanMenuBO> haobanMenuBOList = haobanMenuService.getHaobanMenuTreeList(wxEnterpriseId, enterpriseId,clerkType);
return ServiceResponse.success(EntityUtil.changeEntityListNew(HaobanMenuDTO.class, haobanMenuBOList));
}
......
......@@ -2,6 +2,9 @@ package com.gic.haoban.manage.service.service.out.impl.role;
import com.alibaba.fastjson.JSON;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.clerk.api.dto.right.EnterpriseSuperAdminRightMenuQDTO;
import com.gic.clerk.api.dto.right.RightMenuDTO;
import com.gic.clerk.api.service.RightService;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.UniqueIdUtils;
import com.gic.haoban.app.customer.service.api.service.ManageSettingApiService;
......@@ -72,6 +75,8 @@ public class HaobanRoleApiServiceImpl implements HaobanRoleApiService {
private TemplateEnterpriseRelatedService templateEnterpriseRelatedService;
@Autowired
private MaterialEnterpriseAdaptor materialEnterpriseAdaptor;
@Autowired
private RightService rightService ;
@Override
@Transactional(rollbackFor = Exception.class)
......@@ -238,22 +243,74 @@ public class HaobanRoleApiServiceImpl implements HaobanRoleApiService {
@Override
public ServiceResponse<HaobanRoleDTO> getMenuByWxEnterpriseIdAndClerkType(String wxEnterpriseId, Integer clerkType, Integer systemFlag) {
HaobanRoleBO haobanRoleBO = haobanRoleService.getByWxEnterpriseIdAndClerkType(wxEnterpriseId, clerkType, systemFlag);
if (haobanRoleBO != null) {
List<String> menuCodes = haobanRoleMenuService.getByWxEnterpriseIdAndRoleId(wxEnterpriseId, haobanRoleBO.getRoleId());
return this.getMenuByWxEnterpriseIdAndClerkType(wxEnterpriseId,clerkType,systemFlag,null) ;
}
@Override
public ServiceResponse<HaobanRoleDTO> getMenuByWxEnterpriseIdAndClerkType(String wxEnterpriseId, Integer clerkType, Integer systemFlag, String enterpriseId) {
logger.info("查询好办小程序权限={},{},{},{}",systemFlag,wxEnterpriseId,clerkType,enterpriseId);
// 查询商户普通权限是,需要过滤超管没有的
HaobanRoleBO superRoleBO = haobanRoleService.getByWxEnterpriseIdAndClerkType(wxEnterpriseId, clerkType, 0);
if(null == superRoleBO) {
return ServiceResponse.failure("9999","未配置运维权限") ;
}
List<HaobanMenuBO> allMenuList = haobanMenuService.getAllMenuList();
// 添加关联的权限
Long superRoleId = superRoleBO.getRoleId() ;
List<String> superMenuCodeList = this.listRoleMenuCode(allMenuList,wxEnterpriseId, superRoleId);
// 查询gic配置的权限
List<String> gicBuyCodes = this.haobanMenuService.getGicBuyCodes(enterpriseId,clerkType) ;
if(CollectionUtils.isNotEmpty(gicBuyCodes)) {
superMenuCodeList.addAll(gicBuyCodes) ;
}
logger.info("超管的权限={}",superMenuCodeList);
// 如果查询的后台的子管理员权限
HaobanRoleBO subRoleBO = null ;
List<String> subMenuCodes = null ;
if(systemFlag==1) {
subRoleBO = haobanRoleService.getByWxEnterpriseIdAndClerkType(wxEnterpriseId, clerkType, 1);
if(null == subRoleBO) {
return ServiceResponse.failure("9999","未配置子管理员权限") ;
}
Long subRoleId = subRoleBO.getRoleId() ;
subMenuCodes = this.listRoleMenuCode(allMenuList,wxEnterpriseId,subRoleId) ;
}
HaobanRoleBO retBO = null ;
if(systemFlag==0) {
retBO = superRoleBO ;
retBO.setMenuCodes(superMenuCodeList);
}else {
retBO = subRoleBO ;
List<String> subCodeList = new ArrayList<>() ;
for(String subCode : subMenuCodes) {
if(superMenuCodeList.contains(subCode)) {
subCodeList.add(subCode) ;
}
}
retBO.setMenuCodes(subCodeList);
}
List<HaobanMenuBO> haobanMenuList = new ArrayList<>() ;
Map<String,HaobanMenuBO> map = allMenuList.stream().collect(Collectors.toMap(HaobanMenuBO::getMenuCode,o->o,(k1,k2)->k1)) ;
for(String code : retBO.getMenuCodes()) {
HaobanMenuBO bo = map.get(code) ;
if(null != bo) {
haobanMenuList.add(bo) ;
}
}
retBO.setMenuList(EntityUtil.changeEntityListNew(HaobanMenuDTO.class, haobanMenuList));
return ServiceResponse.success(EntityUtil.changeEntityNew(HaobanRoleDTO.class, retBO));
}
private List<String> listRoleMenuCode(List<HaobanMenuBO> allMenuList , String wxEnterpriseId , Long roleId) {
List<String> menuCodes = haobanRoleMenuService.getByWxEnterpriseIdAndRoleId(wxEnterpriseId, roleId);
// 添加关联的权限
for(HaobanMenuBO item : allMenuList) {
String code = item.getMenuCode() ;
// 开启的权限
if(menuCodes.contains(code)) {
haobanMenuList.add(item) ;
continue ;
}
// 无需授权的权限
if(0==item.getAuthControl() && StringUtils.isEmpty(item.getBtnCodeRel())) {
haobanMenuList.add(item) ;
menuCodes.add(code) ;
continue ;
}
......@@ -261,15 +318,11 @@ public class HaobanRoleApiServiceImpl implements HaobanRoleApiService {
for(HaobanMenuBO item : allMenuList) {
String code = item.getBtnCodeRel() ;
if(0==item.getAuthControl() && StringUtils.isNotEmpty(item.getBtnCodeRel()) && menuCodes.contains(code)) {
haobanMenuList.add(item) ;
menuCodes.add(code) ;
continue ;
}
}
haobanRoleBO.setMenuCodes(menuCodes);
haobanRoleBO.setMenuList(EntityUtil.changeEntityListNew(HaobanMenuDTO.class, haobanMenuList));
}
return ServiceResponse.success(EntityUtil.changeEntityNew(HaobanRoleDTO.class, haobanRoleBO));
return menuCodes ;
}
@Override
......@@ -325,176 +378,6 @@ public class HaobanRoleApiServiceImpl implements HaobanRoleApiService {
return ServiceResponse.success();
}
@Override
public ServiceResponse addHaobanRoleInit(String wxEnterpriseId) {
List<TabHaobanWxEnterpriseRelated> enterpriseRelateds = wxEnterpriseRelatedService.getByWxEnterpriseId(wxEnterpriseId);
if (CollectionUtils.isEmpty(enterpriseRelateds)) {
logger.error("无关联企业:{}", wxEnterpriseId);
return ServiceResponse.success();
}
//全品牌搜索
boolean searchFlag = false;
//离职继承
boolean handoverFlag = false;
boolean addClerkFlag = false;
boolean editClerkFlag = false;
boolean delClerkFlag = false;
for (TabHaobanWxEnterpriseRelated enterpriseRelated : enterpriseRelateds) {
ClerkEditInfoDTO clerkEditInfoDTO = ClerkEditInfoDTO.info(enterpriseRelated.getClerkEditFlag());
logger.info("导购状态:{}", JSON.toJSONString(clerkEditInfoDTO));
addClerkFlag = clerkEditInfoDTO.getAddClerkFlag() == 1;
editClerkFlag = clerkEditInfoDTO.getEditClerkFlag() == 1;
delClerkFlag = clerkEditInfoDTO.getDelClerkFlag() == 1;
boolean searchFlagEnterpriseId = manageSettingApiService.getEnterpriseIdByFlag(enterpriseRelated.getEnterpriseId(), 1, null);
if (searchFlagEnterpriseId) {
searchFlag = true;
break;
}
}
for (TabHaobanWxEnterpriseRelated enterpriseRelated : enterpriseRelateds) {
boolean handoverFlagEnterpriseId = manageSettingApiService.getEnterpriseIdByFlag(enterpriseRelated.getEnterpriseId(), null, 1);
if (handoverFlagEnterpriseId) {
handoverFlag = true;
break;
}
}
List<HaobanRoleBO> haobanRoleBOList = haobanRoleService.getListByWxEnterpriseId("-1", null);
//导购店长
List<String> menuCodes = new ArrayList<>();
//运维后台 导购店长
List<String> ywMenuCodes = new ArrayList<>();
//区经
List<String> menuManageCodes = new ArrayList<>();
if (searchFlag) {
menuCodes.add("customerList_allSearch");
menuManageCodes.add("customerList_allSearch");
}
if (handoverFlag) {
menuCodes.add("customerList_inheritCustomer");
}
ywMenuCodes.add("customerList_allSearch");
ywMenuCodes.add("customerList_inheritCustomer");
if (addClerkFlag) {
menuCodes.add("userCenter_addClerk");
}
if (editClerkFlag) {
menuCodes.add("storeClerkList_edit");
}
if (delClerkFlag) {
menuCodes.add("userCenter_delClerk");
}
menuCodes.add("workbench");
menuCodes.add("userCenter");
menuCodes.add("dataSummary");
ywMenuCodes.add("workbench");
ywMenuCodes.add("userCenter");
ywMenuCodes.add("dataSummary");
//导购和店长初始化权限以好办web为准
List<String> menuCodesOld = applicationSettingApiService.findMenuCodes(wxEnterpriseId, 1);
if (CollectionUtils.isEmpty(menuCodesOld)) {
logger.error("无权限:{}", wxEnterpriseId);
return ServiceResponse.success();
}
List<String> clerkMenuCodes = haobanMenuService.getHaobanMenuByPid(menuCodesOld);
menuCodes.addAll(clerkMenuCodes);
TemplateEnterpriseRelatedDTO templateEnterpriseRelatedDTO = templateEnterpriseRelatedService.selectByWxEnterpriseId(wxEnterpriseId);
if (templateEnterpriseRelatedDTO == null) {
logger.error("无模板权限:{}", wxEnterpriseId);
return ServiceResponse.success();
}
List<String> ywMenuCodesOld = tabHaobanTemplateApplicationRelatedMapper.listMenuCodesByTemplateId(templateEnterpriseRelatedDTO.getApplicationTemplateId());
List<String> ywClerkMenuCodes = haobanMenuService.getHaobanMenuByPid(ywMenuCodesOld);
ywMenuCodes.addAll(ywClerkMenuCodes);
HaobanRoleQDTO haobanRoleQDTO = new HaobanRoleQDTO();
HaobanRoleQDTO haobanRoleSystemQDTO = new HaobanRoleQDTO();
int count = haobanRoleService.getCountByWxEnterpriseId(wxEnterpriseId, null);
//清除历史权限
if (count > 0) {
haobanRoleService.deleteByWxEnterpriseId(wxEnterpriseId, null);
haobanRoleMenuService.deleteByWxEnterpriseId(wxEnterpriseId);
}
for (HaobanRoleBO haobanRoleBO : haobanRoleBOList) {
Long roleId = haobanRoleBO.getRoleId();
Integer clerkType = haobanRoleBO.getClerkType();
String roleName = haobanRoleBO.getRoleName();
haobanRoleQDTO.setRoleName(roleName);
haobanRoleSystemQDTO.setRoleName(roleName);
haobanRoleQDTO.setSystemFlag(1);
haobanRoleSystemQDTO.setSystemFlag(0);
if (RoleClerkTypeEnum.CLERK.getCode().equals(clerkType)) {
ywMenuCodes.add("storeClerkList_edit");
//导购
//初始化我的
List<String> userCenter = haobanMenuService.getHaobanMenuByPid(Collections.singletonList("userCenter"));
List<String> menuList = haobanRoleMenuService.getMenuInMenuCodes("-1", roleId, userCenter);
List<String> codes = RolesListUtils.unionList(menuList, menuCodes);
List<String> ywCodes = RolesListUtils.unionList(menuList, ywMenuCodes);
HaobanRoleMenuQDTO clerkMenus = new HaobanRoleMenuQDTO();
clerkMenus.setClerkType(clerkType);
clerkMenus.setMenuCodes(new ArrayList<>(new HashSet<>(codes)));
haobanRoleQDTO.setClerkMenus(clerkMenus);
HaobanRoleMenuQDTO ywClerkMenus = new HaobanRoleMenuQDTO();
ywClerkMenus.setClerkType(clerkType);
ywClerkMenus.setMenuCodes(new ArrayList<>(new HashSet<>(ywCodes)));
haobanRoleSystemQDTO.setClerkMenus(ywClerkMenus);
} else if (RoleClerkTypeEnum.SHOP.getCode().equals(clerkType)) {
ywMenuCodes.add("userCenter_addClerk");
ywMenuCodes.add("storeClerkList_edit");
ywMenuCodes.add("userCenter_delClerk");
//店长
//我的
List<String> userCenter = haobanMenuService.getHaobanMenuByPid(Collections.singletonList("userCenter"));
List<String> menuList = haobanRoleMenuService.getMenuInMenuCodes("-1", roleId, userCenter);
List<String> unionListcodes = RolesListUtils.unionList(menuList, menuCodes);
List<String> ywUnionListcodes = RolesListUtils.unionList(menuList, ywMenuCodes);
HaobanRoleMenuQDTO manegeClerkMenus = new HaobanRoleMenuQDTO();
manegeClerkMenus.setClerkType(clerkType);
manegeClerkMenus.setMenuCodes(new ArrayList<>(new HashSet<>(unionListcodes)));
haobanRoleQDTO.setManegeClerkMenus(manegeClerkMenus);
HaobanRoleMenuQDTO ywManegeClerkMenus = new HaobanRoleMenuQDTO();
ywManegeClerkMenus.setClerkType(clerkType);
ywManegeClerkMenus.setMenuCodes(new ArrayList<>(new HashSet<>(ywUnionListcodes)));
haobanRoleSystemQDTO.setManegeClerkMenus(ywManegeClerkMenus);
} else if (RoleClerkTypeEnum.MANAGE.getCode().equals(clerkType)) {
List<String> manageCodes = haobanRoleMenuService.getByWxEnterpriseIdAndRoleId("-1", roleId);
menuManageCodes.addAll(manageCodes);
HaobanRoleMenuQDTO managerMenus = new HaobanRoleMenuQDTO();
managerMenus.setClerkType(clerkType);
managerMenus.setMenuCodes(menuManageCodes);
haobanRoleQDTO.setManagerMenus(managerMenus);
haobanRoleSystemQDTO.setManagerMenus(managerMenus);
}
}
WebLoginDTO login = new WebLoginDTO();
login.setWxEnterpriseId(wxEnterpriseId);
login.setClerkId("-1");
login.setClerkName("系统");
//商户权限
add(haobanRoleQDTO, login);
//运维系统权限
add(haobanRoleSystemQDTO, login);
return ServiceResponse.success();
}
/**
* 内容 权限初始化
*
......
package com.gic.haoban.manage.service.service.role;
import com.gic.clerk.api.dto.right.RightMenuDTO;
import com.gic.haoban.manage.service.entity.role.TabHaobanMenu;
import com.gic.haoban.manage.service.pojo.bo.role.HaobanMenuBO;
......@@ -63,7 +64,10 @@ public interface HaobanMenuService {
* @param clerkType 职员类型
* @return {@link List}<{@link HaobanMenuBO}>
*/
List<HaobanMenuBO> getHaobanMenuTreeList(String wxEnterpriseId, Integer clerkType);
List<HaobanMenuBO> getHaobanMenuTreeList(String wxEnterpriseId, String enterpriseId, Integer clerkType);
public List<RightMenuDTO> getGicBuyMenus(String enterpriseId) ;
public List<String> getGicBuyCodes(String enterpriseId , Integer clerkType) ;
/**
......@@ -93,4 +97,8 @@ public interface HaobanMenuService {
HaobanMenuBO getMenuByCode(String menuCode);
void deleteAll();
void deleteByMenuCode(String menuCode) ;
void saveMenuFromGicEvent(String params) ;
}
package com.gic.haoban.manage.service.service.role.impl;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.clerk.api.dto.right.EnterpriseSuperAdminRightMenuQDTO;
import com.gic.clerk.api.dto.right.MenuDTO;
import com.gic.clerk.api.dto.right.MenuListQDTO;
import com.gic.clerk.api.dto.right.RightMenuDTO;
import com.gic.clerk.api.service.MenuApiService;
import com.gic.clerk.api.service.RightService;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.UniqueIdUtils;
import com.gic.haoban.manage.service.dao.mapper.WxEnterpriseRelatedMapper;
import com.gic.haoban.manage.service.dao.mapper.role.TabHaobanMenuMapper;
import com.gic.haoban.manage.service.dao.mapper.role.TabHaobanRoleMapper;
import com.gic.haoban.manage.service.dao.mapper.role.TabHaobanRoleMenuMapper;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterpriseRelated;
import com.gic.haoban.manage.service.entity.role.TabHaobanMenu;
import com.gic.haoban.manage.service.entity.role.TabHaobanRole;
import com.gic.haoban.manage.service.entity.role.TabHaobanRoleMenu;
import com.gic.haoban.manage.service.pojo.bo.role.HaobanMenuBO;
import com.gic.haoban.manage.service.service.MemberQueryService;
import com.gic.haoban.manage.service.service.role.HaobanMenuService;
import com.gic.haoban.manage.service.util.Constant;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author mozhu
......@@ -21,9 +39,20 @@ import java.util.List;
*/
@Service
public class HaobanMenuServiceImpl implements HaobanMenuService {
private static final Logger logger = LogManager.getLogger(HaobanMenuService.class);
@Autowired
private TabHaobanMenuMapper tabHaobanMenuMapper;
@Autowired
private WxEnterpriseRelatedMapper wxEnterpriseRelatedMapper ;
@Autowired
private TabHaobanRoleMapper roleMapper ;
@Autowired
private TabHaobanRoleMenuMapper roleMenuMapper ;
@Autowired
private MenuApiService menuApiService ;
@Autowired
private RightService rightService ;
@Override
public TabHaobanMenu queryById(String menuCode) {
......@@ -88,14 +117,60 @@ public class HaobanMenuServiceImpl implements HaobanMenuService {
}
@Override
public List<HaobanMenuBO> getHaobanMenuTreeList(String wxEnterpriseId, Integer clerkType) {
public List<RightMenuDTO> getGicBuyMenus(String enterpriseId) {
logger.info("查询gic权限={}",enterpriseId);
if(StringUtils.isBlank(enterpriseId) || "-1".equals(enterpriseId)) {
return null ;
}
// 查询gic购买的好办小程序权限
EnterpriseSuperAdminRightMenuQDTO qdto = new EnterpriseSuperAdminRightMenuQDTO() ;
qdto.setEnterpriseId(enterpriseId);
qdto.setNamespace(Constant.hb_wxa_namespace);
List<RightMenuDTO> list = this.rightService.listSuperAdminRightMenu(qdto) ;
logger.info("查询gic购买的好办小程序权限={},返回={}",enterpriseId,JSONObject.toJSONString(list));
return list ;
}
// Integer clerkType
@Override
public List<String> getGicBuyCodes(String enterpriseId , Integer clerkType) {
List<RightMenuDTO> list = this.getGicBuyMenus(enterpriseId) ;
if(CollectionUtils.isNotEmpty(list)) {
List<String> codeList = list.stream().filter(o->{
return o.getHaobanRoles().contains(clerkType+"") ;
}).map(o->o.getMenuCode()).collect(Collectors.toList());
logger.info("满足的gic权限={},clerkType={}",codeList,clerkType);
return codeList ;
}
return null ;
}
@Override
public List<HaobanMenuBO> getHaobanMenuTreeList(String wxEnterpriseId, String enterpriseId ,Integer clerkType) {
List<TabHaobanMenu> pidMenuList = tabHaobanMenuMapper.getHaobanPidMenuList(wxEnterpriseId, clerkType, 0);
List<TabHaobanMenu> notPidMenuList = tabHaobanMenuMapper.getHaobanNotPidMenuList(wxEnterpriseId, clerkType, 0);
List<HaobanMenuBO> pidMenuBOList = EntityUtil.changeEntityListNew(HaobanMenuBO.class, pidMenuList);
List<HaobanMenuBO> notPidMenuBOList = EntityUtil.changeEntityListNew(HaobanMenuBO.class, notPidMenuList);
List<String> gicMenulist = this.getGicBuyCodes(enterpriseId,clerkType) ;
if(CollectionUtils.isNotEmpty(gicMenulist)) {
List<HaobanMenuBO> allMenuList = this.getAllMenuList();
Map<String,HaobanMenuBO> map = allMenuList.stream().collect(Collectors.toMap(HaobanMenuBO::getMenuCode,o->o,(k1,k2)->k1)) ;
for(String menuCode : gicMenulist) {
HaobanMenuBO bo = map.get(menuCode) ;
if(null != bo) {
if (menuCode.equals(bo.getParentCode())) {
notPidMenuBOList.add(bo) ;
}else {
pidMenuBOList.add(bo) ;
}
}
}
}
if (CollectionUtils.isEmpty(pidMenuBOList)) {
return new ArrayList<>();
}
pidMenuBOList = pidMenuBOList.stream().distinct().collect(Collectors.toList());
notPidMenuBOList = notPidMenuBOList.stream().distinct().collect(Collectors.toList());
for (HaobanMenuBO haobanMenuBO : pidMenuBOList) {
if (CollectionUtils.isNotEmpty(notPidMenuBOList)) {
List<HaobanMenuBO> menus = iterateMenus(notPidMenuBOList, haobanMenuBO.getMenuCode());
......@@ -159,4 +234,97 @@ public class HaobanMenuServiceImpl implements HaobanMenuService {
return result;
}
@Override
public void deleteByMenuCode(String menuCode) {
this.tabHaobanMenuMapper.deleteByMenuCode(menuCode);
}
@Override
public void saveMenuFromGicEvent(String params) {
logger.info("服务开通事件-好办小程序={}",params);
JSONObject json = JSONObject.parseObject(params) ;
String serviceCode = json.getString("serviceCode") ;
String enterpriseId = json.getString("enterpriseId") ;
String operationType = json.getString("operationType") ;
Integer packageCode = json.getInteger("packageCode") ;
// 进行授权 auth 取消授权 cancel
if("cancel".equals(operationType)) {
logger.info("取消不处理");
return ;
}
List<TabHaobanWxEnterpriseRelated> wxEnterpriseList = this.wxEnterpriseRelatedMapper.listByEnterpriseId(enterpriseId) ;
if(CollectionUtils.isEmpty(wxEnterpriseList)) {
logger.info("无好办={}",enterpriseId);
return ;
}
MenuListQDTO qdto = new MenuListQDTO() ;
qdto.setNamespace(Constant.hb_wxa_namespace);
qdto.setServiceCode(serviceCode);
qdto.setPackageCode(packageCode);
ServiceResponse<List<MenuDTO>> resp = this.menuApiService.listMenu(qdto) ;
logger.info("查询gic权限={},{}",JSONObject.toJSONString(qdto),JSONObject.toJSONString(resp));
if(!resp.isSuccess() || CollectionUtils.isEmpty(resp.getResult())) {
logger.info("无相关菜单,不处理");
return;
}
logger.info("gic关联的企微={}", JSONObject.toJSONString(wxEnterpriseList));
List<MenuDTO> menuDTOList = resp.getResult() ;
for(MenuDTO gicMenu : menuDTOList) {
// 授权方式,是否自动授权给子管理员 0,不做处理 1:自动授权子管理员
Integer authType = gicMenu.getAuthType() ;
String gicMenuCode = gicMenu.getMenuCode();
String haobanRoles = gicMenu.getHaobanRoles() ;
if(null == authType || authType == 0) {
logger.info("authType无值{}",gicMenuCode);
continue;
}
if(StringUtils.isBlank(haobanRoles)) {
logger.info("haobanRoles无值{}",gicMenuCode);
continue;
}
List<String> menuCodeList = Arrays.asList(gicMenuCode) ;
String[] arr = haobanRoles.split("\\|") ;
List<Integer> addRoleTypeList = Arrays.stream(arr).filter(o->StringUtils.isNotBlank(o)).map(o->Integer.valueOf(o)).collect(Collectors.toList());
if(CollectionUtils.isEmpty(addRoleTypeList)) {
logger.info("haobanRoles null {} , {}",gicMenuCode , haobanRoles);
continue;
}
Date now = new Date() ;
for(int i=0;i<wxEnterpriseList.size();i++) {
TabHaobanWxEnterpriseRelated item = wxEnterpriseList.get(i) ;
String wxEnterpriseId = item.getWxEnterpriseId() ;
List<TabHaobanRoleMenu> insertMenuList = new ArrayList<>() ;
List<TabHaobanRole> hbRoleList = this.roleMapper.getListByWxEnterpriseId(wxEnterpriseId,1) ;
TabHaobanRoleMenu menu = null ;
for(TabHaobanRole role : hbRoleList) {
int roleType = role.getClerkType() ;
if(!addRoleTypeList.contains(roleType)) {
logger.info("角色不符合={},{}",addRoleTypeList,roleType);
continue;
}
Long roleId = role.getRoleId() ;
for(String menuCode : menuCodeList) {
// 判断是否已存在
List<String> oldList = this.roleMenuMapper.getMenuInMenuCodes(wxEnterpriseId,roleId,Arrays.asList(menuCode)) ;
if(CollectionUtils.isNotEmpty(oldList)) {
logger.info("权限已存在roleId={},{}",role,menuCode);
continue;
}
menu = new TabHaobanRoleMenu() ;
menu.setRoleMenuId(UniqueIdUtils.uniqueLong());
menu.setRoleId(roleId);
menu.setUpdateTime(now);
menu.setCreateTime(now);
menu.setStatusFlag(1);
menu.setWxEnterpriseId(wxEnterpriseId);
menu.setMenuCode(menuCode);
insertMenuList.add(menu) ;
}
}
if(CollectionUtils.isNotEmpty(insertMenuList)) {
this.roleMenuMapper.insertBatch(insertMenuList);
}
}
}
}
}
package com.gic.haoban.manage.service.util;
public class Constant {
public static final String hb_wxa_namespace = "haoban-wxa";
}
......@@ -235,5 +235,6 @@
<dubbo:reference id="contentProducerApiService" interface="com.gic.content.api.service.ContentProducerApiService" timeout="10000" retries="0" check="false" />
<dubbo:reference interface="com.gic.content.api.service.ContentMaterialApiService" id="contentMaterialApiService" timeout="10000" retries="0" check="false" />
<dubbo:reference interface="com.gic.content.api.service.ContentSettingApiService" id="contentSettingApiService" timeout="10000" retries="0" check="false" />
<dubbo:reference interface="com.gic.clerk.api.service.MenuApiService" id="menuApiService" timeout="10000" retries="0" check="false" />
</beans>
\ No newline at end of file
......@@ -213,5 +213,10 @@
from tab_haoban_menu
</delete>
<delete id="deleteByMenuCode" parameterType="java.lang.String">
update tab_haoban_menu set status_flag = 0 where menu_code = #{menuCode}
</delete>
</mapper>
......@@ -133,7 +133,7 @@ public class HaobanRoleController extends WebBaseController {
@RequestMapping(value = "/getHaobanMenuTreeList", method = RequestMethod.GET)
public RestResponse<List<HaobanMenuDTO>> getHaobanMenuTreeList(Integer clerkType) {
WebLoginDTO login = AuthWebRequestUtil.getLoginUser();
ServiceResponse<List<HaobanMenuDTO>> serviceResponse = haobanMenuApiService.getHaobanMenuTreeList(login.getWxEnterpriseId(), clerkType);
ServiceResponse<List<HaobanMenuDTO>> serviceResponse = haobanMenuApiService.getHaobanMenuTreeList(login.getWxEnterpriseId(),login.getEnterpriseId(), clerkType);
return RestResponse.successResult(serviceResponse.getResult());
}
......@@ -145,7 +145,7 @@ public class HaobanRoleController extends WebBaseController {
@RequestMapping(value = "/queryMenuByClerkType", method = RequestMethod.GET)
public RestResponse<HaobanRoleDTO> queryMenuByClerkType(Integer clerkType) {
WebLoginDTO login = AuthWebRequestUtil.getLoginUser();
ServiceResponse<HaobanRoleDTO> serviceResponse = haobanRoleApiService.getMenuByWxEnterpriseIdAndClerkType(login.getWxEnterpriseId(), clerkType, 1);
ServiceResponse<HaobanRoleDTO> serviceResponse = haobanRoleApiService.getMenuByWxEnterpriseIdAndClerkType(login.getWxEnterpriseId(), clerkType, 1 , login.getEnterpriseId());
return RestResponse.successResult(serviceResponse.getResult());
}
......
......@@ -1484,7 +1484,7 @@ public class WxStaffController extends WebBaseController {
* @return
*/
@RequestMapping(value = "/queryMenuCodesByClerkType", method = RequestMethod.GET)
public RestResponse<HaobanRoleDTO> queryMenuByClerkType(Integer clerkType, String staffId, String wxEnterpriseId) {
public RestResponse<HaobanRoleDTO> queryMenuByClerkType(Integer clerkType, String staffId, String wxEnterpriseId , String enterpriseId) {
if (clerkType == null) {
return RestResponse.failure(Convert.toStr(HaoBanErrCode.ERR_2.getCode()), HaoBanErrCode.ERR_2.getMsg());
}
......@@ -1503,7 +1503,7 @@ public class WxStaffController extends WebBaseController {
return RestResponse.successResult(serviceResponse.getResult());
}
ServiceResponse<HaobanRoleDTO> serviceResponse = haobanRoleApiService
.getMenuByWxEnterpriseIdAndClerkType(wxEnterpriseId, clerkType, 1);
.getMenuByWxEnterpriseIdAndClerkType(wxEnterpriseId, clerkType, 1 , enterpriseId);
return RestResponse.successResult(serviceResponse.getResult());
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment