diff --git a/db/1000pjcloudx_thirdparty.sql b/db/1000pjcloudx_thirdparty.sql
index 3d7dc89d0..a22f984e7 100644
--- a/db/1000pjcloudx_thirdparty.sql
+++ b/db/1000pjcloudx_thirdparty.sql
@@ -27,4 +27,27 @@ CREATE TABLE `third_zy_log`
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci
- ROW_FORMAT = DYNAMIC COMMENT ='正元日志表';
\ No newline at end of file
+ ROW_FORMAT = DYNAMIC COMMENT ='正元日志表';
+
+
+-- ----------------------------
+-- Table structure for third_zy_id_dict
+-- ----------------------------
+DROP TABLE IF EXISTS `third_zy_id_dict`;
+CREATE TABLE `third_zy_id_dict`
+(
+ `id` bigint NOT NULL COMMENT '主键',
+ `self_id` varchar(64) NOT NULL COMMENT '自己这边的id映射',
+ `zy_id` varchar(64) NOT NULL COMMENT '正元id映射',
+ `biz_type` tinytext(16) NOT NULL COMMENT '同步类型',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+ `create_by` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
+ `update_by` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人',
+ `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '删除时间',
+ `tenant_id` bigint(20) DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4
+ COLLATE = utf8mb4_general_ci
+ ROW_FORMAT = DYNAMIC COMMENT ='正元字典id对应 id + bizType 唯一';
\ No newline at end of file
diff --git a/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/CacheConstants.java b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/CacheConstants.java
index 231c3263a..86e4c66bb 100644
--- a/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/CacheConstants.java
+++ b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/CacheConstants.java
@@ -138,6 +138,8 @@ public interface CacheConstants {
String THIRDPARTY_ZY_MER_TOKEN = "thirdparty:zy:mer_token";
+ String THIRDPARTY_ZY_REGION_TOKEN = "thirdparty:zy:region";
+
String THIRDPARTY_ZY_SELF_TOKEN = "thirdparty:zy:self_token:";
/* ************************************* end 第三方对接相关 end ************************************* */
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/pom.xml b/pjcloud-hardware/pjcloud-hardware-biz/pom.xml
index d4793a906..737070b51 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/pom.xml
+++ b/pjcloud-hardware/pjcloud-hardware-biz/pom.xml
@@ -138,6 +138,12 @@
5.7.0
compile
+
+ com.bsd
+ pjcloud-wallet-biz
+ 5.7.0
+ compile
+
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java
index 3a722a141..a3f511ccd 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java
@@ -49,15 +49,6 @@ public class HardOrderTotalController {
/* ************************************* start 远程调用 start ************************************* */
- @PostMapping("/zy-card-sync")
- @Operation(summary = "正元本地一卡通交易数据同步")
- public R zyCardSync() {
- HardOrderDto dto = new HardOrderDto();
- dto.setOrderStatusCodes(HardOrderStatusEnum.getPayPrice());
- dto.setOrderTypeCodes(HardOrderTypeEnum.getExternalCodes());
- return R.ok(HardOrderTotalService.totalYearMonthDay(dto));
- }
-
/* ************************************* end 远程调用 end ************************************* */
@PostMapping("/page-list-sb")
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/third/HardThirdZyController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/third/HardThirdZyController.java
new file mode 100644
index 000000000..652c0849b
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/third/HardThirdZyController.java
@@ -0,0 +1,31 @@
+package com.bsd.pjcloud.hard.controller.third;
+
+import com.bsd.pjcloud.common.core.util.R;
+import com.bsd.pjcloud.hard.service.HardThirdZyService;
+import com.bsd.pjcloud.wallet.api.vo.MchManageVo;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.HttpHeaders;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/hard-third-zy")
+@Tag(description = "hard-third-zy", name = "正元同步")
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class HardThirdZyController {
+
+ private final HardThirdZyService hardThirdZyService;
+
+ @GetMapping("/sync-native-card-trade")
+ @Operation(summary = "交易数据同步")
+ public R syncNativeCardTrade() {
+ hardThirdZyService.syncNativeCardTradeInfo();
+ return R.ok();
+ }
+
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdZyService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdZyService.java
new file mode 100644
index 000000000..b6b7c9b36
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdZyService.java
@@ -0,0 +1,10 @@
+package com.bsd.pjcloud.hard.service;
+
+public interface HardThirdZyService {
+
+ /**
+ * 交易数据同步
+ */
+ void syncNativeCardTradeInfo();
+
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdZyServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdZyServiceImpl.java
new file mode 100644
index 000000000..acdba707c
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/third/HardThirdZyServiceImpl.java
@@ -0,0 +1,69 @@
+package com.bsd.pjcloud.hard.service.impl.third;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum;
+import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum;
+import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto;
+import com.bsd.pjcloud.hard.api.vo.order.HardZyCardSyncVo;
+import com.bsd.pjcloud.hard.service.HardOrderTotalService;
+import com.bsd.pjcloud.hard.service.HardThirdZyService;
+import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdZyService;
+import com.bsd.pjcloud.thirdparty.dto.zy.foreign.ZyForeignSyncNativeCardTradeInfoDto;
+import com.bsd.pjcloud.thirdparty.vo.zy.foreign.ZyForeignSyncNativeCardTradeInfoVo;
+import com.bsd.pjcloud.wallet.service.MchThirdZyService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
+@Validated
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class HardThirdZyServiceImpl implements HardThirdZyService {
+
+ private static final String TAG = "硬件模块同步到正元信息";
+
+ private final RemoterThirdZyService thirdZyService;
+
+ private final HardOrderTotalService hardOrderTotalService;
+
+ /**
+ * 交易数据同步
+ */
+ @Override
+ public void syncNativeCardTradeInfo() {
+ // 查询统计数据
+ HardOrderDto dto = new HardOrderDto();
+ dto.setOrderStatusCodes(HardOrderStatusEnum.getPayPrice());
+ dto.setOrderTypeCodes(HardOrderTypeEnum.getExternalCodes());
+ HardZyCardSyncVo total = hardOrderTotalService.totalYearMonthDay(dto);
+ if (ObjectUtil.isEmpty(total)) {
+ log.info("|{}|syncNativeCardTradeInfo交易数据同步到正元全部统计信息错误total为空", TAG);
+ return;
+ }
+ ZyForeignSyncNativeCardTradeInfoDto sync = new ZyForeignSyncNativeCardTradeInfoDto();
+ sync.setTotalMoney(parseMoney(total.getTotalMoney()));
+ sync.setTotalNum(total.getTotalNum());
+ sync.setTotalMoneyYear(parseMoney(total.getTotalMoneyYear()));
+ sync.setTotalNumYear(total.getTotalNumYear());
+ sync.setTotalMoneyMonth(parseMoney(total.getTotalMoneyMonth()));
+ sync.setTotalNumMonth(total.getTotalNumMonth());
+ sync.setTotalMoneyDay(parseMoney(total.getTotalMoneyDay()));
+ sync.setTotalNumDay(total.getTotalNumDay());
+ try {
+ ZyForeignSyncNativeCardTradeInfoVo res = thirdZyService.syncNativeCardTradeInfoApi(sync).getData();
+ if (ObjectUtil.isEmpty(res)) return;
+ } catch (Exception e) {
+ log.error("|{}syncNativeCardTradeInfo调用第三方接口错误|", TAG);
+ }
+ }
+
+ private BigDecimal parseMoney(Long money) {
+ if (ObjectUtil.isEmpty(money)) return BigDecimal.ZERO;
+ return BigDecimal.valueOf(money).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP);
+ }
+}
diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/api/feign/RemoterThirdZyService.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/api/feign/RemoterThirdZyService.java
index 0c42652be..15f2b35e3 100644
--- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/api/feign/RemoterThirdZyService.java
+++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/api/feign/RemoterThirdZyService.java
@@ -21,6 +21,7 @@ import com.bsd.pjcloud.thirdparty.vo.zy.stride.ZyStrideConsumptionVo;
import com.bsd.pjcloud.thirdparty.vo.zy.stride.ZyStrideCorrectVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@@ -34,7 +35,7 @@ public interface RemoterThirdZyService {
* 本地一卡通交易数据同步
*/
@NoToken
- @GetMapping("/third-zy-foreign/sync-native-card")
+ @PostMapping("/third-zy-foreign/sync-native-card")
R syncNativeCardTradeInfoApi(@RequestBody ZyForeignSyncNativeCardTradeInfoDto dto);
/* ************************************* end 正元本地一卡通交易数据同步 end ************************************* */
@@ -46,28 +47,28 @@ public interface RemoterThirdZyService {
* 商户信息同步
*/
@NoToken
- @GetMapping("/third-zy-mer/sync-dealer-info")
+ @PostMapping("/third-zy-mer/sync-dealer-info")
R syncDealerInfo(@RequestBody List dto);
/**
* 记账单位同步
*/
@NoToken
- @GetMapping("/third-zy-mer/sync-enterprise-info")
+ @PostMapping("/third-zy-mer/sync-enterprise-info")
R syncEnterpriseInfoApi(@RequestBody List dto);
/**
* 账户信息同步
*/
@NoToken
- @GetMapping("/third-zy-mer/sync-account-info")
+ @PostMapping("/third-zy-mer/sync-account-info")
R syncAccountInfoApi(@RequestBody List dto);
/**
* 身份信息同步
*/
@NoToken
- @GetMapping("/third-zy-mer/sync-acc-class-info")
+ @PostMapping("/third-zy-mer/sync-acc-class-info")
R syncAccClassInfoApi(@RequestBody List dto);
/* ************************************* end 数据同步 end ************************************* */
@@ -78,21 +79,21 @@ public interface RemoterThirdZyService {
* 统一身份验证功能
*/
@NoToken
- @GetMapping("/third-zy-stride/authentication")
+ @PostMapping("/third-zy-stride/authentication")
R authenticationApi(@RequestBody ZyStrideAuthenticationDto dto);
/**
* 智慧园区通刷平台提供消费接口
*/
@NoToken
- @GetMapping("/third-zy-stride/consumption")
+ @PostMapping("/third-zy-stride/consumption")
R consumptionApi(@RequestBody ZyStrideConsumptionDto dto);
/**
* 智慧园区通刷平台提供冲正接口
*/
@NoToken
- @GetMapping("/third-zy-stride/correct")
+ @PostMapping("/third-zy-stride/correct")
R correctApi(@RequestBody ZyStrideCorrectDto dto);
/* ************************************* end 数据同步 end ************************************* */
diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/zy/foreign/ZyForeignSyncNativeCardTradeInfoDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/zy/foreign/ZyForeignSyncNativeCardTradeInfoDto.java
index 28ffaf720..f1507aa8c 100644
--- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/zy/foreign/ZyForeignSyncNativeCardTradeInfoDto.java
+++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/zy/foreign/ZyForeignSyncNativeCardTradeInfoDto.java
@@ -24,17 +24,17 @@ public class ZyForeignSyncNativeCardTradeInfoDto {
/**
* 就餐总人数,从推广公务餐之日起,即总人数
*/
- private Long totalNum;
+ private Long totalNum = 0L;
/**
- * 就餐总金额,从推广公务餐之日起,即总金额
+ * 就餐总金额,从推广公务餐之日起,即总金额
*/
private BigDecimal totalMoney;
/**
* 当年就餐总人数,从当年1月1日开始
*/
- private Long totalNumYear;
+ private Long totalNumYear = 0L;
/**
* 当年就餐总金额,从当年1月1日开始
@@ -44,7 +44,7 @@ public class ZyForeignSyncNativeCardTradeInfoDto {
/**
* 当月就餐总人数,从当月1日开始
*/
- private Long totalNumMonth;
+ private Long totalNumMonth = 0L;
/**
* 当月就餐总金额,从当月1日开始
@@ -54,7 +54,7 @@ public class ZyForeignSyncNativeCardTradeInfoDto {
/**
* 当日就餐总人数
*/
- private Long totalNumDay;
+ private Long totalNumDay = 0L;
/**
* 当日就餐总金额
diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/zy/ThirdZyIdDictEntity.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/zy/ThirdZyIdDictEntity.java
new file mode 100644
index 000000000..01b020c23
--- /dev/null
+++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/entity/zy/ThirdZyIdDictEntity.java
@@ -0,0 +1,92 @@
+package com.bsd.pjcloud.thirdparty.entity.zy;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.bsd.pjcloud.common.core.util.TenantTable;
+
+import java.time.LocalDateTime;
+
+/**
+ * 正元字典id对应 id + bizType 唯一
+ *
+ * @author third
+ * @date 2025-03-04 19:11:02
+ */
+@Data
+@TenantTable
+@TableName("third_zy_id_dict")
+@EqualsAndHashCode(callSuper = true)
+@Schema(description = "正元字典id对应 id + bizType 唯一")
+public class ThirdZyIdDictEntity extends Model {
+
+
+ /**
+ * 主键
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ @Schema(description = "主键")
+ private Long id;
+
+ /**
+ * 自己这边的id映射
+ */
+ @Schema(description = "自己这边的id映射")
+ private String selfId;
+
+ /**
+ * 正元id映射
+ */
+ @Schema(description = "正元id映射")
+ private String zyId;
+
+ /**
+ * 同步类型
+ */
+ @Schema(description = "同步类型")
+ private String bizType;
+
+ /**
+ * 创建人
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建人")
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ /**
+ * 更新人
+ */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ @Schema(description = "更新人")
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+
+ /**
+ * 删除时间
+ */
+ @TableLogic
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "删除时间")
+ private String delFlag;
+
+ /**
+ * tenantId
+ */
+ @Schema(description = "tenantId")
+ private Long tenantId;
+}
\ No newline at end of file
diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/zy/ThirdZyMerController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/zy/ThirdZyMerController.java
index b6a662772..325c64582 100644
--- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/zy/ThirdZyMerController.java
+++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/zy/ThirdZyMerController.java
@@ -18,10 +18,7 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpHeaders;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -38,28 +35,28 @@ public class ThirdZyMerController {
@Inner
@Operation(summary = "商户信息同步")
- @GetMapping("/sync-dealer-info")
+ @PostMapping("/sync-dealer-info")
public R syncDealerInfo(@RequestBody List dto) {
return R.ok(thirdZyMerService.syncDealerInfoApi(dto));
}
@Inner
@Operation(summary = "记账单位同步")
- @GetMapping("/sync-enterprise-info")
+ @PostMapping("/sync-enterprise-info")
public R syncEnterpriseInfoApi(@RequestBody List dto) {
return R.ok(thirdZyMerService.syncEnterpriseInfoApi(dto));
}
@Inner
@Operation(summary = "账户信息同步")
- @GetMapping("/sync-account-info")
+ @PostMapping("/sync-account-info")
public R syncAccountInfoApi(@RequestBody List dto) {
return R.ok(thirdZyMerService.syncAccountInfoApi(dto));
}
@Inner
@Operation(summary = "身份信息同步")
- @GetMapping("/sync-acc-class-info")
+ @PostMapping("/sync-acc-class-info")
public R syncAccClassInfoApi(@RequestBody List dto) {
return R.ok(thirdZyMerService.syncAccClassInfoApi(dto));
}
diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/mapper/zy/ThirdZyIdDictMapper.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/mapper/zy/ThirdZyIdDictMapper.java
new file mode 100644
index 000000000..b364e483d
--- /dev/null
+++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/mapper/zy/ThirdZyIdDictMapper.java
@@ -0,0 +1,31 @@
+package com.bsd.pjcloud.thirdparty.mapper.zy;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper;
+import com.bsd.pjcloud.thirdparty.constant.ThirdZyBizEnumType;
+import com.bsd.pjcloud.thirdparty.entity.zy.ThirdZyIdDictEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface ThirdZyIdDictMapper extends PjcloudBaseMapper {
+
+ default List getBySelfIds(ThirdZyBizEnumType type, List selfIds) {
+ if (ObjectUtil.isEmpty(type)) return null;
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+ .in(ObjectUtil.isNotEmpty(selfIds), ThirdZyIdDictEntity::getSelfId, selfIds)
+ .eq(ThirdZyIdDictEntity::getBizType, type.getType());
+ return selectList(wrapper);
+ }
+
+ default List getByZyIds(ThirdZyBizEnumType type, List zyIds) {
+ if (ObjectUtil.isEmpty(type)) return null;
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+ .in(ObjectUtil.isNotEmpty(zyIds), ThirdZyIdDictEntity::getZyId, zyIds)
+ .eq(ThirdZyIdDictEntity::getBizType, type.getType());
+ return selectList(wrapper);
+ }
+
+}
\ No newline at end of file
diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ThirdZyIdDictService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ThirdZyIdDictService.java
new file mode 100644
index 000000000..3e85ab1d7
--- /dev/null
+++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/ThirdZyIdDictService.java
@@ -0,0 +1,8 @@
+package com.bsd.pjcloud.thirdparty.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bsd.pjcloud.thirdparty.entity.zy.ThirdZyIdDictEntity;
+
+public interface ThirdZyIdDictService extends IService {
+
+}
\ No newline at end of file
diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/zy/ThirdZyForeignServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/zy/ThirdZyForeignServiceImpl.java
index ffbdcf825..6d07e29c5 100644
--- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/zy/ThirdZyForeignServiceImpl.java
+++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/zy/ThirdZyForeignServiceImpl.java
@@ -4,6 +4,7 @@ import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONUtil;
+import com.bsd.pjcloud.common.core.constant.CacheConstants;
import com.bsd.pjcloud.thirdparty.config.ZyConfig;
import com.bsd.pjcloud.thirdparty.dto.zy.foreign.ZyForeignSyncNativeCardTradeInfoDto;
import com.bsd.pjcloud.thirdparty.entity.zy.ThirdZyLogEntity;
@@ -15,12 +16,14 @@ import com.bsd.pjcloud.thirdparty.vo.zy.foreign.ZyForeignGetRegionIdByTokenVo;
import com.bsd.pjcloud.thirdparty.vo.zy.foreign.ZyForeignSyncNativeCardTradeInfoVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
+import java.util.concurrent.TimeUnit;
@Service
@Validated
@@ -34,8 +37,11 @@ public class ThirdZyForeignServiceImpl implements ThirdZyForeignService {
private final ZyApiTool zyApiTool;
+ private final StringRedisTemplate redisTemplate;
+
private final ThirdZyLogServiceImpl thirdZyLogService;
+
/**
* 本地一卡通交易数据同步
*/
@@ -45,6 +51,13 @@ public class ThirdZyForeignServiceImpl implements ThirdZyForeignService {
long startTime = System.currentTimeMillis();
String url = zyConfig.getBaseUrl() + ZyApi.Foreign.SYNC_NATIVE_CARD_TRADE_INFO;
try {
+ if (ObjectUtil.isEmpty(dto.getRegionCode())) {
+ ZyForeignGetRegionIdByTokenVo.VoData regionInfo = getRegionInfo();
+ if (ObjectUtil.isEmpty(regionInfo)) {
+ throw new RuntimeException("获取区域信息错误无法进行");
+ }
+ dto.setRegionCode(regionInfo.getRegionCode());
+ }
url = String.format(url, zyApiTool.getToken());
Map encryptionBody = new HashMap<>();
encryptionBody.put("regionCode", dto);
@@ -52,10 +65,7 @@ public class ThirdZyForeignServiceImpl implements ThirdZyForeignService {
entity.setOrgReq(JSONUtil.toJsonStr(encryptionBody));
String body = zyApiTool.getEncryptionDto(encryptionBody);
entity.setEncipherReq(body);
- String res = HttpRequest.post(url)
- .form(body)
- .execute()
- .body();
+ String res = HttpRequest.post(url).form(body).execute().body();
if (ObjectUtil.isEmpty(res)) {
throw new RuntimeException("response is empty");
}
@@ -116,4 +126,21 @@ public class ThirdZyForeignServiceImpl implements ThirdZyForeignService {
}
return null;
}
+
+ // 获取区域信息
+ private ZyForeignGetRegionIdByTokenVo.VoData getRegionInfo() {
+ String redisKey = CacheConstants.THIRDPARTY_ZY_REGION_TOKEN;
+ String regionJson = redisTemplate.opsForValue().get(redisKey);
+ if (ObjectUtil.isNotEmpty(regionJson)) {
+ return JSONUtil.toBean(regionJson, ZyForeignGetRegionIdByTokenVo.VoData.class);
+ }
+ try {
+ ZyForeignGetRegionIdByTokenVo.VoData regionInfo = getRegionIdByToken();
+ redisTemplate.opsForValue().set(redisKey, JSONUtil.toJsonStr(regionInfo));
+ return regionInfo;
+ } catch (Exception e) {
+ log.error("|{}|获取区域信息错误无法进行,意外的错误error|{}|stack|{}|", TAG, e.getMessage(), e.getStackTrace());
+ return null;
+ }
+ }
}
diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/zy/ThirdZyIdDictServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/zy/ThirdZyIdDictServiceImpl.java
new file mode 100644
index 000000000..33d8996e3
--- /dev/null
+++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/zy/ThirdZyIdDictServiceImpl.java
@@ -0,0 +1,26 @@
+package com.bsd.pjcloud.thirdparty.service.impl.zy;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bsd.pjcloud.thirdparty.entity.zy.ThirdZyIdDictEntity;
+import com.bsd.pjcloud.thirdparty.mapper.zy.ThirdZyIdDictMapper;
+import com.bsd.pjcloud.thirdparty.service.impl.ThirdZyIdDictService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+/**
+ * 正元字典id对应 id + bizType 唯一
+ *
+ * @author third
+ * @date 2025-03-04 19:11:02
+ */
+@Service
+@Validated
+@Slf4j
+@RequiredArgsConstructor
+public class ThirdZyIdDictServiceImpl extends ServiceImpl implements ThirdZyIdDictService {
+
+
+
+}
\ No newline at end of file
diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/zy/ThirdZyMerServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/zy/ThirdZyMerServiceImpl.java
index 44d8aaf48..d3293221e 100644
--- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/zy/ThirdZyMerServiceImpl.java
+++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/zy/ThirdZyMerServiceImpl.java
@@ -41,14 +41,23 @@ public class ThirdZyMerServiceImpl implements ThirdZyMerService {
*/
@Override
public ZyMerSyncDealerInfoVo syncDealerInfoApi(List dto) {
+ ThirdZyBizEnumType bizTYpe = ThirdZyBizEnumType.SYNC_DEALER_INFO;
ThirdZyLogEntity entity = new ThirdZyLogEntity();
- entity.setBizType(ThirdZyBizEnumType.SYNC_DEALER_INFO.getType());
+ entity.setBizType(bizTYpe.getType());
long startTime = System.currentTimeMillis();
if (ObjectUtil.isEmpty(dto)) {
return null;
}
+ // 转换部门id
+ List deptList = dto.stream().map(ZyMerSyncDealerInfoDto::getEPID).distinct().toList();
+ Map deptDdDict = zyApiTool.generateZyId(ThirdZyBizEnumType.SYNC_ENTERPRISE_INFO, deptList);
+ // 转换商户id
+ List mchList = dto.stream().map(ZyMerSyncDealerInfoDto::getDealerKeyObj).distinct().toList();
+ Map mchIdDict = zyApiTool.generateZyId(bizTYpe, mchList);
List