zy-asrs-common/src/main/java/com/zy/asrs/common/domain/param/PickMatParam.java
@@ -6,6 +6,7 @@ public class PickMatParam { private String matnr; private String maktx; private String batch; zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/MobileServiceImpl.java
@@ -329,11 +329,11 @@ if (!Cools.isEmpty(waitPakin.getOrderNo())){ Order order = orderService.selectByNo(waitPakin.getOrderNo(), hostId); if (Cools.isEmpty(order)){ continue; throw new CoolException("平库上架查询订单失败"); } OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), waitPakin.getMatnr(), waitPakin.getBatch(),hostId); if (Cools.isEmpty(orderDetl)){ continue; throw new CoolException("平库上架查询订单明细失败"); } // 修改订单明细完成数量 if (!orderDetlService.increase(order.getId(), hostId, waitPakin.getMatnr(), waitPakin.getBatch(), waitPakin.getAnfme())) { zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/LocDetlController.java
@@ -106,7 +106,14 @@ // .where("loc_no like '" +row +"%'"); // } List<LocDetl> list = locDetlService.list(wrapper); return R.ok(exportSupport(list, fields)); List<LocDetl> locDetls=new ArrayList<>(); for (LocDetl l:list ) { String new_String = l.getMatnr().replace("\"",""); l.setMatnr(new_String); locDetls.add(l); } return R.ok(exportSupport(locDetls, fields)); } private <T> void convert(Map<String, Object> map, QueryWrapper<T> wrapper){ zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/LocMastController.java
@@ -1,6 +1,7 @@ package com.zy.asrs.wms.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.OrderItem; @@ -255,4 +256,30 @@ return R.ok().add(list); } @RequestMapping(value = "/wrkLastno/export/auth") @ManagerAuth(memo = "库位明细导出") public synchronized R export(@RequestBody JSONObject param){ List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); QueryWrapper<LocMast> wrapper = new QueryWrapper<>(); Map<String, Object> map = excludeTrash(param.getJSONObject("locMast")); String row = ""; if (map.get("row") != null) { String chooseRow = (String) map.get("row"); if (chooseRow.length() == 1) { row = "0" + chooseRow; map.remove("row"); }else { row = chooseRow; map.remove("row"); } } convert(map, wrapper); // if (!row.equals("")){ // wrapper.and() // .where("loc_no like '" +row +"%'"); // } List<LocMast> list = locMastService.list(wrapper); return R.ok(exportSupport(list, fields)); } } zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MobileController.java
@@ -523,6 +523,7 @@ PickMatParam matParam = new PickMatParam(); matParam.setMatnr(orderDetl.getMatnr()); matParam.setMaktx(orderDetl.getMaktx()); matParam.setBatch(orderDetl.getBatch()); matParam.setOrderNo(orderDetl.getOrderNo()); matParam.setOrderId(orderDetl.getOrderId()); zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/Constants.java
New file @@ -0,0 +1,93 @@ package com.zy.asrs.wms.utils; /** * 系统常量 * Created by vincent on 2019-10-29 15:55 */ public class Constants { /** * 默认成功码 */ public static final int RESULT_OK_CODE = 0; /** * 默认失败码 */ public static final int RESULT_ERROR_CODE = 1; /** * 默认成功信息 */ public static final String RESULT_OK_MSG = "操作成功"; /** * 默认失败信息 */ public static final String RESULT_ERROR_MSG = "操作失败"; /** * 无权限错误码 */ public static final int UNAUTHORIZED_CODE = 403; /** * 无权限提示信息 */ public static final String UNAUTHORIZED_MSG = "没有访问权限"; /** * 未认证错误码 */ public static final int UNAUTHENTICATED_CODE = 401; /** * 未认证提示信息 */ public static final String UNAUTHENTICATED_MSG = "请先登录"; /** * 登录过期错误码 */ public static final int TOKEN_EXPIRED_CODE = 401; /** * 登录过期提示信息 */ public static final String TOKEN_EXPIRED_MSG = "登录已过期"; /** * 非法token错误码 */ public static final int BAD_CREDENTIALS_CODE = 401; /** * 非法token提示信息 */ public static final String BAD_CREDENTIALS_MSG = "请退出重新登录"; /** * 表示升序的值 */ public static final String ORDER_ASC_VALUE = "asc"; /** * 表示降序的值 */ public static final String ORDER_DESC_VALUE = "desc"; /** * token通过header传递的名称 */ public static final String TOKEN_HEADER_NAME = "Authorization"; /** * token通过参数传递的名称 */ public static final String TOKEN_PARAM_NAME = "access_token"; /** * token认证类型 */ public static final String TOKEN_TYPE = "Bearer"; } zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/ExcelUtil.java
New file @@ -0,0 +1,95 @@ package com.zy.asrs.wms.utils; import com.zy.asrs.framework.common.Cools; import io.swagger.annotations.ApiModelProperty; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; /** * Created by vincent on 2/17/2024 */ public class ExcelUtil { public static void build(Workbook workbook, HttpServletResponse response) { response.reset(); Utils.cors(response); response.setContentType("application/octet-stream; charset=utf-8"); try { response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("export", "UTF-8")); workbook.write(response.getOutputStream()); } catch (IOException ignore) {} } public static <T> Workbook create(List<T> list, Class<T> clz) { HSSFWorkbook workbook = new HSSFWorkbook(); Sheet sheet = workbook.createSheet(clz.getSimpleName()); Row header = sheet.createRow(0); Field[] fields = Cools.getAllFields(clz); int headerIdx = 0; for (Field field : fields) { if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers()) || Modifier.isTransient(field.getModifiers())) { continue; } String memo = "未知"; if (field.isAnnotationPresent(ApiModelProperty.class)) { memo = field.getAnnotation(ApiModelProperty.class).value(); } header.createCell(headerIdx).setCellValue(memo); headerIdx++; } int rowIndex = 1; for (T t : list) { Row row = sheet.createRow(rowIndex++); int cellIndex = 0; for (Field field : fields) { if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers()) || Modifier.isTransient(field.getModifiers())) { continue; } field.setAccessible(true); // 此行很重要,特别是字段为private时 Object value = null; try { value = field.get(t); } catch (IllegalAccessException e) { e.printStackTrace(); } if (value != null) { if (value instanceof Date) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); row.createCell(cellIndex).setCellValue(sdf.format((Date) value)); } else { row.createCell(cellIndex).setCellValue(value.toString()); } } cellIndex++; } } for (int i = 0; i <= fields.length; i++) { sheet.autoSizeColumn(i); } return workbook; } } zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/Utils.java
New file @@ -0,0 +1,306 @@ package com.zy.asrs.wms.utils; import com.zy.asrs.framework.common.Cools; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Optional; import java.util.function.BiConsumer; import java.util.function.Function; /** * Created by vincent on 2023/3/14 */ public class Utils { /** * 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); } } zy-asrs-wms/src/main/resources/application.yml
@@ -1,5 +1,5 @@ server: port: 8085 port: 8081 servlet: context-path: /@pom.build.finalName@ zy-asrs-wms/src/main/webapp/static/js/locDetl/locDetl.js
@@ -232,7 +232,7 @@ item[2] = "'" + item[2]; } }) table.exportFile(titles, res.data, 'xls'); table.exportFile(titles, res.data, 'xlsx'); } else if (res.code === 403) { top.location.href = baseUrl + "/"; } else {