Explorar o código

golden 支付相关

yexianchao hai 1 mes
pai
achega
4562e6c576
Modificáronse 100 ficheiros con 9262 adicións e 54 borrados
  1. 19 1
      crm-custom/src/main/java/com/crm/custom/controller/GoldenGoodsController.java
  2. 36 0
      crm-custom/src/main/java/com/crm/custom/controller/GoldenOrderController.java
  3. 5 0
      crm-custom/src/main/java/com/crm/custom/dao/mapper/GoldenGoodsMapper.java
  4. 18 0
      crm-custom/src/main/java/com/crm/custom/dao/mapper/GoldenOrderMapper.java
  5. 4 1
      crm-custom/src/main/java/com/crm/custom/service/GoldenGoodsService.java
  6. 12 0
      crm-custom/src/main/java/com/crm/custom/service/GoldenOrderService.java
  7. 24 8
      crm-custom/src/main/java/com/crm/custom/service/impl/GoldenGoodsServiceImpl.java
  8. 81 0
      crm-custom/src/main/java/com/crm/custom/service/impl/GoldenOrderServiceImpl.java
  9. 1 1
      crm-custom/src/main/resources/application-dev.yml
  10. 27 0
      crm-custom/src/main/resources/mapper/GoldenGoods.xml
  11. 47 0
      crm-custom/src/main/resources/mapper/GoldenOrder.xml
  12. 1 1
      crm-manager/src/main/resources/application-dev.yml
  13. 14 0
      crm-model/src/main/java/com/crm/rely/backend/model/constant/ConfigConstants.java
  14. 484 0
      crm-model/src/main/java/com/crm/rely/backend/model/constant/PayConstants.java
  15. 16 0
      crm-model/src/main/java/com/crm/rely/backend/model/dto/finance/withdraw/FinanceAgentWithdrawDto.java
  16. 110 4
      crm-model/src/main/java/com/crm/rely/backend/model/dto/finance/withdraw/FinanceWithdrawDto.java
  17. 13 0
      crm-model/src/main/java/com/crm/rely/backend/model/dto/finance/withdraw/ozow/FinanceWithdrawOzowBankDetailDto.java
  18. 31 0
      crm-model/src/main/java/com/crm/rely/backend/model/dto/golden/order/GoldenOrderDetailsDto.java
  19. 57 0
      crm-model/src/main/java/com/crm/rely/backend/model/dto/golden/order/GoldenOrderListDto.java
  20. 47 0
      crm-model/src/main/java/com/crm/rely/backend/model/dto/sys/remittance/channel/bank/SysChannelBankByChannelCodeDto.java
  21. 51 0
      crm-model/src/main/java/com/crm/rely/backend/model/dto/sys/remittance/channel/bank/SysChannelBankDto.java
  22. 3 0
      crm-model/src/main/java/com/crm/rely/backend/model/entity/custom/info/CustomInfoEntity.java
  23. 58 1
      crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/deposit/FinanceDepositAddEntity.java
  24. 18 0
      crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/deposit/FinanceMerchantDepositAddEntity.java
  25. 18 0
      crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/serial/mapping/FinanceDepositSerialMappingEntity.java
  26. 13 0
      crm-model/src/main/java/com/crm/rely/backend/model/entity/golden/order/GoldenOrderSearchEntity.java
  27. 29 0
      crm-model/src/main/java/com/crm/rely/backend/model/entity/sys/config/SysConfigAutolimitEntity.java
  28. 22 0
      crm-model/src/main/java/com/crm/rely/backend/model/entity/sys/remittance/channel/SysRemittanceChannelListEntity.java
  29. 14 0
      crm-model/src/main/java/com/crm/rely/backend/model/entity/sys/remittance/channel/bank/SysChannelBankByChannelCodeListEntity.java
  30. 11 0
      crm-model/src/main/java/com/crm/rely/backend/model/entity/sys/remittance/channel/bank/SysChannelBankByCodeEntity.java
  31. 59 0
      crm-model/src/main/java/com/crm/rely/backend/model/entity/sys/remittance/channel/bank/SysChannelBankSaveEntity.java
  32. 3 0
      crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/CustomInfoTable.java
  33. 25 0
      crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/FinanceDepositSerialMappingTable.java
  34. 145 10
      crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/FinanceDepositTable.java
  35. 37 0
      crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/FinanceRateTable.java
  36. 118 2
      crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/FinanceWithdrawTable.java
  37. 40 0
      crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/GoldenOrderDetailsTable.java
  38. 58 0
      crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/GoldenOrderTable.java
  39. 66 0
      crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/SysChannelBankTable.java
  40. 74 1
      crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/SysRemitChannelTable.java
  41. 94 3
      crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/SysRemittanceChannelTable.java
  42. 5 0
      crm-model/src/main/java/com/crm/rely/backend/model/pojo/view/GoldenGoodsVideoListView.java
  43. 12 0
      crm-model/src/main/java/com/crm/rely/backend/model/pojo/view/SysRemittanceChannelView.java
  44. 18 0
      crm-pay/pom.xml
  45. 38 0
      crm-pay/src/main/java/com/crm/pay/constant/MerchantConstants.java
  46. 61 0
      crm-pay/src/main/java/com/crm/pay/constant/MerchantFailEnum.java
  47. 6 6
      crm-pay/src/main/java/com/crm/pay/controller/FinanceWithdrawController.java
  48. 54 0
      crm-pay/src/main/java/com/crm/pay/controller/SysChannelBankController.java
  49. 3 7
      crm-pay/src/main/java/com/crm/pay/controller/SysRemittanceChannelController.java
  50. 173 0
      crm-pay/src/main/java/com/crm/pay/controller/base/BasePayCloseFunctionController.java
  51. 112 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/AcePayController.java
  52. 115 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/AcepaymentController.java
  53. 110 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/AllbtpayController.java
  54. 157 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/AlllandPayController.java
  55. 115 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/AlphaPayController.java
  56. 107 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/AnxController.java
  57. 188 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/B2BinPayController.java
  58. 94 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/B2BinV2PayController.java
  59. 134 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/BearExPayController.java
  60. 106 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/BieaseController.java
  61. 124 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/BifutongPayController.java
  62. 111 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/BipiPayController.java
  63. 126 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/BrightcartController.java
  64. 155 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/CheezeepayController.java
  65. 112 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/ChipController.java
  66. 136 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/ClickPayController.java
  67. 146 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/CwgPayController.java
  68. 41 8
      crm-pay/src/main/java/com/crm/pay/controller/pay/DigitalPayController.java
  69. 128 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/EcomController.java
  70. 113 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/EvirtualpayController.java
  71. 114 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/ExPayController.java
  72. 130 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/ExlinkDigitalPayController.java
  73. 206 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/ExlinkPayController.java
  74. 108 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/FlashExController.java
  75. 192 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/FlashPayController.java
  76. 184 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/GPayController.java
  77. 108 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/GroupOtcController.java
  78. 181 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/HYPayController.java
  79. 152 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/HelpController.java
  80. 142 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/HuaboController.java
  81. 110 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/HyperHashingController.java
  82. 154 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/IbitController.java
  83. 121 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/InoutworkController.java
  84. 114 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/KonnexpyController.java
  85. 162 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/KorapayCheckoutController.java
  86. 201 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/KorapayController.java
  87. 113 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/KuboController.java
  88. 113 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/Long77PayController.java
  89. 148 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/MtController.java
  90. 147 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/MtPayController.java
  91. 127 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/NaceController.java
  92. 298 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/NePayController.java
  93. 117 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/NetellerController.java
  94. 126 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/NganluongController.java
  95. 144 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/OfaPayController.java
  96. 114 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/Otc365CnController.java
  97. 114 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/Otc365CnV2Controller.java
  98. 186 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/OzowController.java
  99. 166 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/PartnerPayController.java
  100. 167 0
      crm-pay/src/main/java/com/crm/pay/controller/pay/PartnerTwPayController.java

+ 19 - 1
crm-custom/src/main/java/com/crm/custom/controller/GoldenGoodsController.java

@@ -28,7 +28,25 @@ public class GoldenGoodsController {
 
     @PostMapping("/search/list")
     public ResultWithPagerDto<GoldenGoodsListDto> customPageList(@RequestBody GoldenGoodsSearchEntity entity, CustomInfoEntity infoEntity) throws Exception {
-        return goldenGoodsService.customPageList(entity,infoEntity);
+        if (infoEntity == null || infoEntity.getId() == null) {
+            entity.setCustomId(-1l);
+        }else {
+            entity.setCustomId(infoEntity.getId());
+        }
+        return goldenGoodsService.customPageList(entity);
+    }
+
+    /**
+     * 购买的课程
+     */
+    @PostMapping("/order/list")
+    public ResultWithPagerDto<GoldenGoodsListDto> customOrderList(@RequestBody GoldenGoodsSearchEntity entity, CustomInfoEntity infoEntity) throws Exception {
+        if (infoEntity == null || infoEntity.getId() == null) {
+            entity.setCustomId(-1l);
+        }else {
+            entity.setCustomId(infoEntity.getId());
+        }
+        return goldenGoodsService.customOrderList(entity);
     }
 
     @PostMapping("/manager/add")

+ 36 - 0
crm-custom/src/main/java/com/crm/custom/controller/GoldenOrderController.java

@@ -0,0 +1,36 @@
+package com.crm.custom.controller;
+
+import com.crm.custom.service.GoldenOrderService;
+import com.crm.rely.backend.core.constant.FeignClientAnnotation;
+import com.crm.rely.backend.core.dto.base.ResultWithPagerDto;
+import com.crm.rely.backend.model.dto.golden.order.GoldenOrderListDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.golden.order.GoldenOrderSearchEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/order")
+public class GoldenOrderController {
+
+    @Autowired
+    private GoldenOrderService goldenOrderService;
+
+    @PostMapping("/search/list")
+    public ResultWithPagerDto<GoldenOrderListDto> customPageList(@RequestBody GoldenOrderSearchEntity entity, CustomInfoEntity infoEntity) throws Exception {
+        if (infoEntity == null || infoEntity.getId() == null) {
+            entity.setCustomId(-1l);
+        }else {
+            entity.setCustomId(infoEntity.getId());
+        }
+
+        return goldenOrderService.searchPageList(entity);
+    }
+
+    @PostMapping("/manager/search/list")
+    @FeignClientAnnotation
+    public ResultWithPagerDto<GoldenOrderListDto> pageList(@RequestBody GoldenOrderSearchEntity entity) throws Exception {
+        return goldenOrderService.searchPageList(entity);
+    }
+
+}

+ 5 - 0
crm-custom/src/main/java/com/crm/custom/dao/mapper/GoldenGoodsMapper.java

@@ -10,6 +10,11 @@ public interface GoldenGoodsMapper {
 
     List<GoldenGoodsListView> customPageList(GoldenGoodsSearchEntity entity);
 
+    Integer customOrderCount(GoldenGoodsSearchEntity entity);
+
+    List<GoldenGoodsTable> customOrderList(GoldenGoodsSearchEntity entity);
+
+
     Integer countList(GoldenGoodsSearchEntity entity);
 
     List<GoldenGoodsTable> pageList(GoldenGoodsSearchEntity entity);

+ 18 - 0
crm-custom/src/main/java/com/crm/custom/dao/mapper/GoldenOrderMapper.java

@@ -0,0 +1,18 @@
+package com.crm.custom.dao.mapper;
+
+import com.crm.rely.backend.model.dto.golden.order.GoldenOrderDetailsDto;
+import com.crm.rely.backend.model.entity.golden.order.GoldenOrderSearchEntity;
+import com.crm.rely.backend.model.pojo.table.GoldenOrderTable;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface GoldenOrderMapper {
+
+    Integer countList(GoldenOrderSearchEntity entity);
+
+    List<GoldenOrderTable> pageList(GoldenOrderSearchEntity entity);
+
+    List<GoldenOrderDetailsDto> getListBySerial(@Param("serialList") List<String> serialList);
+
+}

+ 4 - 1
crm-custom/src/main/java/com/crm/custom/service/GoldenGoodsService.java

@@ -13,7 +13,9 @@ import org.springframework.web.multipart.MultipartFile;
 
 public interface GoldenGoodsService {
 
-    ResultWithPagerDto<GoldenGoodsListDto> customPageList(GoldenGoodsSearchEntity entity, CustomInfoEntity infoEntity);
+    ResultWithPagerDto<GoldenGoodsListDto> customPageList(GoldenGoodsSearchEntity entity);
+
+    ResultWithPagerDto<GoldenGoodsListDto> customOrderList(GoldenGoodsSearchEntity entity );
 
     void add(GoldenGoodsAddEntity entity) throws ServiceException;
 
@@ -29,4 +31,5 @@ public interface GoldenGoodsService {
 
     String uploadFile(MultipartFile file) throws Exception;
 
+
 }

+ 12 - 0
crm-custom/src/main/java/com/crm/custom/service/GoldenOrderService.java

@@ -0,0 +1,12 @@
+package com.crm.custom.service;
+
+import com.crm.rely.backend.core.dto.base.ResultWithPagerDto;
+import com.crm.rely.backend.core.exception.ServiceException;
+import com.crm.rely.backend.model.dto.golden.order.GoldenOrderListDto;
+import com.crm.rely.backend.model.entity.golden.order.GoldenOrderSearchEntity;
+
+public interface GoldenOrderService {
+
+    ResultWithPagerDto<GoldenOrderListDto> searchPageList(GoldenOrderSearchEntity entity) throws ServiceException;
+
+}

+ 24 - 8
crm-custom/src/main/java/com/crm/custom/service/impl/GoldenGoodsServiceImpl.java

@@ -35,13 +35,7 @@ public class GoldenGoodsServiceImpl extends BaseUploadServiceImpl implements Gol
     private GoldenGoodsMapper mapper;
 
     @Override
-    public ResultWithPagerDto<GoldenGoodsListDto> customPageList(GoldenGoodsSearchEntity entity, CustomInfoEntity infoEntity) throws ServiceException {
-        if (infoEntity == null || infoEntity.getId() == null) {
-            entity.setCustomId(-1l);
-        }else {
-            entity.setCustomId(infoEntity.getId());
-        }
-
+    public ResultWithPagerDto<GoldenGoodsListDto> customPageList(GoldenGoodsSearchEntity entity) throws ServiceException {
         Integer count = mapper.countList(entity);
         PageDto pageDto = PageDto.format(entity, count);
         if (count == null || count <= 0) {
@@ -57,7 +51,7 @@ public class GoldenGoodsServiceImpl extends BaseUploadServiceImpl implements Gol
             GoldenGoodsListDto dto = new GoldenGoodsListDto();
             BeanUtils.copyProperties(view, dto);
 
-            if (infoEntity == null || infoEntity.getId() == null) {
+            if (entity.getCustomId() < 0) {
                 dto.setCustomType(0);
             }else{
                 if(view.getCustomId() == null){
@@ -73,6 +67,28 @@ public class GoldenGoodsServiceImpl extends BaseUploadServiceImpl implements Gol
         return ResultWithPagerDto.success(pageDto, dtos);
     }
 
+    @Override
+    public ResultWithPagerDto<GoldenGoodsListDto> customOrderList(GoldenGoodsSearchEntity entity) {
+        Integer count = mapper.customOrderCount(entity);
+        PageDto pageDto = PageDto.format(entity, count);
+        if (count == null || count <= 0) {
+            return ResultWithPagerDto.success(pageDto);
+        }
+        List<GoldenGoodsTable> tables = mapper.customOrderList(entity);
+        if (tables == null || tables.size() <= 0) {
+            throw new ServiceException(Constants.SYSTEM_ERROR);
+        }
+        List<GoldenGoodsListDto> dtos = new ArrayList<>(tables.size());
+
+        for (GoldenGoodsTable table : tables) {
+            GoldenGoodsListDto dto = transformSearchListDto(table);
+            dtos.add(dto);
+        }
+
+
+        return ResultWithPagerDto.success(pageDto, dtos);
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void add(GoldenGoodsAddEntity entity) throws ServiceException {

+ 81 - 0
crm-custom/src/main/java/com/crm/custom/service/impl/GoldenOrderServiceImpl.java

@@ -0,0 +1,81 @@
+package com.crm.custom.service.impl;
+
+import com.crm.custom.dao.mapper.GoldenOrderMapper;
+import com.crm.custom.service.GoldenOrderService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.core.dto.base.PageDto;
+import com.crm.rely.backend.core.dto.base.ResultWithPagerDto;
+import com.crm.rely.backend.core.entity.base.SingleLongEntity;
+import com.crm.rely.backend.core.exception.ServiceException;
+import com.crm.rely.backend.model.dto.golden.order.GoldenOrderDetailsDto;
+import com.crm.rely.backend.model.dto.golden.order.GoldenOrderListDto;
+import com.crm.rely.backend.model.entity.golden.order.GoldenOrderSearchEntity;
+import com.crm.rely.backend.model.pojo.table.GoldenOrderDetailsTable;
+import com.crm.rely.backend.model.pojo.table.GoldenOrderTable;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class GoldenOrderServiceImpl implements GoldenOrderService {
+
+    @Autowired
+    private GoldenOrderMapper mapper;
+
+    @Override
+    public ResultWithPagerDto<GoldenOrderListDto> searchPageList(GoldenOrderSearchEntity entity) throws ServiceException {
+        Integer count = mapper.countList(entity);
+        PageDto pageDto = PageDto.format(entity, count);
+        if (count == null || count <= 0) {
+            return ResultWithPagerDto.success(pageDto);
+        }
+        List<GoldenOrderTable> tables = mapper.pageList(entity);
+        if (tables == null || tables.size() <= 0) {
+            throw new ServiceException(Constants.SYSTEM_ERROR);
+        }
+        List<String> serialList = new ArrayList<>();
+        for (GoldenOrderTable table : tables) {
+            serialList.add(table.getSerial());
+        }
+
+        Map<String,List<GoldenOrderDetailsDto>> map = new HashMap<>();
+        List<GoldenOrderDetailsDto> detailsDtos = mapper.getListBySerial(serialList);
+        for (GoldenOrderDetailsDto dto : detailsDtos) {
+            List<GoldenOrderDetailsDto> dtos = null;
+            if (map.containsKey(dto.getSerial())) {
+                dtos = map.get(dto.getSerial());
+            }else {
+                dtos = new ArrayList<>();
+            }
+            dtos.add(dto);
+
+            map.put(dto.getSerial(), dtos);
+        }
+
+
+        List<GoldenOrderListDto> dtos = new ArrayList<>(tables.size());
+        for (GoldenOrderTable table : tables) {
+            GoldenOrderListDto dto = transformSearchListDto(table);
+            dto.setDetails(map.get(table.getSerial()));
+            dtos.add(dto);
+        }
+
+        return ResultWithPagerDto.success(pageDto, dtos);
+    }
+
+
+
+
+    private GoldenOrderListDto transformSearchListDto(GoldenOrderTable table) {
+        GoldenOrderListDto dto = new GoldenOrderListDto();
+        BeanUtils.copyProperties(table, dto);
+        return dto;
+    }
+
+
+}

+ 1 - 1
crm-custom/src/main/resources/application-dev.yml

@@ -15,7 +15,7 @@ spring:
 #    host: 47.75.159.72
 #    masterPassword: 123123
 web:
-  upload-path: ..\upload
+  upload-path: ../upload
   front-path: G:\crm\trader_test_front\customer-frontend-dist
 eureka:
   client:

+ 27 - 0
crm-custom/src/main/resources/mapper/GoldenGoods.xml

@@ -24,6 +24,33 @@
         </if>
     </select>
 
+
+    <select id="customOrderCount" resultType="integer"
+            parameterType="com.crm.rely.backend.model.entity.golden.goods.GoldenGoodsSearchEntity">
+        select count(*) from golden_goods goods
+        left join golden_order_details der on goods.id = der.goods_id
+        where der.custom_id = #{customId}
+        <if test="goodsType!=null">
+            and goods.`goods_type` = #{goodsType}
+        </if>
+    </select>
+
+    <select id="customOrderList" resultType="com.crm.rely.backend.model.pojo.table.GoldenGoodsTable"
+            parameterType="com.crm.rely.backend.model.entity.golden.goods.GoldenGoodsSearchEntity">
+        select goods.*
+        from golden_goods goods
+        left join golden_order_details der on goods.id = der.goods_id
+        where der.custom_id = #{customId}
+        <if test="goodsType!=null">
+            and goods.`goods_type` = #{goodsType}
+        </if>
+        order by der.id desc
+        <if test="page != null">
+            limit #{page.offset},#{page.row}
+        </if>
+    </select>
+
+
     <select id="countList" resultType="integer"
             parameterType="com.crm.rely.backend.model.entity.golden.goods.GoldenGoodsSearchEntity">
         select count(*) from golden_goods

+ 47 - 0
crm-custom/src/main/resources/mapper/GoldenOrder.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.crm.custom.dao.mapper.GoldenOrderMapper">
+
+    <select id="countList" resultType="integer"
+            parameterType="com.crm.rely.backend.model.entity.golden.order.GoldenOrderSearchEntity">
+        select count(*) from golden_order der
+        <where>
+            <if test="customId!=null">
+                and der.`custom_id` = #{customId}
+            </if>
+            <if test="serial!=null and serial!=''">
+                and der.serial = #{serial}
+            </if>
+        </where>
+    </select>
+
+    <select id="pageList" resultType="com.crm.rely.backend.model.pojo.table.GoldenOrderTable"
+            parameterType="com.crm.rely.backend.model.entity.golden.order.GoldenOrderSearchEntity">
+        select * from golden_order der
+        <where>
+            <if test="customId!=null">
+                and der.`custom_id` = #{customId}
+            </if>
+            <if test="serial!=null and serial!=''">
+                and der.serial = #{serial}
+            </if>
+        </where>
+        order by id desc
+        <if test="page != null">
+            limit #{page.offset},#{page.row}
+        </if>
+    </select>
+
+    <select id="getListBySerial" resultType="com.crm.rely.backend.model.dto.golden.order.GoldenOrderDetailsDto">
+        SELECT *
+        FROM golden_order_details
+        where serial in
+        <foreach collection="serialList" index="index" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        FOR UPDATE
+    </select>
+
+</mapper>

+ 1 - 1
crm-manager/src/main/resources/application-dev.yml

@@ -16,7 +16,7 @@ logging:
     com.crm.manager.dao.mapper: trace
 
 web:
-  upload-path: ..\upload
+  upload-path: ../upload
   front-path: G:\crm\trader_test_front\manager-frontend-dist
 eureka:
   client:

+ 14 - 0
crm-model/src/main/java/com/crm/rely/backend/model/constant/ConfigConstants.java

@@ -30,4 +30,18 @@ public class ConfigConstants {
 
 
     public final static String FINANCE_CONFIGURE = "FINANCE_CONFIGURE";
+
+    //网址管理中 个人中心地址设置
+    public static final String WEB_MY_URE_CONFIG = "WEB_MY_URE_CONFIG";
+
+    //自动限制入金
+    public static final String AUTOLIMIT_DEPOSIT_CONFIG = "AUTOLIMIT_DEPOSIT_CONFIG";
+
+    public static final String FINANCE_DEPOSIT_MAX = "FINANCE_DEPOSIT_MAX";
+    public static final String FINANCE_DEPOSIT_MIN = "FINANCE_DEPOSIT_MIN";
+
+    public static final String FINANCE_PROPERTY_KEY = "FINANCE_PROPERTY_KEY";
+
+    public static final String CHANNEL_BANK_RATE = "CHANNEL_BANK_RATE";
+
 }

+ 484 - 0
crm-model/src/main/java/com/crm/rely/backend/model/constant/PayConstants.java

@@ -28,6 +28,13 @@ public class PayConstants {
 
     public final static String FINANCE_WITHDRAW_CHANNEL_NOT_EMPTY = "finance_withdraw_channel_not_empty";
 
+    /**
+     * 不存在汇率
+     */
+    public final static String FINANCE_DEPOSIT_RATE_NOT_EMPTY = "finance_deposit_rate_not_empty";
+
+    public final static String FINANCE_WITHDRAW_RATE_NOT_EMPTY = "finance_withdraw_rate_not_empty";
+
     public final static String INSUFFICIENT_FUNDS = "insufficient_funds";
     public final static String FINANCE_TRAIN = "FTRAIN";
 
@@ -43,6 +50,7 @@ public class PayConstants {
 
 
     public final static String XPAY_PAY_TYPE = "XPAY_PAY_TYPE";
+    public final static String XPAY_PAY_CRYPTOCURRENCIE_TYPE = "XPAY_PAY_CRYPTOCURRENCIE_TYPE";
     public final static String XPAY_PAY_SUCCESS_STATUS = "COMPLETE";
 
 
@@ -53,4 +61,480 @@ public class PayConstants {
     public final static String WITHDRAW_HEAD = "PW";
     public final static String TRANSFER_HEAD = "PT";
 
+    public static final Integer APPLY_REAL_STATUS = 0;
+
+    public static final Integer APPLY_STATUS = 1;
+
+    public static final Integer PASSED_STATUS = 2;
+
+    public static final Integer DELETED_STATUS = 99;
+
+    public static final Integer REJECTED_STATUS = 3;
+
+    //重新上传状态
+    public static final Integer UPLOAD_STATUS = 4;
+
+    //取消
+    public static final Integer CANCEL_STATUS = 5;
+
+    //和manager处理的三种状态 0:待处理 1处理中 2处理完成
+    public static final Integer MANAGER_PENDING_STATUS = 0;
+
+    public static final Integer MANAGER_PROCESSING_STATUS = 1;
+
+    //1:系统自动方式 2:人工方式
+    public static final int OPERATION_TYPE_AUTOMATIC = 1;
+
+    public static final int OPERATION_TYPE_MANUAL = 2;
+
+    public static final Integer MANAGER_COMPLETED_STATUS = 2;
+    public static final Integer MANAGER_FAIL_STATUS = 3;
+
+    //入(出)金回调的三种状态 0入(出)金中 1入(出)金成功 2 入(出)金失败
+    public static final Integer CALLBACE_PROCESSING_STATUS = 0;
+
+    public static final Integer CALLBACE_SUCCESS_STATUS = 1;
+
+    public static final Integer CALLBACE_FAIL_STATUS = 2;
+
+    public static final String UGATE_PAY_WITHDRAW_QUERY_CALLBACK = "UGATE_PAY_WITHDRAW_QUERY_CALLBACK";
+
+    public static final Integer SUBMIT_PENDING_STATUS = 0;
+
+    public static final Integer SUBMIT_PROCESSING_STATUS = 1;
+
+    //未支付
+    public static final Integer ORDER_UP_PAY_STATUS = 1;
+
+    //已支付
+    public static final Integer ORDER_PAY_STATUS = 2;
+
+    //支付失败
+    public static final Integer ORDER_PAY_ERROR_STATUS = 3;
+
+    //已过期
+    public static final Integer ORDER_PAY_EXPIRED_STATUS  = 4;
+
+    //已取消
+    public static final Integer ORDER_PAY_CANCLE_D_STATUS  = 5;
+
+    public static final String SALES_USER_EMAIL = "SALES_USER_EMAIL";
+
+    public final static String ORDER_EXPIRED = "order_expired";
+    public final static Integer UCARD_PAY_TYPE_REMIT_PAY_TIME = 30;
+
+    public static final String UCARD_PAY_WITHDRAW_LIMIT_AMOUNT = "UCARD_PAY_WITHDRAW_LIMIT_AMOUNT";
+
+    public static final String UCARD_CARD = "UCARD_CARD";
+    public static final String UCARD_CARD_APPLY_PROGRESS = "UCARD_CARD_APPLY_PROGRESS";
+
+    public static final String UCARD_CARD_FAST_WITHDRAW = "UCARD_CARD_FAST_WITHDRAW";
+    public static final String UCARD_CARD_AGENT_FAST_WITHDRAW = "UCARD_CARD_AGENT_FAST_WITHDRAW";
+
+    /**
+     * safepay支付类型 -usdt
+     */
+    public final static String SAFE_PAY_CURRENCY = "USDT";
+
+    public static final Integer CALLBACE_VALIDATE_SUCCESS_STATUS = 0;
+    public static final Integer CALLBACE_VALIDATE_PROCESSING_STATUS = 2;
+
+    public static final Integer CALLBACE_VALIDATE_FAIL_STATUS = 3;
+
+    public final static String PAY_TYPE_SAFE = "SAFE_PAY";
+
+    public final static String FLASHEX_TYPE_KEY = "FLASHEX_PAY";
+
+    public final static String GROUP_OTC_TYPE_KEY = "GROUP_OTC_PAY";
+
+    public final static String PAY_MTPAY_CNY = "MTPAY_CNY";
+    public final static String PAY_MTPAY_MYR = "MTPAY_MYR";
+    public final static String PAY_MTPAY_IDR = "MTPAY_IDR";
+    public final static String PAY_MTPAY_VND = "MTPAY_VND";
+    public final static String MTPAY_CNY = "cny";
+    public final static String MTPAY_MYR = "myr";
+    public final static String MTPAY_IDR = "idr";
+    public final static String MTPAY_VND = "vnd";
+
+    public final static String HELP_PAY_TYPE = "HELP_PAY";
+
+    public final static String EX_PAY_KEY = "EX_PAY";
+
+    public final static String B2BIN_PAY_TYPE_KEY = "B2BINPAY";
+
+    public final static String B2BIN_V2_PAY_TYPE_KEY = "B2BINV2PAY";
+
+    public final static String TELEGRAPHIC_PAY_TYPE_KEY = "UNION_PAY_TELEGRAPHIC";
+    public final static String UNION_PAY_TELEGRAPHIC_SPECIAL_TYPE_KEY = "UNION_PAY_TELEGRAPHIC_SPECIAL";
+    public final static String NGANLUONG_PAY_TYPE_KEY = "NGANLUONG_PAY";
+    public final static String UNION_PAY_TELEGRAPHIC_TWO = "UNION_PAY_TELEGRAPHIC_TWO";
+
+    public final static String PAY_TYPE_STIC = "STIC_PAY";
+
+    public final static String SKRILL_PAY_TYPE = "SKRILL_PAY";
+
+    public final static String OTC_365_CN_PAY_KEY = "OTC_365_CN_PAY_KEY";
+
+    public final static String OTC_365_CN_V2_PAY_KEY = "OTC_365_CN_V2_PAY_KEY";
+
+    public final static String UNIOTC_TYPE_KEY = "UNIOTC_TYPE_KEY";
+
+    public final static String NETELLER_PAY_TYPE = "NETELLER_PAY";
+
+
+    public final static String ACE_PAY_KEY = "ACE_PAY";
+
+    public final static String BIFUTONG_PAY_KEY = "BIFUTONG_PAY_KEY";
+    public final static String SPAYSWAORLD_PAY_KEY = "SPAYSWAORLD_PAY_KEY";
+
+
+    public final static String VA5_PAY_KEY_VA = "VA5_PAY_KEY_VA";
+    public final static String VA5_PAY_KEY_C2C = "VA5_PAY_KEY_C2C";
+    public final static String VA5_PAY_KEY_F2F = "VA5_PAY_KEY_F2F";
+
+    public final static String ALPHA_PAY_TYPE_KEY = "ALPHA_PAY";
+    public final static String ALLBT_PAY_TYPE = "ALLBT_PAY_TYPE";
+
+
+    public final static String BIPI_PAY_TYPE_KEY = "BIPI_PAY_TYPE_KEY";
+
+    public final static String CLICK_PAY_KEY = "CLICK_PAY_KEY";
+    public final static String DIGITAL_PAY_TYPE_KEY_UK = "DIGITAL_PAY_TYPE_KEY_UK";
+
+
+    public final static String ACCEPAYMENT_PAY_TYPE_KEY = "ACCEPAYMENT_PAY_TYPE_KEY";
+
+
+    public final static String G_PAY_ZFB_ZYM_HH_KEY = "G_PAY_ZFB_ZYM_HH_KEY";
+    public final static String G_PAY_USDT_KEY = "G_PAY_USDT_KEY";
+
+
+    public final static String ANX_PAY_KEY = "ANX_PAY_KEY";
+
+    public final static String NE_PAY_KEY = "NE_PAY_KEY";
+    public final static String NE_PAY_KEY_HC = "NE_PAY_KEY_HC";
+    public final static String NE_PAY_KEY_REMIT = "NE_PAY_KEY_REMIT";
+
+    public final static String NE_PAY_KEY_XJ = "NE_PAY_KEY_XJ";
+
+    public final static String MT_PAY_KEY = "MT_PAY_KEY";
+
+    public final static String PAY3_PAY_KEY = "PAY3_PAY_KEY";
+
+    public final static String UCARD_PAY_KEY = "UCARD_PAY_KEY";
+    public final static String VAULTODY_PAY_KEY = "VAULTODY_PAY_KEY";
+
+    public final static String VAULTODY_PAY_REMIT = "VAULTODY_PAY_REMIT";
+
+    public final static String UNION_PAY_REMIT = "UNION_PAY_REMIT";
+
+    public final static String UGATE_PAY_KEY = "UGATE_PAY_KEY";
+    public final static String UGATE_PAY_KEY_HC = "UGATE_PAY_KEY_HC";
+
+    public final static String FLASH_PAY_KEY = "FLASH_PAY_KEY";
+    public final static String FLASH_PAY_KEY_HC = "FLASH_PAY_KEY_HC";
+
+    public final static String PARTNER_PAY_KEY = "PARTNER_PAY_KEY";
+
+    public final static String ANX_PAY_SUCCESS = "0000";
+
+    public final static String HY_PAY_KEY = "HY_PAY_KEY";
+    public final static String HY_PAY_KEY_HC = "HY_PAY_KEY_HC";
+
+    public final static String PARTNER_TW_PAY_KEY = "PARTNER_TW_PAY_KEY";
+
+    public final static String ALLLAND_PAY_KEY = "ALLLAND_PAY_KEY";
+    public final static String ALLLAND_PAY_KEY_HC = "ALLLAND_PAY_KEY_HC";
+    public final static String ALLLAND_PAY_TYPE_REMIT = "ALLLAND_PAY_TYPE_REMIT";
+
+    public final static String S2S_PAY_KEY = "S2S_PAY_KEY";
+
+    public final static String XFG_PAY_KEY = "XFG_PAY_KEY";
+    public final static String XFG_PAY_TYPE_REMIT = "XFG_PAY_TYPE_REMIT";
+    public final static String XFG_PAY_REMIT_QUERY = "XFG_PAY_REMIT_QUERY";
+
+    public final static String UNIOTC_CHECK_SUCCESS = "Success";
+    public final static String UNIOTC_SUCCESS = "CODE_SUCCESS";
+
+    public final static String UNIOTC_SUCCESS_RESULT = "success";
+
+    public final static String ALLBTPAY_SUCCESS_STATUS000 = "success";
+    public final static String NETELLER_PAYMENT_HANDLE_PAYABLE = "PAYMENT_HANDLE_PAYABLE";
+    public final static String NETELLER_SUCCESS = "PAYMENT_COMPLETED";
+
+
+    public final static String ACE_SUCCESS_STATUS = "SUCCESS";
+    public final static String ACE_EXPIRE_STATUS = "EXPIRE";
+    public final static String ACE_WAIT_STATUS = "WAIT";
+
+    public final static String BIEASE_PAY_TYPE_KEY = "BIEASE_PAY_TYPE_KEY";
+
+    public final static String BIEASE_RESULT_SUCCESS_STATUS = "SUCCESS";
+    public final static String BIEASE_SUCCESS_STATUS = "3";
+
+    public final static String BRIGHTCART_PAY_KEY = "BRIGHTCART_PAY_KEY";
+    public final static String BRIGHTCART_SUCCESS_STATUS = "success";
+    public final static String BRIGHTCART_FAIL_STATUS = "fail";
+    public final static String BRIGHTCART_WAITING_STATUS = "waiting";
+
+    public final static String CWG_PAY_TYPE_REMIT = "CWG_PAY_TYPE_REMIT";
+    public final static String CWG_PAY_TYPE_REMIT_SUCCESS_STATUS = "2";
+    public final static String CHEEZEEPAY_PAY_TYPE = "CHEEZEEPAY_PAY_TYPE";
+    public final static String CHEEZEEPAY_THAILAND_PAY_TYPE = "CHEEZEEPAY_THAILAND_PAY_TYPE";
+    public final static String CHEEZEEPAY_BRAZIL_PAY_TYPE = "CHEEZEEPAY_BRAZIL_PAY_TYPE";
+    public final static String CHEEZEEPAY_INDONESIA_PAY_TYPE = "CHEEZEEPAY_INDONESIA_PAY_TYPE";
+    public final static String CHEEZEEPAY_PAY_TYPE_SUCCESS_STATUS = "1";
+    public final static String CHEEZEEPAY_PAY_TYPE_PARTIAL_SUCCESS_STATUS = "3";
+
+    public final static String CHEEZEEPAY_PAY_TYPE_RESULT_SUCCESS_STATUS = "SUCCESS";
+
+    public final static String CHIP_PAY_KEY = "CHIP_PAY_KEY";
+    public final static String CHIP_SUCCESS = "1";
+    public final static String CHIP_FAIL = "0";
+
+    public final static String EXLINK_PAY_KEY = "EXLINK_PAY_KEY";
+    public final static String EXLINK_SUCCESS_STATUS = "1";
+
+
+    public final static String EXLINK_DIGITAL_PAY_KEY = "EXLINK_DIGITAL_PAY_KEY";
+    public final static String EXLINK_DIGITAL_SUCCESS_STATUS = "1";
+
+    public final static String PAY_RETAILER_PAY_KEY_AR = "PAY_RETAILER_PAY_KEY_AR";
+    public final static String PAY_RETAILER_PAY_KEY_BR = "PAY_RETAILER_PAY_KEY_BR";
+    public final static String PAY_RETAILER_PAY_KEY_BRW = "PAY_RETAILER_PAY_KEY_BRW";
+    public final static String PAY_RETAILER_PAY_KEY_CL = "PAY_RETAILER_PAY_KEY_CL";
+    public final static String PAY_RETAILER_PAY_KEY_CO = "PAY_RETAILER_PAY_KEY_CO";
+    public final static String PAY_RETAILER_PAY_KEY_CR = "PAY_RETAILER_PAY_KEY_CR";
+    public final static String PAY_RETAILER_PAY_KEY_EC = "PAY_RETAILER_PAY_KEY_EC";
+    public final static String PAY_RETAILER_PAY_KEY_SV = "PAY_RETAILER_PAY_KEY_SV";
+    public final static String PAY_RETAILER_PAY_KEY_MX = "PAY_RETAILER_PAY_KEY_MX";
+    public final static String PAY_RETAILER_PAY_KEY_PA = "PAY_RETAILER_PAY_KEY_PA";
+    public final static String PAY_RETAILER_PAY_KEY_PE = "PAY_RETAILER_PAY_KEY_PE";
+    public final static String PAY_RETAILER_PAY_KEY_GT = "PAY_RETAILER_PAY_KEY_GT";
+
+
+    public final static String KORAPAY_PAY = "KORAPAY_PAY";
+
+    public final static String KORAPAY_SUCCESS_STATUS = "success";
+    public final static String KORAPAY_PROCESSING_STATUS = "processing";
+    public final static String KORAPAY_FAILED_STATUS = "failed";
+    public final static String KORAPAY_PAY_PIN = "PIN";
+    public final static String KORAPAY_PAY_3DS = "3DS";
+    public final static String KORAPAY_PAY_OTP = "OTP";
+    public final static String KORAPAY_PAY_AVS = "AVS";
+    public final static String KORAPAY_PAY_PHONE = "CARD_ENROLL";
+
+    public final static String KORAPAY_CHECKOUT_PAY = "KORAPAY_CHECKOUT_PAY";
+
+    public final static String KORAPAY_CHECKOUT_SUCCESS_STATUS = "success";
+    public final static String KORAPAY_CHECKOUT_PROCESSING_STATUS = "processing";
+    public final static String KORAPAY_CHECKOUT_FAILED_STATUS = "failed";
+
+    public final static String PAYMENTASIA_PAY = "PAYMENTASIA_PAY_KEY";
+    public final static String PAYMENTASIA_PROCESSING_STATUS = "0";
+    public final static String PAYMENTASIA_SUCCESS_STATUS = "1";
+
+
+    public final static String VERTU_PAY_KEY_IDR_IB_P2P = "VERTU_PAY_KEY_IDR_IB_P2P";
+    public final static String VERTU_PAY_KEY_IDR_VA = "VERTU_PAY_KEY_IDR_VA";
+    public final static String VERTU_PAY_KEY_MYR_IB_FPX = "VERTU_PAY_KEY_MYR_IB_FPX";
+    public final static String VERTU_PAY_KEY_MYR_IB_P2C = "VERTU_PAY_KEY_MYR_IB_P2C";
+    public final static String VERTU_PAY_KEY_SGD_IB_P2P = "VERTU_PAY_KEY_SGD_IB_P2P";
+    public final static String VERTU_PAY_KEY_THB_IB_P2P = "VERTU_PAY_KEY_THB_IB_P2P";
+    public final static String VERTU_PAY_KEY_THB_QR_QRC = "VERTU_PAY_KEY_THB_QR_QRC";
+    public final static String VERTU_PAY_KEY_THB_QR_QRP = "VERTU_PAY_KEY_THB_QR_QRP";
+    public final static String VERTU_PAY_KEY_VND_IB_P2P = "VERTU_PAY_KEY_VND_IB_P2P";
+    public final static String VERTU_PAY_KEY_VND_QR = "VERTU_PAY_KEY_VND_QR";
+    public final static String VERTU_PAY_KEY_JPY_FT = "VERTU_PAY_KEY_JPY_FT";
+    public final static String VERTU_PAY_KEY_JPY_IB_FO = "VERTU_PAY_KEY_JPY_IB_FO";
+
+    public final static String VERTU_PAY_SUCCESS_STATUS = "success";
+
+    public final static String PAY_RETAILER_SUCCESS = "APPROVED";
+    public final static String PAY_RETAILER_REJECTED = "REJECTED";
+    public final static String PAY_RETAILER_PENDING = "PENDING";
+    public final static String PAY_RETAILER_FAILED = "FAILED";
+    public final static String PAY_RETAILER_EXPIRED = "EXPIRED";
+
+    public final static String ECOM_PAY_TYPE_KEY = "ECOM_PAY_TYPE_KEY";
+
+    public final static String BIFUTONG_SUCCESS_STATUS = "1";
+
+    public final static String SPAYSWORLD_SUCCESS_STATUS = "1";
+
+
+    public final static String SPAYSWORLD_RESULT_SUCCESS_STATUS = "SUCCESS";
+
+    public final static String CLICKPAY_STATUS = "0";
+
+    public final static String VA5PAY_SUCCESS_STATUS = "4";
+
+    public final static String VA5PAY_C2C_SUCCESS_STATUS = "3";
+    public final static String VA5PAY_RESULT_SUCCESS_STATUS = "SUCCESS";
+
+    public final static String CWG_PAY_KEY = "CWG_PAY_KEY";
+    public final static String CWG_PAY_KEY_HC = "CWG_PAY_KEY_HC";
+
+    public final static String CWG_SUCCESS_STATUS = "2";
+
+    public final static String CWG_RESULT_SUCCESS_STATUS = "SUCCESS";
+
+    public final static String LONG77_VA_PAY_KEY = "LONG77_VA_PAY_KEY";
+    public final static String LONG77_RESULT_SUCCESS_STATUS = "success";
+    public final static String LONG77_SUCCESS_STATUS = "4";
+
+    public final static String KUBO_PAY_TYPE_KEY = "KUBO_PAY_TYPE_KEY";
+    public final static String KUBO_SUCCESS_STATUS = "Y";
+    public final static String KUBO_CANCELLED_STATUS = "C";
+
+    public final static String BEAR_EX_PAY_KEY = "BEAR_EX_PAY_KEY";
+
+    public final static String BEAR_EX_E_ADMIN_FINISH_STATUS = "E_ADMIN_FINISH";
+
+    public final static String BEAR_EX_E_FINISH_STATUS = "E_FINISH";
+    public final static String BEAR_EX_RESULT_SUCCESS = "success";
+
+    public final static String INOUTWORK_PAY_KEY = "INOUTWORK_PAY_KEY";
+
+    public final static String INOUTWORK_SUCCESS_STATUS = "SUCCESS";
+
+    public final static String INOUTWORK_RESULT_SUCCESS = "success";
+
+    public final static String KONNEXPY_PAY = "KONNEXPY_PAY";
+
+    public final static int KONNEXPY_CONFIRMED_STATUS = 1;
+    public final static int KONNEXPY_COMPLETED_STATUS = 2;
+
+    public final static int KONNEXPY_CANCELED_STATUS = 3;
+
+    public final static String XPAY_PAY_CRYPTOCURRENCIE_SUCCESS_STATUS = "0";
+    public final static String PAYOK_PAY_TYPE_THB = "PAYOK_PAY_TYPE_THB";
+    public final static String PAYOK_PAY_TYPE_IDR = "PAYOK_PAY_TYPE_IDR";
+    public final static String PAYOK_PAY_SUCCESS_STATUS = "SUCCESS";
+
+
+    public final static String PAYOK_PAY_RESULT_STATUS = "SUCCESS";
+
+
+    public final static String EVIRTUALPAY_PAY_TYPE = "EVIRTUALPAY_PAY_TYPE";
+    public final static String EVIRTUALPAY_PAY_SUCCESS_STATUS = "0";
+
+    public final static String NACE_PAY_TYPE = "NACE_PAY_TYPE";
+    public final static String NACE_PAY_SUCCESS_STATUS = "Paid";
+
+
+    public final static String PRAXIS_PAY_KEY = "PRAXIS_PAY_KEY";
+
+    public final static String PRAXIS_SUCCESS_STATUS = "approved";
+
+
+    public final static String HYPER_HASHING_PAY_TYPE = "HYPER_HASHING_PAY_TYPE";
+    public final static String HYPER_HASHING_SUCCESS_STATUS = "200";
+
+
+    public final static String PROXPAY_PAY_TYPE = "PROXPAY_PAY_TYPE";
+    public final static String PROXPAY_PAY_TYPE_REMIT = "PROXPAY_PAY_TYPE_REMIT";
+    public final static String PROXPAY_CP_SUCCESS_STATUS = "CP";
+    public final static String PROXPAY_Y_SUCCESS_STATUS = "Y";
+    public final static String OFA_PAY_TYPE = "OFA_PAY_TYPE";
+    public final static String OFA_PAY_TYPE_REMIT = "OFA_PAY_TYPE_REMIT";
+    public final static String OFA_PAY_SUCCESS_STATUS = "1";
+    public final static String OFA_PAY_TYPE_REMIT_SUCCESS_STATUS = "s";
+    public final static String HUABO_PAY_TYPE = "HUABO_PAY_TYPE";
+    public final static String HUABO_PAY_SUCCESS_STATUS = "2";
+    public final static String HUABO_PAY_CALLBACK_SUCCESS_STATUS = "3";
+
+    public final static String CHEEZEEPAY_PAY_TYPE_REMIT = "CHEEZEEPAY_PAY_TYPE_REMIT";
+    public final static String CWG_UNION_PAY_TYPE_REMIT = "CWG_UNION_PAY_TYPE_REMIT";
+
+    public final static String OZOW_PAY_TYPE = "OZOW_PAY_TYPE";
+    public final static String OZOW_PAY_SUCCESS_STATUS = "Complete";
+
+    public final static String MTPAY_FAIL_RESULT = "FAIL";
+    public final static String MTPAY_SUCCESS_RESULT = "SUCCESS";
+
+    public final static String FLASHEX_SUCCESS_RESULT = "SUCCESS";
+
+    public final static String B2BIN_PAY_SUCCESS_RESULT = "OK";
+
+    public final static String HELP_FAIL_RESULT = "FAIL";
+    public final static String GROUP_OTC_SUCCESS_RESULT = "success";
+
+    public final static String NGANLUONG_SUCCESS_RESULT = "success";
+
+    public final static String STIC_SUCCESS_RESULT = "OK";
+
+    public final static String STIC_FAIL_RESULT = "FAIL";
+
+    public final static String OTC_365_CN_SUCCESS_CHECK = "1";
+
+    public final static String IBIT_PAY_TYPE = "IBIT_PAY_TYPE";
+    public final static String IBIT_PAY_TYPE_HC = "IBIT_PAY_TYPE_HC";
+    public final static String IBIT_PAY_TYPE_REMIT = "IBIT_PAY_TYPE_REMIT";
+
+    public final static String PAYPAGA_PAY_TYPE = "PAYPAGA_PAY_TYPE";
+
+    public final static String PAYPAGA_PAY_SUCCESS_STATUS = "Approved";
+
+    public final static String PAYPAGA_PAY_HANDLE_PAYABLE = "Payin";
+
+    /**
+     * safe pay 成功标识
+     */
+    public final static String HY_CANCEL_RESULT = "cancel";
+    public final static String HY_SUCCESS_RESULT = "success";
+
+    public final static String SAFE_SUCCESS = "success";
+    public final static String MTPAY_SUCCESS_STATUS = "1";
+    public final static int FLASHEX_SUCCESS = 3;
+
+    public final static String EX_PAY_SUCCESS_CHECK = "check";
+    public final static String EX_PAY_SUCCESS_PAY = "pay";
+
+    public final static String EX_PAY_MIDDLE = "LO";
+    public final static String GROUP_OTC_SUCCESS = "1";
+
+    public final static String HELP_SUCCESS_STATUS000 = "000";
+    public final static String HELP_SUCCESS_STATUS006 = "006";
+    public final static String NGANLUONG_SUCCESS_STATUS = "00";
+
+    public final static Integer STIC_SUCCESS = -1;
+
+    public final static String SKRILL_SUCCESS_STATUS000 = "2";
+
+    public final static String PAY3_PAY_TYPE_REMIT = "PAY3_PAY_TYPE_REMIT";
+
+    public final static String UCARD_PAY_TYPE_REMIT = "UCARD_PAY_TYPE_REMIT";
+
+    public final static String UGATE_BANK = "UGATE_BANK";
+    public final static String UGATE_WECHAT = "UGATE_WECHAT";
+    public final static String UGATE_ALIPAY = "UGATE_ALIPAY";
+
+    public final static String WALLET_IS_EMPTY = "WALLET_IS_EMPTY";
+
+    public final static String PAYMENTASIA_PAY_TYPE_REMIT = "PAYMENTASIA_PAY_TYPE_REMIT";
+    public final static String PAYMENTASIA_PAY_TYPE_SUCCESS_STATUS = "200";
+
+    public final static String MT_PAY_TYPE_REMIT = "MT_PAY_TYPE_REMIT";
+    public final static String UGATE_PAY_TYPE_REMIT = "UGATE_PAY_TYPE_REMIT";
+    public final static String FLASH_PAY_TYPE_REMIT = "FLASH_PAY_TYPE_REMIT";
+    public final static String PARTNER_PAY_TYPE_REMIT = "PARTNER_PAY_TYPE_REMIT";
+    public final static String PARTNER_TW_PAY_TYPE_REMIT = "PARTNER_TW_PAY_TYPE_REMIT";
+
+    public final static String OZOW_PAY_TYPE_REMIT = "OZOW_PAY_TYPE_REMIT";
+    public final static String OZOW_PAY_TYPE_REMIT_SUCCESS_STATUS = "PayoutReceived";
+
+    public final static String MT_BANK = "MT_BANK";
+    public final static String MT_WECHAT = "MT_WECHAT";
+    public final static String MT_ALIPAY = "MT_ALIPAY";
+    public final static String MT_BLOCKCHIN = "MT_BLOCKCHIN";
+    public final static String MT_ACCOUNT = "MT_ACCOUNT";
+
+    public final static String HELP_PAY_TYPE_REMIT = "HELP_PAY_TYPE_REMIT";
+
+    public final static String PAY_ECOM_REMIT_KEY = "PAY_ECOM_REMIT_KEY";
+    public final static String ECOM_PAY_SUCCESS_STATUS = "1";
+
+    public final static String ORDER_DEPOSIT_EXPIRE = "ORDER_DEPOSIT_EXPIRE";
+
 }

+ 16 - 0
crm-model/src/main/java/com/crm/rely/backend/model/dto/finance/withdraw/FinanceAgentWithdrawDto.java

@@ -0,0 +1,16 @@
+package com.crm.rely.backend.model.dto.finance.withdraw;
+
+import lombok.Data;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2020-07-07 17:17
+ **/
+@Data
+public class FinanceAgentWithdrawDto extends FinanceWithdrawDto{
+
+
+    private Long agentId;
+
+}

+ 110 - 4
crm-model/src/main/java/com/crm/rely/backend/model/dto/finance/withdraw/FinanceWithdrawDto.java

@@ -4,6 +4,7 @@ import lombok.Data;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @description:
@@ -15,8 +16,6 @@ public class FinanceWithdrawDto {
 
     private Long id;
 
-    private Long cId;
-
     /**
      * 流水号
      */
@@ -32,24 +31,65 @@ public class FinanceWithdrawDto {
      */
     private String name;
 
+    private String areaCode;
+    private String phone;
+    /**
+     * 出金账号平台
+     */
+    private String platform;
     /**
      * 出金账号
      */
     private Long login;
+    /**
+     * 出金交易账号类型
+     */
+    private Long loginType;
+
+    private String server;
     /**
      * 出金金额
      */
     private BigDecimal amount;
+
+    private String currency;
     /**
      * 出金汇率
      */
     private BigDecimal rate;
+    /**
+     * 出金实际金额
+     */
+    private BigDecimal transformAmount;
+    /**
+     * 出金实际货币类型
+     */
+    private String transformCurrency;
+    /**
+     * 通道流水号(id)
+     */
+    private String channelSerial;
 
-    private BigDecimal cny;
+    private Integer callbackStatus;
+    private Date callbackTime;
 
+    private Integer withdrawStatus;
+
+    private BigDecimal withdrawAmount;
+
+    private String withdrawCurrency;
+
+    private String withdrawTicket;
+
+    private Integer operationType;
+
+    private String payType;
 
     private String bankCode;
 
+    private String address;
+
+    private String message;
 
     private String bankUname;
 
@@ -63,18 +103,84 @@ public class FinanceWithdrawDto {
 
     private String swiftCode;
 
+    private String customBankCode;
+
     private String bankFront;
 
     private String bankBack;
 
+    private String agencyNo;
+
+    private String cvv;
+
+    private String expiryMonth;
+
+    private String expiryYear;
+
     private Date approveTime;
     private String approveDesc;
 
     private Integer status;
 
+    private String statusName;
+
+    private Integer salesStatus;
+
+    private Integer salesSettingLevel;
+
     private Date addTime;
 
     private Date modifyTime;
 
-    private Integer sourceType;
+    private String ibNo;
+
+    private String pIbNo;
+
+    private Long cId;
+
+    private String remitChannelName;
+
+    private String remitChannelEnName;
+
+    private String remitChannelType;
+
+    private String salesNo;
+
+    private Integer leverage;
+
+    private Float balance;
+
+    private Float equity;
+
+    private Float floating;
+
+    private Float credit;
+
+    private List<String> addressProve;
+
+    private String cpf;
+
+    private Integer submitStatus;
+
+    private Date submitTime;
+
+    private Integer backstageStatus;
+
+    private Integer infoStatus;
+
+    private Integer feeReduction;
+
+    private BigDecimal feeAmount;
+
+    private BigDecimal feeReductionAmount;
+    //private List<CustomActivityExceptionalManagerActivityNoteDto> activityNote;
+
+    private Long salaryLogin;
+
+    private Integer authStatus;
+
+    private Integer realVerify;
+
+    private String extParam;
+
 }

+ 13 - 0
crm-model/src/main/java/com/crm/rely/backend/model/dto/finance/withdraw/ozow/FinanceWithdrawOzowBankDetailDto.java

@@ -0,0 +1,13 @@
+package com.crm.rely.backend.model.dto.finance.withdraw.ozow;
+
+import lombok.Data;
+
+@Data
+public class FinanceWithdrawOzowBankDetailDto {
+
+
+    private String bankGroupId;
+    private String bankGroupName;
+    private String universalBranchCode;
+
+}

+ 31 - 0
crm-model/src/main/java/com/crm/rely/backend/model/dto/golden/order/GoldenOrderDetailsDto.java

@@ -0,0 +1,31 @@
+package com.crm.rely.backend.model.dto.golden.order;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class GoldenOrderDetailsDto {
+
+    /**
+     * 流水号
+     */
+    private String serial;
+
+    /**
+     * 课程id
+     */
+    private Long goodsId;
+
+    private String goodsName;
+
+    private Integer goodsType;
+
+    private BigDecimal goodsPrice;
+
+    /**
+     * 封面
+     */
+    private String frontUrl;
+
+}

+ 57 - 0
crm-model/src/main/java/com/crm/rely/backend/model/dto/golden/order/GoldenOrderListDto.java

@@ -0,0 +1,57 @@
+package com.crm.rely.backend.model.dto.golden.order;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class GoldenOrderListDto {
+
+    private Long id;
+
+    /**
+     * 流水号
+     */
+    private String serial;
+
+    private BigDecimal amount;
+
+    private String currency;
+
+    /**
+     * 际换算后金额
+     */
+    private BigDecimal transformAmount;
+
+    /**
+     * 实际货币类型
+     */
+    private String transformCurrency;
+
+    /**
+     * 1:未支付 2已支付 3已拒绝
+     */
+    private Integer status;
+
+    /**
+     * 付款人姓名
+     */
+    private String payName;
+
+    /**
+     * 付款人电话
+     */
+    private String payPhone;
+
+    /**
+     * 支付时间
+     */
+    private Date payTime;
+
+    private Date addTime;
+
+    List<GoldenOrderDetailsDto> details;
+
+}

+ 47 - 0
crm-model/src/main/java/com/crm/rely/backend/model/dto/sys/remittance/channel/bank/SysChannelBankByChannelCodeDto.java

@@ -0,0 +1,47 @@
+package com.crm.rely.backend.model.dto.sys.remittance.channel.bank;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class SysChannelBankByChannelCodeDto {
+
+    /**
+     * 通道位置code
+     */
+    private String code;
+    /**
+     * 通道名称
+     */
+    private String name;
+
+    /**
+     * 银行图标(icon)
+     */
+    private String icon;
+    /**
+     * 银行英文名称
+     */
+    private String enName;
+
+    /**
+     * 银行图标-英文(icon)
+     */
+    private String enIcon;
+
+    private String currency;
+
+    private String fundingTime;
+
+    private Integer feeType;
+    private BigDecimal feeAmount;
+
+    private Integer free;
+
+    private BigDecimal minAmount;
+    private BigDecimal maxAmount;
+
+
+    private BigDecimal rate;
+}

+ 51 - 0
crm-model/src/main/java/com/crm/rely/backend/model/dto/sys/remittance/channel/bank/SysChannelBankDto.java

@@ -0,0 +1,51 @@
+package com.crm.rely.backend.model.dto.sys.remittance.channel.bank;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class SysChannelBankDto {
+    private Long id;
+
+    private String channelCode;
+
+    /**
+     * 通道位置code
+     */
+    private String code;
+    /**
+     * 通道名称
+     */
+    private String name;
+
+    /**
+     * 银行图标(icon)
+     */
+    private String icon;
+    /**
+     * 银行英文名称
+     */
+    private String enName;
+
+    /**
+     * 银行图标-英文(icon)
+     */
+    private String enIcon;
+
+    private String currency;
+
+    private Integer valid;
+
+    private Integer subIndex;
+
+    private String fundingTime;
+
+    private Integer free;
+
+    private BigDecimal rate;
+
+    private BigDecimal minAmount;
+
+    private BigDecimal maxAmount;
+}

+ 3 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/custom/info/CustomInfoEntity.java

@@ -18,6 +18,9 @@ import java.util.List;
 public class CustomInfoEntity extends BaseCustomInfoEntity {
     private UserInfoEntity ibInfo;
 
+
+    private String name;
+
     private String firstName;
 
     private String middle;

+ 58 - 1
crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/deposit/FinanceDepositAddEntity.java

@@ -4,6 +4,7 @@ import com.crm.rely.backend.core.entity.base.BaseAddEntity;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 @Data
 public class FinanceDepositAddEntity extends BaseAddEntity {
@@ -13,13 +14,69 @@ public class FinanceDepositAddEntity extends BaseAddEntity {
 
     private Long login;
 
+    private BigDecimal rate;
+
     private String payType;
 
+    private String bankCode;
+
+    /**
+     * 入金账号类型
+     */
+    private String currency;
+    /**
+     * 入金实际金额
+     */
+    private BigDecimal transformAmount;
+    /**
+     * 入金实际货币类型
+     */
+    private String transformCurrency;
+
     private String voucherUrl;
 
+    private Integer activityDeposit;
+
+    private String promoCode;
+
     private String bankMsg;
 
-    private BigDecimal rate;
+    private String name;
+
+    private String areaCode;
+
+    private String phone;
 
     private String ip;
+
+    private Integer activityPercentageGive;
+    private Integer activityMidyearTenPercentGive;
+    private Integer activityTwoPercentGive;
+    private Integer activityGive;
+
+    private String cvv;
+
+    private String expiryMonth;
+    private String expiryYear;
+
+    private String pin;
+
+    private String bankUname;
+
+    private String bankCardNum;
+
+    private String requiteVoucherUrl;
+
+    private String callbackMq;
+    private String extParam;
+
+    private Integer callbackValidate;
+
+    private String callbackValidateMq;
+
+    private List<Long> goodIds;
+
+    private String payName;
+
+    private String payPhone;
 }

+ 18 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/deposit/FinanceMerchantDepositAddEntity.java

@@ -0,0 +1,18 @@
+package com.crm.rely.backend.model.entity.finance.deposit;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class FinanceMerchantDepositAddEntity extends FinanceDepositAddEntity {
+
+    private String email;
+
+    private String merCustomId;
+
+    private String identity;
+
+    private BigDecimal fixedRate;
+    private BigDecimal fixedRateAmount;
+}

+ 18 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/serial/mapping/FinanceDepositSerialMappingEntity.java

@@ -0,0 +1,18 @@
+package com.crm.rely.backend.model.entity.finance.serial.mapping;
+
+import lombok.Data;
+
+/**
+ * @Author houn
+ * @Date 2024/9/26 18:39
+ * @PackageName:com.crm.rely.backend.core.entity.finance.seial.mapping
+ * @ClassName: FinanceDepositSerialMapping
+ * @Description: TODO
+ */
+@Data
+public class FinanceDepositSerialMappingEntity {
+
+    private String depositSerial;
+
+    private String payType;
+}

+ 13 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/golden/order/GoldenOrderSearchEntity.java

@@ -0,0 +1,13 @@
+package com.crm.rely.backend.model.entity.golden.order;
+
+import com.crm.rely.backend.core.entity.base.BaseSearchPageEntity;
+import lombok.Data;
+
+@Data
+public class GoldenOrderSearchEntity extends BaseSearchPageEntity {
+
+    private String serial;
+
+    private Long customId;
+
+}

+ 29 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/sys/config/SysConfigAutolimitEntity.java

@@ -0,0 +1,29 @@
+package com.crm.rely.backend.model.entity.sys.config;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.sql.Time;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2020-06-30 13:39
+ **/
+@Data
+public class SysConfigAutolimitEntity {
+    private Integer autolimitVaild;
+    private Time startTime;
+    private Time endTime;
+    /**
+     * 区间内
+     */
+    private BigDecimal outRangeAmount;
+    /**
+     * 区间外
+     */
+    private BigDecimal withinIntervalAmount;
+
+    private String excludeCodes;
+
+}

+ 22 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/sys/remittance/channel/SysRemittanceChannelListEntity.java

@@ -0,0 +1,22 @@
+package com.crm.rely.backend.model.entity.sys.remittance.channel;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SysRemittanceChannelListEntity {
+
+    private Long cId;
+
+    private String country;
+
+
+    private String state;
+
+    private Integer type;
+
+    private Integer xj;
+
+    private List<String> channelCode;
+}

+ 14 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/sys/remittance/channel/bank/SysChannelBankByChannelCodeListEntity.java

@@ -0,0 +1,14 @@
+package com.crm.rely.backend.model.entity.sys.remittance.channel.bank;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SysChannelBankByChannelCodeListEntity {
+
+    private String channelCode;
+
+    private List<String> bankCodes;
+    private String country;
+}

+ 11 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/sys/remittance/channel/bank/SysChannelBankByCodeEntity.java

@@ -0,0 +1,11 @@
+package com.crm.rely.backend.model.entity.sys.remittance.channel.bank;
+
+import lombok.Data;
+
+@Data
+public class SysChannelBankByCodeEntity {
+
+    private String code;
+
+    private String channelCode;
+}

+ 59 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/sys/remittance/channel/bank/SysChannelBankSaveEntity.java

@@ -0,0 +1,59 @@
+package com.crm.rely.backend.model.entity.sys.remittance.channel.bank;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class SysChannelBankSaveEntity {
+
+    private Long id;
+
+    /**
+     * 通道位置code
+     */
+    private String code;
+
+    private String channelCode;
+    /**
+     * 通道名称
+     */
+    private String name;
+
+    /**
+     * 银行图标(icon)
+     */
+    private String icon;
+    /**
+     * 银行英文名称
+     */
+    private String enName;
+
+    /**
+     * 银行图标-英文(icon)
+     */
+    private String enIcon;
+
+    private String currency;
+
+    private Integer valid;
+
+    private Integer subIndex;
+
+    private String fundingTime;
+
+    private BigDecimal minAmount;
+
+    private BigDecimal maxAmount;
+
+    private Integer free;
+
+    private BigDecimal rate;
+
+    private Date time;
+
+    private Long user;
+
+    private String ip;
+}

+ 3 - 0
crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/CustomInfoTable.java

@@ -12,6 +12,9 @@ import java.util.Date;
 @Entity
 @Table(name = "custom_info")
 public class CustomInfoTable extends BaseApproveTable {
+
+    private String name;
+
     private String firstName;
 
     private String middle;

+ 25 - 0
crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/FinanceDepositSerialMappingTable.java

@@ -0,0 +1,25 @@
+package com.crm.rely.backend.model.pojo.table;
+
+import com.crm.rely.backend.core.pojo.BaseTable;
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+/**
+ * 存款
+ *
+ * @author Administrator
+ */
+@Data
+@Entity
+@Table(name = "finance_deposit_serial_mapping")
+public class FinanceDepositSerialMappingTable extends BaseTable {
+
+    /**
+     * 流水号
+     */
+    private String depositSerial;
+
+    private String payType;
+}

+ 145 - 10
crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/FinanceDepositTable.java

@@ -6,41 +6,176 @@ import lombok.Data;
 import javax.persistence.Entity;
 import javax.persistence.Table;
 import java.math.BigDecimal;
+import java.util.Date;
 
+/**
+ * 存款
+ *
+ * @author Administrator
+ */
 @Data
 @Entity
 @Table(name = "finance_deposit")
 public class FinanceDepositTable extends BaseApproveTable {
 
+    /**
+     * 流水号
+     */
     private String serial;
 
+    /**
+     * 用户id
+     */
     private Long customId;
 
     private Long cId;
 
+    /**
+     * 用户名称
+     */
     private String name;
+    /**
+     * 入金账号平台
+     */
+    private String platform;
+
+    private String server;
+    /**
+     * 入金账号
+     */
+    private Long login;
 
     private Long agentId;
+    /**
+     * 入金交易账号类型
+     */
+    private Long loginType;
+    /**
+     * 入金金额
+     */
+    private BigDecimal amount;
+    /**
+     * 入金账号类型
+     */
+    private String currency;
+
+    /**
+     * 换算出来的人民币
+     */
+    private BigDecimal cny;
 
-    private Long login;
+    private Integer activityDeposit;
+    /**
+     * 入金汇率
+     */
+    private BigDecimal rate;
+    /**
+     * 入金实际金额
+     */
+    private BigDecimal transformAmount;
+    /**
+     * 入金实际货币类型
+     */
+    private String transformCurrency;
+    /**
+     * 通道流水号(id)
+     */
+    private String channelSerial;
 
-    private BigDecimal amount;
+    private Integer submitStatus;
 
-    private String voucherUrl;
+    private Integer callbackStatus;
+
+    private Date callbackTime;
+
+    private Integer depositStatus;
+
+    private String depositTicket;
+
+    private Integer free;
+
+    private BigDecimal depositAmount;
+
+    private String depositCurrency;
+
+    private Integer operationType;
+
+    private String promoCode;
+    /**
+     * 过期时间
+     */
+    private Date expireTime;
+    /**
+     * 调用通道是使用的form或者是跳转的url
+     */
+    private String formUrl;
 
     private String payType;
 
-    private String payTypeName;
+    private String bankCode;
 
-    private BigDecimal rate;
+    private String voucherUrl;
 
-    private BigDecimal cny;
+    /**
+     * 国家
+     */
+    private String country;
 
-    private Integer depositStatus;
+    /**
+     * 国家中文名称
+     */
+    private String countryName;
 
-    private String depositTicket;
-    private String channelSerial;
+    /**
+     * 国家英文名称
+     */
+    private String countryEnName;
 
-    private Integer callbackStatus;
+    //下面为入金通道配置信息 作为凭证
+
+    private String remittanceChannelCode;
+
+    private String remittanceChannelName;
+
+    private String remittanceChannelEnName;
+
+    private String remittanceChannelRequestUrl;
+
+    private String remittanceChannelProperty;
+
+    private String remittanceChannelCurrency;
+
+    private String remittanceChannelIcon;
+
+    private String remittanceChannelEnIcon;
+
+    private String remittanceChannelIntroduce;
+
+    private String remittanceChannelEnIntroduce;
+
+    private Integer activityStatus;
+
+    private String bankMsg;
+
+    private String callbackData;
+
+    private Integer activityPercentageGive;
+
+    private Integer activityMidyearTenPercentGive;
+    private Integer activityTwoPercentGive;
+    private Integer activityGive;
+
+    private String sourceCode;
+    private String sourceName;
+    private String sourceNameEn;
+
+    private Long salesId;
+
+    private String callbackMq;
+
+    private String extParam;
+
+    private Integer callbackValidate;
 
+    private String callbackValidateMq;
 }

+ 37 - 0
crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/FinanceRateTable.java

@@ -0,0 +1,37 @@
+package com.crm.rely.backend.model.pojo.table;
+
+import com.crm.rely.backend.core.pojo.BaseTable;
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import java.math.BigDecimal;
+
+/**
+ * 汇率
+ *
+ * @author Administrator
+ */
+@Data
+@Entity
+@Table(name = "finance_rate")
+public class FinanceRateTable extends BaseTable {
+
+    private Integer type;
+
+    /**
+     * 汇率
+     */
+    private BigDecimal rate;
+
+    /**
+     * 货币类型
+     */
+    private String currency;
+
+    /**
+     * 转化后的货币类型
+     */
+    private String transformCurrency;
+
+}

+ 118 - 2
crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/FinanceWithdrawTable.java

@@ -6,6 +6,7 @@ import lombok.Data;
 import javax.persistence.Entity;
 import javax.persistence.Table;
 import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * 存款
@@ -34,25 +35,67 @@ public class FinanceWithdrawTable extends BaseApproveTable {
      */
     private String name;
 
+    private String areaCode;
+    private String phone;
+    /**
+     * 出金账号平台
+     */
+    private String platform;
+
+    private String server;
     /**
      * 出金账号
      */
     private Long login;
 
     private Long agentId;
+    /**
+     * 出金交易账号类型
+     */
+    private Long loginType;
     /**
      * 出金金额
      */
     private BigDecimal amount;
+
+    private String currency;
     /**
      * 出金汇率
      */
     private BigDecimal rate;
+    /**
+     * 出金实际金额
+     */
+    private BigDecimal transformAmount;
+    /**
+     * 出金实际货币类型
+     */
+    private String transformCurrency;
+    /**
+     * 通道流水号(id)
+     */
+    private String channelSerial;
+
+    private Integer callbackStatus;
+
+    private Integer withdrawStatus;
 
-    private BigDecimal cny;
+    private String withdrawTicket;
+
+    private BigDecimal withdrawAmount;
+    private String withdrawCurrency;
+    private Integer operationType;
+
+    private String payType;
 
     private String bankCode;
 
+    private String address;
+
+    private String addressProve;
+
+    private String message;
+
     private String bankUname;
 
     private String bankCardNum;
@@ -65,10 +108,83 @@ public class FinanceWithdrawTable extends BaseApproveTable {
 
     private String swiftCode;
 
+    private String customBankCode;
+
     private String bankFront;
 
     private String bankBack;
+    private String agencyNo;
+
+    private String cvv;
+
+    private String expiryMonth;
+
+    private String expiryYear;
+
+
+    //下面为出金通道配置信息 作为记录
+
+    private String remitChannelType;
+    private String remitChannelCode;
+
+    private String remitChannelName;
+
+    private String remitChannelEnName;
+
+    private String remitChannelRequestUrl;
+
+    private String remitChannelCurrency;
+
+    private String remitChannelIcon;
+
+    private String remitChannelEnIcon;
+
+    private String remitChannelIntroduce;
+
+    private String remitChannelEnIntroduce;
+
+    private Integer salesStatus;
+
+    private Integer salesSettingLevel;
+
+    private String cpf;
+
+    private Integer submitStatus;
+
+    private Date submitTime;
+
+    private Long salesId;
+
+    private Integer backstageStatus;
+    private Integer infoStatus;
+
+
+    private String country;
+
+    private Integer feeReduction;
+
+    private BigDecimal feeAmount;
+
+    private BigDecimal feeReductionAmount;
+
+    private String actualPayType;
+
+    private String activityNote;
+
+    private String externalUserId;
+
+    private Integer authStatus;
+
+    private String applicantId;
+
+    private String kycVerifyUrl;
+
+    private Integer realVerify;
+
+    private Date callbackTime;
+
+    private String callbackMq;
 
-    private Integer sourceType;
+    private String extParam;
 
 }

+ 40 - 0
crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/GoldenOrderDetailsTable.java

@@ -0,0 +1,40 @@
+package com.crm.rely.backend.model.pojo.table;
+
+import com.crm.rely.backend.core.pojo.BaseTable;
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@Entity
+@Table(name = "golden_order_details")
+public class GoldenOrderDetailsTable extends BaseTable {
+
+    /**
+     * 流水号
+     */
+    private String serial;
+
+    private Long customId;
+
+    /**
+     * 课程id
+     */
+    private Long goodsId;
+
+    private String goodsName;
+
+    private Integer goodsType;
+
+    private BigDecimal goodsPrice;
+
+    /**
+     * 封面
+     */
+    private String frontUrl;
+
+
+}

+ 58 - 0
crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/GoldenOrderTable.java

@@ -0,0 +1,58 @@
+package com.crm.rely.backend.model.pojo.table;
+
+import com.crm.rely.backend.core.pojo.BaseTable;
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@Entity
+@Table(name = "golden_order")
+public class GoldenOrderTable extends BaseTable {
+
+    /**
+     * 流水号
+     */
+    private String serial;
+
+    private Long customId;
+
+    private BigDecimal amount;
+
+    private String currency;
+
+    /**
+     * 际换算后金额
+     */
+    private BigDecimal transformAmount;
+
+    /**
+     * 实际货币类型
+     */
+    private String transformCurrency;
+
+    /**
+     * 1:未支付 2已支付 3已拒绝
+     */
+    private Integer status;
+
+    /**
+     * 付款人姓名
+     */
+    private String payName;
+
+    /**
+     * 付款人电话
+     */
+    private String payPhone;
+
+    /**
+     * 支付时间
+     */
+    private Date payTime;
+
+
+}

+ 66 - 0
crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/SysChannelBankTable.java

@@ -0,0 +1,66 @@
+package com.crm.rely.backend.model.pojo.table;
+
+import com.crm.rely.backend.core.pojo.BaseTable;
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import java.math.BigDecimal;
+
+@Data
+@Entity
+@Table(name = "sys_channel_bank")
+public class SysChannelBankTable extends BaseTable {
+
+    /**
+     *
+     */
+    private String code;
+    /**
+     * 通道名称
+     */
+    private String name;
+
+    /**
+     * 银行图标(icon)
+     */
+    private String icon;
+    /**
+     * 银行英文名称
+     */
+    private String enName;
+
+    /**
+     * 银行图标-英文(icon)
+     */
+    private String enIcon;
+
+    /**
+     * 通道code
+     */
+    private String channelCode;
+
+    private String currency;
+
+    /**
+     * 是否启用 1启用 0不启用
+     */
+    private Integer valid;
+
+    /**
+     * 排序
+     */
+    private Integer subIndex;
+
+    private String fundingTime;
+    private Integer feeType;
+    private BigDecimal feeAmount;
+    private Integer free;
+
+    private BigDecimal rate;
+
+    private BigDecimal minAmount;
+    private BigDecimal maxAmount;
+
+    private String countrys;
+}

+ 74 - 1
crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/SysRemitChannelTable.java

@@ -3,23 +3,96 @@ package com.crm.rely.backend.model.pojo.table;
 import com.crm.rely.backend.core.pojo.BaseTable;
 import lombok.Data;
 
+import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.Table;
+import java.math.BigDecimal;
 
 @Data
 @Entity
 @Table(name = "sys_remit_channel")
 public class SysRemitChannelTable extends BaseTable {
 
+    /**
+     * 通道位置code
+     */
     private String code;
+    /**
+     * 通道名称
+     */
     private String name;
+    /**
+     * 通道英文名称
+     */
+    private String enName;
 
+    private Integer remitApi;
+    /**
+     * 通道配置信息
+     */
+    private String property;
+
+    private String pk;
+
+    private String withdrawInfoUrl;
+    private String withdrawUrl;
+    /**
+     * 调用通道的路由地址
+     */
     private String requestUrl;
+    /**
+     * 通道出金货币
+     */
+    private String currency;
 
+    private String transformCurrency;
+    /**
+     * 通道图标(icon)
+     */
     private String icon;
-
+    /**
+     * 通道图标-英文(icon)
+     */
+    private String enIcon;
+    /**
+     * 介绍
+     */
     private String introduce;
+    /**
+     * 英文介绍
+     */
+    private String enIntroduce;
 
+    /**
+     * 是否启用 1启用 0不启用
+     */
     private Integer valid;
+    private String type;
+    /**
+     * 是否启用银行
+     */
+    private Integer bankValid;
+
     private Integer subIndex;
+
+    private String fundingTime;
+
+    private Integer free;
+
+    private BigDecimal minAmount;
+    private BigDecimal maxAmount;
+
+    private BigDecimal rate;
+
+    private String cIds;
+    @Column(name = "exclude_c_ids")
+    private String excludeCIds;
+
+    private String countrys;
+
+    private Integer feeType;
+
+    private BigDecimal feeAmount;
+
+    private Integer fastChannel;
 }

+ 94 - 3
crm-model/src/main/java/com/crm/rely/backend/model/pojo/table/SysRemittanceChannelTable.java

@@ -3,25 +3,116 @@ package com.crm.rely.backend.model.pojo.table;
 import com.crm.rely.backend.core.pojo.BaseTable;
 import lombok.Data;
 
+import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.Table;
+import java.math.BigDecimal;
 
 @Data
 @Entity
 @Table(name = "sys_remittance_channel")
 public class SysRemittanceChannelTable extends BaseTable {
 
+
+    private Integer type;
+    /**
+     * 通道位置code
+     */
     private String code;
+    /**
+     * 通道名称
+     */
     private String name;
-
+    /**
+     * 通道英文名称
+     */
+    private String enName;
+    /**
+     * 调用通道的路由地址
+     */
     private String requestUrl;
-
+    /**
+     * 通道配置信息
+     */
     private String property;
 
-    private String icon;
+    private String pk;
+    /**
+     * 通道入金货币
+     */
+    private String currency;
 
+    private String transformCurrency;
+    private BigDecimal minAmount;
+    private BigDecimal maxAmount;
+    /**
+     * 通道过期时间
+     */
+    private Integer expire;
+    /**
+     * 通道图标(icon)
+     */
+    private String icon;
+    /**
+     * 通道图标-英文(icon)
+     */
+    private String enIcon;
+    /**
+     * 介绍
+     */
     private String introduce;
+    /**
+     * 英文介绍
+     */
+    private String enIntroduce;
 
+    /**
+     * 是否启用 1启用 0不启用
+     */
     private Integer valid;
+
+    /**
+     * 是否启用银行
+     */
+    private Integer bankValid;
+
     private Integer subIndex;
+
+    private String fundingTime;
+
+    private Integer free;
+
+    private BigDecimal rate;
+
+    private String cIds;
+    @Column(name = "exclude_c_ids")
+    private String excludeCIds;
+
+    private String countrys;
+    private Integer confirmName;
+    private Integer confirmAreaCode;
+    private Integer confirmPhone;
+
+    private Integer confirmCreditCard;
+
+    private String states;
+    private String startTime;
+    private String endTime;
+
+    /**
+     * kyc通道 0:否 1;是
+     */
+    private Integer kycChannel;
+
+    /**
+     * 认证次数限制
+     */
+    private Integer verifyNumLimit;
+
+    /**
+     * 认证天数
+     */
+    private Integer verifyDate;
+
+    private String whitelist;
 }

+ 5 - 0
crm-model/src/main/java/com/crm/rely/backend/model/pojo/view/GoldenGoodsVideoListView.java

@@ -21,6 +21,11 @@ public class GoldenGoodsVideoListView {
      */
     private String title;
 
+    /**
+     * 简介
+     */
+    private String introduction;
+
     /**
      * 封面
      */

+ 12 - 0
crm-model/src/main/java/com/crm/rely/backend/model/pojo/view/SysRemittanceChannelView.java

@@ -0,0 +1,12 @@
+package com.crm.rely.backend.model.pojo.view;
+
+import com.crm.rely.backend.model.pojo.table.SysRemittanceChannelTable;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class SysRemittanceChannelView extends SysRemittanceChannelTable {
+
+    private BigDecimal financeRate;
+}

+ 18 - 0
crm-pay/pom.xml

@@ -94,6 +94,24 @@
             <version>18.0</version>
         </dependency>
 
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-api</artifactId>
+            <version>0.12.3</version>
+        </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-impl</artifactId>
+            <version>0.12.3</version>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-jackson</artifactId>
+            <version>0.12.3</version>
+            <scope>runtime</scope>
+        </dependency>
+
     </dependencies>
     <dependencyManagement>
         <dependencies>

+ 38 - 0
crm-pay/src/main/java/com/crm/pay/constant/MerchantConstants.java

@@ -0,0 +1,38 @@
+package com.crm.pay.constant;
+
+/**
+ * @Author houn
+ * @Date 2025/12/22 22:08
+ * @PackageName:com.crm.pay.constant
+ * @ClassName: MerchantCantants
+ * @Description: TODO
+ */
+public class MerchantConstants {
+
+
+    public final static Integer DEPOSIT_STATUS_WAIT = 0;
+    public final static Integer DEPOSIT_STATUS_SUCCESS = 1;
+    public final static Integer DEPOSIT_STATUS_FAIL = 2;
+    public final static Integer DEPOSIT_STATUS_EXPIRE = 3;
+    public final static Integer DEPOSIT_STATUS_CANCEL = 4;
+
+    public final static Integer WITHING_STATUS_WAIT = 0;
+    public final static Integer WITHING_STATUS_SUCCESS = 1;
+    public final static Integer WITHING_STATUS_FAIL = 2;
+    public final static Integer WITHING_STATUS_EXPIRE = 3;
+    public final static Integer WITHING_STATUS_CANCEL = 4;
+    public final static Integer CALLBACK_STATUS_WAIT = 0;
+    public final static Integer CALLBACK_STATUS_SUCCESS = 1;
+    public final static String MERCHANT_DEPOSIT_PROCESS = "MERCHANT_DEPOSIT_PROCESS";
+    public final static int MERCHANT_DEPOSIT_PROCESS_TIME = 3;
+
+    public final static String MERCHANT_WITHING_PROCESS = "MERCHANT_WITHING_PROCESS";
+    public final static int MERCHANT_WITHING_PROCESS_TIME = 3;
+
+    public final static String MERCHANT_PAY_REQUEST_TYPE_IN = "MERCHANT_PAY_REQUEST_TYPE_IN";
+    public final static String MERCHANT_PAY_REQUEST_TYPE_OUT = "MERCHANT_PAY_REQUEST_TYPE_OUT";
+    public final static String MERCHANT_PAY_REQUEST_TYPE_OUT_CANCEL = "MERCHANT_PAY_REQUEST_TYPE_OUT_CANCEL";
+
+    public final static String SUCCESS = "SUCCESS";
+
+}

+ 61 - 0
crm-pay/src/main/java/com/crm/pay/constant/MerchantFailEnum.java

@@ -0,0 +1,61 @@
+package com.crm.pay.constant;
+
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+
+/**
+ * @Author houn
+ * @Date 2025/12/20 19:09
+ * @PackageName:com.crm.pay.constant
+ * @ClassName: MerchantFailEnum
+ * @Description: TODO
+ */
+
+public enum MerchantFailEnum {
+    /**
+     * public static final int MERCHANT_IS_NOT_EXIST = 13001;
+     * public static final int MERCHANT_PAY_TYPE_IS_NOT_EXIST = 13002;
+     * public static final int MERCHANT_PAY_TYPE_IS_NOT_EXIST = 13002;
+     */
+    //实现错误码枚举
+    MERCHANT_IS_NOT_EXIST(13001, "Merchant does not exist"),
+    MERCHANT_PAY_TYPE_IS_NOT_EXIST(13002, "Merchant channel does not exist."),
+    MERCHANT_SIGN_ERROR(13003, "Merchant signature error"),
+    MERCHANT_CHANNEL_ERROR(13004, "Channel error"),
+    MERCHANT_CHANNEL_IS_NOT_EXIST_ERROR(13005, "The channel does not exist."),
+    MERCHANT_CHANNEL_SEP_IS_EXIST_ERROR(13006, "Order already exists"),
+    MERCHANT_REQUEST_TIME_OUT_ERROR(13007, "Time out"),
+    MERCHANT_REQUEST_GA_CODE_ERROR(13008, "CAPTCHA error"),
+    MERCHANT_IP_ERROR(130089, "IP restriction, no permission"),
+    MERCHANT_PAY_SUCCESS_ERROR(130010, "Pay Repeated"),
+    ;
+
+    private int code;
+    private String message;
+
+    private MerchantFailEnum(int code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public static MerchantFailEnum getByCode(int code) {
+        for (MerchantFailEnum value : values()) {
+            if (value.code == code) {
+                return value;
+            }
+        }
+        return null;
+    }
+
+    public static BaseResultDto getBaseResultDto(MerchantFailEnum merchantFailEnum) {
+
+        return BaseResultDto.error(merchantFailEnum.code, merchantFailEnum.message);
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+}

+ 6 - 6
crm-pay/src/main/java/com/crm/pay/controller/FinanceWithdrawController.java

@@ -57,14 +57,14 @@ public class FinanceWithdrawController {
 //            throws Exception {
 //
 //        if (!validateLogin(entity)) {
-//            return BaseResultDto.error(PayConstant.PAY_LOGIN_NOT_EMPTY);
+//            return BaseResultDto.error(PayConstants.PAY_LOGIN_NOT_EMPTY);
 //        }
-//        validatedCloseFunction(infoEntity.getCustomInfo().getId(), entity.getLogin(), Constants
+//        validatedCloseFunction(infoEntity.getId(), entity.getLogin(), Constants
 //        .CLOSE_FUNCTION_WITHDRAW);
 //
-//        entity.setCId(infoEntity.getCustomInfo().getCId());
-//        entity.setCustomId(infoEntity.getCustomInfo().getId());
-//        entity.setChannelType(PayConstant.CHANNEL_TYPE_BANK_TELEGRAPHIC);
+//        entity.setCId(infoEntity.getCId());
+//        entity.setCustomId(infoEntity.getId());
+//        entity.setChannelType(PayConstants.CHANNEL_TYPE_BANK_TELEGRAPHIC);
 //
 //
 //        return financeWithdrawService.save(entity);
@@ -77,7 +77,7 @@ public class FinanceWithdrawController {
 //
 //        entity.setCId(infoEntity.getCId());
 //        entity.setCustomId(infoEntity.getId());
-//        entity.setChannelType(PayConstant.CHANNEL_TYPE_DIGITAL_CURRENCY);
+//        entity.setChannelType(PayConstants.CHANNEL_TYPE_DIGITAL_CURRENCY);
 //
 //        return financeWithdrawService.save(entity);
 //    }

+ 54 - 0
crm-pay/src/main/java/com/crm/pay/controller/SysChannelBankController.java

@@ -0,0 +1,54 @@
+package com.crm.pay.controller;
+
+import com.crm.pay.service.SysChannelBankService;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.rely.backend.model.dto.sys.remittance.channel.bank.SysChannelBankByChannelCodeDto;
+import com.crm.rely.backend.model.entity.sys.remittance.channel.bank.SysChannelBankByChannelCodeListEntity;
+import com.crm.rely.backend.model.entity.sys.remittance.channel.bank.SysChannelBankByCodeEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+
+/**
+ * 根据通道code获取银行列表
+ */
+@RestController
+@RequestMapping("/channel/bank")
+public class SysChannelBankController {
+
+    @Autowired
+    private SysChannelBankService sysChannelBankService;
+
+    /**
+     * 根据通道code获取银行列表
+     *
+     * @param sysChannelBankByChannelCodeListEntity
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/list")
+    public BaseResultDto<List<SysChannelBankByChannelCodeDto>> selectList(@RequestBody @Validated SysChannelBankByChannelCodeListEntity sysChannelBankByChannelCodeListEntity) throws Exception {
+
+        return sysChannelBankService.getAllByChannelCode(sysChannelBankByChannelCodeListEntity);
+    }
+
+    /**
+     * 根据银行code 获取银行信息
+     *
+     * @param sysChannelBankByCodeEntity
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/code")
+    public BaseResultDto<SysChannelBankByChannelCodeDto> getByCode(@RequestBody @Validated SysChannelBankByCodeEntity sysChannelBankByCodeEntity) throws Exception {
+
+        return sysChannelBankService.getByCode(sysChannelBankByCodeEntity);
+    }
+
+}

+ 3 - 7
crm-pay/src/main/java/com/crm/pay/controller/SysRemittanceChannelController.java

@@ -8,10 +8,7 @@ import com.crm.rely.backend.core.dto.base.ResultWithPagerDto;
 import com.crm.rely.backend.core.entity.base.SingleLongEntity;
 import com.crm.rely.backend.model.dto.sys.remittance.channel.SysRemittanceChannelDto;
 import com.crm.rely.backend.model.dto.sys.remittance.channel.SysRemittanceChannelGetCodeDto;
-import com.crm.rely.backend.model.entity.sys.remittance.channel.SysRemittanceChannelBasehUpdateEntity;
-import com.crm.rely.backend.model.entity.sys.remittance.channel.SysRemittanceChannelBatchUpdateEntity;
-import com.crm.rely.backend.model.entity.sys.remittance.channel.SysRemittanceChannelByCodeEntity;
-import com.crm.rely.backend.model.entity.sys.remittance.channel.SysRemittanceChannelSearchEntity;
+import com.crm.rely.backend.model.entity.sys.remittance.channel.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -39,10 +36,9 @@ public class SysRemittanceChannelController {
      * @throws Exception
      */
     @PostMapping("/list")
-    public BaseResultDto<List<SysRemittanceChannelDto>> selectList() throws Exception {
+    public BaseResultDto<List<SysRemittanceChannelDto>> selectList(@RequestBody SysRemittanceChannelListEntity entity) throws Exception {
 
-
-        return sysRemittanceChannelService.getAllList();
+        return sysRemittanceChannelService.getAllList(entity);
     }
 
     /**

+ 173 - 0
crm-pay/src/main/java/com/crm/pay/controller/base/BasePayCloseFunctionController.java

@@ -0,0 +1,173 @@
+package com.crm.pay.controller.base;
+
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.pay.service.SysConfigService;
+import com.crm.rely.backend.configuration.LocaleMessage;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import com.crm.rely.backend.core.pojo.table.SysConfigTable;
+import com.crm.rely.backend.model.constant.ConfigConstants;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.rely.backend.util.GetIpAndMac;
+import com.google.common.base.Strings;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.util.Date;
+
+public abstract class BasePayCloseFunctionController {
+
+    @Autowired
+    private LocaleMessage localeMessage;
+
+    @Autowired
+    private SysConfigService sysConfigService;
+
+
+    /**
+     * 构建balanceSaveEntity实体
+     *
+     * @param login   入金账号
+     * @param amount  入金金额($)
+     * @param payType 那个系统支付
+     * @return
+     */
+    protected FinanceDepositAddEntity getFinanceDepositSaveEntity(Long login, BigDecimal amount, String payType,
+                                                                  HttpServletRequest request) {
+
+        return getFinanceDepositSaveEntity(login, amount, payType, payType, request);
+    }
+
+    protected FinanceDepositAddEntity getFinanceDepositSaveEntity(Long login, BigDecimal amount, String payType,
+                                                                  int activity, HttpServletRequest request) {
+
+        return getFinanceDepositSaveEntity(login, amount, payType, payType, activity, request);
+    }
+
+    protected FinanceDepositAddEntity getFinanceDepositSaveEntity(Long login, BigDecimal amount, String payType,
+                                                                  int activity, FinanceDepositParameterEntity entity,
+                                                                  HttpServletRequest request) {
+
+        return getFinanceDepositSaveEntity(login, amount, payType, payType, activity, entity, request);
+    }
+
+    protected FinanceDepositAddEntity getFinanceDepositSaveEntity(Long login, BigDecimal amount, String bankCode,
+                                                                  String payType, HttpServletRequest request) {
+
+        return getFinanceDepositSaveEntity(login, amount, bankCode, payType, 0, request);
+    }
+
+    protected FinanceDepositAddEntity getFinanceDepositSaveEntity(Long login, BigDecimal amount, String bankCode,
+                                                                  String payType, int activity,
+                                                                  HttpServletRequest request) {
+
+
+        return getFinanceDepositSaveEntity(login, amount, bankCode, payType, activity, null, request);
+    }
+
+    protected FinanceDepositAddEntity getFinanceDepositSaveEntity(Long login, BigDecimal amount, String bankCode,
+                                                                  String payType, int activity,
+                                                                  FinanceDepositParameterEntity entity,
+                                                                  HttpServletRequest request) {
+        FinanceDepositAddEntity financeDepositAddEntity = new FinanceDepositAddEntity();
+        financeDepositAddEntity.setAmount(amount);
+        financeDepositAddEntity.setLogin(login);
+        financeDepositAddEntity.setAddTime(new Date());
+        financeDepositAddEntity.setBankCode(bankCode);
+        financeDepositAddEntity.setPayType(payType);
+        financeDepositAddEntity.setActivityDeposit(activity);
+        financeDepositAddEntity.setGoodIds(entity.getGoodIds());
+
+        if (entity != null) {
+            if (!Strings.isNullOrEmpty(entity.getPromoCode())) {
+                financeDepositAddEntity.setPromoCode(entity.getPromoCode());
+            }
+            if (!Strings.isNullOrEmpty(entity.getAreaCode())) {
+                financeDepositAddEntity.setAreaCode(entity.getAreaCode());
+            }
+            if (!Strings.isNullOrEmpty(entity.getPhone())) {
+                financeDepositAddEntity.setPhone(entity.getPhone());
+            }
+            if (!Strings.isNullOrEmpty(entity.getName())) {
+                financeDepositAddEntity.setName(entity.getName());
+            }
+            if (!Strings.isNullOrEmpty(entity.getBankCardNum())) {
+                financeDepositAddEntity.setBankCardNum(entity.getBankCardNum());
+            }
+            if (!Strings.isNullOrEmpty(entity.getBankUname())) {
+                financeDepositAddEntity.setBankUname(entity.getBankUname());
+            }
+            if (!Strings.isNullOrEmpty(entity.getCvv())) {
+                financeDepositAddEntity.setCvv(entity.getCvv());
+            }
+            if (!Strings.isNullOrEmpty(entity.getExpiryMonth())) {
+                financeDepositAddEntity.setExpiryMonth(entity.getExpiryMonth());
+            }
+            if (!Strings.isNullOrEmpty(entity.getExpiryYear())) {
+                financeDepositAddEntity.setExpiryYear(entity.getExpiryYear());
+            }
+            if (!Strings.isNullOrEmpty(entity.getPin())) {
+                financeDepositAddEntity.setPin(entity.getPin());
+            }
+
+        }
+        if (!Strings.isNullOrEmpty(financeDepositAddEntity.getIp())) {
+            return financeDepositAddEntity;
+        }
+
+        if (request == null) {
+            RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+
+            if (requestAttributes != null) {
+                request = ((ServletRequestAttributes) requestAttributes).getRequest();
+            }
+        }
+        if (request != null) {
+            String ip = GetIpAndMac.getClientIp(request);
+            if (Strings.isNullOrEmpty(ip)) {
+                ip = GetIpAndMac.getIp(request);
+            }
+
+            financeDepositAddEntity.setIp(ip);
+        }
+
+
+        return financeDepositAddEntity;
+    }
+
+    /**
+     * 验证login和balanceNumber是否为null和0
+     *
+     * @param login  入金的账号
+     * @param amount 入金金额($)
+     * @return 返回错误信息
+     */
+    protected void validated(Long login, BigDecimal amount) throws PayValidatedException {
+        String error = null;
+        /*if (login == null || login <= 0) {
+            error = localeMessage.getMessage(PayConstants.PAY_LOGIN_NOT_EMPTY, PayConstants.PAY_LOGIN_NOT_EMPTY);
+        } else */if (amount == null) {
+            error = localeMessage.getMessage(PayConstants.PAY_REMITTANCE_AMOUNT_NOT_EMPTY,
+                    PayConstants.PAY_REMITTANCE_AMOUNT_NOT_EMPTY);
+        }
+        if (!Strings.isNullOrEmpty(error)) {
+            //逻辑最好是重定向到特定页面 然后显示对应错误 现在直接返回错误信息 在页面上打印出来
+            throw new PayValidatedException(error);
+        }
+    }
+
+    protected void sendRedirect(HttpServletResponse response) throws Exception {
+        String url = "";
+        SysConfigTable sysConfigTable = sysConfigService.getByCode(ConfigConstants.WEB_MY_URE_CONFIG);
+        if (sysConfigTable != null) {
+            url = sysConfigTable.getValue();
+        }
+        response.sendRedirect(url + "/payment.html");
+    }
+
+}

+ 112 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/AcePayController.java

@@ -0,0 +1,112 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.dto.PayDto;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.pay.entity.callback.AcePayCallbackEntity;
+import com.crm.pay.service.AcePayService;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2021-05-31 14:58
+ */
+@RestController
+@RequestMapping("/ace")
+public class AcePayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private AcePayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                                  CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.ACE_PAY_KEY, activity, entity, request);
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public void callback(AcePayCallbackEntity callbackEntity, HttpServletResponse response) throws Exception {
+
+        service.callback(callbackEntity);
+        sendRedirect(response);
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 115 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/AcepaymentController.java

@@ -0,0 +1,115 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.dto.PayDto;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.pay.entity.callback.AcepaymentCallbackEntity;
+import com.crm.pay.service.AcepaymentService;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2022-06-03 14:58
+ */
+@RestController
+@RequestMapping("/acepayment")
+public class AcepaymentController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private AcepaymentService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto payVa(@PathVariable("login") Long login,
+                               @PathVariable("amount") BigDecimal amount,
+                               @PathVariable("bankCode") String bankCode,
+                               @RequestBody FinanceDepositParameterEntity entity,
+                               CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, PayConstants.ACCEPAYMENT_PAY_TYPE_KEY, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto payVa(@PathVariable("login") Long login,
+                               @PathVariable("amount") BigDecimal amount,
+                               @PathVariable("activity") int activity,
+                               @PathVariable("bankCode") String bankCode,
+                               @RequestBody FinanceDepositParameterEntity entity,
+                               CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, PayConstants.ACCEPAYMENT_PAY_TYPE_KEY, activity, entity, infoEntity,
+                request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  String payType,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                                  CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                payType, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback", produces = "text/html")
+    @ResponseBody
+    public String callbackVa(@RequestBody AcepaymentCallbackEntity callbackEntity) throws Exception {
+        service.callback(callbackEntity);
+        return "success";
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @RequestMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @RequestMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 110 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/AllbtpayController.java

@@ -0,0 +1,110 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.dto.PayDto;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.pay.entity.callback.AllbtpayCallbackEntity;
+import com.crm.pay.service.AllbtpayService;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2021-10-31 14:58
+ */
+@RestController
+@RequestMapping("/allbt")
+public class AllbtpayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private AllbtpayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                                  CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.ALLBT_PAY_TYPE, activity, entity, request);
+
+        String serial = service.pay(financeDepositSaveEntity, infoEntity);
+        PayDto payDto = new PayDto(2, serial);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callback 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback", produces = "text/html")
+    public String callback(AllbtpayCallbackEntity callback, HttpServletResponse response) throws Exception {
+
+        service.callback(callback);
+        return PayConstants.ALLBTPAY_SUCCESS_STATUS000;
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 157 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/AlllandPayController.java

@@ -0,0 +1,157 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.dto.PayDto;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.pay.entity.callback.AllLandPayCallbackEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawAllLandEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawInfoEntity;
+import com.crm.pay.service.AllLandPayService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.core.constant.FeignClientAnnotation;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+@RestController
+@RequestMapping("/allLand")
+public class AlllandPayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private AllLandPayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                             CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                             CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                                  CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.ALLLAND_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    @PostMapping("/withdraw/info")
+    @FeignClientAnnotation
+    public BaseResultDto withdrawInfo(@RequestBody FinanceWithdrawInfoEntity entity) throws Exception {
+
+        return BaseResultDto.success(service.withdrawInfo(entity));
+    }
+
+    @PostMapping("/withdraw")
+    @FeignClientAnnotation
+    public BaseResultDto withdraw(@RequestBody FinanceWithdrawAllLandEntity entity) throws Exception {
+        service.withdraw(entity);
+
+        return BaseResultDto.success();
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback", produces = "text/html")
+    public String callback(AllLandPayCallbackEntity callbackEntity, HttpServletResponse response) throws Exception {
+        try {
+            return service.callback(callbackEntity, PayConstants.ALLLAND_PAY_KEY);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+    }
+
+    @RequestMapping(value = "/hc/callback", produces = "text/html")
+    public String hcCallback(AllLandPayCallbackEntity callbackEntity, HttpServletResponse response) throws Exception {
+        try {
+            return service.callback(callbackEntity, PayConstants.ALLLAND_PAY_KEY_HC);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+    }
+
+    @RequestMapping("/withdraw/callback")
+    public String withdrawCallback(AllLandPayCallbackEntity entity) throws Exception {
+        try {
+            return service.withdrawCallback(1, entity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+
+    }
+
+    @RequestMapping("/agent/withdraw/callback")
+    public String agentWithdrawCallback(@RequestBody AllLandPayCallbackEntity entity) throws Exception {
+        try {
+            return service.withdrawCallback(2, entity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 115 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/AlphaPayController.java

@@ -0,0 +1,115 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.pay.entity.callback.alpha.AlphaCallbackEntity;
+import com.crm.pay.service.AlphaService;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import com.crm.rely.backend.model.constant.PayConstants;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2021-10-20 14:58
+ */
+@RestController
+@RequestMapping("/alpha")
+public class AlphaPayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private AlphaService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                                  CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.ALPHA_PAY_TYPE_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public void callback(@RequestBody AlphaCallbackEntity callbackEntity, HttpServletRequest request,
+                         HttpServletResponse response) throws Exception {
+
+        String key = request.getHeaders("X-Processing-Key").nextElement();
+        String sign = request.getHeaders("X-Processing-Signature").nextElement();
+        service.callback(callbackEntity, key, sign);
+        sendRedirect(response);
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 107 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/AnxController.java

@@ -0,0 +1,107 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.dto.anx.AnxResultDto;
+import com.crm.pay.entity.callback.AnxCallbackEntity;
+import com.crm.pay.service.AnxService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @program:
+ * @description:
+ * @author: houn
+ * @create: 2022-06-22 18:58
+ */
+@RestController
+@RequestMapping("/anx")
+public class AnxController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private AnxService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity balanceSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.ANX_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(balanceSaveEntity);
+
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback")
+    public AnxResultDto callback(AnxCallbackEntity callbackEntity) throws Exception {
+
+        return service.callback(callbackEntity);
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception {
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 188 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/B2BinPayController.java

@@ -0,0 +1,188 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.b2bin.B2BinPayCurrencyEntity;
+import com.crm.pay.entity.b2bin.B2BinPaySignEntity;
+import com.crm.pay.entity.b2bin.B2BinPayTransactionEntity;
+import com.crm.pay.entity.callback.B2BinCallbackEntity;
+import com.crm.pay.service.B2BinService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.google.common.base.Strings;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.util.LinkedList;
+import java.util.List;
+
+
+@RestController
+@RequestMapping("/b2bin")
+public class B2BinPayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private B2BinService service;
+
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login, @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+        FinanceDepositAddEntity balanceSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                bankCode, PayConstants.B2BIN_PAY_TYPE_KEY, activity, entity, request);
+        String url = service.pay(balanceSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param request 获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback", produces = "text/html")
+    public String callback(HttpServletRequest request) throws Exception {
+
+        B2BinCallbackEntity callback = getCallback(request);
+//        String content = "{\"actual_amount\":\"293933397000\",\"address\":\"1Bn1N3nj7Rzp1gfEjfRT6B6Ei2Fzpk5HY3\",\"amount\":\"293933397000\",\"callback_url\":\"https://pay.cwgsvg.com/b2bin/callback\",\"created\":\"2020-11-02
+//        12:05:13\",\"error_url\":\"https://my.cwgsvg.com/b2bin/pickup\",\"expired\":\"\",\"id\":\"509556\",\"pow\":\"8\",\"sign\":{\"hash\":\"$2y$10$XbGTb5AmEH48/n/FlqpjBOWrf7qTIZKSqFu81/h/xYr7X5CjleLRi\",\"time\":\"Mon
+//        Nov 02 2020 17:46:34 GMT+0000\"},\"status\":\"2\",\"success_url\":\"https://my.cwgsvg.com/b2bin/pickup\",\"tracking_id\":\"PD202011030420241757_20002\",\"transactions\":[{\"amount\":\"293933397000\",\"bill_id\":\"509556\",\"created\":\"2020-11-02
+//        12:21:27\",\"currency\":{\"alpha\":\"USDT\",\"iso\":2005},\"id\":\"297858\",\"pow\":\"8\",\"status\":\"1\",\"transaction\":\"45a44e8f13554289b1e9ce64180d6bf6458349910fd4f261b45b306917eaf99b\",\"transfer_amount\":\"290994063030\",\"transfer_currency\":{\"alpha\":\"USDT\",\"iso\":2005},\"transfer_pow\":\"8\",\"transfer_rate\":\"100000000\",\"transfer_rate_pow\":\"8\",\"type\":\"0\"}],\"url\":\"https://gw.b2binpay.com/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJCMkJDcnlwdG9QYXkiLCJzdWIiOjUwOTU1NiwiaWF0IjoxNjA0MzE4NzEzfQ.QGEEv4BCB0KSPKrPy9DdnPqV5O6luO_vnU3mcWJB7CU\"}";
+//        B2BinCallbackEntity callback = JSON.parseObject(content, B2BinCallbackEntity.class);
+        service.callback(callback);
+
+        return PayConstants.B2BIN_PAY_SUCCESS_RESULT;
+    }
+
+
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception {
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+
+    /**
+     * 在form-data中获取回调数据
+     *
+     * @param request 用于获取form-data中的数据
+     * @return 返回回调数据构建的实体
+     */
+    private B2BinCallbackEntity getCallback(HttpServletRequest request) {
+
+        B2BinCallbackEntity callbackEntity = new B2BinCallbackEntity();
+
+        callbackEntity.setId(request.getParameter("id"));
+        callbackEntity.setUrl(request.getParameter("url"));
+        callbackEntity.setAddress(request.getParameter("address"));
+        callbackEntity.setCreated(request.getParameter("created"));
+        callbackEntity.setExpired(request.getParameter("expired"));
+        callbackEntity.setStatus(request.getParameter("status"));
+        callbackEntity.setTracking_id(request.getParameter("tracking_id"));
+        callbackEntity.setCallback_url(request.getParameter("callback_url"));
+        callbackEntity.setSuccess_url(request.getParameter("success_url"));
+        callbackEntity.setError_url(request.getParameter("error_url"));
+        callbackEntity.setAmount(request.getParameter("amount"));
+        callbackEntity.setActual_amount(request.getParameter("actual_amount"));
+        callbackEntity.setPow(request.getParameter("pow"));
+        callbackEntity.setMessage(request.getParameter("message"));
+        List<B2BinPayTransactionEntity> transactions = new LinkedList<>();
+        int num = 0;
+        while (true) {
+
+            String id = request.getParameter("transactions[" + num + "][id]");
+            if (Strings.isNullOrEmpty(id)) {
+                break;
+            }
+            B2BinPayTransactionEntity b2BinPayTransactionEntity = new B2BinPayTransactionEntity();
+
+            b2BinPayTransactionEntity.setId(id);
+            b2BinPayTransactionEntity.setBill_id(request.getParameter("transactions[" + num + "][bill_id]"));
+            b2BinPayTransactionEntity.setCreated(request.getParameter("transactions[" + num + "][created]"));
+            b2BinPayTransactionEntity.setAmount(request.getParameter("transactions[" + num + "][amount]"));
+            b2BinPayTransactionEntity.setPow(request.getParameter("transactions[" + num + "][pow]"));
+            b2BinPayTransactionEntity.setStatus(request.getParameter("transactions[" + num + "][status]"));
+            b2BinPayTransactionEntity.setTransaction(request.getParameter("transactions[" + num + "][transaction]"));
+            b2BinPayTransactionEntity.setType(request.getParameter("transactions[" + num + "][type]"));
+            b2BinPayTransactionEntity.setTransfer_amount(request.getParameter("transactions[" + num +
+                    "][transfer_amount]"));
+            b2BinPayTransactionEntity.setTransfer_pow(request.getParameter("transactions[" + num + "][transfer_pow]"));
+            b2BinPayTransactionEntity.setTransfer_rate(request.getParameter("transactions[" + num + "][transfer_rate" +
+                    "]"));
+            b2BinPayTransactionEntity.setTransfer_rate_pow(request.getParameter("transactions[" + num +
+                    "][transfer_rate_pow]"));
+
+            B2BinPayCurrencyEntity b2BinPayCurrencyEntity = new B2BinPayCurrencyEntity();
+            b2BinPayCurrencyEntity.setAlpha(request.getParameter("transactions[" + num + "][currency][alpha]"));
+            b2BinPayCurrencyEntity.setIso(Integer.parseInt(request.getParameter("transactions[" + num + "][currency" +
+                    "][iso]")));
+            b2BinPayTransactionEntity.setCurrency(b2BinPayCurrencyEntity);
+
+            B2BinPayCurrencyEntity transfer_currency = new B2BinPayCurrencyEntity();
+            transfer_currency.setAlpha(request.getParameter("transactions[" + num + "][transfer_currency][alpha]"));
+            transfer_currency.setIso(Integer.parseInt(request.getParameter("transactions[" + num +
+                    "][transfer_currency][iso]")));
+            b2BinPayTransactionEntity.setTransfer_currency(transfer_currency);
+            transactions.add(b2BinPayTransactionEntity);
+            num++;
+        }
+
+        callbackEntity.setTransactions(transactions);
+
+        B2BinPaySignEntity b2BinPaySignEntity = new B2BinPaySignEntity();
+        b2BinPaySignEntity.setTime(request.getParameter("sign[time]"));
+        b2BinPaySignEntity.setHash(request.getParameter("sign[hash]"));
+        callbackEntity.setSign(b2BinPaySignEntity);
+        B2BinPayCurrencyEntity b2BinPayCurrencyEntity = new B2BinPayCurrencyEntity();
+        b2BinPayCurrencyEntity.setAlpha(request.getParameter("currency[alpha]"));
+        b2BinPayCurrencyEntity.setIso(Integer.parseInt(request.getParameter("currency[iso]")));
+        callbackEntity.setSign(b2BinPaySignEntity);
+
+        return callbackEntity;
+    }
+}

+ 94 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/B2BinV2PayController.java

@@ -0,0 +1,94 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.b2b.v2.B2BinV2CallbackEntity;
+import com.crm.pay.service.B2BinV2Service;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+
+
+@RestController
+@RequestMapping("/b2bin/v2")
+public class B2BinV2PayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private B2BinV2Service service;
+
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login, @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+        FinanceDepositAddEntity balanceSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                bankCode, PayConstants.B2BIN_V2_PAY_TYPE_KEY, activity, entity, request);
+        String url = service.pay(balanceSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callback 获取回调数据
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public void callback(@RequestBody B2BinV2CallbackEntity callback) throws Exception {
+
+        service.callback(callback);
+    }
+
+
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception {
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 134 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/BearExPayController.java

@@ -0,0 +1,134 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.SafeCallbackEntity;
+import com.crm.pay.entity.callback.bear.BearExPayCallbackEntity;
+import com.crm.pay.service.BearExPayService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+@RestController
+@RequestMapping("/bear/ex")
+public class BearExPayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private BearExPayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return this.payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return this.payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        this.validated(login, amount);
+
+        FinanceDepositAddEntity balanceSaveEntity = this.getFinanceDepositSaveEntity(login, amount,
+                PayConstants.BEAR_EX_PAY_KEY, activity, entity, request);
+
+        String url = this.service.pay(balanceSaveEntity);
+
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callback 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @PostMapping(value = "/callback", produces = "text/html")
+    public String callback(@RequestBody BearExPayCallbackEntity callback) throws Exception {
+
+        this.service.callback(callback);
+
+        return PayConstants.BEAR_EX_RESULT_SUCCESS;
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception {
+        this.sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        this.sendRedirect(response);
+    }
+
+    /**
+     * 在form-data中获取回调数据
+     *
+     * @param request 用于获取form-data中的数据
+     * @return 返回回调数据构建的实体
+     */
+    private SafeCallbackEntity getCallback(HttpServletRequest request) {
+
+
+        String orderNo = request.getParameter("orderNo");
+        String orderAmount = request.getParameter("orderAmount");
+        String orderCurrency = request.getParameter("orderCurrency");
+        String orderPayment = request.getParameter("orderPayment");
+        String transactionId = request.getParameter("transactionId");
+        String status = request.getParameter("status");
+        String signType = request.getParameter("signType");
+        String sign = request.getParameter("sign");
+
+        SafeCallbackEntity safeCallbackEntity = new SafeCallbackEntity();
+        safeCallbackEntity.setOrderNo(orderNo);
+        safeCallbackEntity.setOrderAmount(orderAmount);
+        safeCallbackEntity.setOrderCurrency(orderCurrency);
+        safeCallbackEntity.setOrderPayment(orderPayment);
+        safeCallbackEntity.setTransactionId(transactionId);
+        safeCallbackEntity.setStatus(status);
+        safeCallbackEntity.setSignType(signType);
+        safeCallbackEntity.setSign(sign);
+
+        return safeCallbackEntity;
+    }
+}

+ 106 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/BieaseController.java

@@ -0,0 +1,106 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.service.BieaseService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.Map;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2024-03-25 14:58
+ */
+@RestController
+@RequestMapping("/biease")
+public class BieaseController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private BieaseService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login, @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                                  CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.BIEASE_PAY_TYPE_KEY,
+                PayConstants.BIEASE_PAY_TYPE_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback", produces = "text/html;charset=UTF-8")
+    public String callback(@RequestBody Map<String, String> callbackEntity, HttpServletResponse response) throws Exception {
+        service.callback(callbackEntity);
+        return PayConstants.BIEASE_RESULT_SUCCESS_STATUS;
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 124 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/BifutongPayController.java

@@ -0,0 +1,124 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.BifutongPayCallbackEntity;
+import com.crm.pay.service.BifutongPayService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2021-06-29 14:58
+ */
+@RestController
+@RequestMapping("/bifutong")
+public class BifutongPayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private BifutongPayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.BIFUTONG_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public Map<String, Object> callback(@RequestBody BifutongPayCallbackEntity callbackEntity,
+                                        HttpServletResponse response) throws Exception {
+
+        try {
+
+            return service.callback(callbackEntity);
+        } catch (Exception e) {
+            Map<String, Object> mapResult = new HashMap<>(4);
+            mapResult.put("code", 500);
+            mapResult.put("message", "system error");
+            mapResult.put("data", null);
+            mapResult.put("success", false);
+            return mapResult;
+        } finally {
+            sendRedirect(response);
+        }
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 111 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/BipiPayController.java

@@ -0,0 +1,111 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.BipiCallbackEntity;
+import com.crm.pay.service.BipiPayService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2021-12-26 14:58
+ */
+@RestController
+@RequestMapping("/bipi")
+public class BipiPayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private BipiPayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.BIPI_PAY_TYPE_KEY,
+                PayConstants.BIPI_PAY_TYPE_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public void callback(BipiCallbackEntity callbackEntity,
+                         HttpServletResponse response) throws Exception {
+
+        service.callback(callbackEntity);
+        sendRedirect(response);
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 126 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/BrightcartController.java

@@ -0,0 +1,126 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.brightcart.BrightcartCallbackEntity;
+import com.crm.pay.service.BrightcartService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import com.crm.rely.backend.core.exception.ServiceException;
+import com.google.common.base.Strings;
+import lombok.extern.log4j.Log4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2023-10-12 14:58
+ */
+@Log4j
+@RestController
+@RequestMapping("/brightcart")
+public class BrightcartController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private BrightcartService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                bankCode,
+                PayConstants.BRIGHTCART_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public void callback(BrightcartCallbackEntity callbackEntity, HttpServletRequest request,
+                         HttpServletResponse response) throws Exception {
+
+        if (callbackEntity == null || Strings.isNullOrEmpty(callbackEntity.getId())) {
+            throw ServiceException.exception(Constants.SYSTEM_ERROR);
+        }
+        if (!"sale".equals(callbackEntity.getType())) {
+            return;
+        }
+        service.callback(callbackEntity);
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+
+}

+ 155 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/CheezeepayController.java

@@ -0,0 +1,155 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawCheezeepayEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawInfoEntity;
+import com.crm.pay.service.CheezeepayService;
+import com.crm.rely.backend.core.constant.FeignClientAnnotation;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.Map;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2024-11-13 14:58
+ */
+@RestController
+@RequestMapping("/cheezeepay")
+public class CheezeepayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private CheezeepayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login, @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.CHEEZEEPAY_PAY_TYPE, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback", produces = "text/html;charset=UTF-8")
+    public String callback(@RequestBody Map<String, String> callbackEntity, HttpServletResponse response) throws Exception {
+        service.callback(callbackEntity, PayConstants.CHEEZEEPAY_PAY_TYPE);
+        return PayConstants.CHEEZEEPAY_PAY_TYPE_RESULT_SUCCESS_STATUS;
+    }
+
+    @RequestMapping(value = "/thailand/callback", produces = "text/html;charset=UTF-8")
+    public String callbackThailand(@RequestBody Map<String, String> callbackEntity, HttpServletResponse response) throws Exception {
+        service.callback(callbackEntity, PayConstants.CHEEZEEPAY_THAILAND_PAY_TYPE);
+        return PayConstants.CHEEZEEPAY_PAY_TYPE_RESULT_SUCCESS_STATUS;
+    }
+
+    @RequestMapping(value = "/brazil/callback", produces = "text/html;charset=UTF-8")
+    public String callbackBrazil(@RequestBody Map<String, String> callbackEntity, HttpServletResponse response) throws Exception {
+        service.callback(callbackEntity, PayConstants.CHEEZEEPAY_BRAZIL_PAY_TYPE);
+        return PayConstants.CHEEZEEPAY_PAY_TYPE_RESULT_SUCCESS_STATUS;
+    }
+
+    @RequestMapping(value = "/indonesia/callback", produces = "text/html;charset=UTF-8")
+    public String callbackIndonesia(@RequestBody Map<String, String> callbackEntity, HttpServletResponse response) throws Exception {
+        service.callback(callbackEntity, PayConstants.CHEEZEEPAY_INDONESIA_PAY_TYPE);
+        return PayConstants.CHEEZEEPAY_PAY_TYPE_RESULT_SUCCESS_STATUS;
+    }
+
+
+    @PostMapping("/withdraw/info")
+    @FeignClientAnnotation
+    public BaseResultDto withdrawInfo(@RequestBody FinanceWithdrawInfoEntity entity) throws Exception {
+
+        return BaseResultDto.success(service.withdrawInfo(entity));
+    }
+
+    @PostMapping("/withdraw")
+    @FeignClientAnnotation
+    public BaseResultDto withdraw(@RequestBody FinanceWithdrawCheezeepayEntity entity) throws Exception {
+        service.withdraw(entity);
+
+        return BaseResultDto.success();
+    }
+
+    @RequestMapping(value = "/withdraw/callback", produces = "text/html;charset=UTF-8")
+    public String withdrawCallback(@RequestBody Map<String, String> entity) throws Exception {
+        service.withdrawCallback(1, entity);
+
+        return PayConstants.CHEEZEEPAY_PAY_TYPE_RESULT_SUCCESS_STATUS;
+    }
+
+    @RequestMapping(value = "/agent/withdraw/callback", produces = "text/html;charset=UTF-8")
+    public String agentWithdrawCallback(@RequestBody Map<String, String> entity) throws Exception {
+        service.withdrawCallback(2, entity);
+
+        return PayConstants.CHEEZEEPAY_PAY_TYPE_RESULT_SUCCESS_STATUS;
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 112 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/ChipController.java

@@ -0,0 +1,112 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.dto.chip.ChipCallbackResponseDto;
+import com.crm.pay.entity.callback.ChipCallbackEntity;
+import com.crm.pay.service.ChipService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2023-03-27 14:58
+ */
+@RestController
+@RequestMapping("/chip")
+public class ChipController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private ChipService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.CHIP_PAY_KEY,
+                PayConstants.CHIP_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity, infoEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public ChipCallbackResponseDto callback(@RequestBody ChipCallbackEntity callbackEntity,
+                                            HttpServletResponse response) throws Exception {
+        service.callback(callbackEntity);
+        return new ChipCallbackResponseDto(200, "");
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 136 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/ClickPayController.java

@@ -0,0 +1,136 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.dto.callback.click.ClickPayResultDto;
+import com.crm.pay.entity.callback.ClickPayCallbackEntity;
+import com.crm.pay.entity.callback.SafeCallbackEntity;
+import com.crm.pay.service.ClickPayService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+@RestController
+@RequestMapping("/click")
+public class ClickPayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private ClickPayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity balanceSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.CLICK_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(balanceSaveEntity);
+
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callback 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @PostMapping(value = "/callback")
+    public ClickPayResultDto callback(@RequestBody ClickPayCallbackEntity callback) throws Exception {
+
+
+        ClickPayResultDto resultDto = service.callback(callback);
+
+        return resultDto;
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception {
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+
+    /**
+     * 在form-data中获取回调数据
+     *
+     * @param request 用于获取form-data中的数据
+     * @return 返回回调数据构建的实体
+     */
+    private SafeCallbackEntity getCallback(HttpServletRequest request) {
+
+
+        String orderNo = request.getParameter("orderNo");
+        String orderAmount = request.getParameter("orderAmount");
+        String orderCurrency = request.getParameter("orderCurrency");
+        String orderPayment = request.getParameter("orderPayment");
+        String transactionId = request.getParameter("transactionId");
+        String status = request.getParameter("status");
+        String signType = request.getParameter("signType");
+        String sign = request.getParameter("sign");
+
+        SafeCallbackEntity safeCallbackEntity = new SafeCallbackEntity();
+        safeCallbackEntity.setOrderNo(orderNo);
+        safeCallbackEntity.setOrderAmount(orderAmount);
+        safeCallbackEntity.setOrderCurrency(orderCurrency);
+        safeCallbackEntity.setOrderPayment(orderPayment);
+        safeCallbackEntity.setTransactionId(transactionId);
+        safeCallbackEntity.setStatus(status);
+        safeCallbackEntity.setSignType(signType);
+        safeCallbackEntity.setSign(sign);
+
+        return safeCallbackEntity;
+    }
+}

+ 146 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/CwgPayController.java

@@ -0,0 +1,146 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawCwgEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawInfoEntity;
+import com.crm.pay.service.CwgPayService;
+import com.crm.rely.backend.core.constant.FeignClientAnnotation;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.Map;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2022-07-13 14:58
+ */
+@RestController
+@RequestMapping("/cwg")
+public class CwgPayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private CwgPayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login, @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.CWG_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback", produces = "text/html;charset=UTF-8")
+    public String callback(@RequestBody Map<String, String> callbackEntity, HttpServletResponse response) throws Exception {
+        service.callback(callbackEntity);
+        return PayConstants.CWG_RESULT_SUCCESS_STATUS;
+    }
+
+    @RequestMapping(value = "/hc/callback", produces = "text/html;charset=UTF-8")
+    public String hcCallback(@RequestBody Map<String, String> callbackEntity, HttpServletResponse response) throws Exception {
+        service.callback(callbackEntity, PayConstants.CWG_PAY_KEY_HC);
+        return PayConstants.CWG_RESULT_SUCCESS_STATUS;
+    }
+
+
+    @PostMapping("/withdraw/info")
+    @FeignClientAnnotation
+    public BaseResultDto withdrawInfo(@RequestBody FinanceWithdrawInfoEntity entity) throws Exception {
+
+        return BaseResultDto.success(service.withdrawInfo(entity));
+    }
+
+    @PostMapping("/withdraw")
+    @FeignClientAnnotation
+    public BaseResultDto withdraw(@RequestBody FinanceWithdrawCwgEntity entity) throws Exception {
+        service.withdraw(entity);
+
+        return BaseResultDto.success();
+    }
+
+    @RequestMapping(value = "/withdraw/callback", produces = "text/html;charset=UTF-8")
+    public String withdrawCallback(@RequestBody Map<String, String> entity) throws Exception {
+        service.withdrawCallback(1, entity);
+
+        return PayConstants.CWG_RESULT_SUCCESS_STATUS;
+    }
+
+    @RequestMapping(value = "/agent/withdraw/callback", produces = "text/html;charset=UTF-8")
+    public String agentWithdrawCallback(@RequestBody Map<String, String> entity) throws Exception {
+        service.withdrawCallback(2, entity);
+
+        return PayConstants.CWG_RESULT_SUCCESS_STATUS;
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 41 - 8
crm-pay/src/main/java/com/crm/pay/controller/pay/DigitalPayController.java

@@ -1,9 +1,8 @@
 package com.crm.pay.controller.pay;
 
-import com.crm.pay.controller.base.BasePayController;
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
 import com.crm.pay.entity.digital.DigitalAddEntity;
 import com.crm.pay.service.DigitalPayService;
-import com.crm.rely.backend.core.constant.RequestSinglePointLimiter;
 import com.crm.rely.backend.core.dto.base.BaseResultDto;
 import com.crm.rely.backend.model.constant.PayConstants;
 import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
@@ -14,27 +13,61 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletRequest;
+
 
 @RestController
 @RequestMapping("/digital")
-public class DigitalPayController extends BasePayController {
+public class DigitalPayController extends BasePayCloseFunctionController {
 
     @Autowired
     private DigitalPayService digitalPayService;
 
-
+    /**
+     * 支付
+     *
+     * @return 错误信息
+     * @throws Exception
+     */
     @RequestMapping("/pay")
-    @RequestSinglePointLimiter
-    public BaseResultDto pay(@RequestBody @Validated DigitalAddEntity entity, CustomInfoEntity infoEntity) throws Exception {
+    public BaseResultDto pay(@RequestBody @Validated DigitalAddEntity entity, CustomInfoEntity infoEntity,
+                             HttpServletRequest request) throws Exception {
+
+        validated(entity.getLogin(), entity.getAmount());
 
+        if (entity.getActivityDeposit() == null) {
+            entity.setActivityDeposit(0);
+        }
         FinanceDepositAddEntity balanceSaveEntity = getFinanceDepositSaveEntity(
                 entity.getLogin(),
                 entity.getAmount(),
                 PayConstants.DIGITAL_PAY_TYPE_KEY,
-                entity.getVoucherUrl(),
-                infoEntity);
+                PayConstants.DIGITAL_PAY_TYPE_KEY,
+                entity.getActivityDeposit(),
+                entity, request);
+        balanceSaveEntity.setVoucherUrl(entity.getVoucherUrl());
         digitalPayService.pay(balanceSaveEntity);
         return BaseResultDto.success();
     }
 
+    @RequestMapping("/uk/pay")
+    public BaseResultDto ukPay(@RequestBody @Validated DigitalAddEntity entity, CustomInfoEntity infoEntity,
+                               HttpServletRequest request) throws Exception {
+
+        validated(entity.getLogin(), entity.getAmount());
+
+        if (entity.getActivityDeposit() == null) {
+            entity.setActivityDeposit(0);
+        }
+        FinanceDepositAddEntity balanceSaveEntity = getFinanceDepositSaveEntity(
+                entity.getLogin(),
+                entity.getAmount(),
+                PayConstants.DIGITAL_PAY_TYPE_KEY_UK,
+                PayConstants.DIGITAL_PAY_TYPE_KEY_UK,
+                entity.getActivityDeposit(),
+                entity, request);
+        balanceSaveEntity.setVoucherUrl(entity.getVoucherUrl());
+        digitalPayService.pay(balanceSaveEntity);
+        return BaseResultDto.success();
+    }
 }

+ 128 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/EcomController.java

@@ -0,0 +1,128 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.dto.callback.ecom.EcomResultDto;
+import com.crm.pay.entity.callback.EcomCallbackEntity;
+import com.crm.pay.service.EcomService;
+import com.crm.rely.backend.core.constant.FeignClientAnnotation;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawEcomEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawInfoEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2024-01-20 14:58
+ */
+@RestController
+@RequestMapping("/ecom")
+public class EcomController extends BasePayCloseFunctionController {
+
+
+    @Autowired
+    private EcomService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto payIdrIbP2p(@PathVariable("login") Long login,
+                                     @PathVariable("amount") BigDecimal amount,
+                                     @PathVariable("bankCode") String bankCode,
+                                     @RequestBody FinanceDepositParameterEntity entity,
+                                     CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, PayConstants.ECOM_PAY_TYPE_KEY, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto payIdrIbP2p(@PathVariable("login") Long login,
+                                     @PathVariable("amount") BigDecimal amount,
+                                     @PathVariable("activity") int activity,
+                                     @PathVariable("bankCode") String bankCode,
+                                     @RequestBody FinanceDepositParameterEntity entity,
+                                     CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, PayConstants.ECOM_PAY_TYPE_KEY, activity, entity, infoEntity,
+                request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  String payType,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                payType, activity, entity, request);
+
+        String serial = service.pay(financeDepositSaveEntity);
+        PayDto url = new PayDto(1, serial);
+        return BaseResultDto.success(url);
+    }
+
+    @PostMapping("/withdraw/info")
+    @FeignClientAnnotation
+    public BaseResultDto withdrawInfo(@RequestBody FinanceWithdrawInfoEntity entity) throws Exception {
+
+        return BaseResultDto.success(service.withdrawInfo(entity));
+    }
+
+    @PostMapping("/withdraw")
+    @FeignClientAnnotation
+    public BaseResultDto withdraw(@RequestBody FinanceWithdrawEcomEntity entity) throws Exception {
+        service.withdraw(entity);
+
+        return BaseResultDto.success();
+    }
+
+    @RequestMapping(value = "/callback")
+    @ResponseBody
+    public EcomResultDto callback(@RequestBody EcomCallbackEntity callbackEntity) throws Exception {
+
+        EcomResultDto resultDto = service.callback(callbackEntity);
+        return resultDto;
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @RequestMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @RequestMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 113 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/EvirtualpayController.java

@@ -0,0 +1,113 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.service.EvirtualpayService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.Map;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2024-04-30 14:58
+ */
+@RestController
+@RequestMapping("/evirtualpay")
+public class EvirtualpayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private EvirtualpayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.EVIRTUALPAY_PAY_TYPE, activity, entity, request);
+
+        String serial = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(2, serial);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback/{merchantOrder}")
+    public void callback(@RequestBody Map<String, String> callbackEntity,
+                         @PathVariable("merchantOrder") String merchantOrder) throws Exception {
+
+        callbackEntity.put("merchantOrder", merchantOrder);
+
+        service.callback(callbackEntity);
+
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 114 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/ExPayController.java

@@ -0,0 +1,114 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.dto.callback.ex.ExPayCallbackResultDto;
+import com.crm.pay.entity.callback.ExPayCallbackEntity;
+import com.crm.pay.service.ExPayService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2020-11-25 14:58
+ */
+@RestController
+@RequestMapping("/ex")
+public class ExPayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private ExPayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.EX_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public ExPayCallbackResultDto callback(ExPayCallbackEntity callbackEntity, HttpServletResponse response) throws Exception {
+        sendRedirect(response);
+
+        return service.callback(callbackEntity);
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 130 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/ExlinkDigitalPayController.java

@@ -0,0 +1,130 @@
+package com.crm.pay.controller.pay;//package com.crm.pay.controller.pay;
+//
+//import com.crm.pay.controller.base.BasePayCloseFunctionController;
+//import com.crm.pay.entity.callback.exlink.ExlinkDigitalPayCallbackEntity;
+//import com.crm.pay.service.ExlinkDigitalPayService;
+//import com.crm.rely.backend.model.constant.PayConstants;
+//import com.crm.rely.backend.core.dto.base.BaseResultDto;
+//import com.crm.pay.dto.PayDto;
+//import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+//import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+//import com.crm.pay.entity.FinanceDepositParameterEntity;
+//import com.crm.rely.backend.core.exception.PayValidatedException;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.web.bind.annotation.*;
+//
+//import javax.servlet.http.HttpServletRequest;
+//import javax.servlet.http.HttpServletResponse;
+//import java.io.IOException;
+//import java.math.BigDecimal;
+//import java.util.HashMap;
+//import java.util.Map;
+//
+///**
+// * @description:
+// * @author: houn
+// * @create: 2023-11-30 14:58
+// */
+//@RestController
+//@RequestMapping("/exlink/digital")
+//public class ExlinkDigitalPayController extends BasePayCloseFunctionController {
+//
+//    @Autowired
+//    private ExlinkDigitalPayService service;
+//
+//    /**
+//     * 支付
+//     *
+//     * @param login  入金账号
+//     * @param amount 入金金额
+//     * @return 错误信息
+//     * @throws Exception
+//     */
+//    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+//    public BaseResultDto pay(@PathVariable("login") Long login,
+//                             @PathVariable("amount") BigDecimal amount,
+//                             @PathVariable("bankCode") String bankCode,
+//                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+//                             InfoEntity infoEntity) throws Exception {
+//
+//
+//        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+//    }
+//
+//    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+//    public BaseResultDto pay(@PathVariable("login") Long login,
+//                             @PathVariable("amount") BigDecimal amount,
+//                             @PathVariable("bankCode") String bankCode,
+//                             @PathVariable("activity") int activity,
+//                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+//                             InfoEntity infoEntity) throws Exception {
+//
+//
+//        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+//    }
+//
+//
+//    private BaseResultDto payCall(Long login,
+//                                  BigDecimal amount,
+//                                  String bankCode,
+//                                  int activity,
+//                                  FinanceDepositParameterEntity entity,
+//                                  InfoEntity infoEntity, HttpServletRequest request) throws Exception {
+//        validated(login, amount);
+//
+//        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+//                PayConstants.EXLINK_DIGITAL_PAY_KEY, activity, entity, request);
+//
+//        String url = service.pay(financeDepositSaveEntity);
+//        PayDto payDto = new PayDto(1, url);
+//        return BaseResultDto.success(payDto);
+//    }
+//
+//    /**
+//     * 异步回调
+//     *
+//     * @param callbackEntity 用于获取回调数据
+//     * @return 返回成功给第三方系统
+//     * @throws Exception
+//     */
+//    @RequestMapping("/callback")
+//    public Map<String, Object> callback(@RequestBody ExlinkDigitalPayCallbackEntity callbackEntity,
+//                                        HttpServletRequest request,
+//                                        HttpServletResponse response) throws Exception {
+//
+//        callbackEntity.setSignature(request.getHeader("signature"));
+//
+//        try {
+//
+//            return service.callback(callbackEntity);
+//        } catch (Exception e) {
+//            Map<String, Object> mapResult = new HashMap<>(4);
+//            mapResult.put("code", 500);
+//            mapResult.put("message", "system error");
+//            mapResult.put("data", null);
+//            mapResult.put("success", false);
+//            return mapResult;
+//        } finally {
+//            sendRedirect(response);
+//        }
+//    }
+//
+//
+//    /**
+//     * 同步页面 成功
+//     *
+//     * @param response 用于重定向页面
+//     * @throws IOException
+//     */
+//    @GetMapping(value = "/pickup")
+//    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+//
+//        sendRedirect(response);
+//    }
+//
+//    @GetMapping(value = "/error")
+//    public void error(HttpServletResponse response) throws Exception {
+//
+//        sendRedirect(response);
+//    }
+//}

+ 206 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/ExlinkPayController.java

@@ -0,0 +1,206 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.exlink.ExlinkDigitalPayCallbackEntity;
+import com.crm.pay.entity.callback.exlink.ExlinkPayCallbackEntity;
+import com.crm.pay.service.ExlinkDigitalPayService;
+import com.crm.pay.service.ExlinkPayService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2023-11-30 14:58
+ */
+@RestController
+@RequestMapping("/exlink")
+public class ExlinkPayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private ExlinkPayService service;
+
+
+    @Autowired
+    private ExlinkDigitalPayService exlinkDigitalPayService;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                             CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                             CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.EXLINK_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public Map<String, Object> callback(@RequestBody ExlinkPayCallbackEntity callbackEntity,
+                                        HttpServletResponse response) throws Exception {
+
+        try {
+
+            return service.callback(callbackEntity);
+        } catch (Exception e) {
+            Map<String, Object> mapResult = new HashMap<>(4);
+            mapResult.put("code", 500);
+            mapResult.put("message", "system error");
+            mapResult.put("data", null);
+            mapResult.put("success", false);
+            return mapResult;
+        } finally {
+            sendRedirect(response);
+        }
+    }
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/digital/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                             CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/digital/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                             CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.EXLINK_DIGITAL_PAY_KEY, activity, entity, request);
+
+        String url = exlinkDigitalPayService.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/digital/callback")
+    public Map<String, Object> callback(@RequestBody ExlinkDigitalPayCallbackEntity callbackEntity,
+                                        HttpServletRequest request,
+                                        HttpServletResponse response) throws Exception {
+
+        callbackEntity.setSignature(request.getHeader("signature"));
+
+        try {
+
+            return exlinkDigitalPayService.callback(callbackEntity);
+        } catch (Exception e) {
+            Map<String, Object> mapResult = new HashMap<>(4);
+            mapResult.put("code", 500);
+            mapResult.put("message", "system error");
+            mapResult.put("data", null);
+            mapResult.put("success", false);
+            return mapResult;
+        } finally {
+            sendRedirect(response);
+        }
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 108 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/FlashExController.java

@@ -0,0 +1,108 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.service.FlashExService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.Map;
+
+/**
+ * @program: cwg-my-base
+ * @description:
+ * @author: houn
+ * @create: 2020-09-14 18:58
+ */
+@RestController
+@RequestMapping("/flash/ex")
+public class FlashExController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private FlashExService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity balanceSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.FLASHEX_TYPE_KEY, activity, entity, request);
+
+        String url = service.pay(balanceSaveEntity);
+
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @PostMapping(value = "/callback", produces = "text/html")
+    public String callback(@RequestBody Map<String, String> callbackEntity) throws Exception {
+
+        service.callback(callbackEntity);
+
+        return PayConstants.FLASHEX_SUCCESS_RESULT;
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception {
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 192 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/FlashPayController.java

@@ -0,0 +1,192 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.FlashPayCallbackEntity;
+import com.crm.pay.service.FlashPayService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.core.constant.FeignClientAnnotation;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawFlashEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawInfoEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+@RestController
+@RequestMapping("/flash")
+public class FlashPayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private FlashPayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                             CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                             CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.FLASH_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    @RequestMapping("/hc//pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto hcPay(@PathVariable("login") Long login,
+                               @PathVariable("amount") BigDecimal amount,
+                               @PathVariable("bankCode") String bankCode,
+                               @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                               CustomInfoEntity infoEntity) throws Exception {
+
+
+        return hcPayCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/hc//pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto hcPay(@PathVariable("login") Long login,
+                               @PathVariable("amount") BigDecimal amount,
+                               @PathVariable("bankCode") String bankCode,
+                               @PathVariable("activity") int activity,
+                               @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                               CustomInfoEntity infoEntity) throws Exception {
+
+
+        return hcPayCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto hcPayCall(Long login,
+                                    BigDecimal amount,
+                                    @PathVariable("bankCode") String bankCode,
+                                    int activity,
+                                    FinanceDepositParameterEntity entity,
+                                    CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.FLASH_PAY_KEY_HC, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    @PostMapping("/withdraw/info")
+    @FeignClientAnnotation
+    public BaseResultDto withdrawInfo(@RequestBody FinanceWithdrawInfoEntity entity) throws Exception {
+
+        return BaseResultDto.success(service.withdrawInfo(entity));
+    }
+
+    @PostMapping("/withdraw")
+    @FeignClientAnnotation
+    public BaseResultDto withdraw(@RequestBody FinanceWithdrawFlashEntity entity) throws Exception {
+        service.withdraw(entity);
+
+        return BaseResultDto.success();
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback", produces = "text/html")
+    public String callback(@RequestBody FlashPayCallbackEntity callbackEntity, HttpServletResponse response) throws Exception {
+        try {
+            return service.callback(callbackEntity, PayConstants.FLASH_PAY_KEY);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+    }
+
+    @RequestMapping(value = "/hc/callback", produces = "text/html")
+    public String hcCallback(@RequestBody FlashPayCallbackEntity callbackEntity, HttpServletResponse response) throws Exception {
+        try {
+            return service.callback(callbackEntity, PayConstants.FLASH_PAY_KEY_HC);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+    }
+
+    @RequestMapping("/withdraw/callback")
+    public String withdrawCallback(@RequestBody FlashPayCallbackEntity entity) throws Exception {
+        try {
+            return service.withdrawCallback(1, entity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+
+    }
+
+    @RequestMapping("/agent/withdraw/callback")
+    public String agentWithdrawCallback(@RequestBody FlashPayCallbackEntity entity) throws Exception {
+        try {
+            return service.withdrawCallback(2, entity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 184 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/GPayController.java

@@ -0,0 +1,184 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.dto.g.GPayDto;
+import com.crm.pay.entity.callback.GPayCallbackEntity;
+import com.crm.pay.service.GPayService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import com.google.common.base.Strings;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2021-05-31 14:58
+ */
+@RestController
+@RequestMapping("/g")
+public class GPayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private GPayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/zfbzymhh/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto zfbzymhhPay(@PathVariable("login") Long login,
+                                     @PathVariable("amount") BigDecimal amount,
+                                     @RequestBody FinanceDepositParameterEntity entity,
+                                     HttpServletRequest request,
+                                     CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, 0, entity, request, PayConstants.G_PAY_ZFB_ZYM_HH_KEY, infoEntity);
+    }
+
+    @RequestMapping("/zfbzymhh/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto zfbzymhhPay(@PathVariable("login") Long login,
+                                     @PathVariable("amount") BigDecimal amount,
+                                     @PathVariable("activity") int activity,
+                                     @RequestBody FinanceDepositParameterEntity entity,
+                                     HttpServletRequest request,
+                                     CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, request, PayConstants.G_PAY_ZFB_ZYM_HH_KEY, infoEntity);
+    }
+
+    @RequestMapping("/usdt/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto usdtPay(@PathVariable("login") Long login,
+                                 @PathVariable("amount") BigDecimal amount,
+                                 @RequestBody FinanceDepositParameterEntity entity,
+                                 HttpServletRequest request,
+                                 CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, 0, entity, request, PayConstants.G_PAY_USDT_KEY, infoEntity);
+    }
+
+    @RequestMapping("/usdt/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto usdtPay(@PathVariable("login") Long login,
+                                 @PathVariable("amount") BigDecimal amount,
+                                 @PathVariable("activity") int activity,
+                                 @RequestBody FinanceDepositParameterEntity entity,
+                                 HttpServletRequest request,
+                                 CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, request, PayConstants.G_PAY_USDT_KEY, infoEntity);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                                  HttpServletRequest request, String payType,
+                                  CustomInfoEntity infoEntity) throws Exception {
+
+//        if (service.verificationLimitQuantity(infoEntity.getId(),payType)) {
+//            return BaseResultDto.error("the_quota_has_been_used_up_today_please_try_again_tomorrow");
+//        }
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                payType,
+                payType, activity, entity, request);
+
+        financeDepositSaveEntity.setIp(request.getHeader("CLIENT_IP"));
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param request 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public GPayDto callback(HttpServletRequest request) throws Exception {
+        GPayCallbackEntity callbackEntity = getGPayCallbackEntity(request);
+        String payType = null;
+        if (callbackEntity == null || Strings.isNullOrEmpty(callbackEntity.getCompanyOrderNum())) {
+
+            return new GPayDto("", "", 0, "body is null");
+        }
+        if (callbackEntity != null && callbackEntity.getDepositMode().equals("56")) {
+            payType = PayConstants.G_PAY_USDT_KEY;
+        }
+        if (callbackEntity != null && callbackEntity.getDepositMode().equals("38")) {
+            payType = PayConstants.G_PAY_ZFB_ZYM_HH_KEY;
+        }
+        GPayDto dto;
+        try {
+            dto = service.callback(callbackEntity, payType);
+        } catch (Exception e) {
+            dto = new GPayDto(callbackEntity.getCompanyOrderNum(), callbackEntity.getMownecumOrderNum(), 0,
+                    Constants.SYSTEM_ERROR);
+        }
+
+        return dto;
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+
+    private GPayCallbackEntity getGPayCallbackEntity(HttpServletRequest request) {
+        GPayCallbackEntity callbackEntity = new GPayCallbackEntity();
+        callbackEntity.setPayTime(request.getParameter("pay_time"));
+        callbackEntity.setBankId(request.getParameter("bank_id"));
+        callbackEntity.setAmount(request.getParameter("amount"));
+        callbackEntity.setCompanyOrderNum(request.getParameter("company_order_num"));
+        callbackEntity.setMownecumOrderNum(request.getParameter("mownecum_order_num"));
+        callbackEntity.setPayCardNum(request.getParameter("pay_card_num"));
+        callbackEntity.setPayCardName(request.getParameter("pay_card_name"));
+        callbackEntity.setChannel(request.getParameter("channel"));
+        callbackEntity.setArea(request.getParameter("area"));
+        callbackEntity.setFee(request.getParameter("fee"));
+        callbackEntity.setTransactionCharge(request.getParameter("transaction_charge"));
+        callbackEntity.setKey(request.getParameter("key"));
+        callbackEntity.setDepositMode(request.getParameter("deposit_mode"));
+        callbackEntity.setBaseInfo(request.getParameter("base_info"));
+        callbackEntity.setOperatingTime(request.getParameter("operating_time"));
+
+        return callbackEntity;
+    }
+}

+ 108 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/GroupOtcController.java

@@ -0,0 +1,108 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.GroupOtcCallbackEntity;
+import com.crm.pay.service.GroupOtcService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @program: cwg-my-base
+ * @description:
+ * @author: houn
+ * @create: 2020-11-11 18:58
+ */
+@RestController
+@RequestMapping("/group/otc")
+public class GroupOtcController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private GroupOtcService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity balanceSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.GROUP_OTC_TYPE_KEY, activity, entity, request);
+
+        String url = service.pay(balanceSaveEntity);
+
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback", produces = "text/html")
+    public String callback(GroupOtcCallbackEntity callbackEntity) throws Exception {
+
+
+        service.callback(callbackEntity);
+
+        return PayConstants.GROUP_OTC_SUCCESS_RESULT;
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception {
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 181 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/HYPayController.java

@@ -0,0 +1,181 @@
+package com.crm.pay.controller.pay;
+
+import com.alibaba.fastjson.JSON;
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.HyPayCallbackEntity;
+import com.crm.pay.service.HyPayService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import com.google.common.base.Strings;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2021-05-31 14:58
+ */
+@Slf4j
+@RestController
+@RequestMapping("/hy")
+public class HYPayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private HyPayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.HY_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @PostMapping("/callback")
+    public String callback(@RequestHeader("ACCESS-SIGN") String accessSign,
+                           @RequestHeader("ACCESS-TIMESTAMP") String timestamp,
+                           @RequestBody String body, HttpServletResponse response) throws Exception {
+        HyPayCallbackEntity callbackEntity = JSON.parseObject(body, HyPayCallbackEntity.class);
+        log.error("sign:" + accessSign + ",timestamp:" + timestamp + ",callbackEntity:" + callbackEntity);
+        if (Strings.isNullOrEmpty(accessSign) || ObjectUtils.isEmpty(callbackEntity)) {
+            return Constants.FAIL;
+        }
+        callbackEntity.setSign(accessSign);
+        callbackEntity.setTimestamp(timestamp);
+
+        return service.callback(callbackEntity, PayConstants.HY_PAY_KEY);
+    }
+
+
+    @RequestMapping("/hc/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto hcPay(@PathVariable("login") Long login,
+                               @PathVariable("amount") BigDecimal amount,
+                               @PathVariable("bankCode") String bankCode,
+                               @RequestBody FinanceDepositParameterEntity entity,
+                               CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/hc/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto hcPay(@PathVariable("login") Long login,
+                               @PathVariable("amount") BigDecimal amount,
+                               @PathVariable("bankCode") String bankCode,
+                               @PathVariable("activity") int activity,
+                               @RequestBody FinanceDepositParameterEntity entity,
+                               CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payHcCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payHcCall(Long login,
+                                    BigDecimal amount,
+                                    String bankCode,
+                                    int activity,
+                                    FinanceDepositParameterEntity entity,
+                                    CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.HY_PAY_KEY_HC, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    @PostMapping("/hc/callback")
+    public String hcCallback(@RequestHeader("ACCESS-SIGN") String accessSign,
+                             @RequestHeader("ACCESS-TIMESTAMP") String timestamp,
+                             @RequestBody String body, HttpServletResponse response) throws Exception {
+        HyPayCallbackEntity callbackEntity = JSON.parseObject(body, HyPayCallbackEntity.class);
+        log.error("sign:" + accessSign + ",timestamp:" + timestamp + ",callbackEntity:" + callbackEntity);
+        if (Strings.isNullOrEmpty(accessSign) || ObjectUtils.isEmpty(callbackEntity)) {
+            return Constants.FAIL;
+        }
+        callbackEntity.setSign(accessSign);
+        callbackEntity.setTimestamp(timestamp);
+
+        return service.callback(callbackEntity, PayConstants.HY_PAY_KEY_HC);
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 152 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/HelpController.java

@@ -0,0 +1,152 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.HelpCallbackEntity;
+import com.crm.pay.entity.callback.HelpPayoutCallbackEntity;
+import com.crm.pay.service.HelpService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.core.constant.FeignClientAnnotation;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.*;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import com.crm.rely.backend.util.GetIpAndMac;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2020-05-07 14:58
+ */
+@RestController
+@RequestMapping("/help")
+public class HelpController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private HelpService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.HELP_PAY_TYPE, activity, entity, request);
+
+        String serial = service.pay(financeDepositSaveEntity, infoEntity);
+        PayDto payDto = new PayDto(2, serial);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callback 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public void callback(HelpCallbackEntity callback, HttpServletRequest request, HttpServletResponse response) throws Exception {
+
+        callback.setIp(GetIpAndMac.getIp(request));
+        service.callback(callback);
+        sendRedirect(response);
+    }
+
+
+    @PostMapping("/withdraw/info")
+    @FeignClientAnnotation
+    public BaseResultDto withdrawInfo(@RequestBody FinanceWithdrawInfoEntity entity) throws Exception {
+
+        return BaseResultDto.success(service.withdrawInfo(entity));
+    }
+
+    @PostMapping("/withdraw")
+    @FeignClientAnnotation
+    public BaseResultDto withdraw(@RequestBody FinanceWithdrawHelpEntity entity) throws Exception {
+        service.withdraw(entity);
+        return BaseResultDto.success();
+    }
+
+    @RequestMapping("/withdraw/callback")
+    public String withdrawCallback(@RequestBody HelpPayoutCallbackEntity callbackEntity) throws Exception {
+        try {
+            return service.withdrawCallback(1, callbackEntity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+    }
+
+    @RequestMapping("/agent/withdraw/callback")
+    public String agentWithdrawCallback(@RequestBody HelpPayoutCallbackEntity callbackEntity) throws Exception {
+        try {
+            return service.withdrawCallback(2, callbackEntity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 142 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/HuaboController.java

@@ -0,0 +1,142 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.HuaboCallbackEntity;
+import com.crm.pay.service.HuaboService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2024-10-14 14:58
+ */
+@RestController
+@RequestMapping("/huabo")
+public class HuaboController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private HuaboService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.HUABO_PAY_TYPE, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback", produces = "text/html;charset=UTF-8")
+    public synchronized String callback(HttpServletResponse response,
+                                        HttpServletRequest request) throws Exception {
+
+//        service.callback(callbackEntity);
+        service.callback(getCallback(request));
+        return Constants.SUCCESS;
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+
+    private HuaboCallbackEntity getCallback(HttpServletRequest request) {
+        HuaboCallbackEntity callbackEntity = new HuaboCallbackEntity();
+
+//        private String payOrderId;
+//        private String mchId;
+//        private String appId;
+//        private String productId;
+//        private String mchOrderNo;
+//        private String amount;
+//        private String income;
+//        private String status;
+//        private String paySuccTime;
+//        private String backType;
+//        private String sign;
+
+        callbackEntity.setPayOrderId(request.getParameter("payOrderId"));
+        callbackEntity.setMchId(request.getParameter("mchId"));
+        callbackEntity.setAppId(request.getParameter("appId"));
+        callbackEntity.setProductId(request.getParameter("productId"));
+        callbackEntity.setMchOrderNo(request.getParameter("mchOrderNo"));
+        callbackEntity.setAmount(request.getParameter("amount"));
+        callbackEntity.setIncome(request.getParameter("income"));
+        callbackEntity.setStatus(request.getParameter("status"));
+        callbackEntity.setPaySuccTime(request.getParameter("paySuccTime"));
+        callbackEntity.setBackType(request.getParameter("backType"));
+        callbackEntity.setSign(request.getParameter("sign"));
+        return callbackEntity;
+    }
+
+}

+ 110 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/HyperHashingController.java

@@ -0,0 +1,110 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.service.HyperHashingService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @program: cwg-my-base
+ * @description:
+ * @author: houn
+ * @create: 2024-07-24 18:58
+ */
+@RestController
+@RequestMapping("/hyper/hashing")
+public class HyperHashingController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private HyperHashingService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity balanceSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.HYPER_HASHING_PAY_TYPE, activity, entity, request);
+
+        String url = service.pay(balanceSaveEntity);
+
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @PostMapping(value = "/callback", produces = "text/html")
+    public String callback(@RequestBody String jsoncfn) throws Exception {
+        try {
+            service.callback(jsoncfn);
+        } catch (Exception e) {
+            return "-1";
+        }
+
+        return "0";
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception {
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 154 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/IbitController.java

@@ -0,0 +1,154 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.IbitCallbackEntity;
+import com.crm.pay.service.IbitService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.core.constant.FeignClientAnnotation;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawIbitEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawInfoEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+@RestController
+@RequestMapping("/ibit")
+public class IbitController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private IbitService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.IBIT_PAY_TYPE, activity, entity, request);
+
+        String serial = service.pay(financeDepositSaveEntity, infoEntity);
+        PayDto payDto = new PayDto(1, serial);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callback 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback", produces = "text/html")
+    public String callback(@RequestBody IbitCallbackEntity callback, HttpServletRequest request,
+                           HttpServletResponse response) throws Exception {
+
+        service.callback(callback);
+        return Constants.SUCCESS;
+    }
+
+    @RequestMapping(value = "/hc/callback", produces = "text/html")
+    public String hcCallback(@RequestBody IbitCallbackEntity callback, HttpServletRequest request,
+                             HttpServletResponse response) throws Exception {
+
+        service.callback(callback, PayConstants.IBIT_PAY_TYPE_HC);
+        return Constants.SUCCESS;
+    }
+
+
+    @PostMapping("/withdraw/info")
+    @FeignClientAnnotation
+    public BaseResultDto withdrawInfo(@RequestBody FinanceWithdrawInfoEntity entity) throws Exception {
+
+        return BaseResultDto.success(service.withdrawInfo(entity));
+    }
+
+    @PostMapping("/withdraw")
+    @FeignClientAnnotation
+    public BaseResultDto withdraw(@RequestBody FinanceWithdrawIbitEntity entity) throws Exception {
+        service.withdraw(entity);
+        return BaseResultDto.success();
+    }
+
+    @RequestMapping(value = "/withdraw/callback", produces = "text/html")
+    public String withdrawCallback(@RequestBody IbitCallbackEntity callbackEntity) throws Exception {
+        try {
+            return service.withdrawCallback(1, callbackEntity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+    }
+
+    @RequestMapping(value = "/agent/withdraw/callback", produces = "text/html")
+    public String agentWithdrawCallback(@RequestBody IbitCallbackEntity callbackEntity) throws Exception {
+        try {
+            return service.withdrawCallback(2, callbackEntity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 121 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/InoutworkController.java

@@ -0,0 +1,121 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.InoutworkCallbackEntity;
+import com.crm.pay.service.InoutworkService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @program: cwg-my-base
+ * @description:
+ * @author: houn
+ * @create: 2023-01-04 18:58
+ */
+@RestController
+@RequestMapping("/inoutwork")
+public class InoutworkController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private InoutworkService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity balanceSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.INOUTWORK_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(balanceSaveEntity);
+
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+
+    @RequestMapping(value = "/callback", produces = "text/html;charset=UTF-8")
+    public String callback(@RequestBody InoutworkCallbackEntity callbackEntity) throws Exception {
+        callbackEntity.setBill_status(PayConstants.INOUTWORK_SUCCESS_STATUS);
+
+        service.callback(callbackEntity);
+
+        return PayConstants.INOUTWORK_RESULT_SUCCESS;
+    }
+
+    @RequestMapping(value = "/cancel/callback", produces = "text/html;charset=UTF-8")
+    public String cancelCallback(@RequestBody InoutworkCallbackEntity callbackEntity) throws Exception {
+
+        service.callback(callbackEntity);
+
+        return PayConstants.INOUTWORK_RESULT_SUCCESS;
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @RequestMapping(value = "/pickup", produces = "text/html;charset=UTF-8")
+    public String pickup(HttpServletResponse response) throws Exception {
+        sendRedirect(response);
+        return PayConstants.INOUTWORK_RESULT_SUCCESS;
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 114 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/KonnexpyController.java

@@ -0,0 +1,114 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.KonnexoyCallbackEntity;
+import com.crm.pay.service.KonnexpyService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import com.crm.rely.backend.core.exception.ServiceException;
+import com.google.common.base.Strings;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2023-02-16 14:58
+ */
+@RestController
+@RequestMapping("/konnexpy")
+public class KonnexpyController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private KonnexpyService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return this.payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return this.payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        this.validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = this.getFinanceDepositSaveEntity(login, amount,
+                PayConstants.KONNEXPY_PAY,
+                PayConstants.KONNEXPY_PAY, activity, entity, request);
+
+        String url = this.service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public void callback(@RequestBody KonnexoyCallbackEntity callbackEntity, HttpServletResponse response) throws Exception {
+        if (callbackEntity == null || Strings.isNullOrEmpty(callbackEntity.getTicket())) {
+            throw ServiceException.exception(Constants.SYSTEM_ERROR);
+        }
+        this.service.callback(callbackEntity);
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        this.sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        this.sendRedirect(response);
+    }
+}

+ 162 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/KorapayCheckoutController.java

@@ -0,0 +1,162 @@
+package com.crm.pay.controller.pay;
+
+import com.alibaba.fastjson.JSON;
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.korapay.checkout.KoraCheckoutCallbackEntity;
+import com.crm.pay.service.KorapayCheckoutService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import lombok.extern.log4j.Log4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2023-05-12 14:58
+ */
+@Log4j
+@RestController
+@RequestMapping("/korapay/checkout")
+public class KorapayCheckoutController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private KorapayCheckoutService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                bankCode,
+                PayConstants.KORAPAY_CHECKOUT_PAY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param wehbookData 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+//    @RequestMapping("/callback")
+//    public void callback(@RequestBody String webhookData, HttpServletRequest request,
+//                         HttpServletResponse response) throws Exception {
+//
+//        String signature = request.getHeader("x-korapay-signature");
+//        if (Strings.isNullOrEmpty(webhookData) || Strings.isNullOrEmpty(signature)) {
+//            response.setStatus(400);
+//            throw new ServiceException(Constants.FAIL);
+//        }
+//        try {
+//
+//            KoraCheckoutCallbackEntity callbackEntity = JSON.parseObject(webhookData, KoraCheckoutCallbackEntity
+//            .class);
+//            if (callbackEntity == null || Strings.isNullOrEmpty(callbackEntity.getEvent()) || callbackEntity
+//            .getData() == null) {
+//                throw new ServiceException(Constants.FAIL);
+//            }
+//
+//            boolean flag = service.validate(webhookData, signature);
+//
+//            if (!flag) {
+//                throw new ServiceException(Constants.FAIL);
+//            }
+//
+//            service.callback(callbackEntity);
+//        } catch (ServiceException e) {
+//            log.error(e.getMessage());
+//            response.setStatus(400);
+//            throw new ServiceException(e.getMessage());
+//        }
+//    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @RequestMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @RequestMapping(value = "/pickup/{serial}")
+    public void pickupSerial(@PathVariable("serial") String serial, HttpServletResponse response) throws Exception,
+            PayValidatedException {
+        log.info("pickupSerial");
+        service.callbackSerial(serial);
+        sendRedirect(response);
+    }
+
+    @RequestMapping(value = "/callback/{serial}")
+    public void callbackSerial(@PathVariable("serial") String serial,
+                               @RequestBody KoraCheckoutCallbackEntity callbackEntity,
+                               HttpServletResponse response) throws Exception, PayValidatedException {
+        log.info("callbackSerial:" + JSON.toJSONString(callbackEntity));
+        service.callbackSerial(serial);
+        sendRedirect(response);
+    }
+
+    @RequestMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 201 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/KorapayController.java

@@ -0,0 +1,201 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.dto.korapay.KorapayDto;
+import com.crm.pay.entity.korapay.KorapayAvsEntity;
+import com.crm.pay.entity.korapay.KorapayOtpEntity;
+import com.crm.pay.entity.korapay.KorapayPhoneEntity;
+import com.crm.pay.entity.korapay.KorapayPinEntity;
+import com.crm.pay.service.KorapayService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import com.crm.rely.backend.core.exception.ServiceException;
+import com.google.common.base.Strings;
+import lombok.extern.log4j.Log4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2023-05-12 14:58
+ */
+@Log4j
+@RestController
+@RequestMapping("/korapay")
+public class KorapayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private KorapayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.KORAPAY_PAY,
+                PayConstants.KORAPAY_PAY, activity, entity, request);
+
+        KorapayDto requestPayDataDto = service.pay(financeDepositSaveEntity);
+        PayDto payDto = getPay(requestPayDataDto);
+
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param wehbookData 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public void callback(@RequestBody String wehbookData, HttpServletRequest request,
+                         HttpServletResponse response) throws Exception {
+
+        String signature = request.getHeader("x-korapay-signature");
+        if (Strings.isNullOrEmpty(wehbookData) || Strings.isNullOrEmpty(signature)) {
+            response.setStatus(400);
+            throw new ServiceException(Constants.FAIL);
+        }
+        try {
+            service.callback(wehbookData, signature);
+        } catch (ServiceException e) {
+            log.error(e.getMessage());
+            response.setStatus(400);
+            throw new ServiceException(e.getMessage());
+        }
+    }
+
+    @RequestMapping("/pin/{serial}")
+    public BaseResultDto pin(@PathVariable("serial") String serial, @RequestBody KorapayPinEntity entity) throws Exception {
+        entity.setSerial(serial);
+        KorapayDto requestPayDataDto = service.pin(entity);
+        PayDto payDto = getPay(requestPayDataDto);
+        return BaseResultDto.success(payDto);
+    }
+
+    @RequestMapping("/otp/{serial}")
+    public BaseResultDto otp(@PathVariable("serial") String serial, @RequestBody KorapayOtpEntity entity) throws Exception {
+        entity.setSerial(serial);
+        KorapayDto requestPayDataDto = service.otp(entity);
+        PayDto payDto = getPay(requestPayDataDto);
+        return BaseResultDto.success(payDto);
+    }
+
+    @RequestMapping("/avs/{serial}")
+    public BaseResultDto avs(@PathVariable("serial") String serial, @RequestBody KorapayAvsEntity entity) throws Exception {
+        entity.setSerial(serial);
+        KorapayDto requestPayDataDto = service.avs(entity);
+        PayDto payDto = getPay(requestPayDataDto);
+        return BaseResultDto.success(payDto);
+    }
+
+    @RequestMapping("/phone/{serial}")
+    public BaseResultDto phone(@PathVariable("serial") String serial, @RequestBody KorapayPhoneEntity entity) throws Exception {
+        entity.setSerial(serial);
+
+        KorapayDto requestPayDataDto = service.phone(entity);
+        PayDto payDto = getPay(requestPayDataDto);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/callback/{serial}")
+    public void callbackSerial(@PathVariable("serial") String serial,
+                               HttpServletResponse response) throws Exception, PayValidatedException {
+
+        service.callbackSerial(serial);
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+
+    private PayDto getPay(KorapayDto requestPayDataDto) {
+        PayDto payDto;
+        if (PayConstants.KORAPAY_PROCESSING_STATUS.equals(requestPayDataDto.getStatus())) {
+            switch (requestPayDataDto.getAuthModel()) {
+                case PayConstants.KORAPAY_PAY_PIN:
+                    payDto = new PayDto(3, "/korapay/pin/" + requestPayDataDto.getSerial());
+                    break;
+                case PayConstants.KORAPAY_PAY_OTP:
+                    payDto = new PayDto(4, "/korapay/otp/" + requestPayDataDto.getSerial());
+                    break;
+                case PayConstants.KORAPAY_PAY_3DS:
+                    payDto = new PayDto(5, requestPayDataDto.getRedirectUrl());
+                    break;
+                case PayConstants.KORAPAY_PAY_AVS:
+                    payDto = new PayDto(6, "/korapay/avs/" + requestPayDataDto.getSerial());
+                    break;
+                case PayConstants.KORAPAY_PAY_PHONE:
+                    payDto = new PayDto(7, "/korapay/phone/" + requestPayDataDto.getSerial());
+                    break;
+                default:
+                    payDto = new PayDto(8, "/korapay/pickup");
+                    break;
+            }
+        } else {
+            payDto = new PayDto(8, "/korapay/pickup");
+        }
+        return payDto;
+    }
+}

+ 113 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/KuboController.java

@@ -0,0 +1,113 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.kubo.KuboCallbackEntity;
+import com.crm.pay.service.KuboService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2022-10-13 14:58
+ */
+@RestController
+@RequestMapping("/kubo")
+public class KuboController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private KuboService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.KUBO_PAY_TYPE_KEY, activity, entity, request);
+
+        String serial = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(2, serial);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callback 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public void callback(KuboCallbackEntity callback, HttpServletResponse response) throws Exception {
+
+        service.callback(callback);
+        sendRedirect(response);
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 113 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/Long77PayController.java

@@ -0,0 +1,113 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.long77.Long77CallbackEntity;
+import com.crm.pay.service.Long77PayService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2022-08-17 14:58
+ */
+@RestController
+@RequestMapping("/long77")
+public class Long77PayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private Long77PayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.LONG77_VA_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback", produces = "text/html;charset=UTF-8")
+    public String callback(@RequestBody Long77CallbackEntity callbackEntity, HttpServletResponse response) throws Exception {
+
+        if (callbackEntity.getPayment() == null) {
+            return "fail";
+        }
+        service.callback(callbackEntity);
+        return PayConstants.LONG77_RESULT_SUCCESS_STATUS;
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 148 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/MtController.java

@@ -0,0 +1,148 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.MtCallbackEntity;
+import com.crm.pay.service.MtService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import com.google.common.base.Strings;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2020-05-07 14:58
+ */
+@RestController
+@RequestMapping("/mt")
+public class MtController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private MtService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/{payType}/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("payType") String payType,
+                             @PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        if (Strings.isNullOrEmpty(payType)) {
+            throw new PayValidatedException(Constants.SYSTEM_ERROR);
+        }
+
+        String payTypeCode = getPayTypeCode(payType);
+
+        return payCall(login, amount, payTypeCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/{payType}/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("payType") String payType,
+                             @PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        if (Strings.isNullOrEmpty(payType)) {
+            throw new PayValidatedException(Constants.SYSTEM_ERROR);
+        }
+
+        String payTypeCode = getPayTypeCode(payType);
+
+        return payCall(login, amount, payTypeCode, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login, BigDecimal amount, String payType, int activity,
+                                  FinanceDepositParameterEntity entity, CustomInfoEntity infoEntity,
+                                  HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                payType, activity, entity, request);
+
+        String serial = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(2, serial);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callback 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @PostMapping(value = "/{payType}/callback", produces = "text/html")
+    public String cnyCallback(@PathVariable("payType") String payType, MtCallbackEntity callback) throws Exception {
+        String payTypeCode = getPayTypeCode(payType);
+
+        if (callback != null) {
+            callback.setPayType(payTypeCode);
+        } else {
+            return PayConstants.MTPAY_FAIL_RESULT;
+        }
+        service.callback(callback);
+        return PayConstants.MTPAY_SUCCESS_RESULT;
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/{payType}/pickup")
+    public void cnyPickup(@PathVariable("payType") String payType, HttpServletResponse response) throws IOException,
+            PayValidatedException {
+        String payTypeCode = getPayTypeCode(payType);
+
+        response.sendRedirect("success.html");
+    }
+
+
+    /**
+     * 根据payType取得真实的通道code 用于后续处理
+     *
+     * @param payType
+     * @return
+     * @throws PayValidatedException
+     */
+    private String getPayTypeCode(String payType) throws PayValidatedException {
+        String payTypeCode;
+        if (payType.equals(PayConstants.MTPAY_CNY)) {
+            payTypeCode = PayConstants.PAY_MTPAY_CNY;
+        } else if (payType.equals(PayConstants.MTPAY_MYR)) {
+            payTypeCode = PayConstants.PAY_MTPAY_MYR;
+        } else if (payType.equals(PayConstants.MTPAY_IDR)) {
+            payTypeCode = PayConstants.PAY_MTPAY_IDR;
+        } else if (payType.equals(PayConstants.MTPAY_VND)) {
+            payTypeCode = PayConstants.PAY_MTPAY_VND;
+        } else {
+            throw new PayValidatedException(Constants.SYSTEM_ERROR);
+        }
+        return payTypeCode;
+    }
+}

+ 147 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/MtPayController.java

@@ -0,0 +1,147 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.MtPayCallbackEntity;
+import com.crm.pay.service.MtPayService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.core.constant.FeignClientAnnotation;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawInfoEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawMtpayEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+@RestController
+@RequestMapping("/mtpay")
+public class MtPayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private MtPayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                             CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                             CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.MT_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    @PostMapping("/withdraw/info")
+    @FeignClientAnnotation
+    public BaseResultDto withdrawInfo(@RequestBody FinanceWithdrawInfoEntity entity) throws Exception {
+
+        return BaseResultDto.success(service.withdrawInfo(entity));
+    }
+
+    @PostMapping("/withdraw")
+    @FeignClientAnnotation
+    public BaseResultDto withdraw(@RequestBody FinanceWithdrawMtpayEntity entity) throws Exception {
+        service.withdraw(entity);
+
+        return BaseResultDto.success();
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback", produces = "text/html")
+    public String callback(@RequestBody MtPayCallbackEntity callbackEntity, HttpServletResponse response) throws Exception {
+        try {
+            return service.callback(callbackEntity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+    }
+
+    @RequestMapping("/withdraw/callback")
+    public String withdrawCallback(@RequestBody MtPayCallbackEntity entity) throws Exception {
+        try {
+            return service.withdrawCallback(1, entity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+
+    }
+
+    @RequestMapping("/agent/withdraw/callback")
+    public String agentWithdrawCallback(@RequestBody MtPayCallbackEntity entity) throws Exception {
+        try {
+            return service.withdrawCallback(2, entity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 127 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/NaceController.java

@@ -0,0 +1,127 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.service.NaceService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import com.google.common.base.Strings;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2024-05-08 14:58
+ */
+@RestController
+@RequestMapping("/nace")
+public class NaceController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private NaceService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.ALPHA_PAY_TYPE_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public void callback(@RequestBody String body, HttpServletRequest request,
+                         HttpServletResponse response) throws Exception {
+
+        if (!request.getHeaders("signature").hasMoreElements()) {
+            response.setStatus(400);
+            return;
+        }
+        String sign = request.getHeaders("signature").nextElement();
+
+        if (Strings.isNullOrEmpty(sign)) {
+            response.setStatus(400);
+            return;
+        }
+        try {
+            service.callback(body, sign);
+        } catch (Exception e) {
+            response.setStatus(400);
+        }
+
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 298 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/NePayController.java

@@ -0,0 +1,298 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.NePayCallbackEntity;
+import com.crm.pay.service.NePayService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.core.constant.FeignClientAnnotation;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawInfoEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawNepayEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+@RestController
+@RequestMapping("/nepay")
+public class NePayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private NePayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                             CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                             CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.NE_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback", produces = "text/html")
+    public String callback(@RequestBody NePayCallbackEntity callbackEntity, HttpServletResponse response) throws Exception {
+        try {
+            return service.callback(callbackEntity, PayConstants.NE_PAY_KEY);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/hc/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto payHcCall(@PathVariable("login") Long login,
+                                   @PathVariable("amount") BigDecimal amount,
+                                   @PathVariable("bankCode") String bankCode,
+                                   @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                                   CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payHcCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/hc/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto payHcCall(@PathVariable("login") Long login,
+                                   @PathVariable("amount") BigDecimal amount,
+                                   @PathVariable("bankCode") String bankCode,
+                                   @PathVariable("activity") int activity,
+                                   @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                                   CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payHcCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payHcCall(Long login,
+                                    BigDecimal amount,
+                                    String bankCode,
+                                    int activity,
+                                    FinanceDepositParameterEntity entity,
+                                    CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.NE_PAY_KEY_HC, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/hc/callback", produces = "text/html")
+    public String hcCallback(@RequestBody NePayCallbackEntity callbackEntity, HttpServletResponse response) throws Exception {
+        try {
+            return service.callback(callbackEntity, PayConstants.NE_PAY_KEY_HC);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+    }
+
+    @PostMapping("/withdraw/info")
+    @FeignClientAnnotation
+    public BaseResultDto withdrawInfo(@RequestBody FinanceWithdrawInfoEntity entity) throws Exception {
+
+        return BaseResultDto.success(service.withdrawInfo(entity));
+    }
+
+    @PostMapping("/withdraw")
+    @FeignClientAnnotation
+    public BaseResultDto withdraw(@RequestBody FinanceWithdrawNepayEntity entity) throws Exception {
+        service.withdraw(entity);
+
+        return BaseResultDto.success();
+    }
+
+
+    @RequestMapping("/withdraw/callback")
+    public String withdrawCallback(NePayCallbackEntity entity) throws Exception {
+        try {
+            return service.withdrawCallback(1, entity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+    }
+
+    @RequestMapping("/agent/withdraw/callback")
+    public String agentWithdrawCallback(@RequestBody NePayCallbackEntity entity) throws Exception {
+        try {
+            return service.withdrawCallback(2, entity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+    }
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/xj/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto payXJCall(@PathVariable("login") Long login,
+                                   @PathVariable("amount") BigDecimal amount,
+                                   @PathVariable("bankCode") String bankCode,
+                                   @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                                   CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payXJCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/xj/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto payXJCall(@PathVariable("login") Long login,
+                                   @PathVariable("amount") BigDecimal amount,
+                                   @PathVariable("bankCode") String bankCode,
+                                   @PathVariable("activity") int activity,
+                                   @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                                   CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payXJCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payXJCall(Long login,
+                                    BigDecimal amount,
+                                    String bankCode,
+                                    int activity,
+                                    FinanceDepositParameterEntity entity,
+                                    CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.NE_PAY_KEY_XJ, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/xj/callback", produces = "text/html")
+    public String XJCallback(@RequestBody NePayCallbackEntity callbackEntity, HttpServletResponse response) throws Exception {
+        try {
+            return service.callback(callbackEntity, PayConstants.NE_PAY_KEY_XJ);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/xj/pickup")
+    public void XJPickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/hc/pickup")
+    public void hcPickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 117 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/NetellerController.java

@@ -0,0 +1,117 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.neteller.NetellerCallbackEntity;
+import com.crm.pay.service.NetellerService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import com.crm.rely.backend.util.GetIpAndMac;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2020-05-07 14:58
+ */
+@Slf4j
+@RestController
+@RequestMapping("/neteller")
+public class NetellerController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private NetellerService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.NETELLER_PAY_TYPE,
+                PayConstants.NETELLER_PAY_TYPE, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity, infoEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callback 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public void callback(@RequestBody NetellerCallbackEntity callback, HttpServletResponse response) throws Exception {
+
+        String ip = GetIpAndMac.getIp();
+        callback.setCallbackIp(ip);
+        service.callback(callback);
+
+        sendRedirect(response);
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 126 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/NganluongController.java

@@ -0,0 +1,126 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.NganluongCallbackEntity;
+import com.crm.pay.service.NganluongService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @program:
+ * @description:
+ * @author: houn
+ * @create: 2020-12-05 18:58
+ */
+@RestController
+@RequestMapping("/nganluong")
+public class NganluongController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private NganluongService service;
+
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.NGANLUONG_PAY_TYPE_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param request 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @PostMapping(value = "/callback", produces = "text/html")
+    public String callback(HttpServletRequest request, HttpServletResponse response) throws Exception {
+
+        NganluongCallbackEntity safeCallbackEntity = getCallback(request);
+
+        service.callback(safeCallbackEntity);
+
+        sendRedirect(response);
+
+        return PayConstants.NGANLUONG_SUCCESS_RESULT;
+    }
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception {
+        sendRedirect(response);
+    }
+
+    /**
+     * 在form-data中获取回调数据
+     *
+     * @param request 用于获取form-data中的数据
+     * @return 返回回调数据构建的实体
+     */
+    protected NganluongCallbackEntity getCallback(HttpServletRequest request) {
+        String errorCode = request.getParameter("error_code");
+        String orderCode = request.getParameter("order_code");
+        String orderId = request.getParameter("order_id");
+        String token = request.getParameter("token");
+        NganluongCallbackEntity nganluongCallbackEntity = new NganluongCallbackEntity();
+        nganluongCallbackEntity.setErrorCode(errorCode);
+        nganluongCallbackEntity.setOrderCode(orderCode);
+        nganluongCallbackEntity.setOrderId(orderId);
+        nganluongCallbackEntity.setToken(token);
+        return nganluongCallbackEntity;
+    }
+}

+ 144 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/OfaPayController.java

@@ -0,0 +1,144 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.ofa.OfaPayCallbackEntity;
+import com.crm.pay.entity.callback.ofa.OfaPayoutCallbackEntity;
+import com.crm.pay.service.OfaPayService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.core.constant.FeignClientAnnotation;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawInfoEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawOfaEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2024-10-10 14:58
+ */
+@RestController
+@RequestMapping("/ofa")
+public class OfaPayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private OfaPayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.OFA_PAY_TYPE, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback", produces = "text/html;charset=UTF-8")
+    public String callback(@RequestBody OfaPayCallbackEntity callbackEntity, HttpServletResponse response) throws Exception {
+
+        service.callback(callbackEntity);
+        return Constants.SUCCESS;
+    }
+
+    @PostMapping("/withdraw/info")
+    @FeignClientAnnotation
+    public BaseResultDto withdrawInfo(@RequestBody FinanceWithdrawInfoEntity entity) throws Exception {
+
+        return BaseResultDto.success(service.withdrawInfo(entity));
+    }
+
+    @PostMapping("/withdraw")
+    @FeignClientAnnotation
+    public BaseResultDto withdraw(@RequestBody FinanceWithdrawOfaEntity entity) throws Exception {
+        service.withdraw(entity);
+
+        return BaseResultDto.success();
+    }
+
+    @RequestMapping("/withdraw/callback")
+    public BaseResultDto withdrawCallback(@RequestBody OfaPayoutCallbackEntity entity) throws Exception {
+        service.withdrawCallback(1, entity);
+
+        return BaseResultDto.success();
+    }
+
+    @RequestMapping("/agent/withdraw/callback")
+    public BaseResultDto agentWithdrawCallback(@RequestBody OfaPayoutCallbackEntity entity) throws Exception {
+        service.withdrawCallback(2, entity);
+
+        return BaseResultDto.success();
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 114 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/Otc365CnController.java

@@ -0,0 +1,114 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.dto.callback.otc365.cn.Otc365CnCallbackResponseDto;
+import com.crm.pay.entity.callback.Otc365CnCallbackEntity;
+import com.crm.pay.service.Otc365CnService;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2021-01-21 14:58
+ */
+@RestController
+@RequestMapping("/otc/365/cn")
+public class Otc365CnController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private Otc365CnService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.OTC_365_CN_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity, infoEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public Otc365CnCallbackResponseDto callback(@RequestBody Otc365CnCallbackEntity callbackEntity,
+                                                HttpServletResponse response) throws Exception {
+
+        return service.callback(callbackEntity);
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 114 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/Otc365CnV2Controller.java

@@ -0,0 +1,114 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.dto.callback.otc365.cn.Otc365CnCallbackResponseDto;
+import com.crm.pay.service.Otc365CnV2Service;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.Map;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2021-11-14 14:58
+ */
+@RestController
+@RequestMapping("/otc/365/cn/v2")
+public class Otc365CnV2Controller extends BasePayCloseFunctionController {
+
+    @Autowired
+    private Otc365CnV2Service service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{bankCode}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("bankCode") String bankCode,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, bankCode, activity, entity, infoEntity, request);
+    }
+
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  String bankCode,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount, bankCode,
+                PayConstants.OTC_365_CN_V2_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity, infoEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public Otc365CnCallbackResponseDto callback(@RequestBody Map<String, String> callbackEntity,
+                                                HttpServletResponse response) throws Exception {
+
+        return service.callback(callbackEntity);
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 186 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/OzowController.java

@@ -0,0 +1,186 @@
+package com.crm.pay.controller.pay;
+
+import com.alibaba.fastjson.JSON;
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.dto.ozow.OowWebhookDto;
+import com.crm.pay.entity.callback.ozow.OzowCallbackEntity;
+import com.crm.pay.entity.callback.ozow.OzowPayoutCallbackEntity;
+import com.crm.pay.entity.callback.ozow.OzowPayoutWebhookEntity;
+import com.crm.pay.service.OzowService;
+import com.crm.rely.backend.core.constant.FeignClientAnnotation;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawInfoEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawOzowEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import com.google.common.base.Strings;
+import lombok.extern.log4j.Log4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2024-10-31 14:58
+ */
+@Log4j
+@RestController
+@RequestMapping("/ozow")
+public class OzowController extends BasePayCloseFunctionController {
+
+    private final static String ACCESS_TOKEN = "39565f54200b66fa6158b4113f7a14a1";
+    @Autowired
+    private OzowService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.OZOW_PAY_TYPE, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    @RequestMapping("/withdraw/info")
+    @FeignClientAnnotation
+    public BaseResultDto withdrawInfo(@RequestBody FinanceWithdrawInfoEntity entity) throws Exception {
+        return BaseResultDto.success(service.withdrawInfo(entity));
+    }
+
+    @RequestMapping("/withdraw")
+    @FeignClientAnnotation
+    public BaseResultDto withdraw(@RequestBody FinanceWithdrawOzowEntity entity) throws Exception {
+
+        service.withdraw(entity);
+        return BaseResultDto.success();
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping("/callback")
+    public void callback(OzowCallbackEntity callbackEntity, HttpServletResponse response) throws Exception {
+
+        service.callback(callbackEntity);
+    }
+
+    @PostMapping("/payout/callback")
+    public void withdrawCallback(@RequestBody String callbackString) throws Exception {
+        OzowPayoutCallbackEntity callbackEntity = JSON.parseObject(callbackString, OzowPayoutCallbackEntity.class);
+        log.info("Ozow withdrawCallback:" + callbackString);
+
+        if (callbackEntity == null || Strings.isNullOrEmpty(callbackEntity.getPayoutId())) {
+            return;
+        }
+
+        service.withdrawCallback(1, callbackEntity);
+    }
+
+    @PostMapping("/agent/payout/callback")
+    public void agentWithdrawCallback(@RequestBody String callbackString) throws Exception {
+        OzowPayoutCallbackEntity callbackEntity = JSON.parseObject(callbackString, OzowPayoutCallbackEntity.class);
+        log.info("Ozow withdrawCallback:" + callbackString);
+
+        if (callbackEntity == null || Strings.isNullOrEmpty(callbackEntity.getPayoutId())) {
+            return;
+        }
+        service.withdrawCallback(2, callbackEntity);
+    }
+
+    @RequestMapping("/webhook")
+    public OowWebhookDto webhook(@RequestBody OzowPayoutWebhookEntity callbackEntity, HttpServletRequest request) throws Exception {
+        String accessToken = request.getHeader("AccessToken");
+
+        log.info("Ozow accessToken:" + accessToken);
+        log.info("Ozow accessToken:" + ACCESS_TOKEN.equals(accessToken));
+/**
+ * {
+ *   "PayoutId": "00000000-0000-0000-0000-000000000000",
+ *   "IsVerified": true,
+ *   "AccountNumberDecryptionKey": "C@OQN8oW9I8DSuKS$jfd",
+ *   "Reason": ""
+ * }
+ */
+        String aesKey = service.webhook(callbackEntity);
+
+        OowWebhookDto dto = new OowWebhookDto();
+        if (Strings.isNullOrEmpty(aesKey)) {
+            dto.setVerified(false);
+            dto.setAccountNumberDecryptionKey(null);
+        } else {
+            dto.setVerified(true);
+            dto.setAccountNumberDecryptionKey(aesKey);
+        }
+        dto.setReason(null);
+        dto.setPayoutId(callbackEntity.getPayoutId());
+
+        return dto;
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 166 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/PartnerPayController.java

@@ -0,0 +1,166 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.PartnerPayCallbackEntity;
+import com.crm.pay.service.PartnerPayService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.core.constant.FeignClientAnnotation;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawInfoEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawPartnerEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+@RestController
+@RequestMapping("/partner")
+public class PartnerPayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private PartnerPayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                             CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                             CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.PARTNER_PAY_KEY,
+                PayConstants.PARTNER_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    @PostMapping("/withdraw/info")
+    @FeignClientAnnotation
+    public BaseResultDto withdrawInfo(@RequestBody FinanceWithdrawInfoEntity entity) throws Exception {
+
+        return BaseResultDto.success(service.withdrawInfo(entity));
+    }
+
+    @PostMapping("/withdraw")
+    @FeignClientAnnotation
+    public BaseResultDto withdraw(@RequestBody FinanceWithdrawPartnerEntity entity) throws Exception {
+        service.withdraw(entity);
+
+        return BaseResultDto.success();
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback", produces = "text/html")
+    public String callback(PartnerPayCallbackEntity callbackEntity, HttpServletResponse response) throws Exception {
+        try {
+            return service.callback(callbackEntity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+    }
+
+    @RequestMapping("/withdraw/callback")
+    public String withdrawCallback(@RequestBody PartnerPayCallbackEntity entity) throws Exception {
+        try {
+            return service.withdrawCallback(1, entity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+
+    }
+
+    @RequestMapping("/agent/withdraw/callback")
+    public String agentWithdrawCallback(PartnerPayCallbackEntity entity) throws Exception {
+        try {
+            return service.withdrawCallback(2, entity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+
+    }
+
+    @RequestMapping("/withdraw/callback/reverse")
+    public String withdrawReverseCallback(PartnerPayCallbackEntity entity) throws Exception {
+        try {
+            return service.withdrawCallback(1, entity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+
+    }
+
+    @RequestMapping("/agent/withdraw/callback/reverse")
+    public String agentWithdrawReverseCallback(@RequestBody PartnerPayCallbackEntity entity) throws Exception {
+        try {
+            return service.withdrawCallback(2, entity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+}

+ 167 - 0
crm-pay/src/main/java/com/crm/pay/controller/pay/PartnerTwPayController.java

@@ -0,0 +1,167 @@
+package com.crm.pay.controller.pay;
+
+import com.crm.pay.controller.base.BasePayCloseFunctionController;
+import com.crm.pay.entity.callback.PartnerTwPayCallbackEntity;
+import com.crm.pay.service.PartnerTwPayService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.core.constant.FeignClientAnnotation;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.pay.dto.PayDto;
+import com.crm.rely.backend.model.entity.custom.info.CustomInfoEntity;
+import com.crm.rely.backend.model.entity.finance.deposit.FinanceDepositAddEntity;
+import com.crm.pay.entity.FinanceDepositParameterEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawInfoEntity;
+import com.crm.pay.entity.finance.withdraw.automatic.FinanceWithdrawPartnerTwEntity;
+import com.crm.rely.backend.core.exception.PayValidatedException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+
+@RestController
+@RequestMapping("/partner/tw")
+public class PartnerTwPayController extends BasePayCloseFunctionController {
+
+    @Autowired
+    private PartnerTwPayService service;
+
+    /**
+     * 支付
+     *
+     * @param login  入金账号
+     * @param amount 入金金额
+     * @return 错误信息
+     * @throws Exception
+     */
+    @RequestMapping("/pay/{login}/{amount}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                             CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, 0, entity, infoEntity, request);
+    }
+
+    @RequestMapping("/pay/{login}/{amount}/{activity}")
+    public BaseResultDto pay(@PathVariable("login") Long login,
+                             @PathVariable("amount") BigDecimal amount,
+                             @PathVariable("activity") int activity,
+                             @RequestBody FinanceDepositParameterEntity entity, HttpServletRequest request,
+                             CustomInfoEntity infoEntity) throws Exception {
+
+
+        return payCall(login, amount, activity, entity, infoEntity, request);
+    }
+
+    private BaseResultDto payCall(Long login,
+                                  BigDecimal amount,
+                                  int activity,
+                                  FinanceDepositParameterEntity entity,
+                             CustomInfoEntity infoEntity, HttpServletRequest request) throws Exception {
+        validated(login, amount);
+
+        FinanceDepositAddEntity financeDepositSaveEntity = getFinanceDepositSaveEntity(login, amount,
+                PayConstants.PARTNER_TW_PAY_KEY,
+                PayConstants.PARTNER_TW_PAY_KEY, activity, entity, request);
+
+        String url = service.pay(financeDepositSaveEntity);
+        PayDto payDto = new PayDto(1, url);
+        return BaseResultDto.success(payDto);
+    }
+
+    @PostMapping("/withdraw/info")
+    @FeignClientAnnotation
+    public BaseResultDto withdrawInfo(@RequestBody FinanceWithdrawInfoEntity entity) throws Exception {
+
+        return BaseResultDto.success(service.withdrawInfo(entity));
+    }
+
+    @PostMapping("/withdraw")
+    @FeignClientAnnotation
+    public BaseResultDto withdraw(@RequestBody FinanceWithdrawPartnerTwEntity entity) throws Exception {
+        service.withdraw(entity);
+
+        return BaseResultDto.success();
+    }
+
+    /**
+     * 异步回调
+     *
+     * @param callbackEntity 用于获取回调数据
+     * @return 返回成功给第三方系统
+     * @throws Exception
+     */
+    @RequestMapping(value = "/callback", produces = "text/html")
+    public String callback(PartnerTwPayCallbackEntity callbackEntity, HttpServletResponse response) throws Exception {
+        try {
+            return service.callback(callbackEntity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+    }
+
+    @RequestMapping("/withdraw/callback")
+    public String withdrawCallback(@RequestBody PartnerTwPayCallbackEntity entity) throws Exception {
+        try {
+            return service.withdrawCallback(1, entity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+
+    }
+
+    @RequestMapping("/agent/withdraw/callback")
+    public String agentWithdrawCallback(PartnerTwPayCallbackEntity entity) throws Exception {
+        try {
+            return service.withdrawCallback(2, entity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+
+    }
+
+    @RequestMapping("/withdraw/callback/reverse")
+    public String withdrawReverseCallback(PartnerTwPayCallbackEntity entity) throws Exception {
+        try {
+            return service.withdrawCallback(1, entity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+
+    }
+
+    @RequestMapping("/agent/withdraw/callback/reverse")
+    public String agentWithdrawReverseCallback(@RequestBody PartnerTwPayCallbackEntity entity) throws Exception {
+        try {
+            return service.withdrawCallback(2, entity);
+        } catch (Exception e) {
+            return Constants.FAIL;
+        }
+
+    }
+
+
+    /**
+     * 同步页面 成功
+     *
+     * @param response 用于重定向页面
+     * @throws IOException
+     */
+    @GetMapping(value = "/pickup")
+    public void pickup(HttpServletResponse response) throws Exception, PayValidatedException {
+
+        sendRedirect(response);
+    }
+
+    @GetMapping(value = "/error")
+    public void error(HttpServletResponse response) throws Exception {
+
+        sendRedirect(response);
+    }
+
+}

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio