diff --git a/db/1000pjcloudx_thirdparty.sql b/db/1000pjcloudx_thirdparty.sql index 92f7c435..3d7dc89d 100644 --- a/db/1000pjcloudx_thirdparty.sql +++ b/db/1000pjcloudx_thirdparty.sql @@ -8,7 +8,7 @@ CREATE TABLE `third_zy_log` ( `id` bigint NOT NULL COMMENT '主键', `biz_type` tinytext NOT NULL COMMENT '同步类型', - `biz_id` varchar(2048) NOT NULL COMMENT '同步类型id', + `biz_id` varchar(2048) DEFAULT NULL COMMENT '同步类型id', `api_url` text DEFAULT NULL COMMENT 'api url', `org_res` text DEFAULT NULL COMMENT '原始res', `encipher_res` text DEFAULT NULL COMMENT '加密res', @@ -19,7 +19,7 @@ CREATE TABLE `third_zy_log` `time_consuming` char(64) DEFAULT NULL COMMENT '同步版本格式化为14位字符串,如果是数字不足14位的,前面补0', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `create_by` varchar(32) COLLATE utf8mb4_general_ci NOT 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, 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 59c4fa7c..0c42652b 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 @@ -4,6 +4,10 @@ import com.bsd.pjcloud.common.core.constant.ServiceNameConstants; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.feign.annotation.NoToken; import com.bsd.pjcloud.thirdparty.dto.zy.foreign.ZyForeignSyncNativeCardTradeInfoDto; +import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncAccClassInfoDto; +import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncAccountInfoDto; +import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncDealerInfoDto; +import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncEnterpriseInfoDto; import com.bsd.pjcloud.thirdparty.dto.zy.stride.ZyStrideAuthenticationDto; import com.bsd.pjcloud.thirdparty.dto.zy.stride.ZyStrideConsumptionDto; import com.bsd.pjcloud.thirdparty.dto.zy.stride.ZyStrideCorrectDto; @@ -19,6 +23,8 @@ import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestBody; +import java.util.List; + @FeignClient(contextId = "remoterThirdZyService", value = ServiceNameConstants.THIRDPARTY_SERVICE) public interface RemoterThirdZyService { @@ -41,28 +47,28 @@ public interface RemoterThirdZyService { */ @NoToken @GetMapping("/third-zy-mer/sync-dealer-info") - R syncDealerInfo(@RequestBody ZyForeignSyncNativeCardTradeInfoDto dto); + R syncDealerInfo(@RequestBody List dto); /** * 记账单位同步 */ @NoToken @GetMapping("/third-zy-mer/sync-enterprise-info") - R syncEnterpriseInfoApi(@RequestBody ZyForeignSyncNativeCardTradeInfoDto dto); + R syncEnterpriseInfoApi(@RequestBody List dto); /** * 账户信息同步 */ @NoToken @GetMapping("/third-zy-mer/sync-account-info") - R syncAccountInfoApi(@RequestBody ZyForeignSyncNativeCardTradeInfoDto dto); + R syncAccountInfoApi(@RequestBody List dto); /** * 身份信息同步 */ @NoToken @GetMapping("/third-zy-mer/sync-acc-class-info") - R syncAccClassInfoApi(@RequestBody ZyForeignSyncNativeCardTradeInfoDto dto); + R syncAccClassInfoApi(@RequestBody List dto); /* ************************************* end 数据同步 end ************************************* */ diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/ThirdZyBizEnumType.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/ThirdZyBizEnumType.java index b308675c..87c029ff 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/ThirdZyBizEnumType.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/ThirdZyBizEnumType.java @@ -15,7 +15,7 @@ public enum ThirdZyBizEnumType { // 数据同步 SYNC_DEALER_INFO("10", "商户信息同步"), - SYNC_ENTERPRISE_INFO("20", "已打印"), + SYNC_ENTERPRISE_INFO("20", "记账单位同步"), SYNC_ACCOUNT_INFO("30", "账户信息同步"), SYNC_ACC_CLASS_INFO("40", "身份信息同步"), diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/zy/mer/ZyMerSyncAccountInfoDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/zy/mer/ZyMerSyncAccountInfoDto.java index 2b6fd506..c3baec87 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/zy/mer/ZyMerSyncAccountInfoDto.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/zy/mer/ZyMerSyncAccountInfoDto.java @@ -37,7 +37,7 @@ public class ZyMerSyncAccountInfoDto { /** * 卡片状态,0销卡;1有效;2挂失;3冻结;4预销卡;5锁卡,默认1 */ - private String CardStatus; + private Integer CardStatus; /** * 该卡在所属接入系统中的所属单位编号 diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/zy/mer/ZyMerSyncEnterpriseInfoDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/zy/mer/ZyMerSyncEnterpriseInfoDto.java index 5898e0e9..6053f6aa 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/zy/mer/ZyMerSyncEnterpriseInfoDto.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/zy/mer/ZyMerSyncEnterpriseInfoDto.java @@ -27,7 +27,7 @@ public class ZyMerSyncEnterpriseInfoDto { /** * 记账单位是否有效0:禁用 1:有效 */ - private String IsValid; + private Integer IsValid; /** * 每次推送版本号,格式化为14位字符串,如果是数字不足14位的,前面补0。 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 220098ce..ffbdcf82 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 @@ -53,7 +53,7 @@ public class ThirdZyForeignServiceImpl implements ThirdZyForeignService { String body = zyApiTool.getEncryptionDto(encryptionBody); entity.setEncipherReq(body); String res = HttpRequest.post(url) - .body(body) + .form(body) .execute() .body(); if (ObjectUtil.isEmpty(res)) { 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 2ad9933e..44d8aaf4 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpRequest; import cn.hutool.json.JSONUtil; import com.bsd.pjcloud.thirdparty.config.ZyConfig; +import com.bsd.pjcloud.thirdparty.constant.ThirdZyBizEnumType; import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncAccClassInfoDto; import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncAccountInfoDto; import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncDealerInfoDto; @@ -41,6 +42,7 @@ public class ThirdZyMerServiceImpl implements ThirdZyMerService { @Override public ZyMerSyncDealerInfoVo syncDealerInfoApi(List dto) { ThirdZyLogEntity entity = new ThirdZyLogEntity(); + entity.setBizType(ThirdZyBizEnumType.SYNC_DEALER_INFO.getType()); long startTime = System.currentTimeMillis(); if (ObjectUtil.isEmpty(dto)) { return null; @@ -57,13 +59,9 @@ public class ThirdZyMerServiceImpl implements ThirdZyMerService { encryptionBody.put("dealers", listMap); entity.setApiUrl(url); entity.setOrgReq(JSONUtil.toJsonStr(encryptionBody)); - String body = zyApiTool.getEncryptionDto(encryptionBody); - entity.setEncipherReq(body); - String res = HttpRequest.post(url) - .contentType("application/x-www-form-urlencoded") - .body(body) - .execute() - .body(); + Map body = zyApiTool.getEncryptionMap(encryptionBody); + entity.setEncipherReq(JSONUtil.toJsonStr(body)); + String res = HttpRequest.post(url).form(body).execute().body(); if (ObjectUtil.isEmpty(res)) { throw new RuntimeException("response is empty"); } @@ -77,6 +75,7 @@ public class ThirdZyMerServiceImpl implements ThirdZyMerService { } catch (Exception e) { String error = String.format("|%s||syncNativeCardTradeInfoApi|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); log.error(error); + entity.setError(error); } finally { long elapsedTime = System.currentTimeMillis() - startTime; entity.setTimeConsuming(Long.toString(elapsedTime)); @@ -91,6 +90,7 @@ public class ThirdZyMerServiceImpl implements ThirdZyMerService { @Override public ZyMerSyncEnterpriseInfoVo syncEnterpriseInfoApi(List dto) { ThirdZyLogEntity entity = new ThirdZyLogEntity(); + entity.setBizType(ThirdZyBizEnumType.SYNC_ENTERPRISE_INFO.getType()); long startTime = System.currentTimeMillis(); String url = zyConfig.getBaseUrl() + ZyApi.Mer.SYNC_ENTERPRISE_INFO; try { @@ -102,6 +102,7 @@ public class ThirdZyMerServiceImpl implements ThirdZyMerService { String body = zyApiTool.getEncryptionDto(encryptionBody); entity.setEncipherReq(body); String res = HttpRequest.post(url) + .contentType("application/x-www-form-urlencoded") .body(body) .execute() .body(); @@ -161,7 +162,7 @@ public class ThirdZyMerServiceImpl implements ThirdZyMerService { String error = String.format("|%s||syncAccountInfoApi|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); log.error(error); entity.setError(error); - }finally { + } finally { long elapsedTime = System.currentTimeMillis() - startTime; entity.setTimeConsuming(Long.toString(elapsedTime)); thirdZyLogService.save(entity); @@ -203,7 +204,7 @@ public class ThirdZyMerServiceImpl implements ThirdZyMerService { String error = String.format("|%s||syncAccClassInfoApi|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace())); log.error(error); entity.setError(error); - }finally { + } finally { long elapsedTime = System.currentTimeMillis() - startTime; entity.setTimeConsuming(Long.toString(elapsedTime)); thirdZyLogService.save(entity); diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/zy/api/ZyApiTool.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/zy/api/ZyApiTool.java index 38537786..5e9b2190 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/zy/api/ZyApiTool.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/zy/api/ZyApiTool.java @@ -6,6 +6,8 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.URLUtil; import cn.hutool.http.HttpRequest; import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializerFeature; import com.bsd.pjcloud.common.core.constant.CacheConstants; import com.bsd.pjcloud.thirdparty.config.ZyConfig; import com.bsd.pjcloud.thirdparty.vo.zy.mer.ZyMerGetTokenVo; @@ -89,7 +91,16 @@ public class ZyApiTool { Map body = new HashMap<>(); body.put("data", params); prePost(body); - return JSONUtil.toJsonStr(body); + String jsonString = JSON.toJSONString(body, SerializerFeature.DisableCircularReferenceDetect); + log.error(jsonString); + return jsonString; + } + + public Map getEncryptionMap(Map params) { + Map body = new HashMap<>(); + body.put("data", params); + prePost(body); + return body; } public Map removeEmptyMap(Map params) { @@ -116,7 +127,7 @@ public class ZyApiTool { for (Map.Entry entry : params.entrySet()) { Object value = entry.getValue(); if (value instanceof String) { - entry.setValue(Base64.encode((String) value)); + entry.setValue(Base64.encode((String) value).replaceAll("\\s+", "")); } else { entry.setValue(Base64.encode(value.toString())); } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/ZyTest.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/ZyTest.java index 590604e0..ece32082 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/ZyTest.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/test/java/com/bsd/pjcloud/admin/ZyTest.java @@ -78,6 +78,10 @@ public class ZyTest { @Test public void merSyncEnterpriseInfo() { ZyMerSyncEnterpriseInfoDto dto = new ZyMerSyncEnterpriseInfoDto(); + dto.setEPID("1"); + dto.setEPName("测试部门"); + dto.setIsValid(1); + dto.setFixId("20190920100101"); ZyMerSyncEnterpriseInfoVo vo = zyMerService.syncEnterpriseInfoApi(List.of(dto)); System.out.println(vo); } @@ -88,6 +92,9 @@ public class ZyTest { @Test public void merSyncAccountInfoApi() { ZyMerSyncAccountInfoDto dto = new ZyMerSyncAccountInfoDto(); + dto.setEPID("1"); + dto.setAccName("测试部门"); + dto.setEPID("1"); ZyMerSyncAccountInfoVo vo = zyMerService.syncAccountInfoApi(List.of(dto)); System.out.println(vo); } diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteRoleService.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteRoleService.java index 44e567b6..d5e2f7dc 100644 --- a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteRoleService.java +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteRoleService.java @@ -24,6 +24,7 @@ import com.bsd.pjcloud.common.core.constant.ServiceNameConstants; import com.bsd.pjcloud.common.core.util.R; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; import java.util.List; @@ -34,11 +35,18 @@ import java.util.List; @FeignClient(contextId = "remoteRoleService", value = ServiceNameConstants.UPMS_SERVICE) public interface RemoteRoleService { - /** - * 获取所有部门接口 - * @return R 返回结果对象,包含所有部门信息列表 - */ - @GetMapping("/role/list") - R> getAllRole(); + /** + * 获取所有部门接口 + * + * @return R 返回结果对象,包含所有部门信息列表 + */ + @GetMapping("/role/list") + R> getAllRole(); + + /** + * + */ + @GetMapping("/role/by-codes") + R> findRolesByCodes(@RequestBody List codes); } diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysRoleController.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysRoleController.java index 630ca7db..8c5cec99 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysRoleController.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysRoleController.java @@ -33,6 +33,7 @@ import com.bsd.pjcloud.common.excel.annotation.RequestExcel; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.common.security.annotation.HasPermission; +import com.bsd.pjcloud.common.security.annotation.Inner; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; @@ -58,6 +59,12 @@ public class SysRoleController { private final SysRoleService sysRoleService; + @Inner + @PostMapping("/by-codes") + public R> findRolesByCodes(@RequestBody List codes) { + return R.ok(sysRoleService.findRolesByCodes(codes)); + } + /** * 通过ID查询角色信息 * @param id ID diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysRoleService.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysRoleService.java index 982ec9cc..0b448edc 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysRoleService.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysRoleService.java @@ -53,6 +53,13 @@ public interface SysRoleService extends IService { */ List findRolesByRoleIds(List roleIdList, String key); + /** + * 根据角色标识 查询角色列表 + * @param codes 角色标识 + * @return + */ + List findRolesByCodes(List codes); + /** * 通过角色ID,删除角色 * @param ids diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysThirdZyService.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysThirdZyService.java index 923adab8..b6e55b72 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysThirdZyService.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysThirdZyService.java @@ -1,4 +1,6 @@ package com.bsd.pjcloud.admin.service; public interface SysThirdZyService { + + } diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysRoleServiceImpl.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysRoleServiceImpl.java index 0399a5b6..c504e1bd 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysRoleServiceImpl.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysRoleServiceImpl.java @@ -22,6 +22,8 @@ package com.bsd.pjcloud.admin.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.admin.api.entity.SysRole; @@ -59,120 +61,133 @@ import java.util.stream.Collectors; @AllArgsConstructor public class SysRoleServiceImpl extends ServiceImpl implements SysRoleService { - private SysRoleMenuService roleMenuService; + private SysRoleMenuService roleMenuService; - /** - * 通过用户ID,查询角色信息 - * @param userId - * @return - */ - @Override - public List findRolesByUserId(Long userId) { - return baseMapper.listRolesByUserId(userId); - } + /** + * 通过用户ID,查询角色信息 + * + * @param userId + * @return + */ + @Override + public List findRolesByUserId(Long userId) { + return baseMapper.listRolesByUserId(userId); + } - /** - * 根据角色ID 查询角色列表,注意缓存删除 - * @param roleIdList 角色ID列表 - * @param key 缓存key - * @return - */ - @Override - @Cacheable(value = CacheConstants.ROLE_DETAILS, key = "#key", unless = "#result.isEmpty()") - public List findRolesByRoleIds(List roleIdList, String key) { - return baseMapper.selectBatchIds(roleIdList); - } + /** + * 根据角色ID 查询角色列表,注意缓存删除 + * + * @param roleIdList 角色ID列表 + * @param key 缓存key + * @return + */ + @Override + @Cacheable(value = CacheConstants.ROLE_DETAILS, key = "#key", unless = "#result.isEmpty()") + public List findRolesByRoleIds(List roleIdList, String key) { + return baseMapper.selectBatchIds(roleIdList); + } - /** - * 通过角色ID,删除角色,并清空角色菜单缓存 - * @param ids - * @return - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean removeRoleByIds(Long[] ids) { - roleMenuService - .remove(Wrappers.update().lambda().in(SysRoleMenu::getRoleId, CollUtil.toList(ids))); - return this.removeBatchByIds(CollUtil.toList(ids)); - } + @Override + public List findRolesByCodes(List codes) { + if (ObjectUtil.isEmpty(codes)) return null; + return baseMapper.selectList(new LambdaQueryWrapper() + .in(SysRole::getRoleCode, codes) + ); + } - /** - * 根据角色菜单列表 - * @param roleVo 角色&菜单列表 - * @return - */ - @Override - public Boolean updateRoleMenus(RoleMenuVO roleVo) { - return roleMenuService.saveRoleMenus(roleVo.getRoleId(), roleVo.getMenuIds()); - } + /** + * 通过角色ID,删除角色,并清空角色菜单缓存 + * + * @param ids + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean removeRoleByIds(Long[] ids) { + roleMenuService + .remove(Wrappers.update().lambda().in(SysRoleMenu::getRoleId, CollUtil.toList(ids))); + return this.removeBatchByIds(CollUtil.toList(ids)); + } - /** - * 导入角色 - * @param excelVOList 角色列表 - * @param bindingResult 错误信息列表 - * @return ok fail - */ - @Override - public R importRole(List excelVOList, BindingResult bindingResult) { - // 通用校验获取失败的数据 - List errorMessageList = (List) bindingResult.getTarget(); + /** + * 根据角色菜单列表 + * + * @param roleVo 角色&菜单列表 + * @return + */ + @Override + public Boolean updateRoleMenus(RoleMenuVO roleVo) { + return roleMenuService.saveRoleMenus(roleVo.getRoleId(), roleVo.getMenuIds()); + } - // 个性化校验逻辑 - List roleList = this.list(); + /** + * 导入角色 + * + * @param excelVOList 角色列表 + * @param bindingResult 错误信息列表 + * @return ok fail + */ + @Override + public R importRole(List excelVOList, BindingResult bindingResult) { + // 通用校验获取失败的数据 + List errorMessageList = (List) bindingResult.getTarget(); - // 执行数据插入操作 组装 RoleDto - for (RoleExcelVO excel : excelVOList) { - Set errorMsg = new HashSet<>(); - // 检验角色名称或者角色编码是否存在 - boolean existRole = roleList.stream() - .anyMatch(sysRole -> excel.getRoleName().equals(sysRole.getRoleName()) - || excel.getRoleCode().equals(sysRole.getRoleCode())); + // 个性化校验逻辑 + List roleList = this.list(); - if (existRole) { - errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_ROLE_NAMEORCODE_EXISTING, excel.getRoleName(), - excel.getRoleCode())); - } + // 执行数据插入操作 组装 RoleDto + for (RoleExcelVO excel : excelVOList) { + Set errorMsg = new HashSet<>(); + // 检验角色名称或者角色编码是否存在 + boolean existRole = roleList.stream() + .anyMatch(sysRole -> excel.getRoleName().equals(sysRole.getRoleName()) + || excel.getRoleCode().equals(sysRole.getRoleCode())); - // 数据合法情况 - if (CollUtil.isEmpty(errorMsg)) { - insertExcelRole(excel); - } - else { - // 数据不合法情况 - errorMessageList.add(new ErrorMessage(excel.getLineNum(), errorMsg)); - } - } - if (CollUtil.isNotEmpty(errorMessageList)) { - return R.failed(errorMessageList); - } - return R.ok(); - } + if (existRole) { + errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_ROLE_NAMEORCODE_EXISTING, excel.getRoleName(), + excel.getRoleCode())); + } - /** - * 查询全部的角色 - * @return list - */ - @Override - public List listRole(SysRole sysRole, Long[] ids) { - List roleList = this - .list(Wrappers.lambdaQuery(sysRole).in(ArrayUtil.isNotEmpty(ids), SysRole::getRoleId, ids)); - // 转换成execl 对象输出 - return roleList.stream().map(role -> { - RoleExcelVO roleExcelVO = new RoleExcelVO(); - BeanUtil.copyProperties(role, roleExcelVO); - return roleExcelVO; - }).collect(Collectors.toList()); - } + // 数据合法情况 + if (CollUtil.isEmpty(errorMsg)) { + insertExcelRole(excel); + } else { + // 数据不合法情况 + errorMessageList.add(new ErrorMessage(excel.getLineNum(), errorMsg)); + } + } + if (CollUtil.isNotEmpty(errorMessageList)) { + return R.failed(errorMessageList); + } + return R.ok(); + } - /** - * 插入excel Role - */ - private void insertExcelRole(RoleExcelVO excel) { - SysRole sysRole = new SysRole(); - sysRole.setRoleName(excel.getRoleName()); - sysRole.setRoleDesc(excel.getRoleDesc()); - sysRole.setRoleCode(excel.getRoleCode()); - this.save(sysRole); - } + /** + * 查询全部的角色 + * + * @return list + */ + @Override + public List listRole(SysRole sysRole, Long[] ids) { + List roleList = this + .list(Wrappers.lambdaQuery(sysRole).in(ArrayUtil.isNotEmpty(ids), SysRole::getRoleId, ids)); + // 转换成execl 对象输出 + return roleList.stream().map(role -> { + RoleExcelVO roleExcelVO = new RoleExcelVO(); + BeanUtil.copyProperties(role, roleExcelVO); + return roleExcelVO; + }).collect(Collectors.toList()); + } + + /** + * 插入excel Role + */ + private void insertExcelRole(RoleExcelVO excel) { + SysRole sysRole = new SysRole(); + sysRole.setRoleName(excel.getRoleName()); + sysRole.setRoleDesc(excel.getRoleDesc()); + sysRole.setRoleCode(excel.getRoleCode()); + this.save(sysRole); + } } diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/third/SysThirdZyServiceImpl.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/third/SysThirdZyServiceImpl.java index 325e77ca..33103041 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/third/SysThirdZyServiceImpl.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/third/SysThirdZyServiceImpl.java @@ -1,25 +1,38 @@ package com.bsd.pjcloud.admin.service.impl.third; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.admin.api.entity.SysRole; +import com.bsd.pjcloud.admin.api.entity.SysUser; +import com.bsd.pjcloud.admin.service.SysRoleService; import com.bsd.pjcloud.admin.service.SysThirdZyService; +import com.bsd.pjcloud.admin.service.SysUserService; import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdZyService; +import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncAccClassInfoDto; +import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncAccountInfoDto; +import com.bsd.pjcloud.thirdparty.vo.zy.mer.ZyMerSyncAccClassInfoVo; +import com.bsd.pjcloud.thirdparty.vo.zy.mer.ZyMerSyncAccountInfoVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + @Slf4j @Service @RequiredArgsConstructor public class SysThirdZyServiceImpl implements SysThirdZyService { + private static final String TAG = "用户模块同步到正元信息"; - private RemoterThirdZyService thirdZyService; + private final SysRoleService roleService; + private final SysUserService userService; + + private final RemoterThirdZyService thirdZyService; - private void syncRole() { - } - private void syncUser() { - } } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/pom.xml b/pjcloud-wallet/pjcloud-wallet-biz/pom.xml index 24f349f6..7458306d 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/pom.xml +++ b/pjcloud-wallet/pjcloud-wallet-biz/pom.xml @@ -112,6 +112,12 @@ com.bsd pjcloud-flow-task-api + + com.bsd + pjcloud-thirdparty-api + 5.7.0 + compile + diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/third/MchThirdZyController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/third/MchThirdZyController.java new file mode 100644 index 00000000..2a6b7796 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/third/MchThirdZyController.java @@ -0,0 +1,43 @@ +package com.bsd.pjcloud.wallet.controller.third; + + +import cn.hutool.core.util.ObjectUtil; +import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.wallet.api.vo.MchManageVo; +import com.bsd.pjcloud.wallet.service.MchThirdZyService; +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.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/mch-third-zy") +@Tag(description = "wallet-active", name = "钱包开卡管理") +@SecurityRequirement(name = HttpHeaders.AUTHORIZATION) +@Validated +public class MchThirdZyController { + + private final MchThirdZyService mchThirdZyService; + + @GetMapping("/sync-all-mch") + @Operation(summary = "同步全部商户") + public R syncAllMch(@RequestParam Long id) { + mchThirdZyService.syncAllMch(); + return R.ok(); + } + + @GetMapping("/sync-all-dept") + @Operation(summary = "同步全部商户部门") + public R syncAllDept() { + mchThirdZyService.syncAllDept(); + return R.ok(); + } + +} diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchThirdZyService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchThirdZyService.java new file mode 100644 index 00000000..89f2fedf --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchThirdZyService.java @@ -0,0 +1,25 @@ +package com.bsd.pjcloud.wallet.service; + +public interface MchThirdZyService { + + /** + * 同步全部商户 + */ + void syncAllMch(); + + /** + * 同步全部商户部门 + */ + void syncAllDept(); + + /** + * 同步到正元全部身份信息 + */ + void syncAllUser(); + + /** + * 同步到正元全部身份信息 + */ + void syncAllRole(); + +} diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/MchManageServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/MchManageServiceImpl.java index ab46196f..14bf0088 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/MchManageServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/MchManageServiceImpl.java @@ -164,7 +164,17 @@ public class MchManageServiceImpl extends ServiceImpl list(MchManageDto dto) { - return baseMapper.list(dto); + List list = baseMapper.list(dto); + if (ObjectUtil.isEmpty(list)) return null; + // 部门 + List deptIds = list.stream().map(MchManageVo::getDeptId).distinct().toList(); + if (ObjectUtil.isNotEmpty(deptIds)) { + R> deptList = remoteDeptService.getDeptByDeptIds(deptIds); + if (ObjectUtil.isNotEmpty(deptList.getData())) { + DataUtil.convertDeptList(list, deptList.getData()); + } + } + return list; } @Override diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/thrid/MchThirdZyServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/thrid/MchThirdZyServiceImpl.java new file mode 100644 index 00000000..1b928324 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/thrid/MchThirdZyServiceImpl.java @@ -0,0 +1,176 @@ +package com.bsd.pjcloud.wallet.service.impl.thrid; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.admin.api.entity.SysDept; +import com.bsd.pjcloud.admin.api.entity.SysRole; +import com.bsd.pjcloud.admin.api.feign.RemoteDeptService; +import com.bsd.pjcloud.admin.api.feign.RemoteRoleService; +import com.bsd.pjcloud.common.data.datascope.DataScope; +import com.bsd.pjcloud.common.data.datascope.DataScopeFuncEnum; +import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdZyService; +import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncAccClassInfoDto; +import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncAccountInfoDto; +import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncDealerInfoDto; +import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncEnterpriseInfoDto; +import com.bsd.pjcloud.thirdparty.vo.zy.mer.ZyMerSyncAccClassInfoVo; +import com.bsd.pjcloud.thirdparty.vo.zy.mer.ZyMerSyncAccountInfoVo; +import com.bsd.pjcloud.thirdparty.vo.zy.mer.ZyMerSyncDealerInfoVo; +import com.bsd.pjcloud.thirdparty.vo.zy.mer.ZyMerSyncEnterpriseInfoVo; +import com.bsd.pjcloud.wallet.api.dto.MchManageDto; +import com.bsd.pjcloud.wallet.api.dto.WalletManageDto; +import com.bsd.pjcloud.wallet.api.entity.MchManageEntity; +import com.bsd.pjcloud.wallet.api.vo.MchManageVo; +import com.bsd.pjcloud.wallet.api.vo.WalletManageVo; +import com.bsd.pjcloud.wallet.service.MchManageService; +import com.bsd.pjcloud.wallet.service.MchThirdZyService; +import com.bsd.pjcloud.wallet.service.WalletManageService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import java.util.ArrayList; +import java.util.List; + +@Validated +@Slf4j +@RequiredArgsConstructor +@Service +public class MchThirdZyServiceImpl implements MchThirdZyService { + + private static final String TAG = "用户模块同步到正元信息"; + + private final RemoterThirdZyService thirdZyService; + private final RemoteDeptService remoteDeptService; + private final RemoteRoleService remoteRoleService; + + private final MchManageService mchManageService; + private final WalletManageService walletManageService; + + @Override + public void syncAllMch() { + List mchList = mchManageService.list(); + if (ObjectUtil.isEmpty(mchList)) { + log.info("|{}|同步到正元全部商户信息错误mchList为空", TAG); + return; + } + List syncList = new ArrayList<>(); + for (MchManageEntity v : mchList) { + ZyMerSyncDealerInfoDto entity = new ZyMerSyncDealerInfoDto(); + entity.setDealerKeyObj(v.getId().toString()); + entity.setDealerName(v.getName()); + entity.setIsValid(1); + entity.setEPID(""); + entity.setFixId(getSyncAllMchVersion()); + syncList.add(entity); + } + ZyMerSyncDealerInfoVo res = thirdZyService.syncDealerInfo(syncList).getData(); + } + + @Override + public void syncAllDept() { + List mchList = remoteDeptService.getAllDept(null).getData(); + if (ObjectUtil.isEmpty(mchList)) { + log.info("|{}|同步到正元全部商户部门信息错误mchList为空", TAG); + return; + } + List syncList = new ArrayList<>(); + for (SysDept v : mchList) { + ZyMerSyncEnterpriseInfoDto entity = new ZyMerSyncEnterpriseInfoDto(); + entity.setEPID(v.getDeptId().toString()); + entity.setEPName(v.getName()); + entity.setIsValid(1); + entity.setFixId(getSyncAllMchVersion()); + syncList.add(entity); + } + ZyMerSyncEnterpriseInfoVo res = thirdZyService.syncEnterpriseInfoApi(syncList).getData(); + } + + @Override + public void syncAllUser() { + Page page = new Page(); + page.setCurrent(1); + page.setSize(500); + boolean isResidue = true; + while (isResidue) { + isResidue = syncAllUserGroup(page); + if (!isResidue) break; + } + } + + /** + * 同步到正元全部身份信息 + */ + @Override + public void syncAllRole() { + // 查询需要同步的身份信息 + List roleList = remoteRoleService.findRolesByCodes(List.of("GENERAL_USER")).getData(); + if (ObjectUtil.isEmpty(roleList)) { + log.info("|{}|同步到正元全部身份信息错误roleList为空", TAG); + return; + } + List syncList = new ArrayList<>(); + for (SysRole v : roleList) { + ZyMerSyncAccClassInfoDto entity = new ZyMerSyncAccClassInfoDto(); + entity.setAccClassID(v.getRoleId().toString()); + entity.setAccClassName(v.getRoleName()); + entity.setEPID("1"); + entity.setFixId(getSyncAllRoleVersion()); + syncList.add(entity); + } + ZyMerSyncAccClassInfoVo res = thirdZyService.syncAccClassInfoApi(syncList).getData(); + } + + private boolean syncAllUserGroup(Page page) { + WalletManageDto query = new WalletManageDto(); + DataScope dataScope = DataScope.of(); + dataScope.func(DataScopeFuncEnum.ALL); + Page userPage = walletManageService.scopePageList(page, query, dataScope); + if (ObjectUtil.isEmpty(userPage.getRecords())) return false; + List syncList = new ArrayList<>(); + for (WalletManageVo v : userPage.getRecords()) { + ZyMerSyncAccountInfoDto item = new ZyMerSyncAccountInfoDto(); + item.setAccName(v.getUsername()); + item.setAccNum(v.getUserId().toString()); + item.setCardAccNum(v.getId()); + item.setCardSID(v.getCardNumber()); + item.setCardStatus(getCardStatus(v.getCardNumber())); + item.setEPID(""); + item.setAccClassID(""); + item.setPhoneNo(v.getUserMobile()); + item.setFixId(getSyncAllUserVersion()); + syncList.add(item); + } + ZyMerSyncAccountInfoVo res = thirdZyService.syncAccountInfoApi(syncList).getData(); + + return userPage.getTotal() > 0; + } + + + /* ************************************* start 版本号 start ************************************* */ + + private String getSyncAllMchVersion() { + return String.format("%014d", 2); + } + + private String getSyncAllDeptVersion() { + return String.format("%014d", 2); + } + + private String getSyncAllUserVersion() { + return String.format("%014d", 1); + } + + private String getSyncAllRoleVersion() { + return String.format("%014d", 1); + } + + /* ************************************* end 版本号 end ************************************* */ + + // 卡片状态,0销卡;1有效;2挂失;3冻结;4预销卡;5锁卡,默认1 + private Integer getCardStatus(String cardNumber) { + return 0; + } + +}