From 0576ed223a0749a86935d54d48e6df9f1f257d3d Mon Sep 17 00:00:00 2001 From: zhangchenbiao Date: Mon, 5 Jun 2023 11:34:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=81=E4=B8=9A=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coolstore-partner-common.iml | 17 +- coolstore-partner-common/pom.xml | 4 + .../cool/store/constants/CommonConstants.java | 8 +- .../cool/store/enums/StoreIsDeleteEnum.java | 35 + .../java/com/cool/store/utils/RedisUtil.java | 174 ++++ .../coolstore-partner-dao.iml | 15 + .../cool/store/dao/EnterpriseConfigDAO.java | 4 +- .../com/cool/store/dao/EnterpriseDAO.java | 4 +- .../com/cool/store/dao/EnterpriseUserDAO.java | 59 +- .../dao/EnterpriseUserDepartmentDAO.java | 61 ++ .../cool/store/dao/EnterpriseUserRoleDAO.java | 32 +- .../com/cool/store/dao/LoginRecordDAO.java | 4 +- .../java/com/cool/store/dao/RegionDAO.java | 68 +- .../java/com/cool/store/dao/StoreDAO.java | 59 +- .../cool/store/dao/SubordinateMappingDAO.java | 12 +- .../com/cool/store/dao/SysDepartmentDAO.java | 25 +- .../java/com/cool/store/dao/SysRoleDAO.java | 4 +- .../com/cool/store/dao/SysRoleMenuDAO.java | 4 +- .../cool/store/dao/UserAuthMappingDAO.java | 33 +- .../cool/store/dao/UserRegionMappingDAO.java | 14 +- .../EnterpriseUserDepartmentMapper.java | 39 + .../store/mapper/EnterpriseUserMapper.java | 13 + .../mapper/EnterpriseUserRoleMapper.java | 8 + .../com/cool/store/mapper/RegionMapper.java | 21 + .../com/cool/store/mapper/StoreMapper.java | 15 + .../mapper/SubordinateMappingMapper.java | 2 + .../store/mapper/SysDepartmentMapper.java | 7 + .../store/mapper/UserAuthMappingMapper.java | 11 +- .../store/mapper/UserRegionMappingMapper.java | 2 + .../mapper/EnterpriseConfigMapper.xml | 2 +- .../mapper/EnterpriseUserDepartmentMapper.xml | 118 +++ .../resources/mapper/EnterpriseUserMapper.xml | 215 ++++ .../mapper/EnterpriseUserRoleMapper.xml | 33 + .../main/resources/mapper/RegionMapper.xml | 201 ++++ .../src/main/resources/mapper/StoreMapper.xml | 185 +++- .../mapper/SubordinateMappingMapper.xml | 11 + .../resources/mapper/SysDepartmentMapper.xml | 26 + .../mapper/UserAuthMappingMapper.xml | 41 + .../mapper/UserRegionMappingMapper.xml | 7 + .../resources/mybatis-generator.properties | 2 +- .../coolstore-partner-model.iml | 17 +- .../com/cool/store/dto/DatasourceInfoDTO.java | 6 + .../com/cool/store/dto/dept/SyncTreeNode.java | 21 + .../com/cool/store/dto/region/RegionDTO.java | 99 ++ .../com/cool/store/dto/region/RegionNode.java | 100 ++ .../dto/region/RegionStoreNumMsgDTO.java | 21 + .../cool/store/dto/region/RegionSyncDTO.java | 25 + .../entity/EnterpriseUserDepartmentDO.java | 43 + .../java/com/cool/store/entity/RegionDO.java | 23 + .../java/com/cool/store/entity/StoreDO.java | 2 +- .../cool/store/entity/SysDepartmentDO.java | 5 + .../cool/store/entity/UserAuthMappingDO.java | 17 +- .../cool/store/vo/oss/OssUploadConfigVO.java | 42 + .../coolstore-partner-service.iml | 17 +- .../store/config/redis/RedisUtilConfig.java | 32 + .../com/cool/store/http/ISVHttpRequest.java | 50 + .../store/service/EnterpriseInitService.java | 2 + .../store/service/EnterpriseUserService.java | 10 + .../com/cool/store/service/RegionService.java | 21 + .../impl/EnterpriseInitServiceImpl.java | 974 +++++++++++++++++- .../impl/EnterpriseUserServiceImpl.java | 31 + .../store/service/impl/RegionServiceImpl.java | 151 +++ .../coolstore-partner-webb.iml | 17 +- coolstore-partner-webb/pom.xml | 2 - .../config/datasource/DynamicDataSource.java | 10 +- .../DynamicDataSourceServiceImpl.java | 12 +- .../store/controller/OssClientController.java | 44 +- .../main/resources/application-ab.properties | 8 +- .../main/resources/application-dev.properties | 14 +- .../resources/application-local.properties | 20 +- .../resources/application-test.properties | 10 +- .../coolstore-partner-webc.iml | 17 +- .../main/resources/application-ab.properties | 10 +- .../main/resources/application-dev.properties | 14 +- .../resources/application-local.properties | 12 +- .../resources/application-test.properties | 10 +- pom.xml | 10 + 77 files changed, 3365 insertions(+), 149 deletions(-) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/StoreIsDeleteEnum.java create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtil.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserDepartmentDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserDepartmentMapper.java create mode 100644 coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserDepartmentMapper.xml create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/dept/SyncTreeNode.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionNode.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionStoreNumMsgDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionSyncDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/EnterpriseUserDepartmentDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/oss/OssUploadConfigVO.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/RegionService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/impl/RegionServiceImpl.java diff --git a/coolstore-partner-common/coolstore-partner-common.iml b/coolstore-partner-common/coolstore-partner-common.iml index 9990d5a85..5c5e2dadc 100644 --- a/coolstore-partner-common/coolstore-partner-common.iml +++ b/coolstore-partner-common/coolstore-partner-common.iml @@ -63,7 +63,6 @@ - @@ -90,5 +89,21 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-common/pom.xml b/coolstore-partner-common/pom.xml index ac4a10450..2242999e3 100644 --- a/coolstore-partner-common/pom.xml +++ b/coolstore-partner-common/pom.xml @@ -82,6 +82,10 @@ com.aliyun tea-openapi + + org.springframework.boot + spring-boot-starter-data-redis + \ No newline at end of file diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java index 88c3af802..a848b5157 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java @@ -8,8 +8,6 @@ package com.cool.store.constants; */ public class CommonConstants { - public static final String DEFAULT_DB = "coolcollege_intelligent_config"; - public static final String REQUEST_ID = "requestId"; public static final String ACCESS_TOKEN_KEY = "access_token"; @@ -71,6 +69,9 @@ public class CommonConstants { */ public static final String MaxReconsumeTimes = "2"; + public static final String ZERO_STR = "0"; + public static final String DELETE_DEPT_ID = "-1"; + public static final String AI_USER_ID = "a100000001"; public static final int ZERO = 0; public static final int ONE = 1; @@ -94,9 +95,6 @@ public class CommonConstants { public static final int HUNDRED = 100; - - - public static final String ZERO_STR = "0"; public static final String ONE_STR = "1"; public static final String TWO_STR = "2"; public static final String THREE_STR = "3"; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/StoreIsDeleteEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/StoreIsDeleteEnum.java new file mode 100644 index 000000000..28d189e8c --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/StoreIsDeleteEnum.java @@ -0,0 +1,35 @@ +package com.cool.store.enums; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 门店删除状态枚举 + */ +public enum StoreIsDeleteEnum { + EFFECTIVE("effective"),//有效 + + INVALID("invalid"),//无效 + + IGNORED("ignored"), //忽略 + + UN_SYNC("unSync"); // 未同步 + + private final String value; + + private static final Map map = Arrays.stream(values()).collect(Collectors.toMap(StoreIsDeleteEnum::getValue, Function.identity())); + + StoreIsDeleteEnum(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public static StoreIsDeleteEnum parse(int value) { + return map.get(value); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtil.java new file mode 100644 index 000000000..d8b321374 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtil.java @@ -0,0 +1,174 @@ +package com.cool.store.utils; + +import com.cool.store.constants.CommonConstants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +/** + * redis工具类 + * + * @author Aaron + * @ClassName RedisUtil + * @Description redis工具类 + */ +@Repository +@Slf4j +public class RedisUtil { + + @Resource(name = "customizeTemplate") + protected RedisTemplate redisTemplate; + + + public void put(String key, String hashKey, Map value) { + HashOperations hash = redisTemplate.opsForHash(); + hash.put(key, hashKey, value); + } + + public void put(String key, String hashKey, Object value) { + HashOperations hash = redisTemplate.opsForHash(); + hash.put(key, hashKey, value); + } + + + public Boolean haseHashKey(String key, String hashKey) { + HashOperations hash = redisTemplate.opsForHash(); + Boolean hase = hash.hasKey(key, hashKey); + return hase == null ? Boolean.FALSE : hase; + } + + + public Boolean putIfAbsent(String key, String hashKey, Object value) { + HashOperations hash = redisTemplate.opsForHash(); + return hash.putIfAbsent(key, hashKey, value); + } + + public void putAll(String key, Map value) { + HashOperations hash = redisTemplate.opsForHash(); + hash.putAll(key, value); + } + + public void putAll(String key, Map value, Long time, TimeUnit timeUnit) { + HashOperations hash = redisTemplate.opsForHash(); + hash.putAll(key, value); + redisTemplate.expire(key, time, timeUnit); + } + + public void put(String key, Object value, Long time, TimeUnit timeUnit) { + redisTemplate.opsForValue().set(key, value, time, timeUnit); + } + + + public Map entries(String key) { + HashOperations hash = redisTemplate.opsForHash(); + return hash.entries(key); + } + + public Object get(String key, String hashKey) { + HashOperations hash = redisTemplate.opsForHash(); + return hash.get(key, hashKey); + } + + public void flushDb() { + redisTemplate.getConnectionFactory().getConnection().flushDb(); + log.info("redis flushDb is ok."); + } + + public void delete(String key, Object hashKey) { + HashOperations hash = redisTemplate.opsForHash(); + hash.delete(key, hashKey); + } + + public Collection multiGet(String key, Collection hashKeys) { + HashOperations hash = redisTemplate.opsForHash(); + return hash.multiGet(key, hashKeys); + } + + public Set keys(String key) { + HashOperations hash = redisTemplate.opsForHash(); + return hash.keys(key); + } + + public Long size(String key) { + HashOperations hash = redisTemplate.opsForHash(); + return hash.size(key); + } + + public Collection values(String key) { + HashOperations hash = redisTemplate.opsForHash(); + return hash.values(key); + } + + public RedisOperations getOperations() { + HashOperations hash = redisTemplate.opsForHash(); + return hash.getOperations(); + } + + public String hashGetString(String key, String hashKey) { + HashOperations hash = redisTemplate.opsForHash(); + Object value = hash.get(key, hashKey); + return value == null ? null : String.valueOf(value); + } + + public void hashSet(String key, String field, String value) { + put(key, field, value); + } + + public void lPush(String key, String value) { + redisTemplate.opsForList().leftPush(key, value); + } + + public String rPop(String key) { + return (String)redisTemplate.opsForList().rightPop(key); + } + + /** + * 检查list是否为空 + * @param key + * @return + */ + public Boolean listExists(String key) { + return redisTemplate.opsForList().size(key) > CommonConstants.ZERO; + } + + /** + * set集合add + * @param key + * @param value + * @return + */ + public Long setAdd(String key, String value) { + return redisTemplate.opsForSet().add(key, value); + } + + /** + * set集合校验value是否存在 + * @param key + * @param value + * @return + */ + public Boolean setIsMember(String key, String value) { + return redisTemplate.opsForSet().isMember(key, value); + } + + /** + * set集合长度 + * @param key + * @return + */ + public Long setSize(String key) { + return redisTemplate.opsForSet().size(key); + } + + public void delete(String key) { + redisTemplate.delete(key); + } +} diff --git a/coolstore-partner-dao/coolstore-partner-dao.iml b/coolstore-partner-dao/coolstore-partner-dao.iml index c8c933214..ec937c2e7 100644 --- a/coolstore-partner-dao/coolstore-partner-dao.iml +++ b/coolstore-partner-dao/coolstore-partner-dao.iml @@ -112,6 +112,21 @@ + + + + + + + + + + + + + + + diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseConfigDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseConfigDAO.java index 07a50d541..e53265292 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseConfigDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseConfigDAO.java @@ -3,7 +3,7 @@ package com.cool.store.dao; import com.cool.store.mapper.EnterpriseConfigMapper; import com.cool.store.entity.EnterpriseConfigDO; import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; +import org.springframework.stereotype.Repository; import javax.annotation.Resource; import java.util.List; @@ -14,7 +14,7 @@ import java.util.List; * @Description: * @date 2023-05-18 11:15 */ -@Service +@Repository public class EnterpriseConfigDAO { @Resource diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseDAO.java index d049a40ca..b98e1e74c 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseDAO.java @@ -3,7 +3,7 @@ package com.cool.store.dao; import com.cool.store.entity.EnterpriseDO; import com.cool.store.mapper.EnterpriseMapper; import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; +import org.springframework.stereotype.Repository; import javax.annotation.Resource; @@ -13,7 +13,7 @@ import javax.annotation.Resource; * @Description: * @date 2023-05-23 13:52 */ -@Service +@Repository public class EnterpriseDAO { @Resource diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserDAO.java index 88d012fb7..040fe350a 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserDAO.java @@ -1,23 +1,24 @@ package com.cool.store.dao; -import com.cool.store.dto.enterprise.EnterpriseUserDTO; import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.enums.UserSelectRangeEnum; +import com.cool.store.enums.UserStatusEnum; import com.cool.store.mapper.EnterpriseUserMapper; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Service; +import org.springframework.stereotype.Repository; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * @author zhangchenbiao * @date 2023-05-19 02:58 */ -@Service +@Repository public class EnterpriseUserDAO { @Resource @@ -94,4 +95,54 @@ public class EnterpriseUserDAO { } return enterpriseUserMapper.listByRegionIdList(eid, regionIdList); } + + public Boolean insertEnterpriseUser(String eid, EnterpriseUserDO entity) { + if(Objects.isNull(entity.getUserStatus())){ + entity.setUserStatus(UserStatusEnum.NORMAL.getCode()); + } + if(Objects.isNull(entity.getActive())){ + entity.setActive(true); + } + if(StringUtils.isBlank(entity.getThirdOaUniqueFlag())){ + entity.setThirdOaUniqueFlag(null); + } + entity.setSubordinateRange(UserSelectRangeEnum.ALL.getCode()); + if (StringUtils.isBlank(entity.getUnionid()) || StringUtils.isBlank(entity.getUserId())) { + return false; + } + if (StringUtils.isBlank(entity.getName())) { + entity.setName(entity.getUserId()); + } + enterpriseUserMapper.insertEnterpriseUser(eid, entity); + return true; + } + + public void updateEnterpriseUser(String eid,EnterpriseUserDO enterpriseUser){ + if(StringUtils.isBlank(eid) || Objects.isNull(enterpriseUser)){ + return; + } + enterpriseUserMapper.updateEnterpriseUser(eid, enterpriseUser); + } + + public List getMainAdminUserIds(String eid){ + if(StringUtils.isBlank(eid)){ + return Lists.newArrayList(); + } + return enterpriseUserMapper.getMainAdminUserIds(eid); + } + + public List selectSpecifyNodeUserIds(String eid, String dingDeptId) { + return enterpriseUserMapper.selectSpecifyNodeUserIds(eid,dingDeptId); + } + + public List selectAllUserId(String eid) { + if(StringUtils.isBlank(eid)){ + return Lists.newArrayList(); + } + return enterpriseUserMapper.selectAllUserIds(eid); + } + + public EnterpriseUserDO selectByUserIdIgnoreActive(String enterpriseId, String userId) { + return enterpriseUserMapper.selectByUserIdIgnoreActive(enterpriseId, userId); + } } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserDepartmentDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserDepartmentDAO.java new file mode 100644 index 000000000..9238d90d6 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserDepartmentDAO.java @@ -0,0 +1,61 @@ +package com.cool.store.dao; + +import com.cool.store.entity.EnterpriseUserDepartmentDO; +import com.cool.store.mapper.EnterpriseUserDepartmentMapper; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: EnterpriseUserDepartmentDAO + * @Description: + * @date 2023-06-02 17:08 + */ +@Repository +public class EnterpriseUserDepartmentDAO { + + @Resource + private EnterpriseUserDepartmentMapper enterpriseUserDepartmentMapper; + + public List getIdsByUserId( String eid, String userId){ + if(StringUtils.isAnyBlank(eid, userId)){ + return Lists.newArrayList(); + } + return enterpriseUserDepartmentMapper.getIdsByUserId(eid, userId); + } + + public void deleteByIdList( String eid, @Param("list") List ids){ + if(StringUtils.isBlank(eid) || CollectionUtils.isEmpty(ids)){ + return; + } + enterpriseUserDepartmentMapper.deleteByIdList(eid, ids); + } + + + public List selectUserDeptByUserId(String eid, String userId){ + if(StringUtils.isAnyBlank(eid, userId)){ + return Lists.newArrayList(); + } + return enterpriseUserDepartmentMapper.selectUserDeptByUserId(eid, userId); + } + + public int batchInsert(String eid, List deptUsers){ + if(StringUtils.isBlank(eid) || CollectionUtils.isEmpty(deptUsers)){ + return 0; + } + return enterpriseUserDepartmentMapper.batchInsert(eid, deptUsers); + } + + public List selectUserDeptAuthByUserId(String eid, String userId){ + if(StringUtils.isAnyBlank(eid, userId)){ + return Lists.newArrayList(); + } + return enterpriseUserDepartmentMapper.selectUserDeptAuthByUserId(eid, userId); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserRoleDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserRoleDAO.java index dc6e7211a..b61b2209a 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserRoleDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserRoleDAO.java @@ -4,22 +4,22 @@ import com.cool.store.dto.buser.UserRoleDTO; import com.cool.store.dto.enterprise.EnterpriseUserRole; import com.cool.store.entity.SysRoleDO; import com.cool.store.enums.RoleEnum; -import com.cool.store.mapper.EnterpriseUserMapper; import com.cool.store.mapper.EnterpriseUserRoleMapper; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; +import org.springframework.stereotype.Repository; import javax.annotation.Resource; import java.util.List; +import java.util.Objects; /** * @author zhangchenbiao * @date 2023-05-19 02:59 */ -@Service +@Repository public class EnterpriseUserRoleDAO { @Resource @@ -45,5 +45,31 @@ public class EnterpriseUserRoleDAO { .anyMatch(role-> StringUtils.equals(RoleEnum.MASTER.getRoleEnum(),role.getRoleEnum())); } + public void deleteBatchByPrimaryKey(String enterpriseId, List ids){ + if(StringUtils.isBlank(enterpriseId) || CollectionUtils.isEmpty(ids)){ + return; + } + enterpriseUserRoleMapper.deleteBatchByPrimaryKey(enterpriseId, ids); + } + + public List selectIdsByUserId(String enterpriseId, String userId){ + if(StringUtils.isAnyBlank(enterpriseId, userId)){ + return Lists.newArrayList(); + } + return enterpriseUserRoleMapper.selectIdsByUserId(enterpriseId, userId); + } + + public EnterpriseUserRole selectByUserIdAndRoleId(String enterpriseId, String userId, String roleId){ + if(StringUtils.isAnyBlank(enterpriseId, userId, roleId)){ + return null; + } + return enterpriseUserRoleMapper.selectByUserIdAndRoleId(enterpriseId, userId, roleId); + } + + public void save(String enterpriseId, EnterpriseUserRole entity){ + if(StringUtils.isBlank(enterpriseId) || Objects.isNull(entity)){ + return; + } + } } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LoginRecordDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LoginRecordDAO.java index 504297226..51b62e5f7 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LoginRecordDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LoginRecordDAO.java @@ -2,7 +2,7 @@ package com.cool.store.dao; import com.cool.store.entity.LoginRecordDO; import com.cool.store.mapper.LoginRecordMapper; -import org.springframework.stereotype.Service; +import org.springframework.stereotype.Repository; import javax.annotation.Resource; @@ -12,7 +12,7 @@ import javax.annotation.Resource; * @Description: * @date 2023-05-23 15:48 */ -@Service +@Repository public class LoginRecordDAO { @Resource diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/RegionDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/RegionDAO.java index 6697ccf03..685b01fd3 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/RegionDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/RegionDAO.java @@ -1,7 +1,9 @@ package com.cool.store.dao; import com.cool.store.constants.CommonConstants; +import com.cool.store.dto.region.RegionNode; import com.cool.store.dto.region.RegionPathDTO; +import com.cool.store.dto.region.RegionSyncDTO; import com.cool.store.entity.RegionDO; import com.cool.store.enums.RegionTypeEnum; import com.cool.store.mapper.RegionMapper; @@ -9,8 +11,7 @@ import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Service; +import org.springframework.stereotype.Repository; import javax.annotation.Resource; import java.util.*; @@ -20,7 +21,7 @@ import java.util.stream.Collectors; * @author zhangchenbiao * @date 2023-05-19 02:59 */ -@Service +@Repository public class RegionDAO { @Resource @@ -53,14 +54,14 @@ public class RegionDAO { regionDO.setCreateTime(Calendar.getInstance().getTimeInMillis()); regionDO.setRegionPath("/" + CommonConstants.ROOT_DEPT_ID_STR + "/"); regionDO.setUnclassifiedFlag(CommonConstants.ONE); - insertRoot(enterpriseId, regionDO); + insertRegion(enterpriseId, regionDO); regionDO.setRegionId(regionDO.getId().toString()); return regionDO; } return unclassified; } - public Long insertRoot(String eid, RegionDO regionDO) { + public Long insertRegion(String eid, RegionDO regionDO) { return regionMapper.insertRoot(eid, regionDO); } @@ -104,4 +105,61 @@ public class RegionDAO { return regionPathDTO; }).collect(Collectors.toList()); } + + public RegionDO getByRegionId(String eid, Long regionId){ + if(StringUtils.isBlank(eid) || Objects.isNull(regionId)){ + return null; + } + return regionMapper.getByRegionId(eid, regionId); + } + + public RegionNode getRegionById(String eid, String regionId){ + return regionMapper.getRegionByRegionId(eid, regionId); + } + + public void insertOrUpdate(RegionDO regionDO, String eid){ + regionMapper.insertOrUpdate(regionDO,eid); + } + + public List getSpecifiedRegionIdAndDeptId(String eid, Long parentId){ + return regionMapper.getSpecifiedRegionIdAndDeptId(eid,parentId); + } + + public List getRegionByDingDeptIds(String enterpriseId, List dingDeptIds){ + if(StringUtils.isBlank(enterpriseId) || CollectionUtils.isEmpty(dingDeptIds)){ + return Lists.newArrayList(); + } + return regionMapper.getRegionByDingDeptIds(enterpriseId, dingDeptIds); + } + + public RegionDO getBySynDingDeptId(String eid, String synDingDeptId){ + if(StringUtils.isAnyBlank(eid, synDingDeptId)){ + return null; + } + return regionMapper.getBySynDingDeptId(eid, synDingDeptId); + } + + public Long ignoreInsert(String eid, RegionDO regionDO) { + if(StringUtils.isBlank(eid) || Objects.isNull(regionDO)){ + return 0L; + } + return regionMapper.ignoreInsert(eid, regionDO); + } + + public Integer updateSyncRegion(String eid, RegionDO regionDO){ + if(StringUtils.isBlank(eid) || Objects.isNull(regionDO)){ + return 0; + } + return regionMapper.updateSyncRegion(eid, regionDO); + } + + public void removeRegion(String eid, List regionIds) { + if (regionIds.contains(CommonConstants.UNGROUPED_DEPT_ID)) { + regionIds.remove(CommonConstants.UNGROUPED_DEPT_ID); + } + if(CollectionUtils.isEmpty(regionIds)) { + return; + } + regionMapper.removeRegions(eid, regionIds); + } } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/StoreDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/StoreDAO.java index 2d5a12dd7..c62d1b3b3 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/StoreDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/StoreDAO.java @@ -1,18 +1,18 @@ package com.cool.store.dao; +import com.cool.store.constants.CommonConstants; +import com.cool.store.dto.region.RegionSyncDTO; import com.cool.store.dto.store.StoreAreaDTO; import com.cool.store.entity.StoreDO; +import com.cool.store.enums.StoreIsDeleteEnum; import com.cool.store.mapper.StoreMapper; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Service; +import org.springframework.stereotype.Repository; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; /** * @author zhangchenbiao @@ -20,7 +20,7 @@ import java.util.List; * @Description: * @date 2023-05-31 11:52 */ -@Service +@Repository public class StoreDAO { @Resource @@ -52,10 +52,55 @@ public class StoreDAO { } public List getAllStoreList (String eid,Boolean isReturnList){ - List invalidStores=new ArrayList<>(); if(isReturnList){ return storeMapper.listStoreIdList(eid); } return null; } + + public List getSpecifiedStoreIdsAndDeptId(String eId, Long parentId) { + List storeDOList = storeMapper.getSpecifiedStoreIdsAndDeptId(eId, StoreIsDeleteEnum.EFFECTIVE.getValue(), parentId); + return storeDOList; + } + + public StoreDO getStoreBySynId(String eid, String synId){ + if(StringUtils.isAnyBlank(eid, synId)){ + return null; + } + return storeMapper.getStoreBySynId(eid, synId); + } + + public Integer updateStore(String enterpriseId, StoreDO storeDO) { + fillAddressPoint(storeDO); + return storeMapper.updateStore(enterpriseId, storeDO); + } + + public Integer insertStore(String enterpriseId, StoreDO storeDO) { + fillAddressPoint(storeDO); + return storeMapper.insertStore(enterpriseId, storeDO); + } + + private void fillAddressPoint(StoreDO storeDO){ + if(StringUtils.isNoneBlank(storeDO.getLatitude(), storeDO.getLongitude()) && StringUtils.isBlank(storeDO.getLongitudeLatitude())){ + storeDO.setLongitudeLatitude(storeDO.getLongitude() + CommonConstants.COMMA+ storeDO.getLatitude()); + } + if(StringUtils.isNotBlank(storeDO.getLongitudeLatitude())){ + List list = Arrays.asList(storeDO.getLongitudeLatitude().split(",")); + storeDO.setAddressPoint("POINT("+list.get(0)+" "+list.get(1)+")"); + } + } + + public List getStoreIdByIdList(String eid, List ids){ + if(StringUtils.isBlank(eid) || CollectionUtils.isEmpty(ids)){ + return Lists.newArrayList(); + } + return storeMapper.getStoreIdByIdList(eid, ids); + } + + public Integer deleteStoreByStoreIds(String enterpriseId, List storeIds, String userId, Long updateTime){ + if(StringUtils.isAnyBlank(enterpriseId, userId) || CollectionUtils.isEmpty(storeIds) || Objects.isNull(updateTime)){ + return 0; + } + return storeMapper.deleteStoreByStoreIds(enterpriseId, storeIds, userId, updateTime); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/SubordinateMappingDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/SubordinateMappingDAO.java index 2be64fe78..e9393c6d0 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/SubordinateMappingDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/SubordinateMappingDAO.java @@ -5,7 +5,7 @@ import com.cool.store.mapper.SubordinateMappingMapper; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; +import org.springframework.stereotype.Repository; import javax.annotation.Resource; import java.util.List; @@ -17,7 +17,7 @@ import java.util.stream.Collectors; * @Description: * @date 2023-05-31 14:27 */ -@Service +@Repository public class SubordinateMappingDAO { @Resource @@ -40,4 +40,12 @@ public class SubordinateMappingDAO { subordinateMappingMapper.batchInsertSubordinateMapping(enterpriseId, distinctData); } + public void deletedByUserIds(String enterpriseId,List userIds){ + if (CollectionUtils.isEmpty(userIds)){ + return; + } + List distinctUserIds = userIds.stream().distinct().collect(Collectors.toList()); + subordinateMappingMapper.deletedByUserIds(enterpriseId,distinctUserIds); + } + } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysDepartmentDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysDepartmentDAO.java index 2c86d7f3c..6cf922ad0 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysDepartmentDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysDepartmentDAO.java @@ -1,12 +1,13 @@ package com.cool.store.dao; +import com.cool.store.dto.dept.SyncTreeNode; import com.cool.store.dto.enterprise.QueryDeptChildDTO; import com.cool.store.entity.SysDepartmentDO; import com.cool.store.mapper.SysDepartmentMapper; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; +import org.springframework.stereotype.Repository; import javax.annotation.Resource; import java.util.List; @@ -15,7 +16,7 @@ import java.util.List; * @author zhangchenbiao * @date 2023-05-19 03:00 */ -@Service +@Repository public class SysDepartmentDAO { @Resource @@ -35,4 +36,24 @@ public class SysDepartmentDAO { return sysDepartmentMapper.getDeptChildListByParentId(eid, parentId); } + public void deleteByNotInIds(String enterpriseId, List deptIds){ + if(StringUtils.isBlank(enterpriseId) || CollectionUtils.isEmpty(deptIds)){ + return; + } + sysDepartmentMapper.deleteByNotInIds(deptIds, enterpriseId); + } + + public List getSyncDeptTreeList(String eid) { + if(StringUtils.isBlank(eid)){ + return Lists.newArrayList(); + } + return sysDepartmentMapper.getSyncDeptTreeList(eid); + } + + public List selectAllDepts(String enterpriseId){ + if(StringUtils.isBlank(enterpriseId)){ + return Lists.newArrayList(); + } + return sysDepartmentMapper.selectAll(enterpriseId); + } } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysRoleDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysRoleDAO.java index 98f44add5..4b05fb2e2 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysRoleDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysRoleDAO.java @@ -4,7 +4,7 @@ import com.cool.store.entity.SysRoleDO; import com.cool.store.enums.RoleEnum; import com.cool.store.mapper.SysRoleMapper; import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; +import org.springframework.stereotype.Repository; import javax.annotation.Resource; @@ -12,7 +12,7 @@ import javax.annotation.Resource; * @author zhangchenbiao * @date 2023-05-19 03:00 */ -@Service +@Repository public class SysRoleDAO { @Resource diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysRoleMenuDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysRoleMenuDAO.java index 692fe938f..7ee061ccb 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysRoleMenuDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysRoleMenuDAO.java @@ -1,12 +1,12 @@ package com.cool.store.dao; -import org.springframework.stereotype.Service; +import org.springframework.stereotype.Repository; /** * @author zhangchenbiao * @date 2023-05-19 03:01 */ -@Service +@Repository public class SysRoleMenuDAO { } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/UserAuthMappingDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/UserAuthMappingDAO.java index e9e136cbf..319bfa040 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/UserAuthMappingDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/UserAuthMappingDAO.java @@ -5,16 +5,17 @@ import com.cool.store.mapper.UserAuthMappingMapper; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; +import org.springframework.stereotype.Repository; import javax.annotation.Resource; import java.util.List; +import java.util.Objects; /** * @author zhangchenbiao * @date 2023-05-19 02:54 */ -@Service +@Repository public class UserAuthMappingDAO { @Resource @@ -34,4 +35,32 @@ public class UserAuthMappingDAO { } return userAuthMappingMapper.listUserAuthMappingByUserIds(eid, userIds); } + + public void deleteAuthMappingByIds(String eid, List ids){ + if(StringUtils.isBlank(eid) || CollectionUtils.isEmpty(ids)){ + return; + } + userAuthMappingMapper.deleteAuthMappingByIds(eid, ids); + } + + public List selectIdsByUserId(String eid, String userId){ + if(StringUtils.isAnyBlank(eid, userId)){ + return Lists.newArrayList(); + } + return userAuthMappingMapper.selectIdsByUserId(eid, userId); + } + + public void insertUserAuthMapping(String eid, UserAuthMappingDO auth){ + if(StringUtils.isBlank(eid)|| Objects.isNull(auth)){ + return; + } + userAuthMappingMapper.insertUserAuthMapping(eid, auth); + } + + public void deleteAuthMappingByIdAndType(String eid, List ids, String type){ + if(StringUtils.isAnyBlank(eid, type) || CollectionUtils.isEmpty(ids)){ + return; + } + userAuthMappingMapper.deleteAuthMappingByIdAndType(eid, ids, type); + } } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/UserRegionMappingDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/UserRegionMappingDAO.java index 4a6a488aa..c8041bd21 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/UserRegionMappingDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/UserRegionMappingDAO.java @@ -5,7 +5,7 @@ import com.cool.store.mapper.UserRegionMappingMapper; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; +import org.springframework.stereotype.Repository; import javax.annotation.Resource; import java.util.List; @@ -15,7 +15,7 @@ import java.util.stream.Collectors; * @author zhangchenbiao * @date 2023-05-19 03:00 */ -@Service +@Repository public class UserRegionMappingDAO { @Resource @@ -50,4 +50,14 @@ public class UserRegionMappingDAO { return userRegionMappingMapper.listUserRegionMappingByUserId(enterpriseId, userIds); } + public void deletedByIds(String enterpriseId, List ids){ + if (CollectionUtils.isEmpty(ids)) { + return; + } + List distinctData = ids.stream() + .distinct() + .collect(Collectors.toList()); + userRegionMappingMapper.deletedByIds(enterpriseId, distinctData); + } + } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserDepartmentMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserDepartmentMapper.java new file mode 100644 index 000000000..3a6562562 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserDepartmentMapper.java @@ -0,0 +1,39 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.EnterpriseUserDepartmentDO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author zhangchenbiao + * @date 2023-06-02 05:01 + */ +public interface EnterpriseUserDepartmentMapper { + /** + * + * 默认插入方法,只会给有值的字段赋值 + * 会对传进来的字段做判空处理,如果字段为空,则使用数据库默认字段或者null + * dateTime:2023-06-02 05:01 + */ + int insertSelective(@Param("record") EnterpriseUserDepartmentDO record, @Param("enterpriseId") String enterpriseId); + + /** + * + * 默认更新方法,根据主键更新,不会把null值更新到数据库,避免覆盖之前有值的 + * dateTime:2023-06-02 05:01 + */ + int updateByPrimaryKeySelective(@Param("record") EnterpriseUserDepartmentDO record, @Param("enterpriseId") String enterpriseId); + + + List getIdsByUserId(@Param("eid") String eid, @Param("userId") String userId); + + void deleteByIdList(@Param("eid") String eid, @Param("list") List ids); + + List selectUserDeptByUserId(@Param("eid")String eid, @Param("userId")String userId); + + int batchInsert(@Param("eid")String eid, @Param("deptUsers") List deptUsers); + + + List selectUserDeptAuthByUserId(@Param("eid")String eid, @Param("userId")String userId); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserMapper.java index 81878a531..2b30cf7a3 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserMapper.java @@ -86,4 +86,17 @@ public interface EnterpriseUserMapper { List listByRegionIdList(@Param("eid") String eid, @Param("regionIdList") List regionIdList); + void updateEnterpriseUser(@Param("eid") String eid,@Param("enterpriseUserDO") EnterpriseUserDO enterpriseUserDO); + + + List getMainAdminUserIds(@Param("eid")String eid); + + List selectSpecifyNodeUserIds(@Param("eid") String eid, @Param("dingDeptId") String dingDeptId); + + List selectAllUserIds(@Param("eid") String eid); + + EnterpriseUserDO selectByUserIdIgnoreActive(@Param("enterpriseId") String enterpriseId, @Param("userId") String userId); + + void insertEnterpriseUser(@Param("eid") String eid, @Param("entity") EnterpriseUserDO entity); + } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserRoleMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserRoleMapper.java index 9e7580aec..7ae4490e3 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserRoleMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserRoleMapper.java @@ -39,4 +39,12 @@ public interface EnterpriseUserRoleMapper { List getUserAndRolesByUserId(@Param("eip") String enterpriseId, @Param("userIdList") List userIdList); List listRoleByUserId(@Param("eip") String enterpriseId, @Param("userId") String userId); + + void deleteBatchByPrimaryKey(@Param("eid") String enterpriseId, @Param("ids") List ids); + + List selectIdsByUserId(@Param("eid") String enterpriseId, @Param("userId") String userId); + + EnterpriseUserRole selectByUserIdAndRoleId(@Param("eid") String enterpriseId, @Param("userId") String userId, @Param("roleId") String roleId); + + void save(@Param("eid") String enterpriseId, @Param("entity") EnterpriseUserRole entity); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/RegionMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/RegionMapper.java index 815b64afb..186c9507c 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/RegionMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/RegionMapper.java @@ -1,5 +1,7 @@ package com.cool.store.mapper; +import com.cool.store.dto.region.RegionNode; +import com.cool.store.dto.region.RegionSyncDTO; import com.cool.store.entity.RegionDO; import org.apache.ibatis.annotations.Param; @@ -41,4 +43,23 @@ public interface RegionMapper { List getAllRegion(@Param("eid") String eid); List listStoreRegionByIds(@Param("eid")String enterpriseId, @Param("regionIds")List regionIds); + + RegionDO getByRegionId(@Param("eid") String eid, @Param("regionId") Long regionId); + + RegionNode getRegionByRegionId(@Param("eid") String eid, @Param("regionId") String regionId); + + Integer insertOrUpdate(@Param("record") RegionDO regionDO, @Param("eid") String eid); + + List getSpecifiedRegionIdAndDeptId(@Param("eid") String eid, @Param("parentId") Long parentId); + + List getRegionByDingDeptIds(@Param("eid")String enterpriseId, @Param("list")List dingDeptIds); + + RegionDO getBySynDingDeptId(@Param("eid") String eid, @Param("synDingDeptId") String synDingDeptId); + + Long ignoreInsert(@Param("eid") String eid, @Param("region") RegionDO regionDO); + + Integer updateSyncRegion(@Param("eid") String eid, @Param("item")RegionDO regionDO); + + Integer removeRegions(@Param("eid")String eid,@Param("regionIds") List regionIds); + } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMapper.java index 3fde713aa..f96332d5c 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMapper.java @@ -1,5 +1,6 @@ package com.cool.store.mapper; +import com.cool.store.dto.region.RegionSyncDTO; import com.cool.store.dto.store.StoreAreaDTO; import com.cool.store.entity.StoreDO; import org.apache.ibatis.annotations.Param; @@ -35,4 +36,18 @@ public interface StoreMapper { Integer countStore(@Param("eid") String eid); List listStoreIdList(@Param("eid") String eid); + + List getSpecifiedStoreIdsAndDeptId(@Param("eid") String eid, + @Param("isDelete") String isDelete, + @Param("parentId") Long parentId); + + StoreDO getStoreBySynId(@Param("eid") String eid, @Param("synId") String synId); + + Integer insertStore(@Param("enterpriseId") String enterpriseId, @Param("storeDO") StoreDO storeDO); + + Integer updateStore(@Param("enterpriseId") String enterpriseId, @Param("storeDO") StoreDO storeDO); + + List getStoreIdByIdList(@Param("eid") String eid, @Param("ids") List ids); + + Integer deleteStoreByStoreIds(@Param("enterpriseId") String enterpriseId, @Param("storeIds") List storeIds, @Param("userId") String userId, @Param("updateTime") Long updateTime); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SubordinateMappingMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SubordinateMappingMapper.java index 66ce89ef1..b6f4cf34f 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SubordinateMappingMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SubordinateMappingMapper.java @@ -40,4 +40,6 @@ public interface SubordinateMappingMapper { * @param subordinateMappingDOS */ void batchInsertSubordinateMapping(@Param("enterpriseId") String enterpriseId,@Param("subordinateMappingDOS") List subordinateMappingDOS); + + void deletedByUserIds(@Param("enterpriseId") String enterpriseId,@Param("userIds") List userIds); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SysDepartmentMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SysDepartmentMapper.java index 271a755f0..64531d106 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SysDepartmentMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SysDepartmentMapper.java @@ -1,5 +1,6 @@ package com.cool.store.mapper; +import com.cool.store.dto.dept.SyncTreeNode; import com.cool.store.dto.enterprise.QueryDeptChildDTO; import com.cool.store.entity.SysDepartmentDO; import org.apache.ibatis.annotations.Param; @@ -29,4 +30,10 @@ public interface SysDepartmentMapper { void batchInsertOrUpdate(@Param("list") List sysDepartmentDOList, @Param("eid") String eid); List getDeptChildListByParentId(@Param("eid") String eid, @Param("parentId") String parentId); + + void deleteByNotInIds(@Param("list") List deptIdList, @Param("eid") String eid); + + List getSyncDeptTreeList(@Param("eid") String eid); + + List selectAll(@Param("eid") String eid); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/UserAuthMappingMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/UserAuthMappingMapper.java index 5af0ff1cc..5d5cc3f64 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/UserAuthMappingMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/UserAuthMappingMapper.java @@ -27,6 +27,13 @@ public interface UserAuthMappingMapper { List listUserAuthMappingByUserId(@Param("eid") String eid, @Param("userId") String userId); - List listUserAuthMappingByUserIds(@Param("eid") String eid, - @Param("userIds") List userIds); + List listUserAuthMappingByUserIds(@Param("eid") String eid, @Param("userIds") List userIds); + + void deleteAuthMappingByIds(@Param("eid") String eid, @Param("ids") List ids); + + List selectIdsByUserId(@Param("eid") String eid, @Param("userId") String userId); + + void insertUserAuthMapping(@Param("eid") String eid, @Param("auth") UserAuthMappingDO auth); + + void deleteAuthMappingByIdAndType(@Param("eid") String eid, @Param("ids") List ids, @Param("type") String type); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/UserRegionMappingMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/UserRegionMappingMapper.java index 424168bbb..96b01ebee 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/UserRegionMappingMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/UserRegionMappingMapper.java @@ -30,4 +30,6 @@ public interface UserRegionMappingMapper { void deletedByUserIds(@Param("enterpriseId") String enterpriseId,@Param("userIds") List userIds); List listUserRegionMappingByUserId(@Param("enterpriseId") String enterpriseId, @Param("userIds") List userIds); + + void deletedByIds(@Param("enterpriseId") String enterpriseId,@Param("ids") List ids); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/EnterpriseConfigMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseConfigMapper.xml index fb37ca221..9da753998 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/EnterpriseConfigMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseConfigMapper.xml @@ -44,7 +44,7 @@ diff --git a/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserDepartmentMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserDepartmentMapper.xml new file mode 100644 index 000000000..c5603669b --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserDepartmentMapper.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + id, user_id, department_id, create_time, update_time, is_has_auth + + + insert into enterprise_user_department_${enterpriseId} + + + user_id, + + + department_id, + + + create_time, + + + update_time, + + + is_has_auth, + + + + + #{record.userId}, + + + #{record.departmentId}, + + + #{record.createTime}, + + + #{record.updateTime}, + + + #{record.isHasAuth}, + + + + + update enterprise_user_department_${enterpriseId} + + + user_id = #{record.userId}, + + + department_id = #{record.departmentId}, + + + create_time = #{record.createTime}, + + + update_time = #{record.updateTime}, + + + is_has_auth = #{record.isHasAuth}, + + + where id = #{record.id} + + + + + + delete from enterprise_user_department_${eid} where + + id in + + #{id} + + + + + + + + insert into enterprise_user_department_${eid} + (user_id, department_id, create_time, is_has_auth) + values + + (#{deptUser.userId}, #{deptUser.departmentId}, now(), #{deptUser.isHasAuth}) + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml index a4906de91..e6fc1fa27 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml @@ -670,4 +670,219 @@ order by id + + update enterprise_user_${eid} + + `name` = #{enterpriseUserDO.name}, + `tel` = #{enterpriseUserDO.tel}, + `work_place` = + #{enterpriseUserDO.workPlace}, + + `mobile` = + #{enterpriseUserDO.mobile}, + + `email` = #{enterpriseUserDO.email}, + + `org_email` = + #{enterpriseUserDO.orgEmail}, + + `active` = + #{enterpriseUserDO.active}, + + `order_in_depts` = + #{enterpriseUserDO.orderInDepts}, + + `main_admin` = #{enterpriseUserDO.mainAdmin}, + `is_admin` = #{enterpriseUserDO.isAdmin}, + `is_boss` = #{enterpriseUserDO.isBoss}, + `dingId` = + #{enterpriseUserDO.dingid}, + + `unionid` = + #{enterpriseUserDO.unionid}, + + + `is_leader_in_depts` = #{enterpriseUserDO.isLeaderInDepts}, + + `is_hide` = #{enterpriseUserDO.isHide}, + + `position` = + #{enterpriseUserDO.position}, + + `avatar` = + #{enterpriseUserDO.avatar}, + + `jobnumber` = + #{enterpriseUserDO.jobnumber}, + + `extattr` = + #{enterpriseUserDO.extattr}, + + `is_enterprise` = + #{enterpriseUserDO.isEnterprise}, + + `roles` = #{enterpriseUserDO.roles}, + + ` + monitored_departments` = #{enterpriseUserDO.monitoredDepartments}, + + `departments` = + #{enterpriseUserDO.departments}, + + `is_leader` = #{enterpriseUserDO.isLeader}, + `face_url` = + #{enterpriseUserDO.faceUrl}, + + `create_time` = #{enterpriseUserDO.createTime}, + `language` = + #{enterpriseUserDO.language}, + + `user_status` = + #{enterpriseUserDO.userStatus}, + + `third_oa_unique_flag` = + #{enterpriseUserDO.thirdOaUniqueFlag}, + + + `user_region_ids` = #{enterpriseUserDO.userRegionIds}, + + + `subordinate_change` = #{enterpriseUserDO.subordinateChange}, + + + `subordinate_range` = #{enterpriseUserDO.subordinateRange}, + + + `remark` = #{enterpriseUserDO.remark}, + + + where user_id =#{enterpriseUserDO.userId} + + + + + + + + + + + + insert into enterprise_user_${eid} + ( `id`, + `user_id`, + `name`, + `tel`, + `work_place`, + `remark`, + `mobile`, + `email`, + `org_email`, + `active`, + `order_in_depts`, + `main_admin`, + `is_admin`, + `is_boss`, + `dingId`, + `unionid`, + `is_leader_in_depts`, + `is_hide`, + `position`, + `avatar`, + `jobnumber`, + `extattr`, + `is_enterprise`, + `roles`, + `monitored_departments`, + `departments`, + `is_leader`, + `face_url`, + `create_time`, + `user_status`, + `third_oa_unique_flag`, + `subordinate_range` + ) + values + ( + #{entity.id}, + #{entity.userId}, + #{entity.name}, + #{entity.tel}, + #{entity.workPlace}, + #{entity.remark}, + #{entity.mobile}, + #{entity.email}, + #{entity.orgEmail}, + #{entity.active}, + #{entity.orderInDepts}, + #{entity.mainAdmin}, + #{entity.isAdmin}, + #{entity.isBoss}, + #{entity.dingid}, + #{entity.unionid}, + #{entity.isLeaderInDepts}, + #{entity.isHide}, + #{entity.position}, + #{entity.avatar}, + #{entity.jobnumber}, + #{entity.extattr}, + #{entity.isEnterprise}, + #{entity.roles}, + #{entity.monitoredDepartments}, + #{entity.departments}, + #{entity.isLeader}, + #{entity.faceUrl}, + now(), + #{entity.userStatus}, + #{entity.thirdOaUniqueFlag}, + #{entity.subordinateRange} + ) + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserRoleMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserRoleMapper.xml index 29d540316..7eb828761 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserRoleMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserRoleMapper.xml @@ -100,4 +100,37 @@ left join sys_role_${eip} c on c.id = b.role_id where b.user_id = #{userId} + + + delete from enterprise_user_role_${eid} where id in + + #{id} + + + + + + + + + insert ignore into enterprise_user_role_${eid} + ( + `role_id`, + `user_id`, + `create_time` + ) + values + ( + #{entity.roleId}, + #{entity.userId}, + #{entity.createTime} + ) + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/RegionMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/RegionMapper.xml index 1220ac11f..c3db73f01 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/RegionMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/RegionMapper.xml @@ -376,6 +376,7 @@ syn_ding_dept_id as synDingDeptId, region_type as regionType, deleted as deleted, + region_path as regionPath, store_id as storeId from region_${eid} where region_type = 'store' @@ -385,4 +386,204 @@ ) + + + + + + + insert into region_${eid} + ( + id, + name, + + parent_id, + + region_type, + create_time, + syn_ding_dept_id, + unclassified_flag, + third_dept_id + ) value + ( + #{record.id, jdbcType=BIGINT}, + #{record.name, jdbcType=VARCHAR}, + + #{record.parentId, jdbcType=BIGINT}, + + #{record.regionType, jdbcType=VARCHAR}, + #{record.createTime, jdbcType=BIGINT}, + #{record.synDingDeptId, jdbcType=VARCHAR}, + #{record.unclassifiedFlag}, + #{record.thirdDeptId} + ) + ON DUPLICATE KEY UPDATE name=values(name), parent_id=values(parent_id), syn_ding_dept_id=values(syn_ding_dept_id),third_dept_id=values(third_dept_id), + update_time = values(update_time), region_type = values(region_type), deleted = values(deleted) + + + + + + + + + + insert ignore into region_${eid} + ( + region_id, + name, + parent_id, + group_id, + create_time, + create_name + + ,region_path + + + ,region_type + + + ,store_id + + + ,syn_ding_dept_id + + ,order_num + ) + values + ( + #{region.regionId, jdbcType=VARCHAR}, + #{region.name, jdbcType=VARCHAR}, + #{region.parentId, jdbcType=VARCHAR}, + #{region.groupId, jdbcType=VARCHAR}, + #{region.createTime, jdbcType=BIGINT}, + #{region.createName, jdbcType=VARCHAR} + + ,#{region.regionPath} + + + ,#{region.regionType} + + + ,#{region.storeId} + + + ,#{region.synDingDeptId} + + ,(SELECT max(order_num)+1 FROM region_${eid} AS num) + ) + + + + update region_${eid} + set `parent_id` = #{item.parentId}, + `name` = #{item.name}, + + `region_type` = #{item.regionType}, + + `deleted` = #{item.deleted}, + `update_time` = #{item.updateTime}, + + store_id = #{item.storeId}, + + `region_path` = #{item.regionPath} + where id = #{item.id} + + + + update region_${eid} + set + deleted = 1, + parent_id = -1 + where id in + + #{regionId, jdbcType=BIGINT} + + and id != 1 + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml index 94a2ad5c1..2aacca8a1 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml @@ -437,7 +437,7 @@ and region_id in - #{regionId,jdbcType=BIGINT} + #{regionId} @@ -451,4 +451,187 @@ select store_id from store_${eid} where is_delete ='effective' + + + + + + + insert into store_${enterpriseId} + ( + store_id, + store_name, + store_num, + region_id, + avatar, + province, + city, + county, + store_address, + location_address, + is_lock, + longitude_latitude, + longitude, + latitude, + is_delete, + telephone, + business_hours, + store_acreage, + store_bandwidth, + create_time, + create_name, + remark, + region_path, + extend_field, + syn_ding_dept_id, + source, + store_status, + address_point + ) + values + ( + #{storeDO.storeId}, + #{storeDO.storeName}, + #{storeDO.storeNum}, + #{storeDO.regionId}, + #{storeDO.avatar}, + #{storeDO.province}, + #{storeDO.city}, + #{storeDO.county}, + #{storeDO.storeAddress}, + #{storeDO.locationAddress}, + #{storeDO.isLock,jdbcType=CHAR}, + #{storeDO.longitudeLatitude}, + #{storeDO.longitude}, + #{storeDO.latitude}, + #{storeDO.isDelete,jdbcType=CHAR}, + #{storeDO.telephone}, + #{storeDO.businessHours}, + #{storeDO.storeAcreage}, + #{storeDO.storeBandwidth}, + #{storeDO.createTime}, + #{storeDO.createName}, + #{storeDO.remark}, + #{storeDO.regionPath}, + #{storeDO.extendField}, + #{storeDO.synDingDeptId}, + #{storeDO.source}, + #{storeDO.storeStatus}, + ST_GeomFromText(#{storeDO.addressPoint}) + ) + + + + update store_${enterpriseId} set + + + store_name = #{storeDO.storeName}, + + + store_num = #{storeDO.storeNum}, + + + region_path = #{storeDO.regionPath}, + + + region_id = #{storeDO.regionId}, + + + avatar = #{storeDO.avatar}, + + + + province = #{storeDO.province}, + + + city = #{storeDO.city}, + + + county = #{storeDO.county}, + + + store_address = #{storeDO.storeAddress}, + + + location_address = #{storeDO.locationAddress}, + + + longitude_latitude = #{storeDO.longitudeLatitude}, + + + longitude = #{storeDO.longitude}, + + + latitude = #{storeDO.latitude}, + + + address_point = ST_GeomFromText(#{storeDO.addressPoint}), + + + telephone = #{storeDO.telephone}, + + + business_hours = #{storeDO.businessHours}, + + + store_acreage = #{storeDO.storeAcreage}, + + + store_bandwidth = #{storeDO.storeBandwidth}, + + + update_time = #{storeDO.updateTime}, + + + update_name = #{storeDO.updateName}, + + + remark = #{storeDO.remark}, + + + is_delete = #{storeDO.isDelete}, + + + store_status = #{storeDO.storeStatus}, + + + extend_field = #{storeDO.extendField} + + + where store_id=#{storeDO.storeId} + + + + + + update store_${enterpriseId} + set is_delete='invalid', + update_name=#{userId, jdbcType=VARCHAR}, + update_time=#{updateTime, jdbcType=BIGINT} + where store_id in + + #{storeId, jdbcType=VARCHAR} + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/SubordinateMappingMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/SubordinateMappingMapper.xml index 1b013984f..84210b639 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/SubordinateMappingMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/SubordinateMappingMapper.xml @@ -164,4 +164,15 @@ ) + + + delete from subordinate_mapping_${enterpriseId} + where + user_id in + + #{userId} + + and type = 0 + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/SysDepartmentMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/SysDepartmentMapper.xml index 7b6359ba9..162445bcc 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/SysDepartmentMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/SysDepartmentMapper.xml @@ -229,4 +229,30 @@ from sys_department_${eid} where parent_id = #{parentId} + + + delete from sys_department_${eid} + where id not in + + #{item} + + and id != '1' + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/UserAuthMappingMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/UserAuthMappingMapper.xml index fdb6a57ce..e1302706b 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/UserAuthMappingMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/UserAuthMappingMapper.xml @@ -112,4 +112,45 @@ #{userId} + + + delete from user_auth_mapping_${eid} + where id in + + #{id} + + + + + + + insert into user_auth_mapping_${eid} + ( + `user_id`, + `mapping_id`, + `type`, + `source`, + `create_id`, + `create_time` + ) + values + ( + #{auth.userId}, + #{auth.mappingId}, + #{auth.type}, + #{auth.source}, + #{auth.createId}, + #{auth.createTime} + ) + + + + delete from user_auth_mapping_${eid} + where type=#{type} and mapping_id in + + #{id} + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/UserRegionMappingMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/UserRegionMappingMapper.xml index 258e36805..0f61491e7 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/UserRegionMappingMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/UserRegionMappingMapper.xml @@ -122,4 +122,11 @@ + + + delete from user_region_mapping_${enterpriseId} where id in + + #{id} + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/test/resources/mybatis-generator.properties b/coolstore-partner-dao/src/test/resources/mybatis-generator.properties index 09653a08a..69dfc9cff 100644 --- a/coolstore-partner-dao/src/test/resources/mybatis-generator.properties +++ b/coolstore-partner-dao/src/test/resources/mybatis-generator.properties @@ -3,4 +3,4 @@ jdbc.url = jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcoll jdbc.user= coolstore jdbc.password = CSCErYcXniNYm7bT -table.name = enterprise_user_group_mapping_e88b6a2bc1334164b54977a4dbfe5d9d \ No newline at end of file +table.name = enterprise_user_department_e88b6a2bc1334164b54977a4dbfe5d9d \ No newline at end of file diff --git a/coolstore-partner-model/coolstore-partner-model.iml b/coolstore-partner-model/coolstore-partner-model.iml index 535feb0e0..8de5a0db5 100644 --- a/coolstore-partner-model/coolstore-partner-model.iml +++ b/coolstore-partner-model/coolstore-partner-model.iml @@ -64,7 +64,6 @@ - @@ -91,6 +90,22 @@ + + + + + + + + + + + + + + + + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/DatasourceInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/DatasourceInfoDTO.java index af409231a..f69790dc9 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/DatasourceInfoDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/DatasourceInfoDTO.java @@ -35,6 +35,11 @@ public class DatasourceInfoDTO { * 数据库密码 */ private String dbPwd; + + /** + * dbName + */ + private String dbName; public static List convertList(List configList){ @@ -48,6 +53,7 @@ public class DatasourceInfoDTO { datasource.setDbPort(enterpriseConfig.getDbPort()); datasource.setDbUser(enterpriseConfig.getDbUser()); datasource.setDbPwd(enterpriseConfig.getDbPwd()); + datasource.setDbName(enterpriseConfig.getDbName()); resultList.add(datasource); } return resultList; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/dept/SyncTreeNode.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/dept/SyncTreeNode.java new file mode 100644 index 000000000..6db8f7adc --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/dept/SyncTreeNode.java @@ -0,0 +1,21 @@ +package com.cool.store.dto.dept; + +import lombok.Data; + +import java.util.List; + +/** + * @author 邵凌志 + * @date 2020/12/2 14:17 + */ +@Data +public class SyncTreeNode { + + private String id; + + private String pid; + + private String name; + + private List child; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionDTO.java new file mode 100644 index 000000000..15e6a2d80 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionDTO.java @@ -0,0 +1,99 @@ +package com.cool.store.dto.region; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +/** + * @author byd + */ +@Builder +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RegionDTO { + /** + * 自增ID + */ + private Long id; + + /** + * 名称 + */ + private String name; + /** + * 父ID + */ + private String parentId; + + + /** + * dinging部门id + */ + private String synDingDeptId; + + /** + * 是否删除标记 + */ + private Boolean deleted; + + /** + * 区域门店数量 + */ + private Integer storeNum; + + /** + * 区域门店范围是否 + */ + private Boolean storeRange = false; + + /** + * 门店地址 非DO + */ + private String address; + + /** + * 门店经度 非DO + */ + private String longitude; + + + /** + * 纬度 非DO + */ + private String latitude; + + /** + * 门店编号 非DO + */ + private String storeCode; + + + /** + * 大区名称 + */ + private String zoneName; + + /** + * brand 主品牌 + */ + private String brand; + + /** + * 管理分区 + */ + private String mangerCity; + + /** + * 经营城市 + */ + private String bizCity; + + /** + * 省区 + */ + private String provinceName; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionNode.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionNode.java new file mode 100644 index 000000000..51e5da03c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionNode.java @@ -0,0 +1,100 @@ +package com.cool.store.dto.region; + +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import java.util.List; + +/** + * @ClassName RegionNode + * @Description 用一句话描述什么 + */ +@Data +public class RegionNode { + /** + * 自增ID + */ + private Long id; + + /** + * 区域ID + */ + private String regionId; + + /** + * 名称 + */ + private String name; + /** + * 父ID + */ + private String parentId; + + private String parentName; + + /** + * 分组ID + */ + private String groupId; + + /** + * 创建时间 + */ + private Long createTime; + /** + * 创建人 + */ + private String createName; + /** + * 更新时间 + */ + private Long updateTime; + /** + * 更新人 + */ + private String updateName; + + /** + * 子节点 + */ + private List children; + + /** + * 是否有区域权限 + */ + private Boolean isAuth; + + /** + * 门店数量 + */ + private Long storeCount; + + /** + * dinging部门id + */ + private String synDingDeptId; + + /** + * root path store + */ + private String regionType; + + /** + * 路径 + */ + private String regionPath; + + private String fullRegionPath; + + public String getFullRegionPath() { + if(id != null && id == 1L){ + return "/1/"; + } + if (StringUtils.isNotBlank(regionPath)) { + return regionPath + id + "/"; + } else { + return "/" + id + "/"; + } + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionStoreNumMsgDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionStoreNumMsgDTO.java new file mode 100644 index 000000000..35fc2745e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionStoreNumMsgDTO.java @@ -0,0 +1,21 @@ +package com.cool.store.dto.region; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.List; + +/** + * describe: + * + * @author zhouyiping + * @date 2021/05/31 + */ +@Data +@AllArgsConstructor +public class RegionStoreNumMsgDTO { + private String eid; + private List regionIdList; + public RegionStoreNumMsgDTO(){} + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionSyncDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionSyncDTO.java new file mode 100644 index 000000000..0e84d2813 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionSyncDTO.java @@ -0,0 +1,25 @@ +package com.cool.store.dto.region; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author 邵凌志 + * @date 2020/12/22 13:48 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RegionSyncDTO { + + /** + * 区域id + */ + private Long id; + + /** + * 区域钉钉id + */ + private String synDingDeptId; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/EnterpriseUserDepartmentDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/EnterpriseUserDepartmentDO.java new file mode 100644 index 000000000..de4e2e28b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/EnterpriseUserDepartmentDO.java @@ -0,0 +1,43 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Date; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * + * @author zhangchenbiao + * @date 2023-06-02 05:01 + */ +@Data +public class EnterpriseUserDepartmentDO implements Serializable { + @ApiModelProperty("") + private Integer id; + + @ApiModelProperty("用户id") + private String userId; + + @ApiModelProperty("部门id") + private String departmentId; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; + + @ApiModelProperty("是否是部门权限数据:0否,1是") + private Boolean isHasAuth; + + public EnterpriseUserDepartmentDO(String userId, String departmentId, Boolean isHasAuth) { + this.userId = userId; + this.departmentId = departmentId; + this.isHasAuth = isHasAuth; + } + + public EnterpriseUserDepartmentDO() {} +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/RegionDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/RegionDO.java index 1c016688d..b2288c285 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/RegionDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/RegionDO.java @@ -76,6 +76,29 @@ public class RegionDO implements Serializable { @ApiModelProperty("第三方唯一id") private String thirdDeptId; + private Boolean storeRange = false; + + /** + * 门店地址 非DO + */ + private String address; + + /** + * 门店经度 非DO + */ + private String longitude; + + + /** + * 纬度 非DO + */ + private String latitude; + + /** + * 门店编号 非DO + */ + private String storeCode; + public String getFullRegionPath() { if(id != null && id == 1L){ return "/1/"; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/StoreDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/StoreDO.java index 62d5a6afa..69aa480d6 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/StoreDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/StoreDO.java @@ -129,5 +129,5 @@ public class StoreDO implements Serializable { private String extendField; @ApiModelProperty("地址经纬度point") - private byte[] addressPoint; + private String addressPoint; } \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/SysDepartmentDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/SysDepartmentDO.java index f7aa64c3a..663fe9bec 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/SysDepartmentDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/SysDepartmentDO.java @@ -71,4 +71,9 @@ public class SysDepartmentDO implements Serializable { @ApiModelProperty("部门所有子部门id,以英文逗号分隔") private String subIds; + + /** + * 是否是叶子节点 + */ + private Boolean isLeaf; } \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/UserAuthMappingDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/UserAuthMappingDO.java index 33b61e8be..200fae318 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/UserAuthMappingDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/UserAuthMappingDO.java @@ -2,10 +2,7 @@ package com.cool.store.entity; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; -import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; -import lombok.NoArgsConstructor; /** * @@ -13,9 +10,6 @@ import lombok.NoArgsConstructor; * @date 2023-05-19 02:54 */ @Data -@Builder -@NoArgsConstructor -@AllArgsConstructor public class UserAuthMappingDO implements Serializable { @ApiModelProperty("主键") @@ -44,4 +38,15 @@ public class UserAuthMappingDO implements Serializable { @ApiModelProperty("更新时间") private Long updateTime; + + public UserAuthMappingDO(String userId, String mappingId, String type, String source, String createId, Long createTime) { + this.userId = userId; + this.mappingId = mappingId; + this.type = type; + this.source = source; + this.createId = createId; + this.createTime = createTime; + } + + public UserAuthMappingDO(){} } \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/oss/OssUploadConfigVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/oss/OssUploadConfigVO.java new file mode 100644 index 000000000..ba67bb90c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/oss/OssUploadConfigVO.java @@ -0,0 +1,42 @@ +package com.cool.store.vo.oss; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: OssUploadConfigVO + * @Description: oss 上传config + * @date 2023-06-01 13:46 + */ +@Data +public class OssUploadConfigVO { + + @ApiModelProperty("域名") + private String accessKeyId; + + @ApiModelProperty("策略 Base64编过") + private String policy; + + @ApiModelProperty("对Policy签名后的字符串") + private String signature; + + @ApiModelProperty("上传目录") + private String dir; + + @ApiModelProperty("域名") + private String host; + + @ApiModelProperty("上传策略Policy失效时间") + private String expire; + + public OssUploadConfigVO(String accessKeyId, String policy, String signature, String dir, String host, String expire) { + this.accessKeyId = accessKeyId; + this.policy = policy; + this.signature = signature; + this.dir = dir; + this.host = host; + this.expire = expire; + } + +} diff --git a/coolstore-partner-service/coolstore-partner-service.iml b/coolstore-partner-service/coolstore-partner-service.iml index 40ceefa06..34f782662 100644 --- a/coolstore-partner-service/coolstore-partner-service.iml +++ b/coolstore-partner-service/coolstore-partner-service.iml @@ -61,11 +61,26 @@ + + + + + + + + + + + + + + + + - diff --git a/coolstore-partner-service/src/main/java/com/cool/store/config/redis/RedisUtilConfig.java b/coolstore-partner-service/src/main/java/com/cool/store/config/redis/RedisUtilConfig.java index 03a440711..1634f770e 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/config/redis/RedisUtilConfig.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/config/redis/RedisUtilConfig.java @@ -1,8 +1,15 @@ package com.cool.store.config.redis; import com.cool.store.utils.RedisUtilPool; +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.stereotype.Component; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.JedisShardInfo; @@ -38,4 +45,29 @@ public class RedisUtilConfig { redisUtil.setShardedJedisPool(new ShardedJedisPool(jedisPoolConfig, shards)); return redisUtil; } + + /** + * 模板序列化 + * @Description 模板序列化 + * @param redisConnectionFactory + * @return RedisTemplate + * @throws Exception + */ + @Bean(name = "customizeTemplate") + public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { + Jackson2JsonRedisSerializer jacksonSerializer = new Jackson2JsonRedisSerializer<>(Object.class); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + jacksonSerializer.setObjectMapper(objectMapper); + // 创建并配置自定义 RedisTemplateRedisOperator + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(redisConnectionFactory); + template.setKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(new StringRedisSerializer()); + template.setValueSerializer(jacksonSerializer); + template.setHashValueSerializer(jacksonSerializer); + template.afterPropertiesSet(); + return template; + } } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/http/ISVHttpRequest.java b/coolstore-partner-service/src/main/java/com/cool/store/http/ISVHttpRequest.java index a69ff47bb..5c294088f 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/http/ISVHttpRequest.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/http/ISVHttpRequest.java @@ -7,12 +7,17 @@ import com.cool.store.dto.enterprise.EnterpriseUserDTO; import com.cool.store.dto.enterprise.SysDepartmentDTO; import com.cool.store.dto.login.UserIdInfoDTO; import com.cool.store.dto.response.ResultDTO; +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.request.EnterpriseUserRequest; import com.cool.store.utils.RestTemplateUtil; +import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Objects; @@ -178,4 +183,49 @@ public class ISVHttpRequest { } return null; } + + public List getSubDepartments(String corpId, String appType, String parentId, Boolean fetchChild) { + String url = isvDomain + "/isv/corp/getSubDepartments"; + HashMap requestMap = new HashMap(); + requestMap.put("corpId", corpId); + requestMap.put("appType", appType); + requestMap.put("parentId", parentId); + requestMap.put("fetchChild", fetchChild); + ResponseEntity responseEntity = null; + try { + responseEntity = RestTemplateUtil.get(url, ResultDTO.class, requestMap); + log.info("url:{}, response:{}", url, JSONObject.toJSONString(responseEntity)); + if(Objects.nonNull(responseEntity.getBody()) && responseEntity.getBody().isSuccess()){ + return JSONObject.parseArray(JSONObject.toJSONString(responseEntity.getBody().getData()), SysDepartmentDTO.class); + } + } catch (Exception e) { + log.info("调用isv出错{}", e); + } + return null; + } + + public List getDeptUsers(String corpId, String deptId, String appType) { + List departmentUsers = getDepartmentUsers(corpId, deptId, appType); + if (CollectionUtils.isEmpty(departmentUsers)){ + return Lists.newArrayList(); + } + List userList = Lists.newArrayList(); + for (EnterpriseUserDTO enterpriseUserDTO:departmentUsers) { + EnterpriseUserDO enterpriseUser = new EnterpriseUserDO(); + enterpriseUser.setCreateTime(new Date()); + enterpriseUser.setIsAdmin(false); + enterpriseUser.setRemark(enterpriseUserDTO.getRemark()); + enterpriseUser.setUserId(enterpriseUserDTO.getUserId()); + if (enterpriseUserDTO.getIsLeaderInDepts() != null) { + enterpriseUser.setIsLeaderInDepts(JSONObject.toJSONString(enterpriseUserDTO.getIsLeaderInDepts())); + } + EnterpriseUserRequest enterpriseUserRequest = new EnterpriseUserRequest(); + enterpriseUserRequest.setEnterpriseUserDO(enterpriseUser); + if (CollectionUtils.isNotEmpty(enterpriseUserDTO.getDepartmentLists())) { + enterpriseUserRequest.setDepartment(JSONObject.toJSONString(enterpriseUserDTO.getDepartmentLists())); + } + userList.add(enterpriseUserRequest); + } + return userList; + } } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/EnterpriseInitService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/EnterpriseInitService.java index 302b60e77..881238358 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/EnterpriseInitService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/EnterpriseInitService.java @@ -19,4 +19,6 @@ public interface EnterpriseInitService { void enterpriseInit(String cropId, AppTypeEnum appType, String eid, String dbName, String openUserId); void sendOpenSucceededMsg(String corpId, String appType, List userList); + + void sync(String eid, String userName, String userId, Long regionId); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/EnterpriseUserService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/EnterpriseUserService.java index 7f9e03eaf..453f88789 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/EnterpriseUserService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/EnterpriseUserService.java @@ -3,6 +3,7 @@ package com.cool.store.service; import com.cool.store.dto.buser.SubordinateUserRangeDTO; import com.cool.store.dto.enterprise.EnterpriseUserDTO; import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.request.EnterpriseUserRequest; import com.cool.store.vo.buser.EnterpriseUserPageVO; import java.util.List; @@ -34,4 +35,13 @@ public interface EnterpriseUserService { */ Map getUserRegion(String enterpriseId, List userIdList); + /** + * 更新用户的部门全路径 + * @param user + * @param deptIdMap + */ + void updateUserDeptPath(EnterpriseUserRequest user, Map deptIdMap); + + EnterpriseUserDO selectByUserIdIgnoreActive(String enterpriseId, String userId); + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/RegionService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/RegionService.java new file mode 100644 index 000000000..435ba181e --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/RegionService.java @@ -0,0 +1,21 @@ +package com.cool.store.service; + +import com.cool.store.entity.RegionDO; + +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: RegionService + * @Description: + * @date 2023-06-05 10:43 + */ +public interface RegionService { + + void saveRegionAndStore(String eid, RegionDO regionDO, String userId); + + void removeRegions(String eid, List regionIds); + + void deleteByStoreIds(String enterpriseId, List storeIds, String userId); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseInitServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseInitServiceImpl.java index 357142df5..8649882e9 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseInitServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseInitServiceImpl.java @@ -1,13 +1,15 @@ package com.cool.store.service.impl; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; import com.cool.store.dao.*; +import com.cool.store.dto.dept.SyncTreeNode; import com.cool.store.dto.enterprise.*; -import com.cool.store.entity.EnterpriseUserDO; -import com.cool.store.entity.RegionDO; -import com.cool.store.entity.SysDepartmentDO; -import com.cool.store.entity.UserRegionMappingDO; +import com.cool.store.dto.region.RegionDTO; +import com.cool.store.dto.region.RegionNode; +import com.cool.store.dto.region.RegionSyncDTO; +import com.cool.store.entity.*; import com.cool.store.enums.*; import com.cool.store.exception.ServiceException; import com.cool.store.http.ISVHttpRequest; @@ -15,21 +17,24 @@ import com.cool.store.mq.producer.SimpleMessageService; import com.cool.store.request.EnterpriseUserRequest; import com.cool.store.service.EnterpriseInitService; import com.cool.store.service.EnterpriseUserService; -import com.cool.store.utils.DataSourceHelper; -import com.cool.store.utils.ListOptUtils; -import com.cool.store.utils.ScriptUtil; -import com.cool.store.utils.UUIDUtils; +import com.cool.store.service.RegionService; +import com.cool.store.utils.*; import com.google.common.collect.Lists; +import javafx.util.Pair; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.support.EncodedResource; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -62,6 +67,26 @@ public class EnterpriseInitServiceImpl implements EnterpriseInitService { private SysDepartmentDAO sysDepartmentDAO; @Resource private EnterpriseUserService enterpriseUserService; + @Resource + private EnterpriseConfigDAO enterpriseConfigDAO; + @Resource + private RedisConstantUtil redisConstantUtil; + @Resource + private StoreDAO storeDAO; + @Resource + private RedisUtilPool redisUtilPool; + @Resource + private UserAuthMappingDAO userAuthMappingDAO; + @Resource + private EnterpriseUserDepartmentDAO enterpriseUserDepartmentDAO; + @Resource + private SubordinateMappingDAO subordinateMappingDAO; + @Resource + private EnterpriseDAO enterpriseDAO; + @Autowired + private RedisUtil redisUtil; + @Resource + private RegionService regionService; @Override public void runEnterpriseScript(EnterpriseOpenMsg msg) { @@ -114,6 +139,7 @@ public class EnterpriseInitServiceImpl implements EnterpriseInitService { } @Override + public void sendOpenSucceededMsg(String corpId, String appType, List userList) { if(CollectionUtils.isEmpty(userList)){ return; @@ -125,6 +151,936 @@ public class EnterpriseInitServiceImpl implements EnterpriseInitService { simpleMessageService.send(jsonObject.toJSONString(), RocketMqTagEnum.OPEN_SUCCEEDED_MSG_QUEUE); } + @Override + public void sync(String eid, String userName, String userId, Long regionId) { + DataSourceHelper.reset(); + EnterpriseConfigDO enterpriseConfigDO = enterpriseConfigDAO.selectByEnterpriseId(eid); + try { + DataSourceHelper.changeToSpecificDataSource(enterpriseConfigDO.getDbName()); + newSyncFsDept(eid, regionId); + //如果没有开通钉钉同步,需要先同步部门,人员同步根据部门同步 + syncSpecifyNodeUser(eid,regionId, true); + }catch (Exception e){ + //无论是否失败,删除节点同步信息锁 + redisUtilPool.delKey(redisConstantUtil.getSyncLockKey(eid)); + //任务无论完成失败,都删除区域和门店缓存 + String regionKey = redisConstantUtil.getSyncRegionKey(eid); + String storeKey = redisConstantUtil.getSyncStoreKey(eid); + redisUtilPool.delKey(regionKey); + redisUtilPool.delKey(storeKey); + } + } + + public void syncSpecifyNodeUser(String eid,Long regionId, Boolean isSyncRoleAndAuth) { + log.info("开始同步用户eid:{}", eid); + //前置准备:获得企业配置信息、数据库名等 + DataSourceHelper.reset(); + EnterpriseConfigDO config = enterpriseConfigDAO.selectByEnterpriseId(eid); + String corpId = config.getDingCorpId(); + String dbName = config.getDbName(); + //这次同步的用户id + Set dingUserIdList = new HashSet<>(); + //切换企业库 + DataSourceHelper.changeToSpecificDataSource(dbName); + RegionDO regionDO = regionDAO.getByRegionId(eid, regionId); + + List deptList = new ArrayList<>(); + //遍历部门列表以及对应的用户列表 regionDO为null的时候遍历所有的用户 + if (regionId==null||regionDO==null){ + deptList = sysDepartmentDAO.getSyncDeptTreeList(eid); + }else { + //查询指定部门的子部门(包括当前部门) + String synDingDeptId = regionDO.getSynDingDeptId(); + List subDepts = new ArrayList<>(); + List subDepartmentList = isvHttpRequest.getSubDepartments(corpId, config.getAppType(),synDingDeptId,Boolean.TRUE); + for (SysDepartmentDTO sysDepartmentDTO : subDepartmentList) { + SyncTreeNode syncTreeNode = new SyncTreeNode(); + syncTreeNode.setId(sysDepartmentDTO.getId()); + syncTreeNode.setPid(sysDepartmentDTO.getParentId()); + syncTreeNode.setName(sysDepartmentDTO.getName()); + deptList.add(syncTreeNode); + } + for (SysDepartmentDO sysDepartmentDO: subDepts) { + SyncTreeNode syncTreeNode = new SyncTreeNode(); + syncTreeNode.setId(sysDepartmentDO.getId()); + syncTreeNode.setPid(sysDepartmentDO.getParentId()); + syncTreeNode.setName(sysDepartmentDO.getName()); + deptList.add(syncTreeNode); + } + } + + List deptIds = deptList.stream().map(SyncTreeNode::getId).collect(Collectors.toList()); + for (String deptId : deptIds) { + syncFsDeptUser(corpId, eid, dbName, dingUserIdList, deptId, config.getAppType()); + } + log.info("dingUserIdList:{}",JSONObject.toJSONString(dingUserIdList)); + + DataSourceHelper.changeToSpecificDataSource(dbName); + + //删除门店库中和钉钉对应的用户、剩下的为待删除用户 + List coolUserIdList = new ArrayList<>(); + if (regionId!=null){ + coolUserIdList = enterpriseUserDAO.selectSpecifyNodeUserIds(eid, regionDO.getSynDingDeptId()); + }else { + coolUserIdList = enterpriseUserDAO.selectAllUserId(eid); + } + List finalCoolUserIdList = coolUserIdList; + dingUserIdList.forEach(dingUserId -> { + if (finalCoolUserIdList.contains(dingUserId)) { + finalCoolUserIdList.remove(dingUserId); + } + }); + + List mainAdminIds = enterpriseUserDAO.getMainAdminUserIds(eid); + //如果是节点同步,不执行人员删除操作 + if(regionId!=null){ + log.info("节点用户同步完成eid:{},regionId={}", eid,regionId); + return; + } + for (String coolUserId : coolUserIdList) { + try { + //不能删除AI用户和主管理员 + if (!CommonConstants.AI_USER_ID.equals(coolUserId) && !mainAdminIds.contains(coolUserId)) { + syncDeleteUser(eid, coolUserId, dbName); + } + } catch (Exception e) { + log.info("fullSyncUser corpId={}", e, corpId); + } + } + log.info("同步用户完成eid:{}", eid); + } + + public void syncDeleteUser(String eid, String userId, String dbName) { + //删除企业库对应的映射关系 + DataSourceHelper.changeToSpecificDataSource(dbName); + // 1.更新用户信息 + EnterpriseUserDO enterpriseUser = enterpriseUserDAO.getUserInfoById(eid, userId); + if (enterpriseUser != null) { + enterpriseUser.setActive(false); + enterpriseUserDAO.updateEnterpriseUser(eid, enterpriseUser); + } + // 2.删除用户角色映射关系 + //获得用户在cool中的角色列表 + List userRoleIds = enterpriseUserRoleDAO.selectIdsByUserId(eid, userId); + // 3.删除该用户的部门信息 + List userDepartmentIds = enterpriseUserDepartmentDAO.getIdsByUserId(eid, userId); + //删除用户和区域的关联关系 + userRegionMappingDAO.deletedByUserIds(eid, Arrays.asList(userId)); + //删除用户的下属 + subordinateMappingDAO.deletedByUserIds(eid, Arrays.asList(userId)); + // 4.删除该用户的可见范围映射信息 + List userAuthIds = userAuthMappingDAO.selectIdsByUserId(eid, userId); + if (userRoleIds != null) { + Lists.partition(userRoleIds, CommonConstants.DEAL_RECORD_MAX_SIZE).forEach(deleteUserRoleIds -> { + enterpriseUserRoleDAO.deleteBatchByPrimaryKey(eid, deleteUserRoleIds); + }); + } + if (userDepartmentIds != null) { + Lists.partition(userDepartmentIds, CommonConstants.DEAL_RECORD_MAX_SIZE).forEach(userDeptDeleteList -> { + enterpriseUserDepartmentDAO.deleteByIdList(eid, userDeptDeleteList); + }); + } + if (userAuthIds != null) { + Lists.partition(userAuthIds, CommonConstants.DEAL_RECORD_MAX_SIZE).forEach(deleteUserAuths -> { + userAuthMappingDAO.deleteAuthMappingByIds(eid, deleteUserAuths); + }); + } + } + + private void syncFsDeptUser(String corpId, String eid, String dbName, Set dingUserIdList, String deptId, String appType){ + List deptUsers =isvHttpRequest.getDeptUsers(corpId, deptId, appType); + log.info("获取飞书部门下用户的部门id {} ,返回用户详情列表 {} ", deptId, JSONObject.toJSONString(deptUsers)); + if (CollectionUtils.isEmpty(deptUsers)){ + return; + } + for (EnterpriseUserRequest deptUser : deptUsers) { + if (Objects.nonNull(deptUser.getEnterpriseUserDO())) { + dingUserIdList.add(deptUser.getEnterpriseUserDO().getUserId()); + try { + String userId = deptUser.getEnterpriseUserDO().getUserId(); + syncFsUser(corpId, userId, eid, dbName, appType); + } catch (Exception e) { + log.error("syncFsDeptUser,当前用户同步失败 {} ", deptUser.getEnterpriseUserDO().getUserId(), e); + } + } + } + } + + public void syncFsUser(String corpId, String userId, String eid, String dbName, String appType) { + //获得企业微信用户详情 + DataSourceHelper.changeToSpecificDataSource(dbName); + Long employeeRoleId = sysRoleDAO.getRoleIdByRoleEnum(eid, RoleEnum.EMPLOYEE.getRoleEnum()); + DataSourceHelper.reset(); + EnterpriseUserRequest fsEnterpriseUser = getFsUserDetail(corpId, userId, String.valueOf(employeeRoleId), appType); + + //使用userId获得企业微信用户信息后,转换为门店的userid + fsEnterpriseUser.getEnterpriseUserDO().setUserId(userId); + fsEnterpriseUser.getEnterpriseUserDO().setUserStatus(UserStatusEnum.NORMAL.getCode()); + //判断用户是否是管理员 + List adminList = isvHttpRequest.getAdminUserList(corpId, appType); + log.info("飞书管理员列表:{}", JSONObject.toJSONString(adminList)); + //是否是管理员 + if (CollectionUtils.isNotEmpty(adminList)) { + adminList.forEach(openUserId -> { + if (openUserId.equals(fsEnterpriseUser.getEnterpriseUserDO().getUserId())) { + fsEnterpriseUser.getEnterpriseUserDO().setIsAdmin(Boolean.TRUE); + } + }); + } + //先处理企业库 + DataSourceHelper.changeToSpecificDataSource(dbName); + //设置用户部门全路劲 + Pair, Map> tuple = getAllDeptInfo(eid); + enterpriseUserService.updateUserDeptPath(fsEnterpriseUser, tuple.getValue()); + EnterpriseUserDO coolEnterpriseUser = enterpriseUserService.selectByUserIdIgnoreActive(eid, userId); + log.info("数智门店企业用户信息 {} ", JSONObject.toJSONString(coolEnterpriseUser)); + if (coolEnterpriseUser != null) { + //设置下级是否变动 + fsEnterpriseUser.getEnterpriseUserDO().setSubordinateChange(coolEnterpriseUser.getSubordinateChange()); + fsEnterpriseUser.getEnterpriseUserDO().setId(coolEnterpriseUser.getId()); + if (coolEnterpriseUser.getUserStatus() != null) { + fsEnterpriseUser.getEnterpriseUserDO().setUserStatus(coolEnterpriseUser.getUserStatus()); + } + } + syncEntUser(fsEnterpriseUser, eid, appType); + } + + public EnterpriseUserRequest getFsUserDetail(String corpId, String userId, String employeeRoleId, String appType) { + EnterpriseUserDTO enterpriseUserDTO = null; + try { + enterpriseUserDTO = isvHttpRequest.getUserDetailByUserId(corpId, userId, appType); + } catch (Exception e) { + log.info("飞书用户查询失败:userId:{},corpId:{},appType:{},e:{}",userId,corpId,appType,e); + return null; + } + EnterpriseUserRequest enterpriseUserRequest = new EnterpriseUserRequest(); + if (Objects.isNull(enterpriseUserDTO)) { + //初始化防止出现null 后续用到引发空指针 + enterpriseUserRequest.setEnterpriseUserDO(new EnterpriseUserDO()); + return enterpriseUserRequest; + } + EnterpriseUserDO enterpriseUser = new EnterpriseUserDO(); + //激活状态: 1=已激活,2=已禁用,4=未激活,5=退出企业 + if (enterpriseUserDTO.getActive() != null && enterpriseUserDTO.getActive()) { + enterpriseUser.setActive(enterpriseUserDTO.getActive()); + } else { + enterpriseUser.setActive(Boolean.FALSE); + } + enterpriseUserRequest.setDepartmentLists(enterpriseUserDTO.getDepartmentLists()); + enterpriseUserRequest.setLeaderInDepts(enterpriseUserDTO.getIsLeaderInDepts()); + + if (CollectionUtils.isNotEmpty(enterpriseUserDTO.getIsLeaderInDepts())) { + enterpriseUser.setIsLeaderInDepts(JSONObject.toJSONString(enterpriseUserDTO.getIsLeaderInDepts())); + } + enterpriseUser.setCreateTime(new Date()); + enterpriseUser.setUnionid(enterpriseUserDTO.getUnionid()); + enterpriseUser.setIsAdmin(false); + enterpriseUser.setRoles(employeeRoleId); + enterpriseUser.setRemark(enterpriseUserDTO.getUserId()); + enterpriseUser.setUserId(enterpriseUserDTO.getUserId()); + enterpriseUser.setName(enterpriseUserDTO.getName()); + enterpriseUser.setPosition(enterpriseUserDTO.getPosition()); + enterpriseUser.setMobile(enterpriseUserDTO.getMobile()); + enterpriseUserRequest.setEnterpriseUserDO(enterpriseUser); + return enterpriseUserRequest; + } + + + public Pair, Map> getAllDeptInfo(String eid) { + List allDeptList = sysDepartmentDAO.selectAllDepts(eid); + Set deptIdSet = allDeptList.stream().map(SysDepartmentDO::getId).collect(Collectors.toSet()); + Map deptIdMap = allDeptList.stream().filter(d -> d.getParentId() != null).collect(Collectors.toMap(SysDepartmentDO::getId, SysDepartmentDO::getParentId)); + return new Pair<>(deptIdSet, deptIdMap); + } + + public void syncEntUser(EnterpriseUserRequest request, String eid, String appType) { + EnterpriseUserDO enterpriseUser = request.getEnterpriseUserDO(); + if (Objects.isNull(enterpriseUser)) { + return; + } + Boolean isAdd = enterpriseUser.getId() == null; + String userId = enterpriseUser.getUserId(); + //TODO 一.插入或者更新用户信息 + if (enterpriseUser.getId() == null) { + enterpriseUser.setId(UUIDUtils.get32UUID()); + enterpriseUserDAO.insertEnterpriseUser(eid, enterpriseUser); + } else { + enterpriseUserDAO.updateEnterpriseUser(eid, enterpriseUser); + } + //TODO 二.更新该用户的部门信息 + //ding部门id列表 + List fsDeptIds = request.getDepartmentLists(); + //该用户在cool中的部门列表,该部门id为cool的id。 + syncUserDepartment(eid, userId, fsDeptIds); + //同步用户的部门权限 + List manageDeptIds = JSONObject.parseArray(request.getEnterpriseUserDO().getIsLeaderInDepts(), String.class); + syncUserDepartmentAuth(eid, userId, manageDeptIds); + //同步用户和区域的关系 + syncUserRegionMapping(eid, userId, ListUtils.emptyIfNull(fsDeptIds).stream().map(a -> String.valueOf(a)).collect(Collectors.toList())); + //补全该用户的user_region_ids + enterpriseUserService.updateUserRegionPathList(eid, Arrays.asList(userId)); + //如果用户是企微管理员,同步为门店的管理员 + if (enterpriseUser.getIsAdmin()) { + EnterpriseUserRole masterRole = enterpriseUserRoleDAO.selectByUserIdAndRoleId(eid, enterpriseUser.getUserId(), RoleEnum.MASTER.getId()); + if (masterRole == null) { + Long roleIdByRoleEnum = sysRoleDAO.getRoleIdByRoleEnum(eid, RoleEnum.MASTER.getRoleEnum()); + enterpriseUserRoleDAO.save(eid, new EnterpriseUserRole(roleIdByRoleEnum.toString(), userId)); + } + } + //TODO 三更新该用户的角色信息:新增或者删除 + //TODO 四.更新该用户区域权限信息(可见区域与门店) 2021-5-6 新增判断字段,存在只添加用户信息以及用户部门信息的场景 + //根据钉钉返回信息,获得该用户拥有的可视化权限 + Map leaderMap = new HashMap<>(); + List leaderInDept = new ArrayList<>(); + if (StringUtils.isNotBlank(enterpriseUser.getIsLeaderInDepts())) { + String leaderDeptStr = enterpriseUser.getIsLeaderInDepts().replaceAll("\\[", "").replaceAll("\\]", ""); + leaderDeptStr = leaderDeptStr.replace(" ", ""); + if(StringUtils.isNotBlank(leaderDeptStr)){ + leaderInDept = Arrays.stream(leaderDeptStr.split(",")).map(String::valueOf).collect(Collectors.toList()); + } + } + //自建私服直接去字段 + if(AppTypeEnum.isWxSelfAndPrivateType(appType) && CollectionUtils.isNotEmpty(request.getLeaderInDepts())){ + leaderInDept = request.getLeaderInDepts(); + } + + if (fsDeptIds.size() != leaderInDept.size()) { + return; + } + for (int i = 0; i < fsDeptIds.size(); i++) { + leaderMap.put(fsDeptIds.get(i), CommonConstants.ONE_STR.equals(leaderInDept.get(i))); + } + syncUserAuth(userId, eid, fsDeptIds, enterpriseUser.getPosition(), leaderMap, appType); + } + + public void syncUserAuth(String userId, String eid, List deptIds, String position, Map leaderMap, String appType) { + List dingUserAuthList = getSyncAuthMappingList(leaderMap, position, userId, eid, deptIds, appType); + //用户在cool中已有的可视范围映射关系 + List coolUserAuthList = userAuthMappingDAO.listUserAuthMappingByUserId(eid, userId); + Map userAuthMap = ListUtils.emptyIfNull(coolUserAuthList) + .stream() + .collect(Collectors.toMap(UserAuthMappingDO::getMappingId, data -> data, (a, b) -> a)); + for (UserAuthMappingDO userAuth : dingUserAuthList) { + UserAuthMappingDO auth = userAuthMap == null ? null : userAuthMap.get(userAuth.getMappingId()); + if (auth == null) { + userAuthMappingDAO.insertUserAuthMapping(eid, userAuth); + } else { + coolUserAuthList.remove(auth); + } + } + if (CollectionUtils.isNotEmpty(coolUserAuthList)) { + List deleteAuthIds = coolUserAuthList.stream() + .filter(data -> "sync".equals(data.getSource()) ) + .map(UserAuthMappingDO::getId).collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(deleteAuthIds)){ + userAuthMappingDAO.deleteAuthMappingByIds(eid, deleteAuthIds); + } + } + } + + private List getSyncAuthMappingList(Map map + , String position, String userId, String eid, List deptIds, String appType) { + //该用户相关区域 3-25现在用户可视权限不涉及门店,只需要考虑区域,而且区域信息表中会冗余门店的信息,根据区域类型判断是否是门店 + List regions = regionDAO.getRegionByDingDeptIds(eid, deptIds); +// List stores = storeMapper.getStoreByDingDeptIds(eid, dingDeptIds); 获得所有的门店类型 2021-5-6 区域表修改,不在冗余门店类型的区域 + //添加人员权限映射表,即用户可见范围 + List userAuthMappingDOList = new ArrayList<>(); + //判断是否是自定义区域权限 + Boolean isCustomizeRole = false; + //用户在该区域(部门)是管理员时,拥有可见权限 + regions.forEach(region -> { + UserAuthMappingDO mappingDO = new UserAuthMappingDO(userId, region.getId().toString(), UserAuthMappingTypeEnum.REGION.getCode() + , "sync", "system", System.currentTimeMillis()); + //2.自定义区域权限配置 + if (isCustomizeRole) { + userAuthMappingDOList.add(mappingDO); + return; + } + if(appType!= null && appType.startsWith(AppTypeEnum.WX_PRIVATE_ZHOU.getValue())){ + userAuthMappingDOList.add(mappingDO); + } + }); + return userAuthMappingDOList; + } + + public void syncUserRegionMapping(String eid, String userId, List deptIds) { + //现在已经存在的用户和区域的映射关系 + List userRegionMappingDOS = userRegionMappingDAO.listUserRegionMappingByUserId(eid, Arrays.asList(userId)); + Map userRegionMap = ListUtils.emptyIfNull(userRegionMappingDOS) + .stream() + .collect(Collectors.toMap(UserRegionMappingDO::getRegionId, data -> data, (a, b) -> a)); + //db查询区域表的数据,找到映射的区域 + List regionIds = regionDAO.getRegionIdsBySynDingDeptIds(eid, deptIds); + if (CollectionUtils.isEmpty(regionIds)) { + //没有任何映射的区域放在未分组下 + regionIds.add(CommonConstants.UNGROUPED_DEPT_ID); + } + List userRegionMappings = new ArrayList<>(); + for (Long regionId : regionIds) { + UserRegionMappingDO userRegionMappingDO = userRegionMap.get(String.valueOf(regionId)); + if (Objects.nonNull(userRegionMappingDO)) { + userRegionMappingDOS.remove(userRegionMappingDO); + } else { + //换成批量新增 + UserRegionMappingDO userRegion = new UserRegionMappingDO(); + userRegion.setUserId(userId); + userRegion.setCreateTime(System.currentTimeMillis()); + userRegion.setUpdateTime(System.currentTimeMillis()); + userRegion.setRegionId(String.valueOf(regionId)); + userRegionMappings.add(userRegion); + } + if (userRegionMappings.size() > CommonConstants.DEAL_RECORD_MAX_SIZE) { + userRegionMappingDAO.batchInsertRegionMapping(eid, userRegionMappings); + userRegionMappings.clear(); + } + } + + //批量新增 + if (CollectionUtils.isNotEmpty(userRegionMappings)) { + Lists.partition(userRegionMappings, CommonConstants.DEAL_RECORD_MAX_SIZE).forEach(p -> { + userRegionMappingDAO.batchInsertRegionMapping(eid, p); + }); + } + //删除用户移除的区域关系 + if (CollectionUtils.isNotEmpty(userRegionMappingDOS)) { + List deleteUserRegions = userRegionMappingDOS.stream() + .map(UserRegionMappingDO::getId) + .collect(Collectors.toList()); + userRegionMappingDAO.deletedByIds(eid, deleteUserRegions); + } + } + + public void syncUserDepartmentAuth(String eid, String userId, List deptIds) { + if (CollectionUtils.isEmpty(deptIds)) { + return; + } + //该用户在cool中的部门列表,该部门id为cool的id。 + List userDepartmentsAuth = enterpriseUserDepartmentDAO.selectUserDeptAuthByUserId(eid, userId); + Map userDeptAuthMap = ListUtils.emptyIfNull(userDepartmentsAuth) + .stream() + .collect(Collectors.toMap(EnterpriseUserDepartmentDO::getDepartmentId, data -> data, (a, b) -> a)); + List enterpriseUserDepartmentDOS = new ArrayList<>(); + for (String deptId : deptIds) { + EnterpriseUserDepartmentDO userDepartmentDO = userDeptAuthMap.get(deptId); + if (Objects.nonNull(userDepartmentDO)) { + userDepartmentsAuth.remove(userDepartmentDO); + } else { + //换成批量新增 + EnterpriseUserDepartmentDO departmentDO = new EnterpriseUserDepartmentDO(userId, deptId, Boolean.TRUE); + enterpriseUserDepartmentDOS.add(departmentDO); + } + } + batchInsertOrDelUserDepartment(enterpriseUserDepartmentDOS, eid, userDepartmentsAuth); + } + + public void syncUserDepartment(String eid, String userId, List deptIds) { + if (CollectionUtils.isEmpty(deptIds)) { + return; + } + //该用户在cool中的部门列表,该部门id为cool的id。 + List userDepartments = enterpriseUserDepartmentDAO.selectUserDeptByUserId(eid, userId); + Map userDeptMap = ListUtils.emptyIfNull(userDepartments) + .stream() + .collect(Collectors.toMap(EnterpriseUserDepartmentDO::getDepartmentId, data -> data, (a, b) -> a)); + List dos = new ArrayList<>(); + deptIds.forEach(deptId -> { + EnterpriseUserDepartmentDO userDepartmentDO = userDeptMap.get(deptId); + if (Objects.nonNull(userDepartmentDO)) { + userDepartments.remove(userDepartmentDO); + } else { + //换成批量新增 + EnterpriseUserDepartmentDO departmentDO = new EnterpriseUserDepartmentDO(userId, deptId, Boolean.FALSE); + dos.add(departmentDO); + } + }); + //批量新增 + batchInsertOrDelUserDepartment(dos, eid, userDepartments); + } + + private void batchInsertOrDelUserDepartment(List enterpriseUserDepartmentDOS, String eid, + List userDepartmentsAuth) { + //批量新增 + if (CollectionUtils.isNotEmpty(enterpriseUserDepartmentDOS)) { + Lists.partition(enterpriseUserDepartmentDOS, CommonConstants.DEAL_RECORD_MAX_SIZE).forEach(p -> { + enterpriseUserDepartmentDAO.batchInsert(eid, p); + }); + } + if (CollectionUtils.isNotEmpty(userDepartmentsAuth)) { + List deleteUserDeptIds = userDepartmentsAuth.stream() + .map(EnterpriseUserDepartmentDO::getId) + .collect(Collectors.toList()); + enterpriseUserDepartmentDAO.deleteByIdList(eid, deleteUserDeptIds); + } + } + + public void newSyncFsDept(String eid, Long regionId){ + DataSourceHelper.reset(); + EnterpriseConfigDO config = enterpriseConfigDAO.selectByEnterpriseId(eid); + EnterpriseDO enterpriseDO = enterpriseDAO.getEnterpriseById(eid); + Set deleteDeptIds = syncDept(config.getDingCorpId(), config.getAppType(), eid, config.getDbName()); + if (CollectionUtils.isNotEmpty(deleteDeptIds)) { + //删除不存在的数据 + sysDepartmentDAO.deleteByNotInIds(eid, new ArrayList<>(deleteDeptIds)); + } + //先获得这次同步的数据范围 regionId 不为null 指定部门ID + List deptIds = new ArrayList<>(); + String unitId = CommonConstants.ROOT_DEPT_ID_STR;; + RegionDO regionDO =null; + if (regionId!=null){ + DataSourceHelper.changeToSpecificDataSource(config.getDbName()); + regionDO = regionDAO.getByRegionId(eid, regionId); + deptIds.add(regionDO.getSynDingDeptId()); + unitId = regionDO.getSynDingDeptId(); + } + List departmentList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(deptIds)){ + for (String deptId: deptIds) { + List departmentDTOList = isvHttpRequest.getSubDepartments(config.getDingCorpId(), config.getAppType(), deptId, Boolean.TRUE); + if(CollectionUtils.isNotEmpty(departmentDTOList)){ + for(SysDepartmentDTO departmentDTO : departmentDTOList){ + if(departmentDTO.getId().equals(CommonConstants.ROOT_DEPT_ID_STR) && StringUtils.isBlank(departmentDTO.getName())){ + departmentDTO.setName(enterpriseDO.getName()); + } + if(!departmentDTO.getId().equals(CommonConstants.ROOT_DEPT_ID_STR) && deptIds.contains(departmentDTO.getId())&®ionId==null){ + departmentDTO.setParentId(CommonConstants.ROOT_DEPT_ID_STR); + } + departmentList.add(convertSysDepartmentDTO2SysDepartmentDO(departmentDTO, config.getAppType())); + } + } + } + }else { + departmentList = getAllDepts(null,config.getDingCorpId(), config.getAppType()); + } + //转换部门为区域,同时判断好该区域是否为门店 + List regionList = new ArrayList<>(); + if (unitId.equals(CommonConstants.ROOT_DEPT_ID_STR)&&!deptIds.contains(unitId)) { + RegionDTO rootRegion = new RegionDTO(); + rootRegion.setName(enterpriseDO.getName()); + rootRegion.setSynDingDeptId(CommonConstants.ROOT_DEPT_ID_STR); + rootRegion.setParentId(CommonConstants.ZERO_STR); + rootRegion.setStoreRange(false); + regionList.add(rootRegion); + } + if (regionId!=null){ + RegionDTO rootRegion = new RegionDTO(); + rootRegion.setName(regionDO.getName()); + rootRegion.setSynDingDeptId(regionDO.getSynDingDeptId()); + rootRegion.setParentId(regionDO.getRegionId()); + rootRegion.setStoreRange(false); + regionList.add(rootRegion); + } + List deptRegionList = transDeptToRegion(departmentList, config.getAppType()); + regionList.addAll(deptRegionList); + newSyncOrgAll(eid,regionId, unitId, regionList); + } + + public void newSyncOrgAll(String eid,Long regionId ,String unitId, List resultList) { + if(CollectionUtils.isEmpty(resultList)){ + return; + } + //先去重 + resultList = resultList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> + new TreeSet<>(Comparator.comparing(RegionDTO::getSynDingDeptId))), ArrayList::new)); + DataSourceHelper.reset(); + EnterpriseConfigDO enterpriseConfigDO = enterpriseConfigDAO.selectByEnterpriseId(eid); + DataSourceHelper.changeToSpecificDataSource(enterpriseConfigDO.getDbName()); + + String userId = ""; + String regionKey = redisConstantUtil.getSyncRegionKey(eid); + String storeKey = redisConstantUtil.getSyncStoreKey(eid); + + Map mapResult = resultList.stream().collect(Collectors.toMap(RegionDTO::getSynDingDeptId, org -> org)); + //取的是跟节点或者指定节点 + // TODO: 2022/8/2 + RegionDTO root = mapResult.get(unitId); + if(root == null){ + throw new ServiceException("需要同步的节点不存在,同步失败 unitId:" + unitId); + } + + //上下级一致修改为根节点 + resultList.forEach(e ->{ + if(StringUtils.isNotBlank(e.getSynDingDeptId()) && e.getSynDingDeptId().equals(e.getParentId())){ + e.setParentId(root.getSynDingDeptId()); + } + }); + + //根据父节点分组 + Map> parentGroup = ListUtils.emptyIfNull(resultList) + .stream() + .collect(Collectors.groupingBy(RegionDTO::getParentId)); + + //构建根节点 + root.setSynDingDeptId(unitId); + + //如果是节点同步,regionId就是该次同步的头节点,如果不设置为根节点,数据将会有问题 + if (regionId!=null){ + root.setId(regionId); + } + //构建数据 + RegionDO rootRegion = prepareRegionRoot(eid, userId, root); + if(rootRegion == null){ + return; + } + Queue queue = new LinkedList<>(); + queue.add(rootRegion); + + //节点同步的时候,需要将该节点个regionPath拿到,之后的数据都是基于该regionPath + if (regionId!=null){ + RegionDO regionDO = regionDAO.getByRegionId(eid, regionId); + rootRegion.setRegionPath(regionDO.getRegionPath()); + } + List regionList = regionDAO.getSpecifiedRegionIdAndDeptId(eid,regionId); + List regionSelfList = new ArrayList<>(); + Map regionMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(regionList)) { + regionSelfList = regionList.stream() + .filter((RegionSyncDTO s) -> StringUtils.isBlank(s.getSynDingDeptId())).map(RegionSyncDTO::getId) + .collect(Collectors.toList()); + + regionMap = regionList.stream().filter((RegionSyncDTO s) -> StringUtils.isNotBlank(s.getSynDingDeptId())&&s.getId()!=null).collect(Collectors.toMap(RegionSyncDTO::getSynDingDeptId, RegionSyncDTO::getId)); + } + List storeDOList = storeDAO.getSpecifiedStoreIdsAndDeptId(eid,regionId); + List removeStoreList = new ArrayList<>(); + Map storeMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(storeDOList)) { + removeStoreList = storeDOList.stream() + .filter((RegionSyncDTO s) -> StringUtils.isBlank(s.getSynDingDeptId())) + .map(e -> String.valueOf(e.getId())).collect(Collectors.toList()); + storeMap = storeDOList.stream().filter((RegionSyncDTO s) -> + StringUtils.isNotBlank(s.getSynDingDeptId())&&s.getId()!=null).collect(Collectors.toMap(RegionSyncDTO::getSynDingDeptId, RegionSyncDTO::getId)); + } + //有效期一天 完成任务删除 + redisUtil.putAll(storeKey, storeMap, 1L, TimeUnit.DAYS); + //有效期一天 + redisUtil.putAll(regionKey, regionMap, 1L, TimeUnit.DAYS); + + + while (!queue.isEmpty()) { + int size = queue.size(); + //门店区域 + List storeRegionList = new ArrayList<>(); + + for (int i = 0; i < size; i++) { + RegionDO deptInfo = queue.poll(); + + Long parentId = deptInfo.getId(); + if(deptInfo.getStoreRange() == null){ + deptInfo.setStoreRange(false); + } + //是门店则结束探下级 + if(deptInfo.getStoreRange()){ + storeRegionList.add(deptInfo); + continue; + } + + //查询下一级节点 + List deptList = parentGroup.get(deptInfo.getSynDingDeptId()); + + log.info(" deptList deptId : {} deptList.size:{}", deptInfo.getSynDingDeptId(), deptList == null ? 0 : deptList.size()); + //叶子节点 + if (CollectionUtils.isEmpty(deptList)) { + log.info("叶子节点:deptId:{}", deptInfo.getId()); + continue; + } + + + List regionInsertList = new ArrayList<>(); + List regionUpdateList = new ArrayList<>(); + deptList.forEach(e -> { + RegionDO region = new RegionDO(); + region.setParentId(String.valueOf(parentId)); + region.setName(e.getName()); + region.setCreateTime(System.currentTimeMillis()); + region.setUpdateTime(System.currentTimeMillis()); + region.setSynDingDeptId(String.valueOf(e.getSynDingDeptId())); + region.setRegionType(RegionTypeEnum.PATH.getType()); + region.setStoreRange(e.getStoreRange()); + region.setAddress(e.getAddress()); + region.setStoreCode(e.getStoreCode()); + region.setLongitude(e.getLongitude()); + region.setLatitude(e.getLatitude()); + if(region.getStoreRange()){ + log.info("门店"); + //转换经纬度 +// changeGaode(region); + } + String regionPath; + if(StringUtils.isBlank(deptInfo.getRegionPath())){ + regionPath = "/1/"; + }else { + regionPath = deptInfo.getRegionPath().endsWith("/") ? deptInfo.getRegionPath() + deptInfo.getId() + "/" : + deptInfo.getRegionPath() + "/" + deptInfo.getId() + "/" ; + } + if(!regionPath.startsWith("/")){ + regionPath = "/" + regionPath; + } + regionPath = regionPath.replaceAll("//", "/"); + region.setRegionPath(regionPath); + region.setDeleted(false); + String deptId = e.getSynDingDeptId(); + String id = redisUtil.hashGetString(regionKey, deptId); + if (StringUtils.isNotBlank(id)) { + region.setId(Long.valueOf(id)); + //删除对应的已有redis key缓存 + redisUtil.delete(regionKey, deptId); + regionUpdateList.add(region); + } else { + regionInsertList.add(region); + } + }); + log.info("regionUpdateList:size:{}", regionUpdateList.size()); + if (CollectionUtils.isNotEmpty(regionUpdateList)) { + log.info("regionUpdateList:int"); + for(RegionDO regionDO : regionUpdateList){ + //批量插入或更新 + regionService.saveRegionAndStore(eid, regionDO, userId); + } + queue.addAll(regionUpdateList); + } + log.info("regionInsertList:size:{}", regionInsertList.size()); + if (CollectionUtils.isNotEmpty(regionInsertList)) { + log.info("regionInsertList:int"); + try { + for(RegionDO regionDO : regionInsertList){ + //批量插入或更新 + regionService.saveRegionAndStore(eid, regionDO, userId); + } + } catch (Exception e) { + log.error("保存部门异常 eid :{} deptId :{} deptName :{}", eid, deptInfo.getId(), deptInfo.getName()); + log.error("保存部门异常细节",e); + if (e instanceof DuplicateKeyException) { + throw new ServiceException(deptInfo.getName() + "[" + deptInfo.getId() + "] 下级部门和其他同步部门有上下级关系"); + } + throw new ServiceException(deptInfo.getName() + "[" + deptInfo.getId() + "] 保存异常"); + } + queue.addAll(regionInsertList); + } + } + } + + + Map leftMap = redisUtil.entries(regionKey); + List regionIdList = new ArrayList<>(); + if (!leftMap.isEmpty()) { + for (Map.Entry entry : leftMap.entrySet()) { + if (CommonConstants.ROOT_DEPT_ID_STR.equals(entry.getKey()) || CommonConstants.DELETE_DEPT_ID.equals(entry.getKey())) { + continue; + } + regionIdList.add(Long.valueOf(entry.getValue().toString())); + } + } + //移除删除的钉钉区域 + if (CollectionUtils.isNotEmpty(regionIdList)) { + regionService.removeRegions(eid, regionIdList); + } + //移除自有的区域 + if (CollectionUtils.isNotEmpty(regionSelfList)) { + Lists.partition(regionSelfList, CommonConstants.DEAL_RECORD_MAX_SIZE).forEach(idList -> regionService.removeRegions(eid, idList)); + } + Map leftStoreMap = redisUtil.entries(storeKey); + if (!leftStoreMap.isEmpty()) { + for (Map.Entry entry : leftStoreMap.entrySet()) { + removeStoreList.add(entry.getValue().toString()); + } + } + //移除无用门店 + if (CollectionUtils.isNotEmpty(removeStoreList)) { + List storeIds = storeDAO.getStoreIdByIdList(eid, removeStoreList); + if(CollectionUtils.isNotEmpty(storeIds)){ + Lists.partition(storeIds, CommonConstants.DEAL_RECORD_MAX_SIZE).forEach(idList -> regionService.deleteByStoreIds(eid, idList, userId)); + } + } + //发消息计算门店数量 + //simpleMessageService.send(JSONObject.toJSONString(new RegionStoreNumRecursionMsgDTO(eid, Long.valueOf(SyncConfig.ROOT_DEPT_ID))), RocketMqTagEnum.CAL_REGION_STORE_NUM); + } + + private RegionDO prepareRegionRoot(String eid, String userId, RegionDTO deptRoot) { + + RegionNode regionDelete = regionDAO.getRegionById(eid, CommonConstants.DELETE_DEPT_ID); + + if (regionDelete == null) { + regionDAO.insertRegion(eid, RegionDO.builder().name("删除区域") + .createName(userId) + .createTime(System.currentTimeMillis()) + .id(Long.valueOf(CommonConstants.DELETE_DEPT_ID)) + .build()); + } + + String regionType = ""; + if (deptRoot.getSynDingDeptId().equals(CommonConstants.ROOT_DEPT_ID_STR)){ + regionType = RegionTypeEnum.ROOT.getType(); + }else { + regionType = deptRoot.getStoreRange()? RegionTypeEnum.STORE.getType():RegionTypeEnum.PATH.getType(); + } + RegionDO rootDO = RegionDO.builder().name(deptRoot.getName()). + synDingDeptId(deptRoot.getSynDingDeptId()) + .updateTime(System.currentTimeMillis()) + .deleted(false) + .parentId(deptRoot.getParentId()) + .id(deptRoot.getId()) + .regionType(regionType) + .build(); + if(deptRoot.getId() == null){ + rootDO.setId(Long.valueOf(CommonConstants.ROOT_DEPT_ID_STR)); + rootDO.setParentId("0"); + } + regionDAO.insertOrUpdate(rootDO, eid); + return rootDO; + } + + + public Set syncDept(String corpId, String appType, String enterpriseId, String dbName) { + List sysDepartments = getFsDepartmentsV1(corpId, appType); + Set idSet = new HashSet<>(); + log.info("{} get depts size={}", corpId, sysDepartments.size()); + idSet = sysDepartments.stream().map(SysDepartmentDO::getId).collect(Collectors.toSet()); + DataSourceHelper.changeToSpecificDataSource(dbName); + //分开批量插入 + if (CollectionUtils.isNotEmpty(sysDepartments)) { + Lists.partition(sysDepartments, CommonConstants.DEAL_RECORD_MAX_SIZE).forEach(p -> { + sysDepartmentDAO.batchInsertOrUpdate(enterpriseId, p); + }); + } + return idSet; + } + + public List getFsDepartmentsV1(String corpId, String appType) { + + AuthInfoDTO authInfo = isvHttpRequest.getAuthInfo(corpId, appType); + String corpName = authInfo.getAuthCorpInfo().getCorpName(); + SysDepartmentDO rootSysDepartment = getRootSysDepartment(corpName); + log.info("getPySysDepartmentsV2:{}", JSONObject.toJSONString(rootSysDepartment)); + List sysDepartments = Lists.newArrayList(); + sysDepartments.add(rootSysDepartment); + List deptIdList = isvHttpRequest.getAuthScope(corpId, appType).getDeptIdList(); + if (CollectionUtils.isNotEmpty(deptIdList)) { + //特殊处理,全部授权时,拿到第一级节点部门 + if (deptIdList.size()== CommonConstants.ONE && deptIdList.contains(CommonConstants.ROOT_DEPT_ID_STR)){ + deptIdList = Lists.newArrayList() ; + } + List allDepts = getAuthScopeAllDepts(deptIdList, corpId, appType); + if (CollectionUtils.isNotEmpty(allDepts)) { + sysDepartments.addAll(allDepts); + } + } + return sysDepartments; + } + + public List getAuthScopeAllDepts(List ids, String corpId, String appType){ + List departments = Lists.newArrayList(); + + if (CollectionUtils.isEmpty(ids)){ + List subDepts = Lists.newArrayList(); + try { + subDepts = getAllDepts(null, corpId,appType); + } catch (ServiceException e) { + log.info("飞书获取部门列表失败:id:{},corpId:{},appType:{},e:{}",ids,corpId,appType,e); + } + //过滤掉root部门 + subDepts = subDepts.stream().filter(x->! CommonConstants.ROOT_DEPT_ID_STR.equals(x.getId())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(subDepts)) { + departments.addAll(subDepts); + } + } + for (String id : ids) { + List subDepts = Lists.newArrayList(); + try { + subDepts = getAllDepts(id, corpId,appType); + } catch (ServiceException e) { + log.info("飞书获取部门列表失败:id:{},corpId:{},appType:{},e:{}",id,corpId,appType,e); + } + if (CollectionUtils.isNotEmpty(subDepts)) { + departments.addAll(subDepts); + } + } + + //去重 + departments = departments.stream().distinct().collect(Collectors.toList()); + Set idSet = departments.stream().map(r -> r.getId()).collect(Collectors.toSet()); + + departments.forEach(d -> { + if (!idSet.contains(d.getParentId())) { + d.setParentId(CommonConstants.ROOT_DEPT_ID_STR); + } + }); + + return departments; + } + + public List getAllDepts(String id, String corpId, String appType) { + List sysDepartments = Lists.newArrayList(); + List departments = isvHttpRequest.getDepartments(corpId, appType, id); + log.info("feishu_getAllDepts:{}",JSONObject.toJSONString(departments)); + if (CollectionUtils.isEmpty(departments)) { + return sysDepartments; + } + for (SysDepartmentDTO sysDepartmentDTO:departments) { + SysDepartmentDO sysDepartment = new SysDepartmentDO(); + sysDepartment.setId(sysDepartmentDTO.getId()); + sysDepartment.setName(sysDepartmentDTO.getName()); + sysDepartment.setParentId(sysDepartmentDTO.getParentId()); + sysDepartment.setDepartOrder(sysDepartmentDTO.getDepartOrder()); + sysDepartments.add(sysDepartment); + } + return sysDepartments; + } + + private SysDepartmentDO getRootSysDepartment(String corpName) { + SysDepartmentDO rootDepartment = new SysDepartmentDO(); + rootDepartment.setId(CommonConstants.ROOT_DEPT_ID_STR); + rootDepartment.setName(corpName); + return rootDepartment; + } + + public List transDeptToRegion(List deptList, String appType) { + List result = new ArrayList<>(); + //根据父节点分组 + Map> parentGroup = ListUtils.emptyIfNull(deptList) + .stream() + .filter(d -> !CommonConstants.ROOT_DEPT_ID_STR.equals(d.getId())) + .collect(Collectors.groupingBy(SysDepartmentDO::getParentId)); + //部门 名称映射 + Map deptNameMap = ListUtils.emptyIfNull(deptList) + .stream().collect(Collectors.toMap(SysDepartmentDO::getId, SysDepartmentDO::getName,(k1, k2)->k1)); + dealDeptParentIds(deptList); + for (SysDepartmentDO dept : deptList) { + RegionDTO region = new RegionDTO(); + region.setName(dept.getName()); + if (!AppTypeEnum.isFsType(appType)) { + region.setId(Long.valueOf(dept.getId())); + } + region.setParentId(dept.getParentId() == null ? CommonConstants.ZERO_STR : dept.getParentId().toString()); + region.setSynDingDeptId(dept.getId()); + //region.setStoreRange(storeRuleJudge(dept, enterpriseSettingVO, parentGroup)); + result.add(region); + } + return result; + } + + public void dealDeptParentIds(List deptList){ + Map departmentMap = deptList.stream().collect(Collectors.toMap(k->k.getId(), Function.identity(), (k1, k2)->k1)); + Map> parentDepMap = deptList.stream().filter(o->Objects.nonNull(o.getParentId())).collect(Collectors.groupingBy(k->k.getParentId())); + for (SysDepartmentDO sysDepartment : deptList) { + String parentId = sysDepartment.getParentId(); + List parentIds = new ArrayList<>(); + if(Objects.nonNull(parentId)){ + parentIds.add(parentId); + } + SysDepartmentDO parentDept = departmentMap.get(parentId); + while (Objects.nonNull(parentDept)){ + String pId = parentDept.getParentId(); + parentDept = departmentMap.get(parentDept.getParentId()); + if(Objects.nonNull(pId)){ + parentIds.add(pId); + } + } + Collections.reverse(parentIds); + sysDepartment.setParentIds(JSONObject.toJSONString(parentIds)); + List sysDepartmentDOS = parentDepMap.get(sysDepartment.getId()); + sysDepartment.setIsLeaf(CollectionUtils.isEmpty(sysDepartmentDOS)); + } + } + public void dealUsers(List users, String eid, String corpId, String dbName, Map deptIdMap, Long unclassifiedRegionId, AuthInfoDTO authInfo, Set handlerUserIds) { @@ -283,7 +1239,7 @@ public class EnterpriseInitServiceImpl implements EnterpriseInitService { regionDO.setUnclassifiedFlag(CommonConstants.ZERO); regionDO.setRegionPath(null); regionDO.setStoreNum(CommonConstants.ONE); - regionDAO.insertRoot(eid, regionDO); + regionDAO.insertRegion(eid, regionDO); //同步部门为区域节点 initRegionByDepartment(eid, CommonConstants.ROOT_DEPT_ID_STR); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseUserServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseUserServiceImpl.java index 501e13fa6..17f9b918f 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseUserServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseUserServiceImpl.java @@ -14,11 +14,13 @@ import com.cool.store.dto.usergroup.UserGroupDTO; import com.cool.store.entity.*; import com.cool.store.enums.SubordinateSourceEnum; import com.cool.store.enums.UserSelectRangeEnum; +import com.cool.store.request.EnterpriseUserRequest; import com.cool.store.service.AuthVisualService; import com.cool.store.service.EnterpriseUserGroupService; import com.cool.store.service.EnterpriseUserService; import com.cool.store.vo.buser.EnterpriseUserPageVO; import com.github.pagehelper.PageHelper; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -367,4 +369,33 @@ public class EnterpriseUserServiceImpl implements EnterpriseUserService { }); return resultMap; } + + @Override + public void updateUserDeptPath(EnterpriseUserRequest user, Map deptIdMap) { + List departmentLists = user.getDepartmentLists(); + //logger.info("设置用户部门全路径 start department:{},user:{},id:{}",department,user.getUnionid(),user.getId()); + if (CollectionUtils.isNotEmpty(departmentLists)) { + //logger.info("into if else department "); + List deptList = Lists.newArrayList(); + departmentLists.forEach(deptId -> { + List tmpList = Lists.newArrayList(deptId); + String parentId; + while ((parentId = deptIdMap.get(deptId)) != null && (!parentId.equals(deptId))) { + tmpList.add(parentId); + deptId = parentId; + } + String collect = Lists.reverse(tmpList).stream().map(String::valueOf).collect(Collectors.joining("/")); + String data = collect.startsWith("/") ? collect : "/" + collect; + data = data.endsWith("/") ? data : data + "/"; + deptList.add(data); + }); + user.setDepartments("[" + String.join(",", deptList) + "]"); + user.getEnterpriseUserDO().setDepartments("[" + String.join(",", deptList) + "]"); + } + } + + @Override + public EnterpriseUserDO selectByUserIdIgnoreActive(String enterpriseId, String userId) { + return enterpriseUserDAO.selectByUserIdIgnoreActive(enterpriseId, userId); + } } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/RegionServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/RegionServiceImpl.java new file mode 100644 index 000000000..41d9938be --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/RegionServiceImpl.java @@ -0,0 +1,151 @@ +package com.cool.store.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.dao.RegionDAO; +import com.cool.store.dao.StoreDAO; +import com.cool.store.dao.UserAuthMappingDAO; +import com.cool.store.dto.region.RegionStoreNumMsgDTO; +import com.cool.store.entity.RegionDO; +import com.cool.store.entity.StoreDO; +import com.cool.store.enums.RegionTypeEnum; +import com.cool.store.enums.RocketMqTagEnum; +import com.cool.store.enums.StoreIsDeleteEnum; +import com.cool.store.enums.UserAuthMappingTypeEnum; +import com.cool.store.mq.producer.SimpleMessageService; +import com.cool.store.service.RegionService; +import com.cool.store.utils.RedisConstantUtil; +import com.cool.store.utils.RedisUtil; +import com.cool.store.utils.UUIDUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.ListUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Calendar; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: RegionServiceImpl + * @Description: + * @date 2023-06-05 10:43 + */ +@Service +public class RegionServiceImpl implements RegionService { + + @Resource + private RedisUtil redisUtil; + @Resource + private RedisConstantUtil redisConstantUtil; + @Resource + private StoreDAO storeDAO; + @Resource + private RegionDAO regionDAO; + @Resource + private UserAuthMappingDAO userAuthMappingDAO; + @Resource + private SimpleMessageService simpleMessageService; + + @Transactional(rollbackFor = Exception.class) + @Override + public void saveRegionAndStore(String eid, RegionDO regionDO, String userId) { + String storeKey = redisConstantUtil.getSyncStoreKey(eid); + String storeId = null; + if(regionDO.getStoreRange()){ + StoreDO storeDO = storeDAO.getStoreBySynId(eid, regionDO.getSynDingDeptId()); + if(storeDO != null && StringUtils.isNotBlank(storeDO.getStoreId())){ + storeId = storeDO.getStoreId(); + }else { + storeId = UUIDUtils.get32UUID(); + } + } + regionDO.setStoreId(storeId); + regionDO.setRegionType(RegionTypeEnum.PATH.getType()); + RegionDO oldRegion = regionDAO.getBySynDingDeptId(eid, regionDO.getSynDingDeptId()); + boolean isAdd = oldRegion == null; + if (isAdd) { + if(regionDO.getStoreRange()){ + regionDO.setStoreId(storeId); + regionDO.setRegionType(RegionTypeEnum.STORE.getType()); + } + regionDAO.ignoreInsert(eid, regionDO); + } else { + if(regionDO.getStoreRange()){ + regionDO.setRegionType(RegionTypeEnum.STORE.getType()); + } + regionDAO.updateSyncRegion(eid, regionDO); + } + if (regionDO.getStoreRange()) { + StoreDO store = new StoreDO(); + store.setStoreName(regionDO.getName()); + store.setRegionPath(regionDO.getFullRegionPath()); + store.setIsDelete(StoreIsDeleteEnum.EFFECTIVE.getValue()); + store.setRegionId(Long.valueOf(regionDO.getParentId())); + store.setSource("sync"); + store.setStoreAddress(regionDO.getAddress()); + store.setLocationAddress(regionDO.getAddress()); + store.setStoreNum(regionDO.getStoreCode()); + store.setLatitude(regionDO.getLatitude()); + store.setLongitude(regionDO.getLongitude()); + store.setStoreId(storeId); + String id = redisUtil.hashGetString(storeKey, regionDO.getSynDingDeptId()); + if (StringUtils.isNotBlank(id)) { + store.setId(Long.valueOf(id)); + //删除对应的已有redis key缓存 + redisUtil.delete(storeKey, regionDO.getSynDingDeptId()); + store.setUpdateName(userId); + store.setUpdateTime(System.currentTimeMillis()); + storeDAO.updateStore(eid, store); + } else { + store.setIsLock("not_locked"); + store.setStoreStatus("open"); + store.setSynDingDeptId(regionDO.getSynDingDeptId()); + store.setCreateName(userId); + store.setCreateTime(System.currentTimeMillis()); + storeDAO.insertStore(eid, store); + } + } + } + + @Override + public void removeRegions(String eid, List regionIds) { + regionDAO.removeRegion(eid, regionIds); + } + + @Override + public void deleteByStoreIds(String enterpriseId, List storeIds, String userId) { + //获取门店基本信息 + List storeList = storeDAO.getStoreListByStoreIds(enterpriseId, storeIds); + if (CollectionUtils.isEmpty(storeList)) { + return; + } + // 删除门店绑定的权限 + userAuthMappingDAO.deleteAuthMappingByIdAndType(enterpriseId, storeIds, UserAuthMappingTypeEnum.STORE.getCode()); + // 删除门店本身 + storeDAO.deleteStoreByStoreIds(enterpriseId, storeIds, userId, Calendar.getInstance().getTimeInMillis()); + //更新区域内的门店数量 + List regionIdList = ListUtils.emptyIfNull(storeList) + .stream() + .map(StoreDO::getRegionId) + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(regionIdList)) { + List regionDOList = regionDAO.listStoreRegionByIds(enterpriseId, regionIdList); + List updateRegionIdList = ListUtils.emptyIfNull(regionDOList) + .stream() + .map(data -> StrUtil.splitTrim(data.getFullRegionPath(), "/")) + .flatMap(Collection::stream) + .map(Long::valueOf) + .collect(Collectors.toList()); + simpleMessageService.send(JSONObject.toJSONString(new RegionStoreNumMsgDTO(enterpriseId, updateRegionIdList)), RocketMqTagEnum.REGION_STORE_NUM_UPDATE); + } + } + +} diff --git a/coolstore-partner-webb/coolstore-partner-webb.iml b/coolstore-partner-webb/coolstore-partner-webb.iml index 65add6beb..594471493 100644 --- a/coolstore-partner-webb/coolstore-partner-webb.iml +++ b/coolstore-partner-webb/coolstore-partner-webb.iml @@ -31,11 +31,26 @@ + + + + + + + + + + + + + + + + - diff --git a/coolstore-partner-webb/pom.xml b/coolstore-partner-webb/pom.xml index 674569885..d6ef7b991 100644 --- a/coolstore-partner-webb/pom.xml +++ b/coolstore-partner-webb/pom.xml @@ -28,8 +28,6 @@ com.aliyun.oss aliyun-sdk-oss - 3.13.0 - compile diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/config/datasource/DynamicDataSource.java b/coolstore-partner-webb/src/main/java/com/cool/store/config/datasource/DynamicDataSource.java index f824ed852..aa55426c1 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/config/datasource/DynamicDataSource.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/config/datasource/DynamicDataSource.java @@ -6,6 +6,7 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Primary; import org.springframework.jdbc.datasource.AbstractDataSource; import org.springframework.stereotype.Component; @@ -27,10 +28,13 @@ public class DynamicDataSource extends AbstractDataSource { @Autowired private DynamicDataSourceServiceImpl dynamicDataSourceService; + @Value("${default.database.name:coolcollege_intelligent_config}") + private String defaultDb; + @Override public Connection getConnection() throws SQLException { String currentDbName = getCurrentDbName(); - if(CommonConstants.DEFAULT_DB.equals(currentDbName)){ + if(defaultDb.equals(currentDbName)){ Connection connection = defaultDataSource.getConnection(); connection.setCatalog(currentDbName); return connection; @@ -43,7 +47,7 @@ public class DynamicDataSource extends AbstractDataSource { @Override public Connection getConnection(String username, String password) throws SQLException { String currentDbName = getCurrentDbName(); - if(CommonConstants.DEFAULT_DB.equals(currentDbName)){ + if(defaultDb.equals(currentDbName)){ Connection connection = defaultDataSource.getConnection(); connection.setCatalog(currentDbName); return connection; @@ -97,7 +101,7 @@ public class DynamicDataSource extends AbstractDataSource { protected String getCurrentDbName() { String dbName = DataSourceContext.getDataSourceType(); if (StringUtils.isBlank(dbName)) { - dbName = CommonConstants.DEFAULT_DB; + dbName = defaultDb; } return dbName; } diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/config/datasource/DynamicDataSourceServiceImpl.java b/coolstore-partner-webb/src/main/java/com/cool/store/config/datasource/DynamicDataSourceServiceImpl.java index e07b8a4a2..413ff0b61 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/config/datasource/DynamicDataSourceServiceImpl.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/config/datasource/DynamicDataSourceServiceImpl.java @@ -14,6 +14,7 @@ import com.zaxxer.hikari.HikariDataSource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.sql.DataSource; @@ -33,17 +34,16 @@ public class DynamicDataSourceServiceImpl { private static int defaultMaxPoolSize = 150; - private static String dbUrl = "jdbc:mysql://{0}:{1}/coolcollege_intelligent_config?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true"; + private static String dbUrl = "jdbc:mysql://{0}:{1}/{2}?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true"; @Autowired private RedisUtilPool redisUtilPool; - @Autowired private MyHikariConfig myHikariConfig; - @Autowired private EnterpriseConfigService enterpriseConfigService; - + @Value("${default.database.name:coolcollege_intelligent_config}") + private String defaultDb; /** * 数据库实例和数据源的映射 */ @@ -71,7 +71,7 @@ public class DynamicDataSourceServiceImpl { * @return */ public String getDbServerByDbName(String dbName) { - if(CommonConstants.DEFAULT_DB.equals(dbName)){ + if(defaultDb.equals(dbName)){ return null; } String dbServerUrl = dbNameUrlServerMap.get(dbName); @@ -115,7 +115,7 @@ public class DynamicDataSourceServiceImpl { */ private DataSource buildDataSourceByConfig(DatasourceInfoDTO datasource) { HikariConfig hikariConfig = new HikariConfig(); - String url = MessageFormat.format(dbUrl, datasource.getDbServer(), String.valueOf(datasource.getDbPort())); + String url = MessageFormat.format(dbUrl, datasource.getDbServer(), String.valueOf(datasource.getDbPort()), datasource.getDbName()); hikariConfig.setDriverClassName(myHikariConfig.getDriverClassName()); hikariConfig.setMinimumIdle(myHikariConfig.getMinimumIdle()); hikariConfig.setMaximumPoolSize(myHikariConfig.getMaximumPoolSize()); diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/OssClientController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/OssClientController.java index a13f06ab1..f9e44fd53 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/OssClientController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/OssClientController.java @@ -5,14 +5,15 @@ import com.aliyun.oss.common.utils.BinaryUtil; import com.aliyun.oss.model.MatchMode; import com.aliyun.oss.model.PolicyConditions; import com.cool.store.response.ResponseResult; +import com.cool.store.vo.oss.OssUploadConfigVO; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; 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; import java.sql.Date; -import java.util.LinkedHashMap; -import java.util.Map; /** * @author zhangchenbiao @@ -25,24 +26,25 @@ import java.util.Map; @Slf4j public class OssClientController { + @Value("${oss.accessKeyId:null}") + private String accessKeyId; + @Value("${oss.accessKeySecret:null}") + private String accessKeySecret; + @Value("${oss.endpoint:null}") + private String endpoint; + @Value("${oss.bucket:null}") + private String bucket; + @GetMapping("/getUploadFileConfig") - public ResponseResult getUploadFileConfig(){ - // 请填写您的AccessKeyId。 - String accessId = "LTAI5tKSnAbkEbmT6CeBwNN3"; - // 请填写您的AccessKeySecret。 - String accessKey = "PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS"; - // 请填写您的 endpoint。 - String endpoint = "oss-cn-shanghai.aliyuncs.com"; - // 请填写您的 bucketname 。 - String bucket = "vec-coolstore"; + public ResponseResult getUploadFileConfig(@RequestParam("enterpriseId")String enterpriseId){ // host的格式为 bucketname.endpoint String host = "http://" + bucket + "." + endpoint; - // callbackUrl为 上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。 - String dir = "user-dir-prefix/"; // 用户上传文件时指定的前缀。 + // 用户上传文件时指定的前缀。 + String dir = "partner/" + enterpriseId + "/"; - OSSClient client = new OSSClient(endpoint, accessId, accessKey); + OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret); try { - long expireTime = 30; + long expireTime = 300; long expireEndTime = System.currentTimeMillis() + expireTime * 1000; Date expiration = new Date(expireEndTime); PolicyConditions policyConds = new PolicyConditions(); @@ -51,15 +53,9 @@ public class OssClientController { String postPolicy = client.generatePostPolicy(expiration, policyConds); byte[] binaryData = postPolicy.getBytes("utf-8"); String encodedPolicy = BinaryUtil.toBase64String(binaryData); - String postSignature = client.calculatePostSignature(postPolicy); - Map respMap = new LinkedHashMap(); - respMap.put("accessid", accessId); - respMap.put("policy", encodedPolicy); - respMap.put("signature", postSignature); - respMap.put("dir", dir); - respMap.put("host", host); - respMap.put("expire", String.valueOf(expireEndTime / 1000)); - return ResponseResult.success(respMap); + String signature = client.calculatePostSignature(postPolicy); + OssUploadConfigVO result = new OssUploadConfigVO(accessKeyId, encodedPolicy, signature, dir, host, String.valueOf(expireEndTime / 1000)); + return ResponseResult.success(result); }catch (Exception e){ log.info("exception", e); } diff --git a/coolstore-partner-webb/src/main/resources/application-ab.properties b/coolstore-partner-webb/src/main/resources/application-ab.properties index bc43cb647..d12393932 100644 --- a/coolstore-partner-webb/src/main/resources/application-ab.properties +++ b/coolstore-partner-webb/src/main/resources/application-ab.properties @@ -1,7 +1,7 @@ #mysql config -default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_config?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&serverTimezone=Asia/Shanghai -default.datasource.username=coolstore -default.datasource.password=CSCErYcXniNYm7bT +default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_hy?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true +default.datasource.username=hsay +default.datasource.password=Z3J7xBbgouMD #redis spring.redis.host=tstore-coolcollege.redis.rds.aliyuncs.com @@ -41,3 +41,5 @@ rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-internal.aliyuncs.com:8080 rocketmq.topic=simple_message rocketmq.orderTopic=order_message + +default.database.name=coolcollege_intelligent_hy diff --git a/coolstore-partner-webb/src/main/resources/application-dev.properties b/coolstore-partner-webb/src/main/resources/application-dev.properties index 1828df98a..71ad1c900 100644 --- a/coolstore-partner-webb/src/main/resources/application-dev.properties +++ b/coolstore-partner-webb/src/main/resources/application-dev.properties @@ -1,11 +1,7 @@ #mysql config -default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_config?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true -#default.datasource.url=jdbc:mysql://dstore-coolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_config?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&serverTimezone=Asia/Shanghai -default.datasource.username=coolstore -default.datasource.password=CSCErYcXniNYm7bT -#default.datasource.url=jdbc:mysql://127.0.0.1:3306/coolcollege_intelligent_config?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&serverTimezone=Asia/Shanghai -#default.datasource.username=root -#default.datasource.password=root +default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_hy?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true +default.datasource.username=hsay +default.datasource.password=Z3J7xBbgouMD #redis spring.redis.host=tstore-coolcollege.redis.rds.aliyuncs.com @@ -44,4 +40,6 @@ rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2 rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-internal.aliyuncs.com:8080 rocketmq.topic=simple_message -rocketmq.orderTopic=order_message \ No newline at end of file +rocketmq.orderTopic=order_message + +default.database.name=coolcollege_intelligent_hy \ No newline at end of file diff --git a/coolstore-partner-webb/src/main/resources/application-local.properties b/coolstore-partner-webb/src/main/resources/application-local.properties index 4a3d768f8..c2a50f435 100644 --- a/coolstore-partner-webb/src/main/resources/application-local.properties +++ b/coolstore-partner-webb/src/main/resources/application-local.properties @@ -1,11 +1,7 @@ #mysql config -default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_config?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true -#default.datasource.url=jdbc:mysql://dstore-coolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_config?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&serverTimezone=Asia/Shanghai -default.datasource.username=coolstore -default.datasource.password=CSCErYcXniNYm7bT -#default.datasource.url=jdbc:mysql://127.0.0.1:3306/coolcollege_intelligent_config?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&serverTimezone=Asia/Shanghai -#default.datasource.username=root -#default.datasource.password=root +default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_hy?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true +default.datasource.username=hsay +default.datasource.password=Z3J7xBbgouMD #redis spring.redis.host=tstore-coolcollege.redis.rds.aliyuncs.com @@ -47,4 +43,12 @@ rocketmq.accessKey=zK2oVEz4G1ts23d2 rocketmq.secretKey=0UstLCS0mh2ASgBh rocketmq.nameSrvAdder=http://rmq-cn-9lb38l1rx04.cn-hangzhou.rmq.aliyuncs.com:8080 rocketmq.topic=simple_message -rocketmq.orderTopic=order_message \ No newline at end of file +rocketmq.orderTopic=order_message + +#oss配置 +oss.accessKeyId=LTAI5tKSnAbkEbmT6CeBwNN3 +oss.accessKeySecret=PbXOzUFwAvZ2K5zIawwa7NAJE2pFXS +oss.endpoint=oss-cn-shanghai.aliyuncs.com +oss.bucket=vec-coolstore + +default.database.name=coolcollege_intelligent_hy \ No newline at end of file diff --git a/coolstore-partner-webb/src/main/resources/application-test.properties b/coolstore-partner-webb/src/main/resources/application-test.properties index 04cdb1ed2..ad573b430 100644 --- a/coolstore-partner-webb/src/main/resources/application-test.properties +++ b/coolstore-partner-webb/src/main/resources/application-test.properties @@ -1,7 +1,7 @@ #mysql config -default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_config?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&serverTimezone=Asia/Shanghai -default.datasource.username=coolstore -default.datasource.password=CSCErYcXniNYm7bT +default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_hy?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true +default.datasource.username=hsay +default.datasource.password=Z3J7xBbgouMD #redis spring.redis.host=tstore-coolcollege.redis.rds.aliyuncs.com @@ -40,4 +40,6 @@ rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2 rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-internal.aliyuncs.com:8080 rocketmq.topic=simple_message -rocketmq.orderTopic=order_message \ No newline at end of file +rocketmq.orderTopic=order_message + +default.database.name=coolcollege_intelligent_hy \ No newline at end of file diff --git a/coolstore-partner-webc/coolstore-partner-webc.iml b/coolstore-partner-webc/coolstore-partner-webc.iml index e887cd9da..a91efa453 100644 --- a/coolstore-partner-webc/coolstore-partner-webc.iml +++ b/coolstore-partner-webc/coolstore-partner-webc.iml @@ -31,11 +31,26 @@ + + + + + + + + + + + + + + + + - diff --git a/coolstore-partner-webc/src/main/resources/application-ab.properties b/coolstore-partner-webc/src/main/resources/application-ab.properties index 0fcca1410..71ad1c900 100644 --- a/coolstore-partner-webc/src/main/resources/application-ab.properties +++ b/coolstore-partner-webc/src/main/resources/application-ab.properties @@ -1,7 +1,7 @@ #mysql config -default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_config?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&serverTimezone=Asia/Shanghai -default.datasource.username=coolstore -default.datasource.password=CSCErYcXniNYm7bT +default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_hy?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true +default.datasource.username=hsay +default.datasource.password=Z3J7xBbgouMD #redis spring.redis.host=tstore-coolcollege.redis.rds.aliyuncs.com @@ -40,4 +40,6 @@ rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2 rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-internal.aliyuncs.com:8080 rocketmq.topic=simple_message -rocketmq.orderTopic=order_message \ No newline at end of file +rocketmq.orderTopic=order_message + +default.database.name=coolcollege_intelligent_hy \ No newline at end of file diff --git a/coolstore-partner-webc/src/main/resources/application-dev.properties b/coolstore-partner-webc/src/main/resources/application-dev.properties index 1828df98a..71ad1c900 100644 --- a/coolstore-partner-webc/src/main/resources/application-dev.properties +++ b/coolstore-partner-webc/src/main/resources/application-dev.properties @@ -1,11 +1,7 @@ #mysql config -default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_config?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true -#default.datasource.url=jdbc:mysql://dstore-coolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_config?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&serverTimezone=Asia/Shanghai -default.datasource.username=coolstore -default.datasource.password=CSCErYcXniNYm7bT -#default.datasource.url=jdbc:mysql://127.0.0.1:3306/coolcollege_intelligent_config?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&serverTimezone=Asia/Shanghai -#default.datasource.username=root -#default.datasource.password=root +default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_hy?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true +default.datasource.username=hsay +default.datasource.password=Z3J7xBbgouMD #redis spring.redis.host=tstore-coolcollege.redis.rds.aliyuncs.com @@ -44,4 +40,6 @@ rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2 rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-internal.aliyuncs.com:8080 rocketmq.topic=simple_message -rocketmq.orderTopic=order_message \ No newline at end of file +rocketmq.orderTopic=order_message + +default.database.name=coolcollege_intelligent_hy \ No newline at end of file diff --git a/coolstore-partner-webc/src/main/resources/application-local.properties b/coolstore-partner-webc/src/main/resources/application-local.properties index 041a63bc7..b3ace8492 100644 --- a/coolstore-partner-webc/src/main/resources/application-local.properties +++ b/coolstore-partner-webc/src/main/resources/application-local.properties @@ -1,11 +1,7 @@ #mysql config -default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_config?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true -#default.datasource.url=jdbc:mysql://dstore-coolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_config?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&serverTimezone=Asia/Shanghai -default.datasource.username=coolstore -default.datasource.password=CSCErYcXniNYm7bT -#default.datasource.url=jdbc:mysql://127.0.0.1:3306/coolcollege_intelligent_config?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&serverTimezone=Asia/Shanghai -#default.datasource.username=root -#default.datasource.password=root +default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_hy?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true +default.datasource.username=hsay +default.datasource.password=Z3J7xBbgouMD #redis spring.redis.host=tstore-coolcollege.redis.rds.aliyuncs.com @@ -48,3 +44,5 @@ rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-internal.aliyuncs.com:8080 rocketmq.topic=simple_message rocketmq.orderTopic=order_message + +default.database.name=coolcollege_intelligent_hy diff --git a/coolstore-partner-webc/src/main/resources/application-test.properties b/coolstore-partner-webc/src/main/resources/application-test.properties index 4fdad7b99..defe7cd06 100644 --- a/coolstore-partner-webc/src/main/resources/application-test.properties +++ b/coolstore-partner-webc/src/main/resources/application-test.properties @@ -1,7 +1,7 @@ #mysql config -default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_config?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&serverTimezone=Asia/Shanghai -default.datasource.username=coolstore -default.datasource.password=CSCErYcXniNYm7bT +default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_hy?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true +default.datasource.username=hsay +default.datasource.password=Z3J7xBbgouMD #redis spring.redis.host=tstore-coolcollege.redis.rds.aliyuncs.com @@ -38,4 +38,6 @@ rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2 rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-internal.aliyuncs.com:8080 rocketmq.topic=simple_message -rocketmq.orderTopic=order_message \ No newline at end of file +rocketmq.orderTopic=order_message + +default.database.name=coolcollege_intelligent_hy \ No newline at end of file diff --git a/pom.xml b/pom.xml index 484969508..9461a1ffe 100644 --- a/pom.xml +++ b/pom.xml @@ -161,6 +161,16 @@ tea-openapi 0.0.19 + + com.aliyun.oss + aliyun-sdk-oss + 3.13.0 + + + org.springframework.boot + spring-boot-starter-data-redis + 3.0.4 +