chen.lin
昨天 46ab6223f090af6072e88252e67c9e057114a2be
对比数量
1个文件已修改
60 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/SaleOrderController.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/SaleOrderController.java
@@ -234,6 +234,7 @@
        }
        int successCount = 0;
        int updateCount = 0;
        int skipCount = 0;
        for (Map<String, Object> data : dataList) {
            try {
                // 检查是否已存在(根据订单号和物料编码)
@@ -242,11 +243,39 @@
                
                SaleOrder saleOrder;
                boolean isUpdate = false;
                boolean hasQtyChange = false;
                if (existOrder != null) {
                    // 已存在,更新数据
                    saleOrder = existOrder;
                    isUpdate = true;
                    updateCount++;
                    // 已存在,检查数量字段是否有变化
                    Double newOrderQty = parseDoubleSafely(data.get("orderQty"));
                    Double newProductQty = parseDoubleSafely(data.get("productQty"));
                    Double newInQty = parseDoubleSafely(data.get("inQty"));
                    Double newOutQty = parseDoubleSafely(data.get("outQty"));
                    Double newOutAmount = parseDoubleSafely(data.get("outAmount"));
                    Double newOutPrice = parseDoubleSafely(data.get("outPrice"));
                    Double newIcsbeqty = parseDoubleSafely(data.get("icsbeqty"));
                    Double newSeoseqty = parseDoubleSafely(data.get("seoseqty"));
                    // 比较数量字段是否有变化
                    hasQtyChange = !isDoubleEqual(existOrder.getOrderQty(), newOrderQty)
                            || !isDoubleEqual(existOrder.getProductQty(), newProductQty)
                            || !isDoubleEqual(existOrder.getInQty(), newInQty)
                            || !isDoubleEqual(existOrder.getOutQty(), newOutQty)
                            || !isDoubleEqual(existOrder.getOutAmount(), newOutAmount)
                            || !isDoubleEqual(existOrder.getOutPrice(), newOutPrice)
                            || !isDoubleEqual(existOrder.getIcsbeqty(), newIcsbeqty)
                            || !isDoubleEqual(existOrder.getSeoseqty(), newSeoseqty);
                    // 只有当数量有变化时才更新
                    if (hasQtyChange) {
                        saleOrder = existOrder;
                        isUpdate = true;
                        updateCount++;
                    } else {
                        // 数量没有变化,跳过更新
                        skipCount++;
                        continue;
                    }
                } else {
                    // 不存在,创建新记录
                    saleOrder = new SaleOrder();
@@ -293,7 +322,28 @@
                e.printStackTrace();
            }
        }
        return R.ok("成功保存 " + successCount + " 条新数据,更新 " + updateCount + " 条已存在数据");
        String message = "成功保存 " + successCount + " 条新数据,更新 " + updateCount + " 条已存在数据";
        if (skipCount > 0) {
            message += ",跳过 " + skipCount + " 条数量未变化的数据";
        }
        return R.ok(message);
    }
    /**
     * 比较两个Double值是否相等(处理null值)
     * @param d1 第一个Double值
     * @param d2 第二个Double值
     * @return true-相等,false-不相等
     */
    private boolean isDoubleEqual(Double d1, Double d2) {
        if (d1 == null && d2 == null) {
            return true;
        }
        if (d1 == null || d2 == null) {
            return false;
        }
        // 使用误差范围比较,避免浮点数精度问题
        return Math.abs(d1 - d2) < 0.0001;
    }
    @RequestMapping(value = "/saleOrder/update/auth")