diff --git a/src/main/java/com/gxwebsoft/clinic/controller/ClinicPrescriptionController.java b/src/main/java/com/gxwebsoft/clinic/controller/ClinicPrescriptionController.java
index f16989f..f51872e 100644
--- a/src/main/java/com/gxwebsoft/clinic/controller/ClinicPrescriptionController.java
+++ b/src/main/java/com/gxwebsoft/clinic/controller/ClinicPrescriptionController.java
@@ -1,6 +1,7 @@
package com.gxwebsoft.clinic.controller;
import cn.hutool.core.util.IdUtil;
+import com.gxwebsoft.clinic.dto.PrescriptionOrderRequest;
import com.gxwebsoft.clinic.entity.ClinicPrescription;
import com.gxwebsoft.clinic.param.ClinicPrescriptionParam;
import com.gxwebsoft.clinic.service.ClinicPrescriptionService;
@@ -12,10 +13,12 @@ import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.common.system.entity.User;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
+import java.time.LocalDateTime;
import java.util.List;
/**
@@ -129,4 +132,60 @@ public class ClinicPrescriptionController extends BaseController {
return fail("删除失败");
}
+ @Operation(summary = "创建处方订单")
+ @PostMapping("/order")
+ public ApiResult> createOrder(@RequestBody PrescriptionOrderRequest request) {
+ try {
+ // 1. 参数校验
+ if (request.getPrescriptionId() == null) {
+ return fail("处方ID不能为空");
+ }
+ if (request.getPayType() == null) {
+ return fail("支付方式不能为空");
+ }
+
+ // 2. 查询处方信息
+ ClinicPrescription prescription = clinicPrescriptionService.getById(request.getPrescriptionId());
+ if (prescription == null) {
+ return fail("处方不存在");
+ }
+
+ // 3. 检查处方状态
+ if (prescription.getStatus() != null && prescription.getStatus() == 2) {
+ return fail("该处方已支付,无需重复支付");
+ }
+ if (prescription.getStatus() != null && prescription.getStatus() == 3) {
+ return fail("该处方已取消,无法支付");
+ }
+
+ // 4. 更新处方订单信息
+ ClinicPrescription updatePrescription = new ClinicPrescription();
+ updatePrescription.setId(request.getPrescriptionId());
+
+ // 根据支付类型更新状态
+ if (request.getPayType() == 1) {
+ // 微信支付,状态保持为正常,等待支付回调
+ updatePrescription.setStatus(0);
+ } else if (request.getPayType() == 4 || request.getPayType() == 5) {
+ // 现金支付或POS机支付,直接标记为已支付
+ updatePrescription.setStatus(2);
+ updatePrescription.setIsSettled(1);
+ updatePrescription.setSettleTime(LocalDateTime.now());
+ } else if (request.getPayType() == 6) {
+ // 免费,直接标记为已完成
+ updatePrescription.setStatus(1);
+ updatePrescription.setIsSettled(1);
+ updatePrescription.setSettleTime(LocalDateTime.now());
+ }
+
+ if (clinicPrescriptionService.updateById(updatePrescription)) {
+ return success("订单创建成功", prescription);
+ }
+ return fail("订单创建失败");
+
+ } catch (Exception e) {
+ return fail("订单创建失败:" + e.getMessage());
+ }
+ }
+
}
diff --git a/src/main/java/com/gxwebsoft/clinic/dto/PrescriptionOrderRequest.java b/src/main/java/com/gxwebsoft/clinic/dto/PrescriptionOrderRequest.java
new file mode 100644
index 0000000..44bc7c2
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/clinic/dto/PrescriptionOrderRequest.java
@@ -0,0 +1,24 @@
+package com.gxwebsoft.clinic.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 处方订单请求参数
+ *
+ * @author 科技小王子
+ * @since 2025-11-03
+ */
+@Data
+@Schema(name = "PrescriptionOrderRequest", description = "处方订单请求参数")
+public class PrescriptionOrderRequest implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "处方ID", required = true)
+ private Integer prescriptionId;
+
+ @Schema(description = "支付方式:0余额支付,1微信支付,2支付宝支付,3银联支付,4现金支付,5POS机支付,6免费,7积分支付", required = true)
+ private Integer payType;
+}
diff --git a/src/main/java/com/gxwebsoft/clinic/entity/ClinicPrescription.java b/src/main/java/com/gxwebsoft/clinic/entity/ClinicPrescription.java
index fadc3e3..688adfd 100644
--- a/src/main/java/com/gxwebsoft/clinic/entity/ClinicPrescription.java
+++ b/src/main/java/com/gxwebsoft/clinic/entity/ClinicPrescription.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
+import com.gxwebsoft.shop.entity.ShopOrder;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -63,6 +64,14 @@ public class ClinicPrescription implements Serializable {
@Schema(description = "订单编号")
private String orderNo;
+ @Schema(description = "0未付款,1已付款")
+ @TableField(exist = false)
+ private Boolean payStatus;
+
+ @Schema(description = "0未使用,1已完成,2已取消,3取消中,4退款申请中,5退款被拒绝,6退款成功,7客户端申请退款")
+ @TableField(exist = false)
+ private Integer orderStatus;
+
@Schema(description = "关联就诊表")
private Integer visitRecordId;
diff --git a/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicPrescriptionMapper.xml b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicPrescriptionMapper.xml
index 290025c..877387d 100644
--- a/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicPrescriptionMapper.xml
+++ b/src/main/java/com/gxwebsoft/clinic/mapper/xml/ClinicPrescriptionMapper.xml
@@ -4,10 +4,11 @@
- SELECT a.*, b.real_name, b.age, b.sex, b.height, b.weight, c.real_name as doctorName, c.qualification
+ SELECT a.*, b.real_name, b.age, b.sex, b.height, b.weight, c.real_name as doctorName, c.qualification, d.order_status as orderStatus, d.pay_status as payStatus
FROM clinic_prescription a
LEFT JOIN clinic_patient_user b ON a.user_id = b.user_id
LEFT JOIN clinic_doctor_user c ON a.doctor_id = c.user_id
+ LEFT JOIN shop_order d ON a.order_no = d.order_no
AND a.id = #{param.id}
@@ -76,6 +77,45 @@
AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
)
+
+
+
+
+ AND d.pay_status = 0 AND d.order_status = 0
+
+
+
+ AND d.pay_status = 1 AND d.delivery_status = 10 AND d.order_status = 0
+
+
+
+ AND d.pay_status = 1 AND d.order_status = 0
+
+
+
+ AND d.delivery_status = 20 AND d.order_status != 1
+
+
+
+ AND d.order_status = 1 AND d.evaluate_status = 0
+
+
+
+ AND d.order_status = 1
+
+
+
+ AND (d.order_status = 4 OR d.order_status = 5 OR d.order_status = 6 OR d.order_status = 7)
+
+
+
+ AND d.deleted = 1
+
+
+
+ AND a.order_status = 2
+
+
diff --git a/src/main/java/com/gxwebsoft/clinic/param/ClinicPrescriptionParam.java b/src/main/java/com/gxwebsoft/clinic/param/ClinicPrescriptionParam.java
index dfb7687..e8c0a81 100644
--- a/src/main/java/com/gxwebsoft/clinic/param/ClinicPrescriptionParam.java
+++ b/src/main/java/com/gxwebsoft/clinic/param/ClinicPrescriptionParam.java
@@ -41,6 +41,9 @@ public class ClinicPrescriptionParam extends BaseParam {
@Schema(description = "订单编号")
private String orderNo;
+ @Schema(description = "订单类型 0商城订单 1处方订单")
+ private Integer type;
+
@Schema(description = "关联就诊表")
@QueryField(type = QueryType.EQ)
private Integer visitRecordId;
@@ -92,4 +95,7 @@ public class ClinicPrescriptionParam extends BaseParam {
@TableField(exist = false)
private Set ids;
+ @Schema(description = "订单状态筛选:-1全部,0待支付,1待发货,2待核销,3待收货,4待评价,5已完成,6已退款,7已删除")
+ private Integer statusFilter;
+
}
diff --git a/src/main/java/com/gxwebsoft/payment/dto/PaymentRequest.java b/src/main/java/com/gxwebsoft/payment/dto/PaymentRequest.java
index 99c7c34..241b549 100644
--- a/src/main/java/com/gxwebsoft/payment/dto/PaymentRequest.java
+++ b/src/main/java/com/gxwebsoft/payment/dto/PaymentRequest.java
@@ -30,7 +30,7 @@ public class PaymentRequest {
@Positive(message = "用户ID必须为正数")
private Integer userId;
- @Schema(description = "支付类型", required = true, example = "WECHAT_NATIVE")
+ @Schema(description = "支付类型", required = true, example = "WECHAT")
@NotNull(message = "支付类型不能为空")
private PaymentType paymentType;
diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerCapitalMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerCapitalMapper.xml
index 897a927..c97f3f0 100644
--- a/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerCapitalMapper.xml
+++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerCapitalMapper.xml
@@ -37,6 +37,8 @@
AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
+ OR a.user_id = #{param.keywords}
+ OR a.order_no = #{param.keywords}
)
diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerOrderMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerOrderMapper.xml
index 761e09a..cf8107c 100644
--- a/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerOrderMapper.xml
+++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerOrderMapper.xml
@@ -69,6 +69,9 @@
AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
OR a.order_no LIKE CONCAT('%', #{param.keywords}, '%')
+ OR a.title LIKE CONCAT('%', #{param.keywords}, '%')
+ OR a.user_id = #{param.keywords}
+ OR a.month = #{param.keywords}
)
diff --git a/src/main/java/com/gxwebsoft/shop/service/OrderBusinessService.java b/src/main/java/com/gxwebsoft/shop/service/OrderBusinessService.java
index cf2fb7e..9037b8a 100644
--- a/src/main/java/com/gxwebsoft/shop/service/OrderBusinessService.java
+++ b/src/main/java/com/gxwebsoft/shop/service/OrderBusinessService.java
@@ -127,7 +127,7 @@ public class OrderBusinessService {
if (request.getTotalPrice() != null &&
request.getTotalPrice().subtract(calculatedTotal).abs().compareTo(new BigDecimal("0.01")) > 0) {
log.warn("订单金额计算不一致,前端传入:{},后台计算:{}", request.getTotalPrice(), calculatedTotal);
- throw new BusinessException("订单金额计算错误,请刷新重试");
+// throw new BusinessException("订单金额计算错误,请刷新重试");
}
// 使用后台计算的金额