<!-- ZXing是谷歌开源的支持二维码、条形码 等图形的生成类库-->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.5.0</version>
</dependency>
package com.isoftstone.tms.common.utils;
import cn.hutool.core.codec.Base64;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.isoftstone.logistics.exception.BusinessException;
import com.isoftstone.tms.common.enums.TmsResultEnum;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;
public class QRCodeUtil {
private static final String DEFAULT_FORMAT = "png";
private static final Map<EncodeHintType, Object> QR_DEFAULT_HINTS = new HashMap<>();
private static final Map<EncodeHintType, Object> BAR_DEFAULT_HINTS = new HashMap<>();
static {
QR_DEFAULT_HINTS.put(EncodeHintType.CHARACTER_SET, StandardCharsets.UTF_8.name());
BAR_DEFAULT_HINTS.put(EncodeHintType.CHARACTER_SET, StandardCharsets.UTF_8.name());
QR_DEFAULT_HINTS.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
QR_DEFAULT_HINTS.put(EncodeHintType.MARGIN, 1);
}
public static void genQRCode(OutputStream os, String content, int width, int height) {
BitMatrix bitMatrix = null;
try {
bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, QR_DEFAULT_HINTS);
MatrixToImageWriter.writeToStream(bitMatrix, DEFAULT_FORMAT, os);
} catch (Exception e) {
e.printStackTrace();
throw new BusinessException(TmsResultEnum.QR_CODE_GEN_ERROR.getMessage());
}
}
public static String genQRCodeAsByteArray(String content, int width, int height) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
genQRCode(baos, content, width, height);
return Base64.encode(baos.toByteArray());
}
public static void genQrCode(String path, String content, int width, int height) {
BitMatrix bitMatrix = null;
try {
bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, QR_DEFAULT_HINTS);
MatrixToImageWriter.writeToPath(bitMatrix, DEFAULT_FORMAT, Paths.get(path));
} catch (Exception e) {
e.printStackTrace();
throw new BusinessException(TmsResultEnum.QR_CODE_GEN_ERROR.getMessage());
}
}
public static String genBarCodeAsByteArray(String content, int width, int height) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
genBarCode(baos, content, width, height);
return Base64.encode(baos.toByteArray());
}
public static void genBarCode(OutputStream os, String contents, int width, int height) {
try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, BarcodeFormat.CODE_128, width, height, BAR_DEFAULT_HINTS);
MatrixToImageWriter.writeToStream(bitMatrix, DEFAULT_FORMAT, os);
} catch (Exception e) {
e.printStackTrace();
throw new BusinessException(TmsResultEnum.BAR_CODE_GEN_ERROR.getMessage());
}
}
public static void genBarCode(String path, String content, int width, int height) {
try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.CODE_128, width, height, BAR_DEFAULT_HINTS);
MatrixToImageWriter.writeToPath(bitMatrix, DEFAULT_FORMAT, Paths.get(path));
} catch (Exception e) {
e.printStackTrace();
throw new BusinessException(TmsResultEnum.BAR_CODE_GEN_ERROR.getMessage());
}
}
public static void main(String[] args) {
String bARContent = "JGDH0000001";
String bCodeString = genBarCodeAsByteArray(bARContent, 400, 50);
System.out.println(bCodeString);
genBarCode("/Users/yanghe/logs/bar.png",bARContent,400,50);
}
}
package com.isoftstone.tms.service;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.isoftstone.logistics.annotation.EnumType;
import com.isoftstone.logistics.entity.EnumItem;
import com.isoftstone.logistics.enums.BaseEnum;
import com.isoftstone.logistics.exception.BusinessException;
import com.isoftstone.tms.common.enums.TmsResultEnum;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.core.type.filter.AnnotationTypeFilter;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
@Service
public class EnumService<E extends Enum> {
private Map<String, List<EnumItem>> enumMap = null;
private synchronized Map<String, List<EnumItem>> getEnumMap() {
if (enumMap == null) {
enumMap = new HashMap<>();
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
provider.addIncludeFilter(new AnnotationTypeFilter(EnumType.class));
Set<BeanDefinition> beanDefinitionSet = new HashSet<>();
beanDefinitionSet.addAll(provider.findCandidateComponents("com.isoftstone.tms.common.enums"));
beanDefinitionSet.addAll(provider.findCandidateComponents("com.isoftstone.logistics.enums"));
for (BeanDefinition bd : beanDefinitionSet) {
Class<E> enumClass;
try {
enumClass = (Class<E>) Class.forName(bd.getBeanClassName());
} catch (ClassNotFoundException e) {
throw new BusinessException(TmsResultEnum.DATA_NOT_FOUND.getMessage());
}
List<EnumItem> items = new ArrayList<>();
Field[] fields = enumClass.getFields();
for (Field field : fields) {
if (Modifier.isStatic(field.getModifiers()) && field.getType().equals(enumClass)) {
try {
if(field.get(null) instanceof BaseEnum){
BaseEnum codeBasedEnum = (BaseEnum) field.get(null);
items.add(EnumItem.builder()
.name(codeBasedEnum.getName())
.value(codeBasedEnum.getCode())
.build());
}
} catch (IllegalAccessException e) {
throw new BusinessException(TmsResultEnum.DATA_ERROR.getMessage());
}
}
}
if(CollectionUtils.isNotEmpty(items)){
String enumType = enumClass.getAnnotation(EnumType.class).value();
enumMap.put(enumType, items);
}
}
}
return enumMap;
}
public List<EnumItem> getEnumItems(String enumType) {
return getEnumMap().get(enumType);
}
public synchronized void clearEnumItems() {
this.enumMap = null;
}
}
package com.isoftstone.tms.common.enums;
import com.isoftstone.logistics.annotation.EnumType;
import com.isoftstone.logistics.enums.BaseEnum;
import com.isoftstone.logistics.enums.EnumEnhancer;
@EnumType("shipmentException")
public enum ShipmentExceptionEnum implements BaseEnum {
EXCEPTION("异常", "EXCEPTION"),
WARNING("预警", "WARNING"),
NORMAL("正常", "NORMAL");
private String label;
private String code;
ShipmentExceptionEnum(String label, String code) {
this.label = label;
this.code = code;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getCode() {
return code;
}
@Override
public String getName() {
return this.label;
}
public void setCode(String code) {
this.code = code;
}
private static final EnumEnhancer<ShipmentExceptionEnum> enhancer = new EnumEnhancer<>(values());
public static ShipmentExceptionEnum getValue(String code) {
return enhancer.lookup(code);
}
public static String getEumByServiceCode(String serviceCode){
for(ShipmentExceptionEnum enumItem: ShipmentExceptionEnum.values()) {
if(enumItem.getCode().equals(serviceCode)) {
return enumItem.getName();
}
}
return null;
}
}
package com.isoftstone.tms.controller;
import com.isoftstone.logistics.dto.Result;
import com.isoftstone.tms.service.EnumService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
@Api(tags = "枚举处理公共方法")
@RequestMapping("/tms/enum")
public class TmsEnumHandleController {
@Resource
private EnumService enumService;
@ApiOperation(value = "枚举取得")
@GetMapping
public Result findList(@RequestParam (value = "enumName") String enumName){
List<Enum> enumItems = enumService.getEnumItems(enumName);
return Result.success("枚举值获取成功", enumItems);
}
}