diff --git a/start/src/main/resources/bootstrap.yml b/start/src/main/resources/bootstrap.yml index ea7eb2ef..f467a2cb 100644 --- a/start/src/main/resources/bootstrap.yml +++ b/start/src/main/resources/bootstrap.yml @@ -3,8 +3,8 @@ spring: import: # - classpath:nacos.yml # - classpath:sdk.yml -# - classpath:nacos-prod.yml -# - classpath:sdk-prod.yml - - classpath:nacos-prod2.yml - - classpath:sdk-prod2.yml + - classpath:nacos-prod.yml + - classpath:sdk-prod.yml +# - classpath:nacos-prod2.yml +# - classpath:sdk-prod2.yml - classpath:swagger.yml diff --git a/web-adapter/src/main/java/com/zcloud/basic/info/facade/ZcloudCorpFacadeImpl.java b/web-adapter/src/main/java/com/zcloud/basic/info/facade/ZcloudCorpFacadeImpl.java index c05bf2bd..ae3570b1 100644 --- a/web-adapter/src/main/java/com/zcloud/basic/info/facade/ZcloudCorpFacadeImpl.java +++ b/web-adapter/src/main/java/com/zcloud/basic/info/facade/ZcloudCorpFacadeImpl.java @@ -103,4 +103,9 @@ public class ZcloudCorpFacadeImpl implements ZcloudCorpFacade { return Response.buildSuccess(); } + @Override + public Response saveAdminCorp() { + return null; + } + } diff --git a/web-adapter/src/main/java/com/zcloud/basic/info/web/DepartmentController.java b/web-adapter/src/main/java/com/zcloud/basic/info/web/DepartmentController.java index 33524ff4..4342070d 100644 --- a/web-adapter/src/main/java/com/zcloud/basic/info/web/DepartmentController.java +++ b/web-adapter/src/main/java/com/zcloud/basic/info/web/DepartmentController.java @@ -104,6 +104,12 @@ public class DepartmentController { return MultiResponse.of(departmentService.listAllTreeByCorpType(qry)); } + @ApiOperation("所有企业下部门树状所有数据根据企业类型和企业id集合") + @PostMapping("/listAllTreeByCorpTypeAndCorpIds") + public MultiResponse listAllTreeByCorpTypeAndCorpIds(@RequestBody DepartmentTreeCorpQry qry) { + return MultiResponse.of(departmentService.listAllTreeByCorpTypeAndCorpIds(qry)); + } + } diff --git a/web-app/src/main/java/com/zcloud/basic/info/command/UserAddExe.java b/web-app/src/main/java/com/zcloud/basic/info/command/UserAddExe.java index 67ea15b1..3551cc69 100644 --- a/web-app/src/main/java/com/zcloud/basic/info/command/UserAddExe.java +++ b/web-app/src/main/java/com/zcloud/basic/info/command/UserAddExe.java @@ -208,6 +208,10 @@ public class UserAddExe { } catch (Exception e) { log.error("用户变更记录保存失败(不影响用户主体), userId: {}, error: {}", userE.getId(), e.getMessage(), e); } + String userAvatarUrl = userE.getUserAvatarUrl(); + if (userAvatarUrl == null || userAvatarUrl.trim().isEmpty()) { + log.info("新增用户未传人脸URL,跳过大华同步, userId={}", userE.getId()); + } else { log.info("========== 新增用户-开始查询大华是否已存在该人员 =========="); Integer queryDahuaId = null; String queryDahuaCode = null; @@ -259,7 +263,7 @@ public class UserAddExe { } } else { log.info("大华未找到该人员,开始执行 syncDaHuaPerson 新增大华人员"); - DaHuaSyncResult syncResult = syncDaHuaPerson(userE); + DaHuaSyncResult syncResult = syncDaHuaPerson(userE, userAvatarUrl, true); if (syncResult.dahuaId != null) { try { UserE updateDahua = new UserE(); @@ -277,6 +281,7 @@ public class UserAddExe { log.info("大华同步未返回dahuaId,跳过写回操作, userId={}, dahuaCode={}", userE.getId(), syncResult.dahuaCode); } } + } } catch (BizException e) { log.error("新增用户业务异常: {}", e.getMessage(), e); throw e; diff --git a/web-app/src/main/java/com/zcloud/basic/info/command/UserImportExe.java b/web-app/src/main/java/com/zcloud/basic/info/command/UserImportExe.java index 907de891..14143e57 100644 --- a/web-app/src/main/java/com/zcloud/basic/info/command/UserImportExe.java +++ b/web-app/src/main/java/com/zcloud/basic/info/command/UserImportExe.java @@ -10,6 +10,7 @@ import com.jjb.saas.system.client.dept.facade.DeptFacade; import com.jjb.saas.system.client.role.facade.RoleFacade; import com.jjb.saas.system.client.role.response.RoleCO; import com.jjb.saas.system.client.user.facade.UserFacade; +import com.zcloud.basic.info.domain.enums.UserRZFlagEnum; import com.zcloud.basic.info.domain.gateway.DepartmentGateway; import com.zcloud.basic.info.domain.gateway.PostGateway; import com.zcloud.basic.info.domain.gateway.UserEmploymentLogGateway; @@ -412,6 +413,7 @@ public class UserImportExe { user.setPhone(importEntity.getUsername()); user.setUserType(corpFlag); user.setMainCorpFlag(0); + user.setRzFlag(UserRZFlagEnum.YES.getCode()); user.setRoleId(roleId); user.setDepartmentId(departmentId); user.setPostId(postId); diff --git a/web-app/src/main/java/com/zcloud/basic/info/command/UserUpdateExe.java b/web-app/src/main/java/com/zcloud/basic/info/command/UserUpdateExe.java index c9835482..386f3f68 100644 --- a/web-app/src/main/java/com/zcloud/basic/info/command/UserUpdateExe.java +++ b/web-app/src/main/java/com/zcloud/basic/info/command/UserUpdateExe.java @@ -113,10 +113,20 @@ public class UserUpdateExe { log.info("【getInfoById查询结果】dahuaId={}, dahuaCode={}, name={}, userIdCard={}", userDO.getDahuaId(), userDO.getDahuaCode(), userDO.getName(), userDO.getUserIdCard()); - if (userUpdateCmd.getUserAvatarUrl() != null && !userUpdateCmd.getUserAvatarUrl().trim().isEmpty()) { - syncDaHuaInfo(userUpdateCmd, userDO, userE); + String requestUserAvatarUrl = userUpdateCmd.getUserAvatarUrl(); + String userAvatarUrl = requestUserAvatarUrl; + if (userAvatarUrl == null || userAvatarUrl.trim().isEmpty()) { + userAvatarUrl = userDO.getUserAvatarUrl(); + } + if (userAvatarUrl != null && !userAvatarUrl.trim().isEmpty()) { + userUpdateCmd.setUserAvatarUrl(userAvatarUrl); + try { + syncDaHuaInfo(userUpdateCmd, userDO, userE); + } finally { + userUpdateCmd.setUserAvatarUrl(requestUserAvatarUrl); + } } else { - log.info("userAvatarUrl为空,跳过大华信息同步, userId={}", userDO.getId()); + log.info("请求参数和数据库中的userAvatarUrl均为空,跳过大华信息同步, userId={}", userDO.getId()); } UserE oldUserE = new UserE(); @@ -902,8 +912,42 @@ public class UserUpdateExe { private boolean updateDaHuaUserFace(UserDO userDO, Integer dahuaId, String userAvatarUrl) { Map personMap = new HashMap<>(); + String plainIdCard = decodeUserIdCard(userDO.getUserIdCard()); + String dahuaCode = getDaHuaCodeForSave(userDO); + personMap.put("id", dahuaId); - personMap.put("departmentId", userDO.getCorpinfoId()); + personMap.put("name", userDO.getName()); + personMap.put("code", dahuaCode); + personMap.put("paperType", 111); + personMap.put("paperNumber", plainIdCard); + personMap.put("phone", userDO.getPhone()); + personMap.put("departmentId", userDO.getCorpinfoId() != null ? userDO.getCorpinfoId() : 1L); + personMap.put("nationName", userDO.getNationName() != null && !userDO.getNationName().trim().isEmpty() + ? userDO.getNationName() : "汉族"); + try { + personMap.put("nation", userDO.getNation() != null && !userDO.getNation().trim().isEmpty() + ? Integer.parseInt(userDO.getNation().trim()) : 1); + } catch (NumberFormatException e) { + log.warn("同步大华人脸时民族编码转换失败,使用默认值1, userId={}, nation={}", + userDO.getId(), userDO.getNation()); + personMap.put("nation", 1); + } + personMap.put("service", "evo-thirdParty"); + + Integer age = null; + Integer sex = null; + if (plainIdCard != null && plainIdCard.length() == 18) { + try { + LocalDate birthDate = LocalDate.parse(plainIdCard.substring(6, 14), + DateTimeFormatter.ofPattern("yyyyMMdd")); + age = Period.between(birthDate, LocalDate.now()).getYears(); + sex = Integer.parseInt(plainIdCard.substring(16, 17)) % 2 == 0 ? 2 : 1; + } catch (Exception e) { + log.warn("同步大华人脸时解析年龄和性别失败, userId={}", userDO.getId()); + } + } + personMap.put("age", age); + personMap.put("sex", sex); addDaHuaFace(personMap, userAvatarUrl); DaHuaPersonSyncCmd daHuaCmd = cn.hutool.core.bean.BeanUtil.toBean(personMap, DaHuaPersonSyncCmd.class); @@ -914,6 +958,8 @@ public class UserUpdateExe { (List) biosignatures; daHuaCmd.setPersonBiosignatures(faceList); } + log.info("同步大华人脸更新参数已补全, userId={}, dahuaId={}, name={}, departmentId={}", + userDO.getId(), dahuaId, daHuaCmd.getName(), daHuaCmd.getDepartmentId()); try { SingleResponse updateResponse = zcloudDaHuaFacade.updatePerson(daHuaCmd); diff --git a/web-app/src/main/java/com/zcloud/basic/info/command/query/DepartmentQueryExe.java b/web-app/src/main/java/com/zcloud/basic/info/command/query/DepartmentQueryExe.java index 1917a2df..3ce211c7 100644 --- a/web-app/src/main/java/com/zcloud/basic/info/command/query/DepartmentQueryExe.java +++ b/web-app/src/main/java/com/zcloud/basic/info/command/query/DepartmentQueryExe.java @@ -2,6 +2,7 @@ package com.zcloud.basic.info.command.query; import cn.hutool.core.collection.CollUtil; import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.exception.BizException; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.jjb.saas.framework.auth.utils.AuthContext; import com.zcloud.basic.info.command.convertor.DepartmentCoConvertor; @@ -204,6 +205,30 @@ public class DepartmentQueryExe { return result2; } + public Collection listAllTreeByCorpTypeAndCorpIds(DepartmentTreeCorpQry qry) { + Map params = PageQueryHelper.toHashMap(qry); + List enterpriseType = CorpTypeEnum.getCodesByEnterpriseType(qry.getEnterpriseType()); + if (CollUtil.isNotEmpty(enterpriseType)) { + params.put("inType", enterpriseType); + } + if (CollUtil.isNotEmpty(qry.getCorpinfoIdList())) { + try { + List corpinfoIdList = qry.getCorpinfoIdList().stream() + .map(StringUtils::trim) + .map(Long::valueOf) + .collect(Collectors.toList()); + params.put("corpinfoIdList", corpinfoIdList); + } catch (NumberFormatException e) { + throw new BizException("企业id格式错误"); + } + } + List pageResponse = departmentRepository.listAllTreeByCorpTypeAndCorpIds(params); + if (CollUtil.isEmpty(pageResponse)) { + return Collections.emptyList(); + } + return getDepartmentAllTree(pageResponse); + } + public Collection listTreeNopermission(DepartmentTreeQry departmentQry) { if (Objects.isNull(departmentQry.getEqCorpinfoId())) { diff --git a/web-app/src/main/java/com/zcloud/basic/info/service/DepartmentServiceImpl.java b/web-app/src/main/java/com/zcloud/basic/info/service/DepartmentServiceImpl.java index cbc8cc1b..89108c9c 100644 --- a/web-app/src/main/java/com/zcloud/basic/info/service/DepartmentServiceImpl.java +++ b/web-app/src/main/java/com/zcloud/basic/info/service/DepartmentServiceImpl.java @@ -95,6 +95,11 @@ public class DepartmentServiceImpl implements DepartmentServiceI { } + @Override + public Collection listAllTreeByCorpTypeAndCorpIds(DepartmentTreeCorpQry qry) { + return departmentQueryExe.listAllTreeByCorpTypeAndCorpIds(qry); + } + @Override @Cacheable(value = "deptAllNameCache", key="'deptId:'+#deptId") public String getFullNameForList(Long deptId, List list) { diff --git a/web-client/src/main/java/com/zcloud/basic/info/api/DepartmentServiceI.java b/web-client/src/main/java/com/zcloud/basic/info/api/DepartmentServiceI.java index 18a51a56..53b0c35e 100644 --- a/web-client/src/main/java/com/zcloud/basic/info/api/DepartmentServiceI.java +++ b/web-client/src/main/java/com/zcloud/basic/info/api/DepartmentServiceI.java @@ -45,6 +45,8 @@ public interface DepartmentServiceI { Collection listAllTreeByCorpType(DepartmentTreeQry qry); + Collection listAllTreeByCorpTypeAndCorpIds(DepartmentTreeCorpQry qry); + Long addHumanUserDept(DepartmentAddCmd cmd); Collection listTreeNopermission(DepartmentTreeQry qry); diff --git a/web-client/src/main/java/com/zcloud/basic/info/dto/DepartmentTreeCorpQry.java b/web-client/src/main/java/com/zcloud/basic/info/dto/DepartmentTreeCorpQry.java new file mode 100644 index 00000000..c1cc49a9 --- /dev/null +++ b/web-client/src/main/java/com/zcloud/basic/info/dto/DepartmentTreeCorpQry.java @@ -0,0 +1,15 @@ +package com.zcloud.basic.info.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = true) +public class DepartmentTreeCorpQry extends DepartmentTreeQry { + + @ApiModelProperty(value = "企业id集合", name = "corpinfoIdList") + private List corpinfoIdList; +} diff --git a/web-domain/src/main/java/com/zcloud/basic/info/domain/model/UserE.java b/web-domain/src/main/java/com/zcloud/basic/info/domain/model/UserE.java index 8a7dd2c4..f6f027d4 100644 --- a/web-domain/src/main/java/com/zcloud/basic/info/domain/model/UserE.java +++ b/web-domain/src/main/java/com/zcloud/basic/info/domain/model/UserE.java @@ -5,8 +5,11 @@ import com.alibaba.cola.exception.BizException; import com.jjb.saas.framework.auth.utils.AuthContext; import com.jjb.saas.framework.domain.model.BaseE; import com.jjb.saas.framework.utils.DataEncryptDecryptUtil; +import com.zcloud.basic.info.domain.enums.CorpTypeEnum; import com.zcloud.basic.info.domain.enums.UserEmploymentFlagEnum; import com.zcloud.basic.info.domain.enums.UserFlowFlagEnum; +import com.zcloud.basic.info.domain.enums.UserRZFlagEnum; +import com.zcloud.basic.info.domain.enums.UserTypeEnum; import com.zcloud.gbscommon.excelEntity.UserExcelExportEntity; import com.zcloud.gbscommon.utils.ExcelUtils; import com.zcloud.gbscommon.utils.MD5; @@ -185,6 +188,9 @@ public class UserE extends BaseE { userE.setTenantId(!ObjectUtils.isEmpty(userE.getTenantId()) ? userE.getTenantId() : tenantId); userE.setCorpinfoId(!ObjectUtils.isEmpty(userE.getCorpinfoId()) ? userE.getCorpinfoId() : tenantId); userE.setEmploymentFlag(1); + if (userE.getRzFlag() == null) { + userE.setRzFlag(UserRZFlagEnum.NO.getCode()); + } userE.setPassword(defaultPassword); } diff --git a/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/mapper/DepartmentMapper.java b/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/mapper/DepartmentMapper.java index 3907b4da..71023138 100644 --- a/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/mapper/DepartmentMapper.java +++ b/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/mapper/DepartmentMapper.java @@ -29,5 +29,7 @@ public interface DepartmentMapper extends BaseMapper { IPage selectDeptPage(IPage iPage, @Param("ew") QueryWrapper queryWrapper, String menuPerms); List listAllTreeByCorpType(Map parmas); + + List listAllTreeByCorpTypeAndCorpIds(Map params); } diff --git a/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/DepartmentRepository.java b/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/DepartmentRepository.java index bb3da4b4..bb9ef728 100644 --- a/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/DepartmentRepository.java +++ b/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/DepartmentRepository.java @@ -40,6 +40,8 @@ public interface DepartmentRepository extends BaseRepository { List listAllTreeByCorpType(Map parmas); + List listAllTreeByCorpTypeAndCorpIds(Map params); + void deleteByCorpInfoId(Long corpInfoId); } diff --git a/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/impl/DepartmentRepositoryImpl.java b/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/impl/DepartmentRepositoryImpl.java index 917e6638..60294e3e 100644 --- a/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/impl/DepartmentRepositoryImpl.java +++ b/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/impl/DepartmentRepositoryImpl.java @@ -136,6 +136,11 @@ public class DepartmentRepositoryImpl extends BaseRepositoryImpl listAllTreeByCorpTypeAndCorpIds(Map params) { + return departmentMapper.listAllTreeByCorpTypeAndCorpIds(params); + } + @Override public boolean existsByName(Long parentId,String name, Long id) { QueryWrapper queryWrapper = new QueryWrapper<>(); diff --git a/web-infrastructure/src/main/resources/mapper/DepartmentMapper.xml b/web-infrastructure/src/main/resources/mapper/DepartmentMapper.xml index 46138c14..33f0b1b4 100644 --- a/web-infrastructure/src/main/resources/mapper/DepartmentMapper.xml +++ b/web-infrastructure/src/main/resources/mapper/DepartmentMapper.xml @@ -30,5 +30,26 @@ order by c.corp_order, c.create_time desc,d.dep_order, d.create_time desc + +