chen.lin
1 天以前 48b2dc4df2c247d12e4dd52c3c5d290f1e026578
销售订单-修复
2个文件已修改
123 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/SaleOrderController.java 119 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/salesOrder/salsesOrder.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/SaleOrderController.java
@@ -23,6 +23,7 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.*;
import javax.servlet.http.HttpServletResponse;
@@ -157,6 +158,67 @@
        }
    }
    /**
     * 安全地将对象转换为BigDecimal,确保null值不会被错误转换
     * 使用BigDecimal可以避免浮点数精度问题,特别适合金额和数量字段
     * @param obj 待转换的对象
     * @return BigDecimal值,如果对象为null或无法转换则返回null
     */
    private BigDecimal parseBigDecimalSafely(Object obj) {
        if (obj == null) {
            return null;
        }
        // 如果是字符串"null",返回null
        String str = String.valueOf(obj);
        if ("null".equalsIgnoreCase(str) || str.trim().isEmpty()) {
            return null;
        }
        try {
            // 如果已经是BigDecimal,直接返回
            if (obj instanceof BigDecimal) {
                return (BigDecimal) obj;
            }
            // 如果是Number类型,转换为BigDecimal
            if (obj instanceof Number) {
                // 使用字符串转换避免精度损失
                return new BigDecimal(obj.toString());
            }
            // 字符串转换为BigDecimal
            return new BigDecimal(str.trim());
        } catch (NumberFormatException e) {
            // 转换失败,返回null
            return null;
        }
    }
    /**
     * 安全地将对象转换为Double,确保null值不会被错误转换
     * @deprecated 建议使用 parseBigDecimalSafely 替代,以避免精度问题
     * @param obj 待转换的对象
     * @return Double值,如果对象为null或无法转换则返回null
     */
    @Deprecated
    private Double parseDoubleSafely(Object obj) {
        if (obj == null) {
            return null;
        }
        // 如果是字符串"null",返回null
        String str = String.valueOf(obj);
        if ("null".equalsIgnoreCase(str) || str.trim().isEmpty()) {
            return null;
        }
        try {
            // 尝试转换为Double
            if (obj instanceof Number) {
                return ((Number) obj).doubleValue();
            }
            return Double.valueOf(str);
        } catch (NumberFormatException e) {
            // 转换失败,返回null
            return null;
        }
    }
    @RequestMapping(value = "/saleOrder/add/auth")
    @ManagerAuth
    public R add(SaleOrder saleOrder) {
@@ -171,37 +233,41 @@
            return R.error("数据不能为空");
        }
        int successCount = 0;
        int updateCount = 0;
        for (Map<String, Object> data : dataList) {
            try {
                SaleOrder saleOrder1 = saleOrderService.selectOne(new EntityWrapper<SaleOrder>()
                // 检查是否已存在(根据订单号和物料编码)
                SaleOrder existOrder = saleOrderService.selectOne(new EntityWrapper<SaleOrder>()
                        .eq("order_code", data.get("orderCode")).eq("inv_code", data.get("invCode")));
                if (null != saleOrder1) {
                    continue;
                SaleOrder saleOrder;
                boolean isUpdate = false;
                if (existOrder != null) {
                    // 已存在,更新数据
                    saleOrder = existOrder;
                    isUpdate = true;
                    updateCount++;
                } else {
                    // 不存在,创建新记录
                    saleOrder = new SaleOrder();
                    successCount++;
                }
                SaleOrder saleOrder = new SaleOrder();
                saleOrder.setOrderCode(data.get("orderCode") != null ? String.valueOf(data.get("orderCode")) : null);
                saleOrder.setPersonName(data.get("personName") != null ? String.valueOf(data.get("personName")) : null);
                saleOrder.setInvCode(data.get("invCode") != null ? String.valueOf(data.get("invCode")) : null);
                saleOrder.setInvName(data.get("invName") != null ? String.valueOf(data.get("invName")) : null);
                saleOrder.setInvStd(data.get("invStd") != null ? String.valueOf(data.get("invStd")) : null);
                saleOrder.setOrderQty(
                        data.get("orderQty") != null ? Double.valueOf(String.valueOf(data.get("orderQty"))) : null);
                saleOrder.setProductQty(
                        data.get("productQty") != null ? Double.valueOf(String.valueOf(data.get("productQty"))) : null);
                saleOrder
                        .setInQty(data.get("inQty") != null ? Double.valueOf(String.valueOf(data.get("inQty"))) : null);
                saleOrder.setOutQty(
                        data.get("outQty") != null ? Double.valueOf(String.valueOf(data.get("outQty"))) : null);
                saleOrder.setOutAmount(
                        data.get("outAmount") != null ? Double.valueOf(String.valueOf(data.get("outAmount"))) : null);
                saleOrder.setOutPrice(
                        data.get("outPrice") != null ? Double.valueOf(String.valueOf(data.get("outPrice"))) : null);
                saleOrder.setIcsbeqty(
                        data.get("icsbeqty") != null ? Double.valueOf(String.valueOf(data.get("icsbeqty"))) : null);
                saleOrder.setSeoseqty(
                        data.get("seoseqty") != null ? Double.valueOf(String.valueOf(data.get("seoseqty"))) : null);
                saleOrder.setOrderQty(parseDoubleSafely(data.get("orderQty")));
                saleOrder.setProductQty(parseDoubleSafely(data.get("productQty")));
                saleOrder.setInQty(parseDoubleSafely(data.get("inQty")));
                saleOrder.setOutQty(parseDoubleSafely(data.get("outQty")));
                saleOrder.setOutAmount(parseDoubleSafely(data.get("outAmount")));
                saleOrder.setOutPrice(parseDoubleSafely(data.get("outPrice")));
                saleOrder.setIcsbeqty(parseDoubleSafely(data.get("icsbeqty")));
                saleOrder.setSeoseqty(parseDoubleSafely(data.get("seoseqty")));
                // 日期字段处理
                if (data.get("deliveryDate") != null && !Cools.isEmpty(String.valueOf(data.get("deliveryDate")))) {
                    try {
@@ -212,15 +278,22 @@
                        // 尝试使用 DateUtils 解析其他格式
                        saleOrder.setDeliveryDate(DateUtils.convert(String.valueOf(data.get("deliveryDate"))));
                    }
                } else {
                    saleOrder.setDeliveryDate(null);
                }
                // 保存或更新
                if (isUpdate) {
                    saleOrderService.updateById(saleOrder);
                } else {
                saleOrderService.insert(saleOrder);
                successCount++;
                }
            } catch (Exception e) {
                // 记录失败的记录,继续处理下一条
                e.printStackTrace();
            }
        }
        return R.ok("成功保存 " + successCount + " 条数据");
        return R.ok("成功保存 " + successCount + " 条新数据,更新 " + updateCount + " 条已存在数据");
    }
    @RequestMapping(value = "/saleOrder/update/auth")
src/main/webapp/static/js/salesOrder/salsesOrder.js
@@ -17,7 +17,9 @@
        , { field: 'izReceive', align: 'center', title: '小订单', width: 80 }
        , { field: 'inQty', align: 'center', title: '入库数量', width: 110 }
        , { field: 'disQty', align: 'center', title: '通知单', width: 110 }
        , { field: 'outQty', align: 'center', title: '出库数量', width: 110 }
        , { field: 'icsbeqty', align: 'center', title: '出货通知数', width: 110 }
        , { field: 'seoseqty', align: 'center', title: '实出数量', width: 110 }
        , { field: 'outQty', align: 'center', title: '对账数量', width: 110 }
        , { field: 'invoiceQty', align: 'center', title: '开票数量', width: 110 }
        , { field: 'unInvoiceQty', align: 'center', title: '未开票数量', width: 110 }
        , { field: 'deliveryDate', align: 'center', title: '交货日期', width: 110 }