From fac321f5a5e107249a58439e8ea3838776433e53 Mon Sep 17 00:00:00 2001 From: zhanglei Date: Thu, 9 Jul 2026 16:46:14 +0800 Subject: [PATCH] =?UTF-8?q?bug:=20=E6=B3=A8=E5=86=8C=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/web/ImagesOpenController.java | 6 ++++ .../app/executor/AccountExecutor.java | 32 +++++++++++------ .../app/executor/OrgInfoExecutor.java | 7 ++++ .../safetyeval/client/api/OrgInfoApi.java | 2 ++ .../qinan/safetyeval/client/co/AccountCO.java | 3 ++ .../qinan/safetyeval/client/co/OrgInfoCO.java | 2 ++ .../safetyeval/client/dto/OrgInfoAddCmd.java | 3 ++ .../domain/entity/AccountEntity.java | 4 +++ .../domain/gateway/OrgInfoGateway.java | 2 ++ .../domain/service/OrgInfoDomainService.java | 6 +++- .../adapter/gbs/GbsUserFacadeClient.java | 4 ++- .../infrastructure/dataobject/AccountDO.java | 4 +++ .../gatewayimpl/AccountGatewayImpl.java | 7 ++++ .../gatewayimpl/OrgInfoGatewayImpl.java | 34 +++++++++++++++++++ .../support/InsertFieldDefaults.java | 2 +- 15 files changed, 104 insertions(+), 14 deletions(-) diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/ImagesOpenController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/ImagesOpenController.java index 41c34a0..d3e28b4 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/ImagesOpenController.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/ImagesOpenController.java @@ -128,4 +128,10 @@ public class ImagesOpenController { return fileUploadApi.uploadInternal(file); } + + @ApiOperation("通过用户账号查询机构信息") + @PostMapping("/org-info/getByAccount") + public SingleResponse getByAccount(@ApiParam("账号") @RequestBody Req req) { + return orgInfoApi.getByAccount(req.getData()); + } } diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/AccountExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/AccountExecutor.java index c9536f1..5851ab6 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/AccountExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/AccountExecutor.java @@ -1,6 +1,6 @@ package org.qinan.safetyeval.app.executor; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.jjb.saas.system.client.user.request.UserAddCmd; import com.zcloud.gbscommon.utils.MD5; import com.zcloud.gbscommon.utils.Sm2Util; @@ -17,7 +17,8 @@ import org.qinan.safetyeval.domain.query.PageResult; import org.qinan.safetyeval.domain.service.AccountDomainService; import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; import org.qinan.safetyeval.infrastructure.adapter.gbs.GbsUserFacadeClient; -import org.qinan.safetyeval.infrastructure.dataobject.OrgInfoDO; +import org.qinan.safetyeval.infrastructure.dataobject.AccountDO; +import org.qinan.safetyeval.infrastructure.mapper.AccountMapper; import org.qinan.safetyeval.infrastructure.mapper.OrgInfoMapper; import org.qinan.safetyeval.infrastructure.remote.SmsRemote; import org.springframework.beans.factory.annotation.Autowired; @@ -48,6 +49,8 @@ public class AccountExecutor implements AccountApi { private SmsRemote smsRemote; @Autowired private OrgInfoMapper orgInfoMapper; + @Autowired + private AccountMapper accountMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -129,16 +132,22 @@ public class AccountExecutor implements AccountApi { log.info("同步用户密码:{}", pas); String encrypt = Sm2Util.encryptHex(MD5.md5(pas), publicKey); userAddCmd.setPassword(encrypt); - try { - gbsUserFacadeClient.add(userAddCmd); - } catch (Exception e) { - // 回滚数据, 清除account表示数据,orgInfo数据 - orgInfoMapper.delete(new LambdaQueryWrapper() - .eq(OrgInfoDO::getCreateId, result.getId())); - accountDomainService.delete(result.getId()); - log.error("同步用户失败: {}", e.getMessage()); - throw new BizException(ErrorCode.GBS_USER_SYNC_ERROR); + int add = gbsUserFacadeClient.add(userAddCmd); + if (add == 2) { + accountMapper.update(null, new LambdaUpdateWrapper() + .eq(AccountDO::getId, result.getId()) + .set(AccountDO::getSyncGbs, add)); } +// try { + +// } catch (Exception e) { +// // 回滚数据, 清除account表示数据,orgInfo数据 +// orgInfoMapper.delete(new LambdaQueryWrapper() +// .eq(OrgInfoDO::getCreateId, result.getId())); +// accountDomainService.delete(result.getId()); +// log.error("同步用户失败: {}", e.getMessage()); +// throw new BizException(ErrorCode.GBS_USER_SYNC_ERROR); +// } return SingleResponse.success(toCO(result)); } @@ -171,6 +180,7 @@ public class AccountExecutor implements AccountApi { co.setProfileUrl(entity.getProfileUrl()); co.setType(entity.getType()); co.setTenantId(entity.getTenantId()); + co.setSyncGbs(entity.getSyncGbs()); return co; } } diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgInfoExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgInfoExecutor.java index 062e349..8ccf51f 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgInfoExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgInfoExecutor.java @@ -77,6 +77,7 @@ public class OrgInfoExecutor implements OrgInfoApi { entity.setFilingRecordStatusName(cmd.getFilingRecordStatusName()); entity.setAttachmentUrls(cmd.getAttachmentUrls()); entity.setRegisterUserId(cmd.getRegisterUserId()); + entity.setId(cmd.getId()); OrgInfoEntity result = orgInfoDomainService.add(entity); return SingleResponse.success(toCO(result)); @@ -196,6 +197,12 @@ public class OrgInfoExecutor implements OrgInfoApi { return SingleResponse.success(toCO(entity)); } + @Override + public SingleResponse getByAccount(String data) { + OrgInfoEntity entity = orgInfoDomainService.getByAccount(data); + return SingleResponse.success(toCO(entity)); + } + private OrgInfoCO toCO(OrgInfoEntity entity) { if (entity == null) { return null; diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/OrgInfoApi.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/OrgInfoApi.java index f00da6c..cbb8d3c 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/OrgInfoApi.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/OrgInfoApi.java @@ -30,4 +30,6 @@ public interface OrgInfoApi { PageResponse page(OrgInfoPageQuery query); SingleResponse getInfo(); + + SingleResponse getByAccount(String data); } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/AccountCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/AccountCO.java index b1dded1..bebb683 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/AccountCO.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/AccountCO.java @@ -31,4 +31,7 @@ public class AccountCO { @ApiModelProperty(value = "租户ID") private Long tenantId; + + @ApiModelProperty(value = "同步gbs 1-未同步, 2-同步") + private Integer syncGbs; } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/OrgInfoCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/OrgInfoCO.java index 2936b7e..86a5336 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/OrgInfoCO.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/OrgInfoCO.java @@ -159,4 +159,6 @@ public class OrgInfoCO { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime createTime; + + } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgInfoAddCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgInfoAddCmd.java index 304038a..e1dde4a 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgInfoAddCmd.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgInfoAddCmd.java @@ -14,6 +14,9 @@ import java.time.LocalDate; @Data public class OrgInfoAddCmd { + /** 主键ID */ + private Long id; + @ApiModelProperty(value = "生产经营单位名称") private String unitName; diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/AccountEntity.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/AccountEntity.java index 045bba4..146a73d 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/AccountEntity.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/AccountEntity.java @@ -1,5 +1,6 @@ package org.qinan.safetyeval.domain.entity; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -33,4 +34,7 @@ public class AccountEntity { /** 租户ID */ private Long tenantId; + + @ApiModelProperty(value = "同步gbs 1-未同步, 2-同步") + private Integer syncGbs; } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/OrgInfoGateway.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/OrgInfoGateway.java index 2901d61..2c55bed 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/OrgInfoGateway.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/OrgInfoGateway.java @@ -28,4 +28,6 @@ public interface OrgInfoGateway { OrgInfoEntity getInfo(); void resetPassword(Long id); + + OrgInfoEntity getByAccount(String data); } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/OrgInfoDomainService.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/OrgInfoDomainService.java index db95510..c63b08e 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/OrgInfoDomainService.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/OrgInfoDomainService.java @@ -6,9 +6,9 @@ import org.qinan.safetyeval.domain.exception.ErrorCode; import org.qinan.safetyeval.domain.gateway.OrgInfoGateway; import org.qinan.safetyeval.domain.query.OrgInfoQuery; import org.qinan.safetyeval.domain.query.PageResult; +import org.springframework.stereotype.Service; import javax.annotation.Resource; -import org.springframework.stereotype.Service; /** * 机构信息领域服务 @@ -64,4 +64,8 @@ public class OrgInfoDomainService { public void resetPassword(Long id) { orgInfoGateway.resetPassword(id); } + + public OrgInfoEntity getByAccount(String data) { + return orgInfoGateway.getByAccount(data); + } } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/adapter/gbs/GbsUserFacadeClient.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/adapter/gbs/GbsUserFacadeClient.java index f3b9097..e2c0da1 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/adapter/gbs/GbsUserFacadeClient.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/adapter/gbs/GbsUserFacadeClient.java @@ -28,7 +28,7 @@ public class GbsUserFacadeClient { private Long roleId; - public void add(UserAddCmd cmd) { + public Integer add(UserAddCmd cmd) { //2069596397920849920{key: "1782463085576", deptId: "2069596397920849920", roleId: "2069671307598893058"} List list = new ArrayList<>(); RoleDeptAddCmd roleDeptAddCmd = new RoleDeptAddCmd(); @@ -39,6 +39,8 @@ public class GbsUserFacadeClient { SingleResponse singleResponse = userFacade.add(cmd); if (!singleResponse.isSuccess()) { throw new BizException(singleResponse.getErrCode(), singleResponse.getErrMessage()); + } else { + return 2; } } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/AccountDO.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/AccountDO.java index 05ded4e..62ef9ae 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/AccountDO.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/AccountDO.java @@ -21,6 +21,10 @@ public class AccountDO { private String password; private String profileUrl; private Integer type; + /** + * gbs同步, 1-未同步, 2-同步 + */ + private Integer syncGbs; // ---- GBS默认字段 ---- private String deleteEnum; diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/AccountGatewayImpl.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/AccountGatewayImpl.java index b00a2a6..8c4ea76 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/AccountGatewayImpl.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/AccountGatewayImpl.java @@ -10,6 +10,7 @@ import org.qinan.safetyeval.domain.query.PageResult; import org.qinan.safetyeval.infrastructure.dataobject.AccountDO; import org.qinan.safetyeval.infrastructure.mapper.AccountMapper; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; @@ -28,6 +29,9 @@ public class AccountGatewayImpl implements AccountGateway { @Resource private AccountMapper accountMapper; + @Value("${def.tenantId:2067161116369793024L}") + private String tenantId; + @Override public AccountEntity save(AccountEntity entity) { AccountDO dataObject = toDO(entity); @@ -48,6 +52,7 @@ public class AccountGatewayImpl implements AccountGateway { public AccountEntity getByAccount(String account) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(AccountDO::getAccount, account); + wrapper.eq(AccountDO::getTenantId, tenantId); wrapper.eq(AccountDO::getDeleteEnum, "false"); AccountDO dataObject = accountMapper.selectOne(wrapper); return toEntity(dataObject); @@ -98,6 +103,7 @@ public class AccountGatewayImpl implements AccountGateway { public AccountEntity foundByPhone(String phone) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(AccountDO::getPhone, phone); + wrapper.eq(AccountDO::getTenantId, tenantId); wrapper.eq(AccountDO::getDeleteEnum, "false"); AccountDO dataObject = accountMapper.selectOne(wrapper); return toEntity(dataObject); @@ -128,6 +134,7 @@ public class AccountGatewayImpl implements AccountGateway { entity.setProfileUrl(dataObject.getProfileUrl()); entity.setType(dataObject.getType()); entity.setTenantId(dataObject.getTenantId()); + entity.setSyncGbs(dataObject.getSyncGbs()); return entity; } } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/OrgInfoGatewayImpl.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/OrgInfoGatewayImpl.java index 600341f..c903336 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/OrgInfoGatewayImpl.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/OrgInfoGatewayImpl.java @@ -18,8 +18,10 @@ import org.qinan.safetyeval.domain.query.OrgInfoQuery; import org.qinan.safetyeval.domain.query.PageResult; import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; import org.qinan.safetyeval.infrastructure.adapter.gbs.GbsUserFacadeClient; +import org.qinan.safetyeval.infrastructure.dataobject.AccountDO; import org.qinan.safetyeval.infrastructure.dataobject.OrgInfoDO; import org.qinan.safetyeval.infrastructure.dataobject.OrgPersonnelDO; +import org.qinan.safetyeval.infrastructure.mapper.AccountMapper; import org.qinan.safetyeval.infrastructure.mapper.OrgInfoMapper; import org.qinan.safetyeval.infrastructure.mapper.OrgPersonnelMapper; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; @@ -58,12 +60,16 @@ public class OrgInfoGatewayImpl implements OrgInfoGateway { private GbsUserFacadeClient gbsUserFacadeClient; @Value("${def.password:a123456}") private String defPassword; + @Value("${def.tenantId:2067161116369793024L}") + private String tenantId; @Value("${def.publicKey:0402df2195296d4062ac85ad766994d73e871b887e18efb9a9a06b4cebc72372869b7da6c347c129dee2b46a0f279ff066b01c76208c2a052af75977c722a2ccee}") private String publicKey; @Value("${safety-eval.gbs-user-sync.fail-fast:true}") private boolean gbsUserSyncFailFast; + @Autowired + private AccountMapper accountMapper; @Override public OrgInfoEntity save(OrgInfoEntity entity) { @@ -71,6 +77,12 @@ public class OrgInfoGatewayImpl implements OrgInfoGateway { List orgInfoDOS = orgInfoMapper.selectList(new LambdaQueryWrapper() .eq(OrgInfoDO::getCreateId, entity.getRegisterUserId()).last("limit 1")); if (!CollectionUtils.isEmpty(orgInfoDOS)) { + if (entity.getId() != null) { + OrgInfoDO aDo = toDO(entity); + InsertFieldDefaults.applyForUpdate(aDo); + orgInfoMapper.updateById(aDo); + toEntity(aDo); + } return toEntity(orgInfoDOS.get(0)); } } @@ -258,6 +270,27 @@ public class OrgInfoGatewayImpl implements OrgInfoGateway { }); } + @Override + public OrgInfoEntity getByAccount(String data) { + AccountDO accountDO = accountMapper.selectOne(new LambdaQueryWrapper() + .eq(AccountDO::getAccount, data) + .eq(AccountDO::getDeleteEnum, "false") + .eq(AccountDO::getTenantId, tenantId)); + if (accountDO == null || accountDO.getId() == null) { + return null; + } + LambdaQueryWrapper lqw = new LambdaQueryWrapper() + .eq(OrgInfoDO::getCreateId, accountDO.getId()) + .eq(OrgInfoDO::getDeleteEnum, "false") + .eq(OrgInfoDO::getTenantId, tenantId); + lqw.last("limit 1").orderByDesc(OrgInfoDO::getId); + List dataObject = orgInfoMapper.selectList(lqw); + if (dataObject.isEmpty()) { + return null; + } + return toEntity(dataObject.get(0)); + } + private void syncGbsUser(String action, Runnable runnable) { try { runnable.run(); @@ -271,6 +304,7 @@ public class OrgInfoGatewayImpl implements OrgInfoGateway { private OrgInfoDO toDO(OrgInfoEntity entity) { OrgInfoDO dataObject = new OrgInfoDO(); + dataObject.setId(entity.getId()); dataObject.setUnitName(entity.getUnitName()); dataObject.setCreditCode(entity.getCreditCode()); dataObject.setSafetyIndustryCategoryCode(entity.getSafetyIndustryCategoryCode()); diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/support/InsertFieldDefaults.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/support/InsertFieldDefaults.java index d7885c0..93c656f 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/support/InsertFieldDefaults.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/support/InsertFieldDefaults.java @@ -52,7 +52,7 @@ public final class InsertFieldDefaults { } Long tenantId = AuthUserContextAdapter.getCurrentTenantId(); if (tenantId == null) { - tenantId = 2069596397920849920L; + tenantId = 2067161116369793024L; } setIfNull(dataObject, "createId", userId); setIfNull(dataObject, "updateId", userId);