diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/domain/JDOrder.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/domain/JDOrder.java index 77ce578..a4f29fc 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/domain/JDOrder.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/domain/JDOrder.java @@ -173,6 +173,10 @@ public class JDOrder extends BaseEntity { /** 利润是否手动锁定(1 是:保存时不再自动重算) */ private Integer profitManual; + /** 额外成本(计入自动利润:从 netReceipt − 成本中再减去此项,默认 0) */ + @Excel(name = "额外成本") + private Double extraCost; + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/JDOrderProfitServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/JDOrderProfitServiceImpl.java index 077be2c..acc275c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/JDOrderProfitServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/JDOrderProfitServiceImpl.java @@ -46,7 +46,7 @@ public class JDOrderProfitServiceImpl implements IJDOrderProfitService { if ("H-TF".equals(mark)) { if (!profitLocked) { - // 与 F 单一致:利润 = 对客实收 − (下单付款 − 后返)。列表未填售价时默认直款并从型号配置取价。 + // 与 F 单一致:利润 = 对客实收 − (下单付款 − 后返) − 额外成本。列表未填售价时默认直款并从型号配置取价。 String type = order.getSellingPriceType(); if (type == null || type.isEmpty()) { order.setSellingPriceType("direct"); @@ -61,7 +61,9 @@ public class JDOrderProfitServiceImpl implements IJDOrderProfitService { } else { String buyer = order.getBuyer(); boolean fan = buyer != null && buyer.trim().startsWith("凡-"); - order.setProfit(fan ? 65.0 : 15.0); + double base = fan ? 65.0 : 15.0; + order.setProfit(BigDecimal.valueOf(base - extraCostOrZero(order)) + .setScale(2, RoundingMode.HALF_UP).doubleValue()); } } return; @@ -127,13 +129,19 @@ public class JDOrderProfitServiceImpl implements IJDOrderProfitService { order.setProfit(null); return; } - // 成本 = 下单付款 - 后返金额;利润 = 对客实收(直款=售价,闲鱼=扣点后的到账)- 成本 + // 成本 = 下单付款 - 后返金额;利润 = 对客实收 − 成本 − 额外成本 double cost = BigDecimal.valueOf(pay).subtract(BigDecimal.valueOf(rebate)) .setScale(2, RoundingMode.HALF_UP).doubleValue(); - order.setProfit(BigDecimal.valueOf(netReceipt - cost) + double net = netReceipt - cost - extraCostOrZero(order); + order.setProfit(BigDecimal.valueOf(net) .setScale(2, RoundingMode.HALF_UP).doubleValue()); } + private static double extraCostOrZero(JDOrder order) { + Double e = order == null ? null : order.getExtraCost(); + return e != null ? e : 0.0; + } + @Override public int syncAutoProfitIfChanged(List ids) { if (ids == null || ids.isEmpty()) { diff --git a/ruoyi-system/src/main/resources/mapper/jarvis/JDOrderMapper.xml b/ruoyi-system/src/main/resources/mapper/jarvis/JDOrderMapper.xml index 38f8eec..43dec04 100644 --- a/ruoyi-system/src/main/resources/mapper/jarvis/JDOrderMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/jarvis/JDOrderMapper.xml @@ -42,6 +42,7 @@ + @@ -50,7 +51,7 @@ is_refunded, refund_date, is_refund_received, refund_received_date, is_rebate_received, rebate_received_date, is_price_protected, price_protected_date, is_invoice_opened, invoice_opened_date, is_review_posted, review_posted_date, rebate_remark_json, rebate_remark_has_abnormal, - selling_price_type, selling_price, profit, selling_price_manual, profit_manual + selling_price_type, selling_price, profit, selling_price_manual, profit_manual, extra_cost from jd_order @@ -174,7 +175,7 @@ order_id, buyer, order_time, create_time, update_time, status, is_count_enabled, third_party_order_no, jingfen_actual_price, is_refunded, refund_date, is_refund_received, refund_received_date, is_rebate_received, rebate_received_date, is_price_protected, price_protected_date, is_invoice_opened, invoice_opened_date, is_review_posted, review_posted_date, - selling_price_type, selling_price, profit, selling_price_manual, profit_manual + selling_price_type, selling_price, profit, selling_price_manual, profit_manual, extra_cost ) values ( #{remark}, #{distributionMark}, #{modelNumber}, #{link}, #{paymentAmount}, #{rebateAmount}, #{address}, #{logisticsLink}, @@ -182,7 +183,7 @@ #{orderId}, #{buyer}, #{orderTime}, now(), now(), #{status}, #{isCountEnabled}, #{thirdPartyOrderNo}, #{jingfenActualPrice}, #{isRefunded}, #{refundDate}, #{isRefundReceived}, #{refundReceivedDate}, #{isRebateReceived}, #{rebateReceivedDate}, #{isPriceProtected}, #{priceProtectedDate}, #{isInvoiceOpened}, #{invoiceOpenedDate}, #{isReviewPosted}, #{reviewPostedDate}, - #{sellingPriceType}, #{sellingPrice}, #{profit}, #{sellingPriceManual}, #{profitManual} + #{sellingPriceType}, #{sellingPrice}, #{profit}, #{sellingPriceManual}, #{profitManual}, #{extraCost,jdbcType=DOUBLE} ) @@ -220,6 +221,7 @@ review_posted_date = #{reviewPostedDate}, rebate_remark_json = #{rebateRemarkJson}, rebate_remark_has_abnormal = #{rebateRemarkHasAbnormal}, + extra_cost = #{extraCost}, selling_price_type = #{sellingPriceType,jdbcType=VARCHAR}, selling_price = #{sellingPrice,jdbcType=DOUBLE}, diff --git a/sql/jd_order_extra_cost.sql b/sql/jd_order_extra_cost.sql new file mode 100644 index 0000000..3b1f008 --- /dev/null +++ b/sql/jd_order_extra_cost.sql @@ -0,0 +1,2 @@ +-- JD 订单:额外成本(计入 F/H-TF 自动利润:利润 = 对客实收 − (付款−后返) − extra_cost) +ALTER TABLE jd_order ADD COLUMN extra_cost DOUBLE NOT NULL DEFAULT 0 COMMENT '额外成本,手动录入,默认0' AFTER profit_manual;