| | |
| | | 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; |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 安全地将对象转换为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 |
| | |
| | | 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 { |
| | |
| | | // 尝试使用 DateUtils 解析其他格式 |
| | | saleOrder.setDeliveryDate(DateUtils.convert(String.valueOf(data.get("deliveryDate")))); |
| | | } |
| | | } else { |
| | | saleOrder.setDeliveryDate(null); |
| | | } |
| | | saleOrderService.insert(saleOrder); |
| | | successCount++; |
| | | |
| | | // 保存或更新 |
| | | if (isUpdate) { |
| | | saleOrderService.updateById(saleOrder); |
| | | } else { |
| | | saleOrderService.insert(saleOrder); |
| | | } |
| | | } catch (Exception e) { |
| | | // 记录失败的记录,继续处理下一条 |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | return R.ok("成功保存 " + successCount + " 条数据"); |
| | | return R.ok("成功保存 " + successCount + " 条新数据,更新 " + updateCount + " 条已存在数据"); |
| | | } |
| | | |
| | | @RequestMapping(value = "/saleOrder/update/auth") |