mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
添加机台授权逻辑,修改机台授权的实体类
This commit is contained in:
+2
-1
@@ -184,7 +184,8 @@ public interface ErrorCodeConstants {
|
||||
ErrorCode MACHINE_TEMPLATE_NOT_EXISTS = new ErrorCode(1_002_029_001, "机台模板不存在");
|
||||
ErrorCode DEFAULT_TEMPLATE_COUNT = new ErrorCode(1_002_029_002, "默认模板数量异常");
|
||||
ErrorCode DEFAULT_TEMPLATE_NOT_EXISTS = new ErrorCode(1_002_029_003, "该类型机台默认模板不存在");
|
||||
ErrorCode DEFAULT_TEMPLATE_NOT_DELETED = new ErrorCode(1_002_029_003, "不能删除默认模板");
|
||||
ErrorCode DEFAULT_TEMPLATE_NOT_DELETED = new ErrorCode(1_002_029_004, "不能删除默认模板");
|
||||
ErrorCode NOT_TEMPLATE_AUTH = new ErrorCode(1_002_029_005, "该组织无此机台权限");
|
||||
|
||||
// ========== 标签模板 1-002-300-000 ==========
|
||||
ErrorCode LABEL_TEMPLATE_NOT_EXISTS = new ErrorCode(1_002_300_000, "标签模板不存在");
|
||||
|
||||
+10
@@ -41,5 +41,15 @@ public class CuttingRespVO {
|
||||
@Schema(description = "机台配置")
|
||||
private JSONObject machineSettingDO;
|
||||
|
||||
/**
|
||||
* 机台权限相关配置
|
||||
*/
|
||||
@Schema(description ="加工模式 开料机加工模式 默认true,显示开料机工作模式(是否排钻/造型,sc)配置")
|
||||
private Boolean showPriorFacing;
|
||||
@Schema(description = "双工位")
|
||||
private Boolean showDualWorkstation;
|
||||
@Schema(description = "自动贴标")
|
||||
private Boolean showAutoNotePrinter;
|
||||
|
||||
|
||||
}
|
||||
+4
@@ -33,6 +33,10 @@ public class CuttingSaveReqVO {
|
||||
@NotNull(message = "标签id不能空")
|
||||
private Long labelId;
|
||||
|
||||
@Schema(description = "机台模板id")
|
||||
@NotNull(message = "机台模板id")
|
||||
private Long templateId;
|
||||
|
||||
/* @Schema(description = "机台配置")
|
||||
@Valid
|
||||
private CuttingSettingDO machineSettingDO;*/
|
||||
|
||||
+5
-1
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.cf.imes.module.system.controller.admin.machine.vo.CuttingRespVO;
|
||||
import com.cf.imes.module.system.controller.admin.machine.vo.CuttingSaveReqVO;
|
||||
import com.cf.imes.module.system.dal.dataobject.machine.MachineDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.machine.MachineLimitDO;
|
||||
|
||||
/**
|
||||
* @author Beal
|
||||
@@ -21,7 +22,7 @@ public class MachineConvert {
|
||||
|
||||
}
|
||||
|
||||
public static CuttingRespVO convert(MachineDO machineDO) {
|
||||
public static CuttingRespVO convert(MachineDO machineDO, MachineLimitDO machineLimitDO) {
|
||||
return CuttingRespVO.builder()
|
||||
.id(machineDO.getId())
|
||||
.machineSettingDO(JSON.parseObject(machineDO.getSetting()))
|
||||
@@ -30,6 +31,9 @@ public class MachineConvert {
|
||||
.name(machineDO.getName())
|
||||
.machineType(machineDO.getMachineType())
|
||||
.labelId(machineDO.getLabelId())
|
||||
.showAutoNotePrinter(machineLimitDO.getShowAutoNotePrinter())
|
||||
.showDualWorkstation(machineLimitDO.getShowDualWorkstation())
|
||||
.showPriorFacing(machineLimitDO.getShowPriorFacing())
|
||||
.build();
|
||||
|
||||
}
|
||||
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package com.cf.imes.module.system.dal.dataobject.machine;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* @author Beal
|
||||
*/
|
||||
@Data
|
||||
@TableName("system_machine_limit")
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class MachineLimitDO {
|
||||
@TableId
|
||||
private Long id;
|
||||
private Long organId;
|
||||
private Long machineId;
|
||||
private LocalDateTime createTime;
|
||||
/**
|
||||
* 加工模式 开料机加工模式 默认true,显示开料机工作模式(是否排钻/造型,sc)配置
|
||||
*/
|
||||
private Boolean showPriorFacing;
|
||||
/**
|
||||
* 双工位
|
||||
*/
|
||||
private Boolean showDualWorkstation;
|
||||
/**
|
||||
* 自动贴标
|
||||
*/
|
||||
private Boolean showAutoNotePrinter;
|
||||
}
|
||||
+7
-2
@@ -2,7 +2,6 @@ package com.cf.imes.module.system.dal.dataobject.machinetemplate;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
@@ -18,10 +17,16 @@ import java.time.LocalDateTime;
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class OrganMachineDO {
|
||||
public class MachineTemplateLimitDO {
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 组织id
|
||||
*/
|
||||
private Long organId;
|
||||
/**
|
||||
* 机台模板id
|
||||
*/
|
||||
private Long machineId;
|
||||
private LocalDateTime createTime;
|
||||
/**
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package com.cf.imes.module.system.dal.mysql.machine;
|
||||
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.module.system.dal.dataobject.machine.MachineLimitDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* @author Beal
|
||||
*/
|
||||
@Mapper
|
||||
public interface MachineLimitMapper extends BaseMapperX<MachineLimitDO> {
|
||||
}
|
||||
+2
-2
@@ -1,10 +1,10 @@
|
||||
package com.cf.imes.module.system.dal.mysql.machinetemplate;
|
||||
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.module.system.dal.dataobject.machinetemplate.OrganMachineDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.machinetemplate.MachineTemplateLimitDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface OrganMachineMapper extends BaseMapperX<OrganMachineDO> {
|
||||
public interface MachineTemplateLimitMapper extends BaseMapperX<MachineTemplateLimitDO> {
|
||||
|
||||
}
|
||||
+59
-14
@@ -13,25 +13,37 @@ import co.elastic.clients.elasticsearch.core.search.Hit;
|
||||
import com.cf.imes.framework.es.core.dal.ESDocument;
|
||||
import com.cf.imes.framework.es.core.service.ESDocumentService;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.security.core.LoginUser;
|
||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import com.cf.imes.module.system.controller.admin.machine.vo.*;
|
||||
import com.cf.imes.module.system.convert.machine.MachineConvert;
|
||||
import com.cf.imes.module.system.dal.dataobject.machine.DrillSettingDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.machine.MachineDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.machine.CuttingSettingDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.machine.MachineLimitDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.machinetemplate.MachineTemplateLimitDO;
|
||||
import com.cf.imes.module.system.dal.mysql.machine.MachineMapper;
|
||||
import com.cf.imes.module.system.dal.mysql.machine.MachineLimitMapper;
|
||||
import com.cf.imes.module.system.dal.mysql.machinetemplate.MachineTemplateLimitMapper;
|
||||
import com.cf.imes.module.system.dal.mysql.machinetemplate.MachineTemplateMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR;
|
||||
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.cf.imes.module.system.enums.ErrorCodeConstants.MACHINE_NOT_EXISTS;
|
||||
import static com.cf.imes.module.system.enums.ErrorCodeConstants.NOT_TEMPLATE_AUTH;
|
||||
|
||||
/**
|
||||
* 机台 Service 实现类
|
||||
@@ -57,18 +69,42 @@ public class MachineServiceImpl implements MachineService {
|
||||
@Resource
|
||||
private MachineMapper machineMapper;
|
||||
|
||||
@Resource
|
||||
private MachineLimitMapper machineLimitMapper;
|
||||
|
||||
@Resource
|
||||
private MachineTemplateLimitMapper machineTemplateLimitMapper;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long createCutting(CuttingSaveReqVO createReqVO) {
|
||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||
assert loginUser != null;
|
||||
MachineTemplateLimitDO organMachineTemplateDO = machineTemplateLimitMapper.selectOne(new LambdaQueryWrapperX<MachineTemplateLimitDO>()
|
||||
.eq(MachineTemplateLimitDO::getMachineId, createReqVO.getTemplateId())
|
||||
.eq(MachineTemplateLimitDO::getOrganId, loginUser.getOrganId())
|
||||
);
|
||||
if (Objects.isNull(organMachineTemplateDO)) {
|
||||
throw exception(NOT_TEMPLATE_AUTH);
|
||||
}
|
||||
// 插入
|
||||
MachineDO machineDO = MachineConvert.convert(createReqVO);
|
||||
machineMapper.insert(machineDO);
|
||||
MachineLimitDO machineLimitDO = MachineLimitDO.builder()
|
||||
.organId(loginUser.getOrganId())
|
||||
.machineId(machineDO.getId())
|
||||
.showPriorFacing(organMachineTemplateDO.getShowPriorFacing())
|
||||
.showAutoNotePrinter(organMachineTemplateDO.getShowAutoNotePrinter())
|
||||
.showDualWorkstation(organMachineTemplateDO.getShowDualWorkstation())
|
||||
.build();
|
||||
|
||||
machineLimitMapper.insert(machineLimitDO);
|
||||
// 返回
|
||||
return machineDO.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateCutting(CuttingSaveReqVO updateReqVO){
|
||||
public void updateCutting(CuttingSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateExists(updateReqVO.getId());
|
||||
// 更新
|
||||
@@ -81,7 +117,7 @@ public class MachineServiceImpl implements MachineService {
|
||||
public void deleteCutting(Long id) {
|
||||
// 校验存在
|
||||
MachineDO machineDO = machineMapper.selectById(id);
|
||||
if (machineMapper.selectById(id) == null) {
|
||||
if (machineDO == null) {
|
||||
throw exception(MACHINE_NOT_EXISTS);
|
||||
}
|
||||
machineMapper.deleteById(id);
|
||||
@@ -90,19 +126,28 @@ public class MachineServiceImpl implements MachineService {
|
||||
@Override
|
||||
public void batchDeleteCutting(List<Long> ids) {
|
||||
List<MachineDO> machineDOS = machineMapper.selectBatchIds(ids);
|
||||
if(CollectionUtil.isEmpty(machineDOS)){
|
||||
if (CollectionUtil.isEmpty(machineDOS)) {
|
||||
throw exception(MACHINE_NOT_EXISTS);
|
||||
}
|
||||
machineMapper.deleteBatchIds(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CuttingRespVO getCutting(Long id) {
|
||||
public CuttingRespVO getCutting(Long id) {
|
||||
MachineDO machineDO = machineMapper.selectById(id);
|
||||
if(Objects.isNull(machineDO)) {
|
||||
if (Objects.isNull(machineDO)) {
|
||||
throw exception(MACHINE_NOT_EXISTS);
|
||||
}
|
||||
CuttingRespVO respVO = MachineConvert.convert(machineDO);
|
||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||
assert loginUser != null;
|
||||
MachineLimitDO machineLimitDO = machineLimitMapper.selectOne(new LambdaQueryWrapperX<MachineLimitDO>()
|
||||
.eq(MachineLimitDO::getMachineId, id)
|
||||
.eq(MachineLimitDO::getOrganId, loginUser.getOrganId())
|
||||
);
|
||||
if (Objects.isNull(machineLimitDO)) {
|
||||
throw exception(NOT_TEMPLATE_AUTH);
|
||||
}
|
||||
CuttingRespVO respVO = MachineConvert.convert(machineDO, machineLimitDO);
|
||||
return respVO;
|
||||
}
|
||||
|
||||
@@ -149,7 +194,7 @@ public class MachineServiceImpl implements MachineService {
|
||||
// 删除
|
||||
DeleteByQueryRequest.Builder builder = new DeleteByQueryRequest.Builder()
|
||||
.index(DRILL_MACHINE_SETTING)
|
||||
.query(b->b.term(t->t.field("machineId").value(machineDO.getId())));
|
||||
.query(b -> b.term(t -> t.field("machineId").value(machineDO.getId())));
|
||||
try {
|
||||
elasticsearchClient.deleteByQuery(builder.build());
|
||||
} catch (IOException e) {
|
||||
@@ -162,13 +207,13 @@ public class MachineServiceImpl implements MachineService {
|
||||
@Override
|
||||
public void batchDeleteDrill(List<Long> ids) {
|
||||
List<MachineDO> machineDOS = machineMapper.selectBatchIds(ids);
|
||||
if(CollectionUtil.isEmpty(machineDOS)){
|
||||
if (CollectionUtil.isEmpty(machineDOS)) {
|
||||
throw exception(MACHINE_NOT_EXISTS);
|
||||
}
|
||||
List<FieldValue> fieldValues = machineDOS.stream().map(e -> FieldValue.of(e.getId())).collect(Collectors.toList());
|
||||
DeleteByQueryRequest.Builder builder = new DeleteByQueryRequest.Builder()
|
||||
.index(DRILL_MACHINE_SETTING)
|
||||
.query(TermsQuery.of(e-> e.field("machineId").terms(b->b.value(fieldValues)))._toQuery());
|
||||
.query(TermsQuery.of(e -> e.field("machineId").terms(b -> b.value(fieldValues)))._toQuery());
|
||||
try {
|
||||
elasticsearchClient.deleteByQuery(builder.build());
|
||||
} catch (IOException e) {
|
||||
@@ -181,7 +226,7 @@ public class MachineServiceImpl implements MachineService {
|
||||
@Override
|
||||
public DrillRespVO getDrill(Long id) {
|
||||
MachineDO machineDO = machineMapper.selectById(id);
|
||||
if(Objects.isNull(machineDO)) {
|
||||
if (Objects.isNull(machineDO)) {
|
||||
throw exception(MACHINE_NOT_EXISTS);
|
||||
}
|
||||
DrillRespVO respVO = Convert.convert(DrillRespVO.class, machineDO);
|
||||
@@ -198,7 +243,7 @@ public class MachineServiceImpl implements MachineService {
|
||||
@Override
|
||||
public Map<Integer, List<MachineVO>> getMachineTree(Long organId) {
|
||||
List<MachineDO> machineDOS = machineMapper.selectList(new LambdaQueryWrapperX<MachineDO>()
|
||||
.eqIfPresent(MachineDO::getOrganId, organId)
|
||||
.eqIfPresent(MachineDO::getOrganId, organId)
|
||||
.select(MachineDO::getName, MachineDO::getMachineType, MachineDO::getId, MachineDO::getLabelId, MachineDO::getCreateTime)
|
||||
);
|
||||
List<MachineVO> machineVOS = BeanUtils.toBean(machineDOS, MachineVO.class);
|
||||
@@ -219,15 +264,15 @@ public class MachineServiceImpl implements MachineService {
|
||||
}
|
||||
|
||||
|
||||
private Object buildResp(Long machineId, String index, Class <? extends ESDocument > clazz) {
|
||||
private Object buildResp(Long machineId, String index, Class<? extends ESDocument> clazz) {
|
||||
SearchRequest.Builder builder = new SearchRequest.Builder();
|
||||
builder.index(index);
|
||||
builder.query(q-> q.term(TermQuery.of(e->e.field("machineId").value( machineId))));
|
||||
builder.query(q -> q.term(TermQuery.of(e -> e.field("machineId").value(machineId))));
|
||||
SearchResponse<CuttingSettingDO> searchSetting = null;
|
||||
try {
|
||||
SearchResponse<?> search = elasticsearchClient.search(builder.build(), clazz);
|
||||
List<? extends Hit<?>> hits = search.hits().hits();
|
||||
if(CollectionUtil.isNotEmpty(hits)) {
|
||||
if (CollectionUtil.isNotEmpty(hits)) {
|
||||
Hit<?> hit = hits.get(0);
|
||||
return hit.source();
|
||||
}
|
||||
|
||||
+6
-15
@@ -10,31 +10,22 @@ import co.elastic.clients.elasticsearch.core.DeleteByQueryRequest;
|
||||
import co.elastic.clients.elasticsearch.core.SearchRequest;
|
||||
import co.elastic.clients.elasticsearch.core.SearchResponse;
|
||||
import co.elastic.clients.elasticsearch.core.search.Hit;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
||||
import com.cf.imes.framework.common.exception.ServiceException;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.es.core.dal.ESDocument;
|
||||
import com.cf.imes.framework.es.core.service.ESDocumentService;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.security.core.LoginUser;
|
||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import com.cf.imes.module.system.controller.admin.machine.vo.*;
|
||||
import com.cf.imes.module.system.convert.machine.MachineConvert;
|
||||
import com.cf.imes.module.system.convert.machine.MachineTemplateConvert;
|
||||
import com.cf.imes.module.system.dal.dataobject.machine.CuttingSettingDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.machine.MachineDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.machine.UserMachineDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.machinetemplate.CuttingTemplateMachineDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.machinetemplate.DrillTemplateMachineDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.machinetemplate.MachineTemplateDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.machinetemplate.OrganMachineDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.user.AdminUserDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.machinetemplate.MachineTemplateLimitDO;
|
||||
import com.cf.imes.module.system.dal.mysql.machine.UserMachineMapper;
|
||||
import com.cf.imes.module.system.dal.mysql.machinetemplate.MachineTemplateMapper;
|
||||
import com.cf.imes.module.system.dal.mysql.machinetemplate.OrganMachineMapper;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.cf.imes.module.system.dal.mysql.machinetemplate.MachineTemplateLimitMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -74,7 +65,7 @@ public class MachineTemplateServiceImpl implements MachineTemplateService {
|
||||
private MachineTemplateMapper machineTemplateMapper;
|
||||
|
||||
@Resource
|
||||
private OrganMachineMapper organMachineMapper;
|
||||
private MachineTemplateLimitMapper organMachineMapper;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@@ -332,16 +323,16 @@ public class MachineTemplateServiceImpl implements MachineTemplateService {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean auth(MachineOrgAuthReq vo) {
|
||||
organMachineMapper.delete(new LambdaQueryWrapperX<OrganMachineDO>().eq(OrganMachineDO::getOrganId, vo.getOrganId()));
|
||||
organMachineMapper.delete(new LambdaQueryWrapperX<MachineTemplateLimitDO>().eq(MachineTemplateLimitDO::getOrganId, vo.getOrganId()));
|
||||
|
||||
List<MachineAuth> machineAuthList = vo.getMachineAuthList();
|
||||
|
||||
if(CollectionUtil.isNotEmpty(machineAuthList)) {
|
||||
List<OrganMachineDO> organMachineDOS = new ArrayList<>();
|
||||
List<MachineTemplateLimitDO> organMachineDOS = new ArrayList<>();
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
for (MachineAuth machineAuth : machineAuthList) {
|
||||
organMachineDOS.add(
|
||||
OrganMachineDO.builder()
|
||||
MachineTemplateLimitDO.builder()
|
||||
.createTime(now)
|
||||
.organId(vo.getOrganId())
|
||||
.machineId(machineAuth.getMachineId())
|
||||
|
||||
+2
-2
@@ -269,9 +269,9 @@ public class OrganServiceImpl implements OrganService {
|
||||
throw exception(ORGAN_NOT_EXISTS);
|
||||
}
|
||||
// 内置组织,不允许删除
|
||||
if (isSystemTenant(tenant)) {
|
||||
/*if (isSystemTenant(tenant)) {
|
||||
throw exception(ORGAN_CAN_NOT_UPDATE_SYSTEM);
|
||||
}
|
||||
}*/
|
||||
return tenant;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user