cp
2025-01-04 8bfe3cdd48ca3f47d054deb5aebc48154ffb4c88
完善
7个文件已修改
3个文件已添加
540 ■■■■■ 已修改文件
zy-asrs-common/src/main/java/com/zy/asrs/common/domain/param/PickMatParam.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/MobileServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/LocDetlController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/LocMastController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MobileController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/Constants.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/ExcelUtil.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/Utils.java 306 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/webapp/static/js/locDetl/locDetl.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 {