diff --git a/admin-hanhai-vue/.env.development b/admin-hanhai-vue/.env.development index 5aad27b..dcb2c37 100644 --- a/admin-hanhai-vue/.env.development +++ b/admin-hanhai-vue/.env.development @@ -1,6 +1,7 @@ NODE_ENV=development -VUE_APP_API_BASE_URL=https://www.yurangongfang.com/massage-admin/ -//VUE_APP_API_BASE_URL=http://localhost:8000/massage-admin/ +//VUE_APP_API_BASE_URL=https://wwwh5.yurangongfang.com/massage-admin/ +//VUE_APP_API_BASE_URL=https://www.yurangongfang.com/massage-admin/ +VUE_APP_API_BASE_URL=http://localhost:8000/massage-admin/ VUE_APP_CAS_BASE_URL=http://cas.example.org:8443/cas VUE_APP_ONLINE_BASE_URL=http://fileview.jeecg.com/onlinePreview diff --git a/admin-hanhai-vue/.env.production b/admin-hanhai-vue/.env.production index b32f4db..1606687 100644 --- a/admin-hanhai-vue/.env.production +++ b/admin-hanhai-vue/.env.production @@ -1,5 +1,6 @@ NODE_ENV=production -VUE_APP_API_BASE_URL=https://www.yurangongfang.com/massage-admin/ -//VUE_APP_API_BASE_URL=http://localhost:8000/massage-admin/ +//VUE_APP_API_BASE_URL=https://wwwh5.yurangongfang.com/massage-admin/ +//VUE_APP_API_BASE_URL=https://www.yurangongfang.com/massage-admin/ +VUE_APP_API_BASE_URL=http://localhost:8000/massage-admin/ VUE_APP_CAS_BASE_URL=http://localhost:8888/cas VUE_APP_ONLINE_BASE_URL=http://fileview.jeecg.com/onlinePreview \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/controller/MassageOrderController.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/controller/MassageOrderController.java index ca20ae8..eeb5fb1 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/controller/MassageOrderController.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/controller/MassageOrderController.java @@ -39,7 +39,7 @@ import org.jeecg.common.aspect.annotation.AutoLog; /** * @Description: 订单信息表 * @Author: jeecg-boot - * @Date: 2025-05-20 + * @Date: 2025-07-30 * @Version: V1.0 */ @Api(tags="订单信息表") diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/entity/MassageOrder.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/entity/MassageOrder.java index 53f7c5a..98a12d1 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/entity/MassageOrder.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/entity/MassageOrder.java @@ -22,7 +22,7 @@ import lombok.experimental.Accessors; /** * @Description: 订单信息表 * @Author: jeecg-boot - * @Date: 2025-05-20 + * @Date: 2025-07-30 * @Version: V1.0 */ @Data @@ -66,6 +66,11 @@ public class MassageOrder implements Serializable { @Excel(name = "优惠金额", width = 15) @ApiModelProperty(value = "优惠金额") private java.math.BigDecimal discountAmount; + /**付款方式*/ + @Excel(name = "付款方式", width = 15, dicCode = "pay_type") + @Dict(dicCode = "pay_type") + @ApiModelProperty(value = "付款方式") + private java.lang.String payType; /**付款时间*/ @Excel(name = "付款时间", width = 15) @ApiModelProperty(value = "付款时间") @@ -103,7 +108,7 @@ public class MassageOrder implements Serializable { @ApiModelProperty(value = "是否已退款") private java.lang.String isRefound; - //项目信息 - @TableField(exist = false) - MassageItem massageItem; + //项目信息 + @TableField(exist = false) + MassageItem massageItem; } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/mapper/MassageOrderMapper.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/mapper/MassageOrderMapper.java index ba5b59d..4f2f7a9 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/mapper/MassageOrderMapper.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/mapper/MassageOrderMapper.java @@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * @Description: 订单信息表 * @Author: jeecg-boot - * @Date: 2025-05-20 + * @Date: 2025-07-30 * @Version: V1.0 */ public interface MassageOrderMapper extends BaseMapper { diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/service/IMassageOrderService.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/service/IMassageOrderService.java index fa1dcd5..8471bf9 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/service/IMassageOrderService.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/service/IMassageOrderService.java @@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; /** * @Description: 订单信息表 * @Author: jeecg-boot - * @Date: 2025-05-20 + * @Date: 2025-07-30 * @Version: V1.0 */ public interface IMassageOrderService extends IService { diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/service/impl/MassageOrderServiceImpl.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/service/impl/MassageOrderServiceImpl.java index 2e9a00e..ae1f238 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/service/impl/MassageOrderServiceImpl.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/service/impl/MassageOrderServiceImpl.java @@ -10,7 +10,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; /** * @Description: 订单信息表 * @Author: jeecg-boot - * @Date: 2025-05-20 + * @Date: 2025-07-30 * @Version: V1.0 */ @Service diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/vue/MassageOrderList.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/vue/MassageOrderList.vue index 71dfed4..7bb45fd 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/vue/MassageOrderList.vue +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/vue/MassageOrderList.vue @@ -142,6 +142,11 @@ align:"center", dataIndex: 'discountAmount' }, + { + title:'付款方式', + align:"center", + dataIndex: 'payType_dictText' + }, { title:'付款时间', align:"center", @@ -220,6 +225,7 @@ fieldList.push({type:'datetime',value:'validTime',text:'有效时间'}) fieldList.push({type:'BigDecimal',value:'amount',text:'实付款',dictCode:''}) fieldList.push({type:'BigDecimal',value:'discountAmount',text:'优惠金额',dictCode:''}) + fieldList.push({type:'string',value:'payType',text:'付款方式',dictCode:'pay_type'}) fieldList.push({type:'datetime',value:'payTime',text:'付款时间'}) fieldList.push({type:'datetime',value:'useTime',text:'核销时间'}) fieldList.push({type:'string',value:'shopId',text:'核销门店id',dictCode:"massage_shop,shop,id"}) @@ -227,7 +233,7 @@ fieldList.push({type:'string',value:'itemId',text:'关联项目id',dictCode:"massage_item,title,id"}) fieldList.push({type:'string',value:'userId',text:'关联用户id',dictCode:"han_hai_member,nick_name,id"}) fieldList.push({type:'string',value:'isDel',text:'是否删除',dictCode:'is_del'}) - fieldList.push({type:'string',value:'isRefound',text:'是否已退款',dictCode:''}) + fieldList.push({type:'string',value:'isRefound',text:'是否已退款',dictCode:'is_refound'}) this.superFieldList = fieldList } } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/vue/modules/MassageOrderForm.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/vue/modules/MassageOrderForm.vue index c55a35f..2a4f710 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/vue/modules/MassageOrderForm.vue +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/vue/modules/MassageOrderForm.vue @@ -23,6 +23,11 @@ + + + + + diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/vue3/MassageOrder.data.ts b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/vue3/MassageOrder.data.ts index 9daffa1..018b027 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/vue3/MassageOrder.data.ts +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/massageOrder/vue3/MassageOrder.data.ts @@ -24,6 +24,11 @@ export const columns: BasicColumn[] = [ align:"center", dataIndex: 'discountAmount' }, + { + title: '付款方式', + align:"center", + dataIndex: 'payType_dictText' + }, { title: '付款时间', align:"center", @@ -93,6 +98,14 @@ export const formSchema: FormSchema[] = [ field: 'discountAmount', component: 'InputNumber', }, + { + label: '付款方式', + field: 'payType', + component: 'JDictSelectTag', + componentProps:{ + dictCode:"pay_type" + }, + }, { label: '付款时间', field: 'payTime', diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/OrderServiceImpl.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/OrderServiceImpl.java index b0619aa..5d78a48 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/OrderServiceImpl.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/OrderServiceImpl.java @@ -157,6 +157,7 @@ public class OrderServiceImpl implements OrderService { //订单信息 String payNo = IdWorker.getIdStr();//生成订单号 massageOrder.setId(payNo); + massageOrder.setPayType(payType);//支付方式:0-微信支付 1-余额支付 massageOrder.setUserId(hanHaiMember.getId()); //查询服务信息 diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/WxMiniappPayServiceImpl.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/WxMiniappPayServiceImpl.java index c697b0f..444ee51 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/WxMiniappPayServiceImpl.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/WxMiniappPayServiceImpl.java @@ -143,7 +143,7 @@ public class WxMiniappPayServiceImpl implements WxMiniappPayService { //权限验证 //HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token);//小程序权限验证 HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(token); //公众号权限验证; - //HanHaiMember hanHaiMember = hanHaiMemberService.getById("1919297392365035521"); + //HanHaiMember hanHaiMember = hanHaiMemberService.getById("1935289020980486145"); // 初始化服务 RefundService service = new RefundService.Builder().config(config).build(); @@ -166,74 +166,113 @@ public class WxMiniappPayServiceImpl implements WxMiniappPayService { if(null != check){ return Response.error("该订单已经退款过:"+orderId); } - //添加退款记录 - MassageRefoundLog massageRefoundLog = new MassageRefoundLog(); - massageRefoundLog.setStatus("0");//退款状态 - massageRefoundLog.setOrderId(orderId);//退款订单号 - massageRefoundLog.setRefoundAmount(payOrder.getAmount());//退款金额 - massageRefoundLog.setUserId(hanHaiMember.getId());//退款用户 - massageRefoundLogService.save(massageRefoundLog); + + switch (payOrder.getPayType()){ + //微信支付退款 + case "0": + //添加退款记录 + MassageRefoundLog massageRefoundLog = new MassageRefoundLog(); + massageRefoundLog.setStatus("0");//退款状态 + massageRefoundLog.setOrderId(orderId);//退款订单号 + massageRefoundLog.setRefoundAmount(payOrder.getAmount());//退款金额 + massageRefoundLog.setUserId(hanHaiMember.getId());//退款用户 + massageRefoundLogService.save(massageRefoundLog); // if (payOrder.getAmount().compareTo(req.getRefundAmount()) < 0) { // return Response.error("退款金额不能大于支付金额"); // } - CreateRequest request = new CreateRequest(); - // 调用request.setXxx(val)设置所需参数,具体参数可见Request定义 - request.setOutTradeNo(orderId); - request.setOutRefundNo("REFUND_" + orderId); - AmountReq amount = new AmountReq(); - // 订单总金额,单位为分,只能为整数,详见支付金额 - amount.setTotal(decimalToLong(payOrder.getAmount())); - // 退款金额,单位为分,只能为整数,不能超过支付总额 - amount.setRefund(decimalToLong(payOrder.getAmount())); - amount.setCurrency("CNY"); - - request.setAmount(amount); - request.setNotifyUrl(refundNotifyUrl); - // 调用接口 - Refund refund = null; - try { - refund = service.create(request); - } catch (HttpException e) { - log.error("退款申请失败,发送HTTP请求失败:", e); - return Response.error("退款失败"); - } catch (MalformedMessageException e) { - log.error("退款申请失败,解析微信支付应答或回调报文异常,返回信息:", e); - return Response.error("退款失败"); - } catch (ValidationException e) { - log.error("退款申请失败,验证签名失败,返回信息:", e); - return Response.error("验证签名失败"); - } catch (ServiceException e) { - log.error("退款申请失败,发送HTTP请求成功,返回异常,返回码:{},返回信息:", e.getErrorCode(), e); - return Response.error("退款失败:" + e.getErrorMessage()); - } catch (Exception e) { - log.error("退款申请失败,异常:", e); - return Response.error("退款失败"); - } - if (Status.SUCCESS.equals(refund.getStatus())) { - log.info("退款成功!-订单号:{}", payOrder.getId()); - - //修改退款记录订单状态 - MassageRefoundLog refoundLog = massageRefoundLogService.lambdaQuery() - .eq(MassageRefoundLog::getOrderId, payOrder.getId()) - .one(); - - refoundLog.setRefoundTime(CommonUtils.getCurrentTime()); - refoundLog.setStatus("1"); - massageRefoundLogService.updateById(refoundLog); - - return Response.success("退款成功"); - } else if (Status.CLOSED.equals(refund.getStatus())) { - log.info("退款关闭!-订单号:{}", payOrder.getId()); - return Response.error("退款关闭"); - } else if (Status.PROCESSING.equals(refund.getStatus())) { - log.info("退款处理中!-订单号:{}", payOrder.getId()); - return Response.error("退款处理中"); - } else if (Status.ABNORMAL.equals(refund.getStatus())) { - log.info("退款异常!-订单号:{}", payOrder.getId()); - return Response.error("退款异常"); + CreateRequest request = new CreateRequest(); + // 调用request.setXxx(val)设置所需参数,具体参数可见Request定义 + request.setOutTradeNo(orderId); + request.setOutRefundNo("REFUND_" + orderId); + AmountReq amount = new AmountReq(); + // 订单总金额,单位为分,只能为整数,详见支付金额 + amount.setTotal(decimalToLong(payOrder.getAmount())); + // 退款金额,单位为分,只能为整数,不能超过支付总额 + amount.setRefund(decimalToLong(payOrder.getAmount())); + amount.setCurrency("CNY"); + + request.setAmount(amount); + request.setNotifyUrl(refundNotifyUrl); + // 调用接口 + Refund refund = null; + try { + refund = service.create(request); + } catch (HttpException e) { + log.error("退款申请失败,发送HTTP请求失败:", e); + return Response.error("退款失败"); + } catch (MalformedMessageException e) { + log.error("退款申请失败,解析微信支付应答或回调报文异常,返回信息:", e); + return Response.error("退款失败"); + } catch (ValidationException e) { + log.error("退款申请失败,验证签名失败,返回信息:", e); + return Response.error("验证签名失败"); + } catch (ServiceException e) { + log.error("退款申请失败,发送HTTP请求成功,返回异常,返回码:{},返回信息:", e.getErrorCode(), e); + return Response.error("退款失败:" + e.getErrorMessage()); + } catch (Exception e) { + log.error("退款申请失败,异常:", e); + return Response.error("退款失败"); + } + if (Status.SUCCESS.equals(refund.getStatus())) { + log.info("退款成功!-订单号:{}", payOrder.getId()); + + //修改退款记录订单状态 + MassageRefoundLog refoundLog = massageRefoundLogService.lambdaQuery() + .eq(MassageRefoundLog::getOrderId, payOrder.getId()) + .one(); + + refoundLog.setRefoundTime(CommonUtils.getCurrentTime()); + refoundLog.setStatus("1"); + massageRefoundLogService.updateById(refoundLog); + + return Response.success("退款成功"); + } else if (Status.CLOSED.equals(refund.getStatus())) { + log.info("退款关闭!-订单号:{}", payOrder.getId()); + return Response.error("退款关闭"); + } else if (Status.PROCESSING.equals(refund.getStatus())) { + log.info("退款处理中!-订单号:{}", payOrder.getId()); + return Response.error("退款处理中"); + } else if (Status.ABNORMAL.equals(refund.getStatus())) { + log.info("退款异常!-订单号:{}", payOrder.getId()); + return Response.error("退款异常"); + } + return Response.error("退款失败"); + case "1": + //余额支付退款 + + //修改用户余额 + BigDecimal refoundMoney = payOrder.getAmount();//退款金额 + BigDecimal newBalance = hanHaiMember.getPrice().add(refoundMoney); + hanHaiMember.setPrice(newBalance); + hanHaiMemberService.updateById(hanHaiMember); + + //修改订单退款状态 + MassageOrder order = massageOrderService + .lambdaQuery() + .eq(MassageOrder::getId, payOrder.getId()) + .eq(MassageOrder::getIsRefound, "0") + .one(); + if(null != order){ + order.setStatus("3"); + order.setIsRefound("1"); + massageOrderService.updateById(order); + } + + //添加退款记录 + MassageRefoundLog refoundLog = new MassageRefoundLog(); + refoundLog.setStatus("1");//退款状态 + refoundLog.setOrderId(orderId);//退款订单号 + refoundLog.setRefoundAmount(payOrder.getAmount());//退款金额 + refoundLog.setUserId(hanHaiMember.getId());//退款用户 + refoundLog.setRefoundTime(CommonUtils.getCurrentTime()); + massageRefoundLogService.save(refoundLog); + return Response.success("退款到余额成功"); + default: + //余额支付退款 + return Response.error("支付方式错误,退款失败"); } - return Response.error("退款失败"); + } /** diff --git a/jeecg-boot-module-system/src/main/resources/application-dev.yml b/jeecg-boot-module-system/src/main/resources/application-dev.yml index b18ebd0..f58f382 100644 --- a/jeecg-boot-module-system/src/main/resources/application-dev.yml +++ b/jeecg-boot-module-system/src/main/resources/application-dev.yml @@ -339,10 +339,10 @@ wx: # appid: wx77ba4c7131677a74 # 微信小程序appid # secret: fb915d623f92d455f2e70934f75fb96c # 微信小程序密钥 merchantId: 1712378227 # 商户号 - privateKeyPath: jeecg-boot-module-system/src/main/resources/apiclient_key.pem #本地私钥路径 - publicKeyPath: jeecg-boot-module-system/src/main/resources/pub_key.pem #本地公钥路径 -# privateKeyPath: /root/massage/cerFile/apiclient_key.pem #线上私钥路径 -# publicKeyPath: /root/massage/cerFile/pub_key.pem #线上公钥路径 +# privateKeyPath: jeecg-boot-module-system/src/main/resources/apiclient_key.pem #本地私钥路径 +# publicKeyPath: jeecg-boot-module-system/src/main/resources/pub_key.pem #本地公钥路径 + privateKeyPath: /root/massage/cerFile/apiclient_key.pem #线上私钥路径 + publicKeyPath: /root/massage/cerFile/pub_key.pem #线上公钥路径 publicKeyId: PUB_KEY_ID_0117123782272025033100396400002931 #公钥 merchantSerialNumber: 33E9FE8076531A7C7AD401DC34E053DBD7C28E22 # 商户API证书序列号 apiV3Key: 0fdb77429ffdf206c151af76a663041c # 商户APIV3密钥