添加机台授权逻辑,修改机台授权的实体类

This commit is contained in:
yangsb
2024-04-12 11:30:19 +08:00
parent e5115fe21a
commit 83318aefcf
11 changed files with 147 additions and 37 deletions
@@ -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, "标签模板不存在");
@@ -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;
}
@@ -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;*/
@@ -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();
}
@@ -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;
}
@@ -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;
/**
@@ -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> {
}
@@ -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> {
}
@@ -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();
}
@@ -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())
@@ -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;
}