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("订单金额计算错误,请刷新重试"); } // 使用后台计算的金额