diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/JDOrderListController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/JDOrderListController.java index 3cc876c..d64d21d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/JDOrderListController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/JDOrderListController.java @@ -9,6 +9,9 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.jarvis.domain.GroupRebateExcelUpload; import com.ruoyi.jarvis.domain.OrderRows; import com.ruoyi.jarvis.service.IGroupRebateExcelUploadService; @@ -50,17 +53,21 @@ public class JDOrderListController extends BaseController private final GroupRebateExcelImportService groupRebateExcelImportService; private final IGroupRebateExcelUploadService groupRebateExcelUploadService; + private final ObjectMapper objectMapper; + public JDOrderListController(IJDOrderService jdOrderService, IJDOrderProfitService jdOrderProfitService, IOrderRowsService orderRowsService, IInstructionService instructionService, GroupRebateExcelImportService groupRebateExcelImportService, - IGroupRebateExcelUploadService groupRebateExcelUploadService) { + IGroupRebateExcelUploadService groupRebateExcelUploadService, + ObjectMapper objectMapper) { this.jdOrderService = jdOrderService; this.jdOrderProfitService = jdOrderProfitService; this.orderRowsService = orderRowsService; this.instructionService = instructionService; this.groupRebateExcelImportService = groupRebateExcelImportService; this.groupRebateExcelUploadService = groupRebateExcelUploadService; + this.objectMapper = objectMapper; } /** @@ -292,15 +299,53 @@ public class JDOrderListController extends BaseController } /** - * 修改JD订单 + * 修改JD订单(PUT body 使用 JsonNode:extraCost / extra_cost 从原始 JSON 显式写入实体, + * 避免个别 Jackson + Lombok 场景下 treeToValue 未映射导致重算利润仍按 0 计算) */ @Log(title = "JD订单", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@RequestBody JDOrder jdOrder) - { + public AjaxResult edit(@RequestBody JsonNode root) throws JsonProcessingException { + JDOrder jdOrder = objectMapper.treeToValue(root, JDOrder.class); + applyExtraCostFromPayload(root, jdOrder); jdOrderProfitService.recalculate(jdOrder); jdOrder.getParams().put("applyProfitFields", Boolean.TRUE); - return toAjax(jdOrderService.updateJDOrder(jdOrder)); + int rows = jdOrderService.updateJDOrder(jdOrder); + if (rows <= 0) { + return AjaxResult.error("更新失败或订单不存在"); + } + return AjaxResult.success(jdOrderService.selectJDOrderById(jdOrder.getId())); + } + + private static void applyExtraCostFromPayload(JsonNode root, JDOrder order) { + if (root == null || order == null) { + return; + } + JsonNode n = root.get("extraCost"); + if (readExtraCostNumber(n, order)) { + return; + } + n = root.get("extra_cost"); + readExtraCostNumber(n, order); + } + + /** @return true 已从节点解析并写入 order */ + private static boolean readExtraCostNumber(JsonNode n, JDOrder order) { + if (n == null || n.isNull()) { + return false; + } + if (n.isNumber()) { + order.setExtraCost(n.asDouble()); + return true; + } + if (n.isTextual()) { + try { + order.setExtraCost(Double.parseDouble(n.asText().trim())); + return true; + } catch (NumberFormatException ignored) { + return false; + } + } + return false; } /** diff --git a/ruoyi-system/src/main/resources/mapper/jarvis/JDOrderMapper.xml b/ruoyi-system/src/main/resources/mapper/jarvis/JDOrderMapper.xml index 43dec04..03b6879 100644 --- a/ruoyi-system/src/main/resources/mapper/jarvis/JDOrderMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/jarvis/JDOrderMapper.xml @@ -221,13 +221,14 @@ 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}, profit = #{profit,jdbcType=DOUBLE}, selling_price_manual = #{sellingPriceManual,jdbcType=INTEGER}, profit_manual = #{profitManual,jdbcType=INTEGER}, + extra_cost = COALESCE(#{extraCost,jdbcType=DOUBLE}, 0), update_time = now()