Kaynağa Gözat

Merge branch 'dev' of http://git.hobbystocks.cn/AHX-Bid/poyee-app into feature/20260206-logistics

jintao.geng 1 hafta önce
ebeveyn
işleme
e0262e13a0
100 değiştirilmiş dosya ile 4154 ekleme ve 2136 silme
  1. 7 6
      pom.xml
  2. 27 0
      poyee-order/pom.xml
  3. 67 0
      poyee-order/src/main/java/com/tzy/controller/LotOrderController.java
  4. 73 0
      poyee-order/src/main/java/com/tzy/entity/LotOrder.java
  5. 34 0
      poyee-order/src/main/java/com/tzy/entity/Spu.java
  6. 14 0
      poyee-order/src/main/java/com/tzy/mapper/LotOrderMapper.java
  7. 8 0
      poyee-order/src/main/java/com/tzy/mapper/SpuMapper.java
  8. 63 0
      poyee-order/src/main/java/com/tzy/mapper/handler/JsonNodeTypeHandler.java
  9. 13 0
      poyee-order/src/main/java/com/tzy/service/LotOrderService.java
  10. 7 0
      poyee-order/src/main/java/com/tzy/service/SpuService.java
  11. 71 0
      poyee-order/src/main/java/com/tzy/service/impl/LotOrderServiceImpl.java
  12. 21 0
      poyee-order/src/main/java/com/tzy/service/impl/SpuServiceImpl.java
  13. 64 0
      poyee-order/src/main/resources/mapper/LotOrderMapper.xml
  14. 24 0
      poyee-order/src/main/resources/mapper/SpuMapper.xml
  15. 10 10
      poyi-app-common/pom.xml
  16. 5 0
      poyi-app/pom.xml
  17. 4 5
      poyi-app/src/main/java/com/tzy/config/ConnectionPoolWarmer.java
  18. 6 1
      poyi-app/src/main/java/com/tzy/controller/group/GroupLocalController.java
  19. 0 66
      poyi-app/src/main/java/com/tzy/listener/mq/AppUserBrowseRecordConsumer.java
  20. 0 39
      poyi-app/src/main/java/com/tzy/listener/mq/CommunityNotifyConsumer.java
  21. 0 46
      poyi-app/src/main/java/com/tzy/listener/mq/GiftCardConsumer.java
  22. 0 37
      poyi-app/src/main/java/com/tzy/listener/mq/GoodsSyncConsumer.java
  23. 0 53
      poyi-app/src/main/java/com/tzy/listener/mq/GoodsSyncEsConsumer.java
  24. 0 594
      poyi-app/src/main/java/com/tzy/listener/mq/GroupFullConsumer.java
  25. 0 61
      poyi-app/src/main/java/com/tzy/listener/mq/GroupOrderActConsumer.java
  26. 0 49
      poyi-app/src/main/java/com/tzy/listener/mq/GroupSortConsumer.java
  27. 0 34
      poyi-app/src/main/java/com/tzy/listener/mq/InitBrandMemberConsumer.java
  28. 0 76
      poyi-app/src/main/java/com/tzy/listener/mq/InitUserGiftCardConsumer.java
  29. 0 32
      poyi-app/src/main/java/com/tzy/listener/mq/InitUserMemberConsumer.java
  30. 0 37
      poyi-app/src/main/java/com/tzy/listener/mq/LuckyBagConsumer.java
  31. 0 104
      poyi-app/src/main/java/com/tzy/listener/mq/MerchantNotifyConsumer.java
  32. 0 64
      poyi-app/src/main/java/com/tzy/listener/mq/OrderAftAllocateConsumer.java
  33. 0 113
      poyi-app/src/main/java/com/tzy/listener/mq/OrderExpiredConsumer.java
  34. 0 96
      poyi-app/src/main/java/com/tzy/listener/mq/OrderOverConsumer.java
  35. 0 94
      poyi-app/src/main/java/com/tzy/listener/mq/OrderPayConsumer.java
  36. 0 99
      poyi-app/src/main/java/com/tzy/listener/mq/OrderSuccessConsumer.java
  37. 0 45
      poyi-app/src/main/java/com/tzy/listener/mq/PayPreCallBackConsumer.java
  38. 0 34
      poyi-app/src/main/java/com/tzy/listener/mq/SuperLuckyBagConsumer.java
  39. 0 50
      poyi-app/src/main/java/com/tzy/listener/mq/TestMqConsumer.java
  40. 0 83
      poyi-app/src/main/java/com/tzy/listener/mq/UserInviteCodeConsumer.java
  41. 0 49
      poyi-app/src/main/java/com/tzy/listener/mq/UserListActConsumer.java
  42. 0 49
      poyi-app/src/main/java/com/tzy/listener/mq/UserPointConsumer.java
  43. 0 51
      poyi-app/src/main/java/com/tzy/listener/mq/UserPointJsonConsumer.java
  44. 0 54
      poyi-app/src/main/java/com/tzy/listener/mq/UserWinCardConsumer.java
  45. 59 0
      poyi-app/src/main/resources/application-druid.yml
  46. 209 0
      poyi-app/src/main/resources/application-prod.yml
  47. 209 1
      poyi-app/src/main/resources/application.yml
  48. 3 3
      poyi-pojo/pom.xml
  49. 2 0
      tzy-common/pom.xml
  50. 58 1
      tzy-framework/pom.xml
  51. 30 0
      tzy-framework/src/main/java/com/tzy/framework/pay/Entity/MktInfoEntity.java
  52. 25 0
      tzy-framework/src/main/java/com/tzy/framework/pay/Entity/MktRefundInfoEntity.java
  53. 133 0
      tzy-framework/src/main/java/com/tzy/framework/pay/Entity/PostMasterEntity.java
  54. 29 0
      tzy-framework/src/main/java/com/tzy/framework/pay/Entity/ResultMasterEntity.java
  55. 31 0
      tzy-framework/src/main/java/com/tzy/framework/pay/Entity/RiskInfoEntity.java
  56. 29 0
      tzy-framework/src/main/java/com/tzy/framework/pay/Entity/SharingDetailsEntity.java
  57. 39 0
      tzy-framework/src/main/java/com/tzy/framework/pay/Entity/SharingInfoEntity.java
  58. 25 0
      tzy-framework/src/main/java/com/tzy/framework/pay/Entity/SharingRefundInfoEntity.java
  59. 246 0
      tzy-framework/src/main/java/com/tzy/framework/pay/Entity/TerminalInfoEntity.java
  60. 55 0
      tzy-framework/src/main/java/com/tzy/framework/pay/config/AliPayConfig.java
  61. 55 0
      tzy-framework/src/main/java/com/tzy/framework/pay/config/AliPaySpareConfig.java
  62. 51 0
      tzy-framework/src/main/java/com/tzy/framework/pay/config/BaoFooPayConfig.java
  63. 42 0
      tzy-framework/src/main/java/com/tzy/framework/pay/config/BaofooRechargePayConfig.java
  64. 89 0
      tzy-framework/src/main/java/com/tzy/framework/pay/config/BfPayConfig.java
  65. 39 0
      tzy-framework/src/main/java/com/tzy/framework/pay/config/HfPayConfig.java
  66. 54 0
      tzy-framework/src/main/java/com/tzy/framework/pay/config/HmPayConfig.java
  67. 170 0
      tzy-framework/src/main/java/com/tzy/framework/pay/config/PayConfig.java
  68. 77 0
      tzy-framework/src/main/java/com/tzy/framework/pay/config/QmH5PayConfig.java
  69. 76 0
      tzy-framework/src/main/java/com/tzy/framework/pay/config/QmPay1Config.java
  70. 76 0
      tzy-framework/src/main/java/com/tzy/framework/pay/config/QmPay2Config.java
  71. 94 0
      tzy-framework/src/main/java/com/tzy/framework/pay/config/QmPayConfig.java
  72. 35 0
      tzy-framework/src/main/java/com/tzy/framework/pay/config/QmPayZgConfig.java
  73. 82 0
      tzy-framework/src/main/java/com/tzy/framework/pay/config/WxPayAppConfig.java
  74. 24 0
      tzy-framework/src/main/java/com/tzy/framework/pay/dto/AlipayData.java
  75. 110 0
      tzy-framework/src/main/java/com/tzy/framework/pay/dto/BankInfo.java
  76. 40 0
      tzy-framework/src/main/java/com/tzy/framework/pay/dto/CheckPaymentInfoDto.java
  77. 120 0
      tzy-framework/src/main/java/com/tzy/framework/pay/dto/PayConstants.java
  78. 93 0
      tzy-framework/src/main/java/com/tzy/framework/pay/dto/PaymentInfoResponseDto.java
  79. 96 0
      tzy-framework/src/main/java/com/tzy/framework/pay/dto/PaymentRequestDto.java
  80. 35 0
      tzy-framework/src/main/java/com/tzy/framework/pay/dto/PaymentUserInfo.java
  81. 41 0
      tzy-framework/src/main/java/com/tzy/framework/pay/dto/PrePayRespDTO.java
  82. 25 0
      tzy-framework/src/main/java/com/tzy/framework/pay/dto/QmZgOrderInfoDto.java
  83. 54 0
      tzy-framework/src/main/java/com/tzy/framework/pay/dto/RechargeUserInfoDto.java
  84. 82 0
      tzy-framework/src/main/java/com/tzy/framework/pay/dto/RefundRequestDto.java
  85. 80 0
      tzy-framework/src/main/java/com/tzy/framework/pay/dto/ResourceData.java
  86. 56 0
      tzy-framework/src/main/java/com/tzy/framework/pay/dto/ResultMap.java
  87. 56 0
      tzy-framework/src/main/java/com/tzy/framework/pay/service/AlipayService.java
  88. 31 0
      tzy-framework/src/main/java/com/tzy/framework/pay/service/BankService.java
  89. 40 0
      tzy-framework/src/main/java/com/tzy/framework/pay/service/BaoFooBankPayService.java
  90. 39 0
      tzy-framework/src/main/java/com/tzy/framework/pay/service/BaoFooPayService.java
  91. 17 0
      tzy-framework/src/main/java/com/tzy/framework/pay/service/BaofooRechargePayService.java
  92. 31 0
      tzy-framework/src/main/java/com/tzy/framework/pay/service/BfPayService.java
  93. 64 0
      tzy-framework/src/main/java/com/tzy/framework/pay/service/BofooAgreementService.java
  94. 27 0
      tzy-framework/src/main/java/com/tzy/framework/pay/service/HfPayService.java
  95. 36 0
      tzy-framework/src/main/java/com/tzy/framework/pay/service/HmPayService.java
  96. 153 0
      tzy-framework/src/main/java/com/tzy/framework/pay/service/PaymentBaseService.java
  97. 76 0
      tzy-framework/src/main/java/com/tzy/framework/pay/service/PaymentService.java
  98. 31 0
      tzy-framework/src/main/java/com/tzy/framework/pay/service/QmH5PayService.java
  99. 12 0
      tzy-framework/src/main/java/com/tzy/framework/pay/service/QmPayAssetService.java
  100. 45 0
      tzy-framework/src/main/java/com/tzy/framework/pay/service/QmPayService.java

+ 7 - 6
pom.xml

@@ -19,13 +19,13 @@
         <druid.version>1.2.19</druid.version>
         <bitwalker.version>1.19</bitwalker.version>
         <kaptcha.version>2.3.2</kaptcha.version>
-        <swagger.version>2.9.2</swagger.version>
-        <pagehelper.boot.version>1.3.0</pagehelper.boot.version>
+        <swagger.version>3.0.0</swagger.version>
+        <pagehelper.boot.version>1.3.1</pagehelper.boot.version>
         <fastjson.version>2.0.10</fastjson.version>
         <oshi.version>5.2.5</oshi.version>
         <jna.version>5.5.0</jna.version>
-        <commons.io.version>2.5</commons.io.version>
-        <commons.fileupload.version>1.3.3</commons.fileupload.version>
+        <commons.io.version>2.14.0</commons.io.version>
+        <commons.fileupload.version>1.6.0</commons.fileupload.version>
         <poi.version>3.17</poi.version>
         <velocity.version>1.7</velocity.version>
         <skipTests>true</skipTests>
@@ -38,14 +38,14 @@
             <dependency>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-dependencies</artifactId>
-                <version>2.2.5.RELEASE</version>
+                <version>2.2.13.RELEASE</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
             <dependency>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-starter-test</artifactId>
-                <version>2.1.17.RELEASE</version>
+                <version>2.2.13.RELEASE</version>
                 <scope>test</scope>
             </dependency>
             <!--阿里数据库连接池 -->
@@ -165,6 +165,7 @@
         <module>tzy-sportcard</module>
         <module>poyi-service</module>
         <module>poyi-app</module>
+        <module>poyee-order</module>
     </modules>
     <packaging>pom</packaging>
 

+ 27 - 0
poyee-order/pom.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.tzy</groupId>
+        <artifactId>tzy</artifactId>
+        <version>4.5.0</version>
+    </parent>
+
+    <artifactId>poyee-order</artifactId>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.tzy</groupId>
+            <artifactId>poyi-service</artifactId>
+            <version>4.5.0</version>
+        </dependency>
+    </dependencies>
+</project>

+ 67 - 0
poyee-order/src/main/java/com/tzy/controller/LotOrderController.java

@@ -0,0 +1,67 @@
+package com.tzy.controller;
+
+import com.tzy.common.config.handle.ApiVersion;
+import com.tzy.common.dto.OutDTO;
+import com.tzy.entity.LotOrder;
+import com.tzy.service.LotOrderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@Api(tags = "拍品订单")
+@RequestMapping("/api/{version}/lot/order/")
+public class LotOrderController {
+    @Autowired
+    private LotOrderService lotOrderService;
+
+    @PostMapping("create")
+    @ResponseBody
+    @ApiOperation("创建拍品订单")
+    @ApiVersion(1.0)
+    public OutDTO createLotOrder(@RequestBody LotOrder lotOrder) {
+        int inserted = lotOrderService.createLotOrder(lotOrder);
+        if (inserted > 0) {
+            // 订单创建成功
+            return OutDTO.ok();
+        }
+
+        return OutDTO.error500("创建订单失败");
+    }
+    //app拍品订单列表查询
+    @PostMapping("/list")
+    @ResponseBody
+    @ApiOperation("拍品订单列表查询")
+    @ApiVersion(1.0)
+    public OutDTO queryLotList(@RequestBody LotOrder lotOrder) {
+        List<LotOrder> lotOrders = lotOrderService.getLotOrders(lotOrder);
+        return OutDTO.ok().put("lotOrders", lotOrders);
+    }
+
+    //app订单详情查询
+    @PostMapping("/query")
+    @ResponseBody
+    @ApiOperation("拍品订单详情查询")
+    @ApiVersion(1.0)
+    public OutDTO queryLotOrderById(@RequestBody LotOrder lotOrder) {
+        lotOrder = lotOrderService.getLotOrderById(lotOrder.getId());
+        return OutDTO.ok().put("lotOrder", lotOrder);
+    }
+
+    //修改订单收货地址
+    @ResponseBody
+    @PostMapping("/editOrderAddress")
+    @ApiOperation("修改订单收货地址")
+    @ApiVersion(1.0)
+    public OutDTO editOrderShippingAddress(@RequestBody LotOrder lotOrder) {
+        int i = lotOrderService.updateLotOrderAddress(lotOrder);
+        if (i > 0) {
+            return OutDTO.ok();
+        }
+        return OutDTO.error500("修改收货地址失败");
+    }
+}

+ 73 - 0
poyee-order/src/main/java/com/tzy/entity/LotOrder.java

@@ -0,0 +1,73 @@
+package com.tzy.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.ibatis.type.Alias;
+
+import java.util.Date;
+
+/**
+ * 拍品订单
+ */
+@Data
+@Alias("lotOrder")
+@ApiModel("拍品订单")
+public class LotOrder {
+
+    private Long id;
+    @ApiModelProperty("订单编号")
+    private String orderNo;
+    @ApiModelProperty("拍卖会id")
+    private Long auctionId;
+    //拍卖会名称
+    @ApiModelProperty("拍卖会名称")
+    private String auctionName;
+    //拍品名称
+    @ApiModelProperty("拍品名称")
+    private String lotName;
+    @ApiModelProperty("拍品图片")
+    private String lotImage;
+    //拍品id
+    @ApiModelProperty("拍品id")
+    private Long lotId;
+    @ApiModelProperty("商品id")
+    private Long spuId;
+    //用户id
+    @ApiModelProperty("用户id")
+    private Long userId;
+    //订单状态
+    @ApiModelProperty("订单状态:100待支付,101待确认、103待发货、104已发货,105已完成")
+    private Integer status;
+    //订单金额(单位:分)
+    @ApiModelProperty("订单金额(单位:分)")
+    private Long paymentAmount;
+    //拍卖服务费(分)
+    @ApiModelProperty("拍卖服务费(分)")
+    private Long serviceExpense;
+    @ApiModelProperty("订单总价")
+    private Long totalAmount;
+    @ApiModelProperty("配送地址id")
+    private Long shippingAddressId;
+    @ApiModelProperty("配送地址联系人")
+    private String shippingAddressLinkname;
+    @ApiModelProperty("配送地址联系电话")
+    private String shippingAddressPhone;
+    @ApiModelProperty("配送详细地址")
+    private String shippingAddress;
+
+    private Long expressId;
+    @ApiModelProperty("商家id")
+    private Long merchantId;
+    private Date createTime;
+    //支付时间
+    @ApiModelProperty("支付时间")
+    private Date payTime;
+    //订单过期时间
+    @ApiModelProperty("订单过期时间")
+    private Date expireTime;
+    //支付类型
+    @ApiModelProperty("支付类型")
+    private String payType;
+
+}

+ 34 - 0
poyee-order/src/main/java/com/tzy/entity/Spu.java

@@ -0,0 +1,34 @@
+package com.tzy.entity;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel("商品信息")
+public class Spu {
+    private Long id;
+    @ApiModelProperty("商品分类")
+    private String category;
+    @ApiModelProperty("商品子分类")
+    private String subCategory;
+    @ApiModelProperty("商品名称")
+    private String spuName;
+    @ApiModelProperty("商品数量")
+    private Long num;
+    @ApiModelProperty("主图")
+    private String mainImage;
+    @ApiModelProperty("轮播图")
+    private String carouselImage;
+    @ApiModelProperty("商品状态:0未审核,1已上架,2已下架")
+    private Integer status;
+    @ApiModelProperty("商品属性:json格式保存")
+    private JsonNode properties;
+    private Date createTime;
+    private Date updateTime;
+    private String createBy;
+    private String updateBy;
+}

+ 14 - 0
poyee-order/src/main/java/com/tzy/mapper/LotOrderMapper.java

@@ -0,0 +1,14 @@
+package com.tzy.mapper;
+
+import com.tzy.entity.LotOrder;
+
+import java.util.List;
+
+public interface LotOrderMapper {
+
+    int insertLotOrder(LotOrder lotOrder);
+    int updateLotOrderAddress(LotOrder lotOrder);
+    int countLotOrderByLotId(LotOrder lotOrder);
+    LotOrder selectLotOrderById(Long id);
+    List<LotOrder> selectLotOrder(LotOrder lotOrder);
+}

+ 8 - 0
poyee-order/src/main/java/com/tzy/mapper/SpuMapper.java

@@ -0,0 +1,8 @@
+package com.tzy.mapper;
+
+import com.tzy.entity.Spu;
+
+public interface SpuMapper {
+
+    Spu getSpuById(Long id);
+}

+ 63 - 0
poyee-order/src/main/java/com/tzy/mapper/handler/JsonNodeTypeHandler.java

@@ -0,0 +1,63 @@
+package com.tzy.mapper.handler;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.ibatis.type.BaseTypeHandler;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.MappedTypes;
+
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+@MappedTypes(JsonNode.class)
+public class JsonNodeTypeHandler extends BaseTypeHandler<JsonNode> {
+
+    private static final ObjectMapper objectMapper = new ObjectMapper();
+
+    @Override
+    public void setNonNullParameter(PreparedStatement ps, int i, JsonNode parameter, JdbcType jdbcType)
+            throws SQLException {
+        ps.setString(i, parameter.toString());
+    }
+
+    @Override
+    public JsonNode getNullableResult(ResultSet rs, String columnName) throws SQLException {
+        String json = rs.getString(columnName);
+        if (json != null) {
+            try {
+                return objectMapper.readTree(json);
+            } catch (Exception e) {
+                throw new SQLException("Error parsing JSON", e);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public JsonNode getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
+        String json = rs.getString(columnIndex);
+        if (json != null) {
+            try {
+                return objectMapper.readTree(json);
+            } catch (Exception e) {
+                throw new SQLException("Error parsing JSON", e);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public JsonNode getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
+        String json = cs.getString(columnIndex);
+        if (json != null) {
+            try {
+                return objectMapper.readTree(json);
+            } catch (Exception e) {
+                throw new SQLException("Error parsing JSON", e);
+            }
+        }
+        return null;
+    }
+}

+ 13 - 0
poyee-order/src/main/java/com/tzy/service/LotOrderService.java

@@ -0,0 +1,13 @@
+package com.tzy.service;
+
+import com.tzy.entity.LotOrder;
+
+import java.util.List;
+
+public interface LotOrderService {
+
+    int createLotOrder(LotOrder lotOrder);
+    List<LotOrder> getLotOrders(LotOrder lotOrder);
+    LotOrder getLotOrderById(Long id);
+    int updateLotOrderAddress(LotOrder lotOrder);
+}

+ 7 - 0
poyee-order/src/main/java/com/tzy/service/SpuService.java

@@ -0,0 +1,7 @@
+package com.tzy.service;
+
+import com.tzy.entity.Spu;
+
+public interface SpuService {
+    Spu getSpuById(Long id);
+}

+ 71 - 0
poyee-order/src/main/java/com/tzy/service/impl/LotOrderServiceImpl.java

@@ -0,0 +1,71 @@
+package com.tzy.service.impl;
+
+import com.tzy.common.exception.ServiceException;
+import com.tzy.common.utils.DateUtils;
+import com.tzy.entity.LotOrder;
+import com.tzy.entity.Spu;
+import com.tzy.mapper.LotOrderMapper;
+import com.tzy.service.LotOrderService;
+import com.tzy.service.SpuService;
+import com.tzy.sportcard.api.domain.ShippingAddressDto;
+import com.tzy.sportcard.api.service.MineApiService;
+import com.tzy.system.domain.TzyShippingAddress;
+import com.tzy.system.service.ITzyShippingAddressService;
+import com.tzy.util.RandomUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class LotOrderServiceImpl implements LotOrderService {
+    @Resource
+    private LotOrderMapper lotOrderMapper;
+    @Resource
+    MineApiService mineApiService;
+    @Resource
+    private SpuService spuService;
+    @Resource
+    ITzyShippingAddressService shippingAddressService;
+    @Override
+    public List<LotOrder> getLotOrders(LotOrder lotOrder) {
+        return lotOrderMapper.selectLotOrder(lotOrder);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int createLotOrder(LotOrder lotOrder) {
+        //判断该拍品订单是否已存在
+        int countedLotOrderByLotId = lotOrderMapper.countLotOrderByLotId(lotOrder);
+        if (countedLotOrderByLotId > 0) {
+            throw new ServiceException(500, "auctionId:"+ lotOrder.getLotId() + "订单已存在");
+        }
+        //检查商品是否存在,
+        Spu spu = spuService.getSpuById(lotOrder.getSpuId());
+        if (spu == null) {
+            throw new ServiceException(500, "商品不存在,请联系管理员!");
+        }
+
+        lotOrder.setCreateTime(DateUtils.getNowDate());
+        lotOrder.setStatus(100);//待支付
+        lotOrder.setOrderNo(RandomUtil.getRandom(RandomUtil.MALL_USER_ORDER));
+        return lotOrderMapper.insertLotOrder(lotOrder);
+    }
+
+    @Override
+    public LotOrder getLotOrderById(Long id) {
+        return lotOrderMapper.selectLotOrderById(id);
+    }
+
+    @Override
+    public int updateLotOrderAddress(LotOrder lotOrder) {
+        TzyShippingAddress tzyShippingAddress = shippingAddressService.selectUserAddress(Math.toIntExact(lotOrder.getUserId()), Math.toIntExact(lotOrder.getShippingAddressId()));
+        lotOrder.setShippingAddressId(tzyShippingAddress.getId());
+        lotOrder.setShippingAddressLinkname(tzyShippingAddress.getLinkname());
+        lotOrder.setShippingAddressPhone(tzyShippingAddress.getPhone());
+        lotOrder.setShippingAddress(tzyShippingAddress.getAddress() + tzyShippingAddress.getAddressMore());
+
+        return lotOrderMapper.updateLotOrderAddress(lotOrder);
+    }
+}

+ 21 - 0
poyee-order/src/main/java/com/tzy/service/impl/SpuServiceImpl.java

@@ -0,0 +1,21 @@
+package com.tzy.service.impl;
+
+import com.tzy.entity.Spu;
+import com.tzy.mapper.SpuMapper;
+import com.tzy.service.SpuService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SpuServiceImpl implements SpuService {
+    private SpuMapper spuMapper;
+    @Autowired
+    public SpuServiceImpl(SpuMapper spuMapper) {
+        this.spuMapper = spuMapper;
+    }
+
+    @Override
+    public Spu getSpuById(Long id) {
+        return spuMapper.getSpuById(id);
+    }
+}

+ 64 - 0
poyee-order/src/main/resources/mapper/LotOrderMapper.xml

@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.tzy.mapper.LotOrderMapper">
+    <resultMap id="lotOrderResultMap" type="com.tzy.entity.LotOrder">
+        <id column="id" property="id"/>
+        <result column="order_no" property="orderNo"/>
+        <result column="auction_name" property="auctionName"/>
+        <result column="lot_name" property="lotName"/>
+        <result column="user_id" property="lotId"/>
+        <result column="status" property="status"/>
+        <result column="payment_amount" property="paymentAmount"/>
+        <result  column="merchant_id" property="merchantId"/>
+        <result column="shipping_address_id" property="shippingAddressId"/>
+        <result column="express_id" property="expressId"/>
+        <result column="lot_id" property="lotId"/>
+        <result column="auction_id" property="auctionId"/>
+        <result column="create_time" property="createTime"/>
+        <result column="pay_time" property="payTime"/>
+        <result column="service_expense" property="serviceExpense"/>
+        <result column="total_amount" property="totalAmount"/>
+        <result column="lot_image" property="lotImage"/>
+        <result column="expire_time" property="expireTime"/>
+        <result column="shipping_address" property="shippingAddress"/>
+        <result column="shipping_address_likename" property="shippingAddressLinkname"/>
+        <result column="shipping_address_phone" property="shippingAddressPhone"/>
+    </resultMap>
+    <sql id="selectLotOrderSql">
+        select id,order_no,auction_name,lot_name,user_id,status,payment_amount,merchant_id,shipping_address_id,express_id,lot_id,auction_id,create_time,pay_time,service_expense,total_amount,lot_image,expire_time,shipping_address,shipping_address_likename,shipping_address_phone
+        from lot_order_info
+    </sql>
+    <select id="selectLotOrder" resultMap="lotOrderResultMap" parameterType="com.tzy.entity.LotOrder">
+        <include refid="selectLotOrderSql"/>
+        <where>
+
+            <if test="orderNo!=null and orderNo!=''">
+                and order_no=#{orderNo}
+            </if>
+            <if test="status!=null">
+                and status=#{status}
+            </if>
+            <if test="userId!=null">
+                and user_id=#{userId}
+            </if>
+        </where>
+        order by create_time desc
+    </select>
+    <select id="selectLotOrderById" resultMap="lotOrderResultMap">
+        <include refid="selectLotOrderSql"/>
+        where id=#{id}
+    </select>
+    <select id="countLotOrderByLotId" parameterType="com.tzy.entity.LotOrder" resultType="int">
+        select count(*) from lot_order_info where lot_id=#{lotId}
+    </select>
+    <insert id="insertLotOrder" parameterType="com.tzy.entity.LotOrder">
+        insert into lot_order_info (order_no,auction_name,lot_name,user_id,status,payment_amount,merchant_id,shipping_address_id,express_id,lot_id,auction_id,create_time,pay_time,service_expense,total_amount,lot_image,expire_time)
+        values (#{orderNo},#{auctionName},#{lotName},#{userId},#{status},#{paymentAmount},#{merchantId},#{shippingAddressId},#{expressId},#{lotId},#{auctionId},#{createTime},#{payTime},#{serviceExpense},#{totalAmount},#{lotImage},#{expire_time})
+    </insert>
+    <update id="updateLotOrderAddress" parameterType="com.tzy.entity.LotOrder">
+        update lot_order_info set shipping_address_id=#{shippingAddressId},shipping_address=#{shippingAddress},shipping_address_likename=#{shippingAddressLinkname},shipping_address_phone=#{shippingAddressPhone}
+        where id=#{id}
+    </update>
+</mapper>

+ 24 - 0
poyee-order/src/main/resources/mapper/SpuMapper.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.tzy.mapper.SpuMapper">
+    <resultMap id="spuMap" type="com.tzy.entity.Spu">
+        <id column="id" property="id"/>
+        <result column="category" property="category"/>
+        <result column="sub_category" property="subCategory"/>
+        <result column="spu_name" property="spuName"/>
+        <result column="num" property="num"/>
+        <result column="main_image" property="mainImage" />
+        <result column="carousel_image" property="carouselImage"/>
+        <result column="status" property="status" />
+        <result column="create_time" property="createTime"/>
+        <result column="create_by" property="createBy"/>
+        <result column="properties" property="properties" jdbcType="OTHER" typeHandler="com.tzy.mapper.handler.JsonNodeTypeHandler"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="update_by" property="updateBy"/>
+    </resultMap>
+    <select id="getSpuById" resultMap="spuMap">
+        select id,category,sub_category,spu_name,num,main_image,carousel_image,status,properties,create_time,create_by,update_time,update_by from spu where id=#{id}
+    </select>
+</mapper>

+ 10 - 10
poyi-app-common/pom.xml

@@ -43,21 +43,21 @@
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
         </dependency>
-        <!--防止进入swagger页面报类型转换错误,排除2.9.2中的引用,手动增加1.5.21版本-->
         <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-annotations</artifactId>
-            <version>1.5.21</version>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-boot-starter</artifactId>
+            <version>3.0.0</version>
         </dependency>
         <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-models</artifactId>
-            <version>1.5.21</version>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-spring-boot-starter</artifactId>
+            <version>3.0.3</version>
         </dependency>
-        <!-- swagger2-UI-->
+        <!-- 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.2版本 -->
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-models</artifactId>
+            <version>1.6.2</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.cloud</groupId>

+ 5 - 0
poyi-app/pom.xml

@@ -17,6 +17,11 @@
             <artifactId>poyi-service</artifactId>
             <version>${tzy.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.tzy</groupId>
+            <artifactId>poyee-order</artifactId>
+            <version>${tzy.version}</version>
+        </dependency>
         <dependency>
             <groupId>org.codehaus.janino</groupId>
             <artifactId>janino</artifactId>

+ 4 - 5
poyi-app/src/main/java/com/tzy/config/ConnectionPoolWarmer.java

@@ -1,7 +1,7 @@
 package com.tzy.config;
 
 import com.tzy.elasticsearch.dto.CardGroupInfoGoodsDTO;
-import com.tzy.elasticsearch.service.CardGroupInfoGoodsService;
+
 import com.tzy.framework.util.RedisTools;
 import com.tzy.sportcard.api.dto.group.SimpleGroupDTO;
 import com.tzy.sportcard.api.service.GroupApiService;
@@ -22,14 +22,13 @@ import java.sql.Statement;
 import java.util.Arrays;
 import java.util.List;
 
-@Component
+//@Component
 @Slf4j
 public class ConnectionPoolWarmer implements ApplicationRunner {
 
     @Resource
     private DataSource dataSource;
-    @Resource
-    private CardGroupInfoGoodsService cardGroupInfoGoodsService;
+
     @Autowired
     @Qualifier("threadPoolTaskExecutor")
     private ThreadPoolTaskExecutor pools;
@@ -87,7 +86,7 @@ public class ConnectionPoolWarmer implements ApplicationRunner {
             CardGroupInfoGoodsDTO query = new CardGroupInfoGoodsDTO();
             query.setStatus("201");
             query.setRows(100);
-            cardGroupInfoGoodsService.page(query);
+//            cardGroupInfoGoodsService.page(query);
         } catch (Exception ignored) {
         }
     }

+ 6 - 1
poyi-app/src/main/java/com/tzy/controller/group/GroupLocalController.java

@@ -188,7 +188,12 @@ public class GroupLocalController {
         }
         return ResultDTO.buildSuccessResult(list);
     }
-
+    @ApiOperation("竞价下单")
+    @PostMapping("/order/submit")
+    public ResultDTO orderSubmit(@RequestBody AuctionOrderDTO auctionOrderDTO){
+        OrderSubmitDTO orderSubmitDTO = auctionOrderService.generateOrder(auctionOrderDTO);
+        return ResultDTO.buildSuccessResult(orderSubmitDTO);
+    }
     @ApiOperation("竞价订单回调")
     @PostMapping("/order/callback")
     public ResultDTO orderCallBack(@RequestBody AuctionOrderDTO auctionOrderDTO){

+ 0 - 66
poyi-app/src/main/java/com/tzy/listener/mq/AppUserBrowseRecordConsumer.java

@@ -1,66 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.rabbitmq.client.Channel;
-import com.tzy.browse.domain.AppUserBrowseRecord;
-import com.tzy.browse.mapper.AppUserBrowseRecordMapper;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.common.utils.bean.JSONTools;
-import com.tzy.framework.util.RedisUtils;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-@Slf4j
-@Component
-public class AppUserBrowseRecordConsumer {
-    @Resource
-    private AppUserBrowseRecordMapper appUserBrowseRecordMapper;
-    @Resource
-    private RedisUtils redisUtils;
-    @Resource
-    private RedisTemplate<String, String> redisTemplate;
-
-    @RabbitHandler
-    //@RabbitListener(queuesToDeclare = @Queue(MqConstans.QUEUE_USER_BROWSE_RECORD))
-    public void addUserBrowseRecord(String param, Channel channel, Message message) throws IOException {
-        log.debug("入库用户浏览记录:{}", param);
-        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-        /*try{
-            List<AppUserBrowseRecord> records = JSONTools.parseObjectList(param, AppUserBrowseRecord.class);
-            records.forEach(record ->{
-                String key = "app_user_browse_" + record.getUserId();
-                Double timestamp = redisTemplate.opsForZSet().score(key, param);
-                record.setBrowseTime(new Date(timestamp.longValue()));
-                record.setBrowseDate(new Date(timestamp.longValue()));
-            });
-            appUserBrowseRecordMapper.batchSave(records);
-            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-            // 处理完要删除这些浏览记录
-            Set<Long> userIds = redisUtils.sGet("app_user_set").stream()
-                    .map(obj -> Long.parseLong(obj.toString()))
-                    .collect(Collectors.toSet());
-            userIds.forEach(userId ->{
-                // 用户浏览记录存储 Key
-                String historyKey = "app_user_browse_history_" + userId;
-                redisUtils.del(historyKey);
-            });
-            redisUtils.del("app_user_set");
-            redisUtils.set("browse_queue_count", 0); // 全局计数器归零
-        }catch (Exception e){
-            log.error("入库用户浏览记录异常:{}", param, e);
-            channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
-        }*/
-
-    }
-}

+ 0 - 39
poyi-app/src/main/java/com/tzy/listener/mq/CommunityNotifyConsumer.java

@@ -1,39 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.alibaba.fastjson.JSON;
-import com.rabbitmq.client.Channel;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.system.domain.TzySysNoticeRecord;
-import com.tzy.system.service.ITzySysNoticeRecordService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-import java.util.List;
-
-
-@Slf4j
-@Component
-public class CommunityNotifyConsumer {
-
-	@Resource
-	private ITzySysNoticeRecordService noticeRecordService;
-
-	@RabbitHandler
-	@RabbitListener(queues = {MqConstans.QUEUE_COMMUNITY_NOTIFY})
-	public void notifyConsumer(String param, Channel channel, Message message) throws IOException {
-		log.debug("社区通知消息:{}", param);
-		try {
-			List<TzySysNoticeRecord> noticeRecords = JSON.parseArray(param, TzySysNoticeRecord.class);
-			noticeRecords.forEach(noticeRecord -> noticeRecordService.insertTzySysNoticeRecord(noticeRecord));
-		} catch (Exception e) {
-			log.error("社区通知消息异常,参数:{}", param, e);
-		}
-		channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-	}
-
-}

+ 0 - 46
poyi-app/src/main/java/com/tzy/listener/mq/GiftCardConsumer.java

@@ -1,46 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.alibaba.fastjson2.JSON;
-import com.rabbitmq.client.Channel;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.common.dto.group.GroupActRecord;
-import com.tzy.sportcard.api.service.GroupApiService;
-import com.tzy.sportcard.api.service.MineApiService;
-import com.tzy.sportcard.point.domain.AppUserPointRecord;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-import java.util.List;
-
-
-@Slf4j
-@Component
-public class GiftCardConsumer {
-
-
-	@Resource
-	private GroupApiService groupApiService;
-	@Autowired
-	private MineApiService mineApiService;
-
-	@RabbitHandler
-	@RabbitListener(queues = {MqConstans.QUEUE_GROUP_GIFT_CARD})
-	public void giftCardConsumer(String param, Channel channel, Message message) throws IOException {
-		log.info("精美卡片新增记录:{}", param);
-		try {
-			GroupActRecord actRecord = JSON.parseObject(param, GroupActRecord.class);
-			List<AppUserPointRecord> records = groupApiService.getUserGroupGiftCard(actRecord.getRefId());
-			records.forEach(r -> mineApiService.addUserPoint(r));
-		} catch (Exception e) {
-			log.error("精美卡片新增异常,参数:{}", param, e);
-		}
-		channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-	}
-
-}

+ 0 - 37
poyi-app/src/main/java/com/tzy/listener/mq/GoodsSyncConsumer.java

@@ -1,37 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.rabbitmq.client.Channel;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.sportcard.group.service.ICardGroupGoodsService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.io.IOException;
-
-
-@Slf4j
-@Component
-public class GoodsSyncConsumer {
-
-	@Autowired
-	private ICardGroupGoodsService cardGroupGoodsService;
-
-	@RabbitHandler
-	@RabbitListener(queuesToDeclare = @Queue(MqConstans.QUEUE_GROUP_GOODS_SYNC))
-	public void groupFullConsumer(Long groupInfoId, Channel channel, Message message) throws IOException {
-		log.info("同步组团中卡卡密,id:{}", groupInfoId);
-		try {
-			cardGroupGoodsService.syncGoods(groupInfoId);
-		} catch (Exception e) {
-			log.info("中卡记录同步异常,组团id:{}", groupInfoId, e);
-		}
-		channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-	}
-
-
-}

+ 0 - 53
poyi-app/src/main/java/com/tzy/listener/mq/GoodsSyncEsConsumer.java

@@ -1,53 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.alibaba.fastjson2.JSONObject;
-import com.rabbitmq.client.Channel;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.elasticsearch.dto.CardGroupInfoGoodsDTO;
-import com.tzy.elasticsearch.service.CardGroupInfoGoodsService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-
-
-/**
- * es 卡密数据同步
- */
-@Slf4j
-@Component
-public class GoodsSyncEsConsumer {
-	@Resource
-	private CardGroupInfoGoodsService cardGroupInfoGoodsService;
-
-	@RabbitHandler
-	@RabbitListener(queuesToDeclare = @Queue(MqConstans.QUEUE_GROUP_GOODS_SYNC_ES))
-	public void groupEsConsumer(String param, Channel channel, Message message) throws IOException {
-		syncEsGoods(param);
-		channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-	}
-
-	private void syncEsGoods(String param) {
-		log.info("同步组团卡密ES,参数:{}", param);
-		try {
-			CardGroupInfoGoodsDTO syncParam = JSONObject.parseObject(param, CardGroupInfoGoodsDTO.class);
-			if(CardGroupInfoGoodsDTO.SYNC_TYPE_ADD.equals(syncParam.getSyncType())){
-				cardGroupInfoGoodsService.save(syncParam.getGroupInfoId());
-			}else if(CardGroupInfoGoodsDTO.SYNC_TYPE_EDIT.equals(syncParam.getSyncType())){
-				cardGroupInfoGoodsService.update(syncParam);
-			}else if(CardGroupInfoGoodsDTO.SYNC_TYPE_DEL_ADD.equals(syncParam.getSyncType())){
-				cardGroupInfoGoodsService.syncInfo(syncParam.getGroupInfoId());
-			}
-		} catch (Exception e) {
-			log.error("同步组团卡密ES异常,参数:{}", param, e);
-		}
-
-	}
-
-
-}

+ 0 - 594
poyi-app/src/main/java/com/tzy/listener/mq/GroupFullConsumer.java

@@ -1,594 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson2.JSON;
-import com.google.common.collect.Lists;
-import com.rabbitmq.client.Channel;
-import com.tzy.app.domain.act.CodeRecordDTO;
-import com.tzy.app.dto.TypeCountDTO;
-import com.tzy.app.dto.group.GoodsActRecordDTO;
-import com.tzy.app.mapper.AppCarouselPictureMapper;
-import com.tzy.app.mapper.GoodsActRecordMapper;
-import com.tzy.brand.member.domain.MemberUserRelation;
-import com.tzy.brand.member.dto.BrandMemberInfoDTO;
-import com.tzy.brand.member.mapper.MemberUserRelationMapper;
-import com.tzy.common.constant.Constants;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.common.core.domain.entity.SysDictData;
-import com.tzy.common.dto.GoodsQuery;
-import com.tzy.common.dto.PayActDTO;
-import com.tzy.common.dto.act.ActExchangeConfig;
-import com.tzy.common.dto.act.GroupSaleCodeDTO;
-import com.tzy.common.dto.group.GroupActRecord;
-import com.tzy.common.exception.ServiceException;
-import com.tzy.common.utils.DateUtils;
-import com.tzy.common.utils.StringUtils;
-import com.tzy.common.utils.bean.JSONTools;
-import com.tzy.framework.util.RedisUtils;
-import com.tzy.sportcard.api.bean.act.AppActManage;
-import com.tzy.sportcard.api.bean.act.GoodsActRecord;
-import com.tzy.sportcard.api.bean.act.UserListActParam;
-import com.tzy.sportcard.api.domain.GoodsInfo;
-import com.tzy.sportcard.api.domain.GoodsSerialDto;
-import com.tzy.sportcard.api.mapper.AppActManageMapper;
-import com.tzy.sportcard.api.service.AsyncAppService;
-import com.tzy.sportcard.api.service.GroupApiService;
-import com.tzy.sportcard.api.service.MineApiService;
-import com.tzy.sportcard.base.service.CommonCacheService;
-import com.tzy.sportcard.group.domain.CardGroupGoods;
-import com.tzy.sportcard.group.domain.CardGroupInfo;
-import com.tzy.sportcard.group.domain.CardGroupOrderInfo;
-import com.tzy.sportcard.group.domain.TzyMerchantInfo;
-import com.tzy.sportcard.group.service.*;
-import com.tzy.sportcard.group.service.impl.AppActServiceImpl;
-import com.tzy.sportcard.group.service.impl.GroupActService;
-import com.tzy.sportcard.point.domain.AppUserPointRecord;
-import lombok.extern.slf4j.Slf4j;
-import org.elasticsearch.common.Strings;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.amqp.rabbit.core.RabbitTemplate;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.*;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-
-@Slf4j
-@Component
-public class GroupFullConsumer {
-
-	@Autowired
-	private MineApiService mineApiService;
-	@Autowired
-	private ICardGroupOrderInfoService cardGroupOrderInfoService;
-	@Autowired
-	private ICardGroupInfoService cardGroupInfoService;
-	@Autowired
-	private ITzyMerchantInfoService merchantInfoService;
-	@Resource
-	private AppCarouselPictureMapper appCarouselPictureMapper;
-	@Autowired
-	private AsyncAppService asyncAppService;
-	@Resource
-	private ICardGroupGoodsService cardGroupGoodsService;
-	@Resource
-	private AppActService appActService;
-	@Resource
-	private RedisUtils redisUtils;
-	@Resource
-	private CommonCacheService commonCacheService;
-	@Resource
-	private GroupApiService groupApiService;
-	@Resource
-	private RabbitTemplate rabbitTemplate;
-	@Resource
-	private GoodsActRecordMapper goodsActRecordMapper;
-	@Resource
-	private GroupActService groupActService;
-	@Resource
-	private MemberUserRelationMapper memberUserRelationMapper;
-
-	@RabbitHandler
-	@RabbitListener(queuesToDeclare = @Queue(MqConstans.QUEUE_GROUP_FULL))
-	public void groupFullConsumer(Long groupInfoId, Channel channel, Message message) throws IOException {
-		log.info("拼团组齐消费开始,id:{}", groupInfoId);
-		try {
-			//groupFullById(groupInfoId);
-		} catch (Exception e) {
-			log.info("拼团组齐消费异常,参数:{}", groupInfoId, e);
-		}
-		channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-	}
-
-	private void sendUserGiftCard(Long groupInfoId) {
-		GroupActRecord actRecord = new GroupActRecord().setType(Constants.GROUP_GIFT_CARD).setRefId(groupInfoId.intValue()).setActType(Constants.GROUP_GIFT_CARD);
-		rabbitTemplate.convertAndSend(MqConstans.QUEUE_GROUP_GIFT_CARD, JSON.toJSONString(actRecord));
-	}
-
-	private void buildListAct(CardGroupInfo cardGroupInfo) {
-		if(cardGroupInfo.getPaniniListId()==null){
-			return;
-		}
-		//panini list活动
-		List<GoodsActRecord> userListAct = groupApiService.getUserListAct(cardGroupInfo.getPaniniListId());
-		if (CollectionUtils.isEmpty(userListAct)) {
-			return;
-		}
-		GoodsActRecord act = userListAct.get(0);
-		String actType = act.getActType();
-		if (Constants.LIST_ACT_SELECT_NUM.equals(actType)) {
-			ActExchangeConfig actConfig = act.getActConfig();
-			if (actConfig != null && StringUtils.isNotEmpty(actConfig.getExchangeActType())) {
-				List<TypeCountDTO> countList = cardGroupGoodsService.getUserGoodsNum(cardGroupInfo.getId());
-				countList.forEach(c -> {
-					AppUserPointRecord pointRecord = new AppUserPointRecord();
-					pointRecord.setType(actConfig.getExchangeActType());
-					pointRecord.setChangePoint(c.getNum().longValue());
-					pointRecord.setUserId(Long.parseLong(c.getType()));
-					pointRecord.setOrderId(cardGroupInfo.getId());
-					pointRecord.setOrderNo(cardGroupInfo.getCode());
-					pointRecord.setCreateTime(new Date());
-					pointRecord.setPointRate(1d);
-					mineApiService.addUserPoint(pointRecord);
-				});
-			}
-		} else {
-			boolean isInAct = checkListActByInfoType(actType, cardGroupInfo.getType());
-			if (!isInAct) {
-				return;
-			}
-			UserListActParam listActParam = new UserListActParam(cardGroupInfo.getId(), cardGroupInfo.getGoodsType(), cardGroupInfo.getPaniniListId(), actType);
-			rabbitTemplate.convertAndSend(MqConstans.EXCHANGE_USER_LIST_ACT, MqConstans.ROUTING_KEY_USER_LIST_ACT, JSON.toJSONString(listActParam));
-		}
-	}
-
-	private boolean checkListActByInfoType(String actType, String infoType) {
-		if (Constants.INFO_TYPE_BUY_TEAM.equals(infoType)) {
-			return false;
-		}
-		if (actType.endsWith(Constants.ACT_GOODS_TYPE_SET) && !Constants.INFO_TYPE_SETS.equals(infoType)) {
-			return false;
-		}
-		if (actType.endsWith(Constants.ACT_GOODS_TYPE_PLAYER) && Constants.INFO_TYPE_TEAM.equals(infoType)) {
-			return false;
-		}
-		if (actType.endsWith(Constants.ACT_GOODS_TYPE_TEAM) && Constants.INFO_TYPE_PLAYER.equals(infoType)) {
-			return false;
-		}
-		return true;
-	}
-
-	private void checkHasUnPayOrder(Long groupInfoId, CardGroupOrderInfo condition) {
-		int i = 0;
-		while (true) {
-			List<CardGroupOrderInfo> upPayOrders = cardGroupOrderInfoService.selectCardGroupOrderInfoList(condition);
-			if (upPayOrders.isEmpty() || i > 10) {
-				break;
-			}
-			i++;
-			log.info("存在未支付订单:{},次数:{}", groupInfoId, i);
-			try {
-				Thread.sleep(1000L);
-			} catch (InterruptedException e) {
-			}
-		}
-	}
-
-	private void addUserPointByGroupOrdersV2(CardGroupInfo cardGroupInfo, boolean isPreSale, List<CardGroupOrderInfo> orders) {
-		boolean isPointCat = StringUtils.isNotEmpty(cardGroupInfo.getPointType()) &&
-				cardGroupInfo.getPointType().startsWith(Constants.POINT_TYPE_MERCHANT_ACT_PRE);
-		int commonRate = isPointCat ? 1 : 100;
-		boolean isGroupRateAct = StringUtils.isNotEmpty(cardGroupInfo.getActType())
-				&& cardGroupInfo.getActType().startsWith(Constants.GROUP_ACT_RATE_PRE);
-		int actRate = isGroupRateAct ? cardGroupInfo.getPointRate() : commonRate;
-		List<AppUserPointRecord> pointRecords = orders.stream()
-				.flatMap(order -> Stream.of(
-						buildUserPointRecord(order, Constants.POINT_TYPE_COMMON, isPreSale, commonRate, isPointCat),
-						buildUserPointRecord(order, Constants.POINT_TYPE_USER_GROWTH, isPreSale, commonRate, isPointCat),
-						StringUtils.isNotEmpty(cardGroupInfo.getActPointType()) && groupApiService.checkOrderAct(cardGroupInfo.getActType(), order.getPaymentSuccessTime()) ?
-								buildUserPointRecord(order, cardGroupInfo.getActPointType(), isPreSale, actRate, isPointCat) : null
-				))
-				.filter(Objects::nonNull)
-				.collect(Collectors.toList());
-		int i = 0;
-		boolean isSuccess = false;
-		while (i < 3) {
-			i++;
-			try {
-				mineApiService.batchAddPointRecords(pointRecords);
-				isSuccess = true;
-				break;
-			} catch (Exception e) {
-				log.warn("拼团组齐积分记录异常,code:{},msg:", cardGroupInfo.getCode(), e);
-			}
-			try {
-				Thread.sleep(100L * i + 50);
-			} catch (InterruptedException ignored) {}
-		}
-		if (!isSuccess) {
-			throw new ServiceException("拼团组齐积分记录异常");
-		}
-	}
-
-	private void addUserPointByGroupOrdersV3(CardGroupInfo cardGroupInfo, boolean isPreSale, List<CardGroupOrderInfo> orders) {
-		boolean isPointCat = StringUtils.isNotEmpty(cardGroupInfo.getPointType()) &&
-				cardGroupInfo.getPointType().startsWith(Constants.POINT_TYPE_MERCHANT_ACT_PRE);
-		int commonRate = isPointCat ? 1 : 100;
-		boolean isGroupRateAct = StringUtils.isNotEmpty(cardGroupInfo.getActType())
-				&& cardGroupInfo.getActType().startsWith(Constants.GROUP_ACT_RATE_PRE);
-		int actRate = isGroupRateAct ? cardGroupInfo.getPointRate() : commonRate;
-		List<AppUserPointRecord> pointRecords = Lists.newArrayList();
-		// 送积分
-		boolean hashSaleCode = hasGroupSaleCode(cardGroupInfo);	//判断是否生态购
-		// 根据paniniListId 查询关联的活动(goods_act_record)
-		List<GoodsActRecord> goodsActRecordList = goodsActRecordMapper.selectListByGoodsId(cardGroupInfo.getPaniniListId());
-		Set<Long> filterUserId = new HashSet<>();
-		for(CardGroupOrderInfo order : orders){
-			// 平台通用积分
-			AppUserPointRecord commonRecord = buildUserPointRecord(order, Constants.POINT_TYPE_COMMON, isPreSale, commonRate, isPointCat);
-			pointRecords.add(commonRecord);
-			// 平台成长值
-			AppUserPointRecord userGrowthRecord = buildUserPointRecord(order, Constants.POINT_TYPE_USER_GROWTH, isPreSale, commonRate, isPointCat);
-			pointRecords.add(userGrowthRecord);
-			// 查询用户是否加入品牌会员
-			BrandMemberInfoDTO brandInfo = memberUserRelationMapper.getBrandInfo(order.getMerchantId());
-			if(brandInfo != null) {
-				MemberUserRelation memberUserRelation = memberUserRelationMapper.checkMemberUserRelation(order.getUserId().intValue(), brandInfo.getMerchantGroupId().intValue());
-				if (memberUserRelation != null) {
-					int status = memberUserRelation.getStatus();
-					// 必须是正常会员或者注销之前的订单
-					if (1 == status || (0 == status && order.getPaymentSuccessTime().before(memberUserRelation.getLogoutTime()))) {
-						com.alibaba.fastjson2.JSONObject commonConfig = JSONTools.parseObject(memberUserRelation.getCommonConfig()); // 品牌积分成长值配置
-						// 品牌会员积分
-						AppUserPointRecord brandMemberPointRecord = buildUserPointRecord3(order, Constants.BRAND_POINT_TYPE_PRE + memberUserRelation.getMerchantGroupId(),
-								isPreSale, commonRate, isPointCat, commonConfig.getInteger("pointRate"));
-						if (brandMemberPointRecord != null) {
-							brandMemberPointRecord.setMerchantGroupId(memberUserRelation.getMerchantGroupId());
-							brandMemberPointRecord.setMerchantId(order.getMerchantId());
-							brandMemberPointRecord.setPointRate(commonConfig.getDouble("pointRate"));
-							pointRecords.add(brandMemberPointRecord);
-						}
-						// 品牌会员成长值
-						AppUserPointRecord brandUserGrowthRecord = buildUserPointRecord3(order, Constants.BRAND_GROWTH_TYPE_PRE + memberUserRelation.getMerchantGroupId(),
-								isPreSale, 10, isPointCat, commonConfig.getInteger("growthRate"));
-						if (brandUserGrowthRecord != null) {
-							brandUserGrowthRecord.setMerchantGroupId(memberUserRelation.getMerchantGroupId());
-							brandUserGrowthRecord.setMerchantId(order.getMerchantId());
-							brandUserGrowthRecord.setPointRate(commonConfig.getDouble("growthRate"));
-							pointRecords.add(brandUserGrowthRecord);
-						}
-					}
-				}
-			}
-
-			AppUserPointRecord luckyPointRecord2025 = buildLuckyPoint2025(order, "", isPreSale, commonRate, isPointCat);
-			if(luckyPointRecord2025 != null) {
-				pointRecords.add(luckyPointRecord2025);
-			}
-			if(StringUtils.isNotEmpty(cardGroupInfo.getActPointType()) && groupApiService.checkOrderAct(cardGroupInfo.getActType(), order.getPaymentSuccessTime())){
-				AppUserPointRecord actPointRecord = buildUserPointRecord(order, cardGroupInfo.getActPointType(), isPreSale, actRate, isPointCat);
-				pointRecords.add(actPointRecord);
-			}
-			/*if(groupApiService.checkOrderActV2(cardGroupInfo.getActType(), order.getPaymentSuccessTime())){
-				AppUserPointRecord actPointRecord = buildUserPointRecord(order, cardGroupInfo.getActPointType(), isPreSale, actRate, isPointCat);
-				pointRecords.add(actPointRecord);
-			}*/
-			// 拼团成功奖励
-			List<AppUserPointRecord> groupFullRecords = buildUserPointRecord2(order, hashSaleCode, goodsActRecordList, filterUserId, isPointCat);
-			if(!CollectionUtils.isEmpty(groupFullRecords)) {
-				pointRecords.addAll(groupFullRecords);
-			}
-		}
-		pointRecords.removeIf(Objects::isNull); // 过滤null元素
-
-		int i = 0;
-		boolean isSuccess = false;
-		while (i < 3) {
-			i++;
-			try {
-				mineApiService.batchAddPointRecords(pointRecords);
-				isSuccess = true;
-				break;
-			} catch (Exception e) {
-				log.warn("拼团组齐积分记录异常,code:{},msg:", cardGroupInfo.getCode(), e);
-			}
-			try {
-				Thread.sleep(100L * i + 50);
-			} catch (InterruptedException ignored) {}
-		}
-		if (!isSuccess) {
-			throw new ServiceException("拼团组齐积分记录异常");
-		}
-	}
-
-	/**
-	 * 2025-618沙滩球活动
-	 */
-	private AppUserPointRecord buildLuckyPoint2025(CardGroupOrderInfo orderInfos, String type, boolean isPreSale, Integer commonRate, boolean isPointCat){
-		List<SysDictData> sysDictDatas = commonCacheService.getCommonDictData("app_hot_type_times_cache",
-				"hb_act_lucky_2025_618","1", null, -1);
-		if(!CollectionUtils.isEmpty(sysDictDatas)) {
-			com.alibaba.fastjson2.JSONObject jsonObject = JSONTools.parseObject(sysDictDatas.get(0).getDictValue());
-			Date startTime = jsonObject.getDate("startTime");
-			Date endTime = jsonObject.getDate("endTime");
-			if (orderInfos.getPaymentSuccessTime().after(startTime) && orderInfos.getPaymentSuccessTime().before(endTime)) {
-				BigDecimal refundFree = orderInfos.getRefundFee() != null ? orderInfos.getRefundFee() : BigDecimal.ZERO;
-				BigDecimal amount;
-				if (isPreSale) {
-					amount = orderInfos.getSettlementAmount();
-				} else {
-					amount = isPointCat ? new BigDecimal(String.valueOf(orderInfos.getPoint())) : orderInfos.getActualPayment().subtract(refundFree);
-				}
-				if (amount.doubleValue() <= 0) {
-					return null;
-				}
-				BigDecimal pointRate = new BigDecimal(commonRate.toString());
-				Long points = amount.multiply(pointRate).longValue();
-
-				AppUserPointRecord pointRecord = new AppUserPointRecord();
-				pointRecord.setType(jsonObject.getString("pointType"));
-				pointRecord.setChangePoint(points);
-				pointRecord.setUserId(orderInfos.getUserId());
-				pointRecord.setOrderId(orderInfos.getId());
-				pointRecord.setOrderNo(orderInfos.getOrderNo());
-				pointRecord.setCreateTime(new Date());
-				pointRecord.setPointRate(commonRate.doubleValue());
-				pointRecord.setTotalSale(amount);
-				return pointRecord;
-			}
-		}
-		return null;
-	}
-	private void buildOrderPayAct(Long groupInfoId, List<CardGroupOrderInfo> orders) {
-		List<SysDictData> payActs = asyncAppService.getPayActs(PayActDTO.TYPE_PAY_AMOUNT_TURNTABLE);
-		if (payActs != null && !payActs.isEmpty()) {
-			Map<Long, CardGroupOrderInfo> distinctUserOrders = orders.stream().collect(Collectors.toMap(CardGroupOrderInfo::getUserId, o -> o, (key1, key2) -> key1));
-			distinctUserOrders.values().forEach(order -> asyncAppService.aftPayAct(order, PayActDTO.TYPE_PAY_AMOUNT_TURNTABLE));
-			log.info("记录大转盘活动组团id:{}", groupInfoId);
-		}
-	}
-
-	private void editGroupInfo(CardGroupInfo cardGroupInfo) {
-		Long groupInfoId=cardGroupInfo.getId();
-		CardGroupInfo info = new CardGroupInfo();
-		info.setId(groupInfoId);
-		info.setAddPointFlag(Constants.ZERO);
-		info.setSortDefault(0);
-		cardGroupInfoService.updateCardGroupInfo(info);
-		TzyMerchantInfo merchantInfo = new TzyMerchantInfo();
-		merchantInfo.setId(cardGroupInfo.getMerchantId().longValue());
-		merchantInfo.setSaleNum(cardGroupInfoService.findMerchantSaleNum(cardGroupInfo.getMerchantId().longValue()));
-		merchantInfoService.updateTzyMerchantInfo(merchantInfo);
-		appCarouselPictureMapper.cancelBanner(Constants.REDIRECT_PATH + groupInfoId);
-		redisUtils.del("order_group_cache:"+groupInfoId);
-		redisUtils.hdel(Constants.INFO_TEAM_TO_RANDOM_CACHE, groupInfoId.toString());
-		redisUtils.set("group_full_flag"+groupInfoId,1,3600);
-	}
-
-	private void buildMerchantAct(CardGroupInfo cardGroupInfo) {
-		if (StringUtils.isEmpty(cardGroupInfo.getHotTypeConfig())) {
-			return;
-		}
-		List<GoodsActRecordDTO> actConfigs = JSON.parseArray(cardGroupInfo.getHotTypeConfig(), GoodsActRecordDTO.class);
-		if (CollectionUtils.isEmpty(actConfigs)) {
-			return;
-		}
-		GoodsActRecordDTO config = actConfigs.get(0);
-		if (Constants.GROUP_ACT_TYPE_RANDOM.equals(config.getSubType())) {
-			//随机卡密分配活动
-			String actType = config.getActType();
-			if (!Constants.MERCHANT_ACT_GROUP_FULL.equals(actType)) {
-				return;
-			}
-			List<CardGroupGoods> actGoods = groupApiService.getGroupActGoods(cardGroupInfo.getId());
-			if (CollectionUtils.isEmpty(actGoods)) {
-				return;
-			}
-			actGoods.forEach(goods -> appActService.sendPrize(goods.getUserId(), goods.getActId().longValue(), config.getActValueType()));
-			editGoodsActFlag(cardGroupInfo);
-			Map<Integer, List<CardGroupGoods>> userNotifyData = actGoods.stream().collect(Collectors.groupingBy(CardGroupGoods::getUserId));
-			String prizeName = AppActServiceImpl.getPrizeName(config.getActDesc());
-			userNotifyData.keySet().forEach(key -> {
-				List<CardGroupGoods> goodsList = userNotifyData.get(key);
-				CardGroupGoods goods = goodsList.get(0);
-				String userPrizeName = prizeName;
-				if (goodsList.size() > 1) {
-					userPrizeName = prizeName + "等活动奖品";
-				}
-				appActService.sendMerchantActNotify(cardGroupInfo.getName(), goods.getUserOrderId().longValue(), goods.getUserId(),
-						goods.getUserNickname(), userPrizeName, config.getActValueType(), config.getName());
-			});
-		} else if (Constants.GROUP_ACT_TYPE_SELECT.equals(config.getSubType())) {
-			//指定卡密
-			Long groupInfoId = cardGroupInfo.getId();
-			List<GoodsActRecord> allActGoods = cardGroupGoodsService.getActGoods(groupInfoId, Constants.MERCHANT_ACT_GROUP_FULL);
-			if (!allActGoods.isEmpty()) {
-				List<Long> goodsIdList = allActGoods.stream().filter(a -> a.getGoodsId() != null).map(GoodsActRecord::getGoodsId).collect(Collectors.toList());
-				GoodsQuery query = new GoodsQuery().setGroupInfoId(cardGroupInfo.getId()).setIds(goodsIdList).setActStatus(0);
-				List<GoodsSerialDto> actGoods = cardGroupGoodsService.selectGoods(cardGroupInfo.isNewGoodsType(), query);
-				actGoods.forEach(goods -> appActService.sendGoodsActPrize(goods, allActGoods, cardGroupInfo.getName()));
-				editGoodsActFlag(cardGroupInfo);
-				Map<Integer, List<GoodsSerialDto>> userNotifyData = actGoods.stream().collect(Collectors.groupingBy(GoodsSerialDto::getUserId));
-				userNotifyData.keySet().forEach(key -> {
-					List<GoodsSerialDto> goodsList = userNotifyData.get(key);
-					GoodsSerialDto goods = goodsList.get(0);
-					List<GoodsActRecord> actRecords = allActGoods.stream().filter(a -> a.getGoodsId() != null && a.getGoodsId().intValue() == goods.getId()).collect(Collectors.toList());
-					GoodsActRecord actRecord = actRecords.get(0);
-					String prizeName = AppActServiceImpl.getPrizeName(actRecord.getActDesc());
-					if (goodsList.size() > 1) {
-						prizeName = prizeName + ".等活动奖品";
-					}
-					appActService.sendMerchantActNotify(cardGroupInfo.getName(), goods.getUserOrderId().longValue(),
-							goods.getUserId(), goods.getNickname(), prizeName, config.getActValueType(), config.getName());
-				});
-			}
-		}
-	}
-
-	private void editGoodsActFlag(CardGroupInfo cardGroupInfo) {
-		GoodsQuery condition = new GoodsQuery().setGroupInfoId(cardGroupInfo.getId());
-		CardGroupGoods goods=new CardGroupGoods();
-		goods.setActStatus(1);
-		cardGroupGoodsService.updateGoodsByCond(goods,condition);
-	}
-
-
-	private void addPoint(CardGroupOrderInfo orderInfos, String type, boolean isPreSale, Integer actPointRate, boolean isPointCat) {
-		AppUserPointRecord pointRecord = buildUserPointRecord(orderInfos, type, isPreSale, actPointRate, isPointCat);
-		if (pointRecord == null) return;
-		//增加积分明细记录
-		mineApiService.addUserPoint(pointRecord);
-	}
-
-	private AppUserPointRecord buildUserPointRecord(CardGroupOrderInfo orderInfos, String type, boolean isPreSale, Integer actPointRate, boolean isPointCat) {
-		BigDecimal refundFree = orderInfos.getRefundFee() != null ? orderInfos.getRefundFee() : BigDecimal.ZERO;
-		BigDecimal amount;
-		if (isPreSale) {
-			amount = orderInfos.getSettlementAmount();
-		} else {
-			amount = isPointCat ? new BigDecimal(String.valueOf(orderInfos.getPoint())) : orderInfos.getActualPayment().subtract(refundFree);
-		}
-		if (amount.doubleValue() <= 0) {
-			return null;
-		}
-		BigDecimal pointRate = new BigDecimal(actPointRate.toString());
-		Long points = amount.multiply(pointRate).longValue();
-
-		AppUserPointRecord pointRecord = new AppUserPointRecord();
-		pointRecord.setType(type);
-		pointRecord.setChangePoint(points);
-		pointRecord.setUserId(orderInfos.getUserId());
-		pointRecord.setOrderId(orderInfos.getId());
-		pointRecord.setOrderNo(orderInfos.getOrderNo());
-		pointRecord.setCreateTime(new Date());
-		pointRecord.setPointRate(pointRate.doubleValue());
-		pointRecord.setTotalSale(amount);
-		return pointRecord;
-	}
-
-	private List<AppUserPointRecord> buildUserPointRecord2(CardGroupOrderInfo orderInfos, boolean hashSaleCode,
-														   List<GoodsActRecord> goodsActRecordList, Set<Long> filterUserId, boolean isPointCat){
-		List<AppUserPointRecord> results = Lists.newArrayList();
-		if(CollectionUtils.isEmpty(goodsActRecordList)) {
-			log.debug("拼团组齐次数无活动");
-			return results;
-		}
-		Map<String, List<GoodsActRecord>> groupMap = goodsActRecordList.stream().collect(Collectors.groupingBy(GoodsActRecord::getCategory));
-		BigDecimal refundFree = orderInfos.getRefundFee() != null ? orderInfos.getRefundFee() : BigDecimal.ZERO;
-		BigDecimal amount = isPointCat ? new BigDecimal(String.valueOf(orderInfos.getPoint())) : orderInfos.getActualPayment().subtract(refundFree);
-		groupMap.keySet().forEach(key -> {
-			GoodsActRecord actPoint = groupMap.get(key).get(0);
-			JSONObject prop1Obj = JSONObject.parseObject(actPoint.getProp1());
-			if(Strings.isEmpty(prop1Obj.getString("pointType"))){ // 如果不是送积分的活动 不走后面的逻辑
-				return;
-			}
-			if(Constants.GROUP_ACT_RATE.equals(key)){	// 	倍率积分活动
-				List<GoodsActRecord> actPointList = groupMap.get(key);
-				actPointList.stream()
-						.filter(record -> Objects.equals(JSONObject.parseObject(record.getProp1()).getBooleanValue("needSaleCode"), hashSaleCode))
-						.findFirst()
-						.ifPresent(filterRecord -> {
-							if(!checkActTime(filterRecord, orderInfos.getPaymentSuccessTime())){
-								return;
-							}
-							results.add(createPointRecord(JSONObject.parseObject(filterRecord.getProp1()), amount, orderInfos));
-						});
-			} else if(Constants.GROUP_FULL_COUNT.equals(key)){
-				log.debug("拼团组齐次数group_full_count--------");
-				if(!filterUserId.contains(orderInfos.getUserId())) {	//	拼团组齐只送一次
-					if(!checkActTime(actPoint, orderInfos.getPaymentSuccessTime())){
-						log.debug("拼团组齐次数用户支付时间不在范围内");
-						return;
-					}
-
-					// 拼团组齐次数
-					results.add(createPointRecord(prop1Obj, BigDecimal.ONE, orderInfos));
-					filterUserId.add(orderInfos.getUserId());
-				}
-			} else{
-				if(!checkActTime(actPoint, orderInfos.getPaymentSuccessTime())){
-					return;
-				}
-				results.add(createPointRecord(prop1Obj, amount, orderInfos));
-			}
-		});
-
-		return results;
-	}
-
-	private AppUserPointRecord buildUserPointRecord3(CardGroupOrderInfo orderInfos, String type, boolean isPreSale, Integer actPointRate, boolean isPointCat, Integer brandRate) {
-		BigDecimal refundFree = orderInfos.getRefundFee() != null ? orderInfos.getRefundFee() : BigDecimal.ZERO;
-		BigDecimal amount;
-		if (isPreSale) {
-			amount = orderInfos.getSettlementAmount();
-		} else {
-			amount = isPointCat ? new BigDecimal(String.valueOf(orderInfos.getPoint())) : orderInfos.getActualPayment().subtract(refundFree);
-		}
-		if (amount.doubleValue() <= 0) {
-			return null;
-		}
-		BigDecimal pointRate = new BigDecimal(actPointRate.toString());
-		Long points = amount.multiply(pointRate).divide(new BigDecimal(brandRate), 0, RoundingMode.HALF_UP).longValue();
-
-		AppUserPointRecord pointRecord = new AppUserPointRecord();
-		pointRecord.setType(type);
-		pointRecord.setChangePoint(points);
-		pointRecord.setUserId(orderInfos.getUserId());
-		pointRecord.setOrderId(orderInfos.getId());
-		pointRecord.setOrderNo(orderInfos.getOrderNo());
-		pointRecord.setCreateTime(new Date());
-		pointRecord.setPointRate(pointRate.doubleValue());
-		pointRecord.setTotalSale(amount);
-		return pointRecord;
-	}
-
-	// 判断订单是否在活动有效期
-	private boolean checkActTime(GoodsActRecord actRecord, Date orderPaymentSuccessTime){
-		Date startTime = actRecord.getStartTime();
-		Date endTime = actRecord.getEndTime();
-		if (startTime != null && orderPaymentSuccessTime.before(startTime)) {
-			return false;
-		}
-		if (endTime != null && orderPaymentSuccessTime.after(endTime)) {
-			return false;
-		}
-		return true;
-	}
-
-	// 提取通用的代码部分
-	private AppUserPointRecord createPointRecord(JSONObject prop1Obj, BigDecimal amount, CardGroupOrderInfo orderInfos) {
-		AppUserPointRecord pointRecord = new AppUserPointRecord();
-		double pointRate = prop1Obj.getDouble("pointRate");
-		Long points = amount.multiply(new BigDecimal(pointRate)).longValue();
-		pointRecord.setType(prop1Obj.getString("pointType"));
-		pointRecord.setChangePoint(points);
-		pointRecord.setUserId(orderInfos.getUserId());
-		pointRecord.setOrderId(orderInfos.getId());
-		pointRecord.setOrderNo(orderInfos.getOrderNo());
-		pointRecord.setCreateTime(new Date());
-		pointRecord.setPointRate(pointRate);
-		return pointRecord;
-	}
-
-	private boolean hasGroupSaleCode(CardGroupInfo cardGroupInfo){
-		List<CodeRecordDTO> codeRecords = groupApiService.getRefCodeRecord(cardGroupInfo.getId(), null);
-		boolean hasSaleCode = !CollectionUtils.isEmpty(codeRecords);
-		if(hasSaleCode){
-			return hasSaleCode;
-		}
-		//新版生态购
-		GroupSaleCodeDTO saleCodeConfig = groupActService.getGroupSaleCodeConfig(cardGroupInfo.getId(),cardGroupInfo.getStatus()>=201);
-		return saleCodeConfig.isHasBoxConfig();
-	}
-
-}

+ 0 - 61
poyi-app/src/main/java/com/tzy/listener/mq/GroupOrderActConsumer.java

@@ -1,61 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.alibaba.fastjson2.JSON;
-import com.rabbitmq.client.Channel;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.common.dto.group.GroupActRecord;
-import com.tzy.common.utils.DateUtils;
-import com.tzy.sportcard.api.service.GroupApiService;
-import com.tzy.sportcard.group.service.AppActService;
-import com.tzy.sportcard.group.service.ICardGroupGoodsService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.stereotype.Component;
-import org.teasoft.bee.osql.SuidRich;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-
-
-@Slf4j
-@Component
-public class GroupOrderActConsumer {
-
-	@Resource
-	private AppActService appActService;
-	@Resource
-	private SuidRich suidRich;
-	@Resource
-	private GroupApiService groupApiService;
-	@Resource
-	private ICardGroupGoodsService cardGroupGoodsService;
-
-	@RabbitHandler
-	@RabbitListener(queues = {MqConstans.QUEUE_GROUP_ORDER_ACT})
-	public void actConsumer(String param, Channel channel, Message message) throws IOException {
-		log.info("活动消费记录:{}", param);
-		try {
-			GroupActRecord actRecord = JSON.parseObject(param, GroupActRecord.class);
-			if(appActService.isActSend(actRecord.getType(),actRecord.getRefId(),actRecord.getActType())){
-				log.info("活动已存在记录:{}",param);
-				return;
-			}
-			sendActPrizeByType(actRecord);
-			actRecord.setCreateTime(DateUtils.getTimestampNow());
-			suidRich.insert(actRecord);
-		} catch (Exception e) {
-			log.error("活动消费异常,参数:{}", param, e);
-		}
-		channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-	}
-
-	private void sendActPrizeByType(GroupActRecord actRecord) {
-		//String type = actRecord.getType();
-		//String actType = actRecord.getActType();
-		//Integer refId = actRecord.getRefId();
-	}
-
-
-}

+ 0 - 49
poyi-app/src/main/java/com/tzy/listener/mq/GroupSortConsumer.java

@@ -1,49 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.rabbitmq.client.Channel;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.sportcard.api.service.AsyncAppService;
-import com.tzy.sportcard.group.domain.CardGroupInfo;
-import com.tzy.sportcard.group.service.ICardGroupInfoService;
-import com.tzy.system.service.ISysDictDataService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-
-
-@Slf4j
-@Component
-public class GroupSortConsumer {
-    @Resource
-    private ICardGroupInfoService cardGroupInfoService;
-    @Resource
-    private AsyncAppService asyncAppService;
-    @Resource
-    private ISysDictDataService dictDataService;
-
-    @RabbitHandler
-    @RabbitListener(queuesToDeclare = @Queue(MqConstans.QUEUE_GROUP_SORT_UPDATE))
-    public void groupSortConsumer(Long groupInfoId, Channel channel, Message message) throws IOException {
-        try {
-            CardGroupInfo cardGroupInfo = cardGroupInfoService.selectCardGroupInfoById(groupInfoId);
-            if (cardGroupInfo != null && cardGroupInfo.getCopies() > cardGroupInfo.getSoldCopies()) {
-                asyncAppService.updateInfoSortQueryV3(cardGroupInfo);
-            }
-        } catch (Exception e) {
-            log.info("组团排序修改异常,参数:{}", groupInfoId, e);
-        }
-        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-    }
-
-
-
-
-
-
-}

+ 0 - 34
poyi-app/src/main/java/com/tzy/listener/mq/InitBrandMemberConsumer.java

@@ -1,34 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.rabbitmq.client.Channel;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.sportcard.api.service.BrandMemberManageService;
-import com.tzy.sportcard.api.service.IMemberManageService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-
-
-@Slf4j
-@Component
-public class InitBrandMemberConsumer {
-
-	@Resource
-	private BrandMemberManageService brandMemberManageService;
-
-	@RabbitHandler
-	@RabbitListener(queuesToDeclare = @Queue(MqConstans.QUEUE_INIT_BRAND_MEMBER))
-	public void initBrandMemberConsumer(String param, Channel channel, Message message) throws IOException {
-		log.info("InitBrandMemberConsumer param:{}", param);
-		brandMemberManageService.initMember();
-		channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-	}
-
-
-}

+ 0 - 76
poyi-app/src/main/java/com/tzy/listener/mq/InitUserGiftCardConsumer.java

@@ -1,76 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
-import com.rabbitmq.client.Channel;
-import com.tzy.app.dto.UserGiftCardDTO;
-import com.tzy.common.constant.Constants;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.common.utils.DateUtils;
-import com.tzy.framework.util.RedisUtils;
-import com.tzy.sportcard.api.service.MineApiService;
-import com.tzy.sportcard.point.domain.AppUserPointRecord;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.io.IOException;
-import java.util.Date;
-import java.util.List;
-
-
-@Slf4j
-@Component
-public class InitUserGiftCardConsumer {
-	@Autowired
-	private MineApiService mineApiService;
-	@Autowired
-	private RedisUtils redisUtils;
-
-	private final static String START_TIME_DEFAULT="2023-11-01 00:00:00";
-	private final static String END_TIME_DEFAULT="2023-11-29 00:00:00";
-
-	@RabbitHandler
-	@RabbitListener(queues = {MqConstans.QUEUE_INIT_USER_GIFT_CARD})
-	public void initUserGiftCardConsumer(String param, Channel channel, Message message) throws IOException {
-		log.info("用户精美卡片初始化:{}", param);
-		try {
-			JSONObject paramJson = JSON.parseObject(param);
-			String userId = paramJson.getString("userId");
-			String startTime = paramJson.getString("startTime");
-			String endTime = paramJson.getString("endTime");
-			initUserGiftCard(Integer.valueOf(userId),startTime,endTime);
-		} catch (Exception e) {
-			log.error("用户精美卡片初始化异常,用户id:{}", param, e);
-		}
-		channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-	}
-
-	private void initUserGiftCard(Integer userId,String startTime,String endTime) {
-		if (userId == null) {
-			return;
-		}
-		startTime = StringUtils.isEmpty(startTime) ? START_TIME_DEFAULT : startTime;
-		endTime = StringUtils.isEmpty(endTime) ? END_TIME_DEFAULT : endTime;
-		List<UserGiftCardDTO> userWaitCards = mineApiService.getUserInitWaitGiftCards(userId, DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, startTime),
-				DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, endTime));
-		userWaitCards.forEach(c -> {
-			AppUserPointRecord pointRecord = new AppUserPointRecord();
-			pointRecord.setType(Constants.POINT_TYPE_GIFT_CARD_PRE + c.getCardId());
-			pointRecord.setChangePoint(c.getWaitNum().longValue());
-			pointRecord.setCurrPoint(c.getCardId().longValue());
-			pointRecord.setUserId(userId.longValue());
-			pointRecord.setOrderId(c.getInfoId().longValue());
-			pointRecord.setMerchantId(c.getMerchantId().longValue());
-			pointRecord.setOrderNo(c.getInfoId().toString());
-			pointRecord.setCreateTime(new Date());
-			//增加积分明细记录
-			mineApiService.addUserPoint(pointRecord);
-		});
-		redisUtils.hset("init_user_gift_card", userId.toString(), 1);
-	}
-}

+ 0 - 32
poyi-app/src/main/java/com/tzy/listener/mq/InitUserMemberConsumer.java

@@ -1,32 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.rabbitmq.client.Channel;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.sportcard.api.service.IMemberManageService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-
-
-@Slf4j
-@Component
-public class InitUserMemberConsumer {
-
-	@Resource
-	private IMemberManageService memberManageService;
-
-	@RabbitHandler
-	@RabbitListener(queuesToDeclare = @Queue(MqConstans.QUEUE_INIT_USER_USER_MEMBER))
-	public void initUserMemberConsumer(String param, Channel channel, Message message) throws IOException {
-		memberManageService.initMemberV2();
-		channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-	}
-
-
-}

+ 0 - 37
poyi-app/src/main/java/com/tzy/listener/mq/LuckyBagConsumer.java

@@ -1,37 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.rabbitmq.client.Channel;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.common.utils.bean.JSONTools;
-import com.tzy.luckybag.dto.LuckyBagMQDTO;
-import com.tzy.luckybag.service.IAppLiveLuckyBagService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-
-@Slf4j
-@Component
-public class LuckyBagConsumer {
-
-    @Resource
-    private IAppLiveLuckyBagService appLiveLuckyBagService;
-
-    @RabbitHandler
-    @RabbitListener(queues = {MqConstans.QUEUE_LUCKY_BAG_EXPIRED})
-    public void notifyConsumer(String dataStr, Channel channel, Message message) throws IOException {
-        log.info("福袋开奖 {}", dataStr);
-        LuckyBagMQDTO luckyBagMQDTO = JSONTools.jsonStr2obj(dataStr, LuckyBagMQDTO.class);
-        try {
-            appLiveLuckyBagService.startLottery(luckyBagMQDTO);
-//
-        } catch (Exception e) {
-            log.error("福袋开奖异常id:{}", luckyBagMQDTO.getBagId(), e);
-        }
-        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-    }
-}

+ 0 - 104
poyi-app/src/main/java/com/tzy/listener/mq/MerchantNotifyConsumer.java

@@ -1,104 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
-import com.rabbitmq.client.Channel;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.common.constant.NoticeMsgModel;
-import com.tzy.common.dto.notice.ToNoticeUserDTO;
-import com.tzy.common.utils.bean.BeanUtils;
-import com.tzy.sportcard.api.mapper.AppNotifyConfigMapper;
-import com.tzy.system.domain.TzySysNoticeRecord;
-import com.tzy.system.mapper.TzySysNoticeRecordMapper;
-import com.tzy.util.NoticeType;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-
-
-@Slf4j
-@Component
-public class MerchantNotifyConsumer {
-
-	@Resource
-	private AppNotifyConfigMapper appNotifyConfigMapper;
-	@Resource
-	private TzySysNoticeRecordMapper noticeRecordMapper;
-
-	@RabbitHandler
-	@RabbitListener(queues = {MqConstans.QUEUE_MERCHANT_NOTIFY})
-	public void notifyConsumer(String param, Channel channel, Message message) throws IOException {
-		log.debug("商家通知消息:{}", param);
-		try {
-			//notifyLikeMerchantUser(param);
-		} catch (Exception e) {
-			log.error("商家通知异常,组团id:{}", param, e);
-		}
-		channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-	}
-
-	private void notifyLikeMerchantUser(String param) {
-		JSONObject notifyJson = JSON.parseObject(param);
-		String type = notifyJson.getString("type");
-		Integer merchantId = notifyJson.getIntValue("merchantId");
-		String merchantName = notifyJson.getString("merchantName");
-		Integer groupInfoId = notifyJson.getIntValue("groupInfoId");
-		String groupInfoName = notifyJson.getString("groupInfoName");
-
-		List<ToNoticeUserDTO> noticeUsers = appNotifyConfigMapper.selectNotifyUsersByMerchant(type, merchantId);
-		if(CollectionUtils.isEmpty(noticeUsers)){
-			return;
-		}
-		String refUrl = "live".equalsIgnoreCase(type) ? NoticeType.group_detail_url + groupInfoId : NoticeType.MERCHANT_SHOP_TOP + merchantId;
-		String msg = "live".equalsIgnoreCase(type) ? String.format(NoticeMsgModel.MERCHANT_LIVING_NOTIFY, groupInfoName)
-				: String.format(NoticeMsgModel.MERCHANT_SALE_NEW_NOTIFY, merchantName);
-
-		String title = "live".equalsIgnoreCase(type) ? "直播通知" : "开售通知";
-		List<TzySysNoticeRecord> records = noticeUsers.stream().filter(u -> checkUserIsNotify(type, u, merchantId))
-				.map(u -> buildNoticeRecord(u.getUserId(), type.toUpperCase(), refUrl, msg, title)).collect(Collectors.toList());
-		if (CollectionUtils.isEmpty(records)) {
-			return;
-		}
-		List<List<TzySysNoticeRecord>> batchList = BeanUtils.batchList(records, 500);
-		batchList.forEach(r -> noticeRecordMapper.batchInsertRecord(r));
-	}
-
-	private TzySysNoticeRecord buildNoticeRecord(Long userId, String type, String refUrl, String msg, String title) {
-		TzySysNoticeRecord noticeRecord = new TzySysNoticeRecord();
-		noticeRecord.setFromUser("HOBBY STOCKS");
-		noticeRecord.setTitle(title);
-		noticeRecord.setToUserid(userId);
-		noticeRecord.setContentUrl(refUrl);
-		noticeRecord.setMsg(msg);
-		noticeRecord.setType(type);
-		noticeRecord.setSubType(type);
-		return noticeRecord;
-	}
-
-	private boolean checkUserIsNotify(String type, ToNoticeUserDTO noticeUserDTO, Integer merchantId) {
-		if ("PRIVATE_MERCHANT".equals(noticeUserDTO.getNotifyType())) {
-			JSONObject configJson = JSON.parseObject(noticeUserDTO.getNotifyConfig());
-			String merchantIds = configJson.getString("merchantIds");
-			if (StringUtils.isNotEmpty(merchantIds)) {
-				List<String> merchantIdList = Arrays.asList(merchantIds.split(","));
-				return merchantIdList.contains(merchantId.toString());
-			}
-		}
-		if ("live".equals(type) && "BUY".equals(noticeUserDTO.getNotifyType())) {
-			return false;
-		}
-		return true;
-	}
-
-
-}

+ 0 - 64
poyi-app/src/main/java/com/tzy/listener/mq/OrderAftAllocateConsumer.java

@@ -1,64 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.alibaba.fastjson2.JSONObject;
-import com.rabbitmq.client.Channel;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.common.utils.DateUtils;
-import com.tzy.dto.local.AllocateResult;
-import com.tzy.pojo.card.CardGroupOrderInfo;
-import com.tzy.sportcard.api.service.IAllocateGoodsService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.teasoft.bee.osql.SuidRich;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-
-
-@Slf4j
-@Component
-public class OrderAftAllocateConsumer {
-
-	@Autowired
-	private SuidRich suidRich;
-	@Resource
-	private IAllocateGoodsService allocateGoodsService;
-
-
-	@RabbitHandler
-	@RabbitListener(queuesToDeclare = @Queue(MqConstans.QUEUE_ORDER_AFT_ALLOCATE))
-	public void orderAftAllocateConsumer(String param, Channel channel, Message message) throws IOException {
-		orderAftAllocate(param);
-		channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-	}
-
-	private void orderAftAllocate(String param) {
-		log.info("同步用户中卡,参数:{}", param);
-		try {
-			AllocateResult result = JSONObject.parseObject(param, AllocateResult.class);
-			if (result.getOrderId() == null) {
-				return;
-			}
-			CardGroupOrderInfo order = new CardGroupOrderInfo();
-			order.setId(result.getOrderId());
-			CardGroupOrderInfo existOrder = suidRich.selectOne(order);
-			if (existOrder == null) {
-				return;
-			}
-			order.setGoodsAllocate(1);
-			order.setProp2(result.getGuessCount() > 0 ? result.getGuessCount().toString() : "0");
-			order.setProp3(result.getMissCardCount() > 0 ? result.getMissCardCount().toString() : "0");
-			order.setUpdateTime(DateUtils.getTimestampNow());
-			suidRich.update(order);
-			allocateGoodsService.aftAllocateOrderGoods(existOrder.getGroupInfoId());
-		} catch (Exception e) {
-			log.error("同步用户中卡异常,参数:{}", param, e);
-		}
-	}
-
-}

+ 0 - 113
poyi-app/src/main/java/com/tzy/listener/mq/OrderExpiredConsumer.java

@@ -1,113 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.alibaba.fastjson2.JSON;
-import com.rabbitmq.client.Channel;
-import com.tzy.app.domain.order.PayRecord;
-import com.tzy.common.constant.Constants;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.common.utils.DateUtils;
-import com.tzy.common.utils.StringUtils;
-import com.tzy.framework.util.RedisUtils;
-import com.tzy.member.benefits.mapper.MemberBenefitsRecordMapper;
-import com.tzy.service.MallOrderService;
-import com.tzy.sportcard.api.dto.ResourceData;
-import com.tzy.sportcard.api.service.GroupApiService;
-import com.tzy.sportcard.api.service.MineApiService;
-import com.tzy.sportcard.group.domain.CardGroupOrderInfo;
-import com.tzy.sportcard.group.service.ICardGroupOrderInfoService;
-import com.tzy.sportcard.point.domain.AppUserPointRecord;
-import com.tzy.system.service.ISysDictDataService;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.logging.log4j.util.Strings;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.amqp.rabbit.core.RabbitTemplate;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-
-
-@Slf4j
-@Component
-public class OrderExpiredConsumer {
-
-    @Autowired
-    private ICardGroupOrderInfoService cardGroupOrderInfoService;
-    @Autowired
-    private RedisUtils redisUtils;
-    @Autowired
-    private MallOrderService mallOrderService;
-    @Autowired
-    private GroupApiService groupApiService;
-    @Autowired
-    private MineApiService mineApiService;
-    @Resource
-    private MemberBenefitsRecordMapper memberBenefitsRecordMapper;
-    @Resource
-    private RabbitTemplate rabbitTemplate;
-    @Autowired
-    private ISysDictDataService dictDataService;
-
-    private static final List<String> no_search_pay_type = Arrays.asList("merchant_pay", "商家代收");
-
-    @RabbitHandler
-    @RabbitListener(queuesToDeclare = @Queue(MqConstans.QUEUE_ORDER_EXPIRED))
-    public void orderExpired(Long orderId, Channel channel, Message message) throws IOException {
-        //orderExpiredConsumer(orderId, channel, message);
-    }
-
-    private void pointCallBack(CardGroupOrderInfo orderInfo) {
-        ResourceData resourceData = new ResourceData();
-        ResourceData.PayAmount payAmount = new ResourceData.PayAmount();
-        payAmount.setTotal(0);
-        payAmount.setPayer_total(payAmount.getTotal());
-        //支付类型
-        resourceData.setTrade_type(dictDataService.getMerchantPointMsg(orderInfo.getPointType()));
-        resourceData.setSubPaymentType(orderInfo.getPointType());
-        resourceData.setOut_trade_no(orderInfo.getOrderNo());
-        resourceData.setTransaction_id(String.valueOf(System.currentTimeMillis()));
-        resourceData.setSuccess_time(DateUtils.dateTime(new Date()));
-        resourceData.setTrade_state("TRADE_SUCCESS");
-        resourceData.setTrade_state_desc("TRADE_SUCCESS");
-        resourceData.setBank_type(orderInfo.getPointType());
-        resourceData.setAmount(payAmount);
-        rabbitTemplate.convertAndSend(MqConstans.EXCHANGE_PRE_PAY_CALLBACK, MqConstans.ROUTING_KEY_PRE_CALLBACK, JSON.toJSONString(resourceData));
-        log.info("订单支付成功,开始回调:{}", orderInfo.getOrderNo());
-    }
-
-    private void cancelOrderByType(CardGroupOrderInfo orderInfo) {
-        if (Constants.ORDER_TYPE_SHOP.equals(orderInfo.getOrderType())) {
-            mallOrderService.cancelOrder(orderInfo);
-            // 如果是权益兑换订单  删除权益兑换记录
-            String prop3 = orderInfo.getProp3();
-            if (Constants.MEMBER_BENEFITS.equals(orderInfo.getOrderSubType()) && Strings.isNotEmpty(prop3)) {
-                // 根据权益兑换记录id删除权益兑换记录
-                memberBenefitsRecordMapper.deleteMemberBenefitsRecordById(Long.parseLong(prop3));
-            }
-        } else if (Constants.ORDER_TYPE_GIFT_CARD.equals(orderInfo.getOrderType())) {
-            mallOrderService.cancelDrawOrder(orderInfo);
-        } else if (Constants.ORDER_TYPE_DRAW.equals(orderInfo.getOrderType())) {
-            mallOrderService.cancelDrawOrderNew(orderInfo.getId());
-        } else if (Constants.ORDER_TYPE_GROUP.equals(orderInfo.getOrderType())) {
-            cardGroupOrderInfoService.cancelOrder(orderInfo);
-        } else {
-            mallOrderService.cancelDrawOrder(orderInfo);
-        }
-        //返回所有关联优惠劵
-        cardGroupOrderInfoService.returnCouponByOrderId(orderInfo.getId());
-        boolean isPointOrder = StringUtils.isNotEmpty(orderInfo.getPointType()) && orderInfo.getPointType().startsWith(Constants.POINT_TYPE_MERCHANT_ACT_PRE);
-        if (!isPointOrder) {
-            String pointType = StringUtils.isNotEmpty(orderInfo.getPointType()) ? orderInfo.getPointType() : Constants.POINT_TYPE_COMMON_RETURN;
-            //回退订单消耗积分
-            mineApiService.addUserPoint(orderInfo, true, pointType);
-        }
-    }
-}

+ 0 - 96
poyi-app/src/main/java/com/tzy/listener/mq/OrderOverConsumer.java

@@ -1,96 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.alibaba.fastjson2.JSON;
-import com.rabbitmq.client.Channel;
-import com.tzy.app.domain.order.OrderListDTO;
-import com.tzy.app.mapper.OrderListMapper;
-import com.tzy.common.constant.Constants;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.common.dto.act.OrderOverParam;
-import com.tzy.common.utils.bean.JSONTools;
-import com.tzy.sportcard.api.service.MineApiService;
-import com.tzy.sportcard.group.domain.CardGroupOrderInfo;
-import com.tzy.sportcard.group.mapper.CardGroupOrderInfoMapper;
-import com.tzy.sportcard.point.domain.AppUserPointRecord;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.util.List;
-
-
-/**
- * 订单完结消费
- * 消费者参数json格式:
- * type:类型,1:商城订单完结赠送积分 shop_point
- * orderId: 订单id
- */
-@Slf4j
-@Component
-public class OrderOverConsumer {
-
-	@Resource
-	private MineApiService mineApiService;
-	@Resource
-	private OrderListMapper orderListMapper;
-	@Resource
-	private CardGroupOrderInfoMapper cardGroupOrderInfoMapper;
-
-	@RabbitHandler
-	@RabbitListener(queues = {MqConstans.QUEUE_ORDER_OVER})
-	public void orderOverConsumer(String param, Channel channel, Message message) throws IOException {
-		log.info("订单完结记录:{}", param);
-		try {
-			OrderOverParam overParam = JSONTools.jsonStr2obj(param, OrderOverParam.class);
-			if(Constants.TYPE_SHOP_POINT.equals(overParam.getType())){
-				CardGroupOrderInfo order = cardGroupOrderInfoMapper.selectCardGroupOrderInfoById(overParam.getOrderId());
-				addOrderActPoint(order); // 加活动积分
-				addPointRecord(order, channel, message);// 商城积分、成长值
-			}
-		} catch (Exception e) {
-			log.error("订单完结异常,参数:{}", param, e);
-		}
-		channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-	}
-
-	private void addOrderActPoint(CardGroupOrderInfo order) {
-		List<OrderListDTO> actOrderLists = orderListMapper.selectListByOrderId(order.getId(),true);
-		if (CollectionUtils.isEmpty(actOrderLists)) {
-			return;
-		}
-
-		String actType = actOrderLists.get(0).getActType();
-		if (!actType.startsWith(Constants.POINT_TYPE_HB_ACT_OVER_PRE)) {
-			return;
-		}
-		Integer totalActPoint = actOrderLists.stream().filter(ol -> ol.getActPoint() != null).mapToInt(OrderListDTO::getActPoint).sum();
-		AppUserPointRecord pointRecord = mineApiService.buildOrderActPointRecord(order, totalActPoint, actType);
-		mineApiService.addUserPoint(pointRecord);
-	}
-
-	private void addPointRecord(CardGroupOrderInfo order, Channel channel, Message message) throws IOException {
-		if(13 != order.getMerchantId() || order.getGiveOrderId() != null) {	// 不是YYDS商家 或者是精美卡片不赠送成长值
-			return;
-		}
-		BigDecimal refundFree = order.getRefundFee() == null ? BigDecimal.ZERO : order.getRefundFee();
-		BigDecimal amount=order.getActualPayment().subtract(refundFree);
-		if (amount.compareTo(BigDecimal.ZERO) != 1) {
-			return;
-		}
-		/*if(Constants.GROUP_SALE_MERCHANT_IDS.contains(orderInfos.getMerchantId())) { // 排除生态购商家
-			return;
-		}*/
-		Integer points = (amount.multiply(new BigDecimal(100))).intValue();
-		order.setPoint(points);
-		mineApiService.addUserPoint(order, true, Constants.POINT_TYPE_USER_GROWTH);
-		mineApiService.addUserPoint(order, true, Constants.POINT_TYPE_GOODS);
-		channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-	}
-
-}

+ 0 - 94
poyi-app/src/main/java/com/tzy/listener/mq/OrderPayConsumer.java

@@ -1,94 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.rabbitmq.client.Channel;
-import com.tzy.app.dto.mq.OrderGoodsParam;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.framework.util.RedisUtils;
-import com.tzy.sportcard.api.service.GroupApiService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.jdbc.datasource.DataSourceTransactionManager;
-import org.springframework.transaction.TransactionDefinition;
-import org.springframework.transaction.TransactionStatus;
-import org.springframework.transaction.support.DefaultTransactionDefinition;
-
-import java.io.IOException;
-import java.util.concurrent.TimeUnit;
-
-
-/**
- * 放弃执行
- * @author po'yi
- */
-@Slf4j
-//@Component
-public class OrderPayConsumer {
-    @Autowired
-    private GroupApiService groupApiService;
-    @Autowired
-    private DataSourceTransactionManager transactionManager;
-    @Autowired
-    private RedisUtils redisUtils;
-
-    private boolean assignCardGoods(OrderGoodsParam goodsParam){
-        String lockKey = "order_goods_lock_key" + goodsParam.getGroupInfoId();
-        boolean isLock=false;
-        //1.获取事务定义
-        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
-        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
-        def.setIsolationLevel(2);
-        TransactionStatus status=null;
-        try {
-            isLock = redisUtils.tryLock(lockKey, TimeUnit.SECONDS, 10L, 31L);
-            if (isLock) {
-                status = transactionManager.getTransaction(def);
-                //groupApiService.assignCardGoods(goodsParam);
-                //groupApiService.updateInfoData(goodsParam);
-                transactionManager.commit(status);
-                redisUtils.unlock(lockKey);
-                return true;
-            }
-        } catch (Exception e) {
-            log.error("卡密分配异常,参数:{}",goodsParam, e);
-            if(status!=null){
-                transactionManager.rollback(status);
-            }
-        } finally {
-            try {
-                if(isLock){
-                    redisUtils.unlock(lockKey);
-                }
-            } catch (Exception e) {
-                log.error("卡密分配锁释放异常:{}", goodsParam, e);
-            }
-        }
-        log.info("卡密分配提前结束,获取锁状态:{},参数:{}",isLock,goodsParam);
-        return false;
-    }
-
-    /**
-     * 支付回调消费
-     * @param data
-     * @param channel
-     * @param message
-     * @throws IOException
-     */
-    @RabbitHandler
-    @RabbitListener(queuesToDeclare=@Queue(MqConstans.QUEUE_ORDER_PAY_CALLBACK))
-    public void orderPayCallBack(OrderGoodsParam data, Channel channel, Message message) throws IOException {
-        try {
-            if(assignCardGoods(data)){
-                channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-                return;
-            }
-        } catch (Exception e) {
-            log.error("卡密分配消费失败,{}",data.toString(),e);
-        }
-        //失败后消息放回
-        channel.basicReject(message.getMessageProperties().getDeliveryTag(), true);
-    }
-}

+ 0 - 99
poyi-app/src/main/java/com/tzy/listener/mq/OrderSuccessConsumer.java

@@ -1,99 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.rabbitmq.client.Channel;
-import com.tzy.app.dto.mq.OrderSuccessParam;
-import com.tzy.common.constant.Constants;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.coupon.card.domain.AppUserCardRecord;
-import com.tzy.coupon.card.domain.TzyCardBaseInfo;
-import com.tzy.coupon.card.mapper.AppUserCardRecordMapper;
-import com.tzy.coupon.card.mapper.TzyCardBaseInfoMapper;
-import com.tzy.sportcard.api.service.AsyncAppService;
-import com.tzy.sportcard.group.domain.CardGroupOrderInfo;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.logging.log4j.util.Strings;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.jdbc.datasource.DataSourceTransactionManager;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.TransactionDefinition;
-import org.springframework.transaction.TransactionStatus;
-import org.springframework.transaction.support.DefaultTransactionDefinition;
-import org.springframework.util.CollectionUtils;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-import java.util.List;
-import java.util.stream.Collectors;
-
-
-@Slf4j
-@Component
-public class OrderSuccessConsumer {
-
-    @Autowired
-    private AsyncAppService asyncAppService;
-    @Autowired
-    private DataSourceTransactionManager transactionManager;
-    @Resource
-    private AppUserCardRecordMapper appUserCardRecordMapper;
-
-
-    private boolean orderPaySuccess(OrderSuccessParam param) {
-        //1.获取事务定义
-        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
-        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
-        def.setIsolationLevel(2);
-        TransactionStatus status = null;
-        try {
-            status = transactionManager.getTransaction(def);
-            //asyncAppService.orderPaySuccess(param.getOrderInfo(), param.getCardGroupInfo());
-            transactionManager.commit(status);
-            //expireUserFirstCoupon(param.getOrderInfo());
-            return true;
-        } catch (Exception e) {
-            log.error("订单异步执行错误,参数:{}", param, e);
-            if (status != null) {
-                transactionManager.rollback(status);
-            }
-        }
-        return false;
-    }
-
-    public void expireUserFirstCoupon(CardGroupOrderInfo cardGroupOrderInfo){
-        // 如果有首单券,未使用
-        Long userId = cardGroupOrderInfo.getUserId();
-        List<AppUserCardRecord> appUserCardRecordList = appUserCardRecordMapper.getUserFirstCoupons(userId);
-        if(CollectionUtils.isEmpty(appUserCardRecordList)) {
-            String orderType = cardGroupOrderInfo.getOrderType();
-            if (Constants.ORDER_TYPE_GROUP.equals(orderType)) {
-                // 拼团首单券未使用自动过期
-                List<Long> expireCardIds = appUserCardRecordList.stream()
-                        .filter(record -> Constants.COUPON_TYPE_CARD.equals(record.getUseScope()))
-                        .map(AppUserCardRecord::getId)
-                        .collect(Collectors.toList());
-                if (!CollectionUtils.isEmpty(expireCardIds)) {
-                    appUserCardRecordMapper.expireUserCardRecord(expireCardIds);
-                }
-            } else if (Constants.ORDER_TYPE_SHOP.equals(orderType)) {
-                // 商城首单券未使用自动过期
-                List<Long> expireGoodsIds = appUserCardRecordList.stream()
-                        .filter(record -> Constants.COUPON_TYPE_GOODS.equals(record.getSourceType()))
-                        .map(AppUserCardRecord::getId)
-                        .collect(Collectors.toList());
-                if (!CollectionUtils.isEmpty(expireGoodsIds)) {
-                    appUserCardRecordMapper.expireUserCardRecord(expireGoodsIds);
-                }
-            }
-        }
-    }
-    @RabbitHandler
-    @RabbitListener(queuesToDeclare = @Queue(MqConstans.QUEUE_ORDER_SUCCESS))
-    public void orderPaySuccessConsumer(OrderSuccessParam param, Channel channel, Message message) throws IOException {
-        orderPaySuccess(param);
-        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-    }
-}

+ 0 - 45
poyi-app/src/main/java/com/tzy/listener/mq/PayPreCallBackConsumer.java

@@ -1,45 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson2.JSON;
-import com.rabbitmq.client.Channel;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.sportcard.api.dto.ResourceData;
-import com.tzy.sportcard.api.service.AsyncAppService;
-import com.tzy.sportcard.api.service.GroupApiService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.amqp.rabbit.core.RabbitTemplate;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-
-
-@Slf4j
-@Component
-public class PayPreCallBackConsumer {
-    @Autowired
-    private GroupApiService groupApiService;
-    @Resource
-    private AsyncAppService asyncAppService;
-
-
-    /**
-     * 回调前置消费
-     * @param data
-     * @param channel
-     * @param message
-     * @throws IOException
-     */
-    @RabbitHandler
-    @RabbitListener(queuesToDeclare=@Queue(MqConstans.QUEUE_PRE_PAY_CALLBACK))
-    public void payPreCallBack(String data, Channel channel, Message message) throws IOException {
-        //payCallBackConsumer(data, channel, message);
-    }
-
-}

+ 0 - 34
poyi-app/src/main/java/com/tzy/listener/mq/SuperLuckyBagConsumer.java

@@ -1,34 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.rabbitmq.client.Channel;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.common.utils.bean.JSONTools;
-import com.tzy.luckybag.dto.LuckyBagMQDTO;
-import com.tzy.luckybag.service.IAppLiveLuckyBagService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-
-/**
- * 超级福袋开奖
- */
-@Slf4j
-@Component
-public class SuperLuckyBagConsumer {
-    @Resource
-    private IAppLiveLuckyBagService appLiveLuckyBagService;
-
-    @RabbitHandler
-    @RabbitListener(queues = MqConstans.QUEUE_SUPER_LUCK_BAG_EXPIRED)
-    public void superBagConsumer(String content, Channel channel, Message message)throws IOException {
-        log.info("超级福袋开奖 {}", content);
-        LuckyBagMQDTO luckyBagMQDTO = JSONTools.jsonStr2obj(content, LuckyBagMQDTO.class);
-        appLiveLuckyBagService.superBagLottery(luckyBagMQDTO);
-        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-    }
-}

+ 0 - 50
poyi-app/src/main/java/com/tzy/listener/mq/TestMqConsumer.java

@@ -1,50 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.rabbitmq.client.Channel;
-import com.tzy.app.dto.mq.TestParam;
-import com.tzy.common.constant.MqConstans;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.stereotype.Component;
-
-import java.io.IOException;
-
-
-@Slf4j
-@Component
-public class TestMqConsumer {
-
-
-    @RabbitHandler
-    @RabbitListener(queuesToDeclare=@Queue(MqConstans.TEST_QUEUE))
-    public void testMqConsumer(TestParam data, Channel channel, Message message) throws IOException {
-        log.info("test111收到消息:{}",data.toString());
-        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-    }
-
-    //@RabbitHandler
-    //@RabbitListener(queuesToDeclare=@Queue(MqConstans.TEST_QUEUE+2))
-    //public void testMqConsumer2(TestParam data, Channel channel, Message message) throws IOException {
-    //    log.info("test2222收到消息:{}",data.toString());
-    //    channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-    //}
-
-
-    // @RabbitHandler
-    // @RabbitListener(queuesToDeclare=@Queue("TestDirectQueueV2"))
-    // public void testMqConsumerV2(String data, Channel channel, Message message) throws IOException {
-    //     log.info("TestDirectQueueV2收到消息:{}",data);
-    //     channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-    // }
-    //
-    // @RabbitHandler
-    // @RabbitListener(queuesToDeclare=@Queue("TestDirectQueueV3"))
-    // public void testMqConsumerV3(String data, Channel channel, Message message) throws IOException {
-    //     log.info("TestDirectQueueV3收到消息:{}",data);
-    //     channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-    // }
-
-}

+ 0 - 83
poyi-app/src/main/java/com/tzy/listener/mq/UserInviteCodeConsumer.java

@@ -1,83 +0,0 @@
-//package com.tzy.listener.mq;
-//
-//import com.alibaba.fastjson.JSONObject;
-//import com.alibaba.fastjson2.JSON;
-//import com.rabbitmq.client.Channel;
-//import com.tzy.base.dto.DictBaseDto;
-//import com.tzy.base.service.SysBaseService;
-//import com.tzy.common.constant.Constants;
-//import com.tzy.common.constant.MqConstans;
-//import com.tzy.common.core.domain.entity.SysDictData;
-//import com.tzy.common.exception.ServiceException;
-//import com.tzy.coupon.card.service.IAppUserCardRecordService;
-//import com.tzy.sportcard.api.bean.act.UserListActParam;
-//import com.tzy.sportcard.api.service.GroupApiService;
-//import com.tzy.sportcard.base.service.CommonCacheService;
-//import com.tzy.sportcard.group.service.AppActService;
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.amqp.core.Message;
-//import org.springframework.amqp.rabbit.annotation.Queue;
-//import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-//import org.springframework.amqp.rabbit.annotation.RabbitListener;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.stereotype.Component;
-//
-//import javax.annotation.Resource;
-//import java.io.IOException;
-//import java.util.List;
-//
-//@Slf4j
-//@Component
-//public class UserInviteCodeConsumer {
-//        @Autowired
-//        private IAppUserCardRecordService appUserCardRecordService;
-//        @Resource
-//        private CommonCacheService commonCacheService;
-//        @Resource
-//        private GroupApiService groupApiService;
-//        @Resource
-//        private AppActService appActService;
-//        @Autowired
-//        private SysBaseService sysBaseService;
-//        @RabbitHandler
-//        @RabbitListener(queuesToDeclare = @Queue(MqConstans.QUEUE_USER_INVITE_CODE))
-//        public void userListActConsumer(String data, Channel channel, Message message) throws IOException {
-//            log.info("用户邀请码绑定消费:{}", data);
-//            try {
-//                //从data 的json结构解析出userId inviteCode parentUserId
-//                JSONObject sendData = JSONObject.parseObject(data);
-//                Long userId = sendData.getLong("userId");
-//                String inviteCode = sendData.getString("inviteCode");
-//                Long parentUserId = sendData.getLong("parentUserId");
-//                //查询数据字典 从中拿到商家邀请码配置的优惠券 并且发送给用户
-//
-//                List<SysDictData> sysDictDatas = commonCacheService.getCommonDictData(Constants.DICT_TYPE_INVITE_CODE,
-//                        null,"1", null, -1);
-//                //遍历优惠券列表  找到用户邀请的优惠券
-//                String couponDetail = null;
-//                String couponRemark = null;
-//                for (SysDictData sysDictData : sysDictDatas) {
-//                    if (sysDictData.getDictLabel().equals(inviteCode)) {
-//                        couponDetail = sysDictData.getDictValue();
-//                        couponRemark = sysDictData.getRemark();
-//                        JSONObject couponJson = JSONObject.parseObject(couponDetail);
-//                        Integer couponId = couponJson.getInteger("couponId");
-//                        Integer couponCount = couponJson.getInteger("couponCount");
-//                        int count = appUserCardRecordService.selectAppUserCardRecordCount(couponId.longValue());
-//                        if(count >= couponCount) {
-//                            log.error("用户{}绑定优惠券{}失败,优惠券不够", userId, inviteCode);
-//                            //throw new ServiceException("来晚了");
-//                        }else{
-//                            appUserCardRecordService.addUserCoupon(couponId, userId.intValue(), couponRemark, couponId.longValue(), Constants.DICT_TYPE_INVITE_CODE);
-//                            log.info("用户{}绑定邀请码{}成功", userId, inviteCode);
-//                        }
-//                    }
-//                }
-//
-//            } catch (Exception e) {
-//                log.error("用户邀请码绑定消费异常:{}", data, e);
-//            }
-//            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-//        }
-//
-//    }

+ 0 - 49
poyi-app/src/main/java/com/tzy/listener/mq/UserListActConsumer.java

@@ -1,49 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.alibaba.fastjson2.JSON;
-import com.rabbitmq.client.Channel;
-import com.tzy.common.constant.Constants;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.sportcard.api.bean.act.UserListActParam;
-import com.tzy.sportcard.api.service.GroupApiService;
-import com.tzy.sportcard.group.service.AppActService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-
-
-@Slf4j
-@Component
-public class UserListActConsumer {
-	@Resource
-	private GroupApiService groupApiService;
-	@Resource
-	private AppActService appActService;
-
-	@RabbitHandler
-	@RabbitListener(queuesToDeclare = @Queue(MqConstans.QUEUE_USER_LIST_ACT))
-	public void userListActConsumer(String data, Channel channel, Message message) throws IOException {
-		log.info("panini_list收集活动开始:{}", data);
-		try {
-			UserListActParam listActParam = JSON.parseObject(data, UserListActParam.class);
-			if(appActService.isActSend(Constants.ORDER_TYPE_GROUP,listActParam.getGroupInfoId().intValue(), Constants.COLLECT_PANINI_ACT)){
-				log.info("活动已存在记录:{}",data);
-				return;
-			}
-			groupApiService.buildUserListActRecord(listActParam);
-			appActService.addActRecord(Constants.ORDER_TYPE_GROUP,listActParam.getGroupInfoId().intValue(), Constants.COLLECT_PANINI_ACT);
-		} catch (Exception e) {
-			log.error("panini list活动消费异常:{}", data, e);
-		}
-		channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-	}
-
-
-
-}

+ 0 - 49
poyi-app/src/main/java/com/tzy/listener/mq/UserPointConsumer.java

@@ -1,49 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.rabbitmq.client.Channel;
-import com.tzy.common.constant.Constants;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.sportcard.api.service.MineApiService;
-import com.tzy.sportcard.point.domain.AppUserPointRecord;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.io.IOException;
-
-
-@Slf4j
-@Component
-public class UserPointConsumer {
-
-    @Autowired
-    private MineApiService mineApiService;
-
-    @RabbitHandler
-    @RabbitListener(queuesToDeclare = @Queue(MqConstans.QUEUE_USER_POINT))
-    public void addPointRecord(AppUserPointRecord pointRecord, Channel channel, Message message) throws IOException {
-        userPointConsumer(pointRecord, channel, message);
-    }
-
-    private void userPointConsumer(AppUserPointRecord pointRecord, Channel channel, Message message) throws IOException {
-        try {
-            mineApiService.addUserPoint(pointRecord);
-            /*if(Constants.POINT_TYPE_GOODS.equals(pointRecord.getType())){
-                pointRecord.setType(Constants.POINT_TYPE_USER_GROWTH);
-                mineApiService.addUserPoint(pointRecord);
-            }*/
-        } catch (Exception e) {
-            log.info("积分记录添加异常,参数:{}", pointRecord, e);
-        }
-        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-    }
-
-
-
-
-
-}

+ 0 - 51
poyi-app/src/main/java/com/tzy/listener/mq/UserPointJsonConsumer.java

@@ -1,51 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.alibaba.fastjson2.JSON;
-import com.rabbitmq.client.Channel;
-import com.tzy.common.constant.Constants;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.sportcard.api.service.MineApiService;
-import com.tzy.sportcard.point.domain.AppUserPointRecord;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.io.IOException;
-
-
-@Slf4j
-@Component
-public class UserPointJsonConsumer {
-
-    @Autowired
-    private MineApiService mineApiService;
-
-    @RabbitHandler
-    @RabbitListener(queuesToDeclare = @Queue(MqConstans.QUEUE_USER_POINT_JSON))
-    public void addPointRecord(String pointRecordStr, Channel channel, Message message) throws IOException {
-        userPointConsumer(pointRecordStr, channel, message);
-    }
-
-    private void userPointConsumer(String pointRecordStr, Channel channel, Message message) throws IOException {
-        try {
-            AppUserPointRecord pointRecord = JSON.parseObject(pointRecordStr, AppUserPointRecord.class);
-            mineApiService.addUserPoint(pointRecord);
-            if(Constants.POINT_TYPE_GOODS.equals(pointRecord.getType())){
-                pointRecord.setType(Constants.POINT_TYPE_USER_GROWTH);
-                mineApiService.addUserPoint(pointRecord);
-            }
-        } catch (Exception e) {
-            log.info("积分记录添加异常,参数:{},异常", pointRecordStr, e);
-        }
-        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-    }
-
-
-
-
-
-}

+ 0 - 54
poyi-app/src/main/java/com/tzy/listener/mq/UserWinCardConsumer.java

@@ -1,54 +0,0 @@
-package com.tzy.listener.mq;
-
-import com.alibaba.fastjson2.JSONObject;
-import com.rabbitmq.client.Channel;
-import com.tzy.common.constant.Constants;
-import com.tzy.common.constant.MqConstans;
-import com.tzy.common.dto.group.SyncUserWinCardDTO;
-import com.tzy.framework.util.RedisUtils;
-import com.tzy.sportcard.api.service.IAppUserWinCardService;
-import com.tzy.sportcard.api.service.ICardReportService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-
-
-/**
- * es 卡密数据同步
- */
-@Slf4j
-@Component
-public class UserWinCardConsumer {
-	@Resource
-	private IAppUserWinCardService appUserWinCardService;
-	@Resource
-	private RedisUtils redisUtils;
-
-	@RabbitHandler
-	@RabbitListener(queuesToDeclare = @Queue(MqConstans.QUEUE_SYNC_USER_WIN_CARD))
-	public void syncUserWinCardConsumer(String param, Channel channel, Message message) throws IOException {
-		log.info("同步用户中卡,参数:{}", param);
-		String key="win_card_count_" + param;
-		long count = redisUtils.incr(key, 1);
-		redisUtils.expire(key, 30);
-		try {
-			SyncUserWinCardDTO syncParam = JSONObject.parseObject(param, SyncUserWinCardDTO.class);
-			if (Constants.ORDER_TYPE_GROUP.equals(syncParam.getType())) {
-				appUserWinCardService.syncGroupWindCard(syncParam.getIds());
-			} else {
-				appUserWinCardService.syncShopOrderWindCard(syncParam.getIds());
-			}
-			channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-		} catch (Exception e) {
-			log.error("同步用户中卡异常,参数:{}", param, e);
-			channel.basicAck(message.getMessageProperties().getDeliveryTag(), count<3);
-		}
-	}
-
-}

+ 59 - 0
poyi-app/src/main/resources/application-druid.yml

@@ -0,0 +1,59 @@
+# 数据源配置
+spring:
+    datasource:
+        type: com.alibaba.druid.pool.DruidDataSource
+        driverClassName: org.postgresql.Driver
+        druid:
+            # 主库数据源
+            master:
+              username: postgres
+              password: 123456
+              url: jdbc:postgresql://192.168.50.8:5432/ahx_app
+            # 初始连接数
+            initialSize: 5
+            # 最小连接池数量
+            minIdle: 10
+            # 最大连接池数量
+            maxActive: 20
+            # 配置获取连接等待超时的时间
+            maxWait: 60000
+            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+            timeBetweenEvictionRunsMillis: 60000
+            # 配置一个连接在池中最小生存的时间,单位是毫秒
+            minEvictableIdleTimeMillis: 300000
+            # 配置一个连接在池中最大生存的时间,单位是毫秒
+            maxEvictableIdleTimeMillis: 900000
+            # 配置检测连接是否有效
+            validationQuery: SELECT 1
+            # 检测连接超时时间(ms)
+            validationQueryTimeout: 200
+            testWhileIdle: true
+            testOnBorrow: false
+            testOnReturn: false
+            removeAbandoned: false
+            logAbandoned: false
+            webStatFilter:
+                enabled: false
+            statViewServlet:
+                enabled: true
+                # 设置白名单,不填则允许所有访问
+                allow:
+                url-pattern: /druid/*
+                # 控制台管理用户名和密码
+                login-username:
+                login-password:
+            filter:
+                stat:
+                    enabled: true
+                    # 慢SQL记录
+                    log-slow-sql: true
+                    slow-sql-millis: 1000
+                    merge-sql: true
+                wall:
+                    config:
+                        multi-statement-allow: true
+knife4j:
+  enable: true
+  setting:
+    language: zh-CN
+  production: false #是否生产环境

+ 209 - 0
poyi-app/src/main/resources/application-prod.yml

@@ -0,0 +1,209 @@
+# 项目相关配置
+tzy:
+  # 名称
+  name: TzyTms
+  # 版本
+  version: 4.5.0
+  # 版权年份
+  copyrightYear: 2019
+  # 实例演示开关
+  demoEnabled: true
+  # 文件路径 示例( Windows配置D:/tzy/uploadPath,Linux配置 /home/tzy/uploadPath)
+  profile: /tmp
+#  profile: F:/tomcat/card/uploadPath
+  # 获取ip地址开关
+  addressEnabled: false
+  #版本
+  app-version: prod
+
+#Forest
+forest:
+  #bean-id: config0 # 在spring上下文中bean的id(默认为 forestConfiguration)
+  #backend: okhttp3 # 后端HTTP框架(默认为 okhttp3)
+  #max-connections: 1000 # 连接池最大连接数(默认为 500)
+  #max-route-connections: 500 # 每个路由的最大连接数(默认为 500)你这
+  timeout: 30000 # 请求超时时间,单位为毫秒(默认为 3000)
+  connect-timeout: 30000 # 连接超时时间,单位为毫秒(默认为 timeout)
+  read-timeout: 300000 # 数据读取超时时间,单位为毫秒(默认为 timeout)
+  #max-retry-count: 0 # 请求失败后重试次数(默认为 0 次不重试)
+  #ssl-protocol: SSLv3 # 单向验证的HTTPS的默认SSL协议(默认为 SSLv3)
+  #logEnabled: true # 打开或关闭日志(默认为 true)
+  #log-request: true # 打开/关闭Forest请求日志(默认为 true)
+  #log-response-status: true # 打开/关闭Forest响应状态日志(默认为 true)
+  #log-response-content: true # 打开/关闭Forest响应内容日志(默认为 false)
+
+# 开发环境配置
+server:
+  # 服务器的HTTP端口,默认为80
+  port: 80
+  tomcat:
+    # tomcat的URI编码
+    uri-encoding: UTF-8
+    # tomcat最大线程数,默认为200
+    max-threads: 800
+    # Tomcat启动初始化的线程数,默认值25
+    min-spare-threads: 30
+    #超时时间
+    connection-timeout: 600000
+    basedir: /tmp/logs
+    accesslog:
+      enabled: true
+      buffered: true
+      prefix: access_log
+      file-date-format: .yyyy-MM-dd
+
+
+# 日志配置
+logging:
+  console.enabled: ${CONSOLE_ENABLED:true}
+  file.enabled: ${FILE_ENABLED:false}
+  level:
+    com.tzy: info
+    org.springframework: warn
+  fluentd:
+    enabled: ${FLUENTD_ENABLED:false}
+    host: ${FLUENTD_HOST:127.0.0.1}
+    port: ${FLUENTD_PORT:24225}
+
+# 用户配置
+user:
+  password:
+    # 密码错误{maxRetryCount}次锁定10分钟
+    maxRetryCount: 5
+
+# Spring配置
+spring:
+  jackson:
+    time-zone: GMT+8
+    date-format: yyyy-MM-dd HH:mm:ss
+  profiles:
+    active: druid
+  # 文件上传
+  servlet:
+     multipart:
+       # 单个文件大小
+       max-file-size:  50MB
+       # 设置总上传的文件大小
+       max-request-size:  50MB
+  # 服务模块
+  devtools:
+    restart:
+      # 热部署开关
+      enabled: true
+  redis:
+      database: 1
+      host: ${REDIS_HOST:172.29.19.234}
+      #host: hobbystock.cn
+      port: ${REDIS_PORT:6379}
+      password: #Pass2021    # 密码(默认为空)
+      timeout: 60000  # 连接超时时长(毫秒)
+      pool:
+        max-active: 1000  # 连接池最大连接数(使用负值表示没有限制)
+        max-wait: -1ms    # 连接池最大阻塞等待时间(使用负值表示没有限制)
+        max-idle: 10      # 连接池中的最大空闲连接
+        min-idle: 5       # 连接池中的最小空闲连接
+# MyBatis
+mybatis:
+    # 搜索指定包别名
+    typeAliasesPackage: com.tzy.**.domain
+    # 配置mapper的扫描,找到所有的mapper.xml映射文件
+    mapperLocations: classpath*:mapper/**/*Mapper.xml
+    # 加载全局的配置文件
+    configLocation: classpath:mybatis/mybatis-config.xml
+
+# PageHelper分页插件
+pagehelper:
+  helperDialect: postgresql
+  reasonable: true
+  supportMethodsArguments: true
+  params: count=countSql
+
+# Swagger配置
+swagger:
+  # 是否开启swagger
+  enabled: false
+
+pay:
+  #微信支付
+  wxpay:
+    app:
+      appID: wx8ee47a255776f241
+      appletID: wx8ee47a255776f241
+      thirdAndriID: wx22a7349c29e688d4
+      mchID: 1620428472 #1618054254 #1612475613
+      key: 49F1947DC77ABDDEA204544FC2DB4246F2EB7A0C #cA0aI2eN0bB0eD2fC6tB4kB3aF4fD188 #123456789123456789123456789abcdd
+      #微信商户平台下载的安全证书存放路径
+      certPath: /app/configs/apiclient_cert.p12
+      #微信支付成功的回调地址
+      payNotifyUrl: https://m2.hobbystocks.cn/api/wx/paymentBack
+      #微信退款结果回调地址
+      refundNotifyUrl: https://m2.hobbystocks.cn/api/wx/refundBack
+  alipay:
+    app:
+      appId: 2021002181669560
+      privateKey:
+      alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgCIKpTwnnPm2D1IsMlTvuCq3WBAZKm8IaUqR/IxqQAzwEVuW0+lf6Ririm4PLNcU5eZXK7w+oHqi23b7rL5htqz1K0/q/oBHEeAliCNX+zMr+6sTBN33i5yX/buvVmBPGJJg791lFdnnnELGqZf+nQrJBlOAW/aCVTga7hcf8CH/ZRDboExzf9zK5N6qcxKexsgXZRZso+d47DcAj3sF1lAcYQvTAOG+aJRcwBFFOrb3QYZI1WLOZdjq3kdhXUuVrR8HhQ68BRIvfJGX7Hwy4Ffmb9hD/ljkT1S6+jzslMp3cMbU4IlJPF0o9xxCz4KWiW0pWhwQTolNVqW3GyHG2wIDAQAB
+      privateKeyPath: /app/configs/privatekey.txt
+      #支付宝支付成功的回调地址
+      payNotifyUrl: https://m2.hobbystocks.cn/api/ali/paymentBack
+      refundNotifyUrl: https://m2.hobbystocks.cn/api/ali/refundBack
+  hm:
+    app:
+      hmPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCkByRMw/sL8tg38lrGi4JFXFR/jrphyyj3LYHYYnTQj3dl+w4JUysgE7cE7FxEfxMkuM3efv6HeMP0vIsYBrS7EXvVB9vm/HH7QcpvqCfUOLhe4ugaDqfKz9/2BQinieiSRy8gRnm5eadEZn42EtxnZ+s6PBPKeijrxz+JyvCR8QIDAQAB
+      publicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJBww/AEqKfofkDGP+EkIKC5r4oHw93O6qFJ5QCnGgNMd5MC3q4Pyk6ImOjSj/OdRqTefRdWZUzcjlEPxMBLARa1wqKcdw4f2Wyxr+eT+VcJSQu5F8zWYjtNO+9BVwpKqJ4CXYPyZqY8fAx0urrd9opRkV0xpK3f/mlkgbgF+XvQIDAQAB
+      privateKeyPath: /app/configs/hmPrivatekey.txt
+      wxMchID: 480528577
+      app_id: 663101000155258
+      format: JSON
+      version: 1.0
+      storeId: 100001
+      #支付宝支付成功的回调地址
+      host:
+      payNotifyUrl: https://m2.hobbystocks.cn/api/hm/paymentBack
+      refundNotifyUrl: https://m2.hobbystocks.cn/api/hm/refundBack
+      returnUrl: https://m2.hobbystocks.cn/api/hm/refundBack
+      ghStaticUrl: https://hobby-6g7xp6r63e7767bb-1309590715.tcloudbaseapp.com/jump_mp.html
+
+# 防止XSS攻击
+xss:
+  # 过滤开关
+  enabled: true
+  # 排除链接(多个用逗号分隔)
+  excludes: /system/notice/*
+  # 匹配链接
+  urlPatterns: /system/*,/monitor/*,/tool/*,/base/*,/api/*
+
+wx:
+  default_avatar: https://static.public.hobbystock.cn/applet/share/share_logo2.png
+  applet:
+    lives:
+    # 直播认证二维码
+      authUrl: https://res.wx.qq.com/op_res/9rSix1dhHfK4rR049JL0PHJ7TpOvkuZ3mE0z7Ou_Etvjf-w1J_jVX0rZqeStLfwh
+#手机验证码
+phone:
+    verification_code_uri: https://coresvc-dev/api/verification/code/
+    verification_code_uri_hk: http://coresvc-dev/api/verification/code/hk/
+authenticate:
+    url: http://coresvc-dev/api/auth/
+#服务前缀路径
+coreService:
+  baseurl: http://coresvc
+  smsUrl: /api/reminder/live/on
+  appSmsUrl: /api/appmsg/live/on
+#物流
+express:
+  sf:
+    client_code: LSSWCkEipb #顾客编码
+    check_word: 98vtuFMv6FQabirYZ3LD0OhI1fspjc4Z #校验码
+    box_url: https://sfapi-sbox.sf-express.com/std/service #沙箱环境的地址
+    url: https://sfapi.sf-express.com/std/service #生产环境的地址
+  jd:
+    appkey: 76f41d301d75499f9a85f9603f535a26
+    appsecret: 44d5f413cebb406b867b4f5b3477b0af
+    redirect_uri: https://m-dev.hobbystocks.cn/api/home/jdAuth
+
+knife4j:
+  enable: true
+  setting:
+    language: zh-CN
+  production: true #是否生产环境

+ 209 - 1
poyi-app/src/main/resources/application.yml

@@ -181,7 +181,30 @@ spring:
         retry:
           enabled: true
           max-attempts: 1
-
+  flyway:
+    # 是否启用flyway
+    enabled: false
+    # 指定表
+    table: flyway_schema_history_app
+    # 禁止清理数据库表
+    clean-disabled: true
+    # 编码格式,默认UTF-8
+    encoding: UTF-8
+    # 迁移sql脚本文件存放路径,默认db/migration
+    locations: classpath:db/migration
+    # 迁移sql脚本文件名称的前缀,默认V
+    sql-migration-prefix: V
+    # 迁移sql脚本文件名称的分隔符,默认2个下划线__
+    sql-migration-separator: _
+    # 迁移sql脚本文件名称的后缀
+    sql-migration-suffixes: .sql
+    # 迁移时是否进行校验,默认true
+    validate-on-migrate: true
+    # 当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表
+    baseline-on-migrate: true
+    url: ${DB_URL:jdbc:postgresql://192.168.50.8:5432/ahx_app}
+    user: ${DB_USERNAME:postgres}
+    password: ${DB_PASSWORD:123456}
   mail:
     host: smtp.exmail.qq.com
     port: 465
@@ -216,6 +239,191 @@ pagehelper:
 swagger:
   # 是否开启swagger
   enabled: true
+pay:
+  #微信支付
+  wxpay:
+    app:
+      appID: wx8ee47a255776f241
+      appletID: wx8ee47a255776f241
+      thirdAndriID: wx22a7349c29e688d4
+      mchID: 1612475613
+      key: 123456789123456789123456789abcdd
+      #微信商户平台下载的安全证书存放路径
+      certPath: /home/tzy/wxpay/cert/apiclient_cert.p12
+      #微信支付成功的回调地址
+      payNotifyUrl: https://m2-dev.hobbystock.cn/py-app/api/wx/paymentBack
+      refundNotifyUrl: https://m2-dev.hobbystock.cn/py-app/api/wx/refundBack
+  alipay:
+    app:
+      #      appId: 2021002181641642
+      #      privateKey:
+      #      alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyFERiu5uSV4UZTsA2OMp/rPVcIq2ggtLSWXMzOwwJDrZBTM1XCL+j6CbRjU9gaEbFFwPPb7Qt1AQMV6YaXh0uyDubI+53PHwDF6UgpDNAo9tQI8amMf+xyB7+w1hPZwIItc7nS5ABWvZ1nEOuj9xoAXo5MmibFYkcCu42tvmwCc0bVwDuBMHmh595QPZPf1r11qVLBTeUOOeWP6m0nZckLQJxuTDW55i76OGRyllM5VEJACv7X8gxlE3x90nwRQO6KQxRdG9UcTQKQTYEnQVDrDs8ePfJ8N1GktYBkgA6Cc1iQhA4Ttqe7y9bLpu58KrG7kZHaj4iVnZm64/TU3LkQIDAQAB
+      #      privateKeyPath: /home/tzy/alipay/privatekey.txt
+      # 生产
+      appId: 2021002181669560
+      privateKey:
+      alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgCIKpTwnnPm2D1IsMlTvuCq3WBAZKm8IaUqR/IxqQAzwEVuW0+lf6Ririm4PLNcU5eZXK7w+oHqi23b7rL5htqz1K0/q/oBHEeAliCNX+zMr+6sTBN33i5yX/buvVmBPGJJg791lFdnnnELGqZf+nQrJBlOAW/aCVTga7hcf8CH/ZRDboExzf9zK5N6qcxKexsgXZRZso+d47DcAj3sF1lAcYQvTAOG+aJRcwBFFOrb3QYZI1WLOZdjq3kdhXUuVrR8HhQ68BRIvfJGX7Hwy4Ffmb9hD/ljkT1S6+jzslMp3cMbU4IlJPF0o9xxCz4KWiW0pWhwQTolNVqW3GyHG2wIDAQAB
+      privateKeyPath: D:\java\poyi\privatekey.txt
+      #支付宝支付成功的回调地址
+      payNotifyUrl: https://m2-dev.hobbystocks.cn/py-app/api/ali/paymentBack
+      refundNotifyUrl: https://m2-dev.hobbystocks.cn/py-app/api/ali/refundBack
+    app1: #支付宝直连-备用1
+      # 生产
+      appId: 2021003126686832
+      privateKey:
+      alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl1uBO6TTbULTrIfNCErfTCSywYIJensWk7Rcsa4uMbvzQGYH/tL2rKwH+YaMeVkbZGFdVHGDn4NIzYTFjl+r0ePDreDzAntUOhH6vypHxh6MkIKszQPSAj1SR2y34WXkI2tCjmFHIhSIwpnz0le1DERa4MxgUPtfgGAPDOTEfPRW5tlNfIamPYdXOtaP7w6PBk7aq5+cW0zAsQJBIJrxOye9JCuXBUd78EyB8aBxXdgdjJ6cq0oW0jSqup5LHcZnl9xKAVzgEGnALHqmIBijArCE7+rxFtE40Vg6UqDE5bY5FqazkuZ7uoiJOg7oUcP4OqTz2MAQf8AMD/hQGw6llwIDAQAB
+      privateKeyPath: D:\java\poyi\hs\privatekey.txt
+      #支付宝支付成功的回调地址
+      payNotifyUrl: https://m2-dev.hobbystocks.cn/py-app/api/ali/paymentBack
+      refundNotifyUrl: https://m2-dev.hobbystocks.cn/py-app/api/ali/refundBack
+  hm:
+    app:
+      hmPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCkByRMw/sL8tg38lrGi4JFXFR/jrphyyj3LYHYYnTQj3dl+w4JUysgE7cE7FxEfxMkuM3efv6HeMP0vIsYBrS7EXvVB9vm/HH7QcpvqCfUOLhe4ugaDqfKz9/2BQinieiSRy8gRnm5eadEZn42EtxnZ+s6PBPKeijrxz+JyvCR8QIDAQAB
+      publicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJBww/AEqKfofkDGP+EkIKC5r4oHw93O6qFJ5QCnGgNMd5MC3q4Pyk6ImOjSj/OdRqTefRdWZUzcjlEPxMBLARa1wqKcdw4f2Wyxr+eT+VcJSQu5F8zWYjtNO+9BVwpKqJ4CXYPyZqY8fAx0urrd9opRkV0xpK3f/mlkgbgF+XvQIDAQAB
+      privateKeyPath: D:\java\poyi\pay\hm\privatekey.txt
+      wxMchID: 480528577
+      app_id: 663101000155258
+      format: JSON
+      version: 1.0
+      storeId: 100001
+      #支付宝支付成功的回调地址
+      host:
+      payNotifyUrl: https://m2-dev.hobbystock.cn/py-app/api/hm/paymentBack
+      refundNotifyUrl: https://m2-dev.hobbystock.cn/py-app/api/hm/refundBack
+      returnUrl: https://m.hobbystock.cn/py-app/api/hm/refundBack
+  qm:
+    app:
+      appid: 8a81c1bd7f93c875018045cd46d3075e
+      subAppId: wx22a7349c29e688d4
+      appKey: 40f65789bd064198a36430b4c0f12732
+      mid: 89831995399APPA #898340149000005 #商户号
+      tid: APPA0001 #'00000001' #终端号
+      msgSrcId: 13RZ #来源编号
+      #      msgUri: WWW.SHBRDZSW.COM #消息来源
+      privateKeyPath: D:\java\poyi\pay\qm\qmPrivatekeyProd.txt
+      instMid: APPDEFAULT #业务类型 (APP支付) 机构商户号
+      payFlag: P000001 #支付标记
+      refundFlag: R000002 #退款标记
+      #回调地址
+      payNotifyUrl: https://m2-dev.hobbystocks.cn/py-app/api/qm/paymentBack
+      refundNotifyUrl: https://m2-dev.hobbystocks.cn/py-app/api/qm/refundBack
+      showUrl:  #订单展示页面
+      sub_mid: 89831995399APPB #上海青藏电子商务有限公司,
+      sub_tid: APPB0001 #上海青藏电子商务有限公司,
+    # 全民资管
+    am:
+      ip: 180.169.95.129
+      userName: SHPYDZ_fan
+      pwd: aL1Jn$kg
+      merchantNo: SHPYDZ #商户集团编号 默认
+      businessUserNo: 89831995399APPA #企业用户号  默认
+      sub_businessUserNo: 89831995399APPB #企业用户号-划付入网商户号  默认
+      upPublicKeyPath: D:\java\poyi\pay\qm\am\pyPublicKey.cer #/home/tzy/qm/am/upPublicKey.cer #商户回盘验签公钥
+      upPrivateKeyPath: /home/tzy/qm/am/pyPrivateKey.pfx #/home/tzy/qm/am/upPrivateKey.pfx #商户加签私钥
+      upPrivateKeyPwd: 880615sandy #123456 #私钥密码
+      dwPublicKeyPath: D:\java\poyi\pay\qm\am\dwPublicKey-prod.cer #商户回盘验签公钥(生产)
+    #全民h5支付
+    h5:
+      appid: 8a81c1bd7f93c875018045cd46d3075e #10037e6f66f2d0f901672aa27d690006
+      subAppId: wx22a7349c29e688d4
+      appKey: 40f65789bd064198a36430b4c0f12732 #47ace12ae3b348fe93ab46cee97c6fde
+      mid_ali: 89831995399APPG #898201612345678 #用于支付宝和云闪付
+      mid_uac: #898310173992585 #用于银联在线无卡
+      mid_wxh5: #898340149000687 #用户h5微信小程序
+      tid: APPG0001 #88880001 #'00000001'
+      msgSrcId: 13RZ #1017 #来源编号
+      privateKeyPath: D:\java\poyi\pay\qm\qmPrivatekeyProd.txt
+      instMid: H5DEFAULT #业务类型 (H5支付)
+      payFlag: P000002 #支付标记
+      refundFlag: R000003 #退款标记
+      #回调地址
+      payNotifyUrl: https://m2-dev.hobbystocks.cn/py-app/api/qm/paymentBack
+      refundNotifyUrl: https://m2-dev.hobbystocks.cn/py-app/api/qm/refundBack
+      showUrl:  #订单展示页面
+  qm1:
+    app:
+      appid: 8a81c1bd7f93c875018045cd46d3075e
+      subAppId: wx22a7349c29e688d4
+      appKey: 40f65789bd064198a36430b4c0f12732
+      mid: 89831995399APPA #89831995399APPA
+      tid: APPA0001 #'00000001'
+      sub_mid: 89831995399APPB #89831995399APPA
+      sub_tid: APPB0001 #'00000001'
+      msgSrcId: 13RZ #来源编号
+      privateKeyPath: D:\java\poyi\pay\qm\qmPrivatekeyProd.txt
+      instMid: APPDEFAULT #业务类型 (APP支付)
+      payFlag: P000001 #支付标记
+      refundFlag: R000002 #退款标记
+      #回调地址
+      payNotifyUrl: https://m2-dev.hobbystocks.cn/api/qm/paymentBack
+      refundNotifyUrl: https://m2-dev.hobbystocks.cn/api/qm/refundBack
+      showUrl:  #订单展示页面
+  qm2:
+    app:
+      appid: 8a81c1bd7f93c875018045cd46d3075e
+      subAppId: wx22a7349c29e688d4
+      appKey: 40f65789bd064198a36430b4c0f12732
+      mid: 89831995399APPA #89831995399APPA
+      tid: APPA0001 #'00000001'
+      sub_mid: 89831995399APPC #89831995399APPA
+      sub_tid: APPC0001 #'00000001'
+      msgSrcId: 13RZ #来源编号
+      privateKeyPath: D:\java\poyi\pay\qm\qmPrivatekeyProd.txt
+      instMid: APPDEFAULT #业务类型 (APP支付)
+      payFlag: P000001 #支付标记
+      refundFlag: R000002 #退款标记
+      #回调地址
+      payNotifyUrl: https://m2-dev.hobbystocks.cn/api/qm/paymentBack
+      refundNotifyUrl: https://m2-dev.hobbystocks.cn/api/qm/refundBack
+      showUrl:  #订单展示页面
+
+  bf:
+    app:
+      format: JSON
+      appid: 818000802925 #814000473149 #商户在慧收钱的商户号,由慧收钱生成并下发
+      signType: RSA2
+      subMerchantNo: #门店编号
+      version: 1.0 #接口版本:1.0
+      privateKeyPath: D:\java\poyi\pay\bf\bfPrivateKey.pfx
+      privatePwd: 880615sandy
+      publicKeyPath: D:\java\poyi\pay\bf\bfPublicKey.cer
+      key: 7c16c26a6c5550289ab65e6a69e89ee1 #86a8eec5ae958e9948b7450439cc57e2
+      #回调页面
+      payNotifyUrl: https://m2-dev.hobbystocks.cn/py-app/api/bf/paymentBack #后端通知地址
+      refundNotifyUrl: https://m2-dev.hobbystocks.cn/py-app/api/bf/refundBack #后端通知地址
+      pageUrl: #前台通知地址
+  #汇付
+  hf:
+    app:
+      appid: app_db57e4cc-6324-430a-9ffc-dd836f412cb9
+      apiKey: api_live_62f4a9d5-905e-4d64-85f0-136a9c0620a5
+      apiMockKey: api_test_29708ffc-1d3f-4b24-8e7b-60073b138b9e
+      RSAPrivateKey: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIl2NugFoWa+HUk/xQyUx69u85pC7vbtZbtOWjD3Yqt6PnE7mT6B4GOf7lDYd4NrggzPaJ067yo8xv8GCNla+flP7KbRhbrp6h+U4L3NX32PQSvZJWjnGxUkOm+tDp3PfBPl48pf8/X7oocafn0ZGqZslNZh8/BTVJhwOi52G8i3AgMBAAECgYBPXbi/6BhTaOsh0rbj17cffHEcHQ859MFrDwcWBI+ssC0DVcTaCUTUYI/Jj+IZN+ZjnREqzs8t1N+UeRh83oE676Gl/+dQVgeQ7muugoCZ0FI7kEKsFQILSSXq0wAC7kfZJv3fVs3p9WEyjd9e90nWqO45vszAuCAijnIRV8vGeQJBALyvvgJGAGfMCqqFZdMdk9C+SEf8rjtuTezQzHOAw+kIYvyZZvmCeJRbYbZ7myoa6QaVquy52MSR2IDZyqPsQhUCQQC6gD++Gl/jhWsWejAl1VaMLq+sGQYtAp+rt5OQMAHebDnMgovoTjWXpLocDA0IPFNGuHjvsxN43J3OUOe1cC6bAkBN9D2IKuuX9pChiqNa6WlcYID0XMyO+S9wm4McZSKLcE+VFLuacfDnOinQfpjIeH21nrgTPWT1MVxFP7Wcq8tRAkEApIDhOL6s29RgK/hlJcnyyD2Z6LQ99U++JUoM1/7wdw+BP/najHMH5JWBL6IVkLEdR2EKE2wifdYjP8uvRiQIhwJABYPLM4gq099OjkyA9U0zm8bbKqFDQYdrRhmDUjUiojFw9QHlck7BcBc01PmUjg7TN5uBTWyTTJY7pOWtS7s6Ag==
+      RSAPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwN6xgd6Ad8v2hIIsQVnbt8a3JituR8o4Tc3B5WlcFR55bz4OMqrG/356Ur3cPbc2Fe8ArNd/0gZbC9q56Eb16JTkVNA/fye4SXznWxdyBPR7+guuJZHc/VW2fKH2lfZ2P3Tt0QkKZZoawYOGSMdIvO+WqK44updyax0ikK6JlNQIDAQAB
+      deviceId:
+      merchantKey: '00003489'
+      debug: true
+      prodMode: true
+      #回调
+      notify_url: https://m2-dev.hobbystocks.cn/api/hf/paymentBack #支付通知地址
+      reverseNotifyUrl: https://m2-dev.hobbystocks.cn/py-app/api/hf/reverseBack #撤销交易通知地址
+      refundNotifyUrl: https://m2-dev.hobbystocks.cn/py-app/api/hf/refundBack #退款通知地址
+    #钱包
+  recharge:
+    base: https://purchase-dev.hobbystocks.cn/pay/
+    wallet: https://purchase-dev.hobbystocks.cn/pay/api/v1/recharge/walletInfo #钱包余额
+    banks: https://purchase-dev.hobbystocks.cn/pay/api/v1/recharge/searchBindBanks #钱包银行卡列表
+    expend: https://bid-dev.auction.hobbystocks.cn/order/p1/api/order/rechargeExpendCallBack #钱包消费记录
+  server:
+    payType: https://bid-dev.auction.hobbystocks.cn/pay/p1/api/remotePayChannel/list #支付配置列表
+    unified: https://bid-dev.auction.hobbystocks.cn/pay/p1/v2/unified #下单
+    query: https://bid-dev.auction.hobbystocks.cn/pay/p1/query #查询
+    refund: https://bid-dev.auction.hobbystocks.cn/pay/p1/v2/refund #退款
+    readPay: https://bid-dev.auction.hobbystocks.cn/pay/p1/readPay #汇付创建支付对象
+    confirmPay: https://bid-dev.auction.hobbystocks.cn/pay/p1/confirmPay #汇付确认支付
+    bankList: https://bid-dev.auction.hobbystocks.cn/pay/p1/bankList #汇付确认支付
+
+
 
  #融云配置
 rongcloud:

+ 3 - 3
poyi-pojo/pom.xml

@@ -59,9 +59,9 @@
             <artifactId>jackson-databind</artifactId>
         </dependency>
         <dependency>
-            <groupId> org.springframework.boot </groupId>
-            <artifactId> spring-boot-configuration-processor </artifactId>
-            <optional> true </optional>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
         </dependency>
 
         <!-- MapStruct核心依赖 -->

+ 2 - 0
tzy-common/pom.xml

@@ -63,6 +63,7 @@
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
+            <version>3.18.0</version>
         </dependency>
 
 
@@ -94,6 +95,7 @@
         <dependency>
             <groupId>org.yaml</groupId>
             <artifactId>snakeyaml</artifactId>
+            <version>2.0</version>
         </dependency>
 
         <!-- servlet包 -->

+ 58 - 1
tzy-framework/pom.xml

@@ -30,7 +30,7 @@
         <dependency>
             <groupId>org.redisson</groupId>
             <artifactId>redisson</artifactId>
-            <version>3.5.0</version>
+            <version>3.22.0</version>
         </dependency>
         <!-- 验证码 -->
         <dependency>
@@ -54,6 +54,63 @@
             <artifactId>jjwt</artifactId>
             <version>0.9.0</version>
         </dependency>
+        <!--微信支付 -->
+        <dependency>
+            <groupId>com.github.wxpay</groupId>
+            <artifactId>wxpay-sdk</artifactId>
+            <version>0.0.3</version>
+        </dependency>
+        <!--支付宝支付-->
+        <dependency>
+            <groupId>com.alipay.sdk</groupId>
+            <artifactId>alipay-sdk-java</artifactId>
+            <version>4.16.50.ALL</version>
+        </dependency>
+        <!--河马付-->
+        <dependency>
+            <groupId>cn.com.sand</groupId>
+            <artifactId>hmpay-sdk</artifactId>
+            <version>1.1.4</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}/src/main/resources/lib/hmpay-sdk-1.1.4.jar</systemPath>
+        </dependency>
+        <!--汇付-->
+        <dependency>
+            <groupId>com.huifu.adapay</groupId>
+            <artifactId>adapay-core-sdk</artifactId>
+            <version>1.2.10</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}/src/main/resources/lib/adapay-core-sdk-1.2.10.jar</systemPath>
+        </dependency>
+        <dependency>
+            <groupId>com.huifu.adapay</groupId>
+            <artifactId>adapay-core-sdk-sources</artifactId>
+            <version>1.2.10</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}/src/main/resources/lib/adapay-core-sdk-1.2.10-sources.jar</systemPath>
+        </dependency>
+        <dependency>
+            <groupId>com.huifu.adapay</groupId>
+            <artifactId>adapay-java-sdk</artifactId>
+            <version>1.2.10</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}/src/main/resources/lib/adapay-java-sdk-1.2.10.jar</systemPath>
+        </dependency>
+        <dependency>
+            <groupId>com.huifu.adapay</groupId>
+            <artifactId>adapay-java-sdk-sources</artifactId>
+            <version>1.2.10</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}/src/main/resources/lib/adapay-java-sdk-1.2.10-sources.jar</systemPath>
+        </dependency>
+        <!--  银联商务-沈阳sdk     -->
+        <dependency>
+            <groupId>com.jeequan.jeepay</groupId>
+            <artifactId>pay-sdk-java</artifactId>
+            <version>1.5.0</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}/src/main/resources/lib/pay-sdk-java-1.5.0.jar</systemPath>
+        </dependency>
         <!--sftp-->
         <dependency>
             <groupId>org.lucee</groupId>

+ 30 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/Entity/MktInfoEntity.java

@@ -0,0 +1,30 @@
+/**
+ * 
+ */
+/**
+ * @author dasheng
+ * 分账明细
+ */
+package com.tzy.framework.pay.Entity;
+
+public class MktInfoEntity{	
+	String mktMerId;
+	String mktAmt;//营销金额,单位:分;
+	public String getMktMerId() {
+		return mktMerId;
+	}
+	public void setMktMerId(String mktMerId) {
+		this.mktMerId = mktMerId;
+	}
+	public String getMktAmt() {
+		return mktAmt;
+	}
+	public void setMktAmt(String mktAmt) {
+		this.mktAmt = mktAmt;
+	}
+	@Override
+	public String toString() {
+		return "MktInfoEntity [mktMerId=" + mktMerId + ", mktAmt=" + mktAmt + "]";
+	}
+	
+}

+ 25 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/Entity/MktRefundInfoEntity.java

@@ -0,0 +1,25 @@
+/**
+ * 
+ */
+/**
+ * @author dasheng
+ *
+ */
+package com.tzy.framework.pay.Entity;
+
+public class MktRefundInfoEntity{
+	String mktMerId;
+	String mktAmt;
+	public String getMktMerId() {
+		return mktMerId;
+	}
+	public void setMktMerId(String mktMerId) {
+		this.mktMerId = mktMerId;
+	}
+	public String getMktAmt() {
+		return mktAmt;
+	}
+	public void setMktAmt(String mktAmt) {
+		this.mktAmt = mktAmt;
+	}
+}

+ 133 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/Entity/PostMasterEntity.java

@@ -0,0 +1,133 @@
+/**
+ * 
+ */
+/**
+ * @author dasheng
+ *
+ */
+package com.tzy.framework.pay.Entity;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class PostMasterEntity{	
+	String merId;
+	String terId;
+	String method;
+	String charset;
+	String version;
+	String format;
+	String timestamp;
+	String signType;
+	String signSn;
+	String ncrptnSn;
+	String dgtlEnvlp;
+	String signStr;
+	String bizContent;
+	public PostMasterEntity(){
+		this.charset = "UTF-8";
+		this.version="1.0";
+		this.format="json";
+		String txnTime=new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());//报文发送日期时间
+		this.timestamp=txnTime;
+		this.signType = "RSA";
+		this.signSn="1";
+		this.ncrptnSn = "1";
+		this.dgtlEnvlp="";
+	}
+	public String getMerId() {
+		return merId;
+	}
+	public void setMerId(String merId) {
+		this.merId = merId;
+	}
+	public String getTerId() {
+		return terId;
+	}
+	public void setTerId(String terId) {
+		this.terId = terId;
+	}
+	public String getMethod() {
+		return method;
+	}
+	public void setMethod(String method) {
+		this.method = method;
+	}
+	public String getCharset() {
+		return charset;
+	}
+	public void setCharset(String charset) {
+		this.charset = charset;
+	}
+	public String getVersion() {
+		return version;
+	}
+	public void setVersion(String version) {
+		this.version = version;
+	}
+	public String getFormat() {
+		return format;
+	}
+	public void setFormat(String format) {
+		this.format = format;
+	}
+	public String getTimestamp() {
+		return timestamp;
+	}
+	public void setTimestamp(String timestamp) {
+		this.timestamp = timestamp;
+	}
+	public String getSignType() {
+		return signType;
+	}
+	public void setSignType(String signType) {
+		this.signType = signType;
+	}
+	public String getSignSn() {
+		return signSn;
+	}
+	public void setSignSn(String signSn) {
+		this.signSn = signSn;
+	}
+	public String getNcrptnSn() {
+		return ncrptnSn;
+	}
+	public void setNcrptnSn(String ncrptnSn) {
+		this.ncrptnSn = ncrptnSn;
+	}
+	public String getDgtlEnvlp() {
+		return dgtlEnvlp;
+	}
+	public void setDgtlEnvlp(String dgtlEnvlp) {
+		this.dgtlEnvlp = dgtlEnvlp;
+	}
+	public String getSignStr() {
+		return signStr;
+	}
+	public void setSignStr(String signStr) {
+		this.signStr = signStr;
+	}
+	public String getBizContent() {
+		return bizContent;
+	}
+	public void setBizContent(String bizContent) {
+		this.bizContent = bizContent;
+	}
+	
+	@Override
+	public String toString() {
+		return "PostMasterEntity [merId=" + merId + ", terId=" + terId + ", method=" + method + ", charset=" + charset
+				+ ", version=" + version + ", format=" + format + ", timestamp=" + timestamp + ", signType=" + signType
+				+ ", signSn=" + signSn + ", ncrptnSn=" + ncrptnSn + ", dgtlEnvlp=" + dgtlEnvlp + ", signStr=" + signStr
+				+ ", bizContent=" + bizContent + "]";
+	}
+	
+	public String getParmFormat(){
+		return "merId=" + merId + "&terId=" + terId + "&method=" + method + "&charset=" + charset
+				+ "&version=" + version + "&format=" + format + "&timestamp=" + timestamp + "&signType=" + signType
+				+ "&signSn=" + signSn + "&ncrptnSn=" + ncrptnSn + "&dgtlEnvlp=" + dgtlEnvlp + "&signStr=" + signStr
+				+ "&bizContent=" + bizContent;
+	}
+	
+
+}

+ 29 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/Entity/ResultMasterEntity.java

@@ -0,0 +1,29 @@
+/**
+ * 
+ */
+/**
+ * @author dasheng
+ *
+ */
+package com.tzy.framework.pay.Entity;
+
+import lombok.Data;
+
+@Data
+public class ResultMasterEntity{	
+	String merId;
+	String terId;
+	String charset;
+	String version;
+	String format;
+
+	String returnMsg;
+	String returnCode;
+
+	String signType;
+	String signSn;
+	String ncrptnSn;
+	String signStr;
+	String dataContent;
+
+}

+ 31 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/Entity/RiskInfoEntity.java

@@ -0,0 +1,31 @@
+/**
+ * 
+ */
+/**
+ * @author dasheng
+ * 分账明细
+ */
+package com.tzy.framework.pay.Entity;
+
+public class RiskInfoEntity{	
+	String clientIp;//付款用户ip地址
+	String locationPoint;//包含经度和纬度,英文逗号分隔;
+	public String getClientIp() {
+		return clientIp;
+	}
+	public void setClientIp(String clientIp) {
+		this.clientIp = clientIp;
+	}
+	public String getLocationPoint() {
+		return locationPoint;
+	}
+	public void setLocationPoint(String locationPoint) {
+		this.locationPoint = locationPoint;
+	}
+	@Override
+	public String toString() {
+		return "RiskInfoEntity [clientIp=" + clientIp + ", locationPoint=" + locationPoint + "]";
+	}
+	
+	
+}

+ 29 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/Entity/SharingDetailsEntity.java

@@ -0,0 +1,29 @@
+/**
+ * 
+ */
+/**
+ * @author dasheng
+ * 分账明细
+ */
+package com.tzy.framework.pay.Entity;
+
+public class SharingDetailsEntity{	
+	String sharingMerId;
+	String sharingAmt;//分账金额,单位:分;
+	public String getSharingMerId() {
+		return sharingMerId;
+	}
+	public void setSharingMerId(String sharingMerId) {
+		this.sharingMerId = sharingMerId;
+	}
+	public String getSharingAmt() {
+		return sharingAmt;
+	}
+	public void setSharingAmt(String sharingAmt) {
+		this.sharingAmt = sharingAmt;
+	}
+	@Override
+	public String toString() {
+		return "SharingDetailsEntity [sharingMerId=" + sharingMerId + ", sharingAmt=" + sharingAmt + "]";
+	}
+}

+ 39 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/Entity/SharingInfoEntity.java

@@ -0,0 +1,39 @@
+/**
+ * 
+ */
+/**
+ * @author dasheng
+ * terminal_info 终端信息参数     支付方式为:WECHAT_MICROPAY该字段必填
+ */
+package com.tzy.framework.pay.Entity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SharingInfoEntity{	
+	String sharingNotifyUrl;
+	List<SharingDetailsEntity> sharingDetails;
+	
+	public SharingInfoEntity(){
+		this.sharingDetails = new ArrayList<SharingDetailsEntity>();
+	}
+	public String getSharingNotifyUrl() {
+		return sharingNotifyUrl;
+	}
+	public void setSharingNotifyUrl(String sharingNotifyUrl) {
+		this.sharingNotifyUrl = sharingNotifyUrl;
+	}
+	public List<SharingDetailsEntity> getSharingDetails() {
+		return sharingDetails;
+	}
+	public void setSharingDetails(SharingDetailsEntity sharingDetails) {
+		this.sharingDetails.add(sharingDetails);
+	}
+	@Override
+	public String toString() {
+		return "SharingInfoEntity [sharingNotifyUrl=" + sharingNotifyUrl + ", sharingDetails=" + sharingDetails + "]";
+	}
+	
+	
+
+}

+ 25 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/Entity/SharingRefundInfoEntity.java

@@ -0,0 +1,25 @@
+/**
+ * 
+ */
+/**
+ * @author dasheng
+ *
+ */
+package com.tzy.framework.pay.Entity;
+
+public class SharingRefundInfoEntity{
+	String sharingMerId;
+	String sharingAmt;
+	public String getSharingMerId() {
+		return sharingMerId;
+	}
+	public void setSharingMerId(String sharingMerId) {
+		this.sharingMerId = sharingMerId;
+	}
+	public String getSharingAmt() {
+		return sharingAmt;
+	}
+	public void setSharingAmt(String sharingAmt) {
+		this.sharingAmt = sharingAmt;
+	}
+}

+ 246 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/Entity/TerminalInfoEntity.java

@@ -0,0 +1,246 @@
+/**
+ * 
+ */
+/**
+ * @author dasheng
+ * terminal_info 终端信息参数     支付方式为:WECHAT_MICROPAY该字段必填
+ */
+package com.tzy.framework.pay.Entity;
+
+public class TerminalInfoEntity{	
+	String location;
+	String network_license;
+	String device_type;
+	String serial_num;
+	String terminal_id;////终端设备的硬件序列号---支付宝,
+	String device_id;///-终端设备号----微信,
+	String encrypt_rand_num;
+	String secret_text;
+	String app_version;
+	String device_ip;
+	String mobile_country_cd;
+	String mobile_net_num;
+	String icc_id;
+	String location_cd1;
+	String lbs_num1;
+	String lbs_signal1;
+	String location_cd2;
+	String lbs_num2;
+	String lbs_signal2;
+	String location_cd3;
+	String lbs_num3;
+	String lbs_signal3;
+	String telecom_sys_id;
+	String telecom_net_id;
+	String telecom_lbs;
+	String telecom_lbs_signal;
+	
+	public TerminalInfoEntity(String payCode,String Deviceid){
+		this.location="";
+		this.network_license="";
+		this.device_type="";
+		this.serial_num="";
+		this.device_id="";
+		this.terminal_id="";
+		if(payCode.startsWith("WECHAT")){
+			this.device_id= Deviceid;///-终端设备号
+		}else if(payCode.startsWith("ALIPAY")){
+			this.terminal_id=Deviceid;
+		}
+		
+		this.encrypt_rand_num="";
+		this.secret_text="";
+		this.app_version="";
+		this.device_ip="";
+		this.mobile_country_cd="";
+		this.mobile_net_num="";
+		this.icc_id="";
+		this.location_cd1="";
+		this.lbs_num1="";
+		this.lbs_signal1="";
+		this.location_cd2="";
+		this.lbs_num2="";
+		this.lbs_signal2="";
+		this.location_cd3="";
+		this.lbs_num3="";
+		this.lbs_signal3="";
+		this.telecom_sys_id="";
+		this.telecom_net_id="";
+		this.telecom_lbs="";
+		this.telecom_lbs_signal="";
+	}
+	
+	public String getLocation() {
+		return location;
+	}
+	public void setLocation(String location) {
+		this.location = location;
+	}
+	public String getNetwork_license() {
+		return network_license;
+	}
+	public void setNetwork_license(String network_license) {
+		this.network_license = network_license;
+	}
+	public String getDevice_type() {
+		return device_type;
+	}
+	public void setDevice_type(String device_type) {
+		this.device_type = device_type;
+	}
+	public String getSerial_num() {
+		return serial_num;
+	}
+	public void setSerial_num(String serial_num) {
+		this.serial_num = serial_num;
+	}
+	public String getDevice_id() {
+		return device_id;
+	}
+	public void setDevice_id(String device_id) {
+		this.device_id = device_id;
+	}
+	public String getEncrypt_rand_num() {
+		return encrypt_rand_num;
+	}
+	public void setEncrypt_rand_num(String encrypt_rand_num) {
+		this.encrypt_rand_num = encrypt_rand_num;
+	}
+	public String getSecret_text() {
+		return secret_text;
+	}
+	public void setSecret_text(String secret_text) {
+		this.secret_text = secret_text;
+	}
+	public String getApp_version() {
+		return app_version;
+	}
+	public void setApp_version(String app_version) {
+		this.app_version = app_version;
+	}
+	public String getDevice_ip() {
+		return device_ip;
+	}
+	public void setDevice_ip(String device_ip) {
+		this.device_ip = device_ip;
+	}
+	public String getMobile_country_cd() {
+		return mobile_country_cd;
+	}
+	public void setMobile_country_cd(String mobile_country_cd) {
+		this.mobile_country_cd = mobile_country_cd;
+	}
+	public String getMobile_net_num() {
+		return mobile_net_num;
+	}
+	public void setMobile_net_num(String mobile_net_num) {
+		this.mobile_net_num = mobile_net_num;
+	}
+	public String getIcc_id() {
+		return icc_id;
+	}
+	public void setIcc_id(String icc_id) {
+		this.icc_id = icc_id;
+	}
+	public String getLocation_cd1() {
+		return location_cd1;
+	}
+	public void setLocation_cd1(String location_cd1) {
+		this.location_cd1 = location_cd1;
+	}
+	public String getLbs_num1() {
+		return lbs_num1;
+	}
+	public void setLbs_num1(String lbs_num1) {
+		this.lbs_num1 = lbs_num1;
+	}
+	public String getLbs_signal1() {
+		return lbs_signal1;
+	}
+	public void setLbs_signal1(String lbs_signal1) {
+		this.lbs_signal1 = lbs_signal1;
+	}
+	public String getLocation_cd2() {
+		return location_cd2;
+	}
+	public void setLocation_cd2(String location_cd2) {
+		this.location_cd2 = location_cd2;
+	}
+	public String getLbs_num2() {
+		return lbs_num2;
+	}
+	public void setLbs_num2(String lbs_num2) {
+		this.lbs_num2 = lbs_num2;
+	}
+	public String getLbs_signal2() {
+		return lbs_signal2;
+	}
+	public void setLbs_signal2(String lbs_signal2) {
+		this.lbs_signal2 = lbs_signal2;
+	}
+	public String getLocation_cd3() {
+		return location_cd3;
+	}
+	public void setLocation_cd3(String location_cd3) {
+		this.location_cd3 = location_cd3;
+	}
+	public String getLbs_num3() {
+		return lbs_num3;
+	}
+	public void setLbs_num3(String lbs_num3) {
+		this.lbs_num3 = lbs_num3;
+	}
+	public String getLbs_signal3() {
+		return lbs_signal3;
+	}
+	public void setLbs_signal3(String lbs_signal3) {
+		this.lbs_signal3 = lbs_signal3;
+	}
+	public String getTelecom_sys_id() {
+		return telecom_sys_id;
+	}
+	public void setTelecom_sys_id(String telecom_sys_id) {
+		this.telecom_sys_id = telecom_sys_id;
+	}
+	public String getTelecom_net_id() {
+		return telecom_net_id;
+	}
+	public void setTelecom_net_id(String telecom_net_id) {
+		this.telecom_net_id = telecom_net_id;
+	}
+	public String getTelecom_lbs() {
+		return telecom_lbs;
+	}
+	public void setTelecom_lbs(String telecom_lbs) {
+		this.telecom_lbs = telecom_lbs;
+	}
+	public String getTelecom_lbs_signal() {
+		return telecom_lbs_signal;
+	}
+	public void setTelecom_lbs_signal(String telecom_lbs_signal) {
+		this.telecom_lbs_signal = telecom_lbs_signal;
+	}
+	public String getTerminal_id() {
+		return terminal_id;
+	}
+	public void setTerminal_id(String terminal_id) {
+		this.terminal_id = terminal_id;
+	}
+
+	@Override
+	public String toString() {
+		return "TerminalInfoEntity [location=" + location + ", network_license=" + network_license + ", device_type="
+				+ device_type + ", serial_num=" + serial_num + ", terminal_id=" + terminal_id + ", device_id="
+				+ device_id + ", encrypt_rand_num=" + encrypt_rand_num + ", secret_text=" + secret_text
+				+ ", app_version=" + app_version + ", device_ip=" + device_ip + ", mobile_country_cd="
+				+ mobile_country_cd + ", mobile_net_num=" + mobile_net_num + ", icc_id=" + icc_id + ", location_cd1="
+				+ location_cd1 + ", lbs_num1=" + lbs_num1 + ", lbs_signal1=" + lbs_signal1 + ", location_cd2="
+				+ location_cd2 + ", lbs_num2=" + lbs_num2 + ", lbs_signal2=" + lbs_signal2 + ", location_cd3="
+				+ location_cd3 + ", lbs_num3=" + lbs_num3 + ", lbs_signal3=" + lbs_signal3 + ", telecom_sys_id="
+				+ telecom_sys_id + ", telecom_net_id=" + telecom_net_id + ", telecom_lbs=" + telecom_lbs
+				+ ", telecom_lbs_signal=" + telecom_lbs_signal + "]";
+	}
+	
+	
+
+}

+ 55 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/config/AliPayConfig.java

@@ -0,0 +1,55 @@
+package com.tzy.framework.pay.config;
+
+import com.alipay.api.AlipayConfig;
+import com.tzy.common.utils.StringUtils;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.io.*;
+
+/**
+ *
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "pay.alipay.app")
+public class AliPayConfig extends AlipayConfig {
+
+    private String name = "alipay";
+
+    private String appId;
+    //MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCXH4ho5I+CAOZROpsZVpSq3iz3tb/NVDz4msy0pGJyoMAN6FpfY0TO8f4nft6kLPshLaAzu/tTv14hm29BJ7fNoOULtTCf5iaOPGyHptsmHj7zzJJFpqEFkd3TE9Z+pxGmf9fsw6LWGRnZdpGKXCqzKV7YVuACfZVt9NXxidy4sKahvgr9A6OZBi1fuu2iL4xyPqY/87d6ixU+/BwM+oTDK6ChpNkg7o5NO2Te5syYF3LJtOqL5LXzbuzP6wLw+FOzphoAyHiLkgcnemw8eZoImcsdKJawFO/qjft432rnBnW1IWFuqsLq6JEJsgN2Wch38fkqRf0Y1/IdeEXNUvaHAgMBAAECggEBAJKlus1u3gOds+InKNLRvbqBlslZySILGI92SCcTTaVGcJgOXYQq5F6dXbAd4RcXvypXCBqr1BtUnJeoKbHkROx5sUpHLUQ9JjToVbjdJdQ7jYMvhNGp/J9XCRcHLSICJZKYhIPw5Fc2TGtGL70/6v+oqaztwLsp+pOU/vdAfLuK0kkaYJTNKQDRbdoGoSQ/vDir85PV+nliinyAEoUqBHvoDoN/Xs9jo9JGagZQKkpjJzv3DOoQZIzUyLF1imiEKKDuKa+WVRU3+YzE1Wd2CYq3iCJNvs8nf48VeHvx1q7JuU4wK82M75BDF0jyNIy7UrXs0lVUIv/mlgjumGxciqECgYEAzbS6doad0zGdk21H53NU4R9+z+eKSzacaU2J0p3t68ouNhb3uM6ijfsEjiSc0HhyiwfIVDfpAnXefsOKLahY3tuz7WkZu9xZeYAWCOKQlglVFOtN0VTmuuaVe32d8wZ7QDt+Jmtz217GgNtJJGuwS9rpnWZTRgrCwBpPmdj9nfMCgYEAvBJueNG8PYyLmHfI+mKRsde/i+RoySBHeQR8AAV8FCR2UEw+HLxdWIzpa77WQoq6+WBSqwfAtdYeKp8q/WJ0p1V6sIGXTnRVPD2w/a8rsD/dJotrogaKfaO+PvUUV0TOnCfZ99RfL7Gr4QT5YKHGxySUAcfiEIw7lwk15tvCJh0CgYEAhrDv5uv+K2sxYncLveEmksGspzVUuCrp/4ll1SLTxrB70a74RWoHxi+2q9wNUfOMDLzrzzlMuO+04AvpTjwM9N+m0K0gzIFblNLpmqe/RH6X1zq7mXWeHoMdHd8CrT5xNX2+/Ckfk2RbVcRAADkDFqggj4+QtywUmPShantKlUECgYB6WB8nV4D2JRyWda33O/H9WBVSIqcL14THM+Saevbpf4K73600MlEjDp+2KLHnHapeGYwNmICDiaOcJGjp5oduZ4vlkJfmQIVGJ/egP7jS8eiib2X4Q/sJmmBjQjkWQDuLl90SfEPjmdfvDLZRZ0wRNjlWIzpre140dZhr8p+M/QKBgFGaOb2croSy1rEJcx/kP+feyLpQadh3rD8+TsLs+kYrvF50V4JZFA3uFkB9WkzfkemuOVGVw6hL4yf2IrWRFufarzuSO2lChFBex3jXIvgiAh4YFqYqRXcbVm2FeHAufuztJA7MNPZbcQHuYhcUaaRjSvCrAd9awoH1CLSW+eXE
+    private String privateKey;
+    private String alipayPublicKey;
+    private String privateKeyPath;
+    private String payNotifyUrl;
+    private String refundNotifyUrl;
+
+    public String getPrivateKey(){
+        if(StringUtils.isEmpty(privateKey)) {
+            String privateKey = "";
+            InputStream inputStream = getClass().getClassLoader().getResourceAsStream(privateKeyPath);
+            if (null == inputStream) {
+                try {
+                    inputStream = new FileInputStream(new File(privateKeyPath));
+                    StringBuilder sb = new StringBuilder();
+                    String line;
+
+                    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
+                    while ((line = br.readLine()) != null) {
+                        sb.append(line);
+                    }
+                    privateKey = sb.toString();
+                } catch (FileNotFoundException e) {
+                    e.printStackTrace();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            return privateKey;
+        }
+        return privateKey;
+    }
+
+}

+ 55 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/config/AliPaySpareConfig.java

@@ -0,0 +1,55 @@
+package com.tzy.framework.pay.config;
+
+import com.alipay.api.AlipayConfig;
+import com.tzy.common.utils.StringUtils;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.io.*;
+
+/**
+ *
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "pay.alipay.app1")
+public class AliPaySpareConfig extends AlipayConfig {
+
+    private String name = "alipay-spare1";
+
+    private String appId;
+    //MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCXH4ho5I+CAOZROpsZVpSq3iz3tb/NVDz4msy0pGJyoMAN6FpfY0TO8f4nft6kLPshLaAzu/tTv14hm29BJ7fNoOULtTCf5iaOPGyHptsmHj7zzJJFpqEFkd3TE9Z+pxGmf9fsw6LWGRnZdpGKXCqzKV7YVuACfZVt9NXxidy4sKahvgr9A6OZBi1fuu2iL4xyPqY/87d6ixU+/BwM+oTDK6ChpNkg7o5NO2Te5syYF3LJtOqL5LXzbuzP6wLw+FOzphoAyHiLkgcnemw8eZoImcsdKJawFO/qjft432rnBnW1IWFuqsLq6JEJsgN2Wch38fkqRf0Y1/IdeEXNUvaHAgMBAAECggEBAJKlus1u3gOds+InKNLRvbqBlslZySILGI92SCcTTaVGcJgOXYQq5F6dXbAd4RcXvypXCBqr1BtUnJeoKbHkROx5sUpHLUQ9JjToVbjdJdQ7jYMvhNGp/J9XCRcHLSICJZKYhIPw5Fc2TGtGL70/6v+oqaztwLsp+pOU/vdAfLuK0kkaYJTNKQDRbdoGoSQ/vDir85PV+nliinyAEoUqBHvoDoN/Xs9jo9JGagZQKkpjJzv3DOoQZIzUyLF1imiEKKDuKa+WVRU3+YzE1Wd2CYq3iCJNvs8nf48VeHvx1q7JuU4wK82M75BDF0jyNIy7UrXs0lVUIv/mlgjumGxciqECgYEAzbS6doad0zGdk21H53NU4R9+z+eKSzacaU2J0p3t68ouNhb3uM6ijfsEjiSc0HhyiwfIVDfpAnXefsOKLahY3tuz7WkZu9xZeYAWCOKQlglVFOtN0VTmuuaVe32d8wZ7QDt+Jmtz217GgNtJJGuwS9rpnWZTRgrCwBpPmdj9nfMCgYEAvBJueNG8PYyLmHfI+mKRsde/i+RoySBHeQR8AAV8FCR2UEw+HLxdWIzpa77WQoq6+WBSqwfAtdYeKp8q/WJ0p1V6sIGXTnRVPD2w/a8rsD/dJotrogaKfaO+PvUUV0TOnCfZ99RfL7Gr4QT5YKHGxySUAcfiEIw7lwk15tvCJh0CgYEAhrDv5uv+K2sxYncLveEmksGspzVUuCrp/4ll1SLTxrB70a74RWoHxi+2q9wNUfOMDLzrzzlMuO+04AvpTjwM9N+m0K0gzIFblNLpmqe/RH6X1zq7mXWeHoMdHd8CrT5xNX2+/Ckfk2RbVcRAADkDFqggj4+QtywUmPShantKlUECgYB6WB8nV4D2JRyWda33O/H9WBVSIqcL14THM+Saevbpf4K73600MlEjDp+2KLHnHapeGYwNmICDiaOcJGjp5oduZ4vlkJfmQIVGJ/egP7jS8eiib2X4Q/sJmmBjQjkWQDuLl90SfEPjmdfvDLZRZ0wRNjlWIzpre140dZhr8p+M/QKBgFGaOb2croSy1rEJcx/kP+feyLpQadh3rD8+TsLs+kYrvF50V4JZFA3uFkB9WkzfkemuOVGVw6hL4yf2IrWRFufarzuSO2lChFBex3jXIvgiAh4YFqYqRXcbVm2FeHAufuztJA7MNPZbcQHuYhcUaaRjSvCrAd9awoH1CLSW+eXE
+    private String privateKey;
+    private String alipayPublicKey;
+    private String privateKeyPath;
+    private String payNotifyUrl;
+    private String refundNotifyUrl;
+
+    public String getPrivateKey(){
+        if(StringUtils.isEmpty(privateKey)) {
+            String privateKey = "";
+            InputStream inputStream = getClass().getClassLoader().getResourceAsStream(privateKeyPath);
+            if (null == inputStream) {
+                try {
+                    inputStream = new FileInputStream(new File(privateKeyPath));
+                    StringBuilder sb = new StringBuilder();
+                    String line;
+
+                    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
+                    while ((line = br.readLine()) != null) {
+                        sb.append(line);
+                    }
+                    privateKey = sb.toString();
+                } catch (FileNotFoundException e) {
+                    e.printStackTrace();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            return privateKey;
+        }
+        return privateKey;
+    }
+
+}

+ 51 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/config/BaoFooPayConfig.java

@@ -0,0 +1,51 @@
+package com.tzy.framework.pay.config;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "pay.bofoo.app")
+@NoArgsConstructor
+@AllArgsConstructor
+public class BaoFooPayConfig {
+    private String merchantName;
+    //商户号
+    private String mid = "1272618";
+    //终端号
+    private String tid = "80729";
+    //私钥
+//    private String privateKey = "C:\\poyi\\project\\poyee\\poyee-pay\\src\\main\\resources\\config\\prod\\bofooPrivate.pfx";
+//    //私钥密码
+//    private String privateKeyPwd = "880615sandy";
+////    private String privateKeyPwd = "123456";
+//    //公钥
+//    private String publicKey = "C:\\poyi\\project\\poyee\\poyee-pay\\src\\main\\resources\\config\\prod\\bfkey_1272618@@80729.cer";
+
+    private String privateKey = "/app/configs/bofooPrivate.pfx";
+    //私钥密码
+    private String privateKeyPwd = "880615sandy";
+    //    private String privateKeyPwd = "123456";
+    //公钥
+    private String publicKey = "/app/configs/bfkey_1272618_80729.cer";
+    //支付回调地址
+    private String payNotifyUrl = "https://m2-dev.hobbystocks.cn/py-app/api/bfoo/paymentBack";
+
+    private String agreementpayNotifyUrl = "https://m2-dev.hobbystocks.cn/py-app/api/agreement/paymentBack";
+    //退款回调地址
+    private String refundNotifyUrl;
+    //支付宝二级商户号
+    private String alipaySimid = "2088620820601391";
+    //微信商户号
+    private String wxSimid = "569520824";
+    //云闪付
+    private String uacSimid = "844290053110005";
+    //支付标记
+    private String payFlag;
+    //退款标记
+    private String refundFlag;
+
+}

+ 42 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/config/BaofooRechargePayConfig.java

@@ -0,0 +1,42 @@
+package com.tzy.framework.pay.config;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class BaofooRechargePayConfig {
+
+    private String merchantName;
+
+    private String appid;
+    //商户号
+    private String mid = "100026760";
+    //终端号
+    private String tid = "200001936";
+    //来源编号
+    private String msgSrcId = "200001936";
+    //私钥
+    private String privateKey = "C:\\home\\tzy\\宝付\\bofooRecharge\\bofooRecharge\\src\\main\\resources\\lib\\bfkey_100026760@@200001936.pfx";
+    //私钥密码
+    private String privateKeyPwd = "100026760_604628";
+    //公钥
+    private String publicKey = "C:\\home\\tzy\\宝付\\bofooRecharge\\bofooRecharge\\src\\main\\resources\\lib\\bfkey_100026760@@200001936.cer";
+    //支付回调地址
+    private String payNotifyUrl;
+    //退款回调地址
+    private String refundNotifyUrl;
+    //支付宝二级商户号
+    private String alipaySimid = "2088620820601391";
+    //微信商户号
+    private String wxSimid = "";
+    //云闪付
+    private String uacSimid = "";
+    //支付标记
+    private String payFlag;
+    //退款标记
+    private String refundFlag;
+
+}

+ 89 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/config/BfPayConfig.java

@@ -0,0 +1,89 @@
+package com.tzy.framework.pay.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.io.*;
+
+/**
+ * 宝付支付配置
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "pay.bf.app")
+public class BfPayConfig {
+
+    private String name = "bf";
+
+    private String format;
+    //#商户在慧收钱的商户号,由慧收钱生成并下发
+    private String appid;
+
+    private String signType;
+
+    private String version;
+    //#门店编号
+    private String subMerchantNo;
+    //后端通知地址-支付成功
+    private String payNotifyUrl;
+    //后端通知地址-退款
+    private String refundNotifyUrl;
+    //前台通知地址
+    private String pageUrl;
+    //
+    private String privateKeyPath;
+    //私钥密码
+    private String privatePwd;
+
+    private String publicKeyPath;
+
+    private String key;
+
+    public String getPrivateKey(){
+        String privateKey = "";
+        InputStream inputStream = getClass().getClassLoader().getResourceAsStream(privateKeyPath);
+        if(null == inputStream ) {
+            try {
+                inputStream = new FileInputStream(new File(privateKeyPath));
+                StringBuilder sb = new StringBuilder();
+                String line;
+
+                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
+                while ((line = br.readLine()) != null) {
+                    sb.append(line);
+                }
+                privateKey = sb.toString();
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return privateKey;
+    }
+
+    public String getPublicKey(){
+        String publicKey = "";
+        InputStream inputStream = getClass().getClassLoader().getResourceAsStream(publicKeyPath);
+        if(null == inputStream ) {
+            try {
+                inputStream = new FileInputStream(new File(publicKeyPath));
+                StringBuilder sb = new StringBuilder();
+                String line;
+
+                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
+                while ((line = br.readLine()) != null) {
+                    sb.append(line);
+                }
+                publicKey = sb.toString();
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return publicKey;
+    }
+
+}

+ 39 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/config/HfPayConfig.java

@@ -0,0 +1,39 @@
+package com.tzy.framework.pay.config;
+
+import com.huifu.adapay.model.MerConfig;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 汇付配置
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "pay.hf.app")
+public class HfPayConfig extends MerConfig {
+
+    private String name = "hf";
+
+    private String appid;
+    /**
+     * 商户key
+     */
+    private String merchantKey;
+    /**
+     * debug 模式,开启后有详细的日志
+     */
+    private boolean debug = true;
+    /**
+     * prodMode 模式,默认为生产模式,false可以使用mock模式
+     */
+    private boolean prodMode = true;
+
+    private String notify_url;
+
+    private String refundNotifyUrl;
+
+    private String reverseNotifyUrl;
+
+
+}

+ 54 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/config/HmPayConfig.java

@@ -0,0 +1,54 @@
+package com.tzy.framework.pay.config;
+
+import com.alipay.api.AlipayConfig;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.io.*;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "pay.hm.app")
+public class HmPayConfig extends AlipayConfig {
+
+    private String name = "hm";
+
+    private String app_id;
+    private String wxMchID;
+    private String privateKey;
+    private String publicKey;
+    private String hmPublicKey;
+    private String privateKeyPath;
+    private String format;
+    private String version;
+    private String storeId;
+    private String payNotifyUrl;
+    private String returnUrl;
+    private String ghStaticUrl;
+
+    public String getPrivateKey(){
+        String privateKey = "";
+        InputStream inputStream = getClass().getClassLoader().getResourceAsStream(privateKeyPath);
+        if(null == inputStream ) {
+            try {
+                inputStream = new FileInputStream(new File(privateKeyPath));
+                StringBuilder sb = new StringBuilder();
+                String line;
+
+                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
+                while ((line = br.readLine()) != null) {
+                    sb.append(line);
+                }
+                privateKey = sb.toString();
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return privateKey;
+    }
+
+
+}

+ 170 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/config/PayConfig.java

@@ -0,0 +1,170 @@
+package com.tzy.framework.pay.config;
+
+import com.tzy.common.utils.StringUtils;
+import com.tzy.common.utils.bean.BeanUtils;
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 加载支付配置
+ */
+@Data
+@Component
+public class PayConfig {
+
+    @Autowired
+    private AliPayConfig aliPayConfig;
+
+    @Autowired
+    private AliPaySpareConfig aliPaySpareConfig;
+
+    @Autowired
+    private BfPayConfig bfPayConfig;
+
+    @Autowired
+    private HmPayConfig hmPayConfig;
+
+    @Autowired
+    private QmPayConfig qmPayConfig;
+
+    @Autowired
+    private QmPay1Config qmPay1Config;
+
+    @Autowired
+    private QmPay2Config qmPay2Config;
+
+    @Autowired
+    private QmH5PayConfig qmH5PayConfig;
+
+    @Autowired
+    private WxPayAppConfig wxPayAppConfig;
+    /**
+     * 汇付支付配置
+     */
+    @Autowired
+    private HfPayConfig hfPayConfig;
+
+
+    public Object get(String appid){
+        if(StringUtils.isEmpty(appid)){
+            return null;
+        }
+        if(appid.equals(aliPayConfig.getAppId())) {  //支付宝直连
+            return aliPayConfig;
+        }else if(appid.equals(aliPaySpareConfig.getAppId())) { //支付宝直连-备用1
+            AliPayConfig alipayConfig = new AliPayConfig();
+            BeanUtils.copyBeanProp(alipayConfig,aliPaySpareConfig);
+            return alipayConfig;
+        }else if(appid.equals(wxPayAppConfig.getAppID())) { //微信直连
+            return wxPayAppConfig;
+        } else if (appid.equals(qmH5PayConfig.getAppid())) { //全民-H5
+            return qmH5PayConfig;
+        }else if(appid.equals(bfPayConfig.getAppid())) { //宝付
+            return bfPayConfig;
+        }else if(appid.equals(hmPayConfig.getApp_id())) { //杉德
+            return hmPayConfig;
+        }else if(appid.equals(qmPay2Config.getAppid())) { //全民2
+            return qmPay2Config;
+        }else if(appid.equals(qmPay1Config.getAppid())) { //全民1
+            return qmPay1Config;
+        }else if(appid.equals(qmPayConfig.getAppid())) { //全民
+            return qmPayConfig;
+        }else if(appid.equals(hfPayConfig.getAppid())) { //汇付
+            return hfPayConfig;
+        }
+        return null;
+    }
+    /**
+     * 根据支付类型获取对应的支付配置
+     * @param payType
+     * @return
+     */
+    public Object getByPayType(String payType){
+        if(StringUtils.isEmpty(payType)){
+            return null;
+        }
+        if(payType.equals(aliPayConfig.getName())) { //支付宝直连
+            return aliPayConfig;
+        } else if (payType.equals(aliPaySpareConfig.getName())) { //支付宝直连-备用1
+            AliPayConfig alipayConfig = new AliPayConfig();
+            BeanUtils.copyBeanProp(alipayConfig,aliPaySpareConfig);
+            return alipayConfig;
+        } else if (payType.equals(wxPayAppConfig.getName())) {  //微信直连
+            return wxPayAppConfig;
+        } else if (payType.contains(qmH5PayConfig.getName())) { //全民-H5
+            return qmH5PayConfig;
+        } else if (payType.contains(hmPayConfig.getName())) { //杉德
+            return hmPayConfig;
+        } else if (payType.contains(qmPay2Config.getName())) { //全民2
+            return qmPay2Config;
+        } else if (payType.contains(qmPay1Config.getName())) { //全民1
+            return qmPay1Config;
+        } else if (payType.contains(qmPayConfig.getName())) { //全民
+            return qmPayConfig;
+        } else if (payType.contains(bfPayConfig.getName())) { //宝付
+            return bfPayConfig;
+        } else if (payType.contains(hfPayConfig.getName())) { //汇付
+            return hfPayConfig;
+        }
+        return null;
+    }
+    /**
+     * 根据支付类型获取对应的支付配置
+     * @param payType
+     * @return
+     */
+    public String getAppidByPayType(String payType){
+        if(StringUtils.isEmpty(payType)){
+            return null;
+        }
+        if(payType.equals(aliPayConfig.getName())) { //支付宝直连
+            return aliPayConfig.getAppId();
+        } else if (payType.equals(aliPaySpareConfig.getName())) { //支付宝直连-备用1
+            return aliPaySpareConfig.getAppId();
+        } else if (payType.equals(wxPayAppConfig.getName())) { //微信直连
+            return wxPayAppConfig.getAppID();
+        } else if (payType.contains(qmH5PayConfig.getName())) { //全民-H5
+            return qmH5PayConfig.getAppid();
+        } else if (payType.contains(bfPayConfig.getName())) { //宝付
+            return bfPayConfig.getAppid();
+        } else if (payType.contains(hmPayConfig.getName())) { //杉德
+            return hmPayConfig.getApp_id();
+        } else if (payType.contains(qmPay2Config.getName())) { //全民2
+            return qmPay2Config.getAppid();
+        } else if (payType.contains(qmPay1Config.getName())) { //全民1
+            return qmPay1Config.getAppid();
+        } else if (payType.contains(qmPayConfig.getName())) { //全民
+            return qmPayConfig.getAppid();
+        } else if (payType.contains(hfPayConfig.getName())) { //汇付
+            return hfPayConfig.getAppid();
+        }
+        return null;
+    }
+
+    /**
+     * 获取 子支付类型
+     * @param appid
+     * @return
+     */
+    public String getSubPayTypeByAppid(String appid){
+        if(StringUtils.isEmpty(appid)){
+            return null;
+        }
+        if(appid.equals(aliPayConfig.getAppId())) { //支付宝直连
+            return aliPayConfig.getName();
+        } else if (appid.equals(aliPaySpareConfig.getAppId())) { //支付宝直连-备用1
+            return aliPaySpareConfig.getName();
+       /* } else if (payType.equals(wxPayAppConfig.getName())) {  //微信直连
+            return wxPayAppConfig;
+        } else if (payType.contains(hmPayConfig.getName())) { //杉德
+            return hmPayConfig;
+        } else if (payType.contains(qmPayConfig.getName())) { //全民
+            return qmPayConfig;
+        } else if (payType.contains(bfPayConfig.getName())) { //宝付
+            return bfPayConfig;*/
+        }
+        return null;
+    }
+
+}

+ 77 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/config/QmH5PayConfig.java

@@ -0,0 +1,77 @@
+package com.tzy.framework.pay.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.io.*;
+
+/**
+ * 全民h5 支付
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "pay.qm.h5")
+public class QmH5PayConfig {
+
+    private String name = "qm-h5";
+    //appid
+    private String appid;
+    //appkey
+    private String appkey;
+    //商户号
+    private String mid;
+    private String mid_ali;
+    private String mid_uac;
+    private String mid_wxh5;
+    //终端号
+    private String tid;
+    //来源编号
+    private String msgSrcId;
+    //机构商户号
+    private String instMid;
+    //私钥
+    private String privateKey;
+
+    private String privateKeyPath;
+    //支付回调地址
+    private String payNotifyUrl;
+    //退款回调地址
+    private String refundNotifyUrl;
+    //订单展示页面
+    private String showUrl;
+    //支付标记
+    private String payFlag;
+    //退款标记
+    private String refundFlag;
+    //微信子商户appid
+    private String subAppId;
+
+    private String url = "https://test-api-open.chinaums.com/v1/netpay/trade/h5-pay?";
+
+
+    public String getPrivateKey(){
+        String privateKey = this.privateKey;
+        InputStream inputStream = getClass().getClassLoader().getResourceAsStream(privateKeyPath);
+        if(null == inputStream ) {
+            try {
+                inputStream = new FileInputStream(new File(privateKeyPath));
+                StringBuilder sb = new StringBuilder();
+                String line;
+
+                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
+                while ((line = br.readLine()) != null) {
+                    sb.append(line);
+                }
+                privateKey = sb.toString();
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return privateKey;
+    }
+
+
+}

+ 76 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/config/QmPay1Config.java

@@ -0,0 +1,76 @@
+package com.tzy.framework.pay.config;
+
+import com.alipay.api.AlipayConfig;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.io.*;
+
+/**
+ * 全民付配置文件
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "pay.qm1.app")
+public class QmPay1Config extends AlipayConfig {
+
+    private String name = "qm1";
+    //appid
+    private String appid;
+    //appkey
+    private String appkey;
+    //商户号
+    private String mid;
+    //终端号
+    private String tid;
+    //子商户号
+    private String sub_mid;
+    //子终端号
+    private String sub_tid;
+    //来源编号
+    private String msgSrcId;
+    //机构商户号
+    private String instMid;
+    //私钥
+    private String privateKey;
+
+    private String privateKeyPath;
+    //支付回调地址
+    private String payNotifyUrl;
+    //退款回调地址
+    private String refundNotifyUrl;
+    //订单展示页面
+    private String showUrl;
+    //支付标记
+    private String payFlag;
+    //退款标记
+    private String refundFlag;
+    //微信子商户appid
+    private String subAppId;
+
+
+    public String getPrivateKey(){
+        String privateKey = "";
+        InputStream inputStream = getClass().getClassLoader().getResourceAsStream(privateKeyPath);
+        if(null == inputStream ) {
+            try {
+                inputStream = new FileInputStream(new File(privateKeyPath));
+                StringBuilder sb = new StringBuilder();
+                String line;
+
+                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
+                while ((line = br.readLine()) != null) {
+                    sb.append(line);
+                }
+                privateKey = sb.toString();
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return privateKey;
+    }
+
+}

+ 76 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/config/QmPay2Config.java

@@ -0,0 +1,76 @@
+package com.tzy.framework.pay.config;
+
+import com.alipay.api.AlipayConfig;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.io.*;
+
+/**
+ * 全民付配置文件
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "pay.qm2.app")
+public class QmPay2Config extends AlipayConfig {
+
+    private String name = "qm2";
+    //appid
+    private String appid;
+    //appkey
+    private String appkey;
+    //商户号
+    private String mid;
+    //终端号
+    private String tid;
+    //子商户号
+    private String sub_mid;
+    //子终端号
+    private String sub_tid;
+    //来源编号
+    private String msgSrcId;
+    //机构商户号
+    private String instMid;
+    //私钥
+    private String privateKey;
+
+    private String privateKeyPath;
+    //支付回调地址
+    private String payNotifyUrl;
+    //退款回调地址
+    private String refundNotifyUrl;
+    //订单展示页面
+    private String showUrl;
+    //支付标记
+    private String payFlag;
+    //退款标记
+    private String refundFlag;
+    //微信子商户appid
+    private String subAppId;
+
+
+    public String getPrivateKey(){
+        String privateKey = "";
+        InputStream inputStream = getClass().getClassLoader().getResourceAsStream(privateKeyPath);
+        if(null == inputStream ) {
+            try {
+                inputStream = new FileInputStream(new File(privateKeyPath));
+                StringBuilder sb = new StringBuilder();
+                String line;
+
+                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
+                while ((line = br.readLine()) != null) {
+                    sb.append(line);
+                }
+                privateKey = sb.toString();
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return privateKey;
+    }
+
+}

+ 94 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/config/QmPayConfig.java

@@ -0,0 +1,94 @@
+package com.tzy.framework.pay.config;
+
+import com.alipay.api.AlipayConfig;
+import com.tzy.common.utils.StringUtils;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.io.*;
+
+/**
+ * 全民付配置文件
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "pay.qm.app")
+@NoArgsConstructor
+@AllArgsConstructor
+public class QmPayConfig extends AlipayConfig {
+
+    public QmPayConfig(String appid, String appkey, String privateKey, String instMid){
+        this.appid = appid;
+        this.appkey = appkey;
+        this.privateKey = privateKey;
+        this.instMid = instMid;
+    }
+    private String name = "qm";
+    //appid
+    private String appid;
+    //appkey
+    private String appkey;
+    //商户号
+    private String mid;
+    //终端号
+    private String tid;
+    //子商户号
+    private String sub_mid;
+    //子终端号
+    private String sub_tid;
+    //来源编号
+    private String msgSrcId;
+    //机构商户号
+    private String instMid;
+    //私钥
+    private String privateKey;
+
+    private String privateKeyPath;
+    //支付回调地址
+    private String payNotifyUrl;
+    //退款回调地址
+    private String refundNotifyUrl;
+    //订单展示页面
+    private String showUrl;
+    //支付标记
+    private String payFlag;
+    //退款标记
+    private String refundFlag;
+    //微信子商户appid
+    private String subAppId;
+    //企业用户号
+    private String businessUserNo;
+    //企业用户号
+//    private boolean limitCreditCard = false;
+
+
+    public String getPrivateKey(){
+        String privateKey = this.privateKey;
+        if(StringUtils.isNotEmpty(privateKey)){
+            return privateKey;
+        }
+        InputStream inputStream = getClass().getClassLoader().getResourceAsStream(privateKeyPath);
+        if(null == inputStream ) {
+            try {
+                inputStream = new FileInputStream(new File(privateKeyPath));
+                StringBuilder sb = new StringBuilder();
+                String line;
+
+                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
+                while ((line = br.readLine()) != null) {
+                    sb.append(line);
+                }
+                privateKey = sb.toString();
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return privateKey;
+    }
+
+}

+ 35 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/config/QmPayZgConfig.java

@@ -0,0 +1,35 @@
+package com.tzy.framework.pay.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 全民付资管配置文件
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "pay.qm.am")
+public class QmPayZgConfig {
+    //商户集团编号 默认
+    private String merchantNo;
+    //企业用户号 默认
+    private String businessUserNo;
+    //
+    private String sub_businessUserNo;
+    //商户加签私钥
+    private String upPublicKeyPath;
+    //商户加签私钥
+    private String upPrivateKeyPath;
+    //私钥密码
+    private String upPrivateKeyPwd;
+
+    private String dwPublicKeyPath;
+    //账号
+    private String userName;
+    //密码
+    private String pwd;
+    //ip
+    private String ip;
+
+}

+ 82 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/config/WxPayAppConfig.java

@@ -0,0 +1,82 @@
+package com.tzy.framework.pay.config;
+
+import com.github.wxpay.sdk.WXPayConfig;
+import lombok.Data;
+import lombok.ToString;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+
+@Data
+@ToString
+@Component
+@ConfigurationProperties(prefix = "pay.wxpay.app")
+public class WxPayAppConfig implements WXPayConfig {
+
+    private String name = "wx";
+    /**
+     * appID
+     */
+    private String appID;
+
+    private String appletID;
+    private String thirdAndriID;
+
+    /**
+     * 商户号
+     */
+    private String mchID;
+
+    /**
+     * API 密钥
+     */
+    private String key;
+
+    /**
+     * API证书绝对路径
+     */
+    private String certPath;
+
+    /**
+     * HTTP(S) 连接超时时间,单位毫秒
+     */
+    private int httpConnectTimeoutMs = 8000;
+
+    /**
+     * HTTP(S) 读数据超时时间,单位毫秒
+     */
+    private int httpReadTimeoutMs = 10000;
+
+    /**
+     * 微信支付异步通知地址
+     */
+    private String payNotifyUrl;
+
+    /**
+     * 微信退款异步通知地址
+     */
+    private String refundNotifyUrl;
+
+    /**
+     * 获取商户证书内容(这里证书需要到微信商户平台进行下载)
+     *
+     * @return 商户证书内容
+     */
+    @Override
+    public InputStream getCertStream() {
+        InputStream certStream = getClass().getClassLoader().getResourceAsStream(certPath);
+        if(null == certStream ) {
+            try {
+                certStream = new FileInputStream(new File(certPath));
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            }
+        }
+        return certStream;
+    }
+
+}

+ 24 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/dto/AlipayData.java

@@ -0,0 +1,24 @@
+package com.tzy.framework.pay.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+/**
+ *
+ */
+@Data
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+public class AlipayData {
+
+    private String appid;
+
+    private String privateKey;
+
+    private String publicKey;
+
+
+}

+ 110 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/dto/BankInfo.java

@@ -0,0 +1,110 @@
+package com.tzy.framework.pay.dto;
+
+import com.alibaba.fastjson.JSONObject;
+import com.tzy.common.dto.Result;
+import com.tzy.common.utils.StringUtils;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class BankInfo<T> extends Result {
+
+    public BankInfo(Integer userId,String bankType, String bankNo, String realName, String cardNo, String phone){
+        this.userId = userId;
+        this.bankType = bankType;
+        this.bankNo = bankNo;
+        this.realName = realName;
+        this.cardNo = cardNo;
+        this.phone = phone;
+    }
+    //用户id
+    private Integer userId;
+    //银行卡号
+    private String bankNo;
+    //银行卡名
+    private String bankName;
+    //银行卡类型 卡类型 101 借记卡,102 信用卡
+    private String bankType;
+    //姓名
+    private String realName;
+    //身份证号
+    private String cardNo;
+    //手机号
+    private String phone;
+    //预签约唯一码
+    private String uniqueCode;
+    //短信验证码
+    private String phoneCode;
+    //协议号: 1202304241415275791952576173
+    private String protocolNo = "1202304241415275791952576173";
+    //协议列表
+    private String protocols;
+
+    public BankInfo setConfirm(String uniqueCode,String phoneCode){
+        this.uniqueCode = uniqueCode;
+        this.phoneCode = phoneCode;
+        return this;
+    }
+    public BankInfo setProtocolNo(String protocolNo){
+        this.protocolNo = protocolNo;
+        return this;
+    }
+
+    //账户信息[银行卡号|持卡人姓名|证件号|手机号|银行卡安全码|银行卡有效期]
+    public String getFormat(){
+       StringBuffer stb = new StringBuffer();
+       return stb.append(StringUtils.isNotEmpty(bankNo) ? bankNo+"" : "")
+                       .append("|")
+           .append(StringUtils.isNotEmpty(realName) ? realName : "")
+               .append("|")
+           .append(StringUtils.isNotEmpty(cardNo) ? cardNo : "")
+               .append("|")
+           .append(StringUtils.isNotEmpty(phone) ? phone : "")
+               .append("||").toString();
+    }
+
+    private JSONObject payConfig;
+
+    public T getPayConfigByClass( Class<T> clazz){
+        return JSONObject.parseObject(payConfig.toJSONString(), clazz);
+    }
+
+    public static BankInfo ok(){
+        return new BankInfo();
+    }
+
+    public static BankInfo ok(String msg) {
+        return new BankInfo(true,200,msg);
+    }
+
+    public BankInfo success() {
+        this.setSuccess(true);
+        this.setCode(0);
+        return this ;
+    }
+    public BankInfo success(String msg) {
+        this.setSuccess(true);
+        this.setCode(0);
+        this.setMsg(msg);
+        return this ;
+    }
+
+    public BankInfo fail(String msg) {
+        this.setSuccess(false);
+        this.setCode(-1);
+        this.setMsg(msg);
+        return this ;
+    }
+    public static BankInfo error(String msg) {
+        return new BankInfo(false, -1, msg);
+    }
+    public BankInfo(boolean success, Integer code, String msg){
+        this.setSuccess(success);
+        this.setCode(code);
+        this.setMsg(msg);
+    }
+
+}

+ 40 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/dto/CheckPaymentInfoDto.java

@@ -0,0 +1,40 @@
+package com.tzy.framework.pay.dto;
+
+import lombok.Data;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 同步支付订单
+ */
+@Data
+@ToString
+public class CheckPaymentInfoDto implements Serializable {
+
+    private static final long serializableUID = 1l;
+    //按照组队id
+    private Integer groupInfoId;
+
+    private String groupInfoName;
+    //支付方式
+    private String payWay;
+    //支付渠道
+    private String payChannel;
+    //支付appid
+    private String appid;
+    //用户id
+    private Integer userId;
+    //用户openid
+    private String openid;
+    //订单单号
+    private String orderNo;
+    //支付时间-开始时间
+    private Date startPaymentTime;
+    //支付时间-结束时间
+    private Date endPaymentTime;
+
+
+
+}

+ 120 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/dto/PayConstants.java

@@ -0,0 +1,120 @@
+package com.tzy.framework.pay.dto;
+
+/**
+ * 支付参数
+ */
+public class PayConstants {
+
+    public static final String SUCCESS = "SUCCESS";
+    public static final String TRADE_SUCCESS = "TRADE_SUCCESS";
+
+    public static final String PAY_TYPE_WX = "wxpay";//微信支付
+    public static final String PAY_TYPE_ALIPAY = "alipay";//支付宝支付
+    public static final String HMPAY_TYPE_WX = "wxpay-hm";//杉德-微信
+    public static final String HMPAY_TYPE_ALIPAY = "alipay-hm";//杉德-支付宝
+    public static final String QMPAY_TYPE_WX = "wxpay-qm";//全民付-微信
+    public static final String QMPAY_TYPE_ALIPAY = "alipay-qm";//全民付-支付宝
+    public static final String QMPAY_TYPE_ALIPAY2APPLET = "alipay-applet-qm";//全民付-支付宝跳转小程序
+    public static final String QMPAY_TYPE_ALIPAY2H5 = "alipay-qm-h5";//全民付-支付宝h5
+    public static final String QMPAY_TYPE_WX2H5 = "wxpay-qm-h5";//全民付-微信h5
+    public static final String QMPAY_TYPE_UAC2H5 = "uac-qm-h5";//全民付-云闪付H5
+    public static final String QMPAY_TYPE_UAC = "uac-qm";//全民付-云闪付
+    public static final String BFPAY_TYPE_MAIN_WX = "wxpay-main-bf";//宝付-微信-主扫
+    public static final String BFPAY_TYPE_MAIN_ALIPAY = "alipay-main-bf";//宝付-支付宝-主扫
+    public static final String BFPAY_TYPE_MAIN_UAC = "uac-main-bf";//宝付-云闪付-主扫
+    public static final String BFPAY_TYPE_APP_WX = "wxpay-app-bf";//宝付-微信-app
+    public static final String BFPAY_TYPE_APP_ALIPAY = "alipay-app-bf";//宝付-微信-app
+
+    public static final String QMPAY_METHOD_TRADE_CREATE = "TRADE_CREATE";//统一下单
+    public static final String QMPAY_METHOD_QUERY_ORDER = "QUERY_ORDER";//查询订单
+    public static final String QMPAY_METHOD_REFUND = "REFUND";//退款
+    public static final String QMPAY_METHOD_REFUND_QUERY = "REFUND_QUERY";//退款查询
+    public static final String QMPAY_METHOD_CLOSE = "CLOSE";//关闭订单
+    //全民付-统一下单
+    public static final String QMPAY_HOST_SANDBOX = "https://test-api-open.chinaums.com/v1/netpay/";
+    public static final String QMPAY_HOST = "https://api-mop.chinaums.com/v1/netpay/";
+    public static final String QMPAY_HOST_MINI = "https://api-mop.dtums.com/v1/netpay/";
+
+    public static final String QMPAY_TRADE_URL_WX_SANDBOX = QMPAY_HOST_SANDBOX+"wx/app-pre-order";//全民付-统一下单-微信
+    public static final String QMPAY_TRADE_URL_WX = QMPAY_HOST+"wx/app-pre-order";//全民付-统一下单-微信
+//    public static final String QMPAY_TRADE_URL_WX_MINI = QMPAY_HOST_MINI+"wx/unified-order";//全民付-统一下单-微信小程序-mini
+    public static final String QMPAY_TRADE_URL_WX_MINI = QMPAY_HOST+"wx/unified-order";//全民付-统一下单-微信小程序-mini
+    public static final String QMPAY_TRADE_URL_WX2H5_MINI = QMPAY_HOST_MINI+"wxpay/h5-pay";//全民付-统一下单-微信小程序-H5
+
+    public static final String QMPAY_TRADE_URL_ALIPAY_SANDBOX =  QMPAY_HOST_SANDBOX+"trade/precreate";//全民付-统一下单-支付宝
+    public static final String QMPAY_TRADE_URL_ALIPAY = QMPAY_HOST+"trade/precreate";//全民付-统一下单-支付宝
+    public static final String QMPAY_TRADE_URL_QM_SANDBOX =  QMPAY_HOST_SANDBOX+"qmf/order";//全民付-统一下单-全民付
+    public static final String QMPAY_TRADE_URL_QM = QMPAY_HOST+"qmf/order";//全民付-统一下单-全民付
+
+    public static final String QMPAY_TRADE_URL_UAC_SANDBOX =  QMPAY_HOST_SANDBOX+"uac/app-order";//全民付-统一下单-银联云闪付
+    public static final String QMPAY_TRADE_URL_UAC = QMPAY_HOST+"uac/app-order";//全民付-统一下单-银联云闪付
+    public static final String QMPAY_TRADE_URL_UAC_MINI = QMPAY_HOST_MINI+"uac/mini-order";//全民付-统一下单-银联云闪付-mini
+
+    public static final String QMPAY_TRADE_URL_ALIPAY2APPLET_SANDBOX =  QMPAY_HOST_SANDBOX+"trade/app-pre-order";//全民付-统一下单-支付宝跳转小程序
+    public static final String QMPAY_TRADE_URL_ALIPAY2APPLET = QMPAY_HOST+"trade/app-pre-order";//全民付-统一下单-支付宝跳转小程序
+    public static final String QMPAY_TRADE_URL_ALIPAY2APPLET_MINI = QMPAY_HOST_MINI+"trade/create";//全民付-统一下单-支付宝跳转小程序-mini
+
+    public static final String QMPAY_TRADE_URL_ALIPAY2H5_SANDBOX =  QMPAY_HOST_SANDBOX+"trade/h5-pay";//全民付-统一下单-支付宝h5
+    public static final String QMPAY_TRADE_URL_ALIPAY2H5 = QMPAY_HOST+"trade/h5-pay";//全民付-统一下单-支付宝h5
+    public static final String QMPAY_TRADE_URL_ALIPAY2H5_MINI = QMPAY_HOST_MINI+"trade/h5-pay";//全民付-统一下单-支付宝h5
+
+    public static final String QMPAY_TRADE_URL_UAC2H5_SANDBOX = QMPAY_HOST_SANDBOX+"uac/order";//全民付-统一下单-云闪付h5
+    public static final String QMPAY_TRADE_URL_UAC2H5 = QMPAY_HOST+"uac/order";//全民付-统一下单-云闪付h5
+    public static final String QMPAY_TRADE_URL_UAC2H5_MINI = QMPAY_HOST_MINI+"uac/order";//全民付-统一下单-云闪付-H5
+    //--全民付订单查询
+    public static final String QMPAY_QUERY_URL_SANDBOX =  QMPAY_HOST_SANDBOX+"query";//全民付-查询
+    public static final String QMPAY_QUERY_URL= QMPAY_HOST+"query";//全民付-查询
+    public static final String QMPAY_QUERY_URL_MINI= QMPAY_HOST_MINI+"query";//全民付-查询
+    public static final String QMPAY_QUERY_URL_WX_SANDBOX =  QMPAY_HOST_SANDBOX+"wx/app-pre-query";//全民付-查询-微信
+    public static final String QMPAY_QUERY_URL_WX = QMPAY_HOST+"wx/app-pre-query";//全民付-查询-微信
+    public static final String QMPAY_QUERY_URL_ALIPAY2APPLET_SANDBOX =  QMPAY_HOST_SANDBOX+"trade/app-pre-query";//全民付-查询-支付宝跳转小程序
+    public static final String QMPAY_QUERY_URL_ALIPAY2APPLET = QMPAY_HOST+"trade/app-pre-query";//全民付-查询-支付宝跳转小程序
+    //--全民付-退款
+    public static final String QMPAY_REFUND_URL_SANDBOX =  QMPAY_HOST_SANDBOX+"refund";//全民付-退款
+    public static final String QMPAY_REFUND_URL= QMPAY_HOST+"refund";//全民付-退款
+    public static final String QMPAY_REFUND_URL_MINI= QMPAY_HOST+"refund";//全民付-退款
+//    public static final String QMPAY_REFUND_URL_MINI= QMPAY_HOST_MINI+"refund";//全民付-退款
+    //--全民付-退款查询
+    public static final String QMPAY_QUERY_REFUND_URL_SANDBOX =  QMPAY_HOST_SANDBOX+"refund-query";//全民付-退款
+    public static final String QMPAY_QUERY_REFUND_URL= QMPAY_HOST+"refund-query";//全民付-退款
+    public static final String QMPAY_QUERY_REFUND_URL_MINI= QMPAY_HOST+"refund-query";//全民付-退款
+//    public static final String QMPAY_QUERY_REFUND_URL_MINI= QMPAY_HOST_MINI+"refund-query";//全民付-退款
+    //--全民付-退款查询
+    public static final String QMPAY_CLOSE_URL_SANDBOX =  QMPAY_HOST_SANDBOX+"close";//全民付-关闭订单
+    public static final String QMPAY_CLOSE_URL= QMPAY_HOST+"close";//全民付-关闭订单
+    public static final String QMPAY_CLOSE_URL_WX_SANDBOX =  QMPAY_HOST_SANDBOX+"wx/app-pre-close";//全民付-关闭订单-微信跳转小程序
+    public static final String QMPAY_CLOSE_URL_WX= QMPAY_HOST+"wx/app-pre-close";//全民付-关闭订单-微信跳转小程序
+    public static final String QMPAY_CLOSE_URL_ALIPAY2APPLET_SANDBOX =  QMPAY_HOST_SANDBOX+"trade/app-pre-close";//全民付-关闭订单-支付宝跳转小程序
+    public static final String QMPAY_CLOSE_URL_ALIPAY2APPLET= QMPAY_HOST+"trade/app-pre-close";//全民付-关闭订单-支付宝跳转小程序
+
+    //宝付 -主扫
+    public static final String BF_TEST_HOST = "https://test-api.huishouqian.com/api/acquiring";
+    public static final String BF_HOST = "https://api.huishouqian.com/api/acquiring";
+    //宝付-统一下单
+    public static final String BF_METHOD_TRADE_MAIN = "POLYMERIZE_MAIN_SWEPTN";
+    public static final String BF_METHOD_TRADE_APP = "POLYMERIZE_PROGRAM_CASHIER";
+    //宝付-查询订单
+    public static final String BF_METHOD_QUERY_MAIN = "POLYMERIZE_QUERY";
+    //宝付-申请退款
+    public static final String BF_METHOD_REFUND_MAIN = "POLYMERIZE_REFUND";
+    //宝付-退款查询
+    public static final String BF_METHOD_REFUND_QUERY_MAIN = "POLYMERIZE_REFUND_QUERY";
+    //宝付-下载账单
+    public static final String BF_METHOD_QUERY_TRADE_FILE_MAIN = "QUERY_TRADE_FILE";
+
+    //baofu =统一下单
+    public static final String BFPAY_METHOD_UNIFIED_ORDER = "unified_order";//统一下单
+    public static final String BFPAY_METHOD_ORDER_QUERY = "order_query";//查询订单
+    public static final String BFPAY_METHOD_ORDER_REFUND = "order_refund";//退款申请
+    /**
+     * 退款查询
+     */
+    public static final String BFPAY_METHOD_REFUND_QUERY = "refund_query";
+    //宝付 支付宝主扫
+    public static final String BFPAY_ALIPAY_NATIVE= "ALIPAY_NATIVE";
+    //宝付 云闪付主扫
+    public static final String BFPAY_QUICK_PASS_NATIVEE= "QUICK_PASS_NATIVE";
+
+
+
+}

+ 93 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/dto/PaymentInfoResponseDto.java

@@ -0,0 +1,93 @@
+package com.tzy.framework.pay.dto;
+
+import lombok.Data;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 订单信息
+ */
+@Data
+@ToString
+public class PaymentInfoResponseDto implements Serializable {
+
+    private static final long serializableUid = 1l;
+    //订单编码
+    private String orderNo;
+    //平台类型
+    private String payWay;
+    //平台 appid
+    private String appid;
+    //平台支付编码
+    private String paymentNo;
+    /** 应付款 */
+    private BigDecimal paymentPrice;
+    /** 实付款-用户支付款 */
+    private BigDecimal actualPayment;
+    //下单时间
+    private Date paymentTime;
+    //支付成功时间
+    private Date paymentSuccessTime;
+
+    private Integer code = 0;
+
+    private String msg = "SUCCESS";
+
+    private boolean success = false;
+
+    private String tradeState;
+
+    private String tradeStateDesc;
+
+    private Map<String ,Object> data = new HashMap<>();
+
+    public static PaymentInfoResponseDto ok(){
+        PaymentInfoResponseDto paymentInfoResponseDto = new PaymentInfoResponseDto();
+        paymentInfoResponseDto.setSuccess(true);
+        return paymentInfoResponseDto;
+    }
+
+    public static PaymentInfoResponseDto ok(String msg){
+        PaymentInfoResponseDto paymentInfoResponseDto = new PaymentInfoResponseDto();
+        paymentInfoResponseDto.setSuccess(true);
+        paymentInfoResponseDto.setMsg(msg);
+        return paymentInfoResponseDto;
+    }
+
+    public static PaymentInfoResponseDto ok(Integer code, String msg){
+        PaymentInfoResponseDto paymentInfoResponseDto = new PaymentInfoResponseDto();
+        paymentInfoResponseDto.setSuccess(true);
+        paymentInfoResponseDto.setCode(code);
+        paymentInfoResponseDto.setMsg(msg);
+        return paymentInfoResponseDto;
+    }
+
+    public static PaymentInfoResponseDto error(Integer code, String msg){
+        PaymentInfoResponseDto paymentInfoResponseDto = new PaymentInfoResponseDto();
+        paymentInfoResponseDto.setCode(code);
+        paymentInfoResponseDto.setMsg(msg);
+        paymentInfoResponseDto.setSuccess(false);
+        return paymentInfoResponseDto;
+    }
+
+    public PaymentInfoResponseDto put(String key, Object value){
+        if(null == this.data) this.data = new HashMap<>();
+        this.data.put(key,value);
+        return this;
+    }
+
+    public String getString(String key){
+        if(null == this.data) return null;
+        return (String) this.data.get(key);
+    }
+
+    public Object get(String key){
+        if(null == this.data) return null;
+        return this.data.get(key);
+    }
+}

+ 96 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/dto/PaymentRequestDto.java

@@ -0,0 +1,96 @@
+package com.tzy.framework.pay.dto;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotEmpty;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 支付 dto
+ */
+@Data
+@ToString
+public class PaymentRequestDto<T> implements Serializable {
+
+    private static long serializableUid = 1l;
+    //请求类型
+    @NotEmpty
+    private String userType;
+    //订单编码
+    @NotEmpty
+    private String orderNo;
+    //订单编码-商户订单号(第三方平台订单号)
+    private String merOrderId;
+    //订单金额
+    private BigDecimal orderAmount;
+    //支付金额
+    @NotEmpty
+    private BigDecimal totalAmount;
+    //支付商品描述
+    @NotEmpty
+    private String body;
+    //支付方式
+    @NotEmpty
+    private String payWay;
+    //订单类型:group
+    private String orderCategory;
+
+    private String category;
+    private String paySubWay;
+    //云闪付-支付银行
+    private String uacBank;
+    //云闪付-卡号
+    private String bankCardNo;
+    //appid
+    private String wxAppid;
+    //openid
+    private String wxOpenid;
+    //返回地址
+    private String returnUrl;
+    //页面地址
+    private String path_url;
+    //订单创建时间
+    private Date createOrderTime;
+    //订单expireTime
+    private Date expireTime=new Date();
+    //mid
+    private String mid;
+    //tid
+    private String tid;
+    //请求ip
+    private String createip;
+    //商户号
+    private String appid;
+    //子商户号
+    private String subAppid;
+    /**指定路由*/
+    private Boolean assignPayType;
+    //操作描述
+    private String msg;
+
+    private JSONObject payConfig;
+
+    //组团商户id
+    private Long merchantId;
+    //分账编码(宝付为客户账户号)
+    private String contractNo;
+
+    private String accountType;
+
+    private String phoneCode;
+
+    private BankInfo bankInfo;
+
+    private PaymentUserInfo paymentUserInfo;
+    //请求用户信息
+    private RechargeUserInfoDto rechargeUserInfoDto;
+
+    public T getPayConfigByClass( Class<T> clazz){
+        return JSONObject.parseObject(payConfig.toJSONString(), clazz);
+    }
+
+}

+ 35 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/dto/PaymentUserInfo.java

@@ -0,0 +1,35 @@
+package com.tzy.framework.pay.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PaymentUserInfo {
+
+    //行业类目 01 电商
+    private String  goodsCategory;
+    //收货人姓名
+    private  String csName;
+    //收货人手机号
+    private String csMobile;
+    //收货人省份
+    private String csProvince;
+    //收货人城市
+    private String csCity;
+    //收货人地址 不包含国家、省份/州、城 市信息的详细地址
+    private String csAddress;
+    //商品名称
+    private String prodNameList;
+    //商品类目 008 运动户外
+    private String prodTypeList;
+    //商品数量
+    private String prodQtyList;
+    //商品总价
+    private String prodAmtList;
+
+
+
+}

+ 41 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/dto/PrePayRespDTO.java

@@ -0,0 +1,41 @@
+package com.tzy.framework.pay.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 支付 dto
+ */
+@Data
+public class PrePayRespDTO implements Serializable {
+
+    private static long serializableUid = 1l;
+    //请求类型
+    private String userType;
+    //订单编码
+
+    private String orderNo;
+
+    private String merOrderId;
+    private String data;
+    private String payWay;
+    private String paymentSubType;
+    //云闪付-支付银行
+    private String uacBank;
+    //appid
+    private String wxAppid;
+    //openid
+    private String wxOpenid;
+    //返回地址
+    private String returnUrl;
+
+    private String path_url;
+    //订单的创建时间
+    private Date CreateOrderTime;
+
+    private String mid;
+
+    private String tid;
+}

+ 25 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/dto/QmZgOrderInfoDto.java

@@ -0,0 +1,25 @@
+package com.tzy.framework.pay.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.io.Serializable;
+
+/**
+ * 全民资管平台订单
+ */
+@Data
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+public class QmZgOrderInfoDto implements Serializable {
+
+    private static final long serializableUid = 1l;
+    //订单编码
+    private String orderNo;
+    //订单金额 单位分
+    private Integer price;
+
+}

+ 54 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/dto/RechargeUserInfoDto.java

@@ -0,0 +1,54 @@
+package com.tzy.framework.pay.dto;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class RechargeUserInfoDto<T> implements Serializable {
+    public RechargeUserInfoDto( String userName, String certificateNo){
+        this.userName = userName;
+        this.certificateNo = certificateNo;
+    }
+    //应用用户的会员编号
+    private String loginNo;
+    //是否验证用户实名
+    private boolean checkUserAuth;
+    //用户姓名
+    private String userName;
+    //身份证号
+    private String certificateNo;
+    //身份证正面
+    private String idCardFront;
+    //身份证反面
+    private String idCardBack;
+    //银行卡类型
+    private String bankType;
+    //银行卡号
+    private String bankNo;
+    //银行卡预留手机号
+    private String bankPhone;
+    //预绑卡关联号
+    private String requestNo;
+    //短信验证码
+    private String phoneCode;
+    //已绑定卡协议号
+    private String agreementNo;
+
+    //唤起类型
+    private String callType;
+    //支付参数:退款等使用
+    private String payParam;
+
+    private JSONObject payConfig;
+
+    public T getPayConfigByClass( Class<T> clazz){
+        return JSONObject.parseObject(payConfig.toJSONString(), clazz);
+    }
+
+}

+ 82 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/dto/RefundRequestDto.java

@@ -0,0 +1,82 @@
+package com.tzy.framework.pay.dto;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 退款信息
+ */
+@Data
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+public class RefundRequestDto<T> implements Serializable {
+
+        private static long serializableUid = 1l;
+
+        public RefundRequestDto(String payWay, String orderNo, BigDecimal totalAmount, BigDecimal refundAmount, String refundMsg) {
+                this.payWay = payWay;
+                this.orderNo = orderNo;
+                this.totalAmount = totalAmount;
+                this.refundAmount = refundAmount;
+                this.refundMsg = refundMsg;
+        }
+
+        //请求类型
+        private String userType;
+        //订单编码
+        private String orderNo;
+        //退款编码
+        private String refundNo;
+        //订单编码-商户订单号(全民付)
+        private String merOrderId;
+        //支付订单号
+        private String tradeNo;
+        //支付金额
+        private BigDecimal totalAmount;
+        //支付方式
+        private String payWay;
+        //云闪付-支付银行
+        private String uacBank;
+        //appid
+        private String wxAppid;
+        //openid
+        private String wxOpenid;
+        //返回地址
+        private String returnUrl;
+        //页面地址
+        private String path_url;
+        //订单创建时间
+        private Date createOrderTime;
+        //mid
+        private String mid;
+        //tid
+        private String tid;
+        //请求ip
+        private String createip;
+        //商户号
+        private String appid;
+        //子商户号
+        private String subAppid;
+
+        private BigDecimal orderPrice;
+
+        private BigDecimal refundAmount;
+
+        private String refundMsg;
+
+        private JSONObject payConfig;
+        //请求用户信息
+        private RechargeUserInfoDto rechargeUserInfoDto;
+
+        public T getPayConfigByClass( Class<T> clazz){
+                return JSONObject.parseObject(payConfig.toJSONString(), clazz);
+        }
+}

+ 80 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/dto/ResourceData.java

@@ -0,0 +1,80 @@
+package com.tzy.framework.pay.dto;
+
+import lombok.Data;
+import lombok.ToString;
+
+import java.io.Serializable;
+
+@Data
+@ToString
+public class ResourceData implements Serializable
+{
+    private static final long serializableUID = 1L;
+    //应用ID
+    private String appid;
+    //商户号
+    private String mchid;
+    //商户订单号
+    private String out_trade_no;
+    //微信支付订单号
+    private String transaction_id;
+    //交易类型
+    // JSAPI:公众号支付
+    //NATIVE:扫码支付
+    //APP:APP支付
+    //MICROPAY:付款码支付
+    //MWEB:H5支付
+    //FACEPAY:刷脸支付
+    private String trade_type;
+    //交易状态:
+    // SUCCESS:支付成功
+    //REFUND:转入退款
+    //NOTPAY:未支付
+    //CLOSED:已关闭
+    //REVOKED:已撤销(付款码支付)
+    //USERPAYING:用户支付中(付款码支付)
+    //PAYERROR:支付失败(其他原因,如银行返回失败)
+    private String trade_state;
+    //交易状态描述
+    private String trade_state_desc;
+    //付款银行
+    private String bank_type;
+    //支付完成时间
+    private String success_time;
+    //支付者
+    private  Payer payer;
+    //订单金额
+    private PayAmount amount;
+
+    @ToString
+    @Data
+    public static class Payer{
+        //用户标识 用户在直连商户appid下的唯一标识。
+        private String openid;
+    }
+    @ToString
+    @Data
+    public static class PayAmount{
+
+        public PayAmount(){
+        }
+        public PayAmount(Integer total,Integer payer_total,String currency,String payer_currency){
+            this.total = total;
+            this.payer_total =  payer_total;
+            this.currency = currency;
+            this.payer_currency= payer_currency;
+        }
+        //总金额
+        private Integer total;
+        //用户支付金额
+        private Integer payer_total;
+        //货币类型
+        private String currency;
+        //用户支付币种
+        private String payer_currency;
+
+
+    }
+}
+
+

+ 56 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/dto/ResultMap.java

@@ -0,0 +1,56 @@
+package com.tzy.framework.pay.dto;
+import org.apache.http.HttpStatus;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Description 通用返回结果集
+ * @Author
+ * @Date 2021/6/12 15:13
+ */
+public class ResultMap extends HashMap<String, Object> {
+    public ResultMap() {
+        put("state", true);
+        put("code", 0);
+        put("msg", "success");
+    }
+
+    public static ResultMap error(int code, String msg) {
+        ResultMap r = new ResultMap();
+        r.put("state", false);
+        r.put("code", code);
+        r.put("msg", msg);
+        return r;
+    }
+
+    public static ResultMap error(String msg) {
+        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
+    }
+
+    public static ResultMap error() {
+        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
+    }
+
+    public static ResultMap ok(String msg) {
+        ResultMap r = new ResultMap();
+        r.put("msg", msg);
+        return r;
+    }
+
+    public static ResultMap ok(Map<String, Object> par) {
+        ResultMap r = new ResultMap();
+        r.putAll(par);
+        return r;
+    }
+
+    public static ResultMap ok() {
+        return new ResultMap();
+    }
+
+    public ResultMap put(String key, Object value) {
+        super.put(key, value);
+        return this;
+    }
+
+}

+ 56 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/service/AlipayService.java

@@ -0,0 +1,56 @@
+package com.tzy.framework.pay.service;
+
+import com.alipay.api.response.AlipayTradeQueryResponse;
+import com.tzy.framework.pay.config.AliPayConfig;
+import com.tzy.framework.pay.dto.PaymentInfoResponseDto;
+import com.tzy.framework.pay.dto.PaymentRequestDto;
+import com.tzy.framework.pay.dto.RefundRequestDto;
+import com.tzy.framework.pay.dto.ResultMap;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 支付宝
+ */
+public interface AlipayService {
+    //加载alipay配置
+    public AliPayConfig initConfig(String appid,String type);
+
+    //统一支付接口
+    public ResultMap unifiedOrder(String orderNo, BigDecimal amount, String body);
+
+    /**
+     * @param orderNo
+     * @param amount
+     * @param body
+     * @param expireTime 指定过期时间,当前时间3分钟后过期
+     * @return
+     */
+    public ResultMap unifiedOrder(String orderNo, BigDecimal amount, String body, Date expireTime);
+    //统一支付接口
+    public ResultMap unifiedOrder(PaymentRequestDto paymentRequestDto);
+    //退款接口
+    public ResultMap aliRefundNotify(String appid,String orderNo, BigDecimal amount, String body);
+    /**
+     * 查询订单支付情况
+     * @param orderNo
+     * @return
+     */
+    AlipayTradeQueryResponse searchOrder(String orderNo);
+
+    public PaymentInfoResponseDto queryOrder(String appid,String orderNo);
+
+    boolean closeTradeOrder(String orderNo);
+
+    //关闭订单-新
+    public ResultMap closeTradeOrderNew(String appid,String orderNo);
+
+    public ResultMap unifiedOrderNew(PaymentRequestDto paymentRequestDto);
+
+    public ResultMap aliRefundNotify(RefundRequestDto refundRequestDto);
+
+    public PaymentInfoResponseDto queryOrder(PaymentRequestDto paymentRequestDto);
+
+    public ResultMap queryRefundOrder(RefundRequestDto refundRequestDto);
+}

+ 31 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/service/BankService.java

@@ -0,0 +1,31 @@
+package com.tzy.framework.pay.service;
+
+import com.tzy.framework.pay.dto.BankInfo;
+import com.tzy.framework.pay.dto.PaymentRequestDto;
+import com.tzy.framework.pay.dto.ResultMap;
+
+public interface BankService {
+
+    public BankInfo ReadySign(BankInfo bankInfo);
+    public BankInfo ConfirmSign(BankInfo bankInfo);
+    public BankInfo QueryBind(BankInfo bankInfo);
+    public BankInfo unBind(BankInfo bankInfo);
+    /**
+     * 免密支付
+     * @param payRequestBody
+     * @return
+     */
+    public ResultMap SinglePay(PaymentRequestDto payRequestBody);
+    /**
+     * 预支付
+     * @param payRequestBody
+     */
+    public ResultMap ReadyPay(PaymentRequestDto payRequestBody);
+
+    /**
+     * 确认支付
+     * @param payRequestBody
+     */
+    public ResultMap ConfirmPay(PaymentRequestDto payRequestBody);
+
+}

+ 40 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/service/BaoFooBankPayService.java

@@ -0,0 +1,40 @@
+package com.tzy.framework.pay.service;
+
+import com.tzy.framework.pay.dto.PaymentInfoResponseDto;
+import com.tzy.framework.pay.dto.PaymentRequestDto;
+import com.tzy.framework.pay.dto.RefundRequestDto;
+import com.tzy.framework.pay.dto.ResultMap;
+
+/**
+ * 宝付 银行支付
+ */
+public interface BaoFooBankPayService {
+
+    public ResultMap getBankList(PaymentRequestDto payRequestBody);
+
+    /**
+     * 下单
+     * @param payRequestBody
+     * @throws Exception
+     */
+    public ResultMap unifiedOrder(PaymentRequestDto payRequestBody);
+
+    /**
+     * 查询
+     * @param paymentRequestDto
+     * @return
+     * @throws Exception
+     */
+    public PaymentInfoResponseDto queryOrder(PaymentRequestDto paymentRequestDto);
+
+    /**
+     * 退款
+     * @param refundRequestDto
+     * @throws Exception
+     */
+    public ResultMap refund(RefundRequestDto refundRequestDto);
+
+
+    public ResultMap refundQuery( RefundRequestDto refundRequestDto);
+
+}

+ 39 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/service/BaoFooPayService.java

@@ -0,0 +1,39 @@
+package com.tzy.framework.pay.service;
+
+import com.tzy.framework.pay.dto.PaymentInfoResponseDto;
+import com.tzy.framework.pay.dto.PaymentRequestDto;
+import com.tzy.framework.pay.dto.RefundRequestDto;
+import com.tzy.framework.pay.dto.ResultMap;
+
+public interface BaoFooPayService {
+
+    /**
+     * 下单
+     * @param payRequestBody
+     * @throws Exception
+     */
+    public ResultMap unifiedOrder(PaymentRequestDto payRequestBody);
+
+    /**
+     * 查询
+     * @param paymentRequestDto
+     * @return
+     * @throws Exception
+     */
+    public PaymentInfoResponseDto queryOrder(PaymentRequestDto paymentRequestDto);
+
+    /**
+     * 退款
+     * @param refundRequestDto
+     * @throws Exception
+     */
+    public ResultMap refund(RefundRequestDto refundRequestDto);
+
+    /**
+     * 退款查询
+     * @param refundRequestDto
+     * @return
+     */
+    public ResultMap refundQuery( RefundRequestDto refundRequestDto);
+
+}

+ 17 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/service/BaofooRechargePayService.java

@@ -0,0 +1,17 @@
+package com.tzy.framework.pay.service;
+
+import com.tzy.framework.pay.dto.PaymentRequestDto;
+import com.tzy.framework.pay.dto.RefundRequestDto;
+import com.tzy.framework.pay.dto.ResultMap;
+
+public interface BaofooRechargePayService {
+    //余额支付
+    public ResultMap paymentSplitApi(PaymentRequestDto payRequestBody);
+    //聚合支付(支付宝)
+    public ResultMap payment(PaymentRequestDto payRequestBody);
+    //退款申请
+    public ResultMap profitShareRefundApply(RefundRequestDto refundRequestDto);
+    //订单查询(根据订单号查询是退款还是支付)
+    public ResultMap queryOrder(PaymentRequestDto payRequestBody);
+
+}

+ 31 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/service/BfPayService.java

@@ -0,0 +1,31 @@
+package com.tzy.framework.pay.service;
+
+import com.tzy.framework.pay.config.BfPayConfig;
+import com.tzy.framework.pay.dto.PaymentInfoResponseDto;
+import com.tzy.framework.pay.dto.PaymentRequestDto;
+import com.tzy.framework.pay.dto.RefundRequestDto;
+import com.tzy.framework.pay.dto.ResultMap;
+
+import java.math.BigDecimal;
+
+public interface BfPayService {
+    public boolean verifyCallBack(String appid,String respSign,String sign);
+
+    public ResultMap tradeCreate(PaymentRequestDto paymentRequestDto);
+
+    public PaymentInfoResponseDto queryOrder(String appid,String payWay, String  orderNo);
+
+    public ResultMap refund(String appid,String orderNo, BigDecimal orderPrice, BigDecimal refundPrice, String refundMsg);
+
+    public ResultMap refundQuery( String appid,String outRefundNo);
+
+    public boolean verifyCallBackNew(BfPayConfig bfPayConfig, String respSign, String sign);
+
+    public ResultMap tradeCreateNew(PaymentRequestDto paymentRequestDto);
+
+    public PaymentInfoResponseDto queryOrder(PaymentRequestDto paymentRequestDto);
+
+    public ResultMap refund(RefundRequestDto refundRequestDto);
+
+    public ResultMap refundQuery( RefundRequestDto refundRequestDto);
+}

+ 64 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/service/BofooAgreementService.java

@@ -0,0 +1,64 @@
+package com.tzy.framework.pay.service;
+
+import com.tzy.framework.pay.dto.*;
+
+public interface BofooAgreementService {
+    /**
+     * 协议支付-预绑卡接口
+     */
+    public BankInfo ReadySign(BankInfo bankInfo);
+    /**
+     * 确认绑卡(协议支付)
+     */
+    public BankInfo ConfirmSign(BankInfo bankInfo);
+    /**
+     * 查询绑定的银行卡
+     * @param bankInfo
+     */
+    public BankInfo QueryBind(BankInfo bankInfo);
+    /**
+     * 解绑
+     * @param bankInfo
+     */
+    public BankInfo unBind(BankInfo bankInfo);
+    /**
+     * 免密支付
+     * @param payRequestBody
+     * @return
+     */
+    public ResultMap SinglePay(PaymentRequestDto payRequestBody);
+    /**
+     * 预支付
+     * @param payRequestBody
+     */
+    public ResultMap ReadyPay(PaymentRequestDto payRequestBody);
+
+    /**
+     * 确认支付
+     * @param payRequestBody
+     */
+    public ResultMap ConfirmPay(PaymentRequestDto payRequestBody);
+
+    /**
+     * 查询
+     * @param payRequestBody
+     */
+    public PaymentInfoResponseDto QueryOrder(PaymentRequestDto payRequestBody);
+
+    /**
+     * 退款
+     * @param refundRequestDto
+     * @return
+     */
+    public ResultMap OrderRefund(RefundRequestDto refundRequestDto);
+    /**
+     * 退款查询
+     * @param refundRequestDto
+     * @return
+     */
+    public ResultMap queryRefund(RefundRequestDto refundRequestDto);
+
+
+
+
+}

+ 27 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/service/HfPayService.java

@@ -0,0 +1,27 @@
+package com.tzy.framework.pay.service;
+
+import com.tzy.framework.pay.dto.PaymentInfoResponseDto;
+import com.tzy.framework.pay.dto.PaymentRequestDto;
+import com.tzy.framework.pay.dto.RefundRequestDto;
+import com.tzy.framework.pay.dto.ResultMap;
+
+import java.util.Map;
+
+public interface HfPayService {
+
+    //统一下单
+    public ResultMap tradeCreate(PaymentRequestDto paymentRequestDto);
+    //查询订单
+    public PaymentInfoResponseDto queryOrder(String appid, String payWay, String  orderNo);
+    //撤销支付
+    public Map<String, Object> reverse(PaymentRequestDto paymentRequestDto);
+    //查询撤销对象
+    public Map<String, Object> queryReverse(String reverse_id);
+    //退款
+    public ResultMap refund(RefundRequestDto refundRequestDto);
+    //退款查询
+    public ResultMap queryRefund(RefundRequestDto refundRequestDto);
+    //关闭订单
+    public ResultMap close(PaymentRequestDto paymentRequestDto);
+
+}

+ 36 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/service/HmPayService.java

@@ -0,0 +1,36 @@
+package com.tzy.framework.pay.service;
+
+import com.tzy.common.dto.OutDTO;
+import com.tzy.framework.pay.dto.PaymentInfoResponseDto;
+import com.tzy.framework.pay.dto.PaymentRequestDto;
+import com.tzy.framework.pay.dto.RefundRequestDto;
+import com.tzy.framework.pay.dto.ResultMap;
+
+import java.math.BigDecimal;
+import java.util.Map;
+
+public interface HmPayService {
+
+    public String hmTradeCreate(String payWay ,String buyerId, String orderNo, BigDecimal totalAmount, String body);
+
+    public String tradeCreate(Map<String,Object> param);
+
+    public ResultMap tradeCreate(PaymentRequestDto paymentRequestDto);
+
+    public ResultMap refundOrder(Map<String,Object> param);
+
+    public OutDTO queryOrder(Map<String,Object> param);
+
+    public PaymentInfoResponseDto queryOrder(String appid,String orderNo);
+
+    public OutDTO queryRefundOrder(Map<String,Object> param);
+
+    public OutDTO cancelOrder(Map<String,Object> param);
+
+    public ResultMap tradeCreateNew(PaymentRequestDto paymentRequestDto);
+
+    public ResultMap refundOrder(RefundRequestDto refundRequestDto);
+
+    public PaymentInfoResponseDto queryOrder(PaymentRequestDto paymentRequestDto);
+
+}

+ 153 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/service/PaymentBaseService.java

@@ -0,0 +1,153 @@
+package com.tzy.framework.pay.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.tzy.base.dto.DictBaseDto;
+import com.tzy.base.service.SysBaseService;
+import com.tzy.common.utils.StringUtils;
+import com.tzy.common.utils.http.HttpClientUtil;
+import com.tzy.framework.pay.config.PayConfig;
+import com.tzy.framework.pay.dto.PaymentInfoResponseDto;
+import com.tzy.framework.pay.dto.PaymentRequestDto;
+import com.tzy.framework.pay.dto.RefundRequestDto;
+import com.tzy.framework.pay.dto.ResultMap;
+import com.tzy.framework.util.RedisUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Service("paymentBaseConfigService")
+public class PaymentBaseService {
+
+    public static final String NEW_PAY_MODAL = "new_pay_modal";
+    @Autowired
+    protected SysBaseService sysBaseService;
+    @Autowired
+    protected HmPayService hmPayService;
+    @Autowired
+    protected QmPayService qmPayService;
+    @Autowired
+    protected QmH5PayService qmH5PayService;
+    @Autowired
+    protected WxPayService wxPayService;
+    @Autowired
+    protected AlipayService alipayApiService;
+    @Autowired
+    protected BfPayService bfPayService;
+    @Autowired
+    protected RedisUtils redisUtils;
+    @Autowired
+    protected PayConfig payConfig;
+    @Autowired
+    protected HfPayService hfPayService;
+    @Autowired
+    protected BaoFooPayService baoFooPayService;
+    @Autowired
+    protected BaoFooBankPayService baoFooBankPayService;
+    @Autowired
+    protected BankService bankService;
+    @Autowired
+    protected BofooAgreementService bofooAgreementService;
+    @Autowired
+    protected BaofooRechargePayService baofooRechargePayService;
+    @Autowired
+    protected Qme1PayService qme1PayService;
+    @Value("${pay.recharge.readPay:http://localhost:8082/p1/readPay}")
+    protected String readPayUrl;
+    @Value("${pay.recharge.confirmPay:http://localhost:8082/p1/confirmPay}")
+    protected String confirmPayUrl;
+    @Value("${pay.server.refund:http://localhost:8082/p1/v2/refund}")
+    protected String refundUrl;
+    @Value("${pay.server.refundQuery:http://localhost:8082/p1/v2/refundQuery}")
+    protected String refundQueryUrl;
+    @Value("${pay.server.query:http://localhost:8082/p1/query}")
+    protected String queryUrl;
+
+    public JSONObject initPayConfig(String payWay){
+        return JSONObject.parseObject(sysBaseService.getAppMenuByCode(payWay));
+    }
+    /**
+     * 判断是否是在新支付模块中指定的通道
+     * @param payway
+     * @throws Exception
+     */
+    public void isNewPayModal(String payway) throws Exception{
+        List<DictBaseDto> dictBaseDtos = sysBaseService.selectDictData(NEW_PAY_MODAL, "all");
+        if(null == dictBaseDtos || dictBaseDtos.isEmpty()){
+            dictBaseDtos = sysBaseService.selectDictData(NEW_PAY_MODAL,payway);
+        }
+        if(null == dictBaseDtos || dictBaseDtos.size() == 0){
+            throw new Exception("不是新支付模块!");
+        }
+    }
+    /**
+     * 新模块退款
+     * @param refundRequestDto
+     * @return
+     */
+    public ResultMap refundPost(RefundRequestDto refundRequestDto) throws Exception {
+        //
+        isNewPayModal(refundRequestDto.getPayWay());
+        String jsonString = JSONObject.toJSONString(refundRequestDto);
+        String retStr = post(refundUrl,jsonString);
+        log.info(" `new 调用退款接口>>>{} 返回结果>>>{} ",refundUrl,retStr);
+        if(StringUtils.isEmpty(retStr)){
+            return ResultMap.error();
+        }else{
+            try{
+                ResultMap resultMap = JSONObject.parseObject(retStr, ResultMap.class);
+                return resultMap;
+            }catch (Exception e){
+                e.printStackTrace();
+                return ResultMap.error();
+            }
+        }
+    }
+
+    /**
+     * 新模块查询支付
+     * @param paymentRequestDto
+     * @return
+     */
+    public PaymentInfoResponseDto queryPost(PaymentRequestDto paymentRequestDto) throws Exception {
+        isNewPayModal(paymentRequestDto.getPayWay());
+        String jsonString = JSONObject.toJSONString(paymentRequestDto);
+        String retStr = post(queryUrl,jsonString);
+        log.info(" `new 调用查询接口>>>{} 返回结果>>>{} ",queryUrl,retStr);
+        if(StringUtils.isEmpty(retStr)){
+            return PaymentInfoResponseDto.error(1,"查询失败");
+        }else{
+            try {
+                JSONObject jsonObject = JSONObject.parseObject(retStr);
+                PaymentInfoResponseDto resultMap = JSONObject.parseObject(JSONObject.toJSONString(jsonObject.get("data")), PaymentInfoResponseDto.class);
+                if(null == resultMap){
+                    throw new Exception("查询失败");
+                }
+                resultMap.setSuccess(jsonObject.getBoolean("success"));
+                log.info(" `new 调用查询接口>>>{} 返回结果>>>{} ",resultMap,jsonObject.get("data"));
+                return resultMap;
+            }catch (Exception e){
+                throw new Exception("查询失败");
+            }
+        }
+    }
+
+    private String post(String url, String jsonString) {
+        Map<String,String > header = new HashMap<>();
+        header.put("Content-Type","application/json");
+        String retStr = "";
+        if(url.startsWith("https:")){
+            retStr = HttpClientUtil.httpsRequest(url, HttpClientUtil.POST, jsonString, header);
+        }else{
+            retStr = HttpClientUtil.httpRequest(url,HttpClientUtil.POST, jsonString,header);
+        }
+        return retStr;
+    }
+
+
+}

+ 76 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/service/PaymentService.java

@@ -0,0 +1,76 @@
+package com.tzy.framework.pay.service;
+
+
+import com.tzy.framework.pay.dto.PaymentInfoResponseDto;
+import com.tzy.framework.pay.dto.PaymentRequestDto;
+import com.tzy.framework.pay.dto.RefundRequestDto;
+import com.tzy.framework.pay.dto.ResultMap;
+
+import java.math.BigDecimal;
+
+/**
+ * 支付
+ */
+public interface PaymentService<T> {
+    //支付统一下单
+    public ResultMap unifiedOrder(PaymentRequestDto paymentRequestDto);
+    //查询订单
+    public PaymentInfoResponseDto queryPaymentOrder(String payWay, String orderNo);
+    //支付退款
+    @Deprecated
+    public ResultMap refund(String payWay, String orderNo, BigDecimal orderPrice, BigDecimal refundAmount, String refundMsg);
+    //关闭订单
+    public ResultMap close(String payWay, String orderNo);
+    //查询退款订单
+    public ResultMap refundQuery(String payWay,String tradeNo, String refundNo);
+
+    //
+    public PaymentInfoResponseDto queryPaymentOrder(PaymentRequestDto paymentRequestDto);
+
+    @Deprecated
+    public ResultMap close(PaymentRequestDto paymentRequestDto);
+
+    @Deprecated
+    public ResultMap refund(RefundRequestDto refundRequestDto);
+
+    public ResultMap refundQuery(RefundRequestDto refundRequestDto);
+    /*********************新支付逻辑********************/
+
+    public T initPayConfigs(String payWay, Class<T> tClass);
+
+    //获取银行列表
+    public ResultMap getBankList(PaymentRequestDto paymentRequestDto);
+
+    /**
+     * 预支付
+     * @param payRequestBody
+     */
+    public ResultMap readPay(PaymentRequestDto payRequestBody);
+
+    /**
+     * 确认支付
+     * @param payRequestBody
+     */
+    public ResultMap confirmPay(PaymentRequestDto payRequestBody);
+
+    //支付统一下单
+    public ResultMap unifiedOrderNew(PaymentRequestDto paymentRequestDto);
+    //查询订单
+    public PaymentInfoResponseDto queryPaymentOrderNew(String payWay, String orderNo);
+    //支付退款
+    @Deprecated
+    public ResultMap refundNew(String payWay, String orderNo, BigDecimal orderPrice, BigDecimal refundAmount, String refundMsg);
+    //关闭订单
+    public ResultMap closeNew(String payWay, String orderNo);
+    //查询退款订单
+    public ResultMap refundQueryNew(String payWay,String tradeNo, String refundNo);
+
+    //
+    public PaymentInfoResponseDto queryPaymentOrderNew(PaymentRequestDto paymentRequestDto);
+
+    public ResultMap closeNew(PaymentRequestDto paymentRequestDto);
+
+    public ResultMap refundNew(RefundRequestDto refundRequestDto);
+
+    public ResultMap refundQueryNew(RefundRequestDto refundRequestDto);
+}

+ 31 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/service/QmH5PayService.java

@@ -0,0 +1,31 @@
+package com.tzy.framework.pay.service;
+
+
+import com.tzy.framework.pay.dto.PaymentInfoResponseDto;
+import com.tzy.framework.pay.dto.PaymentRequestDto;
+import com.tzy.framework.pay.dto.RefundRequestDto;
+import com.tzy.framework.pay.dto.ResultMap;
+
+import java.math.BigDecimal;
+
+public interface QmH5PayService {
+
+    //统一下单
+    public ResultMap tradeCreate(PaymentRequestDto paymentRequestDto);
+    //查询订单
+    public PaymentInfoResponseDto queryOrder(String appid, String payWay, String  orderNo);
+    //退款
+    public ResultMap refund(String appid, String payWay,String orderNo, BigDecimal refundPrice, String refundMsg);
+    //退款查询
+    public ResultMap refundQuery(String appid,String payWay,String outRefundNo);
+    //关闭订单
+    public ResultMap colse(String appid,String payWay,String orderNo);
+    //统一下单
+    public ResultMap tradeCreateNew(PaymentRequestDto paymentRequestDto);
+    //查询订单
+    public PaymentInfoResponseDto queryOrder(PaymentRequestDto paymentRequestDto);
+    //退款
+    public ResultMap refund(RefundRequestDto refundRequestDto);
+    //退款查询
+    public ResultMap refundQuery(RefundRequestDto refundRequestDto);
+}

+ 12 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/service/QmPayAssetService.java

@@ -0,0 +1,12 @@
+package com.tzy.framework.pay.service;
+
+import com.tzy.framework.pay.dto.QmZgOrderInfoDto;
+
+import java.util.List;
+
+public interface QmPayAssetService {
+
+    public void upAtPrice02(List<QmZgOrderInfoDto> params,String timeStr);
+
+
+}

+ 45 - 0
tzy-framework/src/main/java/com/tzy/framework/pay/service/QmPayService.java

@@ -0,0 +1,45 @@
+package com.tzy.framework.pay.service;
+
+
+import com.tzy.framework.pay.config.QmPayConfig;
+import com.tzy.framework.pay.dto.PaymentInfoResponseDto;
+import com.tzy.framework.pay.dto.PaymentRequestDto;
+import com.tzy.framework.pay.dto.RefundRequestDto;
+import com.tzy.framework.pay.dto.ResultMap;
+
+import java.math.BigDecimal;
+
+public interface QmPayService {
+    //统一下单
+    public ResultMap tradeCreate(PaymentRequestDto paymentRequestDto);
+    //查询订单
+    public PaymentInfoResponseDto queryOrder(String appid,String payWay, String  orderNo);
+    //退款
+    public ResultMap refund(String appid,String payWay,String orderNo, BigDecimal refundPrice, String refundMsg);
+    //退款查询
+    public ResultMap refundQuery(String appid,String payWay,String outRefundNo);
+    //关闭订单
+    public ResultMap colse(String appid,String payWay,String orderNo);
+
+    public  String getMerchantOrderId(QmPayConfig qmPayConfig);
+
+    public String getBoxUrl(String payWay,String method) throws Exception;
+
+    public String getUrl(String payWay,String method) throws Exception;
+
+    public String getUrlNew(String payWay,QmPayConfig qmPayConfig,String method) throws Exception;
+
+    public String getOpenBodySig(String appId, String appKey, String body);
+
+    public String send(String url, String entity , String authorization) throws Exception;
+    //统一下单
+    public ResultMap tradeCreateNew(PaymentRequestDto paymentRequestDto);
+    //查询订单
+    public PaymentInfoResponseDto queryOrder(PaymentRequestDto paymentRequestDto);
+    //退款
+    public ResultMap refund(RefundRequestDto refundRequestDto);
+    //退款查询
+    public ResultMap refundQuery( RefundRequestDto refundRequestDto);
+    //关闭订单
+    public ResultMap colseNew(PaymentRequestDto paymentRequestDto);
+}

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor