新增GS1解析,去掉一些没必要的查询,

master
anthonyywj2 3 years ago
parent 774057a4fe
commit 9897ed7a8d

@ -191,8 +191,8 @@
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version> <version>3.1</version>
<configuration> <configuration>
<source>1.8</source> <source>9</source>
<target>1.8</target> <target>9</target>
<encoding>UTF-8</encoding> <encoding>UTF-8</encoding>
</configuration> </configuration>
</plugin> </plugin>

@ -40,10 +40,6 @@ public class DeviceController {
private DeviceService deviceService; private DeviceService deviceService;
@Resource @Resource
private DevicedownloadMapper devicedownloadMapper; private DevicedownloadMapper devicedownloadMapper;
@Resource
ProductInfoService productInfoService;
@Resource
DownloadDeviceHelper downloadDeviceHelper;
@ApiOperation(value = "查询医疗器械信息", response = DeviceEntity.class) @ApiOperation(value = "查询医疗器械信息", response = DeviceEntity.class)
@AuthRuleAnnotation("warehouse/device/list") @AuthRuleAnnotation("warehouse/device/list")
@ -89,13 +85,9 @@ public class DeviceController {
} }
String key = deviceListRequest.getKey(); String key = deviceListRequest.getKey();
boolean isScan = false;
if (key != null) { if (key != null) {
key = FilterUdiUtils.getDiStr(key); key = FilterUdiUtils.getDiStr(key);
deviceListRequest.setKey(key); deviceListRequest.setKey(key);
isScan = true;
} else {
} }
DeviceSearchRequest deviceSearchRequest = new DeviceSearchRequest(); DeviceSearchRequest deviceSearchRequest = new DeviceSearchRequest();
deviceSearchRequest.setZxxsdycpbs(key); deviceSearchRequest.setZxxsdycpbs(key);
@ -137,186 +129,4 @@ public class DeviceController {
pageSimpleResponse.setList(deviceEntityList); pageSimpleResponse.setList(deviceEntityList);
return ResultVOUtils.success(pageSimpleResponse); return ResultVOUtils.success(pageSimpleResponse);
} }
@Deprecated
@ApiOperation(value = "", hidden = true)
@GetMapping("warehouse/device/unionSearch")
public BaseResponse search(@Valid DeviceSearchRequest deviceSearchRequest, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage());
}
List<DeviceEntity> medicalResonseList = deviceService.search(deviceSearchRequest);
long total = deviceService.seatchTotal(deviceSearchRequest);
PageSimpleResponse<DeviceEntity> pageSimpleResponse = new PageSimpleResponse<>();
pageSimpleResponse.setTotal(total);
pageSimpleResponse.setList(medicalResonseList);
return ResultVOUtils.success(pageSimpleResponse);
}
@Deprecated
@ApiOperation(value = "", hidden = true)
@GetMapping("warehouse/device/combineSearch")
public BaseResponse combineSearch(@Valid DeviceSearchRequest deviceSearchRequest, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage());
}
List<DeviceEntity> medicalResonseList = deviceService.search(deviceSearchRequest);
long total = 0;
PageSimpleResponse<DeviceEntity> pageSimpleResponse = new PageSimpleResponse<>();
List<Devicedownload> devicedownloads = devicedownloadMapper.selectByExample(new DevicedownloadExample());
Devicedownload devicedownload;
if (devicedownloads != null && devicedownloads.size() > 0) {
devicedownload = devicedownloads.get(0);
total = devicedownload.getAlltotal() - devicedownload.getAllindex();
}
pageSimpleResponse.setTotal(total * 10);
pageSimpleResponse.setList(medicalResonseList);
return ResultVOUtils.success(pageSimpleResponse);
}
@Deprecated
@ApiOperation(value = "", hidden = true)
@PostMapping("warehouse/device/loadsingle")
public BaseResponse downLoadDiii(@RequestBody DeviceDiRequest deviceRequest) {
if (deviceRequest.getPrimaryDeviceId() == null) {
return ResultVOUtils.error(999, "最小销售单元标识不能为空");
}
new Thread(() -> {
TokenEntity token = downloadDeviceHelper.getToken();
DownloadDiRequest downloadDiRequest1 = new DownloadDiRequest();
downloadDiRequest1.setAccessToken(token.getAccessToken());
downloadDiRequest1.setPrimaryDeviceId(deviceRequest.getPrimaryDeviceId());
int result = downloadDeviceHelper.downloadBydi(downloadDiRequest1, deviceService, productInfoService);
if (result == -1) {
return;// ResultVOUtils.error(505, "下载出错");
}
}).start();
return ResultVOUtils.success("开始下载");
}
@Deprecated
@ApiOperation(value = "", hidden = true)
@PostMapping("warehouse/device/downLoadHisory")
public BaseResponse downLoadHisory(@RequestBody DeviceDiRequest deviceRequest) {
if (deviceRequest.getPrimaryDeviceId() == null) {
return ResultVOUtils.error(999, "最小销售单元标识不能为空");
}
new Thread(() -> {
String deviceRecordKey = deviceService.selectKey(deviceRequest.getPrimaryDeviceId());
TokenEntity token = downloadDeviceHelper.getToken();
DownloadHistoryRequest deviceHistoryRequest = new DownloadHistoryRequest();
deviceHistoryRequest.setAccessToken(token.getAccessToken());
deviceHistoryRequest.setCurrentPageNumber("1");
List<DownloadHistoryRequest.DataSetBean> dataSetBeans = new ArrayList<>();
DownloadHistoryRequest.DataSetBean keys = new DownloadHistoryRequest.DataSetBean();
keys.setDeviceRecordKey(deviceRecordKey);
dataSetBeans.add(keys);
deviceHistoryRequest.setDataSet(dataSetBeans);
int result = downloadDeviceHelper.downloadHistory(deviceHistoryRequest);
if (result == -1) {
return;// ResultVOUtils.error(505, "下载出错");
}
}).start();
return ResultVOUtils.success("开始下载");
}
@Deprecated
@ApiOperation(value = "", hidden = true)
@PostMapping("warehouse/device/loadudid")
public BaseResponse downLoadAll(DownloadDeviceRequest downloadDeviceRequest, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage());
}
new Thread(() -> {
TokenEntity token = downloadDeviceHelper.getToken();
int total = downloadDeviceHelper.getTotal(token.getAccessToken());
int curpage = total;
Devicedownload devicedownload = devicedownloadMapper.selectByPrimaryKey("udid");
if (devicedownload != null) {
int offset = devicedownload.getAlltotal() - devicedownload.getAllindex();
curpage = total - offset;
} else {
devicedownload = new Devicedownload();
devicedownload.setId("udid");
devicedownload.setAlltotal(100);
devicedownload.setAllindex(99);
devicedownloadMapper.insert(devicedownload);
}
devicedownload.setIsdownload(1);
long startTime = System.currentTimeMillis();
devicedownload.setStarttime(startTime + "");
devicedownloadMapper.updateByPrimaryKey(devicedownload);
Devicedownload stop = devicedownloadMapper.selectByPrimaryKey("udid");
while (curpage > 0 && stop.getIsdownload() == 1 && stop.getStarttime().equals(startTime + "")) {
DeviceRequest deviceRequest = new DeviceRequest();
deviceRequest.setAccessToken(token.getAccessToken());
deviceRequest.setRequestType(3 + "");
deviceRequest.setCurrentPageNumber(curpage + "");
int result = downloadDeviceHelper.downloadDevices(productInfoService, deviceService, deviceRequest);
if (result == -1) {
return;// ResultVOUtils.error(505, "下载出错");
}
curpage--;
Devicedownload devicedownload1 = new Devicedownload();
devicedownload1.setAlltotal(total);
devicedownload1.setAllindex(curpage);
devicedownload1.setId("udid");
devicedownloadMapper.updateProgress(devicedownload1);
stop = devicedownloadMapper.selectByPrimaryKey("udid");
}
}).start();
return ResultVOUtils.success("开始下载");
}
@Deprecated
@ApiOperation(value = "", hidden = true)
@GetMapping("warehouse/device/stop")
public BaseResponse stopDown() {
Devicedownload devicedownload = devicedownloadMapper.selectByPrimaryKey("udid");
devicedownload.setIsdownload(2);
devicedownloadMapper.updateByPrimaryKey(devicedownload);
return ResultVOUtils.success("停止成功");
}
@Deprecated
@ApiOperation(value = "", hidden = true)
@GetMapping("warehouse/device/progress")
public BaseResponse getProgress() {
Devicedownload devicedownload = devicedownloadMapper.selectByPrimaryKey("udid");
ProgressResponse response = new ProgressResponse();
if (devicedownload != null) {
double index = devicedownload.getAlltotal() - devicedownload.getAllindex();
double total = devicedownload.getAlltotal();
double progress = 0;
if (total > 0) {
progress = index / total;
}
response.setTotal(total * 10);
response.setIndex(index * 10);
response.setProgress(progress * 100);
} else {
response.setTotal(100);
response.setIndex(1);
response.setProgress(1);
}
return ResultVOUtils.success(response);
}
} }

@ -14,12 +14,10 @@ import com.glxp.udidl.admin.res.udid.MedicalSingleResponse;
import com.glxp.udidl.admin.service.info.CompanyService; import com.glxp.udidl.admin.service.info.CompanyService;
import com.glxp.udidl.admin.service.inout.DeviceService; import com.glxp.udidl.admin.service.inout.DeviceService;
import com.glxp.udidl.admin.service.inout.ProductInfoService; import com.glxp.udidl.admin.service.inout.ProductInfoService;
import com.glxp.udidl.admin.service.udi.UdiCompanyService;
import com.glxp.udidl.admin.thread.UdiTransferUtils; import com.glxp.udidl.admin.thread.UdiTransferUtils;
import com.glxp.udidl.admin.util.DateUtil; import com.glxp.udidl.admin.util.DateUtil;
import com.glxp.udidl.admin.util.HttpClient; import com.glxp.udidl.admin.util.HttpClient;
import com.glxp.udidl.admin.util.WarehousBeanUtils; import com.glxp.udidl.admin.util.WarehousBeanUtils;
import jdk.nashorn.internal.ir.annotations.Reference;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -37,8 +35,6 @@ public class DownloadDeviceHelper {
String appId; String appId;
String appSecret; String appSecret;
@Resource @Resource
UdiCompanyService udiCompanyService;
@Resource
CompanyService companyService; CompanyService companyService;
@Resource @Resource
UdiTransferUtils udiTransferUtils; UdiTransferUtils udiTransferUtils;

@ -13,7 +13,6 @@ import com.glxp.udidl.admin.res.PageSimpleResponse;
import com.glxp.udidl.admin.res.udid.ProductInfoResponse; import com.glxp.udidl.admin.res.udid.ProductInfoResponse;
import com.glxp.udidl.admin.service.inout.ProductInfoService; import com.glxp.udidl.admin.service.inout.ProductInfoService;
import com.glxp.udidl.admin.service.udi.UdiCompanyService; import com.glxp.udidl.admin.service.udi.UdiCompanyService;
import com.glxp.udidl.admin.thread.AsyncDownloadTask;
import com.glxp.udidl.admin.util.FilterUdiUtils; import com.glxp.udidl.admin.util.FilterUdiUtils;
import com.glxp.udidl.admin.util.ResultVOUtils; import com.glxp.udidl.admin.util.ResultVOUtils;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -24,8 +23,6 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
//udi出入库管理系统API //udi出入库管理系统API
@Api(tags = "产品信息接口") @Api(tags = "产品信息接口")
@ -36,8 +33,6 @@ public class ProductInfoController {
ProductInfoService productInfoService; ProductInfoService productInfoService;
@Resource @Resource
UdiCompanyService udiCompanyService; UdiCompanyService udiCompanyService;
@Resource
AsyncDownloadTask asyncDownloadTask;
//手持枪扫码查询 //手持枪扫码查询
@ApiOperation(value = "手持枪扫码查询", response = ProductInfoEntity.class) @ApiOperation(value = "手持枪扫码查询", response = ProductInfoEntity.class)
@ -71,8 +66,6 @@ public class ProductInfoController {
} }
return ResultVOUtils.success(productInfoResponse); return ResultVOUtils.success(productInfoResponse);
} else { } else {
if (key != null && key.length() >= 13)
asyncDownloadTask.downloadByDi(key); //后台自动下载
return ResultVOUtils.error(500, "未找到产品信息"); return ResultVOUtils.error(500, "未找到产品信息");
} }
} }
@ -116,8 +109,6 @@ public class ProductInfoController {
} }
return ResultVOUtils.success(productInfoResponse); return ResultVOUtils.success(productInfoResponse);
} else { } else {
if (key != null && key.length() >= 13)
asyncDownloadTask.downloadByDi(key); //后台自动下载
return ResultVOUtils.error(500, "未找到产品信息"); return ResultVOUtils.error(500, "未找到产品信息");
} }
} }
@ -261,8 +252,6 @@ public class ProductInfoController {
} }
if (productInfoFilterRequest.getNameCode() != null && !productInfoFilterRequest.getNameCode().equals("") && productInfoFilterRequest.getNameCode().length() < 10) { if (productInfoFilterRequest.getNameCode() != null && !productInfoFilterRequest.getNameCode().equals("") && productInfoFilterRequest.getNameCode().length() < 10) {
return ResultVOUtils.error(500, "请输入完整的最小销售单元标识!"); return ResultVOUtils.error(500, "请输入完整的最小销售单元标识!");
} }

@ -17,7 +17,6 @@ import com.glxp.udidl.admin.service.dataSync.UdplatSyncService;
import com.glxp.udidl.admin.service.inout.DeviceService; import com.glxp.udidl.admin.service.inout.DeviceService;
import com.glxp.udidl.admin.service.inout.ProductInfoService; import com.glxp.udidl.admin.service.inout.ProductInfoService;
import com.glxp.udidl.admin.service.udi.UdiCompanyService; import com.glxp.udidl.admin.service.udi.UdiCompanyService;
import com.glxp.udidl.admin.thread.AsyncDownloadTask;
import com.glxp.udidl.admin.thread.UdiTransferUtils; import com.glxp.udidl.admin.thread.UdiTransferUtils;
import com.glxp.udidl.admin.util.ResultVOUtils; import com.glxp.udidl.admin.util.ResultVOUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -44,8 +43,6 @@ public class TestController {
@Resource @Resource
private ProductInfoService productInfoService; private ProductInfoService productInfoService;
@Resource @Resource
AsyncDownloadTask asyncDownloadTask;
@Resource
ProductInfoMapper productInfoDao; ProductInfoMapper productInfoDao;
@Resource @Resource
UdiCompanyService udiCompanyService; UdiCompanyService udiCompanyService;
@ -98,20 +95,6 @@ public class TestController {
} }
} }
//https://www.udims.com/UDI_DL_Server/udidl/device/dlBymonth?month=2021-10&page=1
@GetMapping("udidl/device/dlBymonth")
public void dlBymonth(String month, int page) {
logger.info(month + "---按月开启下载");
asyncDownloadTask.downloadByMonth(month, page);
}
@GetMapping("udidl/device/dlBymonthTest")
public void dlBymonthTest(String month, int page) {
logger.info(month + "---按月开启下载");
asyncDownloadTask.downloadByMonthTest(month, page);
}
@GetMapping("/test/getDistributor") @GetMapping("/test/getDistributor")
public String udplatTest() { public String udplatTest() {
return udplatDownloadService.getDistributor(); return udplatDownloadService.getDistributor();

@ -5,7 +5,6 @@ import com.glxp.udidl.admin.entity.udi.ProductInfoEntity;
import com.glxp.udidl.admin.req.ProductInfoFilterRequest; import com.glxp.udidl.admin.req.ProductInfoFilterRequest;
import com.glxp.udidl.admin.res.BaseResponse; import com.glxp.udidl.admin.res.BaseResponse;
import com.glxp.udidl.admin.service.inout.ProductInfoService; import com.glxp.udidl.admin.service.inout.ProductInfoService;
import com.glxp.udidl.admin.thread.AsyncDownloadTask;
import com.glxp.udidl.admin.util.FilterUdiUtils; import com.glxp.udidl.admin.util.FilterUdiUtils;
import com.glxp.udidl.admin.util.ResultVOUtils; import com.glxp.udidl.admin.util.ResultVOUtils;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -24,9 +23,6 @@ public class UdiCooperController {
@Resource @Resource
ProductInfoService productInfoService; ProductInfoService productInfoService;
@Resource
AsyncDownloadTask asyncDownloadTask;
@ApiOperation(value = "根据DI查询产品信息", response = ProductInfoEntity.class) @ApiOperation(value = "根据DI查询产品信息", response = ProductInfoEntity.class)
@AuthRuleAnnotation("udidl/cooper/findBydi") @AuthRuleAnnotation("udidl/cooper/findBydi")
@GetMapping("udidl/cooper/findBydi") @GetMapping("udidl/cooper/findBydi")
@ -44,7 +40,6 @@ public class UdiCooperController {
ProductInfoEntity productInfoEntity = productInfoEntityList.get(productInfoEntityList.size() - 1); ProductInfoEntity productInfoEntity = productInfoEntityList.get(productInfoEntityList.size() - 1);
return ResultVOUtils.success(productInfoEntity); return ResultVOUtils.success(productInfoEntity);
} else { } else {
asyncDownloadTask.downloadByDi(key); //后台自动下载
return ResultVOUtils.error(500, "未找到产品信息,请稍后重试"); return ResultVOUtils.error(500, "未找到产品信息,请稍后重试");
} }
} }

@ -2,6 +2,7 @@ package com.glxp.udidl.admin.service.dataSync;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.util.ParameterizedTypeImpl;
import com.glxp.udidl.admin.config.GlobalConfig; import com.glxp.udidl.admin.config.GlobalConfig;
import com.glxp.udidl.admin.dto.udplat.UdplatDistributorModel; import com.glxp.udidl.admin.dto.udplat.UdplatDistributorModel;
import com.glxp.udidl.admin.dto.udplat.UdplatGoodsModel; import com.glxp.udidl.admin.dto.udplat.UdplatGoodsModel;
@ -11,6 +12,7 @@ import com.glxp.udidl.admin.res.BaseResponse;
import com.glxp.udidl.admin.res.udplat.UdplatResponse; import com.glxp.udidl.admin.res.udplat.UdplatResponse;
import com.glxp.udidl.admin.util.Md5Utils; import com.glxp.udidl.admin.util.Md5Utils;
import com.glxp.udidl.admin.util.ResultVOUtils; import com.glxp.udidl.admin.util.ResultVOUtils;
import com.google.gson.reflect.TypeToken;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.ParameterizedTypeReference;
@ -20,7 +22,6 @@ import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.net.URLEncoder; import java.net.URLEncoder;
@ -259,9 +260,9 @@ public class UdplatDownloadService {
} }
private <T> ParameterizedTypeReference<UdplatResponse<T>> getReference2(Class<T> clazz) { private <T> ParameterizedTypeReference<UdplatResponse<T>> getReference2(Class<T> clazz) {
ParameterizedTypeImpl type = ParameterizedTypeImpl.make(UdplatResponse.class, new Type[]{clazz},
UdplatResponse.class.getDeclaringClass()); Type wrapperType = TypeToken.getParameterized(UdplatResponse.class).getType();
return ParameterizedTypeReference.forType(type); return ParameterizedTypeReference.forType(wrapperType);
} }
private <T> UdplatResponse<T> post(Class<T> clazz, String url, Map<String, String> headerMap, Object jsonObject, Map<String, String> map) { private <T> UdplatResponse<T> post(Class<T> clazz, String url, Map<String, String> headerMap, Object jsonObject, Map<String, String> map) {

@ -1,64 +0,0 @@
package com.glxp.udidl.admin.thread;
import com.glxp.udidl.admin.controller.device.DownloadDeviceHelper;
import com.glxp.udidl.admin.dao.udid.DevicedownloadMapper;
import com.glxp.udidl.admin.entity.udid.Devicedownload;
import com.glxp.udidl.admin.entity.udid.TokenEntity;
import com.glxp.udidl.admin.req.udid.DeviceRequest;
import com.glxp.udidl.admin.req.udid.DownloadDiRequest;
import com.glxp.udidl.admin.service.dataSync.DeviceDownloadService;
import com.glxp.udidl.admin.service.dataSync.DeviceSyncService;
import com.glxp.udidl.admin.service.info.CompanyService;
import com.glxp.udidl.admin.service.inout.DeviceService;
import com.glxp.udidl.admin.service.inout.ProductInfoService;
import com.glxp.udidl.admin.service.udi.UdiCompanyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class AsyncDownloadTask {
@Resource
DeviceService deviceService;
@Resource
CompanyService companyService;
@Resource
UdiCompanyService udiCompanyService;
@Resource
ProductInfoService productInfoService;
@Resource
DeviceDownloadService deviceDownloadService;
@Resource
DeviceSyncService deviceSyncService;
@Resource
DownloadDeviceHelper downloadDeviceHelper;
@Async
public void downloadByDi(String primaryDeviceId) {
String token = deviceDownloadService.getToken();
DownloadDiRequest downloadDiRequest = new DownloadDiRequest();
downloadDiRequest.setAccessToken(token);
downloadDiRequest.setPrimaryDeviceId(primaryDeviceId);
downloadDeviceHelper.downloadBydi(downloadDiRequest, deviceService, productInfoService);
}
//https://www.udims.com/UDI_DL_Server/udidl/device/dlBymonth?month=2021-10&page=1
//按月下载UDI
@Async
public void downloadByMonth(String month, int page) {
deviceDownloadService.downloadByMonth(month, page);
}
@Async
public void downloadByMonthTest(String month, int page) {
deviceDownloadService.downloadByMonthTest(month, page);
}
}

@ -1,14 +1,20 @@
package com.glxp.udidl.admin.util; package com.glxp.udidl.admin.util;
import cn.hutool.core.util.StrUtil;
import com.glxp.udidl.admin.entity.udid.UdiEntity; import com.glxp.udidl.admin.entity.udid.UdiEntity;
import com.glxp.udidl.admin.util.gs1.AI;
import com.glxp.udidl.admin.util.gs1.AIs;
import com.glxp.udidl.admin.util.gs1.Gs1128Decoder;
import com.glxp.udidl.admin.util.gs1.Gs1128Engine;
import java.util.Map;
/** /**
* @author * @author
* @date 2020/9/22. * @date 2020/9/22.
*/ */
public class FilterUdiUtils { public class FilterUdiUtils {
private static final String TAG = "FilterUdiUtils"; private static final String TAG = "FilterUdiUtils";
public static UdiEntity getUdi(String data) { public static UdiEntity getUdi(String data) {
@ -25,144 +31,46 @@ public class FilterUdiUtils {
} }
public static UdiEntity getGS1Udi(String data) { public static UdiEntity getGS1Udi(String data) {
String batchNo = ""; Gs1128Engine engine = new Gs1128Engine();
String produceDate = ""; Gs1128Decoder decoder = engine.decoder();
String expireDate = ""; Map<AI, String> result = decoder.decode("]C1" + data);
String serialNo = null; UdiEntity udiEntity = new UdiEntity();
String udi = ""; for (Map.Entry<AI, String> entry : result.entrySet()) {
UdiEntity udiEntity = null; if (entry.getKey() == AIs.GTIN) {
if (data.length() >= 16) { udiEntity.setUdi(entry.getValue());
udi = data.substring(2, 16); } else if (entry.getKey() == AIs.BATCH_LOT) {
if (data.length() >= 18 && data.substring(16, 18).equals("10")) { udiEntity.setBatchNo(entry.getValue());
if (data.contains("\u001D")) { } else if (entry.getKey() == AIs.EXPIRY) {
String[] splits = data.split("\u001D"); udiEntity.setExpireDate(entry.getValue());
String front = splits[0]; } else if (entry.getKey() == AIs.PROD_DATE) {
batchNo = front.substring(18, front.length()); udiEntity.setProduceDate(entry.getValue());
String last = splits[1]; } else if (entry.getKey() == AIs.SERIAL) {
boolean b = last.length() >= 18 && last.substring(16, 18).equals("21"); udiEntity.setSerialNo(entry.getValue());
if ((last != null && last.length() >= 2) && last.substring(0, 2).equals("11")) {
produceDate = last.substring(2, 8);
if (last.length() >= 10 && last.substring(8, 10).equals("17")) {
expireDate = last.substring(10, 16);
if (b) {
serialNo = last.substring(18, last.length());
} else {
serialNo = null;
}
}
} else if ((last != null && last.length() >= 2) && last.substring(0, 2).equals("17")) {
expireDate = last.substring(2, 8);
if (last.length() >= 10 && last.substring(8, 10).equals("11")) {
produceDate = last.substring(10, 16);
if (b) {
serialNo = last.substring(18, last.length());
} else {
serialNo = null;
}
}
} else if ((last != null && last.length() >= 2) && last.substring(0, 2).equals("21")) {
serialNo = last.substring(2, last.length());
}
} else {
batchNo = data.substring(18);
}
} else if (data.length() >= 18 && data.substring(16, 18).equals("11")) {
produceDate = data.substring(18, 24);
if (data.length() >= 26 && data.substring(24, 26).equals("17")) {
expireDate = data.substring(26, 32);
if (data.length() >= 34 && data.substring(32, 34).equals("10")) {
if (data.contains("\u001D")) {
String[] splits = data.split("\u001D");
batchNo = splits[0].substring(34, splits[0].length());
serialNo = splits[1].substring(2);
} else {
batchNo = data.substring(34, data.length());
}
}
} else if (data.length() >= 26 && data.substring(24, 26).equals("10")) {
if (data.contains("\u001D")) {
String[] splits = data.split("\u001D");
batchNo = splits[0].substring(26, splits[0].length());
String last = splits[1];
if (last.substring(0, 2).equals("17")) {
expireDate = last.substring(2, 8);
if (last.length() >= 10) {
serialNo = last.substring(10, last.length());
}
} else if (last.substring(0, 2).equals("21")) {
serialNo = last.substring(2, last.length());
}
} else {
batchNo = data.substring(26, data.length());
}
} else if (data.length() >= 26 && data.substring(24, 26).equals("21")) {
serialNo = data.substring(26);
}
} else if (data.length() >= 18 && data.substring(16, 18).equals("17")) {
expireDate = data.substring(18, 24);
if (data.length() >= 26 && data.substring(24, 26).equals("11")) {
produceDate = data.substring(26, 32);
if (data.length() >= 34 && data.substring(32, 34).equals("10")) {
if (data.contains("\u001D")) {
String[] splits = data.split("\u001D");
batchNo = splits[0].substring(34, splits[0].length());
serialNo = splits[1].substring(2);
} else {
batchNo = data.substring(34, data.length());
}
}
} else if (data.length() >= 26 && data.substring(24, 26).equals("10")) {
if (data.contains("\u001D")) {
String[] splits = data.split("\u001D");
batchNo = splits[0].substring(26, splits[0].length());
String last = splits[1];
if (last.substring(0, 2).equals("11")) {
produceDate = last.substring(2, 8);
} else if (last.substring(0, 2).equals("21")) {
serialNo = last.substring(2);
}
} else {
batchNo = data.substring(26, data.length());
}
} else if (data.length() >= 26 && data.substring(24, 26).equals("21")) {
serialNo = data.substring(26);
}
} else if (data.length() >= 18 && data.substring(16, 18).equals("21")) {
serialNo = data.substring(18);
} }
udiEntity = new UdiEntity();
udiEntity.setUdi(udi);
udiEntity.setBatchNo(batchNo);
udiEntity.setExpireDate(expireDate);
udiEntity.setProduceDate(produceDate);
udiEntity.setSerialNo(serialNo);
} }
return udiEntity; if (StrUtil.isEmpty(udiEntity.getUdi())) {
return null;
} else
return udiEntity;
} }
public static UdiEntity getZGCUdi(String data) { public static UdiEntity getZGCUdi(String data) {
String batchNo = ""; String batchNo = "";
String produceDate = ""; String produceDate = "";
String expireDate = ""; String expireDate = "";
String serialNo = null; String serialNo = null;
String udi = ""; String udi = data;
String nameCode = "";
String[] spilts = data.split("[.]"); String[] spilts = data.split("[.]");
if (spilts != null && spilts.length >= 5) { if (spilts != null && spilts.length >= 5) {
for (int i = 0; i < 5; i++) { for (int i = 0; i < 5; i++) {
udi = udi + "." + spilts[i]; nameCode = nameCode + "." + spilts[i];
} }
udi = udi.substring(1); nameCode = nameCode.substring(1);
for (int i = 0; i < spilts.length; i++) { for (int i = 0; i < spilts.length; i++) {
String tempStr = spilts[i]; String tempStr = spilts[i];
if (tempStr != null && tempStr.length() > 1 && tempStr.substring(0, 1).equals("P")) { if (tempStr != null && tempStr.length() > 1 && tempStr.substring(0, 1).equals("M")) {
produceDate = tempStr.substring(1); produceDate = tempStr.substring(1);
} else if (tempStr != null && tempStr.length() > 1 && tempStr.substring(0, 1).equals("L")) { } else if (tempStr != null && tempStr.length() > 1 && tempStr.substring(0, 1).equals("L")) {
batchNo = tempStr.substring(1); batchNo = tempStr.substring(1);
@ -178,9 +86,10 @@ public class FilterUdiUtils {
udiEntity.setBatchNo(batchNo); udiEntity.setBatchNo(batchNo);
udiEntity.setExpireDate(expireDate); udiEntity.setExpireDate(expireDate);
udiEntity.setProduceDate(produceDate); udiEntity.setProduceDate(produceDate);
udiEntity.setUdi(udi); udiEntity.setUdi(nameCode);
udiEntity.setSerialNo(serialNo); udiEntity.setSerialNo(serialNo);
return udiEntity; return udiEntity;
} }
public static UdiEntity getGLXPUdi(String data) { public static UdiEntity getGLXPUdi(String data) {
@ -191,11 +100,17 @@ public class FilterUdiUtils {
String udi = ""; String udi = "";
String[] spilts = data.split("#"); String[] spilts = data.split("#");
if (spilts != null && spilts.length >= 5) { if (spilts != null && spilts.length >= 5) {
udi = spilts[0]; udi = spilts[1];
produceDate = spilts[1]; produceDate = spilts[2];
expireDate = spilts[2]; expireDate = spilts[3];
batchNo = spilts[3]; batchNo = spilts[4];
serialNo = spilts[4]; if (spilts.length > 6) {
serialNo = spilts[5];
if (serialNo != null && serialNo.equals("")) {
serialNo = null;
}
}
} }
UdiEntity udiEntity = new UdiEntity(); UdiEntity udiEntity = new UdiEntity();
udiEntity.setBatchNo(batchNo); udiEntity.setBatchNo(batchNo);
@ -222,7 +137,7 @@ public class FilterUdiUtils {
} else if (data.substring(0, 1).equals("#")) { } else if (data.substring(0, 1).equals("#")) {
String[] spilts = data.split("#"); String[] spilts = data.split("#");
if (spilts != null && spilts.length >= 1) if (spilts != null && spilts.length >= 1)
prefix = spilts[0]; prefix = spilts[1];
} }
} }
if (prefix.equals("")) if (prefix.equals(""))
@ -230,4 +145,5 @@ public class FilterUdiUtils {
return prefix; return prefix;
} }
} }

@ -0,0 +1,14 @@
package com.glxp.udidl.admin.util.gs1;
/**
* @author guilherme.pacheco
*/
public interface AI {
String getCode();
String getDescription();
String getFormat();
}

@ -0,0 +1,112 @@
package com.glxp.udidl.admin.util.gs1;
/**
* @author guilherme.pacheco
*/
public enum AIs implements AI {
SSCC("00", "Serial Shipping Container Code", "n2+n18"),
GTIN("01", "GTIN-14", "n2+n14"),
CONTENT("02", "Number of containers", "n2+n14"),
BATCH_LOT("10", "Batch Number", "n2+an..20"),
PROD_DATE("11", "Production Date", "n2+n6"),
DUE_DATE("12", "Production Date", "n2+n6"),
PACK_DATE("13", "Packaging Date", "n2+n6"),
BEST_BEFORE("15", "Sell by Date (Quality Control) ", "n2+n6"),
EXPIRY("17", "Expiration Date", "n2+n6"),
VARIANT("20", "Product Variant", "n2+n2"),
SERIAL("21", "Serial Number", "n2+an..20"),
INTERNAL("91", "Company Internal Information", "n2+an..30"),
ADDITIONAL_ID("240", "Additional Product Identification", "n3+an..30"),
CUSTOMER_PART("241", "Customer Part Number", "n3+an..30"),
VARIATION_NUMBER("242", "242 Made-to-Order variation no", "n2+n..30"),
SECONDARY_SERIAL("250", "Secondary Serial Number", "n3+an..30"),
REF_TO_SOURCE("251", "Reference to source entity", "n3+an..30"),
DOC_ID("253", "Global Document Type Identifier", "n3+n13+n..17"),
GLN_EXTENSION("254", "GLN extension component ", "n3+an..20"),
VAR_COUNT("30", "Quantity Each", "n2+n..8"),
NET_WEIGHT("310n", "Product Net Weight in kg", "n4+n6"),
LENGTH("311n", "Product Length/1st Dimension, in meters", "n4+n6"),
WIDTH("312n", "Product Width/Diameter/2nd Dimension, in meters", "n4+n6"),
HEIGHT("313n", "Product Depth/Thickness/3rd Dimension, in meters", "n4+n6"),
AREA("314n", "Product Area, in square meters", "n4+n6"),
NET_VOLUME_LITERS("315n", " Product Volume, in liters", "n4+n6"),
NET_VOLUME_CUBICS("316n", " product Volume, in cubic meters", "n4+n6"),
NET_WEIGHT_POUNDS("320n", "Product Net Weight, in pounds", "n4+n6"),
LENGTH_INCHES("321n", "Product Length/1st Dimension, in inches", "n4+n6"),
LENGTH_PES("322n", "Product Length/1st Dimension, in feet", "n4+n6"),
LENGTH_YARDS("323n", "Product Length/1st Dimension, in yards", "n4+n6"),
WIDTH_INCHES("324n", "Product Width/Diameter/2nd Dimension, in inches", "n4+n6"),
WIDTH_FEET("325n", "Product Width/Diameter/2nd Dimension, in feet", "n4+n6"),
WIDTH_YARDS("326n", "Product Width/Diameter/2nd Dimension, in yards", "n4+n6"),
HEIGHT_INCHES("327n", "Product Depth/Thickness/3rd Dimension, in inches", "n4+n6"),
HEIGHT_FEET("328n", "Product Depth/Thickness/3rd Dimension, in feet", "n4+n6"),
HEIGHT_YARDS("329n", "Product Depth/Thickness/3rd Dimension, in yards", "n4+n6"),
PRODUCT_AREA_INCHES("350n", "Product Area (Square Inches)", "n4+n6"),
PRODUCT_AREA_FEET("351n", "Product Area (Square Feet)", "n4+n6"),
PRODUCT_AREA_YARDS("352n", "Product Area (Square Yards)", "n4+n6"),
CONTAINER_AREA_INCHES("353n", "Container Area (Square Inches) ", "n4+n6"),
CONTAINER_AREA_FEET("354n", "Container Area (Square Feet) ", "n4+n6"),
CONTAINER_AREA_YARDS("355n", "Container Area (Square Yards) ", "n4+n6"),
NET_WEIGHT_OUNCES("356n", "Net Weight (Troy Ounces)", "n4+n6"),
PRODUCT_VOLUME_QUARTS("360n", " Product Volume (Quarts)", "n4+n6"),
PRODUCT_VOLUME_GALLONS("361n", " Product Volume (Gallons)", "n4+n6"),
CONTAINER_VOLUME_QUARTS("362n", " Container Gross Volume (Quarts)", "n4+n6"),
CONTAINER_VOLUME_GALLONS("363n", " Container Gross Volume (Gallons)", "n4+n6"),
PRODUCT_VOLUME_INCHES("364n", " Product Volume (Cubic Inches)", "n4+n6"),
PRODUCT_VOLUME_FEET("365n", " Product Volume (Cubic Feet)", "n4+n6"),
PRODUCT_VOLUME_YARDS("366n", " Product Volume (Cubic Yards)", "n4+n6"),
CONTAINER_VOLUME_INCHES("367n", " Container Gross Volume (Cubic Inches)", "n4+n6"),
CONTAINER_VOLUME_FEET("368n", " Container Gross Volume (Cubic Feet)", "n4+n6"),
CONTAINER_VOLUME_YARDS("369n", " Container Gross Volume (Cubic Yards)", "n4+n6"),
COUNT("37", " Number of Units Contained", "n2+n..8"),
ORDER_NUMBER("400", "Customer Purchase Order Number", "n3+an..30"),
SHIP_TO_DELIVER_TO_LOCATION_CODE("410", "Ship To/Deliver To Location Code (EAN13 or DUNS code)", "n3+n13"),
BILL_TO_INVOICEE_TO_LOCATION_CODE("411", "Bill To/Invoice Location Code (EAN13 or DUNS code)", "n3+n13"),
PURCHASE_FROM_LOCATION_CODE("412", "Purchase From Location Code (EAN13 or DUNS code)", "n3+n13"),
SHIP_TO_DELIVER_TO_POSTALCODE("420", "Ship To/Deliver To Postal Code (Single Postal Authority)", "n3+an..9"),
SHIP_TO_DELIVER_TO_MULTI_POSTALCODE("421", "Ship To/Deliver To Postal Code (Multiple Postal Authority)",
"n3+n3+an..9"),
ORIGIN("422", "Country orign", "n3+n3"),
COUNTRY_INITIAL_PROCESS("423", "County initial processing", "n3+n3+n..12"),
COUNTRY_PROCESS("424", "County processing", "n3+n3"),
COUNTRY_DISASSEMBLY("425", "Country disassembly", "n3+n3"),
COUNTRY_FULL_PROCESS("426", "Country pull processing", "n3+n3"),
ROLL_PRODUCTS("8001", "Roll Products Width/Length/Core Diameter", "n4+n14"),
ESN("8002", "Electronic Serial Number (ESN) for Cellular Phone", "n4+an..20"),
UPC_EAN_RETURNABLE_ASSET("8003", "UPC/EAN Number and Serial Number of Returnable Asset", "n4+an..30"),
UPC_EAN_SERIAL_IDENTIFICATION("8004", "UPC/EAN Serial Identification", "n4+an..30"),
PRICE_UNIT_MEASURE("8005", "Price per Unit of Measure", "n4+n6"),
;
private final String code;
private final String description;
private final String format;
private AIs(String code, String description, String format) {
this.code = code;
this.description = description;
this.format = format;
}
@Override
public String getCode() {
return code;
}
@Override
public String getDescription() {
return description;
}
@Override
public String getFormat() {
return format;
}
@Override
public String toString() {
return description;
}
}

@ -0,0 +1,32 @@
package com.glxp.udidl.admin.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.udidl.admin.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.udidl.admin.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.udidl.admin.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.udidl.admin.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,59 @@
package com.glxp.udidl.admin.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++) {
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.udidl.admin.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.udidl.admin.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 lenght");
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.udidl.admin.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();
}
}

@ -7,7 +7,7 @@
#----- 默认(公有)配置 #----- 默认(公有)配置
# 地址默认localhost # 地址默认localhost
host = 192.168.235.137 host = 127.0.0.1
# 端口默认6379 # 端口默认6379
port = 6379 port = 6379
# 超时默认2000 # 超时默认2000
@ -17,7 +17,7 @@ connectionTimeout = 2000
# 读取超时默认timeout # 读取超时默认timeout
soTimeout = 2000 soTimeout = 2000
# 密码,默认无 # 密码,默认无
password = 123456
# 数据库序号默认0 # 数据库序号默认0
database = 0 database = 0
# 客户端名,默认"Hutool" # 客户端名,默认"Hutool"

Loading…
Cancel
Save