ruoyi-service/ruoyi-jianguan/pom.xml
@@ -37,11 +37,6 @@ <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-seata</artifactId> </dependency> <!-- SpringBoot Actuator --> <dependency> <groupId>org.springframework.boot</groupId> @@ -140,12 +135,6 @@ <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>com.huaweicloud.sdk</groupId> <artifactId>huaweicloud-sdk-bundle</artifactId> <version>3.1.87</version> </dependency> <dependency> ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/RuoYiJianGuanApplication.java
@@ -1,17 +1,15 @@ package com.ruoyi.jianguan; import com.huaweicloud.sdk.thirdparty.okio.Sink; import com.ruoyi.common.security.annotation.EnableCustomConfig; import com.ruoyi.common.security.annotation.EnableRyFeignClients; import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.messaging.Sink; import org.springframework.cloud.stream.messaging.Source; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.xml.transform.Source; /** * 账户模块 @@ -22,6 +20,7 @@ @EnableRyFeignClients @SpringBootApplication @EnableScheduling//开启定时任务 @EnableBinding({ Source.class, Sink.class }) public class RuoYiJianGuanApplication { public static void main(String[] args) { SpringApplication.run(RuoYiJianGuanApplication.class, args); ruoyi-service/ruoyi-jianguan/src/main/resources/bootstrap.yml
@@ -1,5 +1,5 @@ server: port: 9701 port: 9900 tomcat: basedir: /data/tomcat # Spring @@ -12,8 +12,8 @@ allow-circular-references: true profiles: # 环境配置 active: dev # active: prod # active: dev active: prod --- spring: @@ -43,70 +43,7 @@ # 共享配置 shared-configs: - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} --- seata: enabled: true application-id: ${spring.application.name} tx-service-group: seata_tx_group #此处配置自定义的seata事务分组名称 enable-auto-data-source-proxy: false #关闭数据库代理 service: vgroup-mapping: seata_tx_group: default data-source-proxy-mode: AT config: type: nacos nacos: # 开发环境 server-addr: 192.168.110.169:8848 namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP data-id: seata-server.properties username: nacos password: nacos # 生产环境 # server-addr: 192.168.0.137:8848,192.168.0.123:8848 # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a # group: DEFAULT_GROUP # data-id: seata-server.properties # username: nacos # password: nacos registry: type: nacos nacos: application: seata-server # 开发环境 server-addr: 192.168.110.169:8848 namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP username: nacos password: nacos # 生产环境 # server-addr: 192.168.0.137:8848,192.168.0.123:8848 # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a # group: DEFAULT_GROUP # username: nacos # password: nacos cloud: nacos: discovery: # 开发环境 server-addr: 192.168.110.169:8848 # nacos注册中心地址 namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 group: DEFAULT_GROUP application: seata-server #Nacos 中 Seata 名称 username: nacos password: nacos # 生产环境 # server-addr: 192.168.0.137:8848,192.168.0.123:8848 # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a # group: DEFAULT_GROUP # application: seata-server #Nacos 中 Seata 名称 # username: nacos # password: nacos sentinel: transport: dashboard: 127.0.0.1:8080 # Sentinel控制台地址 eager: true --- spring: config: ruoyi-service/ruoyi-jianguan/src/main/resources/logback.xml
@@ -7,7 +7,7 @@ <contextName>logback</contextName> <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 --> <property name="log.path" value="/data/log/app/ruoyi-integration"/> <property name="log.path" value="/data/log/app/ruoyi-jianguan"/> <!--0. 日志格式和颜色渲染 --> <!-- 彩色日志依赖的渲染类 --> ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -862,6 +862,19 @@ /** * * @param code */ @ResponseBody @PostMapping(value = "/refund1") public R refund1(@RequestParam(value = "code") String code, @RequestParam(value = "money") BigDecimal money){ chargingOrderService.refund1(code, money); return R.ok(); } /** * 远程启动失败后退款回调 */ @ResponseBody ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
@@ -108,6 +108,10 @@ * @param code */ void refund(String code); void refund1(String code, BigDecimal money); /** * 获取充电中的详情 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -972,6 +972,73 @@ } } public void refund1(String code, BigDecimal money){ log.info(code + ":-------------------充电成功,执行手动退款-------------------"); TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code)); if(chargingOrder.getOrderSource() == 1){ BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); Integer rechargePaymentType = chargingOrder.getRechargePaymentType(); //构建退款明细 TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); chargingOrderRefund.setChargingOrderId(chargingOrder.getId()); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + Double.valueOf(Math.random() * 1000).intValue()); chargingOrderRefund.setRefundAmount(money); chargingOrderRefund.setRefundStatus(1); chargingOrderRefund.setPayType(rechargePaymentType); chargingOrderRefund.setRefundStatus(1); chargingOrderRefund.setCode(code); chargingOrderRefund.setRefundTitle("充电完成退款"); chargingOrderRefund.setRefundContent("充电完成退款"); chargingOrderRefund.setRefundReason("充电完成退款"); chargingOrderRefund.setRefundRemark("充电完成退款,手动退款"); chargingOrderRefund.setRefundTotalAmount(money); chargingOrderRefund.setPayAmount(money); if(1 == rechargePaymentType){ WxPaymentRefundModel model = new WxPaymentRefundModel(); model.setOut_trade_no(chargingOrder.getCode()); model.setOut_refund_no(chargingOrderRefund.getRefundCode()); model.setReason("充电完成退款"); model.setNotify_url("/payment/wx/refund/notify"); WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); amount.setRefund(money.multiply(new BigDecimal(100)).intValue()); amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue()); amount.setCurrency("CNY"); model.setAmount(amount); R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); if(200 == orderR.getCode()){ chargingOrderRefundService.save(chargingOrderRefund); //手续费 Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount"); Object refund_fee1 = amount1.get("refund_fee"); BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100)); chargingOrderRefund.setRefundFee(refund_fee); chargingOrderRefundService.updateById(chargingOrderRefund); } } if(2 == rechargePaymentType){ RefundReq dto = new RefundReq(); dto.setOutTradeNo(chargingOrder.getCode()); dto.setOutRequestNo(chargingOrderRefund.getCode()); dto.setRefundAmount(money.toString()); dto.setRefundReason("充电完成退款"); RefundResp resp = aliPaymentClient.refund(dto).getData(); if(null != resp){ chargingOrderRefundService.save(chargingOrderRefund); try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null); } } } } /**