中医院修改。GS1解析,南靖预验收产品过滤
parent
b040edd55e
commit
5a29403fc3
@ -0,0 +1,65 @@
|
|||||||
|
package com.glxp.mipsdl.entity.system;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author 彭于晏
|
||||||
|
* @date 2020/9/22.
|
||||||
|
*/
|
||||||
|
public class UdiEntity {
|
||||||
|
|
||||||
|
private String batchNo;
|
||||||
|
private String produceDate;
|
||||||
|
private String expireDate;
|
||||||
|
private String serialNo;
|
||||||
|
private String udi;
|
||||||
|
|
||||||
|
public String getBatchNo() {
|
||||||
|
return batchNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBatchNo(String batchNo) {
|
||||||
|
this.batchNo = batchNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getProduceDate() {
|
||||||
|
return produceDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProduceDate(String produceDate) {
|
||||||
|
this.produceDate = produceDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getExpireDate() {
|
||||||
|
return expireDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExpireDate(String expireDate) {
|
||||||
|
this.expireDate = expireDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSerialNo() {
|
||||||
|
return serialNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSerialNo(String serialNo) {
|
||||||
|
this.serialNo = serialNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUdi() {
|
||||||
|
return udi;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUdi(String udi) {
|
||||||
|
this.udi = udi;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "UdiEntity{" +
|
||||||
|
"batchNo='" + batchNo + '\'' +
|
||||||
|
", produceDate='" + produceDate + '\'' +
|
||||||
|
", expireDate='" + expireDate + '\'' +
|
||||||
|
", serialNo='" + serialNo + '\'' +
|
||||||
|
", udi='" + udi + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,158 @@
|
|||||||
|
package com.glxp.mipsdl.util;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.glxp.mipsdl.entity.system.UdiEntity;
|
||||||
|
import com.glxp.mipsdl.util.gs1.AI;
|
||||||
|
import com.glxp.mipsdl.util.gs1.AIs;
|
||||||
|
import com.glxp.mipsdl.util.gs1.Gs1128Decoder;
|
||||||
|
import com.glxp.mipsdl.util.gs1.Gs1128Engine;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class FilterUdiUtils {
|
||||||
|
private static final String TAG = "FilterUdiUtils";
|
||||||
|
|
||||||
|
public static UdiEntity getUdi(String data) {
|
||||||
|
if (data != null && data.length() > 2) {
|
||||||
|
if (data.substring(0, 2).toUpperCase().equals("MA")) {
|
||||||
|
return getZGCUdi(data);
|
||||||
|
} else if (data.substring(0, 2).equals("01")) {
|
||||||
|
return getGS1Udi(data);
|
||||||
|
} else if (data.substring(0, 1).equals("#")) {
|
||||||
|
return getGLXPUdi(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static UdiEntity getGS1Udi(String data) {
|
||||||
|
Gs1128Engine engine = new Gs1128Engine();
|
||||||
|
Gs1128Decoder decoder = engine.decoder();
|
||||||
|
Map<AI, String> result = decoder.decode("]C1" + data);
|
||||||
|
UdiEntity udiEntity = new UdiEntity();
|
||||||
|
int length = 0;
|
||||||
|
for (Map.Entry<AI, String> entry : result.entrySet()) {
|
||||||
|
length = length + entry.getValue().length();
|
||||||
|
if (entry.getKey() == AIs.GTIN) {
|
||||||
|
udiEntity.setUdi(entry.getValue());
|
||||||
|
} else if (entry.getKey() == AIs.BATCH_LOT) {
|
||||||
|
udiEntity.setBatchNo(entry.getValue());
|
||||||
|
} else if (entry.getKey() == AIs.EXPIRY) {
|
||||||
|
udiEntity.setExpireDate(entry.getValue());
|
||||||
|
} else if (entry.getKey() == AIs.PROD_DATE) {
|
||||||
|
udiEntity.setProduceDate(entry.getValue());
|
||||||
|
} else if (entry.getKey() == AIs.SERIAL) {
|
||||||
|
udiEntity.setSerialNo(entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (data.length() - length > 22) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (StrUtil.isEmpty(udiEntity.getUdi())) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (udiEntity.getUdi().length() < 14
|
||||||
|
) {
|
||||||
|
return null;
|
||||||
|
} else
|
||||||
|
return udiEntity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static UdiEntity getZGCUdi(String data) {
|
||||||
|
String batchNo = "";
|
||||||
|
String produceDate = "";
|
||||||
|
String expireDate = "";
|
||||||
|
String serialNo = null;
|
||||||
|
String nameCode = "";
|
||||||
|
String[] spilts = data.split("[.]");
|
||||||
|
if (spilts != null && spilts.length >= 5) {
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
nameCode = nameCode + "." + spilts[i];
|
||||||
|
}
|
||||||
|
nameCode = nameCode.substring(1);
|
||||||
|
for (int i = 0; i < spilts.length; i++) {
|
||||||
|
String tempStr = spilts[i];
|
||||||
|
if (tempStr != null && tempStr.length() > 1 && tempStr.substring(0, 1).equals("M")) {
|
||||||
|
produceDate = tempStr.substring(1);
|
||||||
|
} else if (tempStr != null && tempStr.length() > 1 && tempStr.substring(0, 1).equals("L")) {
|
||||||
|
batchNo = tempStr.substring(1);
|
||||||
|
} else if (tempStr != null && tempStr.length() > 1 && tempStr.substring(0, 1).equals("E")) {
|
||||||
|
expireDate = tempStr.substring(1);
|
||||||
|
} else if (tempStr != null && tempStr.length() > 1 && tempStr.substring(0, 1).equals("S")) {
|
||||||
|
serialNo = tempStr.substring(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UdiEntity udiEntity = new UdiEntity();
|
||||||
|
udiEntity.setBatchNo(batchNo);
|
||||||
|
udiEntity.setExpireDate(expireDate);
|
||||||
|
udiEntity.setProduceDate(produceDate);
|
||||||
|
udiEntity.setUdi(nameCode);
|
||||||
|
udiEntity.setSerialNo(serialNo);
|
||||||
|
return udiEntity;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static UdiEntity getGLXPUdi(String data) {
|
||||||
|
String batchNo = "";
|
||||||
|
String produceDate = "";
|
||||||
|
String expireDate = "";
|
||||||
|
String serialNo = null;
|
||||||
|
String udi = "";
|
||||||
|
String[] spilts = data.split("#", data.length());
|
||||||
|
if (spilts != null && spilts.length >= 5) {
|
||||||
|
udi = spilts[1];
|
||||||
|
produceDate = spilts[2];
|
||||||
|
expireDate = spilts[3];
|
||||||
|
batchNo = spilts[4];
|
||||||
|
if (spilts.length > 6) {
|
||||||
|
serialNo = spilts[5];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StrUtil.isEmpty(batchNo)) {
|
||||||
|
batchNo = null;
|
||||||
|
}
|
||||||
|
if (StrUtil.isEmpty(serialNo)) {
|
||||||
|
serialNo = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
UdiEntity udiEntity = new UdiEntity();
|
||||||
|
udiEntity.setBatchNo(batchNo);
|
||||||
|
udiEntity.setExpireDate(expireDate);
|
||||||
|
udiEntity.setProduceDate(produceDate);
|
||||||
|
udiEntity.setUdi(udi);
|
||||||
|
udiEntity.setSerialNo(serialNo);
|
||||||
|
return udiEntity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getDiStr(String data) {
|
||||||
|
String prefix = "";
|
||||||
|
if (data != null && data.length() > 2) {
|
||||||
|
if (data.substring(0, 2).equals("MA")) {
|
||||||
|
String[] spilts = data.split("[.]");
|
||||||
|
if (spilts != null && spilts.length >= 5) {
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
prefix = prefix + "." + spilts[i];
|
||||||
|
}
|
||||||
|
prefix = prefix.substring(1);
|
||||||
|
}
|
||||||
|
} else if (data.substring(0, 2).equals("01") && data.length() >= 16) {
|
||||||
|
prefix = data.substring(2, 16);
|
||||||
|
} else if (data.substring(0, 1).equals("#")) {
|
||||||
|
String[] spilts = data.split("#");
|
||||||
|
if (spilts != null && spilts.length >= 1)
|
||||||
|
prefix = spilts[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (prefix.equals(""))
|
||||||
|
return data;
|
||||||
|
return prefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.glxp.mipsdl.util.gs1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author guilherme.pacheco
|
||||||
|
*/
|
||||||
|
public interface AI {
|
||||||
|
|
||||||
|
String getCode();
|
||||||
|
|
||||||
|
String getDescription();
|
||||||
|
|
||||||
|
String getFormat();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
package com.glxp.mipsdl.util.gs1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author guilherme.pacheco
|
||||||
|
*/
|
||||||
|
public final class AiFactory {
|
||||||
|
|
||||||
|
private AiFactory() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AI create(String code, String description, String format) {
|
||||||
|
return new AI() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFormat() {
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,71 @@
|
|||||||
|
package com.glxp.mipsdl.util.gs1;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.commons.lang3.Validate;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author guilherme.pacheco
|
||||||
|
*/
|
||||||
|
final class Format {
|
||||||
|
|
||||||
|
private static final String JOIN_SYMBOL = "+";
|
||||||
|
private final List<Session> sessions;
|
||||||
|
|
||||||
|
public Format(List<Session> sessions) {
|
||||||
|
this.sessions = Validate.notEmpty(sessions);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Format(Session... sessions) {
|
||||||
|
this(Arrays.asList(sessions));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Session getIdentifier() {
|
||||||
|
return sessions.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Session> getDataSessions() {
|
||||||
|
return sessions.subList(1, sessions.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return sessions.stream().map(String::valueOf).collect(Collectors.joining(JOIN_SYMBOL));
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isValid(String value) {
|
||||||
|
if (StringUtils.isBlank(value)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!validLength(value)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return validate(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean validate(String value) {
|
||||||
|
return getDataSessions().stream().allMatch(s -> s.getType().isValid(Gs1128Utils.value(s, value)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean validLength(String value) {
|
||||||
|
return isVaried() ? value.length() <= getLength() : value.length() == getLength();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLength() {
|
||||||
|
return getDataSessions().stream().mapToInt(Session::getLength).sum();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isVaried() {
|
||||||
|
return getDataSessions().stream().anyMatch(Session::isVaried);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Format valueOf(String value) {
|
||||||
|
String[] split = StringUtils.split(value, JOIN_SYMBOL);
|
||||||
|
List<Session> list = Arrays.stream(split).map(Session::valueOf).collect(Collectors.toList());
|
||||||
|
return new Format(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
package com.glxp.mipsdl.util.gs1;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.commons.lang3.Validate;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author guilherme.pacheco
|
||||||
|
*/
|
||||||
|
public final class Gs1128Decoder {
|
||||||
|
|
||||||
|
private final Collection<AI> ais;
|
||||||
|
|
||||||
|
Gs1128Decoder(Collection<AI> ais) {
|
||||||
|
this.ais = ais;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<AI, String> decode(final String barcode) {
|
||||||
|
validateBarcode(barcode);
|
||||||
|
String barcodeValue = StringUtils.remove(barcode, Gs1128Utils.PREFIX);
|
||||||
|
return extract(barcodeValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<AI, String> extract(String barcode) {
|
||||||
|
final Iterator<Character> iterator = Gs1128Utils.iterator(barcode);
|
||||||
|
final Map<AI, String> result = new WeakHashMap<>(4);
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
builder.append(iterator.next());
|
||||||
|
Optional<Map<AI, String>> mapAi = mapAi(iterator, builder.toString());
|
||||||
|
if (mapAi.isPresent()) {
|
||||||
|
result.putAll(mapAi.get());
|
||||||
|
builder = new StringBuilder();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Optional<Map<AI, String>> mapAi(Iterator<Character> iterator, String builder) {
|
||||||
|
return ais.stream().filter(v -> v.getCode().equals(builder)).findFirst().map(aiValue(iterator));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Function<AI, Map<AI, String>> aiValue(Iterator<Character> iterator) {
|
||||||
|
return ai -> {
|
||||||
|
String value = Gs1128Utils.value(ai, iterator);
|
||||||
|
return Map.of(ai, value);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateBarcode(String barcode) {
|
||||||
|
Validate.notBlank(barcode, "Barcode cannot be blank");
|
||||||
|
Validate.isTrue(StringUtils.startsWith(barcode, Gs1128Utils.PREFIX), "Barcode must start with prefix Gs1-128 \"]C1\"");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
package com.glxp.mipsdl.util.gs1;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.commons.lang3.Validate;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author guilherme.pacheco
|
||||||
|
*/
|
||||||
|
public final class Gs1128Encoder {
|
||||||
|
|
||||||
|
Gs1128Encoder() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String encode(Collection<Segment> segments) {
|
||||||
|
Validate.notEmpty(segments);
|
||||||
|
String barcode = joinSegments(segments);
|
||||||
|
return checkBarcode(barcode);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String checkBarcode(String barcode) {
|
||||||
|
return StringUtils.removeEnd(barcode, String.valueOf(Gs1128Utils.END_AI_VARIED));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String joinSegments(Collection<Segment> segments) {
|
||||||
|
String joinValue = segments.stream().map(Segment::encode).collect(Collectors.joining());
|
||||||
|
return Gs1128Utils.PREFIX.concat(joinValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
package com.glxp.mipsdl.util.gs1;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.EnumSet;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author guilherme.pacheco
|
||||||
|
*/
|
||||||
|
public final class Gs1128Engine {
|
||||||
|
|
||||||
|
private final Set<AI> aisRegistred = new HashSet<>();
|
||||||
|
|
||||||
|
public Gs1128Engine() {
|
||||||
|
aisRegistred.addAll(EnumSet.allOf(AIs.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerAi(AI ai) {
|
||||||
|
aisRegistred.add(ai);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<AI> getAisRegistred() {
|
||||||
|
return Collections.unmodifiableSet(aisRegistred);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Gs1128Encoder encoder() {
|
||||||
|
return new Gs1128Encoder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Gs1128Decoder decoder() {
|
||||||
|
return new Gs1128Decoder(aisRegistred);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
package com.glxp.mipsdl.util.gs1;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author guilherme.pacheco
|
||||||
|
*/
|
||||||
|
final class Gs1128Utils {
|
||||||
|
|
||||||
|
public static final String PREFIX = "]C1";
|
||||||
|
public static final char END_AI_VARIED = (char) 29;
|
||||||
|
|
||||||
|
private Gs1128Utils() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Iterator<Character> iterator(String value) {
|
||||||
|
return value.chars().mapToObj(c -> (char) c).iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String value(AI ai, Iterator<Character> iterator) {
|
||||||
|
Format format = Format.valueOf(ai.getFormat());
|
||||||
|
if (format.isVaried()) {
|
||||||
|
return variedValue(iterator);
|
||||||
|
} else {
|
||||||
|
return fixedValue(format.getLength(), iterator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String value(Session session, String value) {
|
||||||
|
Iterator<Character> iterator = iterator(value);
|
||||||
|
if (session.isVaried()) {
|
||||||
|
return variedValue(iterator);
|
||||||
|
} else {
|
||||||
|
return fixedValue(session.getLength(), iterator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String fixedValue(int size, Iterator<Character> iterator) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
if (iterator.hasNext()) {
|
||||||
|
builder.append(iterator.next());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String variedValue(Iterator<Character> iterator) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
char value = iterator.next();
|
||||||
|
if (value == END_AI_VARIED) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
builder.append(value);
|
||||||
|
}
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
package com.glxp.mipsdl.util.gs1;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.Validate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author guilherme.pacheco
|
||||||
|
*/
|
||||||
|
public final class Segment {
|
||||||
|
|
||||||
|
private final AI ai;
|
||||||
|
private final String value;
|
||||||
|
private final Format format;
|
||||||
|
|
||||||
|
public Segment(AI ai, String value) {
|
||||||
|
this.ai = Validate.notNull(ai, "Invalid AI");
|
||||||
|
format = Format.valueOf(ai.getFormat());
|
||||||
|
this.value = validateValue(format, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String validateValue(Format format, String value) {
|
||||||
|
Validate.notBlank(value, "Invalid segment value");
|
||||||
|
Validate.notNull(format, "Invalid format");
|
||||||
|
Validate.isTrue(format.isValid(value));
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
String encode() {
|
||||||
|
String codeValue = ai.getCode().concat(value);
|
||||||
|
if (format.isVaried()) {
|
||||||
|
return codeValue + Gs1128Utils.END_AI_VARIED;
|
||||||
|
}
|
||||||
|
return codeValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,69 @@
|
|||||||
|
package com.glxp.mipsdl.util.gs1;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.commons.lang3.Validate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author guilherme.pacheco
|
||||||
|
*/
|
||||||
|
final class Session {
|
||||||
|
|
||||||
|
private static final String VARIED_CONSTANT = "..";
|
||||||
|
|
||||||
|
private final SessionType type;
|
||||||
|
private final boolean varied;
|
||||||
|
private final int length;
|
||||||
|
|
||||||
|
public Session(SessionType type, int length, boolean varied) {
|
||||||
|
this.type = Validate.notNull(type);
|
||||||
|
Validate.isTrue(length > 0, "Session invalid length");
|
||||||
|
this.length = length;
|
||||||
|
this.varied = varied;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SessionType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLength() {
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isVaried() {
|
||||||
|
return varied;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Session valueOf(String value) {
|
||||||
|
Validate.notBlank(value, "Session cannot be blank");
|
||||||
|
SessionType type = sessionType(value);
|
||||||
|
String strLength = value.substring(type.length());
|
||||||
|
boolean varied = strLength.startsWith(VARIED_CONSTANT);
|
||||||
|
int length = createLength(strLength, varied);
|
||||||
|
return new Session(type, length, varied);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static SessionType sessionType(String value) {
|
||||||
|
return SessionType.valueByPrefix(value).orElseThrow(() -> new IllegalArgumentException("Invalid session type"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Integer createLength(String strLength, boolean varied) {
|
||||||
|
try {
|
||||||
|
if (varied) {
|
||||||
|
String lengthValue = StringUtils.substringAfter(strLength, VARIED_CONSTANT);
|
||||||
|
return Integer.parseInt(lengthValue);
|
||||||
|
}
|
||||||
|
return Integer.valueOf(strLength);
|
||||||
|
} catch (NumberFormatException ex) {
|
||||||
|
throw new IllegalArgumentException(String.format("Invalid length: '%s'", strLength), ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return new StringBuilder(type.getSymbol())
|
||||||
|
.append(varied ? VARIED_CONSTANT : StringUtils.EMPTY)
|
||||||
|
.append(length)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
package com.glxp.mipsdl.util.gs1;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.util.EnumSet;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author guilherme.pacheco
|
||||||
|
*/
|
||||||
|
enum SessionType {
|
||||||
|
|
||||||
|
ALPHANUMERIC("an", v -> Character.isAlphabetic(v) || Character.isDigit(v)),
|
||||||
|
ALPHABETIC("a", v -> Character.isAlphabetic(v)),
|
||||||
|
NUMERIC("n", v -> Character.isDigit(v));
|
||||||
|
|
||||||
|
private final String symbol;
|
||||||
|
private final Predicate<Character> validator;
|
||||||
|
|
||||||
|
private SessionType(String symbol, Predicate<Character> validator) {
|
||||||
|
this.symbol = symbol;
|
||||||
|
this.validator = validator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isValid(String value) {
|
||||||
|
if (StringUtils.isBlank(value)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return value.chars().mapToObj(c -> (char) c).allMatch(validator::test);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSymbol() {
|
||||||
|
return symbol;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int length() {
|
||||||
|
return symbol.length();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Optional<SessionType> valueByPrefix(String value) {
|
||||||
|
if (StringUtils.isBlank(value)) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
return EnumSet.allOf(SessionType.class).stream()
|
||||||
|
.filter(v -> StringUtils.startsWithIgnoreCase(value, v.symbol))
|
||||||
|
.findFirst();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,37 +1,45 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.glxp.mipsdl.dao.basic.BasicUdirelDao">
|
<mapper namespace="com.glxp.mipsdl.dao.basic.BasicUdirelDao">
|
||||||
<resultMap id="BaseResultMap" type="com.glxp.mipsdl.entity.basic.BasicUdirelEntity">
|
<resultMap id="BaseResultMap" type="com.glxp.mipsdl.entity.basic.BasicUdirelEntity">
|
||||||
<!--@mbg.generated-->
|
<!--@mbg.generated-->
|
||||||
<!--@Table basic_udirel-->
|
<!--@Table basic_udirel-->
|
||||||
<id column="id" jdbcType="INTEGER" property="id" />
|
<id column="id" jdbcType="INTEGER" property="id"/>
|
||||||
<result column="uuid" jdbcType="VARCHAR" property="uuid" />
|
<result column="uuid" jdbcType="VARCHAR" property="uuid"/>
|
||||||
<result column="mainId" jdbcType="VARCHAR" property="mainId" />
|
<result column="mainId" jdbcType="VARCHAR" property="mainId"/>
|
||||||
<result column="thirdId" jdbcType="VARCHAR" property="thirdId" />
|
<result column="thirdId" jdbcType="VARCHAR" property="thirdId"/>
|
||||||
<result column="thirdId1" jdbcType="VARCHAR" property="thirdId1" />
|
<result column="thirdId1" jdbcType="VARCHAR" property="thirdId1"/>
|
||||||
<result column="thirdId2" jdbcType="VARCHAR" property="thirdId2" />
|
<result column="thirdId2" jdbcType="VARCHAR" property="thirdId2"/>
|
||||||
<result column="thirdId3" jdbcType="VARCHAR" property="thirdId3" />
|
<result column="thirdId3" jdbcType="VARCHAR" property="thirdId3"/>
|
||||||
<result column="thirdId4" jdbcType="VARCHAR" property="thirdId4" />
|
<result column="thirdId4" jdbcType="VARCHAR" property="thirdId4"/>
|
||||||
<result column="udplatCode" jdbcType="VARCHAR" property="udplatCode" />
|
<result column="udplatCode" jdbcType="VARCHAR" property="udplatCode"/>
|
||||||
<result column="isUseDy" jdbcType="TINYINT" property="isUseDy" />
|
<result column="isUseDy" jdbcType="TINYINT" property="isUseDy"/>
|
||||||
<result column="isDisable" jdbcType="TINYINT" property="isDisable" />
|
<result column="isDisable" jdbcType="TINYINT" property="isDisable"/>
|
||||||
<result column="isLock" jdbcType="TINYINT" property="isLock" />
|
<result column="isLock" jdbcType="TINYINT" property="isLock"/>
|
||||||
<result column="lockStatus" jdbcType="INTEGER" property="lockStatus" />
|
<result column="lockStatus" jdbcType="INTEGER" property="lockStatus"/>
|
||||||
<result column="isAdavence" jdbcType="TINYINT" property="isAdavence" />
|
<result column="isAdavence" jdbcType="TINYINT" property="isAdavence"/>
|
||||||
<result column="useMuti" jdbcType="TINYINT" property="useMuti" />
|
<result column="useMuti" jdbcType="TINYINT" property="useMuti"/>
|
||||||
<result column="useNum" jdbcType="INTEGER" property="useNum" />
|
<result column="useNum" jdbcType="INTEGER" property="useNum"/>
|
||||||
<result column="supName" jdbcType="VARCHAR" property="supName" />
|
<result column="supName" jdbcType="VARCHAR" property="supName"/>
|
||||||
<result column="createTime" jdbcType="TIMESTAMP" property="createTime" />
|
<result column="createTime" jdbcType="TIMESTAMP" property="createTime"/>
|
||||||
<result column="updateTime" jdbcType="VARCHAR" property="updateTime" />
|
<result column="updateTime" jdbcType="VARCHAR" property="updateTime"/>
|
||||||
<result column="modifyTime" jdbcType="TIMESTAMP" property="modifyTime" />
|
<result column="modifyTime" jdbcType="TIMESTAMP" property="modifyTime"/>
|
||||||
<result column="createUser" jdbcType="VARCHAR" property="createUser" />
|
<result column="createUser" jdbcType="VARCHAR" property="createUser"/>
|
||||||
<result column="updateUser" jdbcType="VARCHAR" property="updateUser" />
|
<result column="updateUser" jdbcType="VARCHAR" property="updateUser"/>
|
||||||
<result column="remark" jdbcType="VARCHAR" property="remark" />
|
<result column="remark" jdbcType="VARCHAR" property="remark"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
<sql id="Base_Column_List">
|
<sql id="Base_Column_List">
|
||||||
<!--@mbg.generated-->
|
<!--@mbg.generated-->
|
||||||
id, uuid, mainId, thirdId, thirdId1, thirdId2, thirdId3, thirdId4, udplatCode, isUseDy,
|
id, uuid, mainId, thirdId, thirdId1, thirdId2, thirdId3, thirdId4, udplatCode, isUseDy,
|
||||||
isDisable, isLock, lockStatus, isAdavence, useMuti, useNum, supName, createTime,
|
isDisable, isLock, lockStatus, isAdavence, useMuti, useNum, supName, createTime,
|
||||||
updateTime, modifyTime, `createUser`, updateUser, remark
|
updateTime, modifyTime, `createUser`, updateUser, remark
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
|
<select id="selectByNameCode" resultType="com.glxp.mipsdl.entity.basic.BasicUdirelEntity">
|
||||||
|
select basic_udirel.*
|
||||||
|
from basic_udirel
|
||||||
|
inner join basic_products on basic_udirel.uuid = basic_products.uuid
|
||||||
|
where basic_products.nameCode = #{nameCode}
|
||||||
|
limit 1
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
Loading…
Reference in New Issue