瀏覽代碼

feat: 订单修改价格

xdd 1 月之前
父節點
當前提交
1080ca899b

+ 10 - 0
fs-service/src/main/java/com/fs/his/domain/FsStoreOrder.java

@@ -266,4 +266,14 @@ public class FsStoreOrder extends BaseEntity
     private BigDecimal billPrice;
     private String erpPhone;
 
+
+    /**
+     * 订单备注
+     */
+    private String note;
+
+    /**
+     * 是否改价
+     */
+    private Integer isEditMoney;
 }

+ 22 - 0
fs-service/src/main/java/com/fs/his/param/ModifyStoreOrderPriceParam.java

@@ -0,0 +1,22 @@
+package com.fs.his.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+public class ModifyStoreOrderPriceParam implements Serializable {
+    /**
+     * 订单id
+     */
+    private Long orderId;
+    /**
+     * 订单最终价格
+     */
+    private BigDecimal price;
+    /**
+     * 备注
+     */
+    private String note;
+}

+ 2 - 0
fs-service/src/main/java/com/fs/his/service/IFsStoreOrderService.java

@@ -255,4 +255,6 @@ public interface IFsStoreOrderService
     R receiveWaybillPush(String body);
 
     List<FsStoreOrderListVO> selectFsStoreOrderListVOByErpAccount(FsStoreOrderParam fsStoreOrder);
+
+    FsStoreOrder modifyStoreOrderPrice(ModifyStoreOrderPriceParam param);
 }

+ 24 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java

@@ -79,6 +79,7 @@ import com.github.binarywang.wxpay.service.WxPayService;
 import com.google.gson.Gson;
 import lombok.Synchronized;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.ObjectUtils;
 import org.json.JSONObject;
 import org.springframework.aop.framework.AopContext;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -3376,6 +3377,29 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         return fsStoreOrderMapper.selectFsStoreOrderListVOByErpAccount(fsStoreOrder);
     }
 
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    public FsStoreOrder modifyStoreOrderPrice(ModifyStoreOrderPriceParam param) {
+        FsStoreOrder fsStoreOrder = fsStoreOrderMapper.selectFsStoreOrderByOrderId(param.getOrderId());
+        if(fsStoreOrder == null){
+            throw new IllegalArgumentException("订单未找到!");
+        }
+
+        // 如果订单状态不是待支付
+        if(ObjectUtils.notEqual(1L,fsStoreOrder.getStatus())) {
+            throw new RuntimeException("当前订单状态不为待支付!");
+        }
+        // 修改支付金额
+        fsStoreOrder.setPayMoney(param.getPrice());
+        // 是否改价
+        fsStoreOrder.setIsEditMoney(1);
+        // 订单备注
+        fsStoreOrder.setNote(param.getNote());
+        fsStoreOrderMapper.updateFsStoreOrder(fsStoreOrder);
+
+        return fsStoreOrder;
+    }
+
     private IErpOrderService getErpService() {
         FsSysConfig sysConfig = configUtil.getSysConfig();
         Integer erpOpen = sysConfig.getErpOpen();

+ 2 - 0
fs-service/src/main/resources/mapper/his/FsStoreOrderMapper.xml

@@ -407,6 +407,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="source != null">source = #{source},</if>
             <if test="billPrice != null">bill_price = #{billPrice},</if>
             <if test="erpPhone != null and erpPhone != ''">erp_phone = #{erpPhone},</if>
+            <if test="note != null and note != ''">note = #{note},</if>
+            <if test="isEditMoney != null and isEditMoney != ''">is_edit_money = #{isEditMoney},</if>
         </trim>
         where order_id = #{orderId}
     </update>

+ 2 - 0
fs-user-app/src/main/java/com/fs/app/controller/PrescribeController.java

@@ -122,4 +122,6 @@ public class PrescribeController extends  AppBaseController {
         return R.ok();
     }
 
+
+
 }

+ 58 - 0
fs-user-app/src/main/java/com/fs/app/controller/StoreOrderController.java

@@ -19,18 +19,26 @@ import com.fs.his.vo.FsStoreOrderListUVO;
 import com.fs.ybPay.service.IPayService;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.hc.openapi.tool.util.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 
+@Slf4j
 @Api("商城接口")
 @RestController
 @RequestMapping(value="/app/storeOrder")
@@ -58,6 +66,10 @@ public class StoreOrderController extends  AppBaseController {
     private IFsCouponService couponService;
     @Autowired
     private IFsStoreOrderBillLogService orderBillLogService;
+
+    @Autowired
+    private RedissonClient redissonClient;
+
     @Login
     @ApiOperation("获取我的订单列表")
     @GetMapping("/getMyStoreOrderList")
@@ -147,6 +159,52 @@ public class StoreOrderController extends  AppBaseController {
         return orderService.payOrder(param);
     }
 
+    @Login
+    @PostMapping("/modifyStoreOrderPrice")
+    public R modifyStoreOrderPrice(ModifyStoreOrderPriceParam param){
+        log.info("销售修改订单价格 {}", param);
+
+        if(ObjectUtil.isEmpty(param.getOrderId())){
+            throw new IllegalArgumentException("订单号不能为空!");
+        }
+
+        if(StringUtils.isBlank(param.getNote())){
+            throw new IllegalArgumentException("修改原因不能为空!");
+        }
+
+        if(ObjectUtil.isEmpty(param.getPrice())) {
+            throw new IllegalArgumentException("订单修改价格不能为空!");
+        }
+
+        if(param.getPrice().compareTo(BigDecimal.ZERO) < 0) {
+            throw new IllegalArgumentException("订单修改价格不能为负数");
+        }
+
+
+        String lockKey = "order_price_lock:" + param.getOrderId();
+        RLock lock = redissonClient.getLock(lockKey);
+
+        boolean locked = false;
+        try {
+            // 尝试获取锁,最多等待3秒,锁过期时间10秒
+            locked = lock.tryLock(3, 10, TimeUnit.SECONDS);
+
+            if (locked) {
+                FsStoreOrder fsStoreOrder = orderService.modifyStoreOrderPrice(param);
+                return R.ok().put("data",fsStoreOrder);
+            } else {
+                log.warn("获取订单价格修改锁失败,订单ID: {}", param.getOrderId());
+                return R.error("订单正在被其他操作修改,请稍后再试");
+            }
+        } catch (Exception e) {
+            log.error("修改订单价格异常,订单ID: {}", param.getOrderId(), e);
+            return R.error("修改订单价格失败: " + e.getMessage());
+        } finally {
+            if (locked && lock.isHeldByCurrentThread()) {
+                lock.unlock();
+            }
+        }
+    }