Quellcode durchsuchen

小程序过去自动取消退还库存,小程序直接退款流程优化

lishiqiang vor 1 Tag
Ursprung
Commit
239d0e6a36

+ 1 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/otc/AppOtcTradeOrderController.java

@@ -103,7 +103,7 @@ public class AppOtcTradeOrderController {
     @OperateLog(type = TRADE)
     public CommonResult<TradeRefundCreateRespVO> miniAppRefund(@Valid @RequestBody TradeRefundCreateReqVO refundCreateReqVO) {
         refundCreateReqVO.setRefundChannel(RefundChannelEnum.MINI_APP.getType());
-        return adminTradeOrderService.refund(getLoginUser(), refundCreateReqVO);
+        return adminTradeOrderService.minirefund(getLoginUser(), refundCreateReqVO);
     }
 
     @PostMapping("/miniApp/orderList")

+ 1 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/AdminTradeOrderService.java

@@ -20,6 +20,7 @@ public interface AdminTradeOrderService {
      * 后台退款
      */
     CommonResult<TradeRefundCreateRespVO> refund(LoginUser loginUser, TradeRefundCreateReqVO refundCreateReqVO);
+    CommonResult<TradeRefundCreateRespVO> minirefund(LoginUser loginUser, TradeRefundCreateReqVO refundCreateReqVO);
 
     CommonResult<TradeRefundCalculateRespVO> calculateRefundAmount(LoginUser loginUser, TradeRefundCreateReqVO refundCreateReqVO);
 

+ 8 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/handler/ChangeOrderHandler.java

@@ -1,12 +1,14 @@
 package com.yc.ship.module.trade.service.order.handler;
 
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderBindDO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
 import com.yc.ship.module.trade.dal.dataobject.refund.RefundDO;
 import com.yc.ship.module.trade.enums.RefundStatusEnum;
 import com.yc.ship.module.trade.enums.TradeOrderBindEnum;
 import com.yc.ship.module.trade.service.order.TradeOrderRepositoryService;
+import com.yc.ship.module.trade.service.pay.TradeOrderPayService;
 import com.yc.ship.module.trade.service.refund.TradeRefundRepositoryService;
 import com.yc.ship.module.trade.service.refund.TradeRefundService;
 import lombok.extern.slf4j.Slf4j;
@@ -15,6 +17,8 @@ import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 
+import java.time.LocalDateTime;
+
 import static com.yc.ship.module.trade.enums.ApiConstants.ORDER_CHANGE_TYPE_NEW;
 import static com.yc.ship.module.trade.enums.ApiConstants.ORDER_CHANGE_TYPE_OLD;
 
@@ -36,12 +40,15 @@ public class ChangeOrderHandler implements TradeOrderHandler{
     private TradeRefundService tradeRefundService;
     @Resource
     private TradeRefundRepositoryService tradeRefundRepositoryService;
+    @Resource
+    private TradeOrderPayService tradeOrderPayService;
 
     @Override
     public void afterCancelOrder(TradeOrderDO tradeOrderDO) {
        //取消订单
         try {
-            cancelChange(tradeOrderDO);
+            Long orderId = tradeOrderDO.getId();
+            tradeOrderPayService.cancelOrder(orderId);
         }catch (Exception e){
             log.error("取消改签订单处理异常",e);
         }

+ 44 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/AdminTradeOrderServiceImpl.java

@@ -205,6 +205,50 @@ public class AdminTradeOrderServiceImpl implements AdminTradeOrderService {
         return CommonResult.success(respVO);
     }
 
+    @Override
+    public CommonResult<TradeRefundCreateRespVO> minirefund(LoginUser loginUser, TradeRefundCreateReqVO refundCreateReqVO) {
+        AgencyUserLoginInfoRespDTO agencyUserLoginInfo = loginUser.getContext(AGENCY_LOGIN_INFO, AgencyUserLoginInfoRespDTO.class);
+        //根据退款类型分别处理
+        TradeRefundCreateReqDTO tradeRefundCreateReqDTO = TradeRefundConvert.INSTANCE.convert(refundCreateReqVO);
+        tradeRefundCreateReqDTO.setRefundUser(loginUser.getId());
+        if (agencyUserLoginInfo != null) {
+            tradeRefundCreateReqDTO.setMachineId(agencyUserLoginInfo.getMachineId());
+            tradeRefundCreateReqDTO.setMachineName(agencyUserLoginInfo.getMachineName());
+            tradeRefundCreateReqDTO.setStoreId(agencyUserLoginInfo.getStoreId());
+            tradeRefundCreateReqDTO.setStoreName(agencyUserLoginInfo.getStoreName());
+        }
+        TradeRefundCreateRespVO respVO = new TradeRefundCreateRespVO();
+        List<String> successList = new ArrayList<>();
+        List<String> auditList = new ArrayList<>();
+        List<String> supplierFailList = new ArrayList<>();
+        List<String> failList = new ArrayList<>();
+        List<String> messageList = new ArrayList<>();
+        Asserts.isTrue(CollUtil.isNotEmpty(refundCreateReqVO.getOrderInfoList()), "退款订单列表不能为空");
+        boolean isMultiOrder = refundCreateReqVO.getOrderInfoList().size() > 1;
+        refundCreateReqVO.getOrderInfoList().forEach(orderInfo -> {
+            tradeRefundCreateReqDTO.setOrderId(orderInfo.getOrderId());
+            if (isMultiOrder) {
+                tradeRefundCreateReqDTO.setRefundAmount(orderInfo.getRefundAmount());
+                tradeRefundCreateReqDTO.setOriginRefundAmount(orderInfo.getOriginRefundAmount());
+                tradeRefundCreateReqDTO.setFee(orderInfo.getFee());
+            }
+            CommonResult<TradeRefundRespDTO> resp = tradeRefundService.minirefund(tradeRefundCreateReqDTO);
+            if (resp.isSuccess()) {
+                successList.add(orderInfo.getOrderNo());
+            } else if (ObjectUtil.equal(resp.getCode(), REFUND_AUDITING.getCode())) {
+                auditList.add(orderInfo.getOrderNo());
+            } else if (ObjectUtil.equal(resp.getCode(), SUPPLIER_SERVICE_REFUND_CONFIRM.getCode())) {
+                supplierFailList.add(orderInfo.getOrderNo());
+            } else {
+                messageList.add(resp.getMsg());
+                failList.add(orderInfo.getOrderNo());
+            }
+        });
+        respVO.setSuccessList(successList).setAuditList(auditList).setSupplierFailList(supplierFailList).setFailList(failList)
+                .setMessageList(messageList);
+        return CommonResult.success(respVO);
+    }
+
     @Override
     public CommonResult<TradeRefundCalculateRespVO> calculateRefundAmount(LoginUser loginUser, TradeRefundCreateReqVO refundCreateReqVO) {
         //根据退款类型分别处理

+ 3 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderServiceImpl.java

@@ -1168,7 +1168,9 @@ public class TradeOrderServiceImpl implements TradeOrderService {
     private void afterOrderCreate(TradeOrderBO tradeOrderBO) {
         //执行下单后处理器
         tradeOrderHandlers.forEach(handler -> handler.afterOrderCreate(tradeOrderBO));
-//        tradePublishUtils.publishOrderCreateSuccessMsg(tradeOrderBO.getTradeOrderDO().getId().toString());
+        if(tradeOrderBO.getTradeOrderDO().getSellMethod()==3) {
+            tradePublishUtils.publishOrderCreateSuccessMsg(tradeOrderBO.getTradeOrderDO().getId().toString());
+        }
         //支付倒计时--不超时,有预订单
     }
 

+ 1 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/refund/TradeRefundService.java

@@ -37,6 +37,7 @@ public interface TradeRefundService {
      * @return
      */
     CommonResult<TradeRefundRespDTO> refund(TradeRefundCreateReqDTO refundCreateReqDTO);
+    CommonResult<TradeRefundRespDTO> minirefund(TradeRefundCreateReqDTO refundCreateReqDTO);
 
     /**
      * 退款审计

+ 53 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/refund/impl/TradeRefundServiceImpl.java

@@ -171,6 +171,42 @@ public class TradeRefundServiceImpl implements TradeRefundService {
         }
     }
 
+    @Override
+    public CommonResult<TradeRefundRespDTO> minirefund(TradeRefundCreateReqDTO refundCreateReqDTO) {
+        String lockKey = String.format(UPDATE_ORDER_LOCK, refundCreateReqDTO.getOrderId());
+        RLock lock = redissonClient.getLock(lockKey);
+        try {
+            lock.lock();
+            //1.构建退款单
+            TradeRefundBO tradeRefundBO = buildRefundOrder(refundCreateReqDTO);
+            //已退款,重复发起
+            if (tradeRefundBO.isHasRefund()) {
+                TradeRefundRespDTO respDTO = new TradeRefundRespDTO().setRefundId(tradeRefundBO.getRefundDO().getId())
+                        .setOrderId(tradeRefundBO.getRefundDO().getOrderId());
+                return CommonResult.success(respDTO);
+            }
+            //2.更新订单信息为退款中 失败->回滚
+            updateOrderRefunding(refundCreateReqDTO, tradeRefundBO);
+            //3.保存退款申请
+            tradeRefundRepositoryService.saveRefund(tradeRefundBO);
+            CommonResult<TradeRefundRespDTO> result;
+            //3.2正常退款流程
+            result = mininormalRefund(tradeRefundBO);
+
+            return result;
+        } catch (ServiceException e) {
+            ExceptionUtils.log(log, "退款失败", e);
+            return CommonResult.error(e);
+        } catch (Exception e) {
+            log.error("退款失败:", e);
+            return CommonResult.error(REFUND_UNKNOWN_FAIL);
+        } finally {
+            if (lock.isLocked() && lock.isHeldByCurrentThread()) {
+                lock.unlock();
+            }
+        }
+    }
+
     @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ORDER_REFUND)
     public void updateOrderRefunding(TradeRefundCreateReqDTO refundCreateReqDTO, TradeRefundBO tradeRefundBO) {
         TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(tradeRefundBO.getRefundDO().getOrderId());
@@ -183,6 +219,23 @@ public class TradeRefundServiceImpl implements TradeRefundService {
                 .put("refundChannel", RefundChannelEnum.valueOf(tradeRefundBO.getRefundDO().getRefundChannel()).getName()).build());
     }
 
+    private CommonResult<TradeRefundRespDTO> mininormalRefund(TradeRefundBO tradeRefundBO) {
+        TradeRefundRespDTO respDTO = new TradeRefundRespDTO().setRefundId(tradeRefundBO.getRefundDO().getId())
+                .setOrderId(tradeRefundBO.getRefundDO().getOrderId());
+        //4.供应商退款
+        CommonResult<?> supplerRefundResp = tradeSupplierService.refund(tradeRefundBO);
+        if(supplerRefundResp.isError()){
+            //4.1 供应商退款失败回调
+            tradeSupplierCallbackService.afterAnyRefundFail(supplerRefundResp,tradeRefundBO);
+            CommonResult<TradeRefundRespDTO> result = CommonResult.error(supplerRefundResp.getCode(),supplerRefundResp.getMsg());
+            result.setData(respDTO);
+            return result;
+        }
+        //4.2 供应商退款成功回调, 发起对应渠道退款
+        tradeSupplierCallbackService.afterAllRefund(tradeRefundBO);
+        return CommonResult.success(respDTO);
+    }
+
     private CommonResult<TradeRefundRespDTO> normalRefund(TradeRefundBO tradeRefundBO) {
         TradeRefundRespDTO respDTO = new TradeRefundRespDTO().setRefundId(tradeRefundBO.getRefundDO().getId())
                 .setOrderId(tradeRefundBO.getRefundDO().getOrderId());

+ 95 - 49
ship-server-web/src/main/resources/application-dev.yaml

@@ -2,11 +2,18 @@ server:
   port: 48080
 
 --- #################### 数据库相关配置 ####################
-
 spring:
   autoconfigure:
+    # noinspection SpringBootApplicationYaml
     exclude:
       - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+      #      - org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration # 默认 local 环境,不开启 Quartz 的自动配置
+      - de.codecentric.boot.admin.server.config.AdminServerAutoConfiguration # 禁用 Spring Boot Admin 的 Server 的自动配置
+      - de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration # 禁用 Spring Boot Admin 的 Server UI 的自动配置
+      - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置
+      - org.springframework.ai.autoconfigure.vectorstore.qdrant.QdrantVectorStoreAutoConfiguration # 禁用 AI 模块的 Qdrant,手动创建
+      - org.springframework.ai.autoconfigure.vectorstore.milvus.MilvusVectorStoreAutoConfiguration # 禁用 AI 模块的 Milvus,手动创建
+  # 数据源配置项
   datasource:
     druid: # Druid 【监控】相关的全局配置
       web-stat-filter:
@@ -29,41 +36,41 @@ spring:
     dynamic: # 多数据源配置
       druid: # Druid 【连接池】相关的全局配置
         initial-size: 5 # 初始连接数
-        min-idle: 10 # 最小连接池数量
-        max-active: 20 # 最大连接池数量
+        min-idle: 5 # 最小连接池数量
+        max-active: 200 # 最大连接池数量
         max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
         time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
         min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
         max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
-        validation-query: SELECT 1 # 配置检测连接是否有效
+        validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
         test-while-idle: true
         test-on-borrow: false
         test-on-return: false
       primary: master
       datasource:
         master:
-          url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
+          url: jdbc:mysql://10.3.10.50:53336/db_yc_ship?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
           username: root
-          password: 123456
-        slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
+          password: yc@ship#2025
+        slave: # 模拟从库,可根据自己需要修改
           lazy: true # 开启懒加载,保证启动速度
-          url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
+          url: jdbc:mysql://10.3.10.50:53336/db_yc_ship?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true
           username: root
-          password: 123456
+          password: yc@ship#2025
 
   # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
   redis:
-    host: 400-infra.server.iocoder.cn # 地址
+    host: 10.3.10.50 # 地址
     port: 6379 # 端口
-    database: 1 # 数据库索引
-#    password: 123456 # 密码,建议生产环境开启
+    database: 11 # 数据库索引
+    password: redis123 # 密码,建议生产环境开启
 
 --- #################### 定时任务相关配置 ####################
 
 # Quartz 配置项,对应 QuartzProperties 配置类
 spring:
   quartz:
-    auto-startup: true # 测试环境,需要开启 Job
+    auto-startup: true # 本地开发环境,尽量不要开启 Job
     scheduler-name: schedulerName # Scheduler 名字。默认为 schedulerName
     job-store-type: jdbc # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。
     wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true
@@ -95,13 +102,20 @@ spring:
 rocketmq:
   name-server: 127.0.0.1:9876 # RocketMQ Namesrv
 
+xxl:
+  job:
+    enabled: true # 是否开启调度中心,默认为 true 开启
+    admin:
+      addresses: http://10.3.10.50:80/xxl-job-admin # 调度中心部署跟地址
+
+
 spring:
   # RabbitMQ 配置项,对应 RabbitProperties 配置类
   rabbitmq:
-    host: 127.0.0.1 # RabbitMQ 服务的地址
-    port: 5672 # RabbitMQ 服务的端口
-    username: guest # RabbitMQ 服务的账号
-    password: guest # RabbitMQ 服务的密码
+    host: 10.3.10.50 # RabbitMQ 服务的地址
+    port: 55672 # RabbitMQ 服务的端口
+    username: rabbitmq # RabbitMQ 服务的账号
+    password: rabbitmq # RabbitMQ 服务的密码
   # Kafka 配置项,对应 KafkaProperties 配置类
   kafka:
     bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔
@@ -139,21 +153,59 @@ spring:
 logging:
   file:
     name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径
+  level:
+    # 配置自己写的 MyBatis Mapper 打印日志
+    com.yc.ship.module.bpm.dal.mysql: debug
+    com.yc.ship.module.infra.dal.mysql: debug
+    com.yc.ship.module.infra.dal.mysql.logger.ApiErrorLogMapper: INFO # 配置 ApiErrorLogMapper 的日志级别为 info,避免和 GlobalExceptionHandler 重复打印
+    com.yc.ship.module.infra.dal.mysql.job.JobLogMapper: INFO # 配置 JobLogMapper 的日志级别为 info
+    com.yc.ship.module.infra.dal.mysql.file.FileConfigMapper: INFO # 配置 FileConfigMapper 的日志级别为 info
+    com.yc.ship.module.pay.dal.mysql: debug
+    com.yc.ship.module.pay.dal.mysql.notify.PayNotifyTaskMapper: INFO # 配置 PayNotifyTaskMapper 的日志级别为 info
+    com.yc.ship.module.system.dal.mysql: debug
+    com.yc.ship.module.system.dal.mysql.sms.SmsChannelMapper: INFO # 配置 SmsChannelMapper 的日志级别为 info
+    com.yc.ship.module.tool.dal.mysql: debug
+    com.yc.ship.module.member.dal.mysql: debug
+    com.yc.ship.module.trade.dal.mysql: debug
+    com.yc.ship.module.promotion.dal.mysql: debug
+    com.yc.ship.module.statistics.dal.mysql: debug
+    com.yc.ship.module.crm.dal.mysql: debug
+    com.yc.ship.module.erp.dal.mysql: debug
+    com.yc.ship.module.iot.dal.mysql: debug
+    com.yc.ship.module.iot.dal.tdengine: DEBUG
+    com.yc.ship.module.ai.dal.mysql: debug
+    com.yc.ship.module.buss.dal.mysql: debug
+    com.yc.ship.module.ota.dal.mysql: debug
+    com.yc.ship.module.product.dal.mysql: debug
+    com.yc.ship.module.otc.dal.mysql: debug
+    com.yc.ship.module.resource.dal.mysql: debug
+    org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
+
+debug: false
 
---- #################### 微信公众号相关配置 ####################
-wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
-  mp:
-    # 公众号配置(必填)
-    app-id: wx041349c6f39b268b
-    secret: 5abee519483bc9f8cb37ce280e814bd0
+--- #################### 微信公众号、小程序相关配置 ####################
+wx:
+  mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
+    #    app-id: wx041349c6f39b268b # 测试号(牛希尧提供的)
+    #    secret: 5abee519483bc9f8cb37ce280e814bd0
+    app-id: wx5b23ba7a5589ecbb # 测试号(自己的)
+    secret: 2a7b3b20c537e52e74afd395eb85f61f
+    #    app-id: wxa69ab825b163be19 # 测试号(Kongdy 提供的)
+    #    secret: bd4f9fab889591b62aeac0d7b8d8b4a0
     # 存储配置,解决 AccessToken 的跨节点的共享
     config-storage:
       type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
       key-prefix: wx # Redis Key 的前缀
       http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
   miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档
-    appid: wx63c280fe3248a3e7
-    secret: 6f270509224a7ae1296bbf1c8cb97aed
+    #    appid: wx62056c0d5e8db250 # 测试号(牛希尧提供的)
+    #    secret: 333ae72f41552af1e998fe1f54e1584a
+    #    appid: wx63c280fe3248a3e7 # wenhualian的接口测试号
+    #    secret: 6f270509224a7ae1296bbf1c8cb97aed
+    appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的)
+    secret: 4a1a04e07f6a4a0751b39c3064a92c8b
+    #    appid: wx66186af0759f47c9 # 测试号(puhui 提供的)
+    #    secret: 3218bcbd112cbc614c7264ceb20144ac
     config-storage:
       type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
       key-prefix: wa # Redis Key 的前缀
@@ -163,15 +215,28 @@ wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-sta
 
 # 芋道配置项,设置当前项目所有自定义的配置
 yudao:
+  captcha:
+    enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试;
+  security:
+    mock-enable: true
   pay:
     order-notify-url: http://yunai.natapp1.cc/ship-ota-api/pay/notify/order # 支付渠道的【支付】回调地址
     refund-notify-url: http://yunai.natapp1.cc/ship-ota-api/pay/notify/refund # 支付渠道的【退款】回调地址
-    transfer-notify-url: https://yunai.natapp1.cc/ship-ota-api/pay/notify/transfer # 支付渠道的【转账】回调地址
-  demo: false # 开启演示模式
+    transfer-notify-url: http://yunai.natapp1.cc/ship-ota-api/pay/notify/transfer # 支付渠道的【转账】回调地址
+  access-log: # 访问日志的配置项
+    enable: false
+  demo: false # 关闭演示模式
+  wxa-code:
+    env-version: develop # 小程序版本: 正式版为 "release";体验版为 "trial";开发版为 "develop"
+  wxa-subscribe-message:
+    miniprogram-state: developer # 跳转小程序类型:开发版为 “developer”;体验版为 “trial”为;正式版为 “formal”
   tencent-lbs-key: TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E # QQ 地图的密钥 https://lbs.qq.com/service/staticV2/staticGuide/staticDoc
   host: # 系统内外网访问host,用于处理服务器上不能访问当前域名的问题
     out: https://tms2.hbsxly.com/
     in: http://10.3.10.50:80/
+  suffixCode: QS # 票号后缀
+  notify: # 第三方通知接口
+    insurance: ${yudao.host.out}/${yudao.web.admin-url}/notify/insurance # 保单通知接口
 justauth:
   enabled: true
   type:
@@ -199,26 +264,7 @@ justauth:
     prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
     timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟
 
-
---- #################### iot相关配置 TODO 芋艿:再瞅瞅 ####################
-iot:
-  emq:
-    # 账号
-    username: anhaohao
-    # 密码
-    password: ahh@123456
-    # 主机地址
-    hostUrl: tcp://chaojiniu.top:1883
-    # 客户端Id,不能相同,采用随机数 ${random.value}
-    client-id: ${random.int}
-    # 默认主题
-    default-topic: test
-    # 保持连接
-    keepalive: 60
-    # 清除会话(设置为false,断开连接,重连后使用原来的会话 保留订阅的主题,能接收离线期间的消息)
-    clearSession: true
-
-
-# 插件配置
+--- #################### iot相关配置 TODO 芋艿【IOT】:再瞅瞅 ####################
 pf4j:
-  pluginsDir: ${user.home}/plugins # 插件目录
+  #  pluginsDir: /tmp/
+  pluginsDir: ../plugins