diff --git a/coolstore-partner-common/coolstore-partner-common.iml b/coolstore-partner-common/coolstore-partner-common.iml index 4c0e16f82..4a9f54974 100644 --- a/coolstore-partner-common/coolstore-partner-common.iml +++ b/coolstore-partner-common/coolstore-partner-common.iml @@ -70,7 +70,6 @@ - \ No newline at end of file diff --git a/coolstore-partner-common/pom.xml b/coolstore-partner-common/pom.xml index 9ba4384f6..0aa17fc51 100644 --- a/coolstore-partner-common/pom.xml +++ b/coolstore-partner-common/pom.xml @@ -66,10 +66,6 @@ com.github.pagehelper pagehelper-spring-boot-starter - - com.coolstore - coolstore-base - com.google.guava guava diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java new file mode 100644 index 000000000..9fd0fb7bb --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java @@ -0,0 +1,218 @@ +package com.cool.store.constants; + +/** + * redis key 类 + * @author byd + * @date 2021-03-11 14:55 + */ +public class RedisConstant { + + public static final String TB_DISPLAY_HANDLE = "tb_display_handle_"; + /** + * 新陈列审核 + */ + public static final String TB_DISPLAY_APPROVE = "tb_display_approve_"; + + /** + * 新陈列复核 + */ + public static final String TB_DISPLAY_RECHECK = "tb_display_recheck"; + + /** + * 新陈列三级审批 + */ + public static final String TB_DISPLAY_THIRD_APPROVE = "tb_display_third_approve"; + + /** + * 新陈列四级审批 + */ + public static final String TB_DISPLAY_FOUR_APPROVE = "tb_display_four_approve"; + + /** + * 新陈列五级审批 + */ + public static final String TB_DISPLAY_FIVE_APPROVE = "tb_display_five_approve"; + + /** + * 区域/组织同步锁key 点击同步锁key + */ + public static final String REGION_SYNC_LOCK = "region_sync_lock_"; + + /** + * 问题工单key + */ + public static final String QUESTION_TASK_LOCK = "question_task_lock_"; + + /** + * 店务工单key + */ + public static final String STORE_WORK_QUESTION_TASK_LOCK = "store_work_question_task_lock_"; + + /** + * 企业同步key 有效拦截 + */ + public static final String EID_SYNC_EFFECTIVE = "eid_sync_effective_"; + + /** + * 通知key做为拦截 + */ + public static final String TASK_STAGE_NOTICE = "task_stage_notice_"; + + public static final String TASK_DEL_FLAG = "task_del_flag_"; + + + + /** + * 系统内区域key + */ + public static final String REGION_SYNC_ALL= "region_sync_all_"; + + /** + * 系统内区域key + */ + public static final String STORE_SYNC_ALL= "store_sync_all_"; + + /** + * 企业广告配置信息key前缀 + */ + public static final String ADVERT_SETTING_PREFIX= "advert_setting_"; + + /** + * 企业广告配置信息value + */ + public static final String ADVERT_SETTING_VALUE= "1"; + + /** + * 企业广告配置信息value + */ + public static final String COOL_TOKEN_PREFIX= "cool_token_"; + + /** + * 用户企业token前缀 + */ + public static final String ACCESS_TOKEN_PREFIX ="access_token:"; + + /** + * refresh token + */ + public static final String REFRESH_TOKEN_PREFIX ="refresh_token:"; + + /** + * 用户账号密码错误次数key + */ + public static final String ERROR_PASSWORD_COUNT_KEY = "errorPasswordCount_{0}_{1}"; + + /** + * 未完成转码 + */ + public static final String VIDEO_NOT_COMPLETE_CACHE = "video_not_complete_cache"; + /** + * 任务抓拍状态记录 + */ + public static final String CAPTURE_PICTURE_STATUS_PREFIX ="capture_picture_status:"; + + /** + * 视频转码回调 + */ + public static final String VIDEO_CALLBACK_CACHE = "video_callback_cache_"; + + /** + * 任务重新分配 防止重复提交 + */ + public static final String TASK_STORE_REALLOCATE = "task_store_reallocate_"; + + /** + * 是否返回区域对应门店权限redis控制key + */ + public static final String SHOW_STORE_AUTH = "show_store_auth"; + + /** + * 是否返回区域对应门店权限redis控制key + */ + public static final String FIRST_LOGIN = "first_login_"; + + /** + * 区域全路径名称缓存 + */ + public static final String REGION_ALL_NAME_CACHE = "region_all_name_cache_"; + + /** + * 获取菜单引导key + */ + public static final String GUIDE_INFO = "guide_info_"; + + /** + * 组织架构模块是否第一次登录 + */ + public static final String OrgModuleFirstLogin = "OrgModuleFirstLogin:{0}:{1}"; + + /** + * 历史企业key + */ + public static final String HISTORY_ENTERPRISE = "historyEnterprise"; + + /** + * 留资企业key + */ + public static final String LEAVE_ENTERPRISE = "leaveEnterprise"; + + /** + * 留资开关 + */ + public static final String LEAVE_OPEN = "leaveOpen"; + + /** + * 工单分享key + */ + public static final String QUESTION_SHARE_KEY = "question_share:{0}"; + + /** + * 企业配置信息 + */ + public static final String ENTERPRISE_CONFIG_KEY = "enterpriseConfig:{0}"; + + public static final String ENTERPRISE_KEY = "enterpriseInfo:{0}"; + + + public static final String ENTERPRISE_DB_SERVER = "enterpriseDBServer:{0}"; + + public static final String QUESTION_SETTING_CACHE_KEY = "questionSettingCacheKey:{0}"; + + public static final String ENTERPRISE_SETTING_CACHE_KEY = "enterpriseSettingCacheKey:{0}"; + + public static final String ENTERPRISE_STORE_SETTING_CACHE_KEY = "enterpriseStoreSettingCacheKey:{0}"; + + public static final String QUESTION_CACHE_KEY = "questionDataCache:{0}:{1}:{2}_{3}"; + + + public static final String QUESTION_NOTICE_KEY = "questionNoticeCache:{0}:{1}:{2}:{3}_{4}_{5}_{6}"; + + public static final String STOREWORK_NOTICE_KEY = "storeWorkNoticeCache:{0}:{1}:{2}:{3}"; + + /** + * 七天 + */ + public static final int SEVEN_DAY = 7 * 24 * 60 * 60; + + /** + * 1天 + */ + public static final int ONE_DAY_SECONDS = 24 * 60 * 60; + + /** + * 3天 + */ + public static final int THREE_DAY = 3 * 24 * 60 * 60 * 1000; + + public static final String UPCOMING_BACKLOG_ID = "upcoming_backlog:{0}:{1}:{2}"; + + + public static final String ENTERPRISE_OPEN_STATUS_KEY = "enterprise_open_status:{0}_{1}"; + + public static final String STOREWORK_BUILD_CACHE_KEY = "storeworkBuildDataCache:{0}:{1}:{2}"; + + public static final String STORE_WORK_COMMENT_CACHE_KEY = "storeWorkCommentCache:{0}:{1}:{2}"; + + public static final String DEVICE_OPEN_TOKEN = "device_open_token:{0}:{1}:{2}"; + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/AppTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/AppTypeEnum.java index ff567f0aa..7da0779c0 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/AppTypeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/AppTypeEnum.java @@ -1,18 +1,65 @@ package com.cool.store.enums; +import org.apache.commons.lang3.StringUtils; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + /** - * @author zhangchenbiao - * @FileName: AppTypeEnum - * @Description: - * @date 2023-05-23 9:41 + * 应用类型 */ public enum AppTypeEnum { + // 数智门店-钉钉 + DING_DING("dingding","数智门店-钉钉"), - FEI_SHU("fei_shu", "飞书"); + //酷店掌-钉钉 + DING_DING2("dingding2","酷店掌-钉钉"), + // 企业微信-数智门店 + WX_APP("qw","数智门店-企业微信"), + + // 企业微信-酷店掌 + WX_APP2("qw2","酷店掌-企业微信"), + + //用户自己添加 独立app + APP("app","数智门店-客户端"), + + /** + * 酷店掌-自建企业微信 + */ + WX_SELF_APP("qw_self", "酷店掌-自建企业微信"), + + /** + * 酷店掌-自建企业微信代开发 + */ + WX_SELF_DKF("qw_self_dkf", "酷店掌--自建企业微信代开发"), + + /** + * 酷店掌-企业微信私服 + */ + WX_PRIVATE_APP("qw_private", "酷店掌-企业微信私服"), + + WX_PRIVATE_ZHOU("qw_private_zdf","酷店掌-企业微信私服-周大福"), + + /** + * 门店通应用 + */ + ONE_PARTY_APP("one_party", "门店通-钉钉"), + + /** + * 飞书 + */ + FEI_SHU("fei_shu", "飞书") + + ; private String value; + private String message; + private static final Map map = Arrays.stream(values()).collect(Collectors.toMap(AppTypeEnum::getValue, Function.identity())); + AppTypeEnum(String value, String message) { this.value = value; this.message = message; @@ -25,4 +72,142 @@ public enum AppTypeEnum { public String getMessage() { return message; } + + public static String getMessage(String value){ + if(StringUtils.isBlank(value)){ + return ""; + } + for (AppTypeEnum appTypeEnum : AppTypeEnum.values()) { + if(appTypeEnum.value.equals(value)){ + return appTypeEnum.message; + } + } + return ""; + } + + public static AppTypeEnum getAppType(String appType){ + for (AppTypeEnum appTypeEnum : AppTypeEnum.values()) { + if(appTypeEnum.value.equals(appType)){ + return appTypeEnum; + } + } + if(appType.startsWith(WX_SELF_APP.getValue())) { + return WX_SELF_APP; + } + if(appType.startsWith(WX_PRIVATE_APP.getValue())) { + return WX_PRIVATE_APP; + } + return null; + } + + /** + * 判断是否是钉钉平台 + * @param value + * @author: xugangkun + * @return java.lang.Boolean + * @date: 2021/10/26 15:03 + */ + public static Boolean isDingType(String value) { + if (DING_DING.getValue().equals(value) || DING_DING2.getValue().equals(value) || ONE_PARTY_APP.getValue().equals(value)) { + return true; + } + return false; + } + + /** + * 判断是否是企业微信平台 + * @param value + * @author: xugangkun + * @return java.lang.Boolean + * @date: 2021/10/26 15:03 + */ + public static Boolean isQwType(String value) { + if (WX_APP.getValue().equals(value) || WX_APP2.getValue().equals(value)) { + return true; + } + return false; + } + + /** + * 判断是否是飞书 + * @param value + * @author: xugangkun + * @return java.lang.Boolean + * @date: 2021/10/26 15:03 + */ + public static Boolean isFsType(String value) { + if (FEI_SHU.getValue().equals(value)) { + return true; + } + return false; + } + + /** + * 判断是否是酷店掌 + * @param value + * @author: xugangkun + * @return java.lang.Boolean + * @date: 2021/10/26 15:03 + */ + public static Boolean isCoolStore(String value) { + if (WX_APP2.getValue().equals(value) || DING_DING2.getValue().equals(value)) { + return true; + } + return false; + } + + /** + * 判断是否是数智门店 + * @param value + * @author: xugangkun + * @return java.lang.Boolean + * @date: 2021/10/26 15:03 + */ + public static Boolean isCoolCollege(String value) { + if (WX_APP.getValue().equals(value) || DING_DING.getValue().equals(value)) { + return true; + } + return false; + } + + /** + * 是否是企微自建应用或者企微私服 + * @param appType + * @return + */ + public static boolean isWxSelfAndPrivateType(String appType) { + if(StringUtils.isBlank(appType)){ + return false; + } + return appType.startsWith(AppTypeEnum.WX_SELF_APP.getValue()) + || appType.startsWith(AppTypeEnum.WX_PRIVATE_APP.getValue()); + } + + public static boolean qwIsGetUserName(String appType){ + if(StringUtils.isBlank(appType) || isDingType(appType)){ + return false; + } + return appType.startsWith(AppTypeEnum.WX_SELF_APP.getValue()) || appType.startsWith(AppTypeEnum.WX_PRIVATE_APP.getValue()) + || appType.startsWith(AppTypeEnum.WX_SELF_DKF.getValue()) || appType.startsWith(AppTypeEnum.WX_PRIVATE_ZHOU.getValue()); + } + + public static String getCode(String value){ + if(StringUtils.isBlank(value)){ + return ""; + } + for (AppTypeEnum appTypeEnum : AppTypeEnum.values()) { + if(appTypeEnum.message.equals(value)){ + return appTypeEnum.value; + } + } + return ""; + } + + public static AppTypeEnum parseValue(String value) { + return map.get(value); + } + + + + } diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/AuthRoleEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/AuthRoleEnum.java new file mode 100644 index 000000000..f2507fce6 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/AuthRoleEnum.java @@ -0,0 +1,58 @@ +package com.cool.store.enums; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * describe: + * + * @author zhouyiping + * @date 2020/10/13 + */ +public enum AuthRoleEnum { + /** + * 全企业数据 + */ + ALL("all", "全企业数据"), + + /** + * 所在组织架构包含下级 + */ + INCLUDE_SUBORDINATE("include_subordinate","所在组织架构包含下级"), + + +// /** +// * 所在的组织架构不包含下级 +// */ + NOT_INCLUDE_SUBORDINATE("not_include_subordinate","所在的组织架构不包含下级"), + + /** + * 仅自己的数据 + */ + PERSONAL("personal","仅自己的数据"); + + private String code; + private String msg; + + protected static final Map map = Arrays.stream(values()).collect( + Collectors.toMap(AuthRoleEnum::getCode, Function.identity())); + + AuthRoleEnum(String code, String msg){ + this.code=code; + this.msg=msg; + } + + public String getCode() { + return code; + } + + public String getMsg() { + return msg; + } + public static AuthRoleEnum getByCode(String code) { + return map.get(code); + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index 6f1461753..5e020112c 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -41,6 +41,8 @@ public enum ErrorCodeEnum { SESSION_KEY_ERROR(1021022, "sessionKey过期", null), GET_WECHAT_USER_INFO_FAIL(1021023,"获取小程序用户信息失败", null), FEISHU_SERVICE_ERROR(1021024,"飞书服务调用异常", null), + USER_GROUP_NAME_EXIST(1021076, "用户分组名称已存在", null), + USER_GROUP_NOT_EXIST(1021077, "用户分组不存在", null), ; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java new file mode 100644 index 000000000..486297476 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java @@ -0,0 +1,286 @@ +package com.cool.store.enums; + +import com.cool.store.utils.CommonContextUtil; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: RocketMqGroupEnum + * @Description: + * @date 2021-12-22 17:28 + */ +public enum RocketMqGroupEnum { + + /** + * 写在前面 读在前面 + * 同一个group 监听的topic 和 tag必须一致 不然会出现消息丢失问题 + * 即不能以下情况 + * 实例1: + * 服务A中某个Listener的groupId为GroupA 监听topicA 过滤的消息tagA + * 服务B中某个Listener的groupId为GroupA 监听topicB 过滤的消息tagA + * 实例2: + * 服务A中某个Listener的groupId为GroupA 监听topicA 过滤的消息tagA + * 服务B中某个Listener的groupId为GroupA 监听topicA 过滤的消息tagB + */ + + /** + * es数据处理 + */ + ES_DATA_DEAL("es_data_deal", "coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.ES_PATROL_DATA_DEAL, RocketMqTagEnum.ES_DISPLAY_DATA_DEAL))), + /** + * es数据处理 + */ + ES_DATA_SYNC("es_data_sync", "coolcollege-special",new ArrayList<>(Arrays.asList(RocketMqTagEnum.ES_DATA_SYNC))), + /** + * 导入导出 + */ + EXPORT_IMPORT_MESSAGE("export_import_message","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.EXPORT_IMPORT_MESSAGE))), + /** + * 区域门店数量计算队列 + */ + CAL_REGION_STORE_NUM("cal_region_store_num", "coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.CAL_REGION_STORE_NUM,RocketMqTagEnum.REGION_STORE_NUM_UPDATE))), + + /** + * 企业开通 + */ + ENTERPRISE_OPEN("enterprise_open", "coolcollege-intelligent-config", new ArrayList<>(Arrays.asList(RocketMqTagEnum.ENTERPRISE_OPEN))), + + /** + * 企业开通平台库脚本 + */ + ENTERPRISE_OPEN_CONFIG_RUN_SCRIPT("enterprise_open_config_run_script", "coolcollege-intelligent-config", new ArrayList<>(Arrays.asList(RocketMqTagEnum.ENTERPRISE_OPEN_CONFIG_RUN_SCRIPT))), + + /** + * 企业开通企业库脚本 + */ + ENTERPRISE_OPEN_ENTERPRISE_RUN_SCRIPT("enterprise_open_enterprise_run_script", "coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.ENTERPRISE_OPEN_ENTERPRISE_RUN_SCRIPT))), + + /** + * 企业开通数据同步 + */ + ENTERPRISE_OPEN_DATA_SYNC("enterprise_open_data_sync", "coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.ENTERPRISE_OPEN_DATA_SYNC))), + + /** + * 部门顺序值补全 + */ + ENTERPRISE_INIT_DEPT_ORDER("enterprise_init_handler_dept_order","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.ENTERPRISE_INIT_DEPT_ORDER))), + /** + * 父任务处理人 + */ + TASK_PARENT_USER("task_parent_user", "coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.TASK_PARENT_USER_SAVE))), + /** + * 企业购买事件 + */ + PAY_MARKET_BUY("pay_market_buy","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.PAY_MARKET_BUY))), + /** + * 钉钉消息监听 + */ + DING_MSG_DEAL("ding_msg_deal","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.DING_STORE_ADDRESS_BOOK, RocketMqTagEnum.DING_SINGLE_USER_SYNC))), + /** + * 授权队列 + */ + AUTH_QUEUE("auth_queue","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.AUTH_QUEUE))), + /** + * 企微消息监听 + */ + QW_MSG_DEAL("qw_msg_deal","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.QW_CHANGE_ORDER_QUEUE,RocketMqTagEnum.QW_OPEN_ORDER_CHANGE_QUEUE))), + /** + * 钉钉同步 + */ + DING_SYNC_ALL_DATA_QUEUE("ding_sync_all_data_queue","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.DING_SYNC_ALL_DATA_QUEUE))), + /** + * 第三方同步 + */ + DING_SYNC_ALL_DATA_OA_QUEUE("ding_sync_all_data_oa_queue","coolcollege-intelligent-special", new ArrayList<>(Arrays.asList(RocketMqTagEnum.DING_SYNC_ALL_DATA_OA_QUEUE))), + /** + * 第三方单个用户同步 + */ + THIRD_OA_SYNC_SINGLE_QUEUE("third_oa_sync_single_queue","coolcollege-intelligent-special", new ArrayList<>(Arrays.asList(RocketMqTagEnum.THIRD_OA_SYNC_SINGLE_QUEUE))), + /** + * 萤石云设备托管 + */ + YINGSHI_DEVICE_MANAGE("yingshi_device_manage","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.YINGSHI_DEVICE_MANAGE))), + /** + * 阿里云开通门店事件 + */ + MQ_OPEN_ENTERPRISE_ALIYUN("mq_open_enterprise_aliyun","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.MQ_OPEN_ENTERPRISE_ALIYUN))), + /** + * 初始化设备 + */ + INIT_DEVICE_QUEUE("init_device_queue","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.INIT_DEVICE_QUEUE))), + /** + * 陈列抄送人处理 + */ + DISPLAY_CC_USER_QUEUE("display_cc_user_queue","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.DISPLAY_CC_USER_QUEUE))), + /** + * 门店子任务消息监听 + */ + STORE_SUB_TASK_DATA_QUEUE("store_sub_task_data_queue","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.STORE_SUB_TASK_DATA_QUEUE))), + /** + * 定时巡检抓拍 + */ + PATROL_STORE_CAPTURE_PICTURE_QUEUE("patrol_store_capture_picture_queue","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.PATROL_MANUAL_STORE_CAPTURE_PICTURE_QUEUE,RocketMqTagEnum.PATROL_STORE_CAPTURE_PICTURE_QUEUE))), + /** + * 巡店分数计算 + */ + PATROL_STORE_SCORE_COUNT_QUEUE("patrol_store_score_count_queue","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.PATROL_STORE_SCORE_COUNT_QUEUE))), + /** + * 陈列任务创建 + */ + UNIFY_TASK_DISPLAY("unify_task_display","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.UNIFY_TASK_DISPLAY))), + /** + * 巡店任务创建 + */ + UNIFY_TASK_PATROL("unify_task_patrol","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.UNIFY_TASK_PATROL))), + /** + * 工单任务创建 + */ + UNIFY_TASK_QUESTION("unify_task_question","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.UNIFY_TASK_QUESTION))), + /** + * 信息补全 + */ + INFORMATION_COMPLETION("information_completion","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.INFORMATION_COMPLETION))), + /** + * 微应用钉钉消息发送 + */ + STORE_DING_QUEUE("store_ding_queue","coolcollege-intelligent-isv", new ArrayList<>(Arrays.asList(RocketMqTagEnum.STORE_DING_QUEUE))), + /** + * 待办任务名称 + */ + STORE_BACK_LOG("store_back_log","coolcollege-intelligent-isv", new ArrayList<>(Arrays.asList(RocketMqTagEnum.STORE_BACK_LOG,RocketMqTagEnum.STORE_BACK_LOG_UPDATE))), + /** + * 待办消息结束队列 + */ + UPCOMING_FINISH("upcoming_finish","coolcollege-intelligent-isv", new ArrayList<>(Arrays.asList(RocketMqTagEnum.UPCOMING_FINISH))), + /** + * 发送开通成功消息 + */ + OPEN_SUCCEEDED_MSG_QUEUE("open_succeeded_msg_queue","coolcollege-intelligent-isv", new ArrayList<>(Arrays.asList(RocketMqTagEnum.OPEN_SUCCEEDED_MSG_QUEUE))), + /** + * 发送成员授权模式下模板消息 + */ + QW_MEMBER_TEMPLE_MSG_QUEUE("qw_member_temple_msg_queue","coolcollege-intelligent-isv", new ArrayList<>(Arrays.asList(RocketMqTagEnum.QW_MEMBER_TEMPLE_MSG_QUEUE))), + /** + * app推送队列 + */ + APP_PUSH_QUEUE("app_push_queue","coolcollege-intelligent-isv", new ArrayList<>(Arrays.asList(RocketMqTagEnum.APP_PUSH_QUEUE))), + /** + * 证照信息补全任务 + */ + INFORMATION_COMPLETION_LICENSE("information_completion_license","hz-coolstore-license", new ArrayList<>(Arrays.asList(RocketMqTagEnum.INFORMATION_COMPLETION_LICENSE))), + + + /** + * 解除应用 + */ + REMOVE_APPLICATION("remove_application","coolcollege-intelligent-config", new ArrayList<>(Arrays.asList(RocketMqTagEnum.REMOVE_APPLICATION))), + + /** + * 获取开通酷学院开通完成后的结果 + */ + GET_OPEN_COOL_COLLEGE_RESULT("get_open_cool_college_result","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.GET_OPEN_COOL_COLLEGE_RESULT))), + + /** + * 酷学院同步用户 首次使用人员异步延迟推送 + */ + COLLEGE_SYNC_USER_DELAY("college_sync_user_delay","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.COLLEGE_SYNC_USER_DELAY))), + + /** + *门店端的部门,人员,职位,发生变化后的推送消息队列 + */ + COOL_STORE_DATA_CHANGE("cool_store_data_change","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.COOL_STORE_DATA_CHANGE))), + + /** + * 全量企微用户同步 + */ + QW_SYNC_FULL_USER("qw_sync_full_user_msg_queue", "coolcollege-intelligent", new ArrayList(Arrays.asList(RocketMqTagEnum.QW_SYNC_FULL_USER))), + + + /** + * 按人子任务消息监听 + */ + PERSON_SUB_TASK_DATA_QUEUE("person_sub_task_data_queue","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.PERSON_SUB_TASK_DATA_QUEUE))), + + IMOU_DEVICE_CALLBACK("imou_device_callback","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.IMOU_DEVICE_CALLBACK))), + /** + * 店务提交、点评消息监听 + */ + STOREWORK_SUBMIT_COMMENT_DATA_QUEUE("storework_submit_comment_data_queue", "coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.STOREWORK_SUBMIT_DATA_QUEUE, RocketMqTagEnum.STOREWORK_COMMENT_DATA_QUEUE, RocketMqTagEnum.STOREWORK_DELETE_DATA_QUEUE))), + + /** + * 流程引擎接收主应用消息 + */ + STORE_SEND_TOPIC("store_send_topic","hz-oldworkflow", new ArrayList<>(Arrays.asList(RocketMqTagEnum.STORE_SEND_TOPIC))), + /** + * 主应用接收流程引擎消息 + */ + WORKFLOW_SEND_TOPIC("workflow_send_topic","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.WORKFLOW_SEND_TOPIC))), + /** + * 企业微信用户部门信息补全消息监听 + */ + QYWX_USERDEPTINFO_COMPLETE_QUEUE("qywx_userdeptinfo_complete_queue","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.QYWX_USERDEPTINFO_COMPLETE_QUEUE))), + + SHOP_STORE_GROUP_SYNC("shop_store_group_sync","coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.SHOP_STORE_GROUP_SYNC))), + + /** + * 授权码更新 + */ + PERMANENT_CODE_UPDATE("permanent_code_update", "coolcollege-intelligent-config", new ArrayList<>(Arrays.asList(RocketMqTagEnum.PERMANENT_CODE_UPDATE))), + + QUESTION_EXPIRE_REMIND("question_expire_remind", "coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.QUESTION_EXPIRE_BEFORE_REMIND, RocketMqTagEnum.QUESTION_EXPIRE_REMIND))), + + STOREWORK_EXPIRE_REMIND("storework_expire_remind", "coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.STOREWORK_BEFORE_START_REMIND, RocketMqTagEnum.STOREWORK_BEFORE_END_REMIND))), + + STOREWORK_TASK_RESOLVE("storework_task_resolve", "coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.STOREWORK_TASK_RESOLVE,RocketMqTagEnum.STOREWORK_TASK_SINGLE_STORE_RESOLVE))), + + LICENSE_NOTICE_TIMER("license_notice_timer", "hz-coolstore-license", new ArrayList<>(Arrays.asList(RocketMqTagEnum.LICENSE_NOTICE_TIMER))), + LICENSE_NOTICE_DEAL("license_notice_deal", "coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.LICENSE_NOTICE_DEAL))), + + /** + * 任务工作交接 + */ + WORK_HANDOVER_TASK("work_handover_task", "coolcollege-intelligent", new ArrayList<>(Arrays.asList(RocketMqTagEnum.WORK_HANDOVER_TASK))), + + SUPERVISION_RESOLVE_DELAY("supervision_resolve_delay","coolcollege",new ArrayList<>(Arrays.asList(RocketMqTagEnum.SUPERVISION_RESOLVE_DELAY))), + /** + * 定时任务回调 + */ + SCHEDULER_CALLBACK("scheduler_callback","coolcollege", new ArrayList<>(Arrays.asList(RocketMqTagEnum.SCHEDULER_CALLBACK))), + /** + * 任务补发 + */ + TASK_REISSUE("task_reissue","coolcollege", new ArrayList<>(Arrays.asList(RocketMqTagEnum.TASK_REISSUE))), + + ; + + private final String group; + + private final List tagList; + + private final String listener; + + + RocketMqGroupEnum(String group,String listener,List tagList) { + this.group = group; + this.listener = listener; + this.tagList = tagList; + } + + public String getDefaultGroup() { + return group; + } + + public static String getGroupId(RocketMqGroupEnum groupEnum){ + return groupEnum.group + "_" + CommonContextUtil.getProfileName(); + } + + public static String getTag(RocketMqGroupEnum groupEnum){ + return StringUtils.join(groupEnum.tagList.stream().map(RocketMqTagEnum::getTag).collect(Collectors.toList()),"||"); + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java new file mode 100644 index 000000000..36078a4ef --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java @@ -0,0 +1,126 @@ +package com.cool.store.enums; + + +import com.cool.store.utils.CommonContextUtil; + +/** + * @author zhangchenbiao + * @FileName: RocketMqTagEnum + * @Description: + * @date 2021-12-23 16:14 + */ +public enum RocketMqTagEnum { + + DEFAULT("default","默认"), + ES_PATROL_DATA_DEAL("es_patrol_data_deal","巡店数据加工"), + ES_DISPLAY_DATA_DEAL("es_display_data_deal","陈列数据加工"), + ES_DATA_SYNC("es_data_sync","数据插入到ES_队列"), + EXPORT_IMPORT_MESSAGE("export_import_message","导入导出消息"), + CAL_REGION_STORE_NUM("cal_region_store_num","计算门店区域数量"), + REGION_STORE_NUM_UPDATE("region_store_num_update","计算门店区域数量"), + + ENTERPRISE_OPEN("enterprise_open","企业开通"), + ENTERPRISE_OPEN_CONFIG_RUN_SCRIPT("enterprise_open_config_run_script","企业开通平台库脚本执行"), + ENTERPRISE_OPEN_ENTERPRISE_RUN_SCRIPT("enterprise_open_enterprise_run_script","企业开通企业库脚本执行"), + ENTERPRISE_OPEN_DATA_SYNC("enterprise_open_data_sync","企业开通数据同步"), + + AUTH_QUEUE("auth_queue","授权队列"), + DING_STORE_ADDRESS_BOOK("ding_store_address_book","钉钉通讯录变更事件"), + PAY_MARKET_BUY("pay_market_buy","企业购买队列"), + + QW_OPEN_ORDER_CHANGE_QUEUE("qw_openorder_change_queue","企业微信付费监听"), + QW_CHANGE_ORDER_QUEUE("qw_change_order_queue","企业微信改单事件,因涉及到两个订单,和普通的订单事件分开"), + + DING_SYNC_ALL_DATA_QUEUE("ding_sync_all_data_queue","钉钉全量同步"), + DING_SYNC_ALL_DATA_QUEUE_BAILI("ding_sync_all_data_queue_baili","百丽全量同步"), + DING_SYNC_ALL_DATA_OA_QUEUE("ding_sync_all_data_oa_queue","第三方同步"), + THIRD_OA_SYNC_SINGLE_QUEUE("third_oa_sync_single_queue","第三方单个用户同步"), + + MQ_OPEN_ENTERPRISE_ALIYUN("mq_open_enterprise_aliyun","阿里云开通门店事件"), + YINGSHI_DEVICE_MANAGE("yingshi_device_manage","萤石云设备托管"), + INIT_DEVICE_QUEUE("init_device_queue","初始化设备"), + + DISPLAY_CC_USER_QUEUE("display_cc_user_queue","陈列抄送人处理"), + STORE_SUB_TASK_DATA_QUEUE("store_sub_task_data_queue","门店子任务消息监听"), + + PATROL_MANUAL_STORE_CAPTURE_PICTURE_QUEUE("patrol_manual_store_capture_picture_queue","定时巡检抓拍"), + PATROL_STORE_CAPTURE_PICTURE_QUEUE("patrol_store_capture_picture_queue","定时巡检抓拍"), + PATROL_STORE_SCORE_COUNT_QUEUE("patrol_store_score_count_queue","巡店分数计算"), + + UNIFY_TASK_DISPLAY("unify_task_display","陈列任务创建"), + UNIFY_TASK_PATROL("unify_task_patrol","巡店任务创建"), + UNIFY_TASK_QUESTION("unify_task_question","工单任务创建"), + + INFORMATION_COMPLETION("information_completion","信息补全任务"), + INFORMATION_COMPLETION_LICENSE("information_completion_license","证照信息补全任务"), + ENTERPRISE_INIT_DEPT_ORDER("enterprise_init_handler_dept_order","补全部门的顺序值"), + TASK_PARENT_USER_SAVE("task_parent_user_save", "新增或覆盖父任务处理人映射"), + + STORE_DING_QUEUE("store_ding_queue", "微应用钉钉消息发送"), + STORE_BACK_LOG("store_back_log", "待办任务名称"), + STORE_BACK_LOG_UPDATE("store_back_log_update", "更新待办任务名称"), + UPCOMING_FINISH("upcoming_finish", "待办消息结束队列"), + OPEN_SUCCEEDED_MSG_QUEUE("open_succeeded_msg_queue", "发送开通成功消息"), + QW_MEMBER_TEMPLE_MSG_QUEUE("qw_member_temple_msg_queue", "发送成员授权模式下模板消息"), + APP_PUSH_QUEUE("app_push_queue", "app推送队列"), + REMOVE_APPLICATION("remove_application", "解除应用"), + GET_OPEN_COOL_COLLEGE_RESULT("get_open_cool_college_result", "获取开通酷学院开通完成后的结果"), + COLLEGE_SYNC_USER_DELAY("college_sync_user_delay", "同步人与延迟推送"), + COOL_STORE_DATA_CHANGE("cool_store_data_change", "门店端的部门,人员,职位,发生变化后的推送消息队列"), + QW_SYNC_FULL_USER("qw_sync_full_user_msg_queue", "企微全量用户同步"), + PERSON_SUB_TASK_DATA_QUEUE("person_sub_task_data_queue","按人子任务消息监听"), + IMOU_DEVICE_CALLBACK("imou_device_callback","乐橙设备回调事件"), + PERMANENT_CODE_UPDATE("permanent_code_update", "授权码变更"), + SHOP_STORE_GROUP_SYNC("shop_store_group_sync","门店通门店分组同步"), + DING_SINGLE_USER_SYNC("ding_single_user_sync","钉钉用户信息拉取"), + STORE_SEND_TOPIC("store_send_topic","流程引擎接收主应用消息"), + WORKFLOW_SEND_TOPIC("workflow_send_topic","主应用接收流程引擎消息"), + QYWX_USERDEPTINFO_COMPLETE_QUEUE("qywx_userdeptinfo_complete_queue","企业微信用户部门信息补全消息监听"), + QUESTION_EXPIRE_BEFORE_REMIND("question_expire_before_remind","工单逾期前提醒"), + QUESTION_EXPIRE_REMIND("question_expire_remind","工单逾期提醒"), + STOREWORK_SUBMIT_DATA_QUEUE("storework_submit_data_queue","店务提交消息监听"), + STOREWORK_COMMENT_DATA_QUEUE("storework_comment_data_queue","店务点评消息监听"), + STOREWORK_DELETE_DATA_QUEUE("storework_delete_data_queue","店务删除消息监听"), + STOREWORK_BEFORE_START_REMIND("storework_before_start_remind","店务开始前提醒"), + STOREWORK_BEFORE_END_REMIND("storework_before_end_remind","店务结束前提醒"), + STOREWORK_TASK_RESOLVE("storework_task_resolve","店务分解"), + STOREWORK_TASK_SINGLE_STORE_RESOLVE("storework_task_single_store_resolve","单店店务数据分解"), + LICENSE_NOTICE_TIMER("license_notice_timer","证照定时任务提醒"), + LICENSE_NOTICE_DEAL("license_notice_deal","证照提醒处理"), + WORK_HANDOVER_TASK("work_handover_task","工作任务交接"), + SUPERVISION_RESOLVE_DELAY("supervision_resolve_delay", "督导任务延迟分解"), + SCHEDULER_CALLBACK("scheduler_callback","定时任务回调"), + TASK_REISSUE("task_reissue","任务补发"), + ; + + + private final String tag; + + private final String remark; + + RocketMqTagEnum(String tag, String remark) { + this.tag = tag; + this.remark = remark; + } + + public String getDefaultTag() { + return tag; + } + + public String getTag() { + return tag + "_" + CommonContextUtil.getProfileName(); + } + + public String getRemark() { + return remark; + } + + public static RocketMqTagEnum getByTag(String tag){ + for (RocketMqTagEnum value : values()) { + if(value.getTag().equals(tag)){ + return value; + } + } + return ES_PATROL_DATA_DEAL; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/SubordinateSourceEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/SubordinateSourceEnum.java new file mode 100644 index 000000000..201e55727 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/SubordinateSourceEnum.java @@ -0,0 +1,42 @@ +package com.cool.store.enums; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author wxp + * @FileName: SubordinateSourceEnum + * @Description: auto自动关联 select手动选择 + * @date 2022-12-30 17:12 + */ +public enum SubordinateSourceEnum { + + AUTO("auto", "关联区域门店权限"), + SELECT("select", "手动选择"); + + private String code; + + private String msg; + + protected static final Map map = Arrays.stream(values()).collect( + Collectors.toMap(SubordinateSourceEnum::getCode, Function.identity())); + + SubordinateSourceEnum(String code, String msg) { + this.code = code; + this.msg = msg; + } + + public String getCode() { + return code; + } + + public String getMsg() { + return msg; + } + + public static SubordinateSourceEnum getByCode(String code) { + return map.get(code); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/UserAuthMappingTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/UserAuthMappingTypeEnum.java new file mode 100644 index 000000000..7623ef611 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/UserAuthMappingTypeEnum.java @@ -0,0 +1,44 @@ +package com.cool.store.enums; + + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author zyp + */ +public enum UserAuthMappingTypeEnum { + /** + * 区域 + */ + REGION("region","区域"), + /** + * 门店 + */ + STORE("store","门店"); + + private String code; + private String desc; + public static final Map map = Arrays.stream(values()).collect( + Collectors.toMap(UserAuthMappingTypeEnum::getCode, Function.identity())); + + UserAuthMappingTypeEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } + + public String getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public static UserAuthMappingTypeEnum getByCode(String code) { + return map.get(code); + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/UserSelectRangeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/UserSelectRangeEnum.java new file mode 100644 index 000000000..66b24ac64 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/UserSelectRangeEnum.java @@ -0,0 +1,43 @@ +package com.cool.store.enums; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author wxp + * @FileName: UserSelectRangeEnum + * @Description: 用户选取范围 共同编辑人范围:self-仅自己,all-全部人员,define-自定义 + * @date 2022-12-30 17:12 + */ +public enum UserSelectRangeEnum { + + SELF("self", "仅自己"), + ALL("all", "全部人员"), + DEFINE("define", "自定义"); + + private String code; + + private String msg; + + protected static final Map map = Arrays.stream(values()).collect( + Collectors.toMap(UserSelectRangeEnum::getCode, Function.identity())); + + UserSelectRangeEnum(String code, String msg) { + this.code = code; + this.msg = msg; + } + + public String getCode() { + return code; + } + + public String getMsg() { + return msg; + } + + public static UserSelectRangeEnum getByCode(String code) { + return map.get(code); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonContextUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonContextUtil.java new file mode 100644 index 000000000..fc7c7f53d --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonContextUtil.java @@ -0,0 +1,109 @@ +package com.cool.store.utils; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +public class CommonContextUtil implements ApplicationContextAware { + + private static ApplicationContext applicationContext; //Spring应用上下文环境 + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + * + * @param applicationContext + * @throws BeansException + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + CommonContextUtil.applicationContext = applicationContext; + } + + /** + * @return ApplicationContext + */ + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + + /** + * 获取对象 + * + * @param name + * @return Object 一个以所给名字注册的bean的实例 + * @throws BeansException + */ + public static Object getBean(String name) throws BeansException { + return applicationContext.getBean(name); + } + + /** + * 根据某种类型获取对象 + * @param requiredType + * @return + * @throws BeansException + */ + public static T getBean(Class requiredType) throws BeansException { + return applicationContext.getBean(requiredType); + } + + /** + * 获取类型为requiredType的对象 + * 如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException) + * + * @param name bean注册名 + * @param requiredType 返回对象类型 + * @return Object 返回requiredType类型对象 + * @throws BeansException + */ + public static T getBean(String name, Class requiredType) throws BeansException { + return applicationContext.getBean(name, requiredType); + } + + /** + * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true + * + * @param name + * @return boolean + */ + public static boolean containsBean(String name) { + return applicationContext.containsBean(name); + } + + /** + * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 + * 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException) + * + * @param name + * @return boolean + * @throws NoSuchBeanDefinitionException + */ + public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException { + return applicationContext.isSingleton(name); + } + + /** + * @param name + * @return Class 注册对象的类型 + * @throws NoSuchBeanDefinitionException + */ + public static Class getType(String name) throws NoSuchBeanDefinitionException { + return applicationContext.getType(name); + } + + /** + * 如果给定的bean名字在bean定义中有别名,则返回这些别名 + * + * @param name + * @return + * @throws NoSuchBeanDefinitionException + */ + public static String[] getAliases(String name) throws NoSuchBeanDefinitionException { + return applicationContext.getAliases(name); + } + + public static String getProfileName(){ + return applicationContext.getEnvironment().getActiveProfiles()[0]; + } +} \ No newline at end of file diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonNodeUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonNodeUtils.java new file mode 100644 index 000000000..2e25ed417 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonNodeUtils.java @@ -0,0 +1,97 @@ +package com.cool.store.utils; + +import org.apache.commons.collections4.CollectionUtils; + +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +/** + * describe: + * + * @author zhouyiping + * @date 2020/09/21 + */ +public class CommonNodeUtils { + /** + * 树型数据的所有子项(list结构包含本身)(节点为Long) + * @param rootId + * @param id + * @param all 树的所有节点 + * @param parentGroupMap Map> + * @return + */ + public static List getAllChildListContainSelf(Long rootId,Long id, List all,Map> parentGroupMap) { + List childList = new LinkedList<>(); + if(CollectionUtils.isEmpty(all)){ + return Collections.emptyList(); + } + if(id.equals(rootId)&&!all.contains(id)){ + return Collections.emptyList(); + } + List idList = parentGroupMap.get(id); + childList.add(id); + if(CollectionUtils.isEmpty(idList)){ + return childList; + } + childList.addAll(idList); + for (Long item:idList){ + getChildList(item,parentGroupMap,childList); + } + return childList; + } + + private static void getChildList(Long id,Map> parentGroupMap, List childList) { + List child = parentGroupMap.get(id); + if (CollectionUtils.isNotEmpty(child)) { + childList.addAll(child); + for (Long cid : child) { + getChildList(cid, parentGroupMap, childList); + } + } + } + + + + + /** + * 树型数据的所有子项(list结构包含本身)(节点为String) + * @param rootId + * @param id + * @param all 树的所有节点 + * @param parentGroupMap Map> + * @return + */ + public static List getAllChildListContainSelf(String rootId,String id, List all,Map> parentGroupMap) { + List childList = new LinkedList<>(); + if(CollectionUtils.isEmpty(all)){ + return Collections.emptyList(); + } + if(id.equals(rootId)&&!all.contains(id)){ + return Collections.emptyList(); + } + List idList = parentGroupMap.get(id); + childList.add(id); + if(CollectionUtils.isEmpty(idList)){ + return childList; + } + childList.addAll(idList); + for (String item:idList){ + getChildList(item,parentGroupMap,childList); + } + return childList; + } + + private static void getChildList(String id,Map> parentGroupMap, List childList) { + List child = parentGroupMap.get(id); + if (CollectionUtils.isNotEmpty(child)) { + childList.addAll(child); + for (String cid : child) { + getChildList(cid, parentGroupMap, childList); + } + } + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisConstantUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisConstantUtil.java new file mode 100644 index 000000000..9ec5d9de8 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisConstantUtil.java @@ -0,0 +1,93 @@ +package com.cool.store.utils; + + +import com.cool.store.constants.RedisConstant; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + + +/** + * redis常量工具类 + * + * @author byd + */ +@Component +@Slf4j +public class RedisConstantUtil { + + @Value("${spring.profiles.active}") + private String active; + + /** + * 获取钉钉同步区域key + * + * @param eid + * @return + */ + public String getSyncRegionKey(String eid) { + + return active + "_" + RedisConstant.REGION_SYNC_ALL + eid; + } + + /** + * 获取门店同步key + * + * @param eid + * @return + */ + public String getSyncStoreKey(String eid) { + + return active + "_" + RedisConstant.STORE_SYNC_ALL + eid; + } + + public String getSyncLockKey(String eid) { + + return active + "_" + RedisConstant.REGION_SYNC_LOCK + eid; + } + + public String getSyncEidEffectiveKey(String eid) { + + return active + "_" + RedisConstant.EID_SYNC_EFFECTIVE + eid; + } + + public String getTaskStageNoticeKey(String key) { + + return active + "_" + RedisConstant.TASK_STAGE_NOTICE + key; + } + + public String getTaskDelFlagKey(String key) { + + return active + "_" + RedisConstant.TASK_DEL_FLAG + key; + } + + public String getCapturePicture(String key) { + + return active + "_" + RedisConstant.CAPTURE_PICTURE_STATUS_PREFIX + key; + } + + + public String getQuestionTaskLockKey(String eid, String key) { + return active + "_" + RedisConstant.QUESTION_TASK_LOCK + "_" + eid + "_" + key; + } + + public String getStoreWorkQuestionTaskLockKey(String eid, String key) { + return active + "_" + RedisConstant.STORE_WORK_QUESTION_TASK_LOCK + "_" + eid + "_" + key; + } + + public String getShowStoreAuthKey() { + return active + "_" + RedisConstant.SHOW_STORE_AUTH; + } + + public String getRegionNameKey(String eid, String regionId) { + return active + "_" + RedisConstant.REGION_ALL_NAME_CACHE + eid + ":" + regionId; + } + + public String getGuideInfoKey(String eid, Long menuId) { + return active + "_" + RedisConstant.GUIDE_INFO + eid + ":" + menuId; + } + + public String getRegionNameListKey(String eid, String regionId) { + return active + "_" + RedisConstant.REGION_ALL_NAME_CACHE + eid + ":" + regionId; + } +} diff --git a/coolstore-partner-dao/coolstore-partner-dao.iml b/coolstore-partner-dao/coolstore-partner-dao.iml index 751490130..3d24cdd5e 100644 --- a/coolstore-partner-dao/coolstore-partner-dao.iml +++ b/coolstore-partner-dao/coolstore-partner-dao.iml @@ -92,7 +92,6 @@ - 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 198d34852..88d012fb7 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,9 +1,12 @@ package com.cool.store.dao; +import com.cool.store.dto.enterprise.EnterpriseUserDTO; import com.cool.store.entity.EnterpriseUserDO; 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 javax.annotation.Resource; @@ -48,4 +51,47 @@ public class EnterpriseUserDAO { } enterpriseUserMapper.batchUpdateDiffUserDiffRegionIds(enterpriseId, enterpriseUserList); } + + public List fuzzyUsersByDepartment(String eid, + String deptId, + Long roleId, + String orderBy, + String orderRule, + String userName, + String jobnumber, + Integer userStatus, + List userIdList, + String regionId){ + return enterpriseUserMapper.fuzzyUsersByDepartment(eid, deptId, roleId, orderBy, orderRule, userName, jobnumber, userStatus, userIdList, regionId); + } + + public List fuzzyUsersByNotRole(String eid, + String deptId, + String orderBy, + String orderRule, + String userName, + String jobnumber, + Integer userStatus, + List userIdList, + String regionId){ + return enterpriseUserMapper.fuzzyUsersByNotRole(eid, deptId, orderBy, orderRule, userName, jobnumber, userStatus, userIdList, regionId); + } + + public List selectUsersByUserIds(String eid, List userIds) { + return enterpriseUserMapper.selectUsersByUserIds(eid, userIds); + } + + public List listUserByGroupId(String eid, String groupId, String userName, List userIdList){ + if(StringUtils.isAnyBlank(eid, groupId)){ + return Lists.newArrayList(); + } + return enterpriseUserMapper.listUserByGroupId(eid, groupId, userName, userIdList); + } + + public List listByRegionIdList(String eid, List regionIdList){ + if(StringUtils.isBlank(eid) || CollectionUtils.isEmpty(regionIdList)){ + return Lists.newArrayList(); + } + return enterpriseUserMapper.listByRegionIdList(eid, regionIdList); + } } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserGroupDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserGroupDAO.java new file mode 100644 index 000000000..3aec1b656 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserGroupDAO.java @@ -0,0 +1,63 @@ +package com.cool.store.dao; + +import com.cool.store.entity.EnterpriseUserGroupDO; +import com.cool.store.mapper.EnterpriseUserGroupMapper; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * 用户分组 + * @author wxp + * @date 2022-12-29 14:56 + */ +@Repository +public class EnterpriseUserGroupDAO { + + @Resource + private EnterpriseUserGroupMapper enterpriseUserGroupMapper; + + public int insertSelective(EnterpriseUserGroupDO record, String enterpriseId){ + return enterpriseUserGroupMapper.insertSelective(record,enterpriseId); + } + + public int updateByPrimaryKeySelective(EnterpriseUserGroupDO record, String enterpriseId){ + return enterpriseUserGroupMapper.updateByPrimaryKeySelective(record,enterpriseId); + } + + public int updateByGroupId(EnterpriseUserGroupDO record, String enterpriseId){ + return enterpriseUserGroupMapper.updateByGroupId(record,enterpriseId); + } + + public int countByGroupName(String enterpriseId, String groupName, String groupId){ + return enterpriseUserGroupMapper.countByGroupName(enterpriseId, groupName, groupId); + } + + public void deleteByGroupIdList(String enterpriseId, List groupIdList) { + if(StringUtils.isBlank(enterpriseId) || CollectionUtils.isEmpty(groupIdList)) { + return; + } + enterpriseUserGroupMapper.deleteByGroupIdList(enterpriseId, groupIdList); + } + + public List listUserGroup(String enterpriseId, String groupName){ + return enterpriseUserGroupMapper.listUserGroup(enterpriseId, groupName); + } + + public EnterpriseUserGroupDO getByGroupId(String enterpriseId, String groupId){ + return enterpriseUserGroupMapper.getByGroupId(enterpriseId, groupId); + } + + public List listByGroupIdList(String enterpriseId, List groupIdList){ + if (StringUtils.isBlank(enterpriseId) || CollectionUtils.isEmpty(groupIdList)) { + return new ArrayList<>(); + } + return enterpriseUserGroupMapper.listByGroupIdList(enterpriseId, groupIdList); + } + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserGroupMappingDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserGroupMappingDAO.java new file mode 100644 index 000000000..6939646cb --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserGroupMappingDAO.java @@ -0,0 +1,71 @@ +package com.cool.store.dao; + +import com.cool.store.entity.EnterpriseUserGroupMappingDO; +import com.cool.store.mapper.EnterpriseUserGroupMappingMapper; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * 用户分组映射 + * @author wxp + * @date 2022-12-29 14:56 + */ +@Repository +public class EnterpriseUserGroupMappingDAO { + + @Resource + private EnterpriseUserGroupMappingMapper enterpriseUserGroupMappingMapper; + + public void deleteUserGroupMappingByGroupId(String enterpriseId, String groupId) { + if (StringUtils.isBlank(enterpriseId) || StringUtils.isBlank(groupId)) { + return; + } + enterpriseUserGroupMappingMapper.deleteUserGroupMappingByGroupId(enterpriseId, groupId); + } + + public void batchInsertMapping(String enterpriseId, List userIdList, String groupId) { + if (StringUtils.isBlank(enterpriseId) || CollectionUtils.isEmpty(userIdList) || StringUtils.isBlank(groupId)) { + return; + } + enterpriseUserGroupMappingMapper.batchInsertMapping(enterpriseId, userIdList, groupId); + } + + public void deleteMappingByGroupIdList(String enterpriseId, String groupId, List userIdList) { + if(StringUtils.isBlank(enterpriseId) || StringUtils.isBlank(groupId)) { + return; + } + enterpriseUserGroupMappingMapper.deleteMappingByGroupIdList(enterpriseId, groupId, userIdList); + } + + public void deleteMappingByUserIdList(String enterpriseId, List userIdList) { + if(StringUtils.isBlank(enterpriseId) || CollectionUtils.isEmpty(userIdList)) { + return; + } + enterpriseUserGroupMappingMapper.deleteMappingByUserIdList(enterpriseId, userIdList); + } + + + public List listByGroupIdList(String enterpriseId, List groupIdList){ + return enterpriseUserGroupMappingMapper.listByGroupIdList(enterpriseId, groupIdList); + } + + public List listByUserIdList(String enterpriseId, List userIdList){ + if (StringUtils.isBlank(enterpriseId) || CollectionUtils.isEmpty(userIdList)) { + return new ArrayList<>(); + } + return enterpriseUserGroupMappingMapper.listByUserIdList(enterpriseId, userIdList); + } + + public void batchInsertOrUpdateUserGroupMapping(String enterpriseId, List userGroupMappingDOList) { + if (CollectionUtils.isEmpty(userGroupMappingDOList)) { + return; + } + enterpriseUserGroupMappingMapper.batchInsertOrUpdateUserGroupMapping(enterpriseId, userGroupMappingDOList); + } + +} 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 59313499f..dc6e7211a 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 @@ -1,8 +1,15 @@ package com.cool.store.dao; +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 javax.annotation.Resource; @@ -22,4 +29,21 @@ public class EnterpriseUserRoleDAO { return enterpriseUserRoleMapper.insertBatchUserRole(eid, userRole); } + public List getUserAndRolesByUserId(String enterpriseId, List userIdList){ + if(StringUtils.isBlank(enterpriseId) || CollectionUtils.isEmpty(userIdList)){ + return Lists.newArrayList(); + } + return enterpriseUserRoleMapper.getUserAndRolesByUserId(enterpriseId, userIdList); + } + + public Boolean checkIsAdmin(String enterpriseId, String userId) { + // 1.取出所有用户角色 + // 2.匹配是否有管理员角色 + List sysRoleDOList = enterpriseUserRoleMapper.listRoleByUserId(enterpriseId, userId); + return ListUtils.emptyIfNull(sysRoleDOList) + .stream() + .anyMatch(role-> StringUtils.equals(RoleEnum.MASTER.getRoleEnum(),role.getRoleEnum())); + } + + } \ No newline at end of file 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 95cf4d128..6697ccf03 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,11 +1,15 @@ package com.cool.store.dao; import com.cool.store.constants.CommonConstants; +import com.cool.store.dto.region.RegionPathDTO; import com.cool.store.entity.RegionDO; import com.cool.store.enums.RegionTypeEnum; import com.cool.store.mapper.RegionMapper; +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 javax.annotation.Resource; @@ -71,4 +75,33 @@ public class RegionDAO { .stream() .collect(Collectors.toMap(RegionDO::getSynDingDeptId, RegionDO::getId, (r, e) -> r)); } + + public List getAllRegion(String eid){ + if(StringUtils.isBlank(eid)){ + return Lists.newArrayList(); + } + return regionMapper.getAllRegion(eid); + } + + public List listStoreRegionByIds(String enterpriseId, List regionIds){ + if(StringUtils.isBlank(enterpriseId) || CollectionUtils.isEmpty(regionIds)){ + return Lists.newArrayList(); + } + return regionMapper.listStoreRegionByIds(enterpriseId, regionIds); + } + + public List getRegionPathByList(String eid, List regionIds) { + List regionList = regionMapper.getRegionByRegionIds(eid, regionIds); + return ListUtils.emptyIfNull(regionList) + .stream() + .map(data->{ + RegionPathDTO regionPathDTO =new RegionPathDTO(); + regionPathDTO.setRegionId(data.getRegionId()); + regionPathDTO.setRegionPath(data.getFullRegionPath()); + regionPathDTO.setRegionName(data.getName()); + regionPathDTO.setStoreNum(data.getStoreNum() == null? 0 : data.getStoreNum()); + regionPathDTO.setRegionType(data.getRegionType()); + return regionPathDTO; + }).collect(Collectors.toList()); + } } \ 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 new file mode 100644 index 000000000..2d5a12dd7 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/StoreDAO.java @@ -0,0 +1,61 @@ +package com.cool.store.dao; + +import com.cool.store.dto.store.StoreAreaDTO; +import com.cool.store.entity.StoreDO; +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 javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: StoreDAO + * @Description: + * @date 2023-05-31 11:52 + */ +@Service +public class StoreDAO { + + @Resource + private StoreMapper storeMapper; + + public List listStoreByRegionIdList(String eid, List regionIdList) { + if(StringUtils.isBlank(eid) || CollectionUtils.isEmpty(regionIdList)){ + return Collections.emptyList(); + } + return storeMapper.listStoreByRegionIdList(eid, regionIdList); + } + + public List getStoreListByStoreIds(String enterpriseId, List storeIdList){ + if(StringUtils.isBlank(enterpriseId) || CollectionUtils.isEmpty(storeIdList)){ + return Lists.newArrayList(); + } + return storeMapper.getStoreListByStoreIds(enterpriseId, storeIdList); + } + + public List listStoreByRegionIdListNotChild(String eid, List regionIdList) { + if(StringUtils.isBlank(eid) || CollectionUtils.isEmpty(regionIdList)){ + return Lists.newArrayList(); + } + return storeMapper.listStoreByRegionIdListNotChild(eid, regionIdList); + } + + public Integer getStoreCount(String enterpriseId){ + return storeMapper.countStore(enterpriseId); + } + + public List getAllStoreList (String eid,Boolean isReturnList){ + List invalidStores=new ArrayList<>(); + if(isReturnList){ + return storeMapper.listStoreIdList(eid); + } + return null; + } +} 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 new file mode 100644 index 000000000..2be64fe78 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/SubordinateMappingDAO.java @@ -0,0 +1,43 @@ +package com.cool.store.dao; + +import com.cool.store.entity.SubordinateMappingDO; +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 javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: SubordinateMappingDAO + * @Description: + * @date 2023-05-31 14:27 + */ +@Service +public class SubordinateMappingDAO { + + @Resource + private SubordinateMappingMapper subordinateMappingMapper; + + public List selectByUserIds(String enterpriseId, List userIds){ + if (StringUtils.isBlank(enterpriseId) || CollectionUtils.isEmpty(userIds)){ + return Lists.newArrayList(); + } + return subordinateMappingMapper.selectByUserIds(enterpriseId,userIds); + } + + public void batchInsertSubordinateMapping(String enterpriseId, List subordinateMappingDOS) { + if (CollectionUtils.isEmpty(subordinateMappingDOS)) { + return; + } + List distinctData = subordinateMappingDOS.stream() + .distinct() + .collect(Collectors.toList()); + subordinateMappingMapper.batchInsertSubordinateMapping(enterpriseId, distinctData); + } + +} 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 a5f9286d4..e9e136cbf 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 @@ -1,7 +1,15 @@ package com.cool.store.dao; +import com.cool.store.entity.UserAuthMappingDO; +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 javax.annotation.Resource; +import java.util.List; + /** * @author zhangchenbiao * @date 2023-05-19 02:54 @@ -9,4 +17,21 @@ import org.springframework.stereotype.Service; @Service public class UserAuthMappingDAO { + @Resource + private UserAuthMappingMapper userAuthMappingMapper; + + + public List listUserAuthMappingByUserId(String eid, String userId){ + if(StringUtils.isAnyBlank(eid, userId)){ + return Lists.newArrayList(); + } + return userAuthMappingMapper.listUserAuthMappingByUserId(eid, userId); + } + + public List listUserAuthMappingByUserIds(String eid, List userIds){ + if(StringUtils.isBlank(eid) || CollectionUtils.isEmpty(userIds)){ + return Lists.newArrayList(); + } + return userAuthMappingMapper.listUserAuthMappingByUserIds(eid, userIds); + } } \ 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 2046db8c0..81878a531 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 @@ -1,5 +1,6 @@ package com.cool.store.mapper; +import com.cool.store.dto.enterprise.EnterpriseUserDTO; import com.cool.store.entity.EnterpriseUserDO; import org.apache.ibatis.annotations.Param; @@ -48,4 +49,41 @@ public interface EnterpriseUserMapper { */ Boolean batchUpdateDiffUserDiffRegionIds(@Param("eid") String eid, @Param("list") List enterpriseUserDOList); + List fuzzyUsersByDepartment(@Param("eid") String eid, + @Param("deptId") String deptId, + @Param("roleId") Long roleId, + @Param("orderBy") String orderBy, + @Param("orderRule") String orderRule, + @Param("userName") String userName, + @Param("jobNumber") String jobnumber, + @Param("userStatus") Integer userStatus, + @Param("userIdList") List userIdList, + @Param("regionId") String regionId); + + List fuzzyUsersByNotRole(@Param("eid") String eid, + @Param("deptId") String deptId, + @Param("orderBy") String orderBy, + @Param("orderRule") String orderRule, + @Param("userName") String userName, + @Param("jobNumber") String jobnumber, + @Param("userStatus") Integer userStatus, + @Param("userIdList") List userIdList, + @Param("regionId") String regionId); + + /** + * 根据用户id数组获取用户 + * @param eid + * @param userIds + * @return + */ + List selectUsersByUserIds(@Param("eid") String eid, @Param("userIds") List userIds); + + + List listUserByGroupId(@Param("eid") String eid, + @Param("groupId") String groupId, + @Param("userName") String userName, + @Param("userIdList") List userIdList); + + List listByRegionIdList(@Param("eid") String eid, @Param("regionIdList") List regionIdList); + } \ 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 9a8b6257e..9e7580aec 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 @@ -1,7 +1,9 @@ package com.cool.store.mapper; +import com.cool.store.dto.buser.UserRoleDTO; import com.cool.store.dto.enterprise.EnterpriseUserRole; import com.cool.store.entity.EnterpriseUserRoleDO; +import com.cool.store.entity.SysRoleDO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -33,4 +35,8 @@ public interface EnterpriseUserRoleMapper { * @return */ Boolean insertBatchUserRole(@Param("eid") String enterpriseId, @Param("userRoles") List userRoles); + + List getUserAndRolesByUserId(@Param("eip") String enterpriseId, @Param("userIdList") List userIdList); + + List listRoleByUserId(@Param("eip") String enterpriseId, @Param("userId") String userId); } \ 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 b55de54c6..815b64afb 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 @@ -37,4 +37,8 @@ public interface RegionMapper { Integer batchInsertRegionsByDepartments(@Param("eid") String eid, @Param("regions") List regions); List selectRegionBySynDingDeptIds(@Param("eid") String eid, @Param("synDingDeptIds") List synDingDeptIds); + + List getAllRegion(@Param("eid") String eid); + + List listStoreRegionByIds(@Param("eid")String enterpriseId, @Param("regionIds")List regionIds); } \ 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 c25272e02..5af0ff1cc 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 @@ -3,6 +3,8 @@ package com.cool.store.mapper; import com.cool.store.entity.UserAuthMappingDO; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** * @author zhangchenbiao * @date 2023-05-19 02:54 @@ -22,4 +24,9 @@ public interface UserAuthMappingMapper { * dateTime:2023-05-19 02:54 */ int updateByPrimaryKeySelective(@Param("record") UserAuthMappingDO record, @Param("enterpriseId") String enterpriseId); + + List listUserAuthMappingByUserId(@Param("eid") String eid, @Param("userId") String userId); + + List listUserAuthMappingByUserIds(@Param("eid") String eid, + @Param("userIds") List userIds); } \ 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 36012708d..a4906de91 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml @@ -468,7 +468,6 @@ jobnumber=values(jobnumber) - update enterprise_user_${eid} set user_region_ids = @@ -480,4 +479,195 @@ #{item.userId} + + + + + + + + + + + + \ 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 57a24dc13..29d540316 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserRoleMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserRoleMapper.xml @@ -69,4 +69,35 @@ (#{userRole.roleId}, #{userRole.userId} ,#{userRole.createTime}) + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewLogMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewLogMapper.xml index 01663186b..b0201f021 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewLogMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewLogMapper.xml @@ -9,7 +9,7 @@ - + diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerTaskInfoLogMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerTaskInfoLogMapper.xml index f41b4d541..b6a6c37cc 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerTaskInfoLogMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerTaskInfoLogMapper.xml @@ -13,7 +13,7 @@ - + diff --git a/coolstore-partner-dao/src/main/resources/mapper/RegionMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/RegionMapper.xml index 4cee3973a..1220ac11f 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/RegionMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/RegionMapper.xml @@ -340,4 +340,49 @@ ) + + + + \ 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 47474315b..fdb6a57ce 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/UserAuthMappingMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/UserAuthMappingMapper.xml @@ -100,4 +100,16 @@ where id = #{record.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 51916cc90..09653a08a 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 = login_record_e88b6a2bc1334164b54977a4dbfe5d9d \ No newline at end of file +table.name = enterprise_user_group_mapping_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 7a1866b79..de4f003fb 100644 --- a/coolstore-partner-model/coolstore-partner-model.iml +++ b/coolstore-partner-model/coolstore-partner-model.iml @@ -71,7 +71,6 @@ - diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/auth/AuthRegionStoreDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/auth/AuthRegionStoreDTO.java new file mode 100644 index 000000000..1db2380a5 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/auth/AuthRegionStoreDTO.java @@ -0,0 +1,18 @@ +package com.cool.store.dto.auth; + + +import lombok.Data; + +import java.util.List; + +/** + * describe: + * + * @author zhouyiping + * @date 2020/12/09 + */ +@Data +public class AuthRegionStoreDTO { + String userId; + private List authRegionStoreUserList; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/auth/AuthRegionStoreUserDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/auth/AuthRegionStoreUserDTO.java new file mode 100644 index 000000000..c86f52cb6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/auth/AuthRegionStoreUserDTO.java @@ -0,0 +1,38 @@ +package com.cool.store.dto.auth; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * describe: + * + * @author zhouyiping + * @date 2020/10/10 + */ +@Data +public class AuthRegionStoreUserDTO { + + private String id; + + /** + * 名称 + */ + private String name; + + /** + * 是否是门店 + */ + @JsonProperty("store_flag") + private Boolean storeFlag ; + + /** + * 权限来源 create-数智门店创建 sync-钉钉同步 + */ + private String source; + + /** + * 门店类型区域对应的 门店id + */ + @JsonProperty("store_id") + private String storeId; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/auth/AuthStoreCountDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/auth/AuthStoreCountDTO.java new file mode 100644 index 000000000..440c32994 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/auth/AuthStoreCountDTO.java @@ -0,0 +1,20 @@ +package com.cool.store.dto.auth; + +import lombok.Data; + +import java.util.List; + +/** + * describe: + * + * @author zhouyiping + * @date 2020/11/17 + */ +@Data +public class AuthStoreCountDTO { + + private String userId; + private List storeList; + private Integer storeCount; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/buser/MySubordinatesDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/buser/MySubordinatesDTO.java new file mode 100644 index 000000000..55f58c8cc --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/buser/MySubordinatesDTO.java @@ -0,0 +1,27 @@ +package com.cool.store.dto.buser; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2022/2/28 17:27 + * @Version 1.0 + */ +@Data +public class MySubordinatesDTO { + + /** + * 映射ID + */ + String regionId; + + String regionName; + + String personalId; + + String personalName; + /** + * 节点类型 区域 人员 + */ + String nodeType; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/buser/SubordinateUserRangeDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/buser/SubordinateUserRangeDTO.java new file mode 100644 index 000000000..dbca2c731 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/buser/SubordinateUserRangeDTO.java @@ -0,0 +1,35 @@ +package com.cool.store.dto.buser; + +import lombok.Data; + +import java.util.List; + +/** + * @ClassName SubordinateUserRangeDTO + * @Description 用户管辖范围 + * @author wxp + */ +@Data +public class SubordinateUserRangeDTO { + + private String userId; + + /** + * 管辖用户范围:self-仅自己,all-全部人员,define-自定义 + */ + private String subordinateUserRange; + + /** + * auto自动关联 select手动选择 + */ + private List sourceList; + + /** + * 我的下属集合 + */ + private List mySubordinates; + + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/buser/UserRoleDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/buser/UserRoleDTO.java new file mode 100644 index 000000000..3b56aec78 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/buser/UserRoleDTO.java @@ -0,0 +1,22 @@ +package com.cool.store.dto.buser; + +import lombok.Data; + +/** + * describe: + * + * @author zhouyiping + * @date 2020/11/06 + */ +@Data +public class UserRoleDTO { + private String userId; + private String roleName; + private String roleAuth; + private Long roleId; + private Integer priority; + + private String roleEnum; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionPathDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionPathDTO.java new file mode 100644 index 000000000..dc2d50594 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/region/RegionPathDTO.java @@ -0,0 +1,27 @@ +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 RegionPathDTO { + + private String regionId; + + private String regionPath; + + private Integer storeNum; + + private String regionName; + + private String regionType; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/response/ResultDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/response/ResultDTO.java new file mode 100644 index 000000000..fe9524de2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/response/ResultDTO.java @@ -0,0 +1,99 @@ +package com.cool.store.dto.response; + + +import java.io.Serializable; + +/** + * rpc统一返回实体类 + * + * @author byd + */ +public class ResultDTO implements Serializable { + + private static final long serialVersionUID = -2217360460304088285L; + + private boolean success = true; + /** + * 返回码 + */ + private int code; + + /** + * 返回信息 + */ + private String message; + + /** + * 返回数据 + */ + private T data; + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + public ResultDTO() { + super(); + } + + public ResultDTO(T data) { + super(); + this.data = data; + } + + public ResultDTO(int code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ResultDTO(int code, String message) { + this.code = code; + this.message = message; + } + + public static ResultDTO successResult() { + return new ResultDTO(200000, "请求成功"); + } + + public static ResultDTO successResult(Object data) { + return new ResultDTO(200000, "请求成功", data); + } + + public static ResultDTO failResult(String msg) { + return new ResultDTO(400000, msg); + } + + public static ResultDTO failResult(int code, String msg) { + return new ResultDTO(code, msg); + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/store/StoreAreaDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/store/StoreAreaDTO.java new file mode 100644 index 000000000..713e795fb --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/store/StoreAreaDTO.java @@ -0,0 +1,48 @@ +package com.cool.store.dto.store; + +import cn.hutool.core.util.StrUtil; +import lombok.Data; + +import java.util.List; + +/** + * describe: + * + * @author zhouyiping + * @date 2020/10/22 + */ +@Data +public class StoreAreaDTO { + + private String storeId; + private String storeName; + /** + * 门店所属区域的全部节点信息 + */ + private String regionPath; + + /** + * 门店挂靠的区域Id + */ + private String areaId; + + /** + * 门店的挂挂靠的父节点区域ID + */ + private List areaIdList; + + /** + * 所属区域id + */ + private Long regionId; + + private String storeStatus; + + + public List getAreaIdList(){ + return StrUtil.splitTrim(regionPath,"/"); + } + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/usergroup/UserGroupAddRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/usergroup/UserGroupAddRequest.java new file mode 100644 index 000000000..ec0412c0c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/usergroup/UserGroupAddRequest.java @@ -0,0 +1,33 @@ +package com.cool.store.dto.usergroup; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import java.util.List; + + +/** + * @author wxp + */ +@ApiModel(value = "分组创建") +@Data +public class UserGroupAddRequest { + + @ApiModelProperty("分组id") + private String groupId; + + @ApiModelProperty(value = "分组名称", required = true) + @NotBlank(message = "分组名称不能为空") + @Length(max = 100, message = "名称最多100个字") + private String groupName; + + @ApiModelProperty("共同编辑人userId集合") + private List commonEditUserIdList; + + @ApiModelProperty("配置用户userId集合") + private List userIdList; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/usergroup/UserGroupDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/usergroup/UserGroupDTO.java new file mode 100644 index 000000000..1b6568456 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/usergroup/UserGroupDTO.java @@ -0,0 +1,24 @@ +package com.cool.store.dto.usergroup; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 用户分组dto + * @ClassName: UserGroupDTO + * @Author: wxp + * @Date: 2023/1/5 16:04 + */ +@Data +public class UserGroupDTO { + + @ApiModelProperty("组别id") + private String groupId; + + @ApiModelProperty("组别名称") + private String groupName; + + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/buser/EnterpriseUserPageVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/buser/EnterpriseUserPageVO.java new file mode 100644 index 000000000..367a3251c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/buser/EnterpriseUserPageVO.java @@ -0,0 +1,121 @@ +package com.cool.store.vo.buser; + +import com.cool.store.dto.auth.AuthRegionStoreUserDTO; +import com.cool.store.dto.buser.MySubordinatesDTO; +import com.cool.store.dto.usergroup.UserGroupDTO; +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.utils.UUIDUtils; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author zhangchenbiao + * @date 2022-01-18 04:40 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EnterpriseUserPageVO implements Serializable { + + @ApiModelProperty("钉钉用户id") + private String userId; + + @ApiModelProperty("") + private String name; + + @ApiModelProperty("是否已经激活, true表示已激活, false表示未激活") + private Boolean active; + + @ApiModelProperty("是否是主管理员,0:否,1:是") + private Boolean mainAdmin; + + @ApiModelProperty("是否为企业的管理员, true表示是, false表示不是") + private Boolean isAdmin; + + @ApiModelProperty("手机号码") + private String mobile; + + @ApiModelProperty("员工的电子邮箱") + private String email; + + @ApiModelProperty("在当前isv全局范围内唯一标识一个用户的身份,用户无法修改") + private String unionid; + + @ApiModelProperty("员工的企业邮箱") + private String orgEmail; + + @ApiModelProperty("头像url") + private String avatar; + + @ApiModelProperty("") + private String roles; + + @ApiModelProperty("工号") + private String jobnumber; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("") + private String roleName; + + @ApiModelProperty("部门") + private String departments; + + @ApiModelProperty("用户状态 0待审核 1正常 2冻结") + private Integer userStatus; + + @ApiModelProperty("门店数量") + private Integer storeCount; + + private String department; + + @ApiModelProperty("用户分组") + private List userGroupList; + + @ApiModelProperty("管辖用户范围") + private String subordinateUserRange; + + @ApiModelProperty("auto自动关联 select手动选择") + private List sourceList; + + @ApiModelProperty("我的下属集合") + private List mySubordinates; + + private List authRegionStoreList; + + @ApiModelProperty("选取权限 true可选 false不可选") + private Boolean selectFlag; + + + public static List transUserDOToVO(List enterpriseUserList) { + List resultList = new ArrayList<>(); + for (EnterpriseUserDO enterpriseUserDTO : enterpriseUserList) { + EnterpriseUserPageVO enterpriseUserDO = new EnterpriseUserPageVO(); + enterpriseUserDO.setUserId(enterpriseUserDTO.getUserId()); + enterpriseUserDO.setName(enterpriseUserDTO.getName()); + enterpriseUserDO.setActive(Boolean.TRUE); + enterpriseUserDO.setMainAdmin(enterpriseUserDTO.getMainAdmin()); + enterpriseUserDO.setIsAdmin(enterpriseUserDTO.getIsAdmin()); + enterpriseUserDO.setMobile(enterpriseUserDTO.getMobile()); + enterpriseUserDO.setEmail(enterpriseUserDTO.getEmail()); + enterpriseUserDO.setOrgEmail(enterpriseUserDTO.getOrgEmail()); + enterpriseUserDO.setUnionid(enterpriseUserDTO.getUnionid()); + enterpriseUserDO.setAvatar(enterpriseUserDTO.getAvatar()); + enterpriseUserDO.setJobnumber(enterpriseUserDTO.getJobnumber()); + enterpriseUserDO.setRemark(enterpriseUserDTO.getRemark()); + resultList.add(enterpriseUserDO); + } + return resultList; + } + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/usergroup/UserGroupVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/usergroup/UserGroupVO.java new file mode 100644 index 000000000..485b3d2e0 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/usergroup/UserGroupVO.java @@ -0,0 +1,47 @@ +package com.cool.store.vo.usergroup; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class UserGroupVO { + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("分组id") + private String groupId; + + @ApiModelProperty("人员数量") + private Integer userCount; + + private List commonEditUserList; + + @ApiModelProperty("更新人") + private String updateUserName; + + @ApiModelProperty("更新时间") + private Date updateTime; + + @ApiModelProperty("更新人") + private String updateUserId; + + @ApiModelProperty("创建人") + private String createUserName; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("创建人id") + private String createUserId; + + @ApiModelProperty("配置用户集合") + private List configUserList; + + @ApiModelProperty("编辑权限") + private Boolean editFlag; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/usergroup/UserSimpleDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/usergroup/UserSimpleDTO.java new file mode 100644 index 000000000..a83927c79 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/usergroup/UserSimpleDTO.java @@ -0,0 +1,20 @@ +package com.cool.store.vo.usergroup; + +import lombok.Data; + +/** + * @author :xugangkun + * @date :2022/3/8 14:22 + */ +@Data +public class UserSimpleDTO { + /** + * 用户id + */ + private String userId; + /** + * 用户名称 + */ + private String userName; + +} diff --git a/coolstore-partner-service/coolstore-partner-service.iml b/coolstore-partner-service/coolstore-partner-service.iml index 714241593..4e7767e5c 100644 --- a/coolstore-partner-service/coolstore-partner-service.iml +++ b/coolstore-partner-service/coolstore-partner-service.iml @@ -17,7 +17,6 @@ - @@ -32,8 +31,6 @@ - - @@ -51,8 +48,6 @@ - - @@ -64,9 +59,6 @@ - - - @@ -120,5 +112,12 @@ + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-service/pom.xml b/coolstore-partner-service/pom.xml index efb47940c..778b19fd8 100644 --- a/coolstore-partner-service/pom.xml +++ b/coolstore-partner-service/pom.xml @@ -45,6 +45,20 @@ com.aliyun ons20190214 + + com.github.pagehelper + pagehelper + 5.3.2 + compile + + + redis.clients + jedis + + + org.springframework + spring-web + \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/consumer/EnterpriseInitListener.java b/coolstore-partner-service/src/main/java/com/cool/store/consumer/EnterpriseInitListener.java index dfe443392..de8cecdf5 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/consumer/EnterpriseInitListener.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/consumer/EnterpriseInitListener.java @@ -7,10 +7,10 @@ import com.aliyun.openservices.ons.api.Message; import com.aliyun.openservices.ons.api.MessageListener; import com.cool.store.constants.CommonConstants; import com.cool.store.dto.enterprise.EnterpriseInitDTO; +import com.cool.store.enums.AppTypeEnum; import com.cool.store.enums.EnterpriseStatusEnum; import com.cool.store.service.EnterpriseInitService; import com.cool.store.utils.RedisUtilPool; -import com.coolstore.base.enums.AppTypeEnum; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/consumer/EnterpriseScriptListener.java b/coolstore-partner-service/src/main/java/com/cool/store/consumer/EnterpriseScriptListener.java index 91d2faf8b..895c38454 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/consumer/EnterpriseScriptListener.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/consumer/EnterpriseScriptListener.java @@ -6,8 +6,8 @@ import com.aliyun.openservices.ons.api.ConsumeContext; import com.aliyun.openservices.ons.api.Message; import com.aliyun.openservices.ons.api.MessageListener; import com.cool.store.dto.enterprise.EnterpriseOpenMsg; +import com.cool.store.enums.RocketMqTagEnum; import com.cool.store.service.EnterpriseInitService; -import com.coolstore.base.enums.RocketMqTagEnum; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; 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 49524c00d..a69ff47bb 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 @@ -6,8 +6,8 @@ import com.cool.store.dto.enterprise.AuthScopeDTO; 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.utils.RestTemplateUtil; -import com.coolstore.base.dto.ResultDTO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/http/WechatRest.java b/coolstore-partner-service/src/main/java/com/cool/store/http/WechatRest.java index 6019d9ac1..5a1a04981 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/http/WechatRest.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/http/WechatRest.java @@ -1,14 +1,11 @@ package com.cool.store.http; import com.alibaba.fastjson.JSONObject; -import com.cool.store.dto.enterprise.EnterpriseUserDTO; import com.cool.store.dto.wx.CodeSessionDTO; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.exception.ServiceException; import com.cool.store.utils.RestTemplateUtil; -import com.coolstore.base.dto.ResultDTO; import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.crypto.hash.Hash; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/OrderMessageService.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/OrderMessageService.java index dc7b316d4..b306368c1 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/mq/OrderMessageService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/OrderMessageService.java @@ -1,7 +1,7 @@ package com.cool.store.mq; import com.aliyun.openservices.ons.api.SendResult; -import com.coolstore.base.enums.RocketMqTagEnum; +import com.cool.store.enums.RocketMqTagEnum; /** * @author zhangchenbiao diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/SimpleMessageService.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/SimpleMessageService.java index 1e5343cb7..3ce3c7dbe 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/mq/SimpleMessageService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/SimpleMessageService.java @@ -2,7 +2,7 @@ package com.cool.store.mq; import com.aliyun.openservices.ons.api.SendCallback; import com.aliyun.openservices.ons.api.SendResult; -import com.coolstore.base.enums.RocketMqTagEnum; +import com.cool.store.enums.RocketMqTagEnum; /** * @author zhangchenbiao diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/impl/OrderMessageServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/impl/OrderMessageServiceImpl.java index 4da451ec5..e5f8a5748 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/mq/impl/OrderMessageServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/impl/OrderMessageServiceImpl.java @@ -4,10 +4,10 @@ import com.aliyun.openservices.ons.api.Message; import com.aliyun.openservices.ons.api.SendResult; import com.aliyun.openservices.ons.api.bean.OrderProducerBean; import com.cool.store.constants.CommonConstants; +import com.cool.store.enums.RocketMqTagEnum; import com.cool.store.mq.OrderMessageService; import com.cool.store.mq.RocketMqConfig; import com.cool.store.utils.UUIDUtils; -import com.coolstore.base.enums.RocketMqTagEnum; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.slf4j.MDC; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/impl/SimpleMessageServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/impl/SimpleMessageServiceImpl.java index 1b749261b..fcad3c4e8 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/mq/impl/SimpleMessageServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/impl/SimpleMessageServiceImpl.java @@ -6,10 +6,10 @@ import com.aliyun.openservices.ons.api.SendCallback; import com.aliyun.openservices.ons.api.SendResult; import com.aliyun.openservices.ons.api.bean.ProducerBean; import com.cool.store.constants.CommonConstants; +import com.cool.store.enums.RocketMqTagEnum; import com.cool.store.mq.RocketMqConfig; import com.cool.store.mq.SimpleMessageService; import com.cool.store.utils.UUIDUtils; -import com.coolstore.base.enums.RocketMqTagEnum; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.slf4j.MDC; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/util/RocketMqUtil.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/util/RocketMqUtil.java index 5411223c3..918bff946 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/mq/util/RocketMqUtil.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/util/RocketMqUtil.java @@ -4,7 +4,7 @@ import com.aliyun.ons20190214.*; import com.aliyun.ons20190214.models.*; import com.aliyun.teaopenapi.models.Config; import com.cool.store.constants.CommonConstants; -import com.coolstore.base.enums.RocketMqGroupEnum; +import com.cool.store.enums.RocketMqGroupEnum; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/AuthVisualService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/AuthVisualService.java new file mode 100644 index 000000000..4c01efa1d --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/AuthVisualService.java @@ -0,0 +1,48 @@ +package com.cool.store.service; + +import com.cool.store.dto.auth.AuthRegionStoreDTO; +import com.cool.store.dto.auth.AuthRegionStoreUserDTO; +import com.cool.store.dto.auth.AuthStoreCountDTO; + +import java.util.List; + +/** + * describe:可视化权限服务 + * + * @author zhouyiping + * @date 2020/10/14 + */ +public interface AuthVisualService { + + /** + * do + * 查询权限区域/门店(配置区域使用) + * @param eid + * @param userId + * @return + */ + List authRegionStore(String eid, String userId); + + + /** + * do + * 查询权限区域/门店(配置区域使用) + * @param eid + * @param userIdList + * @return + */ + List authRegionStoreByUserList(String eid, List userIdList); + + + + /** + * do + * 获取人员拥有的门店总数 + * @param eid + * @param userId + * @param isReturnList 是否返回门店列表 + * @return + */ + List authStoreCount(String eid, List userId, Boolean isReturnList); + +} 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 be372b20e..302b60e77 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 @@ -1,7 +1,7 @@ package com.cool.store.service; import com.cool.store.dto.enterprise.EnterpriseOpenMsg; -import com.coolstore.base.enums.AppTypeEnum; +import com.cool.store.enums.AppTypeEnum; import java.util.List; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/EnterpriseUserGroupService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/EnterpriseUserGroupService.java new file mode 100644 index 000000000..2d82becfa --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/EnterpriseUserGroupService.java @@ -0,0 +1,55 @@ +package com.cool.store.service; + +import com.cool.store.context.CurrentUser; +import com.cool.store.dto.enterprise.EnterpriseUserDTO; +import com.cool.store.dto.usergroup.UserGroupAddRequest; +import com.cool.store.dto.usergroup.UserGroupDTO; +import com.cool.store.vo.buser.EnterpriseUserPageVO; +import com.cool.store.vo.usergroup.UserGroupVO; +import com.github.pagehelper.PageInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Author wxp + * @Date 2022/12/29 11:18 + * @Version 1.0 + */ +public interface EnterpriseUserGroupService { + + /** + * 增加用户分组 + * @param enterpriseId + * @param userGroupAddRequest + * @param user + * @return + */ + Boolean saveOrUpdateUserGroup(String enterpriseId, UserGroupAddRequest userGroupAddRequest, CurrentUser user); + + Boolean updateUserGroup(String enterpriseId,Long userGroupId,List userIdList); + + void batchDeleteGroup(String enterpriseId, String groupId, List userIdList); + + /** + * 获取用户分组列表 + * @param enterpriseId + * @param groupName 分组名,模糊查询用 + * @return + */ + List listUserGroup(String enterpriseId, String groupName, CurrentUser user); + + UserGroupVO getGroupInfo(String enterpriseId, String groupId, CurrentUser user); + + PageInfo listUserByGroupId(String enterpriseId, String groupId, String userName, Integer pageNum, Integer pageSize, CurrentUser currentUser); + + void updateUserGroup(String enterpriseId, List groupIdList, String userId, CurrentUser currentUser); + + Boolean configUser(String enterpriseId, UserGroupAddRequest userGroupAddRequest, CurrentUser user); + + Map> getUserGroupMap(String enterpriseId, List userIdList); + + + + +} 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 189f438fc..7f9e03eaf 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 @@ -1,6 +1,12 @@ 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.vo.buser.EnterpriseUserPageVO; + import java.util.List; +import java.util.Map; /** * @author zhangchenbiao @@ -12,4 +18,20 @@ public interface EnterpriseUserService { void updateUserRegionPathList(String enterpriseId, List userIds); + List listUser(String enterpriseId, String userName, String deptId, + String orderBy, String orderRule, + Long roleId, Integer userStatus, Integer pageNum, Integer pageSize, String jobNumber, String regionId, Boolean hasPage); + + List initUserRole(String enterpriseId, List enterpriseUserList); + + Map fillUserSubordinateNames(String enterpriseId, List userIdList); + + /** + * 获取人员所属部门 + * @param enterpriseId + * @param userIdList + * @return + */ + Map getUserRegion(String enterpriseId, List userIdList); + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/SubordinateMappingService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/SubordinateMappingService.java new file mode 100644 index 000000000..f7650704e --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/SubordinateMappingService.java @@ -0,0 +1,33 @@ +package com.cool.store.service; + +import java.util.List; + +public interface SubordinateMappingService { + + + /** + * 判断用户是否管辖全部用户 + * @param enterpriseId + * @param currentUserId + * @return + */ + Boolean checkHaveAllSubordinateUser(String enterpriseId, String currentUserId); + + /** + * 获取管辖用户 + * @param enterpriseId + * @param currentUserId + * @return + */ + List getSubordinateUserIdList(String enterpriseId, String currentUserId,Boolean addCurrentFlag); + + /** + * 保留管辖用户 + * @param enterpriseId + * @param currentUserId + * @param userIdList + * @return + */ + List retainSubordinateUserIdList(String enterpriseId, String currentUserId, List userIdList,Boolean addCurrentFlag); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AuthVisualServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AuthVisualServiceImpl.java new file mode 100644 index 000000000..bc03f2da1 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AuthVisualServiceImpl.java @@ -0,0 +1,365 @@ +package com.cool.store.service.impl; + +import com.cool.store.dao.*; +import com.cool.store.dto.auth.AuthRegionStoreDTO; +import com.cool.store.dto.auth.AuthRegionStoreUserDTO; +import com.cool.store.dto.auth.AuthStoreCountDTO; +import com.cool.store.dto.buser.UserRoleDTO; +import com.cool.store.dto.store.StoreAreaDTO; +import com.cool.store.entity.RegionDO; +import com.cool.store.entity.StoreDO; +import com.cool.store.entity.UserAuthMappingDO; +import com.cool.store.enums.*; +import com.cool.store.service.AuthVisualService; +import com.cool.store.utils.CommonNodeUtils; +import com.cool.store.utils.RedisConstantUtil; +import com.cool.store.utils.RedisUtilPool; +import javafx.util.Pair; +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 javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * describe: + * + * @author zhouyiping + * @date 2020/10/14 + */ +@Service +public class AuthVisualServiceImpl implements AuthVisualService { + + @Resource + private UserAuthMappingDAO userAuthMappingDAO; + @Resource + private RegionDAO regionDAO; + @Autowired + private RedisUtilPool redisUtilPool; + @Autowired + private EnterpriseUserRoleDAO enterpriseUserRoleDAO; + @Resource + private UserRegionMappingDAO userRegionMappingDAO; + @Resource + private RedisConstantUtil redisConstantUtil; + @Resource + private StoreDAO storeDAO; + + + @Override + public List authRegionStore(String eid, String userId) { + + List userAuthMappingList = userAuthMappingDAO.listUserAuthMappingByUserId(eid, userId); + return getAuthRegionStoreUserDTO(eid, userAuthMappingList); + } + + public List getAuthRegionStoreUserDTO(String eid, List userAuthMappingList) { + List authRegionStoreDTOList = new ArrayList<>(); + Pair, List> listListTwoResultTuple = splitUserAuthMapping(userAuthMappingList); + List storeIdList = listListTwoResultTuple.getKey(); + List regionIdList = listListTwoResultTuple.getValue(); + //将组织架构权限中的区域转换 + if (CollectionUtils.isNotEmpty(regionIdList)) { + List regionByRegionIds = regionDAO.getRegionByRegionIds(eid, regionIdList); + List regionAuthRegionStoreList = ListUtils.emptyIfNull(regionByRegionIds).stream() + .map(data -> mapAuthRegionStoreByRegion(data.getName(), data.getRegionId(), false, data.getStoreId())) + .collect(Collectors.toList()); + List regionStoreIdList = ListUtils.emptyIfNull(regionByRegionIds).stream() + .filter(e -> StringUtils.isNotBlank(e.getStoreId()) && RegionTypeEnum.STORE.getType().equals(e.getRegionType())) + .map(RegionDO::getStoreId) + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(regionAuthRegionStoreList)) { + authRegionStoreDTOList.addAll(regionAuthRegionStoreList); + } + // 是否需要展示区域对应门店权限数据 + if (storeIdList != null && CollectionUtils.isNotEmpty(regionStoreIdList) + && StringUtils.isNotBlank(redisUtilPool.getString(redisConstantUtil.getShowStoreAuthKey()))) { + storeIdList.addAll(regionStoreIdList); + } + } + //将组织架构权限中的门店转换 + if (CollectionUtils.isNotEmpty(storeIdList) && StringUtils.isNotBlank(redisUtilPool.getString(redisConstantUtil.getShowStoreAuthKey()))) { + List storeListByStoreIds = storeDAO.getStoreListByStoreIds(eid, storeIdList); + List storeAuthRegionStoreList = ListUtils.emptyIfNull(storeListByStoreIds).stream() + .map(data -> mapAuthRegionStoreByRegion(data.getStoreName(), data.getStoreId(), true, data.getStoreId())) + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(storeAuthRegionStoreList)) { + authRegionStoreDTOList.addAll(storeAuthRegionStoreList); + } + } + return authRegionStoreDTOList; + } + + public Pair, List> splitUserAuthMapping(List userAuthMappingList) { + + List store = new ArrayList<>(); + List region = new ArrayList<>(); + ListUtils.emptyIfNull(userAuthMappingList) + .forEach(data -> { + if (data.getType().equals(UserAuthMappingTypeEnum.STORE.getCode())) { + store.add(data); + } else { + region.add(data); + } + }); + List storeIdList = ListUtils.emptyIfNull(store).stream() + .map(UserAuthMappingDO::getMappingId).distinct().filter(Objects::nonNull).collect(Collectors.toList()); + List regionIdList = ListUtils.emptyIfNull(region).stream() + .map(UserAuthMappingDO::getMappingId).distinct().filter(Objects::nonNull).collect(Collectors.toList()); + return new Pair(storeIdList, regionIdList); + } + + @Override + public List authRegionStoreByUserList(String eid, List userIdList) { + + List userAuthMappingList = userAuthMappingDAO.listUserAuthMappingByUserIds(eid, userIdList); + List authRegionStoreUserDTO = getAuthRegionStoreUserDTO(eid, userAuthMappingList); + Map regionStoreUserMap = ListUtils.emptyIfNull(authRegionStoreUserDTO) + .stream() + .collect(Collectors.toMap(AuthRegionStoreUserDTO::getId, data -> data, (a, b) -> a)); + Map> userAuthGroup = ListUtils.emptyIfNull(userAuthMappingList) + .stream() + .collect(Collectors.groupingBy(UserAuthMappingDO::getUserId)); + return userIdList.stream() + .map(data -> mapAuthRegionStoreDTO(regionStoreUserMap, userAuthGroup, data)) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } + + @Override + public List authStoreCount(String eid, List userIdList, Boolean isReturnList) { + /** + * 1.查询出所有关于用户的权限门店 + * 1.权限区域角色权限 + * 2.权限门店 + * 2.分组聚合 + * 3.去重统计门店数 + */ + //用户配置的区域权限 + List userAuthMappingDOList = userAuthMappingDAO.listUserAuthMappingByUserIds(eid, userIdList); + + List allAuthRegionList = ListUtils.emptyIfNull(userAuthMappingDOList) + .stream() + .filter(data -> StringUtils.equals(UserAuthMappingTypeEnum.REGION.getCode(), data.getType())) + .map(UserAuthMappingDO::getMappingId) + .distinct() + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + List storeAreaDTOS = storeDAO.listStoreByRegionIdList(eid, allAuthRegionList); + Map> storeAreaMap = ListUtils.emptyIfNull(storeAreaDTOS) + .stream() + .collect(Collectors.groupingBy(StoreAreaDTO::getAreaId, + Collectors.mapping(StoreAreaDTO::getStoreId, Collectors.toList()))); + Map> authMappingMap = ListUtils.emptyIfNull(userAuthMappingDOList) + .stream() + .collect(Collectors.groupingBy(UserAuthMappingDO::getUserId)); + //用户角色可视化范围 + List userRoleList = enterpriseUserRoleDAO.getUserAndRolesByUserId(eid, userIdList); + //取优先级最大角色去查询权限 + //todo role + Map userRoleMap = ListUtils.emptyIfNull(userRoleList) + .stream() + .collect(Collectors.toMap(UserRoleDTO::getUserId, data -> data, (a, b) -> { + if (a.getPriority() == null || b.getPriority() == null) { + return a; + } + return a.getPriority() > b.getPriority() ? b : a; + })); + List minUserRoleList = new ArrayList(userRoleMap.values()); + List allStoreList = storeDAO.getAllStoreList(eid, isReturnList); + Integer allStoreCount = storeDAO.getStoreCount(eid); + + //子区域计算 + List all = null; + Map> regionParentGroupMap = null; + Map regionIdStoreIdMap = null; + if (CollectionUtils.isNotEmpty(allAuthRegionList)) { + List allRegion = regionDAO.getAllRegion(eid); + ListUtils.emptyIfNull(allRegion).forEach(this::initRoot); + all = ListUtils.emptyIfNull(allRegion) + .stream() + .map(RegionDO::getId) + .collect(Collectors.toList()); + regionParentGroupMap = ListUtils.emptyIfNull(allRegion) + .stream() + .collect(Collectors.groupingBy(data -> Long.valueOf(data.getParentId()), + Collectors.mapping(RegionDO::getId, Collectors.toList()))); + + List storeRegionIdList = allAuthRegionList.stream() + .map(e -> Long.valueOf(e)).collect(Collectors.toList()); + List storeRegionList = regionDAO.listStoreRegionByIds(eid, storeRegionIdList); + regionIdStoreIdMap = ListUtils.emptyIfNull(storeRegionList).stream() + .filter(e -> StringUtils.isNotBlank(e.getStoreId()) && !e.getDeleted() && RegionTypeEnum.STORE.getType().equals(e.getRegionType())) + .collect(Collectors.toMap(data->String.valueOf(data.getId()), RegionDO::getStoreId, (a, b) -> a)); + } + + List finalAll = all; + Map> finalRegionParentGroupMap = regionParentGroupMap; + Map finalRegionIdStoreIdMap = regionIdStoreIdMap; + return ListUtils.emptyIfNull(minUserRoleList).stream() + .map(data -> mapAuStoreCountDTO(data, authMappingMap, storeAreaMap, allStoreList, allStoreCount, finalAll, finalRegionParentGroupMap, finalRegionIdStoreIdMap)) + .collect(Collectors.toList()); + } + + + + private AuthRegionStoreDTO mapAuthRegionStoreDTO(Map regionStoreUserMap, Map> userAuthGroup, String data) { + if (MapUtils.isNotEmpty(userAuthGroup) && CollectionUtils.isNotEmpty(userAuthGroup.get(data)) && MapUtils.isNotEmpty(regionStoreUserMap)) { + List authRegionStoreUserDTOList = ListUtils.emptyIfNull(userAuthGroup.get(data)) + .stream() + .map(userAuthMappingDO -> regionStoreUserMap.get(userAuthMappingDO.getMappingId())) + .distinct() + .filter(Objects::nonNull) + .collect(Collectors.toList()); + AuthRegionStoreDTO authRegionStoreDTO = new AuthRegionStoreDTO(); + authRegionStoreDTO.setUserId(data); + authRegionStoreDTO.setAuthRegionStoreUserList(authRegionStoreUserDTOList); + return authRegionStoreDTO; + } + return null; + } + + private void initRoot(RegionDO regionDO) { + if (regionDO.getParentId() == null) { + regionDO.setParentId("0"); + } + } + + + /** + * 获取区域下的门店(不包含子节点) + * @param storeIdList + * @param areaStoreList + * @return + */ + private List authStoreId(List storeIdList, + List areaStoreList) { + + List allStoreIdList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(storeIdList)) { + allStoreIdList.addAll(storeIdList); + } + //聚合区域下的门店信息 + + if (CollectionUtils.isNotEmpty(areaStoreList)) { + allStoreIdList.addAll(areaStoreList); + } + + + //去除重复的StoreId + return ListUtils.emptyIfNull(allStoreIdList).stream() + .distinct() + .collect(Collectors.toList()); + } + + private AuthStoreCountDTO mapAuStoreCountDTO(UserRoleDTO userRoleDTO, + Map> authMappingMap, + Map> storeAreaMap, + List invalidStores, + Integer allStoreCount, + List all, + Map> regionParentGroupMap, Map regionIdStoreIdMap) { + AuthStoreCountDTO authStoreCountDTO = new AuthStoreCountDTO(); + if (userRoleDTO == null || userRoleDTO.getRoleAuth() == null) { + return authStoreCountDTO; + } + String userId = userRoleDTO.getUserId(); + authStoreCountDTO.setUserId(userId); + //全企业数据或者管理员 直接返回企业下所有的门店总数 + if (StringUtils.equals(userRoleDTO.getRoleEnum(), (RoleEnum.MASTER.getRoleEnum()))) { + authStoreCountDTO.setStoreList(invalidStores); + authStoreCountDTO.setStoreCount(allStoreCount); + return authStoreCountDTO; + } + List storeIdList = new ArrayList<>(); + List regionIdList = new ArrayList<>(); + List areaStoreList; + + if (MapUtils.isNotEmpty(authMappingMap)) { + List userAuthMappingDOList = authMappingMap.get(userId); + Pair, List> listListTwoResultTuple = splitUserAuthMapping(userAuthMappingDOList); + storeIdList = listListTwoResultTuple.getKey(); + regionIdList = listListTwoResultTuple.getValue(); + if(CollectionUtils.isNotEmpty(regionIdList) && regionIdStoreIdMap != null){ + List finalStoreIdList = storeIdList; + regionIdList.forEach(regionId -> { + String regionStoreId = regionIdStoreIdMap.get(regionId); + if (StringUtils.isNotBlank(regionStoreId)) { + finalStoreIdList.add(regionStoreId); + } + }); + } + } + switch (AuthRoleEnum.getByCode(userRoleDTO.getRoleAuth())) { + case ALL: + authStoreCountDTO.setStoreList(invalidStores); + authStoreCountDTO.setStoreCount(allStoreCount); + break; + case INCLUDE_SUBORDINATE: + + areaStoreList = ListUtils.emptyIfNull(regionIdList) + .stream() + .map(data -> CommonNodeUtils.getAllChildListContainSelf(0L, + Long.valueOf(data), all, regionParentGroupMap)) + .flatMap(Collection::stream) + .map(data -> data.toString()) + .map(data -> { + if (MapUtils.isNotEmpty(storeAreaMap)) { + return storeAreaMap.get(data); + } + return null; + }) + .filter(Objects::nonNull) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + List includeSubordinateStoreIdList = authStoreId(storeIdList, areaStoreList); + if (CollectionUtils.isNotEmpty(includeSubordinateStoreIdList)) { + authStoreCountDTO.setStoreList(includeSubordinateStoreIdList); + authStoreCountDTO.setStoreCount(ListUtils.emptyIfNull(includeSubordinateStoreIdList).size()); + + } + break; + case PERSONAL: + areaStoreList = ListUtils.emptyIfNull(regionIdList) + .stream() + .map(data -> CommonNodeUtils.getAllChildListContainSelf(0L, + Long.valueOf(data), all, regionParentGroupMap)) + .flatMap(Collection::stream) + .map(data -> data.toString()) + .map(data -> { + if (MapUtils.isNotEmpty(storeAreaMap)) { + return storeAreaMap.get(data); + } + return null; + }) + .filter(Objects::nonNull) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + List personalStoreIdList = authStoreId(storeIdList, areaStoreList); + if (CollectionUtils.isNotEmpty(personalStoreIdList)) { + authStoreCountDTO.setStoreList(personalStoreIdList); + authStoreCountDTO.setStoreCount(ListUtils.emptyIfNull(personalStoreIdList).size()); + + } + break; + default: + break; + } + return authStoreCountDTO; + } + + private AuthRegionStoreUserDTO mapAuthRegionStoreByRegion(String name, String regionId, boolean b, String storeId) { + AuthRegionStoreUserDTO authRegionStoreDTO = new AuthRegionStoreUserDTO(); + authRegionStoreDTO.setName(name); + authRegionStoreDTO.setId(regionId); + authRegionStoreDTO.setStoreFlag(b); + authRegionStoreDTO.setStoreId(storeId); + return authRegionStoreDTO; + } +} 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 2eb683cf6..4ed2f0861 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 @@ -8,10 +8,7 @@ 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.enums.AIEnum; -import com.cool.store.enums.ErrorCodeEnum; -import com.cool.store.enums.RegionTypeEnum; -import com.cool.store.enums.RoleEnum; +import com.cool.store.enums.*; import com.cool.store.exception.ServiceException; import com.cool.store.http.ISVHttpRequest; import com.cool.store.mq.SimpleMessageService; @@ -22,8 +19,6 @@ 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.coolstore.base.enums.AppTypeEnum; -import com.coolstore.base.enums.RocketMqTagEnum; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseUserGroupServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseUserGroupServiceImpl.java new file mode 100644 index 000000000..9e0b0d4b3 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseUserGroupServiceImpl.java @@ -0,0 +1,389 @@ +package com.cool.store.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.cool.store.constants.CommonConstants; +import com.cool.store.context.CurrentUser; +import com.cool.store.dao.EnterpriseUserDAO; +import com.cool.store.dao.EnterpriseUserGroupDAO; +import com.cool.store.dao.EnterpriseUserGroupMappingDAO; +import com.cool.store.dao.EnterpriseUserRoleDAO; +import com.cool.store.dto.auth.AuthRegionStoreDTO; +import com.cool.store.dto.buser.SubordinateUserRangeDTO; +import com.cool.store.dto.usergroup.UserGroupAddRequest; +import com.cool.store.dto.usergroup.UserGroupDTO; +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.entity.EnterpriseUserGroupDO; +import com.cool.store.entity.EnterpriseUserGroupMappingDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.service.AuthVisualService; +import com.cool.store.service.EnterpriseUserGroupService; +import com.cool.store.service.EnterpriseUserService; +import com.cool.store.service.SubordinateMappingService; +import com.cool.store.utils.UUIDUtils; +import com.cool.store.vo.buser.EnterpriseUserPageVO; +import com.cool.store.vo.usergroup.UserGroupVO; +import com.cool.store.vo.usergroup.UserSimpleDTO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +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.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @Author wxp + * @Date 2022/12/29 11:18 + * @Version 1.0 + */ +@Service +@Slf4j +public class EnterpriseUserGroupServiceImpl implements EnterpriseUserGroupService { + + @Resource + private EnterpriseUserGroupDAO enterpriseUserGroupDAO; + @Resource + private EnterpriseUserGroupMappingDAO enterpriseUserGroupMappingDAO; + @Autowired + public EnterpriseUserService enterpriseUserService; + @Resource + private EnterpriseUserDAO enterpriseUserDAO; + @Resource + private AuthVisualService visualService; + @Resource + private SubordinateMappingService subordinateMappingService; + @Resource + private EnterpriseUserRoleDAO enterpriseUserRoleDAO; + + @Override + public Boolean saveOrUpdateUserGroup(String enterpriseId, UserGroupAddRequest userGroupAddRequest, CurrentUser currentUser) { + int count = enterpriseUserGroupDAO.countByGroupName(enterpriseId, userGroupAddRequest.getGroupName(), userGroupAddRequest.getGroupId()); + if (count > 0) { + throw new ServiceException(ErrorCodeEnum.USER_GROUP_NAME_EXIST); + } + EnterpriseUserGroupDO userGroupDO = translateToUserGroupDO(userGroupAddRequest, currentUser); + if(StringUtils.isBlank(userGroupAddRequest.getGroupId())){ + enterpriseUserGroupDAO.insertSelective(userGroupDO, enterpriseId); + }else { + enterpriseUserGroupDAO.updateByGroupId(userGroupDO, enterpriseId); + } + List userIdList = userGroupAddRequest.getUserIdList(); + if(CollectionUtils.isEmpty(userIdList)){ + return Boolean.TRUE; + } + enterpriseUserGroupMappingDAO.deleteUserGroupMappingByGroupId(enterpriseId, userGroupDO.getGroupId()); + List userGroupMappingDOList = new ArrayList<>(); + for (String userId: userIdList) { + EnterpriseUserGroupMappingDO userGroupMappingDO = new EnterpriseUserGroupMappingDO(); + userGroupMappingDO.setUserId(userId); + userGroupMappingDO.setGroupId(userGroupDO.getGroupId()); + userGroupMappingDO.setCreateUserId(currentUser.getUserId()); + userGroupMappingDO.setUpdateUserId(currentUser.getUserId()); + userGroupMappingDOList.add(userGroupMappingDO); + } + if (CollectionUtils.isNotEmpty(userGroupMappingDOList)) { + enterpriseUserGroupMappingDAO.batchInsertOrUpdateUserGroupMapping(enterpriseId, userGroupMappingDOList); + } + return Boolean.TRUE; + } + + @Override + public Boolean updateUserGroup(String enterpriseId, Long userGroupId, List userIdList){ + enterpriseUserGroupMappingDAO.deleteUserGroupMappingByGroupId(enterpriseId, String.valueOf(userGroupId)); + List userGroupMappingDOList = new ArrayList<>(); + for (String userId: userIdList) { + EnterpriseUserGroupMappingDO userGroupMappingDO = new EnterpriseUserGroupMappingDO(); + userGroupMappingDO.setUserId(userId); + userGroupMappingDO.setGroupId(String.valueOf(userGroupId)); + userGroupMappingDO.setCreateUserId(""); + userGroupMappingDO.setUpdateUserId(""); + userGroupMappingDOList.add(userGroupMappingDO); + } + if (CollectionUtils.isNotEmpty(userGroupMappingDOList)) { + enterpriseUserGroupMappingDAO.batchInsertOrUpdateUserGroupMapping(enterpriseId, userGroupMappingDOList); + } + return Boolean.TRUE; + } + + @Override + public void batchDeleteGroup(String enterpriseId, String groupId, List userIdList) { + enterpriseUserGroupMappingDAO.deleteMappingByGroupIdList(enterpriseId, groupId, userIdList); + if(CollectionUtils.isEmpty(userIdList)){ + enterpriseUserGroupDAO.deleteByGroupIdList(enterpriseId, Collections.singletonList(groupId)); + } + } + + @Override + public List listUserGroup(String enterpriseId, String groupName, CurrentUser user) { + List userGroupDOList = enterpriseUserGroupDAO.listUserGroup(enterpriseId,groupName); + List resultList = new ArrayList<>(); + if (CollectionUtils.isEmpty(userGroupDOList)) { + return resultList; + } + List groupIdList = userGroupDOList.stream().map(EnterpriseUserGroupDO::getGroupId).collect(Collectors.toList()); + Set userIdSet = userGroupDOList.stream() + .flatMap(c->Stream.of(c.getCreateUserId(),c.getUpdateUserId())) + .collect(Collectors.toSet()); + List userDOList = enterpriseUserDAO.selectUsersByUserIds(enterpriseId, new ArrayList<>(userIdSet)); + Map userMap = userDOList.stream().collect(Collectors.toMap(EnterpriseUserDO::getUserId, Function.identity())); + List userGroupMappingDOList = enterpriseUserGroupMappingDAO.listByGroupIdList(enterpriseId, groupIdList); + Map> userGroupMappingMap = userGroupMappingDOList.stream() + .collect(Collectors.groupingBy(EnterpriseUserGroupMappingDO::getGroupId)); + for (EnterpriseUserGroupDO enterpriseUserGroupDO : userGroupDOList) { + UserGroupVO userGroupVO = new UserGroupVO(); + userGroupVO.setCreateUserId(enterpriseUserGroupDO.getCreateUserId()); + userGroupVO.setGroupId(enterpriseUserGroupDO.getGroupId()); + userGroupVO.setGroupName(enterpriseUserGroupDO.getGroupName()); + userGroupVO.setCreateTime(enterpriseUserGroupDO.getCreateTime()); + userGroupVO.setUpdateTime(enterpriseUserGroupDO.getUpdateTime()); + EnterpriseUserDO createUser = userMap.get(enterpriseUserGroupDO.getCreateUserId()); + if (createUser != null) { + userGroupVO.setCreateUserName(createUser.getName()); + } + EnterpriseUserDO updateUser = userMap.get(enterpriseUserGroupDO.getUpdateUserId()); + if (updateUser != null) { + userGroupVO.setUpdateUserName(updateUser.getName()); + } + if(!CollectionUtils.isEmpty(userGroupMappingMap.get(enterpriseUserGroupDO.getGroupId()))){ + userGroupVO.setUserCount(userGroupMappingMap.get(enterpriseUserGroupDO.getGroupId()).size()); + } + userGroupVO.setEditFlag(checkUserEditFlag(enterpriseId, enterpriseUserGroupDO, user.getUserId())); + resultList.add(userGroupVO); + } + return resultList; + } + + @Override + public UserGroupVO getGroupInfo(String enterpriseId, String groupId, CurrentUser user) { + EnterpriseUserGroupDO userGroupDO = enterpriseUserGroupDAO.getByGroupId(enterpriseId, groupId); + if (userGroupDO == null) { + throw new ServiceException(ErrorCodeEnum.USER_GROUP_NOT_EXIST); + } + UserGroupVO userGroupVO = new UserGroupVO(); + BeanUtils.copyProperties(userGroupDO, userGroupVO); + fillUserGroupVO(enterpriseId, userGroupDO, userGroupVO); + userGroupVO.setEditFlag(checkUserEditFlag(enterpriseId, userGroupDO, user.getUserId())); + return userGroupVO; + } + + @Override + public PageInfo listUserByGroupId(String enterpriseId, String groupId, String userName, Integer pageNum, Integer pageSize, CurrentUser currentUser) { + PageHelper.startPage(pageNum,pageSize); + List enterpriseUserList = enterpriseUserDAO.listUserByGroupId(enterpriseId, groupId, userName, null); + PageInfo pageInfo = new PageInfo<>(); + if (CollectionUtils.isEmpty(enterpriseUserList)) { + return pageInfo; + } + List resultList = new ArrayList<>(); + resultList = EnterpriseUserPageVO.transUserDOToVO(enterpriseUserList); + pageInfo = new PageInfo<>(resultList); + //填充角色信息如果存在角色信息 + List userIdList = enterpriseUserService.initUserRole(enterpriseId, resultList); + List authRegionStoreDTOList = visualService.authRegionStoreByUserList(enterpriseId, userIdList); + Map authRegionStoreMap = ListUtils.emptyIfNull(authRegionStoreDTOList) + .stream() + .collect(Collectors.toMap(AuthRegionStoreDTO::getUserId, data -> data, (a, b) -> a)); + Map subordinateUserRangeMap = enterpriseUserService.fillUserSubordinateNames(enterpriseId, userIdList); + Map userRegionMap = enterpriseUserService.getUserRegion(enterpriseId, userIdList); + + Boolean haveAllSubordinateUser = subordinateMappingService.checkHaveAllSubordinateUser(enterpriseId, currentUser.getUserId()); + List userSubordinateList = Lists.newArrayList(); + if(!haveAllSubordinateUser){ + userSubordinateList = subordinateMappingService.getSubordinateUserIdList(enterpriseId, currentUser.getUserId(),Boolean.TRUE); + } + List finalUserSubordinateList = userSubordinateList; + resultList.stream() + .forEach(data->{ + if(MapUtils.isNotEmpty(authRegionStoreMap)&&authRegionStoreMap.get(data.getUserId())!=null){ + AuthRegionStoreDTO authRegionStoreDTO = authRegionStoreMap.get(data.getUserId()); + data.setAuthRegionStoreList(authRegionStoreDTO.getAuthRegionStoreUserList()); + } + // 填充下属用户 + if (subordinateUserRangeMap.get(data.getUserId()) != null){ + data.setSubordinateUserRange(subordinateUserRangeMap.get(data.getUserId()).getSubordinateUserRange()); + data.setSourceList(subordinateUserRangeMap.get(data.getUserId()).getSourceList()); + data.setMySubordinates(subordinateUserRangeMap.get(data.getUserId()).getMySubordinates()); + } + data.setDepartment(userRegionMap.get(data.getUserId())); + if(haveAllSubordinateUser){ + data.setSelectFlag(true); + }else { + data.setSelectFlag(finalUserSubordinateList.contains(data.getUserId())); + } + }); + return pageInfo; + } + + @Override + public void updateUserGroup(String enterpriseId, List groupIdList, String userId, CurrentUser currentUser) { + if(CollectionUtils.isEmpty(groupIdList)){ + return; + } + enterpriseUserGroupMappingDAO.deleteMappingByUserIdList(enterpriseId, Collections.singletonList(userId)); + List userGroupMappingDOList = new ArrayList<>(); + for (String groupId: groupIdList) { + EnterpriseUserGroupMappingDO userGroupMappingDO = new EnterpriseUserGroupMappingDO(); + userGroupMappingDO.setUserId(userId); + userGroupMappingDO.setGroupId(groupId); + userGroupMappingDO.setCreateUserId(currentUser.getUserId()); + userGroupMappingDO.setUpdateUserId(currentUser.getUserId()); + userGroupMappingDOList.add(userGroupMappingDO); + } + if (CollectionUtils.isNotEmpty(userGroupMappingDOList)) { + enterpriseUserGroupMappingDAO.batchInsertOrUpdateUserGroupMapping(enterpriseId, userGroupMappingDOList); + } + } + + @Override + public Boolean configUser(String enterpriseId, UserGroupAddRequest userGroupAddRequest, CurrentUser currentUser) { + EnterpriseUserGroupDO userGroupDO = enterpriseUserGroupDAO.getByGroupId(enterpriseId, userGroupAddRequest.getGroupId()); + if (userGroupDO == null) { + throw new ServiceException(ErrorCodeEnum.USER_GROUP_NOT_EXIST); + } + List userIdList = userGroupAddRequest.getUserIdList(); + if(CollectionUtils.isEmpty(userIdList)){ + return Boolean.TRUE; + } + List userGroupMappingDOList = new ArrayList<>(); + for (String userId: userIdList) { + EnterpriseUserGroupMappingDO userGroupMappingDO = new EnterpriseUserGroupMappingDO(); + userGroupMappingDO.setUserId(userId); + userGroupMappingDO.setGroupId(userGroupDO.getGroupId()); + userGroupMappingDO.setCreateUserId(currentUser.getUserId()); + userGroupMappingDO.setUpdateUserId(currentUser.getUserId()); + userGroupMappingDOList.add(userGroupMappingDO); + } + if (CollectionUtils.isNotEmpty(userGroupMappingDOList)) { + enterpriseUserGroupMappingDAO.batchInsertOrUpdateUserGroupMapping(enterpriseId, userGroupMappingDOList); + } + return Boolean.TRUE; + } + + @Override + public Map> getUserGroupMap(String enterpriseId, List userIdList) { + Map> resultMap = Maps.newHashMap(); + if(CollectionUtils.isEmpty(userIdList)){ + return resultMap; + } + List enterpriseUserGroupMappingDOList = enterpriseUserGroupMappingDAO.listByUserIdList(enterpriseId, userIdList); + List allGroupIdList = ListUtils.emptyIfNull(enterpriseUserGroupMappingDOList) + .stream().map(EnterpriseUserGroupMappingDO::getGroupId) + .collect(Collectors.toList()); + List userGroupDOList = enterpriseUserGroupDAO.listByGroupIdList(enterpriseId, allGroupIdList); + //封装 userId-userGroup map,以表示一个用户对应几个分组 + Map> userGroupMap = ListUtils.emptyIfNull(enterpriseUserGroupMappingDOList) + .stream().collect(Collectors.groupingBy(EnterpriseUserGroupMappingDO::getUserId, + Collectors.mapping(EnterpriseUserGroupMappingDO::getGroupId, Collectors.toSet()))); + //获得分组id -分组名称的map + Map groupNameMap = ListUtils.emptyIfNull(userGroupDOList) + .stream() + .filter(data -> StringUtils.isNotBlank(data.getGroupName())) + .collect(Collectors.toMap(EnterpriseUserGroupDO::getGroupId, EnterpriseUserGroupDO::getGroupName, (a, b) -> a)); + userIdList.forEach(userId -> { + Set groupIdList = userGroupMap.get(userId); + if (CollectionUtils.isNotEmpty(groupIdList)) { + List userGroupDTOList = resultMap.get(userId); + if (CollectionUtils.isEmpty(userGroupDTOList)) { + userGroupDTOList = Lists.newArrayList(); + resultMap.put(userId, userGroupDTOList); + } + for (String groupId: groupIdList) { + UserGroupDTO userGroupDTO = new UserGroupDTO(); + userGroupDTO.setGroupId(groupId); + userGroupDTO.setGroupName(groupNameMap.get(groupId)); + userGroupDTOList.add(userGroupDTO); + } + } + }); + return resultMap; + } + + private void fillUserGroupVO(String enterpriseId, EnterpriseUserGroupDO userGroupDO, UserGroupVO userGroupVO) { + List userGroupMappingDOList = enterpriseUserGroupMappingDAO.listByGroupIdList(enterpriseId, Collections.singletonList(userGroupDO.getGroupId())); + if (CollectionUtils.isNotEmpty(userGroupMappingDOList)){ + List configUserIdList = userGroupMappingDOList.stream().map(EnterpriseUserGroupMappingDO::getUserId).collect(Collectors.toList()); + List enterpriseUserDOList = enterpriseUserDAO.selectUsersByUserIds(enterpriseId, configUserIdList); + List configUserList = ListUtils.emptyIfNull(enterpriseUserDOList).stream() + .map(this::translateToUserSimpleDTO) + .collect(Collectors.toList()); + userGroupVO.setConfigUserList(configUserList); + } + if(StringUtils.isNotBlank(userGroupDO.getCommonEditUserids())){ + List commonEditUserIdList = StrUtil.splitTrim(userGroupDO.getCommonEditUserids(), ","); + List enterpriseUserDOList = enterpriseUserDAO.selectUsersByUserIds(enterpriseId, commonEditUserIdList); + List commonEditUserList = ListUtils.emptyIfNull(enterpriseUserDOList).stream() + .map(this::translateToUserSimpleDTO) + .collect(Collectors.toList()); + userGroupVO.setCommonEditUserList(commonEditUserList); + } + + List userIdList = Lists.newArrayList(); + userIdList.add(userGroupDO.getCreateUserId()); + userIdList.add(userGroupDO.getUpdateUserId()); + List userDOList = enterpriseUserDAO.selectUsersByUserIds(enterpriseId, userIdList); + Map userMap = userDOList.stream().collect(Collectors.toMap(EnterpriseUserDO::getUserId, Function.identity())); + EnterpriseUserDO createUser = userMap.get(userGroupDO.getCreateUserId()); + if (createUser != null) { + userGroupVO.setCreateUserName(createUser.getName()); + } + EnterpriseUserDO updateUser = userMap.get(userGroupDO.getUpdateUserId()); + if (updateUser != null) { + userGroupVO.setUpdateUserName(updateUser.getName()); + } + if (CommonConstants.SYSTEM_USER_ID.equals(userGroupDO.getCreateUserId())) { + userGroupVO.setCreateUserName(CommonConstants.SYSTEM_USER_ID); + } + } + + private UserSimpleDTO translateToUserSimpleDTO(EnterpriseUserDO enterpriseUserDO) { + UserSimpleDTO userSimpleDTO = new UserSimpleDTO(); + userSimpleDTO.setUserId(enterpriseUserDO.getUserId()); + userSimpleDTO.setUserName(enterpriseUserDO.getName()); + return userSimpleDTO; + } + + public EnterpriseUserGroupDO translateToUserGroupDO(UserGroupAddRequest request, CurrentUser user) { + EnterpriseUserGroupDO userGroupDO = new EnterpriseUserGroupDO(); + String groupId = StringUtils.isNotBlank(request.getGroupId()) ? request.getGroupId() : UUIDUtils.get32UUID(); + userGroupDO.setGroupId(groupId); + userGroupDO.setGroupName(request.getGroupName()); + if(CollectionUtils.isNotEmpty(request.getCommonEditUserIdList())){ + userGroupDO.setCommonEditUserids(CommonConstants.COMMA + StringUtils.join(request.getCommonEditUserIdList(), CommonConstants.COMMA) + CommonConstants.COMMA); + }else { + userGroupDO.setCommonEditUserids(""); + } + if(StringUtils.isNotBlank(request.getGroupId())){ + userGroupDO.setUpdateTime(new Date()); + userGroupDO.setUpdateUserId(user.getUserId()); + }else { + userGroupDO.setCreateTime(new Date()); + userGroupDO.setCreateUserId(user.getUserId()); + } + return userGroupDO; + } + + + // 校验用户是否有编辑权限 + public Boolean checkUserEditFlag(String eid, EnterpriseUserGroupDO enterpriseUserGroupDO, String userId){ + // 是否管理员 + boolean isAdmin = enterpriseUserRoleDAO.checkIsAdmin(eid, userId); + if(isAdmin || userId.equals(enterpriseUserGroupDO.getCreateUserId()) || (StringUtils.isNotBlank(enterpriseUserGroupDO.getCommonEditUserids()) && enterpriseUserGroupDO.getCommonEditUserids().contains(userId))){ + return true; + } + return false; + } + + +} 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 acdf4705c..501e13fa6 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 @@ -1,17 +1,30 @@ package com.cool.store.service.impl; +import cn.hutool.core.util.StrUtil; import com.cool.store.constants.CommonConstants; import com.cool.store.context.CurrentUser; -import com.cool.store.dao.EnterpriseUserDAO; -import com.cool.store.dao.RegionDAO; -import com.cool.store.dao.UserRegionMappingDAO; -import com.cool.store.entity.EnterpriseUserDO; -import com.cool.store.entity.RegionDO; -import com.cool.store.entity.UserRegionMappingDO; +import com.cool.store.dao.*; +import com.cool.store.dto.auth.AuthRegionStoreDTO; +import com.cool.store.dto.auth.AuthStoreCountDTO; +import com.cool.store.dto.buser.MySubordinatesDTO; +import com.cool.store.dto.buser.SubordinateUserRangeDTO; +import com.cool.store.dto.buser.UserRoleDTO; +import com.cool.store.dto.region.RegionPathDTO; +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.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.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.collections4.SetUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -35,6 +48,14 @@ public class EnterpriseUserServiceImpl implements EnterpriseUserService { private RegionDAO regionDAO; @Resource private EnterpriseUserDAO enterpriseUserDAO; + @Resource + private AuthVisualService authVisualService; + @Resource + private EnterpriseUserRoleDAO enterpriseUserRoleDAO; + @Resource + private EnterpriseUserGroupService enterpriseUserGroupService; + @Resource + private SubordinateMappingDAO subordinateMappingDAO; @Override public void updateUserRegionPathList(String enterpriseId, List userIds) { @@ -91,6 +112,100 @@ public class EnterpriseUserServiceImpl implements EnterpriseUserService { enterpriseUserDAO.batchUpdateDiffUserDiffRegionIds(enterpriseId, enterpriseUserList); } + @Override + public List listUser(String enterpriseId, String userName, String deptId, + String orderBy, String orderRule, + Long roleId, Integer userStatus, Integer pageNum, Integer pageSize, String jobNumber, String regionId, Boolean hasPage) { + if (hasPage){ + PageHelper.startPage(pageNum,pageSize); + } + List enterpriseUserList = new ArrayList<>(); + //企微用户 用户名在数据表中加密,需要再次请求企业端接口根据名称去筛选数据 + if(roleId!=null){ + enterpriseUserList = enterpriseUserDAO.fuzzyUsersByDepartment(enterpriseId, deptId, roleId, orderBy, orderRule, userName, jobNumber, userStatus, null,regionId); + }else { + enterpriseUserList= enterpriseUserDAO.fuzzyUsersByNotRole(enterpriseId, deptId, orderBy, orderRule, userName, jobNumber, userStatus, null,regionId); + } + List resultList = new ArrayList<>(); + if(CollectionUtils.isEmpty(enterpriseUserList)){ + return resultList; + } + resultList = EnterpriseUserPageVO.transUserDOToVO(enterpriseUserList); + //填充角色信息如果存在角色信息 + List userIdList = initUserRole(enterpriseId, resultList); + //根据人员查询该人员所在部门集合 + List userRegionMappingDOS = userRegionMappingDAO.listUserRegionMappingByUserId(enterpriseId, userIdList); + //regionids 集合 + List regionIds = ListUtils.emptyIfNull(userRegionMappingDOS).stream().map(UserRegionMappingDO::getRegionId).distinct().collect(Collectors.toList()); + + List regionDOs = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(regionIds)){ + regionDOs = regionDAO.getRegionByRegionIds(enterpriseId, regionIds); + } + //部门map KV key-部门id value-部门名称 + Map regionMap = ListUtils.emptyIfNull(regionDOs) + .stream() + .filter(a->a.getId()!=null&&a.getName()!=null) + .collect(Collectors.toMap(data->data.getId().toString(), RegionDO::getName, (a, b) -> a)); + //人员所在部门map key-人员id value-部门set集合(set去重) + Map> userRegionMap = ListUtils.emptyIfNull(userRegionMappingDOS) + .stream().filter(a->a.getId()!=null&&a.getRegionId()!=null) + .collect(Collectors.groupingBy(UserRegionMappingDO::getUserId, + Collectors.mapping(UserRegionMappingDO::getRegionId, Collectors.toSet()))); + + //填充门店总数以及权限区域列表 + List authRegionStoreDTOList = authVisualService.authRegionStoreByUserList(enterpriseId, userIdList); + List authStoreCountDTOS = authVisualService.authStoreCount(enterpriseId, userIdList, false); + Map storeCountMap = ListUtils.emptyIfNull(authStoreCountDTOS) + .stream() + .collect(Collectors.toMap(AuthStoreCountDTO::getUserId, data -> data, (a, b) -> a)); + Map authRegionStoreMap = ListUtils.emptyIfNull(authRegionStoreDTOList) + .stream() + .collect(Collectors.toMap(AuthRegionStoreDTO::getUserId, data -> data, (a, b) -> a)); + + Map> userGroupMap = enterpriseUserGroupService.getUserGroupMap(enterpriseId, userIdList); + Map subordinateUserRangeMap = fillUserSubordinateNames(enterpriseId, userIdList); + + resultList.stream() + .forEach(data->{ + if(MapUtils.isNotEmpty(authRegionStoreMap)&&authRegionStoreMap.get(data.getUserId())!=null){ + AuthRegionStoreDTO authRegionStoreDTO = authRegionStoreMap.get(data.getUserId()); + data.setAuthRegionStoreList(authRegionStoreDTO.getAuthRegionStoreUserList()); + } + if(MapUtils.isNotEmpty(storeCountMap)&&storeCountMap.get(data.getUserId())!=null){ + AuthStoreCountDTO authStoreCountDTO = storeCountMap.get(data.getUserId()); + if(authStoreCountDTO.getStoreCount()!=null){ + data.setStoreCount(authStoreCountDTO.getStoreCount()); + }else { + data.setStoreCount(0); + } + } + if(MapUtils.isNotEmpty(userRegionMap)&&MapUtils.isNotEmpty(regionMap)) { + Set regions = userRegionMap.get(data.getUserId()); + String deptNames = SetUtils.emptyIfNull(regions) + .stream() + .map(dept -> regionMap.get(dept.toString())) + .filter(StringUtils::isNotBlank) + .collect(Collectors.joining(CommonConstants.COMMA)); + data.setDepartment(deptNames); + } + //填充用户分组 + data.setUserGroupList(userGroupMap.get(data.getUserId())); + // 填充下属用户 + if (subordinateUserRangeMap.get(data.getUserId()) != null){ + data.setSubordinateUserRange(subordinateUserRangeMap.get(data.getUserId()).getSubordinateUserRange()); + data.setSourceList(subordinateUserRangeMap.get(data.getUserId()).getSourceList()); + data.setMySubordinates(subordinateUserRangeMap.get(data.getUserId()).getMySubordinates()); + } + }); + // 添加至常用联系人 + if (StringUtils.isNotBlank(userName)) { + List userIds = enterpriseUserList.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toList()); + //lruService.putRecentUseUser(enterpriseId, UserHolder.getUser().getUserId(), userIds); + } + return resultList; + } + private void addUserRegionMappingDO(String enterpriseId,String userId,String regionId,CurrentUser currentUser){ UserRegionMappingDO userRegionMappingDO = new UserRegionMappingDO(); userRegionMappingDO.setUserId(userId); @@ -102,4 +217,154 @@ public class EnterpriseUserServiceImpl implements EnterpriseUserService { //将用户添加到未分组 userRegionMappingDAO.batchInsertRegionMapping(enterpriseId, Arrays.asList(userRegionMappingDO)); } + + @Override + public Map fillUserSubordinateNames(String enterpriseId, List userIdList) { + Map subordinateUserRangeMap = Maps.newHashMap(); + if (CollectionUtils.isNotEmpty(userIdList)) { + //查询该用户的下属 + List subordinateMappingDOS = subordinateMappingDAO.selectByUserIds(enterpriseId, userIdList); + + List enterpriseUserDOS = enterpriseUserDAO.selectUsersByUserIds(enterpriseId, userIdList); + Map subordinateRangeMap = ListUtils.emptyIfNull(enterpriseUserDOS).stream().collect(Collectors.toMap(EnterpriseUserDO::getUserId, EnterpriseUserDO::getSubordinateRange)); + + List defineSelectMappingLit = subordinateMappingDOS.stream().filter(x -> SubordinateSourceEnum.SELECT.getCode().equals(x.getSource())).collect(Collectors.toList()); + Map> defineSelectMappingMap = ListUtils.emptyIfNull(defineSelectMappingLit).stream() + .collect(Collectors.groupingBy(SubordinateMappingDO::getUserId)); + userIdList.forEach(userId -> { + SubordinateUserRangeDTO subordinateUserRangeDTO = new SubordinateUserRangeDTO(); + subordinateUserRangeMap.put(userId, subordinateUserRangeDTO); + String subordinateUserRange = subordinateRangeMap.get(userId); + if (StringUtils.isNotBlank(subordinateUserRange)) { + subordinateUserRangeDTO.setSubordinateUserRange(subordinateUserRange); + if (UserSelectRangeEnum.DEFINE.getCode().equals(subordinateUserRange)) { + List myDefineSelectMappingLit = defineSelectMappingMap.get(userId); + List regionIds = ListUtils.emptyIfNull(myDefineSelectMappingLit).stream().filter(x -> StringUtils.isNotBlank(x.getRegionId())) + .map(SubordinateMappingDO::getRegionId).collect(Collectors.toList()); + Map regionMap = new HashMap<>(); + List regionPathByList = regionDAO.getRegionPathByList(enterpriseId, regionIds); + regionMap = regionPathByList.stream().collect(Collectors.toMap(RegionPathDTO::getRegionId, RegionPathDTO::getRegionName)); + + List personalIds = ListUtils.emptyIfNull(myDefineSelectMappingLit).stream().filter(x -> StringUtils.isNotBlank(x.getPersonalId())) + .map(SubordinateMappingDO::getPersonalId).collect(Collectors.toList()); + + List personalList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(personalIds)) { + personalList = enterpriseUserDAO.selectUsersByUserIds(enterpriseId, personalIds); + } + Map personalMap = personalList.stream().collect(Collectors.toMap(EnterpriseUserDO::getUserId, EnterpriseUserDO::getName)); + + List nodeTypeList = new ArrayList<>(); + + if (CollectionUtils.isNotEmpty(myDefineSelectMappingLit)) { + for (SubordinateMappingDO item : myDefineSelectMappingLit) { + MySubordinatesDTO nodeTypeDTO = new MySubordinatesDTO(); + if (StringUtils.isNotBlank(item.getRegionId())) { + String regionName = regionMap.get(item.getRegionId()); + nodeTypeDTO.setNodeType("region"); + nodeTypeDTO.setRegionName(regionName); + nodeTypeDTO.setRegionId(item.getRegionId()); + } + if (StringUtils.isNotBlank(item.getPersonalId())) { + String personalName = personalMap.get(item.getPersonalId()); + nodeTypeDTO.setNodeType("personal"); + nodeTypeDTO.setPersonalName(personalName); + nodeTypeDTO.setPersonalId(item.getPersonalId()); + } + nodeTypeList.add(nodeTypeDTO); + } + } + List sourceList = subordinateMappingDOS.stream().filter(x -> StringUtils.isNotBlank(x.getSource())) + .map(SubordinateMappingDO::getSource).distinct().collect(Collectors.toList()); + subordinateUserRangeDTO.setSourceList(sourceList); + if (CollectionUtils.isEmpty(sourceList)) { + subordinateUserRangeDTO.setSourceList(Collections.singletonList(SubordinateSourceEnum.AUTO.getCode())); + } + subordinateUserRangeDTO.setMySubordinates(nodeTypeList); + } + } + }); + } + return subordinateUserRangeMap; + } + + @Override + public List initUserRole(String enterpriseId, List enterpriseUserList) { + List userIdList = ListUtils.emptyIfNull(enterpriseUserList) + .stream() + .map(EnterpriseUserPageVO::getUserId) + .collect(Collectors.toList()); + + if(CollectionUtils.isNotEmpty(userIdList)){ + List userRoleDTOS = enterpriseUserRoleDAO.getUserAndRolesByUserId(enterpriseId, userIdList); + //封装 userId-userRole map,以表示一个用户对应几个角色 + Map> userRoleDtoMap = new HashMap<>(); + userRoleDTOS.forEach(roleDto -> { + List check = userRoleDtoMap.get(roleDto.getUserId()); + if (check == null) { + List roleDtoList = new ArrayList<>(); + roleDtoList.add(roleDto.getRoleId()); + userRoleDtoMap.put(roleDto.getUserId(), roleDtoList); + } else { + check.add(roleDto.getRoleId()); + userRoleDtoMap.put(roleDto.getUserId(), check); + } + }); + //获得角色id -角色名称的map + Map roleNameMap = ListUtils.emptyIfNull(userRoleDTOS) + .stream() + .filter(data -> StringUtils.isNotBlank(data.getRoleName())) + .collect(Collectors.toMap(UserRoleDTO::getRoleId, UserRoleDTO::getRoleName, (a, b) -> a)); + enterpriseUserList.forEach(user -> { + List roleIdList = userRoleDtoMap.get(user.getUserId()); + if (roleIdList != null && roleIdList.size() != 0) { + String roleName = roleIdList.stream() + .filter(data -> roleNameMap.get(data) != null) + .map(role -> roleNameMap.get(role)) + .collect(Collectors.joining(",")); + user.setRoleName(roleName); + } + }); + } + return userIdList; + } + + @Override + public Map getUserRegion(String enterpriseId, List userIdList) { + Map resultMap = Maps.newHashMap(); + //根据人员查询该人员所在部门集合 + List userRegionMappingDOS = userRegionMappingDAO.listUserRegionMappingByUserId(enterpriseId, userIdList); + //regionids 集合 + List regionIds = ListUtils.emptyIfNull(userRegionMappingDOS).stream() + .map(UserRegionMappingDO::getRegionId).distinct().collect(Collectors.toList()); + + List regionDOs = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(regionIds)){ + regionDOs = regionDAO.getRegionByRegionIds(enterpriseId, regionIds); + } + //部门map KV key-部门id value-部门名称 + Map regionMap = ListUtils.emptyIfNull(regionDOs) + .stream() + .filter(a->a.getId()!=null&&a.getName()!=null) + .collect(Collectors.toMap(data->data.getId().toString(), RegionDO::getName, (a, b) -> a)); + //人员所在部门map key-人员id value-部门set集合(set去重) + Map> userRegionMap = ListUtils.emptyIfNull(userRegionMappingDOS) + .stream().filter(a->a.getId()!=null&&a.getRegionId()!=null) + .collect(Collectors.groupingBy(UserRegionMappingDO::getUserId, + Collectors.mapping(UserRegionMappingDO::getRegionId, Collectors.toSet()))); + userIdList.stream() + .forEach(userId->{ + if(MapUtils.isNotEmpty(userRegionMap)&&MapUtils.isNotEmpty(regionMap)) { + Set regions = userRegionMap.get(userId); + + String deptNames = SetUtils.emptyIfNull(regions) + .stream() + .map(dept -> regionMap.get(dept.toString())) + .filter(StrUtil::isNotBlank) + .collect(Collectors.joining(CommonConstants.COMMA)); + resultMap.put(userId, deptNames); + } + }); + return resultMap; + } } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SubordinateMappingServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SubordinateMappingServiceImpl.java new file mode 100644 index 000000000..2bf6bd19e --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SubordinateMappingServiceImpl.java @@ -0,0 +1,164 @@ +package com.cool.store.service.impl; + +import com.cool.store.constants.CommonConstants; +import com.cool.store.dao.EnterpriseUserDAO; +import com.cool.store.dao.EnterpriseUserRoleDAO; +import com.cool.store.dao.SubordinateMappingDAO; +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.entity.SubordinateMappingDO; +import com.cool.store.entity.UserAuthMappingDO; +import com.cool.store.enums.SubordinateSourceEnum; +import com.cool.store.enums.UserSelectRangeEnum; +import com.cool.store.mapper.EnterpriseUserMapper; +import com.cool.store.mapper.UserAuthMappingMapper; +import com.cool.store.service.EnterpriseUserService; +import com.cool.store.service.SubordinateMappingService; +import com.google.common.collect.Lists; +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.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author wxp + * @Date 2023/1/6 11:18 + * @Version 1.0 + */ +@Service +@Slf4j +public class SubordinateMappingServiceImpl implements SubordinateMappingService { + + @Resource + private SubordinateMappingDAO subordinateMappingDAO; + @Autowired + private EnterpriseUserService enterpriseUserService; + @Resource + private EnterpriseUserMapper enterpriseUserMapper; + @Resource + private EnterpriseUserDAO enterpriseUserDAO; + @Resource + private EnterpriseUserRoleDAO enterpriseUserRoleDAO; + @Resource + private UserAuthMappingMapper userAuthMappingMapper; + + /** + * 判断用户是否管辖全部用户 + * @param enterpriseId + * @param currentUserId + * @return + */ + @Override + public Boolean checkHaveAllSubordinateUser(String enterpriseId, String currentUserId) { + if(CommonConstants.SYSTEM_USER_ID.equals(currentUserId)){ + return true; + } + // 判断是否是管理员 + boolean isAdmin = enterpriseUserRoleDAO.checkIsAdmin(enterpriseId, currentUserId); + EnterpriseUserDO user = enterpriseUserDAO.getUserInfoById(enterpriseId, currentUserId); + //失效人员没有权限 + if(user == null){ + return false; + } + if(isAdmin || UserSelectRangeEnum.ALL.getCode().equals(user.getSubordinateRange())){ + return true; + } + return false; + } + + /** + * 获取管辖用户 + * @param enterpriseId + * @param currentUserId + * @return + */ + @Override + public List getSubordinateUserIdList(String enterpriseId, String currentUserId,Boolean addCurrentFlag) { + + List allUserIdList = Lists.newArrayList(); + if (addCurrentFlag){ + allUserIdList.add(currentUserId); + } + EnterpriseUserDO user = enterpriseUserDAO.getUserInfoById(enterpriseId, currentUserId); + // 查询管辖用户 + List subordinateMappingList = subordinateMappingDAO.selectByUserIds(enterpriseId, Collections.singletonList(currentUserId)); + // 如果用户关联用户配置是自定义,但是没有具体数据,默认关联区域门店区域权限下的人 + if(user != null && UserSelectRangeEnum.DEFINE.getCode().equals(user.getSubordinateRange()) && CollectionUtils.isEmpty(subordinateMappingList)){ + subordinateMappingList = Lists.newArrayList(); + SubordinateMappingDO subordinateMappingDO = fillDefaultAutoSubordinate(currentUserId, UserSelectRangeEnum.DEFINE.getCode(), SubordinateSourceEnum.AUTO.getCode()); + subordinateMappingList.add(subordinateMappingDO); + subordinateMappingDAO.batchInsertSubordinateMapping(enterpriseId, subordinateMappingList); + } + + List sourceList = ListUtils.emptyIfNull(subordinateMappingList).stream().filter(x -> StringUtils.isNotBlank(x.getSource())) + .map(SubordinateMappingDO::getSource).distinct().collect(Collectors.toList()); + + //自动关联单独查询 过滤自动关联 + subordinateMappingList = ListUtils.emptyIfNull(subordinateMappingList).stream().filter(o -> !SubordinateSourceEnum.AUTO.getCode().equals(o.getSource())).collect(Collectors.toList()); + + List regionIds = ListUtils.emptyIfNull(subordinateMappingList).stream().filter(x -> StringUtils.isNotBlank(x.getRegionId())) + .map(SubordinateMappingDO::getRegionId).collect(Collectors.toList()); + List personalIds = ListUtils.emptyIfNull(subordinateMappingList).stream().filter(x -> StringUtils.isNotBlank(x.getPersonalId())) + .map(SubordinateMappingDO::getPersonalId).collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(personalIds)) { + allUserIdList.addAll(personalIds); + } + + if(CollectionUtils.isNotEmpty(sourceList) && sourceList.contains(SubordinateSourceEnum.AUTO.getCode())) { + List userAuthList = userAuthMappingMapper.listUserAuthMappingByUserId(enterpriseId, currentUserId); + List authRegionIdList = ListUtils.emptyIfNull(userAuthList) + .stream().map(UserAuthMappingDO::getMappingId) + .collect(Collectors.toList()); + regionIds.addAll(authRegionIdList); + } + if(CollectionUtils.isNotEmpty(regionIds)) { + List enterpriseUserDOList = enterpriseUserMapper.listByRegionIdList(enterpriseId, regionIds); + if (CollectionUtils.isNotEmpty(enterpriseUserDOList)) { + List enterpriseUserIds = enterpriseUserDOList.stream() + .map(EnterpriseUserDO::getUserId) + .collect(Collectors.toList()); + allUserIdList.addAll(enterpriseUserIds); + } + } + allUserIdList = allUserIdList.stream().distinct().collect(Collectors.toList()); + return allUserIdList; + } + + /** + * 保留管辖用户 userId管辖用户范围 + * @param enterpriseId + * @param currentUserId + * @param userIdList + * @return + */ + @Override + public List retainSubordinateUserIdList(String enterpriseId, String currentUserId, List userIdList,Boolean addCurrentFlag) { + Boolean flag = this.checkHaveAllSubordinateUser(enterpriseId, currentUserId); + if(flag){ + return userIdList; + } + List subordinateUserIdList = getSubordinateUserIdList(enterpriseId, currentUserId,addCurrentFlag); + userIdList.retainAll(subordinateUserIdList); + return userIdList; + } + + + private SubordinateMappingDO fillDefaultAutoSubordinate(String userId, String userRange, String source) { + SubordinateMappingDO subordinateMappingDO = new SubordinateMappingDO(); + subordinateMappingDO.setUserId(userId); + subordinateMappingDO.setRegionId(CommonConstants.ZERO_STR); + subordinateMappingDO.setCreateId(CommonConstants.SYSTEM_USER_ID); + subordinateMappingDO.setUpdateId(CommonConstants.SYSTEM_USER_ID); + subordinateMappingDO.setType(CommonConstants.ZERO); + subordinateMappingDO.setUserRange(userRange); + subordinateMappingDO.setSource(source); + return subordinateMappingDO; + } + +} diff --git a/coolstore-partner-webb/coolstore-partner-webb.iml b/coolstore-partner-webb/coolstore-partner-webb.iml index 6dda56531..27b866b75 100644 --- a/coolstore-partner-webb/coolstore-partner-webb.iml +++ b/coolstore-partner-webb/coolstore-partner-webb.iml @@ -18,7 +18,6 @@ - @@ -30,9 +29,6 @@ - - - @@ -85,6 +81,13 @@ + + + + + + + @@ -96,8 +99,6 @@ - - @@ -115,8 +116,6 @@ - - diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/EnterpriseUserController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/EnterpriseUserController.java new file mode 100644 index 000000000..f38771634 --- /dev/null +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/EnterpriseUserController.java @@ -0,0 +1,53 @@ +package com.cool.store.controller; + +import com.cool.store.dto.enterprise.EnterpriseUserDTO; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.EnterpriseUserService; +import com.cool.store.utils.DataSourceHelper; +import com.cool.store.vo.buser.EnterpriseUserPageVO; +import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: EnterpriseUserController + * @Description: + * @date 2023-05-30 17:20 + */ +@RestController +@RequestMapping({"/enterprises/{enterprise-id}/users"}) +@Slf4j +public class EnterpriseUserController { + + @Resource + public EnterpriseUserService enterpriseUserService; + + @GetMapping(path = "/dept/userList") + public ResponseResult> getUserList(@PathVariable(value = "enterprise-id", required = true) String eid, + @RequestParam(name = "user_name", required = false) String userName, + @RequestParam(name = "dept_id", required = false) String deptId, + @RequestParam(name = "role_id", required = false) Long roleId, + @RequestParam(name = "order_by", required = false) String orderBy, + @RequestParam(name = "order_rule", required = false, defaultValue = "asc") String orderRule, + @RequestParam(name = "user_status", required = false) Integer userStatus, + @RequestParam(name = "page_num", required = false, defaultValue = "1") Integer pageNum, + @RequestParam(name = "page_size", required = false, defaultValue = "10") Integer pageSize, + @RequestParam(name = "job_number", required = false) String jobNumber, + @RequestParam(name = "region_id", required = false) String regionId, + @RequestParam(name = "has_page", required = false,defaultValue = "true") Boolean hasPage) { + DataSourceHelper.changeToMy(); + List deptUserList = enterpriseUserService.listUser(eid, userName, deptId, orderBy, orderRule, roleId, userStatus, pageNum, pageSize, jobNumber,regionId,hasPage); + if(CollectionUtils.isNotEmpty(deptUserList)){ + return ResponseResult.success(new PageInfo<>(deptUserList)); + }else { + return ResponseResult.success(new PageInfo<>()); + } + } + +} diff --git a/coolstore-partner-webc/coolstore-partner-webc.iml b/coolstore-partner-webc/coolstore-partner-webc.iml index c63b946ff..852ec82b1 100644 --- a/coolstore-partner-webc/coolstore-partner-webc.iml +++ b/coolstore-partner-webc/coolstore-partner-webc.iml @@ -18,7 +18,6 @@ - @@ -30,9 +29,6 @@ - - - @@ -85,6 +81,11 @@ + + + + + @@ -102,8 +103,6 @@ - - diff --git a/pom.xml b/pom.xml index e67c0a65f..06633e851 100644 --- a/pom.xml +++ b/pom.xml @@ -136,11 +136,6 @@ hutool-all 5.0.7 - - com.coolstore - coolstore-base - 1.5.3 - com.aliyun tea-openapi