机台,标签配置压缩

This commit is contained in:
liuzhaotian
2024-07-09 15:39:21 +08:00
parent 6b7e30e0aa
commit b5086b450b
16 changed files with 473 additions and 42 deletions
@@ -10,13 +10,19 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import lombok.Data;
import lombok.SneakyThrows;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.zip.DataFormatException;
import java.util.zip.Deflater;
import java.util.zip.Inflater;
/**
* JSON 工具类
@@ -184,4 +190,245 @@ public class JsonUtils {
return JSONUtil.isTypeJSON(text);
}
/**
* 压缩
*/
public static String zipString(String unzipString) {
/**
* https://www.yiibai.com/javazip/javazip_deflater.html#article-start
* 0 ~ 9 压缩等级 低到高
* public static final int BEST_COMPRESSION = 9; 最佳压缩的压缩级别。
* public static final int BEST_SPEED = 1; 压缩级别最快的压缩。
* public static final int DEFAULT_COMPRESSION = -1; 默认压缩级别。
* public static final int DEFAULT_STRATEGY = 0; 默认压缩策略。
* public static final int DEFLATED = 8; 压缩算法的压缩方法(目前唯一支持的压缩方法)。
* public static final int FILTERED = 1; 压缩策略最适用于大部分数值较小且数据分布随机分布的数据。
* public static final int FULL_FLUSH = 3; 压缩刷新模式,用于清除所有待处理的输出并重置拆卸器。
* public static final int HUFFMAN_ONLY = 2; 仅用于霍夫曼编码的压缩策略。
* public static final int NO_COMPRESSION = 0; 不压缩的压缩级别。
* public static final int NO_FLUSH = 0; 用于实现最佳压缩结果的压缩刷新模式。
* public static final int SYNC_FLUSH = 2; 用于清除所有未决输出的压缩刷新模式; 可能会降低某些压缩算法的压缩率。
*/
//使用指定的压缩级别创建一个新的压缩器。
Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION);
//设置压缩输入数据。
deflater.setInput(unzipString.getBytes());
//当被调用时,表示压缩应该以输入缓冲区的当前内容结束。
deflater.finish();
final byte[] bytes = new byte[256];
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(256);
while (!deflater.finished()) {
//压缩输入数据并用压缩数据填充指定的缓冲区。
int length = deflater.deflate(bytes);
outputStream.write(bytes, 0, length);
}
//关闭压缩器并丢弃任何未处理的输入。
deflater.end();
return Base64.getEncoder().encodeToString(outputStream.toByteArray());
}
/**
* 解压缩
*/
public static String unzipString(String zipString) {
byte[] decode = Base64.getDecoder().decode(zipString);
//创建一个新的解压缩器 https://www.yiibai.com/javazip/javazip_inflater.html
Inflater inflater = new Inflater();
//设置解压缩的输入数据。
inflater.setInput(decode);
final byte[] bytes = new byte[256];
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(256);
try {
//finished() 如果已到达压缩数据流的末尾,则返回true。
while (!inflater.finished()) {
//将字节解压缩到指定的缓冲区中。
int length = inflater.inflate(bytes);
outputStream.write(bytes, 0, length);
}
} catch (DataFormatException e) {
e.printStackTrace();
return null;
} finally {
//关闭解压缩器并丢弃任何未处理的输入。
inflater.end();
}
return outputStream.toString();
}
/*
* */
public static List<List<Object>> jsonTo2DArray(String jsonString) {
try {
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonArray = objectMapper.readTree(jsonString);
Set<String> headers = new LinkedHashSet<>();
List<List<Object>> result = new ArrayList<>();
// 从数组中的所有对象收集标头
if (jsonArray.isArray()) {
for (JsonNode jsonObject : jsonArray) {
Iterator<String> fieldNames = jsonObject.fieldNames();
while (fieldNames.hasNext()) {
headers.add(fieldNames.next());
}
}
}
result.add(new ArrayList<>(headers));
// 提取行
for (JsonNode jsonObject : jsonArray) {
List<Object> row = new ArrayList<>();
for (String header : headers) {
JsonNode valueNode = jsonObject.get(header);
if (valueNode != null) {
if (valueNode.isTextual()) {
row.add(valueNode.asText());
} else if (valueNode.isInt()) {
row.add(valueNode.asInt());
} else if (valueNode.isBoolean()) {
row.add(valueNode.asBoolean());
} else if (valueNode.isDouble()) {
row.add(valueNode.asDouble());
} else if (valueNode.isArray() || valueNode.isObject() ) {
row.add(jsonTo2DArray(valueNode.toString()));
} else {
row.add(valueNode.asText());
}
} else {
row.add(null); // 处理缺少的值
}
}
result.add(row);
}
return result;
} catch (Exception e) {
e.printStackTrace();
return new ArrayList<>();
}
}
// 抽取 json数据,不改变数据结构对应的值,只改变数据结构(参考 HPACK 算法) 实现json数据抽取
public static List<List<Object>> getData(Object object) {
String jsonString = toJsonString(object);
ObjectMapper mapper = new ObjectMapper();
try {
List<Map<String, Object>> list = mapper.readValue(jsonString, new TypeReference<>() {});
List<List<Object>> result = convertTo2DArray(list);
//
return result;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private static List<List<Object>> convertTo2DArray(List<Map<String, Object>> list) {
List<List<Object>> result = new ArrayList<>();
// Get the headers from the first map
if (list.size() > 0) {
Map<String, Object> firstMap = list.get(0);
List<Object> headers = new ArrayList<>(firstMap.keySet());
result.add(headers);
//
// Add rows
for (Map<String, Object> map : list) {
//
List<Object> row = new ArrayList<>();
for (Object header : headers) {
row.add(map.get(header));
}
result.add(row);
}
}
return result;
}
// 将所有抽取后的 json 数据都加入一个统一的数据类型中,方便前端解析哪些代码是抽取的数据,进行数据还原
@Data
@ToString(callSuper = true)
public static class ExtractedData {
List<List<Object>> extractedData;
}
public static List<List<List<Object>>> fetchData(Object obj) {
List<List<List<Object>>> data = new ArrayList<>();
try {
// 获取所有字段
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
// 跳过静态或常量字段
if (java.lang.reflect.Modifier.isStatic(field.getModifiers()) ||
java.lang.reflect.Modifier.isFinal(field.getModifiers())) {
continue;
}
// 确保字段是可访问的
field.setAccessible(true);
// 获取字段值
Object fieldValue = field.get(obj);
// 如果字段值是一个对象,递归调用 fetchData
if (fieldValue != null && isCustomObject(fieldValue)) {
data.add(JsonUtils.jsonTo2DArray(toJsonString(fieldValue)));
fetchData(fieldValue);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
// 判断一个对象是否是自定义的类对象
private static boolean isCustomObject(Object obj) {
Class<?> clazz = obj.getClass();
// 自定义对象通常不会是 Java 的基本类型或标准库类型
// 这里可以根据具体需求进行更加复杂的判断
return !clazz.isPrimitive() &&
!clazz.getName().startsWith("java.") &&
!clazz.getName().startsWith("javax.") &&
!clazz.getName().startsWith("sun.") &&
!clazz.isAssignableFrom(Collection.class) &&
!clazz.isAssignableFrom(Map.class);
}
}
@@ -3,6 +3,7 @@ package com.cf.imes.module.system.controller.admin.label;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.pojo.PageParam;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.excel.core.util.ExcelUtils;
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
@@ -23,6 +24,8 @@ import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.cf.imes.framework.common.pojo.CommonResult.success;
import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@@ -103,7 +106,8 @@ public class LabelController {
public void exportLabelExcel(@Valid LabelPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<LabelDO> list = labelService.getLabelPage(pageReqVO).getList();
List<LabelDO> list = labelService.getLabelPage(pageReqVO).getList()
.stream().map(m->m.setTemplate(JsonUtils.unzipString(m.getTemplate()))).collect(Collectors.toList());
// 导出 Excel
ExcelUtils.write(response, "标签.xls", "数据", LabelRespVO.class,
BeanUtils.toBean(list, LabelRespVO.class));
@@ -1,5 +1,6 @@
package com.cf.imes.module.system.controller.admin.labeltemplate;
import com.cf.imes.framework.common.util.json.JsonUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -8,6 +9,8 @@ import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import java.util.*;
import java.io.IOException;
import java.util.stream.Collectors;
import com.cf.imes.framework.common.pojo.PageParam;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.pojo.CommonResult;
@@ -108,7 +111,8 @@ public class LabelTemplateController {
public void exportLabelTemplateExcel(@Valid LabelTemplatePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<LabelTemplateDO> list = labelTemplateService.getLabelTemplatePage(pageReqVO).getList();
List<LabelTemplateDO> list = labelTemplateService.getLabelTemplatePage(pageReqVO).getList()
.stream().map(m->m.setTemplate(JsonUtils.unzipString(m.getTemplate()))).collect(Collectors.toList());
// 导出 Excel
ExcelUtils.write(response, "标签模板.xls", "数据", LabelTemplateRespVO.class,
BeanUtils.toBean(list, LabelTemplateRespVO.class));
@@ -1,12 +1,10 @@
package com.cf.imes.module.system.controller.admin.machine;
import com.cf.imes.framework.common.enums.CommonStatusEnum;
import com.cf.imes.framework.es.core.valid.CreateGroup;
import com.cf.imes.framework.es.core.valid.UpdateGroup;
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
import com.cf.imes.module.system.controller.admin.machine.vo.*;
import com.cf.imes.module.system.dal.dataobject.dept.DeptDO;
import com.cf.imes.module.system.dal.dataobject.machine.MachineDO;
import com.cf.imes.module.system.service.machine.MachineService;
import com.cf.imes.module.system.service.machine.MachineTemplateService;
@@ -139,4 +137,16 @@ public class MachineController {
return success(list);
}
@GetMapping("getBrandAndModel")
@Operation(summary = "获得机台的品牌跟型号")
//@PreAuthorize("@ss.hasPermission('machine::query')")
public CommonResult<Map<String, List<MachineBrandModelRespVO>>> getBrandAndModel(@RequestParam Long type) {
return success(machineService.getBrandAndModel(type));
}
}
@@ -31,6 +31,15 @@ public class CuttingRespVO {
@Schema(description = "标签id")
private Long labelId;
@Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
@ExcelProperty("品牌")
private String brand;
@Schema(description = "型号", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
@ExcelProperty("型号")
private String model;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@@ -29,23 +29,23 @@ public class CuttingSaveReqVO {
private Integer machineType;
@Schema(description = "标签id")
@NotNull(message = "标签id不能空")
// @NotNull(message = "标签id不能空")
private Long labelId;
@Schema(description = "机台模板id")
@NotNull(groups = CreateGroup.class, message = "机台模板id不能空")
private Long templateId;
/* @Schema(description = "机台配置")
@Valid
private CuttingSettingDO machineSettingDO;*/
@Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED)
// @NotNull(message = "机台的品牌不能为空")
private String brand;
@Schema(description = "型号", requiredMode = Schema.RequiredMode.REQUIRED)
// @NotNull(message = "机台的型号不能为空")
private String model;
@Schema(description = "机台配置")
private JSONObject machineSettingDO;
/* @Schema(description = "样式配置")
@Valid
private StyleMachineDO styleMachineDO;*/
}
@@ -0,0 +1,17 @@
package com.cf.imes.module.system.controller.admin.machine.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(description = "机台的型号信息")
public class MachineBrandModelRespVO {
@Schema(description = "机台的品牌")
private String brand;
@Schema(description = "机台的型号")
private String model;
}
@@ -15,11 +15,13 @@ public class MachineConvert {
public static MachineDO convert(CuttingSaveReqVO createReqVO) {
return MachineDO.builder()
.machineType(createReqVO.getMachineType())
.name(createReqVO.getName())
.id(createReqVO.getId())
.labelId(createReqVO.getLabelId())
.setting(createReqVO.getMachineSettingDO().toJSONString())
.machineType(createReqVO.getMachineType())
.name(createReqVO.getName())
.id(createReqVO.getId())
.labelId(createReqVO.getLabelId())
.setting(createReqVO.getMachineSettingDO().toJSONString())
.brand(createReqVO.getBrand())
.model(createReqVO.getModel())
.build();
}
@@ -29,7 +31,8 @@ public class MachineConvert {
.id(machineDO.getId())
.machineSettingDO(JSON.parseObject(machineDO.getSetting()))
.createTime(machineDO.getCreateTime())
.labelId(machineDO.getLabelId())
.brand(machineDO.getBrand())
.model(machineDO.getModel())
.name(machineDO.getName())
.machineType(machineDO.getMachineType())
.labelId(machineDO.getLabelId())
@@ -45,4 +45,15 @@ public class MachineDO extends OrganBaseDO {
*/
private String setting;
/**
* 品牌
*/
private String brand;
/**
* 型号
*/
private String model;
}
@@ -37,6 +37,17 @@ public class MachineTemplateDO extends BaseDO {
*/
private String setting;
/**
* 品牌
*/
private String brand;
/**
* 型号
*/
private String model;
/**
* 标签id
*/
@@ -40,4 +40,13 @@ public interface MachineTemplateMapper extends BaseMapperX<MachineTemplateDO> {
Page<OrganTemplateResp> selectOrganTemplatePage(@Param("page") Page<OrganTemplateResp> respPage, @Param("vo") OrganTemplatePage page);
OrganTemplateResp selectOrganTemplate(Long organId);
default MachineTemplateDO selectMachineId(String brand, String model) {
return selectOne(new LambdaQueryWrapperX<MachineTemplateDO>()
.eqIfPresent(MachineTemplateDO::getBrand,brand)
.eqIfPresent(MachineTemplateDO::getModel,model));
}
}
@@ -1,6 +1,7 @@
package com.cf.imes.module.system.service.labeltemplate;
import cn.hutool.core.collection.CollectionUtil;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -34,6 +35,7 @@ public class LabelTemplateServiceImpl implements LabelTemplateService {
public Long createLabelTemplate(LabelTemplateSaveReqVO createReqVO) {
// 插入
LabelTemplateDO labelTemplate = BeanUtils.toBean(createReqVO, LabelTemplateDO.class);
labelTemplate.setTemplate(JsonUtils.zipString(labelTemplate.getTemplate()));
labelTemplateMapper.insert(labelTemplate);
// 返回
return labelTemplate.getId();
@@ -45,6 +47,10 @@ public class LabelTemplateServiceImpl implements LabelTemplateService {
validateLabelTemplateExists(updateReqVO.getId());
// 更新
LabelTemplateDO updateObj = BeanUtils.toBean(updateReqVO, LabelTemplateDO.class);
if(!updateReqVO.getTemplate().isEmpty()){
updateObj.setTemplate(JsonUtils.zipString(updateObj.getTemplate()));
}
labelTemplateMapper.updateById(updateObj);
}
@@ -71,6 +77,7 @@ public class LabelTemplateServiceImpl implements LabelTemplateService {
@Override
public LabelTemplateRespVO getLabelTemplate(Long id) {
LabelTemplateDO labelTemplateDO = labelTemplateMapper.selectById(id);
labelTemplateDO.setTemplate(JsonUtils.unzipString(labelTemplateDO.getTemplate()));
LabelTemplateRespVO labelTemplateRespVO = BeanUtils.toBean(labelTemplateDO, LabelTemplateRespVO.class);
return labelTemplateRespVO;
}
@@ -83,7 +90,8 @@ public class LabelTemplateServiceImpl implements LabelTemplateService {
@Override
public Map<String, List<LabelTemplateRespVO>> getGroupList() {
List<LabelTemplateDO> labelTemplateDOS = labelTemplateMapper.selectList();
List<LabelTemplateDO> labelTemplateDOS = labelTemplateMapper.selectList()
.stream().map( m-> m.setTemplate(JsonUtils.unzipString(m.getTemplate()))).collect(Collectors.toList());
List<LabelTemplateRespVO> labelTemplateRespVOS = BeanUtils.toBean(labelTemplateDOS, LabelTemplateRespVO.class);
return labelTemplateRespVOS.stream().collect(Collectors.groupingBy(LabelTemplateRespVO::getType));
}
@@ -99,6 +107,7 @@ public class LabelTemplateServiceImpl implements LabelTemplateService {
throw exception(DEFAULT_TEMPLATE_COUNT);
}
LabelTemplateDO labelTemplateDO = labelTemplateDOS.get(0);
labelTemplateDO.setTemplate(JsonUtils.unzipString(labelTemplateDO.getTemplate()));
LabelTemplateRespVO labelTemplateRespVO = BeanUtils.toBean(labelTemplateDO, LabelTemplateRespVO.class);
return labelTemplateRespVO;
}
@@ -116,13 +125,15 @@ public class LabelTemplateServiceImpl implements LabelTemplateService {
.eq(LabelTemplateDO::getIsDefault, Boolean.TRUE)
.eq(LabelTemplateDO::getType, labelTemplateDO.getType())
);
if(CollectionUtil.isEmpty(labelTemplateDOS) || labelTemplateDOS.size()>1) {
throw exception(DEFAULT_TEMPLATE_COUNT);
// if(CollectionUtil.isEmpty(labelTemplateDOS) || labelTemplateDOS.size()>1) {
// throw exception(DEFAULT_TEMPLATE_COUNT);
// }
if(!labelTemplateDOS.isEmpty()){
LabelTemplateDO templateDO = new LabelTemplateDO();
templateDO.setId(labelTemplateDOS.get(0).getId());
templateDO.setIsDefault(Boolean.FALSE);
labelTemplateMapper.updateById(templateDO);
}
LabelTemplateDO templateDO = new LabelTemplateDO();
templateDO.setId(labelTemplateDOS.get(0).getId());
templateDO.setIsDefault(Boolean.FALSE);
labelTemplateMapper.updateById(templateDO);
labelTemplateDO.setIsDefault(Boolean.TRUE);
labelTemplateMapper.updateById(labelTemplateDO);
@@ -2,6 +2,7 @@ package com.cf.imes.module.system.service.lable;
import cn.hutool.core.collection.CollectionUtil;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.system.controller.admin.label.vo.*;
@@ -42,6 +43,7 @@ public class LabelServiceImpl implements LabelService {
public Long createLabel(LabelSaveReqVO createReqVO) {
// 插入
LabelDO Label = BeanUtils.toBean(createReqVO, LabelDO.class);
Label.setTemplate(JsonUtils.zipString(Label.getTemplate()));
labelMapper.insert(Label);
// 返回
return Label.getId();
@@ -54,6 +56,10 @@ public class LabelServiceImpl implements LabelService {
validateLabelExists(updateReqVO.getId());
// 更新
LabelDO updateObj = BeanUtils.toBean(updateReqVO, LabelDO.class);
if(!updateReqVO.getTemplate().isEmpty()){
updateObj.setTemplate(JsonUtils.zipString(updateObj.getTemplate()));
}
labelMapper.updateById(updateObj);
}
@@ -86,34 +92,43 @@ public class LabelServiceImpl implements LabelService {
@Override
public LabelRespVO getLabel(Long id) {
LabelDO LabelDO = labelMapper.selectById(id);
LabelDO.setTemplate(JsonUtils.unzipString(LabelDO.getTemplate()));
LabelRespVO LabelRespVO = BeanUtils.toBean(LabelDO, LabelRespVO.class);
return LabelRespVO;
}
@Override
public PageResult<LabelDO> getLabelPage(LabelPageReqVO pageReqVO) {
return labelMapper.selectPage(pageReqVO);
PageResult<LabelDO> labelDOPageResult = labelMapper.selectPage(pageReqVO);
labelDOPageResult.setList(labelDOPageResult.getList().stream().map(m -> m.setTemplate(JsonUtils.unzipString(m.getTemplate()))).collect(Collectors.toList()));
return labelDOPageResult;
}
@Override
public Map<String, List<LabelRespVO>> getGroupList(Long organId) {
List<LabelDO> LabelDOS = labelMapper.selectList(new LambdaQueryWrapperX<LabelDO>().eqIfPresent(LabelDO::getOrganId, organId));
List<LabelDO> LabelDOS = labelMapper.selectList(new LambdaQueryWrapperX<LabelDO>()
.eqIfPresent(LabelDO::getOrganId, organId)
/*.eq(LabelDO::getDeleted,false)*/)
.stream().map(m -> m.setTemplate(JsonUtils.unzipString(m.getTemplate()))).collect(Collectors.toList());
List<LabelRespVO> LabelRespVOS = BeanUtils.toBean(LabelDOS, LabelRespVO.class);
return LabelRespVOS.stream().collect(Collectors.groupingBy(LabelRespVO::getType));
}
@Override
public List<LabelDO> list(String type) {
return labelMapper.selectList(new LambdaQueryWrapperX<LabelDO>()
.eq(LabelDO::getOrganId,getUserOrganId())
.eqIfPresent(LabelDO::getType, type));
// return labelMapper.selectList(new LambdaQueryWrapperX<LabelDO>()
// .eqIfPresent(LabelDO::getType, type)
// .eq(LabelDO::getOrganId,getUserOrganId()))
// .stream().map( m -> m.setTemplate(JsonUtils.unzipString(m.getTemplate()))).collect(Collectors.toList());
// .eq(LabelDO::getOrganId,getUserOrganId())
// .eqIfPresent(LabelDO::getType, type));
return labelMapper.selectList(new LambdaQueryWrapperX<LabelDO>()
.eqIfPresent(LabelDO::getType, type)
.eq(LabelDO::getOrganId,getUserOrganId()))
.stream().map( m -> m.setTemplate(JsonUtils.unzipString(m.getTemplate()))).collect(Collectors.toList());
}
@@ -82,4 +82,6 @@ public interface MachineService {
PageResult<MachineDO> page(MachinePageReqVO pageParam);
List<MachineSimpleRespVO> simpleList(Long organId,Long type);
Map<String, List<MachineBrandModelRespVO>> getBrandAndModel(Long type);
}
@@ -11,6 +11,7 @@ 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.extension.plugins.pagination.Page;
import com.cf.imes.framework.common.util.json.JsonUtils;
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;
@@ -24,10 +25,12 @@ 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.MachineTemplateDO;
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;
@@ -78,6 +81,9 @@ public class MachineServiceImpl implements MachineService {
@Resource
private MachineTemplateLimitMapper machineTemplateLimitMapper;
@Resource
private MachineTemplateMapper machineTemplateMapper;
@Resource
private OrderPlanApi orderPlanApi;
@@ -86,13 +92,22 @@ public class MachineServiceImpl implements MachineService {
public Long createCutting(CuttingSaveReqVO createReqVO) {
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
assert loginUser != null;
// MachineTemplateDO machineTemplateDO = machineTemplateMapper.selectMachineId(createReqVO.getBrand(), createReqVO.getModel());
MachineTemplateLimitDO organMachineTemplateDO = machineTemplateLimitMapper.selectOne(new LambdaQueryWrapperX<MachineTemplateLimitDO>()
.eq(MachineTemplateLimitDO::getMachineId, createReqVO.getTemplateId())
.eq(MachineTemplateLimitDO::getOrganId, loginUser.getOrganId())
);
// 插入
MachineDO machineDO = MachineConvert.convert(createReqVO);
// if(createReqVO.getMachineSettingDO().isEmpty()) {
// machineDO.setSetting(machineTemplateDO.getSetting());
// }
// 将机台的配置数据进行压缩
machineDO.setSetting(JsonUtils.zipString(machineDO.getSetting()));
machineMapper.insert(machineDO);
MachineLimitDO machineLimitDO = MachineLimitDO.builder()
.organId(loginUser.getOrganId())
.machineId(machineDO.getId())
@@ -113,6 +128,13 @@ public class MachineServiceImpl implements MachineService {
// 更新
MachineDO updateObj = MachineConvert.convert(updateReqVO);
//MachineDO updateObj = BeanUtils.toBean(updateReqVO, MachineDO.class);
// 判断传入的机台配置是否存在,如果存在,压缩数据后更新
if(!updateReqVO.getMachineSettingDO().isEmpty()){
updateObj.setSetting(JsonUtils.zipString(updateObj.getSetting()));
}
machineMapper.updateById(updateObj);
}
@@ -142,6 +164,10 @@ public class MachineServiceImpl implements MachineService {
@Override
public CuttingRespVO getCutting(Long id) {
MachineDO machineDO = machineMapper.selectById(id);
// 对机台的配置进行解压
machineDO.setSetting(JsonUtils.unzipString(machineDO.getSetting()));
if (Objects.isNull(machineDO)) {
throw exception(MACHINE_NOT_EXISTS);
}
@@ -312,16 +338,48 @@ public class MachineServiceImpl implements MachineService {
return BeanUtils.toBean(machineDOS, MachineSimpleRespVO.class);
}
@Override
public Map<String, List<MachineBrandModelRespVO>> getBrandAndModel(Long type) {
List<MachineDO> machineDOS = machineMapper.selectList(new LambdaQueryWrapperX<MachineDO>()
.eqIfPresent(MachineDO::getOrganId, getUserOrganId())
.eqIfPresent(MachineDO::getMachineType, type)
.select(MachineDO::getModel,MachineDO::getBrand)
).stream().filter(f -> (!Objects.equals(f.getModel(), ""))).toList();
List<MachineBrandModelRespVO> machineVOS = BeanUtils.toBean(machineDOS, MachineBrandModelRespVO.class);
Map<String, List<MachineBrandModelRespVO>> map = machineVOS.stream().collect(Collectors.groupingBy(MachineBrandModelRespVO::getBrand));
return map;
}
private void validateExists(Long id) {
if (machineMapper.selectById(id) == null) {
throw exception(MACHINE_NOT_EXISTS);
}
}
private Boolean validateBrandAndModel(String brand, String model){
return true;
}
@Override
public PageResult<MachineDO> getPage(MachinePageReqVO pageReqVO) {
return machineMapper.selectPage(pageReqVO);
// return machineMapper.selectPage(pageReqVO);
PageResult<MachineDO> machineDOPageResult = machineMapper.selectPage(pageReqVO);
// 将查询到的机台的数据中的配置信息进行解压
List<MachineDO> list = machineDOPageResult.getList().stream().map(m -> m.setSetting(JsonUtils.unzipString(m.getSetting()))).collect(Collectors.toList());
return machineDOPageResult.setList(list);
}
@@ -13,6 +13,7 @@ import co.elastic.clients.elasticsearch.core.search.Hit;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.json.JsonUtils;
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;
@@ -156,6 +157,10 @@ public class MachineTemplateServiceImpl implements MachineTemplateService {
@Transactional(rollbackFor = Exception.class)
public Long createCuttingTemplate(CuttingTemplateSaveReqVO reqVO) {
MachineTemplateDO templateDO = MachineTemplateConvert.convert(reqVO);
if(!templateDO.getSetting().isEmpty()){
templateDO.setSetting(JsonUtils.zipString(templateDO.getSetting()));
}
machineTemplateMapper.insert(templateDO);
return templateDO.getId();
}
@@ -163,6 +168,10 @@ public class MachineTemplateServiceImpl implements MachineTemplateService {
@Override
public Boolean updateCuttingTemplate(CuttingTemplateSaveReqVO reqVO) {
MachineTemplateDO templateDO = MachineTemplateConvert.convert(reqVO);
if(!reqVO.getSetting().isEmpty()){
templateDO.setSetting(JsonUtils.zipString(templateDO.getSetting()));
}
machineTemplateMapper.updateById(templateDO);
return Boolean.TRUE;
}
@@ -170,6 +179,7 @@ public class MachineTemplateServiceImpl implements MachineTemplateService {
@Override
public CuttingTemplateRespVO getCuttingTemplateById(String id) {
MachineTemplateDO templateDO = machineTemplateMapper.selectById(id);
templateDO.setSetting(JsonUtils.unzipString(templateDO.getSetting()));
if (Objects.isNull(templateDO)) {
throw exception(MACHINE_TEMPLATE_NOT_EXISTS);
}
@@ -198,6 +208,8 @@ public class MachineTemplateServiceImpl implements MachineTemplateService {
throw exception(DEFAULT_TEMPLATE_COUNT);
}
MachineTemplateDO templateDO = machineTemplateDOS.get(0);
// 将机台的模板配置进行解压
templateDO.setSetting(JsonUtils.unzipString(templateDO.getSetting()));
return MachineTemplateConvert.convert1(templateDO);
}
throw exception(DEFAULT_TEMPLATE_NOT_EXISTS);
@@ -224,7 +236,10 @@ public class MachineTemplateServiceImpl implements MachineTemplateService {
@Override
public Map<Integer, List<MachineTemplateDO>> getMachineTemplateTree() {
List<MachineTemplateDO> machineTemplateDOS = machineTemplateMapper.selectList();
List<MachineTemplateDO> machineTemplateDOS = machineTemplateMapper.selectList()
// 将机台的配置进行解压
.stream().map(m -> m.setSetting(JsonUtils.unzipString(m.getSetting()))).collect(Collectors.toList());
Map<Integer, List<MachineTemplateDO>> map = machineTemplateDOS.stream().collect(Collectors.groupingBy(MachineTemplateDO::getMachineType));
return map;
}
@@ -256,9 +271,9 @@ public class MachineTemplateServiceImpl implements MachineTemplateService {
throw exception(MACHINE_TEMPLATE_NOT_EXISTS);
}
List<MachineTemplateDO> machineTemplateDOS = machineTemplateMapper.selectList(MachineTemplateDO::getMachineType, templateDO.getMachineType(), MachineTemplateDO::getIsDefault, Boolean.TRUE);
// if(CollectionUtil.isEmpty(machineTemplateDOS) || machineTemplateDOS.size()>1) {
// throw exception(DEFAULT_TEMPLATE_COUNT);
// }
if(CollectionUtil.isEmpty(machineTemplateDOS) || machineTemplateDOS.size()>1) {
throw exception(DEFAULT_TEMPLATE_COUNT);
}
if(!machineTemplateDOS.isEmpty()){
MachineTemplateDO machineTemplateDO = new MachineTemplateDO();
@@ -396,7 +411,12 @@ public class MachineTemplateServiceImpl implements MachineTemplateService {
if(CollectionUtil.isEmpty(machineIds)) {
return new PageResult<>();
}*/
return machineTemplateMapper.selectPage(pageParam, new ArrayList<>());
PageResult<MachineTemplateDO> machineTemplateDOPageResult = machineTemplateMapper.selectPage(pageParam, new ArrayList<>());
// 将机台模板的配置进行解压
machineTemplateDOPageResult.setList(machineTemplateDOPageResult.getList().stream().map(m -> m.setSetting(JsonUtils.unzipString(m.getSetting()))).collect(Collectors.toList()));
return machineTemplateDOPageResult;
}