| | |
| | | package com.zy.asrs.wms.utils; |
| | | |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.wms.asrs.entity.dto.MatUniqueObjDto; |
| | | import com.zy.asrs.wms.asrs.entity.param.FieldParam; |
| | | import com.zy.asrs.wms.common.constant.Constants; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.*; |
| | | import java.util.function.BiConsumer; |
| | | import java.util.function.Function; |
| | | |
| | | /** |
| | | * Created by vincent on 2023/3/14 |
| | | */ |
| | | public class Utils { |
| | | |
| | | public static final String _LINK = "-"; |
| | | |
| | | public static String getMatUniqueKey(String matnr, String batch, List<FieldParam> params) { |
| | | MatUniqueObjDto dto = new MatUniqueObjDto(); |
| | | dto.setMatnr(matnr); |
| | | dto.setBatch(batch); |
| | | |
| | | ArrayList<FieldParam> list = new ArrayList<>(); |
| | | for (FieldParam param : params) { |
| | | FieldParam fieldParam = new FieldParam(); |
| | | list.add(fieldParam); |
| | | |
| | | String value = ""; |
| | | if (!Cools.isEmpty(param.getValue())) { |
| | | value = param.getValue().toString(); |
| | | } |
| | | |
| | | fieldParam.setName(param.getName()); |
| | | fieldParam.setType(param.getType()); |
| | | fieldParam.setValue(value); |
| | | } |
| | | dto.setParams(list); |
| | | String encode = Base64.getEncoder().encodeToString(JSON.toJSONString(dto).getBytes()); |
| | | return encode; |
| | | } |
| | | |
| | | public static MatUniqueObjDto getMatUniqueObj(String matUniqueKey) { |
| | | byte[] decode = Base64.getDecoder().decode(matUniqueKey); |
| | | String decodeStr = new String(decode); |
| | | MatUniqueObjDto dto = JSON.parseObject(decodeStr, MatUniqueObjDto.class); |
| | | return dto; |
| | | } |
| | | |
| | | public static boolean checkMatSame(String matnr1, String batch1, List<FieldParam> params1, String matnr2, String batch2, List<FieldParam> params2) { |
| | | if (!matnr1.equals(matnr2)) { |
| | | return false; |
| | | } |
| | | |
| | | if (batch1 != null && batch2 != null) { |
| | | if(!batch1.equals(batch2)) { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | boolean check = true; |
| | | if(params1 != null && params2 != null) { |
| | | if(params1.size() != params2.size()) { |
| | | return false; |
| | | } |
| | | |
| | | for (int i = 0; i < params1.size(); i++) { |
| | | FieldParam param1 = params1.get(i); |
| | | FieldParam param2 = params2.get(i); |
| | | |
| | | if (!param1.getName().equals(param2.getName())) { |
| | | check = false; |
| | | break; |
| | | } |
| | | |
| | | if(Cools.isEmpty(param1.getValue()) && Cools.isEmpty(param2.getValue())) { |
| | | continue; |
| | | } |
| | | |
| | | if(!param1.getValue().equals(param2.getValue())) { |
| | | check = false; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | return check; |
| | | } |
| | | |
| | | /** |
| | | * 通过库位号获取 排 |
| | | */ |
| | | public static int getRow(String locNo) { |
| | | if (!Cools.isEmpty(locNo)) { |
| | | String[] split = locNo.split(_LINK); |
| | | return Integer.parseInt(split[0]); |
| | | } |
| | | throw new RuntimeException("库位解析异常"); |
| | | } |
| | | |
| | | /** |
| | | * 通过库位号获取 列 |
| | | */ |
| | | public static int getBay(String locNo) { |
| | | if (!Cools.isEmpty(locNo)) { |
| | | String[] split = locNo.split(_LINK); |
| | | return Integer.parseInt(split[1]); |
| | | } |
| | | throw new RuntimeException("库位解析异常"); |
| | | } |
| | | |
| | | /** |
| | | * 通过库位号获取 层 |
| | | */ |
| | | public static int getLev(String locNo) { |
| | | if (!Cools.isEmpty(locNo)) { |
| | | String[] split = locNo.split(_LINK); |
| | | return Integer.parseInt(split[2]); |
| | | } |
| | | throw new RuntimeException("库位解析异常"); |
| | | } |
| | | |
| | | public static String getLocNo(Number row, Number bay, Number lev) { |
| | | return row + _LINK + bay + _LINK + lev; |
| | | } |
| | | |
| | | /** |
| | | * List转为树形结构 |
| | | * |
| | | * @param data List |
| | | * @param parentId 顶级的parentId |
| | | * @param parentIdMapper 获取parentId的Function |
| | | * @param idMapper 获取id的Function |
| | | * @param consumer 赋值children的Consumer |
| | | * @param <T> 数据的类型 |
| | | * @param <R> parentId的类型 |
| | | * @return List<T> |
| | | */ |
| | | public static <T, R> List<T> toTreeData(List<T> data, |
| | | R parentId, |
| | | Function<? super T, ? extends R> parentIdMapper, |
| | | Function<? super T, ? extends R> idMapper, |
| | | BiConsumer<T, List<T>> consumer) { |
| | | List<T> result = new ArrayList<>(); |
| | | for (T d : data) { |
| | | R dParentId = parentIdMapper.apply(d); |
| | | if (parentId.equals(dParentId)) { |
| | | R dId = idMapper.apply(d); |
| | | List<T> children = toTreeData(data, dId, parentIdMapper, idMapper, consumer); |
| | | if(children.size() > 0) { |
| | | consumer.accept(d, children); |
| | | } |
| | | result.add(d); |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | // public static <T> List<T> treeRemove(List<T> data, String condition, |
| | | // Function<? super T, ? extends String> fetcher, |
| | | // Function<T, List<T>> childrenGetter, |
| | | // BiConsumer<T, List<T>> childrenSetter) { |
| | | // List<T> result = new ArrayList<>(); |
| | | // for (T node : data) { |
| | | // List<T> children = childrenGetter.apply(node); |
| | | // |
| | | // if (children != null && !children.isEmpty()) { |
| | | // List<T> newChildren = treeRemove(children, condition, fetcher, childrenGetter, childrenSetter); |
| | | // childrenSetter.accept(node, newChildren); |
| | | // } |
| | | // |
| | | // if (fetcher.apply(node).contains(condition)) { |
| | | // result.add(node); |
| | | // } |
| | | // } |
| | | // return result; |
| | | // } |
| | | |
| | | public static <T> void treeRemove(List<T> list, String condition, Function<? super T, ? extends String> fetcher, Function<T, List<T>> childrenGetter) { |
| | | Iterator<T> iterator = list.iterator(); |
| | | while (iterator.hasNext()) { |
| | | T next = iterator.next(); |
| | | List<T> children = childrenGetter.apply(next); |
| | | if (children != null && !children.isEmpty()) { |
| | | treeRemove(children, condition, fetcher, childrenGetter); |
| | | } else { |
| | | if (!fetcher.apply(next).contains(condition)) { |
| | | iterator.remove(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 数组倒序 |
| | | * @param bytes |
| | | * @param <T> |
| | | */ |
| | | public static <T> byte[] reverse(byte[] bytes) { |
| | | if (bytes == null) return null; |
| | | for (int start = 0, end = bytes.length - 1; start < end; start++, end--) { |
| | | byte temp = bytes[end]; |
| | | bytes[end] = bytes[start]; |
| | | bytes[start] = temp; |
| | | } |
| | | return bytes; |
| | | } |
| | | |
| | | /** |
| | | * 截取数组 |
| | | * @param bytes 原数组 |
| | | * @param pos 定位(截取后包含定位点数据) |
| | | * @param len 长度 |
| | | * @return new arr |
| | | */ |
| | | public static byte[] slice(byte[] bytes, int pos, int len) { |
| | | if (bytes == null || bytes.length == 0 || len == 0) { |
| | | return new byte[0]; |
| | | } |
| | | if (pos + len > bytes.length) { |
| | | throw new RuntimeException("com.zy.acs.common.utils ArrayIndexOutOfBoundsException\n" + |
| | | "原数组 bytes 长度为 " + bytes.length + ",截取长度超过原数组!"); |
| | | } |
| | | byte[] arr = new byte[len]; |
| | | System.arraycopy(bytes, pos, arr, 0, len); |
| | | return arr; |
| | | } |
| | | |
| | | public static byte[] sliceWithReverse(byte[] bytes, int pos, int len) { |
| | | byte[] slice = slice(bytes, pos, len); |
| | | reverse(slice); |
| | | return slice; |
| | | } |
| | | |
| | | public static byte[] merge(Object... objects) { |
| | | int len = 0; |
| | | for (Object object : objects) { |
| | | if (object instanceof byte[]) { |
| | | byte[] bytes = (byte[]) object; |
| | | len += bytes.length; |
| | | } |
| | | if (object instanceof Byte) { |
| | | len++; |
| | | } |
| | | } |
| | | byte[] arr = new byte[len]; |
| | | int idx = 0; |
| | | for (Object object : objects) { |
| | | if (object instanceof byte[]) { |
| | | byte[] bytes = (byte[]) object; |
| | | System.arraycopy(bytes, 0, arr, idx, bytes.length); |
| | | idx += bytes.length; |
| | | } |
| | | if (object instanceof Byte) { |
| | | byte[] bytes = new byte[] {(Byte) object}; |
| | | System.arraycopy(bytes, 0, arr, idx, bytes.length); |
| | | idx += bytes.length; |
| | | } |
| | | } |
| | | return arr; |
| | | } |
| | | |
| | | public static <T> String join(T[] array, String seq) { |
| | | StringBuilder sb = new StringBuilder(); |
| | | if (array != null) { |
| | | for (int i = 0; i < array.length; i++) { |
| | | sb.append(array[i]); |
| | | if (i < array.length - 1) { |
| | | sb.append(seq); |
| | | } |
| | | } |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | public static String zeroFill(String msg, Integer len) { |
| | | len = Optional.ofNullable(len).orElse(16); |
| | | if (msg.length() == len){ |
| | | return msg; |
| | | } else if (msg.length() > len){ |
| | | return msg.substring(0, 16); |
| | | } else { |
| | | StringBuilder msgBuilder = new StringBuilder(msg); |
| | | for (int i = 0; i<len-msg.length(); i++){ |
| | | msgBuilder.insert(0,"0"); |
| | | } |
| | | return msgBuilder.toString(); |
| | | } |
| | | } |
| | | |
| | | public static String removePrefix(String str, String prefix) { |
| | | if (!Cools.isEmpty(str) && !Cools.isEmpty(prefix)) { |
| | | if (str.startsWith(prefix)) { |
| | | return str.substring(prefix.length()); |
| | | } else { |
| | | return str; |
| | | } |
| | | } else { |
| | | return str; |
| | | } |
| | | } |
| | | |
| | | public static String removeSuffix(String str, String suffix) { |
| | | if (!Cools.isEmpty(str) && !Cools.isEmpty(suffix)) { |
| | | if (str.endsWith(suffix)) { |
| | | return str.substring(0, str.indexOf(suffix)); |
| | | } else { |
| | | return str; |
| | | } |
| | | } else { |
| | | return str; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 大驼峰 转 symbol小驼峰 |
| | | */ |
| | | public static String toSymbolCase(String str, char symbol) { |
| | | if (str == null) { |
| | | return null; |
| | | } else { |
| | | int length = str.length(); |
| | | StringBuilder sb = new StringBuilder(); |
| | | |
| | | for(int i = 0; i < length; ++i) { |
| | | char c = str.charAt(i); |
| | | if (Character.isUpperCase(c)) { |
| | | Character preChar = i > 0 ? str.charAt(i - 1) : null; |
| | | Character nextChar = i < str.length() - 1 ? str.charAt(i + 1) : null; |
| | | if (null != preChar) { |
| | | if (symbol == preChar) { |
| | | if (null == nextChar || Character.isLowerCase(nextChar)) { |
| | | c = Character.toLowerCase(c); |
| | | } |
| | | } else if (Character.isLowerCase(preChar)) { |
| | | sb.append(symbol); |
| | | if (null == nextChar || Character.isLowerCase(nextChar)) { |
| | | c = Character.toLowerCase(c); |
| | | } |
| | | } else if (null == nextChar || Character.isLowerCase(nextChar)) { |
| | | sb.append(symbol); |
| | | c = Character.toLowerCase(c); |
| | | } |
| | | } else if (null == nextChar || Character.isLowerCase(nextChar)) { |
| | | c = Character.toLowerCase(c); |
| | | } |
| | | } |
| | | |
| | | sb.append(c); |
| | | } |
| | | |
| | | return "`" + sb.toString() + "`"; |
| | | } |
| | | } |
| | | |
| | | public static String toCamelCase(CharSequence name) { |
| | | if (null == name) { |
| | | return null; |
| | | } else { |
| | | String name2 = name.toString(); |
| | | if (name2.contains("_")) { |
| | | int length = name2.length(); |
| | | StringBuilder sb = new StringBuilder(length); |
| | | boolean upperCase = false; |
| | | |
| | | for(int i = 0; i < length; ++i) { |
| | | char c = name2.charAt(i); |
| | | if (c == '_') { |
| | | upperCase = true; |
| | | } else if (upperCase) { |
| | | sb.append(Character.toUpperCase(c)); |
| | | upperCase = false; |
| | | } else { |
| | | sb.append(Character.toLowerCase(c)); |
| | | } |
| | | } |
| | | |
| | | return sb.toString(); |
| | | } else { |
| | | return name2; |
| | | } |
| | | } |
| | | } |
| | | |
| | | public static String sub(String str, Integer maxLen) { |
| | | if (str.length() > maxLen) { |
| | | return str.substring(0, maxLen); |
| | | } |
| | | return str; |
| | | } |
| | | |
| | | public static String generateSeqNum(String lastSeqNum) { |
| | | if (Cools.isEmpty(lastSeqNum)) { |
| | | return zeroFill("1", 4); |
| | | } else { |
| | | int i = Integer.parseInt(lastSeqNum); |
| | | if (i >= 9999) { |
| | | return zeroFill("1", 4); |
| | | } else { |
| | | return zeroFill(String.valueOf(i+1), 4); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public static void cors(HttpServletResponse response){ |
| | | // 跨域设置 |
| | | response.setHeader("Access-Control-Max-Age", "3600"); |
| | | response.setHeader("Access-Control-Allow-Origin", "*"); |
| | | response.setHeader("Access-Control-Allow-Methods", "*"); |
| | | response.setHeader("Access-Control-Allow-Headers", "*"); |
| | | response.setHeader("Access-Control-Expose-Headers", Constants.TOKEN_HEADER_NAME); |
| | | } |
| | | |
| | | } |
| | | package com.zy.asrs.wms.utils;
|
| | |
|
| | |
|
| | | import com.alibaba.fastjson.JSON;
|
| | | import com.zy.asrs.framework.common.Cools;
|
| | | import com.zy.asrs.wms.asrs.entity.dto.MatUniqueObjDto;
|
| | | import com.zy.asrs.wms.asrs.entity.param.FieldParam;
|
| | | import com.zy.asrs.wms.common.constant.Constants;
|
| | |
|
| | | import javax.servlet.http.HttpServletResponse;
|
| | | import java.util.*;
|
| | | import java.util.function.BiConsumer;
|
| | | import java.util.function.Function;
|
| | |
|
| | | /**
|
| | | * Created by vincent on 2023/3/14
|
| | | */
|
| | | public class Utils {
|
| | |
|
| | | public static final String _LINK = "-";
|
| | |
|
| | | public static String getMatUniqueKey(String matnr, String batch, List<FieldParam> params) {
|
| | | MatUniqueObjDto dto = new MatUniqueObjDto();
|
| | | dto.setMatnr(matnr);
|
| | | dto.setBatch(batch);
|
| | |
|
| | | ArrayList<FieldParam> list = new ArrayList<>();
|
| | | for (FieldParam param : params) {
|
| | | FieldParam fieldParam = new FieldParam();
|
| | | list.add(fieldParam);
|
| | |
|
| | | String value = "";
|
| | | if (!Cools.isEmpty(param.getValue())) {
|
| | | value = param.getValue().toString();
|
| | | }
|
| | |
|
| | | fieldParam.setName(param.getName());
|
| | | fieldParam.setType(param.getType());
|
| | | fieldParam.setValue(value);
|
| | | }
|
| | | dto.setParams(list);
|
| | | String encode = Base64.getEncoder().encodeToString(JSON.toJSONString(dto).getBytes());
|
| | | return encode;
|
| | | }
|
| | |
|
| | | public static MatUniqueObjDto getMatUniqueObj(String matUniqueKey) {
|
| | | byte[] decode = Base64.getDecoder().decode(matUniqueKey);
|
| | | String decodeStr = new String(decode);
|
| | | MatUniqueObjDto dto = JSON.parseObject(decodeStr, MatUniqueObjDto.class);
|
| | | return dto;
|
| | | }
|
| | |
|
| | | public static boolean checkMatSame(String matnr1, String batch1, List<FieldParam> params1, String matnr2, String batch2, List<FieldParam> params2) {
|
| | | if (!matnr1.equals(matnr2)) {
|
| | | return false;
|
| | | }
|
| | |
|
| | | if (batch1 != null && batch2 != null) {
|
| | | if(!batch1.equals(batch2)) {
|
| | | return false;
|
| | | }
|
| | | }
|
| | |
|
| | | boolean check = true;
|
| | | if(params1 != null && params2 != null) {
|
| | | if(params1.size() != params2.size()) {
|
| | | return false;
|
| | | }
|
| | |
|
| | | for (int i = 0; i < params1.size(); i++) {
|
| | | FieldParam param1 = params1.get(i);
|
| | | FieldParam param2 = params2.get(i);
|
| | |
|
| | | if (!param1.getName().equals(param2.getName())) {
|
| | | check = false;
|
| | | break;
|
| | | }
|
| | |
|
| | | if(Cools.isEmpty(param1.getValue()) && Cools.isEmpty(param2.getValue())) {
|
| | | continue;
|
| | | }
|
| | |
|
| | | if(!param1.getValue().equals(param2.getValue())) {
|
| | | check = false;
|
| | | break;
|
| | | }
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | return check;
|
| | | }
|
| | |
|
| | | /**
|
| | | * 通过库位号获取 排
|
| | | */
|
| | | public static int getRow(String locNo) {
|
| | | if (!Cools.isEmpty(locNo)) {
|
| | | String[] split = locNo.split(_LINK);
|
| | | return Integer.parseInt(split[0]);
|
| | | }
|
| | | throw new RuntimeException("库位解析异常");
|
| | | }
|
| | |
|
| | | /**
|
| | | * 通过库位号获取 列
|
| | | */
|
| | | public static int getBay(String locNo) {
|
| | | if (!Cools.isEmpty(locNo)) {
|
| | | String[] split = locNo.split(_LINK);
|
| | | return Integer.parseInt(split[1]);
|
| | | }
|
| | | throw new RuntimeException("库位解析异常");
|
| | | }
|
| | |
|
| | | /**
|
| | | * 通过库位号获取 层
|
| | | */
|
| | | public static int getLev(String locNo) {
|
| | | if (!Cools.isEmpty(locNo)) {
|
| | | String[] split = locNo.split(_LINK);
|
| | | return Integer.parseInt(split[2]);
|
| | | }
|
| | | throw new RuntimeException("库位解析异常");
|
| | | }
|
| | |
|
| | | public static String getLocNo(Number row, Number bay, Number lev) {
|
| | | return row + _LINK + bay + _LINK + lev;
|
| | | }
|
| | |
|
| | | /**
|
| | | * List转为树形结构
|
| | | *
|
| | | * @param data List
|
| | | * @param parentId 顶级的parentId
|
| | | * @param parentIdMapper 获取parentId的Function
|
| | | * @param idMapper 获取id的Function
|
| | | * @param consumer 赋值children的Consumer
|
| | | * @param <T> 数据的类型
|
| | | * @param <R> parentId的类型
|
| | | * @return List<T>
|
| | | */
|
| | | public static <T, R> List<T> toTreeData(List<T> data,
|
| | | R parentId,
|
| | | Function<? super T, ? extends R> parentIdMapper,
|
| | | Function<? super T, ? extends R> idMapper,
|
| | | BiConsumer<T, List<T>> consumer) {
|
| | | List<T> result = new ArrayList<>();
|
| | | for (T d : data) {
|
| | | R dParentId = parentIdMapper.apply(d);
|
| | | if (parentId.equals(dParentId)) {
|
| | | R dId = idMapper.apply(d);
|
| | | List<T> children = toTreeData(data, dId, parentIdMapper, idMapper, consumer);
|
| | | if(children.size() > 0) {
|
| | | consumer.accept(d, children);
|
| | | }
|
| | | result.add(d);
|
| | | }
|
| | | }
|
| | | return result;
|
| | | }
|
| | |
|
| | | // public static <T> List<T> treeRemove(List<T> data, String condition,
|
| | | // Function<? super T, ? extends String> fetcher,
|
| | | // Function<T, List<T>> childrenGetter,
|
| | | // BiConsumer<T, List<T>> childrenSetter) {
|
| | | // List<T> result = new ArrayList<>();
|
| | | // for (T node : data) {
|
| | | // List<T> children = childrenGetter.apply(node);
|
| | | //
|
| | | // if (children != null && !children.isEmpty()) {
|
| | | // List<T> newChildren = treeRemove(children, condition, fetcher, childrenGetter, childrenSetter);
|
| | | // childrenSetter.accept(node, newChildren);
|
| | | // }
|
| | | //
|
| | | // if (fetcher.apply(node).contains(condition)) {
|
| | | // result.add(node);
|
| | | // }
|
| | | // }
|
| | | // return result;
|
| | | // }
|
| | |
|
| | | public static <T> void treeRemove(List<T> list, String condition, Function<? super T, ? extends String> fetcher, Function<T, List<T>> childrenGetter) {
|
| | | Iterator<T> iterator = list.iterator();
|
| | | while (iterator.hasNext()) {
|
| | | T next = iterator.next();
|
| | | List<T> children = childrenGetter.apply(next);
|
| | | if (children != null && !children.isEmpty()) {
|
| | | treeRemove(children, condition, fetcher, childrenGetter);
|
| | | } else {
|
| | | if (!fetcher.apply(next).contains(condition)) {
|
| | | iterator.remove();
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * 数组倒序
|
| | | * @param bytes
|
| | | * @param <T>
|
| | | */
|
| | | public static <T> byte[] reverse(byte[] bytes) {
|
| | | if (bytes == null) return null;
|
| | | for (int start = 0, end = bytes.length - 1; start < end; start++, end--) {
|
| | | byte temp = bytes[end];
|
| | | bytes[end] = bytes[start];
|
| | | bytes[start] = temp;
|
| | | }
|
| | | return bytes;
|
| | | }
|
| | |
|
| | | /**
|
| | | * 截取数组
|
| | | * @param bytes 原数组
|
| | | * @param pos 定位(截取后包含定位点数据)
|
| | | * @param len 长度
|
| | | * @return new arr
|
| | | */
|
| | | public static byte[] slice(byte[] bytes, int pos, int len) {
|
| | | if (bytes == null || bytes.length == 0 || len == 0) {
|
| | | return new byte[0];
|
| | | }
|
| | | if (pos + len > bytes.length) {
|
| | | throw new RuntimeException("com.zy.acs.common.utils ArrayIndexOutOfBoundsException\n" +
|
| | | "原数组 bytes 长度为 " + bytes.length + ",截取长度超过原数组!");
|
| | | }
|
| | | byte[] arr = new byte[len];
|
| | | System.arraycopy(bytes, pos, arr, 0, len);
|
| | | return arr;
|
| | | }
|
| | |
|
| | | public static byte[] sliceWithReverse(byte[] bytes, int pos, int len) {
|
| | | byte[] slice = slice(bytes, pos, len);
|
| | | reverse(slice);
|
| | | return slice;
|
| | | }
|
| | |
|
| | | public static byte[] merge(Object... objects) {
|
| | | int len = 0;
|
| | | for (Object object : objects) {
|
| | | if (object instanceof byte[]) {
|
| | | byte[] bytes = (byte[]) object;
|
| | | len += bytes.length;
|
| | | }
|
| | | if (object instanceof Byte) {
|
| | | len++;
|
| | | }
|
| | | }
|
| | | byte[] arr = new byte[len];
|
| | | int idx = 0;
|
| | | for (Object object : objects) {
|
| | | if (object instanceof byte[]) {
|
| | | byte[] bytes = (byte[]) object;
|
| | | System.arraycopy(bytes, 0, arr, idx, bytes.length);
|
| | | idx += bytes.length;
|
| | | }
|
| | | if (object instanceof Byte) {
|
| | | byte[] bytes = new byte[] {(Byte) object};
|
| | | System.arraycopy(bytes, 0, arr, idx, bytes.length);
|
| | | idx += bytes.length;
|
| | | }
|
| | | }
|
| | | return arr;
|
| | | }
|
| | |
|
| | | public static <T> String join(T[] array, String seq) {
|
| | | StringBuilder sb = new StringBuilder();
|
| | | if (array != null) {
|
| | | for (int i = 0; i < array.length; i++) {
|
| | | sb.append(array[i]);
|
| | | if (i < array.length - 1) {
|
| | | sb.append(seq);
|
| | | }
|
| | | }
|
| | | }
|
| | | return sb.toString();
|
| | | }
|
| | |
|
| | | public static String zeroFill(String msg, Integer len) {
|
| | | len = Optional.ofNullable(len).orElse(16);
|
| | | if (msg.length() == len){
|
| | | return msg;
|
| | | } else if (msg.length() > len){
|
| | | return msg.substring(0, 16);
|
| | | } else {
|
| | | StringBuilder msgBuilder = new StringBuilder(msg);
|
| | | for (int i = 0; i<len-msg.length(); i++){
|
| | | msgBuilder.insert(0,"0");
|
| | | }
|
| | | return msgBuilder.toString();
|
| | | }
|
| | | }
|
| | |
|
| | | public static String removePrefix(String str, String prefix) {
|
| | | if (!Cools.isEmpty(str) && !Cools.isEmpty(prefix)) {
|
| | | if (str.startsWith(prefix)) {
|
| | | return str.substring(prefix.length());
|
| | | } else {
|
| | | return str;
|
| | | }
|
| | | } else {
|
| | | return str;
|
| | | }
|
| | | }
|
| | |
|
| | | public static String removeSuffix(String str, String suffix) {
|
| | | if (!Cools.isEmpty(str) && !Cools.isEmpty(suffix)) {
|
| | | if (str.endsWith(suffix)) {
|
| | | return str.substring(0, str.indexOf(suffix));
|
| | | } else {
|
| | | return str;
|
| | | }
|
| | | } else {
|
| | | return str;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * 大驼峰 转 symbol小驼峰
|
| | | */
|
| | | public static String toSymbolCase(String str, char symbol) {
|
| | | if (str == null) {
|
| | | return null;
|
| | | } else {
|
| | | int length = str.length();
|
| | | StringBuilder sb = new StringBuilder();
|
| | |
|
| | | for(int i = 0; i < length; ++i) {
|
| | | char c = str.charAt(i);
|
| | | if (Character.isUpperCase(c)) {
|
| | | Character preChar = i > 0 ? str.charAt(i - 1) : null;
|
| | | Character nextChar = i < str.length() - 1 ? str.charAt(i + 1) : null;
|
| | | if (null != preChar) {
|
| | | if (symbol == preChar) {
|
| | | if (null == nextChar || Character.isLowerCase(nextChar)) {
|
| | | c = Character.toLowerCase(c);
|
| | | }
|
| | | } else if (Character.isLowerCase(preChar)) {
|
| | | sb.append(symbol);
|
| | | if (null == nextChar || Character.isLowerCase(nextChar)) {
|
| | | c = Character.toLowerCase(c);
|
| | | }
|
| | | } else if (null == nextChar || Character.isLowerCase(nextChar)) {
|
| | | sb.append(symbol);
|
| | | c = Character.toLowerCase(c);
|
| | | }
|
| | | } else if (null == nextChar || Character.isLowerCase(nextChar)) {
|
| | | c = Character.toLowerCase(c);
|
| | | }
|
| | | }
|
| | |
|
| | | sb.append(c);
|
| | | }
|
| | |
|
| | | return "`" + sb.toString() + "`";
|
| | | }
|
| | | }
|
| | |
|
| | | public static String toCamelCase(CharSequence name) {
|
| | | if (null == name) {
|
| | | return null;
|
| | | } else {
|
| | | String name2 = name.toString();
|
| | | if (name2.contains("_")) {
|
| | | int length = name2.length();
|
| | | StringBuilder sb = new StringBuilder(length);
|
| | | boolean upperCase = false;
|
| | |
|
| | | for(int i = 0; i < length; ++i) {
|
| | | char c = name2.charAt(i);
|
| | | if (c == '_') {
|
| | | upperCase = true;
|
| | | } else if (upperCase) {
|
| | | sb.append(Character.toUpperCase(c));
|
| | | upperCase = false;
|
| | | } else {
|
| | | sb.append(Character.toLowerCase(c));
|
| | | }
|
| | | }
|
| | |
|
| | | return sb.toString();
|
| | | } else {
|
| | | return name2;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | public static String sub(String str, Integer maxLen) {
|
| | | if (str.length() > maxLen) {
|
| | | return str.substring(0, maxLen);
|
| | | }
|
| | | return str;
|
| | | }
|
| | |
|
| | | public static String generateSeqNum(String lastSeqNum) {
|
| | | if (Cools.isEmpty(lastSeqNum)) {
|
| | | return zeroFill("1", 4);
|
| | | } else {
|
| | | int i = Integer.parseInt(lastSeqNum);
|
| | | if (i >= 9999) {
|
| | | return zeroFill("1", 4);
|
| | | } else {
|
| | | return zeroFill(String.valueOf(i+1), 4);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | public static void cors(HttpServletResponse response){
|
| | | // 跨域设置
|
| | | response.setHeader("Access-Control-Max-Age", "3600");
|
| | | response.setHeader("Access-Control-Allow-Origin", "*");
|
| | | response.setHeader("Access-Control-Allow-Methods", "*");
|
| | | response.setHeader("Access-Control-Allow-Headers", "*");
|
| | | response.setHeader("Access-Control-Expose-Headers", Constants.TOKEN_HEADER_NAME);
|
| | | }
|
| | |
|
| | | }
|