diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..0170c3d6e --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# Created by .ignore support plugin (hsz.mobi) +### Java template +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.war +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +.idea +*.iml +target +/.idea/ diff --git a/.m2/settings.xml b/.m2/settings.xml new file mode 100644 index 000000000..027ac8221 --- /dev/null +++ b/.m2/settings.xml @@ -0,0 +1,26 @@ + + + + + nexus + developer + 123456 + + + + + alimaven + aliyun maven + http://maven.aliyun.com/nexus/content/groups/public/ + central + + + nexus + collcollege + http://nexus.coolcollege.cn/repository/maven-public/ + central + + + \ No newline at end of file diff --git a/README.md b/README.md index fda606505..dce7dc15e 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# custom_xfsg +# coolstore-partner-manage diff --git a/coolstore-partner-common/pom.xml b/coolstore-partner-common/pom.xml new file mode 100644 index 000000000..a6081765b --- /dev/null +++ b/coolstore-partner-common/pom.xml @@ -0,0 +1,120 @@ + + + + coolstore-partner-manage + com.coolstore + 1.0.0 + + 4.0.0 + + coolstore-partner-common + + + 8 + 8 + + + + + org.apache.commons + commons-lang3 + + + org.projectlombok + lombok + + + com.alibaba + fastjson + + + org.apache.commons + commons-collections4 + + + org.apache.commons + commons-pool2 + + + redis.clients + jedis + + + org.apache.tika + tika-core + 1.9 + + + xerces + xercesImpl + + + org.slf4j + slf4j-api + + + org.springframework.boot + spring-boot-starter-web + + + cn.hutool + hutool-all + + + com.github.pagehelper + pagehelper-spring-boot-starter + + + com.google.guava + guava + + + commons-codec + commons-codec + 1.11 + + + com.aliyun.openservices + ons-client + + + com.aliyun + ons20190214 + + + com.aliyun + tea-openapi + + + org.springframework.boot + spring-boot-starter-data-redis + + + + com.github.tencentyun + tls-sig-api-v2 + 2.0 + + + + com.github.librepdf + openpdf + 1.3.30 + + + + org.icepdf.os + icepdf-core + 6.2.2 + + + javax.media + jai_core + + + + + + \ No newline at end of file diff --git a/coolstore-partner-common/src/main/java/com/cool/store/annotation/Excel.java b/coolstore-partner-common/src/main/java/com/cool/store/annotation/Excel.java new file mode 100644 index 000000000..1b8d4970a --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/annotation/Excel.java @@ -0,0 +1,169 @@ +package com.cool.store.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.math.BigDecimal; + +/** + * 自定义导出Excel数据注解 + * + * @author ruoyi + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Excel +{ + /** + * 导出时在excel中排序 + */ + int sort() default Integer.MAX_VALUE; + + /** + * 导出到Excel中的名字. + */ + String name() default ""; + + /** + * 日期格式, 如: yyyy-MM-dd + */ + String dateFormat() default ""; + + /** + * 读取内容转表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; + + /** + * 分隔符,读取字符串组内容 + */ + String separator() default ","; + + /** + * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化) + */ + int scale() default -1; + + /** + * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN + */ + int roundingMode() default BigDecimal.ROUND_HALF_EVEN; + + /** + * 导出类型(0数字 1字符串) + */ + ColumnType cellType() default ColumnType.STRING; + + /** + * 导出时在excel中每个列的高度 单位为字符 + */ + double height() default 14; + + /** + * 导出时在excel中每个列的宽 单位为字符 + */ + double width() default 16; + + /** + * 文字后缀,如% 90 变成90% + */ + String suffix() default ""; + + /** + * 当值为空时,字段的默认值 + */ + String defaultValue() default ""; + + /** + * 提示信息 + */ + String prompt() default ""; + + /** + * 设置只能选择不能输入的列内容. + */ + String[] combo() default {}; + + /** + * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写. + */ + boolean isExport() default true; + + /** + * 另一个类中的属性名称,支持多级获取,以小数点隔开 + */ + String targetAttr() default ""; + + /** + * 是否自动统计数据,在最后追加一行统计数据总和 + */ + boolean isStatistics() default false; + /** + * 列颜色(列头与列内容) IndexedColors.SKY_BLUE.getIndex() + */ + short columnsColor() default 0; + + /** + * 须比较列 注解所在列顺序与比较列属性的值进行比较 + */ + String compareColName() default ""; + /** + * 导出错误信息 + */ + String compareExportInfo() default ""; + /** + * 字段类型(0:导出导入;1:仅导出;2:仅导入) + */ + Type type() default Type.ALL; + + enum Type + { + /** + * 导出导入 + */ + ALL(0), + /** + * 仅导出 + */ + EXPORT(1), + /** + * 仅导入 + */ + IMPORT(2); + private final int value; + + Type(int value) + { + this.value = value; + } + + public int value() + { + return this.value; + } + } + + enum ColumnType + { + /** + * 数字 + */ + NUMERIC(0), + /** + * 字符串 + */ + STRING(1); + private final int value; + + ColumnType(int value) + { + this.value = value; + } + + public int value() + { + return this.value; + } + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/annotation/Excels.java b/coolstore-partner-common/src/main/java/com/cool/store/annotation/Excels.java new file mode 100644 index 000000000..a1c7c6e0d --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/annotation/Excels.java @@ -0,0 +1,18 @@ +package com.cool.store.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Excel注解集 + * + * @author ruoyi + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Excels +{ + Excel[] value(); +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/common/PageBasicInfo.java b/coolstore-partner-common/src/main/java/com/cool/store/common/PageBasicInfo.java new file mode 100644 index 000000000..97e5a9e1a --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/common/PageBasicInfo.java @@ -0,0 +1,14 @@ +package com.cool.store.common; + +import lombok.Data; + +@Data +public class PageBasicInfo { + + //页码 + private Integer pageNum; + + //分页大小 + private Integer pageSize; + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java new file mode 100644 index 000000000..d38ff3fe9 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java @@ -0,0 +1,189 @@ +package com.cool.store.constants; + +/** + * @author zhangchenbiao + * @FileName: CommonConstatns + * @Description: + * @date 2023-05-18 14:47 + */ +public class CommonConstants { + + public static final String REQUEST_ID = "requestId"; + + public static final String MESSAGE_ID = "messageId"; + + public static final String ACCESS_TOKEN_KEY = "access_token:{0}"; + + public static final String REFRESH_TOKEN_KEY = "refresh_token"; + + public static final String DEFAULT_AVATAR = "DefaultAvatar"; + + public static final int ACCESS_TOKEN_EXPIRE = 14400; + + public static final int THREE_DAY_SECONDS = 60 * 60 * 24 * 3; + + public static final int NORMAL_LOCK_TIMES = 60 * 1000; + + public static final int AN_HOUR_SECONDS = 3600; + + /** + * 跟进任务通知缓存时间 1小时 + */ + public static final int FOLLOW_TASK_NOTICE_LOCK_TIMES = 60 * 60 * 1000; + + public static final int ONE_DAY_SECONDS = 24 * 60 * 60; + + /** + * 系统用户id + */ + public static final String SYSTEM_USER_ID = "system"; + public static final String COMMA = ","; + public static final String MOSAICS = "#"; + + public static final String WX_APP_SECRET_KEY = "wx_app_secret_key:{0}"; + public static final String MINI_PROGRAM_SESSION_KEY = "mini_program_session_key:{0}:{1}"; + + public static final String ROOT_DEPT_ID_STR = "1"; + + public static final Integer DEAL_RECORD_MAX_SIZE = 1000; + + /** + * 未分组区域id + */ + public static final Long UNGROUPED_DEPT_ID = -2L; + + /** + * 未分组区域名称 + */ + public static final String UNGROUPED_DEPT_NAME = "默认分组"; + + /** + * 拼接符 [ + */ + public static final String SQUAREBRACKETSLEFT = "["; + + /** + * 拼接符 ] + */ + public static final String SQUAREBRACKETSRIGHT = "]"; + + public static final String PATH_SPILT = "/"; + public static final String PATH_BAR = "-"; + public static final String COLON = ":"; + public static final String ROOT_REGION_PATH = "/1/"; + + /** + * rocketmq 消息最大重试次数 + */ + public static final String MaxReconsumeTimes = "2"; + + public static final String ZERO_STR = "0"; + public static final String DELETE_DEPT_ID = "-1"; + public static final String AI_USER_ID = "a100000001"; + + public static final long ZERO_LONG = 0L; + + public static final int MINUS_ONE = -1; + public static final int ZERO = 0; + public static final int ONE = 1; + public static final int TWO = 2; + public static final int THREE = 3; + public static final int FOUR = 4; + public static final int FIVE = 5; + public static final int SIX = 6; + public static final int SEVEN = 7; + public static final int EIGHT = 8; + public static final int NINE = 9; + public static final int TEN = 10; + public static final int TWENTY = 20; + public static final int THIRTY = 30; + public static final int FORTY = 40; + public static final int FIFTY = 50; + public static final int SIXTY = 60; + public static final int SEVENTY = 70; + public static final int EIGHTY = 80; + public static final int NINETY = 90; + public static final int HUNDRED = 100; + public static final int FIVE_HUNDRED = 100; + public static final int ONE_THOUSAND = 1000; + public static final int FIFTY_FIVE = 55; + public static final int SIXTY_FIVE = 65; + public static final int MIN_CODE = 10000000; + public static final int MAX_CODE = 89999999; + + + public static final String ONE_STR = "1"; + public static final String TWO_STR = "2"; + public static final String THREE_STR = "3"; + public static final String FOUR_STR = "4"; + public static final String FIVE_STR = "5"; + public static final String SIX_STR = "6"; + public static final String SEVEN_STR = "7"; + public static final String EIGHT_STR = "8"; + public static final String NINE_STR = "9"; + public static final String TEN_STR = "10"; + + public static final String FOLLOW = "follow"; + public static final String PENDING = "pending"; + + + public static final String CLOSE = "close"; + public static final String OPEN = "open"; + + + public static final String ALLOCATION = "allocation"; + + public static final String TRANSFER = "transfer"; + + // 短信模版-意向申请审批通过 + public static final String SMS_TEMPLATE_CODE_INTENT = "SMS_461990823"; + // 短信模版-资质审核通过 + public static final String SMS_TEMPLATE_CODE_VERIFY = "SMS_461980876"; + + public static final String DAY_END_TIME_SUFFIX = " 23:59:59"; + + public static final String DAY_START_TIME_SUFFIX = " 00:00:00"; + + public static final String FOLLOW_TASK_NOTICE_KEY = "follow_task_notice:{0}:{1}"; + + public static final Long LONG_ONE = 1L; + // 线索选择的意向区域没有绑定战区,线索分配给【拓展经理胡德龙】 + public static final String DEAULT_INVESTMENT_JOBNUMBER_ONLINE = "17021329"; + public static final String DEAULT_INVESTMENT_JOBNUMBER_TEST = "23483622251259165"; + public static final String DEAULT_SELECT_SITE_MANAGER_ONLINE = "09080211"; + public static final String DEAULT_SELECT_SITE_MANAGER_TEST = "23483622251259165"; + // 【铺位1】所属战区没有战区经理、营运经理和大区经理,开店负责人展示【王磊】 + public static final String DEAULT_SHOP_MANAGER_USER_ID_ONLINE = "19060164"; + public static final String DEAULT_SHOP_MANAGER_USER_ID_TEST = "23483622251259165"; + public static final int MAX_LENGTH_ONE_HUNDRED = 100; + + public static final String YUN_XUE_TANG_SUC_CODE = "10000"; + //鲜丰 + //设计阶段+施工阶段 + public static final String CONSTRUCTION_PHASE = "施工阶段"; + public static final String MEASURING_THE_ROOM = "量房"; + public static final String CONSTRUCTION_DRAWING = "施工图+预算"; + public static final String FLOOR_PLAN = "平面图+门头效果图"; + public static final String BUDGET_BOOK = "工程预算"; + public static final String APPROACH="进场"; + public static final String ONE_DAY="第一天-进场拆除、基础材料下单、物料设备下单"; + public static final String TWO_DAY="第二天-水电预埋、地砖铺贴"; + public static final String THREE_DAY="第三天-橱窗隔断、木工包柱、电工布线"; + public static final String FOUR_DAY="第四天-护墙板安装、空调安装"; + public static final String FIVE_DAY="第五天-吊顶隔断、木工铝塑板"; + public static final String SIX_DAY="第六天-灯具安装、室内广告安装、冷柜安装、道具卸货"; + public static final String SEVEN_DAY="第七天-道具安装、室外招牌安装"; + public static final String EIGHT_DAY="第八天-卫生保洁、网络及收银设备安装、撤场交接"; + public static final String WITHDRAWAL="撤场"; + public static final String TRANSCODE_VIDEO = "mp4"; + public static final String PRODUCT_REMIND = "product_remind"; + + /** + * 返回成功描述 + */ + public static final String SUCCESS_STR = "success"; + + public static final String HD_ENV = "hd"; + public static final String ONLINE_ENV = "online"; + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/ExcelErrorConstants.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/ExcelErrorConstants.java new file mode 100644 index 000000000..f461fb4e0 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/ExcelErrorConstants.java @@ -0,0 +1,34 @@ +package com.cool.store.constants; + +/** + * hxd + */ +public class ExcelErrorConstants { + + public static final String NAME_LOSE = "姓名缺失"; + + public static final String NAME_OVER_LENGTH = "姓名过长"; + + public static final String MOBILE_LOSE= "手机号缺失"; + + public static final String MOBILE_ERROR= "手机号有误"; + + public static final String MOBILE_EXIST= "手机号已存在"; + + public static final String LIVE_AREA_LOSE = "常驻区域缺失"; + + public static final String LIVE_AREA_FORMAT_ERROR = "常驻区域格式错误"; + + public static final String WANT_SHOP_AREA_LOSE = "意向区域缺失"; + + public static final String WANT_SHOP_AREA_FORMAT_ERROR = "意向区域格式错误"; + + public static final String ACCEPT_ADJUST_TYPE_LOSE = "是否接受调剂缺失"; + + public static final String INVESTMENT_MANAGER_LOSE = "未找到此招商经理,请核实"; + + public static final String COUNT_MORE = "每次数据最多导入500条,请分批上传"; + + public static final String MOBILE_REPEAT = "手机号重复"; + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/MessageConstants.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/MessageConstants.java new file mode 100644 index 000000000..4e5e4287d --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/MessageConstants.java @@ -0,0 +1,17 @@ +package com.cool.store.constants; + +/** + * @author zhangchenbiao + * @FileName: MessageConstants + * @Description:通知消息常量 + * @date 2023-08-14 14:41 + */ +public class MessageConstants { + + public static final String FOLLOW_TASK_MESSAGE_TITLE = "线索跟进任务"; + public static final String FOLLOW_TASK_MESSAGE_CONTENT = "您有一个线索跟进任务将于{0}截止 ,线索信息{1}手机号{2},请及时跟进"; + public static final String FOLLOW_TASK_MESSAGE_CONTENT_1 = "您有{0}个线索跟进任务将于今日截止,及{1}个跟进任务已逾期,请及时跟进"; + public static final String FOLLOW_TASK_MESSAGE_CONTENT_2 = "您有{0}个跟进任务已逾期,请及时跟进"; + public static final String FOLLOW_TASK_MESSAGE_CONTENT_3 = "您有{0}个线索跟进任务将于今日截止,请及时跟进"; + +} 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..e72023d47 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java @@ -0,0 +1,280 @@ +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}"; + + /** + * 冷静期内是否首次登录 冷静期首次登录 是-true 否-false + */ + public static final String COOLINGPERIOD_FIRSTLOGIN_KEY = "coolingPeriodFirstLoginCache:{0}"; + + /** + * 七天 + */ + 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 PARTNER_BASEINFO_CACHE_KEY = "partnerBaseInfoCache:{0}:{1}"; + + public static final String PARTNER_CLERKINFO_CACHE_KEY = "partnerClerkInfoCache:{0}:{1}"; + + public static final String PARTNER_INTENTINFO_CACHE_KEY = "partnerIntentInfoCache:{0}:{1}"; + + public static final String PARTNER_WANTSHOPINFO_CACHE_KEY = "partnerWantShopInfoCache:{0}:{1}"; + + public static final String PARTNER_INDUSTRYCOGNITIONINFO_CACHE_KEY = "partnerIndustryCognitionInfoCache:{0}:{1}"; + + + public static final String DEVICE_OPEN_TOKEN = "device_open_token:{0}:{1}:{2}"; + + public static final String PHONE_NUMBER= "phone_number_"; + + /** + * MDM 省市区数据缓存 + */ + + /** + * 省级数据缓存 + */ + public static final String MDM_AREA_PROVINCE = "mdm:area:province"; + + /** + * 其他区域数据缓存 + */ + public static final String MDM_AREA_OTHERS = "mdm:area:others:{0}"; + + /** + * MDM 所属大区缓存 + */ + public static final String MDM_BELONG_REGION = "mdm:belongRegion"; + + /** + * MDM 业务区域缓存 + */ + public static final String MDM_BUSINESS_REGION = "mdm:businessRegion"; + + /** + * 动态标题 + */ + public static final String CONTENT_TITLES = "content:titles"; + + /** + * 用户预约面试锁 + */ + public static final String PARTNER_APPOINTMENT_LOCK = "partner:appointment:lock:{0}"; + + /** + * 用户意向区域key + */ + public static final String USER_WANT_AREA_CACHE = "user_want_area_cache_"; + + /** + * 招商经理轮询key + */ + public static final String INVESTMENT_MANAGER_CACHE = "investment_manager_cache_"; + + /** + * 招商经理轮询key + */ + public static final String YUN_XUE_TANG_ACCESS_TOKEN = "yun_xue_tang_access_token_"; +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/AIEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/AIEnum.java new file mode 100644 index 000000000..e977c71e2 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/AIEnum.java @@ -0,0 +1,26 @@ +package com.cool.store.enums; + +public enum AIEnum { + + AI_NAME("AI用户"), + AI_USERID("a100000001"), + AI_ID("a100000000"), + AI_DEPARTMENT("[1]"), + AI_ROLES("20000000"), + AI_UUID("a100000002"), + AI_MOBILE("AIAdminUser"); + + + + private void setCode(String code) { + this.code = code; + } + + private String code; + AIEnum(String code){ + this.code=code; + } + public String getCode() { + return code; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/AcceptAdjustTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/AcceptAdjustTypeEnum.java new file mode 100644 index 000000000..8a706971e --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/AcceptAdjustTypeEnum.java @@ -0,0 +1,63 @@ +package com.cool.store.enums; + +/** + * @Author suzhuhong + * @Date 2023/6/19 19:48 + * @Version 1.0 + */ +public enum AcceptAdjustTypeEnum { + + NOT_ACCEPT(0,"不接受调剂"), + NATIONAL_ADJUSTMENT(1,"全国调剂"), + PROVINCIAL_ADJUSTMENT(2,"省内调剂"), + LOCAL_ADJUSTMENT(3,"市内调剂"), + + + + + ; + + private Integer code; + + private String message; + + AcceptAdjustTypeEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } + + + public String getMessage(String enums) { + return AcceptAdjustTypeEnum.valueOf(enums).getMessage(); + } + + + public Integer getCode(String enums) { + return AcceptAdjustTypeEnum.valueOf(enums).getCode(); + } + + + /** + * 根据name查找 + * @param message 枚举message + * @return 枚举对象 + */ + public static Integer findEnumByName(String message) { + for (AcceptAdjustTypeEnum statusEnum : AcceptAdjustTypeEnum.values()) { + if (statusEnum.getMessage().equals(message)) { + //如果需要直接返回code则更改返回类型为String,return statusEnum.code; + return statusEnum.getCode(); + } + } + return null; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ApiErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ApiErrorCodeEnum.java new file mode 100644 index 000000000..4eda76877 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ApiErrorCodeEnum.java @@ -0,0 +1,41 @@ +package com.cool.store.enums; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public enum ApiErrorCodeEnum { + LINE_INFO("lineInfoDO","线索信息缺失"), + FRANCHISE_FEE("franchiseFeeDO","缴费信息缺失"), + SIGNING_BASE_INFO("signingBaseInfoDO","签约信息缺失"), + LINE_PAY("linePayDO","缴款信息缺失"), + POINT_INFO("pointInfoDO","铺位信息缺失"), + SYSTEM_BUILDING_SHOP("systemBuildingShopDO","建店数据缺失"), + LICENSE_TRANSACT("licenseTransactDO","证照办理数据缺失"), + THIRD_DEPARTMENT("thirdDepartmentDO","三方部门表缺失"), + ; + + + private String errorMessage; + private String code; + + ApiErrorCodeEnum(String code, String errorMessage) { + this.code = code; + this.errorMessage = errorMessage; + } + + public String getErrorMessage() { + return errorMessage; + } + + public String getCode() { + return code; + } + protected static final Map map = Arrays.stream(values()).collect( + Collectors.toMap(ApiErrorCodeEnum::getCode, Function.identity(), (a, b)->a)); + + public static ApiErrorCodeEnum getByCode(String code) { + return map.get(code); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/AppointmentStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/AppointmentStatusEnum.java new file mode 100644 index 000000000..852787e37 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/AppointmentStatusEnum.java @@ -0,0 +1,33 @@ +package com.cool.store.enums; + +/** + * @author zhangchenbiao + * @FileName: AppointmentStatusEnum + * @Description:预约状态 + * @date 2024-03-15 16:15 + */ +public enum AppointmentStatusEnum { + + //状态 0:不可预约 1:已被预约 2:可预约 + NOT_APPOINTMENT(0, "不可预约"), + APPOINTMENT(1, "已被预约"), + CAN_APPOINTMENT(2, "可预约"), + ; + private Integer code; + private String message; + + + AppointmentStatusEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/AreaStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/AreaStatusEnum.java new file mode 100644 index 000000000..360f94192 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/AreaStatusEnum.java @@ -0,0 +1,35 @@ +package com.cool.store.enums; + +/** + * @Author suzhuhong + * @Date 2023/6/19 19:44 + * @Version 1.0 + */ +public enum AreaStatusEnum { + + + OPEN("open","开放"), + KEY_OPEN("keyOpen","重点开放"), + + + + ; + + private String code; + + private String message; + + AreaStatusEnum(String code, String message) { + this.code = code; + this.message = message; + } + + + public String getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/AssessmentTemplateType.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/AssessmentTemplateType.java new file mode 100644 index 000000000..298c9e4ef --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/AssessmentTemplateType.java @@ -0,0 +1,40 @@ +package com.cool.store.enums; + +/** + * @author byd + * @date 2024-04-30 15:54 + */ +public enum AssessmentTemplateType { + + TRAINER(0, "教练员"), + STORE_MANAGER(1, "店长"), + CLERK(2, "店员"), + TRIPARTITE_ACCEPTANCE(3, "三方验收"), + ; + + private Integer code; + + private String name; + + private AssessmentTemplateType(Integer code, String name) { + this.code = code; + this.name = name; + } + + public Integer getCode() { + return code; + } + + public String getName() { + return name; + } + + public static AssessmentTemplateType getByCode(Integer code) { + for (AssessmentTemplateType auditStatusEnum : AssessmentTemplateType.values()) { + if (auditStatusEnum.getCode().equals(code)) { + return auditStatusEnum; + } + } + return null; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditEnum.java new file mode 100644 index 000000000..8b9deab90 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditEnum.java @@ -0,0 +1,44 @@ +package com.cool.store.enums; + +public enum AuditEnum { + + CONTRACT_INTENTION("intention", "意向加盟合同API","intentAgreementServiceImpl"), + SYS_BUILD("sysBuild", "系统建店API","sysStoreAppServiceImpl"), + SIGN_FRANCHISE("signFranchise", "加盟合同签约","signFranchiseServiceImpl"), + + ; + + private String code; + + private String message; + + private String clazz; + + AuditEnum(String code, String message, String clazz) { + this.code = code; + this.message = message; + this.clazz = clazz; + } + + public String getCode() { + return code; + } + + public String getMessage() { + return message; + } + + public String getClazz() { + return clazz; + } + + public static AuditEnum getWorkflowSubStageEnum(String flag) { + for (AuditEnum auditEnum : AuditEnum.values()) { + if (auditEnum.getCode().equals(flag)) { + return auditEnum; + } + } + return null; + } +} + diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditResultTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditResultTypeEnum.java new file mode 100644 index 000000000..476eca229 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditResultTypeEnum.java @@ -0,0 +1,31 @@ +package com.cool.store.enums; + +/** + * @author zhangchenbiao + * @FileName: AuditResultTypeEnum + * @Description: + * @date 2024-03-20 14:55 + */ +public enum AuditResultTypeEnum { + + PASS(0, "通过"), + REJECT(1, "拒绝"), + CLOSE(2, "结束跟进"); + + private Integer code; + + private String name; + + private AuditResultTypeEnum(Integer code, String name) { + this.code = code; + this.name = name; + } + + public Integer getCode() { + return code; + } + + public String getName() { + return name; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditStageEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditStageEnum.java new file mode 100644 index 000000000..12559b2f4 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditStageEnum.java @@ -0,0 +1,39 @@ +package com.cool.store.enums; + +public enum AuditStageEnum { + + ONE(1, "一审稽核"), + TWO(2, "二审稽核"), + + + ; + + + private Integer code; + + private String name; + + AuditStageEnum(Integer code, String name) { + this.code = code; + this.name = name; + } + + public Integer getCode() { + return code; + } + + public String getName() { + return name; + } + + public static AuditStageEnum getByCode(Integer code) { + for (AuditStageEnum auditStatusEnum : AuditStageEnum.values()) { + if (auditStatusEnum.getCode().equals(code)) { + return auditStatusEnum; + } + } + return null; + } + +} + diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditStatusEnum.java new file mode 100644 index 000000000..430b6db24 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditStatusEnum.java @@ -0,0 +1,40 @@ +package com.cool.store.enums; + +/** + * @author zhangchenbiao + * @FileName: AuditStatusEnum + * @Description: + * @date 2024-03-20 14:55 + */ +public enum AuditStatusEnum { + + TODO(0, "待处理"), + PASS(1, "通过"), + REJECT(2, "拒绝"); + + private Integer code; + + private String name; + + private AuditStatusEnum(Integer code, String name) { + this.code = code; + this.name = name; + } + + public Integer getCode() { + return code; + } + + public String getName() { + return name; + } + + public static AuditStatusEnum getByCode(Integer code) { + for (AuditStatusEnum auditStatusEnum : AuditStatusEnum.values()) { + if (auditStatusEnum.getCode().equals(code)) { + return auditStatusEnum; + } + } + return null; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditTypeEnum.java new file mode 100644 index 000000000..f94a2dc29 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditTypeEnum.java @@ -0,0 +1,31 @@ +package com.cool.store.enums; + +public enum AuditTypeEnum { + VISUAL_ACCEPTANCE(0, "视觉验收"), + TRAINING_REGISTRATION_APPROVAL(1, "培训登记审批"), + OPENING_OPERATION_PLAN(2, "开业运营方案"), + LICENSE_APPROVAL(3, "证照审批"), + SYS_BUILD(4, "系统建店"), + SITE_SELECTION(5, "选址"), + UPLOAD_RENT_CONTRACT(6, "上传租赁合同"), + PAY_FRANCHISE_FEE(7,"缴纳加盟费"), + SIGN_FRANCHISE(8,"加盟合同签约"), + ; + + private Integer code; + + private String name; + + private AuditTypeEnum(Integer code, String name) { + this.code = code; + this.name = name; + } + + public Integer getCode() { + return code; + } + + public String getName() { + return name; + } +} 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/CallStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/CallStatusEnum.java new file mode 100644 index 000000000..03f88f11e --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/CallStatusEnum.java @@ -0,0 +1,25 @@ +package com.cool.store.enums; + +public enum CallStatusEnum { + + PENDING_CALL(0, "待呼叫"), + CALL_ANSWERED(1, "呼叫接听"), + CALL_MISSED(2, "呼叫未接听"), + CALL_FAILED(3, "呼叫失败"); + + private final int code; + private final String message; + + CallStatusEnum(int code, String message) { + this.code = code; + this.message = message; + } + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } +} \ No newline at end of file diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ConstructionPhaseEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ConstructionPhaseEnum.java new file mode 100644 index 000000000..95b952a70 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ConstructionPhaseEnum.java @@ -0,0 +1,31 @@ +package com.cool.store.enums; + +/** + * @Auther: WangShuo + * @Date: 2024/04/28/下午7:25 + * @Version 1.0 + * @注释: + */ +public enum ConstructionPhaseEnum { + //施工阶段 + NOT_SHOWN(-1,"不显示"), + NOT_START(0,"未开工"), + construction_ING(1,"施工中"), + construction_FINSH(2,"已完工"); + private Integer code; + + private String message; + + ConstructionPhaseEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ContentSubjectEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ContentSubjectEnum.java new file mode 100644 index 000000000..a5a7a6c7d --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ContentSubjectEnum.java @@ -0,0 +1,17 @@ +package com.cool.store.enums; + +/** + * 动态栏目枚举类 + */ +public enum ContentSubjectEnum { + HY_CULTURE("沪姨文化"), + PARTNER_SAYS("加盟商说"), + BRAND_NEWS("品牌动态") + ; + + private String subjectName; + + ContentSubjectEnum(String subjectName) { + this.subjectName = subjectName; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ContentTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ContentTypeEnum.java new file mode 100644 index 000000000..3246f3f38 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ContentTypeEnum.java @@ -0,0 +1,16 @@ +package com.cool.store.enums; + +/** + * 动态类型(图文/视频) + */ +public enum ContentTypeEnum { + VIDEO("视频"), + IMAGE("图文") + ; + + private String type; + + ContentTypeEnum(String type) { + this.type = type; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/DataSourceEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/DataSourceEnum.java new file mode 100644 index 000000000..f47e126ac --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/DataSourceEnum.java @@ -0,0 +1,30 @@ +package com.cool.store.enums; + +/** + * @author zhangchenbiao + * @FileName: DataSourceEnum + * @Description: + * @date 2023-06-08 15:34 + */ +public enum DataSourceEnum { + + SYNC(0, "EC同步"), + CREATE(1, "小程序创建"); + + private Integer code; + + private String message; + + DataSourceEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/DesignPhaseEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/DesignPhaseEnum.java new file mode 100644 index 000000000..3a6ef5387 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/DesignPhaseEnum.java @@ -0,0 +1,41 @@ +package com.cool.store.enums; + +/** + * @Auther: WangShuo + * @Date: 2024/04/28/下午6:46 + * @Version 1.0 + * @注释: + */ + +public enum DesignPhaseEnum { + //设计阶段,平面图,施工图 + DESIGN_PHASE_ACCEPTANCE_FAILED(0,"验收未通过"), + DESIGN_PHASE_NOT_START(1, "未开始"), + DESIGN_PHASE_ACCEPTANCE_DESIGNING(2, "设计中"), + DESIGN_PHASE_ACCEPTED_NOT(3, "未验收"), + DESIGN_PHASE_ACCEPTANCE_FAILEDS(0,"验收未通过"), + DESIGN_PHASE_AUDIT_WAIT(5,"待审批"), + DESIGN_PHASE_AUDIT_FAIL(6,"审批驳回"), + DESIGN_PHASE_AUDIT_ING(7,"审批中"), + DESIGN_PHASE_AUDIT_DISCARD (8,"审批作废"), + DESIGN_PHASE_AUDIT_PASS(9,"审批通过"), + DESIGN_PHASE_AUDIT_ACCEPTANCE_FAIL(10,"审批验收未通过"), + DESIGN_PHASE_ACCEPTANCE_PASS (11,"验收通过"); + + private Integer code; + + private String message; + + DesignPhaseEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} 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 new file mode 100644 index 000000000..8b7a65ec4 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -0,0 +1,250 @@ +package com.cool.store.enums; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * * 通用错误返回处理,后续全部将使用这个返回,请遵守以下规范。 + * * 1.枚举名必须要大写。 + * * 2.枚举中包含属性:code,msg,en(英文尽量写) + * * 3.code的命名以系统模块划分,前三位为模块划分。逐级细分。(7位数字先到先取原则,细化不浪费) + * @author zhangchenbiao + * @FileName: ErrorCodeEnum + * @Description: 返回响应状态和文案枚举 + * @date 2023-05-19 04:30 + */ +public enum ErrorCodeEnum { + + PARTNER_MOBILE_INCORRECT(418, "请输入正确的手机号", null), + PUBLIC_LINE_NOT_FOLLOW(419, "该线索已存在公海,无跟进人", null), + LINE_EXIST_FOLLOW(420, "该线索已存在,跟进人为【{0},{1}】", null), + + ERROR_MESSAGE(421, "{0}", null), + + + /** + * 000000 未知错误 + */ + UNKNOWN(000000, "未知错误", null), + /** + * 2000001 token与当前登录企业不匹配 + */ + TOKEN_ERROR(2000001,"请求异常,与当前登录企业不匹配",null), + FAIL(400000, "FAIL", null), + ACCESS_TOKEN_INVALID(400005, "Invalid token", null), + PARAMS_VALIDATE_ERROR(400003, "参数校验失败!", null), + LOGIN_ERROR(400004, "登录失败", null), + ENTERPRISE_INIT(400006, "企业正在初始化,请稍后访问!",null), + NOT_AUTH(400007, "暂无权限,请联系管理员!", null), + USER_FREEZE(1021019,"账号被冻结,请联系管理员",null), + ENTERPRISE_NOT_EXIST(1021020,"企业不存在",null), + USER_NOT_EXIST(1021021,"用户不存在",null), + JOBNUMBER_NOT_EXIST(1021017,"用户工号不存在",null), + USER_WAIT_AUDIT(1021018,"账号审核中,请联系企业管理员",null), + OPERATION_OVER_TIME(1021019, "您的操作过于频繁,休息一下~", null), + GET_APP_SECRET_ERROR(1021020, "获取secret异常", null), + WX_SERVICE_ERROR(1021021, "调用微信服务异常", null), + SESSION_KEY_ERROR(1021022, "sessionKey过期", null), + GET_WECHAT_USER_INFO_FAIL(1021023,"获取小程序用户信息失败", null), + USER_GROUP_NAME_EXIST(1021076, "用户分组名称已存在", null), + USER_GROUP_NOT_EXIST(1021077, "用户分组不存在", null), + GET_INFO_ERROR(1021078, "获取信息异常", null), + GET_PHONENUMBER_INFO_ERROR(1021079, "手机号归属地获取异常", null), + IDENTITY_CARD_PARSE_FAIL(1021080, "身份证解析失败", null), + WECHAT_BIND_OTHER_MOBILE(1021081, "授权号码有误,请核对", null), + BUSINESS_LICENSE_PARSE_FAIL(1021082, "营业证照解析失败", null), + BUSINESS_LICENSE_OR_ID_CARD_REPEAT(1021083, "身份证或企业信用编码重复", null), + PARAMS_REQUIRED(400002, "参数缺失!", null), + DATA_CONVERT_ERROR(400002, "日期转换异常!", null), + PARENT_NODE_NOT_EXIST(400002, "父节点不存在", null), + + + LINE_ID_IS_NOT_EXIST(500001, "线索信息不存在!", null), + WORK_FLOW_STAGE_PASS_ERROR(500002, "审核失败,非对应阶段!", null), + PARTNER_USER_NOT_EXIST(500003, "加盟商用户信息不存在!", null), + ZONE_NOT_EXIST(500004, "战区不存在!", null), + PARTNER_BASEINFO_NOT_EXIST(500005, "基本信息不存在!", null), + INTENT_INFO_NOT_EXIST(500006, "意向信息不存在!", null), + INTENT_WHAT_NOT_EXIST(500016, "加盟问卷信息不存在!", null), + INTENT_AREA_NOT_BING_ZONE(500007, "意向区域没有绑定战区 分配招商经理失败!", null), + PUBLIC_LINE_NOT_OPERATE(500008, "公海线索不允许操作!", null), + PARTNER_BASE_INFO_NOT_EXIST(500009, "加盟商信息不存在!", null), + LINE_STATUS_NOT_ALLOW_OPERATE(500010, "当前线索状态不允许该操作!", null), + TASK_STATUS_NOT_ALLOW_OPERATE(500011, "当前任务状态不允许该操作!", null), + DATELINE_BEFORE_NOW(500012, "截止时间不能早于当前时间!", null), + NO_TRANSFER_REQUIRED(500013, "招商经理现有私海线索无需转让,请检查后重试!", null), + NO_BATCH_TRANSFER_REQUIRED(500014, "已选线索包含此招商经理现有私海线索,无需转让,请检查后重试!", null), + PARTNER_MOBILE_EXIST(500010, "手机号码已存在,请核实!", null), + MOBILE_EXIST(500015, "此手机号码已存在,请修改后重试", null), + INVESTMENT_MANAGER_NOT_EXIST(500016, "当前招商经理不存在", null), + PARTNER_MOBILE_EXIST_0(500017, "手机号码已存在", null), + TIME_OCCUPIED(500018, "预约时间被占用", null), + LINE_PAY_IS_NOT_EXIST(500019, "意向金信息不存在!", null), + INTENT_PASS(500020, "审核已通过,请刷新页面!", null), + APPOINTMENT_TIME_FAIL(500020, "预约失败,请刷新后再试", null), + + POINT_NOT_COMPLETE(600000, "铺位信息未填写完全,请完善后生成评估报告", null), + POINT_NOT_EXIST(600001, "铺位信息不存在", null), + POINT_SIGNED(600002, "操作失败,铺位已签约", null), + NOT_ALLOW_OPERATE(600003, "当前状态不允许该操作", null), + POINT_AUDIT_NOT_SETTING(600004, "选址审批未设置", null), + NO_PERMISSION(600004, "暂无处理审批任务权限", null), + POINT_AUDIT_NODE_ERROR(600005, "当前审批任务异常", null), + USER_NOT_TODO_AUDIT(600005, "当前用户没有待审批的任务", null), + NOT_ALLOW_MODIFY_WANT_SHOP_NUM(600006, "当前阶段不允许直接修改意向开店数量", null), + USER_NOT_ALLOW_ENTER_ROOM(600007, "当前用户不允许进入面试房间", null), + + SHOP_STAGE_ERROR(600008, "店铺阶段错误", null), + SHOP_NOT_EXIST(600009, "店铺不存在", null), + POINT_IS_SELECTED(600010, "该铺位已被其他人选择", null), + POINT_ALREADY_SELECT(600011, "该铺位已被您选择", null), + SHOP_IS_SELECTED(600012, "该店铺已选址", null), + SHOP_STAGE_NOT_OPERATE(600013, "当前店铺所处阶段不允许该操作", null), + POINT_IS_LOCK(600014, "当前铺位已被锁定,刷新后再试", null), + POINT_IS_INVALID(600015, "该铺位已失效", null), + POINT_SELECTED(600016, "该铺位已被选择", null), + NOT_EXIST_UNSELECT_POINT(600017, "当前没有未选择的铺位", null), + SELECT_POINT_ERROR(600018, "铺位选中失败", null), + + OPEN_NEW_SHOP_RECORD_NOT_EXIST(700001, "开店申请记录不存在", null), + OPEN_NEW_SHOP_RECORD_AUDITED(700002, "开店申请已审核", null), + OPEN_NEW_SHOP_RECORD_WAIT_AUDIT(700003, "提交失败,您有开店申请正在审核中", null), + + INTERVIEW_ENTER_FAIL(1021101, "进入面审间失败", null), + DINGDING_USER_NOT_EXIST(1021102, "用户钉钉信息不存在,无法发起资质审核!", null), + INTERVIEW_NOT_EXIST(1021103, "面审信息不存在!", null), + INTERVIEW_AND_PARTNER_ID_IS_NULL(1021104, "加盟商用户ID&线索ID和面审官ID不能同时为空!", null), + INTERVIEW_PLAN_IS_NULL(1021105, "未查询到相关面审安排!", null), + DATE_PARAMS_IS_ERROR(1021106, "日期参数错误!", null), + INTERVIEW_PLAN_NOT_EXIST(1021107, "面审计划不存在!", null), + FEISHU_DELETE_SCHEDULE_ERROR(1021108, "删除原面审安排失败!", null), + CREATE_CALENDAR_EVENT_FAIL(1021109, "创建面审安排失败!", null), + FEISHU_UPDATE_SCHEDULE_ERROR(1021110, "开始前10分钟不允许修改时间!", null), + INTERVIEW_STATUS_ERROR(1021111, "当前面审状态不允许该操作!", null), + INTERVIEW_PLAN_ALREADY_EXIST(1021112, "面审计划已存在,请勿重复申请!", null), + INTERVIEW_LINE_ID_IS_NULL(1021113, "线索id为空!", null), + INTERVIEW_INTERVIEW_TIME_IS_UNUSABLE(1021114, "当前预约时间不可用,请和线索用户协商其他时间后确定预约时间\n面审人:{0} 手机号:{1}", null), + INTERVIEW_PARTNER_NOT_EXIST(1021115, "线索下的加盟商不存在!", null), + INTERVIEW_STATUS_NOT_TRANSFER(1021116, "当前面审状态不允许转让! 面审状态:{0}", null), + MOBILE_WECHAT_EXIST(1021116, "此号码已绑定其他微信", null), + INTERVIEW_STATUS_WAS_AUDITED(1021117, "当前面审已审核", null), + + ROOM_STATUS_ERROR(10211156, "当前面审房间状态不允许进行该操作!", null), + MOBILE_APP_NOT_ONLINE_ERROR(10211157, "呼叫失败,请确认呼出号码正确并检查是否安装并打开呼叫插件", null), + CALL_RECORD_NOT_EXIST_ERROR(10211158, "通话记录不存在!", null), + CALL_UP_ERROR(10211159, "拨出电话异常!", null), + CREATE_CALL_REQUEST_ERROR(10211160, "创建电话请求失败!", null), + + CREATE_APPOINTMENT_TIME_ERROR(10211161, "当前时间不可预约面审,请选择其他时间", null), + + USER_CHANNEL_NOT_EXISTS(10211162, "当前用户渠道不存在", null), + LINE_ALREADY_EXISTS(10211163, "该线索已存在,跟进人为{0}", null), + LINE_EXISTS_IN_PUBLIC_SEA(10211164, "该线索已存在,请前往公海认领", null), + CONTENT_DUPLICATED(10211200, "动态标题重复!", null), + SIGN_FAIL(600000, "验签失败", null), + GET_ACCESSTOKEN_ERROR(600001, "获取小程序TOKEN错误!", null), + NEW_MOBILE_HAS_EXIST(600002,"加盟商用户信息已存在",null), + INSPECTION_USER_OCCUPY(600003,"当前稽核人已经配置其他战区",null), + INSPECTION_INFO_NOT_EXIST(600005, "稽核信息不存在!", null), + OPEN_AREA_NULL(600006,"归属地区不能为空",null), + NOT_IN_PUBLIC_SEA(600007,"当前线索不在公海 不支持分配招商经理",null), + + LABEL_GROUP_IN_USE(120001, "该标签组下存在标签,不可删除;请确保该标签组下标签数量为0后再进行删除", null), + LABEL_GROUP_EXIST(120002, "该标签组已存在,请重新输入", null), + LABEL_EXIST(120003, "该标签已存在,请重新输入", null), + + + OPEN_AREA_IS_NOT_EXISTS(107006, "意向区域城市不存在", null), + + REGION_NOT_EXIST(108001, "区域不存在",null), + ONLY_WAR_REGION_CONFIG(108002, "意向省市只能配置到战区",null), + + NOT_APPROVE_NODE(109001, "不是审批节点",null), + + + TIME_FALSE(109002, "结束时间不能早于开始时间",null), + + BUSINESS_ID_NOT_EXIST(109003, "kdzBusinessId解析异常,请检查",null), + + VERIFY_MD5_FALSE(109004, "验签失败,请检查",null), + + LINE_PAY_FALSE(109005, "付款信息查询失败",null), + + LICENSE_NOT_EXIST(109006, "证照不存在",null), + + FOOD_BUSINESS_LICENSE_PARSE_FAIL(109007, "食营证照解析失败", null), + + + STORE_NUM_NOT_FOUND(109008, "未找到门店编码", null), + + SIGN_FRANCHISE_NOT_FOUND(109009, "加盟合同签约信息为空", null), + + UNISSUED_STATEMENT(109010, "该门店未发布账单,无法付款", null), + + FRANCHISE_AGREEMENT_FALSE(109011, "特许经营合同API调用失败", null), + + NEW_STORE_FALSE(109011, "新店开业流程API调用失败", null), + + AUDIT_RESULT_FALSE(109012, "意向加盟合同API本次调用结果与上一次不一致", null), + + + TIME_NULL_FALSE(109013, "有时间为空", null), + + UNISSUED_STATEMENT_2(109014, "该门店已发布账单", null), + + + INSERT_OPENING_OPERATION_PLAN_AUDIT_FALSE(103001,"插入运营方案审核信息失败",null), + INSERT_OPENING_OPERATION_PLAN_FALSE(103002,"插入运营方案失败",null), + SHOP_ID_IS_NULL(103003,"验参shopId失败,为空",null), + ACTIVITY_THEME_LENGTH_FALSE(103004,"活动主题长度大于100",null), + SURVEYRESULT_LENGTH_FALSE(103005,"调研结果长度大于100",null), + ID_IS_NULL(103006,"验参Id失败,为空",null), + UPDATE_AUDIT_PLAN_FALSE(103007,"修改AUDIT_PLAN失败",null), + UPDATE_PLAN_FALSE(103008,"修改PLAN失败",null), + UPDATE_SHOP_SUB_STAGE_STATUS_FALSE(103009,"修改开业运营方案阶段状态失败",null), + SHOP_ID_NOT_EXIST(103010,"shopId不存在",null), + FIRST_ORDER_PARAM_NULL(103020,"首批订货金参数为空",null), + USER_NOT_LOGIN(103021,"用户未登录",null), + XFSG_SERVICE_ERROR(103099,"鲜丰服务调用失败",null), + GET_FIRST_ORDER(103021,"获取鲜丰首批订货金失败",null), + YLF_ERROR(110001, "云立方接口异常!异常信息:{0}", null), + //装修 + THREE_ACCEPTANCE(121001,"提交三方验收失败",null), + CHECK_ITEM(12002,"插入检查项失败",null), + FITMENT_FAIL(12003,"装修款阶段未完成",null), + SEE_ACCEPTANCE_ERROR(12004,"获取鲜丰撤场数据失败",null), + SEE_ACCEPTANCE_AUDIT_NULL(12005,"视觉验收结果为空",null), + ; + + + + protected static final Map map = Arrays.stream(values()).collect( + Collectors.toMap(ErrorCodeEnum::getCode, Function.identity(), (a, b)->a)); + private int code; + + private String message; + private String en; + + ErrorCodeEnum(int code, String message, String en) { + this.code = code; + this.message = message; + this.en=en; + } + + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } + + public static ErrorCodeEnum getByCode(Integer code) { + return map.get(code); + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ExamStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ExamStatusEnum.java new file mode 100644 index 000000000..1e1e3056c --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ExamStatusEnum.java @@ -0,0 +1,46 @@ +package com.cool.store.enums; + +import org.apache.commons.lang3.StringUtils; + +/** + * @author Fun Li + * @version 1.0 + * @date 2023/7/19 17:55 + */ +public enum ExamStatusEnum { + + NOT_START(0, "未开始"), + PASS(1, "正考通过"), + NOT_PASS(2, "不通过"); + + private Integer code; + + private String desc; + + ExamStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public static Integer matchCodeByDesc(String desc) { + if(StringUtils.isBlank(desc)){ + return null; + } + for (ExamStatusEnum statusEnum : ExamStatusEnum.values()) { + if (statusEnum.getDesc().equals(desc)) { + return statusEnum.code; + } + } + return null; + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ExhibitionPartnerStatus.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ExhibitionPartnerStatus.java new file mode 100644 index 000000000..26244741b --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ExhibitionPartnerStatus.java @@ -0,0 +1,36 @@ +package com.cool.store.enums; + +/** + * @author Fun Li 2023/12/6 13:48 + * @version 1.0 + */ +public enum ExhibitionPartnerStatus { + + REGISTERED(0, "已报名"), + SIGNED(1, "已签到"), + APPLIED(2, "已提交意向申请"), + INTERVIEWING(3, "面试中"), + INTERVIEWED(4, "面试完成"), + INTERVIEW_PASS(5, "面试通过"), + INTERVIEW_REJECT(6, "面试不通过"), + SIGN_CANCELED(7, "取消报名") + ; + + + private Integer code; + + private String status; + + ExhibitionPartnerStatus(Integer code, String status) { + this.code = code; + this.status = status; + } + + public Integer getCode() { + return code; + } + + public String getStatus() { + return status; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ExperienceStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ExperienceStatusEnum.java new file mode 100644 index 000000000..f5f12b31b --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ExperienceStatusEnum.java @@ -0,0 +1,33 @@ +package com.cool.store.enums; + +public enum ExperienceStatusEnum { + DONE(0,"完成体验"), + ABANDON(1,"放弃体验"), + + ; + + private Integer experienceStatus; + + private String message; + + ExperienceStatusEnum(Integer experienceStatus, String message) { + this.experienceStatus = experienceStatus; + this.message = message; + } + + public Integer getExperienceStatus() { + return experienceStatus; + } + + public void setExperienceStatus(Integer experienceStatus) { + this.experienceStatus = experienceStatus; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/FSEventTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/FSEventTypeEnum.java new file mode 100644 index 000000000..4480d4065 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/FSEventTypeEnum.java @@ -0,0 +1,59 @@ +package com.cool.store.enums; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author Admin + * @ClassName FsEventTypeEnum + * @Description fs的事件类型 + */ +public enum FSEventTypeEnum { + + // + USER_CREATED("contact.user.created_v3","员工入职"), + USER_DELETED("contact.user.deleted_v3", "员工离职"), + USER_UPDATED("contact.user.updated_v3", "员工信息被修改"), + + DEPARTMENT_CREATED("contact.department.created_v3", "部门被创建"), + DEPARTMENT_UPDATED("contact.department.updated_v3", "部门信息被修改"), + DEPARTMENT_DELETED("contact.department.deleted_v3", "部门被删除"), + + APP_OPEN("app_open", "首次启用应用"), + APP_STATUS_CHANGE("app_status_change", "应用停启用"), + APP_TICKET("app_ticket", "app_ticket 事件"), + APP_UNINSTALLED("app_uninstalled", "应用卸载"), + + CONTACT_SCOPE_UPDATE("contact.scope.updated_v3", "通讯录范围权限被更新"), + ORDER_PAID("order_paid", "应用商店应用购买"), + ; + + + private final String value; + private final String remark; + + private static final Map map = Arrays.stream(values()).collect(Collectors.toMap(FSEventTypeEnum::getValue, Function.identity())); + + FSEventTypeEnum(String value, String remark) { + this.value = value; + this.remark = remark; + } + + public String getValue() { + return value; + } + + public static FSEventTypeEnum parseValue(String value) { + return map.get(value); + } + + public static boolean isUserEvent(String eventType){ + return FSEventTypeEnum.USER_CREATED.getValue().equals(eventType) || FSEventTypeEnum.USER_UPDATED.getValue().equals(eventType) || FSEventTypeEnum.USER_DELETED.getValue().equals(eventType); + } + + public static boolean isDepartmentEvent(String eventType){ + return FSEventTypeEnum.DEPARTMENT_CREATED.getValue().equals(eventType) || FSEventTypeEnum.DEPARTMENT_UPDATED.getValue().equals(eventType) || FSEventTypeEnum.DEPARTMENT_DELETED.getValue().equals(eventType); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/FeiShuNoticeMsgEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/FeiShuNoticeMsgEnum.java new file mode 100644 index 000000000..0e595171c --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/FeiShuNoticeMsgEnum.java @@ -0,0 +1,89 @@ +package com.cool.store.enums; + +import com.alibaba.fastjson.JSONObject; + +/** + * @Author: young.yu + * @Date: 2023-07-19 16:49 + * @Description: + */ +public enum FeiShuNoticeMsgEnum { + + common_notice("工作台通知", "{0}", "img_v2_45d7a901-1eab-498b-a760-b38d287f0c1g", "1567d83b966f2d312fd7fcd2e72dbce9"), + ALLOCATION_INVESTMENT_MANAGER("分配招商经理", "有新的线索于 {0} 分配给您,线索信息 {1} 手机号 {2},请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g", "1567d83b966f2d312fd7fcd2e72dbce9"), + TRANS_INVESTMENT_MANAGER("转让招商经理", "有新的线索于 {0} 转让给您,线索信息 {1} 手机号 {2},请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g", "1567d83b966f2d312fd7fcd2e72dbce9"), + BATCH_TRANS_INVESTMENT_MANAGER("收到新线索", "有{0}条新线索于 {1} 转让给您,请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g", "1567d83b966f2d312fd7fcd2e72dbce9"), + EC_RECEIVE_LINE("收到EC新线索", "有{0}条新线索于EC同步给您,线索信息 {1},请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g", "1567d83b966f2d312fd7fcd2e72dbce9"), + INTENTION_APPLY("加盟意向申请", "您有一个【加盟意向申请】待审核,申请人 {0} 手机号 {1} 于 {2} 提交加盟意向申请,请及时处理", "img_v2_c909097d-67d1-4c11-a911-a2584b67ca6g", "1567d83b966f2d312fd7fcd2e72dbce9"), + FOLLOW_TASK("线索跟进任务", "{0}", "img_v2_1960b7ef-8c4e-4c3d-8b67-3d918a85578g", "1567d83b966f2d312fd7fcd2e72dbce9"), + INTERVIEW_APPOINTMENT("面试预约申请", "您有一个【面试预约申请】待处理,预约人 {0} 手机号 {1} ,预约面试时间 {2} ","img_v2_107bb06b-2a7a-43e1-a6ae-e5d2f2dae17g", "1567d83b966f2d312fd7fcd2e72dbce9"), + EXHIBITION_COLLABORATOR("会销协作通知", "{0} 已将您添加为【{1}】的会销协作人,日期为 {2},地点为“{3}” ","img_v3_026c_d561bb71-f085-40ca-9c36-5fe134cacd2g", "1567d83b966f2d312fd7fcd2e72dbce9", "/joint-sales/manage-detail?id={0}", "/mobile/joint-sales/manage-detail?id={0}"), + PARTNER_SIGNUP_EXHIBITION("线索已报名会销", "您跟进的线索客户{0} {1} 已报名于 {2} 举办的【{3}】 ,地点为“{4}”","img_v3_026c_5bcf178d-19e6-4445-9677-f748a3f916fg", "1567d83b966f2d312fd7fcd2e72dbce9", "/clue/details?lineId={0}&clueType=private&partnerId={1}"), + ; + + private String title; + private String content; + private String imageMediaId; + private String templateCode; + //卡片对应的跳转地址 + private String PCPath; + private String mobilePath; + + FeiShuNoticeMsgEnum(String title, String content, String imageMediaId, String templateCode, String pcPath) { + this.title = title; + this.content = content; + this.imageMediaId = imageMediaId; + this.templateCode = templateCode; + this.PCPath = pcPath; + this.mobilePath = "/mobile"; + } + + FeiShuNoticeMsgEnum(String title, String content, String imageMediaId, String templateCode) { + this.title = title; + this.content = content; + this.imageMediaId = imageMediaId; + this.templateCode = templateCode; + this.PCPath = "/work/bench"; + this.mobilePath = "/mobile"; + } + + FeiShuNoticeMsgEnum(String title, String content, String imageMediaId, String templateCode, String pcPath, String mobilePath) { + this.title = title; + this.content = content; + this.imageMediaId = imageMediaId; + this.templateCode = templateCode; + this.PCPath = pcPath; + this.mobilePath = mobilePath; + } + + public String getTitle() { + return title; + } + + public String getContent() { + return content; + } + + public String getImageMediaId() { + return imageMediaId; + } + + public String getTemplateCode() { + return templateCode; + } + + public String getPCPath() { + return PCPath; + } + + public String getMobilePath() { + return mobilePath; + } + + public JSONObject getMessageObject() { + JSONObject object = new JSONObject(); + object.put("name", this.title); + object.put("imageMediaId", this.imageMediaId); + return object; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/FollowTaskStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/FollowTaskStatusEnum.java new file mode 100644 index 000000000..387d4154a --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/FollowTaskStatusEnum.java @@ -0,0 +1,36 @@ +package com.cool.store.enums; + +/** + * @author zhangchenbiao + * @FileName: FollowTaskStatusEnum + * @Description: + * @date 2023-08-10 10:47 + */ +public enum FollowTaskStatusEnum { + + TODO(0, "待完成"), + FINISHED(1, "已完成"), + OVERDUE(2, "已逾期"), + CANCELLED(3, "作废"), + OVERDUE_FINISH(4, "逾期完成"), + OVERDUE_CANCELLED(5, "逾期作废"), + ; + //任务状态:0:待完成、1:已完成、2:已逾期、3:作废 + + private Integer code; + + private String remark; + + FollowTaskStatusEnum(Integer code, String remark) { + this.code = code; + this.remark = remark; + } + + public Integer getCode() { + return code; + } + + public String getRemark() { + return remark; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/FranchiseeTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/FranchiseeTypeEnum.java new file mode 100644 index 000000000..105aa5f90 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/FranchiseeTypeEnum.java @@ -0,0 +1,50 @@ +package com.cool.store.enums; + +/** + * 加盟商类型" + + * "0-新加盟商开单店;1-老加盟商开单店;" + + * "2-新加盟商开新区域单店;" + + * "3-新加盟商开老区域单店;" + + * "4-老加盟商开新区域单店;" + + * "5-老加盟商开老区域单店;" + + * "6-直营门店;" + + * "7-同异业转化;" + + * "8-老加盟商迁址开新店 + */ +public enum FranchiseeTypeEnum { + ONE(0,"新加盟商开单店"), + TWO(1,"老加盟商开单店"), + THREE(2,"新加盟商开新区域单店"), + FOUR(4,"新加盟商开老区域单店"), + FIVE(5,"老加盟商开老区域单店"), + SIX(6,"直营门店"), + SEVEN(7,"同异业转化"), + EIGHT(8,"老加盟商迁址开新店"), + ; + + private Integer code; + + private String message; + + FranchiseeTypeEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } + + public static FranchiseeTypeEnum getByCode(Integer code) { + for (FranchiseeTypeEnum franchiseeTypeEnum : FranchiseeTypeEnum.values()) { + if (franchiseeTypeEnum.getCode().equals(code)) { + return franchiseeTypeEnum; + } + } + return null; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/IDCardSideEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/IDCardSideEnum.java new file mode 100644 index 000000000..ce4f76114 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/IDCardSideEnum.java @@ -0,0 +1,32 @@ +package com.cool.store.enums; + +/** + * @author zhangchenbiao + * @FileName: IDCardSideEnum + * @Description: 身份证正反面类型 + * @date 2023-06-16 16:49 + */ +public enum IDCardSideEnum { + + FACE("face", "正面"), + BACK("back", "反面") + ; + + private String code; + + private String message; + + IDCardSideEnum(String code, String message) { + this.code = code; + this.message = message; + } + + + public String getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/InspectionOperationTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/InspectionOperationTypeEnum.java new file mode 100644 index 000000000..2656b91e1 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/InspectionOperationTypeEnum.java @@ -0,0 +1,33 @@ +package com.cool.store.enums; + +/** + * @author Fun Li + * @version 1.0 + * @date 2023/7/19 17:55 + */ +//稽核操作类型 +public enum InspectionOperationTypeEnum { + + PASS(0, "合格"), + NOT_PASS(1, "不合格"), + REVOCATION(2, "撤销"); + + private Integer code; + + private String type; + + InspectionOperationTypeEnum(Integer code, String type) { + this.code = code; + this.type = type; + } + + public Integer getCode() { + return code; + } + + public String getType() { + return type; + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/InspectionStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/InspectionStatusEnum.java new file mode 100644 index 000000000..b86464259 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/InspectionStatusEnum.java @@ -0,0 +1,32 @@ +package com.cool.store.enums; + +/** + * @author Fun Li + * @version 1.0 + * @date 2023/7/19 17:22 + */ +//稽核信息状态 +public enum InspectionStatusEnum { + + NOT_INSPECT(0, "未稽核"), + PASS(1, "合格"), + NOT_PASS(2, "不合格"); + + private Integer code; + + private String type; + + InspectionStatusEnum(Integer code, String type) { + this.code = code; + this.type = type; + } + + public Integer getCode() { + return code; + } + + public String getType() { + return type; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/InspectionTyeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/InspectionTyeEnum.java new file mode 100644 index 000000000..712db6357 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/InspectionTyeEnum.java @@ -0,0 +1,29 @@ +package com.cool.store.enums; + +/** + * @author Fun Li + * @version 1.0 + * @date 2023/7/19 17:16 + */ +//稽核类型 +public enum InspectionTyeEnum { + + INTERVIEW_INSPECTION(0, "面试稽核"); + + private Integer code; + + private String type; + + InspectionTyeEnum(Integer code, String type) { + this.code = code; + this.type = type; + } + + public Integer getCode() { + return code; + } + + public String getType() { + return type; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/InterviewStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/InterviewStatusEnum.java new file mode 100644 index 000000000..41d8d3add --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/InterviewStatusEnum.java @@ -0,0 +1,32 @@ +package com.cool.store.enums; + +/** + * @Author: young.yu + * @Date: 2023-06-13 20:22 + * @Description: 面试状态枚举 + */ +public enum InterviewStatusEnum { + // 0-待预约 1-待面审 2-待审核 3-审批通过 4-不通过 + WAIT_APPOINTMENT(0, "待预约"), + WAIT_INTERVIEW(1, "待面审"), + WAIT_AUDIT(2, "待审核"), + PASS(3, "审批通过"), + NOT_PASS(4, "不通过"); + + private Integer code; + + private String message; + + InterviewStatusEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/InterviewTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/InterviewTypeEnum.java new file mode 100644 index 000000000..75dd2d6dc --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/InterviewTypeEnum.java @@ -0,0 +1,107 @@ +package com.cool.store.enums; + +import com.cool.store.constants.CommonConstants; +import org.apache.commons.lang3.tuple.Pair; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.ArrayList; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: InterviewTypeEnum + * @Description: + * @date 2024-03-15 16:12 + */ +public enum InterviewTypeEnum { + + MEET(0, "面谈", 120, 9, 19), + + INTERVIEW(1, "一面", 30, 9, 18), + + SECOND_INTERVIEW(2, "二面", 30, 9, 18), + + ; + + private Integer code; + + private String message; + + private Integer minute; + + private Integer startHour; + + private Integer endHour; + + InterviewTypeEnum(Integer code, String message, Integer minute, Integer startHour, Integer endHour) { + this.code = code; + this.message = message; + this.minute = minute; + this.startHour = startHour; + this.endHour = endHour; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } + + public Integer getMinute() { + return minute; + } + + public static InterviewTypeEnum match(Integer code) { + for (InterviewTypeEnum type : InterviewTypeEnum.values()) { + if (type.getCode().equals(code)) { + return type; + } + } + return null; + } + + public static List> getTimeSlots(InterviewTypeEnum interviewType, LocalDate localDate) { + switch (interviewType) { + case MEET: + return getTimeSlots(localDate, InterviewTypeEnum.MEET); + case INTERVIEW: + case SECOND_INTERVIEW: + return getTimeSlots(localDate, InterviewTypeEnum.INTERVIEW); + default: + break; + } + return null; + } + + private static List> getTimeSlots(LocalDate date, InterviewTypeEnum interviewTypeEnum) { + List> result = new ArrayList<>(); + LocalDateTime start = LocalDateTime.of(date, LocalTime.of(interviewTypeEnum.startHour, CommonConstants.ZERO)); + LocalDateTime now = LocalDateTime.now(); + while (start.getHour() < interviewTypeEnum.endHour){ + String time = start.getHour() + CommonConstants.COLON + (start.getMinute() < CommonConstants.TEN ? "0"+ start.getMinute() : start.getMinute()); + boolean isAvailable = start.isAfter(now); + start = start.plusMinutes(interviewTypeEnum.minute); + time = time + CommonConstants.PATH_BAR + start.getHour() + CommonConstants.COLON + (start.getMinute() < CommonConstants.TEN ? "0"+ start.getMinute() : start.getMinute()); + result.add(Pair.of(time, isAvailable)); + } + return result; + } + + public static WorkflowSubStageStatusEnum getWorkflowSubStageStatus(InterviewTypeEnum interviewType){ + if(MEET.equals(interviewType)){ + return WorkflowSubStageStatusEnum.INVITING_INTERVIEWS_15; + } + if(INTERVIEW.equals(interviewType)){ + return WorkflowSubStageStatusEnum.FIRST_INTERVIEWS_30; + } + if(SECOND_INTERVIEW.equals(interviewType)){ + return WorkflowSubStageStatusEnum.SECOND_INTERVIEWS_105; + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/InterviewUserTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/InterviewUserTypeEnum.java new file mode 100644 index 000000000..1572788c9 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/InterviewUserTypeEnum.java @@ -0,0 +1,23 @@ +package com.cool.store.enums; + +/** + * @author zhangchenbiao + * @FileName: InterviewUserTypeEnum + * @Description: + * @date 2024-03-20 9:53 + */ +public enum InterviewUserTypeEnum { + + LINE("加盟商线索"), + INTERVIEWER("面试官"),; + + private String message; + + InterviewUserTypeEnum(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/JoinInterviewStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/JoinInterviewStatusEnum.java new file mode 100644 index 000000000..a8c7bed47 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/JoinInterviewStatusEnum.java @@ -0,0 +1,45 @@ +package com.cool.store.enums; + +/** + * @author zhangchenbiao + * @FileName: JoinInterviewStatusEnum + * @Description: + * @date 2024-03-20 11:05 + */ +public enum JoinInterviewStatusEnum { + + NO_JOIN(0, "未参加"), + LINE_JOIN(1,"加盟商先进入"), + INTERVIEW_JOIN(2,"面试官先进入"), + JOIN(3,"双方都参加"); + + private Integer code; + + private String message; + + JoinInterviewStatusEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } + + public static Integer getJoinInterviewStatus(Integer joinInterviewStatus, InterviewUserTypeEnum userType){ + if(NO_JOIN.getCode().equals(joinInterviewStatus)){ + return InterviewUserTypeEnum.LINE.equals(userType) ? LINE_JOIN.getCode() : INTERVIEW_JOIN.getCode(); + } + if(LINE_JOIN.getCode().equals(joinInterviewStatus)){ + return InterviewUserTypeEnum.LINE.equals(userType) ? LINE_JOIN.getCode() : JOIN.getCode(); + } + if(INTERVIEW_JOIN.getCode().equals(joinInterviewStatus)){ + return InterviewUserTypeEnum.LINE.equals(userType) ? JOIN.getCode() : INTERVIEW_JOIN.getCode(); + } + return JOIN.getCode(); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/JoinTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/JoinTypeEnum.java new file mode 100644 index 000000000..afdf4e9b7 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/JoinTypeEnum.java @@ -0,0 +1,33 @@ +package com.cool.store.enums; + +public enum JoinTypeEnum { + JOIN_TYPE_ONE(1,"个人加盟"), + JOIN_TYPE_TWO(2,"企业加盟"), + + ; + + private Integer code; + + private String typeName; + + JoinTypeEnum(Integer code, String typeName) { + this.code = code; + this.typeName = typeName; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/LicenseTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/LicenseTypeEnum.java new file mode 100644 index 000000000..2d53c6bdf --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/LicenseTypeEnum.java @@ -0,0 +1,46 @@ +package com.cool.store.enums; + +/** + * 营业执照类型 0.个体工商户 1.有限责任公司 2.独资企业 3.自然人经营 + */ +public enum LicenseTypeEnum { + ZERO(0, "个体工商户"), + ONE(1,"有限责任公司"), + TWO(2,"独资企业"), + THREE(3,"自然人经营"); + + private Integer code; + + private String message; + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } + + LicenseTypeEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + public static LicenseTypeEnum match(Integer code) { + for (LicenseTypeEnum type : LicenseTypeEnum.values()) { + if (type.getCode().equals(code)) { + return type; + } + } + return null; + } + + public static LicenseTypeEnum matchName(String name) { + for (LicenseTypeEnum type : LicenseTypeEnum.values()) { + if (type.getMessage().equals(name)) { + return type; + } + } + return null; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/LineStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/LineStatusEnum.java new file mode 100644 index 000000000..08fec64a1 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/LineStatusEnum.java @@ -0,0 +1,33 @@ +package com.cool.store.enums; + +/** + * @Author suzhuhong + * @Date 2023/6/13 11:45 + * @Version 1.0 + */ +public enum LineStatusEnum { + + PUBLIC_SEAS(0,"公海线索"), + PRIVATE_SEAS(1,"私海线索"), + COOPERATION(2,"合作"), + BLACKLIST(3,"黑名单"), + ; + + private Integer code; + + private String message; + + LineStatusEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/MenuTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/MenuTypeEnum.java new file mode 100644 index 000000000..c5ee0d090 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/MenuTypeEnum.java @@ -0,0 +1,31 @@ +package com.cool.store.enums; + +/** + * @author zhangchenbiao + * @FileName: MentTypeEnum + * @Description: + * @date 2021-09-23 17:59 + */ +public enum MenuTypeEnum { + + + MENU(1,"菜单"), + AUTH(2,"权限"); + + private Integer code; + + private String message; + + MenuTypeEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/MessageEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/MessageEnum.java new file mode 100644 index 000000000..c6c7fdbc2 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/MessageEnum.java @@ -0,0 +1,177 @@ +package com.cool.store.enums; + +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: MessageEnum + * @Description: + * @date 2024-03-27 10:50 + */ +public enum MessageEnum { + + MESSAGE_1("您有一份加盟意向申请,请查收。", "##### 加盟商姓名:${partnerUsername}\n##### 手机号码:${partnerMobile}\n##### 意向加盟区域:${wantShopName}\n"), + MESSAGE_2("您收到一份邀约面谈预约,请查收", "##### 加盟商姓名:${partnerUsername}\n##### 预约时间:${appointmentTime}\n"), + MESSAGE_3("您收到一份一次面审预约,请查收", "##### 加盟商姓名:${partnerUsername}\n##### 预约时间:${appointmentTime}\n"), + MESSAGE_3_1("您的线索已预约一次面审,请关注", "##### 加盟商姓名:${partnerUsername}\n面审官:${interviewUsername}\n##### 预约时间:${appointmentTime}\n"), + MESSAGE_4("您有线索未通过面审,请查收", "##### 加盟商姓名:${partnerUsername}\n##### 面审时间:${interviewTime}\n##### 面审官:${interviewUsername}\n"), + MESSAGE_5("您收到一份缴纳意向金审核,请查收", "##### 加盟商姓名:${partnerUsername}\n##### 缴费时间:${payTime}\n"), + MESSAGE_6("您收到一份加盟意向协议信息审核,请查收", "##### 加盟商姓名:${partnerUsername}\n##### 手机号码:${partnerMobile}\n##### 信息提交时间:${submitTime}\n"), + MESSAGE_7("您提交的一份加盟意向协议OA审核未通过,请查收", "##### 加盟商姓名:${partnerUsername}\n##### 审批提交时间:${submitTime}\n"), + MESSAGE_8("您有一位加盟商待安排体验门店及体验时间,请查收", "##### 加盟商姓名:${partnerUsername}\n##### 手机号码:${partnerMobile}\n"), + MESSAGE_9("您有一位加盟商已放弃门店体验,请查收", "##### 加盟商姓名:${partnerUsername}\n##### 手机号码:${partnerMobile}\n"), + MESSAGE_10("您收到一份二次面审预约,请查收", "##### 加盟商姓名:${partnerUsername}\n##### 预约时间:${appointmentTime}\n"), + MESSAGE_10_1("您的线索已预约二次面审,请关注", "##### 加盟商姓名:${partnerUsername}\n面审官:${interviewUsername}\n##### 预约时间:${appointmentTime}\n"), + MESSAGE_11("您的一个铺位已审核通过,请查收", "##### 铺位名称:${pointName}\n##### 铺位地址:${pointAddress}\n"), + MESSAGE_12("您的一个铺位审核未通过,请查收", "##### 铺位名称:${pointName}\n##### 铺位地址:${pointAddress}\n##### 未通过原因:${reason}\n"), + MESSAGE_13("您有一个铺位需要审核,请查收", "##### 铺位名称:${pointName}\n##### 铺位地址:${pointAddress}\n"), + MESSAGE_14("已为您分配一位加盟商,请查收", "##### 加盟商姓名:${partnerUsername}\n##### 手机号码:${partnerMobile}\n##### 意向加盟区域:${wantShopName}\n"), + MESSAGE_15("您有一份加盟商上传的租赁合同待审核,请查收", "##### 加盟商姓名:${partnerUsername}\n##### 提交时间:${submitTime}\n"), + MESSAGE_16("您有一家门店待提交系统建店申请,请查收", "##### 门店名称:${storeName}\n##### 加盟商姓名:${partnerName}\n##### 加盟商手机号码:${partnerMobile}\n"), + MESSAGE_16_1("您有一家门店待提交系统建店申请,请查收", "##### 加盟商姓名:${partnerName}\n##### 加盟商手机号码:${partnerMobile}\n"), + MESSAGE_17("您收到一份证照信息审核申请,请查收", "##### 门店名称:${storeName}\n##### 加盟商姓名:${partnerName}\n##### 加盟商手机号码:${partnerMobile}\n"), + MESSAGE_18("您有一个门店已缴纳加盟费/保证金,请审核", "##### 门店名称:${storeName}\n##### 加盟商姓名:${partnerName}\n##### 加盟商手机号码:${partnerMobile}\n"), + MESSAGE_19("您有一个门店待提交加盟合同审核,请查收", "##### 门店名称:${storeName}\n##### 加盟商姓名:${partnerName}\n##### 加盟商手机号码:${partnerMobile}\n"), + MESSAGE_20("您有一个门店的加盟合同审核未通过,请查收", "##### 门店名称:${storeName}\n##### 加盟商姓名:${partnerName}\n##### 加盟商手机号码:${partnerMobile}\n"), + MESSAGE_21("加盟商已登记一位员工,请及时安排培训", "##### 员工姓名:【${userName}】,员工手机号码:【${mobile}】,登记时间:【${registerTime}】"), + MESSAGE_22("您收到一位员工由您带教,请查收", "##### 员工姓名:【${userName}】,员工手机号码:【${mobile}】,登记时间:【${registerTime}】"), + MESSAGE_23("您有一个门店待发布加盟费/保证金账单,请查收", "##### 加盟商姓名:${partnerName}\n##### 加盟商手机号码:${partnerMobile}\n"), + MESSAGE_24("您有一个门店待预约三方验收时间,请查收", "##### 门店名称:${storeName}\n##### 加盟商姓名:${partnerUsername}\n##### 加盟商手机号码:${partnerMobile}\n"), + MESSAGE_25("您有一个门店待进行三方验收,请查收","##### 门店名称:${storeName}\n##### 加盟商姓名:${partnerUsername}\n##### 加盟商手机号码:${partnerMobile}\n"), + MESSAGE_26("您有一个门店需要上传开业运营方案,请查收","##### 门店名称:${storeName}\n##### 加盟商姓名:${partnerUsername}\n##### 加盟商手机号码:${partnerMobile}\n"), + MESSAGE_27("您有一个门店需要上传首批订货清单,请查收","##### 门店名称:${storeName}\n##### 加盟商姓名:${partnerUsername}\n##### 加盟商手机号码:${partnerMobile}\n"), + MESSAGE_28("您有一个门店需要进行视觉验收,请查收","##### 门店名称:${storeName}\n##### 加盟商姓名:${partnerUsername}\n##### 加盟商手机号码:${partnerMobile}\n"), + + MESSAGE_29("您有一份加盟申请书,请查收","##### 加盟商姓名:${partnerUsername}\n##### 加盟商手机号码:${partnerMobile}\n##### 意向加盟区域:${regionName}\n"), + MESSAGE_30("您收到一份加盟意向协议信息审核,请查收","##### 加盟商姓名:${partnerUsername}\n##### 加盟商手机号码:${partnerMobile}\n##### 信息提交时间:${submitTime}\n"), + MESSAGE_31("您提交的一份加盟意向协议OA审核未通过,请查收","##### 加盟商姓名:${partnerUsername}\n##### 信息提交时间:${submitTime}\n"), + MESSAGE_32("您有一位加盟商待安排体验门店及体验时间,请查收","##### 加盟商姓名:${partnerUsername}\n##### 加盟商手机号码:${partnerMobile}\n"), + MESSAGE_33("您有一位加盟商已放弃门店体验,请查收","##### 加盟商姓名:${partnerUsername}\n##### 加盟商手机号码:${partnerMobile}\n"), + + + + + ; + + private String title; + + private String content; + + MessageEnum(String title, String content) { + this.title = title; + this.content = content; + } + + public String getTitle() { + return title; + } + + public String getContent() { + return content; + } + + public String getContent(Map paramMap) { + String result = this.content; + for (String key : paramMap.keySet()) { + result = result.replace("${" + key + "}", paramMap.get(key)); + } + return result; + } + + public String getImageUrl() { + return "https://oss-store.coolcollege.cn/xfsg_notice.png"; + } + + + public String getMessageUrl(String domainUrl, String appId, String corpId, Map paramMap) { + if (StringUtils.isAnyBlank(domainUrl, appId, corpId) || Objects.isNull(paramMap)) { + return ""; + } + try { + switch (this) { + case MESSAGE_1: + case MESSAGE_2: + case MESSAGE_3_1: + case MESSAGE_4: + case MESSAGE_5: + case MESSAGE_6: + case MESSAGE_7: + case MESSAGE_8: + case MESSAGE_9: + case MESSAGE_29: + case MESSAGE_30: + return domainUrl + "/dd-noticemsg?appId=" + appId + "&corpId=" + corpId + "&appUrl=" + + URLEncoder.encode("pages/common-web-view/index?noticeType=xfsg&routerUrl=notice&target=clue×tamp=" + System.currentTimeMillis() + "&lineId=" + paramMap.get("lineId"), StandardCharsets.UTF_8.name()); + case MESSAGE_3: + case MESSAGE_10: + return domainUrl + "/dd-noticemsg?appId=" + appId + "&corpId=" + corpId + "&appUrl=" + + URLEncoder.encode("pages/common-web-view/index?noticeType=xfsg&routerUrl=notice&target=interview×tamp=" + System.currentTimeMillis() + "&lineId=" + paramMap.get("lineId"), StandardCharsets.UTF_8.name()); + case MESSAGE_11: + case MESSAGE_12: + return domainUrl + "/dd-noticemsg?appId=" + appId + "&corpId=" + corpId + "&appUrl=" + + URLEncoder.encode("pages/common-web-view/index?noticeType=xfsg&routerUrl=notice&target=point×tamp=" + System.currentTimeMillis() + "&pointId=" + paramMap.get("pointId"), StandardCharsets.UTF_8.name()); + case MESSAGE_13: + return "dingtalk://dingtalkclient/action/open_micro_app?appId=" + appId + "&corpId=" + corpId + "&page=" + + URLEncoder.encode("pages/common-web-view/index?noticeType=xfsg&routerUrl=notice&target=point×tamp=" + System.currentTimeMillis() + "&pointId=" + paramMap.get("pointId"), StandardCharsets.UTF_8.name()); + case MESSAGE_14: + return "dingtalk://dingtalkclient/action/open_micro_app?appId=" + appId + "&corpId=" + corpId + "&page=" + + URLEncoder.encode("pages/common-web-view/index?noticeType=xfsg&routerUrl=notice&target=franchiseeDetails×tamp=" + System.currentTimeMillis() + "&lineId=" + paramMap.get("lineId"), StandardCharsets.UTF_8.name()); + case MESSAGE_15: + case MESSAGE_10_1: + case MESSAGE_31: + case MESSAGE_32: + case MESSAGE_33: + //跳转我的加盟商的加盟商详情都可以使用这个 + return domainUrl + "/dd-noticemsg?appId=" + appId + "&corpId=" + corpId + "&appUrl=" + + URLEncoder.encode("pages/common-web-view/index?noticeType=xfsg&routerUrl=notice&target=franchiseeDetails×tamp=" + System.currentTimeMillis() + "&lineId=" + paramMap.get("lineId"), StandardCharsets.UTF_8.name()); + case MESSAGE_21: + return domainUrl + "/dd-noticemsg?appId="+appId+"&corpId="+corpId+"&page=" + + URLEncoder.encode("pages/common-web-view/index?noticeType=xfsg&routerUrl=notice&target=employeeTraining×tamp="+System.currentTimeMillis()+"&userDetailId="+ paramMap.get("userDetailId"), StandardCharsets.UTF_8.name()); + case MESSAGE_22: + return "dingtalk://dingtalkclient/action/open_micro_app?appId="+appId+"&corpId="+corpId+"&page=" + + URLEncoder.encode("pages/common-web-view/index?noticeType=xfsg&routerUrl=notice&target=trainerUser×tamp="+System.currentTimeMillis()+"&userDetailId="+ paramMap.get("userDetailId"), StandardCharsets.UTF_8.name()); + case MESSAGE_24: + return "dingtalk://dingtalkclient/action/open_micro_app?appId="+appId+"&corpId="+corpId+"&page=" + + URLEncoder.encode("pages/common-web-view/index?noticeType=xfsg&routerUrl=notice&target=threeAcceptance×tamp="+System.currentTimeMillis(), StandardCharsets.UTF_8.name()); + case MESSAGE_25: + return "dingtalk://dingtalkclient/action/open_micro_app?appId="+appId+"&corpId="+corpId+"&page=" + + URLEncoder.encode("pages/common-web-view/index?noticeType=xfsg&routerUrl=notice&target=threeAcceptance×tamp="+System.currentTimeMillis(), StandardCharsets.UTF_8.name()); + case MESSAGE_26: + return domainUrl + "/dd-noticemsg?appId=" + appId + "&corpId=" + corpId + "&appUrl=" + + URLEncoder.encode("pages/common-web-view/index?noticeType=xfsg&routerUrl=notice&target=openPlan×tamp=" + System.currentTimeMillis() +"&lineId="+ paramMap.get("lineId")+"&shopId="+ paramMap.get("shopId"), StandardCharsets.UTF_8.name()); + case MESSAGE_27: + return domainUrl + "/dd-noticemsg?appId=" + appId + "&corpId=" + corpId + "&appUrl=" + + URLEncoder.encode("pages/common-web-view/index?noticeType=xfsg&routerUrl=notice&target=orderList×tamp=" + System.currentTimeMillis() +"&lineId="+ paramMap.get("lineId"), StandardCharsets.UTF_8.name()); + case MESSAGE_28: + return "dingtalk://dingtalkclient/action/open_micro_app?appId="+appId+"&corpId="+corpId+"&page=" + + URLEncoder.encode("pages/common-web-view/index?noticeType=xfsg&routerUrl=notice&target=eyeAcceptance×tamp="+System.currentTimeMillis()+"&shopId="+ paramMap.get("shopId"), StandardCharsets.UTF_8.name()); + case MESSAGE_16: + return domainUrl + "/dd-noticemsg?appId=" + appId + "&corpId=" + corpId + "&appUrl=" + + URLEncoder.encode("pages/common-web-view/index?noticeType=xfsg&routerUrl=notice&target=sysStoreSchedule×tamp=" + System.currentTimeMillis() +"&lineId="+ paramMap.get("lineId")+"&shopId="+ paramMap.get("shopId"), StandardCharsets.UTF_8.name()); + case MESSAGE_17: + return domainUrl + "/dd-noticemsg?appId=" + appId + "&corpId=" + corpId + "&appUrl=" + + URLEncoder.encode("pages/common-web-view/index?noticeType=xfsg&routerUrl=notice&target=licenseSchedule×tamp=" + System.currentTimeMillis() +"&lineId="+ paramMap.get("lineId")+"&shopId="+ paramMap.get("shopId"), StandardCharsets.UTF_8.name()); + case MESSAGE_18: + case MESSAGE_23: + return domainUrl + "/dd-noticemsg?appId=" + appId + "&corpId=" + corpId + "&appUrl=" + + URLEncoder.encode("pages/common-web-view/index?noticeType=xfsg&routerUrl=notice&target=franchiseeSchedule×tamp=" + System.currentTimeMillis() +"&lineId="+ paramMap.get("lineId")+"&shopId="+ paramMap.get("shopId"), StandardCharsets.UTF_8.name()); + case MESSAGE_19: + case MESSAGE_20: + return domainUrl + "/dd-noticemsg?appId=" + appId + "&corpId=" + corpId + "&appUrl=" + + URLEncoder.encode("pages/common-web-view/index?noticeType=xfsg&routerUrl=notice&target=contractSchedule×tamp=" + System.currentTimeMillis() +"&lineId="+ paramMap.get("lineId")+"&shopId="+ paramMap.get("shopId"), StandardCharsets.UTF_8.name()); + default: + return ""; + } + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/NodeNoEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/NodeNoEnum.java new file mode 100644 index 000000000..92aca8ffa --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/NodeNoEnum.java @@ -0,0 +1,76 @@ +package com.cool.store.enums; + +import com.google.common.collect.Lists; + +import java.util.List; + +public enum NodeNoEnum { + NODE_NO_0(0,"提交任务"), + NODE_NO_1(1,"第一级审批"), + NODE_NO_2(2,"第二级审批"), + NODE_NO_3(3,"第三级审批"), + NODE_NO_4(4,"第四级审批"), + NODE_NO_5(5,"第五级审批"), + NODE_NO_100(100,"结束"), + + ; + + private Integer code; + + private String typeName; + + NodeNoEnum(Integer code, String typeName) { + this.code = code; + this.typeName = typeName; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + /** + * 获取之后的审批节点集合 + * @param nodeNo + * @return + */ + public static List getNextNodeNoList(Integer nodeNo){ + if(NodeNoEnum.NODE_NO_0.getCode().equals(nodeNo)){ + return Lists.newArrayList(NodeNoEnum.NODE_NO_1, NodeNoEnum.NODE_NO_2, NodeNoEnum.NODE_NO_3, NodeNoEnum.NODE_NO_4, NodeNoEnum.NODE_NO_5); + } + if(NodeNoEnum.NODE_NO_1.getCode().equals(nodeNo)){ + return Lists.newArrayList(NodeNoEnum.NODE_NO_2, NodeNoEnum.NODE_NO_3, NodeNoEnum.NODE_NO_4, NodeNoEnum.NODE_NO_5); + } + if(NodeNoEnum.NODE_NO_2.getCode().equals(nodeNo)){ + return Lists.newArrayList(NodeNoEnum.NODE_NO_3, NodeNoEnum.NODE_NO_4, NodeNoEnum.NODE_NO_5); + } + if(NodeNoEnum.NODE_NO_3.getCode().equals(nodeNo)){ + return Lists.newArrayList(NodeNoEnum.NODE_NO_4, NodeNoEnum.NODE_NO_5); + } + if(NodeNoEnum.NODE_NO_4.getCode().equals(nodeNo)){ + return Lists.newArrayList(NodeNoEnum.NODE_NO_5); + }else { + return Lists.newArrayList(); + } + } + + public static NodeNoEnum getByCode(Integer code){ + for(NodeNoEnum nodeNoEnum : NodeNoEnum.values()){ + if(nodeNoEnum.getCode().equals(code)){ + return nodeNoEnum; + } + } + return null; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/OpeningOperationPlanResultTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/OpeningOperationPlanResultTypeEnum.java new file mode 100644 index 000000000..484f67cc1 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/OpeningOperationPlanResultTypeEnum.java @@ -0,0 +1,28 @@ +package com.cool.store.enums; + +/** + * @Auther: WangShuo + * @Date: 2024/04/23/下午2:50 + * @Version 1.0 + * @注释: + */ +public enum OpeningOperationPlanResultTypeEnum { + WAIT_AUDIT(0,"待审核"), + PASS_AUDIT(1,"审核通过"), + REJECT_AUDIT(2,"审核未通过"); + private Integer code; + private String desc; + + OpeningOperationPlanResultTypeEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/OpeningOperationPlanSourceEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/OpeningOperationPlanSourceEnum.java new file mode 100644 index 000000000..557dac269 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/OpeningOperationPlanSourceEnum.java @@ -0,0 +1,28 @@ +package com.cool.store.enums; + +/** + * @Auther: WangShuo + * @Date: 2024/04/22/下午5:15 + * @Version 1.0 + * @注释: + */ +public enum OpeningOperationPlanSourceEnum { + NEW(0,"新增"), + SYNCHRONIZATION(1,"同步"); + + + private Integer code; + private String desc; + OpeningOperationPlanSourceEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public int getCode() { + return code; + } + + public String getDesc() { + return desc; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateLogFieldValueEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateLogFieldValueEnum.java new file mode 100644 index 000000000..cdb3cd459 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateLogFieldValueEnum.java @@ -0,0 +1,79 @@ +package com.cool.store.enums; + +/** + * @author zhangchenbiao + * @FileName: OperateLogFieldValue + * @Description: + * @date 2023-06-27 10:44 + */ +public enum OperateLogFieldValueEnum { + + ALLOCATION_USERID("allocationUserId","分配人ID"), + ALLOCATION_USERNAME("allocationUsername","分配人姓名"), + MOBILE("mobile","手机号"), + OPERATE_TIME("operateTime","操作时间"), + OPERATE_USER_ID("operateUserId","操作人id"), + OPERATE_USER_NAME("operateUsername","操作人姓名"), + REASON("reason","原因"), + PASS_REASON("passReason","通过原因"), + REJECT_PUBLIC_REASON("rejectPublicReason", "公开拒绝原因"), + REJECT_REAL_REASON("rejectRealReason", "真实拒绝原因"), + CERTIFY_FILE("certifyFile", "上传的证明文件或凭证"), + BEFORE_INVESTMENT_MANAGER_USERNAME("beforeInvestmentManagerUsername", "转让前的招商经理姓名"), + BEFORE_INVESTMENT_MANAGER_MOBILE("beforeInvestmentManagerMobile", "转让前的招商经理手机号"), + AFTER_INVESTMENT_MANAGER_USERNAME("afterInvestmentManagerUsername", "转让后的招商经理姓名"), + AFTER_INVESTMENT_MANAGER_MOBILE("afterInvestmentManagerMobile", "转让后的招商经理手机好"), + + INTERVIEW_AGREEMENT_RAW_DATETIME("rawInterviewDateTime", "同意的面试预约原始申请时间"), + INTERVIEW_PLAN_ID("interviewPlanId", "面试计划id"), + + BEFORE_INTERVIEW_TIME("beforeInterviewTime", "修改前的面试时间"), + AFTER_INTERVIEW_TIME("afterInterviewTime", "修改后的面试时间"), + + BEFORE_INTERVIEWR_NAME("beforeInterviewrName", "委托前的面试官姓名"), + AFTER_INTERVIEWR_NAME("afterInterviewrName", "委托后的面试官姓名"), + BEFORE_INTERVIEWR_MOBILE("beforeInterviewrMobile", "委托前的面试官手机号"), + AFTER_INTERVIEWR_MOBILE("afterInterviewrMobile", "委托后的面试官手机号"), + + SUMMARY("summary", "面试总结"), + QUALI_VERIFY_CONTENT("qualiVerifyContent", "资质审核内容"), + + BEFORE_USERINFO_UPDATE("beforeUserinfoUpdate", "修改前的用户信息"), + AFTER_USERINFO_UPDATE("afterUserinfoUpdate", "修改后的用户信息"), + + BEFORE_BASE_INFO_UPDATE("beforeBaseInfoUpdate", "修改前的意向书基本信息"), + AFTER_BASE_INFO_UPDATE("afterBaseInfoUpdate", "修改后的意向书基本信息"), + + BEFORE_INTENT_INFO_UPDATE("beforeIntentInfoUpdate", "修改前的意向行业信息"), + AFTER_INTENT_INFO_UPDATE("afterIntentInfoUpdate", "修改后的意向行业信息"), + + BEFORE_CLERK_INFO_UPDATE("beforeClerkUpdate", "修改前的意向书员工信息"), + AFTER_CLERK_INFO_UPDATE("afterClerkUpdate", "修改后的意向书员工信息"), + FOLLOW_LOG("followLog", "跟进日志"), + FOLLOW_TASK_ID("followTaskId", "跟进任务id"), + ADD_LABELS("addLabels", "新增标签"), + REMOVE_LABELS("removeLabels", "移除标签"), + CALL_TRANS_NO("transNo", "呼叫请求编号"), + INCOMING_USER_ID("incomingUserId", "接听人用户id"), + INCOMING_USER_NAME("incomingUserName", "接听人用户姓名"), + ; + + + private String code; + + private String name; + + + OperateLogFieldValueEnum(String code, String name) { + this.code = code; + this.name = name; + } + + public String getCode() { + return code; + } + + public String getName() { + return name; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java new file mode 100644 index 000000000..c9d50e645 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java @@ -0,0 +1,89 @@ +package com.cool.store.enums; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.cool.store.enums.OperateLogFieldValueEnum.*; + +/** + * @author zhangchenbiao + * @FileName: OperateTypeEnum + * @Description: + * @date 2023-06-27 10:41 + */ +public enum OperateTypeEnum { + + EC_SYNC_ADD_LINE("ec_sync_add_line", "ec同步新增线索", Arrays.asList(MOBILE,OPERATE_TIME, OPERATE_USER_ID, OPERATE_USER_NAME)), + ADD_LINE("add_line", "新增线索", Arrays.asList(MOBILE,OPERATE_TIME, OPERATE_USER_ID, OPERATE_USER_NAME)), + ALLOCATION_INVESTMENT_MANAGER("allocation_investment_manager", "分配招商经理", Arrays.asList(ALLOCATION_USERID,ALLOCATION_USERNAME, MOBILE, OPERATE_TIME)), + ADD_BLACKLIST("add_blacklist", "加入黑名单", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, REASON)), + REMOVE_BLACKLIST("remove_blacklist", "移除黑名单", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, REASON)), + CLOSE_FOLLOW("close_follow", "结束跟进", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, REJECT_PUBLIC_REASON, REJECT_REAL_REASON, CERTIFY_FILE)), + TRANSFER_INVESTMENT_MANAGER("transfer_investment_manager", "转让招商经理", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, BEFORE_INVESTMENT_MANAGER_USERNAME, BEFORE_INVESTMENT_MANAGER_MOBILE, AFTER_INVESTMENT_MANAGER_USERNAME, AFTER_INVESTMENT_MANAGER_MOBILE)), + INTERVIEW_APPOINTMENT("interview_appointment", "预约面试时间", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME)), + INTERVIEW_APPOINTMENT_AGREEMENT("interview_appointment_agreement", "同意面试预约申请", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, INTERVIEW_AGREEMENT_RAW_DATETIME, INTERVIEW_PLAN_ID)), + AUTO_OPEN_INTERVIEW("auto_open_interview", "自动打开面试房间", Arrays.asList(OPERATE_TIME)), + INTERVIEWER_BOOK_INTERVIEW("interviewer_book_interview", "招商经理主动预约面试时间", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME)), + MODIFY_INTERVIEW_TIME("modify_interview_time", "修改面试时间", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, BEFORE_INTERVIEW_TIME, AFTER_INTERVIEW_TIME)), + ENTRUST_OTHERS("entrust_others", "委托他人", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, BEFORE_INTERVIEWR_NAME, AFTER_INTERVIEWR_NAME, BEFORE_INTERVIEWR_MOBILE, AFTER_INTERVIEWR_MOBILE)), + + FINISH_INTERVIEW("finish_interview", "合作资格面试-结束面试", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME)), + + REINTERVIEW("reinterview", "合作资格面试-重新预约面试", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME,REJECT_REAL_REASON, CERTIFY_FILE)), + + REJECT_INTERVIEW("reject_interview", "合作资格面试-拒绝并结束跟进", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, REJECT_PUBLIC_REASON,REJECT_REAL_REASON, CERTIFY_FILE)), + CREATE_QUALIFYVERIFY("create_qualifyverify", "合作资格面试-创建资格审核", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME,SUMMARY,QUALI_VERIFY_CONTENT)), + EXHIBITION_CREATE_QUALIFYVERIFY("exhibition_create_qualifyverify", "会销资格面试-创建资格审核", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME,SUMMARY,QUALI_VERIFY_CONTENT)), + QUALIFYVERIFY_PASS("qualifyverify_pass", "合作资格面试-审核通过", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME,SUMMARY,QUALI_VERIFY_CONTENT)), + QUALIFYVERIFY_REJECT("qualifyverify_reject", "合作资格面试-审核拒绝", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME,SUMMARY,QUALI_VERIFY_CONTENT)), + + USERINFO_UPDATE("userinfo_update", "修改(修改意向信息)", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, BEFORE_USERINFO_UPDATE, AFTER_USERINFO_UPDATE)), + INTENT_INFO_SUBMIT("intent_info_submit", "提交意向申请书", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, AFTER_BASE_INFO_UPDATE, AFTER_INTENT_INFO_UPDATE, AFTER_CLERK_INFO_UPDATE)), + INTENT_INFO_UPDATE("intent_info_update", "修改意向申请书", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, BEFORE_BASE_INFO_UPDATE, AFTER_BASE_INFO_UPDATE, BEFORE_INTENT_INFO_UPDATE, AFTER_INTENT_INFO_UPDATE, BEFORE_CLERK_INFO_UPDATE, AFTER_CLERK_INFO_UPDATE)), + ADD_TAGS("add_tags", "修改用户画像", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, ADD_LABELS, REMOVE_LABELS)), + ADD_FOLLOW_LOG("add_follow_log", "新增根据日志", Arrays.asList(FOLLOW_LOG)), + ADD_FOLLOW_TASK("add_follow_task", "新增跟进任务", Arrays.asList(FOLLOW_TASK_ID)), + + CALL_UP("call_up", "拨打电话", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, OPERATE_TIME, CALL_TRANS_NO,INCOMING_USER_ID,INCOMING_USER_NAME)), + + ; + + private String code; + + private String name; + + private List filedList; + + private static Map operateTypeEnumMap; + + static { + operateTypeEnumMap = new HashMap<>(); + for (OperateTypeEnum operateTypeEnum : OperateTypeEnum.values()) { + operateTypeEnumMap.put(operateTypeEnum.getCode(), operateTypeEnum); + } + } + + OperateTypeEnum(String code, String name, List filedList) { + this.code = code; + this.name = name; + this.filedList = filedList; + } + + public String getCode() { + return code; + } + + public String getName() { + return name; + } + + public List getFiledList() { + return filedList; + } + + public static OperateTypeEnum getOperateTypeEnum(String code) { + return operateTypeEnumMap.get(code); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/OperationLogTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/OperationLogTypeEnum.java new file mode 100644 index 000000000..54ed24023 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/OperationLogTypeEnum.java @@ -0,0 +1,32 @@ +package com.cool.store.enums; + +/** + * @Author suzhuhong + * @Date 2024/3/29 18:06 + * @Version 1.0 + */ +public enum OperationLogTypeEnum { + + TRANSFER_INVESTMENT_MANAGER(1, "转让招商经理_线索"), + ENTRUST_INTERVIEW(2, "委托面试"), + TRANSFER_INVESTMENT_MANAGER_3(3, "转让招商经理_加盟商"); + + private final int code; + private final String description; + + OperationLogTypeEnum(int code, String description) { + this.code = code; + this.description = description; + } + + public int getCode() { + return code; + } + + public String getDescription() { + return description; + } + + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/PageTurnTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/PageTurnTypeEnum.java new file mode 100644 index 000000000..5341a25b5 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/PageTurnTypeEnum.java @@ -0,0 +1,23 @@ +package com.cool.store.enums; + + +public enum PageTurnTypeEnum { + + PREVIOUS("previous"), + NEXT("next"); + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + private String text; + + PageTurnTypeEnum(String text) { + this.text = text; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/PlatFormTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/PlatFormTypeEnum.java new file mode 100644 index 000000000..e472f7d2d --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/PlatFormTypeEnum.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 zhangchenbiao + * @FileName: PlatFormTypeEnum + * @Description: + * @date 2023-06-08 16:43 + */ +public enum PlatFormTypeEnum { + + /** + * 菜单类型 + */ + PC("PC","pc端菜单"), + ; + + private String code; + private String msg; + + protected static final Map map = Arrays.stream(values()).collect( + Collectors.toMap(PlatFormTypeEnum::getCode, Function.identity())); + + PlatFormTypeEnum(String code, String msg){ + this.code=code; + this.msg=msg; + } + + public String getCode() { + return code; + } + + public String getMsg() { + return msg; + } + public static PlatFormTypeEnum getByCode(String code) { + return map.get(code); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ReceivingBankEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ReceivingBankEnum.java new file mode 100644 index 000000000..b1e29c3ea --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ReceivingBankEnum.java @@ -0,0 +1,44 @@ +package com.cool.store.enums; + +public enum ReceivingBankEnum { + + XFSG_RECEIVING_BANK("鲜丰水果股份有限公司","33050161642700001117","中国建设银行浙江省分行文晖支行"), + + + ; + + + private String accountName; + private String accountNum; + private String bank; + + ReceivingBankEnum(String accountName, String accountNum, String bank) { + this.accountName = accountName; + this.accountNum = accountNum; + this.bank = bank; + } + + public String getAccountName() { + return accountName; + } + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + public String getAccountNum() { + return accountNum; + } + + public void setAccountNum(String accountNum) { + this.accountNum = accountNum; + } + + public String getBank() { + return bank; + } + + public void setBank(String bank) { + this.bank = bank; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/RentTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/RentTypeEnum.java new file mode 100644 index 000000000..d24137da4 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/RentTypeEnum.java @@ -0,0 +1,32 @@ +package com.cool.store.enums; + +/** + * @author zhangchenbiao + * @FileName: RentTypeEnum + * @Description: + * @date 2024-04-16 11:47 + */ +public enum RentTypeEnum { + + RENT(1,"铺位直租"), + OWN(2,"自有铺位"), + ; + ; + + private Integer code; + + private String message; + + RentTypeEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ResponseCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ResponseCodeEnum.java new file mode 100644 index 000000000..3305b8d0d --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ResponseCodeEnum.java @@ -0,0 +1,38 @@ +package com.cool.store.enums; + + +/** + * @author Aaron + * @Description 业务统一返回码 + * @date 2019/12/20 + */ +public enum ResponseCodeEnum { + /** + * 成功返回 + */ + SUCCESS(200000, "SUCCESS"); + + /** + * 返回码 + */ + private int code; + + /** + * 返回信息 + */ + private String message; + + ResponseCodeEnum(int code, String message) { + this.code = code; + this.message = message; + } + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } + +} 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..a96ff34ff --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java @@ -0,0 +1,60 @@ +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 + */ + /** + * 事件消息监听 + */ + FEI_SHU_EVENT_LISTENER("fei_shu_event_listener", new ArrayList<>(Arrays.asList(RocketMqTagEnum.USER_EVENT, RocketMqTagEnum.AUTH_SCOPE_CHANGE, RocketMqTagEnum.DEPT_EVENT))), + SYNC_TRAINING_PERSON("sync_training_person", new ArrayList<>(Arrays.asList(RocketMqTagEnum.SYNC_TRAINING_PERSON, RocketMqTagEnum.SYNC_TRAINING_SHOP_PERSON))), + + ; + + private final String group; + + private final List tagList; + + + RocketMqGroupEnum(String group,List tagList) { + this.group = group; + 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..7d63426bd --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java @@ -0,0 +1,53 @@ +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 { + + AUTH_SCOPE_CHANGE("auth_scope_change","授权范围变更"), + USER_EVENT("user_event","钉钉通讯录变更事件"), + DEPT_EVENT("dept_event","部门事件"), + STORE_DING_QUEUE("store_ding_queue", "微应用钉钉消息发送"), + SYNC_TRAINING_PERSON("sync_training_person", "建店完成后拉取培训人员"), + + SYNC_TRAINING_SHOP_PERSON("sync_training_shop_person", "建店完成后拉取店下的培训人员"), + ; + + + 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 null; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/Role.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/Role.java new file mode 100644 index 000000000..8de661ab7 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/Role.java @@ -0,0 +1,116 @@ +package com.cool.store.enums; + +import lombok.Getter; +import lombok.Setter; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public enum Role { + + /** + * 管理员 + */ + MASTER("20000000", "管理员", 1,"master"), + /** + * 子管理员 + */ + SUB_MASTER("80000000", "子管理员", 2,"sub_master"), + /** + * 普通员工 + */ + EMPLOYEE("30000000", "未分配", 99999999,"employee"), + /** + * 部门负责人 + */ + DEPT_LEADER("40000000", "部门负责人", 10,"dept_leader"), + /** + * 店长 + */ + SHOPOWNER("50000000", "店长", 3,"shopowner"), + /** + * 运营 + */ + OPERATOR("60000000", "运营", 4,"operator"), + /** + * 店员 + */ + CLERK("70000000", "店员", 5,"clerk"), + + MYSTERIOUS_GUEST("90000000", "神秘访客", 6,"mysterious_guest"); + + + private static final Map MAP = Arrays.stream(values()).collect( + Collectors.toMap(Role::getRoleEnum, Function.identity())); + + private static final Map ROLE_ID_MAP = Arrays.stream(values()).collect( + Collectors.toMap(Role::getId, Function.identity())); + + private String id; + private String name; + @Getter + @Setter + private Integer priority; + + private String roleEnum; + + + Role(String id, String name, Integer priority, String roleEnum) { + this.id = id; + this.name = name; + this.priority = priority; + this.roleEnum=roleEnum; + } + + public String getId() { + return id; + } + + public String getName() { + return name; + } + + public String getRoleEnum() { + return roleEnum; + } + + public static Role getByCode(String code) { + return MAP.get(code); + } + + /** + * 是否是管理员 及 子管理员 + * @param code + * @return + */ + public static boolean isAdmin(String code){ + if(MASTER.getRoleEnum().equals(code) || SUB_MASTER.getRoleEnum().equals(code)){ + return true; + } + return false; + } + + /** + * 根据id 判断 是否是管理员 及 子管理员 + * @param id + * @return + */ + public static boolean isAdminById(String id){ + if(MASTER.getId().equals(id) || SUB_MASTER.getId().equals(id)){ + return true; + } + return false; + } + + /** + * 是否包含角色id + * @param roleId + * @return + */ + public static boolean isContainsRoleId(String roleId){ + return ROLE_ID_MAP.containsKey(roleId); + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/RoleSourceEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/RoleSourceEnum.java new file mode 100644 index 000000000..7d6299072 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/RoleSourceEnum.java @@ -0,0 +1,45 @@ +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/12/30 + */ +public enum RoleSourceEnum { + /** + * 职位来源 + */ + CREATE("create", "自建"), + EHR("ehr", "EHR"), + SYNC("sync", "钉钉同步"); + + private static final Map map = Arrays.stream(values()).collect( + Collectors.toMap(RoleSourceEnum::getCode, Function.identity())); + + + private String code; + private String desc; + + RoleSourceEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } + + public String getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public static RoleSourceEnum getByCode(String code) { + return map.get(code); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/RoomStatus.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/RoomStatus.java new file mode 100644 index 000000000..562e1c281 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/RoomStatus.java @@ -0,0 +1,23 @@ +package com.cool.store.enums; + +public enum RoomStatus { + WAIT_FOR_OPEN(0, "待开放"), + OPEN(1, "已开放"), + CLOSED(2, "已关闭"); + + private final int code; + private final String description; + + RoomStatus(int code, String description) { + this.code = code; + this.description = description; + } + + public int getCode() { + return code; + } + + public String getDescription() { + return description; + } +} \ No newline at end of file diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/SMSMsgEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/SMSMsgEnum.java new file mode 100644 index 000000000..93423cb2e --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/SMSMsgEnum.java @@ -0,0 +1,63 @@ +package com.cool.store.enums; + +/** + * @Author: young.yu + * @Date: 2023-09-14 14:27 + * @Description: + */ +public enum SMSMsgEnum { + + INTERVIEW_APPOINTMENT_SUCCESS("邀约面谈成功", "", "SMS_465930408"), + INTERVIEW_TIME_MODIFY("面谈时间修改", "", "SMS_467410046"), + FIRST_INTERVIEW_APPOINTMENT_SUCCESS("一次面审待预约", "", "SMS_465915456"), + FIRST_INTERVIEW_REMIND("一次面审1小时提醒", "", "SMS_465935440"), + FIRST_INTERVIEW_TIME_MODIFY("一审时间修改", "","SMS_467515078"), + FIRST_INTERVIEW_REAPPOINTMENT("一次面审重新预约", "", "SMS_465935442"), + INTENTION_PAYMENT("意向金待缴费", "", "SMS_465950414"), + INTENTION_PAYMENT_FAIL("意向金缴费失败", "", "SMS_465975442"), + INTENTION_PAYMENT_PASS("签署意向协议OA审核完成后进入门店体验阶段", "", "SMS_467400057"), + INTENTION_PAYMENT_SUCCESS("意向金审核通过", "", "SMS_465885415"), + INTENTION_PROTOCOL_FAIL("意向协议审核未通过", "", "SMS_465910434"), + SECOND_INTERVIEW_APPOINTMENT("二审面审待预约", "", "SMS_465950416"), + SECOND_INTERVIEW_REMIND("二审前1小时提醒", "", "SMS_465925428"), + SECOND_INTERVIEW_REAPPOINTMENT("二审重新预约", "", "SMS_465940421"), + SECOND_INTERVIEW_SUCCESS("二审面审成功", "", "SMS_465980397"), + SECOND_INTERVIEW_TIME_MODIFY("二审时间修改", "", "SMS_467365053"), + SELECT_SUCCESS("选铺成功", "", "SMS_465950846"), + RENT_CONTRACT_AUDIT_FAIL("租赁合同上传未通过", "", "SMS_465955429"), + SHOP_EXPERIENCE("门店体验安排", "", "SMS_465905828"), + SYS_BUILD_STORE_DONE("系统建店已完成", "", "SMS_465916277"), + LICENSE_SUBMITTED("证照待提交", "", "SMS_465981218"), + LICENSE_NOT_PASS("证照未通过", "", "SMS_465971250"), + FRANCHISE_FEE_SUBMITTED("缴纳加盟费待缴纳", "", "SMS_465921311"), + FRANCHISE_FEE_NOT_PASS("缴纳加盟费缴纳失败", "", "SMS_465896262"), + DECORATION_MODEL_PAY("装修款待缴费", "","SMS_465961253"), + THREE_ACCEPTANCE_WAIT("三方验收待验收","","SMS_465961257"), + FIRST_ORDER("首批订货金代缴费","","SMS_467585281"), + TRAINING_REGISTER_SUCCESS("培训登记中", "", "SMS_466035101"), + TRAINING_ASSESSMENT_SUCCESS("员工培训已完成", "", "SMS_465901266"), + + ; + + private String title; + private String content; + private String templateCode; + + SMSMsgEnum(String title, String content, String templateCode) { + this.title = title; + this.content = content; + this.templateCode = templateCode; + } + + public String getTitle() { + return title; + } + + public String getContent() { + return content; + } + + public String getTemplateCode() { + return templateCode; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ShopAuditInfoDeletedEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ShopAuditInfoDeletedEnum.java new file mode 100644 index 000000000..f9a966a15 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ShopAuditInfoDeletedEnum.java @@ -0,0 +1,27 @@ +package com.cool.store.enums; + +/** + * @Auther: WangShuo + * @Date: 2024/04/22/下午5:04 + * @Version 1.0 + * @注释: + */ +public enum ShopAuditInfoDeletedEnum { + NO_DELETED(0,"不删除"), + DELETED(1,"删除"); + + private Byte code; + private String desc; + ShopAuditInfoDeletedEnum(Integer code, String desc) { + this.code = code.byteValue(); + this.desc = desc; + } + + public Byte getCode() { + return code; + } + + public String getDesc() { + return desc; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ShopRentTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ShopRentTypeEnum.java new file mode 100644 index 000000000..9d862b98c --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ShopRentTypeEnum.java @@ -0,0 +1,32 @@ +package com.cool.store.enums; + +/** + * @author zhangchenbiao + * @FileName: RentTypeEnum + * @Description: + * @date 2024-04-16 11:47 + */ +public enum ShopRentTypeEnum { + + FIXED(1,"固定租金"), + NOT_FIXED(2,"非固定租金"), + ; + ; + + private Integer code; + + private String message; + + ShopRentTypeEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/SignTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/SignTypeEnum.java new file mode 100644 index 000000000..bd5bd8e53 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/SignTypeEnum.java @@ -0,0 +1,63 @@ +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; + +public enum SignTypeEnum { + TRANSFER(0,"转让","A104"), + NEW_SIGNING(1,"新签","A101"), + RENEWAL(2,"续签","A102"), + RELOCATION (3,"迁址","A103"), + NEW_SIGNING_INDUSTRIES(5,"新签同异业转化","A105"), + + ; + + private Integer code; + private String desc; + private String sap; + + + SignTypeEnum(Integer code, String desc,String sap) { + this.code = code; + this.desc = desc; + this.sap =sap; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public String getSap() { + return sap; + } + + public void setSap(String sap) { + this.sap = sap; + } + + protected static final Map map = Arrays.stream(values()).collect( + Collectors.toMap(SignTypeEnum::getCode, Function.identity())); + + public static SignTypeEnum getWorkflowStageByCode(Integer code) { + if(code == null) { + return null; + } + return map.get(code); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/SignUpStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/SignUpStatusEnum.java new file mode 100644 index 000000000..11cb135fe --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/SignUpStatusEnum.java @@ -0,0 +1,39 @@ +package com.cool.store.enums; + +import java.text.MessageFormat; + +/** + * @Author suzhuhong + * @Date 2023/12/11 13:56 + * @Version 1.0 + */ +public enum SignUpStatusEnum { + + Sign_UP_FAIL_1("会销结束","你报名的展会已结束 请确认!"), + Sign_UP_FAIL_2("不符合报名条件","该线索已录入系统但不符合报名要求,当前处于【{0}:{1}】状态,建议客户经理以当前状态正常推进,勿占用展会名额。"), + Sign_UP_FAIL_3("报名同一个会销组内会销","线索已报名本批次会销组中的“{0}”场次,切勿重复录入"), + Sign_UP_FAIL_4("不符合报名条件—黑名单","该线索已录入系统但不符合报名要求,当前处于【黑名单】状态,建议客户经理以当前状态正常推进,勿占用展会名额。"); + + private String signUpTitle; + private String signUpFailMsg; + + + SignUpStatusEnum(String signUpTitle, String signUpFailMsg) { + this.signUpTitle = signUpTitle; + this.signUpFailMsg = signUpFailMsg; + } + + public String getSignUpTitle() { + return signUpTitle; + } + + public String getSignUpFailMsg() { + return signUpFailMsg; + } + + public static String getSignUpFailMsg(SignUpStatusEnum signUpStatusEnum,Object... objects) { + return MessageFormat.format(signUpStatusEnum.getSignUpFailMsg(),objects); + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/SmsCodeTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/SmsCodeTypeEnum.java new file mode 100644 index 000000000..b439c20e5 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/SmsCodeTypeEnum.java @@ -0,0 +1,43 @@ +package com.cool.store.enums; + + +public enum SmsCodeTypeEnum { + + LOGIN("SMS_220325070","验证码登录", 10 * 60), + FORGOT_PWD("SMS_220325070","忘记密码", 10 * 60), + MODIFY_PWD("SMS_220325070","修改密码", 10 * 60), + IMPROVE_INFO("SMS_220325070","完善用户信息", 10 * 60), + USER_REGISTER("SMS_220325070","用户注册", 10 * 60), + ENTERPRISE_REGISTER("SMS_220325070","企业注册", 10 * 60), + LOGIN2("SMS_232163403","验证码登录", 10 * 60), + + + + + + ; + + private String templateCode; + + private String message; + + private int cacheSeconds; + + SmsCodeTypeEnum(String templateCode, String message, int cacheSeconds) { + this.templateCode = templateCode; + this.message = message; + this.cacheSeconds = cacheSeconds; + } + + public String getTemplateCode() { + return templateCode; + } + + public String getMessage() { + return message; + } + + public int getCacheSeconds() { + return cacheSeconds; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/StorageStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/StorageStatusEnum.java new file mode 100644 index 000000000..c471a388b --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/StorageStatusEnum.java @@ -0,0 +1,33 @@ +package com.cool.store.enums; + +/** + * @author zhangchenbiao + * @FileName: StorageStatusEnum + * @Description: + * @date 2024-04-30 13:47 + */ +public enum StorageStatusEnum { + + //入库状态1已入库 2暂未入库 + IN_STORAGE(1, "已入库"), + NOT_IN_STORAGE(2, "暂未入库"), + ; + + + + private Integer code; + private String desc; + + StorageStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ThirdRegionTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ThirdRegionTypeEnum.java new file mode 100644 index 000000000..132ef30c6 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ThirdRegionTypeEnum.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; + +/** + * 区域类型 0-根;1=大区;2=战区;3=小区(督导区);4=门店 + * @author wxp + */ +public enum ThirdRegionTypeEnum { + + ROOT("0","根"), + LARGE_REGION("1","大区"), + WAR_REGION("2","战区"), + COMMUNITY_REGION("3","小区"), + STORE("4","门店"); + + private String code; + private String desc; + + public static final Map map = Arrays.stream(values()).collect( + Collectors.toMap(ThirdRegionTypeEnum::getCode, Function.identity())); + + ThirdRegionTypeEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } + + public String getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public static ThirdRegionTypeEnum getByCode(String code) { + return map.get(code); + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/TrajectoryTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/TrajectoryTypeEnum.java new file mode 100644 index 000000000..54170e08b --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/TrajectoryTypeEnum.java @@ -0,0 +1,130 @@ +package com.cool.store.enums; + +/** + * @author hxd + */ + +public enum TrajectoryTypeEnum { + + /** + * 联系轨迹类型* + */ + SEND_NOTE(1001, "发送短信",""), + DIAL_MOBILE(1002, "拨打对方电话",""), + WEBSITE_CUSTOMER_MOBILE(1003, "网站客服会话",""), + EC_SESSION(1004, "EC会话",""), + QQ_SESSION(1005, "QQ会话",""), + SEND_EMAIL(1006, "发送邮件",""), + ANSWER_MOBILE(1007, "接听对方电话",""), + ANSWER_EMAIL(1008, "接收邮件",""), + CALL_MEETING(1009, "电话会议",""), + DIAL_CLOUD_MOBILE(1010, "拨打云总机电话",""), + ANSWER_CLOUD_MOBILE(1011, "接听云总机电话",""), + + /** + * 提醒类 + */ + REGULARLY_REMIND(2001, "定时提醒",""), + REMINDER_SALES_PROGRAM(2002, "提醒销售计划",""), + CALENDAR_REMINDER(2003, "日历提醒",""), + + + + + /** + * 文本类型 + */ + ADD_CUSTOMER(3001, "新增客户",""), + ADD_CUSTOMER_DATA(3002, "新增客户资料",""), + UPDATE_CUSTOMER_DATA(3003, "更新客户资料",""), + UPDATE_CUSTOMER_LABEL(3004, "更新客户标签",""), + RELEVANCE_EC(3005, "关联EC",""), + CANCEL_RELEVANCE_EC(3006, "取消EC关联",""), + RELEVANCE_QQ(3007, "关联QQ",""), + CANCEL_RELEVANCE_QQ(3008, "取消QQ关联",""), + TRANSFER_CUSTOMER(3009, "转让客户","将此客户转换了给"), + MERGE_CUSTOMER(3010, "合并客户",""), + ALLOCATION_CUSTOMER(3011, "分配客户","分配此客户给"), + GET_CUSTOMER(3012, "领取客户","领取了此客户"), + ABANDON_CUSTOMER(3013, "放弃客户",""), + ADD_MARKER_PLAN(3014, "添加销售计划",""), + UPDATE_MARKER_PLAN(3015, "修改销售计划",""), + USE_MARKER_TEMPLATE(3016, "使用销售模板",""), + UPDATE_CUSTOMER_STAGE(3017, "更新客户阶段",""), + RELEVANCE_COMPANY(3018, "关联公司",""), + CANCEL_RELEVANCE_COMPANY(3019, "取消公司关联",""), + UPLOAD_PHOTO_AVATAR(3020, "上传头像",""), + ADD_SHARE_COLLEAGUE(3021, "新增共享同事",""), + CANCEL_SHARE_COLLEAGUE(3022, "取消共享同事",""), + CANCEL_RELEVANCE(3023, "退出共享关系",""), + TRANSFER_COMPANY_IMPORT(3024, "转为公司导入",""), + ADD_CONTACT_DATA(3036, "新增联系人资料",""), + UPDATE_CONTACT_DATA(3037, "更新联系人资料",""), + ADD_CONTACT(3038, "新增联系人",""), + DELETE_CONTACT(3039, "删除联系人",""), + DELETE_ORDERS(3040, "删除订单",""), + DELETE_CUSTOMER(3041, "删除客户",""), + TRANSFER_CUSTOMER_TYPE(3042, "转换客户类型",""), + + /** + * 跟进记录类 + */ + ADD_FOLLOW_RECORD(4000, "添加跟进记录",""), + + /** + * 微信类 + */ + WECHAT_ACTIVITY(6000, "微信活动",""), + /** + * 拜访客户类 + */ + VISITING_CLIENTS(7000, "拜访客户类",""); + + + private final Integer value; + private final String showText; + private final String jointText; + + TrajectoryTypeEnum(Integer value, String showText,String jointText) { + this.value = value; + this.showText = showText; + this.jointText = jointText; + } + + public Integer getValue() { + return value; + } + + public String getShowText() { + return showText; + } + + + public String getJointText() { + return jointText; + } + + + public static String getShowText(Integer value) { + for (TrajectoryTypeEnum trajectoryTypeEnum : TrajectoryTypeEnum.values()) { + if (trajectoryTypeEnum.getValue().equals(value)) { + return trajectoryTypeEnum.getShowText(); + } + } + return ""; + } + + + public static String getJointText(Integer value) { + for (TrajectoryTypeEnum trajectoryTypeEnum : TrajectoryTypeEnum.values()) { + if (trajectoryTypeEnum.getValue().equals(value)) { + return trajectoryTypeEnum.getJointText(); + } + } + return ""; + } + + + + +} 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/UserChannelEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/UserChannelEnum.java new file mode 100644 index 000000000..e07b1346c --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/UserChannelEnum.java @@ -0,0 +1,35 @@ +package com.cool.store.enums; + +/** + * @Author suzhuhong + * @Date 2023/7/18 17:01 + * @Version 1.0 + */ +public enum UserChannelEnum { + + EXHIBITION("EXHIBITION","北京展会"), + RECOMMENDED("RECOMMENDED","李德龙推荐"), + + ADD("46919","人工创建"), + + SMS_INVATE("","短信邀约"); + + + + private final String code; + private final String desc; + + UserChannelEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } + + public String getCode() { + return code; + } + + + public String getDesc() { + return desc; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/UserPlatformTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/UserPlatformTypeEnum.java new file mode 100644 index 000000000..c8867b97f --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/UserPlatformTypeEnum.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: UserPlatformTypeEnum + * @Description: 用户平台类型 + * @date 2023-06-13 17:12 + */ +public enum UserPlatformTypeEnum { + + WECHAT("wechat", "微信"), + DOUYIN("douyin", "抖音"), + WEIBO("weibo", "微博"); + + private String code; + + private String msg; + + protected static final Map map = Arrays.stream(values()).collect( + Collectors.toMap(UserPlatformTypeEnum::getCode, Function.identity())); + + UserPlatformTypeEnum(String code, String msg) { + this.code = code; + this.msg = msg; + } + + public String getCode() { + return code; + } + + public String getMsg() { + return msg; + } + + public static UserPlatformTypeEnum getByCode(String code) { + return map.get(code); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/UserPositionEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/UserPositionEnum.java new file mode 100644 index 000000000..b119a5300 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/UserPositionEnum.java @@ -0,0 +1,33 @@ +package com.cool.store.enums; + +/** + * @author zhangchenbiao + * @FileName: UserPositionEnum + * @Description:用户身份 + * @date 2023-06-19 16:37 + */ +public enum UserPositionEnum { + + INVESTMENT_MANAGER("investment_manager", "招商经理"), + INVESTMENT_LEADER("investment_leader", "招商负责人"), + DEVELOPMENT_DIRECTOR("development_director", "开发主管"), + DEVELOPMENT_MANAGER("development_manager", "开发经理"), + ; + + private String code; + + private String message; + + UserPositionEnum(String code, String message) { + this.code = code; + this.message = message; + } + + public String getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/UserRoleEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/UserRoleEnum.java new file mode 100644 index 000000000..b9cc8e095 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/UserRoleEnum.java @@ -0,0 +1,56 @@ +package com.cool.store.enums; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: UserRoleEnum + * @Description: 用户职位 + * @date 2024-03-22 16:37 + */ +public enum UserRoleEnum { + INVESTMENT_COMMISSIONER(100000000L, "招商专员"), + SELECT_SITE_COMMISSIONER(110000000L, "选址专员"), + REGION_MANAGER(120000000L, "大区执行总经理"), + THEATER_MANAGER(130000000L, "战区经理"), + OPERATIONS_MANAGER(140000000L, "营运经理"), + TRAINER(150000000L, "训练"), + XFSG_CLERK(160000000L, "店员"), + XFSG_SHOPOWNER(170000000L, "店长"), + SUPERVISION(180000000L, "督导"), + SELECT_SITE_LEADER(190000000L, "选址组长"), + SELECT_SITE_MANAGER(200000000L, "选址经理"), + INVESTMENT_MANAGER(210000000L, "招商经理"), + HEADQUARTERS_LEADER(220000000L, "总部负责人"), + HR(230000000L, "HR"), + DESIGN_MANAGER(240000000L, "品牌设计高级经理"), + ENGINEER_DEP_SUPERVISOR(250000000L, "工程部监理"), + ENGINEER_DEP_MANAGER(260000000L, "工程部高级经理"), + ; + + private Long code; + private String desc; + + protected static final Map map = Arrays.stream(values()).collect( + Collectors.toMap(UserRoleEnum::getDesc, Function.identity())); + + UserRoleEnum(Long code, String desc) { + this.code = code; + this.desc = desc; + } + + public Long getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public static UserRoleEnum getByDesc(String desc) { + return map.get(desc); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/UserStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/UserStatusEnum.java new file mode 100644 index 000000000..1484022e5 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/UserStatusEnum.java @@ -0,0 +1,52 @@ +package com.cool.store.enums; + +/** + * @author zhangchenbiao + * @FileName: UserStatusEnum + * @Description: 用户状态枚举 + * @date 2021-07-19 16:27 + */ +public enum UserStatusEnum { + //用户状态 0待审核 1正常 2冻结 + WAIT_AUDIT(0,"待审核"), + NORMAL(1,"正常"), + FREEZE(2, "冻结") + ; + + private Integer code; + + private String message; + + UserStatusEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } + + public static String getMessageByCode(Integer code){ + for(UserStatusEnum Enum: UserStatusEnum.values()){ + if(Enum.code.equals(code)){ + return Enum.message; + } + } + return null; + } + + public static Integer getCodeByMessage(String message){ + for(UserStatusEnum Enum: UserStatusEnum.values()){ + if(Enum.message.equals(message)){ + return Enum.code; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/WorkflowStageEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/WorkflowStageEnum.java new file mode 100644 index 000000000..fb9595acd --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/WorkflowStageEnum.java @@ -0,0 +1,46 @@ +package com.cool.store.enums; + +import org.apache.commons.lang3.StringUtils; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2023/6/9 16:17 + * @Version 1.0 + */ +public enum WorkflowStageEnum { + + INTENT(1,"意向申请阶段"), + STORE(2,"新店进展"), + ; + + private Integer code; + + private String message; + + WorkflowStageEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } + + protected static final Map map = Arrays.stream(values()).collect( + Collectors.toMap(WorkflowStageEnum::getCode, Function.identity())); + + public static WorkflowStageEnum getWorkflowStageByCode(String code) { + if(StringUtils.isBlank(code)) { + return null; + } + return map.get(code); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/WorkflowSubStageEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/WorkflowSubStageEnum.java new file mode 100644 index 000000000..ba7acf82b --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/WorkflowSubStageEnum.java @@ -0,0 +1,126 @@ +package com.cool.store.enums; + +/** + * @Author suzhuhong + * @Date 2024/3/19 16:53 + * @Version 1.0 + */ +public enum WorkflowSubStageEnum{ + + /** + * 流程子阶段枚举 + */ + INTEND(1, "加盟意向申请", WorkflowSubStageStatusEnum.INTENT_0,"joinIntentionServiceImpl",0), + INVITING_INTERVIEWS(5, "邀约面谈", WorkflowSubStageStatusEnum.INVITING_INTERVIEWS_10, "lineInterviewServiceImpl",2), + FIRST_INTERVIEWS(10, "一审面试", WorkflowSubStageStatusEnum.FIRST_INTERVIEWS_25, "lineInterviewServiceImpl",4), + PAY_DEPOSIT(15, "缴纳意向金", WorkflowSubStageStatusEnum.PAY_DEPOSIT_45, "bankServiceImpl",4), + SIGN_INTENT_AGREEMENT(20, "签署意向协议", WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_60, "intentAgreementServiceImpl",6), + STORE_EXPERIENCE(25, "门店体验", WorkflowSubStageStatusEnum.STORE_EXPERIENCE_85, "trainingExperienceServiceImpl",9), + SECOND_INTERVIEWS(30, "二审面试", WorkflowSubStageStatusEnum.SECOND_INTERVIEWS_100, "lineInterviewServiceImpl",10); + + private Integer code; + + private String message; + + private Integer progress; + + private WorkflowSubStageStatusEnum initStatus; + + private WorkflowSubStageEnum nextStage; + + private String clazz; + + WorkflowSubStageEnum(Integer code, String message, WorkflowSubStageStatusEnum initStatus, String clazz,Integer progress) { + this.code = code; + this.message = message; + this.initStatus = initStatus; + this.clazz = clazz; + this.progress = progress; + } + + + public Integer getCode() { + return code; + } + + public Integer getProgress() { + return progress; + } + + public String getMessage() { + return message; + } + + public WorkflowSubStageStatusEnum getInitStatus() { + return initStatus; + } + + public String getClazz() { + return clazz; + } + + public WorkflowSubStageEnum getNextStage() { + switch (this) { + case INTEND: + this.nextStage = INVITING_INTERVIEWS; + break; + case INVITING_INTERVIEWS: + this.nextStage = FIRST_INTERVIEWS; + break; + case FIRST_INTERVIEWS: + this.nextStage = PAY_DEPOSIT; + break; + case PAY_DEPOSIT: + this.nextStage = SIGN_INTENT_AGREEMENT; + break; + case SIGN_INTENT_AGREEMENT: + this.nextStage = STORE_EXPERIENCE; + break; + case STORE_EXPERIENCE: + case SECOND_INTERVIEWS: + this.nextStage = null; + break; + } + return nextStage; + } + + public static WorkflowSubStageEnum getWorkflowSubStageEnum(Integer workflowSubStage) { + for (WorkflowSubStageEnum workflowSubStageEnum : WorkflowSubStageEnum.values()) { + if (workflowSubStageEnum.getCode().equals(workflowSubStage)) { + return workflowSubStageEnum; + } + } + return null; + } + + /** + * 是否是面试阶段 + * @param workflowSubStage + * @return + */ + public static boolean isInterviewStage(Integer workflowSubStage) { + return INVITING_INTERVIEWS.getCode().equals(workflowSubStage) || FIRST_INTERVIEWS.getCode().equals(workflowSubStage) || SECOND_INTERVIEWS.getCode().equals(workflowSubStage); + } + + /** + * 是否是重新预约面试阶段 + * @param workflowSubStage + * @return + */ + public static boolean isReappointmentStage(Integer workflowSubStage) { + return FIRST_INTERVIEWS.getCode().equals(workflowSubStage) || SECOND_INTERVIEWS.getCode().equals(workflowSubStage); + } + + public static InterviewTypeEnum getInterviewType(Integer workflowSubStage){ + if(INVITING_INTERVIEWS.getCode().equals(workflowSubStage)){ + return InterviewTypeEnum.MEET; + } + if(FIRST_INTERVIEWS.getCode().equals(workflowSubStage)){ + return InterviewTypeEnum.INTERVIEW; + } + if(SECOND_INTERVIEWS.getCode().equals(workflowSubStage)){ + return InterviewTypeEnum.SECOND_INTERVIEW; + } + return null; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/WorkflowSubStageStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/WorkflowSubStageStatusEnum.java new file mode 100644 index 000000000..00f515530 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/WorkflowSubStageStatusEnum.java @@ -0,0 +1,102 @@ +package com.cool.store.enums; + +/** + * @Author suzhuhong + * @Date 2024/3/19 17:00 + * @Version 1.0 + */ +public enum WorkflowSubStageStatusEnum { + + //意向申请 + INTENT_0(0,"待提交"), + INTENT_5(5,"待审核"), + INTENT_7(7,"未通过"), + + //邀约面谈 + INVITING_INTERVIEWS_10(10,"待预约"), + INVITING_INTERVIEWS_15(15,"待面谈"), + INVITING_INTERVIEWS_20(20,"待审核"), + + //一审面试 + FIRST_INTERVIEWS_25(25,"待预约"), + FIRST_INTERVIEWS_30(30,"待面试"), + FIRST_INTERVIEWS_35(35,"待审核"), + FIRST_INTERVIEWS_40(40,"一审未通过"), + FIRST_INTERVIEWS_42(42,"一审重新预约"), + + //缴纳意向金,装修款 + PAY_DEPOSIT_45(45,"待缴费"), + PAY_DEPOSIT_50(50,"已缴费"), + PAY_FAIL_55(55,"审核未通过"), + + //签署意向协议 + SIGN_INTENT_AGREEMENT_60(60,"待补充"), + SIGN_INTENT_AGREEMENT_63(63,"待审核"), + SIGN_INTENT_AGREEMENT_65(65,"不通过"), + SIGN_INTENT_AGREEMENT_70(70,"待提交"), + SIGN_INTENT_AGREEMENT_75(75,"待OA审核"), + SIGN_INTENT_AGREEMENT_80(80,"签约失败"), + + + //门店体验 + STORE_EXPERIENCE_85(85,"待体验"), + STORE_EXPERIENCE_90(90,"体验中"), + STORE_EXPERIENCE_95(95,"放弃体验"), + + + //二审面试 + SECOND_INTERVIEWS_100(100,"待预约"), + SECOND_INTERVIEWS_105(105,"待面试"), + SECOND_INTERVIEWS_110(110,"待审核"), + SECOND_INTERVIEWS_115(115,"二审未通过"), + SECOND_INTERVIEWS_120(120,"二审重新预约"), + SECOND_INTERVIEWS_125(125,"二审通过"), + + ; + + private Integer code; + + private String message; + + WorkflowSubStageStatusEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } + + public static boolean isReappointmentStatus(Integer workflowSubStageStatus){ + return FIRST_INTERVIEWS_42.getCode().equals(workflowSubStageStatus) || SECOND_INTERVIEWS_120.getCode().equals(workflowSubStageStatus); + } + + public static boolean isModifyAppointmentTime(Integer workflowSubStageStatus){ + return INVITING_INTERVIEWS_15.getCode().equals(workflowSubStageStatus) || FIRST_INTERVIEWS_30.getCode().equals(workflowSubStageStatus) || SECOND_INTERVIEWS_105.getCode().equals(workflowSubStageStatus); + } + + public WorkflowSubStageStatusEnum getNextStatus(WorkflowSubStageStatusEnum workflowSubStageStatusEnum) { + switch (workflowSubStageStatusEnum) { + case INTENT_0: + return INTENT_5; + default: + return null; + } + } + + public static WorkflowSubStageStatusEnum getInterviewRejectStatus(InterviewTypeEnum interviewType){ + if(InterviewTypeEnum.INTERVIEW.equals(interviewType)){ + return FIRST_INTERVIEWS_40; + } + if(InterviewTypeEnum.SECOND_INTERVIEW.equals(interviewType)){ + return SECOND_INTERVIEWS_115; + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/BussinessStateEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/BussinessStateEnum.java new file mode 100644 index 000000000..cf0c70698 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/BussinessStateEnum.java @@ -0,0 +1,47 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: BussinessStateEnum + * @Description:目前经营情况 + * @date 2024-03-26 16:08 + */ +public enum BussinessStateEnum { + + // 1:营业中 2:空铺 + BUSSINESS_STATE_1(1, "营业中"), + BUSSINESS_STATE_2(2, "空铺"), + ; + + private Integer code; + + private String desc; + + BussinessStateEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public static BussinessStateEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (BussinessStateEnum bussinessStateEnum : BussinessStateEnum.values()) { + if (bussinessStateEnum.getCode().equals(code)) { + return bussinessStateEnum; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/CompeteBusinessCapacityEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/CompeteBusinessCapacityEnum.java new file mode 100644 index 000000000..fc9df948d --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/CompeteBusinessCapacityEnum.java @@ -0,0 +1,57 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: CompeteBusinessCapacityEnum + * @Description:竞争对手经营能力 + * @date 2024-03-26 16:08 + */ +public enum CompeteBusinessCapacityEnum { + + // 1.非常好 2.好 3.一般 4.差 + COMPETITOR_BUSINESS_CAPACITY_1(1, "非常好", 0), + COMPETITOR_BUSINESS_CAPACITY_2(2, "好", 1), + COMPETITOR_BUSINESS_CAPACITY_3(3, "一般", 3), + COMPETITOR_BUSINESS_CAPACITY_4(4, "差", 4), + ; + + private Integer code; + + private String desc; + + private Integer score; + + CompeteBusinessCapacityEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + public static CompeteBusinessCapacityEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (CompeteBusinessCapacityEnum value : CompeteBusinessCapacityEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/CompeteTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/CompeteTypeEnum.java new file mode 100644 index 000000000..629a49354 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/CompeteTypeEnum.java @@ -0,0 +1,57 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: CompeteTypeEnum + * @Description:竞争对手性质 + * @date 2024-03-26 16:08 + */ +public enum CompeteTypeEnum { + + // 1.连锁店 2.强势单店 3.经营散户 4.小型摊贩 + WANT_SHOP_SIZE_1(1, "连锁店", 1), + WANT_SHOP_SIZE_2(2, "强势单店", 2), + WANT_SHOP_SIZE_3(3, "经营散户", 3), + WANT_SHOP_SIZE_4(4, "小型摊贩", 5), + ; + + private Integer code; + + private String desc; + + private Integer score; + + CompeteTypeEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + + public static CompeteTypeEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (CompeteTypeEnum value : CompeteTypeEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ConsumerAbilityEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ConsumerAbilityEnum.java new file mode 100644 index 000000000..6ca9b3213 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ConsumerAbilityEnum.java @@ -0,0 +1,56 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: ConsumerAbilityEnum + * @Description:消费能力 + * @date 2024-03-26 16:08 + */ +public enum ConsumerAbilityEnum { + + //1.高端 2.中高端 3.中端 4.低端 + CONSUMER_ABILITY_1(1, "高端", 10), + CONSUMER_ABILITY_2(2, "中高端", 8), + CONSUMER_ABILITY_3(3, "中端", 6), + CONSUMER_ABILITY_4(4, "低端", 4), + ; + + private Integer code; + + private String desc; + + private Integer score; + + ConsumerAbilityEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + public static ConsumerAbilityEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (ConsumerAbilityEnum consumerAbilityEnum : ConsumerAbilityEnum.values()) { + if (consumerAbilityEnum.getCode().equals(code)) { + return consumerAbilityEnum; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/CoverCommunityEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/CoverCommunityEnum.java new file mode 100644 index 000000000..439d88cda --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/CoverCommunityEnum.java @@ -0,0 +1,56 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: CoverCommunityEnum + * @Description:覆盖社区(半径500米内) + * @date 2024-03-26 16:08 + */ +public enum CoverCommunityEnum { + + //1.800户以下 2.800-1200户 3.1200-2000户 4.2000户以上 + COVER_COMMUNITY_1(1, "800户以下", 5), + COVER_COMMUNITY_2(2, "800户-1200户", 10), + COVER_COMMUNITY_3(3, "1200户-2000户", 12), + COVER_COMMUNITY_4(4, "2000户以上", 15), + ; + + private Integer code; + + private String desc; + + private Integer score; + + CoverCommunityEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + public static CoverCommunityEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (CoverCommunityEnum coverCommunityEnum : CoverCommunityEnum.values()) { + if (coverCommunityEnum.getCode().equals(code)) { + return coverCommunityEnum; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/FlowRateCalculateEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/FlowRateCalculateEnum.java new file mode 100644 index 000000000..daa66b6bc --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/FlowRateCalculateEnum.java @@ -0,0 +1,98 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: FlowRateCalculateEnum + * @Description:人流测算(18点-20点) + * @date 2024-03-26 16:08 + */ +public enum FlowRateCalculateEnum { + + //1.>400人/时以上, 2.300~400人/时, 3.200~300人/时, 4.100~200人/时 + FLOW_RATE_CALCULATE_1(1, ">400人/时以上", 8), + FLOW_RATE_CALCULATE_2(2, "300~400人/时", 6), + FLOW_RATE_CALCULATE_3(3, "200~300人/时", 5), + FLOW_RATE_CALCULATE_4(4, "100~200人/时", 3), + ; + + private Integer code; + + private String desc; + + private Integer score; + + FlowRateCalculateEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + public static FlowRateCalculateEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (FlowRateCalculateEnum value : FlowRateCalculateEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + /** + * 获取人流测算 + * @param nineFlowRate + * @param tenFlowRate + * @param eighteenFlowRate + * @param nineteenFlowRate + * @return + */ + public static FlowRateCalculateEnum getByFlowRate(Integer nineFlowRate, Integer tenFlowRate, Integer eighteenFlowRate, Integer nineteenFlowRate){ + Integer flowRate = 0, count = 0; + if(Objects.nonNull(nineFlowRate)){ + flowRate += nineFlowRate; + count++; + } + if(Objects.nonNull(tenFlowRate)){ + flowRate += tenFlowRate; + count++; + } + if(Objects.nonNull(eighteenFlowRate)){ + flowRate += eighteenFlowRate; + count++; + } + if(Objects.nonNull(nineteenFlowRate)){ + flowRate += nineteenFlowRate; + count++; + } + if(count == 0){ + count = 1; + } + flowRate = flowRate / count; + if(flowRate > 400){ + return FLOW_RATE_CALCULATE_1; + } + if(flowRate > 300 && flowRate <= 400){ + return FLOW_RATE_CALCULATE_2; + } + if(flowRate > 200 && flowRate <= 300){ + return FLOW_RATE_CALCULATE_3; + } + return FLOW_RATE_CALCULATE_4; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/FlowRateEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/FlowRateEnum.java new file mode 100644 index 000000000..2ea51d105 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/FlowRateEnum.java @@ -0,0 +1,49 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: FlowRateEnum + * @Description:高峰期人流 + * @date 2024-03-26 16:08 + */ +public enum FlowRateEnum { + + //1:200以下 2:200~300 3:300~400 4:400以上 + FLOW_RATE_1(1, "200以下"), + FLOW_RATE_2(2, "200~300"), + FLOW_RATE_3(3, "300~400"), + FLOW_RATE_4(4, "400以上"), + ; + + private Integer code; + + private String desc; + + FlowRateEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + + public static FlowRateEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (FlowRateEnum value : FlowRateEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/GatherGuestFarmerMarketEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/GatherGuestFarmerMarketEnum.java new file mode 100644 index 000000000..ba810f9bd --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/GatherGuestFarmerMarketEnum.java @@ -0,0 +1,54 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: FarmerMarketEnum + * @Description:聚客点农贸市场 + * @date 2024-03-26 16:08 + */ +public enum GatherGuestFarmerMarketEnum { + + //1.是 2.否 + GATHER_GUEST_FARMER_MARKET_1(1, "是", 5), + GATHER_GUEST_FARMER_MARKET_2(2, "否", 3), + ; + + private Integer code; + + private String desc; + + private Integer score; + + GatherGuestFarmerMarketEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + public static GatherGuestFarmerMarketEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (GatherGuestFarmerMarketEnum value : GatherGuestFarmerMarketEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/GatherGuestHospitalEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/GatherGuestHospitalEnum.java new file mode 100644 index 000000000..4ab5ca8f7 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/GatherGuestHospitalEnum.java @@ -0,0 +1,56 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: GatherGuestHospitalEnum + * @Description:聚客点医院 + * @date 2024-03-26 16:08 + */ +public enum GatherGuestHospitalEnum { + + //1.甲等医院 2.市级医院 3.县区级医院 4.无医院 + GATHER_GUEST_HOSPITAL_1(1, "甲等医院", 5), + GATHER_GUEST_HOSPITAL_2(2, "市级医院", 3), + GATHER_GUEST_HOSPITAL_3(3, "县区级医院", 2), + GATHER_GUEST_HOSPITAL_4(4, "无医院", 1) + ; + + private Integer code; + + private String desc; + + private Integer score; + + GatherGuestHospitalEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + public static GatherGuestHospitalEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (GatherGuestHospitalEnum value : GatherGuestHospitalEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/GatherGuestSchoolEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/GatherGuestSchoolEnum.java new file mode 100644 index 000000000..a4b537d57 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/GatherGuestSchoolEnum.java @@ -0,0 +1,57 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: GatherGuestSchoolEnum + * @Description:聚客点学校 + * @date 2024-03-26 16:08 + */ +public enum GatherGuestSchoolEnum { + + // 1.幼儿园/小学 2.大学/学院 3.初中/高中 4.无学校 + GATHER_GUEST_SCHOOL_1(1, "幼儿园/小学", 4), + GATHER_GUEST_SCHOOL_2(2, "大学/学院", 3), + GATHER_GUEST_SCHOOL_3(3, "初中/高中", 2), + GATHER_GUEST_SCHOOL_4(4, "无学校", 1) + ; + + private Integer code; + + private String desc; + + private Integer score; + + GatherGuestSchoolEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + public static GatherGuestSchoolEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (GatherGuestSchoolEnum value : GatherGuestSchoolEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/GreenBeltEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/GreenBeltEnum.java new file mode 100644 index 000000000..abbbb3a11 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/GreenBeltEnum.java @@ -0,0 +1,56 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: IntendPositionEnum + * @Description:绿化带 + * @date 2024-03-26 16:08 + */ +public enum GreenBeltEnum { + + //1.门口无绿化带阻挡 2.门口有绿化带阻挡 + GREEN_BELT_1(1, "门口无绿化带阻挡", 3), + GREEN_BELT_2(2, "门口有绿化带阻挡", 1), + ; + + private Integer code; + + private String desc; + + private Integer score; + + GreenBeltEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + + public static GreenBeltEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (GreenBeltEnum value : GreenBeltEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/GuestConvenienceEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/GuestConvenienceEnum.java new file mode 100644 index 000000000..31182c52e --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/GuestConvenienceEnum.java @@ -0,0 +1,56 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: StoreOutlookEnum + * @Description:门店观赡 + * @date 2024-03-26 16:08 + */ +public enum GuestConvenienceEnum { + + // 1.门口5米有人行横道 2.门口15米有人行横道 3.无人行横道 + GUEST_CONVENIENCE_1(1, "门口5米有人行横道", 3), + GUEST_CONVENIENCE_2(2, "门口15米有人行横道", 2), + GUEST_CONVENIENCE_3(3, "无人行横道", 1), + ; + + private Integer code; + + private String desc; + + private Integer score; + + GuestConvenienceEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + public static GuestConvenienceEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (GuestConvenienceEnum value : GuestConvenienceEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/IntendPositionEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/IntendPositionEnum.java new file mode 100644 index 000000000..f3fa3f569 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/IntendPositionEnum.java @@ -0,0 +1,57 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: IntendPositionEnum + * @Description:意向店所处位置 + * @date 2024-03-26 16:08 + */ +public enum IntendPositionEnum { + + //1.十字路口 2.居民生活中心 3.社区出入口 + INTEND_POSITION_1(1, "十字路口", 6), + INTEND_POSITION_2(2, "居民生活中心", 5), + INTEND_POSITION_3(3, "社区出入口", 5), + ; + + private Integer code; + + private String desc; + + private Integer score; + + IntendPositionEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + + public static IntendPositionEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (IntendPositionEnum value : IntendPositionEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/NearBusinessConditionEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/NearBusinessConditionEnum.java new file mode 100644 index 000000000..687fade5c --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/NearBusinessConditionEnum.java @@ -0,0 +1,56 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: NearBusinessConditionEnum + * @Description:周边业态经营情况(100米内) + * @date 2024-03-26 16:08 + */ +public enum NearBusinessConditionEnum { + + //1.运营状况良好 2.运营状况一般 3.运营状况差 + NEAR_BUSINESS_CONDITION_1(1, "经营状况良好", 3), + NEAR_BUSINESS_CONDITION_2(2, "经营状况一般", 2), + NEAR_BUSINESS_CONDITION_3(3, "经营状况差", 1) + ; + ; + + private Integer code; + + private String desc; + + private Integer score; + + NearBusinessConditionEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + public static NearBusinessConditionEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (NearBusinessConditionEnum value : NearBusinessConditionEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/NearCompeteEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/NearCompeteEnum.java new file mode 100644 index 000000000..d7bf27dee --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/NearCompeteEnum.java @@ -0,0 +1,56 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: NearCompeteEnum + * @Description:周边(100m内)餐饮店 + * @date 2024-03-26 16:08 + */ +public enum NearCompeteEnum { + + //1.品牌水果店2家以上 2.品牌水果店1家及以上 3.夫妻水果店1家及以上 4.无水果店 + NEAR_COMPETITOR_1(1, "品牌水果店2家以上", 1), + NEAR_COMPETITOR_2(2, "品牌水果店1家及以上", 2), + NEAR_COMPETITOR_3(3, "夫妻水果店1家及以上", 2), + NEAR_COMPETITOR_4(4, "无水果店", 3) + ; + + private Integer code; + + private String desc; + + private Integer score; + + NearCompeteEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + public static NearCompeteEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (NearCompeteEnum nearCompeteEnum : NearCompeteEnum.values()) { + if (nearCompeteEnum.getCode().equals(code)) { + return nearCompeteEnum; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/NearNeighborEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/NearNeighborEnum.java new file mode 100644 index 000000000..e82bc232f --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/NearNeighborEnum.java @@ -0,0 +1,58 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: NearRepastEnum + * @Description:周边(100m内)餐饮店 + * @date 2024-03-26 16:08 + */ +public enum NearNeighborEnum { + + //1.小业态品牌店3家以上 2.小业态普通店3家以上 3.普通小业态店3家以下 4.无小业态店 + NEAR_NEIGHBOR_1(1, "小业态品牌店3家以上", 4), + NEAR_NEIGHBOR_2(2, "小业态普通店3家以上", 2), + NEAR_NEIGHBOR_3(3, "普通小业态店3家以下", 1), + NEAR_NEIGHBOR_4(4, "无小业态店", 1), + ; + + private Integer code; + + private String desc; + + private Integer score; + + NearNeighborEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + public static NearNeighborEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (NearNeighborEnum nearNeighborEnum : NearNeighborEnum.values()) { + if (nearNeighborEnum.getCode().equals(code)) { + return nearNeighborEnum; + } + } + return null; + } + + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/NearRepastEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/NearRepastEnum.java new file mode 100644 index 000000000..07a6c8e31 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/NearRepastEnum.java @@ -0,0 +1,55 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: NearRepastEnum + * @Description:周边(100m内)餐饮店 + * @date 2024-03-26 16:08 + */ +public enum NearRepastEnum { + + //1.餐饮连锁店或6家以上餐饮店 2.普通餐饮店 3.无餐饮店 + NEAR_REPAST_1(1, "餐饮连锁店或6家以上餐饮店", 4), + NEAR_REPAST_2(2, "普通餐饮店", 3), + NEAR_REPAST_3(3, "无餐饮店", 1), + ; + + private Integer code; + + private String desc; + + private Integer score; + + NearRepastEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + public static NearRepastEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (NearRepastEnum value : NearRepastEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PayBusinessTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PayBusinessTypeEnum.java new file mode 100644 index 000000000..df12f5be2 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PayBusinessTypeEnum.java @@ -0,0 +1,31 @@ +package com.cool.store.enums.point; + +/** + * @Auther: WangShuo + * @Date: 2024/04/29/上午9:33 + * @Version 1.0 + * @注释: + */ +public enum PayBusinessTypeEnum { + + + INTENT_MONEY(0,"缴纳意向金"), + FRANCHISE_FEE(1,"缴纳加盟费"), + DECORATION_MODEL(2,"装修款"); + private Integer code; + + private String desc; + + PayBusinessTypeEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PayTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PayTypeEnum.java new file mode 100644 index 000000000..36b5967a2 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PayTypeEnum.java @@ -0,0 +1,28 @@ +package com.cool.store.enums.point; + +/** + * @Auther: WangShuo + * @Date: 2024/04/29/上午9:45 + * @Version 1.0 + * @注释: + */ +public enum PayTypeEnum { + WX_PAY(1,"微信支付"), + BANK_PAY(2,"银行转账"); + private Integer code; + + private String desc; + + PayTypeEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PaymentMethodEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PaymentMethodEnum.java new file mode 100644 index 000000000..241718a17 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PaymentMethodEnum.java @@ -0,0 +1,50 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: PaymentMethodEnum + * @Description:付款方式 + * @date 2024-03-26 16:08 + */ +public enum PaymentMethodEnum { + + //1.月付 2.季付 3.半年付 4.年付 + PAYMENT_METHOD_1(1, "月付"), + PAYMENT_METHOD_2(2, "季付"), + PAYMENT_METHOD_3(3, "半年付"), + PAYMENT_METHOD_4(4, "年付"), + ; + + private Integer code; + + private String desc; + + PaymentMethodEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + + public static PaymentMethodEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (PaymentMethodEnum paymentMethodEnum : PaymentMethodEnum.values()) { + if (paymentMethodEnum.getCode().equals(code)) { + return paymentMethodEnum; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PointDirectionEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PointDirectionEnum.java new file mode 100644 index 000000000..16f4a9b2f --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PointDirectionEnum.java @@ -0,0 +1,47 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: PointDirectionEnum + * @Description:店铺方位 + * @date 2024-03-26 16:08 + */ +public enum PointDirectionEnum { + + //1.主要动线 2.次要动线 + POINT_DIRECTION_1(1, "主要动线"), + POINT_DIRECTION_2(2, "次要动线"), + ; + + private Integer code; + + private String desc; + + PointDirectionEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public static PointDirectionEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (PointDirectionEnum value : PointDirectionEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PointRecommendStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PointRecommendStatusEnum.java new file mode 100644 index 000000000..3c269d265 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PointRecommendStatusEnum.java @@ -0,0 +1,66 @@ +package com.cool.store.enums.point; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: PointRecommendStatus + * @Description: + * @date 2024-04-01 14:38 + */ +public enum PointRecommendStatusEnum { + + //状态 1.待选择 2.已选择 3.已被他人选择 4.已签约 5.已拒绝 6.已失效 + POINT_RECOMMEND_STATUS_1(1, "待选择"), + POINT_RECOMMEND_STATUS_2(2, "已选择"), + POINT_RECOMMEND_STATUS_3(3, "已被他人选择"), + POINT_RECOMMEND_STATUS_4(4, "已签约"), + POINT_RECOMMEND_STATUS_5(5, "已拒绝"), + POINT_RECOMMEND_STATUS_6(6, "已失效"), + ; + + private Integer code; + + private String desc; + + PointRecommendStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public static PointRecommendStatusEnum getByCode(Integer code) { + for (PointRecommendStatusEnum pointRecommendStatusEnum : PointRecommendStatusEnum.values()) { + if (pointRecommendStatusEnum.getCode().equals(code)) { + return pointRecommendStatusEnum; + } + } + return null; + } + + public static String getDescByCode(Integer code) { + for (PointRecommendStatusEnum pointRecommendStatusEnum : PointRecommendStatusEnum.values()) { + if (pointRecommendStatusEnum.getCode().equals(code)) { + return pointRecommendStatusEnum.getDesc(); + } + } + return null; + } + + public static List getSelectStatus(){ + List resultList = new ArrayList<>(); + resultList.add(POINT_RECOMMEND_STATUS_2.code); + resultList.add(POINT_RECOMMEND_STATUS_4.code); + return resultList; + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PointSourceEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PointSourceEnum.java new file mode 100644 index 000000000..dbee316dd --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PointSourceEnum.java @@ -0,0 +1,30 @@ +package com.cool.store.enums.point; + +/** + * @author zhangchenbiao + * @FileName: PointSourceEnum + * @Description:店铺来源 + * @date 2024-04-18 15:12 + */ +public enum PointSourceEnum { + //店铺来源:1、鲜丰选址人员寻铺 2、加盟商自采 + POINT_SOURCE_1(1, "鲜丰选址人员寻铺"), + POINT_SOURCE_2(2, "加盟商自采"); + + private Integer code; + private String name; + + PointSourceEnum(Integer code, String name) { + this.code = code; + this.name = name; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PointStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PointStatusEnum.java new file mode 100644 index 000000000..a18022e49 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PointStatusEnum.java @@ -0,0 +1,37 @@ +package com.cool.store.enums.point; + +/** + * @author zhangchenbiao + * @FileName: PointStatusEnum + * @Description: + * @date 2024-04-01 10:37 + */ +public enum PointStatusEnum { + + //1.采集中、2.已评估、3.待审核、4.待审核可推荐、5.已审核、6.已签约、7.已失效 + POINT_STATUS_1(1, "采集中"), + POINT_STATUS_2(2, "已评估"), + POINT_STATUS_3(3, "待审核"), + POINT_STATUS_4(4, "待审核可推荐"), + POINT_STATUS_5(5, "已审核"), + POINT_STATUS_6(6, "已签约"), + POINT_STATUS_7(7, "已失效") + ; + + private Integer code; + + private String desc; + + PointStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PropertyStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PropertyStatusEnum.java new file mode 100644 index 000000000..21ed2622b --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PropertyStatusEnum.java @@ -0,0 +1,50 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: PropertyStatusEnum + * @Description:物业状态 + * @date 2024-03-26 16:08 + */ +public enum PropertyStatusEnum { + + //1.原始房东 2.二房东 3.三房东 4.招投标性质 + PROPERTY_STATUS_1(1, "原始房东"), + PROPERTY_STATUS_2(2, "二房东"), + PROPERTY_STATUS_3(3, "三房东"), + PROPERTY_STATUS_4(4, "招投标性质"), + ; + + private Integer code; + + private String desc; + + PropertyStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + + public static PropertyStatusEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (PropertyStatusEnum propertyStatusEnum : PropertyStatusEnum.values()) { + if (propertyStatusEnum.getCode().equals(code)) { + return propertyStatusEnum; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/SelectStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/SelectStatusEnum.java new file mode 100644 index 000000000..0c8d91814 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/SelectStatusEnum.java @@ -0,0 +1,32 @@ +package com.cool.store.enums.point; + +/** + * @author zhangchenbiao + * @FileName: SelectStatusEnum + * @Description: + * @date 2024-04-01 10:37 + */ +public enum SelectStatusEnum { + + //选择状态0.未选择, 1.已被选择 + SELECT_STATUS_0(0, "未选择"), + SELECT_STATUS_1(1, "已被选择"), + ; + + private Integer code; + + private String desc; + + SelectStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopAreaTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopAreaTypeEnum.java new file mode 100644 index 000000000..40835c254 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopAreaTypeEnum.java @@ -0,0 +1,54 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: ShopAreaTypeEnum + * @Description:商圈类型 + * @date 2024-03-26 16:08 + */ +public enum ShopAreaTypeEnum { + + //1.社区商圈 2.综合商圈 3.商业商圈 4.学校商圈 5.医院商圈 6.农贸商圈 7.纯人流商圈 8.办公商圈 + SHOP_AREA_TYPE_1(1, "社区商圈"), + SHOP_AREA_TYPE_2(2, "综合商圈"), + SHOP_AREA_TYPE_3(3, "商业商圈"), + SHOP_AREA_TYPE_4(4, "学校商圈"), + SHOP_AREA_TYPE_5(5, "医院商圈"), + SHOP_AREA_TYPE_6(6, "农贸商圈"), + SHOP_AREA_TYPE_7(7, "纯人流商圈"), + SHOP_AREA_TYPE_8(8, "办公商圈"), + ; + + private Integer code; + + private String desc; + + ShopAreaTypeEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + + public static ShopAreaTypeEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (ShopAreaTypeEnum shopAreaTypeEnum : ShopAreaTypeEnum.values()) { + if (shopAreaTypeEnum.getCode().equals(code)) { + return shopAreaTypeEnum; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopStageEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopStageEnum.java new file mode 100644 index 000000000..dbdb39bd4 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopStageEnum.java @@ -0,0 +1,48 @@ +package com.cool.store.enums.point; + +/** + * @author zhangchenbiao + * @FileName: ShopStageEnum + * @Description:店铺阶段 + * @date 2024-04-10 17:34 + */ +public enum ShopStageEnum { + + //1选址 2筹建 3开业 + SHOP_STAGE_1(1, "选址"), + SHOP_STAGE_2(2, "筹建"), + SHOP_STAGE_3(3, "开业验收"), + SHOP_STAGE_4(4, "新店开业"), + ; + + //店铺阶段 + private Integer shopStage; + + //阶段名称 + private String stageName; + + + + ShopStageEnum(Integer shopStage, String stageName) { + this.shopStage = shopStage; + this.stageName = stageName; + } + + public static ShopStageEnum getShopStageEnum(Integer shopStage) { + for (ShopStageEnum shopStageEnum : ShopStageEnum.values()) { + if (shopStageEnum.getShopStage().equals(shopStage)) { + return shopStageEnum; + } + } + return null; + } + + public Integer getShopStage() { + return shopStage; + } + + public String getStageName() { + return stageName; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageEnum.java new file mode 100644 index 000000000..d37b6474a --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageEnum.java @@ -0,0 +1,153 @@ +package com.cool.store.enums.point; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: ShopStageEnum + * @Description:店铺阶段 + * @date 2024-04-10 17:34 + */ +public enum ShopSubStageEnum { + + SHOP_STAGE_1(ShopStageEnum.SHOP_STAGE_1, 10, "选址", 12), + SHOP_STAGE_2(ShopStageEnum.SHOP_STAGE_1, 20, "上传租赁合同", 14), + SHOP_STAGE_3(ShopStageEnum.SHOP_STAGE_2, 30, "系统建店", 19), + SHOP_STAGE_4(ShopStageEnum.SHOP_STAGE_2, 40, "证照办理", 24), + SHOP_STAGE_5(ShopStageEnum.SHOP_STAGE_2, 50, "员工招聘", 23), + SHOP_STAGE_6(ShopStageEnum.SHOP_STAGE_2, 60, "加盟商/员工培训", 30), + SHOP_STAGE_7(ShopStageEnum.SHOP_STAGE_2, 70, "缴纳加盟费/保证金", 1), + SHOP_STAGE_8(ShopStageEnum.SHOP_STAGE_2, 80, "加盟合同签约", 4), + SHOP_STAGE_9(ShopStageEnum.SHOP_STAGE_2, 90, "设计阶段", 21), + SHOP_STAGE_10(ShopStageEnum.SHOP_STAGE_2, 100, "装修款", 24), + SHOP_STAGE_11(ShopStageEnum.SHOP_STAGE_2, 110, "施工阶段", 31), + SHOP_STAGE_12(ShopStageEnum.SHOP_STAGE_2, 120, "三方验收", 32), + SHOP_STAGE_13(ShopStageEnum.SHOP_STAGE_2, 130, "视觉验收", 32), + SHOP_STAGE_14(ShopStageEnum.SHOP_STAGE_2, 140, "开业运营方案", 23), + SHOP_STAGE_15(ShopStageEnum.SHOP_STAGE_2, 150, "首批订货清单", 20), + SHOP_STAGE_16(ShopStageEnum.SHOP_STAGE_3, 160, "开业验收", null), + SHOP_STAGE_17(ShopStageEnum.SHOP_STAGE_4, 170, "新店开业", null), + ; + + //阶段 + private ShopStageEnum shopStageEnum; + + //子阶段 + private Integer shopSubStage; + + //子阶段名称 + private String shopSubStageName; + + //计划完成天数 + private Integer planCompleteDays; + + ShopSubStageEnum(ShopStageEnum shopStageEnum, Integer shopSubStage, String shopSubStageName, Integer planCompleteDays) { + this.shopStageEnum = shopStageEnum; + this.shopSubStage = shopSubStage; + this.shopSubStageName = shopSubStageName; + this.planCompleteDays = planCompleteDays; + } + + public static List getShopStageEnum(Integer shopStage) { + List resultList = new ArrayList<>(); + for (ShopSubStageEnum shopStageEnum : ShopSubStageEnum.values()) { + if (shopStageEnum.getShopStageEnum().getShopStage().equals(shopStage)) { + resultList.add(shopStageEnum); + } + } + return resultList; + } + + public ShopStageEnum getShopStageEnum() { + return shopStageEnum; + } + + public Integer getShopSubStage() { + return shopSubStage; + } + + public String getShopSubStageName() { + return shopSubStageName; + } + + public Integer getPlanCompleteDays() { + return planCompleteDays; + } + + /** + * 获取各阶段的初始状态 + * @return + */ + public ShopSubStageStatusEnum getInitStatus() { + switch (this){ + case SHOP_STAGE_1: + return ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_10; + case SHOP_STAGE_5: + return ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_50; + case SHOP_STAGE_7: + return ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_70; + case SHOP_STAGE_2: + case SHOP_STAGE_3: + case SHOP_STAGE_4: + case SHOP_STAGE_6: + case SHOP_STAGE_8: + case SHOP_STAGE_9: + case SHOP_STAGE_10: + case SHOP_STAGE_11: + case SHOP_STAGE_12: + case SHOP_STAGE_13: + case SHOP_STAGE_14: + case SHOP_STAGE_15: + case SHOP_STAGE_16: + case SHOP_STAGE_17: + return ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_00; + default: + return null; + } + } + + public static Integer getSelectStageMaxDays() { + return Math.max(ShopSubStageEnum.SHOP_STAGE_1.getPlanCompleteDays(), ShopSubStageEnum.SHOP_STAGE_2.getPlanCompleteDays()); + + } + + public String getPlanCompleteTime(LocalDate planCompleteTime, LocalDate planSelectPointCompleteDate) { + switch (this){ + case SHOP_STAGE_1: + case SHOP_STAGE_2: + case SHOP_STAGE_5: + case SHOP_STAGE_6: + case SHOP_STAGE_7: + case SHOP_STAGE_8: + return planCompleteTime.plusDays(getPlanCompleteDays()).toString(); + case SHOP_STAGE_3: + case SHOP_STAGE_4: + case SHOP_STAGE_9: + case SHOP_STAGE_10: + case SHOP_STAGE_11: + case SHOP_STAGE_12: + case SHOP_STAGE_13: + case SHOP_STAGE_14: + case SHOP_STAGE_15: + return planSelectPointCompleteDate.plusDays(getPlanCompleteDays()).toString(); + default: + return null; + } + } + + public static ShopSubStageEnum getByShopSubStage(Integer shopSubStage) { + if(Objects.isNull(shopSubStage)){ + return null; + } + for (ShopSubStageEnum value : ShopSubStageEnum.values()) { + if (value.getShopSubStage().equals(shopSubStage)) { + return value; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageFieldEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageFieldEnum.java new file mode 100644 index 000000000..be82c7ec7 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageFieldEnum.java @@ -0,0 +1,67 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: ShopStageEnum + * @Description:店铺阶段 + * @date 2024-04-10 17:34 + */ +public enum ShopSubStageFieldEnum { + + SHOP_STAGE_3(30, "系统建店", "systemSetup"), + SHOP_STAGE_4(40, "证照办理", "licenseProcessing"), + SHOP_STAGE_5(50, "员工招聘", "trainingRegistration"), + SHOP_STAGE_6(60, "加盟商/员工培训", "trainingForFranchisee"), + SHOP_STAGE_7(70, "缴纳加盟费/保证金", "franchiseFeeDeposit"), + SHOP_STAGE_8( 80, "加盟合同签约", "contractSigning"), + SHOP_STAGE_9( 90, "设计阶段", "storeDesign"), + SHOP_STAGE_11(110, "施工阶段", "construction"), + SHOP_STAGE_12(120, "三方验收", "tripleAcceptance"), + SHOP_STAGE_13(130, "视觉验收", "visualAcceptance"), + SHOP_STAGE_14(140, "开业运营方案", "marketPlanning"), + SHOP_STAGE_15(150, "首批订货清单", "initialDeliveryList"), + ; + + //子阶段 + private Integer shopSubStage; + + //子阶段名称 + private String shopSubStageName; + + //属性名称 + private String filed; + + ShopSubStageFieldEnum(Integer shopSubStage, String shopSubStageName, String planCompleteDays) { + this.shopSubStage = shopSubStage; + this.shopSubStageName = shopSubStageName; + this.filed = planCompleteDays; + } + + + public Integer getShopSubStage() { + return shopSubStage; + } + + public String getShopSubStageName() { + return shopSubStageName; + } + + + public String getFiled() { + return filed; + } + + public static ShopSubStageFieldEnum getByShopSubStage(Integer shopSubStage) { + if(Objects.isNull(shopSubStage)){ + return null; + } + for (ShopSubStageFieldEnum value : ShopSubStageFieldEnum.values()) { + if (value.getShopSubStage().equals(shopSubStage)) { + return value; + } + } + return null; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageStatusEnum.java new file mode 100644 index 000000000..a9c93b86c --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/ShopSubStageStatusEnum.java @@ -0,0 +1,151 @@ +package com.cool.store.enums.point; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: ShopStageStatusEnum + * @Description:店铺阶段状态 + * @date 2024-04-10 17:34 + */ +public enum ShopSubStageStatusEnum { + + SHOP_SUB_STAGE_STATUS_00(null, -100, "未开始", Boolean.FALSE), + + //选址 + SHOP_SUB_STAGE_STATUS_10(ShopSubStageEnum.SHOP_STAGE_1, 100, "待选址", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_11(ShopSubStageEnum.SHOP_STAGE_1, 110, "待审核", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_12(ShopSubStageEnum.SHOP_STAGE_1, 120, "已选址", Boolean.TRUE), + + //上传租赁合同 + SHOP_SUB_STAGE_STATUS_20(ShopSubStageEnum.SHOP_STAGE_2, 200, "待上传", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_21(ShopSubStageEnum.SHOP_STAGE_2, 210, "待审核", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_22(ShopSubStageEnum.SHOP_STAGE_2, 220, "审核未通过", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_23(ShopSubStageEnum.SHOP_STAGE_2, 230, "审核通过", Boolean.TRUE), + + //系统建店 + SHOP_SUB_STAGE_STATUS_30(ShopSubStageEnum.SHOP_STAGE_3, 300, "待建店", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_31(ShopSubStageEnum.SHOP_STAGE_3, 310, "审核中", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_32(ShopSubStageEnum.SHOP_STAGE_3, 320, "未通过", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_33(ShopSubStageEnum.SHOP_STAGE_3, 330, "已通过", Boolean.TRUE), + + //证照办理 + SHOP_SUB_STAGE_STATUS_40(ShopSubStageEnum.SHOP_STAGE_4, 400, "待提交", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_41(ShopSubStageEnum.SHOP_STAGE_4, 410, "待审核", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_42(ShopSubStageEnum.SHOP_STAGE_4, 420, "审核未通过", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_43(ShopSubStageEnum.SHOP_STAGE_4, 430, "审核通过", Boolean.TRUE), + + //培训登记 + SHOP_SUB_STAGE_STATUS_50(ShopSubStageEnum.SHOP_STAGE_5, 500, "登记中", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_51(ShopSubStageEnum.SHOP_STAGE_5, 510, "已完成", Boolean.TRUE), + + //加盟商/员工培训 + SHOP_SUB_STAGE_STATUS_60(ShopSubStageEnum.SHOP_STAGE_6, 600, "培训中", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_61(ShopSubStageEnum.SHOP_STAGE_6, 610, "已完成", Boolean.TRUE), + + //缴纳加盟费/保证金 + SHOP_SUB_STAGE_STATUS_70(ShopSubStageEnum.SHOP_STAGE_7, 700, "待发布账单", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_71(ShopSubStageEnum.SHOP_STAGE_7, 710, "待缴费", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_72(ShopSubStageEnum.SHOP_STAGE_7, 720, "待审核", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_73(ShopSubStageEnum.SHOP_STAGE_7, 730, "已缴费", Boolean.TRUE), + SHOP_SUB_STAGE_STATUS_74(ShopSubStageEnum.SHOP_STAGE_7, 740, "审核不通过", Boolean.FALSE), + + //加盟合同签约 + SHOP_SUB_STAGE_STATUS_80(ShopSubStageEnum.SHOP_STAGE_8, 800, "待提交", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_83(ShopSubStageEnum.SHOP_STAGE_8, 830, "审核中", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_84(ShopSubStageEnum.SHOP_STAGE_8, 840, "已签约", Boolean.TRUE), + SHOP_SUB_STAGE_STATUS_85(ShopSubStageEnum.SHOP_STAGE_8, 850, "退回", Boolean.FALSE), + + //设计阶段 + SHOP_SUB_STAGE_STATUS_90(ShopSubStageEnum.SHOP_STAGE_9, 900, "进行中", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_91(ShopSubStageEnum.SHOP_STAGE_9, 910, "已完成", Boolean.TRUE), + + //装修款 + SHOP_SUB_STAGE_STATUS_100(ShopSubStageEnum.SHOP_STAGE_10, 1000, "待缴费", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_101(ShopSubStageEnum.SHOP_STAGE_10, 1010, "待审批", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_102(ShopSubStageEnum.SHOP_STAGE_10, 1020, "已缴费", Boolean.TRUE), + + //施工阶段 + SHOP_SUB_STAGE_STATUS_110(ShopSubStageEnum.SHOP_STAGE_11, 1100, "待施工", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_111(ShopSubStageEnum.SHOP_STAGE_11, 1110, "施工中", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_112(ShopSubStageEnum.SHOP_STAGE_11, 1120, "已完成", Boolean.TRUE), + + //三方验收 + SHOP_SUB_STAGE_STATUS_120(ShopSubStageEnum.SHOP_STAGE_12, 1200, "待预约", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_121(ShopSubStageEnum.SHOP_STAGE_12, 1210, "待验收", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_122(ShopSubStageEnum.SHOP_STAGE_12, 1220, "验收中", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_123(ShopSubStageEnum.SHOP_STAGE_12, 1230, "已验收", Boolean.TRUE), + + //视觉验收 + SHOP_SUB_STAGE_STATUS_130(ShopSubStageEnum.SHOP_STAGE_13, 1300, "待验收", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_131(ShopSubStageEnum.SHOP_STAGE_13, 1310, "验收不通过", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_132(ShopSubStageEnum.SHOP_STAGE_13, 1320,"验收通过", Boolean.TRUE), + + //开业运营方案 + SHOP_SUB_STAGE_STATUS_140(ShopSubStageEnum.SHOP_STAGE_14, 1400, "待上传", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_141(ShopSubStageEnum.SHOP_STAGE_14, 1420, "待审核", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_142(ShopSubStageEnum.SHOP_STAGE_14, 1430,"审核不通过", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_143(ShopSubStageEnum.SHOP_STAGE_14, 1440, "已完成", Boolean.TRUE), + + //首批订货清单 + SHOP_SUB_STAGE_STATUS_150(ShopSubStageEnum.SHOP_STAGE_15, 1500, "待上传", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_152(ShopSubStageEnum.SHOP_STAGE_15, 1505, "待缴纳", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_151(ShopSubStageEnum.SHOP_STAGE_15, 1510, "已完成", Boolean.TRUE), + + + SHOP_SUB_STAGE_STATUS_160(ShopSubStageEnum.SHOP_STAGE_16, 1600, "验收中", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_161(ShopSubStageEnum.SHOP_STAGE_16, 1610, "已完成", Boolean.TRUE), + + SHOP_SUB_STAGE_STATUS_170(ShopSubStageEnum.SHOP_STAGE_17, 1700, "试运营中", Boolean.FALSE), + SHOP_SUB_STAGE_STATUS_171(ShopSubStageEnum.SHOP_STAGE_17, 1710, "已完成", Boolean.TRUE), + + ; + + private ShopSubStageEnum shopSubStageEnum; + + private Integer shopSubStageStatus; + + private String shopSubStageStatusName; + + private boolean isTerminated; + + + ShopSubStageStatusEnum(ShopSubStageEnum shopSubStageEnum, Integer shopSubStageStatus, String shopSubStageStatusName, Boolean isTerminated) { + this.shopSubStageEnum = shopSubStageEnum; + this.shopSubStageStatus = shopSubStageStatus; + this.shopSubStageStatusName = shopSubStageStatusName; + this.isTerminated = isTerminated; + } + + public static List getShopSubStageStatusEnum(ShopSubStageEnum shopSubStage) { + List resultList = new ArrayList<>(); + for (ShopSubStageStatusEnum stageStatusEnum : ShopSubStageStatusEnum.values()) { + if (Objects.nonNull(stageStatusEnum.getShopSubStageEnum()) && stageStatusEnum.getShopSubStageEnum().equals(shopSubStage)) { + resultList.add(stageStatusEnum); + } + } + return resultList; + } + + public ShopSubStageEnum getShopSubStageEnum() { + return shopSubStageEnum; + } + + public Integer getShopSubStageStatus() { + return shopSubStageStatus; + } + + public String getShopSubStageStatusName() { + return shopSubStageStatusName; + } + + public String getShopSubStageName() { + return shopSubStageEnum.getShopSubStageName(); + } + + public boolean isTerminated() { + return isTerminated; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/SiteConditionsEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/SiteConditionsEnum.java new file mode 100644 index 000000000..fbbbbea9a --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/SiteConditionsEnum.java @@ -0,0 +1,50 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: SiteConditionsEnum + * @Description:立地条件 + * @date 2024-03-26 16:08 + */ +public enum SiteConditionsEnum { + + //1.单门面 2.双门面 3.多门面 4.转角 + SITE_CONDITIONS_1(1, "单门面"), + SITE_CONDITIONS_2(2, "双门面"), + SITE_CONDITIONS_3(3, "多门面"), + SITE_CONDITIONS_4(4, "转角"), + ; + + private Integer code; + + private String desc; + + SiteConditionsEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + + public static SiteConditionsEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (SiteConditionsEnum value : SiteConditionsEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/StoreFlowTrendEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/StoreFlowTrendEnum.java new file mode 100644 index 000000000..85865b7d0 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/StoreFlowTrendEnum.java @@ -0,0 +1,54 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: StoreFlowTrendEnum + * @Description:门店人流动向 + * @date 2024-03-26 16:08 + */ +public enum StoreFlowTrendEnum { + + //1.主要流动路线 2.次要流动路线 + STORE_FLOW_TREND_1(1, "主要流动路线", 7), + STORE_FLOW_TREND_2(2, "次要流动路线", 4), + ; + + private Integer code; + + private String desc; + + private Integer score; + + StoreFlowTrendEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + public static StoreFlowTrendEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (StoreFlowTrendEnum value : StoreFlowTrendEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/StoreOutlookEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/StoreOutlookEnum.java new file mode 100644 index 000000000..bce51b206 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/StoreOutlookEnum.java @@ -0,0 +1,55 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: StoreOutlookEnum + * @Description:门店观赡 + * @date 2024-03-26 16:08 + */ +public enum StoreOutlookEnum { + + //1.观赡非常好 2.观赡一般 3.观赡差 + STORE_OUTLOOK_1(1, "观赡非常好", 4), + STORE_OUTLOOK_2(2, "观赡一般", 3), + STORE_OUTLOOK_3(2, "观赡差", 2), + ; + + private Integer code; + + private String desc; + + private Integer score; + + StoreOutlookEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + public static StoreOutlookEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (StoreOutlookEnum value : StoreOutlookEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/WantShopSizeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/WantShopSizeEnum.java new file mode 100644 index 000000000..6ec0b2fd8 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/WantShopSizeEnum.java @@ -0,0 +1,57 @@ +package com.cool.store.enums.point; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: WantShopSizeEnum + * @Description:意向门店开间尺寸 + * @date 2024-03-26 16:08 + */ +public enum WantShopSizeEnum { + + //1.转角 2.12米以上 3.8-12米 4.4-8米 5.4米以下 + WANT_SHOP_SIZE_1(1, "转角", 6), + WANT_SHOP_SIZE_2(2, "12米以上", 2), + WANT_SHOP_SIZE_3(3, "8-12米", 3), + WANT_SHOP_SIZE_4(4, "4-8米", 5), + WANT_SHOP_SIZE_5(5, "4米以下", 3) + ; + + private Integer code; + + private String desc; + + private Integer score; + + WantShopSizeEnum(Integer code, String desc, Integer score) { + this.code = code; + this.desc = desc; + this.score = score; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public Integer getScore() { + return score; + } + + public static WantShopSizeEnum getByCode(Integer code) { + if(Objects.isNull(code)){ + return null; + } + for (WantShopSizeEnum value : WantShopSizeEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/prepare/newStore/BusinessDistrictEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/prepare/newStore/BusinessDistrictEnum.java new file mode 100644 index 000000000..23cde3970 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/prepare/newStore/BusinessDistrictEnum.java @@ -0,0 +1,55 @@ +package com.cool.store.enums.prepare.newStore; + +import com.cool.store.enums.ThirdRegionTypeEnum; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 社区类型 + */ +public enum BusinessDistrictEnum { + + COMMUNITY(10,"社区型"), + COMMERCIAL_STREET(20,"商业街边型"), + SCHOOL(30,"学校型"), + CBD_OFFICE(40,"CBD/办公型"), + HOSPITAL(60,"医院型"), + VEGETABLE_MARKET(70,"-菜场型"), + + + ; + + private Integer code; + private String desc; + + BusinessDistrictEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public static final Map map + = Arrays.stream(values()).collect(Collectors.toMap(BusinessDistrictEnum::getCode, Function.identity())); + + public static BusinessDistrictEnum getByCode(Integer code) { + return map.get(code); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/prepare/newStore/OfflineCompetitorEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/prepare/newStore/OfflineCompetitorEnum.java new file mode 100644 index 000000000..79a11a826 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/prepare/newStore/OfflineCompetitorEnum.java @@ -0,0 +1,52 @@ +package com.cool.store.enums.prepare.newStore; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 线下竞争对手 + */ +public enum OfflineCompetitorEnum { + BRAND_FRUIT(10,"品牌水果店"), + COUPLES_FRUIT(20,"夫妻水果店"), + VEGETABLE_MARKET(30,"菜场店"), + BIG_BUSINESS(40,"大商超"), + FRESH_FOOD(50,"生鲜店"), + NONE(60,"无"), + + + ; + + private Integer code; + private String desc; + + OfflineCompetitorEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public static final Map map + = Arrays.stream(values()).collect(Collectors.toMap(OfflineCompetitorEnum::getCode, Function.identity())); + + public static OfflineCompetitorEnum getByCode(Integer code) { + return map.get(code); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/prepare/newStore/PassengerFlowEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/prepare/newStore/PassengerFlowEnum.java new file mode 100644 index 000000000..9f7960b17 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/prepare/newStore/PassengerFlowEnum.java @@ -0,0 +1,57 @@ +package com.cool.store.enums.prepare.newStore; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public enum PassengerFlowEnum { + BELOW_1000(0,"1000以下",10), + TO_1000_10000(1,"1千-1万",20), + MORE_THAN_10000(2,"1万以上",30), + + + + ; + + private Integer code; + private String desc; + private Integer type; + + PassengerFlowEnum(Integer code, String desc,Integer type) { + this.code = code; + this.desc = desc; + this.type = type; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public static final Map map + = Arrays.stream(values()).collect(Collectors.toMap(PassengerFlowEnum::getCode, Function.identity())); + + public static PassengerFlowEnum getByCode(Integer code) { + return map.get(code); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/prepare/newStore/StoreOperatorEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/prepare/newStore/StoreOperatorEnum.java new file mode 100644 index 000000000..3deb4c10b --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/prepare/newStore/StoreOperatorEnum.java @@ -0,0 +1,46 @@ +package com.cool.store.enums.prepare.newStore; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public enum StoreOperatorEnum { + FRANCHISEE(10,"加盟商"), + STORE_MANAGER(20,"店长"), + + + + ; + + private Integer code; + private String desc; + + StoreOperatorEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public static final Map map + = Arrays.stream(values()).collect(Collectors.toMap(StoreOperatorEnum::getCode, Function.identity())); + + public static StoreOperatorEnum getByCode(Integer code) { + return map.get(code); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/video/AlarmTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/video/AlarmTypeEnum.java new file mode 100644 index 000000000..e373205a9 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/video/AlarmTypeEnum.java @@ -0,0 +1,40 @@ +package com.cool.store.enums.video; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public enum AlarmTypeEnum { + + /** + * 区域入侵 + */ + REGION_INTRUSION("region_intrusion","区域入侵"), + /** + * 排队告警 + */ + WAITING_ALARM("waiting_alarm","排队告警"); + + private String code; + private String msg; + + protected static final Map map = Arrays.stream(values()).collect( + Collectors.toMap(AlarmTypeEnum::getCode, Function.identity())); + + AlarmTypeEnum(String code, String msg){ + this.code=code; + this.msg=msg; + } + + public String getCode() { + return code; + } + + public String getMsg() { + return msg; + } + public static AlarmTypeEnum getByCode(String code) { + return map.get(code); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/video/ResourceStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/video/ResourceStatusEnum.java new file mode 100644 index 000000000..b7083778a --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/video/ResourceStatusEnum.java @@ -0,0 +1,29 @@ +package com.cool.store.enums.video; + +/** + * video status + */ +public enum ResourceStatusEnum { + + UPLOADING(0),// 上传中 + + TRANSCODING(1),// 转码中 + + SCREENSHOT_FINISHED(2),//截图完成 + + TRANSCODE_FINISH(3),//完成 + + TRANSCODE_FAILED(4);//失败 + + + private final Integer value; + + ResourceStatusEnum(Integer value) { + this.value = value; + } + + public Integer getValue() { + return value; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/video/UploadTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/video/UploadTypeEnum.java new file mode 100644 index 000000000..904296eb8 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/video/UploadTypeEnum.java @@ -0,0 +1,88 @@ +package com.cool.store.enums.video; + +/** + * video status + */ +public enum UploadTypeEnum { + + /** + * 检查项提交 + */ + TB_DATA_STA_TABLE_COLUMN(1), + + /** + * 巡店记录总结 + */ + TB_PATROL_STORE_RECORD(2), + + /** + * 工单创建 + */ + QUESTION_CREATE(3), + + /** + *工单处理审核提交 + */ + QUESTION_SUMMIT(4), + + /** + * 父工单创建 + */ + QUESTION_PARENT_CREATE(5), + + /** + * 店务提交 + */ + STORE_WORK_SUBMIT(6), + + /** + * 运营手册 + */ + TASK_SOP_ADD(7), + + DEVICE_CAPTURE(8), + + + /** + * 巡店自定义检查项提交 + */ + TB_DATA_DEF_TABLE_COLUMN(9), + + + /** + * 督导自定义检查项提交 + */ + SUPERVISION_DATA_DEF_TABLE_COLUMN(10), + + ACTIVITY_COMMENT(11), + + WEEKLY_NEWSPAPER_LIST(12), + + /** + * 陈列检查项提交 + */ + TB_DISPLAY_TABLE_DATA_COLUMN(13), + /** + * 陈列检查内容提交 + */ + TB_DISPLAY_TABLE_DATA_CONTENT(14), + + + /** + * 考核數據 + */ + ASSESSMENT_DATA_CONTENT(201), + ; + + + private final Integer value; + + UploadTypeEnum(Integer value) { + this.value = value; + } + + public Integer getValue() { + return value; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/exception/ApiException.java b/coolstore-partner-common/src/main/java/com/cool/store/exception/ApiException.java new file mode 100644 index 000000000..b6e12b983 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/exception/ApiException.java @@ -0,0 +1,92 @@ +package com.cool.store.exception; + +import com.cool.store.enums.ErrorCodeEnum; +import lombok.Data; + +import java.text.MessageFormat; + +/** + * @Description 业务异常类返回 + * @author Aaron + * @date 2019/12/20 + */ +@Data +public class ApiException extends Exception{ + private static final long serialVersionUID = -5068776742356414959L; + + /** + * 返回码 + */ + private Integer errorCode; + + /** + * 返回信息 + */ + private String errorMessage; + + private Object data; + + /** + * 构造函数 + * @param errorCode + * @param errorMessage + */ + @Deprecated + public ApiException(Integer errorCode, String errorMessage) { + super(errorMessage); + this.errorCode = errorCode; + this.errorMessage = errorMessage; + } + + + /** + * 构造函数 + * @param errorCode + * @param errorMessage + */ + @Deprecated + public ApiException(Integer errorCode, String errorMessage, Object data) { + super(errorMessage); + this.errorCode = errorCode; + this.errorMessage = errorMessage; + this.data = data; + } + + /** + * 构造函数 + * @param errorMessage + */ + public ApiException(String errorMessage) { + super(errorMessage); + this.errorMessage = errorMessage; + } + + /** + * 构造函数 + * @param errorCode + * @param errorMessage + * @param cause + */ + @Deprecated + public ApiException(Integer errorCode, String errorMessage, Throwable cause) { + super(errorMessage, cause); + this.errorCode = errorCode; + this.errorMessage = errorMessage; + } + + public ApiException(ErrorCodeEnum responseEnum) { + super(responseEnum.getMessage()); + this.errorCode = responseEnum.getCode(); + this.errorMessage = responseEnum.getMessage(); + } + + public ApiException(ErrorCodeEnum responseEnum, Object... objects) { + super(responseEnum.getMessage()); + String message = MessageFormat.format(responseEnum.getMessage(), objects); + this.errorCode = responseEnum.getCode(); + this.errorMessage = message; + } + + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/exception/ServiceException.java b/coolstore-partner-common/src/main/java/com/cool/store/exception/ServiceException.java new file mode 100644 index 000000000..6685e0a14 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/exception/ServiceException.java @@ -0,0 +1,92 @@ +package com.cool.store.exception; + +import com.cool.store.enums.ErrorCodeEnum; +import lombok.Data; + +import java.text.MessageFormat; + +/** + * @Description 业务异常类返回 + * @author Aaron + * @date 2019/12/20 + */ +@Data +public class ServiceException extends RuntimeException{ + private static final long serialVersionUID = -5068776742356414959L; + + /** + * 返回码 + */ + private Integer errorCode; + + /** + * 返回信息 + */ + private String errorMessage; + + private Object data; + + /** + * 构造函数 + * @param errorCode + * @param errorMessage + */ + @Deprecated + public ServiceException(Integer errorCode, String errorMessage) { + super(errorMessage); + this.errorCode = errorCode; + this.errorMessage = errorMessage; + } + + + /** + * 构造函数 + * @param errorCode + * @param errorMessage + */ + @Deprecated + public ServiceException(Integer errorCode, String errorMessage, Object data) { + super(errorMessage); + this.errorCode = errorCode; + this.errorMessage = errorMessage; + this.data = data; + } + + /** + * 构造函数 + * @param errorMessage + */ + public ServiceException(String errorMessage) { + super(errorMessage); + this.errorMessage = errorMessage; + } + + /** + * 构造函数 + * @param errorCode + * @param errorMessage + * @param cause + */ + @Deprecated + public ServiceException(Integer errorCode, String errorMessage, Throwable cause) { + super(errorMessage, cause); + this.errorCode = errorCode; + this.errorMessage = errorMessage; + } + + public ServiceException(ErrorCodeEnum responseEnum) { + super(responseEnum.getMessage()); + this.errorCode = responseEnum.getCode(); + this.errorMessage = responseEnum.getMessage(); + } + + public ServiceException(ErrorCodeEnum responseEnum, Object... objects) { + super(responseEnum.getMessage()); + String message = MessageFormat.format(responseEnum.getMessage(), objects); + this.errorCode = responseEnum.getCode(); + this.errorMessage = message; + } + + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/response/ResponseResult.java b/coolstore-partner-common/src/main/java/com/cool/store/response/ResponseResult.java new file mode 100644 index 000000000..c8d9740b0 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/response/ResponseResult.java @@ -0,0 +1,95 @@ +package com.cool.store.response; + +import com.cool.store.constants.CommonConstants; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.ResponseCodeEnum; +import lombok.Data; +import lombok.ToString; +import org.slf4j.MDC; + +import java.text.MessageFormat; + +/** + * 统一返回结果 + * + * @author Aaron + * @date 2019/12/20 + */ +@Data +@ToString +public class ResponseResult implements Result { + private static final long serialVersionUID = -2217360460304088285L; + + public ResponseResult(int code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + this.requestId = MDC.get(CommonConstants.REQUEST_ID); + } + + public ResponseResult(int code, String message, T data, String stackTrace) { + this.code = code; + this.message = message; + this.data = data; + this.stackTrace = stackTrace; + this.requestId = MDC.get(CommonConstants.REQUEST_ID); + } + + public ResponseResult(int code, String message) { + this.code = code; + this.message = message; + this.requestId = MDC.get(CommonConstants.REQUEST_ID); + } + + /** + * 返回码 + */ + private int code; + + /** + * 返回信息 + */ + private String message; + + /** + * 返回数据 + */ + private T data; + + /** + * 异常堆栈信息 + */ + private String stackTrace; + + private String requestId; + + public long getSystemCurrentTime() { + return System.currentTimeMillis(); + } + + public static ResponseResult success(T data) { + return new ResponseResult(ResponseCodeEnum.SUCCESS.getCode(), "操作成功", data); + } + + public static ResponseResult success() { + return new ResponseResult(ResponseCodeEnum.SUCCESS.getCode(), "操作成功"); + } + + public static ResponseResult fail(int code, String msg) { + return new ResponseResult(code, msg, false); + } + + public static ResponseResult fail(int code, String msg, String stackTrace) { + return new ResponseResult(code, msg, false, stackTrace); + } + + public static ResponseResult fail(ErrorCodeEnum responseEnum){ + return new ResponseResult(responseEnum.getCode(), responseEnum.getMessage(), false); + } + + public static ResponseResult fail(ErrorCodeEnum responseEnum, Object... objects){ + String message = MessageFormat.format(responseEnum.getMessage(), objects); + return new ResponseResult(responseEnum.getCode(), message, false); + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/response/Result.java b/coolstore-partner-common/src/main/java/com/cool/store/response/Result.java new file mode 100644 index 000000000..986c4dfe0 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/response/Result.java @@ -0,0 +1,11 @@ +package com.cool.store.response; + +import java.io.Serializable; + +/** + * @Description 响应格式父接口 + * @author Aaron + * @date 2019/12/20 + */ +public interface Result extends Serializable { +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/AESDecryptor.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/AESDecryptor.java new file mode 100644 index 000000000..39f7107fb --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/AESDecryptor.java @@ -0,0 +1,139 @@ +package com.cool.store.utils; + +import com.cool.store.exception.ServiceException; + +import java.io.UnsupportedEncodingException; +import java.nio.charset.Charset; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.Arrays; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.KeyGenerator; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.SecretKey; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +/** + * https://cloud.tencent.com/developer/article/1823249 + * 前后端约定 + */ +public class AESDecryptor { + + private static String Algorithm = "AES"; + private static String AlgorithmProvider = "AES/CBC/PKCS5Padding"; //算法/模式/补码方式 + + public static byte[] generatorKey() throws NoSuchAlgorithmException { + KeyGenerator keyGenerator = KeyGenerator.getInstance(Algorithm); + keyGenerator.init(256);//默认128,获得无政策权限后可为192或256 + SecretKey secretKey = keyGenerator.generateKey(); + return secretKey.getEncoded(); + } + + public static IvParameterSpec getIv(byte[] ivstr) throws UnsupportedEncodingException { + IvParameterSpec ivParameterSpec = new IvParameterSpec(ivstr); + return ivParameterSpec; + } + + public static String encrypt(String src, String keystr, IvParameterSpec iv) throws + NoSuchAlgorithmException, + NoSuchPaddingException, + InvalidKeyException, + IllegalBlockSizeException, + BadPaddingException, + UnsupportedEncodingException, + InvalidAlgorithmParameterException { + byte[] key = keystr.getBytes("utf-8"); + SecretKey secretKey = new SecretKeySpec(key, Algorithm); + IvParameterSpec ivParameterSpec = iv; + Cipher cipher = Cipher.getInstance(AlgorithmProvider); + cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec); + byte[] cipherBytes = cipher.doFinal(src.getBytes(Charset.forName("utf-8"))); + return byteToHexString(cipherBytes); + } + + public static String decrypt(String src, String keystr) { + try { + byte[] key = keystr.getBytes("utf-8"); + SecretKey secretKey = new SecretKeySpec(key, Algorithm); + IvParameterSpec ivParameterSpec = getIv(Arrays.copyOfRange(keystr.getBytes("utf-8"), 0, 16)); + Cipher cipher = Cipher.getInstance(AlgorithmProvider); + cipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec); + byte[] hexBytes = hexStringToBytes(src); + byte[] plainBytes = cipher.doFinal(hexBytes); + return new String(plainBytes, "utf-8"); + } catch (Exception e) { + throw new ServiceException(e.getMessage()); + } + } + + /** + * 将byte转换为16进制字符串 + * + * @param src + * @return + */ + public static String byteToHexString(byte[] src) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < src.length; i++) { + int v = src[i] & 0xff; + String hv = Integer.toHexString(v); + if (hv.length() < 2) { + sb.append("0"); + } + sb.append(hv); + } + return sb.toString(); + } + + /** + * 将16进制字符串装换为byte数组 + * + * @param hexString + * @return + */ + public static byte[] hexStringToBytes(String hexString) { + hexString = hexString.toUpperCase(); + int length = hexString.length() / 2; + char[] hexChars = hexString.toCharArray(); + byte[] b = new byte[length]; + for (int i = 0; i < length; i++) { + int pos = i * 2; + b[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); + } + return b; + } + + private static byte charToByte(char c) { + return (byte) "0123456789ABCDEF".indexOf(c); + } + + public static void main(String[] args) { + try { + /* // 密钥必须是16的倍数 + String keystr = "0123456789ABCDEF"; + String ivstr = "0123456789101112"; + String src = "Hello World"; + + System.out.println("密钥:" + keystr); + System.out.println("偏移量:" + ivstr); + System.out.println("原字符串:" + src); + IvParameterSpec iv = getIv(ivstr); + String enc = encrypt(src, keystr, iv); + System.out.println("加密:" + enc); +*/ + String enc = "38395651e391c4b8ca327c4742b7f52f"; + String keystr = "77fea013c3a6459685b83c21a2fc3411"; + String ivstr = "77fea013c3a64596"; + // IvParameterSpec iv = getIv(ivstr); + String dec = decrypt(enc, keystr); + System.out.println("解密:" + dec); + } catch (Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/AesUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/AesUtil.java new file mode 100644 index 000000000..5aef25b12 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/AesUtil.java @@ -0,0 +1,77 @@ +package com.cool.store.utils; + +import com.cool.store.exception.ServiceException; +import org.springframework.util.Assert; + +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.security.AlgorithmParameters; +import java.util.Arrays; +import java.util.Base64; + +/** + * @author zhangchenbiao + * @FileName: AesUtil + * @Description: + * @date 2023-05-29 14:28 + */ + +public class AesUtil { + + private static final Charset utf8 = StandardCharsets.UTF_8; + + + public static String genAesKey() { + return StringUtil.random(32); + } + + public static String encrypt(String content, String aesTextKey) { + return Base64.getEncoder().encodeToString(encrypt(content.getBytes(utf8), aesTextKey.getBytes(utf8))); + } + + public static String decrypt(String content, String aesTextKey) { + byte[] buffer = Base64.getDecoder().decode(content); + return new String(decrypt(buffer, aesTextKey.getBytes(utf8)), utf8); + } + + public static byte[] encrypt(byte[] content, byte[] aesKey) { + Assert.isTrue(aesKey.length == 32, "IllegalAesKey, aesKey's length must be 32"); + try { + Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); + SecretKeySpec keySpec = new SecretKeySpec(aesKey, "AES"); + IvParameterSpec iv = new IvParameterSpec(aesKey, 0, 16); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv); + return cipher.doFinal(Pkcs7Encoder.encode(content)); + } catch (Exception e) { + throw new ServiceException(e.getMessage()); + } + } + + public static byte[] decrypt(byte[] encrypted, byte[] aesKey) { + Assert.isTrue(aesKey.length == 32, "IllegalAesKey, aesKey's length must be 32"); + try { + Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); + SecretKeySpec keySpec = new SecretKeySpec(aesKey, "AES"); + IvParameterSpec iv = new IvParameterSpec(Arrays.copyOfRange(aesKey, 0, 16)); + cipher.init(Cipher.DECRYPT_MODE, keySpec, iv); + return Pkcs7Encoder.decode(cipher.doFinal(encrypted)); + } catch (Exception e) { + throw new ServiceException(e.getMessage()); + } + } + + public static String decryptWechat(String sessionKey, String encryptedData, String ivStr) { + try { + AlgorithmParameters params = AlgorithmParameters.getInstance("AES"); + params.init(new IvParameterSpec(Base64.getDecoder().decode(ivStr))); + Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); + cipher.init(2, new SecretKeySpec(Base64.getDecoder().decode(sessionKey), "AES"), params); + return new String(Pkcs7Encoder.decode(cipher.doFinal(Base64.getDecoder().decode(encryptedData))), StandardCharsets.UTF_8); + } catch (Exception var5) { + throw new ServiceException("AES解密失败"); + } + } +} 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..37008e617 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonContextUtil.java @@ -0,0 +1,111 @@ +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; +import org.springframework.stereotype.Component; + +@Component +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/CoolDateUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/CoolDateUtils.java new file mode 100644 index 000000000..c0d246ecd --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/CoolDateUtils.java @@ -0,0 +1,107 @@ +package com.cool.store.utils; + +import org.apache.commons.lang3.StringUtils; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.*; +import java.util.Calendar; +import java.util.Date; + +/** + * @Author suzhuhong + * @Date 2023/6/8 17:17 + * @Version 1.0 + */ +public class CoolDateUtils { + + public static final String DATE_FORMAT_DAY = "yyyy-MM-dd"; + public static final String DATE_FORMAT_DAY_2 = "yyyy/MM/dd"; + public static final String TIME_FORMAT_SEC = "HH:mm:ss"; + public static final String TIME_FORMAT_SEC2 = "HH:mm"; + public static final String DATE_FORMAT_SEC = "yyyy-MM-dd HH:mm:ss"; + public static final String DATE_FORMAT_SEC_2 = "yyyy/MM/dd HH:mm:ss"; + public static final String DATE_FORMAT_SEC_3 = "yyyy.MM.dd HH:mm:ss"; + public static final String DATE_FORMAT_SEC_4 = "yyyy.MM.dd HH:mm"; + public static final String DATE_FORMAT_SEC_5 = "yyyy.MM.dd HH:mm"; + public static final String DATE_FORMAT_SEC_6 = "yyyy.MM.dd"; + public static final String DATE_FORMAT_SEC_7 = "yyyy/MM/dd HH:mm"; + /** + * 几天后的当前 + * @param d + * @param day + * @return + */ + public static Date getDateBefore(Date d, int day) { + Calendar now = Calendar.getInstance(); + now.setTime(d); + now.set(Calendar.DATE, now.get(Calendar.DATE) + day); + return now.getTime(); + } + + /** + * n天后 的最小时间 20230613 2天后最小时间---->2023-06-15 00:00:00 + * @param day + * @return + */ + public static Date getDateFormatDayMinTime(Date date,int day){ + LocalDate today = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate thirdDay = today.plusDays(day); + LocalDateTime thirdDayMidnight = LocalDateTime.of(thirdDay, LocalTime.MIDNIGHT); + LocalDateTime thirdDay235959 = thirdDayMidnight.with(LocalTime.MIN); + ZonedDateTime zonedDateTime = ZonedDateTime.of(thirdDay235959, ZoneId.systemDefault()); + return Date.from(zonedDateTime.toInstant()); + } + + public static void main(String[] args) { + // 创建一个Date对象 + Date date = new Date(); + + // 将Date对象转换为LocalDate对象 + LocalDate today = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + + System.out.println("LocalDate: " + today); + } + + + + /** + * n天后 的最大时间 20230613 2天后最大时间---->2023-06-15 23:59:59 + * @param day + * @return + */ + public static Date getDateFormatDay(Date date,int day){ + LocalDate today = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate thirdDay = today.plusDays(day); + LocalDateTime thirdDayMidnight = LocalDateTime.of(thirdDay, LocalTime.MIDNIGHT); + LocalDateTime thirdDay235959 = thirdDayMidnight.with(LocalTime.MAX); + ZonedDateTime zonedDateTime = ZonedDateTime.of(thirdDay235959, ZoneId.systemDefault()); + return Date.from(zonedDateTime.toInstant()); + } + + + public static final Date parseDate(String dateString ,String format){ + if (StringUtils.isBlank(dateString)){ + return null; + } + DateFormat dateFormat = new SimpleDateFormat(format); + Date date = null; + try { + date = dateFormat.parse(dateString); + } catch (ParseException e) { + e.printStackTrace(); + } + return date; + } + public static final String DateFormat(Date date,String format){ + if (StringUtils.isBlank(format)){ + return null; + } + DateFormat dateFormat = new SimpleDateFormat(format); + String str = dateFormat.format(date); + return str; + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/EncryptUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/EncryptUtil.java new file mode 100644 index 000000000..e2f37bfc3 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/EncryptUtil.java @@ -0,0 +1,285 @@ +package com.cool.store.utils; + +import com.google.common.base.Strings; +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.Arrays; + +public class EncryptUtil { + + /** Base64 编码 */ + private static final Base64 B64 = new Base64(); + /** 安全的随机数源 */ + private static final SecureRandom RANDOM = new SecureRandom(); + /** AES加密算法 */ + private static final String AES_ALGORITHM = "AES"; + + private static final String AES = "AES/ECB/PKCS5Padding"; + + + public static String MD5(String str) { + String re_md5 = ""; + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + md.update(str.getBytes()); + byte b[] = md.digest(); + + int i; + + StringBuilder buf = new StringBuilder(""); + for (byte aB : b) { + i = aB; + if (i < 0) { + i += 256; + } + if (i < 16) { + buf.append("0"); + } + buf.append(Integer.toHexString(i)); + } + re_md5 = buf.toString(); + + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return re_md5; + } + + public static String maskMail(String mail) { + if (Strings.isNullOrEmpty(mail)) { + return mail; + } + if (!mail.contains("@")) { + return mail; + } + String[] arrays = mail.split("@"); + String account = arrays[0]; + String domain = arrays[1]; + Integer len = account.length(); + if (len <= 2) return mail; + if (len <= 4) { + account = account.substring(0, 2) + "****"; + } else { + String left = account.substring(0, 2); + String right = account.substring(len - 2, len); + account = left + "****" + right; + } + return account + "@" + domain; + } + + public static String maskMobile(String mobile) { + if (Strings.isNullOrEmpty(mobile)) { + return mobile; + } + if (mobile.length() < 11) { + return mobile; + } + return mobile.substring(0, 3) + "****" + mobile.substring(7, 11); + } + + public static String mask(String str) { + if (Strings.isNullOrEmpty(str)) { + return str; + } + + int len = str.length(); + + if (len < 5) { + return str; + } + + return str.substring(0, 2) + "****" + str.substring(len - 2, len); + } + + /** + * AES加密 + * + * @param str + * 需要加密的明文 + * @param key + * 密钥 + * @return 加密后的密文(str / key为null返回null) + */ + public static String aesEncryp(String str, String key) { + return aesEncryp(str, key, false); + } + + + /** + * AES加密 + * + * @param str + * 需要加密的明文 + * @param key + * 密钥 + * @param urlSafety + * 密文是否需要Url安全 + * @return 加密后的密文(str / key为null返回null) + */ + public static String aesEncryp(String str, String key, boolean urlSafety) { + if (null != str && null != key) { + try { + Cipher c = Cipher.getInstance(AES); + c.init(Cipher.ENCRYPT_MODE, aesKey(key), RANDOM); + // 加密 + byte[] bytes = c.doFinal(str.getBytes("UTF-8")); + if (urlSafety) { + return Base64.encodeBase64URLSafeString(bytes); + } else { + return new String(B64.encode(bytes)); + } + } catch (Exception e) { + return new BaseOut(2, "AES加密失败, 密文:" + str + ", key:" + key, null).toString(); + } + } + return null; + } + + + /** + * AES解密 + * + * @param str + * 需要解密的密文(base64编码字符串) + * @param key + * 密钥 + * @return 解密后的明文 + */ + public static BaseOut aesDecrypt(String str, String key) { + if (null != str && null != key) { + try { + Cipher c = Cipher.getInstance(AES); + c.init(Cipher.DECRYPT_MODE, aesKey(key), RANDOM); + // 解密 + return new BaseOut(0, "解密成功", new String(c.doFinal(B64.decode(str)), "UTF-8")); + } catch (BadPaddingException e) { + return new BaseOut(2, "AES解密失败, 密文:" + str + ", key:" + key, null); + } catch (Exception e) { + return new BaseOut(2, "AES解密失败, 密文:" + str + ", key:" + key, null); + } + } + return null; + } + + + /** AES密钥 */ + private static SecretKeySpec aesKey(String key) { + byte[] bs = key.getBytes(); + if (bs.length != 16) { + bs = Arrays.copyOf(bs, 16);// 处理数组长度为16 + } + return new SecretKeySpec(bs, AES_ALGORITHM); + } + + public static String oaMd5() { + String key = "coolcollege20201211sc"; + String thirdSecret = "135990bd839c5fe0a1ca9cbee2475431"; + return MD5(key + thirdSecret); + } + + public static String oaB2gnMd5() { + String key = "coolStore_buErJia_20220425"; + String thirdSecret = "d14cc076b44b435ea0ab06d0b7e04ea8"; + return MD5(key + thirdSecret); + } + + public static String oaMd5(String param) { + String key = "coolstore20220329"; + String thirdSecret = "d14cc076b44b435ea0ab06d0b7e04ea8"; + return MD5(key + thirdSecret + param); + } + + public static String xfsgMd5(String param) { + String key = "coolstorexfsg20240329"; + return MD5(key + param); + } + + public static String getData(String ticket) { + BaseOut result = aesDecrypt(ticket, oaMd5()); + if(result == null || result.getCode() != 0){ + return null; + } + return result.getData().toString(); + } + + public static String getB2gnData(String ticket) { + BaseOut result = aesDecrypt(ticket, oaB2gnMd5()); + if(result == null || result.getCode() != 0){ + return null; + } + return result.getData().toString(); + } + + + public static void main(String[] args) { + //签名 + StringBuffer sb = new StringBuffer(); + //用户唯一标识id + sb.append("userId=132537313837929006").append("&"); + //企业唯一标识enterpriseId + sb.append("enterpriseId=45f92210375346858b6b6694967f44de").append("&"); + sb.append("bizContent={\"taskList\":[{\"taskName\":\"阿斯顿\",\"taskType\":\"QUESTION_ORDER\",\"taskDesc\":\"测试\",\"attachUrl\":\"{\\\"id\\\":149,\\\"fileName\\\":\\\"新建 DOC 文档.doc\\\",\\\"url\\\":\\\"https://oss-store.coolcollege.cn/doc/sop/45471386126883973.doc\\\",\\\"type\\\":\\\"doc\\\",\\\"category\\\":\\\"doc\\\",\\\"createUserId\\\":\\\"0327344625645542\\\",\\\"createUser\\\":\\\"不易\\\",\\\"createTime\\\":1642692983000,\\\"visibleUser\\\":\\\"\\\",\\\"visibleRole\\\":\\\"\\\",\\\"visibleUserName\\\":\\\"\\\",\\\"visibleRoleName\\\":\\\"\\\"}\",\"taskInfo\":\"{\\\"photos\\\":[\\\"https://oss-store.coolcollege.cn/eid/45f92210375346858b6b6694967f44de/2203/5fc6b6f2cd2243588272992382452bb4.jpg\\\"],\\\"videos\\\":\\\"{\\\\\\\"videoList\\\\\\\":[]}\\\",\\\"contentLearnFirst\\\":false,\\\"courseList\\\":[]}\",\"beginTime\":1648546065361,\"endTime\":1649150454152,\"beginTime\":1648546065361,\"endTime\":1649150454152,\"form\":[{\"type\":\"STANDARD_COLUMN\",\"value\":4324,\"name\":\"奥尔业务员奥尔业务员奥尔业务员奥尔业务员奥尔业务员奥尔业务员奥尔业务员奥尔业务员奥尔业务员奥尔业务员奥尔业务员奥尔业务员奥尔业务员奥尔业务员奥尔业务员奥尔业务员奥尔业务员奥尔业务员奥尔业务员奥尔业务员\"}],\"storeIds\":[{\"type\":\"store\",\"value\":\"c61119bf721940f098169ec4d065e79a\"}],\"process\":[{\"nodeNo\":1,\"user\":[{\"type\":\"person\",\"value\":\"132537313837929006\"}],\"approveType\":\"any\"},{\"nodeNo\":2,\"user\":[{\"type\":\"person\",\"value\":\"132537313837929006\"}],\"approveType\":\"any\"},{\"nodeNo\":3,\"user\":[{\"type\":\"person\",\"value\":\"132537313837929006\"}],\"approveType\":\"any\"},{\"nodeNo\":\"cc\",\"user\":[{\"type\":\"person\",\"value\":\"132537313837929006\"}],\"approveType\":\"any\"}]}]}"); + //sb.append("bizContent={\"pageNumber\":\"1\",\"pageSize\":\"10\",\"storeId\":\"888ab0bddac5432e9b037078366598d6\"}"); + //加密 + String sign = oaMd5(sb.toString()); + System.out.println("sign:" + sign); + } +} + +class BaseOut { + + private int code = 0; + + private String msg; + + private Object data; + + public BaseOut() { + } + + public BaseOut(int code) { + this.code = code; + } + + public BaseOut(int code, String msg) { + this.code = code; + this.msg = msg; + } + + public BaseOut(int code, String msg, Object data) { + this.code = code; + this.msg = msg; + this.data = data; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } +} + diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/GeoMapUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/GeoMapUtil.java new file mode 100644 index 000000000..9670f9072 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/GeoMapUtil.java @@ -0,0 +1,89 @@ +package com.cool.store.utils; + +import com.alibaba.fastjson.JSONObject; +import lombok.Data; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +/** + * @author zhangchenbiao + * @FileName: GeoMapUtil + * @Description: + * @date 2024-04-23 11:26 + */ +public class GeoMapUtil { + + private static final String AMAP_API_URL = "https://restapi.amap.com/v3/geocode/regeo"; + private static final String API_KEY = "2270e9b7e353ee588e133b4fdbc8b7df"; + + public static void main(String[] args) { + AddressInfo addressInfo = reverseGeoCoding("30.41875", "120.2985"); + System.out.println(JSONObject.toJSONString(addressInfo)); + System.out.println(JSONObject.toJSONString(reverseGeoCoding("30.41", "120.29"))); + } + + public static AddressInfo reverseGeoCoding(String latitude, String longitude) { + BufferedReader in = null; + try { + URL url = new URL(AMAP_API_URL + "?location=" + longitude + "," + latitude + "&output=json&key=" + API_KEY); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + connection.connect(); + if(connection.getResponseCode() == HttpURLConnection.HTTP_OK){ + in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String inputLine; + StringBuilder content = new StringBuilder(); + while ((inputLine = in.readLine()) != null) { + content.append(inputLine); + } + JSONObject jsonObject = JSONObject.parseObject(content.toString()); + // 提取并构建AddressInfo对象 + AddressInfo addressInfo = extractAddressInfo(jsonObject.getJSONObject("regeocode")); + return addressInfo; + } + } catch (IOException e) { + System.out.println("Error occurred while making the request: " + e.getMessage()); + }finally { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return null; + } + + private static AddressInfo extractAddressInfo(JSONObject geoJson) { + JSONObject addressComponent = geoJson.getJSONObject("addressComponent"); + // 根据实际响应结构解析省市区街道信息,此处仅为示例 + String province = (String) addressComponent.get("province"); + String city = (String) addressComponent.get("city"); + String district = (String) addressComponent.get("district"); + String township = (String) addressComponent.get("township"); + String address = geoJson.getString("formatted_address"); + return new AddressInfo(province, city, district, township, address); + } + + @Data + public static class AddressInfo { + private String province; + private String city; + private String district; + private String township; + private String address; + + public AddressInfo(String province, String city, String district, String township, String address) { + this.province = province; + this.city = city; + this.district = district; + this.township = township; + this.address = address; + } + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/ListOptUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/ListOptUtils.java new file mode 100644 index 000000000..9550aa4c1 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/ListOptUtils.java @@ -0,0 +1,42 @@ +package com.cool.store.utils; + +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: ListUtils + * @Description: 集合处理 + * @date 2022-03-04 20:04 + */ +public class ListOptUtils { + + public static List getIntersection(List listA, List listB){ + if(CollectionUtils.isEmpty(listA) || CollectionUtils.isEmpty(listB)){ + return Lists.newArrayList(); + } + return listA.stream().filter(item -> listB.contains(item)).collect(Collectors.toList()); + } + + + /** + * long集合转Stirng集合 + * @param listA + * @return + */ + public static List longListConvertStringList(List listA){ + List result = Lists.newArrayList(); + if(CollectionUtils.isEmpty(listA)){ + return result; + } + for (Long temp:listA) { + result.add(String.valueOf(temp)); + } + return result; + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/Md5Utils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/Md5Utils.java new file mode 100644 index 000000000..1eecf8582 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/Md5Utils.java @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.cool.store.utils; + +import com.cool.store.exception.ServiceException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +/** + * The type Md5 utils. + */ +public class Md5Utils { + /** + * logger. + */ + private static final Logger LOG = LoggerFactory.getLogger(Md5Utils.class); + + /** + * Md 5 string. + * + * @param src the src + * @param charset the charset + * + * @return the string + */ + private static String md5(final String src, final String charset) { + MessageDigest md5; + StringBuilder hexValue = new StringBuilder(32); + try { + md5 = MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException e) { + throw new ServiceException(e.getMessage()); + } + byte[] byteArray = new byte[0]; + try { + byteArray = src.getBytes(charset); + } catch (UnsupportedEncodingException e) { + LOG.error(e.getMessage(), e); + } + byte[] md5Bytes = md5.digest(byteArray); + for (byte md5Byte : md5Bytes) { + int val = ((int) md5Byte) & 0xff; + if (val < 16) { + hexValue.append("0"); + } + hexValue.append(Integer.toHexString(val)); + } + return hexValue.toString(); + } + + /** + * Md 5 string. + * + * @param src the src + * @return the string + */ + public static String md5(final String src) { + return md5(src, StandardCharsets.UTF_8.name()); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/NumberConverter.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/NumberConverter.java new file mode 100644 index 000000000..d21aa3900 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/NumberConverter.java @@ -0,0 +1,34 @@ +package com.cool.store.utils; + +/** + * @author zhangchenbiao + * @FileName: NumberConverter + * @Description: + * @date 2024-04-10 17:07 + */ +public class NumberConverter { + + private static final char[] CN_NUMBERS = {'零', '一', '二', '三', '四', '五', '六', '七', '八', '九'}; + private static final char[] CN_UNITS = {'个', '十', '百', '千', '万'}; + public static String convertArabicToChinese(int number) { + String result = ""; + // 将数字转换为字符串 + String numStr = String.valueOf(number); + int len = numStr.length(); + boolean lastIsZero = false; + for (int i = 0; i < len; i++) { + int n = numStr.charAt(i) - '0'; // 转换为数字 + if (n != 0 || (!lastIsZero && i != len - 1)) { + result += CN_NUMBERS[n]; // 转换为中文数字 + if (i != len - 1) { + // 不是最后一位数字,需要添加单位 + result += CN_UNITS[(len - 1 - i)]; + } + } else { + lastIsZero = true; + } + } + return result; + } +} + diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/PDFUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/PDFUtils.java new file mode 100644 index 000000000..0f9d02d16 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/PDFUtils.java @@ -0,0 +1,171 @@ +package com.cool.store.utils; + +import com.lowagie.text.Document; +import com.lowagie.text.Font; +import com.lowagie.text.Image; +import com.lowagie.text.Paragraph; +import com.lowagie.text.pdf.*; +import lombok.extern.slf4j.Slf4j; +import org.icepdf.core.exceptions.PDFException; +import org.icepdf.core.exceptions.PDFSecurityException; +import org.icepdf.core.pobjects.Page; +import org.icepdf.core.util.GraphicsRenderingHints; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.awt.image.RenderedImage; +import java.io.*; + +/** + * 使用 OpenPDF 封装的 pdf 工具类 + */ +@Slf4j +public class PDFUtils { + + private static final int[] A4Size = {595, 842}; + + /** + * 设置 pdf 背景图片(A4) + * 每页都需要单独设置 + */ + public static void setBackgroundImgA4(Document document, Image image) { + //图片顶格 + image.setAbsolutePosition(0, 0); + //填满 A4 大小的页面 + image.scaleAbsolute(A4Size[0], A4Size[1]); + document.add(image); + } + + /** + * 设置 pdf 背景图片 + * 每页都需要单独设置 + */ + public static void setBackgroundImg(Document document, Image image, int width, int height) { + //图片顶格 + image.setAbsolutePosition(0, 0); + image.scaleAbsolute(width, height); + document.add(image); + } + + /** + * 将文本放在 pdf 的绝对位置上来抠模板(不指定字体,默认为 OpenPDF 自带的 STSong-Light Normal) + * @param reader PdfReader 流 + * @param outputStream 输出流 + * @param x 左边距 + * @param y 下边距 + * @param content 要插入的文本 + * @param fontSize 字体大小 + * @param color 文本颜色 + */ + public static void putParagraphAbsolutely(PdfReader reader, OutputStream outputStream, float x, float y, String content, float fontSize, Color color) { + try { + BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); + addContent(reader, outputStream, content, x, y, baseFont, fontSize, 0, color); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + /** + * 指定字体的文本绝对位置插入方法 + * @param reader PdfReader 流 + * @param outputStream 输出流 + * @param x 左边距 + * @param y 下边距 + * @param content 要插入的文本 + * @param baseFont 字体设置(如果不使用 OpenPDF 自带的字体,就需要将字体文件放在项目路径下) + * 自定义字体方式 + * ttf 字体 + * 1. BaseFont baseFont = BaseFont.createFont("arial.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); + * ttc 字体(包含了两种字体,所以需要选择 0 或 1) + * 2. BaseFont baseFont = BaseFont.createFont("simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); + * @param fontSize 字体大小 + * @param fontStyle 字体风格() + * NORMAL = 0; BOLD = 1; ITALIC = 2; UNDERLINE = 4; STRIKETHRU = 8; BOLDITALIC = BOLD | ITALIC; + * @param color 字体颜色 + */ + public static void putParagraphAbsolutely(PdfReader reader, OutputStream outputStream, float x, float y, String content, BaseFont baseFont, float fontSize, int fontStyle, Color color) { + addContent(reader, outputStream, content, x, y, baseFont, fontSize, fontStyle, color); + } + + /** + * 插入文本的 raw 方法 + * @param reader PDF 读取流 + * @param outputStream 输出流 + * @param content 插入文本 + * @param x 左边距 + * @param y 下边距 + * @param baseFont 字体和编码设置 + * @param fontSize 字体大小 + * @param fontStyle 字体风格 + * @param color 字体颜色 + */ + private static void addContent(PdfReader reader, OutputStream outputStream, String content, float x, float y, BaseFont baseFont, float fontSize, int fontStyle, Color color) { + PdfStamper stamper = null; + try { + //生成 paragraph 并放在正确位置 + //抠模板 + stamper = new PdfStamper(reader, outputStream); + PdfContentByte over = stamper.getOverContent(1); + Font font = new Font(baseFont, fontSize, fontStyle, color); + Paragraph insertContent = new Paragraph(content, font); + + ColumnText columnText = new ColumnText(over); + // llx 和 urx 最小的值决定离左边的距离. lly 和 ury 最大的值决定离下边的距离 + columnText.setSimpleColumn(x, y, Float.MAX_VALUE, Float.MIN_VALUE); + columnText.addElement(insertContent); + columnText.go(); + stamper.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + try { + if (stamper != null) { + stamper.close(); + } + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + } + + /** + * PDF 转图片 + * @param inputStream pdf 输入流 + * @param scale 缩放比例 + */ + //不再将通过函转为图片 + @Deprecated + public static ByteArrayOutputStream pdf2Img(InputStream inputStream, float scale) { + org.icepdf.core.pobjects.Document document = new org.icepdf.core.pobjects.Document(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + try { + document.setInputStream(inputStream, ""); + + float rotation = 0f;// 旋转角度 + for (int i = 0; i < document.getNumberOfPages(); i++) { + BufferedImage image = (BufferedImage) document.getPageImage(i, + GraphicsRenderingHints.SCREEN, Page.BOUNDARY_CROPBOX, + rotation, scale); + RenderedImage rendImage = image; + ImageIO.write(rendImage, "png", outputStream); + //例子中是pdf转png格式的,也可以将上面两行改成jpg,转出jpg格式的, + //但是从转换效果来看png的清晰度会相对较高。有个小技巧是第一行行改成jpg, + //但第二行使用png,也就是转换成jpg格式但有png清晰度的图片。 + image.flush(); + document.dispose(); + return outputStream; + } + } catch (PDFException | IOException | InterruptedException | PDFSecurityException e) { + log.error("PDF转图片异常, e{}", e.getMessage()); + } finally { + try { + outputStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + return outputStream; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/PassLetterUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/PassLetterUtils.java new file mode 100644 index 000000000..54f8032e6 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/PassLetterUtils.java @@ -0,0 +1,83 @@ +package com.cool.store.utils; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.RandomUtil; +import com.lowagie.text.Document; +import com.lowagie.text.Image; +import com.lowagie.text.pdf.BaseFont; +import com.lowagie.text.pdf.PdfReader; +import com.lowagie.text.pdf.PdfWriter; + +import java.awt.*; +import java.io.*; +import java.util.Date; + +//生成资格面试通过函的工具 +public class PassLetterUtils { + + /** + * 生成通过函的方法 + * 返回通过函编码 + * @param partnerName 加盟商姓名 + * @param verifyCity 审批城市 + * @param passCode 通过函编码 + * @param passTime 审批通过时间 + */ + public static ByteArrayOutputStream genPassLetter(String partnerName, String passCode, String verifyCity, Date passTime) { + String passTimeStr = DateUtil.format(passTime, "yyyy年MM月dd日"); + Document document = new Document(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + try { + //1. 创建 pdf document +// FileOutputStream outputStream = new FileOutputStream("passLetter.pdf"); + PdfWriter.getInstance(document, outputStream); + document.open(); + + //2. 添加背景图片 + Image img = Image.getInstance(PassLetterUtils.class.getResource("/static/passLetterBg.jpg").toString()); + PDFUtils.setBackgroundImgA4(document, img); + document.close(); + + //3. 填写通过函模板信息 + addContentToPdf(outputStream, partnerName + " 先生/女士", 122, 638); + addContentToPdf(outputStream, passCode, 122, 557); + addContentToPdf(outputStream, verifyCity, 155, 492); + addContentToPdf(outputStream, "60天", 135, 448); + addContentToPdf(outputStream, passTimeStr, 385, 152); + return outputStream; + } catch (IOException e) { + throw new RuntimeException(e); + } + finally { + try { + document.close(); + outputStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + /** + * 生成 passCode 的方法,拆分出来方便单独获取 passCode + * @return + */ + public static String genPassCode(Date passTime) { + String randomNum = RandomUtil.randomNumbers(5); + String passCode = "HSAY" + DateUtil.format(passTime, "yyMMdd") + "-" + randomNum; + return passCode; + } + + private static void addContentToPdf(ByteArrayOutputStream outputStream, String content, float x, float y) { + try { + ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); + PdfReader pdfReader = new PdfReader(inputStream); + String fontFamilyPath = PassLetterUtils.class.getResource("/static/Alibaba-PuHuiTi-Regular.ttf").toString(); + BaseFont font = BaseFont.createFont(fontFamilyPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); + PDFUtils.putParagraphAbsolutely(pdfReader, outputStream, x, y, content, font, 19, 1, new Color(255, 82,25)); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/Pkcs7Encoder.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/Pkcs7Encoder.java new file mode 100644 index 000000000..074db0c70 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/Pkcs7Encoder.java @@ -0,0 +1,71 @@ +package com.cool.store.utils; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; + +/** + * @author zhangchenbiao + * @FileName: Pkcs7Encoder + * @Description: + * @date 2023-05-29 14:29 + */ +public class Pkcs7Encoder { + + private static int BLOCK_SIZE = 32; + private static final Charset CHARSET = StandardCharsets.UTF_8; + + /** + * 获得对明文进行补位填充的字节. + * + * @param count 需要进行填充补位操作的明文字节个数 + * @return 补齐用的字节数组 + */ + public static byte[] encode(int count) { + // 计算需要填充的位数 + int amountToPad = BLOCK_SIZE - (count % BLOCK_SIZE); + // 获得补位所用的字符 + char padChr = chr(amountToPad); + StringBuilder tmp = new StringBuilder(); + for (int index = 0; index < amountToPad; index++) { + tmp.append(padChr); + } + return tmp.toString().getBytes(CHARSET); + } + + public static byte[] encode(byte[] src) { + int count = src.length; + // 计算需要填充的位数 + int amountToPad = BLOCK_SIZE - (count % BLOCK_SIZE); + if (amountToPad == 0) { + amountToPad = BLOCK_SIZE; + } + // 获得补位所用的字符 + byte pad = (byte) (amountToPad & 0xFF); + byte[] pads = new byte[amountToPad]; + for (int index = 0; index < amountToPad; index++) { + pads[index] = pad; + } + int length = count + amountToPad; + byte[] dest = new byte[length]; + System.arraycopy(src, 0, dest, 0, count); + System.arraycopy(pads, 0, dest, count, amountToPad); + return dest; + } + + public static byte[] decode(byte[] decrypted) { + int pad = decrypted[decrypted.length - 1]; + if (pad < 1 || pad > BLOCK_SIZE) { + pad = 0; + } + if (pad > 0) { + return Arrays.copyOfRange(decrypted, 0, decrypted.length - pad); + } + return decrypted; + } + + private static char chr(int a) { + byte target = (byte) (a & 0xFF); + return (char) target; + } +} \ No newline at end of file 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..cafac3462 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisConstantUtil.java @@ -0,0 +1,110 @@ +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; + + @Value("${mybatis.configuration.variables.enterpriseId}") + private String eid; + + /** + * 获取钉钉同步区域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 regionId) { + return active + "_" + RedisConstant.REGION_ALL_NAME_CACHE + eid + ":" + regionId; + } + + public String getPhoneNumber(String phoneNumber) { + + return active + "_" + RedisConstant.PHONE_NUMBER + phoneNumber; + } + + public String getUserWantAreaListKey(String userId) { + return active + "_" + RedisConstant.USER_WANT_AREA_CACHE + eid + ":" + userId; + } + + public String getInvestmentManagerKey(Long wantShopAreaId, Long roleId) { + return active + "_" + RedisConstant.INVESTMENT_MANAGER_CACHE + eid + ":" + wantShopAreaId + ":" + roleId ; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtil.java new file mode 100644 index 000000000..8223f7559 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtil.java @@ -0,0 +1,178 @@ +package com.cool.store.utils; + +import com.cool.store.constants.CommonConstants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +/** + * redis工具类 + * + * @author Aaron + * @ClassName RedisUtil + * @Description redis工具类 + */ +@Repository +@Slf4j +public class RedisUtil { + + @Resource(name = "customizeTemplate") + protected RedisTemplate redisTemplate; + + + public void put(String key, String hashKey, Map value) { + HashOperations hash = redisTemplate.opsForHash(); + hash.put(key, hashKey, value); + } + + public void put(String key, String hashKey, Object value) { + HashOperations hash = redisTemplate.opsForHash(); + hash.put(key, hashKey, value); + } + + + public Boolean haseHashKey(String key, String hashKey) { + HashOperations hash = redisTemplate.opsForHash(); + Boolean hase = hash.hasKey(key, hashKey); + return hase == null ? Boolean.FALSE : hase; + } + + + public Boolean putIfAbsent(String key, String hashKey, Object value) { + HashOperations hash = redisTemplate.opsForHash(); + return hash.putIfAbsent(key, hashKey, value); + } + + public void putAll(String key, Map value) { + HashOperations hash = redisTemplate.opsForHash(); + hash.putAll(key, value); + } + + public void putAll(String key, Map value, Long time, TimeUnit timeUnit) { + HashOperations hash = redisTemplate.opsForHash(); + hash.putAll(key, value); + redisTemplate.expire(key, time, timeUnit); + } + + public void put(String key, Object value, Long time, TimeUnit timeUnit) { + redisTemplate.opsForValue().set(key, value, time, timeUnit); + } + + + public Map entries(String key) { + HashOperations hash = redisTemplate.opsForHash(); + return hash.entries(key); + } + + public Object get(String key, String hashKey) { + HashOperations hash = redisTemplate.opsForHash(); + return hash.get(key, hashKey); + } + + public void flushDb() { + redisTemplate.getConnectionFactory().getConnection().flushDb(); + log.info("redis flushDb is ok."); + } + + public void delete(String key, Object hashKey) { + HashOperations hash = redisTemplate.opsForHash(); + hash.delete(key, hashKey); + } + + public Collection multiGet(String key, Collection hashKeys) { + HashOperations hash = redisTemplate.opsForHash(); + return hash.multiGet(key, hashKeys); + } + + public Set keys(String key) { + HashOperations hash = redisTemplate.opsForHash(); + return hash.keys(key); + } + + public Long size(String key) { + HashOperations hash = redisTemplate.opsForHash(); + return hash.size(key); + } + + public Collection values(String key) { + HashOperations hash = redisTemplate.opsForHash(); + return hash.values(key); + } + + public RedisOperations getOperations() { + HashOperations hash = redisTemplate.opsForHash(); + return hash.getOperations(); + } + + public String hashGetString(String key, String hashKey) { + HashOperations hash = redisTemplate.opsForHash(); + Object value = hash.get(key, hashKey); + return value == null ? null : String.valueOf(value); + } + + public void hashSet(String key, String field, String value) { + put(key, field, value); + } + + public void lPush(String key, String value) { + redisTemplate.opsForList().leftPush(key, value); + } + + public String rPop(String key) { + return (String)redisTemplate.opsForList().rightPop(key); + } + + /** + * 检查list是否为空 + * @param key + * @return + */ + public Boolean listExists(String key) { + return redisTemplate.opsForList().size(key) > CommonConstants.ZERO; + } + + /** + * set集合add + * @param key + * @param value + * @return + */ + public Long setAdd(String key, String value) { + return redisTemplate.opsForSet().add(key, value); + } + + /** + * set集合校验value是否存在 + * @param key + * @param value + * @return + */ + public Boolean setIsMember(String key, String value) { + return redisTemplate.opsForSet().isMember(key, value); + } + + /** + * set集合长度 + * @param key + * @return + */ + public Long setSize(String key) { + return redisTemplate.opsForSet().size(key); + } + + public void delete(String key) { + redisTemplate.delete(key); + } + + public Long increment(String key) { + return redisTemplate.boundValueOps(key).increment(1L); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtilPool.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtilPool.java new file mode 100644 index 000000000..3cd7927e7 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/RedisUtilPool.java @@ -0,0 +1,1427 @@ +package com.cool.store.utils; + +import org.apache.commons.lang3.StringUtils; +import redis.clients.jedis.*; + +import java.util.*; + +/** + * 内存数据库Redis的辅助类,负责对内存数据库的所有操作 + * + * @author fengjc + * @version V1.0 + */ +public class RedisUtilPool { + // 数据源 + private ShardedJedisPool shardedJedisPool; + + /** + * dbIndex和连接池的映射 + */ + private Map shardedJedisPoolMap; + + private static final String LOCK_SUCCESS = "OK"; + private static final String SET_IF_NOT_EXIST = "NX"; + private static final String SET_WITH_EXPIRE_TIME = "PX"; + + /** + * 它保证在执行操作之后释放数据源returnResource(jedis) + * + * @param + * @author fengjc + * @version V1.0 + */ + abstract class Executor { + + ShardedJedis jedis; + ShardedJedisPool shardedJedisPool; + + public Executor(ShardedJedisPool shardedJedisPool) { + this.shardedJedisPool = shardedJedisPool; + jedis = this.shardedJedisPool.getResource(); + } + + /** + * 回调 + * + * @return 执行结果 + */ + abstract T execute(); + + /** + * 调用{@link #execute()}并返回执行结果 + * 它保证在执行{@link #execute()}之后释放数据源returnResource(jedis) + * + * @return 执行结果 + */ + public T getResult() { + T result = null; + try { + result = execute(); + } catch (Throwable e) { + throw new RuntimeException("Redis execute exception", e); + } finally { + if (jedis != null) { + jedis.close(); + } + } + return result; + } + } + + /** + * 删除模糊匹配的key + * + * @param likeKey 模糊匹配的key + * @return 删除成功的条数 + */ + public long delKeysLike(final String likeKey) { + return new Executor(shardedJedisPool) { + + @Override + Long execute() { + Collection jedisC = jedis.getAllShards(); + Iterator iter = jedisC.iterator(); + long count = 0; + while (iter.hasNext()) { + Jedis _jedis = iter.next(); + Set keys = _jedis.keys(likeKey + "*"); + if (keys != null && keys.size() > 0) + count += _jedis.del(keys.toArray(new String[keys.size()])); + } + return count; + } + }.getResult(); + } + + /** + * 删除 + * + * @param key 匹配的key + * @return 删除成功的条数 + */ + public Long delKey(final String key) { + return new Executor(shardedJedisPool) { + @Override + Long execute() { + return jedis.del(key); + } + }.getResult(); + } + + /** + * 删除 + * + * @param key 匹配的key + * @return 删除成功的条数 + */ + public Long delKey(final String key, final Integer dbIndex) { + ShardedJedisPool jedisPool = null; + if (null != shardedJedisPoolMap) { + jedisPool = shardedJedisPoolMap.get(dbIndex); + } + if (null == jedisPool) { + jedisPool = shardedJedisPool; + } + return new Executor(jedisPool) { + @Override + Long execute() { + return jedis.del(key); + } + }.getResult(); + + } + + /** + * 删除 + * + * @param keys 匹配的key的集合 + * @return 删除成功的条数 + */ + public Long delKeys(final String[] keys) { + return new Executor(shardedJedisPool) { + @Override + Long execute() { + Collection jedisC = jedis.getAllShards(); + Iterator iter = jedisC.iterator(); + long count = 0; + while (iter.hasNext()) { + Jedis _jedis = iter.next(); + count += _jedis.del(keys); + } + return count; + } + }.getResult(); + } + + /** + * 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。 + * 在 Redis 中,带有生存时间的 key 被称为『可挥发』(volatile)的。 + * + * @param key key + * @param expire 生命周期,单位为秒 + * @return 1: 设置成功 0: 已经超时或key不存在 + */ + public Long expire(final String key, final int expire) { + return new Executor(shardedJedisPool) { + + @Override + Long execute() { + return jedis.expire(key, expire); + } + }.getResult(); + } + + /** + * 获取给定key的剩余有效时间 + * + * @param key + * @return + */ + public Long getExpire(final String key) { + return new Executor(shardedJedisPool) { + + @Override + Long execute() { + return jedis.ttl(key); + } + }.getResult(); + } + + + /** + * 一个跨jvm的id生成器,利用了redis原子性操作的特点 + * + * @param key id的key + * @return 返回生成的Id + */ + public long makeId(final String key) { + return new Executor(shardedJedisPool) { + + @Override + Long execute() { + long id = jedis.incr(key); + if ((id + 75807) >= Long.MAX_VALUE) { + // 避免溢出,重置,getSet命令之前允许incr插队,75807就是预留的插队空间 + jedis.getSet(key, "0"); + } + return id; + } + }.getResult(); + } + + /* ======================================Strings====================================== */ + + /** + * 将字符串值 value 关联到 key 。 + * 如果 key 已经持有其他值, setString 就覆写旧值,无视类型。 + * 对于某个原本带有生存时间(TTL)的键来说, 当 setString 成功在这个键上执行时, 这个键原有的 TTL 将被清除。 + * 时间复杂度:O(1) + * + * @param key key + * @param value string value + * @return 在设置操作成功完成时,才返回 OK 。 + */ + public String setString(final String key, final String value) { + return new Executor(shardedJedisPool) { + + @Override + String execute() { + return jedis.set(key, value); + } + }.getResult(); + } + + /** + * 将值 value 关联到 key ,并将 key 的生存时间设为 expire (以秒为单位)。 + * 如果 key 已经存在, 将覆写旧值。 + * 类似于以下两个命令: + * SET key value + * EXPIRE key expire # 设置生存时间 + * 不同之处是这个方法是一个原子性(atomic)操作,关联值和设置生存时间两个动作会在同一时间内完成,在 Redis 用作缓存时,非常实用。 + * 时间复杂度:O(1) + * + * @param key key + * @param value string value + * @param expire 生命周期 + * @return 设置成功时返回 OK 。当 expire 参数不合法时,返回一个错误。 + */ + public String setString(final String key, final String value, final int expire) { + return new Executor(shardedJedisPool) { + + @Override + String execute() { + return jedis.setex(key, expire, value); + } + }.getResult(); + } + + + /** + * 时间复杂度: O(1) + * 为键 key 储存的数字值加上增量 increment 。 + * 如果键 key 不存在, 那么键 key 的值会先被初始化为 0 , 然后再执行 INCRBY 命令。 + * 如果键 key 储存的值不能被解释为数字, 那么 INCRBY 命令将返回一个错误。 + * 本操作的值限制在 64 位(bit)有符号数字表示之内。 + * + * @param key key + * @param increment 计数步长 + * @return 在加上增量 increment 之后, 键 key 当前的值。 + */ + public Long incrby(final String key, final long increment) { + return new Executor(shardedJedisPool) { + + @Override + Long execute() { + return jedis.incrBy(key, increment); + } + }.getResult(); + } + + public Long incrby(final String key, final long increment, int cacheTime) { + return new Executor(shardedJedisPool) { + + @Override + Long execute() { + Long result = jedis.incrBy(key, increment); + expire(key, cacheTime); + return result; + } + }.getResult(); + } + + /** + * 将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key 已经存在,则 setStringIfNotExists 不做任何动作。 + * 时间复杂度:O(1) + * + * @param key key + * @param value string value + * @return 设置成功,返回 1 。设置失败,返回 0 。 + */ + public Long setStringIfNotExists(final String key, final String value) { + return new Executor(shardedJedisPool) { + + @Override + Long execute() { + return jedis.setnx(key, value); + } + }.getResult(); + } + + /** + * 将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key 已经存在,则 setNxExpire 不做任何动作。 + * + * 时间复杂度:O(1) + * + * @param key key + * @param value string value + * @param expire 超时时间 + * @return 设置成功,返回 true 。设置失败,返回 false 。 + */ + public boolean setNxExpire(final String key, final String value, final int expire) { + String res = new Executor(shardedJedisPool) { + @Override + String execute() { + return jedis.set(key, value, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expire); + } + }.getResult(); + return res != null && res.equals(LOCK_SUCCESS); + } + + /** + * 返回 key 所关联的字符串值。如果 key 不存在那么返回特殊值 nil 。 + * 假如 key 储存的值不是字符串类型,返回一个错误,因为 getString 只能用于处理字符串值。 + * 时间复杂度: O(1) + * + * @param key key + * @return 当 key 不存在时,返回 nil ,否则,返回 key 的值。如果 key 不是字符串类型,那么返回一个错误。 + */ + public String getString(final String key) { + return new Executor(shardedJedisPool) { + + @Override + String execute() { + return jedis.get(key); + } + }.getResult(); + } + + /** + * 批量的 {@link #setString(String, String)} + * + * @param pairs 键值对数组{数组第一个元素为key,第二个元素为value} + * @return 操作状态的集合 + */ + public List batchSetString(final List> pairs) { + return new Executor>(shardedJedisPool) { + + @Override + List execute() { + ShardedJedisPipeline pipeline = jedis.pipelined(); + for (Pair pair : pairs) { + pipeline.set(pair.getKey(), pair.getValue()); + } + return pipeline.syncAndReturnAll(); + } + }.getResult(); + } + + /** + * 批量的 {@link #getString(String)} + * + * @param keys key数组 + * @return value的集合 + */ + public List batchGetString(final String[] keys) { + return new Executor>(shardedJedisPool) { + + @Override + List execute() { + ShardedJedisPipeline pipeline = jedis.pipelined(); + List result = new ArrayList(keys.length); + List> responses = new ArrayList>(keys.length); + for (String key : keys) { + responses.add(pipeline.get(key)); + } + pipeline.sync(); + for (Response resp : responses) { + result.add(resp.get()); + } + return result; + } + }.getResult(); + } + + /* ======================================Hashes====================================== */ + + /** + * 将哈希表 key 中的域 field 的值设为 value 。 + * 如果 key 不存在,一个新的哈希表被创建并进行 hashSet 操作。 + * 如果域 field 已经存在于哈希表中,旧值将被覆盖。 + * 时间复杂度: O(1) + * + * @param key key + * @param field 域 + * @param value string value + * @return 如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 。如果哈希表中域 field 已经存在且旧值已被新值覆盖,返回 0 。 + */ + public Long hashSet(final String key, final String field, final String value) { + return new Executor(shardedJedisPool) { + + @Override + Long execute() { + return jedis.hset(key, field, value); + } + }.getResult(); + } + + /** + * 将哈希表 key 中的域 field 的值设为 value 。 + * 如果 key 不存在,一个新的哈希表被创建并进行 hashSet 操作。 + * 如果域 field 已经存在于哈希表中,旧值将被覆盖。 + * + * @param key key + * @param field 域 + * @param value string value + * @param expire 生命周期,单位为秒 + * @return 如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 。如果哈希表中域 field 已经存在且旧值已被新值覆盖,返回 0 。 + */ + public Long hashSet(final String key, final String field, final String value, final int expire) { + return new Executor(shardedJedisPool) { + + @Override + Long execute() { + Pipeline pipeline = jedis.getShard(key).pipelined(); + Response result = pipeline.hset(key, field, value); + pipeline.expire(key, expire); + pipeline.sync(); + return result.get(); + } + }.getResult(); + } + + /** + * 返回哈希表 key 中给定域 field 的值。 + * 时间复杂度:O(1) + * + * @param key key + * @param field 域 + * @return 给定域的值。当给定域不存在或是给定 key 不存在时,返回 nil 。 + */ + public String hashGet(final String key, final String field) { + return new Executor(shardedJedisPool) { + + @Override + String execute() { + return jedis.hget(key, field); + } + }.getResult(); + } + + /** + * 返回哈希表 key 中给定域 field 的值。 + * 时间复杂度:O(1) + * + * @param key key + * @param field 域 + * @return 给定域的值。当给定域不存在或是给定 key 不存在时,返回 nil 。 + */ + public String hashGetByIdx(final String key, final String field, final int dbIndex) { + ShardedJedisPool jedisPool = null; + if (null != shardedJedisPoolMap) { + jedisPool = shardedJedisPoolMap.get(dbIndex); + } + if (null == jedisPool) { + jedisPool = shardedJedisPool; + } + return new Executor(jedisPool) { + + @Override + String execute() { + return jedis.hget(key, field); + } + }.getResult(); + } + + /** + * 返回哈希表 key对应的所有值 + * 时间复杂度:O(1) + * + * @param key key + * @return 给定域的值。当给定域不存在或是给定 key 不存在时,返回 nil 。 + */ + public Map hashGetAllByIdx(final String key, final int dbIndex) { + ShardedJedisPool jedisPool = null; + if (null != shardedJedisPoolMap) { + jedisPool = shardedJedisPoolMap.get(dbIndex); + } + if (null == jedisPool) { + jedisPool = shardedJedisPool; + } + return new Executor>(jedisPool) { + + @Override + Map execute() { + return jedis.hgetAll(key); + } + }.getResult(); + } + + /** + * 返回哈希表 key 中给定域 field 的值。 如果哈希表 key 存在,同时设置这个 key 的生存时间 + * + * @param key key + * @param field 域 + * @param expire 生命周期,单位为秒 + * @return 给定域的值。当给定域不存在或是给定 key 不存在时,返回 nil 。 + */ + public String hashGet(final String key, final String field, final int expire) { + return new Executor(shardedJedisPool) { + + @Override + String execute() { + Pipeline pipeline = jedis.getShard(key).pipelined(); + Response result = pipeline.hget(key, field); + pipeline.expire(key, expire); + pipeline.sync(); + return result.get(); + } + }.getResult(); + } + + /** + * 同时将多个 field-value (域-值)对设置到哈希表 key 中。 + * 时间复杂度: O(N) (N为fields的数量) + * + * @param key key + * @param hash field-value的map + * @return 如果命令执行成功,返回 OK 。当 key 不是哈希表(hash)类型时,返回一个错误。 + */ + public String hashMultipleSet(final String key, final Map hash) { + return new Executor(shardedJedisPool) { + + @Override + String execute() { + return jedis.hmset(key, hash); + } + }.getResult(); + } + + /** + * 同时将多个 field-value (域-值)对设置到哈希表 key 中。同时设置这个 key 的生存时间 + * + * @param key key + * @param hash field-value的map + * @param expire 生命周期,单位为秒 + * @return 如果命令执行成功,返回 OK 。当 key 不是哈希表(hash)类型时,返回一个错误。 + */ + public String hashMultipleSet(final String key, final Map hash, final int expire) { + return new Executor(shardedJedisPool) { + + @Override + String execute() { + Pipeline pipeline = jedis.getShard(key).pipelined(); + Response result = pipeline.hmset(key, hash); + pipeline.expire(key, expire); + pipeline.sync(); + return result.get(); + } + }.getResult(); + } + + /** + * 返回哈希表 key 中,一个或多个给定域的值。如果给定的域不存在于哈希表,那么返回一个 nil 值。 + * 时间复杂度: O(N) (N为fields的数量) + * + * @param key key + * @param fields field的数组 + * @return 一个包含多个给定域的关联值的表,表值的排列顺序和给定域参数的请求顺序一样。 + */ + public List hashMultipleGet(final String key, final String... fields) { + return new Executor>(shardedJedisPool) { + + @Override + List execute() { + return jedis.hmget(key, fields); + } + }.getResult(); + } + + /** + * 返回哈希表 key 中,一个或多个给定域的值。如果给定的域不存在于哈希表,那么返回一个 nil 值。 + * 同时设置这个 key 的生存时间 + * + * @param key key + * @param fields field的数组 + * @param expire 生命周期,单位为秒 + * @return 一个包含多个给定域的关联值的表,表值的排列顺序和给定域参数的请求顺序一样。 + */ + public List hashMultipleGet(final String key, final int expire, final String... fields) { + return new Executor>(shardedJedisPool) { + + @Override + List execute() { + Pipeline pipeline = jedis.getShard(key).pipelined(); + Response> result = pipeline.hmget(key, fields); + pipeline.expire(key, expire); + pipeline.sync(); + return result.get(); + } + }.getResult(); + } + + /** + * 批量的{@link #hashMultipleSet(String, Map)},在管道中执行 + * + * @param pairs 多个hash的多个field + * @return 操作状态的集合 + */ + public List batchHashMultipleSet(final List>> pairs) { + return new Executor>(shardedJedisPool) { + + @Override + List execute() { + ShardedJedisPipeline pipeline = jedis.pipelined(); + for (Pair> pair : pairs) { + pipeline.hmset(pair.getKey(), pair.getValue()); + } + return pipeline.syncAndReturnAll(); + } + }.getResult(); + } + + /** + * 批量的{@link #hashMultipleSet(String, Map)},在管道中执行 + * + * @param data Map>格式的数据 + * @return 操作状态的集合 + */ + public List batchHashMultipleSet(final Map> data) { + return new Executor>(shardedJedisPool) { + + @Override + List execute() { + ShardedJedisPipeline pipeline = jedis.pipelined(); + for (Map.Entry> iter : data.entrySet()) { + pipeline.hmset(iter.getKey(), iter.getValue()); + } + return pipeline.syncAndReturnAll(); + } + }.getResult(); + } + + /** + * 批量的{@link #hashMultipleGet(String, String...)},在管道中执行 + * + * @param pairs 多个hash的多个field + * @return 执行结果的集合 + */ + public List> batchHashMultipleGet(final List> pairs) { + return new Executor>>(shardedJedisPool) { + + @Override + List> execute() { + ShardedJedisPipeline pipeline = jedis.pipelined(); + List> result = new ArrayList>(pairs.size()); + List>> responses = new ArrayList>>(pairs.size()); + for (Pair pair : pairs) { + responses.add(pipeline.hmget(pair.getKey(), pair.getValue())); + } + pipeline.sync(); + for (Response> resp : responses) { + result.add(resp.get()); + } + return result; + } + }.getResult(); + + } + + /** + * 返回哈希表 key 中,所有的域和值。在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。 + * 时间复杂度: O(N) + * + * @param key key + * @return 以列表形式返回哈希表的域和域的值。若 key 不存在,返回空列表。 + */ + public Map hashGetAll(final String key) { + return new Executor>(shardedJedisPool) { + @Override + Map execute() { + return jedis.hgetAll(key); + } + }.getResult(); + } + + /** + * 返回哈希表 key 中,所有的域和值。在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。 + * 同时设置这个 key 的生存时间 + * + * @param key key + * @param expire 生命周期,单位为秒 + * @return 以列表形式返回哈希表的域和域的值。若 key 不存在,返回空列表。 + */ + public Map hashGetAll(final String key, final int expire) { + return new Executor>(shardedJedisPool) { + + @Override + Map execute() { + Pipeline pipeline = jedis.getShard(key).pipelined(); + Response> result = pipeline.hgetAll(key); + pipeline.expire(key, expire); + pipeline.sync(); + return result.get(); + } + }.getResult(); + } + + /** + * 批量的{@link #hashGetAll(String)} + * + * @param keys key的数组 + * @return 执行结果的集合 + */ + public List> batchHashGetAll(final String... keys) { + return new Executor>>(shardedJedisPool) { + + @Override + List> execute() { + ShardedJedisPipeline pipeline = jedis.pipelined(); + List> result = new ArrayList>(keys.length); + List>> responses = new ArrayList>>(keys.length); + for (String key : keys) { + responses.add(pipeline.hgetAll(key)); + } + pipeline.sync(); + for (Response> resp : responses) { + result.add(resp.get()); + } + return result; + } + }.getResult(); + } + + /** + * 批量的{@link #hashMultipleGet(String, String...)},与{@link #batchHashGetAll(String...)}不同的是,返回值为Map类型 + * + * @param keys key的数组 + * @return 多个hash的所有filed和value + */ + public Map> batchHashGetAllForMap(final String... keys) { + return new Executor>>(shardedJedisPool) { + + @Override + Map> execute() { + ShardedJedisPipeline pipeline = jedis.pipelined(); + + // 设置map容量防止rehash + int capacity = 1; + while ((int) (capacity * 0.75) <= keys.length) { + capacity <<= 1; + } + Map> result = new HashMap>(capacity); + List>> responses = new ArrayList>>(keys.length); + for (String key : keys) { + responses.add(pipeline.hgetAll(key)); + } + pipeline.sync(); + for (int i = 0; i < keys.length; ++i) { + result.put(keys[i], responses.get(i).get()); + } + return result; + } + }.getResult(); + } + + /** + * 删除掉hashkey 所对应的value + * + * @param key hash的key + * @param field map 的field + * @return + */ + public long hashDel(final String key, final String... field) { + + return new Executor(shardedJedisPool) { + @Override + Long execute() { + return jedis.hdel(key, field); + } + }.getResult(); + } + + /** + * 删除掉hashkey 所对应的value + * + * @param key hash的key + * @param field map 的field + * @return + */ + public long hashDelByIdx(final String key, final int dbIndex, final String... field) { + ShardedJedisPool jedisPool = null; + if (null != shardedJedisPoolMap) { + jedisPool = shardedJedisPoolMap.get(dbIndex); + } + if (null == jedisPool) { + jedisPool = shardedJedisPool; + } + return new Executor(jedisPool) { + @Override + Long execute() { + return jedis.hdel(key, field); + } + }.getResult(); + } + + /* ======================================List====================================== */ + + /** + * 将一个或多个值 value 插入到列表 key 的表尾(最右边)。 + * + * @param key key + * @param values value的数组 + * @return 执行 listPushTail 操作后,表的长度 + */ + public Long listPushTail(final String key, final String... values) { + return new Executor(shardedJedisPool) { + + @Override + Long execute() { + return jedis.rpush(key, values); + } + }.getResult(); + } + + /** + * 将一个或多个值 value 插入到列表 key 的表头 + * + * @param key key + * @param value string value + * @return 执行 listPushHead 命令后,列表的长度。 + */ + public Long listPushHead(final String key, final String value) { + return new Executor(shardedJedisPool) { + + @Override + Long execute() { + return jedis.lpush(key, value); + } + }.getResult(); + } + + /** + * 将一个或多个值 value 插入到列表 key 的表头, 当列表大于指定长度是就对列表进行修剪(trim) + * + * @param key key + * @param value string value + * @param size 链表超过这个长度就修剪元素 + * @return 执行 listPushHeadAndTrim 命令后,列表的长度。 + */ + public Long listPushHeadAndTrim(final String key, final String value, final long size) { + return new Executor(shardedJedisPool) { + + @Override + Long execute() { + Pipeline pipeline = jedis.getShard(key).pipelined(); + Response result = pipeline.lpush(key, value); + // 修剪列表元素, 如果 size - 1 比 end 下标还要大,Redis将 size 的值设置为 end 。 + pipeline.ltrim(key, 0, size - 1); + pipeline.sync(); + return result.get(); + } + }.getResult(); + } + + /** + * 修剪列表 + */ + public Long listLRem(final String key, final String value) { + return new Executor(shardedJedisPool) { + @Override + Long execute() { + Long result = jedis.lrem(key, 1L, value); + return result; + } + }.getResult(); + } + + public Long rpop(final String key) { + return new Executor(shardedJedisPool) { + + @Override + Long execute() { + String result = jedis.rpop(key); + if (StringUtils.isBlank(result)) { + return null; + } + return Long.valueOf(result); + } + }.getResult(); + } + + public String rpopStr(final String key) { + return new Executor(shardedJedisPool) { + + @Override + String execute() { + String result = jedis.rpop(key); + if (StringUtils.isBlank(result)) { + return null; + } + return result; + } + }.getResult(); + } + + + public String rpopForStr(final String key) { + return new Executor(shardedJedisPool) { + + @Override + String execute() { + return jedis.rpop(key); + } + }.getResult(); + } + + /** + * 指定db上原子加一 + * + * @param key + * @param dbIndex + * @return + */ + public Long incrementAndGet(final String key, final Integer dbIndex) { + ShardedJedisPool jedisPool = null; + if (null != shardedJedisPoolMap) { + jedisPool = shardedJedisPoolMap.get(dbIndex); + + } + if (null == jedisPool) { + jedisPool = shardedJedisPool; + } + return new Executor(jedisPool) { + + @Override + Long execute() { + + return jedis.incr(key); + } + }.getResult(); + } + + + /** + * 同{@link #(String, String[], boolean)},不同的是利用redis的事务特性来实现 + * + * @param key key + * @param values value的数组 + * @return null + */ + public Object updateListInTransaction(final String key, final List values) { + return new Executor(shardedJedisPool) { + + @Override + Object execute() { + Transaction transaction = jedis.getShard(key).multi(); + transaction.del(key); + for (String value : values) { + transaction.rpush(key, value); + } + transaction.exec(); + return null; + } + }.getResult(); + } + + + /** + * 返回list所有元素,下标从0开始,负值表示从后面计算,-1表示倒数第一个元素,key不存在返回空列表 + * + * @param key key + * @return list所有元素 + */ + public List listGetAll(final String key) { + return new Executor>(shardedJedisPool) { + + @Override + List execute() { + return jedis.lrange(key, 0, -1); + } + }.getResult(); + } + + /** + * 返回指定区间内的元素,下标从0开始,负值表示从后面计算,-1表示倒数第一个元素,key不存在返回空列表 + * + * @param key key + * @param beginIndex 下标开始索引(包含) + * @param endIndex 下标结束索引(不包含) + * @return 指定区间内的元素 + */ + public List listRange(final String key, final long beginIndex, final long endIndex) { + return new Executor>(shardedJedisPool) { + + @Override + List execute() { + return jedis.lrange(key, beginIndex, endIndex - 1); + } + }.getResult(); + } + + /** + * 一次获得多个链表的数据 + * + * @param keys key的数组 + * @return 执行结果 + */ + public Map> batchGetAllList(final List keys) { + return new Executor>>(shardedJedisPool) { + + @Override + Map> execute() { + ShardedJedisPipeline pipeline = jedis.pipelined(); + Map> result = new HashMap>(); + List>> responses = new ArrayList>>(keys.size()); + for (String key : keys) { + responses.add(pipeline.lrange(key, 0, -1)); + } + pipeline.sync(); + for (int i = 0; i < keys.size(); ++i) { + result.put(keys.get(i), responses.get(i).get()); + } + return result; + } + }.getResult(); + } + + /* ======================================Pub/Sub====================================== */ + + /** + * 将信息 message 发送到指定的频道 channel。 + * 时间复杂度:O(N+M),其中 N 是频道 channel 的订阅者数量,而 M 则是使用模式订阅(subscribed patterns)的客户端的数量。 + * + * @param channel 频道 + * @param message 信息 + * @return 接收到信息 message 的订阅者数量。 + */ + public Long publish(final String channel, final String message) { + return new Executor(shardedJedisPool) { + + @Override + Long execute() { + Jedis _jedis = jedis.getShard(channel); + return _jedis.publish(channel, message); + } + + }.getResult(); + } + + /** + * 订阅给定的一个频道的信息。 + * + * @param jedisPubSub 监听器 + * @param channel 频道 + */ + public void subscribe(final JedisPubSub jedisPubSub, final String channel) { + new Executor(shardedJedisPool) { + + @Override + Object execute() { + Jedis _jedis = jedis.getShard(channel); + // 注意subscribe是一个阻塞操作,因为当前线程要轮询Redis的响应然后调用subscribe + _jedis.subscribe(jedisPubSub, channel); + return null; + } + }.getResult(); + } + + /** + * 取消订阅 + * + * @param jedisPubSub 监听器 + */ + public void unSubscribe(final JedisPubSub jedisPubSub) { + jedisPubSub.unsubscribe(); + } + + /* ======================================Sorted set================================= */ + + /** + * 将一个 member 元素及其 score 值加入到有序集 key 当中。 + * + * @param key key + * @param score score 值可以是整数值或双精度浮点数。 + * @param member 有序集的成员 + * @return 被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。 + */ + public Long addWithSortedSet(final String key, final double score, final String member) { + return new Executor(shardedJedisPool) { + + @Override + Long execute() { + return jedis.zadd(key, score, member); + } + }.getResult(); + } + + /** + * 返回指定key的数量 + * @param key + * @return + */ + public Long zcard(String key) { + return new Executor(shardedJedisPool) { + @Override + Long execute() { + return jedis.zcard(key); + } + }.getResult(); + } + + /** + * 将多个 member 元素及其 score 值加入到有序集 key 当中。 + * + * @param key key + * @param scoreMembers score、member的pair + * @return 被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。 + */ + public Long addWithSortedSet(final String key, final Map scoreMembers) { + return new Executor(shardedJedisPool) { + + @Override + Long execute() { + return jedis.zadd(key, scoreMembers); + } + }.getResult(); + } + + /** + * 返回有序集 key 中, 介于 start 和 end 之间(默认包括等于 start 或 end )的所有的成员。 + * 有序集成员按 score 值递减(从大到小)的次序排列。 + * + * @param key key + * @param start 起始位置 0代表第一位 + * @param end 结束位置 -1代表末尾 + * @return 指定区间内,带有 score 值(可选)的有序集成员的列表 + */ + public Set zrange(final String key, final long start, final long end) { + return new Executor>(shardedJedisPool) { + + @Override + Set execute() { + return jedis.zrange(key, start, end); + } + }.getResult(); + } + + /** + * 删除位置再start到end的元素 + * 有序集成员按 score 值递减(从大到小)的次序排列。 + * + * @param key key + * @param start 起始位置 0代表第一位 + * @param end 结束位置 -1代表查全部 + * @return 指定区间内,带有 score 值(可选)的有序集成员的列表 + */ + public Long zremrangeByRank(final String key, final long start, final long end) { + return new Executor(shardedJedisPool) { + + @Override + Long execute() { + return jedis.zremrangeByRank(key, start, end); + } + }.getResult(); + } + + /** + * 返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员。 + * 有序集成员按 score 值递减(从大到小)的次序排列。 + * + * @param key key + * @param max score最大值 + * @param min score最小值 + * @return 指定区间内,带有 score 值(可选)的有序集成员的列表 + */ + public Set revrangeByScoreWithSortedSet(final String key, final double max, final double min) { + return new Executor>(shardedJedisPool) { + + @Override + Set execute() { + return jedis.zrevrangeByScore(key, max, min); + } + }.getResult(); + } + + public Set test() { + return new Executor>(shardedJedisPool) { + + @Override + Set execute() { + jedis.lrange("key", 10, 20); +// return jedis.zrevrangeByScore(key, max, min); + return null; + } + }.getResult(); + } + + /** + * 设置byte类型的,需要自己序列化 + * + * @param key + * @param value + * @return + */ + public Long setByte(final byte[] key, final byte[] value, final int timeout) { + return new Executor(shardedJedisPool) { + @Override + Long execute() { + jedis.set(key, value); + return jedis.expire(key, timeout); + + } + }.getResult(); + + } + + /** + * 根据key读取byte类型,需要自己反序列化 + * + * @param key + * @return + */ + public byte[] getByte(final byte[] key) { + + return new Executor(shardedJedisPool) { + @Override + byte[] execute() { + return jedis.get(key); + } + }.getResult(); + } + + /** + * 查询操作是否被限流 + * + * @param actionKey 操作key + * @param period 时间范围(单位秒) + * @param maxCount 最大次数 + * @return 操作是否允许 + */ + public Boolean isActionAllowed(String actionKey, int period, int maxCount) { + return new Executor(shardedJedisPool) { + @Override + Boolean execute() { + ShardedJedisPipeline pipeline = jedis.pipelined(); + // value中存放纳秒级的时间戳 + long nowTs = System.nanoTime(); + // 记录本次操作行为 + pipeline.zadd(actionKey, nowTs, "" + nowTs); + // 移除时间窗口外的行为 + double v = (nowTs - period * 1000 * 1000 * 1000); + pipeline.zremrangeByScore(actionKey, 0, v); + // 查找时间窗口中的行为数量 + Response count = pipeline.zcard(actionKey); + // 重置时间窗口 + pipeline.expire(actionKey, period + 1); + pipeline.sync(); + return count.get() <= maxCount; + } + }.getResult(); + } + + + + /* ======================================Other====================================== */ + + /** + * 设置数据源 + * + * @param shardedJedisPool 数据源 + */ + public void setShardedJedisPool(ShardedJedisPool shardedJedisPool) { + this.shardedJedisPool = shardedJedisPool; + } + + public void setShardedJedisPoolMap(Map shardedJedisPoolMap) { + this.shardedJedisPoolMap = shardedJedisPoolMap; + } + + /** + * 构造Pair键值对 + * + * @param key key + * @param value value + * @return 键值对 + */ + public Pair makePair(K key, V value) { + return new Pair(key, value); + } + + /** + * 键值对 + * + * @param key + * @param value + * @author fengjc + * @version V1.0 + */ + public class Pair { + private K key; + private V value; + + public Pair(K key, V value) { + this.key = key; + this.value = value; + } + + public K getKey() { + return key; + } + + public void setKey(K key) { + this.key = key; + } + + public V getValue() { + return value; + } + + public void setValue(V value) { + this.value = value; + } + } + + /** + * 指定db getString + * + * @param key + * @param dbIndex + * @return + */ + public String getString(final String key, final Integer dbIndex) { + ShardedJedisPool jedisPool = null; + if (null != shardedJedisPoolMap) { + jedisPool = shardedJedisPoolMap.get(dbIndex); + + } + if (null == jedisPool) { + jedisPool = shardedJedisPool; + } + return new Executor(jedisPool) { + + @Override + String execute() { + return jedis.get(key); + } + }.getResult(); + } + + /** + * 获取分布式加锁 + * + * @param key key + * @param value 锁value值 + * @return 返回true获取锁成功,返回false获取锁失败 + */ + public Boolean lock(String key, String value){ + return new Executor(shardedJedisPool) { + @Override + Boolean execute() { + Long setnx = jedis.setnx(key, value); + return setnx.equals(1L) ; + } + }.getResult(); + } + + public Boolean lock(String key){ + return new Executor(shardedJedisPool) { + @Override + Boolean execute() { + Long setnx = jedis.setnx(key, System.currentTimeMillis() + ""); + return setnx.equals(1L) ; + } + }.getResult(); + } + + /** + * 获取分布式加锁 + * 注意点 setnx 和 expire 非原子操作 + * @param key key + * @param value 锁value值 + * @param cacheTime 锁持有时间 + * @return 返回true获取锁成功,返回false获取锁失败 + */ + public Boolean lock(String key, String value, int cacheTime){ + return new Executor(shardedJedisPool) { + @Override + Boolean execute() { + Long setnx = jedis.setnx(key, value); + jedis.expire(key, cacheTime); + return setnx.equals(1L) ; + } + }.getResult(); + + } + + /** + * 释放锁 确保释放的是当前线程持有的锁 + * @param key + * @param value + * @return + */ + public Boolean unlock(String key, String value){ + return new Executor(shardedJedisPool) { + @Override + Boolean execute() { + String keyValue = jedis.get(key); + if(StringUtils.isNotBlank(keyValue) && keyValue.equals(value)){ + return jedis.del(key) > 0; + } + return false; + } + }.getResult(); + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/RestTemplateUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/RestTemplateUtil.java new file mode 100644 index 000000000..423f9baf8 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/RestTemplateUtil.java @@ -0,0 +1,637 @@ +package com.cool.store.utils; + +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; + +import java.util.Map; + +/** + * + */ +public class RestTemplateUtil { + + private static final RestTemplate restTemplate = new RestTemplate(); + + // ----------------------------------GET------------------------------------------------------- + + /** + * GET请求调用方式 + * + * @param url 请求URL + * @param responseType 返回对象类型 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity get(String url, Class responseType) { + return restTemplate.getForEntity(url, responseType); + } + + /** + * 负载均衡请求 + */ + public static ResponseEntity loadGet(String url, Class responseType) { + return getLoadBalanceTemplate().getForEntity(url, responseType); + } + + /** + * GET请求调用方式 + * + * @param url 请求URL + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity get(String url, Class responseType, Object... uriVariables) { + return restTemplate.getForEntity(url, responseType, uriVariables); + } + + /** + * GET请求调用方式 + * + * @param url 请求URL + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity get(String url, Class responseType, Map uriVariables) { + return restTemplate.getForEntity(url, responseType, uriVariables); + } + + /** + * 带请求头的GET请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity get(String url, Map headers, Class responseType, Object... uriVariables) { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setAll(headers); + return get(url, httpHeaders, responseType, uriVariables); + } + + /** + * 带请求头的GET请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity get(String url, HttpHeaders headers, Class responseType, Object... uriVariables) { + HttpEntity requestEntity = new HttpEntity<>(headers); + return exchange(url, HttpMethod.GET, requestEntity, responseType, uriVariables); + } + + /** + * 带请求头的GET请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity get(String url, Map headers, Class responseType, Map uriVariables) { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setAll(headers); + return get(url, httpHeaders, responseType, uriVariables); + } + + /** + * 带请求头的GET请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity get(String url, HttpHeaders headers, Class responseType, Map uriVariables) { + HttpEntity requestEntity = new HttpEntity<>(headers); + return exchange(url, HttpMethod.GET, requestEntity, responseType, uriVariables); + } + + // ----------------------------------POST------------------------------------------------------- + + /** + * POST请求调用方式 + * + * @param url 请求URL + * @param responseType 返回对象类型 + * @return + */ + public static ResponseEntity post(String url, Class responseType) { + return restTemplate.postForEntity(url, HttpEntity.EMPTY, responseType); + } + + /** + * POST请求调用方式 + * + * @param url 请求URL + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity post(String url, Object requestBody, Class responseType) { + return restTemplate.postForEntity(url, requestBody, responseType); + } + + public static ResponseEntity loadPost(String url, Object requestBody, Class responseType) { + return getLoadBalanceTemplate().postForEntity(url, requestBody, responseType); + } + + + /** + * POST请求调用方式 + * + * @param url 请求URL + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity post(String url, Object requestBody, Class responseType, Object... uriVariables) { + return restTemplate.postForEntity(url, requestBody, responseType, uriVariables); + } + + /** + * POST请求调用方式 + * + * @param url 请求URL + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity post(String url, Object requestBody, Class responseType, Map uriVariables) { + return restTemplate.postForEntity(url, requestBody, responseType, uriVariables); + } + + /** + * 带请求头的POST请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity post(String url, Map headers, Object requestBody, Class responseType, Object... uriVariables) { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setAll(headers); + return post(url, httpHeaders, requestBody, responseType, uriVariables); + } + + /** + * 带请求头的POST请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity post(String url, HttpHeaders headers, Object requestBody, Class responseType, Object... uriVariables) { + HttpEntity requestEntity = new HttpEntity<>(requestBody, headers); + return post(url, requestEntity, responseType, uriVariables); + } + + /** + * 带请求头的POST请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity post(String url, Map headers, Object requestBody, Class responseType, Map uriVariables) { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setAll(headers); + return post(url, httpHeaders, requestBody, responseType, uriVariables); + } + + /** + * 带请求头的POST请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity post(String url, HttpHeaders headers, Object requestBody, Class responseType, Map uriVariables) { + HttpEntity requestEntity = new HttpEntity<>(requestBody, headers); + return post(url, requestEntity, responseType, uriVariables); + } + + /** + * 自定义请求头和请求体的POST请求调用方式 + * + * @param url 请求URL + * @param requestEntity 请求头和请求体封装对象 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity post(String url, HttpEntity requestEntity, Class responseType, Object... uriVariables) { + return restTemplate.exchange(url, HttpMethod.POST, requestEntity, responseType, uriVariables); + } + + /** + * 自定义请求头和请求体的POST请求调用方式 + * + * @param url 请求URL + * @param requestEntity 请求头和请求体封装对象 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity post(String url, HttpEntity requestEntity, Class responseType, Map uriVariables) { + return restTemplate.exchange(url, HttpMethod.POST, requestEntity, responseType, uriVariables); + } + + // ----------------------------------PUT------------------------------------------------------- + + /** + * PUT请求调用方式 + * + * @param url 请求URL + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity put(String url, Class responseType, Object... uriVariables) { + return put(url, HttpEntity.EMPTY, responseType, uriVariables); + } + + /** + * PUT请求调用方式 + * + * @param url 请求URL + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity put(String url, Object requestBody, Class responseType, Object... uriVariables) { + HttpEntity requestEntity = new HttpEntity<>(requestBody); + return put(url, requestEntity, responseType, uriVariables); + } + + /** + * PUT请求调用方式 + * + * @param url 请求URL + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity put(String url, Object requestBody, Class responseType, Map uriVariables) { + HttpEntity requestEntity = new HttpEntity<>(requestBody); + return put(url, requestEntity, responseType, uriVariables); + } + + /** + * 带请求头的PUT请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity put(String url, Map headers, Object requestBody, Class responseType, Object... uriVariables) { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setAll(headers); + return put(url, httpHeaders, requestBody, responseType, uriVariables); + } + + /** + * 带请求头的PUT请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity put(String url, HttpHeaders headers, Object requestBody, Class responseType, Object... uriVariables) { + HttpEntity requestEntity = new HttpEntity<>(requestBody, headers); + return put(url, requestEntity, responseType, uriVariables); + } + + /** + * 带请求头的PUT请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity put(String url, Map headers, Object requestBody, Class responseType, Map uriVariables) { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setAll(headers); + return put(url, httpHeaders, requestBody, responseType, uriVariables); + } + + /** + * 带请求头的PUT请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity put(String url, HttpHeaders headers, Object requestBody, Class responseType, Map uriVariables) { + HttpEntity requestEntity = new HttpEntity<>(requestBody, headers); + return put(url, requestEntity, responseType, uriVariables); + } + + /** + * 自定义请求头和请求体的PUT请求调用方式 + * + * @param url 请求URL + * @param requestEntity 请求头和请求体封装对象 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity put(String url, HttpEntity requestEntity, Class responseType, Object... uriVariables) { + return restTemplate.exchange(url, HttpMethod.PUT, requestEntity, responseType, uriVariables); + } + + /** + * 自定义请求头和请求体的PUT请求调用方式 + * + * @param url 请求URL + * @param requestEntity 请求头和请求体封装对象 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity put(String url, HttpEntity requestEntity, Class responseType, Map uriVariables) { + return restTemplate.exchange(url, HttpMethod.PUT, requestEntity, responseType, uriVariables); + } + + // ----------------------------------DELETE------------------------------------------------------- + + /** + * DELETE请求调用方式 + * + * @param url 请求URL + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity delete(String url, Class responseType, Object... uriVariables) { + return delete(url, HttpEntity.EMPTY, responseType, uriVariables); + } + + /** + * DELETE请求调用方式 + * + * @param url 请求URL + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity delete(String url, Class responseType, Map uriVariables) { + return delete(url, HttpEntity.EMPTY, responseType, uriVariables); + } + + /** + * DELETE请求调用方式 + * + * @param url 请求URL + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity delete(String url, Object requestBody, Class responseType, Object... uriVariables) { + HttpEntity requestEntity = new HttpEntity<>(requestBody); + return delete(url, requestEntity, responseType, uriVariables); + } + + /** + * DELETE请求调用方式 + * + * @param url 请求URL + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity delete(String url, Object requestBody, Class responseType, Map uriVariables) { + HttpEntity requestEntity = new HttpEntity<>(requestBody); + return delete(url, requestEntity, responseType, uriVariables); + } + + /** + * 带请求头的DELETE请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity delete(String url, Map headers, Class responseType, Object... uriVariables) { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setAll(headers); + return delete(url, httpHeaders, responseType, uriVariables); + } + + /** + * 带请求头的DELETE请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity delete(String url, HttpHeaders headers, Class responseType, Object... uriVariables) { + HttpEntity requestEntity = new HttpEntity<>(headers); + return delete(url, requestEntity, responseType, uriVariables); + } + + /** + * 带请求头的DELETE请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity delete(String url, Map headers, Class responseType, Map uriVariables) { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setAll(headers); + return delete(url, httpHeaders, responseType, uriVariables); + } + + /** + * 带请求头的DELETE请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity delete(String url, HttpHeaders headers, Class responseType, Map uriVariables) { + HttpEntity requestEntity = new HttpEntity<>(headers); + return delete(url, requestEntity, responseType, uriVariables); + } + + /** + * 带请求头的DELETE请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity delete(String url, Map headers, Object requestBody, Class responseType, Object... uriVariables) { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setAll(headers); + return delete(url, httpHeaders, requestBody, responseType, uriVariables); + } + + /** + * 带请求头的DELETE请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity delete(String url, HttpHeaders headers, Object requestBody, Class responseType, Object... uriVariables) { + HttpEntity requestEntity = new HttpEntity<>(requestBody, headers); + return delete(url, requestEntity, responseType, uriVariables); + } + + /** + * 带请求头的DELETE请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity delete(String url, Map headers, Object requestBody, Class responseType, Map uriVariables) { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setAll(headers); + return delete(url, httpHeaders, requestBody, responseType, uriVariables); + } + + /** + * 带请求头的DELETE请求调用方式 + * + * @param url 请求URL + * @param headers 请求头参数 + * @param requestBody 请求参数体 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity delete(String url, HttpHeaders headers, Object requestBody, Class responseType, Map uriVariables) { + HttpEntity requestEntity = new HttpEntity<>(requestBody, headers); + return delete(url, requestEntity, responseType, uriVariables); + } + + /** + * 自定义请求头和请求体的DELETE请求调用方式 + * + * @param url 请求URL + * @param requestEntity 请求头和请求体封装对象 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity delete(String url, HttpEntity requestEntity, Class responseType, Object... uriVariables) { + return restTemplate.exchange(url, HttpMethod.DELETE, requestEntity, responseType, uriVariables); + } + + /** + * 自定义请求头和请求体的DELETE请求调用方式 + * + * @param url 请求URL + * @param requestEntity 请求头和请求体封装对象 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity delete(String url, HttpEntity requestEntity, Class responseType, Map uriVariables) { + return restTemplate.exchange(url, HttpMethod.DELETE, requestEntity, responseType, uriVariables); + } + + // ----------------------------------通用方法------------------------------------------------------- + + /** + * 通用调用方式 + * + * @param url 请求URL + * @param method 请求方法类型 + * @param requestEntity 请求头和请求体封装对象 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,按顺序依次对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity exchange(String url, HttpMethod method, HttpEntity requestEntity, Class responseType, Object... uriVariables) { + return restTemplate.exchange(url, method, requestEntity, responseType, uriVariables); + } + + /** + * 通用调用方式 + * + * @param url 请求URL + * @param method 请求方法类型 + * @param requestEntity 请求头和请求体封装对象 + * @param responseType 返回对象类型 + * @param uriVariables URL中的变量,与Map中的key对应 + * @return ResponseEntity 响应对象封装类 + */ + public static ResponseEntity exchange(String url, HttpMethod method, HttpEntity requestEntity, Class responseType, Map uriVariables) { + return restTemplate.exchange(url, method, requestEntity, responseType, uriVariables); + } + + /** + * 获取RestTemplate实例对象,可自由调用其方法 + * + * @return RestTemplate实例对象 + */ + public static RestTemplate getRestTemplate() { + return restTemplate; + } + + public static RestTemplate getLoadBalanceTemplate() { + return SpringContextHolder.getBean(RestTemplate.class); + } + +} \ No newline at end of file diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/RocketMqUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/RocketMqUtil.java new file mode 100644 index 000000000..bbae521af --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/RocketMqUtil.java @@ -0,0 +1,198 @@ +package com.cool.store.utils; + + +import com.aliyun.ons20190214.Client; +import com.aliyun.ons20190214.models.*; +import com.aliyun.teaopenapi.models.Config; +import com.cool.store.constants.CommonConstants; +import com.cool.store.enums.RocketMqGroupEnum; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.ListUtils; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author chenyupeng + * @since 2022/1/5 + */ +@Slf4j +public class RocketMqUtil { + + private static final String INSTANCE_ID = "MQ_INST_1947409023213164_BX3sLZnA"; + + /** + * 本地 + */ + private static final String LOCAL_INSTANCE_ID = "MQ_INST_1255228665351616_BX3wfyPO"; + + private static final String INSTANCE_ID_ONLINE_HD_PRE = "MQ_INST_1947409023213164_BX5N7rwl"; + private static final String ACCESS_KEY = "LTAI5t5ouXZuFgxJMbQea3b2"; + private static final String ACCESS_SECRET = "yuomDstRjSdihtN5zo8viDbWu8Z0ig"; + /** + * 使用AK&SK初始化账号Client + * @param accessKeyId + * @param accessKeySecret + * @return Client + * @throws Exception + */ + public static Client createClient(String accessKeyId, String accessKeySecret) throws Exception { + Config config = new Config() + // 您的AccessKey ID + .setAccessKeyId(accessKeyId) + // 您的AccessKey Secret + .setAccessKeySecret(accessKeySecret); + // 访问的域名 + config.endpoint = "ons.cn-hangzhou.aliyuncs.com"; + return new Client(config); + } + + public static Client createLocalClient(String accessKeyId, String accessKeySecret) throws Exception { + Config config = new Config() + // 您的AccessKey ID + .setAccessKeyId(accessKeyId) + // 您的AccessKey Secret + .setAccessKeySecret(accessKeySecret); + // 访问的域名 + config.endpoint = "ons.mq-internet-access.aliyuncs.com"; + return new Client(config); + } + + /** + * 新增测试、开发环境的group + * @author chenyupeng + * @date 2022/1/13 + * @param profiles 环境后缀,逗号分隔 例如: dev,dev2 + * @return void + */ + public static void initGroup(String profiles) throws Exception { + Client client = RocketMqUtil.createClient(ACCESS_KEY, ACCESS_SECRET); + List profileList = Arrays.asList(profiles.split(CommonConstants.COMMA)); + if(CollectionUtils.isEmpty(profileList)){ + return; + } + + OnsGroupListRequest onsGroupListRequest = new OnsGroupListRequest(); + onsGroupListRequest.setInstanceId(INSTANCE_ID); + OnsGroupListResponse onsGroupListResponse = client.onsGroupList(onsGroupListRequest); + List subscribeInfoDo = onsGroupListResponse.getBody().getData().getSubscribeInfoDo(); + Map collect = ListUtils.emptyIfNull(subscribeInfoDo).stream(). + collect(Collectors.toMap(OnsGroupListResponseBody.OnsGroupListResponseBodyDataSubscribeInfoDo::getGroupId, data -> data, (a, b) -> a)); + + for (String profile : profileList) { + for (RocketMqGroupEnum groupEnum : RocketMqGroupEnum.values()) { + String groupId = groupEnum.getDefaultGroup() + "_" + profile; + //已经创建就继续 + if(collect.get(groupId) != null){ + continue; + } + OnsGroupCreateRequest onsGroupCreateRequest = new OnsGroupCreateRequest(); + onsGroupCreateRequest.setGroupId(groupId); + onsGroupCreateRequest.setInstanceId(INSTANCE_ID); + // 复制代码运行请自行打印 API 的返回值 + try { + client.onsGroupCreate(onsGroupCreateRequest); + }catch (Exception e){ + log.error("initGroupAndTag fail",e); + } + Thread.sleep(1000); + } + } + } + + public static void initLocalGroup(String profiles) throws Exception { + Client client = RocketMqUtil.createLocalClient("LTAI5tPWCTeCyngfYLqoSGWk", "jkzIXlvNF17ne5TPPEFP1sQhcfg4Je"); + List profileList = Arrays.asList(profiles.split(CommonConstants.COMMA)); + if(CollectionUtils.isEmpty(profileList)){ + return; + } + + OnsGroupListRequest onsGroupListRequest = new OnsGroupListRequest(); + onsGroupListRequest.setInstanceId(LOCAL_INSTANCE_ID); + OnsGroupListResponse onsGroupListResponse = client.onsGroupList(onsGroupListRequest); + List subscribeInfoDo = onsGroupListResponse.getBody().getData().getSubscribeInfoDo(); + Map collect = ListUtils.emptyIfNull(subscribeInfoDo).stream(). + collect(Collectors.toMap(OnsGroupListResponseBody.OnsGroupListResponseBodyDataSubscribeInfoDo::getGroupId, data -> data, (a, b) -> a)); + + for (String profile : profileList) { + for (RocketMqGroupEnum groupEnum : RocketMqGroupEnum.values()) { + String groupId = groupEnum.getDefaultGroup() + "_" + profile; + //已经创建就继续 + if(collect.get(groupId) != null){ + continue; + } + OnsGroupCreateRequest onsGroupCreateRequest = new OnsGroupCreateRequest(); + onsGroupCreateRequest.setGroupId(groupId); + onsGroupCreateRequest.setInstanceId(LOCAL_INSTANCE_ID); + // 复制代码运行请自行打印 API 的返回值 + try { + client.onsGroupCreate(onsGroupCreateRequest); + }catch (Exception e){ + log.error("initGroupAndTag fail",e); + } + Thread.sleep(1000); + } + } + } + + /** + * 新增线上、灰度、预发环境的group + * @author chenyupeng + * @date 2022/1/13 + * @param profiles 环境后缀,逗号分隔 例如: online,hd,pre + * @return void + */ + public static void initOnlineAndHdAndPreGroup(String profiles) throws Exception { + Client client = RocketMqUtil.createClient(ACCESS_KEY, ACCESS_SECRET); + List profileList = Arrays.asList(profiles.split(CommonConstants.COMMA)); + if(CollectionUtils.isEmpty(profileList)){ + return; + } + + OnsGroupListRequest onsGroupListRequest = new OnsGroupListRequest(); + onsGroupListRequest.setInstanceId(INSTANCE_ID_ONLINE_HD_PRE); + OnsGroupListResponse onsGroupListResponse = client.onsGroupList(onsGroupListRequest); + List subscribeInfoDo = onsGroupListResponse.getBody().getData().getSubscribeInfoDo(); + Map collect = ListUtils.emptyIfNull(subscribeInfoDo).stream(). + collect(Collectors.toMap(OnsGroupListResponseBody.OnsGroupListResponseBodyDataSubscribeInfoDo::getGroupId, data -> data, (a, b) -> a)); + + for (String profile : profileList) { + for (RocketMqGroupEnum groupEnum : RocketMqGroupEnum.values()) { + String groupId = groupEnum.getDefaultGroup() + "_" + profile; + //已经创建就继续 + if(collect.get(groupId) != null){ + continue; + } + OnsGroupCreateRequest onsGroupCreateRequest = new OnsGroupCreateRequest(); + onsGroupCreateRequest.setGroupId(groupId); + onsGroupCreateRequest.setInstanceId(INSTANCE_ID_ONLINE_HD_PRE); + // 复制代码运行请自行打印 API 的返回值 + try { + client.onsGroupCreate(onsGroupCreateRequest); + }catch (Exception e){ + log.error("initGroupAndTag fail",e); + } + Thread.sleep(1000); + } + } + + } + + /** + * 删除测试、开发环境的group + * @author chenyupeng + * @date 2022/1/13 + * @param groupId + * @return void + */ + public static void deleteGroupById(String groupId) throws Exception { + Client client = RocketMqUtil.createClient(ACCESS_KEY, ACCESS_SECRET); + OnsGroupDeleteRequest request = new OnsGroupDeleteRequest(); + request.setGroupId(groupId); + request.setInstanceId(INSTANCE_ID); + client.onsGroupDelete(request); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/ScriptUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/ScriptUtil.java new file mode 100644 index 000000000..98475246d --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/ScriptUtil.java @@ -0,0 +1,422 @@ +package com.cool.store.utils; + +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.SqlSessionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.support.EncodedResource; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.jdbc.datasource.init.*; +import org.springframework.lang.Nullable; +import org.springframework.stereotype.Component; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; + +import java.io.IOException; +import java.io.LineNumberReader; +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: ScriptUtil + * @Description: 脚本工具 + * @date 2022-01-21 16:48 + */ +@Component +public class ScriptUtil { + + /** + * Default statement separator within SQL scripts: {@code ";"}. + */ + public static final String DEFAULT_STATEMENT_SEPARATOR = ";"; + + /** + * Fallback statement separator within SQL scripts: {@code "\n"}. + *

Used if neither a custom separator nor the + * {@link #DEFAULT_STATEMENT_SEPARATOR} is present in a given script. + */ + public static final String FALLBACK_STATEMENT_SEPARATOR = "\n"; + + + public static final String EOF_STATEMENT_SEPARATOR = "^^^ END OF SCRIPT ^^^"; + + /** + * Default prefix for single-line comments within SQL scripts: {@code "--"}. + */ + public static final String DEFAULT_COMMENT_PREFIX = "--"; + + /** + * Default start delimiter for block comments within SQL scripts: {@code "/*"}. + */ + public static final String DEFAULT_BLOCK_COMMENT_START_DELIMITER = "/*"; + + /** + * Default end delimiter for block comments within SQL scripts: "*/". + */ + public static final String DEFAULT_BLOCK_COMMENT_END_DELIMITER = "*/"; + + /** + * 变量开始字符$ + */ + public static final String VARIABLE_START_DELIMITER = "\\$\\{"; + + /** + * 变量开始字符# + */ + public static final String VARIABLE_START_DELIMITER2 = "\\#\\{"; + + /** + * 变量结束字符 + */ + public static final String VARIABLE_END_DELIMITER = "}"; + + /** + * 单引号 + */ + public static final String SINGLE_QUOTE = "'"; + + + private final SqlSessionTemplate sqlSessionTemplate; + private final DataSourceTransactionManager dataSourceTransactionManager; + + + @Autowired + public ScriptUtil(SqlSessionTemplate sqlSessionTemplate, DataSourceTransactionManager dataSourceTransactionManager) { + this.sqlSessionTemplate = sqlSessionTemplate; + this.dataSourceTransactionManager = dataSourceTransactionManager; + } + + + private static final Log logger = LogFactory.getLog(ScriptUtil.class); + + /** + * Split an SQL script into separate statements delimited by the provided + * separator string. Each individual statement will be added to the provided + * {@code List}. + *

Within the script, the provided {@code commentPrefix} will be honored: + * any text beginning with the comment prefix and extending to the end of the + * line will be omitted from the output. Similarly, the provided + * {@code blockCommentStartDelimiter} and {@code blockCommentEndDelimiter} + * delimiters will be honored: any text enclosed in a block comment will be + * omitted from the output. In addition, multiple adjacent whitespace characters + * will be collapsed into a single space. + * @param resource the resource from which the script was read + * @param script the SQL script; never {@code null} or empty + * @param separator text separating each statement — typically a ';' or + * newline character; never {@code null} + * @param commentPrefix the prefix that identifies SQL line comments — + * typically "--"; never {@code null} or empty + * @param blockCommentStartDelimiter the start block comment delimiter; + * never {@code null} or empty + * @param blockCommentEndDelimiter the end block comment delimiter; + * never {@code null} or empty + * @param statements the list that will contain the individual statements + * @throws ScriptException if an error occurred while splitting the SQL script + */ + public static void splitSqlScript(@Nullable EncodedResource resource, String script, + String separator, String commentPrefix, String blockCommentStartDelimiter, + String blockCommentEndDelimiter, List statements) throws ScriptException { + + Assert.hasText(script, "'script' must not be null or empty"); + Assert.notNull(separator, "'separator' must not be null"); + Assert.hasText(commentPrefix, "'commentPrefix' must not be null or empty"); + Assert.hasText(blockCommentStartDelimiter, "'blockCommentStartDelimiter' must not be null or empty"); + Assert.hasText(blockCommentEndDelimiter, "'blockCommentEndDelimiter' must not be null or empty"); + + StringBuilder sb = new StringBuilder(); + boolean inSingleQuote = false; + boolean inDoubleQuote = false; + boolean inEscape = false; + + for (int i = 0; i < script.length(); i++) { + char c = script.charAt(i); + if (inEscape) { + inEscape = false; + sb.append(c); + continue; + } + // MySQL style escapes + if (c == '\\') { + inEscape = true; + sb.append(c); + continue; + } + if (!inDoubleQuote && (c == '\'')) { + inSingleQuote = !inSingleQuote; + } + else if (!inSingleQuote && (c == '"')) { + inDoubleQuote = !inDoubleQuote; + } + if (!inSingleQuote && !inDoubleQuote) { + if (script.startsWith(separator, i)) { + // We've reached the end of the current statement + if (sb.length() > 0) { + statements.add(sb.toString()); + sb = new StringBuilder(); + } + i += separator.length() - 1; + continue; + } + else if (script.startsWith(commentPrefix, i)) { + // Skip over any content from the start of the comment to the EOL + int indexOfNextNewline = script.indexOf('\n', i); + if (indexOfNextNewline > i) { + i = indexOfNextNewline; + continue; + } + else { + // If there's no EOL, we must be at the end of the script, so stop here. + break; + } + } + else if (script.startsWith(blockCommentStartDelimiter, i)) { + // Skip over any block comments + int indexOfCommentEnd = script.indexOf(blockCommentEndDelimiter, i); + if (indexOfCommentEnd > i) { + i = indexOfCommentEnd + blockCommentEndDelimiter.length() - 1; + continue; + } + else { + throw new ScriptParseException( + "Missing block comment end delimiter: " + blockCommentEndDelimiter, resource); + } + } + else if (c == ' ' || c == '\n' || c == '\t') { + // Avoid multiple adjacent whitespace characters + if (sb.length() > 0 && sb.charAt(sb.length() - 1) != ' ') { + c = ' '; + } + else { + continue; + } + } + } + sb.append(c); + } + + if (StringUtils.hasText(sb)) { + statements.add(sb.toString()); + } + } + + /** + * Read a script from the provided resource, using the supplied comment prefix + * and statement separator, and build a {@code String} containing the lines. + *

Lines beginning with the comment prefix are excluded from the + * results; however, line comments anywhere else — for example, within + * a statement — will be included in the results. + * @param resource the {@code EncodedResource} containing the script + * to be processed + * @param commentPrefix the prefix that identifies comments in the SQL script — + * typically "--" + * @param separator the statement separator in the SQL script — typically ";" + * @return a {@code String} containing the script lines + * @throws IOException in case of I/O errors + */ + private static String readScript(EncodedResource resource, @Nullable String commentPrefix, + @Nullable String separator) throws IOException { + + LineNumberReader lnr = new LineNumberReader(resource.getReader()); + try { + return readScript(lnr, commentPrefix, separator); + } + finally { + lnr.close(); + } + } + + /** + * Read a script from the provided {@code LineNumberReader}, using the supplied + * comment prefix and statement separator, and build a {@code String} containing + * the lines. + *

Lines beginning with the comment prefix are excluded from the + * results; however, line comments anywhere else — for example, within + * a statement — will be included in the results. + * @param lineNumberReader the {@code LineNumberReader} containing the script + * to be processed + * @param commentPrefix the prefix that identifies comments in the SQL script — + * typically "--" + * @param separator the statement separator in the SQL script — typically ";" + * @return a {@code String} containing the script lines + * @throws IOException in case of I/O errors + */ + public static String readScript(LineNumberReader lineNumberReader, @Nullable String commentPrefix, + @Nullable String separator) throws IOException { + + String currentStatement = lineNumberReader.readLine(); + StringBuilder scriptBuilder = new StringBuilder(); + while (currentStatement != null) { + if (commentPrefix != null && !currentStatement.startsWith(commentPrefix)) { + if (scriptBuilder.length() > 0) { + scriptBuilder.append('\n'); + } + scriptBuilder.append(currentStatement); + } + currentStatement = lineNumberReader.readLine(); + } + appendSeparatorToScriptIfNecessary(scriptBuilder, separator); + return scriptBuilder.toString(); + } + + private static void appendSeparatorToScriptIfNecessary(StringBuilder scriptBuilder, @Nullable String separator) { + if (separator == null) { + return; + } + String trimmed = separator.trim(); + if (trimmed.length() == separator.length()) { + return; + } + // separator ends in whitespace, so we might want to see if the script is trying + // to end the same way + if (scriptBuilder.lastIndexOf(trimmed) == scriptBuilder.length() - trimmed.length()) { + scriptBuilder.append(separator.substring(trimmed.length())); + } + } + + /** + * Does the provided SQL script contain the specified delimiter? + * @param script the SQL script + * @param delim the string delimiting each statement - typically a ';' character + */ + public static boolean containsSqlScriptDelimiters(String script, String delim) { + boolean inLiteral = false; + boolean inEscape = false; + + for (int i = 0; i < script.length(); i++) { + char c = script.charAt(i); + if (inEscape) { + inEscape = false; + continue; + } + // MySQL style escapes + if (c == '\\') { + inEscape = true; + continue; + } + if (c == '\'') { + inLiteral = !inLiteral; + } + if (!inLiteral && script.startsWith(delim, i)) { + return true; + } + } + + return false; + } + + + public void executeSqlScript(EncodedResource resource, Map params) throws ScriptException { + String commentPrefix = DEFAULT_COMMENT_PREFIX; + String separator = DEFAULT_STATEMENT_SEPARATOR; + try { + if (logger.isDebugEnabled()) { + logger.debug("Executing SQL script from " + resource); + } + long startTime = System.currentTimeMillis(); + String script; + try { + script = readScript(resource, commentPrefix, separator); + }catch (IOException ex) { + throw new CannotReadScriptException(resource, ex); + } + if (!EOF_STATEMENT_SEPARATOR.equals(separator) && !containsSqlScriptDelimiters(script, separator)) { + separator = FALLBACK_STATEMENT_SEPARATOR; + } + List statements = new ArrayList<>(); + splitSqlScript(resource, script, separator, commentPrefix, DEFAULT_BLOCK_COMMENT_START_DELIMITER, + DEFAULT_BLOCK_COMMENT_END_DELIMITER, statements); + int stmtNumber = 0; + SqlSession sqlSession = SqlSessionUtils.getSqlSession( + sqlSessionTemplate.getSqlSessionFactory(), ExecutorType.BATCH, + sqlSessionTemplate.getPersistenceExceptionTranslator()); + Connection connection = null; + Statement stmt = null; + try { + connection = sqlSession.getConnection(); + stmt = connection.createStatement(); + connection.setAutoCommit(false); + for (String statement : statements) { + stmtNumber++; + try { + statement = sqlVariableReplace(statement, params); + stmt.execute(statement); + int rowsAffected = stmt.getUpdateCount(); + logger.info(rowsAffected + " returned as update count for SQL: " + statement); + }catch (SQLException ex) { + logger.error(ex); + ex.printStackTrace(); + connection.rollback(); + sqlSession.clearCache(); + throw new ScriptStatementFailedException(statement, stmtNumber, resource, ex); + } + } + connection.commit(); + sqlSession.clearCache(); + }catch (Exception e){ + logger.error(e); + e.printStackTrace(); + connection.rollback(); + sqlSession.clearCache(); + throw new Exception(e); + }finally { + try { + if(Objects.nonNull(stmt)){ + stmt.close(); + } + }catch (Throwable ex) { + logger.trace("Could not close JDBC Statement", ex); + } + try { + if(Objects.nonNull(connection)){ + connection.close(); + } + } catch (SQLException throwables) { + logger.trace("Could not close JDBC Statement", throwables); + } + } + long elapsedTime = System.currentTimeMillis() - startTime; + if (logger.isDebugEnabled()) { + logger.debug("Executed SQL script from " + resource + " in " + elapsedTime + " ms."); + } + }catch (Exception ex) { + if (ex instanceof ScriptException) { + throw (ScriptException) ex; + } + throw new UncategorizedScriptException( + "Failed to execute database script from resource [" + resource + "]", ex); + } + } + + /** + * 处理sql变量 + * @param statement + * @param params + * @return + */ + public String sqlVariableReplace(String statement, Map params){ + if(MapUtils.isEmpty(params)){ + return statement; + } + if(!statement.contains(VARIABLE_START_DELIMITER) && !statement.contains(VARIABLE_END_DELIMITER)){ + return statement; + } + for (String key : params.keySet()) { + String realKey = VARIABLE_START_DELIMITER + key + VARIABLE_END_DELIMITER; + String realKey2 = VARIABLE_START_DELIMITER2 + key + VARIABLE_END_DELIMITER; + statement = statement.replaceAll(realKey, params.get(key).toString()); + statement = statement.replaceAll(realKey2, SINGLE_QUOTE + params.get(key) + SINGLE_QUOTE); + + } + return statement; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/SecureUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/SecureUtil.java new file mode 100644 index 000000000..b2f1cbc28 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/SecureUtil.java @@ -0,0 +1,63 @@ +package com.cool.store.utils; + +import java.io.UnsupportedEncodingException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class SecureUtil { + private static final String API_KEY = "c344cbe01972777dcfe7f9767e3d2e7f"; + private static final String API_SECRET = "fAIgCJc3kPmSzD3SgEHU"; + + /** + * 利用java原生的摘要实现SHA256加密 + * @param source 加密内容 + * @param salt 盐 + * @return + */ + public static String sha256(String source, String salt) { + String encodeStr = ""; + try { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + if (salt != null) { + digest.reset(); + digest.update(salt.getBytes("UTF-8")); + } + digest.update(source.getBytes("UTF-8")); + encodeStr = byte2Hex(digest.digest()); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return encodeStr; + } + + /** + * 将byte转为16进制 + * @param bytes + * @return + */ + private static String byte2Hex(byte[] bytes){ + StringBuffer stringBuffer = new StringBuffer(); + for (int i=0;i T getBean(Class clz){ + return applicationContext.getBean(clz); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/SpringUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/SpringUtils.java new file mode 100644 index 000000000..a8779ef50 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/SpringUtils.java @@ -0,0 +1,96 @@ +package com.cool.store.utils; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.stereotype.Repository; + +/** + + **/ +@Repository +public class SpringUtils implements BeanFactoryPostProcessor { + + //Spring应用上下文环境 + private static ConfigurableListableBeanFactory beanFactory; + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringUtils.beanFactory = beanFactory; + } + + public static ConfigurableListableBeanFactory getBeanFactory() { + return beanFactory; + } + + /** + * 获取对象 + * + * @param name + * @return Object 一个以所给名字注册的bean的实例 + * @throws org.springframework.beans.BeansException + * + */ + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) getBeanFactory().getBean(name); + } + + /** + * 获取类型为requiredType的对象 + * + * @param clz + * @return + * @throws org.springframework.beans.BeansException + * + */ + public static T getBean(Class clz) throws BeansException { + T result = (T) getBeanFactory().getBean(clz); + return result; + } + + /** + * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true + * + * @param name + * @return boolean + */ + public static boolean containsBean(String name) { + return getBeanFactory().containsBean(name); + } + + /** + * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException) + * + * @param name + * @return boolean + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + * + */ + public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException { + return getBeanFactory().isSingleton(name); + } + + /** + * @param name + * @return Class 注册对象的类型 + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + * + */ + public static Class getType(String name) throws NoSuchBeanDefinitionException { + return getBeanFactory().getType(name); + } + + /** + * 如果给定的bean名字在bean定义中有别名,则返回这些别名 + * + * @param name + * @return + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + * + */ + public static String[] getAliases(String name) throws NoSuchBeanDefinitionException { + return getBeanFactory().getAliases(name); + } +} \ No newline at end of file diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/StringUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/StringUtil.java new file mode 100644 index 000000000..83afe2308 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/StringUtil.java @@ -0,0 +1,267 @@ +package com.cool.store.utils; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.RandomUtil; +import org.springframework.lang.Nullable; +import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; +import org.springframework.web.util.HtmlUtils; + +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; +import java.util.regex.Pattern; + +import static com.cool.store.utils.CoolDateUtils.DATE_FORMAT_SEC; + +/** + * @author zhangchenbiao + * @FileName: AesUtil + * @Description:字符串相关操作 + * @date 2023-05-29 14:28 + */ + +public class StringUtil extends org.apache.commons.lang3.StringUtils { + private static final char UPPER_A = 'A'; + private static final char LOWER_A = 'a'; + private static final char UPPER_Z = 'Z'; + private static final char LOWER_Z = 'z'; + + public static final String REPLACE_0 = "{0}"; + public static final String REPLACE_1 = "{1}"; + public static final String REPLACE_2 = "{2}"; + public static final String REPLACE_3 = "{3}"; + public static final String REPLACE_4 = "{4}"; + public static final String REPLACE_5 = "{5}"; + + private static final byte[] DIGITS = { + '0', '1', '2', '3', '4', '5', + '6', '7', '8', '9', 'a', 'b', + 'c', 'd', 'e', 'f', 'g', 'h', + 'i', 'j', 'k', 'l', 'm', 'n', + 'o', 'p', 'q', 'r', 's', 't', + 'u', 'v', 'w', 'x', 'y', 'z', + 'A', 'B', 'C', 'D', 'E', 'F', + 'G', 'H', 'I', 'J', 'K', 'L', + 'M', 'N', 'O', 'P', 'Q', 'R', + 'S', 'T', 'U', 'V', 'W', 'X', + 'Y', 'Z' + }; + /** + * 特殊字符正则,sql特殊字符和空白符 + */ + private static final Pattern SPECIAL_CHARS_REGEX = Pattern.compile("[`'\"|/,;()-+*%#·•� \\s]"); + /** + * 随机字符串因子 + */ + private static final String INT_STR = "0123456789"; + private static final String STR_STR = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + private static final String ALL_STR = INT_STR + STR_STR; + + /** + * 首字母变小写 + * + * @param str 字符串 + * @return {String} + */ + public static String firstCharToLower(String str) { + char firstChar = str.charAt(0); + if (firstChar >= UPPER_A && firstChar <= UPPER_Z) { + char[] arr = str.toCharArray(); + arr[0] += (LOWER_A - UPPER_A); + return new String(arr); + } + return str; + } + + /** + * 首字母变大写 + * + * @param str 字符串 + * @return {String} + */ + public static String firstCharToUpper(String str) { + char firstChar = str.charAt(0); + if (firstChar >= LOWER_A && firstChar <= LOWER_Z) { + char[] arr = str.toCharArray(); + arr[0] -= (LOWER_A - UPPER_A); + return new String(arr); + } + return str; + } + + public static String appendParams(String url, Map params) { + if (StringUtil.isBlank(url)) { + return ""; + } else if (CollectionUtils.isEmpty(params)) { + return url.trim(); + } else { + StringBuilder sb = new StringBuilder(200); + params.forEach((k, v) -> sb.append(k).append("=").append(v).append("&")); + sb.deleteCharAt(sb.length() - 1); + url = url.trim(); + int length = url.length(); + int index = url.indexOf("?"); + if (index > -1) { + if ((length - 1) == index) { + url += sb.toString(); + } else { + url += "&" + sb.toString(); + } + } else { + url += "?" + sb.toString(); + } + return url; + } + } + + /** + * 生成uuid,采用 jdk 9 的形式,优化性能 + * + * @return UUID + */ + public static String getUUID() { + ThreadLocalRandom random = ThreadLocalRandom.current(); + long lsb = random.nextLong(); + long msb = random.nextLong(); + byte[] buf = new byte[32]; + formatUnsignedLong(lsb, buf, 20, 12); + formatUnsignedLong(lsb >>> 48, buf, 16, 4); + formatUnsignedLong(msb, buf, 12, 4); + formatUnsignedLong(msb >>> 16, buf, 8, 4); + formatUnsignedLong(msb >>> 32, buf, 0, 8); + return new String(buf, StandardCharsets.UTF_8); + } + + private static void formatUnsignedLong(long val, byte[] buf, int offset, int len) { + int charPos = offset + len; + int radix = 1 << 4; + int mask = radix - 1; + do { + buf[--charPos] = DIGITS[((int) val) & mask]; + val >>>= 4; + } while (charPos > offset); + } + + /** + * 转义HTML用于安全过滤 + * + * @param html html + * @return {String} + */ + public static String escapeHtml(String html) { + return HtmlUtils.htmlEscape(html); + } + + /** + * 清理字符串,清理出某些不可见字符和一些sql特殊字符 + * + * @param txt 文本 + * @return {String} + */ + @Nullable + public static String cleanText(@Nullable String txt) { + if (txt == null) { + return null; + } + return SPECIAL_CHARS_REGEX.matcher(txt).replaceAll(StringUtil.EMPTY); + } + + /** + * 获取标识符,用于参数清理 + * + * @param param 参数 + * @return 清理后的标识符 + */ + @Nullable + public static String cleanIdentifier(@Nullable String param) { + if (param == null) { + return null; + } + StringBuilder paramBuilder = new StringBuilder(); + for (int i = 0; i < param.length(); i++) { + char c = param.charAt(i); + if (Character.isJavaIdentifierPart(c)) { + paramBuilder.append(c); + } + } + return paramBuilder.toString(); + } + + /** + * 随机数生成 + * + * @param count 字符长度 + * @return 随机数 + */ + public static String random(int count) { + return random(count, RandomType.ALL); + } + + /** + * 随机数生成 + * + * @param count 字符长度 + * @param randomType 随机数类别 + * @return 随机数 + */ + public static String random(int count, RandomType randomType) { + if (count == 0) { + return ""; + } + Assert.isTrue(count > 0, "Requested random string length " + count + " is less than 0."); + final ThreadLocalRandom random = ThreadLocalRandom.current(); + char[] buffer = new char[count]; + for (int i = 0; i < count; i++) { + if (RandomType.INT == randomType) { + buffer[i] = INT_STR.charAt(random.nextInt(INT_STR.length())); + } else if (RandomType.STRING == randomType) { + buffer[i] = STR_STR.charAt(random.nextInt(STR_STR.length())); + } else { + buffer[i] = ALL_STR.charAt(random.nextInt(ALL_STR.length())); + } + } + return new String(buffer); + } + + public enum RandomType { + /** + * INT STRING ALL + */ + INT, STRING, ALL; + } + + /** + * 左补位 + * + * @param str 字符串 + * @param length 总位数 + * @return Result 补位后的字符串 + */ + public static String addZeroForNum(String str, int length) { + int strLen = str.length(); + if (strLen < length) { + while (strLen < length) { + StringBuffer sb = new StringBuffer(); + sb.append("0").append(str); + str = sb.toString(); + strLen++; + } + } + return str; + } + + /** + * 生成房间号 + * @param dateTime + * @return + */ + public static String generateRoomId(String dateTime) { + //YYYY-MM-DD HH:mm:ss 转换成yyyyMMddHHmmss + //使用 YYMMDD 是错误的 + //String format = DateUtil.format(DateUtil.parse(dateTime, "YYYY-MM-dd HH:mm:ss"), "YYMMDD"); + String format = DateUtil.format(DateUtil.parse(dateTime, DATE_FORMAT_SEC), "yyMMdd"); + String numbers = RandomUtil.randomNumbers(4); + return format + numbers; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/TRTCUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/TRTCUtils.java new file mode 100644 index 000000000..a8c522711 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/TRTCUtils.java @@ -0,0 +1,36 @@ +package com.cool.store.utils; + +import com.tencentyun.TLSSigAPIv2; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * 腾讯实时音视频TRTC工具类 + */ +@Component +public class TRTCUtils { + + /** + * 默认过期时间 30 s + * 修改为 24 小时(官方建议) + */ + private static final Long expired = 60 * 60 * 24L; + + /** + * 生成 userSig 用于进入会议 + * 详见 https://cloud.tencent.com/document/product/647/17275#.E8.B0.83.E8.AF.95.E8.B7.91.E9.80.9A.E9.98.B6.E6.AE.B5.E5.A6.82.E4.BD.95.E8.AE.A1.E7.AE.97-UserSig.EF.BC.9F + */ + public static String genUserSig(Long sdkAppId, String key, String userId) { + TLSSigAPIv2 tlsSigAPIv2 = new TLSSigAPIv2(sdkAppId, key); + return tlsSigAPIv2.genUserSig(userId, expired); + } + + public static String genUserSig(Long sdkAppId, String key, String userId, Long expiredTime) { + TLSSigAPIv2 tlsSigAPIv2 = new TLSSigAPIv2(sdkAppId, key); + return tlsSigAPIv2.genUserSig(userId, expiredTime); + } + + public static void main(String[] args) { + System.out.println(genUserSig(1600026212L, "e036b654c665f649f053a01ff6f5652a826980027be298d4d49949f6e26434a5", "6488aeaefa7246de9af141c6c6fdd2c7")); + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/UUIDUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/UUIDUtils.java new file mode 100644 index 000000000..8ff73fd9b --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/UUIDUtils.java @@ -0,0 +1,30 @@ +package com.cool.store.utils; + +import cn.hutool.core.util.IdUtil; +import org.apache.commons.lang3.StringUtils; + +/** + * 唯一性ID工具类 + * + * @author Aaron + * @ClassName UUIDUtils + * @Description 唯一性ID工具类 + */ +public class UUIDUtils { + + /** + * 简化的UUID,去掉了横线,使用性能更好的ThreadLocalRandom生成UUID + */ + public static String get32UUID() { + return IdUtil.fastSimpleUUID(); + } + public static String get8UUID() { + return StringUtils.substring(IdUtil.fastSimpleUUID(),1,9); + } + + public static Long get8LongUuid() { + long uuid = (int) (Math.random() * 90000000 + 10000000); + return uuid; + } + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/AliResponseUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/AliResponseUtil.java new file mode 100644 index 000000000..9ec67363b --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/AliResponseUtil.java @@ -0,0 +1,49 @@ +package com.cool.store.utils.vod; + +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by Joshua on 2017/9/28 15:50 + */ +public class AliResponseUtil { + + public static String GetPostBody(InputStream is, int contentLen) { + if (contentLen > 0) { + int readLen = 0; + int readLengthThisTime = 0; + byte[] message = new byte[contentLen]; + try { + while (readLen != contentLen) { + readLengthThisTime = is.read(message, readLen, contentLen - readLen); + if (readLengthThisTime == -1) {// Should not happen. + break; + } + readLen += readLengthThisTime; + } + return new String(message); + } catch (IOException e) { + } + } + return ""; + } + + public static Map convert(Map requestParams) throws UnsupportedEncodingException { + Map params = new HashMap<>(); + for (String name : requestParams.keySet()) { + String[] values = (String[]) requestParams.get(name); + String valueStr = ""; + for (int i = 0; i < values.length; i++) { + valueStr = (i == values.length - 1) ? valueStr + values[i] + : valueStr + values[i] + ","; + } + //乱码解决,这段代码在出现乱码时使用 + valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); + params.put(name, valueStr); + } + return params; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/CallbackRequest.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/CallbackRequest.java new file mode 100644 index 000000000..cff03eae0 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/CallbackRequest.java @@ -0,0 +1,209 @@ +package com.cool.store.utils.vod; + +import java.util.List; + +/** + * Created by Joshua on 2017/9/28 13:06 + */ +public class CallbackRequest { + private String EventType; + private String VideoId; + private String MediaId; + private String Status; + private String Bitrate;//视频流码率,单位Kbps + private String Definition;//视频流清晰度定义, 取值:FD(流畅),LD(标清),SD(高清),HD(超清),OD(原画),2K(2K),4K(4K) + private Float Duration;//视频流长度,单位秒 + private Boolean Encrypt;//视频流是否加密流 + private String ErrorCode;//视频流转码出错的时候,会有该字段表示出错代码 + private String ErrorMessage;// 视频流转码出错的时候,会有该字段表示出错信息 + private String FileUrl;//视频流的播放地址,不带鉴权的auth_key,如果开启了URL鉴权,则需要自己生成auth_key才能访问 + private String Format;//视频流格式,取值:mp4, m3u8 + private String Fps;//视频流帧率,每秒多少帧 + private Long Height;// 视频流高度,单位px + private Long Size;// 视频流大小,单位Byte + private Long Width;// 视频流宽度,单位px + private List StreamInfos; + private String CoverUrl;//封面图片地址,若未设置封面,则取第一张截图为封面 + private String[] Snapshots;// 截图地址列表 + + private String Data; + + private String CreationTime; //人工审核时间 + private String AuditStatus; //人工审核的结果 + + public String getEventType() { + return EventType; + } + + public void setEventType(String eventType) { + EventType = eventType; + } + + public String getVideoId() { + return VideoId; + } + + public void setVideoId(String videoId) { + VideoId = videoId; + } + + public String getStatus() { + return Status; + } + + public void setStatus(String status) { + Status = status; + } + + public String getBitrate() { + return Bitrate; + } + + public void setBitrate(String bitrate) { + Bitrate = bitrate; + } + + public String getDefinition() { + return Definition; + } + + public void setDefinition(String definition) { + Definition = definition; + } + + public Float getDuration() { + return Duration; + } + + public void setDuration(Float duration) { + Duration = duration; + } + + public Boolean getEncrypt() { + return Encrypt; + } + + public void setEncrypt(Boolean encrypt) { + Encrypt = encrypt; + } + + public String getErrorCode() { + return ErrorCode; + } + + public void setErrorCode(String errorCode) { + ErrorCode = errorCode; + } + + public String getErrorMessage() { + return ErrorMessage; + } + + public void setErrorMessage(String errorMessage) { + ErrorMessage = errorMessage; + } + + public String getFileUrl() { + return FileUrl; + } + + public void setFileUrl(String fileUrl) { + FileUrl = fileUrl; + } + + public String getFormat() { + return Format; + } + + public void setFormat(String format) { + Format = format; + } + + public String getFps() { + return Fps; + } + + public void setFps(String fps) { + Fps = fps; + } + + public Long getHeight() { + return Height; + } + + public void setHeight(Long height) { + Height = height; + } + + public Long getSize() { + return Size; + } + + public void setSize(Long size) { + Size = size; + } + + public Long getWidth() { + return Width; + } + + public void setWidth(Long width) { + Width = width; + } + + public List getStreamInfos() { + return StreamInfos; + } + + public void setStreamInfos(List streamInfos) { + StreamInfos = streamInfos; + } + + public String getCoverUrl() { + return CoverUrl; + } + + public void setCoverUrl(String coverUrl) { + CoverUrl = coverUrl; + } + + public String[] getSnapshots() { + return Snapshots; + } + + public void setSnapshots(String[] snapshots) { + Snapshots = snapshots; + } + + public String getData() { + return Data; + } + + public void setData(String data) { + Data = data; + } + + public String getCreationTime() { + return CreationTime; + } + + public void setCreationTime(String creationTime) { + CreationTime = creationTime; + } + + public String getAuditStatus() { + return AuditStatus; + } + + public void setAuditStatus(String auditStatus) { + AuditStatus = auditStatus; + } + + public String getMediaId() { + return MediaId; + } + + public void setMediaId(String mediaId) { + MediaId = mediaId; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/CallbackStreamInfo.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/CallbackStreamInfo.java new file mode 100644 index 000000000..2ca5583d2 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/CallbackStreamInfo.java @@ -0,0 +1,124 @@ +package com.cool.store.utils.vod; + +/** + * Created by Joshua on 2017/9/28 13:09 + */ +public class CallbackStreamInfo { + private String Status;// 视频流转码状态,取值:success(成功),fail(失败) + private Float Bitrate;// 视频流码率,单位Kbps + private String Definition;// 视频流清晰度定义, 取值:FD(流畅),LD(标清),SD(高清),HD(超清),OD(原画),2K(2K),4K(4K) + private Float Duration;// 视频流长度,单位秒 + private Boolean Encrypt;// 视频流是否加密流 + private String ErrorCode;// 视频流转码出错的时候,会有该字段表示出错代码 + private String ErrorMessage;// 视频流转码出错的时候,会有该字段表示出错信息 + private String FileUrl;// 视频流的播放地址,不带鉴权的auth_key,如果开启了播放鉴权,此地址会无法访问 + private String Format;// 视频流格式,取值:mp4, m3u8 + private Float Fps;// 视频流帧率,每秒多少帧 + private Long Height;// 视频流高度,单位px + private Long Size;// 视频流大小,单位Byte + private Long Width;// 视频流宽度,单位px + + public String getStatus() { + return Status; + } + + public void setStatus(String status) { + Status = status; + } + + public Float getBitrate() { + return Bitrate; + } + + public void setBitrate(Float bitrate) { + Bitrate = bitrate; + } + + public String getDefinition() { + return Definition; + } + + public void setDefinition(String definition) { + Definition = definition; + } + + public Float getDuration() { + return Duration; + } + + public void setDuration(Float duration) { + Duration = duration; + } + + public Boolean getEncrypt() { + return Encrypt; + } + + public void setEncrypt(Boolean encrypt) { + Encrypt = encrypt; + } + + public String getErrorCode() { + return ErrorCode; + } + + public void setErrorCode(String errorCode) { + ErrorCode = errorCode; + } + + public String getErrorMessage() { + return ErrorMessage; + } + + public void setErrorMessage(String errorMessage) { + ErrorMessage = errorMessage; + } + + public String getFileUrl() { + return FileUrl; + } + + public void setFileUrl(String fileUrl) { + FileUrl = fileUrl; + } + + public String getFormat() { + return Format; + } + + public void setFormat(String format) { + Format = format; + } + + public Float getFps() { + return Fps; + } + + public void setFps(Float fps) { + Fps = fps; + } + + public Long getHeight() { + return Height; + } + + public void setHeight(Long height) { + Height = height; + } + + public Long getSize() { + return Size; + } + + public void setSize(Long size) { + Size = size; + } + + public Long getWidth() { + return Width; + } + + public void setWidth(Long width) { + Width = width; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/EventType.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/EventType.java new file mode 100644 index 000000000..f273bc960 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/EventType.java @@ -0,0 +1,29 @@ +package com.cool.store.utils.vod; + +/** + * Created by Joshua on 2017/9/28 13:41 + */ +public class EventType { + /** + * 视频上传完成 + */ + public static final String FileUploadComplete = "FileUploadComplete"; + /** + * 视频截图完成 + */ + public static final String SnapshotComplete = "SnapshotComplete"; + /** + * 视频单个清晰度转码完成 + */ + public static final String StreamTranscodeComplete = "StreamTranscodeComplete"; + /** + * 视频全部清晰度转码完成 + */ + public static final String TranscodeComplete = "TranscodeComplete"; + /** + * 智能审核 + */ + public static final String AIMediaAuditComplete = "AIMediaAuditComplete"; + + public static final String CreateAuditComplete = "CreateAuditComplete"; +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/SmallVideoParam.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/SmallVideoParam.java new file mode 100644 index 000000000..0930003cc --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/SmallVideoParam.java @@ -0,0 +1,39 @@ +package com.cool.store.utils.vod; + +import lombok.Data; + +import java.util.Date; + +/** + * @author chenyupeng + * @since 2021/10/11 + */ +@Data +public class SmallVideoParam { + + /** + * 企业id + */ + private String enterpriseId; + + /** + * 任务id + */ + private Long businessId; + + /** + * 转码视频videoId + */ + private String videoId; + + /** + * + * 上传类型 + */ + private Integer uploadType; + + /** + * 上传时间 + */ + private Date uploadTime; +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/UserData.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/UserData.java new file mode 100644 index 000000000..06be1a051 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/vod/UserData.java @@ -0,0 +1,32 @@ +package com.cool.store.utils.vod; + + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +/** + * @Title UserData + * @Description vod服务UserData参数 + * @Author zhucg + */ +@Data +public class UserData { + + /** + * 回调设置 + */ + @JSONField(name = "MessageCallback") + private MessageCallback messageCallback; + + public void setCallBack(String callBackUrl) { + this.messageCallback = new MessageCallback(); + this.messageCallback.setCallbackURL(callBackUrl); + } + + @Data + public class MessageCallback { + + @JSONField(name = "CallbackURL") + private String callbackURL; + } +} diff --git a/coolstore-partner-dao/pom.xml b/coolstore-partner-dao/pom.xml new file mode 100644 index 000000000..d61f626c1 --- /dev/null +++ b/coolstore-partner-dao/pom.xml @@ -0,0 +1,60 @@ + + + + coolstore-partner-manage + com.coolstore + 1.0.0 + + 4.0.0 + + coolstore-partner-dao + + + 1.1.20 + 2.1.0 + UTF-8 + UTF-8 + 1.8 + 8 + 8 + + + + + + com.coolstore + coolstore-partner-model + + + org.springframework.boot + spring-boot-starter-jdbc + + + com.coolstore + coolstore-partner-common + + + mysql + mysql-connector-java + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + org.mybatis.generator + mybatis-generator-core + 1.3.7 + test + + + tk.mybatis + mapper + 4.1.4 + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/AcceptanceInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/AcceptanceInfoDAO.java new file mode 100644 index 000000000..ba8ce5d2b --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/AcceptanceInfoDAO.java @@ -0,0 +1,60 @@ +package com.cool.store.dao; + +import com.cool.store.constants.CommonConstants; +import com.cool.store.entity.AcceptanceInfoDO; +import com.cool.store.mapper.AcceptanceInfoMapper; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * @Auther: WangShuo + * @Date: 2024/04/29/下午7:47 + * @Version 1.0 + * @注释: + */ +@Repository +public class AcceptanceInfoDAO { + @Resource + private AcceptanceInfoMapper acceptanceInfoMapper; + + public Long insertSelectiveAcceptanceInfo(AcceptanceInfoDO acceptanceInfoDO){ + if (Objects.isNull(acceptanceInfoDO)){ + return null; + } + acceptanceInfoMapper.insertSelective(acceptanceInfoDO); + return acceptanceInfoDO.getId(); + } + public List selectAcceptanceInfoBySignatures(Integer subStage, Integer status){ + return acceptanceInfoMapper.selectShopIdListBySignatures(subStage,status); + } + public Integer updateAcceptanceInfo(AcceptanceInfoDO acceptanceInfoDO){ + if (Objects.isNull(acceptanceInfoDO)){ + return CommonConstants.ZERO; + } + return acceptanceInfoMapper.updateByShopIDSelective(acceptanceInfoDO); + } + public List selectListNotNullEntryTime(){ + return acceptanceInfoMapper.selectListNotNullEntryTime(); + } + public AcceptanceInfoDO selectByShopId (Long shopId){ + if (Objects.isNull(shopId)){ + return null; + } + return acceptanceInfoMapper.selectByShopId(shopId); + } + public List selectByShopIds (List shopIds){ + if (CollectionUtils.isEmpty(shopIds)){ + return null; + } + return acceptanceInfoMapper.selectByShopIds(shopIds); + } + public List selectByEntryTimeNull(){ + return acceptanceInfoMapper.selectByEntryTimeNull(); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/AssessmentDataDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/AssessmentDataDAO.java new file mode 100644 index 000000000..894fa4935 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/AssessmentDataDAO.java @@ -0,0 +1,86 @@ +package com.cool.store.dao; + +import com.cool.store.entity.AssessmentDataDO; +import com.cool.store.mapper.AssessmentDataMapper; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/04/29/下午10:38 + * @Version 1.0 + * @注释: AssessmentDataDO + */ +@Repository +public class AssessmentDataDAO { + @Resource + private AssessmentDataMapper assessmentDataMapper; + + public Boolean batchInsert(List assessmentDataDOS) { + if (CollectionUtils.isNotEmpty(assessmentDataDOS)) { + for (AssessmentDataDO assessmentDataDO : assessmentDataDOS) { + assessmentDataMapper.insertSelective(assessmentDataDO); + } + return Boolean.TRUE; + } + return Boolean.FALSE; + } + + public Integer batchUpdate(List assessmentDataDOS) { + if (CollectionUtils.isNotEmpty(assessmentDataDOS)) { + return assessmentDataMapper.batchUpdate(assessmentDataDOS); + } + return 0; + } + + public List selectList(String userId, List templateIdList) { + Example example = new Example(AssessmentDataDO.class); + example.createCriteria().andEqualTo("assessmentUserId", userId).andIn("templateId", templateIdList); + return assessmentDataMapper.selectByExample(example); + } + + public AssessmentDataDO selectByTemplateId(Long templateId, String userId, Long shopId) { + return assessmentDataMapper.selectOne(AssessmentDataDO.builder().shopId(shopId).templateId(templateId).assessmentUserId(userId).build()); + } + + public Integer updateByPrimaryKeySelective(AssessmentDataDO assessmentDataDO) { + return assessmentDataMapper.updateByPrimaryKeySelective(assessmentDataDO); + } + + public Integer insertSelective(AssessmentDataDO assessmentDataDO) { + return assessmentDataMapper.insertSelective(assessmentDataDO); + } + + public Integer selectCount(String userId, Long shopId) { + Example example = new Example(AssessmentDataDO.class); + example.createCriteria().andEqualTo("assessmentUserId", userId).andEqualTo("shopId", shopId) + .andEqualTo("qualified", Boolean.TRUE); + return assessmentDataMapper.selectCountByExample(example); + } + + public AssessmentDataDO selectByPrimaryKey(Long id) { + return assessmentDataMapper.selectByPrimaryKey(id); + } + + public List selectListByShopId(Long shopId,Long templateIdMin, Long templateIdMax) { + if (shopId == null || templateIdMin == 0L || templateIdMax == 0L) { + return null; + } + return assessmentDataMapper.selectListByShopId(shopId,templateIdMin,templateIdMax); + } + + public void batchInsertDO(List assessmentDataDOList) { + assessmentDataMapper.batchInsert(assessmentDataDOList); + } + + public void batchInsertOrUpdate(List assessmentDataDOList) { + assessmentDataMapper.batchInsertOrUpdate(assessmentDataDOList); + } + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/AssessmentTemplateDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/AssessmentTemplateDAO.java new file mode 100644 index 000000000..1370fafe5 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/AssessmentTemplateDAO.java @@ -0,0 +1,28 @@ +package com.cool.store.dao; + +import com.cool.store.entity.AssessmentTemplateDO; +import com.cool.store.mapper.AssessmentTemplateMapper; +import com.google.common.collect.Lists; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/25 11:20 + * @Version 1.0 + */ +@Repository +public class AssessmentTemplateDAO { + @Resource + private AssessmentTemplateMapper assessmentTemplateMapper; + + public List listByType(@Param("type") Integer type){ + if (type == null){ + return Lists.newArrayList(); + } + return assessmentTemplateMapper.listByType(type); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/BankDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/BankDAO.java new file mode 100644 index 000000000..dbf3ea774 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/BankDAO.java @@ -0,0 +1,40 @@ +package com.cool.store.dao; + +import com.cool.store.entity.BankdocDO; +import com.cool.store.entity.BanktypeDO; +import com.cool.store.mapper.BankdocMapper; +import com.cool.store.mapper.BanktypeMapper; +import com.cool.store.request.BranchBankPageRequest; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author wxp + * @FileName: BankDAO + * @Description: + * @date 2024-03-19 10:49 + */ +@Slf4j +@Repository +public class BankDAO { + + @Resource + private BanktypeMapper banktypeMapper; + @Resource + private BankdocMapper bankdocMapper; + + public List listBank() { + List bankList = banktypeMapper.listBank(); + return bankList; + } + + public Page listBranchBank(BranchBankPageRequest request){ + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + return bankdocMapper.listBranchBank(request); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/EmployeeTrainingDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EmployeeTrainingDAO.java new file mode 100644 index 000000000..b7d70d698 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EmployeeTrainingDAO.java @@ -0,0 +1,84 @@ +package com.cool.store.dao; + +import com.cool.store.entity.EmployeeTrainingDO; +import com.cool.store.mapper.EmployeeTrainingMapper; +import com.cool.store.vo.EmployeeTrainingVO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * @author byd + * @date 2024-04-29 16:06 + */ +@Slf4j +@Repository +public class EmployeeTrainingDAO { + + @Resource + private EmployeeTrainingMapper employeeTrainingMapper; + + public List employeeTrainingList(String keyWord, List regionIdList, + List authRegionIdList, Boolean assignFlag, + String beginTime, String endTime, List storeNumList, + Integer theoreticalExamStatus, + Integer practicalExamStatus, + Integer assessmentStatus, + Boolean assignStoreFlag) { + + return employeeTrainingMapper.employeeTrainingList(keyWord, regionIdList, authRegionIdList, assignFlag, beginTime, endTime, storeNumList, + theoreticalExamStatus, practicalExamStatus, assessmentStatus, assignStoreFlag); + } + + public EmployeeTrainingDO selectById(Long id) { + + return employeeTrainingMapper.selectByPrimaryKey(id); + } + + public EmployeeTrainingDO selectByUserDetailId(Long userDetailId) { + return employeeTrainingMapper.selectOne(EmployeeTrainingDO.builder().xfsgUserDetailId(userDetailId).build()); + } + + public int insertSelective(EmployeeTrainingDO employeeTrainingDO) { + + return employeeTrainingMapper.insertSelective(employeeTrainingDO); + } + + public int updateByPrimaryKeySelective(EmployeeTrainingDO employeeTrainingDO) { + + return employeeTrainingMapper.updateByPrimaryKeySelective(employeeTrainingDO); + } + + public List trainingListByShopId(Long shopId, String trainingTeacherUserId, Integer status) { + + return employeeTrainingMapper.trainingListByShopId(shopId, trainingTeacherUserId, status); + } + + public List assessmentUserList(String name, String practicalAssessmentUserId, + Integer assessmentStatus, + String estimatedAssessmentBeginTime, String estimatedAssessmentEndTime, + String actualAssessmentBeginTime, String actualAssessmentEndTime, List storeIdList) { + return employeeTrainingMapper.assessmentUserList(name, practicalAssessmentUserId, assessmentStatus, estimatedAssessmentBeginTime, + estimatedAssessmentEndTime, actualAssessmentBeginTime, actualAssessmentEndTime, storeIdList); + } + + public List theoreticalList() { + List statusList = new ArrayList<>(); + statusList.add(2); + statusList.add(3); + Example example = new Example(EmployeeTrainingDO.class); + example.createCriteria().andCondition("assessment_num = assessment_total_num").andEqualTo("theoreticalExamStatus", 0) + .andIn("assessmentStatus", statusList); + return employeeTrainingMapper.selectByExample(example); + } + + public Integer unCompleteNum(Long shopId) { + Example example = new Example(EmployeeTrainingDO.class); + example.createCriteria().andEqualTo("shopId", shopId).andCondition("(theoretical_exam_status != 1 or practical_exam_status != 1)"); + return employeeTrainingMapper.selectCountByExample(example); + } +} 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 new file mode 100644 index 000000000..c4c527a92 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserDAO.java @@ -0,0 +1,153 @@ +package com.cool.store.dao; + +import com.cool.store.constants.CommonConstants; +import com.cool.store.dto.openPreparation.UserNameDTO; +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.mapper.EnterpriseUserMapper; +import com.cool.store.utils.StringUtil; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @date 2023-05-19 02:58 + */ +@Repository +public class EnterpriseUserDAO { + + @Resource + private EnterpriseUserMapper enterpriseUserMapper; + + + public EnterpriseUserDO getUserInfoById(String userId){ + if(StringUtils.isBlank(userId)){ + return null; + } + return enterpriseUserMapper.getUserInfoById( userId); + } + + public EnterpriseUserDO getUserInfoByJobnumber(String jobnumber){ + if(StringUtils.isBlank(jobnumber)){ + return null; + } + return enterpriseUserMapper.getUserInfoByJobnumber(jobnumber); + } + + public EnterpriseUserDO getUserInfoByThirdOaUniqueFlag(String thirdOaUniqueFlag){ + if(StringUtils.isBlank(thirdOaUniqueFlag)){ + return null; + } + return enterpriseUserMapper.getUserInfoByThirdOaUniqueFlag(thirdOaUniqueFlag); + } + + public List getUserInfoByUserIds(List userIdList){ + if(CollectionUtils.isEmpty(userIdList)){ + return Lists.newArrayList(); + } + return enterpriseUserMapper.getUserInfoByUserIds( userIdList); + } + + public List searchUserByRegionIdsAndKeyword(List regionIds, String keyword, List leaderRegionIds){ + if(CollectionUtils.isEmpty(regionIds)){ + return Lists.newArrayList(); + } + return enterpriseUserMapper.searchUserByRegionIdsAndKeyword( regionIds, keyword, leaderRegionIds); + } + + public boolean isExistDeptUser(String regionId){ + if(StringUtils.isBlank(regionId)){ + return false; + } + return enterpriseUserMapper.getUserCountByRegionId( regionId) > CommonConstants.ZERO; + } + + /** + * 获取部门负责人 + * @param regionId + * @return + */ + public List getUserListByDeptLeader(String regionId){ + if(StringUtils.isBlank(regionId)){ + return Lists.newArrayList(); + } + return enterpriseUserMapper.getUserListByDeptLeader( regionId); + } + + public List getUserListByDeptLeaders(List regionIds){ + if(CollectionUtils.isEmpty(regionIds)){ + return Lists.newArrayList(); + } + return enterpriseUserMapper.getUserListByDeptLeaders( regionIds); + } + + + public List getUserListByRegionIds(List regionIds){ + if(CollectionUtils.isEmpty(regionIds)){ + return Lists.newArrayList(); + } + return enterpriseUserMapper.getUserListByRegionIds( regionIds); + } + + public List getUserIdListByRegionId(Long regionId, List userIdList){ + if(CollectionUtils.isEmpty(userIdList) || regionId == null){ + return Lists.newArrayList(); + } + return enterpriseUserMapper.getUserIdListByRegionId(regionId, userIdList); + } + + public Map getUserNameAndMobile(List userIds){ + List userList = getUserInfoByUserIds(userIds); + return userList.stream().filter(o->!StringUtils.isAnyBlank(o.getMobile())).collect(Collectors.toMap(k -> k.getUserId(), v -> v.getName() + " " + v.getMobile())); + } + + public Map getUserNameMap(List userIds){ + List userList = getUserInfoByUserIds(userIds); + return userList.stream().filter(o->!StringUtils.isAnyBlank(o.getName())).collect(Collectors.toMap(k -> k.getUserId(), v -> v.getName())); + } + + public Map getUserMap(List userIds){ + List userList = getUserInfoByUserIds(userIds); + return userList.stream().filter(o->!StringUtils.isAnyBlank(o.getMobile(), o.getName())).collect(Collectors.toMap(k -> k.getUserId(), Function.identity())); + } + + public Map getUserInfoMap(List userIds){ + List userList = getUserInfoByUserIds(userIds); + return userList.stream().collect(Collectors.toMap(k -> k.getUserId(), Function.identity())); + } + + public EnterpriseUserDO selectByMobile(String mobile) { + return enterpriseUserMapper.selectByMobile( mobile); + } + + public String getUserName(String userId){ + EnterpriseUserDO userInfo = getUserInfoById(userId); + return Optional.ofNullable(userInfo).map(EnterpriseUserDO::getName).orElse(StringUtils.EMPTY); + } + + public EnterpriseUserDO selectByInvestmentManager(String investmentManager) { + if (StringUtil.isEmpty(investmentManager)) { + return null; + } + return enterpriseUserMapper.selectByInvestmentManager( investmentManager); + } + public List getNameByUserId(List userIdList){ + if (CollectionUtils.isEmpty(userIdList)) { + return new ArrayList<>(); + } + return enterpriseUserMapper.selectNameByUserId(userIdList); + } + + public List getUserListByRegionId(Long regionId){ + if(regionId == null){ + return Lists.newArrayList(); + } + return enterpriseUserMapper.getUserListByRegionId(regionId); + } +} \ No newline at end of file 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 new file mode 100644 index 000000000..99b55aa4b --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserRoleDao.java @@ -0,0 +1,77 @@ +package com.cool.store.dao; + +import com.cool.store.entity.SysRoleDO; +import com.cool.store.enums.Role; +import com.cool.store.mapper.EnterpriseUserRoleMapper; +import com.cool.store.mapper.SysRoleMapper; +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.Repository; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * @author zhangnan + * @date 2022-04-14 18:38 + */ +@Repository +public class EnterpriseUserRoleDao { + + @Resource + private EnterpriseUserRoleMapper enterpriseUserRoleMapper; + @Resource + private SysRoleMapper sysRoleMapper; + + /** + * 根据角色id查询用户id列表 + * @param roleIds + * @return + */ + public List selectUserIdsByRoleIdList( List roleIds) { + if( CollectionUtils.isEmpty(roleIds)) { + return Lists.newArrayList(); + } + return enterpriseUserRoleMapper.selectUserIdsByRoleIdList(roleIds); + } + + public List selectUserIdsByRole( Role role) { + if(Objects.isNull(role)) { + return Lists.newArrayList(); + } + return enterpriseUserRoleMapper.selectUserIdsByRoleIdList( Arrays.asList(Long.valueOf(role.getId()))); + } + + public List getUserIdsByRoleIds( List roleIds, List userIds){ + if(CollectionUtils.isEmpty(roleIds) || CollectionUtils.isEmpty(userIds)){ + return Lists.newArrayList(); + } + return enterpriseUserRoleMapper.getUserIdsByRoleIds(roleIds, userIds); + } + + public List getUserRoleIds( String userId){ + if(StringUtils.isAnyBlank(userId)){ + return Lists.newArrayList(); + } + return enterpriseUserRoleMapper.getUserRoleIds(userId); + } + + public Boolean checkIsAdmin( String userId) { + + // 1.取出所有用户角色 + // 2.匹配是否有管理员角色 + List sysRoleDOList = sysRoleMapper.listRoleByUserId(userId); + return ListUtils.emptyIfNull(sysRoleDOList) + .stream() + .anyMatch(role-> StringUtils.equals(Role.MASTER.getRoleEnum(),role.getRoleEnum())); + } + + public List getUserIdsByRoleIdList( List roleIdList) { + return enterpriseUserRoleMapper.getUserIdsByRoleIdList(roleIdList); + } + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/FirstOrderDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/FirstOrderDAO.java new file mode 100644 index 000000000..8968a6da0 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/FirstOrderDAO.java @@ -0,0 +1,34 @@ +package com.cool.store.dao; + +import com.cool.store.dto.openPreparation.FirstOrderDTO; +import com.cool.store.entity.FirstOrderDO; +import com.cool.store.mapper.FirstOrderMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; + +/** + * @Auther: WangShuo + * @Date: 2024/04/24/下午8:32 + * @Version 1.0 + * @注释:首批订货金 + */ +@Repository +public class FirstOrderDAO { + + @Resource + private FirstOrderMapper firstOrderMapper; + + public Integer insertFirstOrder(FirstOrderDO firstOrderDO) { + return firstOrderMapper.insertSelective(firstOrderDO); + } + + public FirstOrderDTO selectFirstOrderByShopId(Long shopId) { + return firstOrderMapper.selectByShopId(shopId); + } + public Integer updateByPrimaryKeySelective(FirstOrderDO firstOrderDO) { + return firstOrderMapper.updateByPrimaryKeySelective(firstOrderDO); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyOpenAreaInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyOpenAreaInfoDAO.java new file mode 100644 index 000000000..372453d25 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyOpenAreaInfoDAO.java @@ -0,0 +1,174 @@ +package com.cool.store.dao; + +import cn.hutool.core.convert.Convert; +import com.cool.store.entity.HyOpenAreaInfoDO; +import com.cool.store.mapper.HyOpenAreaInfoMapper; +import com.cool.store.utils.StringUtil; +import com.github.pagehelper.PageInfo; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +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.Repository; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2023/6/6 14:32 + * @Version 1.0 + */ +@Repository +public class HyOpenAreaInfoDAO { + + @Resource + HyOpenAreaInfoMapper hyOpenAreaInfoMapper; + + public List queryKeyOpenArea(String keyword,Integer keyOpenStatus){ + return hyOpenAreaInfoMapper.queryKeyOpenArea( keyword, keyOpenStatus); + } + + public List queryByKeyword(String keyword,Boolean applyFlag,String areaStatus,Boolean filterData){ + return hyOpenAreaInfoMapper.queryByKeyword(keyword,applyFlag,areaStatus,filterData); + } + + public List queryFirstLevel(){ + return hyOpenAreaInfoMapper.queryFirstLevel(); + } + + public List queryByIdsExcludeFirstLevel(List ids){ + if (CollectionUtils.isEmpty(ids)){ + return new ArrayList<>(); + } + return hyOpenAreaInfoMapper.queryByIdsExcludeFirstLevel(ids); + } + + + public List getChildrenList(Long parentId){ + if (parentId==null){ + return new ArrayList<>(); + } + return hyOpenAreaInfoMapper.getChildrenList(parentId); + } + + public Integer getChildrenCount(String type ,Long parentId){ + if (parentId==null){ + return 0; + } + return hyOpenAreaInfoMapper.getChildrenCount(type,parentId); + } + + + public int batchUpdateById(String backgroundBanner,String detailBanner,String areaStatus,String updateUserId,List ids){ + if (StringUtils.isEmpty(areaStatus)){ + return 0; + } + return hyOpenAreaInfoMapper.batchUpdateById(backgroundBanner,detailBanner,areaStatus,updateUserId,ids); + } + + public int batchUpdateByParentId(String backgroundBanner,String detailBanner,String areaStatus,String updateUserId,List ids){ + if (StringUtils.isEmpty(areaStatus)){ + return 0; + } + return hyOpenAreaInfoMapper.batchUpdateByParentId(backgroundBanner,detailBanner,areaStatus,updateUserId,ids); + } + + + public List selectByIds(List ids){ + if (CollectionUtils.isEmpty(ids)){ + return Lists.newArrayList(); + } + return hyOpenAreaInfoMapper.selectByIds(ids); + } + + public Map getNameMapByIds(List ids){ + if (CollectionUtils.isEmpty(ids)){ + return Maps.newHashMap(); + } + List hyOpenAreaInfoDOS = hyOpenAreaInfoMapper.selectByIds(ids); + return ListUtils.emptyIfNull(hyOpenAreaInfoDOS).stream().collect(Collectors.toMap(k->k.getId(), v->v.getAreaName(), (k1, k2)->k1)); + } + + public Map selectNameMapByIds(List ids){ + if (CollectionUtils.isEmpty(ids)){ + return Maps.newHashMap(); + } + List hyOpenAreaInfoDOS = hyOpenAreaInfoMapper.selectByIds(ids); + return ListUtils.emptyIfNull(hyOpenAreaInfoDOS).stream().collect(Collectors.toMap(k->k.getId(), v->v.getAreaPath().replace("/"," ").trim())); + } + + public String selectNameMapById(Long id){ + HyOpenAreaInfoDO hyOpenAreaInfoDOS = hyOpenAreaInfoMapper.selectById(id); + return hyOpenAreaInfoDOS.getAreaPath().replace("/", " ").trim(); + } + + + public HyOpenAreaInfoDO selectById(Long id){ + if (id==null){ + return null; + } + return hyOpenAreaInfoMapper.selectById(id); + } + + public List getAllOpenArea(){ + return hyOpenAreaInfoMapper.getAllOpenArea(); + } + + + public List selectAllCity(){ + return hyOpenAreaInfoMapper.selectAllCity(); + } + + /** + * 过滤叶子节点 + * @param openAreaIds + * @return 叶子节点id + */ + public List filterLeafNode(List openAreaIds){ + if(CollectionUtils.isEmpty(openAreaIds)){ + return Lists.newArrayList(); + } + return hyOpenAreaInfoMapper.filterLeafNode(openAreaIds); + } + + public List getAllAreaCode(String id) { + if (StringUtils.isEmpty(id)){ + return new ArrayList<>(); + } + //获取省下所有数据 + List provinceCodeList= hyOpenAreaInfoMapper.getProvinceAllCode(id); + if(CollectionUtils.isEmpty(provinceCodeList)){ + //获取市区下所有数据 + List cityCodeList= hyOpenAreaInfoMapper.getSonArea(id); + if(CollectionUtils.isEmpty(cityCodeList)){ + return new ArrayList(){{ add(hyOpenAreaInfoMapper.selectById(Convert.toLong(id)));}}; + }else { + return cityCodeList; + } + }else { + return provinceCodeList; + } + } + + public HyOpenAreaInfoDO selectByAreaPath(String areaPath) { + if (StringUtil.isEmpty(areaPath)) { + return null; + } + return hyOpenAreaInfoMapper.selectByAreaPath(areaPath); + } + + public int updateByPrimaryKeySelective(HyOpenAreaInfoDO hyOpenAreaInfoDO){ + return hyOpenAreaInfoMapper.updateByPrimaryKeySelective( hyOpenAreaInfoDO); + } + + public Map getCityMap(List wantShopAreaIds) { + List openAreaInfoList = selectByIds(wantShopAreaIds); + return openAreaInfoList.stream().collect(Collectors.toMap(k->k.getId(), v->v, (k1, k2)->k1)); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerLabelDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerLabelDAO.java new file mode 100644 index 000000000..491227b41 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerLabelDAO.java @@ -0,0 +1,33 @@ +package com.cool.store.dao; + +import com.cool.store.entity.HyPartnerLabelDO; +import com.cool.store.mapper.HyPartnerLabelMapper; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/3/26 16:39 + * @Version 1.0 + */ +@Repository +public class HyPartnerLabelDAO { + + @Resource + HyPartnerLabelMapper hyPartnerLabelMapper; + + public List listByIds(List ids ){ + if (CollectionUtils.isEmpty(ids)){ + return null; + } + return hyPartnerLabelMapper.getLabelListByIds(ids); + } + + + + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerUserChannelDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerUserChannelDAO.java new file mode 100644 index 000000000..5b33e6c7e --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerUserChannelDAO.java @@ -0,0 +1,37 @@ +package com.cool.store.dao; + +import com.cool.store.entity.HyPartnerUserChannelDO; +import com.cool.store.mapper.HyPartnerUserChannelMapper; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2023/8/21 11:38 + * @Version 1.0 + */ +@Repository +public class HyPartnerUserChannelDAO { + + @Resource + HyPartnerUserChannelMapper hyPartnerUserChannelMapper; + + public Map getChannelMapByIds(List userChannelIds){ + if (CollectionUtils.isEmpty(userChannelIds)){ + return new HashMap<>(1); + } + List userChannelList = hyPartnerUserChannelMapper.getUserChannelByIds(userChannelIds); + Map channelMap = userChannelList.stream().filter(date->date.getChannelId()!=null).collect(Collectors.toMap(x->x.getChannelId().intValue(), HyPartnerUserChannelDO::getChannelName)); + return channelMap; + } + + + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerUserInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerUserInfoDAO.java new file mode 100644 index 000000000..315f49fdc --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerUserInfoDAO.java @@ -0,0 +1,90 @@ +package com.cool.store.dao; + +import com.cool.store.entity.HyPartnerUserInfoDO; +import com.cool.store.mapper.HyPartnerUserInfoMapper; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2023/6/8 19:41 + * @Version 1.0 + */ +@Repository +public class HyPartnerUserInfoDAO { + + + @Resource + HyPartnerUserInfoMapper hyPartnerUserInfoMapper; + + + public int updateByPrimaryKeySelective(HyPartnerUserInfoDO hyPartnerUserInfoDO){ + return hyPartnerUserInfoMapper.updateByPrimaryKeySelective(hyPartnerUserInfoDO); + } + + + /** + * 根据PartnerId查询用户 + * @param partnerId + * @return + */ + public HyPartnerUserInfoDO selectByPartnerId(String partnerId){ + if (StringUtils.isEmpty(partnerId)){ + return null; + } + return hyPartnerUserInfoMapper.selectByPartnerId(partnerId); + } + + /** + * 根据mobile查询用户 + * @param mobile + * @return + */ + public HyPartnerUserInfoDO selectByMobile(String mobile){ + if (StringUtils.isEmpty(mobile)){ + return null; + } + return hyPartnerUserInfoMapper.selectByMobile(mobile); + } + + public HyPartnerUserInfoDO selectByOpenid(String openid){ + if (StringUtils.isEmpty(openid)){ + return null; + } + return hyPartnerUserInfoMapper.selectByOpenid(openid); + } + + /** + * 根据PartnerIds批量查询用户 + * @param partnerIds + * @return + */ + public List selectByPartnerIds(List partnerIds){ + if (CollectionUtils.isEmpty(partnerIds)){ + return Lists.newArrayList(); + } + return hyPartnerUserInfoMapper.selectByPartnerIds(partnerIds); + } + + public int insertSelective( HyPartnerUserInfoDO record){ + return hyPartnerUserInfoMapper.insertSelective(record); + } + + public int updateByPartnerId(HyPartnerUserInfoDO record){ + if(StringUtils.isBlank(record.getPartnerId())){ + return 0; + } + return hyPartnerUserInfoMapper.updateByPartnerId(record); + } + + + public String selectLastCrmCreateTime() { + return hyPartnerUserInfoMapper.selectLastCrmCreateTime(); + } + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineAuditInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineAuditInfoDAO.java new file mode 100644 index 000000000..49e08e6fc --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineAuditInfoDAO.java @@ -0,0 +1,44 @@ +package com.cool.store.dao; + +import com.cool.store.entity.LineAuditInfoDO; +import com.cool.store.mapper.LineAuditInfoMapper; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: LineAuditInfoDAO + * @Description: + * @date 2024-03-15 16:00 + */ +@Repository +public class LineAuditInfoDAO { + + @Resource + private LineAuditInfoMapper lineAuditInfoMapper; + + public Long addAuditInfo(LineAuditInfoDO auditInfo){ + lineAuditInfoMapper.insertSelective(auditInfo); + return auditInfo.getId(); + } + + public LineAuditInfoDO getAuditInfo(Long auditId){ + return lineAuditInfoMapper.selectByPrimaryKey(auditId); + } + + public List getLineAuditInfoList(List auditIds){ + if (CollectionUtils.isEmpty(auditIds)){ + return Lists.newArrayList(); + } + return lineAuditInfoMapper.getLineAuditInfoList(auditIds); + } + + + public LineAuditInfoDO getAuditInfoByLineId(Long lineId){ + return lineAuditInfoMapper.getLineAuditInfo(lineId); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineCalendarsEventDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineCalendarsEventDAO.java new file mode 100644 index 000000000..1ae1fbac5 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineCalendarsEventDAO.java @@ -0,0 +1,79 @@ +package com.cool.store.dao; + +import com.alibaba.fastjson.JSONObject; +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; +import com.cool.store.entity.LineCalendarsEventDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.LineCalendarsEventMapper; +import com.cool.store.utils.StringUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.util.List; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: LineCalendarsEventDAO + * @Description: + * @date 2024-03-15 16:00 + */ +@Slf4j +@Repository +public class LineCalendarsEventDAO { + + @Resource + private LineCalendarsEventMapper lineCalendarsEventMapper; + + public List getInterviewerLineCalendarsEvent(String interviewerUserId, LocalDate localDate) { + if (StringUtils.isBlank(interviewerUserId) || Objects.isNull(localDate)) { + return null; + } + return lineCalendarsEventMapper.getInterviewerLineCalendarsEvent(interviewerUserId, localDate.toString()); + } + + public List getRegionLineCalendarsEvent(Long regionId, LocalDate localDate) { + if (Objects.isNull(regionId) || Objects.isNull(localDate)) { + return null; + } + return lineCalendarsEventMapper.getRegionLineCalendarsEvent(regionId, localDate.toString()); + } + + /** + * 判断时间是否被占用 + * @param interviewType + * @param regionId + * @param interviewer + * @param startTime + * @param endTime + * @return + */ + public Boolean isOccupied(Integer interviewType, Long regionId, String interviewerUserId, String startTime, String endTime, Long excludeInterviewId){ + return lineCalendarsEventMapper.getOccupiedCount(interviewType, regionId, interviewerUserId, startTime, endTime, excludeInterviewId) > 0; + } + + /** + * 新增日历事件 + * @param param + * @return + */ + public Long addCalendarsEvent(LineCalendarsEventDO param){ + if(Objects.isNull(param.getRegionId()) || Objects.isNull(param.getLineId()) || Objects.isNull(param.getPartnerId()) || Objects.isNull(param.getStartTime()) || Objects.isNull(param.getEndTime())){ + log.error("新增日历事件失败:{}",JSONObject.toJSONString(param)); + throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); + } + lineCalendarsEventMapper.insertSelective(param); + return param.getId(); + } + + public Integer updateCalendarsEvent(LineCalendarsEventDO param){ + if(Objects.isNull(param.getId())){ + return null; + } + return lineCalendarsEventMapper.updateByPrimaryKeySelective(param); + } + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineFollowLogDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineFollowLogDAO.java new file mode 100644 index 000000000..cd8ea4795 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineFollowLogDAO.java @@ -0,0 +1,49 @@ +package com.cool.store.dao; + +import com.cool.store.entity.LineFollowLogDO; +import com.cool.store.entity.LineInfoDO; +import com.cool.store.mapper.LineFollowLogMapper; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: LineFollowLogDAO + * @Description:跟进日志 + * @date 2024-03-27 14:33 + */ +@Slf4j +@Repository +public class LineFollowLogDAO { + + @Resource + private LineFollowLogMapper lineFollowLogMapper; + + public Page getFollowLogPage(Long lineId, Integer pageNum, Integer pageSize){ + PageHelper.startPage(pageNum, pageSize); + return lineFollowLogMapper.getFollowLogPage(lineId); + } + + /** + * 新增跟进线索 + * @param lineInfo + * @param operateUserId + * @param operateUsername + * @param message + * @return + */ + public Long addFollowLog(LineInfoDO lineInfo, String operateUserId, String operateUsername, String message){ + if(Objects.isNull(lineInfo)){ + return null; + } + LineFollowLogDO followLog = new LineFollowLogDO(lineInfo.getPartnerId(), lineInfo.getId(), operateUserId, operateUsername, lineInfo.getWorkflowStage(), lineInfo.getWorkflowSubStage(), lineInfo.getWorkflowSubStageStatus(), message); + lineFollowLogMapper.insertSelective(followLog); + return followLog.getId(); + } + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInfoDAO.java new file mode 100644 index 000000000..fade44b4f --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInfoDAO.java @@ -0,0 +1,178 @@ +package com.cool.store.dao; + +import com.cool.store.dto.InvestmentCountDTO; +import com.cool.store.dto.PendingCountDTO; +import com.cool.store.dto.openPreparation.PlanLineDTO; +import com.cool.store.entity.LineInfoDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.WorkflowSubStageEnum; +import com.cool.store.enums.WorkflowSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.LineInfoMapper; +import com.cool.store.request.LineListRequest; +import com.cool.store.request.PartnerRequest; +import com.cool.store.request.PointLinePageRequest; +import com.cool.store.request.PublicLineListRequest; +import com.github.pagehelper.Page; +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.lang3.StringUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: LineInfoDAO + * @Description: + * @date 2024-03-19 10:49 + */ +@Slf4j +@Repository +public class LineInfoDAO { + + @Resource + private LineInfoMapper lineInfoMapper; + + + public LineInfoDO getLineInfo(Long lineId) { + LineInfoDO lineInfo = lineInfoMapper.selectByPrimaryKey(lineId); + if(Objects.nonNull(lineInfo) && !lineInfo.getDeleted()){ + return lineInfo; + } + return null; + } + + public Integer updateLineInfo(LineInfoDO param){ + if(Objects.isNull(param.getId())){ + log.error("线索id为空"); + return null; + } + return lineInfoMapper.updateByPrimaryKeySelective(param); + } + + public Integer updateWorkflowStage(Long lineId, WorkflowSubStageEnum workflowSubStage, WorkflowSubStageStatusEnum workflowSubStageStatus,String userId) { + if(Objects.isNull(workflowSubStageStatus)){ + log.info("更新线索阶段,子阶段 和 子阶段状态不能同时为空"); + throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); + } + LineInfoDO lineInfo = new LineInfoDO(); + lineInfo.setId(lineId); + if(Objects.nonNull(workflowSubStage)){ + lineInfo.setWorkflowSubStage(workflowSubStage.getCode()); + } + if(StringUtils.isNotEmpty(userId)){ + lineInfo.setUpdateUserId(userId); + } + lineInfo.setWorkflowSubStageStatus(workflowSubStageStatus.getCode()); + return lineInfoMapper.updateByPrimaryKeySelective(lineInfo); + } + + + public Integer batchUpdateInterviewWorkflowStage(List lineIds, WorkflowSubStageEnum workflowSubStage, WorkflowSubStageStatusEnum workflowSubStageStatus) { + if(Objects.isNull(workflowSubStageStatus) || CollectionUtils.isEmpty(lineIds)){ + log.info("更新线索阶段,子阶段 和 子阶段状态不能同时为空"); + throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); + } + return lineInfoMapper.batchUpdateInterviewWorkflowStage(lineIds, workflowSubStage.getCode(), workflowSubStageStatus.getCode()); + } + + public Integer updateWorkflowStageAndInterviewer(Long lineId, WorkflowSubStageStatusEnum workflowSubStageStatus, String firstInterviewer, String secondInterviewer) { + LineInfoDO lineInfo = new LineInfoDO(); + lineInfo.setId(lineId); + lineInfo.setWorkflowSubStageStatus(workflowSubStageStatus.getCode()); + lineInfo.setFirstInterviewer(firstInterviewer); + lineInfo.setSecondInterviewer(secondInterviewer); + return lineInfoMapper.updateByPrimaryKeySelective(lineInfo); + } + + + public LineInfoDO getByPartnerId(String partnerId) { + LineInfoDO lineInfo = lineInfoMapper.getByPartnerId(partnerId); + if(Objects.nonNull(lineInfo) && !lineInfo.getDeleted()){ + return lineInfo; + } + return null; + } + + public List listByInvestmentManager(String investmentManagerUserId,List subStageStatus) { + if (StringUtils.isBlank(investmentManagerUserId)){ + return null; + } + List lineInfo = lineInfoMapper.listByInvestmentManager(investmentManagerUserId,subStageStatus); + return lineInfo; + } + public List listByInterview(String interviewId, Integer interviewType,List pendingInterviewStatusList, + Integer notPassingTheInterview,List subStageStatus) { + if (StringUtils.isBlank(interviewId)){ + return null; + } + List lineInfo = lineInfoMapper.listByInterview(interviewId,interviewType,pendingInterviewStatusList,notPassingTheInterview,subStageStatus); + return lineInfo; + } + + public List lineList(LineListRequest lineListRequest,String wantShopAreaName, String userId, List wantShopAreaIds) { + List lineInfo = lineInfoMapper.lineList(lineListRequest,wantShopAreaName,userId,wantShopAreaIds); + return lineInfo; + } + + public List partnerList(PartnerRequest partnerRequest,String wantShopAreaName, String userId, List wantShopAreaIds) { + List lineInfo = lineInfoMapper.partnerList(partnerRequest,wantShopAreaName,userId,wantShopAreaIds); + return lineInfo; + } + + public List publicLineList(PublicLineListRequest publicLineListRequest,Boolean publicFlag) { + List lineInfo = lineInfoMapper.publicLineList(publicLineListRequest,publicFlag); + return lineInfo; + } + + public void insertOrUpdate(LineInfoDO lineInfoParam){ + lineInfoMapper.insertOrUpdate(lineInfoParam); + } + + public Page getLinePageByDevelopmentManager(PointLinePageRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + return lineInfoMapper.getLinePageByDevelopmentManager(request); + } + + + public PendingCountDTO pendingCount(String userId) { + if (StringUtils.isBlank(userId)){ + return null; + } + PendingCountDTO pendingCount = lineInfoMapper.pendingCount(userId); + return pendingCount; + } + + public InvestmentCountDTO investmentData(String userId) { + if (StringUtils.isBlank(userId)){ + return null; + } + InvestmentCountDTO investmentData = lineInfoMapper.investmentData(userId); + return investmentData; + } + + + public List getLines(List lineIdList){ + return lineInfoMapper.getLines(lineIdList); + } + + /** + * 获取线索手机号 + * @param lineIds + * @return + */ + public Map getLineMobileMap(List lineIds){ + if(CollectionUtils.isEmpty(lineIds)){ + return Maps.newHashMap(); + } + List lineMobile = lineInfoMapper.getLineMobile(lineIds); + return lineMobile.stream().filter(o->StringUtils.isNotBlank(o.getMobile())).collect(Collectors.toMap(LineInfoDO::getId, LineInfoDO::getMobile, (k1, k2)-> k1)); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInterviewDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInterviewDAO.java new file mode 100644 index 000000000..b5d610752 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInterviewDAO.java @@ -0,0 +1,106 @@ +package com.cool.store.dao; + +import com.cool.store.dto.interview.LineInterviewPageDTO; +import com.cool.store.entity.LineInterviewDO; +import com.cool.store.enums.InterviewStatusEnum; +import com.cool.store.enums.InterviewTypeEnum; +import com.cool.store.mapper.LineInterviewMapper; +import com.cool.store.request.LineInterviewPageRequest; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: LineInterviewDAO + * @Description: + * @date 2024-03-15 16:01 + */ +@Repository +public class LineInterviewDAO { + + @Resource + private LineInterviewMapper lineInterviewMapper; + + public LineInterviewDO getInterviewInfo(Long lineId, InterviewTypeEnum interviewType){ + if(Objects.isNull(lineId) || Objects.isNull(interviewType)){ + return null; + } + return lineInterviewMapper.getInterviewInfo(lineId, interviewType.getCode()); + } + + public List getInterviewByLindIds(List lineIds, InterviewTypeEnum interviewType){ + if(CollectionUtils.isEmpty(lineIds) || Objects.isNull(interviewType)){ + return Lists.newArrayList(); + } + return lineInterviewMapper.getInterviewByLindIds(lineIds, interviewType.getCode()); + } + + public Integer updateInterviewInfo(LineInterviewDO interview){ + return lineInterviewMapper.updateByPrimaryKeySelective(interview); + } + + public Long addInterviewInfo(LineInterviewDO interview){ + lineInterviewMapper.insertSelective(interview); + return interview.getId(); + } + + /** + * 获取面试分页列表 + * @param request + * @return + */ + public Page getInterviewerPage(LineInterviewPageRequest request){ + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + return lineInterviewMapper.getInterviewerPage(request); + } + + /** + * 获取面试信息 + * @param interviewId + * @return + */ + public LineInterviewDO getInterviewInfoById(Long interviewId){ + return lineInterviewMapper.selectByPrimaryKey(interviewId); + } + + public LineInterviewDO getInterviewInfoByRoomId(String roomId){ + return lineInterviewMapper.getInterviewInfoByRoomId(roomId); + } + + public Integer deleteInterviewInfo(Long interviewId) { + return lineInterviewMapper.deleteInterviewInfo(interviewId); + } + + public List getInterviewByLineId(Long lineId){ + return lineInterviewMapper.getInterviewByLineId(lineId); + } + + public List getWaitAuditInterview(){ + return lineInterviewMapper.getWaitAuditInterview(); + } + + public Integer batchUpdateInterviewStatus(List interviewIds, InterviewStatusEnum interviewStatus) { + if(CollectionUtils.isEmpty(interviewIds) || Objects.isNull(interviewIds)){ + return null; + } + return lineInterviewMapper.batchUpdateInterviewStatus(interviewIds, interviewStatus.getCode()); + } + + /** + * 获取面试提醒列表 + * @param intervalMinutes + * @return + */ + public List getInterviewRemindList(String startTime, String endTime) { + return lineInterviewMapper.getInterviewRemindList(startTime, endTime); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LinePayDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LinePayDAO.java new file mode 100644 index 000000000..60f1a8612 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LinePayDAO.java @@ -0,0 +1,72 @@ +package com.cool.store.dao; + +import com.cool.store.entity.LinePayDO; +import com.cool.store.mapper.LinePayMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author wxp + * @FileName: LinePayDAO + * @Description:提交意向金 + * @date 2024-03-27 14:33 + */ +@Slf4j +@Repository +public class LinePayDAO { + + @Resource + private LinePayMapper linePayMapper; + + + public LinePayDO getByLineIdAndPayTypeAndShopId(Long lineId,Integer payBusinessType,Long shopId) { + LinePayDO linePayDO = linePayMapper.getByLineIdAndPayTypeAndShopId(lineId,payBusinessType,shopId); + return linePayDO; + } + + /** + * + * @param lineId + * @param payBusinessType + * @return + */ + @Deprecated + public LinePayDO getLinePayByLineIdAndPayType(Long lineId,Integer payBusinessType) { + LinePayDO linePayDO = linePayMapper.getByLineIdAndPayTypeAndShopId(lineId,payBusinessType,null); + return linePayDO; + } + + public Long addLinePay(LinePayDO linePayDO){ + linePayMapper.insertSelective(linePayDO); + return linePayDO.getId(); + } + + public Integer updateLinePay(LinePayDO linePayDO){ + if(Objects.isNull(linePayDO)){ + return 0; + } + return linePayMapper.updateByPrimaryKeySelective(linePayDO); + } + + + public Map getLinePayByLineIds(List lineIds,Integer payBusinessType) { + if(CollectionUtils.isEmpty(lineIds)){ + return new HashMap<>(); + } + List linePayDO = linePayMapper.getLinePayByLineIds(lineIds,null,payBusinessType); + return linePayDO.stream().collect(Collectors.toMap(LinePayDO::getLineId, linePayDO1 -> linePayDO1, (o, n) -> o)); + } + + public Map getLinePayByShopIds(List shopIds,Integer payBusinessType) { + if(CollectionUtils.isEmpty(shopIds)){ + return new HashMap<>(); + } + List linePayDO = linePayMapper.getLinePayByLineIds(null,shopIds,payBusinessType); + return linePayDO.stream().collect(Collectors.toMap(LinePayDO::getShopId, linePayDO1 -> linePayDO1, (o, n) -> o)); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/NewStoreOpeningDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/NewStoreOpeningDAO.java new file mode 100644 index 000000000..4224b28ae --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/NewStoreOpeningDAO.java @@ -0,0 +1,32 @@ +package com.cool.store.dao; + +import com.cool.store.entity.NewStoreOpeningDO; +import com.cool.store.mapper.NewStoreOpeningMapper; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author byd + * @date 2024-04-24 14:33 + */ +@Repository +public class NewStoreOpeningDAO { + + @Resource + private NewStoreOpeningMapper newStoreOpeningMapper; + + public List storeTodoList(Long shopId) { + return newStoreOpeningMapper.select(NewStoreOpeningDO.builder().shopId(shopId).build()); + } + + public int insertSelective(NewStoreOpeningDO newStoreOpeningDO) { + return newStoreOpeningMapper.insertSelective(newStoreOpeningDO); + } + + public int deleteByPrimaryKey(Long id) { + return newStoreOpeningMapper.deleteByPrimaryKey(id); + } + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/OpenAcceptanceInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/OpenAcceptanceInfoDAO.java new file mode 100644 index 000000000..59ac7d335 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/OpenAcceptanceInfoDAO.java @@ -0,0 +1,42 @@ +package com.cool.store.dao; + +import com.cool.store.entity.OpenAcceptanceInfoDO; +import com.cool.store.mapper.OpenAcceptanceInfoMapper; +import com.cool.store.request.OpenAcceptanceRequest; +import com.cool.store.vo.OpenAcceptanceInfoListVO; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author byd + * @date 2024-04-22 14:48 + */ +@Repository +public class OpenAcceptanceInfoDAO { + @Resource + private OpenAcceptanceInfoMapper openAcceptanceInfoMapper; + + + public List openAcceptanceList(OpenAcceptanceRequest openAcceptanceRequest) { + + return openAcceptanceInfoMapper.openAcceptanceList(openAcceptanceRequest); + } + + public int insertSelective(OpenAcceptanceInfoDO openAcceptanceInfoDO){ + return openAcceptanceInfoMapper.insertSelective(openAcceptanceInfoDO); + } + + public OpenAcceptanceInfoDO selectOne(OpenAcceptanceInfoDO acceptanceInfoDO) { + return openAcceptanceInfoMapper.selectOne(acceptanceInfoDO); + } + public int updateByPrimaryKeySelective(OpenAcceptanceInfoDO acceptanceInfoDO) { + return openAcceptanceInfoMapper.updateByPrimaryKeySelective(acceptanceInfoDO); + } + + public int shopOpenAcceptanceStatusUpdate(){ + return openAcceptanceInfoMapper.shopOpenAcceptanceStatusUpdate(); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/OpenNewShopRecordDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/OpenNewShopRecordDAO.java new file mode 100644 index 000000000..8e47f50ce --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/OpenNewShopRecordDAO.java @@ -0,0 +1,96 @@ +package com.cool.store.dao; + +import com.cool.store.dto.partner.PartnerOpenNewShopPageDTO; +import com.cool.store.entity.OpenNewShopRecordDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.OpenNewShopRecordMapper; +import com.cool.store.request.PartnerOpenNewShopPageRequest; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: OpenNewShopRecordDAO + * @Description: + * @date 2024-05-09 15:09 + */ +@Repository +public class OpenNewShopRecordDAO { + + @Resource + private OpenNewShopRecordMapper openNewShopRecordMapper; + + /** + * 获取开新店数据 + * @param request + * @return + */ + public Page getPartnerOpenNewShopPage(PartnerOpenNewShopPageRequest request){ + PageHelper.startPage(request.getPageNum(),request.getPageSize()); + return openNewShopRecordMapper.getPartnerOpenNewShopPage(request); + } + + /** + * 获取详情 + * @param id + * @return + */ + public OpenNewShopRecordDO getOpenNewShopRecordById(Long id){ + return openNewShopRecordMapper.selectByPrimaryKey(id); + } + + public Integer updateOpenNewShopRecord(OpenNewShopRecordDO openNewShopRecordDO){ + return openNewShopRecordMapper.updateByPrimaryKeySelective(openNewShopRecordDO); + } + + /** + * 获取待审核的开新店记录 + * @param lineId + * @return + */ + public OpenNewShopRecordDO getWaitAuditOpenNewShopRecord(Long lineId){ + if(Objects.isNull(lineId)){ + return null; + } + return openNewShopRecordMapper.getWaitAuditOpenNewShopRecord(lineId); + } + + public Long insertOpenNewShopRecord(OpenNewShopRecordDO openNewShopRecordDO){ + if(Objects.isNull(openNewShopRecordDO.getLineId())){ + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + openNewShopRecordMapper.insertSelective(openNewShopRecordDO); + return openNewShopRecordDO.getId(); + } + + /** + * 根据lineId获取开新店记录 + * @param lineId + * @return + */ + public List getOpenNewShopRecordList(Long lineId){ + if(Objects.isNull(lineId)){ + return Lists.newArrayList(); + } + return openNewShopRecordMapper.getOpenNewShopRecordList(lineId); + } + + /** + * 删除开新店记录 + * @param deleteIds + */ + public void deleteOpenNewShopRecord(List deleteIds) { + if(CollectionUtils.isEmpty(deleteIds)){ + return; + } + openNewShopRecordMapper.deleteOpenNewShopRecord(deleteIds); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/OpeningOperationPlanDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/OpeningOperationPlanDAO.java new file mode 100644 index 000000000..ac59809bc --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/OpeningOperationPlanDAO.java @@ -0,0 +1,56 @@ +package com.cool.store.dao; + +import com.cool.store.dto.openPreparation.OpenPlanShopInfoDTO; +import com.cool.store.entity.OpeningOperationPlanDO; +import com.cool.store.mapper.OpeningOperationPlanMapper; +import com.cool.store.request.PlanListRequest; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/04/22/下午2:14 + * @Version 1.0 + * @注释:开业运营方案 + */ +@Slf4j +@Repository +public class OpeningOperationPlanDAO { + + @Resource + private OpeningOperationPlanMapper openingOperationPlanMapper; + + public Long insertSelective(@Param("openingOperationPlanDO") OpeningOperationPlanDO openingOperationPlanDO){ + openingOperationPlanMapper.insertSelective(openingOperationPlanDO); + return openingOperationPlanDO.getId(); + } + + /** + * @Auther: wangshuo + * @Date: 2024/4/24 + * @description: 开业运营方案,根据condition获取列表 + */ + public ListgetOpenPlanShopListByCondition(PlanListRequest request ){ + + return openingOperationPlanMapper.getOpenPlanShopListByCondition(request); + } + + public Integer updateResultType(Long shopId,Long auditId,Integer resultType){ + return openingOperationPlanMapper.updateByShopId(shopId,auditId,resultType); + + } + public Long updateSelective( OpeningOperationPlanDO openingOperationPlanDO){ + openingOperationPlanMapper.updateByPrimaryKeySelective(openingOperationPlanDO); + return openingOperationPlanDO.getId(); + } + + public OpeningOperationPlanDO selectByShopId( Long shopId){ + return openingOperationPlanMapper.selectByShopId(shopId); + } + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointAuditRecordDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointAuditRecordDAO.java new file mode 100644 index 000000000..b8bdd680d --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointAuditRecordDAO.java @@ -0,0 +1,82 @@ +package com.cool.store.dao; + +import com.cool.store.entity.PointAuditRecordDO; +import com.cool.store.enums.AuditStatusEnum; +import com.cool.store.enums.NodeNoEnum; +import com.cool.store.mapper.PointAuditRecordMapper; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +@Repository +public class PointAuditRecordDAO { + + @Resource + private PointAuditRecordMapper pointAuditRecordMapper; + + /** + * 新增审批记录 + * @param historyList + */ + public void addPointAuditRecord(List recordList) { + pointAuditRecordMapper.batchInsertSelective(recordList); + } + + public List getPointAuditRecord(Long pointId, Integer cycleCount) { + if(Objects.isNull(pointId)){ + return Lists.newArrayList(); + } + return pointAuditRecordMapper.getPointAuditRecord(pointId, cycleCount); + } + + public Map getPointAuditRecordMap(Long pointId, Integer cycleCount) { + if(Objects.isNull(pointId) || Objects.isNull(cycleCount)){ + return Maps.newHashMap(); + } + List pointAuditRecord = pointAuditRecordMapper.getPointAuditRecord(pointId, cycleCount); + return pointAuditRecord.stream().collect(Collectors.toMap(k->k.getNodeNo(), v->v)); + } + + public Integer updatePointAuditRecord(PointAuditRecordDO param) { + if(Objects.isNull(param) || Objects.isNull(param.getId())){ + return null; + } + return pointAuditRecordMapper.updateByPrimaryKeySelective(param); + } + + public Integer deletePointAuditRecord(Long pointId, Integer cycleCount) { + if(Objects.isNull(pointId) || Objects.isNull(cycleCount)){ + return null; + } + return pointAuditRecordMapper.deletePointAuditRecord(pointId, cycleCount); + } + + public List getPointAllAuditRecord(Long pointId) { + if(Objects.isNull(pointId)){ + return Lists.newArrayList(); + } + return pointAuditRecordMapper.getPointAllAuditRecord(pointId); + } + + /** + * 获取提交时间 + * @param pointIds + * @return + */ + public Map getPointSubmitTimeMap(List pointIds){ + if(CollectionUtils.isEmpty(pointIds)){ + return Maps.newHashMap(); + } + List auditList = pointAuditRecordMapper.getPointSubmitAuditTime(pointIds); + return auditList.stream().collect(Collectors.toMap(k->k.getPointId(), v->v.getFinishTaskTime(), (oldDate, newDate) -> oldDate.compareTo(newDate) > 0 ? oldDate : newDate)); + } + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointDetailInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointDetailInfoDAO.java new file mode 100644 index 000000000..6e560b90d --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointDetailInfoDAO.java @@ -0,0 +1,62 @@ +package com.cool.store.dao; + +import com.cool.store.entity.PointDetailInfoDO; +import com.cool.store.mapper.PointDetailInfoMapper; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: ShopPointDetailInfoDAO + * @Description: + * @date 2024-03-29 10:15 + */ +@Repository +public class PointDetailInfoDAO { + + @Resource + private PointDetailInfoMapper pointDetailInfoMapper; + + /** + * 新增点位详情 + * @param shopPointDetailInfo + * @return + */ + public Long addPointDetailInfo(PointDetailInfoDO shopPointDetailInfo) { + pointDetailInfoMapper.insertSelective(shopPointDetailInfo); + return shopPointDetailInfo.getId(); + } + + /** + * 更新点位详情 + * @param shopPointDetailInfo + * @return + */ + public Integer updatePointDetailInfo(PointDetailInfoDO shopPointDetailInfo) { + if(Objects.isNull(shopPointDetailInfo.getId()) && Objects.nonNull(shopPointDetailInfo.getPointId())){ + Long pointDetailId = getPointDetailIdByPointId(shopPointDetailInfo.getPointId()); + shopPointDetailInfo.setId(pointDetailId); + } + return pointDetailInfoMapper.updateByPrimaryKeySelective(shopPointDetailInfo); + } + + public Integer updatePartFieldPointDetail(PointDetailInfoDO shopPointDetailInfo) { + if(Objects.isNull(shopPointDetailInfo.getId()) && Objects.nonNull(shopPointDetailInfo.getPointId())){ + Long pointDetailId = getPointDetailIdByPointId(shopPointDetailInfo.getPointId()); + shopPointDetailInfo.setId(pointDetailId); + } + return pointDetailInfoMapper.updatePartFieldPointDetail(shopPointDetailInfo); + } + + public Long getPointDetailIdByPointId(Long pointId){ + return pointDetailInfoMapper.getPointDetailIdByPointId(pointId); + } + + public PointDetailInfoDO getPointDetailInfoByPointId(Long pointId) { + return pointDetailInfoMapper.getShopPointDetailInfoByPointId(pointId); + } + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointInfoDAO.java new file mode 100644 index 000000000..c2c1b6e15 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointInfoDAO.java @@ -0,0 +1,120 @@ +package com.cool.store.dao; + +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; +import com.cool.store.constants.CommonConstants; +import com.cool.store.dto.point.LineCountDTO; +import com.cool.store.entity.PointInfoDO; +import com.cool.store.mapper.PointInfoMapper; +import com.cool.store.request.AllPointPageRequest; +import com.cool.store.request.PointPageRequest; +import com.cool.store.request.RecommendPointPageRequest; +import com.cool.store.utils.StringUtil; +import com.cool.store.vo.point.PointHomePageDataVO; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: ShopPointInfoDAO + * @Description: + * @date 2024-03-29 10:15 + */ +@Repository +public class PointInfoDAO { + + @Resource + private PointInfoMapper pointInfoMapper; + + public PointInfoDO getPointInfoById(Long id) { + PointInfoDO shopPointInfo = pointInfoMapper.selectByPrimaryKey(id); + if(Objects.isNull(shopPointInfo) || shopPointInfo.getDeleted()){ + return null; + } + return shopPointInfo; + } + + public Long addPointInfo(PointInfoDO shopPointInfo) { + pointInfoMapper.insertSelective(shopPointInfo); + return shopPointInfo.getId(); + } + + public Integer updatePointInfo(PointInfoDO shopPointInfo) { + return pointInfoMapper.updateByPrimaryKeySelective(shopPointInfo); + } + + /** + * 完善铺位信息 + * @param shopPointInfo + * @return + */ + public Integer perfectPointInfo(PointInfoDO shopPointInfo) { + return pointInfoMapper.perfectPointInfo(shopPointInfo); + } + + public Integer updatePointInfoByPrimaryKey(PointInfoDO shopPointInfo) { + return pointInfoMapper.updateByPrimaryKey(shopPointInfo); + } + + public PointHomePageDataVO getMyPointData(String userId) { + return pointInfoMapper.getMyPointData(userId); + } + + /** + * 获取我的铺位 + * @param request + * @return + */ + public Page getMyPointPage(PointPageRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + return pointInfoMapper.getMyPointPage(request); + } + + public Map getSelectedShopNumMap(List lineIds) { + if(CollectionUtils.isEmpty(lineIds)){ + return Maps.newHashMap(); + } + List selectedShopNum = pointInfoMapper.getSelectedShopNum(lineIds); + return selectedShopNum.stream().collect(Collectors.toMap(k->k.getLineId(), v->v.getSelectedShopNum())); + } + + public List getPointListByIds(List pointIds){ + if(CollectionUtils.isEmpty(pointIds)){ + return Lists.newArrayList(); + } + return pointInfoMapper.getPointListByIds(pointIds); + } + + public Page getRecommendPointList(RecommendPointPageRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + return pointInfoMapper.getRecommendPointList(request); + } + + public Integer updateSelectedDevelopmentManager(Long lineId, String developmentManager) { + if(Objects.isNull(lineId) || StringUtils.isBlank(developmentManager)){ + return null; + } + return pointInfoMapper.updateSelectedDevelopmentManager(lineId, developmentManager); + } + + public Page getTeamPointPage(AllPointPageRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + return pointInfoMapper.getTeamPointPage(request); + } + + public Integer recyclePoint(Long pointId) { + if(Objects.isNull(pointId)){ + return CommonConstants.ZERO; + } + return pointInfoMapper.recyclePoint(pointId); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointRecommendDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointRecommendDAO.java new file mode 100644 index 000000000..6087ef9d3 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointRecommendDAO.java @@ -0,0 +1,151 @@ +package com.cool.store.dao; + +import com.cool.store.constants.CommonConstants; +import com.cool.store.dto.point.LineCountDTO; +import com.cool.store.dto.point.MiniPointPageDTO; +import com.cool.store.entity.PointRecommendDO; +import com.cool.store.enums.point.PointRecommendStatusEnum; +import com.cool.store.mapper.PointRecommendMapper; +import com.cool.store.request.MiniPointPageRequest; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: ShopPointRecommendDAO + * @Description:点位推荐 + * @date 2024-04-01 14:36 + */ +@Repository +public class PointRecommendDAO { + + @Resource + private PointRecommendMapper pointRecommendMapper; + + /** + * 更新推荐状态 + * @param pointId + * @param status + * @param excludeStatusList 排除状态 + * @return + */ + public Integer updateRecommendStatus(Long pointId, PointRecommendStatusEnum status, List excludeStatusList) { + if(Objects.isNull(status)){ + return 0; + } + List excludeStatus = Lists.newArrayList(); + if(CollectionUtils.isNotEmpty(excludeStatusList)){ + excludeStatus = excludeStatusList.stream().map(PointRecommendStatusEnum::getCode).collect(Collectors.toList()); + } + return pointRecommendMapper.updateShopPointRecommendStatus(pointId, status.getCode(), excludeStatus); + } + + /** + * 更新推荐状态 + * @param pointId + * @param status + * @param statusList + * @return + */ + public Integer updateRecommendStatusByStatusAndPointId(Long pointId, PointRecommendStatusEnum status, List statusList) { + if(Objects.isNull(status) || CollectionUtils.isEmpty(statusList)){ + return 0; + } + List statusCodeList = statusList.stream().map(PointRecommendStatusEnum::getCode).collect(Collectors.toList()); + return pointRecommendMapper.updateRecommendStatusByStatusAndPointId(pointId, status.getCode(), statusCodeList); + } + + /** + * 获取已推门店数量 + * @param lineIds + * @return + */ + public Map getPushShopNumMap(List lineIds) { + if(CollectionUtils.isEmpty(lineIds)){ + return Maps.newHashMap(); + } + List pushShopNumMap = pointRecommendMapper.getPushShopNumMap(lineIds); + return pushShopNumMap.stream().collect(Collectors.toMap(k->k.getLineId(), v->v.getRecommendShopNum())); + } + + /** + * 获取推荐列表 + * @param lineId + * @return + */ + public List getRecommendPointList(Long lineId) { + if(Objects.isNull(lineId)){ + return Lists.newArrayList(); + } + return pointRecommendMapper.getRecommendPointList(lineId); + } + + public Integer addRecommendPoint(List recommendList) { + if(CollectionUtils.isEmpty(recommendList)){ + return CommonConstants.ZERO; + } + return pointRecommendMapper.batchInsert(recommendList); + } + + /** + * 转让线索更新推荐状态 + * @param lineId + * @return + */ + public Integer turnLineUpdateRecommendStatus(Long lineId, String developmentManager) { + return pointRecommendMapper.turnLineUpdateRecommendStatus(lineId, developmentManager); + } + + /** + * 线索获取推荐列表 + * @param request + * @return + */ + public Page getLineRecommendPointPage(MiniPointPageRequest request){ + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + return pointRecommendMapper.getLineRecommendPointPage(request); + } + + public Integer updateStatusByPointIdAndLineId(Long pointId, Long lineId){ + if(Objects.isNull(pointId) || Objects.isNull(lineId)){ + return 0; + } + return pointRecommendMapper.updateStatusByPointIdAndLineId(pointId, lineId); + } + + /** + * 铺位拒绝 + * @param lineId + * @param pointId + * @param reason + * @return + */ + public Integer rejectPoint(Long lineId, Long pointId, String reason) { + if(Objects.isNull(lineId) || Objects.isNull(pointId)){ + return CommonConstants.ZERO; + } + return pointRecommendMapper.rejectPoint(lineId, pointId, reason); + } + + /** + * 获取铺位推送了哪些列表 + * @param pointId + * @return + */ + public List getRecommendPointListByPointId(Long pointId) { + if(Objects.isNull(pointId)){ + return Lists.newArrayList(); + } + return pointRecommendMapper.getRecommendPointListByPointId(pointId); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointTodoInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointTodoInfoDAO.java new file mode 100644 index 000000000..1e95ba285 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointTodoInfoDAO.java @@ -0,0 +1,67 @@ +package com.cool.store.dao; + +import com.cool.store.entity.PointAuditRecordDO; +import com.cool.store.entity.PointInfoDO; +import com.cool.store.entity.PointTodoInfoDO; +import com.cool.store.enums.NodeNoEnum; +import com.cool.store.mapper.PointTodoInfoMapper; +import com.cool.store.request.PointTodoPageRequest; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.google.common.collect.Maps; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +@Repository +public class PointTodoInfoDAO { + + @Resource + private PointTodoInfoMapper pointTodoInfoMapper; + + public Integer addPointTodoInfo(List todoList) { + if(CollectionUtils.isEmpty(todoList)){ + return null; + } + return pointTodoInfoMapper.batchInsertSelective(todoList); + } + + public List getTodoUserList(Long pointId) { + return pointTodoInfoMapper.getTodoUserList(pointId); + } + + public List getTodoList(Long pointId) { + return pointTodoInfoMapper.getTodoList(pointId); + } + + public Integer updatePointTodoInfo(Long pointId, Integer nodeNo, Integer cycleCount, String handlerUserId) { + return pointTodoInfoMapper.updatePointTodoInfo(pointId, nodeNo, cycleCount, handlerUserId); + } + + public PointTodoInfoDO getPointToDoByUserIdAndPointId(String userId, Long pointId){ + if(StringUtils.isBlank(userId) || Objects.isNull(pointId)){ + return null; + } + return pointTodoInfoMapper.getPointToDoByUserIdAndPointId(userId, pointId); + } + + public Page getUserTodoList(PointTodoPageRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + return pointTodoInfoMapper.getUserTodoList(request); + } + + public Integer getCurNodeNoByPoint(Long pointId){ + if(Objects.isNull(pointId)){ + return null; + } + return pointTodoInfoMapper.getCurNodeNoByPoint(pointId); + } +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/RegionAreaConfigDao.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/RegionAreaConfigDao.java new file mode 100644 index 000000000..3758e08bf --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/RegionAreaConfigDao.java @@ -0,0 +1,65 @@ +package com.cool.store.dao; + +import com.cool.store.entity.RegionAreaConfigDO; +import com.cool.store.mapper.RegionAreaConfigMapper; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.List; + +/** + * @author wxp + * @ClassName RegionAreaConfigDao + * @Description 用一句话描述什么 + */ +@Repository +public class RegionAreaConfigDao { + + @Resource + private RegionAreaConfigMapper regionAreaConfigMapper; + + public void deleteRegionAreaConfigByRegionId(Long regionId) { + if (regionId == null) { + return; + } + regionAreaConfigMapper.deleteRegionAreaConfigByRegionId(regionId); + } + + public void deleteByWantShopAreaIds(List wantShopAreaIds) { + if (CollectionUtils.isEmpty(wantShopAreaIds)) { + return; + } + regionAreaConfigMapper.deleteByWantShopAreaIds(wantShopAreaIds); + } + + public void batchInsertOrUpdateRegionAreaConfig(List regionAreaConfigList) { + if (CollectionUtils.isEmpty(regionAreaConfigList)) { + return; + } + regionAreaConfigMapper.batchInsertOrUpdateRegionAreaConfig(regionAreaConfigList); + } + + public List listAreaByRegionId(Long regionId){ + if (regionId == null) { + return Collections.emptyList(); + } + return regionAreaConfigMapper.listAreaByRegionId(regionId); + } + + public List listAreaByRegionIdList(List regionIdList){ + if (CollectionUtils.isEmpty(regionIdList)) { + return Collections.emptyList(); + } + return regionAreaConfigMapper.listAreaByRegionIdList(regionIdList); + } + + public Long getByWantShopAreaId(Long wantShopAreaId){ + if (wantShopAreaId == null) { + return 0L; + } + return regionAreaConfigMapper.getByWantShopAreaId(wantShopAreaId); + } + +} 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 new file mode 100644 index 000000000..b62e08a56 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/RegionDao.java @@ -0,0 +1,190 @@ +package com.cool.store.dao; + +import com.cool.store.dto.RegionNode; +import com.cool.store.entity.RegionDO; +import com.cool.store.mapper.RegionMapper; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.ListUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author shoul + * @ClassName RegionDao + * @Description 用一句话描述什么 + */ +@Repository +public class RegionDao { + + @Resource + private RegionMapper regionMapper; + + + public RegionNode getRegionByRegionId( String regionId) { + return regionMapper.getRegionByRegionId( regionId); + } + + public List getRegionByRegionIds( List regionIds) { + if (CollectionUtils.isEmpty(regionIds)) { + return Collections.emptyList(); + } + return regionMapper.getRegionByRegionIds( regionIds); + } + + + public RegionNode getRootRegion(String eid) { + return regionMapper.getRegionByRegionId( "1"); + } + + + /** + * 获取区域根据区域id列表(包含删除) + * + * 区域id + * @param regionIds 区域id列表 + * @return List + */ + public List getAllRegionByRegionIds( List regionIds) { + if (CollectionUtils.isEmpty(regionIds)) { + return Collections.emptyList(); + } + return regionMapper.getByIds( regionIds); + } + + /** + * 获取区域根据区域id(包含删除) + * + * + * @param regionId + * @return + */ + public RegionDO getRegionById( Long regionId) { + if ( Objects.isNull(regionId)) { + return null; + } + return regionMapper.getByRegionId( regionId); + } + + /** + * 根据id查询 + * @param id 区域id + * @return RegionDO + */ + public RegionDO selectById(Long id) { + if(Objects.isNull(id)) { + return null; + } + return regionMapper.getByRegionId( id); + } + + /** + * 获取所有的区域包含删除区域 + * + * + * @return + */ + public List getRegionsByEid( Long regionId) { + return regionMapper.getRegionsByEid( regionId); + } + + + public List getSubRegion( Long parentId) { + if ( Objects.isNull(parentId)) { + return Lists.newArrayList(); + } + return regionMapper.getSubRegion( parentId); + } + + public List getRegionList( List regionIds) { + if ( CollectionUtils.isEmpty(regionIds)) { + return Lists.newArrayList(); + } + return regionMapper.getRegionByRegionIds( regionIds); + } + + + public RegionDO getByRegionIdExcludeDeleted( Long regionId) { + if ( Objects.isNull(regionId)) { + return null; + } + return regionMapper.getByRegionIdExcludeDeleted( regionId); + } + + public List getSubIdsByRegionIds( List regionIds) { + if (CollectionUtils.isEmpty(regionIds)) { + return Lists.newArrayList(); + } + List regionPaths = regionMapper.getRegionPathByRegionIds( regionIds); + regionPaths = regionPaths.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList()); + if (CollectionUtils.isEmpty(regionPaths)) { + return Lists.newArrayList(); + } + return regionMapper.getSubIdsByRegionIds( regionPaths); + } + + /** + * 根据regionIds 的 全路径查下级 + * + * + * @param regionIds + * @return + */ + public List listSubIdsByRegionIds( List regionIds) { + if (CollectionUtils.isEmpty(regionIds)) { + return Lists.newArrayList(); + } + List regionIdList = regionIds.stream() + .map(a -> Long.valueOf(a)).collect(Collectors.toList()); + List regionDOList = regionMapper.getRegionPathByIds( regionIdList); + List fullRegionPathList = ListUtils.emptyIfNull(regionDOList) + .stream() + .map(RegionDO::getFullRegionPath) + .collect(Collectors.toList()); + fullRegionPathList = fullRegionPathList.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList()); + if (CollectionUtils.isEmpty(fullRegionPathList)) { + return Lists.newArrayList(); + } + return regionMapper.getSubIdsByRegionIds( fullRegionPathList); + } + + + public Map getRegionNameMap(List regionIds) { + List regionList = getAllRegionByRegionIds( regionIds); + if (CollectionUtils.isEmpty(regionList)) { + return Maps.newHashMap(); + } + return regionList.stream().collect(Collectors.toMap(k -> k.getId(), v -> v.getName(), (k1, k2) -> k1)); + } + + public List getCompRegionByRegionIds(List compParentIdList) { + return regionMapper.getCompRegionByRegionIds( compParentIdList); + } + + + public List getRegionByParentIds(List regionIdList) { + return regionMapper.getRegionByParentIds(regionIdList); + } + + public List listByThirdRegionType(Long parentId, String thirdRegionType) { + return regionMapper.listByThirdRegionType(parentId, thirdRegionType); + } + + public List getFightRegionByRegionIds(List regionIds) { + return regionMapper.getFightRegionByRegionIds(regionIds); + } + + public RegionDO getRegionByStoreId(String storeId) { + if (Objects.isNull(storeId)) { + return null; + } + return regionMapper.getRegionByStoreId(storeId); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/RegionQrcodeConfigDao.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/RegionQrcodeConfigDao.java new file mode 100644 index 000000000..6b360687b --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/RegionQrcodeConfigDao.java @@ -0,0 +1,32 @@ +package com.cool.store.dao; + +import com.cool.store.entity.RegionQrcodeConfigDO; +import com.cool.store.mapper.RegionQrcodeConfigMapper; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * @author wxp + * @ClassName RegionDao + * @Description 用一句话描述什么 + */ +@Repository +public class RegionQrcodeConfigDao { + + @Resource + private RegionQrcodeConfigMapper regionQrcodeConfigMapper; + + public String getPayPicByRegionId(Long regionId) { + if ( Objects.isNull(regionId)) { + return ""; + } + RegionQrcodeConfigDO regionQrcodeConfigDO = regionQrcodeConfigMapper.getByRegionId(regionId); + if(regionQrcodeConfigDO != null){ + return regionQrcodeConfigDO.getPayPic(); + } + return ""; + } + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopAuditInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopAuditInfoDAO.java new file mode 100644 index 000000000..c91f6bb2e --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopAuditInfoDAO.java @@ -0,0 +1,63 @@ +package com.cool.store.dao; + +import com.cool.store.entity.ShopAuditInfoDO; +import com.cool.store.mapper.ShopAuditInfoMapper; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: ShopAuditInfoDAO + * @Description: + * @date 2024-04-24 17:30 + */ +@Repository +public class ShopAuditInfoDAO { + + @Resource + private ShopAuditInfoMapper shopAuditInfoMapper; + + /** + * 新增审核信息 + * @param auditInfo + * @return + */ + public Long addAuditInfo(ShopAuditInfoDO auditInfo) { + shopAuditInfoMapper.insertSelective(auditInfo); + return auditInfo.getId(); + } + + /** + * 获取单个审核信息 + * @param auditId + * @return + */ + public ShopAuditInfoDO getAuditInfo(Long auditId) { + return shopAuditInfoMapper.selectByPrimaryKey(auditId); + } + + /** + * 批量获取审核信息 + * @param auditIds + * @return + */ + public List getAuditInfoList(List auditIds) { + if(CollectionUtils.isEmpty(auditIds)){ + return Lists.newArrayList(); + } + return shopAuditInfoMapper.getAuditInfoList(auditIds); + } + + public Integer updateSelective(ShopAuditInfoDO shopAuditInfoDO) { + return shopAuditInfoMapper.updateByPrimaryKeySelective(shopAuditInfoDO); + } + + public List getAuditList(Long shopId,Integer auditType) { + + return shopAuditInfoMapper.getAuditList(shopId,auditType); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java new file mode 100644 index 000000000..5e2695a56 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java @@ -0,0 +1,161 @@ +package com.cool.store.dao; + +import com.cool.store.constants.CommonConstants; +import com.cool.store.dto.Preparation.PreparationDTO; +import com.cool.store.dto.openPreparation.OpenPlanShopInfoDTO; +import com.cool.store.dto.point.LineCountDTO; +import com.cool.store.entity.ShopInfoDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.ShopInfoMapper; +import com.cool.store.request.PlanListRequest; +import com.cool.store.request.PreparationRequest; +import com.cool.store.vo.shop.StageShopCountVO; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: ShopInfoDAO + * @Description: + * @date 2024-03-29 10:14 + */ +@Slf4j +@Repository +public class ShopInfoDAO { + + @Resource + private ShopInfoMapper shopInfoMapper; + + + public Integer batchAddShop(List shopInfoList){ + if(CollectionUtils.isEmpty(shopInfoList)){ + return CommonConstants.ZERO; + } + return shopInfoMapper.batchAddShop(shopInfoList); + } + + /** + * 获取门店信息 + * @param shopId + * @return + */ + public ShopInfoDO getShopInfo(Long shopId){ + ShopInfoDO shopInfo = shopInfoMapper.selectByPrimaryKey(shopId); + if(Objects.isNull(shopInfo) || shopInfo.getDeleted()){ + return null; + } + return shopInfo; + } + + public List getShopList(Long lineId){ + if(Objects.isNull(lineId)){ + return new ArrayList<>(); + } + return shopInfoMapper.getShopList(lineId); + } + + /** + * 新增门店信息 + * @param shopInfo + * @return + */ + public Long addShopInfo(ShopInfoDO shopInfo){ + shopInfoMapper.insertSelective(shopInfo); + return shopInfo.getId(); + } + + public Integer updateShopInfo(ShopInfoDO shopInfo){ + if(Objects.isNull(shopInfo) || Objects.isNull(shopInfo.getId())){ + log.info("店铺为空 或者店铺id为空"); + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + return shopInfoMapper.updateByPrimaryKeySelective(shopInfo); + } + + public ShopInfoDO getShopInfoByPointId(Long lineId, Long pointId){ + if(Objects.isNull(lineId) || Objects.isNull(pointId)){ + return null; + } + return shopInfoMapper.getShopInfoByPointId(lineId, pointId); + } + + /** + * 获取各个阶段店铺数量 + * @param lineId + * @return + */ + public StageShopCountVO getStageShopCount(Long lineId) { + return shopInfoMapper.getStageShopCount(lineId); + } + + /** + * 解绑铺位 + * @param shopId + * @return + */ + public Integer unbindPoint(Long shopId){ + if(Objects.isNull(shopId)){ + return CommonConstants.ZERO; + } + return shopInfoMapper.unbindPoint(shopId); + } + + /** + * 批量获取店铺信息 + * @param shopIds + * @return + */ + public List getShopListByIds(List shopIds){ + if(CollectionUtils.isEmpty(shopIds)){ + return new ArrayList<>(); + } + return shopInfoMapper.getShopListByIds(shopIds); + } + + public Map getSelectedShopNumMap(List lineIds) { + if(CollectionUtils.isEmpty(lineIds)){ + return Maps.newHashMap(); + } + List selectedShopNum = shopInfoMapper.getSelectedShopNum(lineIds); + return selectedShopNum.stream().collect(Collectors.toMap(k->k.getLineId(), v->v.getSelectedShopNum())); + } + /** + * @Auther: wangshuo + * @Date: 2024/4/25 + * @description: 根据idlist 获取storeNum + */ + public List queryStoreNumeListByid(List shopIdList){ + return shopInfoMapper.queryStoreNumeListByid(shopIdList); + } + + + public List ListByCondition(PreparationRequest request){ + return shopInfoMapper.ListByCondition(request); + } + public Long getRegionIdByid(Long shopId){ + return shopInfoMapper.getRegionIdByid(shopId); + } + + public ShopInfoDO selectByStoreNum(String storeNum){ + if (StringUtils.isBlank(storeNum)) { + return null; + } + return shopInfoMapper.selectByStoreNum(storeNum); + } + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopRentInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopRentInfoDAO.java new file mode 100644 index 000000000..6d2d4041c --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopRentInfoDAO.java @@ -0,0 +1,58 @@ +package com.cool.store.dao; + +import com.cool.store.constants.CommonConstants; +import com.cool.store.entity.ShopRentInfoDO; +import com.cool.store.mapper.ShopRentInfoMapper; +import com.cool.store.vo.point.ShopRentInfoVO; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: ShopRentInfoDAO + * @Description: + * @date 2024-04-16 11:34 + */ +@Repository +public class ShopRentInfoDAO { + + @Resource + private ShopRentInfoMapper shopRentInfoMapper; + + public Long addShopRentInfo(ShopRentInfoDO shopRentInfo) { + shopRentInfoMapper.insertSelective(shopRentInfo); + return shopRentInfo.getId(); + } + + public ShopRentInfoDO getRentContractByShopId(Long shopId) { + if(Objects.isNull(shopId)){ + return null; + } + return shopRentInfoMapper.getRentContractByShopId(shopId); + } + + public Integer updateRentContract(ShopRentInfoDO shopRentInfo) { + if(Objects.isNull(shopRentInfo.getId())){ + return CommonConstants.ZERO; + } + return shopRentInfoMapper.updateByPrimaryKeySelective(shopRentInfo); + } + + public Integer deleteRentContractByShopId(Long shopId) { + if(Objects.isNull(shopId)){ + return CommonConstants.ZERO; + } + return shopRentInfoMapper.deleteRentContractByShopId(shopId); + } + + public List getRentContractByShopIds(List shopIds) { + if(CollectionUtils.isEmpty(shopIds)){ + return null; + } + return shopRentInfoMapper.getRentContractByShopIds(shopIds); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java new file mode 100644 index 000000000..fee38c8de --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java @@ -0,0 +1,290 @@ +package com.cool.store.dao; + +import com.cool.store.constants.CommonConstants; +import com.cool.store.dto.Preparation.ScheduleDTO; +import com.cool.store.entity.ShopStageInfoDO; +import com.cool.store.enums.point.ShopStageEnum; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.mapper.ShopStageInfoMapper; +import com.cool.store.vo.Preparation.PreparationProcessVO; +import com.cool.store.vo.shop.RentInfoToDoVO; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.google.common.collect.Lists; +import io.swagger.models.auth.In; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: ShopStageInfoDAO + * @Description: + * @date 2024-04-10 17:33 + */ +@Repository +public class ShopStageInfoDAO { + + @Resource + private ShopStageInfoMapper shopStageInfoMapper; + + /** + * 初始化店铺阶段信息 + * @param lineId + * @param shopIds + * @param shopStageEnum + * @return + */ + public Integer initShopStageInfo(Long lineId, List shopIds) { + if(CollectionUtils.isEmpty(shopIds)){ + return CommonConstants.ZERO; + } + List addShopStageList = new ArrayList<>(); + LocalDate selectStartDate = LocalDate.now(); + LocalDate planSelectPointCompleteDate = selectStartDate.plusDays(ShopSubStageEnum.getSelectStageMaxDays()); + for (Long shopId : shopIds) { + for (ShopSubStageEnum shopSubStageEnum : ShopSubStageEnum.values()) { + ShopStageInfoDO shopStageInfo = new ShopStageInfoDO(); + shopStageInfo.setLineId(lineId); + shopStageInfo.setShopId(shopId); + ShopStageEnum shopStageEnum = shopSubStageEnum.getShopStageEnum(); + shopStageInfo.setShopStage(shopStageEnum.getShopStage()); + shopStageInfo.setShopSubStage(shopSubStageEnum.getShopSubStage()); + ShopSubStageStatusEnum initStatus = shopSubStageEnum.getInitStatus(); + shopStageInfo.setShopSubStageStatus(initStatus.getShopSubStageStatus()); + shopStageInfo.setRemark(shopSubStageEnum.getShopSubStageName() + CommonConstants.PATH_BAR +shopSubStageEnum.getInitStatus().getShopSubStageStatusName()); + shopStageInfo.setIsTerminated(Boolean.FALSE); + shopStageInfo.setPlanCompleteTime(shopSubStageEnum.getPlanCompleteTime(selectStartDate, planSelectPointCompleteDate)); + addShopStageList.add(shopStageInfo); + } + } + //发送短信 + return shopStageInfoMapper.batchInsert(addShopStageList); + } + + public Integer batchUpdate(List shopStageList) { + if(CollectionUtils.isEmpty(shopStageList)){ + return 0; + } + return shopStageInfoMapper.batchUpdate(shopStageList); + } + + /** + * 获取店铺阶段信息 + * @param shopId + * @return + */ + public List getShopStageInfo(Long shopId, Integer shopStage) { + if(Objects.isNull(shopId)){ + return Lists.newArrayList(); + } + return shopStageInfoMapper.getShopStageInfo(shopId, shopStage); + } + + public PreparationProcessVO getPreparationProcess(Long shopId) { + if(Objects.isNull(shopId)){ + return null; + } + return shopStageInfoMapper.getPreparationProcess(shopId); + } + + public Integer getAllCompletionCount(Long shopId) { + if(Objects.isNull(shopId)){ + return 0; + } + return shopStageInfoMapper.getAllCompletionCount(shopId); + } + /** + * @Auther: wangshuo + * @Date: 2024/5/3 + * @description:更新完成时间byshopId + */ + public Integer updateByShopId( ShopStageInfoDO shopStageInfoDO){ + if (Objects.isNull(shopStageInfoDO)){ + return CommonConstants.ZERO; + } + return shopStageInfoMapper.updateByShopId(shopStageInfoDO); + } + /** + * 获取子阶段信息 + * @param shopId + * @param shopSubStageEnum + * @return + */ + public ShopStageInfoDO getShopSubStageInfo(Long shopId, ShopSubStageEnum shopSubStageEnum) { + if(Objects.isNull(shopId) || Objects.isNull(shopSubStageEnum)){ + return null; + } + return shopStageInfoMapper.getShopSubStageInfo(shopId, shopSubStageEnum.getShopSubStage()); + } + + public Integer updateShopStageInfo(Long shopId, ShopSubStageStatusEnum shopStageInfo) { + if(Objects.isNull(shopId) || Objects.isNull(shopStageInfo)){ + return CommonConstants.ZERO; + } + String remark = shopStageInfo.getShopSubStageName() + CommonConstants.PATH_BAR +shopStageInfo.getShopSubStageStatusName(); + boolean isTerminated = shopStageInfo.isTerminated(); + return shopStageInfoMapper.updateShopStageInfo(shopId, shopStageInfo.getShopSubStageEnum().getShopSubStage(), shopStageInfo.getShopSubStageStatus(), isTerminated, remark); + } + + + /** + * 批量更新店铺状态 + * @param shopId + * @param subStageStatusList + * @return + */ + public Integer batchUpdateShopStageStatus(Long shopId, List subStageStatusList) { + if(Objects.isNull(shopId) || CollectionUtils.isEmpty(subStageStatusList)){ + return CommonConstants.ZERO; + } + List shopStageList = Lists.newArrayList(); + for (ShopSubStageStatusEnum subStageStatus : subStageStatusList) { + String remark = subStageStatus.getShopSubStageName() + CommonConstants.PATH_BAR + subStageStatus.getShopSubStageStatusName(); + ShopStageInfoDO shopStageInfo = new ShopStageInfoDO(); + shopStageInfo.setShopId(shopId); + shopStageInfo.setShopSubStage(subStageStatus.getShopSubStageEnum().getShopSubStage()); + shopStageInfo.setShopSubStageStatus(subStageStatus.getShopSubStageStatus()); + shopStageInfo.setRemark(remark); + shopStageInfo.setIsTerminated(subStageStatus.isTerminated()); + shopStageList.add(shopStageInfo); + } + + return shopStageInfoMapper.batchUpdateShopStageStatus(shopId, shopStageList); + } + + /** + * 更新子阶段到未开始状态 + * @param shopId + * @param shopSubStageEnum + * @return + */ + public Integer updateShopStageToNotStarted(Long shopId, ShopSubStageEnum shopSubStageEnum) { + if(Objects.isNull(shopId) || Objects.isNull(shopSubStageEnum)){ + return CommonConstants.ZERO; + } + return shopStageInfoMapper.updateShopStageToNotStarted(shopId, shopSubStageEnum.getShopSubStage()); + } + + /** + * 更新店铺阶段状态及审核信息 + * @param shopId + * @param shopStageInfo + * @return + */ + public Integer updateShopStageAndAuditInfo(Long shopId, ShopSubStageStatusEnum shopStageInfo, Long auditId) { + if(Objects.isNull(shopId) || Objects.isNull(shopStageInfo)){ + return CommonConstants.ZERO; + } + String remark = shopStageInfo.getShopSubStageName() + CommonConstants.PATH_BAR +shopStageInfo.getShopSubStageStatusName(); + boolean isTerminated = shopStageInfo.isTerminated(); + return shopStageInfoMapper.updateShopStageAndAuditInfo(shopId, shopStageInfo.getShopSubStageEnum().getShopSubStage(), shopStageInfo.getShopSubStageStatus(), isTerminated, remark, auditId); + } + + public Page getRentContractToDoPage(String userId, Integer pageNum, Integer pageSize){ + PageHelper.startPage(pageNum, pageSize); + ShopSubStageStatusEnum shopSubStageStatus = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_21; + return shopStageInfoMapper.getRentContractToDoPage(userId, shopSubStageStatus.getShopSubStageEnum().getShopSubStage(), shopSubStageStatus.getShopSubStageStatus()); + } + public List getShopIdListByStageStatus(Integer shopSubStageStatus){ + if (shopSubStageStatus == null ||shopSubStageStatus ==CommonConstants.ZERO){ + return null; + } + return shopStageInfoMapper.getShopIdListByStageStatus(shopSubStageStatus); + } + + public List getScheduleList(List shopIdList){ + if (CollectionUtils.isEmpty(shopIdList)){ + return Collections.emptyList(); + } + return shopStageInfoMapper.getScheduleList(shopIdList); + } + + public List getShopContractActualCompletionTime(List shopIdList){ + if (CollectionUtils.isEmpty(shopIdList)){ + return Collections.emptyList(); + } + return shopStageInfoMapper.getShopContractActualCompletionTime(shopIdList); + } + + /** + * 获取可以上传租赁合同的店铺id + * @param shopIds + * @return + */ + public List getCanSubmitRentContractShopIds(List shopIds) { + if(CollectionUtils.isEmpty(shopIds)){ + return Lists.newArrayList(); + } + return shopStageInfoMapper.getCanSubmitRentContractShopIds(shopIds); + } + /** + * @Auther: wangshuo + * @Date: 2024/5/5 + * @description:获取施工阶段未完成的店铺 + */ + public List getShopContractIncompletion(){ + return shopStageInfoMapper.getShopContractIncompletion(); + } + /** + * @Auther: wangshuo + * @Date: 2024/5/13 + * @description:批量更新店铺某一阶段的状态 + */ + public Integer batchUpdateShopStageStatus(List shopIdList,Integer shopSubStageEnum, Integer shopSubStageStatusEnum) { + if (CollectionUtils.isEmpty(shopIdList)){ + return CommonConstants.ZERO; + } + return shopStageInfoMapper.batchUpdateStatus(shopIdList,shopSubStageEnum,shopSubStageStatusEnum); + } + + public List getSpecialShopStageInfo(List shopIds, Integer shopSubStage, + List shopSubStageStatusList,String investmentUserId,Integer queryUserType){ + return shopStageInfoMapper.getSpecialShopStageInfo( shopIds, shopSubStage, shopSubStageStatusList,investmentUserId,queryUserType); + } + /** + * @Auther: wangshuo + * @Date: 2024/5/9 + * @description:获取处于XXXX阶段的列表 + */ + public List getSubStageList(List shopIds, Integer shopSubStage){ + if(CollectionUtils.isEmpty(shopIds) || shopSubStage == null){ + return Collections.emptyList(); + } + return shopStageInfoMapper.getSubStageList(shopIds,shopSubStage); + } + + /** + * 获取线索未开业的数量 + * @param lineId + * @return + */ + public Integer getNotOpenShopCountByLineId(Long lineId){ + if(Objects.isNull(lineId)){ + return CommonConstants.ZERO; + } + ShopSubStageEnum shopSubStageEnum = ShopSubStageEnum.SHOP_STAGE_16; + return shopStageInfoMapper.getShopCountByLineIdAndStageStatus(lineId, shopSubStageEnum.getShopStageEnum().getShopStage(), shopSubStageEnum.getShopSubStage(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_00.getShopSubStageStatus()); + } + /** + * @Auther: wangshuo + * @Date: 2024/5/11 + * @description:获取处于a阶段或b阶段,和c阶段的 + */ + public List getSubStageListBySubStageStatus(ShopSubStageStatusEnum a,ShopSubStageStatusEnum b, ShopSubStageStatusEnum c){ + + return shopStageInfoMapper.getSubStageListBySubStageStatus(a.getShopSubStageStatus(),b.getShopSubStageStatus(),c.getShopSubStageStatus()); + } + + public ShopStageInfoDO getByShopIdAndSubStage(Long shopId, Integer shopSubStage) { + return shopStageInfoMapper.getByShopIdAndSubStage(shopId,shopSubStage); + } +} 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..d6e22cdef --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/StoreDao.java @@ -0,0 +1,60 @@ +package com.cool.store.dao; + +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.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; + +@Repository +public class StoreDao { + + @Resource + private StoreMapper storeMapper; + /** + * 根据门店id查询门店 + * @param storeId + * @return + */ + public StoreDO getByStoreId(String storeId) { + if(StringUtils.isBlank(storeId)) { + return null; + } + return storeMapper.getByStoreId(storeId); + } + + public List getEffectiveStoreByStoreIds(List storeIdList) { + if(CollectionUtils.isEmpty(storeIdList)) { + return Lists.newArrayList(); + } + return storeMapper.getEffectiveStoreByStoreIds(storeIdList); + } + + public List listStoreByRegionId(String regionId) { + if(StringUtils.isBlank(regionId)) { + return Lists.newArrayList(); + } + return storeMapper.listStoreByRegionId(regionId); + } + + public List getStoreNumByStoreIds(List storeIdList) { + if(CollectionUtils.isEmpty(storeIdList)) { + return Lists.newArrayList(); + } + return storeMapper.getStoreNumByStoreIds(storeIdList); + } + + public StoreDO getByStoreNum(String storeNum) { + if(StringUtils.isBlank(storeNum)) { + return null; + } + return storeMapper.getByStoreNum(storeNum); + } + + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysRoleDao.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysRoleDao.java new file mode 100644 index 000000000..39d36cef9 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysRoleDao.java @@ -0,0 +1,59 @@ +package com.cool.store.dao; + +import com.cool.store.dto.UserRoleDTO; +import com.cool.store.entity.SysRoleDO; +import com.cool.store.mapper.SysRoleMapper; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author zhangnan + * @description: + * @date 2022/4/18 10:57 PM + */ +@Repository +public class SysRoleDao { + + @Resource + private SysRoleMapper sysRoleMapper; + + /** + * 根据角色id列表查询 + * @param roleIds + * @return + */ + public List selectRoleByRoleIds( List roleIds) { + if(CollectionUtils.isEmpty(roleIds)) { + return Lists.newArrayList(); + } + return sysRoleMapper.getRoleByRoleIds( roleIds); + } + + /** + * 根据角色id列表查询 + * @param userIdList + * @return + */ + public List getUserRoleNameByUserIdList( List userIdList) { + if(CollectionUtils.isEmpty(userIdList)) { + return Lists.newArrayList(); + } + return sysRoleMapper.getUserRoleNameByUserIdList( userIdList); + } + + public Map getRoleNameMap( List roleIds){ + List sysRoleDOS = selectRoleByRoleIds( roleIds); + if(CollectionUtils.isEmpty(sysRoleDOS)){ + return Maps.newHashMap(); + } + return sysRoleDOS.stream().collect(Collectors.toMap(k->k.getId(), v->v.getRoleName(), (k1, k2)->k1)); + } + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/TempUserDetailDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/TempUserDetailDAO.java new file mode 100644 index 000000000..9d813dd6c --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/TempUserDetailDAO.java @@ -0,0 +1,39 @@ +package com.cool.store.dao; + +import com.cool.store.entity.TempUserDetailDO; +import com.cool.store.mapper.TempUserDetailMapper; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author byd + * @date 2024-04-29 16:06 + */ +@Repository +public class TempUserDetailDAO { + + @Resource + private TempUserDetailMapper tempUserDetailMapper; + + public List userList(Long shopId) { + return tempUserDetailMapper.select(TempUserDetailDO.builder().deleted(false).shopId(shopId).build()); + } + + public TempUserDetailDO selectByIdCard(String idCard) { + return tempUserDetailMapper.selectOne(TempUserDetailDO.builder().deleted(false).idCard(idCard).build()); + } + + public int insertSelective(TempUserDetailDO detailDO) { + return tempUserDetailMapper.insertSelective(detailDO); + } + + public Integer updateByPrimaryKeySelective(TempUserDetailDO detailDO) { + return tempUserDetailMapper.updateByPrimaryKeySelective(detailDO); + } + + public TempUserDetailDO selectById(Long id) { + return tempUserDetailMapper.selectOne(TempUserDetailDO.builder().id(id).build()); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/TransferLogDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/TransferLogDAO.java new file mode 100644 index 000000000..2d1bab738 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/TransferLogDAO.java @@ -0,0 +1,39 @@ +package com.cool.store.dao; + +import com.cool.store.dto.TransferLogDTO; +import com.cool.store.entity.TransferLogDO; +import com.cool.store.mapper.TransferLogMapper; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/3/29 17:43 + * @Version 1.0 + */ +@Repository +public class TransferLogDAO { + + @Resource + TransferLogMapper transferLogMapper; + + public void add(TransferLogDO transferLog){ + transferLogMapper.insertSelective(transferLog); + } + + + public List getTransferLogList(Long lindId){ + if (lindId == null){ + return null; + } + return transferLogMapper.getTransferLogList(lindId); + } + + + + + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/UserRegionMappingDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/UserRegionMappingDAO.java new file mode 100644 index 000000000..465fca54f --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/UserRegionMappingDAO.java @@ -0,0 +1,101 @@ +package com.cool.store.dao; + +import com.cool.store.entity.UserRegionMappingDO; +import com.cool.store.mapper.UserRegionMappingMapper; +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.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: UserRegionMappingDAO + * @Description: + * @date 2022-03-03 9:50 + */ +@Service +public class UserRegionMappingDAO { + + @Autowired + private UserRegionMappingMapper userRegionMappingMapper; + + /** + * 根据人员id列表查询人员所属部门 + * + * @param userIds + * @return + */ + public List listUserRegionMappingByUserId( List userIds){ + return userRegionMappingMapper.listUserRegionMappingByUserId( userIds); + } + + + /** + * 查询部门下的人员 + * + * @param regionIds + * @return + */ + public List selectUserListByRegionIds( List regionIds){ + return userRegionMappingMapper.selectUserListByRegionIds(regionIds); + } + + /** + * 获取区域的直连人员数量 + * + * @param regionIds + * @return + */ + public List> getRegionUserCount(List regionIds){ + return userRegionMappingMapper.getRegionUserCount(regionIds); + } + + /** + * 根据Userids和regionids查询数据 + * + * @param userIds + * @param regionIds + * @return + */ + public List listByUserIdsAndRegionIds(List userIds,List regionIds){ + return userRegionMappingMapper.listByUserIdsAndRegionIds(userIds,regionIds); + } + + /** + * 获取用户所在的部门 + * + * @param userIds + * @return + */ + public List getRegionIdsByUserIds( List userIds){ + if(CollectionUtils.isEmpty(userIds)){ + return Lists.newArrayList(); + } + return userRegionMappingMapper.getRegionIdsByUserIds( userIds); + } + + public List getRegionIdsByUserId( String userId){ + if(StringUtils.isAnyBlank( userId)){ + return Lists.newArrayList(); + } + List regionMappings = getRegionIdsByUserIds( Arrays.asList(userId)); + return ListUtils.emptyIfNull(regionMappings).stream().map(UserRegionMappingDO::getRegionId).distinct().collect(Collectors.toList()); + } + + /** + * 获取部门有哪些用户 + * + * @param regionIds + * @return + */ + public List getUserIdsByRegionIds( List regionIds){ + return userRegionMappingMapper.getUserIdsByRegionIds( regionIds); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/AcceptanceInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/AcceptanceInfoMapper.java new file mode 100644 index 000000000..297e17dac --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/AcceptanceInfoMapper.java @@ -0,0 +1,39 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.AcceptanceInfoDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface AcceptanceInfoMapper extends Mapper { + /** + * @Auther: wangshuo + * @Date: 2024/4/29 + * @description:三方验收g根据阶段状态 并且验收时间不为空 + */ + List selectShopIdListBySignatures(@Param("subStage") Integer subStage,@Param("status") Integer status); + /** + * @Auther: wangshuo + * @Date: 2024/5/13 + * @description:获取进场时间不为空的 + */ + List selectListNotNullEntryTime(); + /** + * @Auther: wangshuo + * @Date: 2024/4/29 + * @description:根据shopID修改 + */ + Integer updateByShopIDSelective(AcceptanceInfoDO acceptanceInfoDO); + + AcceptanceInfoDO selectByShopId(@Param("shopId") Long shopId); + + List selectByShopIds(@Param("shopIds") List shopIds); + + /** + * @Auther: wangshuo + * @Date: 2024/5/3 + * @description:查询进场时间为空的数据 + */ + List selectByEntryTimeNull(); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ApplyLicenseMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ApplyLicenseMapper.java new file mode 100644 index 000000000..0248f6680 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ApplyLicenseMapper.java @@ -0,0 +1,21 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.LicenseTransactDO; +import com.cool.store.entity.RegionDO; +import com.cool.store.request.LicenseListRequest; +import com.cool.store.response.LicenseListResponse; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface ApplyLicenseMapper extends Mapper { + + List licenseList(@Param("request") LicenseListRequest request, + @Param("userId") String userId, + @Param("fightRegions") List fightRegions); + + void updateByShopId(@Param("entity") LicenseTransactDO licenseTransactDO); + + LicenseTransactDO selectByShopId(@Param("shopId") Long shopId); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/AssessmentDataMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/AssessmentDataMapper.java new file mode 100644 index 000000000..77ec136cf --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/AssessmentDataMapper.java @@ -0,0 +1,27 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.AssessmentDataDO; +import com.cool.store.entity.ShopStageInfoDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface AssessmentDataMapper extends Mapper { + /** + * @Auther: wangshuo + * @Date: 2024/5/8 + * @description:三方验收 + */ + Integer batchUpdate(@Param("AssessmentDataDOS") List AssessmentDataDOS); + /** + * @Auther: wangshuo + * @Date: 2024/5/8 + * @description:三方验收 + */ + List selectListByShopId(@Param("shopId") Long shopId,@Param("templateIdMin") Long templateIdMin,@Param("templateIdMax") Long templateIdMax); + + Integer batchInsert(@Param("assessmentDataList") List assessmentDataList); + + Integer batchInsertOrUpdate(@Param("assessmentDataList") List assessmentDataList); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/AssessmentTemplateMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/AssessmentTemplateMapper.java new file mode 100644 index 000000000..bde96aa59 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/AssessmentTemplateMapper.java @@ -0,0 +1,20 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.AssessmentTemplateDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface AssessmentTemplateMapper extends Mapper { + + /** + * 根据类型查询 + * @param type + * @return + */ + List listByType(@Param("type") Integer type); + + + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/AuditStatusMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/AuditStatusMapper.java new file mode 100644 index 000000000..f0cbd15ad --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/AuditStatusMapper.java @@ -0,0 +1,22 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.AuditStatusDO; +import com.cool.store.response.CheckListResponse; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.Date; +import java.util.List; + +@org.apache.ibatis.annotations.Mapper +public interface AuditStatusMapper extends Mapper { + + List checkList(@Param("keyWord") String partnerNameOrPhone, + @Param("startTime") String startTime, + @Param("endTime") String endTime, + @Param("region") String region, + @Param("checkStatus") Integer checkStatus, + @Param("checkStage") Integer checkStage, + @Param("pageNum") Integer pageNum, + @Param("pageSize") Integer pageSize); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/BankdocMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/BankdocMapper.java new file mode 100644 index 000000000..434e31df1 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/BankdocMapper.java @@ -0,0 +1,28 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.interview.LineInterviewPageDTO; +import com.cool.store.entity.BankdocDO; +import com.cool.store.request.BranchBankPageRequest; +import com.cool.store.request.LineInterviewPageRequest; +import com.github.pagehelper.Page; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author wxp + * @date 2024-03-27 09:25 + */ +public interface BankdocMapper { + /** + * + * 默认插入方法,只会给有值的字段赋值 + * 会对传进来的字段做判空处理,如果字段为空,则使用数据库默认字段或者null + * dateTime:2024-03-27 09:25 + */ + int insertSelective(BankdocDO record); + + Page listBranchBank(BranchBankPageRequest request); + + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/BanktypeMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/BanktypeMapper.java new file mode 100644 index 000000000..06c251273 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/BanktypeMapper.java @@ -0,0 +1,43 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.BanktypeDO; + +import java.util.List; + +/** + * @author wxp + * @date 2024-03-27 09:25 + */ +public interface BanktypeMapper { + /** + * + * 默认插入方法,只会给有值的字段赋值 + * 会对传进来的字段做判空处理,如果字段为空,则使用数据库默认字段或者null + * dateTime:2024-03-27 09:25 + */ + int insertSelective(BanktypeDO record); + + /** + * + * 默认查询方法,通过主键获取所有字段的值 + * dateTime:2024-03-27 09:25 + */ + BanktypeDO selectByPrimaryKey(String pkBanktype); + + /** + * + * 默认更新方法,根据主键更新,不会把null值更新到数据库,避免覆盖之前有值的 + * dateTime:2024-03-27 09:25 + */ + int updateByPrimaryKeySelective(BanktypeDO record); + + /** + * + * 默认更新方法,根据主键物理删除 + * dateTime:2024-03-27 09:25 + */ + int deleteByPrimaryKey(String pkBanktype); + + List listBank(); + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EmployeeTrainingMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EmployeeTrainingMapper.java new file mode 100644 index 000000000..d206d2381 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EmployeeTrainingMapper.java @@ -0,0 +1,30 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.EmployeeTrainingDO; +import com.cool.store.vo.EmployeeTrainingVO; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface EmployeeTrainingMapper extends Mapper { + + List employeeTrainingList(@Param("keyWord") String keyWord, @Param("regionIdList") List regionIdList, + @Param("authRegionIdList") List authRegionIdList, @Param("assignFlag") Boolean assignFlag, + @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("storeNumList") List storeNumList, + @Param("theoreticalExamStatus") Integer theoreticalExamStatus, + @Param("practicalExamStatus") Integer practicalExamStatus, + @Param("assessmentStatus") Integer assessmentStatus, + @Param("assignStoreFlag") Boolean assignStoreFlag); + + List trainingListByShopId(@Param("shopId") Long shopId, @Param("trainingTeacherUserId") String trainingTeacherUserId, + @Param("status") Integer status); + + List assessmentUserList(@Param("name") String name, @Param("practicalAssessmentUserId") String practicalAssessmentUserId, + @Param("assessmentStatus") Integer assessmentStatus, + @Param("estimatedAssessmentBeginTime") String estimatedAssessmentBeginTime, @Param("estimatedAssessmentEndTime") String estimatedAssessmentEndTime, + @Param("actualAssessmentBeginTime") String actualAssessmentBeginTime, @Param("actualAssessmentEndTime") String actualAssessmentEndTime, + @Param("storeIdList") List storeIdList); +} \ 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 new file mode 100644 index 000000000..fa6c9ec69 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserMapper.java @@ -0,0 +1,92 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.openPreparation.UserNameDTO; +import com.cool.store.entity.EnterpriseUserDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author zhangchenbiao + * @date 2023-06-06 02:29 + */ +@Mapper +public interface EnterpriseUserMapper { + /** + * 获取用户信息 + * @param userId + * @return + */ + EnterpriseUserDO getUserInfoById(@Param("userId") String userId); + + EnterpriseUserDO getUserInfoByJobnumber(@Param("jobnumber") String jobnumber); + + EnterpriseUserDO getUserInfoByThirdOaUniqueFlag(@Param("thirdOaUniqueFlag") String thirdOaUniqueFlag); + + /** + * 批量获取用户信息 + * @param userIdList + * @return + */ + List getUserInfoByUserIds( @Param("userIdList") List userIdList); + + /** + * 根据关键字搜索部门下的用户 + * @param regionIds + * @param keyword + * @param leaderRegionIds + * @return + */ + List searchUserByRegionIdsAndKeyword( @Param("regionIds") List regionIds, @Param("keyword") String keyword, @Param("leaderRegionIds") List leaderRegionIds); + + /** + * 获取部门用户数 + * @param regionId + * @return + */ + Integer getUserCountByRegionId( @Param("regionId") String regionId); + + /** + * 获取部门负责人用户列表 + * @param regionId + * @return + */ + List getUserListByDeptLeader( @Param("regionId")String regionId); + + /** + * 根据开发经理获取用户列表 + * @param regionIds + * @return + */ + List getUserListByDeptLeaders( @Param("regionIds") List regionIds); + + /** + * 获取部门人员 + * @param regionIds + * @return + */ + List getUserListByRegionIds( @Param("regionIds") List regionIds); + + EnterpriseUserDO selectByMobile( @Param("mobile") String mobile); + + EnterpriseUserDO selectByInvestmentManager( @Param("investmentManager") String investmentManager); + /** + * @Auther: wangshuo + * @Date: 2024/4/24 + * @description: 根据userid查询名字 + */ + List selectNameByUserId(@Param("userIdList") List userId); + + /** + * 获取部门人员 + * @return + */ + List getUserIdListByRegionId( @Param("regionId") Long regionId, @Param("userIdList") List userId); + /** + * 获取部门人员 + * @return + */ + List getUserListByRegionId( @Param("regionId") Long regionId); + +} \ 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 new file mode 100644 index 000000000..cbad732f2 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/EnterpriseUserRoleMapper.java @@ -0,0 +1,80 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.EnterpriseUserRole; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface EnterpriseUserRoleMapper { + /** + * 主键查询 + */ + EnterpriseUserRole selectByPrimaryKey( @Param("id") String id); + + /** + * 根据userId查询该用户与钉钉角色、职位的映射关系 + */ + List selectDingRoleMappingByUserId( @Param("userId") String userId); + + List listsUserRoleByUserIdListAndSource( @Param("userIds") List userIds, @Param("source") String source); + + List selectMdtRoleMappingByUserId( @Param("userId") String userId); + /** + * 根据角色id查询 + */ + List selectByRoleId( @Param("roleId") String roleId); + + /** + * 根据userId查询 + */ + List selectIdsByUserId( @Param("userId") String userId); + + List selectIdsByUserIds( @Param("userIds") List userIds); + + /** + * 根据用户id列表查询 + */ + List selectByUserIdList( @Param("userIds") List userIds); + + EnterpriseUserRole selectByUserIdAndRoleId( @Param("userId") String userId, @Param("roleId") String roleId); + /** + * 获取某个角色的用户 + * + * @param userIds + * @param roleId + * @return + */ + List selectUserIdByRoleId( @Param("userIds") List userIds, @Param("roleId") String roleId); + /** + * 获取用户有哪些角色 + * + * @param userId + * @return + */ + List selectRoleIdsByUserId( @Param("userId") String userId); + + /** + * 获取角色下的用户 + * + * @param roleId + * @return + */ + List selectUserIdsByRoleId( @Param("roleId") String roleId); + + /** + * 获取角色列表下的用户 + * + * @param roleIds + * @return + */ + List selectUserIdsByRoleIdList( @Param("roleIds") List roleIds); + + List getUserIdsByRoleIds( @Param("roleIds")List roleIds, @Param("userIds")List userIds); + + List getUserRoleIds( @Param("userId") String userId); + + List getUserIdsByRoleIdList( @Param("roleIdList")List roleIdList); + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/FirstOrderMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/FirstOrderMapper.java new file mode 100644 index 000000000..81d30dccd --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/FirstOrderMapper.java @@ -0,0 +1,11 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.openPreparation.FirstOrderDTO; +import com.cool.store.entity.FirstOrderDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +public interface FirstOrderMapper extends Mapper { + + FirstOrderDTO selectByShopId (@Param("shopId") Long shopId); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/FranchiseFeeMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/FranchiseFeeMapper.java new file mode 100644 index 000000000..168ef8396 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/FranchiseFeeMapper.java @@ -0,0 +1,10 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.FranchiseFeeDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +public interface FranchiseFeeMapper extends Mapper { + FranchiseFeeDO selectByShopId(@Param("shopId") Long shopId); + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyContentInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyContentInfoMapper.java new file mode 100644 index 000000000..74d727768 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyContentInfoMapper.java @@ -0,0 +1,62 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.content.ContentQueryListDto; +import com.cool.store.entity.HyContentInfoDO; +import com.cool.store.vo.HyContentInfoVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author zhangchenbiao + * @date 2023-05-29 03:50 + */ +public interface HyContentInfoMapper { + /** + * + * 默认插入方法,只会给有值的字段赋值 + * 会对传进来的字段做判空处理,如果字段为空,则使用数据库默认字段或者null + * dateTime:2023-05-29 03:50 + */ + int insertSelective(@Param("record") HyContentInfoDO record); + + /** + * + * 默认更新方法,根据主键更新,不会把null值更新到数据库,避免覆盖之前有值的 + * dateTime:2023-05-29 03:50 + */ + int updateByPrimaryKeySelective(@Param("record") HyContentInfoDO record); + + /** + * 删除方法 + * @param contentId + */ + void deleteSelective(@Param("contentId") String contentId); + + /** + * 分页查询动态列表 + * 根据传入参数匹配 + */ + List queryContentList(ContentQueryListDto dto); + + + /** + * C 端使用的动态查询 + */ + List queryContentListForC(ContentQueryListDto dto); + + /** + * 根据contentId查询动态详情 + */ + HyContentInfoDO queryContentInfo(@Param("contentId") String contentId); + + /** + * 标题是否重复 + */ + Boolean whetherTitleDuplicated(@Param("contentTitle") String contentTitle); + + /** + * 查询动态标题 + */ + List queryTitles(); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyOpenAreaInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyOpenAreaInfoMapper.java new file mode 100644 index 000000000..e4aea5f83 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyOpenAreaInfoMapper.java @@ -0,0 +1,118 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.HyOpenAreaInfoDO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author zhangchenbiao + * @date 2023-05-29 03:51 + */ +public interface HyOpenAreaInfoMapper { + /** + * + * 默认插入方法,只会给有值的字段赋值 + * 会对传进来的字段做判空处理,如果字段为空,则使用数据库默认字段或者null + * dateTime:2023-05-29 03:51 + */ + int insertSelective(@Param("record") HyOpenAreaInfoDO record); + + /** + * + * 默认更新方法,根据主键更新,不会把null值更新到数据库,避免覆盖之前有值的 + * dateTime:2023-05-29 03:51 + */ + int updateByPrimaryKeySelective(@Param("record") HyOpenAreaInfoDO record); + + /** + * 查询重点城市 + * @return + */ + List queryKeyOpenArea(@Param("keyword") String keyword,@Param("keyOpenStatus") Integer keyOpenStatus); + + + /** + * 查询所有 + * @return + */ + List queryByKeyword(@Param("keyword") String keyword, + @Param("applyFlag") Boolean applyFlag, + @Param("areaStatus") String areaStatus, + @Param("filterData") Boolean filterData); + + /** + * 查询所有一级城市 (所有省份+直辖市) + * @return + */ + List queryFirstLevel(); + + + /** + * 查询所有一级城市 (所有省份+直辖市) + * @return + */ + List queryByIdsExcludeFirstLevel(@Param("ids") List ids); + + + /** + * 查询子列表 + * @return + */ + List getChildrenList(@Param("parentId") Long parentId); + + Integer getChildrenCount(@Param("type") String type , + @Param("parentId") Long parentId); + + + /** + * 更新城市昨天 + * @param backgroundBanner + * @param detailBanner + * @param areaStatus + * @param updateUserId + * @param ids + * @return + */ + int batchUpdateById(@Param("backgroundBanner") String backgroundBanner, + @Param("detailBanner") String detailBanner, + @Param("areaStatus") String areaStatus, + @Param("updateUserId") String updateUserId, + @Param("ids") List ids); + + int batchUpdateByParentId(@Param("backgroundBanner") String backgroundBanner, + @Param("detailBanner") String detailBanner, + @Param("areaStatus") String areaStatus, + @Param("updateUserId") String updateUserId, + @Param("parentIdList") List parentIdList); + + /** + * 根据idList查询数据 + * @param idList + * @return + */ + List selectByIds(@Param("idList") List idList); + + HyOpenAreaInfoDO selectById(@Param("id") Long id); + + /** + * 获取所有的区域 + * @return + */ + List getAllOpenArea(); + + /** + * 过滤叶子节点 + * @param openAreaIds + * @return + */ + List filterLeafNode(@Param("openAreaIds") List openAreaIds); + + List getSonArea(@Param("id") String id); + + List getProvinceAllCode(@Param("id") String id); + + HyOpenAreaInfoDO selectByAreaPath(@Param("areaPath") String areaPath); + + List selectAllCity(); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLabelGroupMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLabelGroupMapper.java new file mode 100644 index 000000000..0c7881255 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLabelGroupMapper.java @@ -0,0 +1,34 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.HyPartnerLabelGroupDO; +import com.cool.store.vo.LabelGroupListVo; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * @author Fun Li 2023/8/10 13:25 + * @version 1.0 + */ +@Mapper +public interface HyPartnerLabelGroupMapper { + + int deleteByPrimaryKey(Long id); + + int insert(HyPartnerLabelGroupDO record); + + int insertSelective(HyPartnerLabelGroupDO record); + + HyPartnerLabelGroupDO selectByPrimaryKey(Long id); + + List selectSelective(HyPartnerLabelGroupDO record); + + List getLabelGroupList(HyPartnerLabelGroupDO record); + + List getLabelGroupListOrder(HyPartnerLabelGroupDO record); + + int updateByPrimaryKeySelective(HyPartnerLabelGroupDO record); + + int updateByPrimaryKey(HyPartnerLabelGroupDO record); + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLabelMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLabelMapper.java new file mode 100644 index 000000000..747e06f68 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLabelMapper.java @@ -0,0 +1,38 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.label.LabelListDTO; +import com.cool.store.entity.HyPartnerLabelDO; +import com.cool.store.vo.LabelListVo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author Fun Li + * @date 2023-08-10 + */ +public interface HyPartnerLabelMapper { + int deleteByPrimaryKey(Long id); + + int insert(HyPartnerLabelDO record); + + int insertSelective(HyPartnerLabelDO record); + + HyPartnerLabelDO selectByPrimaryKey(Long id); + + List selectSelective(HyPartnerLabelDO labelDO); + + int updateByPrimaryKeySelective(HyPartnerLabelDO record); + + int updateByPrimaryKey(HyPartnerLabelDO record); + + List getLabelList(LabelListDTO dto); + + /** + * 某个标签组内是否有未删除的标签 + * @param labelGroupId 标签组 id + */ + Boolean whetherGroupInUse(@Param("labelGroupId") Long labelGroupId); + + List getLabelListByIds(@Param("labelIds") List labelIds); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerUserChannelMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerUserChannelMapper.java new file mode 100644 index 000000000..7670ff35e --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerUserChannelMapper.java @@ -0,0 +1,34 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.HyPartnerUserChannelDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + + +@Mapper +public interface HyPartnerUserChannelMapper { + int deleteByPrimaryKey(Long id); + + int insert(HyPartnerUserChannelDO record); + + int insertSelective(HyPartnerUserChannelDO record); + + HyPartnerUserChannelDO selectByPrimaryKey(Long id); + + int updateByPrimaryKeySelective(HyPartnerUserChannelDO record); + + int updateByPrimaryKey(HyPartnerUserChannelDO record); + + HyPartnerUserChannelDO selectByChannelId(@Param("channelId") Long id); + + HyPartnerUserChannelDO selectByChannelName(@Param("channelName") String channelName); + + List getAllUserChannel(); + + List getUserChannelByIds(List userChannelIds); + + HyPartnerUserChannelDO selectByChannel(@Param("channelId") Long channelId,@Param("channelName") String channelName); + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerUserInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerUserInfoMapper.java new file mode 100644 index 000000000..36ce78423 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerUserInfoMapper.java @@ -0,0 +1,52 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.HyPartnerUserInfoDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author zhangchenbiao + * @date 2023-05-29 03:53 + */ +@Mapper +public interface HyPartnerUserInfoMapper { + /** + * + * 默认插入方法,只会给有值的字段赋值 + * 会对传进来的字段做判空处理,如果字段为空,则使用数据库默认字段或者null + * dateTime:2023-05-29 03:53 + */ + int insertSelective(@Param("record") HyPartnerUserInfoDO record); + + /** + * + * 默认更新方法,根据主键更新,不会把null值更新到数据库,避免覆盖之前有值的 + * dateTime:2023-05-29 03:53 + */ + int updateByPrimaryKeySelective(@Param("record") HyPartnerUserInfoDO record); + + /** + * 根据partnerID查询用户信息 + * @param partnerId + * @return + */ + HyPartnerUserInfoDO selectByPartnerId(@Param("partnerId") String partnerId); + + HyPartnerUserInfoDO selectByMobile(@Param("mobile") String mobile); + + HyPartnerUserInfoDO selectByOpenid(@Param("openid") String openid); + + /** + * 根据partnerIDs批量查询用户信息 + * @param partnerIdList + * @return + */ + List selectByPartnerIds(@Param("partnerIdList") List partnerIdList); + + int updateByPartnerId(@Param("record") HyPartnerUserInfoDO record); + + String selectLastCrmCreateTime(); + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/IntentAgreementMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/IntentAgreementMapper.java new file mode 100644 index 000000000..1deb6801d --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/IntentAgreementMapper.java @@ -0,0 +1,35 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.SigningBaseInfoDO; +import com.cool.store.request.IntentAgreementSubmitRequest; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface IntentAgreementMapper { + + boolean insert(@Param("request") SigningBaseInfoDO request); + + SigningBaseInfoDO selectByPartnerIdOrLineId(@Param("partnerId") String partnerId, + @Param("lineId") Long lineId); + + /** + * 判断身份证或营业执照是否有重复 + * @param request + * @return + */ + SigningBaseInfoDO judge(@Param("request") IntentAgreementSubmitRequest request); + + void updateAuditId(@Param("lineId") Long id, + @Param("auditId") Long auditId); + + + /** + * 查询签约信息 + * @param lineIds + * @return + */ + List selectByLineIds(List lineIds); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/JoinIntentionMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/JoinIntentionMapper.java new file mode 100644 index 000000000..a159bfafb --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/JoinIntentionMapper.java @@ -0,0 +1,21 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.MemberQuestionDO; +import com.cool.store.vo.PartnerBaseInfoVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface JoinIntentionMapper { + + boolean insertOrUpdate(@Param("request") MemberQuestionDO request); + + MemberQuestionDO getByLineId(@Param("lineId") Long lineId); + + List getByLineIds(@Param("lineIds") List lineIds); + + void updateAuditIdByLineId(@Param("auditId") Long auditId, + @Param("lineId") Long id); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineAuditInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineAuditInfoMapper.java new file mode 100644 index 000000000..4efd9f7f3 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineAuditInfoMapper.java @@ -0,0 +1,27 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.LineAuditInfoDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface LineAuditInfoMapper extends Mapper { + + + /** + * getLineAuditInfoList + * @param ids + * @return + */ + List getLineAuditInfoList(@Param("ids") List ids); + + /** + * 结束跟进记录 + * @param lineId + * @return + */ + LineAuditInfoDO getLineAuditInfo(@Param("lineId") Long lineId); + + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineCalendarsEventMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineCalendarsEventMapper.java new file mode 100644 index 000000000..c43c6bd40 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineCalendarsEventMapper.java @@ -0,0 +1,29 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.LineCalendarsEventDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface LineCalendarsEventMapper extends Mapper { + + List getInterviewerLineCalendarsEvent(@Param("interviewerUserId")String interviewerUserId, @Param("interviewDate")String interviewDate); + + List getRegionLineCalendarsEvent(@Param("regionId")Long regionId, @Param("interviewDate")String interviewDate); + + /** + * 被占用次数 + * @param interviewType + * @param regionId + * @param interviewerUserId + * @param startTime + * @param endTime + * @param excludeInterviewId + * @return + */ + Integer getOccupiedCount(@Param("interviewType") Integer interviewType, @Param("regionId") Long regionId, @Param("interviewerUserId") String interviewerUserId, + @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("excludeInterviewId")Long excludeInterviewId); + + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineFollowLogMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineFollowLogMapper.java new file mode 100644 index 000000000..392f459dc --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineFollowLogMapper.java @@ -0,0 +1,16 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.LineFollowLogDO; +import com.github.pagehelper.Page; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +public interface LineFollowLogMapper extends Mapper { + + /** + * + * @param lineId + * @return + */ + Page getFollowLogPage(@Param("lineId")Long lineId); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInfoMapper.java new file mode 100644 index 000000000..8eeea8f33 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInfoMapper.java @@ -0,0 +1,107 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.InvestmentCountDTO; +import com.cool.store.dto.PendingCountDTO; +import com.cool.store.dto.openPreparation.PlanLineDTO; +import com.cool.store.entity.LineInfoDO; +import com.cool.store.request.LineListRequest; +import com.cool.store.request.PartnerRequest; +import com.cool.store.request.PointLinePageRequest; +import com.cool.store.request.PublicLineListRequest; +import com.github.pagehelper.Page; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface LineInfoMapper extends Mapper { + LineInfoDO getByPartnerId(@Param("partnerId") String partnerId); + + LineInfoDO getByLineId(@Param("lineId") Long lineId); + List getByLineIds(@Param("lineIds") List lineIds); + /** + * 查询招商经理待处理数据 + * @param investmentManagerUserId + * @return + */ + List listByInvestmentManager(@Param("investmentManagerUserId") String investmentManagerUserId, @Param("codes") List codes); + + /** + * 面试官待处理 + * @param interviewId + * @param interviewType + * @param codes + * @return + */ + List listByInterview(@Param("interviewId") String interviewId, + @Param("interviewType") Integer interviewType, + @Param("pendingInterviewStatusList") List pendingInterviewStatusList, + @Param("notPassingTheInterview") Integer notPassingTheInterview, + @Param("codes") List codes); + + /** + * 我的线索列表 + * @param lineListRequest + * @return + */ + List lineList(@Param("request") LineListRequest lineListRequest, + @Param("wantShopAreaName") String wantShopAreaName, + @Param("userId") String userId, + @Param("wantShopAreaIds") List wantShopAreaIds); + + List partnerList(@Param("request") PartnerRequest partnerRequest, + @Param("wantShopAreaName") String wantShopAreaName, + @Param("userId") String userId, + @Param("wantShopAreaIds") List wantShopAreaIds); + + + /** + * 公海线索列表 + * @param publicLineListRequest + * @return + */ + List publicLineList(@Param("request") PublicLineListRequest publicLineListRequest, @Param("publicFlag") Boolean publicFlag); + + /** + * 根据lineId判断是更新还是插入 + * @param lineInfoParam + */ + void insertOrUpdate(@Param("param") LineInfoDO lineInfoParam); + + void toExperiencing(@Param("lineIds") List lineIds, + @Param("code") Integer code); + + /** + * 待处理数据 + * @param userId + * @return + */ + PendingCountDTO pendingCount(@Param("userId") String userId); + + InvestmentCountDTO investmentData(@Param("userId") String userId); + + + + Integer batchUpdateInterviewWorkflowStage(@Param("lineIds") List lineIds, @Param("workflowSubStage")Integer workflowSubStage, @Param("workflowSubStageStatus")Integer workflowSubStageStatus); + + /** + * 选址人员获取蓄水池状态的加盟商 + * @param request + * @return + */ + Page getLinePageByDevelopmentManager(@Param("request") PointLinePageRequest request); + + /** + * @Auther: wangshuo + * @Date: 2024/4/23 + * @description: 开业运营方案根据line id join enterprise_user 查询 + */ + List getLines(@Param("lineIdList") List lineIdList); + + /** + * 获取线索手机号 + * @param lineIds + * @return + */ + List getLineMobile(@Param("lineIds") List lineIds); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInterviewMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInterviewMapper.java new file mode 100644 index 000000000..71ec4545b --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInterviewMapper.java @@ -0,0 +1,79 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.interview.LineInterviewPageDTO; +import com.cool.store.entity.LineInterviewDO; +import com.cool.store.request.LineInterviewPageRequest; +import com.github.pagehelper.Page; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface LineInterviewMapper extends Mapper { + + /** + * 获取面试信息 + * @param lineId + * @param interviewType + * @return + */ + LineInterviewDO getInterviewInfo(@Param("lineId") Long lineId, @Param("interviewType") Integer interviewType); + + /** + * getInterviewByLindIds + * @param lineIds + * @param interviewType + * @return + */ + List getInterviewByLindIds(@Param("lineIds") List lineIds, @Param("interviewType") Integer interviewType); + + /** + * 获取面试分页 + * @param request + * @return + */ + Page getInterviewerPage(LineInterviewPageRequest request); + + /** + * 根据房间号获取面试信息 + * @param roomId + * @return + */ + LineInterviewDO getInterviewInfoByRoomId(@Param("roomId") String roomId); + + /** + * 删除面试信息 + * @param interviewId + * @return + */ + Integer deleteInterviewInfo(@Param("interviewId")Long interviewId); + + /** + * 获取面试信息 + * @param lineId + * @return + */ + List getInterviewByLineId(@Param("lineId") Long lineId); + + /** + * 获取待审核面试信息 + * @return + */ + List getWaitAuditInterview(); + + /** + * 批量更新面试状态 + * @param interviewIds + * @param interviewStatus + * @return + */ + Integer batchUpdateInterviewStatus(@Param("interviewIds") List interviewIds, @Param("interviewStatus") Integer interviewStatus); + + /** + * 获取面试提醒列表 + * @param startTime + * @param endTime + * @return + */ + List getInterviewRemindList(@Param("startTime") String startTime, @Param("endTime") String endTime); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LinePayMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LinePayMapper.java new file mode 100644 index 000000000..6368ea507 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LinePayMapper.java @@ -0,0 +1,58 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.LinePayDO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author wxp + * @date 2024-03-27 09:25 + */ +public interface LinePayMapper { + /** + * + * 默认插入方法,只会给有值的字段赋值 + * 会对传进来的字段做判空处理,如果字段为空,则使用数据库默认字段或者null + * dateTime:2024-03-27 09:25 + */ + int insertSelective(LinePayDO record); + + /** + * + * 默认查询方法,通过主键获取所有字段的值 + * dateTime:2024-03-27 09:25 + */ + LinePayDO selectByPrimaryKey(Long id); + + /** + * + * 默认更新方法,根据主键更新,不会把null值更新到数据库,避免覆盖之前有值的 + * dateTime:2024-03-27 09:25 + */ + int updateByPrimaryKeySelective(LinePayDO record); + + /** + * + * 默认更新方法,根据主键物理删除 + * dateTime:2024-03-27 09:25 + */ + int deleteByPrimaryKey(Long id); + + LinePayDO getLinePayByLineId(@Param("lineId") Long lineId); + + LinePayDO getByLineIdAndPayTypeAndShopId(@Param("lineId") Long lineId, + @Param("payBusinessType")Integer payBusinessType, + @Param("shopId") Long shopId); + + /** + * getLinePayByLineIds + * @param lineIds + * @return + */ + List getLinePayByLineIds(@Param("lineIds") List lineIds, @Param("shopIds") List shopIds, @Param("businessType") Integer businessType); + + void updateByPidAndLid(@Param("lineId") Long lineId, + @Param("partnerId") String partnerId, + @Param("auditId") Long auditId); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/NewStoreOpeningMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/NewStoreOpeningMapper.java new file mode 100644 index 000000000..94aca26d0 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/NewStoreOpeningMapper.java @@ -0,0 +1,7 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.NewStoreOpeningDO; +import tk.mybatis.mapper.common.Mapper; + +public interface NewStoreOpeningMapper extends Mapper { +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/OpenAcceptanceInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/OpenAcceptanceInfoMapper.java new file mode 100644 index 000000000..e2820cee9 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/OpenAcceptanceInfoMapper.java @@ -0,0 +1,17 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.OpenAcceptanceInfoDO; +import com.cool.store.request.OpenAcceptanceRequest; +import com.cool.store.vo.OpenAcceptanceInfoListVO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface OpenAcceptanceInfoMapper extends Mapper { + + + List openAcceptanceList(@Param("openAcceptance") OpenAcceptanceRequest openAcceptanceRequest); + + int shopOpenAcceptanceStatusUpdate(); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/OpenNewShopRecordMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/OpenNewShopRecordMapper.java new file mode 100644 index 000000000..c37e0673a --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/OpenNewShopRecordMapper.java @@ -0,0 +1,41 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.partner.PartnerOpenNewShopPageDTO; +import com.cool.store.entity.OpenNewShopRecordDO; +import com.cool.store.request.PartnerOpenNewShopPageRequest; +import com.github.pagehelper.Page; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface OpenNewShopRecordMapper extends Mapper { + + /** + * 获取老加盟商开新店列表 + * @param request + * @return + */ + Page getPartnerOpenNewShopPage(@Param("request") PartnerOpenNewShopPageRequest request); + + /** + * 获取待审核的记录 + * @param lineId + * @return + */ + OpenNewShopRecordDO getWaitAuditOpenNewShopRecord(@Param("lineId") Long lineId); + + /** + * 获取老加盟商开新店列表 + * @param lineId + * @return + */ + List getOpenNewShopRecordList(@Param("lineId") Long lineId); + + /** + * 删除老加盟商开新店 + * @param deleteIds + * @return + */ + Integer deleteOpenNewShopRecord(@Param("deleteIds") List deleteIds); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/OpeningOperationPlanMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/OpeningOperationPlanMapper.java new file mode 100644 index 000000000..3914d9568 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/OpeningOperationPlanMapper.java @@ -0,0 +1,25 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.openPreparation.OpenPlanShopInfoDTO; +import com.cool.store.entity.OpeningOperationPlanDO; +import com.cool.store.request.PlanListRequest; +import com.github.pagehelper.Page; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.Date; +import java.util.List; + +public interface OpeningOperationPlanMapper extends Mapper { + + OpeningOperationPlanDO selectByShopId(@Param("shopId") Long shopId); + + + Integer updateByShopId(@Param("shopId") Long shopId, @Param("auditId") Long auditId, @Param("resultType") Integer resultType); + /** + * @Auther: wangshuo + * @Date: 2024/4/24 + * @description: 开业运营方案,根据shopname获取列表 + */ + List getOpenPlanShopListByCondition(@Param("request") PlanListRequest request); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointAuditRecordMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointAuditRecordMapper.java new file mode 100644 index 000000000..78e6f2c0d --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointAuditRecordMapper.java @@ -0,0 +1,47 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.PointAuditRecordDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface PointAuditRecordMapper extends Mapper { + + /** + * 批量插入 + * @param addList + * @return + */ + Integer batchInsertSelective(@Param("addList") List addList); + + /** + * 获取处理记录 + * @param pointId + * @param cycleCount + * @return + */ + List getPointAuditRecord(@Param("pointId") Long pointId, @Param("cycleCount")Integer cycleCount); + + /** + * 删除未完成的处理记录 + * @param pointId + * @param cycleCount + * @return + */ + Integer deletePointAuditRecord(@Param("pointId") Long pointId, @Param("cycleCount") Integer cycleCount); + + /** + * 获取点位所有的审批记录 + * @param pointId + * @return + */ + List getPointAllAuditRecord(@Param("pointId") Long pointId); + + /** + * 获取提交时间 + * @param pointIds + * @return + */ + List getPointSubmitAuditTime(@Param("pointIds") List pointIds); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointDetailInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointDetailInfoMapper.java new file mode 100644 index 000000000..8664ec3c2 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointDetailInfoMapper.java @@ -0,0 +1,29 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.PointDetailInfoDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +public interface PointDetailInfoMapper extends Mapper { + + /** + * 获取详情id + * @param pointId + * @return + */ + Long getPointDetailIdByPointId(@Param("pointId") Long pointId); + + /** + * 获取详情 + * @param pointId + * @return + */ + PointDetailInfoDO getShopPointDetailInfoByPointId(@Param("pointId") Long pointId); + + /** + * 更新部分字段 + * @param update + * @return + */ + Integer updatePartFieldPointDetail(@Param("update") PointDetailInfoDO update); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointInfoMapper.java new file mode 100644 index 000000000..99cb06120 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointInfoMapper.java @@ -0,0 +1,91 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.point.LineCountDTO; +import com.cool.store.entity.PointInfoDO; +import com.cool.store.request.AllPointPageRequest; +import com.cool.store.request.PointPageRequest; +import com.cool.store.request.RecommendPointPageRequest; +import com.cool.store.vo.point.PointHomePageDataVO; +import com.cool.store.vo.point.PointPageVO; +import com.github.pagehelper.Page; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; +import java.util.Map; + +public interface PointInfoMapper extends Mapper { + + /** + * 获取我的数据 + * @param userId + * @return + */ + PointHomePageDataVO getMyPointData(@Param("userId") String userId); + + /** + * 获取我的铺位分页 + * @param request + * @return + */ + Page getMyPointPage(@Param("request") PointPageRequest request); + + /** + * 获取线索选择门店数 + * @param lineIds + * @return + */ + List getSelectedShopNum(@Param("lineIds") List lineIds); + + /** + * 获取铺位详情 + * @param pointIds + * @return + */ + List getPointListByIds(@Param("pointIds") List pointIds); + + /** + * 获取推荐铺位分页 + * @param request + * @return + */ + Page getRecommendPointList(@Param("request") RecommendPointPageRequest request); + + /** + * 更新铺位的拓展经理 + * @param lineId + * @param developmentManager + * @return + */ + Integer updateSelectedDevelopmentManager(@Param("lineId") Long lineId, @Param("developmentManager")String developmentManager); + + /** + * 获取团队铺位 + * @param request + * @return + */ + Page getTeamPointPage(@Param("request") AllPointPageRequest request); + + /** + * 回收铺位 + * @param pointId + * @return + */ + Integer recyclePoint(@Param("pointId") Long pointId); + + /** + * 根据shopId与lineId查找铺位信息 + * @param lineId + * @param shopId + * @return + */ + PointInfoDO getDataByShopIdAndLineId(@Param("lineId") Long lineId, + @Param("shopId") Long shopId); + + /** + * 完善铺位信息 + * @param request + * @return + */ + Integer perfectPointInfo(@Param("request") PointInfoDO request); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointRecommendMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointRecommendMapper.java new file mode 100644 index 000000000..3d7cb0b19 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointRecommendMapper.java @@ -0,0 +1,90 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.point.LineCountDTO; +import com.cool.store.dto.point.MiniPointPageDTO; +import com.cool.store.entity.PointRecommendDO; +import com.cool.store.request.MiniPointPageRequest; +import com.github.pagehelper.Page; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; +import java.util.Map; + +public interface PointRecommendMapper extends Mapper { + + /** + * 更新铺位推荐状态 + * @param pointId + * @param status + * @return + */ + Integer updateShopPointRecommendStatus(@Param("pointId") Long pointId, @Param("status") Integer status, @Param("excludeStatus") List excludeStatus); + + /** + * 跟进点位 和 推荐状态 更新推荐状态 + * @param pointId + * @param code + * @return + */ + Integer updateRecommendStatusByStatusAndPointId(@Param("pointId") Long pointId, @Param("status") Integer status, @Param("statusList") List statusList); + + /** + * 获取体检店铺数量 + * @param lineIds + * @return + */ + List getPushShopNumMap(@Param("lineIds") List lineIds); + + /** + * 获取推荐列表 + * @param lineId + * @return + */ + List getRecommendPointList(@Param("lineId") Long lineId); + + /** + * 批量新增 + * @param recommendList + * @return + */ + Integer batchInsert(@Param("recommendList") List recommendList); + + /** + * 转让线索更新推荐状态 + * @param lineId + * @return + */ + Integer turnLineUpdateRecommendStatus(@Param("lineId") Long lineId, @Param("developmentManager")String developmentManager); + + /** + * 线索获取推荐铺位列表 + * @param request + * @return + */ + Page getLineRecommendPointPage(@Param("request") MiniPointPageRequest request); + + /** + * 更新推荐选择状态 + * @param pointId + * @param lineId + * @return + */ + Integer updateStatusByPointIdAndLineId(@Param("pointId") Long pointId, @Param("lineId") Long lineId); + + /** + * 铺位拒绝 + * @param lineId + * @param pointId + * @param reason + * @return + */ + Integer rejectPoint(@Param("lineId") Long lineId, @Param("pointId") Long pointId, @Param("reason") String reason); + + /** + * 获取铺位推送过哪些线索 + * @param pointId + * @return + */ + List getRecommendPointListByPointId(@Param("pointId") Long pointId); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointTodoInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointTodoInfoMapper.java new file mode 100644 index 000000000..438aed108 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointTodoInfoMapper.java @@ -0,0 +1,68 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.PointAuditRecordDO; +import com.cool.store.entity.PointInfoDO; +import com.cool.store.entity.PointTodoInfoDO; +import com.cool.store.request.PointTodoPageRequest; +import com.github.pagehelper.Page; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface PointTodoInfoMapper extends Mapper { + + /** + * 批量插入 + * @param addList + * @return + */ + Integer batchInsertSelective(@Param("addList") List addList); + + /** + * 获取待办用户列表 + * @param pointId + * @return + */ + List getTodoUserList(@Param("pointId") Long pointId); + + /** + * 获取待办列表 + * @param pointId + * @return + */ + List getTodoList(@Param("pointId") Long pointId); + + /** + * 更新待办 + * @param pointId + * @param code + * @param cycleCount + * @param handlerUserId + * @return + */ + Integer updatePointTodoInfo(@Param("pointId") Long pointId, @Param("nodeNo") Integer nodeNo, @Param("cycleCount") Integer cycleCount, @Param("handlerUserId") String handlerUserId); + + /** + * 获取用户关于某个铺位的待办 + * @param userId + * @param pointId + * @return + */ + PointTodoInfoDO getPointToDoByUserIdAndPointId(String userId, Long pointId); + + /** + * 获取待办 + * @param request + * @return + */ + Page getUserTodoList(@Param("request") PointTodoPageRequest request); + + /** + * 获取当前节点 + * @param pointId + * @return + */ + Integer getCurNodeNoByPoint(@Param("pointId") Long pointId); + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/RegionAreaConfigMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/RegionAreaConfigMapper.java new file mode 100644 index 000000000..003cddacf --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/RegionAreaConfigMapper.java @@ -0,0 +1,55 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.RegionAreaConfigDO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author wxp + * @date 2024-03-27 09:25 + */ +public interface RegionAreaConfigMapper { + /** + * + * 默认插入方法,只会给有值的字段赋值 + * 会对传进来的字段做判空处理,如果字段为空,则使用数据库默认字段或者null + * dateTime:2024-03-27 09:25 + */ + int insertSelective(RegionAreaConfigDO record); + + /** + * + * 默认查询方法,通过主键获取所有字段的值 + * dateTime:2024-03-27 09:25 + */ + RegionAreaConfigDO selectByPrimaryKey(Long id); + + /** + * + * 默认更新方法,根据主键更新,不会把null值更新到数据库,避免覆盖之前有值的 + * dateTime:2024-03-27 09:25 + */ + int updateByPrimaryKeySelective(RegionAreaConfigDO record); + + /** + * + * 默认更新方法,根据主键物理删除 + * dateTime:2024-03-27 09:25 + */ + int deleteByPrimaryKey(Long id); + + void deleteRegionAreaConfigByRegionId(@Param("regionId") Long regionId); + + void deleteByWantShopAreaIds(@Param("wantShopAreaIds") List wantShopAreaIds); + + void batchInsertOrUpdateRegionAreaConfig(@Param("regionAreaConfigList") List regionAreaConfigList); + + List listAreaByRegionId(@Param("regionId") Long regionId); + + Long getByWantShopAreaId(@Param("wantShopAreaId") Long wantShopAreaId); + + List listAreaByRegionIdList(@Param("regionIdList") List regionIdList); + + +} \ 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 new file mode 100644 index 000000000..df80b6d95 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/RegionMapper.java @@ -0,0 +1,111 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.RegionNode; +import com.cool.store.entity.RegionDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author shoul + */ +@Mapper +public interface RegionMapper { + + /** + * 获取所有的区域包含删除区域 + * + * @return + */ + List getRegionsByEid( @Param("regionId") Long regionId); + + /** + * 获取区域列表 + * + * @param regionIds + * @return + */ + List getRegionByRegionIdsForMap( @Param("regionIds") List regionIds); + /** + * 获取区域 + * + * @param regionId + * @return + */ + RegionNode getRegionByRegionId( @Param("regionId") String regionId); + + /** + * 获取区域列表(不包含删除) + * + * @param regionIds + * @return + */ + List getRegionByRegionIds( @Param("regionIds") List regionIds); + + /** + * 区域列表(包含删除) + * + * @param ids + * @return + */ + List getByIds(@Param("list")List ids); + + List getRegionPathByIds(@Param("list")List ids); + + RegionDO getByRegionId( @Param("regionId") Long regionId); + + List getRegionsByParentId( @Param("parentId") Long parentId); + + List listRegionByIds( @Param("regionIds") List regionIds); + + List listRegionByRegionPath(@Param("regionPath") String regionPath); + + /** + * 筛选删除状态的 + * + * @param regionId + * @return + */ + RegionDO getByRegionIdExcludeDeleted( @Param("regionId") Long regionId); + + /** + * 获取子区域 + * + * @param parentId + * @return + */ + List getSubRegion( @Param("parentId")Long parentId); + /** + * 获取区域范围内的区域id + * + * @param regionPaths + * @return + */ + List getSubIdsByRegionIds( @Param("regionPaths")List regionPaths); + + List getSubRegionIdsByRegionIds( @Param("regionIds")List regionIds); + + List getStoreIdsByRegionIds( @Param("regionIds")List regionIds); + + List getSubIdsByRegionpaths( @Param("regionPaths")List regionPaths); + + List getRegionPathByRegionIds( @Param("regionIds")List regionIds); + + List getCompRegionByRegionIds(@Param("compParentIdList") List compParentIdList); + + int countByRegionIdList(@Param("regionIdList") List regionIdList); + + List getRegionByParentIds(@Param("regionIdList") List regionIdList); + + List listByThirdRegionType(@Param("parentId")Long parentId, @Param("thirdRegionType")String thirdRegionType); + + + RegionDO getRegionByStoreId(@Param("storeId") String storeId); + + RegionDO getBigRegionByRegionId(@Param("regionId") long regionId); + + List getFightRegionByRegionIds(@Param("regionIds") List regionIds); + + RegionDO getRegionInfoBySynDingDeptId(@Param("synDingDeptId") Long synDingDeptId); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/RegionQrcodeConfigMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/RegionQrcodeConfigMapper.java new file mode 100644 index 000000000..484520863 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/RegionQrcodeConfigMapper.java @@ -0,0 +1,43 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.RegionQrcodeConfigDO; +import org.apache.ibatis.annotations.Param; + +/** + * @author wxp + * @date 2024-03-27 09:25 + */ +public interface RegionQrcodeConfigMapper { + /** + * + * 默认插入方法,只会给有值的字段赋值 + * 会对传进来的字段做判空处理,如果字段为空,则使用数据库默认字段或者null + * dateTime:2024-03-27 09:25 + */ + int insertSelective(RegionQrcodeConfigDO record); + + /** + * + * 默认查询方法,通过主键获取所有字段的值 + * dateTime:2024-03-27 09:25 + */ + RegionQrcodeConfigDO selectByPrimaryKey(Long id); + + /** + * + * 默认更新方法,根据主键更新,不会把null值更新到数据库,避免覆盖之前有值的 + * dateTime:2024-03-27 09:25 + */ + int updateByPrimaryKeySelective(RegionQrcodeConfigDO record); + + /** + * + * 默认更新方法,根据主键物理删除 + * dateTime:2024-03-27 09:25 + */ + int deleteByPrimaryKey(Long id); + + RegionQrcodeConfigDO getByRegionId( @Param("regionId") Long regionId); + + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopAuditInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopAuditInfoMapper.java new file mode 100644 index 000000000..3391e2f54 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopAuditInfoMapper.java @@ -0,0 +1,19 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.ShopAuditInfoDO; +import com.cool.store.vo.ShopAuditInfoVO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface ShopAuditInfoMapper extends Mapper { + + ShopAuditInfoDO selectBykeyAndType(@Param("shopId") Long shopId); + + List getAuditInfoList(@Param("auditIds") List auditIds); + + List getListByShopIdAndType(@Param("shopId") Long shopId, + @Param("type") Integer type); + List getAuditList(@Param("shopId") Long shopId,@Param("auditType") Integer auditType); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopInfoMapper.java new file mode 100644 index 000000000..5d7552c2b --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopInfoMapper.java @@ -0,0 +1,92 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.Preparation.PreparationDTO; +import com.cool.store.dto.openPreparation.OpenPlanShopInfoDTO; +import com.cool.store.dto.point.LineCountDTO; +import com.cool.store.entity.PointInfoDO; +import com.cool.store.entity.ShopInfoDO; +import com.cool.store.request.PlanListRequest; +import com.cool.store.request.PreparationRequest; +import com.cool.store.vo.shop.StageShopCountVO; +import com.github.pagehelper.Page; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface ShopInfoMapper extends Mapper { + + + /** + * 批量新增 + * + * @param shopInfoList + * @return + */ + Integer batchAddShop(@Param("shopInfoList") List shopInfoList); + + /** + * 获取加盟商的店铺列表 + * + * @param lineId + * @return + */ + List getShopList(@Param("lineId") Long lineId); + + /** + * 店铺信息 + * + * @param lineId + * @param pointId + * @return + */ + ShopInfoDO getShopInfoByPointId(@Param("lineId") Long lineId, @Param("pointId") Long pointId); + + /** + * 获取各个阶段店铺数量 + * + * @param lineId + * @return + */ + StageShopCountVO getStageShopCount(@Param("lineId") Long lineId); + + /** + * 解绑店铺 + * + * @param shopId + * @return + */ + Integer unbindPoint(@Param("shopId") Long shopId); + + /** + * 批量获取铺位 + * + * @param shopIds + * @return + */ + List getShopListByIds(@Param("shopIds") List shopIds); + + /** + * @Auther: wangshuo + * @Date: 2024/4/25 + * @description: 根据idlist 获取storenum + */ + List queryStoreNumeListByid(@Param("shopIdList") List shopIdList); + + List getSelectedShopNum(@Param("lineIds") List lineIds); + + + List ListByCondition(@Param("request") PreparationRequest request); + + Long getRegionIdByid(@Param("shopId") Long shopId); + + ShopInfoDO selectByStoreNum(@Param("storeNum") String storeNum); + /** + * @Auther: wangshuo + * @Date: 2024/5/3 + * @description:根据区域id查询所有处于XXX的店铺 + */ + List selectShopListByRegionId(@Param("regionIds") List regionIds,@Param("shopSubStage") Integer shopSubStage,@Param("subStageStatus")List subStageStatus,@Param("keyWord")String keyWord); + + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopRentInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopRentInfoMapper.java new file mode 100644 index 000000000..08b9b31ea --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopRentInfoMapper.java @@ -0,0 +1,32 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.ShopRentInfoDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface ShopRentInfoMapper extends Mapper { + + /** + * 根据店铺id获取租赁合同 + * @param shopId + * @return + */ + ShopRentInfoDO getRentContractByShopId(@Param("shopId") Long shopId); + + /** + * 根据店铺id删除租赁合同 + * @param shopId + * @return + */ + Integer deleteRentContractByShopId(@Param("shopId") Long shopId); + + /** + * 批量获取租赁合同 + * @param shopIds + * @return + */ + List getRentContractByShopIds(@Param("shopIds") List shopIds); + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopStageInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopStageInfoMapper.java new file mode 100644 index 000000000..a918d2550 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopStageInfoMapper.java @@ -0,0 +1,158 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.Preparation.ScheduleDTO; +import com.cool.store.entity.ShopStageInfoDO; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.vo.Preparation.PreparationProcessVO; +import com.cool.store.vo.shop.RentInfoToDoVO; +import com.github.pagehelper.Page; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface ShopStageInfoMapper extends Mapper { + + /** + * 批量插入店铺阶段信息 + * @param addShopStageList + * @return + */ + Integer batchInsert(@Param("addShopStageList") List addShopStageList); + + /** + * 批量修改 + * @param addShopStageList + * @return + */ + Integer batchUpdate(@Param("addShopStageList") List addShopStageList); + + /** + * 获取店铺阶段信息 + * @param shopId + * @param shopStage + * @return + */ + List getShopStageInfo(@Param("shopId") Long shopId, @Param("shopStage") Integer shopStage); + + PreparationProcessVO getPreparationProcess(@Param("shopId") Long shopId); + + /** + * 查询结束阶段的数量 + * @param shopId + * @return + */ + Integer getAllCompletionCount(@Param("shopId") Long shopId); + + /** + * 跟新店铺阶段信息 + * @param shopId + * @param shopSubStage + * @param shopSubStageStatus + * @param isTerminated + * @param remark + * @return + */ + Integer updateShopStageInfo(@Param("shopId") Long shopId, @Param("shopSubStage") Integer shopSubStage, @Param("shopSubStageStatus") Integer shopSubStageStatus, + @Param("isTerminated")boolean isTerminated, @Param("remark") String remark); + + /** + * 批量更新阶段及审核信息 + * @param shopId + * @param updateList + * @return + */ + Integer batchUpdateShopStageStatus(@Param("shopId") Long shopId, @Param("updateList") List updateList); + + /** + * 更新阶段及审核信息 + * @param shopId + * @param shopSubStage + * @param shopSubStageStatus + * @param isTerminated + * @param remark + * @param auditId + * @return + */ + Integer updateShopStageAndAuditInfo(@Param("shopId") Long shopId, @Param("shopSubStage") Integer shopSubStage, @Param("shopSubStageStatus") Integer shopSubStageStatus, + @Param("isTerminated")boolean isTerminated, @Param("remark") String remark, @Param("auditId")Long auditId); + + /** + * 获取子阶段信息 + * @param shopId + * @param shopSubStage + * @return + */ + ShopStageInfoDO getShopSubStageInfo(@Param("shopId") Long shopId, @Param("shopSubStage") Integer shopSubStage); + /** + * @Auther: wangshuo + * @Date: 2024/5/3 + * @description:更新完成时间byshopId + */ + Integer updateByShopId(@Param("shopStageInfoDO") ShopStageInfoDO shopStageInfoDO); + /** + * 更新阶段到未开始状态 + * @param shopId + * @param shopSubStage + * @return + */ + Integer updateShopStageToNotStarted(@Param("shopId") Long shopId, @Param("shopSubStage") Integer shopSubStage); + + /** + * 获取租赁合同待办列表 + * @param userId + * @return + */ + Page getRentContractToDoPage(@Param("userId") String userId, @Param("shopSubStage")Integer shopSubStage, @Param("shopSubStageStatus") Integer shopSubStageStatus); + + List getShopIdListByStageStatus(@Param("shopSubStageStatus") Integer shopSubStageStatus); + + List getScheduleList(@Param("shopIds") List shopIds); + + List getShopContractActualCompletionTime(@Param("shopIds") List shopIds); + + /** + * 获取可以上传租赁合同的店铺id + * @param shopIds + * @return + */ + List getCanSubmitRentContractShopIds(@Param("shopIds") List shopIds); + /** + * @Auther: wangshuo + * @Date: 2024/5/5 + * @description:获取施工阶段未完成的店铺 + */ + List getShopContractIncompletion(); + + Integer batchUpdateStatus(@Param("shopIdList") List shopIdList,@Param("shopSubStageEnum") Integer shopSubStageEnum,@Param("shopSubStageStatusEnum") Integer shopSubStageStatusEnum) ; + + List getSpecialShopStageInfo(@Param("shopIds") List shopIds, + @Param("shopSubStage") Integer shopSubStage, + @Param("shopSubStageStatusList") List shopSubStageStatusList, + @Param("investmentUserId") String investmentUserId, + @Param("queryUserType") Integer queryUserType); + List getSubStageList(@Param("shopIds") List shopIds,@Param("shopSubStage") Integer shopSubStage); + + /** + * 获取线索处在某个阶段的某个状态的店铺数量 + * @param lineId + * @return + */ + Integer getShopCountByLineIdAndStageStatus(@Param("lineId")Long lineId, @Param("shopStage") Integer shopStage, @Param("shopSubStage") Integer shopSubStage, @Param("shopSubStageStatus") Integer shopSubStageStatus); + /** + * @Auther: wangshuo + * @Date: 2024/5/11 + * @description:获取处于a阶段或b阶段,和c阶段的 + */ + List getSubStageListBySubStageStatus(@Param("subStageStatusA")Integer subStageStatusA,@Param("subStageStatusB")Integer subStageStatusB,@Param("subStageStatusC")Integer subStageStatusC ); + + /** + * 根据shopId和阶段查数据 + * @param shopId + * @param shopSubStage + * @return + */ + ShopStageInfoDO getByShopIdAndSubStage(@Param("shopId") Long shopId, + @Param("shopSubStage") Integer shopSubStage); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SignFranchiseMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SignFranchiseMapper.java new file mode 100644 index 000000000..90374bcc0 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SignFranchiseMapper.java @@ -0,0 +1,13 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.SignFranchiseDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +public interface SignFranchiseMapper extends Mapper { + + SignFranchiseDO selectByShopId(@Param("shopId") Long shopId); + + void updateAuditByShopId(@Param("auditId") Long auditId, + @Param("shopId") Long shopId); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMapper.java new file mode 100644 index 000000000..d9f95274c --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/StoreMapper.java @@ -0,0 +1,27 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.StoreDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface StoreMapper { + + StoreDO getByStoreId(@Param("storeId") String storeId); + + List getEffectiveStoreByStoreIds(@Param("storeIds") List storeIds); + /** + * 根据区域Id查询所有门店(包含所有区域子节点) + * @param regionId + * @return + */ + List listStoreByRegionId(@Param("regionId") String regionId); + + + List getStoreNumByStoreIds(@Param("storeIds") List storeIds); + + StoreDO getByStoreNum(@Param("storeNum") String storeNum); + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SysMenuMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SysMenuMapper.java new file mode 100644 index 000000000..6429ee571 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SysMenuMapper.java @@ -0,0 +1,28 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.SysMenuDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 角色 + * + * @author shoul + */ +@Mapper +public interface SysMenuMapper { + /** + * 查询菜单(从平台库查询) + * @param parentIds + * @param platformType + * @param env + * @return + */ + List selectMenuAll(@Param("list") List parentIds, + @Param("platformType") String platformType, + @Param("env") String env); + + SysMenuDO selectMenu(@Param("id")Long id); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SysRoleMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SysRoleMapper.java new file mode 100644 index 000000000..e931decb1 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SysRoleMapper.java @@ -0,0 +1,142 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.UserRoleDTO; +import com.cool.store.entity.EnterpriseUserRole; +import com.cool.store.entity.SysRoleDO; +import com.cool.store.vo.SysRoleVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 角色 + */ +@Mapper +public interface SysRoleMapper { + + List getRoleUserByRoleEnum(@Param("roleEnum") String roleEnum, + @Param("positionType") String positionType); + + List getRoleUserByRoleAuth(@Param("roleAuth") String roleAuth, + @Param("positionType") String positionType); + + /** + * 根据用户角色查询角色下的用户人数 + * + * @param roleId + * + * @return + */ + Integer getPersonNumsByRoles( @Param("roleId") Long roleId); + + List userAndRolesByUserId(@Param("userIdList") List userIdList); + + /** + * 通过id查询所有用户和角色的关联关系 + * @param userId + * @return + */ + List selectRolesByuserId(@Param("userId") String userId); + + String getHighestPriorityRoleIdByUserId(@Param("userId") String userId); + + /** + * 根据角色名称查询是否存在 + * @param roleName + * @return + */ + List getRolesByName(@Param("roleName") String roleName); + + SysRoleDO getRolesByNameAndSource(@Param("roleName") String roleName, @Param("source") String source); + + /** + * 查询角色详情 + * @param roleId + * @return + */ + SysRoleDO getRole( @Param("roleId") Long roleId); + + /** + * roleEnum 不能为空 + * + * @param roleEnum + * @return + */ + SysRoleDO getRoleByRoleEnum( @Param("roleEnum") String roleEnum); + + /** + * 批量查询角色详情 + * + * @param roleIdList + * @return + */ + List getRoleList( @Param("roleIdList") List roleIdList); + + /** + * 批量查询角色详情(包括钉钉角色) + * @param roleIdList + * @return + */ + List getRoleByRoleIds( @Param("roleIdList") List roleIdList); + /** + * 批量查询角色名称列表 + * + * @param roleIdList + * @return + */ + List getRoleNameList( @Param("roleIdList") List roleIdList); + + /** + * 查优先级最高的角色 + * + * @param userId + * @return + */ + SysRoleDO getHighestPrioritySysRoleDoByUserId(@Param("userId") String userId); + /** + * 根据用户id查询角色,包括钉钉同步角色 + */ + List getSysRoleByUserId(@Param("userId") String userId); + + List listRoleByUserId(@Param("userId") String userId); + /** + * 查询钉钉角色中的人员Id + * @param roleId + * @return + */ + List selectUserByDingRole(@Param("roleId") Long roleId); + /** + * 根据职位id获取人员列表 + + * @param positionIds + * @return + */ + List getPositionUserIds( @Param("positionIds") List positionIds); + + List selectUserRoleBySourceAndUserId(@Param("source") String source , + @Param("userIdList") List userIdList); + + List getUserIdListByRoleIdList(@Param("roleIdList") List roleIdList); + /** + * 获取用户岗位信息 + * @param userIdList + * @return + */ + List getUserRoleNameByUserIdList( @Param("userIdList") List userIdList); + + /** + * 根据岗位来源和角色名称获取角色 + 企业id + * @param synDingRoleId 角色名称 + * @param source 岗位来源 + * @return: java.util.List + * @Author: xugangkun + * @Date: 2021/3/22 16:11 + */ + List selectBySynDingRoleIdAndSource( @Param("source") String source, @Param("synDingRoleId") Long synDingRoleId); + + List getRolesByNamesAndSource(@Param("roleNames") List roleNames, @Param("source") String source); + + List getXFStoreManager(@Param("roleNames") List roleNames); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SysRoleMenuMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SysRoleMenuMapper.java new file mode 100644 index 000000000..614ccac2a --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SysRoleMenuMapper.java @@ -0,0 +1,30 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.SysRoleMenuDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * describe: + * + * @author zhouyiping + * @date 2020/09/23 + */ +@Mapper +public interface SysRoleMenuMapper { + + List listSysRoleMenuByRoleIdOld(@Param("roleId")Long roleId, + @Param("platform")String platform); + + List listSysRoleMenuByRoleId(@Param("roleId")Long roleId, + @Param("platform")String platform); + + List listSysRoleMenuByPlatform( @Param("platform")String platform); + + List listSysRoleMenuIdByMenuId(@Param("platform")String platform, + @Param("menuId")Long menuId); + + List listRoleMenuIdByMenuIds(@Param("menuIds")List menuIds); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SystemBuildingShopMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SystemBuildingShopMapper.java new file mode 100644 index 000000000..e14518bfb --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/SystemBuildingShopMapper.java @@ -0,0 +1,11 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.SystemBuildingShopDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface SystemBuildingShopMapper extends tk.mybatis.mapper.common.Mapper { + void updateAuditByShopId(@Param("auditId") Long auditId, + @Param("shopId") Long shopId); +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/TempUserDetailMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/TempUserDetailMapper.java new file mode 100644 index 000000000..d22c78a80 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/TempUserDetailMapper.java @@ -0,0 +1,7 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.TempUserDetailDO; +import tk.mybatis.mapper.common.Mapper; + +public interface TempUserDetailMapper extends Mapper { +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ThirdDepartmentMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ThirdDepartmentMapper.java new file mode 100644 index 000000000..27279e073 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ThirdDepartmentMapper.java @@ -0,0 +1,39 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.ThirdDepartmentDO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 主应用移植,完整的使用去主应用找 + */ +public interface ThirdDepartmentMapper { + /** + * + * 默认查询方法,通过主键获取所有字段的值 + * dateTime:2024-04-02 04:42 + */ + ThirdDepartmentDO selectByPrimaryKey(Long id); + /** + * + * 默认更新方法,根据主键物理删除 + * dateTime:2024-04-02 04:42 + */ + int deleteByPrimaryKey(Long id); + + Integer deleteThirdDepartment(@Param("departmentCodes") List departmentCodes); + + void batchInsertOrUpdate(@Param("thirdDepartments") List thirdDepartments); + + List listByDeptPrincipals(@Param("deptPrincipals") List deptPrincipals); + + List listAllThirdDepartment(); + + ThirdDepartmentDO getByDepartmentCode(@Param("departmentCode") String departmentCode); + + ThirdDepartmentDO getByName(@Param("name")String name); + + + +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/TrainingExperienceMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/TrainingExperienceMapper.java new file mode 100644 index 000000000..7fb05c033 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/TrainingExperienceMapper.java @@ -0,0 +1,29 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.LeaseBaseInfoDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import javax.websocket.server.PathParam; +import java.util.List; + +@Mapper +public interface TrainingExperienceMapper { + + void insert(@Param("entity") LeaseBaseInfoDO toLeaseBaseInfoDO); + + void updateStatus(@Param("lineId") Long lineId, + @Param("status") Integer status, + @Param("abandonCause") String abandonCause); + + LeaseBaseInfoDO selectByLineId(@Param("lineId") Long lineId); + + List selectByLineIds(@Param("lineIds") List lineIds); + + /** + * 查询当日的门店体验数据 + * @return + */ + List selectESTime(); + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/TransferLogMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/TransferLogMapper.java new file mode 100644 index 000000000..de3a8ec1f --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/TransferLogMapper.java @@ -0,0 +1,20 @@ +package com.cool.store.mapper; + +import com.cool.store.dto.TransferLogDTO; +import com.cool.store.entity.TransferLogDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface TransferLogMapper extends Mapper { + + /** + * 根据线索ID查询日志 + * @param lindId + * @return + */ + List getTransferLogList(@Param("lindId") Long lindId); + + +} \ 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 new file mode 100644 index 000000000..bd16eeeef --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/UserAuthMappingMapper.java @@ -0,0 +1,107 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.UserAuthMappingDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 人员权限映射表 + * + * @author zyp + * @Description 人员权限映射 + */ +@Mapper +public interface UserAuthMappingMapper { + + /** + * 根据UserId获取权限 + * @param userId + * @return + */ + List listUserAuthMappingByUserId(@Param("userId") String userId); + + /** + * 根据UserId和权限来源获取权限 + + * @param userId + * @param source + * @return + */ + List listByUserIdAndSource( @Param("userId") String userId, @Param("source") String source); + /** + * 查询用户区域 + + * @param userList + * @return + */ + List listUserAuthMappingByUserIdList(@Param("userList") List userList); + + List listUserAuthMappingByMappingList(@Param("mappingIdList") List mappingIdList, + @Param("type") String type); + + /** + *查询不包含可视化范围的区域人员 + + * @param mappingIdList + * @return + */ + List listUserAuthMappingByAuth(@Param("type") String type, + @Param("mappingIdList") List mappingIdList, + @Param("positionType")String positionType, + @Param("notRoleAuth")String notRoleAuth); + + + List listUserAuthMappingByUserList(@Param("userIdList") List userIdList); + + + List listUserAuthMappingByUserAndType(@Param("userId") String userId, + @Param("type") String type); + /** + * 根据用户id获得权限映射信息主键列表 + + * @param userId + * @return: java.util.List + * @Author: xugangkun + * @Date: 2021/3/25 14:24 + */ + List selectIdsByUserId( @Param("userId") String userId); + + + List selectIdsByUserIds( @Param("userIds") List userIds); + + UserAuthMappingDO getUserAuthByUserIdAndMappingId( + @Param("userId") String userId, + @Param("mappingId") String mappingId, + @Param("type") String type); + + /** + * 分页订正 门店类型的权限 + * @param enterpriseId + * @return + */ + List listStoreAuthByEid(@Param("enterpriseId") String enterpriseId); + + List getAllAuthMapping(@Param("enterpriseId") String enterpriseId); + + List getUserIdsByMappingIds(@Param("mappingIdList") List mappingIdList); + + List getUserAuthByMappingIds(@Param("mappingIdList") List mappingIdList); + + List getMappingIdsByUserId(@Param("userId")String userId); + + + List getRegionIdByUserId(@Param("userId") String userId); + + /** + * 根据UserId和权限来源获取权限 + + * @param userIdList + * @param source + * @return + */ + List listByUserIdListAndSource(@Param("userIdList") List userIdList, @Param("source") String source); + + List getAllByUserIds(@Param("userIdsByRoleIdList") List userIdsByRoleIdList); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/UserRegionMappingMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/UserRegionMappingMapper.java new file mode 100644 index 000000000..7322e4a85 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/UserRegionMappingMapper.java @@ -0,0 +1,75 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.UserRegionMappingDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2022/2/24 16:08 + * @Version 1.0 + */ +@Mapper +public interface UserRegionMappingMapper { + + /** + * 根据人员id列表查询人员所属部门 + * + * @param userIds + * @return + */ + List listUserRegionMappingByUserId( @Param("userIds") List userIds); + + /** + * 查询部门下的人员 + * + * @param regionIds + * @return + */ + List selectUserListByRegionIds( @Param("regionIds") List regionIds); + + /** + * 查询指定部门人员数量 + * + * @param regionIds + * @return + */ + Integer selectUserCountByRegionIds( @Param("regionIds") List regionIds); + + /** + * 获取区域的直连人员数量 + * + * @param regionIds + * @return + */ + List> getRegionUserCount( @Param("regionIds") List regionIds); + + /** + * 根据Userids和regionids查询数据 + * + * @param userIds + * @param regionIds + * @return + */ + List listByUserIdsAndRegionIds(@Param("userIds") List userIds,@Param("regionIds") List regionIds); + + /** + * 获取用户属于哪些部门 + * + * @param userIds + * @return + */ + List getRegionIdsByUserIds(@Param("userIds") List userIds); + + /** + * 获取部门有哪些用户 + * + * @param regionIds + * @return + */ + List getUserIdsByRegionIds(@Param("regionIds") List regionIds); + +} diff --git a/coolstore-partner-dao/src/main/resources/mapper/AcceptanceInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/AcceptanceInfoMapper.xml new file mode 100644 index 000000000..ffecb3ac2 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/AcceptanceInfoMapper.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + id + ,shop_id,actual_entry_time,planned_completion_time,planned_start_time,decoration_planned_completion_time, + decoration_planned_start_time,construction_completion_time,engineering_acceptance_signatures, + operations_acceptance_signatures,partner_acceptance_signatures, + create_time,update_time,deleted,plan_acceptance_time,actual_acceptance_time,booking_user,plan_exit_time + + + update xfsg_acceptance_info + + + actual_entry_time = #{actualEntryTime} , + + + planned_completion_time = #{plannedCompletionTime} , + + + planned_start_time = #{plannedStartTime} , + + + decoration_planned_completion_time = #{decorationPlannedCompletionTime} , + + + decoration_planned_start_time = #{decorationPlannedStartTime} , + + + construction_completion_time = #{constructionCompletionTime} , + + + engineering_acceptance_signatures = #{engineeringAcceptanceSignatures} , + + + operations_acceptance_signatures = #{operationsAcceptanceSignatures} , + + + partner_acceptance_signatures = #{partnerAcceptanceSignatures} , + + + update_time = #{updateTime} , + + + deleted = #{deleted} , + + + plan_acceptance_time =#{planAcceptanceTime}, + + + actual_acceptance_time =#{actualAcceptanceTime}, + + + booking_user =#{bookingUser}, + + + plan_exit_time =#{planExitTime} + + + where shop_id = #{shopId} + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/ApplyLicenseMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/ApplyLicenseMapper.xml new file mode 100644 index 000000000..162cc1bc4 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/ApplyLicenseMapper.xml @@ -0,0 +1,96 @@ + + + + + + + id, + shop_id, + business_license, + license_type, + license_legal_person, + credit_code, + credit_url, + license_address, + issueTime, + validity, + id_card_positive_credit_url, + id_card_negative_credit_url, + food_business_license_code, + main_business, + operator, + food_license_legal_person, + business_project, + food_license_address, + food_business_start_time, + food_business_end_time, + food_business_license_url, + remark, + remark_url, + submit_status, + create_time, + update_time, + deleted + + + update xfsg_license_transact + set submit_status = #{entity.submitStatus} + where shop_id = #{entity.shopId} + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/AssessmentDataMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/AssessmentDataMapper.xml new file mode 100644 index 000000000..e283d144d --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/AssessmentDataMapper.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + insert into xfsg_assessment_data (template_id, shop_id, + assessment_user_id) + values + + ( #{item.templateId}, #{item.shopId}, + #{item.assessmentUserId}) + + + + insert into xfsg_assessment_data + ( + template_id, + shop_id, + assessment_user_id, + qualified, + score, + reason, + comments, + picture, + video + ) values + + ( #{item.templateId}, + #{item.shopId}, + #{item.assessmentUserId}, + #{item.qualified}, + #{item.score}, + #{item.reason}, + #{item.comments}, + #{item.picture}, + #{item.video} + ) + + ON DUPLICATE KEY UPDATE qualified=values(qualified), score=values(score), reason=values(reason) + , comments=values(comments), picture=values(picture), video=values(video) + + + update xfsg_assessment_data + + qualified = CASE template_id + + WHEN #{item.templateId} THEN #{item.qualified} + + END, + reason = CASE template_id + + WHEN #{item.templateId} THEN #{item.reason} + + END, + comments = CASE template_id + + WHEN #{item.templateId} THEN #{item.comments} + + END + + where template_id in ( + + #{item.templateId} + + ) + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/AssessmentTemplateMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/AssessmentTemplateMapper.xml new file mode 100644 index 000000000..627611691 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/AssessmentTemplateMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/AuditStatusMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/AuditStatusMapper.xml new file mode 100644 index 000000000..23928820f --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/AuditStatusMapper.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + id, + line_id, + interview_id, + audit_id, + audit_status, + audit_user_id, + audit_user_name, + create_time, + update_time, + audit_stage + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/BankdocMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/BankdocMapper.xml new file mode 100644 index 000000000..31df5c12b --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/BankdocMapper.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + insert into xfsg_bankdoc + + + code, + + + combinenum, + + + enablestate, + + + iscustbank, + + + name, + + + pk_banktype, + + + + + #{code,jdbcType=VARCHAR}, + + + #{combinenum,jdbcType=VARCHAR}, + + + #{enablestate,jdbcType=DECIMAL}, + + + #{iscustbank,jdbcType=CHAR}, + + + #{name,jdbcType=VARCHAR}, + + + #{pkBanktype,jdbcType=VARCHAR}, + + + + + + + and t.code = #{code,jdbcType=VARCHAR} + + + and t.combinenum = #{combinenum,jdbcType=VARCHAR} + + + and t.enablestate = #{enablestate,jdbcType=DECIMAL} + + + and t.iscustbank = #{iscustbank,jdbcType=CHAR} + + + and t.name = #{name,jdbcType=VARCHAR} + + + and t.pk_banktype = #{pkBanktype,jdbcType=VARCHAR} + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/BanktypeMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/BanktypeMapper.xml new file mode 100644 index 000000000..5400eab0d --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/BanktypeMapper.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + pk_banktype, code, combinecode, name + + + + delete from xfsg_banktype + where pk_banktype = #{pkBanktype,jdbcType=CHAR} + + + insert into xfsg_banktype + + + pk_banktype, + + + code, + + + combinecode, + + + name, + + + + + #{pkBanktype,jdbcType=CHAR}, + + + #{code,jdbcType=VARCHAR}, + + + #{combinecode,jdbcType=VARCHAR}, + + + #{name,jdbcType=VARCHAR}, + + + + + update xfsg_banktype + + + code = #{code,jdbcType=VARCHAR}, + + + combinecode = #{combinecode,jdbcType=VARCHAR}, + + + name = #{name,jdbcType=VARCHAR}, + + + where pk_banktype = #{pkBanktype,jdbcType=CHAR} + + + + + and t.pk_banktype = #{pkBanktype,jdbcType=CHAR} + + + and t.code = #{code,jdbcType=VARCHAR} + + + and t.combinecode = #{combinecode,jdbcType=VARCHAR} + + + and t.name = #{name,jdbcType=VARCHAR} + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/EmployeeTrainingMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/EmployeeTrainingMapper.xml new file mode 100644 index 000000000..6f1c0fd61 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/EmployeeTrainingMapper.xml @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 new file mode 100644 index 000000000..349a94f84 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserMapper.xml @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, user_id, name, remark, mobile, email, org_email, main_admin, is_admin, unionid, + avatar, jobnumber, is_leader, is_leader_in_depts, face_url, user_status, create_time, + third_oa_unique_flag + + + user_region_ids + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 new file mode 100644 index 000000000..871e13c30 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/EnterpriseUserRoleMapper.xml @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/FirstOrderMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/FirstOrderMapper.xml new file mode 100644 index 000000000..f84cbaf23 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/FirstOrderMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/FranchiseFeeMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/FranchiseFeeMapper.xml new file mode 100644 index 000000000..f5df125cd --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/FranchiseFeeMapper.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyContentInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyContentInfoMapper.xml new file mode 100644 index 000000000..d980fbed8 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/HyContentInfoMapper.xml @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + id, content_title, `subject`, content_type, cover, content, `status`, deleted, create_time, update_time, + create_user_id, update_user_id + + + content + + + insert into xfsg_content_info + + + content_title, + + + subject, + + + content_type, + + + cover, + + + status, + + + create_time, + + + update_time, + + + create_user_id, + + + update_user_id, + + + content, + + + + + #{record.contentTitle}, + + + #{record.subject}, + + + #{record.contentType}, + + + #{record.cover}, + + + #{record.status}, + + + #{record.deleted}, + + + #{record.createTime}, + + + #{record.updateTime}, + + + #{record.createUserId}, + + + #{record.updateUserId}, + + + #{record.content}, + + + + + update xfsg_content_info + + + content_title = #{record.contentTitle}, + + + subject = #{record.subject}, + + + content_type = #{record.contentType}, + + + cover = #{record.cover}, + + + status = #{record.status}, + + + deleted = #{record.deleted}, + + + create_time = #{record.createTime}, + + + update_time = #{record.updateTime}, + + + create_user_id = #{record.createUserId}, + + + update_user_id = #{record.updateUserId}, + + + content = #{record.content}, + + + where id = #{record.id} + + + update xfsg_content_info + + deleted = 1 + + where id = #{contentId} + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyOpenAreaInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyOpenAreaInfoMapper.xml new file mode 100644 index 000000000..f15afeae2 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/HyOpenAreaInfoMapper.xml @@ -0,0 +1,320 @@ + + + + + + + + + + + + + + + + + + id, parent_id, area_name, area_path, background_banner, detail_banner, area_status, + deleted, create_time, update_time, update_user_id + + + + insert into xfsg_open_area_info + + + id, + + + parent_id, + + + area_name, + + + area_path, + + + background_banner, + + + detail_banner, + + + area_status, + + + deleted, + + + create_time, + + + update_time, + + + update_user_id, + + + + + #{record.id}, + + + #{record.parentId}, + + + #{record.areaName}, + + + #{record.areaPath}, + + + #{record.backgroundBanner}, + + + #{record.detailBanner}, + + + #{record.areaStatus}, + + + #{record.deleted}, + + + #{record.createTime}, + + + #{record.updateTime}, + + + #{record.updateUserId}, + + + + + update xfsg_open_area_info + + + parent_id = #{record.parentId}, + + + area_name = #{record.areaName}, + + + area_path = #{record.areaPath}, + + + background_banner = #{record.backgroundBanner}, + + + detail_banner = #{record.detailBanner}, + + + area_status = #{record.areaStatus}, + + + deleted = #{record.deleted}, + + + create_time = #{record.createTime}, + + + update_time = #{record.updateTime}, + + + update_user_id = #{record.updateUserId}, + + + key_open_status = #{record.keyOpenStatus}, + + + where id = #{record.id} + + + + + + update xfsg_open_area_info + + + background_banner = #{backgroundBanner}, + + + detail_banner = #{detailBanner}, + + + area_status = #{areaStatus}, + + + update_user_id = #{updateUserId}, + + + + + + #{id} + + + + + + + + + update xfsg_open_area_info + + + background_banner = #{backgroundBanner}, + + + detail_banner = #{detailBanner}, + + + area_status = #{areaStatus}, + + + update_user_id = #{updateUserId}, + + + + + + #{parentId} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerLabelGroupMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerLabelGroupMapper.xml new file mode 100644 index 000000000..ec1376bd3 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerLabelGroupMapper.xml @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + id, label_group_name, deleted, edit_user_id, edit_date, create_time, update_time, + create_user_id, update_user_id, remark + + + + + + + delete from xfsg_partner_label_group + where id = #{id} + + and id = #{id} + + + and label_group_name like concat('%', #{labelGroupName}, '%') + + + and edit_user_id = #{editUserId} + + + and edit_date = #{editDate} + + + and create_time = #{createTime} + + + and update_time =#{updateTime} + + + and create_user_id = #{createUserId} + + + and update_user_id = #{updateUserId} + + + and remark like concat('%', #{remark}, '%') + + + + insert into xfsg_partner_label_group (id, label_group_name, deleted, + edit_user_id, edit_date, create_time, + update_time, create_user_id, update_user_id, + remark) + values (#{id}, #{labelGroupName}, #{deleted}, + #{editUserId}, #{editDate}, #{createTime}, + #{updateTime}, #{createUserId}, #{updateUserId}, + #{remark}) + + + insert into xfsg_partner_label_group + + + id, + + + label_group_name, + + + deleted, + + + edit_user_id, + + + edit_date, + + + create_time, + + + update_time, + + + create_user_id, + + + update_user_id, + + + remark, + + + + + #{id}, + + + #{labelGroupName}, + + + #{deleted}, + + + #{editUserId}, + + + #{editDate}, + + + #{createTime}, + + + #{updateTime}, + + + #{createUserId}, + + + #{updateUserId}, + + + #{remark}, + + + + + update xfsg_partner_label_group + + + label_group_name = #{labelGroupName}, + + + deleted = #{deleted}, + + + edit_user_id = #{editUserId}, + + + edit_date = #{editDate}, + + + create_time = #{createTime}, + + + update_time = #{updateTime}, + + + create_user_id = #{createUserId}, + + + update_user_id = #{updateUserId}, + + + remark = #{remark}, + + + where id = #{id} + + + update xfsg_partner_label_group + set label_group_name = #{labelGroupName}, + deleted = #{deleted}, + edit_user_id = #{editUserId}, + edit_date = #{editDate}, + create_time = #{createTime}, + update_time = #{updateTime}, + create_user_id = #{createUserId}, + update_user_id = #{updateUserId}, + remark = #{remark} + where id = #{id} + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerLabelMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerLabelMapper.xml new file mode 100644 index 000000000..005e1bc47 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerLabelMapper.xml @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + id, label_group_id, label_name, edit_user_id, edit_date, deleted, create_time, update_time, + create_user_id, update_user_id, remark + + + + + + + delete from xfsg_partner_label + where id = #{id} + + + insert into xfsg_partner_label (id, label_group_id, label_name, + edit_user_id, edit_date, deleted, + create_time, update_time, create_user_id, + update_user_id, remark) + values (#{id}, #{labelGroupId}, #{labelName}, + #{editUserId}, #{editDate}, #{deleted}, + #{createTime}, #{updateTime}, #{createUserId}, + #{updateUserId}, #{remark}) + + + insert into xfsg_partner_label + + + id, + + + label_group_id, + + + label_name, + + + edit_user_id, + + + edit_date, + + + deleted, + + + create_time, + + + update_time, + + + create_user_id, + + + update_user_id, + + + remark, + + + + + #{id}, + + + #{labelGroupId}, + + + #{labelName}, + + + #{editUserId}, + + + #{editDate}, + + + #{deleted}, + + + #{createTime}, + + + #{updateTime}, + + + #{createUserId}, + + + #{updateUserId}, + + + #{remark}, + + + + + update xfsg_partner_label + + + label_group_id = #{labelGroupId}, + + + label_name = #{labelName}, + + + edit_user_id = #{editUserId}, + + + edit_date = #{editDate}, + + + deleted = #{deleted}, + + + create_time = #{createTime}, + + + update_time = #{updateTime}, + + + create_user_id = #{createUserId}, + + + update_user_id = #{updateUserId}, + + + remark = #{remark} + + + where deleted = 0 + and id = #{id} + + + update xfsg_partner_label + set label_group_id = #{labelGroupId}, + label_name = #{labelName}, + edit_user_id = #{editUserId}, + edit_date = #{editDate}, + deleted = #{deleted}, + create_time = #{createTime}, + update_time = #{updateTime}, + create_user_id = #{createUserId}, + update_user_id = #{updateUserId}, + remark = #{remark} + where id = #{id} + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserChannelMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserChannelMapper.xml new file mode 100644 index 000000000..719bdf080 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserChannelMapper.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + id, channel_id, channel_name, create_time, update_time + + + + + + delete from xfsg_partner_user_channel + where id = #{id,jdbcType=BIGINT} + + + insert into xfsg_partner_user_channel (channel_id, channel_name, create_time, + update_time) + values (#{channelId,jdbcType=BIGINT}, #{channelName,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, + #{updateTime,jdbcType=TIMESTAMP}) + + + insert into xfsg_partner_user_channel + + + channel_id, + + + channel_name, + + + create_time, + + + + + #{channelId,jdbcType=BIGINT}, + + + #{channelName,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + + + update xfsg_partner_user_channel + + + channel_id = #{channelId,jdbcType=BIGINT}, + + + channel_name = #{channelName,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + where id = #{id,jdbcType=BIGINT} + + + update xfsg_partner_user_channel + set channel_id = #{channelId,jdbcType=BIGINT}, + channel_name = #{channelName,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + update_time = #{updateTime,jdbcType=TIMESTAMP} + where id = #{id,jdbcType=BIGINT} + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml new file mode 100644 index 000000000..c9f658d61 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + id, partner_id, mobile, create_time, update_time, user_channel_id, crm_create_time, openid + + + + + + + + + + + + + insert into xfsg_partner_user_info + + + partner_id, + + + mobile, + + + create_time, + + + update_time, + + + user_channel_id, + + + ec_want_shop_area, + + + crm_create_time, + + + openid, + + + + + #{record.partnerId}, + + + #{record.mobile}, + + + #{record.createTime}, + + + #{record.updateTime}, + + + #{record.userChannelId}, + + + #{record.ecWantShopArea}, + + + #{record.crmCreateTime}, + + + #{record.openid}, + + + + + + update xfsg_partner_user_info + + + partner_id = #{record.partnerId}, + + + mobile = #{record.mobile}, + + + create_time = #{record.createTime}, + + + update_time = #{record.updateTime}, + + + ec_want_shop_area = #{record.ecWantShopArea}, + + + openid = #{record.openid}, + + + where id = #{record.id} + + + + update xfsg_partner_user_info + + + mobile = #{record.mobile}, + + + create_time = #{record.createTime}, + + + update_time = #{record.updateTime}, + + + where partner_id = #{record.partnerId} + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/IntentAgreementMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/IntentAgreementMapper.xml new file mode 100644 index 000000000..db1fa97b5 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/IntentAgreementMapper.xml @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + id, + partner_id, + line_id, + sign_name, + mobile, + sex, + id_card_front, + id_card_reverse, + id_card_no, + id_card_address, + current_residence, + address_detail, + business_license, + business_license_code, + business_license_address, + create_time, + update_time, + deleted, + audit_id + + + insert into xfsg_signing_base_info + + partner_id, + line_id, + sign_name, + mobile, + sex, + id_card_front, + id_card_reverse, + id_card_no, + id_card_address, + current_residence, + address_detail, + business_license, + business_license_code, + business_license_address, + + + #{request.partnerId}, + #{request.lineId}, + #{request.signName}, + #{request.mobile}, + #{request.sex}, + #{request.idCardFront}, + #{request.idCardReverse}, + #{request.idCardNo}, + #{request.idCardAddress}, + #{request.currentResidence}, + #{request.addressDetail}, + #{request.businessLicense}, + #{request.businessLicenseCode}, + #{request.businessLicenseAddress}, + + ON DUPLICATE KEY UPDATE + + partner_id = #{request.partnerId}, + sign_name = #{request.signName}, + mobile = #{request.mobile}, + sex = #{request.sex}, + id_card_front = #{request.idCardFront}, + id_card_reverse = #{request.idCardReverse}, + id_card_no = #{request.idCardNo}, + id_card_address = #{request.idCardAddress}, + current_residence = #{request.currentResidence}, + address_detail = #{request.addressDetail}, + business_license = #{request.businessLicense}, + business_license_code = #{request.businessLicenseCode}, + business_license_address = #{request.businessLicenseAddress}, + + + + update xfsg_signing_base_info + set audit_id = #{auditId} + where line_id = #{lineId} + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/JoinIntentionMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/JoinIntentionMapper.xml new file mode 100644 index 000000000..e14dfd8d3 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/JoinIntentionMapper.xml @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, + audit_id, + partner_id, + line_id, + join_type, + create_time, + update_time, + career_status, + education_level, + annual_income, + has_partner, + capital_source, + business_mode, + join_experience, + fruit_industry_experience, + store_condition, + payback_period, + follows_management_standard, + can_training, + deleted + + + INSERT INTO xfsg_member_question_info + + audit_id, + partner_id, + line_id, + career_status, + join_type, + education_level, + annual_income, + has_partner, + capital_source, + business_mode, + join_experience, + fruit_industry_experience, + store_condition, + payback_period, + follows_management_standard, + can_training, + + + #{request.auditId}, + #{request.partnerId}, + #{request.lineId}, + #{request.careerStatus}, + #{request.joinType}, + #{request.educationLevel}, + #{request.annualIncome}, + #{request.hasPartner}, + #{request.capitalSource}, + #{request.businessMode}, + #{request.joinExperience}, + #{request.fruitIndustryExperience}, + #{request.storeCondition}, + #{request.paybackPeriod}, + #{request.followsManagementStandard}, + #{request.canTraining}, + + ON DUPLICATE KEY UPDATE + + audit_id = #{request.auditId}, + partner_id = #{request.partnerId}, + career_status = #{request.careerStatus}, + join_type = #{request.joinType}, + education_level = #{request.educationLevel}, + annual_income = #{request.annualIncome}, + has_partner = #{request.hasPartner}, + capital_source = #{request.capitalSource}, + business_mode = #{request.businessMode}, + join_experience = #{request.joinExperience}, + fruit_industry_experience = #{request.fruitIndustryExperience}, + store_condition = #{request.storeCondition}, + payback_period = #{request.paybackPeriod}, + follows_management_standard = #{request.followsManagementStandard}, + can_training = #{request.canTraining}, + + + + update xfsg_member_question_info + set audit_id = #{auditId} + where line_id = #{lineId} + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/LineAuditInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/LineAuditInfoMapper.xml new file mode 100644 index 000000000..24680c713 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/LineAuditInfoMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/LineCalendarsEventMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/LineCalendarsEventMapper.xml new file mode 100644 index 000000000..c6580b32f --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/LineCalendarsEventMapper.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/LineFollowLogMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/LineFollowLogMapper.xml new file mode 100644 index 000000000..a6c4ced4f --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/LineFollowLogMapper.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/LineInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/LineInfoMapper.xml new file mode 100644 index 000000000..84834535c --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/LineInfoMapper.xml @@ -0,0 +1,550 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO xfsg_line_info + + + id, + + + partner_id, + + + region_id, + + + mobile, + + + username, + + + sex, + + + want_shop_area_id, + + + live_address, + + + workflow_stage, + + + workflow_sub_stage, + + + workflow_sub_stage_status, + + + select_site_num, + + + prepare_shop_num, + + + open_shop_num, + + + line_source, + + + investment_manager, + + + development_manager, + + + first_interviewer, + + + second_interviewer, + + + user_portrait, + + + join_status, + + + line_status, + + + create_time, + + + update_time, + + + create_user_id, + + + update_user_id, + + + deleted, + + + partner_num, + + + + + #{param.id}, + + + #{param.partnerId}, + + + #{param.regionId}, + + + #{param.mobile}, + + + #{param.username}, + + + #{param.sex}, + + + #{param.wantShopAreaId}, + + + #{param.liveAddress}, + + + #{param.workflowStage}, + + + #{param.workflowSubStage}, + + + #{param.workflowSubStageStatus}, + + + #{param.selectSiteNum}, + + + #{param.prepareShopNum}, + + + #{param.openShopNum}, + + + #{param.lineSource}, + + + #{param.investmentManager}, + + + #{param.developmentManager}, + + + #{param.firstInterviewer}, + + + #{param.secondInterviewer}, + + + #{param.userPortrait}, + + + #{param.joinStatus}, + + + #{param.lineStatus}, + + + #{param.createTime}, + + + #{param.updateTime}, + + + #{param.createUserId}, + + + #{param.updateUserId}, + + + #{param.deleted}, + + + #{param.partnerNum}, + + + ON DUPLICATE KEY UPDATE + + + partner_id = #{param.partnerId}, + + + region_id = #{param.regionId}, + + + mobile = #{param.mobile}, + + + username = #{param.username}, + + + sex = #{param.sex}, + + + want_shop_area_id = #{param.wantShopAreaId}, + + + live_address = #{param.liveAddress}, + + + workflow_stage = #{param.workflowStage}, + + + workflow_sub_stage = #{param.workflowSubStage}, + + + workflow_sub_stage_status = #{param.workflowSubStageStatus}, + + + select_site_num = #{param.selectSiteNum}, + + + prepare_shop_num = #{param.prepareShopNum}, + + + open_shop_num = #{param.openShopNum}, + + + line_source = #{param.lineSource}, + + + investment_manager = #{param.investmentManager}, + + + development_manager = #{param.developmentManager}, + + + first_interviewer = #{param.firstInterviewer}, + + + second_interviewer = #{param.secondInterviewer}, + + + user_portrait = #{param.userPortrait}, + + + join_status = #{param.joinStatus}, + + + line_status = #{param.lineStatus}, + + + create_time = #{param.createTime}, + + + update_time = #{param.updateTime}, + + + create_user_id = #{param.createUserId}, + + + update_user_id = #{param.updateUserId}, + + + deleted = #{param.deleted}, + + + partner_num = #{param.partnerNum} + + + + + UPDATE + xfsg_line_info + SET workflow_sub_stage_status = #{code} + WHERE + deleted = 0 + AND workflow_sub_stage_status = 85 + AND id in + + #{lineId} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + update xfsg_line_info set workflow_sub_stage = #{workflowSubStage}, workflow_sub_stage_status = #{workflowSubStageStatus} where id in + + #{lineId} + + and workflow_sub_stage_status = 15 and workflow_sub_stage = 5 + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/LineInterviewMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/LineInterviewMapper.xml new file mode 100644 index 000000000..2a14e7862 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/LineInterviewMapper.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + update xfsg_line_interview set deleted = '1' where id = #{interviewId} + + + + + + + + update xfsg_line_interview set interview_status = #{interviewStatus} where id in + + #{item} + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/LinePayMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/LinePayMapper.xml new file mode 100644 index 000000000..f2bcd9482 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/LinePayMapper.xml @@ -0,0 +1,349 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id,shop_id, partner_id, line_id, pay_status, pay_type, pay_user_name, pay_account, bank_code, + bank_name, branch_bank_code, branch_bank_name, pay_time, pay_pic, promise_pic, create_time, + update_time, create_user_id, update_user_id, deleted,pay_business_type,amount + + + + delete + from xfsg_line_pay + where id = #{id,jdbcType=BIGINT} + + + + SELECT LAST_INSERT_ID() + + insert into xfsg_line_pay + + + partner_id, + + + line_id, + + + pay_status, + + + pay_type, + + + pay_user_name, + + + pay_account, + + + bank_code, + + + bank_name, + + + branch_bank_code, + + + branch_bank_name, + + + pay_time, + + + pay_pic, + + + promise_pic, + + + create_time, + + + update_time, + + + create_user_id, + + + update_user_id, + + + deleted, + + + pay_business_type, + + + shop_id, + + + amount, + + + + + #{partnerId,jdbcType=VARCHAR}, + + + #{lineId,jdbcType=BIGINT}, + + + #{payStatus,jdbcType=TINYINT}, + + + #{payType,jdbcType=TINYINT}, + + + #{payUserName,jdbcType=VARCHAR}, + + + #{payAccount,jdbcType=VARCHAR}, + + + #{bankCode,jdbcType=VARCHAR}, + + + #{bankName,jdbcType=VARCHAR}, + + + #{branchBankCode,jdbcType=VARCHAR}, + + + #{branchBankName,jdbcType=VARCHAR}, + + + #{payTime,jdbcType=TIMESTAMP}, + + + #{payPic,jdbcType=VARCHAR}, + + + #{promisePic,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{updateTime,jdbcType=TIMESTAMP}, + + + #{createUserId,jdbcType=VARCHAR}, + + + #{updateUserId,jdbcType=VARCHAR}, + + + #{deleted,jdbcType=BIT}, + + + #{payBusinessType,jdbcType=TINYINT}, + + + #{shopId}, + + + #{amount}, + + + + + update xfsg_line_pay + + + partner_id = #{partnerId,jdbcType=VARCHAR}, + + + line_id = #{lineId,jdbcType=BIGINT}, + + + pay_status = #{payStatus,jdbcType=TINYINT}, + + + pay_type = #{payType,jdbcType=TINYINT}, + + + pay_user_name = #{payUserName,jdbcType=VARCHAR}, + + + pay_account = #{payAccount,jdbcType=VARCHAR}, + + + bank_code = #{bankCode,jdbcType=VARCHAR}, + + + bank_name = #{bankName,jdbcType=VARCHAR}, + + + branch_bank_code = #{branchBankCode,jdbcType=VARCHAR}, + + + branch_bank_name = #{branchBankName,jdbcType=VARCHAR}, + + + pay_time = #{payTime,jdbcType=TIMESTAMP}, + + + pay_pic = #{payPic,jdbcType=VARCHAR}, + + + promise_pic = #{promisePic,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + create_user_id = #{createUserId,jdbcType=VARCHAR}, + + + update_user_id = #{updateUserId,jdbcType=VARCHAR}, + + + deleted = #{deleted,jdbcType=BIT}, + + + amount = #{amount,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update xfsg_line_pay + set audit_id = #{auditId} + where line_id = #{lineId} + and partner_id = #{partnerId} + + + + + and t.id = #{id,jdbcType=BIGINT} + + + and t.partner_id = #{partnerId,jdbcType=VARCHAR} + + + and t.line_id = #{lineId,jdbcType=BIGINT} + + + and t.pay_status = #{payStatus,jdbcType=TINYINT} + + + and t.pay_type = #{payType,jdbcType=TINYINT} + + + and t.pay_user_name = #{payUserName,jdbcType=VARCHAR} + + + and t.pay_account = #{payAccount,jdbcType=VARCHAR} + + + and t.bank_code = #{bankCode,jdbcType=VARCHAR} + + + and t.bank_name = #{bankName,jdbcType=VARCHAR} + + + and t.branch_bank_code = #{branchBankCode,jdbcType=VARCHAR} + + + and t.branch_bank_name = #{branchBankName,jdbcType=VARCHAR} + + + and t.pay_time = #{payTime,jdbcType=TIMESTAMP} + + + and t.pay_pic = #{payPic,jdbcType=VARCHAR} + + + and t.promise_pic = #{promisePic,jdbcType=VARCHAR} + + + and t.create_time = #{createTime,jdbcType=TIMESTAMP} + + + and t.update_time = #{updateTime,jdbcType=TIMESTAMP} + + + and t.create_user_id = #{createUserId,jdbcType=VARCHAR} + + + and t.update_user_id = #{updateUserId,jdbcType=VARCHAR} + + + and t.deleted = #{deleted,jdbcType=BIT} + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/NewStoreOpeningMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/NewStoreOpeningMapper.xml new file mode 100644 index 000000000..6322e9189 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/NewStoreOpeningMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/OpenAcceptanceInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/OpenAcceptanceInfoMapper.xml new file mode 100644 index 000000000..1f12fbb44 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/OpenAcceptanceInfoMapper.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE xfsg_shop_stage_info s + SET shop_sub_stage_status = 1710 + WHERE + shop_sub_stage_status = 1700 + AND shop_id IN ( + SELECT + shop_id + FROM + xfsg_open_acceptance_info + WHERE + acceptance_status = 1 + AND plan_open_time BETWEEN DATE_SUB( NOW( ), INTERVAL 7 DAY ) + AND DATE_SUB( NOW( ), INTERVAL 3 DAY ) + ) + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/OpenNewShopRecordMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/OpenNewShopRecordMapper.xml new file mode 100644 index 000000000..cae873199 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/OpenNewShopRecordMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + update xfsg_open_new_shop_record set deleted = 1, update_time = now() where id in + + #{id} + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/OpeningOperationPlanMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/OpeningOperationPlanMapper.xml new file mode 100644 index 000000000..eee31b154 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/OpeningOperationPlanMapper.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + id,shop_id,plan_source,survey_result,survey_result_url,activity_theme,activity_theme_url, + submission_time,submitted_user_id,preparation_user_ids,route_completed,create_time, + update_time,create_user_id,update_user_id,deleted,audit_id,result_type + + + update xfsg_opening_operation_plan + set audit_id = #{auditId},result_type = #{resultType},update_time = NOW() + where shop_id = #{shopId} + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/PointAuditRecordMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/PointAuditRecordMapper.xml new file mode 100644 index 000000000..9da35f61d --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/PointAuditRecordMapper.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + insert into xfsg_point_audit_record + + + point_id, + + + node_no, + + + cycle_count, + + + action_remark, + + + handler_user_id, + + + handler_user_ids, + + + receive_task_time, + + + finish_task_time, + + + audit_status, + + + sign_time, + + + sign_address, + + + picture_url, + + + reason, + + + + + #{item.pointId}, + + + #{item.nodeNo}, + + + #{item.cycleCount}, + + + #{item.actionRemark}, + + + #{item.handlerUserId}, + + + #{item.handlerUserIds}, + + + #{item.receiveTaskTime}, + + + #{item.finishTaskTime}, + + + #{item.auditStatus}, + + + #{item.signTime}, + + + #{item.signAddress}, + + + #{item.pictureUrl}, + + + #{item.reason}, + + + + + + + + + + update xfsg_point_audit_record set deleted = 1 where point_id = #{pointId} and cycle_count = #{cycleCount} and audit_status = 0 + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/PointDetailInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/PointDetailInfoMapper.xml new file mode 100644 index 000000000..dc6a37ca5 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/PointDetailInfoMapper.xml @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + update xfsg_point_detail_info + set + business_status = #{update.businessStatus}, + nine_flow_rate = #{update.nineFlowRate}, + ten_flow_rate = #{update.tenFlowRate}, + eighteen_flow_rate = #{update.eighteenFlowRate}, + nineteen_flow_rate = #{update.nineteenFlowRate}, + point_direction = #{update.pointDirection}, + site_conditions = #{update.siteConditions}, + store_width = #{update.storeWidth}, + landlord_username = #{update.landlordUsername}, + landlord_mobile = #{update.landlordMobile}, + payment_method = #{update.paymentMethod}, + property_status = #{update.propertyStatus}, + transfer_fee = #{update.transferFee}, + cover_community = #{update.coverCommunity}, + consumer_ability = #{update.consumerAbility}, + flow_rate_calculate = #{update.flowRateCalculate}, + gather_guest_farmer_market = #{update.gatherGuestFarmerMarket}, + gather_guest_hospital = #{update.gatherGuestHospital}, + gather_guest_school = #{update.gatherGuestSchool}, + store_flow_trend = #{update.storeFlowTrend}, + near_repast = #{update.nearRepast}, + near_neighbor = #{update.nearNeighbor}, + near_compete = #{update.nearCompete}, + near_business_condition = #{update.nearBusinessCondition}, + intend_position = #{update.intendPosition}, + green_belt = #{update.greenBelt}, + store_outlook = #{update.storeOutlook}, + guest_convenience = #{update.guestConvenience}, + want_shop_size = #{update.wantShopSize}, + compete_type = #{update.competeType}, + compete_business_capacity = #{update.competeBusinessCapacity}, + invest_amount = #{update.investAmount}, + day_trader = #{update.dayTrader}, + profit_rate = #{update.profitRate}, + month_profit_rate = #{update.monthProfitRate}, + brand_use_rate = #{update.brandUseRate}, + brand_use_fee = #{update.brandUseFee}, + staff_fee = #{update.staffFee}, + bonus = #{update.bonus}, + month_rent = #{update.monthRent}, + other_fee = #{update.otherFee}, + net_profit = #{update.netProfit}, + month_rate_return = #{update.monthRateReturn}, + market_size_score = #{update.marketSizeScore}, + shop_area_score = #{update.shopAreaScore}, + convenient_score = #{update.convenientScore}, + environment_score = #{update.environmentScore}, + rent_contract = #{update.rentContract}, + picture_obj = #{update.pictureObj} + where id = #{update.id} + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/PointInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/PointInfoMapper.xml new file mode 100644 index 000000000..775b9b2ca --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/PointInfoMapper.xml @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, point_code, point_name, region_id, shop_id, line_id, point_area, longitude, latitude, address, development_manager, operate_user_id, + development_time, point_status, point_score, select_status, submit_audit_count, point_source, deleted, create_time, update_time, + province, city, district, township + + + + + + + + + + update + xfsg_point_info + set + development_manager = #{developmentManager} + where + line_id = #{lineId} and select_status = '1' and deleted = 0 + + + + + + + update xfsg_point_info set line_id = null, shop_id = null, select_status = 0, update_time = now(), point_status = if(point_status = 6, 5, point_status) where id = #{pointId} + + + + update + xfsg_point_info + set + point_name = #{request.pointName}, + region_id = #{request.regionId}, + point_area = #{request.pointArea}, + latitude = #{request.latitude}, + longitude = #{request.longitude}, + address = #{request.address}, + province = #{request.province}, + city = #{request.city}, + district = #{request.district}, + township = #{request.township}, + point_score = #{request.pointScore} + where id = #{request.id} + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/PointRecommendMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/PointRecommendMapper.xml new file mode 100644 index 000000000..5fa970d7d --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/PointRecommendMapper.xml @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + id, line_id, point_id, development_manager, status, reason, deleted, create_time, update_time + + + + update xfsg_point_recommend set status = #{status} where point_id = #{pointId} and deleted = 0 + + and status not in + + #{status} + + + + + + update xfsg_point_recommend set status = #{status} where point_id = #{pointId} and deleted = 0 and status in + + #{status} + + + + + + + + + + insert into xfsg_point_recommend (line_id, point_id, development_manager, status) + values (#{item.lineId}, #{item.pointId}, #{item.developmentManager}, #{item.status}) + + + + + update + xfsg_point_recommend + set + deleted = if(status = 1, 1, deleted), + development_manager = if(status in (2,4), #{developmentManager}, development_manager) + where + line_id = #{lineId} + + + + + + update + xfsg_point_recommend + set + status = if(line_id = #{lineId}, 2, 3) + where point_id = #{pointId} and deleted = 0 and status = 1 + + + + update + xfsg_point_recommend + set + status = 5, + reason = #{reason} + where point_id = #{pointId} and line_id = #{lineId} and deleted = 0 and status = 1 + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/PointTodoInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/PointTodoInfoMapper.xml new file mode 100644 index 000000000..aedfa9796 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/PointTodoInfoMapper.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + insert into xfsg_point_todo_info + + + point_id, + + + node_no, + + + handler_user_id, + + + status, + + + cycle_count, + + + + + #{item.pointId}, + + + #{item.nodeNo}, + + + #{item.handlerUserId}, + + + #{item.status}, + + + #{item.cycleCount}, + + + + + + + + + + + + + update xfsg_point_todo_info set status = if(handler_user_id = #{handlerUserId}, 1, 2), update_time = now() where point_id = #{pointId} and node_no = #{nodeNo} and cycle_count = #{cycleCount} and deleted = 0 + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/RegionAreaConfigMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/RegionAreaConfigMapper.xml new file mode 100644 index 000000000..e869fc49c --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/RegionAreaConfigMapper.xml @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + id, region_id, region_path, want_shop_area_id, create_time, update_time, create_user_id, update_user_id, + deleted + + + + delete from xfsg_region_area_config + where id = #{id,jdbcType=BIGINT} + + + + SELECT LAST_INSERT_ID() + + insert into xfsg_region_area_config + + + region_id, + + + region_path, + + + want_shop_area_id, + + + create_time, + + + update_time, + + + create_user_id, + + + update_user_id, + + + deleted, + + + + + #{regionId,jdbcType=BIGINT}, + + + #{regionPath,jdbcType=VARCHAR}, + + + #{wantShopAreaId,jdbcType=BIGINT}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{updateTime,jdbcType=TIMESTAMP}, + + + #{createUserId,jdbcType=VARCHAR}, + + + #{updateUserId,jdbcType=VARCHAR}, + + + #{deleted,jdbcType=BIT}, + + + + + update xfsg_region_area_config + + + region_id = #{regionId,jdbcType=BIGINT}, + + + region_path = #{regionPath,jdbcType=VARCHAR}, + + + want_shop_area_id = #{wantShopAreaId,jdbcType=BIGINT}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + create_user_id = #{createUserId,jdbcType=VARCHAR}, + + + update_user_id = #{updateUserId,jdbcType=VARCHAR}, + + + deleted = #{deleted,jdbcType=BIT}, + + + where id = #{id,jdbcType=BIGINT} + + + + + and t.id = #{id,jdbcType=BIGINT} + + + and t.region_id = #{regionId,jdbcType=BIGINT} + + + and t.region_path = #{regionPath,jdbcType=VARCHAR} + + + and t.want_shop_area_id = #{wantShopAreaId,jdbcType=BIGINT} + + + and t.create_time = #{createTime,jdbcType=TIMESTAMP} + + + and t.update_time = #{updateTime,jdbcType=TIMESTAMP} + + + and t.create_user_id = #{createUserId,jdbcType=VARCHAR} + + + and t.update_user_id = #{updateUserId,jdbcType=VARCHAR} + + + and t.deleted = #{deleted,jdbcType=BIT} + + + + + + + delete from xfsg_region_area_config + where region_id = #{regionId} + + + + delete from xfsg_region_area_config + where want_shop_area_id in + + #{wantShopAreaId} + + + + + insert into xfsg_region_area_config + ( + region_id, + region_path, + want_shop_area_id, + create_time, + create_user_id, + update_time, + update_user_id + ) + values + + ( + #{entity.regionId}, + #{entity.regionPath}, + #{entity.wantShopAreaId}, + now(), + #{entity.createUserId}, + now(), + #{entity.updateUserId} + ) + + ON DUPLICATE KEY UPDATE + update_time = now() + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/RegionMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/RegionMapper.xml new file mode 100644 index 000000000..a214fbc41 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/RegionMapper.xml @@ -0,0 +1,410 @@ + + + + + + id , + id as regionId, + name , + parent_id as parentId, + group_id as groupId, + store_id as storeId, + create_time as createTime, + create_name as createName, + update_time as updateTime, + update_name as updateName, + syn_ding_dept_id as synDingDeptId, + region_type as regionType, + region_path as regionPath, + deleted as deleted, + third_dept_id as thirdDeptId, + third_region_type as thirdRegionType + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/RegionQrcodeConfigMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/RegionQrcodeConfigMapper.xml new file mode 100644 index 000000000..82535d753 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/RegionQrcodeConfigMapper.xml @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + id, region_id, region_name, pay_pic, create_time, update_time, create_user_id, update_user_id, + deleted + + + + delete from xfsg_region_qrcode_config + where id = #{id,jdbcType=BIGINT} + + + + SELECT LAST_INSERT_ID() + + insert into xfsg_region_qrcode_config + + + region_id, + + + region_name, + + + pay_pic, + + + create_time, + + + update_time, + + + create_user_id, + + + update_user_id, + + + deleted, + + + + + #{regionId,jdbcType=BIGINT}, + + + #{regionName,jdbcType=VARCHAR}, + + + #{payPic,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{updateTime,jdbcType=TIMESTAMP}, + + + #{createUserId,jdbcType=VARCHAR}, + + + #{updateUserId,jdbcType=VARCHAR}, + + + #{deleted,jdbcType=BIT}, + + + + + update xfsg_region_qrcode_config + + + region_id = #{regionId,jdbcType=BIGINT}, + + + region_name = #{regionName,jdbcType=VARCHAR}, + + + pay_pic = #{payPic,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + create_user_id = #{createUserId,jdbcType=VARCHAR}, + + + update_user_id = #{updateUserId,jdbcType=VARCHAR}, + + + deleted = #{deleted,jdbcType=BIT}, + + + where id = #{id,jdbcType=BIGINT} + + + + + and t.id = #{id,jdbcType=BIGINT} + + + and t.region_id = #{regionId,jdbcType=BIGINT} + + + and t.region_name = #{regionName,jdbcType=VARCHAR} + + + and t.pay_pic = #{payPic,jdbcType=VARCHAR} + + + and t.create_time = #{createTime,jdbcType=TIMESTAMP} + + + and t.update_time = #{updateTime,jdbcType=TIMESTAMP} + + + and t.create_user_id = #{createUserId,jdbcType=VARCHAR} + + + and t.update_user_id = #{updateUserId,jdbcType=VARCHAR} + + + and t.deleted = #{deleted,jdbcType=BIT} + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/ShopAuditInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/ShopAuditInfoMapper.xml new file mode 100644 index 000000000..4abd5bab3 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/ShopAuditInfoMapper.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + id,shop_id,audit_type,submitted_user_id,submitted_user_name,result_type,pass_reason,reject_reason, + certify_file,create_time,update_time,deleted,data_type + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml new file mode 100644 index 000000000..1156afa5f --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + id, region_id, line_id, partner_id, point_id, shop_name, shop_code, store_num, shop_manager_user_id, supervisor_user_id, plan_open_time, cur_progress, shop_type, shop_stage, deleted, create_time, update_time + + + + insert into xfsg_shop_info(region_id, line_id, partner_id, shop_name, shop_code) values + + (#{shop.regionId}, #{shop.lineId}, #{shop.partnerId}, #{shop.shopName}, #{shop.shopCode}) + + + + + + + + + + + update xfsg_shop_info set point_id = null where id = #{shopId} + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/ShopRentInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/ShopRentInfoMapper.xml new file mode 100644 index 000000000..012de5020 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/ShopRentInfoMapper.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + id, shop_id, point_id, rent_type, sign_time, contract_start_time, contract_end_time, contract_months, shop_rent_type, + month_rent, first_year_month_rent, second_year_month_rent, third_year_month_rent, contract_pic, + house_certificate_pic, audit_id, deleted, create_time, update_time + + + + + + update + xfsg_shop_rent_info + set + deleted = 1 + where shop_id = #{shopId} + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/ShopStageInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/ShopStageInfoMapper.xml new file mode 100644 index 000000000..d65cb27c8 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/ShopStageInfoMapper.xml @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + id, line_id, shop_id, shop_stage, shop_sub_stage, shop_sub_stage_status, is_terminated, plan_complete_time, actual_complete_time, remark, audit_id, deleted, create_time, update_time + + + + + INSERT INTO xfsg_shop_stage_info(line_id, shop_id, shop_stage, shop_sub_stage, shop_sub_stage_status, is_terminated, plan_complete_time, remark) + VALUES(#{shop.lineId}, #{shop.shopId}, #{shop.shopStage}, #{shop.shopSubStage}, #{shop.shopSubStageStatus}, #{shop.isTerminated}, #{shop.planCompleteTime}, #{shop.remark}) + + + + + + update xfsg_shop_stage_info + + shop_sub_stage_status = CASE id + + WHEN #{item.id} THEN IFNULL(#{item.shopSubStageStatus},shop_sub_stage_status) + + END + + where id in ( + + #{item.id} + + ) + + + + + + + + + + update + xfsg_shop_stage_info + set + shop_sub_stage_status = #{shopSubStageStatus}, + is_terminated = #{isTerminated}, + remark = #{remark}, + actual_complete_time = if(is_terminated, now(), null) + where + shop_id = #{shopId} and shop_sub_stage = #{shopSubStage} + + + + + + update + xfsg_shop_stage_info + set + shop_sub_stage_status = #{update.shopSubStageStatus}, + is_terminated = #{update.isTerminated}, + remark = #{update.remark}, + actual_complete_time = if(is_terminated, now(), null) + where + shop_id = #{shopId} and shop_sub_stage = #{update.shopSubStage} + + + + + + + update + xfsg_shop_stage_info + set + shop_sub_stage_status = #{shopSubStageStatus}, + is_terminated = #{isTerminated}, + remark = #{remark}, + actual_complete_time = if(is_terminated, now(), null), + audit_id = #{auditId} + where + shop_id = #{shopId} and shop_sub_stage = #{shopSubStage} + + + + update + xfsg_shop_stage_info + set + shop_sub_stage_status = -100, + is_terminated = 0, + remark = '未开始', + actual_complete_time = null, + audit_id = null + where + shop_id = #{shopId} and shop_sub_stage = #{shopSubStage} + + + update xfsg_shop_stage_info + + + plan_complete_time = #{shopStageInfoDO.planCompleteTime}, + + + actual_complete_time = #{shopStageInfoDO.actualCompleteTime}, + + + where shop_id = #{shopStageInfoDO.shopId} AND shop_sub_stage = #{shopStageInfoDO.shopSubStage} + + + + update xfsg_shop_stage_info + + + + shop_sub_stage_status = #{shopSubStageStatusEnum} + + + where shop_id in + + #{shopId} + + + and shop_sub_stage = #{shopSubStageEnum} + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/SignFranchiseMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/SignFranchiseMapper.xml new file mode 100644 index 000000000..a45af2175 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/SignFranchiseMapper.xml @@ -0,0 +1,16 @@ + + + + + update xfsg_sign_franchise + set audit_id = #{auditId} + where shop_id = #{shopId} + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml new file mode 100644 index 000000000..19b0ea7e9 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/StoreMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coolstore-partner-dao/src/main/resources/mapper/SysMenuMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/SysMenuMapper.xml new file mode 100644 index 000000000..7e713e45e --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/SysMenuMapper.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/SysRoleMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/SysRoleMapper.xml new file mode 100644 index 000000000..d6bf37949 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/SysRoleMapper.xml @@ -0,0 +1,379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/SysRoleMenuMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/SysRoleMenuMapper.xml new file mode 100644 index 000000000..ab186a6d7 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/SysRoleMenuMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/SystemBuildingShopMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/SystemBuildingShopMapper.xml new file mode 100644 index 000000000..419da4c0f --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/SystemBuildingShopMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + update xfsg_system_building_shop + set audit_id = #{auditId} + where shop_id = #{shopId} + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/TempUserDetailMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/TempUserDetailMapper.xml new file mode 100644 index 000000000..55cff28c6 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/TempUserDetailMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/ThirdDepartmentMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/ThirdDepartmentMapper.xml new file mode 100644 index 000000000..32dfd5381 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/ThirdDepartmentMapper.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + id, department_code, + department_name, + dept_principal, + parent_department_code, + create_time, + update_time + + + + delete from third_department_${enterpriseId} + where id = #{id,jdbcType=BIGINT} + + + + + and t.id = #{id,jdbcType=BIGINT} + + + and t.department_code = #{departmentCode,jdbcType=VARCHAR} + + + and t.department_name = #{departmentName,jdbcType=VARCHAR} + + + and t.dept_principal = #{deptPrincipal,jdbcType=VARCHAR} + + + and t.parent_department_code = #{parentDepartmentCode,jdbcType=VARCHAR} + + + and t.create_time = #{createTime,jdbcType=TIMESTAMP} + + + and t.update_time = #{updateTime,jdbcType=TIMESTAMP} + + + + + + delete from third_department_${enterpriseId} + where department_code in + + #{departmentCode} + + + + + insert into third_department_${enterpriseId} + ( + department_code, + department_name, + dept_principal, + parent_department_code, + create_time + ) values + + ( + #{thirdDepartment.departmentCode}, + #{thirdDepartment.departmentName}, + #{thirdDepartment.deptPrincipal}, + #{thirdDepartment.parentDepartmentCode}, + now() + ) + + ON DUPLICATE KEY UPDATE update_time=values(update_time),department_name=values(department_name), + dept_principal=values(dept_principal),parent_department_code=values(parent_department_code) + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/TrainingExperienceMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/TrainingExperienceMapper.xml new file mode 100644 index 000000000..290a1ef04 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/TrainingExperienceMapper.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + id, + partner_id, + line_id, + store_name, + store_id, + experience_start_time, + experience_end_time, + experience_status, + abandon_cause, + create_time, + update_time, + deleted + + + insert into xfsg_lease_base_info + + partner_id, + line_id, + store_name, + store_id, + experience_start_time, + experience_end_time, + experience_status, + abandon_cause, + + + #{entity.partnerId}, + #{entity.lineId}, + #{entity.storeName}, + #{entity.storeId}, + #{entity.experienceStartTime}, + #{entity.experienceEndTime}, + #{entity.experienceStatus}, + #{entity.abandonCause}, + + ON DUPLICATE KEY UPDATE + + partner_id = #{entity.partnerId}, + store_name = #{entity.storeName}, + store_id = #{entity.storeId}, + experience_start_time = #{entity.experienceStartTime}, + experience_end_time = #{entity.experienceEndTime}, + experience_status = #{entity.experienceStatus}, + abandon_cause = #{entity.abandonCause}, + + + + update + xfsg_lease_base_info + set + experience_status = #{status}, + abandon_cause=#{abandonCause} + where line_id = #{lineId} + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/TransferLogMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/TransferLogMapper.xml new file mode 100644 index 000000000..6bbc61a58 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/TransferLogMapper.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + \ 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 new file mode 100644 index 000000000..ded24a4de --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/UserAuthMappingMapper.xml @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/UserRegionMappingMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/UserRegionMappingMapper.xml new file mode 100644 index 000000000..27e54550c --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/UserRegionMappingMapper.xml @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + id, region_id, user_id, create_id, create_time, update_id, update_time + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/test/java/generator/GeneratorCodeMain.java b/coolstore-partner-dao/src/test/java/generator/GeneratorCodeMain.java new file mode 100644 index 000000000..cad5e60c3 --- /dev/null +++ b/coolstore-partner-dao/src/test/java/generator/GeneratorCodeMain.java @@ -0,0 +1,35 @@ +package generator; + +import org.mybatis.generator.api.MyBatisGenerator; +import org.mybatis.generator.config.Configuration; +import org.mybatis.generator.config.xml.ConfigurationParser; +import org.mybatis.generator.internal.DefaultShellCallback; + +import java.util.ArrayList; +import java.util.List; + +public class GeneratorCodeMain { + + public static void generator() { + List warnings = new ArrayList(); + try { + // 解析 + ConfigurationParser cp = new ConfigurationParser(warnings); + Configuration config = cp.parseConfiguration(GeneratorCodeMain.class.getResourceAsStream("/mybatis-generator-tk.xml")); + // 是否覆盖 + DefaultShellCallback dsc = new DefaultShellCallback(false); + MyBatisGenerator mg = new MyBatisGenerator(config, dsc, warnings); + mg.generate(null); + } catch (Exception e) { + e.printStackTrace(); + } + } + /** + * @param args + */ + public static void main(String[] args) { + GeneratorCodeMain.generator(); + System.out.println("done!"); + } + +} diff --git a/coolstore-partner-dao/src/test/java/generator/defined/MyCommentGenerator.java b/coolstore-partner-dao/src/test/java/generator/defined/MyCommentGenerator.java new file mode 100644 index 000000000..35668e9aa --- /dev/null +++ b/coolstore-partner-dao/src/test/java/generator/defined/MyCommentGenerator.java @@ -0,0 +1,119 @@ +package generator.defined; + +import org.apache.commons.lang3.StringUtils; +import org.mybatis.generator.api.CommentGenerator; +import org.mybatis.generator.api.IntrospectedColumn; +import org.mybatis.generator.api.IntrospectedTable; +import org.mybatis.generator.api.dom.java.Field; +import org.mybatis.generator.api.dom.java.Method; +import org.mybatis.generator.api.dom.java.TopLevelClass; +import org.mybatis.generator.api.dom.xml.XmlElement; +import org.mybatis.generator.internal.DefaultCommentGenerator; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Properties; + +/** + * @author zhangchenbiao + * @FileName: MyCommentGenerator + * @Description: + * @date 2021-11-18 11:09 + */ +public class MyCommentGenerator extends DefaultCommentGenerator implements CommentGenerator { + private String author; + /** + * 当前时间 + */ + private String currentDateStr; + public static final ThreadLocal authorName = new ThreadLocal(); + + public MyCommentGenerator() { + currentDateStr = (new SimpleDateFormat("yyyy-MM-dd hh:mm")).format(new Date()); + } + + + @Override + public void addConfigurationProperties(Properties properties) { + author = properties.getProperty("author"); + authorName.set(author); + } + + /** + * 字段注释 + * @param field + * @param introspectedTable + * @param introspectedColumn + */ + @Override + public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { + String remarks = introspectedColumn.getRemarks(); + field.addAnnotation("@ApiModelProperty(\""+ remarks +"\")"); + } + + @Override + public void addFieldComment(Field field, IntrospectedTable introspectedTable) { + + } + + @Override + public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { + String remarks = introspectedTable.getRemarks(); + topLevelClass.addJavaDocLine("/**"); + topLevelClass.addJavaDocLine(" * " + remarks); + topLevelClass.addJavaDocLine(" * @author " + author); + topLevelClass.addJavaDocLine(" * @date " + currentDateStr); + topLevelClass.addJavaDocLine(" */"); + String tableName = "\"" +introspectedTable.getFullyQualifiedTableNameAtRuntime()+"\""; + topLevelClass.addAnnotation("@Table(name = "+tableName+")"); + } + + @Override + public void addSetterComment(Method method, + IntrospectedTable introspectedTable, + IntrospectedColumn introspectedColumn) { + + } + + @Override + public void addGeneralMethodComment(Method method, + IntrospectedTable introspectedTable) { + StringBuilder sb = new StringBuilder(); + + method.addJavaDocLine("/**"); + method.addJavaDocLine(" *"); + sb.append(" * " + MethodName.getMethodComment(method.getName())); + method.addJavaDocLine(sb.toString()); + method.addJavaDocLine(" * dateTime:" +currentDateStr); + method.addJavaDocLine(" */"); + } + + @Override + public void addComment(XmlElement xmlElement) { + + } + + public enum MethodName{ + INSERT_SELECTIVE("insertSelective","默认插入方法,只会给有值的字段赋值\n\t * 会对传进来的字段做判空处理,如果字段为空,则使用数据库默认字段或者null"), + SELECT_BY_PRIMARY_KEY("selectByPrimaryKey","默认查询方法,通过主键获取所有字段的值"), + UPDATE_BY_PRIMARY_KEY_SELECTIVE("updateByPrimaryKeySelective","默认更新方法,根据主键更新,不会把null值更新到数据库,避免覆盖之前有值的"), + DELETE_BY_PRIMARY_KEY("deleteByPrimaryKey","默认更新方法,根据主键物理删除"),; + private String methodName; + private String comment; + + MethodName(String methodName, String comment) { + this.methodName = methodName; + this.comment = comment; + } + + public static String getMethodComment(String methodName){ + for (MethodName value : MethodName.values()) { + if(value.methodName.equals(methodName)){ + return value.comment; + } + } + return null; + } + } + +} diff --git a/coolstore-partner-dao/src/test/java/generator/defined/MyIntrospectedTableMyBatis3Impl.java b/coolstore-partner-dao/src/test/java/generator/defined/MyIntrospectedTableMyBatis3Impl.java new file mode 100644 index 000000000..13d126546 --- /dev/null +++ b/coolstore-partner-dao/src/test/java/generator/defined/MyIntrospectedTableMyBatis3Impl.java @@ -0,0 +1,478 @@ +package generator.defined; + +import org.apache.commons.lang3.StringUtils; +import org.mybatis.generator.api.CommentGenerator; +import org.mybatis.generator.api.FullyQualifiedTable; +import org.mybatis.generator.api.IntrospectedColumn; +import org.mybatis.generator.api.ProgressCallback; +import org.mybatis.generator.api.dom.java.*; +import org.mybatis.generator.api.dom.xml.Attribute; +import org.mybatis.generator.api.dom.xml.TextElement; +import org.mybatis.generator.api.dom.xml.XmlElement; +import org.mybatis.generator.codegen.AbstractJavaClientGenerator; +import org.mybatis.generator.codegen.mybatis3.IntrospectedTableMyBatis3Impl; +import org.mybatis.generator.codegen.mybatis3.ListUtilities; +import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities; +import org.mybatis.generator.codegen.mybatis3.javamapper.JavaMapperGenerator; +import org.mybatis.generator.codegen.mybatis3.xmlmapper.XMLMapperGenerator; +import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.AbstractXmlElementGenerator; +import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.InsertSelectiveElementGenerator; +import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.UpdateByPrimaryKeySelectiveElementGenerator; +import org.mybatis.generator.config.GeneratedKey; +import org.mybatis.generator.config.PropertyRegistry; +import org.mybatis.generator.internal.rules.Rules; +import org.mybatis.generator.internal.util.JavaBeansUtil; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; + +import static org.mybatis.generator.internal.util.StringUtility.stringHasValue; +import static org.mybatis.generator.internal.util.messages.Messages.getString; + +/** + * @author zhangchenbiao + * @FileName: MyIntrospectedTableMyBatis3Impl + * @Description: + * @date 2021-11-18 15:38 + */ +public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Impl { + + private String enterpriseIdTableSuffix = ""; + + @Override + public String getFullyQualifiedTableNameAtRuntime() { + return getTableName(); + } + + @Override + public String getAliasedFullyQualifiedTableNameAtRuntime() { + return getTableName(); + } + + private String getTableName() { + String tableName = this.getTableConfiguration().getTableName(); + String tableSuffix = tableName.substring(tableName.lastIndexOf("_") + 1); + if(StringUtils.isNotBlank(tableSuffix) && tableSuffix.length() == 32){ + //企业库 + return tableName.substring(0, tableName.lastIndexOf("_")) + enterpriseIdTableSuffix; + } + //平台库 + return tableName.replace("xfsg_",""); + } + + private String getTableNameFromConfigFile() { + String tableName = getTableName(); + if(tableName.contains(enterpriseIdTableSuffix)){ + tableName = tableName.replace(enterpriseIdTableSuffix,""); + } + return JavaBeansUtil.getCamelCaseString(tableName,true); + } + + @Override + protected String calculateMyBatis3XmlMapperFileName() { + StringBuilder sb = new StringBuilder(); + sb.append(getTableNameFromConfigFile()); + sb.append("Mapper.xml"); //$NON-NLS-1$ + return sb.toString(); + } + + @Override + protected void calculateJavaClientAttributes() { + if (context.getJavaClientGeneratorConfiguration() == null) { + return; + } + + StringBuilder sb = new StringBuilder(); + sb.setLength(0); + sb.append(calculateJavaClientInterfacePackage()); + sb.append('.'); + sb.append(getTableNameFromConfigFile()); + sb.append("DAO"); //$NON-NLS-1$ + setDAOInterfaceType(sb.toString()); + + sb.setLength(0); + sb.append(calculateJavaClientInterfacePackage()); + sb.append('.'); + if (stringHasValue(tableConfiguration.getMapperName())) { + sb.append(tableConfiguration.getMapperName()); + } else { + if (stringHasValue(fullyQualifiedTable.getDomainObjectSubPackage())) { + sb.append(fullyQualifiedTable.getDomainObjectSubPackage()); + sb.append('.'); + } + sb.append(getTableNameFromConfigFile()); + sb.append("Mapper"); //$NON-NLS-1$ + } + setMyBatis3JavaMapperType(sb.toString()); + + sb.setLength(0); + sb.append(calculateJavaClientInterfacePackage()); + sb.append('.'); + if (stringHasValue(tableConfiguration.getSqlProviderName())) { + sb.append(tableConfiguration.getSqlProviderName()); + } else { + if (stringHasValue(fullyQualifiedTable.getDomainObjectSubPackage())) { + sb.append(fullyQualifiedTable.getDomainObjectSubPackage()); + sb.append('.'); + } + sb.append(getTableNameFromConfigFile()); + sb.append("SqlProvider"); //$NON-NLS-1$ + } + setMyBatis3SqlProviderType(sb.toString()); + + sb.setLength(0); + sb.append(calculateJavaClientInterfacePackage()); + sb.append('.'); + sb.append(getTableNameFromConfigFile()); + sb.append("DynamicSqlSupport"); //$NON-NLS-1$ + setMyBatisDynamicSqlSupportType(sb.toString()); + } + + @Override + protected void calculateModelAttributes() { + String pakkage = calculateJavaModelPackage(); + + StringBuilder sb = new StringBuilder(); + sb.append(pakkage); + sb.append('.'); + sb.append(getTableNameFromConfigFile()); + sb.append("Key"); //$NON-NLS-1$ + setPrimaryKeyType(sb.toString()); + + sb.setLength(0); + sb.append(pakkage); + sb.append('.'); + sb.append(getTableNameFromConfigFile() + "DO"); + setBaseRecordType(sb.toString()); + + sb.setLength(0); + sb.append(pakkage); + sb.append('.'); + sb.append(getTableNameFromConfigFile()); + sb.append("WithBLOBs"); //$NON-NLS-1$ + setRecordWithBLOBsType(sb.toString()); + + sb.setLength(0); + sb.append(pakkage); + sb.append('.'); + sb.append(getTableNameFromConfigFile()); + sb.append("Example"); //$NON-NLS-1$ + setExampleType(sb.toString()); + } + + @Override + protected void calculateXmlMapperGenerator(AbstractJavaClientGenerator javaClientGenerator, + List warnings, + ProgressCallback progressCallback) { + xmlMapperGenerator = new MyXMLMapperGenerator(); + + initializeAbstractGenerator(xmlMapperGenerator, warnings, progressCallback); + } + + public class MyXMLMapperGenerator extends XMLMapperGenerator { + + public MyXMLMapperGenerator() { + super(); + } + + @Override + protected XmlElement getSqlMapElement() { + FullyQualifiedTable table = introspectedTable.getFullyQualifiedTable(); + progressCallback.startTask(getString( + "Progress.12", table.toString())); //$NON-NLS-1$ + XmlElement answer = new XmlElement("mapper"); //$NON-NLS-1$ + String namespace = introspectedTable.getMyBatis3SqlMapNamespace(); + answer.addAttribute(new Attribute("namespace", //$NON-NLS-1$ + namespace)); + + context.getCommentGenerator().addRootComment(answer); + addResultMapWithoutBLOBsElement(answer); + addResultMapWithBLOBsElement(answer); + addBaseColumnListElement(answer); + addBlobColumnListElement(answer); + /*addInsertSelectiveElement(answer); + addUpdateByPrimaryKeySelectiveElement(answer); + addMyBatis3UpdateByExampleWhereClauseElement(answer); + addExampleWhereClauseElement(answer); + addSelectByExampleWithBLOBsElement(answer); + addSelectByExampleWithoutBLOBsElement(answer); + addUpdateByExampleWithBLOBsElement(answer); + addUpdateByExampleWithoutBLOBsElement(answer); + addUpdateByExampleSelectiveElement(answer);*/ + return answer; + } + + @Override + protected void addInsertSelectiveElement(XmlElement parentElement) { + if (introspectedTable.getRules().generateInsertSelective()) { + AbstractXmlElementGenerator elementGenerator = new MyInsertSelectiveElementGenerator(); + initializeAndExecuteGenerator(elementGenerator, parentElement); + } + } + + @Override + protected void addUpdateByPrimaryKeySelectiveElement(XmlElement parentElement) { + if (introspectedTable.getRules().generateUpdateByPrimaryKeySelective()) { + AbstractXmlElementGenerator elementGenerator = new MyUpdateByPrimaryKeySelectiveElementGenerator(); + initializeAndExecuteGenerator(elementGenerator, parentElement); + } + } + } + @Override + protected AbstractJavaClientGenerator createJavaClientGenerator() { + if (context.getJavaClientGeneratorConfiguration() == null) { + return null; + } + AbstractJavaClientGenerator javaGenerator; + javaGenerator = new MyJavaMapperGenerator(); + + return javaGenerator; + } + + public class MyJavaMapperGenerator extends JavaMapperGenerator { + + @Override + public List getCompilationUnits() { + progressCallback.startTask(getString("Progress.17", //$NON-NLS-1$ + introspectedTable.getFullyQualifiedTable().toString())); + CommentGenerator commentGenerator = context.getCommentGenerator(); + + FullyQualifiedJavaType type = new FullyQualifiedJavaType( + introspectedTable.getMyBatis3JavaMapperType()); + Interface interfaze = new Interface(type); + interfaze.setVisibility(JavaVisibility.PUBLIC); + commentGenerator.addJavaFileComment(interfaze); + + String rootInterface = introspectedTable + .getTableConfigurationProperty(PropertyRegistry.ANY_ROOT_INTERFACE); + if (!stringHasValue(rootInterface)) { + rootInterface = context.getJavaClientGeneratorConfiguration() + .getProperty(PropertyRegistry.ANY_ROOT_INTERFACE); + } + + if (stringHasValue(rootInterface)) { + FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType( + rootInterface); + interfaze.addSuperInterface(fqjt); + interfaze.addImportedType(fqjt); + } + interfaze.addSuperInterface(new FullyQualifiedJavaType("tk.mybatis.mapper.common.Mapper<"+getTableNameFromConfigFile()+"DO>")); + interfaze.addImportedType(new FullyQualifiedJavaType("tk.mybatis.mapper.common.Mapper")); + interfaze.addImportedType(new FullyQualifiedJavaType(calculateJavaModelPackage() + "."+getTableNameFromConfigFile()+"DO")); + //addInsertSelectiveMethod(interfaze); + //addUpdateByPrimaryKeySelectiveMethod(interfaze); + List methods = interfaze.getMethods(); + for (Method method : methods) { + List parameters = method.getParameters(); + for (Parameter parameter : parameters) { + String name = parameter.getName(); + parameter.addAnnotation("@Param(\""+ name+"\")"); + } + } + /*addSelectByExampleWithBLOBsMethod(interfaze); + addSelectByExampleWithoutBLOBsMethod(interfaze); + addUpdateByExampleSelectiveMethod(interfaze); + addUpdateByExampleWithoutBLOBsMethod(interfaze);*/ + List answer = new ArrayList(); + if (context.getPlugins().clientGenerated(interfaze, null, introspectedTable)) { + answer.add(interfaze); + } + + List extraCompilationUnits = getExtraCompilationUnits(); + if (extraCompilationUnits != null) { + answer.addAll(extraCompilationUnits); + } + + return answer; + } + } + + public class MyInsertSelectiveElementGenerator extends InsertSelectiveElementGenerator{ + + public MyInsertSelectiveElementGenerator() { + super(); + } + + @Override + public void addElements(XmlElement parentElement) { + XmlElement answer = new XmlElement("insert"); //$NON-NLS-1$ + + answer.addAttribute(new Attribute( + "id", introspectedTable.getInsertSelectiveStatementId())); //$NON-NLS-1$ + + /* + FullyQualifiedJavaType parameterType = introspectedTable.getRules() + .calculateAllFieldsClass(); + answer.addAttribute(new Attribute("parameterType", //$NON-NLS-1$ + parameterType.getFullyQualifiedName()));*/ + + context.getCommentGenerator().addComment(answer); + + GeneratedKey gk = introspectedTable.getGeneratedKey(); + if (gk != null) { + IntrospectedColumn introspectedColumn = introspectedTable + .getColumn(gk.getColumn()); + /*if (introspectedColumn != null) { + if (gk.isJdbcStandard()) { + answer.addAttribute(new Attribute("useGeneratedKeys", "true")); //$NON-NLS-1$ //$NON-NLS-2$ + answer.addAttribute(new Attribute("keyProperty", introspectedColumn.getJavaProperty())); //$NON-NLS-1$ + answer.addAttribute(new Attribute("keyColumn", introspectedColumn.getActualColumnName())); //$NON-NLS-1$ + } else { + answer.addElement(getSelectKey(introspectedColumn, gk)); + } + }*/ + if(introspectedColumn != null){ + answer.addAttribute(new Attribute("useGeneratedKeys", "true")); //$NON-NLS-1$ //$NON-NLS-2$ + answer.addAttribute(new Attribute("keyProperty", "record."+introspectedColumn.getJavaProperty())); //$NON-NLS-1$ + answer.addAttribute(new Attribute("keyColumn", introspectedColumn.getActualColumnName())); //$NON-NLS-1$ + } + } + + StringBuilder sb = new StringBuilder(); + + sb.append("insert into "); //$NON-NLS-1$ + sb.append(introspectedTable.getFullyQualifiedTableNameAtRuntime()); + answer.addElement(new TextElement(sb.toString())); + + XmlElement insertTrimElement = new XmlElement("trim"); //$NON-NLS-1$ + insertTrimElement.addAttribute(new Attribute("prefix", "(")); //$NON-NLS-1$ //$NON-NLS-2$ + insertTrimElement.addAttribute(new Attribute("suffix", ")")); //$NON-NLS-1$ //$NON-NLS-2$ + insertTrimElement.addAttribute(new Attribute("suffixOverrides", ",")); //$NON-NLS-1$ //$NON-NLS-2$ + answer.addElement(insertTrimElement); + + XmlElement valuesTrimElement = new XmlElement("trim"); //$NON-NLS-1$ + valuesTrimElement.addAttribute(new Attribute("prefix", "values (")); //$NON-NLS-1$ //$NON-NLS-2$ + valuesTrimElement.addAttribute(new Attribute("suffix", ")")); //$NON-NLS-1$ //$NON-NLS-2$ + valuesTrimElement.addAttribute(new Attribute("suffixOverrides", ",")); //$NON-NLS-1$ //$NON-NLS-2$ + answer.addElement(valuesTrimElement); + + for (IntrospectedColumn introspectedColumn : ListUtilities.removeIdentityAndGeneratedAlwaysColumns(introspectedTable.getAllColumns())) { + + if (introspectedColumn.isSequenceColumn() || introspectedColumn.getFullyQualifiedJavaType().isPrimitive()) { + sb.setLength(0); + sb.append(MyBatis3FormattingUtilities + .getEscapedColumnName(introspectedColumn)); + sb.append(','); + insertTrimElement.addElement(new TextElement(sb.toString())); + + sb.setLength(0); + sb.append(MyBatis3FormattingUtilities + .getParameterClause(introspectedColumn)); + sb.append(','); + valuesTrimElement.addElement(new TextElement(sb.toString())); + + continue; + } + + sb.setLength(0); + sb.append("record."); + sb.append(introspectedColumn.getJavaProperty()); + sb.append(" != null"); //$NON-NLS-1$ + XmlElement insertNotNullElement = new XmlElement("if"); //$NON-NLS-1$ + insertNotNullElement.addAttribute(new Attribute( + "test", sb.toString())); //$NON-NLS-1$ + + sb.setLength(0); + sb.append(MyBatis3FormattingUtilities + .getEscapedColumnName(introspectedColumn)); + sb.append(','); + insertNotNullElement.addElement(new TextElement(sb.toString())); + insertTrimElement.addElement(insertNotNullElement); + + sb.setLength(0); + sb.append("record."); + sb.append(introspectedColumn.getJavaProperty()); + sb.append(" != null"); //$NON-NLS-1$ + XmlElement valuesNotNullElement = new XmlElement("if"); //$NON-NLS-1$ + valuesNotNullElement.addAttribute(new Attribute( + "test", sb.toString())); //$NON-NLS-1$ + + sb.setLength(0); + sb.append("#{record."+introspectedColumn.getJavaProperty() + "}"); + sb.append(','); + valuesNotNullElement.addElement(new TextElement(sb.toString())); + valuesTrimElement.addElement(valuesNotNullElement); + } + + if (context.getPlugins().sqlMapInsertSelectiveElementGenerated(answer, introspectedTable)) { + parentElement.addElement(answer); + } + } + } + + public class MyUpdateByPrimaryKeySelectiveElementGenerator extends UpdateByPrimaryKeySelectiveElementGenerator{ + public MyUpdateByPrimaryKeySelectiveElementGenerator() { + super(); + } + + @Override + public void addElements(XmlElement parentElement) { + XmlElement answer = new XmlElement("update"); //$NON-NLS-1$ + + answer.addAttribute(new Attribute( + "id", introspectedTable.getUpdateByPrimaryKeySelectiveStatementId())); //$NON-NLS-1$ + + String parameterType; + + if (introspectedTable.getRules().generateRecordWithBLOBsClass()) { + parameterType = introspectedTable.getRecordWithBLOBsType(); + } else { + parameterType = introspectedTable.getBaseRecordType(); + } + context.getCommentGenerator().addComment(answer); + + StringBuilder sb = new StringBuilder(); + + sb.append("update "); //$NON-NLS-1$ + sb.append(introspectedTable.getFullyQualifiedTableNameAtRuntime()); + answer.addElement(new TextElement(sb.toString())); + + XmlElement dynamicElement = new XmlElement("set"); //$NON-NLS-1$ + answer.addElement(dynamicElement); + + for (IntrospectedColumn introspectedColumn : ListUtilities.removeGeneratedAlwaysColumns(introspectedTable.getNonPrimaryKeyColumns())) { + sb.setLength(0); + sb.append("record."); + sb.append(introspectedColumn.getJavaProperty()); + sb.append(" != null"); //$NON-NLS-1$ + XmlElement isNotNullElement = new XmlElement("if"); //$NON-NLS-1$ + isNotNullElement.addAttribute(new Attribute("test", sb.toString())); //$NON-NLS-1$ + dynamicElement.addElement(isNotNullElement); + + sb.setLength(0); + sb.append(MyBatis3FormattingUtilities + .getEscapedColumnName(introspectedColumn)); + sb.append(" = "); + sb.append("#{record."+introspectedColumn.getJavaProperty() + "}"); + sb.append(','); + + isNotNullElement.addElement(new TextElement(sb.toString())); + } + + boolean and = false; + for (IntrospectedColumn introspectedColumn : introspectedTable.getPrimaryKeyColumns()) { + sb.setLength(0); + if (and) { + sb.append(" and "); //$NON-NLS-1$ + } else { + sb.append("where "); //$NON-NLS-1$ + and = true; + } + + sb.append(MyBatis3FormattingUtilities + .getEscapedColumnName(introspectedColumn)); + sb.append(" = "); + sb.append("#{record."+introspectedColumn.getJavaProperty() + "}"); + answer.addElement(new TextElement(sb.toString())); + } + + if (context.getPlugins() + .sqlMapUpdateByPrimaryKeySelectiveElementGenerated(answer, + introspectedTable)) { + parentElement.addElement(answer); + } + } + } +} diff --git a/coolstore-partner-dao/src/test/java/generator/defined/MyPluginAdapter.java b/coolstore-partner-dao/src/test/java/generator/defined/MyPluginAdapter.java new file mode 100644 index 000000000..a886d32ba --- /dev/null +++ b/coolstore-partner-dao/src/test/java/generator/defined/MyPluginAdapter.java @@ -0,0 +1,228 @@ +package generator.defined; + +import org.apache.commons.lang3.StringUtils; +import org.mybatis.generator.api.IntrospectedColumn; +import org.mybatis.generator.api.IntrospectedTable; +import org.mybatis.generator.api.PluginAdapter; +import org.mybatis.generator.api.dom.java.*; +import org.mybatis.generator.api.dom.xml.Document; +import org.mybatis.generator.api.dom.xml.XmlElement; +import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.AbstractXmlElementGenerator; + +import java.sql.Types; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + + +/** + * @author zhangchenbiao + * @FileName: MyPluginAdapter + * @Description: 自定义生成器 + * @date 2021-11-18 14:11 + */ +public class MyPluginAdapter extends PluginAdapter { + + @Override + public boolean validate(List list) { + return true; + } + + /** + * model新增import + * @param topLevelClass + * @param introspectedTable + * @return + */ + @Override + public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { + topLevelClass.addImportedType("java.io.Serializable"); + topLevelClass.addImportedType("lombok.Data"); + topLevelClass.addImportedType("lombok.Builder"); + topLevelClass.addImportedType("lombok.NoArgsConstructor"); + topLevelClass.addImportedType("lombok.AllArgsConstructor"); + topLevelClass.addImportedType("io.swagger.annotations.ApiModelProperty"); + topLevelClass.addImportedType("javax.persistence.Table"); + topLevelClass.addAnnotation("@Data"); + topLevelClass.addAnnotation("@Builder"); + topLevelClass.addAnnotation("@NoArgsConstructor"); + topLevelClass.addAnnotation("@AllArgsConstructor"); + topLevelClass.addSuperInterface(new FullyQualifiedJavaType("java.io.Serializable")); + return true; + } + + /** + * model不生成set方法 + * @param method + * @param topLevelClass + * @param introspectedColumn + * @param introspectedTable + * @param modelClassType + * @return + */ + @Override + public boolean modelSetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) { + return false; + } + + /** + * model不生成get方法 + * @param method + * @param topLevelClass + * @param introspectedColumn + * @param introspectedTable + * @param modelClassType + * @return + */ + @Override + public boolean modelGetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) { + return false; + } + + /** + * sql文件 新增动态sql + * @param document + * @param introspectedTable + * @return + */ + @Override + public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) { + AbstractXmlElementGenerator elementGenerator = new CustomAbstractXmlElementGenerator(); + elementGenerator.setContext(context); + elementGenerator.setIntrospectedTable(introspectedTable); + elementGenerator.addElements(document.getRootElement()); + return super.sqlMapDocumentGenerated(document, introspectedTable); + } + + /** + * mapper文件备注 + * @param interfaze + * @param topLevelClass + * @param introspectedTable + * @return + */ + @Override + public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { + interfaze.addJavaDocLine("/**"); + interfaze.addJavaDocLine(" * @author zhangchenbiao" ); + interfaze.addJavaDocLine(" * @date " + (new SimpleDateFormat("yyyy-MM-dd hh:mm")).format(new Date())); + interfaze.addJavaDocLine(" */"); + return super.clientGenerated(interfaze, topLevelClass, introspectedTable); + } + + /** + * sql新增动态sql + */ + public class CustomAbstractXmlElementGenerator extends AbstractXmlElementGenerator { + + @Override + public void addElements(XmlElement parentElement) { + /*String tableName =getTableName(); + // 增加base_query + XmlElement sql = new XmlElement("sql"); + sql.addAttribute(new Attribute("id", "dynamicQuery")); + //在这里添加where条件 + XmlElement selectTrimElement = new XmlElement("trim"); //设置trim标签 + selectTrimElement.addAttribute(new Attribute("prefix", "WHERE")); + selectTrimElement.addAttribute(new Attribute("prefixOverrides", "AND | OR")); //添加where和and + StringBuilder sb = new StringBuilder(); + for(IntrospectedColumn introspectedColumn : introspectedTable.getAllColumns()) { + XmlElement selectNotNullElement = new XmlElement("if"); //$NON-NLS-1$ + sb.setLength(0); + sb.append("null != "); + sb.append(introspectedColumn.getJavaProperty()); + selectNotNullElement.addAttribute(new Attribute("test", sb.toString())); + sb.setLength(0); + // 添加and + sb.append(" and "); + // 添加别名t + sb.append("t."); + sb.append(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn)); + // 添加等号 + sb.append(" = "); + sb.append("#{"+ introspectedColumn.getJavaProperty() +"}"); + selectNotNullElement.addElement(new TextElement(sb.toString())); + selectTrimElement.addElement(selectNotNullElement); + } + + //sql.addElement(selectTrimElement); + parentElement.addElement(sql); + + // 公用include + XmlElement include = new XmlElement("include"); + include.addAttribute(new Attribute("refid", "dynamicQuery"));*/ + + } + + private String getTableName() { + String tableName = introspectedTable.getTableConfiguration().getTableName(); + String tableSuffix = tableName.substring(tableName.lastIndexOf("_") + 1); + if(StringUtils.isNotBlank(tableSuffix) && tableSuffix.length() == 32){ + //企业库 + return tableName.substring(0, tableName.lastIndexOf("_")) + ""; + } + //平台库 + return tableName; + } + + } + + /** + * 对数据库中的tinyint->byte 处理为 tinyint->integer + * @param field + * @param topLevelClass + * @param introspectedColumn + * @param introspectedTable + * @param modelClassType + * @return + */ + @Override + public boolean modelFieldGenerated(Field field, + TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, + IntrospectedTable introspectedTable, + ModelClassType modelClassType){ + int jdbcType = introspectedColumn.getJdbcType(); + if(jdbcType == Types.TINYINT){ + field.setType(new FullyQualifiedJavaType(Integer.class.getName())); + } + return true; + } + + @Override + public void initialized(IntrospectedTable introspectedTable) { + String tableName = introspectedTable.getFullyQualifiedTableNameAtRuntime(); + // 将tableName转换为驼峰命名(这里假设你已经有了相应的方法) + String camelCaseTableName = toCamelCase(tableName.replace("xfsg", "")); + + // 设置 domainObjectName + introspectedTable.setIbatis2SqlMapFileName(camelCaseTableName + "DO"); + + // 设置 mapperName,注意这个属性可能需要在生成XML后手动设置到XML文件中 + introspectedTable.setMyBatis3XmlMapperFileName(camelCaseTableName + "Mapper.xml"); + } + + public static String toCamelCase(String input) { + if (input == null || input.isEmpty()) { + return ""; + } + + StringBuilder camelCaseString = new StringBuilder(input.length()); + boolean capitalizeNext = false; + + for (int i = 0; i < input.length(); i++) { + char ch = input.charAt(i); + + if (ch == '_') { + capitalizeNext = true; + } else if (capitalizeNext) { + camelCaseString.append(Character.toUpperCase(ch)); + capitalizeNext = false; + } else { + camelCaseString.append(Character.toLowerCase(ch)); + } + } + + return camelCaseString.toString(); + } + +} diff --git a/coolstore-partner-dao/src/test/java/generator/defined/TKMyPluginAdapter.java b/coolstore-partner-dao/src/test/java/generator/defined/TKMyPluginAdapter.java new file mode 100644 index 000000000..848d3db67 --- /dev/null +++ b/coolstore-partner-dao/src/test/java/generator/defined/TKMyPluginAdapter.java @@ -0,0 +1,58 @@ +package generator.defined; + +import org.mybatis.generator.api.IntrospectedTable; +import org.mybatis.generator.api.PluginAdapter; +import java.util.List; + + +/** + * @author zhangchenbiao + * @FileName: MyPluginAdapter + * @Description: 自定义生成器 + * @date 2021-11-18 14:11 + */ +public class TKMyPluginAdapter extends PluginAdapter { + + @Override + public boolean validate(List list) { + return true; + } + + @Override + public void initialized(IntrospectedTable introspectedTable) { + String tableName = introspectedTable.getFullyQualifiedTableNameAtRuntime(); + // 将tableName转换为驼峰命名(这里假设你已经有了相应的方法) + String camelCaseTableName = toCamelCase(tableName.replace("xfsg", "")); + + // 设置 domainObjectName + introspectedTable.setIbatis2SqlMapFileName(camelCaseTableName + "DO"); + + // 设置 mapperName,注意这个属性可能需要在生成XML后手动设置到XML文件中 + introspectedTable.setMyBatis3XmlMapperFileName(camelCaseTableName + "Mapper.xml"); + } + + public static String toCamelCase(String input) { + if (input == null || input.isEmpty()) { + return ""; + } + + StringBuilder camelCaseString = new StringBuilder(input.length()); + boolean capitalizeNext = false; + + for (int i = 0; i < input.length(); i++) { + char ch = input.charAt(i); + + if (ch == '_') { + capitalizeNext = true; + } else if (capitalizeNext) { + camelCaseString.append(Character.toUpperCase(ch)); + capitalizeNext = false; + } else { + camelCaseString.append(Character.toLowerCase(ch)); + } + } + + return camelCaseString.toString(); + } + +} diff --git a/coolstore-partner-dao/src/test/resources/mybatis-generator-tk.xml b/coolstore-partner-dao/src/test/resources/mybatis-generator-tk.xml new file mode 100644 index 000000000..6b8db94d0 --- /dev/null +++ b/coolstore-partner-dao/src/test/resources/mybatis-generator-tk.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
\ 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 new file mode 100644 index 000000000..86f13ac92 --- /dev/null +++ b/coolstore-partner-dao/src/test/resources/mybatis-generator.properties @@ -0,0 +1,8 @@ +jdbc.driver = com.mysql.cj.jdbc.Driver +jdbc.url = jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_69?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true +jdbc.user= coolstore +jdbc.password = CSCErYcXniNYm7bT + +table.name = xfsg_open_new_shop_record +table.object.class = OpenNewShopRecordDO +table.mapper = OpenNewShopRecordMapper \ No newline at end of file diff --git a/coolstore-partner-dao/src/test/resources/mybatis-generator.xml b/coolstore-partner-dao/src/test/resources/mybatis-generator.xml new file mode 100644 index 000000000..4b55b1f4d --- /dev/null +++ b/coolstore-partner-dao/src/test/resources/mybatis-generator.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
\ No newline at end of file diff --git a/coolstore-partner-manage.iml b/coolstore-partner-manage.iml new file mode 100644 index 000000000..00372004a --- /dev/null +++ b/coolstore-partner-manage.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-model/pom.xml b/coolstore-partner-model/pom.xml new file mode 100644 index 000000000..6630076d8 --- /dev/null +++ b/coolstore-partner-model/pom.xml @@ -0,0 +1,36 @@ + + + + coolstore-partner-manage + com.coolstore + 1.0.0 + + 4.0.0 + + coolstore-partner-model + + + 8 + 8 + + + + + com.coolstore + coolstore-partner-common + + + com.github.xiaoymin + knife4j-spring-boot-starter + + + javax.persistence + persistence-api + 1.0 + compile + + + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/InvestmentCountDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/InvestmentCountDTO.java new file mode 100644 index 000000000..980b445a3 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/InvestmentCountDTO.java @@ -0,0 +1,29 @@ +package com.cool.store.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/5/7 15:08 + * @Version 1.0 + */ +@Data +public class InvestmentCountDTO { + + @ApiModelProperty("意向加盟数量") + private Integer intendCount; + @ApiModelProperty("邀约面谈数据") + private Integer interviewCount; + @ApiModelProperty("一审面试数据") + private Integer firstInterviewCount; + @ApiModelProperty("缴纳意向金数据") + private Integer payStageCount; + @ApiModelProperty("意向签约数据") + private Integer signingCount; + @ApiModelProperty("门店体验数量") + private Integer storeExperienceCount; + @ApiModelProperty("二审面试数据") + private Integer secondInterviewCount; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/OpenCityDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/OpenCityDTO.java new file mode 100644 index 000000000..99435c0b8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/OpenCityDTO.java @@ -0,0 +1,21 @@ +package com.cool.store.dto; + +import com.cool.store.annotation.Excel; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/3/25 17:03 + * @Version 1.0 + */ +@Data +public class OpenCityDTO { + + @Excel(name = "CODE", width = 10) + private Integer code; + @Excel(name = "NAME", width = 20) + private String name; + + private String path; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/PendingCountDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/PendingCountDTO.java new file mode 100644 index 000000000..979b78c72 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/PendingCountDTO.java @@ -0,0 +1,35 @@ +package com.cool.store.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/4/8 19:12 + * @Version 1.0 + */ +@Data +public class PendingCountDTO { + + @ApiModelProperty("加盟申请待处理") + private Integer intendPendingCount; + @ApiModelProperty("邀约面谈待处理数据") + private Integer interviewPendingCount; + @ApiModelProperty("一审面试待处理数据") + private Integer firstInterviewPendingCount; + @ApiModelProperty("支付待处理数据") + private Integer payStagePendingCount; + @ApiModelProperty("意向签约待处理数据") + private Integer signingPendingCount; + @ApiModelProperty("门店实训待处理数量") + private Integer storeExperiencePendingCount; + @ApiModelProperty("二审面试待处理数据") + private Integer secondInterviewPendingCount; + @ApiModelProperty("总数") + private Integer totalCount; + + public Integer getTotalCount() { + totalCount = intendPendingCount + interviewPendingCount + firstInterviewPendingCount + payStagePendingCount + signingPendingCount + storeExperiencePendingCount + secondInterviewPendingCount; + return totalCount; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/Preparation/PreparationDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/Preparation/PreparationDTO.java new file mode 100644 index 000000000..636c72ccb --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/Preparation/PreparationDTO.java @@ -0,0 +1,38 @@ +package com.cool.store.dto.Preparation; + +import lombok.Data; + +import java.util.Date; + +/** + * @Author suzhuhong + * @Date 2024/4/26 15:40 + * @Version 1.0 + */ +@Data +public class PreparationDTO { + + private Long id; + + private Long lineId; + + private String shopName; + + private String storeNum; + + private String shopManagerUserId; + + private Long regionId; + + private Date planOpenTime; + + private String username; + + private String mobile; + + private String investmentManager; + + private String supervisorUserId; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/Preparation/ScheduleDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/Preparation/ScheduleDTO.java new file mode 100644 index 000000000..3853eaf84 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/Preparation/ScheduleDTO.java @@ -0,0 +1,23 @@ +package com.cool.store.dto.Preparation; + +import lombok.Data; + +import java.util.Date; + +/** + * @Author suzhuhong + * @Date 2024/4/26 16:19 + * @Version 1.0 + */ +@Data +public class ScheduleDTO { + + private Long shopId; + + private Date planCompleteTime; + + private Integer totalColumn; + + private Integer completionColumn; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/RegionNode.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/RegionNode.java new file mode 100644 index 000000000..4ea2b32ff --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/RegionNode.java @@ -0,0 +1,100 @@ +package com.cool.store.dto; + +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import java.util.List; + +/** + * @ClassName RegionNode + * @Description 用一句话描述什么 + */ +@Data +public class RegionNode { + /** + * 自增ID + */ + private Long id; + + /** + * 区域ID + */ + private String regionId; + + /** + * 名称 + */ + private String name; + /** + * 父ID + */ + private String parentId; + + private String parentName; + + /** + * 分组ID + */ + private String groupId; + + /** + * 创建时间 + */ + private Long createTime; + /** + * 创建人 + */ + private String createName; + /** + * 更新时间 + */ + private Long updateTime; + /** + * 更新人 + */ + private String updateName; + + /** + * 子节点 + */ + private List children; + + /** + * 是否有区域权限 + */ + private Boolean isAuth; + + /** + * 门店数量 + */ + private Long storeCount; + + /** + * dinging部门id + */ + private String synDingDeptId; + + /** + * root path store + */ + private String regionType; + + /** + * 路径 + */ + private String regionPath; + + private String fullRegionPath; + + public String getFullRegionPath() { + if(id != null && id == 1L){ + return "/1/"; + } + if (StringUtils.isNotBlank(regionPath)) { + return regionPath + id + "/"; + } else { + return "/" + id + "/"; + } + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/SmallVideoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/SmallVideoDTO.java new file mode 100644 index 000000000..57a27e198 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/SmallVideoDTO.java @@ -0,0 +1,60 @@ +package com.cool.store.dto; + +import lombok.Data; + +/** + * 上传的视频 + * + * @author chenyupeng + * @since 2021/10/9 + */ +@Data +public class SmallVideoDTO { + + /** + * 视频id + */ + private String videoId; + + /** + * 视频url + */ + private String videoUrl; + + /** + * 原视频url + */ + private String videoUrlBefore; + + /** + * 视频截图封面 + */ + private String videoSnapshot; + + /** + * 视频大小 + */ + private Long size; + + /** + * 转码状态 + * @see com.coolcollege.intelligent.common.enums.video.ResourceStatusEnum + */ + private Integer status; + + /** + * 上传是否完成 + */ + private boolean uploadStatus = false; + + /** + * 截图是否完成 + */ + private boolean snapShotStatus = false; + + /** + * 转码是否完成 + */ + private boolean transCodeStatus = false; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/SmallVideoInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/SmallVideoInfoDTO.java new file mode 100644 index 000000000..f8d9bb2cb --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/SmallVideoInfoDTO.java @@ -0,0 +1,24 @@ +package com.cool.store.dto; + +import lombok.Data; + +import java.util.List; + +/** + * @author chenyupeng + * @since 2021/10/12 + */ +@Data +public class SmallVideoInfoDTO { + + /** + * 视频集合 + */ + private List videoList; + + /** + * 音频合计 + */ + private List soundRecordingList; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/StaffExamInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/StaffExamInfoDTO.java new file mode 100644 index 000000000..79fb51046 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/StaffExamInfoDTO.java @@ -0,0 +1,36 @@ +package com.cool.store.dto; + +import lombok.Data; + +/** + * @author byd + * @date 2024-05-08 14:07 + */ +@Data +public class StaffExamInfoDTO { + + /** + * 考试名称 + */ + private String examName; + /** + * 姓名 + */ + private String staffName; + /** + * 部门 + */ + private String deptPath; + /** + * 员工编号 + */ + private String staffNumber; + /** + * 考试结果 + */ + private String examResult; + /** + * 考试分数 + */ + private String examScore; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/TransferLogDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/TransferLogDTO.java new file mode 100644 index 000000000..61bb5bddf --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/TransferLogDTO.java @@ -0,0 +1,27 @@ +package com.cool.store.dto; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/3/29 19:13 + * @Version 1.0 + */ +@Data +public class TransferLogDTO { + + private String fromUserId; + + private String toUserId; + + private String fromUserName; + + private String toUserName; + + private String fromUserMobile; + + private String toUserMobile; + + private Integer type; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/UserRoleDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/UserRoleDTO.java new file mode 100644 index 000000000..da659db45 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/UserRoleDTO.java @@ -0,0 +1,22 @@ +package com.cool.store.dto; + +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/content/ContentAddDto.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/content/ContentAddDto.java new file mode 100644 index 000000000..88cfb700c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/content/ContentAddDto.java @@ -0,0 +1,32 @@ +package com.cool.store.dto.content; + +import com.cool.store.enums.ContentSubjectEnum; +import com.cool.store.enums.ContentTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ContentAddDto { + + @ApiModelProperty(value = "标题", required = true) + private String contentTitle; + + @ApiModelProperty(value = "状态,0.启用1.禁用", required = true) + private String status; + + @ApiModelProperty(value = "栏目code", required = true) + private ContentSubjectEnum subject; + + @ApiModelProperty(value = "类型", required = true) + private ContentTypeEnum contentType; + + @ApiModelProperty(value = "封面地址", required = true) + private String cover; + + @ApiModelProperty(value = "内容(文字信息或视频地址)", required = true) + private String content; + + @ApiModelProperty(value = "创建用户id", required = true) + private String createUserId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/content/ContentDelDto.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/content/ContentDelDto.java new file mode 100644 index 000000000..8458c06ca --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/content/ContentDelDto.java @@ -0,0 +1,12 @@ +package com.cool.store.dto.content; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ContentDelDto { + + @ApiModelProperty("动态id") + private String contentId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/content/ContentQueryDetailDto.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/content/ContentQueryDetailDto.java new file mode 100644 index 000000000..b3cff95bd --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/content/ContentQueryDetailDto.java @@ -0,0 +1,12 @@ +package com.cool.store.dto.content; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ContentQueryDetailDto { + + @ApiModelProperty("动态id") + private String contentId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/content/ContentQueryListDto.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/content/ContentQueryListDto.java new file mode 100644 index 000000000..64432436a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/content/ContentQueryListDto.java @@ -0,0 +1,29 @@ +package com.cool.store.dto.content; + +import com.cool.store.common.PageBasicInfo; +import com.cool.store.enums.ContentSubjectEnum; +import com.cool.store.enums.ContentTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class ContentQueryListDto extends PageBasicInfo { + + @ApiModelProperty("标题") + private String contentTitle; + + @ApiModelProperty("栏目Code") + private ContentSubjectEnum subject; + + @ApiModelProperty("类型,默认选中全部时不传值") + private ContentTypeEnum contentType; + + @ApiModelProperty("筛选开始时间") + private String startTime; + + @ApiModelProperty("筛选结束时间") + private String endTime; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/content/ContentQueryTitlesDto.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/content/ContentQueryTitlesDto.java new file mode 100644 index 000000000..f0d085ade --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/content/ContentQueryTitlesDto.java @@ -0,0 +1,12 @@ +package com.cool.store.dto.content; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ContentQueryTitlesDto { + + @ApiModelProperty("用户输入标题") + private String title; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/content/ContentUpdateDto.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/content/ContentUpdateDto.java new file mode 100644 index 000000000..29d754498 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/content/ContentUpdateDto.java @@ -0,0 +1,35 @@ +package com.cool.store.dto.content; + +import com.cool.store.enums.ContentSubjectEnum; +import com.cool.store.enums.ContentTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ContentUpdateDto { + + @ApiModelProperty(value = "动态id", required = true) + private String contentId; + + @ApiModelProperty("标题") + private String contentTitle; + + @ApiModelProperty("状态,0.启用1.禁用") + private String status; + + @ApiModelProperty("栏目code") + private ContentSubjectEnum subject; + + @ApiModelProperty("类型") + private ContentTypeEnum contentType; + + @ApiModelProperty("封面地址") + private String cover; + + @ApiModelProperty("内容(文字信息或视频地址)") + private String content; + + @ApiModelProperty(value = "更新用户id", required = true) + private String updateUserId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/AssessmentDataDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/AssessmentDataDTO.java new file mode 100644 index 000000000..49a2d3877 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/AssessmentDataDTO.java @@ -0,0 +1,39 @@ +package com.cool.store.dto.decoration; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +/** + * @Auther: WangShuo + * @Date: 2024/05/06/下午3:31 + * @Version 1.0 + * @注释: + */ +@Data +public class AssessmentDataDTO { + + private Long id; + @ApiModelProperty("模板id") + private Long templateId; + /** + * 店铺是否合格 + */ + @ApiModelProperty("店铺是否合格,false不合格,true合格") + private Boolean qualified; + /** + * 原因 + */ + @ApiModelProperty("不合格原因") + private String reason; + /** + * 评语 + */ + @ApiModelProperty("评语") + private String comments; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/AttachmentsDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/AttachmentsDTO.java new file mode 100644 index 000000000..5f3e5f5c4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/AttachmentsDTO.java @@ -0,0 +1,25 @@ +package com.cool.store.dto.decoration; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/4/28 15:06 + * @Version 1.0 + */ +@Data +public class AttachmentsDTO { + @ApiModelProperty("标题") + private String title; + private Long id; + @ApiModelProperty("路径") + private String path; + @ApiModelProperty("创建人") + private String create; + @ApiModelProperty("创建时间") + private String createDate; + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/BudgetDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/BudgetDTO.java new file mode 100644 index 000000000..763b468b3 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/BudgetDTO.java @@ -0,0 +1,106 @@ +package com.cool.store.dto.decoration; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/28 15:17 + * @Version 1.0 + */ + +public class BudgetDTO { + @ApiModelProperty("预算主键") + private Long id; + @ApiModelProperty("名称") + private String name; + @ApiModelProperty("计价类型") + private String type; + @ApiModelProperty("合计") + private BigDecimal vzHj; + @ApiModelProperty("取费合计") + private BigDecimal totalAmount; + @ApiModelProperty("成本合计") + private BigDecimal totalCost; + @ApiModelProperty("创建时间") + private String createDate; + @ApiModelProperty("创建人") + private String createBy; + @ApiModelProperty("预算详情") + private List details; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public BigDecimal getVzHj() { + return vzHj; + } + + public void setVzHj(BigDecimal vzHj) { + this.vzHj = vzHj.setScale(2, BigDecimal.ROUND_HALF_UP); + } + + public BigDecimal getTotalAmount() { + return totalAmount; + } + + public void setTotalAmount(BigDecimal totalAmount) { + this.totalAmount = totalAmount.setScale(2, BigDecimal.ROUND_HALF_UP); + } + + public BigDecimal getTotalCost() { + return totalCost; + } + + public void setTotalCost(BigDecimal totalCost) { + this.totalCost = totalCost.setScale(2, BigDecimal.ROUND_HALF_UP); + } + + public String getCreateDate() { + return createDate; + } + + public void setCreateDate(String createDate) { + this.createDate = createDate; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public List getDetails() { + return details; + } + + public void setDetails(List details) { + this.details = details; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/BudgetDetailDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/BudgetDetailDTO.java new file mode 100644 index 000000000..52a103a91 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/BudgetDetailDTO.java @@ -0,0 +1,225 @@ +package com.cool.store.dto.decoration; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @Author suzhuhong + * @Date 2024/4/28 15:18 + * @Version 1.0 + */ +@Data +public class BudgetDetailDTO { + @ApiModelProperty("预算详情主键") + private Long id; + @ApiModelProperty("类型") + private String nodeType; + @ApiModelProperty("项目编号") + private String number; + @ApiModelProperty("项目名称") + private String name; + @ApiModelProperty("单位") + private String unitName; + @ApiModelProperty("预算工程量") + private String amount; + @ApiModelProperty("单价") + private BigDecimal unitPrice; + @ApiModelProperty("预算合计") + private BigDecimal totalPrice; + @ApiModelProperty("人工单价") + private BigDecimal labour; + @ApiModelProperty("材料单价") + private BigDecimal material; + @ApiModelProperty("主材成本") + private BigDecimal mainMaterialCostPrice; + @ApiModelProperty("辅材成本") + private BigDecimal auxiliaryMaterialCostPrice; + @ApiModelProperty("人工成本") + private BigDecimal labourCostPrice; + @ApiModelProperty("结算工程量") + private String remark; + @ApiModelProperty("结算合计") + private BigDecimal loss; + @ApiModelProperty("综合成本") + private BigDecimal totalCost; + @ApiModelProperty("成本单价") + private BigDecimal cost; + @ApiModelProperty("损耗单价") + private BigDecimal lossPrice; + @ApiModelProperty("计划利润") + private BigDecimal planProfit; + @ApiModelProperty("利润率") + private BigDecimal profitRate; + @ApiModelProperty("唯一供应商") + private String supplierName; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getNodeType() { + return nodeType; + } + + public void setNodeType(String nodeType) { + this.nodeType = nodeType; + } + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUnitName() { + return unitName; + } + + public void setUnitName(String unitName) { + this.unitName = unitName; + } + + public String getAmount() { + return amount; + } + + public void setAmount(String amount) { + this.amount = amount; + } + + public BigDecimal getUnitPrice() { + return unitPrice; + } + + public void setUnitPrice(BigDecimal unitPrice) { + this.unitPrice = unitPrice.setScale(2, BigDecimal.ROUND_HALF_UP); + } + + public BigDecimal getTotalPrice() { + return totalPrice; + } + + public void setTotalPrice(BigDecimal totalPrice) { + this.totalPrice = totalPrice.setScale(2, BigDecimal.ROUND_HALF_UP); + } + + public BigDecimal getLabour() { + return labour; + } + + public void setLabour(BigDecimal labour) { + this.labour = labour.setScale(2, BigDecimal.ROUND_HALF_UP); + } + + public BigDecimal getMaterial() { + return material; + } + + public void setMaterial(BigDecimal material) { + this.material = material.setScale(2, BigDecimal.ROUND_HALF_UP); + } + + public BigDecimal getMainMaterialCostPrice() { + return mainMaterialCostPrice; + } + + public void setMainMaterialCostPrice(BigDecimal mainMaterialCostPrice) { + this.mainMaterialCostPrice = mainMaterialCostPrice.setScale(2, BigDecimal.ROUND_HALF_UP); + } + + public BigDecimal getAuxiliaryMaterialCostPrice() { + return auxiliaryMaterialCostPrice; + } + + public void setAuxiliaryMaterialCostPrice(BigDecimal auxiliaryMaterialCostPrice) { + this.auxiliaryMaterialCostPrice = auxiliaryMaterialCostPrice.setScale(2, BigDecimal.ROUND_HALF_UP); + } + + public BigDecimal getLabourCostPrice() { + return labourCostPrice; + } + + public void setLabourCostPrice(BigDecimal labourCostPrice) { + this.labourCostPrice = labourCostPrice.setScale(2, BigDecimal.ROUND_HALF_UP); + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public BigDecimal getLoss() { + return loss; + } + + public void setLoss(BigDecimal loss) { + this.loss = loss.setScale(2, BigDecimal.ROUND_HALF_UP); + } + + public BigDecimal getTotalCost() { + return totalCost; + } + + public void setTotalCost(BigDecimal totalCost) { + this.totalCost = totalCost.setScale(2, BigDecimal.ROUND_HALF_UP); + } + + public BigDecimal getCost() { + return cost; + } + + public void setCost(BigDecimal cost) { + this.cost = cost.setScale(2, BigDecimal.ROUND_HALF_UP); + } + + public BigDecimal getLossPrice() { + return lossPrice; + } + + public void setLossPrice(BigDecimal lossPrice) { + this.lossPrice = lossPrice.setScale(2, BigDecimal.ROUND_HALF_UP); + } + + public BigDecimal getPlanProfit() { + return planProfit; + } + + public void setPlanProfit(BigDecimal planProfit) { + this.planProfit = planProfit.setScale(2, BigDecimal.ROUND_HALF_UP); + } + + public BigDecimal getProfitRate() { + return profitRate; + } + + public void setProfitRate(BigDecimal profitRate) { + this.profitRate = profitRate.setScale(2, BigDecimal.ROUND_HALF_UP); + } + + public String getSupplierName() { + return supplierName; + } + + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/ConstructionScheduleDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/ConstructionScheduleDTO.java new file mode 100644 index 000000000..7e1415cc4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/ConstructionScheduleDTO.java @@ -0,0 +1,36 @@ +package com.cool.store.dto.decoration; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDate; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/28 15:02 + * @Version 1.0 + */ +@Data +public class ConstructionScheduleDTO { + private String id; + @ApiModelProperty("施工名称") + private String name; + @ApiModelProperty("计划开始时间") + private String planBeginDate; + @ApiModelProperty("计划结束时间") + private String planEndDate; + @ApiModelProperty("实际开始时间") + private String actualBeginDate; + @ApiModelProperty("实际结束时间") + private String actualEndDate; + @ApiModelProperty("工期") + private Integer duration; + @ApiModelProperty("状态(-1.不显示 0.未开工 1.施工中 2.已完工)") + private Integer state; + @ApiModelProperty("施工进度附件") + private List attachments; + @ApiModelProperty("跟进日志") + private List trackData; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationDTO.java new file mode 100644 index 000000000..7c7d1bc0c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationDTO.java @@ -0,0 +1,35 @@ +package com.cool.store.dto.decoration; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/28 15:21 + * @Version 1.0 + */ +@Data +public class DecorationDTO { + @ApiModelProperty("项目主键") + private String projectId; + @ApiModelProperty("客户编号") + private String clientCode; + @ApiModelProperty("项目编号") + private String clientName; + @ApiModelProperty("项目编码") + private String pCode; + @ApiModelProperty("客户编号") + private String clientContractCode; + @ApiModelProperty("项目地址") + private String address; + @ApiModelProperty("预算") + private List proposedBookBudget; + @ApiModelProperty("设计进度") + private List designScheme; + @ApiModelProperty("收款单据") + private List payment; + @ApiModelProperty("施工进度") + private List constructionSchedule; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationModelDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationModelDTO.java new file mode 100644 index 000000000..e82de962a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DecorationModelDTO.java @@ -0,0 +1,17 @@ +package com.cool.store.dto.decoration; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @Auther: WangShuo + * @Date: 2024/04/28/下午9:33 + * @Version 1.0 + * @注释: + */ +@Data +public class DecorationModelDTO { + private BigDecimal totalAmount; + private String payUrl; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DesignRowsDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DesignRowsDTO.java new file mode 100644 index 000000000..e0dc8bc67 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DesignRowsDTO.java @@ -0,0 +1,16 @@ +package com.cool.store.dto.decoration; + +import lombok.Data; + +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/04/28/下午8:41 + * @Version 1.0 + * @注释: + */ +@Data +public class DesignRowsDTO { + private List rows; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DesignSchemeDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DesignSchemeDTO.java new file mode 100644 index 000000000..4d8533f3b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/DesignSchemeDTO.java @@ -0,0 +1,35 @@ +package com.cool.store.dto.decoration; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/28 15:12 + * @Version 1.0 + */ +@Data +public class DesignSchemeDTO { + + private String id; + @ApiModelProperty("名称") + private String name; + @ApiModelProperty("说明") + private String remark; + @ApiModelProperty("预计时间") + private String date; + @ApiModelProperty("计划开始") + private String planBeginDate; + @ApiModelProperty("计划结束") + private String planEndDate; + @ApiModelProperty("开始时间") + private String beginDate; + @ApiModelProperty("完成时间") + private String endDate; + @ApiModelProperty("状态(0.验收未通过 1.未开始 2.设计中 3.未验收 4.验收未通过 5.待审批 6.审批驳回 7.审批中 8.审批作废 9.审批通过 10.审批验收未通过 11.验收通过)") + private Integer status; + @ApiModelProperty("设计进度附件") + private List attachments; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/FileDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/FileDTO.java new file mode 100644 index 000000000..40b25aebb --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/FileDTO.java @@ -0,0 +1,26 @@ +package com.cool.store.dto.decoration; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDate; + +/** + * @Author suzhuhong + * @Date 2024/4/28 14:53 + * @Version 1.0 + */ +@Data +public class FileDTO { + + private Long id; + @ApiModelProperty("路径") + private String path; + @ApiModelProperty("标题") + private String title; + @ApiModelProperty("创建人") + private String create; + @ApiModelProperty("创建时间") + private String createDate; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/PaymentDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/PaymentDTO.java new file mode 100644 index 000000000..3a1cd68cb --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/PaymentDTO.java @@ -0,0 +1,40 @@ +package com.cool.store.dto.decoration; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/28 15:14 + * @Version 1.0 + */ +@Data +public class PaymentDTO { + private String id; + @ApiModelProperty("单据日期") + private String billDate; + @ApiModelProperty("单据编号") + private String billNo; + @ApiModelProperty("制单人") + private String userName; + @ApiModelProperty("应收金额") + private BigDecimal amount; + @ApiModelProperty("本次收款") + private BigDecimal bDeAmount; + @ApiModelProperty("业务类别") + private String typeCategory; + @ApiModelProperty("收款账户") + private String accountName; + @ApiModelProperty("状态(0.保存 2.审核 3.提交审批") + private Integer state; + @ApiModelProperty("审核日期") + private String auditTime; + @ApiModelProperty("审核人") + private String auditUser; + @ApiModelProperty("付款单附件") + private List attachments; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/ProjectDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/ProjectDTO.java new file mode 100644 index 000000000..3c382f220 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/ProjectDTO.java @@ -0,0 +1,24 @@ +package com.cool.store.dto.decoration; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Auther: WangShuo + * @Date: 2024/04/28/下午5:37 + * @Version 1.0 + * @注释: + */ +@Data +public class ProjectDTO { + @ApiModelProperty("项目主键") + private Long projectId; + @ApiModelProperty("客户编号") + private String clientCode; + @ApiModelProperty("客户名称") + private String clientName; + @ApiModelProperty("项目编码") + private String pCode; + @ApiModelProperty("项目地址") + private String address; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/RowsDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/RowsDTO.java new file mode 100644 index 000000000..e7a4cdbcf --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/RowsDTO.java @@ -0,0 +1,17 @@ +package com.cool.store.dto.decoration; + +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/28 19:19 + * @Version 1.0 + */ +@Data +public class RowsDTO{ + + private List rows; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/ThreeAcceptanceDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/ThreeAcceptanceDTO.java new file mode 100644 index 000000000..e60d85788 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/ThreeAcceptanceDTO.java @@ -0,0 +1,28 @@ +package com.cool.store.dto.decoration; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @Auther: WangShuo + * @Date: 2024/05/06/下午3:09 + * @Version 1.0 + * @注释: + */ +@Data +public class ThreeAcceptanceDTO { + @ApiModelProperty("验收签名 ") + private String pic; + @ApiModelProperty("验收评语") + private String remark; + @ApiModelProperty("1通过,0不通过") + private Integer result; + @ApiModelProperty("验收时间") + private Date acceptanceTime; + @ApiModelProperty + private Integer status; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/TrackDataDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/TrackDataDTO.java new file mode 100644 index 000000000..f98452698 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/decoration/TrackDataDTO.java @@ -0,0 +1,27 @@ +package com.cool.store.dto.decoration; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/28 14:54 + * @Version 1.0 + */ +@Data +public class TrackDataDTO { + + private Long id; + @ApiModelProperty("跟进人") + private String person; + @ApiModelProperty("备注(内容)") + private String remark; + @ApiModelProperty("日期") + private String date; + @ApiModelProperty("回复ID") + private Integer RepalyId; + @ApiModelProperty("跟进日志附件") + private List file; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/ehr/FranchiseeInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/ehr/FranchiseeInfoDTO.java new file mode 100644 index 000000000..e245d20e8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/ehr/FranchiseeInfoDTO.java @@ -0,0 +1,159 @@ +package com.cool.store.dto.ehr; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import java.util.List; + +/** + * 加盟商信息查询 + */ +@NoArgsConstructor +@Data +public class FranchiseeInfoDTO { + @ApiModelProperty("自增主键") + private int keyId; + @ApiModelProperty("加盟商编号") + private String frId; + @ApiModelProperty("加盟商姓名") + private String frName; + @ApiModelProperty("加盟商手机号码") + private String frMobile; + @ApiModelProperty("身份证号") + private String idCard; + @ApiModelProperty("身份证地址") + private String idCardAddress; + @ApiModelProperty("性别:0-女,1-男") + private int sex; + @ApiModelProperty("状态:0-蓄水池,1-查看,2-正式,3-解约") + private int stat; + @ApiModelProperty("缴款时间") + private String payDateStr; + @ApiModelProperty("生效日期") + private String eftDate; + @ApiModelProperty("结束日期") + private String endDateStr; + @ApiModelProperty("收款账户") + private String retAccount; + @ApiModelProperty("开户行") + private String bank; + @ApiModelProperty("开户行名称") + private String bankName; + @ApiModelProperty("开户行支行") + private String bankSub; + @ApiModelProperty("开户行支行名称") + private String bankSubName; + @ApiModelProperty("备注") + private String remark; + @ApiModelProperty("省份代码") + private String provinceCode; + @ApiModelProperty("省份名称") + private String provinceName; + @ApiModelProperty("城市代码") + private String cityCode; + @ApiModelProperty("城市名称") + private String cityName; + @ApiModelProperty("生日") + private Date birthday; + @ApiModelProperty("微信号") + private String wechat; + @ApiModelProperty("投资方式") + private String investType; + @ApiModelProperty("其它业务/生意") + private String otherBusinesses; + @ApiModelProperty("合伙人") + private List partners; + @ApiModelProperty("资金来源") + private String capitalSource; + @ApiModelProperty("投资金额,单位:万") + private String capitalAmount; + @ApiModelProperty("水果行业从业经验") + private String experience; + @ApiModelProperty("是否有亲属在鲜丰工作") + private int workAtXf; + @ApiModelProperty("亲属工号(有亲属在鲜丰工作)") + private String jobNo; + @ApiModelProperty("行业类型") + private String industryType; + @ApiModelProperty("文化程度") + private String education; + @ApiModelProperty("紧急联系人姓名") + private String contactName; + @ApiModelProperty("紧急联系人电话") + private String contactPhone; + @ApiModelProperty("面试信息id") + private String interviewId; + @ApiModelProperty("面试视频地址") + private String videoUrl; + @ApiModelProperty("面试得分表地址") + private String tableUrl; + @ApiModelProperty("身份证原件正面地址") + private String idCardFrontUrl; + @ApiModelProperty("身份证原件背面地址") + private String idCardBackUrl; + @ApiModelProperty("面试状态") + private String state; + @ApiModelProperty("开户银行编码") + private String bankCode; + @ApiModelProperty("支行编码") + private String bankSubCode; + @ApiModelProperty("加盟费") + private int franchiseFee; + @ApiModelProperty("保证金") + private int deposit; + @ApiModelProperty("合同开始时间") + private Date contractStartDate; + @ApiModelProperty("合同结束时间") + private Date contractEndDate; + @ApiModelProperty("合同附件") + private String attachmentUrl; + @ApiModelProperty("签约类型:0-个人签约;1-企业签约") + private int signType; + @ApiModelProperty("法人") + private String legalPerson; + @ApiModelProperty("营业期限") + private String businessTerm; + @ApiModelProperty("OA流程编号") + private String processNum; + @ApiModelProperty("") + private int bind; + @ApiModelProperty("") + private int sign; + @ApiModelProperty("") + private int business; + @ApiModelProperty("门店信息") + private List storeInfoVOS; + + @Data + public static class FranchiseePartnerDTO{ + @ApiModelProperty("合伙人姓名") + private String name; + @ApiModelProperty("合伙人电话") + private String phone; + } + + @Data + public static class FranchiseeStoreInfoDTO{ + @ApiModelProperty("门店代码") + private String storeCode; + @ApiModelProperty("门店名称") + private String storeName; + @ApiModelProperty("开店/关店") + private String status; + @ApiModelProperty("正常营业/关店") + private String businessStatus; + @ApiModelProperty("解约") + private String signingStatus; + @ApiModelProperty("解约原因") + private String unbindCause; + @ApiModelProperty("浙北大区/萧山战区/萧山一区域") + private String area; + @ApiModelProperty("加盟商姓名") + private String franchiseeName; + @ApiModelProperty("加盟商编码") + private String frId; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/ehr/StaffBaseInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/ehr/StaffBaseInfoDTO.java new file mode 100644 index 000000000..9bbb9928d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/ehr/StaffBaseInfoDTO.java @@ -0,0 +1,64 @@ +package com.cool.store.dto.ehr; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 员工详细信息数据接口 + */ +@NoArgsConstructor +@Data +public class StaffBaseInfoDTO { + + @ApiModelProperty("姓名") + private String name; + + @ApiModelProperty("工号") + private String staffNumber; + + @ApiModelProperty("身份证") + private String idCard; + + @ApiModelProperty("部门code") + private String departmentCode; + + @ApiModelProperty("部门名称") + private String departmentName; + + @ApiModelProperty("岗位Id") + private String jobId; + + @ApiModelProperty("岗位名称") + private String jobName; + + @ApiModelProperty("员工状态:0离职、1转正、2试用、3实习、4待离职、5临时工、6暑假工、7兼职工") + private Integer status; + + @ApiModelProperty("性别") + private String sex; + + @ApiModelProperty("生日") + private String birthday; + + @ApiModelProperty("身份证-人像面") + private String idNumPhoto; + + @ApiModelProperty("身份证-国徽面") + private String emblemPhoto; + + @ApiModelProperty("最高学历") + private String highestDegree; + + @ApiModelProperty("手机号(OA侧绑定的手机号)") + private String phone; + + @ApiModelProperty("入职日期") + private String entryDate; + + @ApiModelProperty("年龄") + private String age; + + @ApiModelProperty("健康证") + private String healthCertificate; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/ehr/SyncXfsgTrainingPersonInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/ehr/SyncXfsgTrainingPersonInfoDTO.java new file mode 100644 index 000000000..e76c9a464 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/ehr/SyncXfsgTrainingPersonInfoDTO.java @@ -0,0 +1,37 @@ +package com.cool.store.dto.ehr; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 鲜丰门店下培训人员拉取 + * @author chenyupeng + * @since 2021/8/17 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SyncXfsgTrainingPersonInfoDTO { + + /** + * 企业id + */ + private String enterpriseId; + /** + * 工号 + */ + private String jobnumber; + /** + * 身份证号码 + */ + private String idCard; + /** + * 门店编号 + */ + private String storeNum; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/interview/LineInterviewPageDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/interview/LineInterviewPageDTO.java new file mode 100644 index 000000000..7688c4bd3 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/interview/LineInterviewPageDTO.java @@ -0,0 +1,60 @@ +package com.cool.store.dto.interview; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: LineInterviewPageDTO + * @Description: + * @date 2024-03-19 16:11 + */ +@Data +public class LineInterviewPageDTO { + + @ApiModelProperty("面试id") + private Long interviewId; + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("线索姓名") + private String username; + + @ApiModelProperty("手机号") + private String mobile; + + @ApiModelProperty("意向区域") + private Long wantShopAreaId; + + @ApiModelProperty("用户标签") + private String userPortrait; + + @ApiModelProperty("计划开始时间") + private String startTime; + + @ApiModelProperty("计划结束时间") + private String endTime; + + @ApiModelProperty("面试状态") + private Integer interviewStatus; + + @ApiModelProperty("招商经理") + private String investmentManager; + + @ApiModelProperty("线索来源") + private Integer lineSource; + + @ApiModelProperty("实际开始时间") + private String actualStartTime; + + @ApiModelProperty("实际结束时间") + private String actualEndTime; + + @ApiModelProperty("面审人") + private String interviewerUserId; + + @ApiModelProperty("房间id") + private String roomId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelAddDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelAddDTO.java new file mode 100644 index 000000000..2f3bda9d8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelAddDTO.java @@ -0,0 +1,19 @@ +package com.cool.store.dto.label; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author Fun Li 2023/8/10 15:55 + * @version 1.0 + */ +@Data +public class LabelAddDTO { + + @ApiModelProperty(value = "标签名称", required = true) + private String labelName; + + @ApiModelProperty(value = "标签组id", required = true) + private Long labelGroupId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelDeleteDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelDeleteDTO.java new file mode 100644 index 000000000..a7ce64ffc --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelDeleteDTO.java @@ -0,0 +1,16 @@ +package com.cool.store.dto.label; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author Fun Li 2023/8/10 16:43 + * @version 1.0 + */ +@Data +public class LabelDeleteDTO { + + @ApiModelProperty(value = "标签id", required = true) + private Long id; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelGroupAddDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelGroupAddDTO.java new file mode 100644 index 000000000..c1bb425b4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelGroupAddDTO.java @@ -0,0 +1,19 @@ +package com.cool.store.dto.label; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @author Fun Li 2023/8/10 13:28 + * @version 1.0 + */ +@Data +public class LabelGroupAddDTO { + + @ApiModelProperty(value = "标签组名称", required = true) + private @NotBlank(message = "镖标签组名称不能为空") + String labelGroupName; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelGroupDeleteDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelGroupDeleteDTO.java new file mode 100644 index 000000000..c0506da42 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelGroupDeleteDTO.java @@ -0,0 +1,16 @@ +package com.cool.store.dto.label; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author Fun Li 2023/8/10 13:29 + * @version 1.0 + */ +@Data +public class LabelGroupDeleteDTO { + + @ApiModelProperty("id") + private Long id; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelGroupListDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelGroupListDTO.java new file mode 100644 index 000000000..beb94ff57 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelGroupListDTO.java @@ -0,0 +1,19 @@ +package com.cool.store.dto.label; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author Fun Li 2023/8/10 13:29 + * @version 1.0 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class LabelGroupListDTO extends PageBasicInfo { + + @ApiModelProperty(value = "标签组名称", required = false) + private String labelGroupName; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelGroupUpdateDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelGroupUpdateDTO.java new file mode 100644 index 000000000..a3a19c9d7 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelGroupUpdateDTO.java @@ -0,0 +1,22 @@ +package com.cool.store.dto.label; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @author Fun Li 2023/8/10 13:30 + * @version 1.0 + */ +@Data +public class LabelGroupUpdateDTO { + + @ApiModelProperty(value = "id", required = true) + private Long id; + + @ApiModelProperty(value = "标签组名称", required = true) + private @NotBlank(message = "标签组名称不能为空") + String labelGroupName; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelListDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelListDTO.java new file mode 100644 index 000000000..a4668055b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelListDTO.java @@ -0,0 +1,22 @@ +package com.cool.store.dto.label; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author Fun Li 2023/8/10 14:46 + * @version 1.0 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class LabelListDTO extends PageBasicInfo { + + @ApiModelProperty(value = "标签名称") + private String labelName; + + @ApiModelProperty(value = "标签组id") + private Long labelGroupId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelUpdateDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelUpdateDTO.java new file mode 100644 index 000000000..1a50d8f92 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/label/LabelUpdateDTO.java @@ -0,0 +1,22 @@ +package com.cool.store.dto.label; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author Fun Li 2023/8/10 16:03 + * @version 1.0 + */ +@Data +public class LabelUpdateDTO { + + @ApiModelProperty(value = "标签id", required = true) + private Long id; + + @ApiModelProperty(value = "标签名称", required = true) + private String labelName; + + @ApiModelProperty(value = "标签组id", required = true) + private Long labelGroupId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/message/SendMessageDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/message/SendMessageDTO.java new file mode 100644 index 000000000..d63555b8a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/message/SendMessageDTO.java @@ -0,0 +1,97 @@ +package com.cool.store.dto.message; + +import com.alibaba.fastjson.JSONObject; +import lombok.Data; + +@Data +public class SendMessageDTO { + /** + * 钉钉的企业唯一ID + */ + private String corpId; + /** + * 标题 + */ + private String title; + /** + * 内容 + */ + private String content; + /** + * 发送的人员ID集合 + */ + private String userIds; + /** + * PC链接的参数 + */ + private String pcParam; + /** + * 移动链接的参数 + */ + private String mobileParam; + /** + * oa消息的钉钉图片ID + */ + private String picUrl; + /** + * 是否侧边栏打开消息(钉钉PC端) + * 默认为false + */ + private Boolean isSideOpen = false; + /** + * 是否外跳浏览器打开消息 + * 默认为false + */ + private Boolean isJumpOpen = false; + /** + * 是否包含PC端链接(如果不包含,则PC端打开消息时弹出二维码用于移动端扫描) + * 默认为false + */ + private Boolean containPcUrl = false; + /** + * 是否是静态链接(直接发送此链接,可以是H5的固定页面,一般用于推送运营页面) + * 默认为false + */ + private Boolean isStaticUrl = false; + /** + * 静态链接地址 + */ + private String staticUrl; + + /** + * 发送消息业务id标识 + */ + private String outBusinessId; + + /** + * 微应用:micro_app; E应用-e_app; 钉钉:DINGDING; 企业微信:qw + */ + private String appType; + + private JSONObject oaJson; + + private String messageType; + + + public SendMessageDTO() { + + } + + @Override + public String toString() { + return "JmsSendMessageVo{" + + "corpId='" + corpId + '\'' + + ", title='" + title + '\'' + + ", content='" + content + '\'' + + ", userIds=" + userIds + + ", pcParam='" + pcParam + '\'' + + ", mobileParam='" + mobileParam + '\'' + + ", picUrl='" + picUrl + '\'' + + ", isSideOpen=" + isSideOpen + + ", isJumpOpen=" + isJumpOpen + + ", containPcUrl=" + containPcUrl + + ", isStaticUrl=" + isStaticUrl + + ", staticUrl='" + staticUrl + '\'' + + '}'; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/openPreparation/FirstOrderDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/openPreparation/FirstOrderDTO.java new file mode 100644 index 000000000..be06c0050 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/openPreparation/FirstOrderDTO.java @@ -0,0 +1,47 @@ +package com.cool.store.dto.openPreparation; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; +import java.util.Date; + +/** + * @Auther: WangShuo + * @Date: 2024/04/24/下午8:42 + * @Version 1.0 + * @注释: + */ +@Data +public class FirstOrderDTO { + private Long id; + @ApiModelProperty("店铺Id") + private Long shopId; + @ApiModelProperty("首批订货金总额") + private String totalOrderDeposit; + + @ApiModelProperty("最晚打款时间") + private Date latestPaymentDate; + + @ApiModelProperty("物料预计费用") + private String estimatedCost; + + @ApiModelProperty("水果预计费用") + private String fruitsCost; + + @ApiModelProperty("创建人") + private String createUserId; + @ApiModelProperty("加盟商") + private String partnerName; + @ApiModelProperty("创建时间") + private Date createTime; + @ApiModelProperty("更新时间") + private Date updateTime; + @ApiModelProperty("更新人") + private String updateUserId; + + @ApiModelProperty("订货金阶段状态,1500 待上传, 1505 带缴纳,1510 已完成") + private Integer firstOrderSubStage; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/openPreparation/OpenPlanShopInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/openPreparation/OpenPlanShopInfoDTO.java new file mode 100644 index 000000000..a1365e52a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/openPreparation/OpenPlanShopInfoDTO.java @@ -0,0 +1,60 @@ +package com.cool.store.dto.openPreparation; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @Auther: WangShuo + * @Date: 2024/04/24/上午9:53 + * @Version 1.0 + * @注释: + */ +@Data +public class OpenPlanShopInfoDTO { + + @ApiModelProperty("店铺Id") + private Long shopId; + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("区域id") + private Long regionId; + @ApiModelProperty("门店名字") + private String shopName; + + @ApiModelProperty("门店编码") + private String storeNum; + + @ApiModelProperty("开店负责人id") + private String shopManagerUserId; + + @ApiModelProperty("督导id") + private String supervisorUserId; + + @ApiModelProperty("加盟商姓名") + private String partnerName; + + @ApiModelProperty("手机号码") + private String mobile; + + @ApiModelProperty("招商经理id") + private String investmentManagerId; + + @ApiModelProperty("所属大区") + private String bigName; + + @ApiModelProperty("所属战区") + private String fightName; + + @ApiModelProperty("方案审核状态") + private Integer resultType; + + @ApiModelProperty("提交申请时间") + private Date submissionTime; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/openPreparation/OpeningOperationPlanDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/openPreparation/OpeningOperationPlanDTO.java new file mode 100644 index 000000000..486fce2bb --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/openPreparation/OpeningOperationPlanDTO.java @@ -0,0 +1,41 @@ +package com.cool.store.dto.openPreparation; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.util.Date; + +/** + * @Auther: WangShuo + * @Date: 2024/04/23/下午10:09 + * @Version 1.0 + * @注释: + */ +@Data +public class OpeningOperationPlanDTO { + + + private Long shopId; + + @ApiModelProperty("门店名称") + private String shopName; + + @ApiModelProperty("门店代码") + private String shopNum; + + @ApiModelProperty("开店负责人") + private String shopManagerUserId; + + @ApiModelProperty("提交申请时间") + private Date submissionTime; + + @ApiModelProperty("审核结果,0待审核,1通过,2拒绝") + private Integer resultType; + + @ApiModelProperty("更新时间") + private Date updateTime; + + private Long auditId; + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/openPreparation/PlanLineDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/openPreparation/PlanLineDTO.java new file mode 100644 index 000000000..04b2a64e7 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/openPreparation/PlanLineDTO.java @@ -0,0 +1,24 @@ +package com.cool.store.dto.openPreparation; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Auther: WangShuo + * @Date: 2024/04/24/下午5:07 + * @Version 1.0 + * @注释: + */ +@Data +public class PlanLineDTO { + @ApiModelProperty("线索id") + private Long lineId; + + private String mobile; + @ApiModelProperty("加盟商姓名") + private String username; + @ApiModelProperty("招商经理Id") + private String investmentManagerId; + @ApiModelProperty("招商经理姓名") + private String investmentManagerName; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/openPreparation/UserNameDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/openPreparation/UserNameDTO.java new file mode 100644 index 000000000..ca2853209 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/openPreparation/UserNameDTO.java @@ -0,0 +1,21 @@ +package com.cool.store.dto.openPreparation; + +import lombok.Data; + +/** + * @Auther: WangShuo + * @Date: 2024/04/24/上午11:42 + * @Version 1.0 + * @注释: + */ +@Data + +public class UserNameDTO { + + + private String userId; + + private String name; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerOpenNewShopPageDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerOpenNewShopPageDTO.java new file mode 100644 index 000000000..83fceba3b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerOpenNewShopPageDTO.java @@ -0,0 +1,49 @@ +package com.cool.store.dto.partner; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/4/1 11:30 + * @Version 1.0 + */ +@Data +public class PartnerOpenNewShopPageDTO { + + @ApiModelProperty("记录id") + private Long recordId; + + @ApiModelProperty("线索ID") + private Long lineId; + + @ApiModelProperty("加盟商编号") + private String partnerNum; + + @ApiModelProperty("线索名称") + private String username; + + @ApiModelProperty("手机号") + private String mobile; + + @ApiModelProperty("意向加盟区域") + private Long wantShopAreaId; + + @ApiModelProperty("线索标签") + private String userPortrait; + + @ApiModelProperty("意向开店数量") + private Integer wantShopNum; + + @ApiModelProperty("扩展经理名称") + private String developmentManager; + + @ApiModelProperty("线索来源名称") + private Integer lineSource; + + @ApiModelProperty("审核状态 0待审核 1通过 2不通过") + private Integer auditResult; + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/UserChannelDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/UserChannelDTO.java new file mode 100644 index 000000000..2f96a22ec --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/UserChannelDTO.java @@ -0,0 +1,17 @@ +package com.cool.store.dto.partner; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2023/8/10 11:12 + * @Version 1.0 + */ +@Data +public class UserChannelDTO { + + private Long userChannelId; + + private String userChannelName; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/point/AuditNodeDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/point/AuditNodeDTO.java new file mode 100644 index 000000000..8c489ee12 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/point/AuditNodeDTO.java @@ -0,0 +1,96 @@ +package com.cool.store.dto.point; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.entity.PointAuditRecordDO; +import com.cool.store.entity.PointTodoInfoDO; +import com.cool.store.enums.AuditStatusEnum; +import com.cool.store.enums.NodeNoEnum; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: AuditNodeDTO + * @Description: + * @date 2024-04-02 15:10 + */ +@Data +public class AuditNodeDTO { + + @ApiModelProperty("流程号") + private Integer nodeNo; + + @ApiModelProperty("是否待处理") + private Boolean isToDo; + + @ApiModelProperty("动作") + private String actionRemark; + + @ApiModelProperty("用户id") + private List userIds; + + public AuditNodeDTO(Integer nodeNo, List userIds) { + this.nodeNo = nodeNo; + this.userIds = userIds; + } + + public AuditNodeDTO(Integer nodeNo, String actionRemark, Boolean isToDo, List userIds) { + this.nodeNo = nodeNo; + this.actionRemark = actionRemark; + this.isToDo = isToDo; + this.userIds = userIds; + } + + public static List convertDO(Long pointId, Integer cycleCount, List nodeList){ + if(CollectionUtils.isEmpty(nodeList)){ + return Lists.newArrayList(); + } + List resultList = new ArrayList<>(); + for (AuditNodeDTO auditNode : nodeList) { + PointAuditRecordDO node = new PointAuditRecordDO(); + node.setPointId(pointId); + node.setNodeNo(auditNode.getNodeNo()); + node.setCycleCount(cycleCount); + node.setActionRemark(auditNode.getActionRemark()); + node.setHandlerUserIds(JSONObject.toJSONString(auditNode.getUserIds())); + if(Objects.nonNull(auditNode.isToDo) && auditNode.isToDo){ + node.setReceiveTaskTime(new Date()); + } + if(NodeNoEnum.NODE_NO_0.getCode().equals(auditNode.getNodeNo())){ + node.setHandlerUserId(auditNode.getUserIds().get(0)); + node.setReceiveTaskTime(new Date()); + node.setFinishTaskTime(new Date()); + node.setAuditStatus(AuditStatusEnum.PASS.getCode()); + } + resultList.add(node); + } + return resultList; + } + + public static List convertTODO(Long pointId, Integer cycleCount, List nodeList){ + if(CollectionUtils.isEmpty(nodeList)){ + return Lists.newArrayList(); + } + List resultList = new ArrayList<>(); + for (AuditNodeDTO auditNode : nodeList) { + if(Objects.nonNull(auditNode.isToDo) && auditNode.isToDo){ + for (String userId : auditNode.getUserIds()) { + PointTodoInfoDO todo = new PointTodoInfoDO(); + todo.setPointId(pointId); + todo.setNodeNo(auditNode.getNodeNo()); + todo.setHandlerUserId(userId); + todo.setCycleCount(cycleCount); + resultList.add(todo); + } + } + } + return resultList; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/point/LineCountDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/point/LineCountDTO.java new file mode 100644 index 000000000..10bf6fc8b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/point/LineCountDTO.java @@ -0,0 +1,24 @@ +package com.cool.store.dto.point; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: LineCountDTO + * @Description: + * @date 2024-04-08 15:52 + */ +@Data +public class LineCountDTO { + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("推荐门店数量") + private Integer recommendShopNum; + + @ApiModelProperty("选择门店数量") + private Integer selectedShopNum; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/point/MiniPointPageDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/point/MiniPointPageDTO.java new file mode 100644 index 000000000..06112fa25 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/point/MiniPointPageDTO.java @@ -0,0 +1,41 @@ +package com.cool.store.dto.point; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class MiniPointPageDTO { + + @ApiModelProperty("店铺id") + private Long pointId; + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("铺位名称") + private String pointName; + + @ApiModelProperty("铺位编号") + private String pointCode; + + @ApiModelProperty("所属站区") + private Long regionId; + + @ApiModelProperty("地址") + private String address; + + @ApiModelProperty("铺位得分") + private Integer pointScore; + + @ApiModelProperty("铺位面积") + private String pointArea; + + @ApiModelProperty("铺位状态 1.采集中、2.已评估、3.待审核、5.已审核、6.已签约、7.已失效") + private Integer pointStatus; + + @ApiModelProperty("选择状态0.未选择, 1.已被选择") + private Integer selectStatus; + + @ApiModelProperty("1.待选择 2.已选择 3.已被他人选择 4.已签约 5.已拒绝 6.已失效") + private Integer recommendStatus; +} \ No newline at end of file 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/trtc/callback/EventInfo.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/trtc/callback/EventInfo.java new file mode 100644 index 000000000..2eb424094 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/trtc/callback/EventInfo.java @@ -0,0 +1,61 @@ +package com.cool.store.dto.trtc.callback; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @Author: young.yu + * @Date: 2023-06-29 01:17 + * @Description: + */ +public class EventInfo { + @JsonProperty("RoomId") + private String roomId; + @JsonProperty("EventTs") + private long eventTs; + @JsonProperty("UserId") + private String userId; + @JsonProperty("TaskId") + private String taskId; + @JsonProperty("Payload") + private Payload payload; + + public String getRoomId() { + return roomId; + } + + public void setRoomId(String roomId) { + this.roomId = roomId; + } + + public long getEventTs() { + return eventTs; + } + + public void setEventTs(long eventTs) { + this.eventTs = eventTs; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public Payload getPayload() { + return payload; + } + + public void setPayload(Payload payload) { + this.payload = payload; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/trtc/callback/Payload.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/trtc/callback/Payload.java new file mode 100644 index 000000000..a705f6b06 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/trtc/callback/Payload.java @@ -0,0 +1,31 @@ +package com.cool.store.dto.trtc.callback; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @Author: young.yu + * @Date: 2023-06-29 01:17 + * @Description: + */ +public class Payload { + @JsonProperty("Status") + private int status; + @JsonProperty("TencentVod") + private TencentVod tencentVod; + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public TencentVod getTencentVod() { + return tencentVod; + } + + public void setTencentVod(TencentVod tencentVod) { + this.tencentVod = tencentVod; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/trtc/callback/TencentVod.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/trtc/callback/TencentVod.java new file mode 100644 index 000000000..9191bfa47 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/trtc/callback/TencentVod.java @@ -0,0 +1,91 @@ +package com.cool.store.dto.trtc.callback; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @Author: young.yu + * @Date: 2023-06-29 01:18 + * @Description: + */ +public class TencentVod { + @JsonProperty("UserId") + private String userId; + @JsonProperty("TrackType") + private String trackType; + @JsonProperty("MediaId") + private String mediaId; + @JsonProperty("FileId") + private String fileId; + @JsonProperty("VideoUrl") + private String videoUrl; + @JsonProperty("CacheFile") + private String cacheFile; + @JsonProperty("StartTimeStamp") + private long startTimeStamp; + @JsonProperty("EndTimeStamp") + private long endTimeStamp; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getTrackType() { + return trackType; + } + + public void setTrackType(String trackType) { + this.trackType = trackType; + } + + public String getMediaId() { + return mediaId; + } + + public void setMediaId(String mediaId) { + this.mediaId = mediaId; + } + + public String getFileId() { + return fileId; + } + + public void setFileId(String fileId) { + this.fileId = fileId; + } + + public String getVideoUrl() { + return videoUrl; + } + + public void setVideoUrl(String videoUrl) { + this.videoUrl = videoUrl; + } + + public String getCacheFile() { + return cacheFile; + } + + public void setCacheFile(String cacheFile) { + this.cacheFile = cacheFile; + } + + public long getStartTimeStamp() { + return startTimeStamp; + } + + public void setStartTimeStamp(long startTimeStamp) { + this.startTimeStamp = startTimeStamp; + } + + public long getEndTimeStamp() { + return endTimeStamp; + } + + public void setEndTimeStamp(long endTimeStamp) { + this.endTimeStamp = endTimeStamp; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/trtc/callback/VideoCallBackDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/trtc/callback/VideoCallBackDTO.java new file mode 100644 index 000000000..6f3bec94c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/trtc/callback/VideoCallBackDTO.java @@ -0,0 +1,51 @@ +package com.cool.store.dto.trtc.callback; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @Author: young.yu + * @Date: 2023-06-29 01:16 + * @Description: + */ +public class VideoCallBackDTO { + @JsonProperty("EventGroupId") + private int eventGroupId; + @JsonProperty("EventType") + private int eventType; + @JsonProperty("CallbackTs") + private long callbackTs; + @JsonProperty("EventInfo") + private EventInfo eventInfo; + + public int getEventGroupId() { + return eventGroupId; + } + + public void setEventGroupId(int eventGroupId) { + this.eventGroupId = eventGroupId; + } + + public int getEventType() { + return eventType; + } + + public void setEventType(int eventType) { + this.eventType = eventType; + } + + public long getCallbackTs() { + return callbackTs; + } + + public void setCallbackTs(long callbackTs) { + this.callbackTs = callbackTs; + } + + public EventInfo getEventInfo() { + return eventInfo; + } + + public void setEventInfo(EventInfo eventInfo) { + this.eventInfo = eventInfo; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/CodeSessionDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/CodeSessionDTO.java new file mode 100644 index 000000000..333a8a6ba --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/CodeSessionDTO.java @@ -0,0 +1,23 @@ +package com.cool.store.dto.wx; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: CodeSessionDTO + * @Description: + * @date 2023-05-29 14:28 + */ +@Data +public class CodeSessionDTO extends WXBaseResultDTO{ + + @JSONField(name = "session_key") + private String sessionKey; + + @JSONField(name = "openid") + private String openid; + + @JSONField(name = "unionid") + private String unionId; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/MiniAppUrlLinkDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/MiniAppUrlLinkDTO.java new file mode 100644 index 000000000..7595de0e3 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/MiniAppUrlLinkDTO.java @@ -0,0 +1,15 @@ +package com.cool.store.dto.wx; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +/** + * @Author: young.yu + * @Date: 2023-09-12 14:48 + * @Description: + */ +@Data +public class MiniAppUrlLinkDTO extends WXBaseResultDTO{ + @JSONField(name = "url_link") + private String urlLink; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/MiniAppUrlLinkReqDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/MiniAppUrlLinkReqDTO.java new file mode 100644 index 000000000..c37dc63e6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/MiniAppUrlLinkReqDTO.java @@ -0,0 +1,14 @@ +package com.cool.store.dto.wx; + +import lombok.Data; + +/** + * @Author: + * @Date: 2023-09-12 14:48 + * @Description: + */ +@Data +public class MiniAppUrlLinkReqDTO { + private String path; + private String query; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/MiniProgramLoginDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/MiniProgramLoginDTO.java new file mode 100644 index 000000000..35f63e869 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/MiniProgramLoginDTO.java @@ -0,0 +1,29 @@ +package com.cool.store.dto.wx; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @author zhangchenbiao + * @FileName: MiniProgramLoginDTO + * @Description: + * @date 2023-05-29 14:28 + */ +@Data +public class MiniProgramLoginDTO { + + @NotBlank(message = "jsCode不能为空") + private String jsCode; + + @NotBlank(message = "手机号code不能为空") + private String mobileCode; + + @NotBlank(message = "用户encryptedData不能为空") + private String encryptedData; + + @NotBlank(message = "ivStr不能为空") + private String ivStr; + + private String userChannelEnum; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/PhoneInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/PhoneInfoDTO.java new file mode 100644 index 000000000..a424549e9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/PhoneInfoDTO.java @@ -0,0 +1,36 @@ +package com.cool.store.dto.wx; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +/** + * @author wxp + * @FileName: PhoneInfoDTO + * @Description: + * @date 2023-06-14 14:28 + */ +@Data +public class PhoneInfoDTO extends WXBaseResultDTO{ + + @JSONField(name = "phone_info") + private PhoneInfo phoneInfo; + + @Data + public static class PhoneInfo{ + /** + * 用户绑定的手机号(国外手机号会有区号) + */ + private String phoneNumber; + + /** + * 没有区号的手机号 + */ + private String purePhoneNumber; + + /** + * 区号 + */ + private String countryCode; + + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/PreOrderDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/PreOrderDTO.java new file mode 100644 index 000000000..7caa053e8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/PreOrderDTO.java @@ -0,0 +1,33 @@ +package com.cool.store.dto.wx; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 动态下单参数 + */ +@Data +@ApiModel +public class PreOrderDTO { + /** + * 订单号(业务) + */ + @ApiModelProperty("订单号") + private String outTradeNo; + /** + * 用户openId + */ + @ApiModelProperty("用户openId") + private String wxOpenId; + /** + * 订单描述 + */ + @ApiModelProperty("订单描述") + private String description; + /** + * 订单总金额,单位为分 + */ + @ApiModelProperty("订单总金额") + private int total; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/WXBaseResultDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/WXBaseResultDTO.java new file mode 100644 index 000000000..b608a32dc --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/WXBaseResultDTO.java @@ -0,0 +1,27 @@ +package com.cool.store.dto.wx; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: WXBaseResultDTO + * @Description: + * @date 2023-05-29 14:52 + */ +@Data +public class WXBaseResultDTO { + + private static final String SUCCESS_CODE = "0"; + + @JSONField(name = "errcode") + private String errCode; + + @JSONField(name = "errmsg") + private String errMsg; + + public boolean isSuccess() { + return this.errCode == null || this.errCode.isEmpty() || this.errCode.equals("0"); + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/xfsgFirstOderDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/xfsgFirstOderDTO.java new file mode 100644 index 000000000..7f11a1b7a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/xfsgFirstOderDTO.java @@ -0,0 +1,15 @@ +package com.cool.store.dto; + +import lombok.Data; + +/** + * @Auther: WangShuo + * @Date: 2024/05/08/下午7:30 + * @Version 1.0 + * @注释: + */ +@Data +public class xfsgFirstOderDTO { + private String storeCode; + private Boolean balance; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/yun/StudentResultDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/yun/StudentResultDTO.java new file mode 100644 index 000000000..ae71638ab --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/yun/StudentResultDTO.java @@ -0,0 +1,31 @@ +package com.cool.store.dto.yun; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/3/25 17:03 + * @Version 1.0 + */ +@Data +public class StudentResultDTO { + + + private String userId; + + /** + * 用户考试状态 0:未开始;1:考试中;2:已提交;3:批阅中;4:已完成 + */ + private Integer userExamStatus; + + /** + * 最新分 + */ + private Float newScore; + + /** + * 是否通过,0:不是;1:是 + */ + private Integer passed; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/AcceptanceInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/AcceptanceInfoDO.java new file mode 100644 index 000000000..81463c1de --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/AcceptanceInfoDO.java @@ -0,0 +1,389 @@ +package com.cool.store.entity; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "xfsg_acceptance_info") +public class AcceptanceInfoDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * xfsg_shop_info.id + */ + @Column(name = "shop_id") + private Long shopId; + + /** + * 进场时间 + */ + @Column(name = "actual_entry_time") + private Date actualEntryTime; + + /** + * 设计阶段计划完成时间 + */ + @Column(name = "planned_completion_time") + private Date plannedCompletionTime; + + /** + * 设计阶段计划开始时间 + */ + @Column(name = "planned_start_time") + private Date plannedStartTime; + + /** + * 装修阶段计划完成时间 + */ + @Column(name = "decoration_planned_completion_time") + private Date decorationPlannedCompletionTime; + + /** + * 装修阶段计划开始时间 + */ + @Column(name = "decoration_planned_start_time") + private Date decorationPlannedStartTime; + + /** + * 施工完成时间 + */ + @Column(name = "construction_completion_time") + private Date constructionCompletionTime; + + /** + * 工程部验收签名 {"pic":"","acceptanceTime":"","result":"","remark":"","status":1} + */ + @Column(name = "engineering_acceptance_signatures") + private String engineeringAcceptanceSignatures; + + /** + * 营运部验收签名 {"pic":"","acceptanceTime":"","result":"","remark":"","status":1} + */ + @Column(name = "operations_acceptance_signatures") + private String operationsAcceptanceSignatures; + /** + * 加密商验收签名 {"pic":"","acceptanceTime":"","result":"","remark":"","status":0} + */ + @Column(name = "partner_acceptance_signatures") + private String partnerAcceptanceSignatures; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + /** + * 是否删除:0.否 1.是 + */ + @Column(name = "deleted") + private Boolean deleted; + /** + * 计划验收时间 + */ + @Column(name = "plan_acceptance_time") + private Date planAcceptanceTime; + + /** + * 实际验收时间 + */ + @Column(name = "actual_acceptance_time") + private Date actualAcceptanceTime; + /** + * 预约人 + */ + @Column(name = "booking_user") + private String bookingUser; + /** + *计划撤场时间 + */ + @Column(name = "plan_exit_time") + private Date planExitTime; + + public Date getPlanExitTime() { + return planExitTime; + } + + public void setPlanExitTime(Date planExitTime) { + this.planExitTime = planExitTime; + } + + public Date getPlanAcceptanceTime() { + return planAcceptanceTime; + } + + public void setPlanAcceptanceTime(Date planAcceptanceTime) { + this.planAcceptanceTime = planAcceptanceTime; + } + + public Date getActualAcceptanceTime() { + return actualAcceptanceTime; + } + + public void setActualAcceptanceTime(Date actualAcceptanceTime) { + this.actualAcceptanceTime = actualAcceptanceTime; + } + + public String getBookingUser() { + return bookingUser; + } + + public void setBookingUser(String bookingUser) { + this.bookingUser = bookingUser; + } + + /** + * @return id + */ + public Long getId() { + return id; + } + + /** + * @param id + */ + public void setId(Long id) { + this.id = id; + } + + /** + * 获取xfsg_shop_info.id + * + * @return shop_id - xfsg_shop_info.id + */ + public Long getShopId() { + return shopId; + } + + /** + * 设置xfsg_shop_info.id + * + * @param shopId xfsg_shop_info.id + */ + public void setShopId(Long shopId) { + this.shopId = shopId; + } + + /** + * 获取进场时间 + * + * @return actual_entry_time - 进场时间 + */ + public Date getActualEntryTime() { + return actualEntryTime; + } + + /** + * 设置进场时间 + * + * @param actualEntryTime 进场时间 + */ + public void setActualEntryTime(Date actualEntryTime) { + this.actualEntryTime = actualEntryTime; + } + + /** + * 获取设计阶段计划完成时间 + * + * @return planned_completion_time - 设计阶段计划完成时间 + */ + public Date getPlannedCompletionTime() { + return plannedCompletionTime; + } + + /** + * 设置设计阶段计划完成时间 + * + * @param plannedCompletionTime 设计阶段计划完成时间 + */ + public void setPlannedCompletionTime(Date plannedCompletionTime) { + this.plannedCompletionTime = plannedCompletionTime; + } + + /** + * 获取设计阶段计划开始时间 + * + * @return planned_start_time - 设计阶段计划开始时间 + */ + public Date getPlannedStartTime() { + return plannedStartTime; + } + + /** + * 设置设计阶段计划开始时间 + * + * @param plannedStartTime 设计阶段计划开始时间 + */ + public void setPlannedStartTime(Date plannedStartTime) { + this.plannedStartTime = plannedStartTime; + } + + /** + * 获取装修阶段计划完成时间 + * + * @return decoration_planned_completion_time - 装修阶段计划完成时间 + */ + public Date getDecorationPlannedCompletionTime() { + return decorationPlannedCompletionTime; + } + + /** + * 设置装修阶段计划完成时间 + * + * @param decorationPlannedCompletionTime 装修阶段计划完成时间 + */ + public void setDecorationPlannedCompletionTime(Date decorationPlannedCompletionTime) { + this.decorationPlannedCompletionTime = decorationPlannedCompletionTime; + } + + /** + * 获取装修阶段计划开始时间 + * + * @return decoration_planned_start_time - 装修阶段计划开始时间 + */ + public Date getDecorationPlannedStartTime() { + return decorationPlannedStartTime; + } + + /** + * 设置装修阶段计划开始时间 + * + * @param decorationPlannedStartTime 装修阶段计划开始时间 + */ + public void setDecorationPlannedStartTime(Date decorationPlannedStartTime) { + this.decorationPlannedStartTime = decorationPlannedStartTime; + } + + /** + * 获取施工完成时间 + * + * @return construction_completion_time - 施工完成时间 + */ + public Date getConstructionCompletionTime() { + return constructionCompletionTime; + } + + /** + * 设置施工完成时间 + * + * @param constructionCompletionTime 施工完成时间 + */ + public void setConstructionCompletionTime(Date constructionCompletionTime) { + this.constructionCompletionTime = constructionCompletionTime; + } + + /** + * 获取工程部验收签名 {"pic":"","acceptanceTime":"","result":"","remark":"","status":1} + * + * @return engineering_acceptance_signatures - 工程部验收签名 {"pic":"","acceptanceTime":"","result":"","remark":"","status":1} + */ + public String getEngineeringAcceptanceSignatures() { + return engineeringAcceptanceSignatures; + } + + /** + * 设置工程部验收签名 {"pic":"","acceptanceTime":"","result":"","remark":"","status":1} + * + * @param engineeringAcceptanceSignatures 工程部验收签名 {"pic":"","acceptanceTime":"","result":"","remark":"","status":1} + */ + public void setEngineeringAcceptanceSignatures(String engineeringAcceptanceSignatures) { + this.engineeringAcceptanceSignatures = engineeringAcceptanceSignatures; + } + + /** + * 获取营运部验收签名 {"pic":"","acceptanceTime":"","result":"","remark":"","status":1} + * + * @return operations_acceptance_signatures - 营运部验收签名 {"pic":"","acceptanceTime":"","result":"","remark":"","status":1} + */ + public String getOperationsAcceptanceSignatures() { + return operationsAcceptanceSignatures; + } + + /** + * 设置营运部验收签名 {"pic":"","acceptanceTime":"","result":"","remark":"","status":1} + * + * @param operationsAcceptanceSignatures 营运部验收签名 {"pic":"","acceptanceTime":"","result":"","remark":"","status":1} + */ + public void setOperationsAcceptanceSignatures(String operationsAcceptanceSignatures) { + this.operationsAcceptanceSignatures = operationsAcceptanceSignatures; + } + + /** + * 获取加密商验收签名 {"pic":"","acceptanceTime":"","result":"","remark":"","status":0} + * + * @return partner_acceptance_signatures - 加密商验收签名 {"pic":"","acceptanceTime":"","result":"","remark":"","status":0} + */ + public String getPartnerAcceptanceSignatures() { + return partnerAcceptanceSignatures; + } + + /** + * 设置加密商验收签名 {"pic":"","acceptanceTime":"","result":"","remark":"","status":0} + * + * @param partnerAcceptanceSignatures 加密商验收签名 {"pic":"","acceptanceTime":"","result":"","remark":"","status":0} + */ + public void setPartnerAcceptanceSignatures(String partnerAcceptanceSignatures) { + this.partnerAcceptanceSignatures = partnerAcceptanceSignatures; + } + + /** + * 获取创建时间 + * + * @return create_time - 创建时间 + */ + public Date getCreateTime() { + return createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * 获取更新时间 + * + * @return update_time - 更新时间 + */ + public Date getUpdateTime() { + return updateTime; + } + + /** + * 设置更新时间 + * + * @param updateTime 更新时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + /** + * 获取是否删除:0.否 1.是 + * + * @return deleted - 是否删除:0.否 1.是 + */ + public Boolean getDeleted() { + return deleted; + } + + /** + * 设置是否删除:0.否 1.是 + * + * @param deleted 是否删除:0.否 1.是 + */ + public void setDeleted(Boolean deleted) { + this.deleted = deleted; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/AssessmentDataDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/AssessmentDataDO.java new file mode 100644 index 000000000..b3a2d9598 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/AssessmentDataDO.java @@ -0,0 +1,62 @@ +package com.cool.store.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "xfsg_assessment_data") +public class AssessmentDataDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * xfsg_assessment_template.id + */ + @Column(name = "template_id") + private Long templateId; + + /** + * xfsg_shop_info id + */ + @Column(name = "shop_id") + private Long shopId; + + /** + * 考核人 + */ + @Column(name = "assessment_user_id") + private String assessmentUserId; + + /** + * 店铺是否合格 + */ + private Boolean qualified; + + /** + * 评分 + */ + private Long score; + + /** + * 原因 + */ + private String reason; + + /** + * 评语 + */ + private String comments; + + private String picture; + + private String video; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/AssessmentTemplateDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/AssessmentTemplateDO.java new file mode 100644 index 000000000..04b9b66a0 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/AssessmentTemplateDO.java @@ -0,0 +1,49 @@ +package com.cool.store.entity; + +import lombok.Data; + +import javax.persistence.*; + +@Data +@Table(name = "xfsg_assessment_template") +public class AssessmentTemplateDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 模板类型:0 - 教练员, 1 - 店长, 2 - 店员, 3 - 三方验收 + */ + private Integer type; + + /** + * 模板类别,可为空 + */ + private String category; + + /** + * 模板名称 + */ + @Column(name = "template_name") + private String templateName; + + /** + * 模板remark + */ + @Column(name = "template_remark") + private String templateRemark; + + /** + * 考核项分值 + */ + private Long score; + + /** + * 模板要求明细,包括详细的考核要求描述 + */ + @Column(name = "template_requirements") + private String templateRequirements; + + @Column(name = "check_type") + private String checkType; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/AuditStatusDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/AuditStatusDO.java new file mode 100644 index 000000000..da916974d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/AuditStatusDO.java @@ -0,0 +1,32 @@ +package com.cool.store.entity; + +import lombok.Data; + +import javax.persistence.*; +import java.util.Date; + +@Data +@Table(name = "xfsg_audit_status") +public class AuditStatusDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @Column(name = "line_id") + private Long lineId; + @Column(name = "interview_id") + private Long interviewId; + @Column(name = "audit_id") + private Long auditId; + @Column(name = "audit_status") + private Integer auditStatus; + @Column(name = "audit_user_id") + private Long auditUserId; + @Column(name = "audit_user_name") + private String auditUserName; + @Column(name = "create_time") + private Date createTime; + @Column(name = "update_time") + private Date updateTime; + @Column(name = "audit_stage") + private Integer auditStage; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/BankdocDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/BankdocDO.java new file mode 100644 index 000000000..caac5a4b6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/BankdocDO.java @@ -0,0 +1,38 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.math.BigDecimal; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * + * @author wxp + * @date 2024-03-27 09:25 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BankdocDO implements Serializable { + @ApiModelProperty("") + private String code; + + @ApiModelProperty("") + private String combinenum; + + @ApiModelProperty("") + private BigDecimal enablestate; + + @ApiModelProperty("") + private String iscustbank; + + @ApiModelProperty("") + private String name; + + @ApiModelProperty("") + private String pkBanktype; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/BanktypeDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/BanktypeDO.java new file mode 100644 index 000000000..d236d5edd --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/BanktypeDO.java @@ -0,0 +1,31 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * + * @author wxp + * @date 2024-03-27 09:25 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BanktypeDO implements Serializable { + @ApiModelProperty("") + private String pkBanktype; + + @ApiModelProperty("") + private String code; + + @ApiModelProperty("") + private String combinecode; + + @ApiModelProperty("") + private String name; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/EmployeeTrainingDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/EmployeeTrainingDO.java new file mode 100644 index 000000000..d964f2c60 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/EmployeeTrainingDO.java @@ -0,0 +1,144 @@ +package com.cool.store.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import javax.persistence.*; +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "xfsg_employee_training") +public class EmployeeTrainingDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * shop_info.id + */ + @Column(name = "shop_id") + private Long shopId; + + /** + * 区域ID + */ + @Column(name = "region_id") + private Long regionId; + + /** + * xfsg_temp_user_detail.id + */ + @Column(name = "xfsg_user_detail_id") + private Long xfsgUserDetailId; + + /** + * 是否分配 0-待分配 1-已分配 + */ + @Column(name = "assign_flag") + private Boolean assignFlag; + + /** + * 实训开始时间 + */ + @Column(name = "training_start_time") + private Date trainingStartTime; + + /** + * 实训结束时间 + */ + @Column(name = "training_end_time") + private Date trainingEndTime; + + /** + * 实训门店ID + */ + @Column(name = "training_store_id") + private String trainingStoreId; + + /** + * 带教老师ID + */ + @Column(name = "training_teacher_user_id") + private String trainingTeacherUserId; + + /** + * 实操考核人员ID + */ + @Column(name = "practical_assessment_user_id") + private String practicalAssessmentUserId; + + /** + * 预计考核时间 + */ + @Column(name = "estimated_assessment_time") + private Date estimatedAssessmentTime; + + /** + * 实际考核时间 + */ + @Column(name = "actual_assessment_time") + private Date actualAssessmentTime; + + /** + * 考核项数 + */ + @Column(name = "assessment_num") + private Integer assessmentNum; + + /** + * 考核总项数 + */ + @Column(name = "assessment_total_num") + private Integer assessmentTotalNum; + + /** + * 理论考试状态 0-未开始 1-合格 2-不合格 + */ + @Column(name = "theoretical_exam_status") + private Integer theoreticalExamStatus; + + /** + * 理论考试分值 + */ + @Column(name = "theoretical_exam_score") + private Integer theoreticalExamScore; + + /** + * 实操考试状态 0-未开始 1-合格 2-不合格 + */ + @Column(name = "practical_exam_status") + private Integer practicalExamStatus; + + /** + * 实操考试分值 + */ + @Column(name = "practical_exam_score") + private Integer practicalExamScore; + + /** + * 考核状态 0-培训中 1-带考核 2-考核通过 3-考核不通过 + */ + @Column(name = "assessment_status") + private Integer assessmentStatus; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + /** + * 是否删除:0.否 1.是 + */ + private Boolean deleted; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/EnterpriseUserDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/EnterpriseUserDO.java new file mode 100644 index 000000000..741639b1b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/EnterpriseUserDO.java @@ -0,0 +1,78 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Date; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * + * @author zhangchenbiao + * @date 2023-06-06 02:29 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EnterpriseUserDO implements Serializable { + @ApiModelProperty("用户主键id") + private String id; + + @ApiModelProperty("用户id") + private String userId; + + @ApiModelProperty("") + private String name; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("手机号码") + private String mobile; + + @ApiModelProperty("员工的电子邮箱") + private String email; + + @ApiModelProperty("员工的企业邮箱") + private String orgEmail; + + @ApiModelProperty("是否是主管理员,0:否,1:是") + private Boolean mainAdmin; + + @ApiModelProperty("是否为企业的管理员, true表示是, false表示不是") + private Boolean isAdmin; + + @ApiModelProperty("在当前isv全局范围内唯一标识一个用户的身份,用户无法修改") + private String unionid; + + @ApiModelProperty("头像url") + private String avatar; + + @ApiModelProperty("工号") + private String jobnumber; + + @ApiModelProperty("是否是部门的主管, true表示是, false表示不是") + private Boolean isLeader; + + private String isLeaderInDepts; + + @ApiModelProperty("人脸照片url") + private String faceUrl; + + @ApiModelProperty("用户状态 0待审核 1正常 2冻结") + private Integer userStatus; + + @ApiModelProperty("用户创建时间") + private Date createTime; + + @ApiModelProperty("部门集合(region_ids)") + private String userRegionIds; + + /** + * 第三方OA系统唯一标识 + */ + private String thirdOaUniqueFlag; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/EnterpriseUserRole.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/EnterpriseUserRole.java new file mode 100644 index 000000000..30f1dd2ed --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/EnterpriseUserRole.java @@ -0,0 +1,42 @@ +package com.cool.store.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @ClassName EnterpriseUserRole + * @Description 用一句话描述什么 + * @author 首亮 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class EnterpriseUserRole { + private Long id; + private String roleId; + private String userId; + + //创建时间 + private Date createTime; + //更新时间 + public EnterpriseUserRole(String roleId, String userId) { + this.roleId = roleId; + this.userId = userId; + this.createTime = new Date(); + } + + private Date updateTime; + + public static List convertList(List roleIds, String userId){ + List resultList = new ArrayList<>(); + for (Long roleId : roleIds) { + resultList.add(new EnterpriseUserRole(String.valueOf(roleId), userId)); + } + return resultList; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/FirstOrderDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/FirstOrderDO.java new file mode 100644 index 000000000..2d455b91c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/FirstOrderDO.java @@ -0,0 +1,241 @@ +package com.cool.store.entity; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "xfsg_first_order") +public class FirstOrderDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * line_info.id + */ + @Column(name = "shop_id") + private Long shopId; + + /** + * 首批订货金总额 + */ + @Column(name = "total_order_deposit") + private String totalOrderDeposit; + + /** + * 最晚打款时间 + */ + @Column(name = "latest_payment_date") + private Date latestPaymentDate; + + /** + * 物料预计费用 + */ + @Column(name = "estimated_cost") + private String estimatedCost; + + /** + * 水果预计费用 + */ + @Column(name = "fruits_cost") + private String fruitsCost; + + /** + * 创建人 + */ + @Column(name = "create_user_id") + private String createUserId; + + /** + * 更新人 + */ + @Column(name = "update_user_id") + private String updateUserId; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + /** + * @return id + */ + public Long getId() { + return id; + } + + /** + * @param id + */ + public void setId(Long id) { + this.id = id; + } + + /** + * 获取line_info.id + * + * @return shop_id - line_info.id + */ + public Long getShopId() { + return shopId; + } + + /** + * 设置line_info.id + * + * @param shopId line_info.id + */ + public void setShopId(Long shopId) { + this.shopId = shopId; + } + + /** + * 获取首批订货金总额 + * + * @return total_order_deposit - 首批订货金总额 + */ + public String getTotalOrderDeposit() { + return totalOrderDeposit; + } + + /** + * 设置首批订货金总额 + * + * @param totalOrderDeposit 首批订货金总额 + */ + public void setTotalOrderDeposit(String totalOrderDeposit) { + this.totalOrderDeposit = totalOrderDeposit; + } + + /** + * 获取最晚打款时间 + * + * @return latest_payment_date - 最晚打款时间 + */ + public Date getLatestPaymentDate() { + return latestPaymentDate; + } + + /** + * 设置最晚打款时间 + * + * @param latestPaymentDate 最晚打款时间 + */ + public void setLatestPaymentDate(Date latestPaymentDate) { + this.latestPaymentDate = latestPaymentDate; + } + + /** + * 获取物料预计费用 + * + * @return estimated_cost - 物料预计费用 + */ + public String getEstimatedCost() { + return estimatedCost; + } + + /** + * 设置物料预计费用 + * + * @param estimatedCost 物料预计费用 + */ + public void setEstimatedCost(String estimatedCost) { + this.estimatedCost = estimatedCost; + } + + /** + * 获取水果预计费用 + * + * @return fruits_cost - 水果预计费用 + */ + public String getFruitsCost() { + return fruitsCost; + } + + /** + * 设置水果预计费用 + * + * @param fruitsCost 水果预计费用 + */ + public void setFruitsCost(String fruitsCost) { + this.fruitsCost = fruitsCost; + } + + /** + * 获取创建人 + * + * @return create_user_id - 创建人 + */ + public String getCreateUserId() { + return createUserId; + } + + /** + * 设置创建人 + * + * @param createUserId 创建人 + */ + public void setCreateUserId(String createUserId) { + this.createUserId = createUserId; + } + + /** + * 获取更新人 + * + * @return update_user_id - 更新人 + */ + public String getUpdateUserId() { + return updateUserId; + } + + /** + * 设置更新人 + * + * @param updateUserId 更新人 + */ + public void setUpdateUserId(String updateUserId) { + this.updateUserId = updateUserId; + } + + /** + * 获取创建时间 + * + * @return create_time - 创建时间 + */ + public Date getCreateTime() { + return createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * 获取更新时间 + * + * @return update_time - 更新时间 + */ + public Date getUpdateTime() { + return updateTime; + } + + /** + * 设置更新时间 + * + * @param updateTime 更新时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java new file mode 100644 index 000000000..31fe07899 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java @@ -0,0 +1,55 @@ +package com.cool.store.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.util.Date; + +@Data +@Table(name = "xfsg_franchise_fee") +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FranchiseFeeDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @Column(name = "shop_id") + private Long shopId; + @Column(name = "pay_id") + private Long payId; + @Column(name = "audit_id") + private Long auditId; + @Column(name = "year_franchise_fee") + private String yearFranchiseFee; + @Column(name = "loan_margin") + private String loanMargin; + @Column(name = "first_year_start_time") + private Date firstYearStartTime; + @Column(name = "first_year_end_time") + private Date firstYearEndTime; + @Column(name = "first_year_fee") + private String firstYearFee; + @Column(name = "second_year_start_time") + private Date secondYearStartTime; + @Column(name = "second_year_end_time") + private Date secondYearEndTime; + @Column(name = "second_year_fee") + private String secondYearFee; + @Column(name = "third_year_start_time") + private Date thirdYearStartTime; + @Column(name = "third_year_end_time") + private Date thirdYearEndTime; + @Column(name = "third_year_fee") + private String thirdYearFee; + @Column(name = "performance_bond") + private String performanceBond; + @Column(name = "create_time") + private Date createTime; + @Column(name = "update_time") + private Date updateTime; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseeDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseeDO.java new file mode 100644 index 000000000..ea5aa9b8f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseeDO.java @@ -0,0 +1,80 @@ +package com.cool.store.entity; + +import lombok.Data; + +@Data +public class FranchiseeDO { + /** + * 开户行 + */ + private String bank; + /** + * 开户行支行 + */ + private String bankSub; + /** + * 生日 + */ + private String birthday; + /** + * 城市代码 + */ + private String cityCode; + /** + * 加盟商手机号码 + */ + private String frMobile; + /** + * 加盟商姓名 + */ + private String frName; + /** + * 个人身份证号/企业统一社会信用代码 + */ + private String idCard; + /** + * 身份证地址/公司地址 + */ + private String idCardAddress; + /** + * 身份证原件国徽面/食品经营许可证上传 + */ + private String idCardBackUrl; + /** + * 身份证原件正面地址/营业执照拍照上传 + */ + private String idCardFrontUrl; + /** + * 操作人工号 + */ + private String operator; + /** + * 缴款时间 + */ + private String payDateStr; + /** + * 省份代码 + */ + private String provinceCode; + /** + * 收款账户 + */ + private String retAccount; + /** + * 性别:0-女,1-男 + */ + private Integer sex; + /** + * 签约类型:0-个人签约;1-企业签约 + */ + private long signType; + /** + * 营业期限 + */ + private String businessTerm; + /** + * 法人 + */ + private String legalPerson; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyContentInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyContentInfoDO.java new file mode 100644 index 000000000..1bcb014f4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyContentInfoDO.java @@ -0,0 +1,58 @@ +package com.cool.store.entity; + +import com.cool.store.enums.ContentSubjectEnum; +import com.cool.store.enums.ContentTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * + * @author zhangchenbiao + * @date 2023-05-29 03:50 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class HyContentInfoDO implements Serializable { + @ApiModelProperty("") + private Long id; + + @ApiModelProperty("内容标题") + private String contentTitle; + + @ApiModelProperty("栏目CODE") + private ContentSubjectEnum subject; + + @ApiModelProperty("类型 image-图文 video-视频") + private ContentTypeEnum contentType; + + @ApiModelProperty("封面URL") + private String cover; + + @ApiModelProperty("状态 0-启用 1-禁用") + private Integer status; + + @ApiModelProperty("删除标志 0-正常 1-删除") + private Integer deleted; + + @ApiModelProperty("创建时间") + private String createTime; + + @ApiModelProperty("更新时间") + private String updateTime; + + @ApiModelProperty("新建人ID") + private String createUserId; + + @ApiModelProperty("更新人ID") + private String updateUserId; + + @ApiModelProperty("图文内容或者视频文件URL") + private String content; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyOpenAreaInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyOpenAreaInfoDO.java new file mode 100644 index 000000000..5f7792a7a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyOpenAreaInfoDO.java @@ -0,0 +1,55 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Date; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * + * @author zhangchenbiao + * @date 2024-05-29 03:51 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class HyOpenAreaInfoDO implements Serializable { + @ApiModelProperty("") + private Long id; + + @ApiModelProperty("parent.id") + private Long parentId; + + @ApiModelProperty("区域名称") + private String areaName; + + @ApiModelProperty("区域路径") + private String areaPath; + + @ApiModelProperty("背景图URL 重点区域时候必填") + private String backgroundBanner; + + @ApiModelProperty("详情banner URL 重点区域时候必填") + private String detailBanner; + + @ApiModelProperty("状态 open-开放 keyOpen-重点开放 notOpen-未开放 saturated-已饱和") + private String areaStatus; + + @ApiModelProperty("删除标志 0-正常 1-删除") + private Integer deleted; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; + + @ApiModelProperty("更新人") + private String updateUserId; + @ApiModelProperty("重点开放城市状态 0-开启 1-禁用") + private Integer keyOpenStatus; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelDO.java new file mode 100644 index 000000000..19ae9f1ff --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelDO.java @@ -0,0 +1,54 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** +* @author Fun Li + * @date 2023/08/10 +*/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class HyPartnerLabelDO { + @ApiModelProperty("") + private Long id; + + @ApiModelProperty("标签组id xfsg_partner_label_group.id") + private Long labelGroupId; + + @ApiModelProperty("标签名") + private String labelName; + + @ApiModelProperty("编辑人user_id(enterprise_user.user_id)") + private String editUserId; + + @ApiModelProperty("编辑时间") + private Date editDate; + + @ApiModelProperty("删除标识") + private Boolean deleted; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; + + @ApiModelProperty("创建人") + private String createUserId; + + @ApiModelProperty("更新人") + private String updateUserId; + + @ApiModelProperty("备注") + private String remark; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelGroupDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelGroupDO.java new file mode 100644 index 000000000..b46f428f5 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelGroupDO.java @@ -0,0 +1,54 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** + * @author Fun Li 2023/8/10 13:31 + * @version 1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class HyPartnerLabelGroupDO { + + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("标签组名称") + + private String labelGroupName; + + @ApiModelProperty("删除标识") + private Boolean deleted; + + @ApiModelProperty("编辑人user_id(enterprise_user.user_id)") + private String editUserId; + + @ApiModelProperty("编辑时间") + private Date editDate; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; + + @ApiModelProperty("创建人(enterprise_user.user_id)") + private String createUserId; + + @ApiModelProperty("更新人(enterprise_user.user_id)") + private String updateUserId; + + @ApiModelProperty("备注") + private String remark; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerUserChannelDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerUserChannelDO.java new file mode 100644 index 000000000..9fae61ace --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerUserChannelDO.java @@ -0,0 +1,40 @@ +package com.cool.store.entity; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * hy_partner_user_channel + * @author + */ +@Data +@Accessors(chain = true) +public class HyPartnerUserChannelDO implements Serializable { + + private Long id; + + /** + * 来源id + */ + private Long channelId; + + /** + * 来源名称 + */ + private String channelName; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新时间 + */ + private Date updateTime; + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerUserInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerUserInfoDO.java new file mode 100644 index 000000000..de1d76447 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerUserInfoDO.java @@ -0,0 +1,52 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * + * @author zhangchenbiao + * @date 2023-05-29 03:53 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class HyPartnerUserInfoDO implements Serializable { + @ApiModelProperty("") + private Long id; + + @ApiModelProperty("xfsg_partner_user_info.partner_id") + private String partnerId; + + @ApiModelProperty("手机号") + private String mobile; + + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; + + @ApiModelProperty("hy_partner_user_channel.channel_id") + private Integer userChannelId; + + @ApiModelProperty("ec意向区域") + private String ecWantShopArea; + + @ApiModelProperty("ec创建时间") + private Date crmCreateTime; + + @ApiModelProperty("微信openid") + private String openid; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/InitiatingDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/InitiatingDO.java new file mode 100644 index 000000000..77f14c961 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/InitiatingDO.java @@ -0,0 +1,100 @@ +package com.cool.store.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + * https://apifox.com/apidoc/shared-c48218f7-4a34-4422-8689-927502f171ff/api-160442266 + * 密码:aJJq9F7k + */ +@Builder +@Data +@NoArgsConstructor +@AllArgsConstructor +public class InitiatingDO { + + private String kdzBusinessId; + + private String title; + + private String apply_user; + + private String apply_user_name; + + private String apply_date; + + private String jms_id_card; + + private String jms_id_card_address; + + private String jms_name; + + private BigDecimal lybzj; + + private BigDecimal lybzjwb; + + private String lybzjdx; + + private String jms_mobile; + + private String annex1; + + private String annex2; + + private String annex3; + + private Integer qy_year; + + private Integer qy_month; + + private Integer qy_day; + + private Integer jy_year; + + private Integer jy_month; + + private Integer jy_day; + + private String yxjzz; + + private Integer xyqx_month; + + private BigDecimal jmf; + + private BigDecimal jmfwb; + + private String jmfdx; + + private BigDecimal jmyxj; + + private BigDecimal jmyxjwb; + + private String jmyxjdx; + + private String csfz; + + private String jmsxx; + + private String annex4; + + private String annex5; + + private String annex6; + + private String annex7; + + private String dkr; + + private String dkrq; + + private Integer jm_type; + + private Integer jms_type; + + private String jm_csgs; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/LeaseBaseInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/LeaseBaseInfoDO.java new file mode 100644 index 000000000..2f6fe996c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/LeaseBaseInfoDO.java @@ -0,0 +1,37 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class LeaseBaseInfoDO { + private Long id; + + private String partnerId; + + private Long lineId; + + private String storeName; + + private String storeId; + + private Date experienceStartTime; + + private Date experienceEndTime; + @ApiModelProperty("体验状态 0完成 1放弃") + private Integer experienceStatus; + @ApiModelProperty("放弃原因") + private String abandonCause; + + private Date createTime; + + private Date updateTime; + + private Integer deleted; + + private String storeManager; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/LicenseTransactDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/LicenseTransactDO.java new file mode 100644 index 000000000..f2d968158 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/LicenseTransactDO.java @@ -0,0 +1,75 @@ +package com.cool.store.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.util.Date; + +@Table(name = "xfsg_license_transact") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LicenseTransactDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @Column(name = "shop_id") + private Long shopId; + @Column(name = "business_license") + private String businessLicense; + @Column(name = "license_type") + private Integer licenseType; + @Column(name = "license_legal_person") + private String licenseLegalPerson; + @Column(name = "credit_code") + private String creditCode; + @Column(name = "credit_url") + private String creditUrl; + @Column(name = "license_address") + private String licenseAddress; + @Column(name = "issueTime") + private Date issueTime; + @Column(name = "validity") + private Date validity; + @Column(name = "id_card_positive_credit_url") + private String idCardPositiveCreditUrl; + @Column(name = "id_card_negative_credit_url") + private String idCardNegativeCreditUrl; + @Column(name = "food_business_license_code") + private String foodBusinessLicenseCode; + @Column(name = "main_business") + private String mainBusiness; + @Column(name = "operator") + private String operator; + @Column(name = "food_license_legal_person") + private String foodLicenseLegalPerson; + @Column(name = "business_project") + private String businessProject; + @Column(name = "food_license_address") + private String foodLicenseAddress; + @Column(name = "food_business_start_time") + private Date foodBusinessStartTime; + @Column(name = "food_business_end_time") + private Date foodBusinessEndTime; + @Column(name = "food_business_license_url") + private String foodBusinessLicenseUrl; + @Column(name = "remark") + private String remark; + @Column(name = "remark_url") + private String remarkUrl; + @Column(name = "submit_status") + private Integer submitStatus; + @Column(name = "create_time") + private Date createTime; + @Column(name = "update_time") + private Date updateTime; + @Column(name = "deleted") + private Integer deleted; + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/LineAuditInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/LineAuditInfoDO.java new file mode 100644 index 000000000..fe1d55897 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/LineAuditInfoDO.java @@ -0,0 +1,74 @@ +package com.cool.store.entity; + +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +@Data +@Table(name = "xfsg_line_audit_info") +public class LineAuditInfoDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * partner_user_info.partner_id + */ + @Column(name = "partner_id") + private String partnerId; + + /** + * line_info.id + */ + @Column(name = "line_id") + private Long lineId; + + /** + * 结果类型 0通过,1拒绝,2结束跟进 + */ + @Column(name = "result_type") + private Integer resultType; + + /** + * 通过原因 + */ + @Column(name = "pass_reason") + private String passReason; + + /** + * 公开拒绝原因 + */ + @Column(name = "reject_public_reason") + private String rejectPublicReason; + + /** + * 真实拒绝原因 + */ + @Column(name = "reject_real_reason") + private String rejectRealReason; + + /** + * 证明文件或凭证 + */ + @Column(name = "certify_file") + private String certifyFile; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + /** + * 是否删除:0.否 1.是 + */ + private Boolean deleted; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/LineCalendarsEventDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/LineCalendarsEventDO.java new file mode 100644 index 000000000..38dd82b8e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/LineCalendarsEventDO.java @@ -0,0 +1,101 @@ +package com.cool.store.entity; + +import com.cool.store.enums.InterviewTypeEnum; +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +@Data +@Table(name = "xfsg_line_calendars_event") +public class LineCalendarsEventDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 区域ID + */ + @Column(name = "region_id") + private Long regionId; + + /** + * line_info.id + */ + @Column(name = "line_id") + private Long lineId; + + /** + * partner_user_info.partner_id + */ + @Column(name = "partner_id") + private String partnerId; + + /** + * 事件标题 + */ + @Column(name = "event_title") + private String eventTitle; + + /** + * 面试类型:0面谈;1一审;2二审 + */ + @Column(name = "interview_type") + private Integer interviewType; + + /** + * 面试日期 + */ + @Column(name = "interview_date") + private Date interviewDate; + + /** + * 面试开始时间 + */ + @Column(name = "start_time") + private Date startTime; + + /** + * 面试结束时间 + */ + @Column(name = "end_time") + private Date endTime; + + /** + * 面试官 + */ + @Column(name = "interviewer_user_id") + private String interviewerUserId; + + /** + * 删除标识 + */ + private Boolean deleted; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + public static LineCalendarsEventDO convertDO(LineInfoDO lineInfo, Integer interviewType, Date startTime, Date endTime, String interviewerUserId){ + LineCalendarsEventDO calendarsEvent = new LineCalendarsEventDO(); + calendarsEvent.setRegionId(lineInfo.getRegionId()); + calendarsEvent.setLineId(lineInfo.getId()); + calendarsEvent.setPartnerId(lineInfo.getPartnerId()); + calendarsEvent.setEventTitle(lineInfo.getUsername() + " " + (InterviewTypeEnum.MEET.equals(interviewType) ? "面谈" :"面审")); + calendarsEvent.setInterviewType(interviewType); + calendarsEvent.setInterviewDate(startTime); + calendarsEvent.setStartTime(startTime); + calendarsEvent.setEndTime(endTime); + calendarsEvent.setInterviewerUserId(interviewerUserId); + return calendarsEvent; + } + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/LineFollowLogDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/LineFollowLogDO.java new file mode 100644 index 000000000..badbf7cf1 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/LineFollowLogDO.java @@ -0,0 +1,93 @@ +package com.cool.store.entity; + +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +@Data +@Table(name = "xfsg_line_follow_log") +public class LineFollowLogDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * hy_partner_user_info.partner_id + */ + @Column(name = "partner_id") + private String partnerId; + + /** + * hy_partner_line_info.id + */ + @Column(name = "line_id") + private Long lineId; + + /** + * 操作人id + */ + @Column(name = "operate_user_id") + private String operateUserId; + + /** + * 操作人姓名 + */ + @Column(name = "operate_username") + private String operateUsername; + + /** + * 流程阶段:1意向加盟;2新店进展; + */ + @Column(name = "workflow_stage") + private Integer workflowStage; + + /** + * 流程子阶段 + */ + @Column(name = "workflow_sub_stage") + private Integer workflowSubStage; + + /** + * 流程子阶段状态 + */ + @Column(name = "workflow_sub_stage_status") + private Integer workflowSubStageStatus; + + /** + * 备注 + */ + private String message; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + /** + * 删除标识 + */ + private Boolean deleted; + + public LineFollowLogDO() { + } + + public LineFollowLogDO(String partnerId, Long lineId, String operateUserId, String operateUsername, Integer workflowStage, Integer workflowSubStage, Integer workflowSubStageStatus, String message) { + this.partnerId = partnerId; + this.lineId = lineId; + this.operateUserId = operateUserId; + this.operateUsername = operateUsername; + this.workflowStage = workflowStage; + this.workflowSubStage = workflowSubStage; + this.workflowSubStageStatus = workflowSubStageStatus; + this.message = message; + this.createTime= new Date(); + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/LineInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/LineInfoDO.java new file mode 100644 index 000000000..e27d5a4a3 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/LineInfoDO.java @@ -0,0 +1,173 @@ +package com.cool.store.entity; + +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +@Data +@Table(name = "xfsg_line_info") +public class LineInfoDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * partner_user_info.partner_id + */ + @Column(name = "partner_id") + private String partnerId; + + @Column(name = "region_id") + private Long regionId; + + /** + * 手机号 + */ + private String mobile; + + /** + * 申请人姓名 + */ + @Column(name = "username") + private String username; + + /** + * 性别0未选,1男,2女 + */ + private String sex; + + /** + * 意向开店区域 + */ + @Column(name = "want_shop_area_id") + private Long wantShopAreaId; + + /** + * 居住地址 + */ + @Column(name = "live_address") + private String liveAddress; + + /** + * 流程阶段:1意向加盟;2新店进展; + */ + @Column(name = "workflow_stage") + private Integer workflowStage; + + /** + * 流程子阶段 + */ + @Column(name = "workflow_sub_stage") + private Integer workflowSubStage; + + /** + * 流程子阶段状态 + */ + @Column(name = "workflow_sub_stage_status") + private Integer workflowSubStageStatus; + + + @Column(name = "want_shop_num") + private Integer wantShopNum; + /** + * 待选址铺位 + */ + @Column(name = "select_site_num") + private Integer selectSiteNum; + + /** + * 筹备中铺位 + */ + @Column(name = "prepare_shop_num") + private Integer prepareShopNum; + + /** + * 营业中铺位 + */ + @Column(name = "open_shop_num") + private Integer openShopNum; + + /** + * 线索来源 + */ + @Column(name = "line_source") + private Integer lineSource; + + /** + * 招商经理 + */ + @Column(name = "investment_manager") + private String investmentManager; + + /** + * 拓展经理 + */ + @Column(name = "development_manager") + private String developmentManager; + + /** + * 一审面试官 + */ + @Column(name = "first_interviewer") + private String firstInterviewer; + + /** + * 二审面试官 + */ + @Column(name = "second_interviewer") + private String secondInterviewer; + + /** + * 用户画像 + */ + @Column(name = "user_portrait") + private String userPortrait; + + /** + * 是否是加盟商:0.否 1.是 + */ + @Column(name = "join_status") + private Integer joinStatus; + + /** + * 0.公海 1.私海 2.黑名单 + */ + @Column(name = "line_status") + private Integer lineStatus; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + /** + * 创建人 + */ + @Column(name = "create_user_id") + private String createUserId; + + /** + * 更新人 + */ + @Column(name = "update_user_id") + private String updateUserId; + + /** + * 是否删除:0.否 1.是 + */ + private Boolean deleted; + /** + * 加盟商编码 + */ + @Column(name = "partner_num") + private String partnerNum; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/LineInterviewDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/LineInterviewDO.java new file mode 100644 index 000000000..fcdffb1f5 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/LineInterviewDO.java @@ -0,0 +1,158 @@ +package com.cool.store.entity; + +import com.cool.store.enums.InterviewStatusEnum; +import com.cool.store.utils.UUIDUtils; +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +@Data +@Table(name = "xfsg_line_interview") +public class LineInterviewDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * line_info.id + */ + @Column(name = "line_id") + private Long lineId; + + /** + * partner_user_info.partner_id + */ + @Column(name = "partner_id") + private String partnerId; + + /** + * 区域ID + */ + @Column(name = "region_id") + private Long regionId; + + /** + * 面试日期 + */ + @Column(name = "interview_date") + private Date interviewDate; + + /** + * 面试开始时间 + */ + @Column(name = "start_time") + private Date startTime; + + /** + * 面试结束时间 + */ + @Column(name = "end_time") + private Date endTime; + + /** + * 0未参加,1加盟商先进入 2面试官先进入 3双方都参加 + */ + @Column(name = "join_interview_status") + private Integer joinInterviewStatus; + + /** + * 实际开始时间 + */ + @Column(name = "actual_start_time") + private Date actualStartTime; + + /** + * 实际结束时间 + */ + @Column(name = "actual_end_time") + private Date actualEndTime; + + /** + * 房间号 + */ + @Column(name = "room_id") + private String roomId; + + /** + * 房间密码 + */ + @Column(name = "room_password") + private String roomPassword; + + /** + * 面试官 + */ + @Column(name = "interviewer_user_id") + private String interviewerUserId; + + /** + * 房间状态:0待开放;1已开放; 2已关闭 + */ + @Column(name = "room_status") + private Integer roomStatus; + + /** + * 面试状态 0待面试 1已通过 2未通过 + */ + @Column(name = "interview_status") + private Integer interviewStatus; + + /** + * 面试类型:0面谈,1一审,2二审 + */ + @Column(name = "interview_type") + private Integer interviewType; + + /** + * 视频链接 + */ + @Column(name = "video_url") + private String videoUrl; + + /** + * line_audit_info.id + */ + @Column(name = "audit_id") + private Long auditId; + + /** + * line_calendars_event.id + */ + @Column(name = "calendars_event_id") + private Long calendarsEventId; + + /** + * 删除标识 + */ + private Boolean deleted; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + public static LineInterviewDO convertDO(LineInfoDO lineInfo, Date startTime, Date endTime, String roomId, String interviewer, Integer interviewType, Long calendarsEventId){ + LineInterviewDO addInterview = new LineInterviewDO(); + addInterview.setLineId(lineInfo.getId()); + addInterview.setPartnerId(lineInfo.getPartnerId()); + addInterview.setRegionId(lineInfo.getRegionId()); + addInterview.setInterviewDate(startTime); + addInterview.setStartTime(startTime); + addInterview.setEndTime(endTime); + addInterview.setRoomId(roomId); + addInterview.setInterviewerUserId(interviewer); + addInterview.setInterviewType(interviewType); + addInterview.setCalendarsEventId(calendarsEventId); + addInterview.setInterviewStatus(InterviewStatusEnum.WAIT_INTERVIEW.getCode()); + return addInterview; + } + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/LinePayDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/LinePayDO.java new file mode 100644 index 000000000..7c308bf7c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/LinePayDO.java @@ -0,0 +1,87 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author wxp + * @date 2024-03-27 09:25 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LinePayDO implements Serializable { + @ApiModelProperty("") + private Long id; + + @ApiModelProperty("shopId") + private Long shopId; + + @ApiModelProperty("xfsg_user_info.partner_id") + private String partnerId; + + @ApiModelProperty("line_info.id") + private Long lineId; + + @ApiModelProperty("支付状态 45:待缴费 50:已缴费 55缴费失败") + private Integer payStatus; + + @ApiModelProperty("支付方式 1微信 2银行转账") + private Integer payType; + + @ApiModelProperty("付款人姓名") + private String payUserName; + + @ApiModelProperty("付款账号") + private String payAccount; + + @ApiModelProperty("开户行code") + private String bankCode; + + @ApiModelProperty("开户行名称") + private String bankName; + + @ApiModelProperty("支行code") + private String branchBankCode; + + @ApiModelProperty("支行名称") + private String branchBankName; + + @ApiModelProperty("缴纳时间") + private Date payTime; + + @ApiModelProperty("付款截图") + private String payPic; + + @ApiModelProperty("承诺书图片") + private String promisePic; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; + + @ApiModelProperty("创建人") + private String createUserId; + + @ApiModelProperty("更新人") + private String updateUserId; + + @ApiModelProperty("是否删除:0.否 1.是") + private Boolean deleted; + + @ApiModelProperty("支付类型 0-缴纳意向金 1-缴纳加盟费 2-装修款") + private Integer payBusinessType; + @ApiModelProperty("缴费金额") + private BigDecimal amount; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/MemberQuestionDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/MemberQuestionDO.java new file mode 100644 index 000000000..2ba59b2a8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/MemberQuestionDO.java @@ -0,0 +1,77 @@ +package com.cool.store.entity; + +import lombok.Data; + +import javax.persistence.*; +import java.util.Date; + +@Data +/** + * 加盟问卷信息 + */ +@Table(name = "xfsg_member_question_info") +public class MemberQuestionDO { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "audit_id") + private Long auditId; + + @Column(name = "partner_id", nullable = false) + private String partnerId; + + @Column(name = "line_id", nullable = false) + private Long lineId; + + @Column(name = "join_type") + private Integer joinType; + + @Column(name = "create_time", nullable = false, columnDefinition = "datetime default current_timestamp") + private Date createTime; + + @Column(name = "update_time", nullable = false, columnDefinition = "datetime default current_timestamp on update current_timestamp") + private Date updateTime; + + @Column(name = "career_status") + private Integer careerStatus; + + @Column(name = "education_level") + private Integer educationLevel; + + @Column(name = "annual_income") + private String annualIncome; + + @Column(name = "has_partner") + private Integer hasPartner; + + @Column(name = "capital_source") + private Integer capitalSource; + + @Column(name = "business_mode") + private Integer businessMode; + + @Column(name = "join_experience") + private Integer joinExperience; + + @Column(name = "fruit_industry_experience") + private Integer fruitIndustryExperience; + + @Column(name = "store_condition") + private String storeCondition; + + @Column(name = "payback_period") + private String paybackPeriod; + + @Column(name = "follows_management_standard") + private Integer followsManagementStandard; + + @Column(name = "can_training") + private Integer canTraining; + + @Column(name = "deleted", nullable = false, columnDefinition = "tinyint default '0'") + private Boolean deleted; + +} + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/NewStoreOpeningDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/NewStoreOpeningDO.java new file mode 100644 index 000000000..01f412352 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/NewStoreOpeningDO.java @@ -0,0 +1,50 @@ +package com.cool.store.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import javax.persistence.*; + +@Builder +@Data +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "xfsg_new_store_opening") +public class NewStoreOpeningDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * line_info.id + */ + @Column(name = "shop_id") + private Long shopId; + + /** + * 待办事项 + */ + @Column(name = "todo_item") + private String todoItem; + + /** + * 完成时间 + */ + @Column(name = "completion_time") + private Date completionTime; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/OpenAcceptanceInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/OpenAcceptanceInfoDO.java new file mode 100644 index 000000000..70c0e6527 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/OpenAcceptanceInfoDO.java @@ -0,0 +1,139 @@ +package com.cool.store.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import javax.persistence.*; + +@Builder +@Data +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "xfsg_open_acceptance_info") +public class OpenAcceptanceInfoDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * line_info.id + */ + @Column(name = "shop_id") + private Long shopId; + + /** + * 计划开业时间 + */ + @Column(name = "plan_open_time") + private Date planOpenTime; + + /** + * 验收状态 + */ + @Column(name = "acceptance_status") + private Integer acceptanceStatus; + + /** + * 验收人 + */ + @Column(name = "acceptance_user_id") + private String acceptanceUserId; + + /** + * 验收时间 + */ + @Column(name = "acceptance_time") + private Date acceptanceTime; + + /** + * 系统建店是否合格 0-不合格 1-合格 + */ + @Column(name = "system_setup") + private Boolean systemSetup; + + /** + * 证照办理是否合格 + */ + @Column(name = "license_processing") + private Boolean licenseProcessing; + + /** + * 缴纳加盟费/保证金是否合格 + */ + @Column(name = "franchise_fee_deposit") + private Boolean franchiseFeeDeposit; + + /** + * 加盟合同签约是否合格 + */ + @Column(name = "contract_signing") + private Boolean contractSigning; + + /** + * 培训登记是否合格 + */ + @Column(name = "training_registration") + private Boolean trainingRegistration; + + /** + * 加盟商/员工培训是否合格 + */ + @Column(name = "training_for_franchisee") + private Boolean trainingForFranchisee; + + /** + * 新店设计是否合格 + */ + @Column(name = "store_design") + private Boolean storeDesign; + + /** + * 工程施工是否合格 + */ + private Boolean construction; + + /** + * 三方验收是否合格 + */ + @Column(name = "triple_acceptance") + private Boolean tripleAcceptance; + + /** + * 视觉验收是否合格 + */ + @Column(name = "visual_acceptance") + private Boolean visualAcceptance; + + /** + * 市调和活动策划是否合格 + */ + @Column(name = "market_planning") + private Boolean marketPlanning; + + /** + * 首批配送清单是否合格 + */ + @Column(name = "initial_delivery_list") + private Boolean initialDeliveryList; + + /** + * 删除标识 + */ + private Boolean deleted; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/OpenNewShopRecordDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/OpenNewShopRecordDO.java new file mode 100644 index 000000000..29760398c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/OpenNewShopRecordDO.java @@ -0,0 +1,55 @@ +package com.cool.store.entity; + +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +@Data +@Table(name = "xfsg_open_new_shop_record") +public class OpenNewShopRecordDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 线索id + */ + @Column(name = "line_id") + private Long lineId; + + /** + * 新开意向店铺数量 + */ + @Column(name = "new_want_shop_num") + private Integer newWantShopNum; + + /** + * 现有资金 + */ + private Integer fund; + + /** + * 审核状态 0待审核 1通过 2不通过 + */ + @Column(name = "audit_result") + private Integer auditResult; + + /** + * 删除标识 + */ + private Boolean deleted; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/OpeningOperationPlanDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/OpeningOperationPlanDO.java new file mode 100644 index 000000000..77b82d341 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/OpeningOperationPlanDO.java @@ -0,0 +1,424 @@ +package com.cool.store.entity; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "xfsg_opening_operation_plan") +public class OpeningOperationPlanDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * xfsg_shop_info.id + */ + @Column(name = "shop_id") + private Long shopId; + + /** + * 0-新增 1-同步 + */ + @Column(name = "plan_source") + private Boolean planSource; + + /** + * 调研结果 + */ + @Column(name = "survey_result") + private String surveyResult; + + /** + * 调研结果url + */ + @Column(name = "survey_result_url") + private String surveyResultUrl; + + /** + * 活动主题 + */ + @Column(name = "activity_theme") + private String activityTheme; + + /** + * 活动主题url + */ + @Column(name = "activity_theme_url") + private String activityThemeUrl; + + /** + * 提交时间 + */ + @Column(name = "submission_time") + private Date submissionTime; + + /** + * 提交人 + */ + @Column(name = "submitted_user_id") + private String submittedUserId; + + /** + * 筹备人员ids + */ + @Column(name = "preparation_user_ids") + private String preparationUserIds; + + /** + * 是否完成排车路线 + */ + @Column(name = "route_completed") + private Byte routeCompleted; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + /** + * 创建人 + */ + @Column(name = "create_user_id") + private String createUserId; + + /** + * 更新人 + */ + @Column(name = "update_user_id") + private String updateUserId; + + /** + * 是否删除:0.否 1.是 + */ + private Boolean deleted; + + /** + * xfsg_shop_audit_info.id + */ + @Column(name = "audit_id") + private Long auditId; + /** + * 审核结果状态:0.待审核 1. 通过 2. 拒绝 + */ + @Column(name = "result_type") + private Integer resultType; + + + + + public Integer getResultType() { + return resultType; + } + + public void setResultType(Integer resultType) { + this.resultType = resultType; + } + + /** + * @return id + */ + public Long getId() { + return id; + } + + /** + * @param id + */ + public void setId(Long id) { + this.id = id; + } + + /** + * 获取xfsg_shop_info.id + * + * @return shop_id - xfsg_shop_info.id + */ + public Long getShopId() { + return shopId; + } + + /** + * 设置xfsg_shop_info.id + * + * @param shopId xfsg_shop_info.id + */ + public void setShopId(Long shopId) { + this.shopId = shopId; + } + + /** + * 获取0-新增 1-同步 + * + * @return plan_source - 0-新增 1-同步 + */ + public Boolean getPlanSource() { + return planSource; + } + + /** + * 设置0-新增 1-同步 + * + * @param planSource 0-新增 1-同步 + */ + public void setPlanSource(Boolean planSource) { + this.planSource = planSource; + } + + /** + * 获取调研结果 + * + * @return survey_result - 调研结果 + */ + public String getSurveyResult() { + return surveyResult; + } + + /** + * 设置调研结果 + * + * @param surveyResult 调研结果 + */ + public void setSurveyResult(String surveyResult) { + this.surveyResult = surveyResult; + } + + /** + * 获取调研结果url + * + * @return survey_result_url - 调研结果url + */ + public String getSurveyResultUrl() { + return surveyResultUrl; + } + + /** + * 设置调研结果url + * + * @param surveyResultUrl 调研结果url + */ + public void setSurveyResultUrl(String surveyResultUrl) { + this.surveyResultUrl = surveyResultUrl; + } + + /** + * 获取活动主题 + * + * @return activity_theme - 活动主题 + */ + public String getActivityTheme() { + return activityTheme; + } + + /** + * 设置活动主题 + * + * @param activityTheme 活动主题 + */ + public void setActivityTheme(String activityTheme) { + this.activityTheme = activityTheme; + } + + /** + * 获取活动主题url + * + * @return activity_theme_url - 活动主题url + */ + public String getActivityThemeUrl() { + return activityThemeUrl; + } + + /** + * 设置活动主题url + * + * @param activityThemeUrl 活动主题url + */ + public void setActivityThemeUrl(String activityThemeUrl) { + this.activityThemeUrl = activityThemeUrl; + } + + /** + * 获取提交时间 + * + * @return submission_time - 提交时间 + */ + public Date getSubmissionTime() { + return submissionTime; + } + + /** + * 设置提交时间 + * + * @param submissionTime 提交时间 + */ + public void setSubmissionTime(Date submissionTime) { + this.submissionTime = submissionTime; + } + + /** + * 获取提交人 + * + * @return submitted_user_id - 提交人 + */ + public String getSubmittedUserId() { + return submittedUserId; + } + + /** + * 设置提交人 + * + * @param submittedUserId 提交人 + */ + public void setSubmittedUserId(String submittedUserId) { + this.submittedUserId = submittedUserId; + } + + /** + * 获取筹备人员ids + * + * @return preparation_user_ids - 筹备人员ids + */ + public String getPreparationUserIds() { + return preparationUserIds; + } + + /** + * 设置筹备人员ids + * + * @param preparationUserIds 筹备人员ids + */ + public void setPreparationUserIds(String preparationUserIds) { + this.preparationUserIds = preparationUserIds; + } + + /** + * 获取是否完成排车路线 + * + * @return route_completed - 是否完成排车路线 + */ + public Byte getRouteCompleted() { + return routeCompleted; + } + + /** + * 设置是否完成排车路线 + * + * @param routeCompleted 是否完成排车路线 + */ + public void setRouteCompleted(Byte routeCompleted) { + this.routeCompleted = routeCompleted; + } + + /** + * 获取创建时间 + * + * @return create_time - 创建时间 + */ + public Date getCreateTime() { + return createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * 获取更新时间 + * + * @return update_time - 更新时间 + */ + public Date getUpdateTime() { + return updateTime; + } + + /** + * 设置更新时间 + * + * @param updateTime 更新时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + /** + * 获取创建人 + * + * @return create_user_id - 创建人 + */ + public String getCreateUserId() { + return createUserId; + } + + /** + * 设置创建人 + * + * @param createUserId 创建人 + */ + public void setCreateUserId(String createUserId) { + this.createUserId = createUserId; + } + + /** + * 获取更新人 + * + * @return update_user_id - 更新人 + */ + public String getUpdateUserId() { + return updateUserId; + } + + /** + * 设置更新人 + * + * @param updateUserId 更新人 + */ + public void setUpdateUserId(String updateUserId) { + this.updateUserId = updateUserId; + } + + /** + * 获取是否删除:0.否 1.是 + * + * @return deleted - 是否删除:0.否 1.是 + */ + public Boolean getDeleted() { + return deleted; + } + + /** + * 设置是否删除:0.否 1.是 + * + * @param deleted 是否删除:0.否 1.是 + */ + public void setDeleted(Boolean deleted) { + this.deleted = deleted; + } + + /** + * 获取xfsg_shop_audit_info.id + * + * @return audit_id - xfsg_shop_audit_info.id + */ + public Long getAuditId() { + return auditId; + } + + /** + * 设置xfsg_shop_audit_info.id + * + * @param auditId xfsg_shop_audit_info.id + */ + public void setAuditId(Long auditId) { + this.auditId = auditId; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/PartnerBaseInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/PartnerBaseInfoDO.java new file mode 100644 index 000000000..b49b4c7ce --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/PartnerBaseInfoDO.java @@ -0,0 +1,41 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class PartnerBaseInfoDO { + + private Long id; + + private String partnerId; + + private Long lineId; + + @ApiModelProperty("加盟身份 1个人加盟 2企业加盟") + private Integer joinType; + @ApiModelProperty("姓名") + private String username; + @ApiModelProperty("手机号") + private String mobile; + @ApiModelProperty("1男 2女") + private Integer sex; + @ApiModelProperty("意向加盟区域") + private String wantShopArea; + @ApiModelProperty("意向区域编码") + private String areaCode; + @ApiModelProperty("常驻区域") + private String liveArea; + @ApiModelProperty("常驻区域详细地址") + private String liveAddress; + @ApiModelProperty("加盟问卷长json") + private String joiningQuestionnaire; + + private Date createTime; + + private Date updateTime; + + private Integer deleted; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/PointAuditRecordDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointAuditRecordDO.java new file mode 100644 index 000000000..f8744e788 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointAuditRecordDO.java @@ -0,0 +1,167 @@ +package com.cool.store.entity; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.enums.AuditStatusEnum; +import com.cool.store.enums.NodeNoEnum; +import lombok.Data; + +import java.util.*; +import java.util.stream.Collectors; +import javax.persistence.*; + +@Data +@Table(name = "xfsg_point_audit_record") +public class PointAuditRecordDO { + + public final static String SUBMIT_TASK = "提交审批任务"; + public final static String RECEIVE_TASK = "收到任务"; + public final static String AUDIT_PASS = "审批通过"; + public final static String AUDIT_REJECT = "审批拒绝"; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 点位id + */ + @Column(name = "point_id") + private Long pointId; + + /** + * 当前节点 0提交审批任务 1-5级审批, 100完成 + */ + @Column(name = "node_no") + private Integer nodeNo; + + /** + * 轮次 + */ + @Column(name = "cycle_count") + private Integer cycleCount; + + /** + * 动作备注 + */ + @Column(name = "action_remark") + private String actionRemark; + + /** + * 实际处理人 + */ + @Column(name = "handler_user_id") + private String handlerUserId; + + /** + * 处理人集合 + */ + @Column(name = "handler_user_ids") + private String handlerUserIds; + + /** + * 收到任务时间 + */ + @Column(name = "receive_task_time") + private Date receiveTaskTime; + + /** + * 完成任务时间 + */ + @Column(name = "finish_task_time") + private Date finishTaskTime; + + /** + * 审核状态0待处理,1通过,2拒绝 + */ + @Column(name = "audit_status") + private Integer auditStatus; + + /** + * 签到时间 + */ + @Column(name = "sign_time") + private Date signTime; + + /** + * 签到位置 + */ + @Column(name = "sign_address") + private String signAddress; + + /** + * 图片 + */ + @Column(name = "picture_url") + private String pictureUrl; + + /** + * 原因 + */ + private String reason; + + /** + * 删除标识 + */ + private Boolean deleted; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + public static List convertTODO(PointAuditRecordDO nextAuditRecord){ + List resultList = new ArrayList<>(); + List handlerUserIds = JSONObject.parseArray(nextAuditRecord.getHandlerUserIds(), String.class); + //去重 + List finalHandlerUserIds = new ArrayList<>(new HashSet<>(handlerUserIds)); + for (String userId : finalHandlerUserIds) { + PointTodoInfoDO todo = new PointTodoInfoDO(); + todo.setPointId(nextAuditRecord.getPointId()); + todo.setNodeNo(nextAuditRecord.getNodeNo()); + todo.setHandlerUserId(userId); + todo.setCycleCount(nextAuditRecord.getCycleCount()); + resultList.add(todo); + } + return resultList; + } + + public static PointAuditRecordDO convert(Long auditRecordId, String handlerUserId, AuditStatusEnum auditStatus, String reason, NodeNoEnum nodeNoEnum){ + PointAuditRecordDO updateAuditRecord = new PointAuditRecordDO(); + updateAuditRecord.setId(auditRecordId); + updateAuditRecord.setHandlerUserId(handlerUserId); + updateAuditRecord.setAuditStatus(auditStatus.getCode()); + updateAuditRecord.setReason(reason); + updateAuditRecord.setActionRemark(nodeNoEnum.getTypeName() + " " +auditStatus.getName()); + updateAuditRecord.setFinishTaskTime(new Date()); + return updateAuditRecord; + } + + public static PointAuditRecordDO convert(Long auditRecordId, Date receiveTaskTime){ + PointAuditRecordDO updateAuditRecord = new PointAuditRecordDO(); + updateAuditRecord.setId(auditRecordId); + updateAuditRecord.setReceiveTaskTime(receiveTaskTime); + return updateAuditRecord; + } + + public static PointAuditRecordDO convert(Long auditRecordId, String handlerUserId, AuditStatusEnum auditStatus, String reason, NodeNoEnum nodeNoEnum, Date signTime, String signAddress, String pictureUrl){ + PointAuditRecordDO updateAuditRecord = new PointAuditRecordDO(); + updateAuditRecord.setId(auditRecordId); + updateAuditRecord.setHandlerUserId(handlerUserId); + updateAuditRecord.setAuditStatus(auditStatus.getCode()); + updateAuditRecord.setReason(reason); + updateAuditRecord.setActionRemark(nodeNoEnum.getTypeName() + " " +auditStatus.getName()); + updateAuditRecord.setSignTime(signTime); + updateAuditRecord.setSignAddress(signAddress); + updateAuditRecord.setPictureUrl(pictureUrl); + updateAuditRecord.setFinishTaskTime(new Date()); + return updateAuditRecord; + } + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/PointDetailInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointDetailInfoDO.java new file mode 100644 index 000000000..2c1555c8b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointDetailInfoDO.java @@ -0,0 +1,601 @@ +package com.cool.store.entity; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.enums.point.*; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import java.util.Date; +import java.util.Objects; +import javax.persistence.*; + +@Data +@Table(name = "xfsg_point_detail_info") +public class PointDetailInfoDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * shop_point_info.id + */ + @Column(name = "point_id") + private Long pointId; + + /** + * 经营状况 + */ + @Column(name = "business_status") + private Integer businessStatus; + + /** + * 09:00-10:00人流量 + */ + @Column(name = "nine_flow_rate") + private Integer nineFlowRate; + + /** + * 10:00-11:00人流量 + */ + @Column(name = "ten_flow_rate") + private Integer tenFlowRate; + + /** + * 18:00-19:00人流量 + */ + @Column(name = "eighteen_flow_rate") + private Integer eighteenFlowRate; + + /** + * 19:00-20:00人流量 + */ + @Column(name = "nineteen_flow_rate") + private Integer nineteenFlowRate; + + /** + * 店铺方位 1.主要动线 2.次要动线 + */ + @Column(name = "point_direction") + private Integer pointDirection; + + /** + * 立地条件0单门面, 1双门面, 2多门面, 3转角 + */ + @Column(name = "site_conditions") + private Integer siteConditions; + + /** + * 门店内宽 + */ + @Column(name = "store_width") + private String storeWidth; + + /** + * 房东姓名 + */ + @Column(name = "landlord_username") + private String landlordUsername; + + /** + * 房东电话 + */ + @Column(name = "landlord_mobile") + private String landlordMobile; + + /** + * 支付方式 参考PaymentMethodEnum + */ + @Column(name = "payment_method") + private Integer paymentMethod; + + /** + * 物业状态 参考PropertyStatusEnum + */ + @Column(name = "property_status") + private Integer propertyStatus; + + /** + * 转让费 + */ + @Column(name = "transfer_fee") + private String transferFee; + + /** + * 覆盖社区 参考CoverCommunityEnum + */ + @Column(name = "cover_community") + private Integer coverCommunity; + + /** + * 消费能力 参考ConsumerAbilityEnum + */ + @Column(name = "consumer_ability") + private Integer consumerAbility; + + /** + * 人流测算 参考FlowRateCalculateEnum + */ + @Column(name = "flow_rate_calculate") + private Integer flowRateCalculate; + + /** + * 聚客点农贸市场 参考GatherGuestFarmerMarketEnum + */ + @Column(name = "gather_guest_farmer_market") + private Integer gatherGuestFarmerMarket; + + /** + * 聚客点医院 参考GatherGuestHospitalEnum + */ + @Column(name = "gather_guest_hospital") + private Integer gatherGuestHospital; + + /** + * 聚客点学校 参考GatherGuestSchoolEnum + */ + @Column(name = "gather_guest_school") + private Integer gatherGuestSchool; + + /** + * 门店人流动向 参考StoreFlowTrendEnum + */ + @Column(name = "store_flow_trend") + private Integer storeFlowTrend; + + /** + * 周边100米内餐饮 参考NearRepastEnum + */ + @Column(name = "near_repast") + private Integer nearRepast; + + /** + * 周边100米内小业态邻居 参考NearNeighborEnum + */ + @Column(name = "near_neighbor") + private Integer nearNeighbor; + + /** + * 周边100米内竞争对手 参考NearCompeteEnum + */ + @Column(name = "near_compete") + private Integer nearCompete; + + /** + * 周边100米内业态经营情况 参考NearBusinessConditionEnum + */ + @Column(name = "near_business_condition") + private Integer nearBusinessCondition; + + /** + * 所处位置 参考IntendPositionEnum + */ + @Column(name = "intend_position") + private Integer intendPosition; + + /** + * 绿化带 参考GreenBeltEnum + */ + @Column(name = "green_belt") + private Integer greenBelt; + + /** + * 门店观瞻 参考StoreOutlookEnum + */ + @Column(name = "store_outlook") + private Integer storeOutlook; + + /** + * 门店来客便利性 参考GuestConvenienceEnum + */ + @Column(name = "guest_convenience") + private Integer guestConvenience; + + /** + * 意向门店开间尺寸 参考WantShopSizeEnum + */ + @Column(name = "want_shop_size") + private Integer wantShopSize; + + /** + * 竞争对手性质 参考CompeteTypeEnum + */ + @Column(name = "compete_type") + private Integer competeType; + + /** + * 竞争对手经营能力 参考CompeteBusinessCapacityEnum + */ + @Column(name = "compete_business_capacity") + private Integer competeBusinessCapacity; + + /** + * 投资总额 + */ + @Column(name = "invest_amount") + private String investAmount; + + /** + * 预估日商 + */ + @Column(name = "day_trader") + private String dayTrader; + + /** + * 理论毛利率 + */ + @Column(name = "profit_rate") + private String profitRate; + + /** + * 门店月毛利率 + */ + @Column(name = "month_profit_rate") + private String monthProfitRate; + + /** + * 品牌使用费率 + */ + @Column(name = "brand_use_rate") + private String brandUseRate; + + /** + * 品牌使用费 + */ + @Column(name = "brand_use_fee") + private String brandUseFee; + + /** + * 基本人工费用 + */ + @Column(name = "staff_fee") + private String staffFee; + + /** + * 店长数量 + */ + @Column(name = "shop_manager_num") + private Integer shopManagerNum; + + /** + * 店长基本工资 + */ + @Column(name = "shop_manager_fee") + private Integer shopManagerFee; + + /** + * 店员数量 + */ + @Column(name = "clerk_num") + private Integer clerkNum; + + /** + * 店员基本工资 + */ + @Column(name = "clerk_fee") + private Integer clerkFee; + + /** + * 奖金分红 + */ + private String bonus; + + /** + * 门店月房租 + */ + @Column(name = "month_rent") + private String monthRent; + + /** + * 水电物业及其他 + */ + @Column(name = "other_fee") + private String otherFee; + + /** + * 净利润 + */ + @Column(name = "net_profit") + private String netProfit; + + /** + * 月投资回报率 + */ + @Column(name = "month_rate_return") + private String monthRateReturn; + + /** + * 拓展专员签名 + */ + @Column(name = "development_manager_sign") + private String developmentManagerSign; + + /** + * 拓展专员签字日期 + */ + @Column(name = "development_manager_sign_time") + private Date developmentManagerSignTime; + + /** + * 运营人员签名 + */ + @Column(name = "operation_user_sign") + private String operationUserSign; + + /** + * 运营人员签名日期 + */ + @Column(name = "operation_user_sign_time") + private Date operationUserSignTime; + + /** + * 加盟商签名 + */ + @Column(name = "line_sign") + private String lineSign; + + /** + * 加盟商签名日期 + */ + @Column(name = "line_sign_time") + private Date lineSignTime; + + /** + * 市场容量评估分数 + */ + @Column(name = "market_size_score") + private Integer marketSizeScore; + + /** + * 商圈氛围评估分数 + */ + @Column(name = "shop_area_score") + private Integer shopAreaScore; + + /** + * 便利性评估分数 + */ + @Column(name = "convenient_score") + private Integer convenientScore; + + /** + * 门店属性与竞争环境评估分数 + */ + @Column(name = "environment_score") + private Integer environmentScore; + + /** + * 租赁合同 + */ + @Column(name = "rent_contract") + private String rentContract; + + /** + * 高德地图评估报告 + */ + @Column(name = "map_evaluation_report") + private String mapEvaluationReport; + + /** + * 删除标识 + */ + private Boolean deleted; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + /** + * 图片对象 + */ + @Column(name = "picture_obj") + private String pictureObj; + + /** + * 市场容量评估分数 + * @return + */ + public Integer getMarketSizeScore() { + Integer score = 0; + CoverCommunityEnum coverCommunityEnum = CoverCommunityEnum.getByCode(this.coverCommunity); + ConsumerAbilityEnum consumerAbilityEnum = ConsumerAbilityEnum.getByCode(this.consumerAbility); + FlowRateCalculateEnum flowRateCalculateEnum = FlowRateCalculateEnum.getByCode(this.flowRateCalculate); + if(Objects.nonNull(coverCommunityEnum)){ + score += coverCommunityEnum.getScore(); + } + if(Objects.nonNull(consumerAbilityEnum)){ + score += consumerAbilityEnum.getScore(); + } + if(Objects.nonNull(flowRateCalculateEnum)){ + score += flowRateCalculateEnum.getScore(); + } + return score; + } + + /** + * 商圈氛围评估分数 + * @return + */ + public Integer getShopAreaScore() { + GatherGuestFarmerMarketEnum guestFarmerMarketEnum = GatherGuestFarmerMarketEnum.getByCode(this.gatherGuestFarmerMarket); + GatherGuestHospitalEnum guestHospitalEnum = GatherGuestHospitalEnum.getByCode(this.gatherGuestHospital); + GatherGuestSchoolEnum guestSchoolEnum = GatherGuestSchoolEnum.getByCode(this.gatherGuestSchool); + StoreFlowTrendEnum flowTrendEnum = StoreFlowTrendEnum.getByCode(this.storeFlowTrend); + NearRepastEnum nearRepastEnum = NearRepastEnum.getByCode(this.nearRepast); + NearNeighborEnum neighborEnum = NearNeighborEnum.getByCode(this.nearNeighbor); + NearCompeteEnum competeEnum = NearCompeteEnum.getByCode(this.nearCompete); + NearBusinessConditionEnum businessConditionEnum = NearBusinessConditionEnum.getByCode(this.nearBusinessCondition); + Integer score = 0; + if(Objects.nonNull(guestFarmerMarketEnum)){ + score += guestFarmerMarketEnum.getScore(); + } + if(Objects.nonNull(guestHospitalEnum)){ + score += guestHospitalEnum.getScore(); + } + if(Objects.nonNull(guestSchoolEnum)){ + score += guestSchoolEnum.getScore(); + } + if(Objects.nonNull(flowTrendEnum)){ + score += flowTrendEnum.getScore(); + } + if(Objects.nonNull(nearRepastEnum)){ + score += nearRepastEnum.getScore(); + } + if(Objects.nonNull(neighborEnum)){ + score += neighborEnum.getScore(); + } + if(Objects.nonNull(competeEnum)){ + score += competeEnum.getScore(); + } + if(Objects.nonNull(businessConditionEnum)){ + score += businessConditionEnum.getScore(); + } + return score; + } + + /** + * 便利性评估分数 + * @return + */ + public Integer getConvenientScore() { + IntendPositionEnum positionEnum = IntendPositionEnum.getByCode(this.intendPosition); + GreenBeltEnum greenBeltEnum = GreenBeltEnum.getByCode(this.greenBelt); + StoreOutlookEnum outlookEnum = StoreOutlookEnum.getByCode(this.storeOutlook); + GuestConvenienceEnum convenienceEnum = GuestConvenienceEnum.getByCode(this.guestConvenience); + Integer score = 0; + if(Objects.nonNull(positionEnum)){ + score += positionEnum.getScore(); + } + if(Objects.nonNull(greenBeltEnum)){ + score += greenBeltEnum.getScore(); + } + if(Objects.nonNull(outlookEnum)){ + score += outlookEnum.getScore(); + } + if(Objects.nonNull(convenienceEnum)){ + score += convenienceEnum.getScore(); + } + return score; + } + + /** + * 门店属性与竞争环境评估分数 + * @return + */ + public Integer getEnvironmentScore() { + WantShopSizeEnum shopSizeEnum = WantShopSizeEnum.getByCode(this.wantShopSize); + CompeteTypeEnum competeTypeEnum = CompeteTypeEnum.getByCode(this.competeType); + CompeteBusinessCapacityEnum businessCapacityEnum = CompeteBusinessCapacityEnum.getByCode(this.competeBusinessCapacity); + Integer score = 0; + if(Objects.nonNull(shopSizeEnum)){ + score += shopSizeEnum.getScore(); + } + if(Objects.nonNull(competeTypeEnum)){ + score += competeTypeEnum.getScore(); + } + if(Objects.nonNull(businessCapacityEnum)){ + score += businessCapacityEnum.getScore(); + } + return score; + } + + public Integer getTotalPointScore(){ + return getMarketSizeScore() + getShopAreaScore() + getConvenientScore() + getEnvironmentScore(); + } + + public boolean isCanSubmitEvaluable(){ + if(Objects.isNull(this.businessStatus)){ + return false; + } + Integer nullCount = 0; + if(Objects.isNull(this.nineFlowRate)){ + nullCount++; + } + if(Objects.isNull(this.tenFlowRate)){ + nullCount++; + } + if(Objects.isNull(this.eighteenFlowRate)){ + nullCount++; + } + if(Objects.isNull(this.nineteenFlowRate)){ + nullCount++; + } + if(nullCount > 2){ + return false; + } + if(Objects.isNull(this.pointDirection) || Objects.isNull(this.siteConditions) || Objects.isNull(this.storeWidth)){ + return false; + } + if(Objects.isNull(this.landlordUsername) || StringUtils.isBlank(this.landlordUsername.trim()) || Objects.isNull(this.landlordMobile) || StringUtils.isBlank(this.landlordMobile.trim())){ + return false; + } + if(Objects.isNull(this.paymentMethod) || Objects.isNull(this.propertyStatus)){ + return false; + } + if(Objects.isNull(this.transferFee)){ + return false; + } + if(Objects.isNull(this.coverCommunity) || Objects.isNull(this.consumerAbility) || Objects.isNull(this.flowRateCalculate)){ + return false; + } + if(Objects.isNull(this.gatherGuestFarmerMarket) || Objects.isNull(this.gatherGuestHospital) || Objects.isNull(this.gatherGuestSchool)){ + return false; + } + if(Objects.isNull(this.storeFlowTrend)){ + return false; + } + if(Objects.isNull(this.nearRepast) || Objects.isNull(this.nearNeighbor) || Objects.isNull(this.nearCompete) || Objects.isNull(this.nearBusinessCondition)){ + return false; + } + if(Objects.isNull(this.intendPosition) || Objects.isNull(this.greenBelt) || Objects.isNull(this.storeOutlook) || Objects.isNull(this.guestConvenience)){ + return false; + } + if(Objects.isNull(this.wantShopSize) || Objects.isNull(this.competeType) || Objects.isNull(this.competeBusinessCapacity) || Objects.isNull(this.investAmount)){ + return false; + } + if(Objects.isNull(this.dayTrader) || Objects.isNull(this.profitRate) || Objects.isNull(this.monthProfitRate)){ + return false; + } + if(Objects.isNull(this.brandUseFee) || Objects.isNull(this.brandUseRate)){ + return false; + } + if(Objects.isNull(this.staffFee)){ + return false; + } + if(Objects.isNull(this.bonus) || Objects.isNull(this.monthRent) ||Objects.isNull(this.otherFee)){ + return false; + } + if(Objects.isNull(this.netProfit) || Objects.isNull(this.monthRateReturn)){ + return false; + } + if(Objects.isNull(this.pictureObj) || StringUtils.isBlank(this.pictureObj)){ + return false; + } + JSONObject jsonObject = JSONObject.parseObject(this.pictureObj); + JSONArray front = jsonObject.getJSONArray("front"); + if(Objects.isNull(front) || front.isEmpty()){ + return false; + } + JSONArray leftSide = jsonObject.getJSONArray("leftSide"); + if(Objects.isNull(leftSide) || leftSide.isEmpty()){ + return false; + } + JSONArray rightSide = jsonObject.getJSONArray("rightSide"); + if(Objects.isNull(rightSide) || rightSide.isEmpty()){ + return false; + } + JSONArray video = jsonObject.getJSONArray("video"); + if(Objects.isNull(video) || video.isEmpty()){ + return false; + } + return true; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/PointInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointInfoDO.java new file mode 100644 index 000000000..ea75f0f96 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointInfoDO.java @@ -0,0 +1,158 @@ +package com.cool.store.entity; + +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +@Data +@Table(name = "xfsg_point_info") +public class PointInfoDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 铺位编号 + */ + @Column(name = "point_code") + private String pointCode; + + /** + * 铺位名称 + */ + @Column(name = "point_name") + private String pointName; + + /** + * 部门id + */ + @Column(name = "region_id") + private Long regionId; + + /** + * shop_info.id + */ + @Column(name = "shop_id") + private Long shopId; + + /** + * 线索id + */ + @Column(name = "line_id") + private Long lineId; + + /** + * 点位面积 + */ + @Column(name = "point_area") + private String pointArea; + + /** + * 经度 + */ + private String longitude; + + /** + * 纬度 + */ + private String latitude; + + /** + * 地址 + */ + private String address; + + /** + * 拓展专员 + */ + @Column(name = "development_manager") + private String developmentManager; + + /** + * 营运专员 + */ + @Column(name = "operate_user_id") + private String operateUserId; + + /** + * 拓展时间 + */ + @Column(name = "development_time") + private Date developmentTime; + + /** + * 铺位状态 1.采集中 2.已评估 3.待审批 4.待审核可推荐 5.已审批 6.已绑定 + */ + @Column(name = "point_status") + private Integer pointStatus; + + /** + * 铺位得分 + */ + @Column(name = "point_score") + private Integer pointScore; + + /** + * 选择状态0.未选择, 1.已被选择 + */ + @Column(name = "select_status") + private Integer selectStatus; + + /** + * 审批次数 + */ + @Column(name = "submit_audit_count") + private Integer submitAuditCount; + + /** + * 店铺来源 + */ + @Column(name = "point_source") + private Integer pointSource; + + /** + * 删除标识 + */ + private Boolean deleted; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + /** + * 省 + */ + @Column(name = "province") + private String province; + + /** + * 市 + */ + @Column(name = "city") + private String city; + + /** + * 区/县 + */ + @Column(name = "district") + private String district; + + /** + * 街道 + */ + @Column(name = "township") + private String township; + + @Column(name = "storage_status") + private Integer storageStatus; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/PointRecommendDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointRecommendDO.java new file mode 100644 index 000000000..cbf2582cc --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointRecommendDO.java @@ -0,0 +1,60 @@ +package com.cool.store.entity; + +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +@Data +@Table(name = "xfsg_point_recommend") +public class PointRecommendDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 线索id + */ + @Column(name = "line_id") + private Long lineId; + + /** + * 点位id + */ + @Column(name = "point_id") + private Long pointId; + + /** + * 拓展专员 + */ + @Column(name = "development_manager") + private String developmentManager; + + /** + * 状态 1.待选择 2.已选择 3.已被他人选择 4.已签约 5.已拒绝 6.已失效 + */ + private Integer status; + + /** + * 原因 + */ + private String reason; + + /** + * 删除标识 + */ + private Boolean deleted; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/PointTodoInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointTodoInfoDO.java new file mode 100644 index 000000000..9e9b6eaca --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointTodoInfoDO.java @@ -0,0 +1,61 @@ +package com.cool.store.entity; + +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +@Data +@Table(name = "xfsg_point_todo_info") +public class PointTodoInfoDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 铺位id + */ + @Column(name = "point_id") + private Long pointId; + + /** + * 当前节点 0提交审批 1-5级审批, 100完成 + */ + @Column(name = "node_no") + private Integer nodeNo; + + /** + * 处理人 + */ + @Column(name = "handler_user_id") + private String handlerUserId; + + /** + * 0待完成,1已完成 + */ + private Integer status; + + /** + * 轮次 + */ + @Column(name = "cycle_count") + private Integer cycleCount; + + /** + * 删除标识 + */ + private Boolean deleted; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/RegionAreaConfigDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/RegionAreaConfigDO.java new file mode 100644 index 000000000..319f6ce84 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/RegionAreaConfigDO.java @@ -0,0 +1,47 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Date; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * + * @author wxp + * @date 2024-03-27 09:25 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RegionAreaConfigDO implements Serializable { + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("区域ID 战区id") + private Long regionId; + + @ApiModelProperty("区域路径") + private String regionPath; + + @ApiModelProperty("意向开店区域 省市code") + private Long wantShopAreaId; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; + + @ApiModelProperty("创建人") + private String createUserId; + + @ApiModelProperty("更新人") + private String updateUserId; + + @ApiModelProperty("是否删除:0.否 1.是") + private Boolean deleted; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/RegionDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/RegionDO.java new file mode 100644 index 000000000..43e016ebd --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/RegionDO.java @@ -0,0 +1,175 @@ +package com.cool.store.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; + +/** + * @ClassName RegionDO + * @Description 区域 + */ +@Builder +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RegionDO { + /** + * 自增ID + */ + private Long id; + + /** + * 区域ID + */ + private String regionId; + + /** + * 名称 + */ + private String name; + /** + * 父ID + */ + private String parentId; + + /** + * 父ID + */ + private String groupId; + + /** + * 创建时间 + */ + private Long createTime; + /** + * 创建人 + */ + private String createName; + /** + * 更新时间 + */ + private Long updateTime; + /** + * 更新人 + */ + private String updateName; + + + /** + * dinging部门id + */ + private String synDingDeptId; + + /** + * 是否删除标记 + */ + private Boolean deleted; + + /** + * root path store + */ + private String regionType; + + + /** + * 区域路径 + */ + private String regionPath; + + /** + * 区域门店数量 + */ + private Integer storeNum; + + /** + * 区域门店范围是否 非DO 同步时用到的 + */ + private Boolean storeRange = false; + + /** + * 门店地址 非DO + */ + private String address; + + /** + * 门店经度 非DO + */ + private String longitude; + + + /** + * 纬度 非DO + */ + private String latitude; + + /** + * 门店编号 非DO + */ + private String storeCode; + + /** + * 门店开业日期 非DO + */ + private String openDate; + + /** + * 门店ID + */ + private String storeId; + + public String fullRegionPath; + + private Integer orderNum; + + private Integer unclassifiedFlag; + + /** + * 通讯录code 非DO + */ + private String contactCode; + + /** + * 门店扩展信息 + */ + private String extendField; + + /** + * 第三方唯一id + */ + private String thirdDeptId; + + /** + * 门店状态 + */ + private String storeStatus; + + /** + * 是否是外部组织节点 + */ + private Boolean isExternalNode; + + private String thirdRegionType; + + public RegionDO(Long id, String name, String parentId, String groupId, Long createTime, String createName) { + this.id = id; + this.name = name; + this.parentId = parentId; + this.groupId = groupId; + this.createTime = createTime; + this.createName = createName; + } + public String getFullRegionPath() { + if(id != null && id == 1L){ + return "/1/"; + } + if (StringUtils.isNotBlank(regionPath)) { + return regionPath + id + "/"; + } else { + return "/" + id + "/"; + } + } + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/RegionQrcodeConfigDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/RegionQrcodeConfigDO.java new file mode 100644 index 000000000..50164edd9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/RegionQrcodeConfigDO.java @@ -0,0 +1,47 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Date; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * + * @author wxp + * @date 2024-03-27 09:25 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RegionQrcodeConfigDO implements Serializable { + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("区域ID 大区id") + private Long regionId; + + @ApiModelProperty("大区名称") + private String regionName; + + @ApiModelProperty("支付二维码图片url") + private String payPic; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; + + @ApiModelProperty("创建人") + private String createUserId; + + @ApiModelProperty("更新人") + private String updateUserId; + + @ApiModelProperty("是否删除:0.否 1.是") + private Boolean deleted; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopAuditInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopAuditInfoDO.java new file mode 100644 index 000000000..b3206a921 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopAuditInfoDO.java @@ -0,0 +1,310 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiParam; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "xfsg_shop_audit_info") +public class ShopAuditInfoDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * line_info.id + */ + @Column(name = "shop_id") + private Long shopId; + + /** + * '0-视觉验收 1-培训登记审批 2-开业运营方案 3-证照审批 4-系统建店5-三方验收 + */ + @Column(name = "audit_type") + @ApiModelProperty("'0-视觉验收 1-培训登记审批 2-开业运营方案 3-证照审批 4-系统建店5-三方验收") + private Integer auditType; + + /** + * 提交人ID + */ + @Column(name = "submitted_user_id") + @ApiModelProperty("提交人ID") + private String submittedUserId; + + /** + * 提交人名称 + */ + @Column(name = "submitted_user_name") + @ApiModelProperty("提交人名称") + private String submittedUserName; + + /** + * 结果类型 0通过,1拒绝 + */ + @Column(name = "result_type") + @ApiModelProperty("结果类型 0通过,1拒绝") + private Integer resultType; + + /** + * 通过原因 + */ + @Column(name = "pass_reason") + @ApiModelProperty("通过原因") + private String passReason; + + /** + * 拒绝原因 + */ + @Column(name = "reject_reason") + @ApiModelProperty("拒绝原因") + private String rejectReason; + + /** + * 证明文件或凭证 + */ + @Column(name = "certify_file") + private String certifyFile; + + /** + * 创建时间 + */ + @Column(name = "create_time") + @ApiModelProperty("时间") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + /** + * 是否删除:0.否 1.是 + */ + private Boolean deleted; + + @Column(name = "data_type") + @ApiModelProperty("数据类型 0-提交 1-审批") + private Integer dataType; + + /** + * @return id + */ + public Long getId() { + return id; + } + + /** + * @param id + */ + public void setId(Long id) { + this.id = id; + } + + /** + * 获取line_info.id + * + * @return shop_id - line_info.id + */ + public Long getShopId() { + return shopId; + } + + /** + * 设置line_info.id + * + * @param shopId line_info.id + */ + public void setShopId(Long shopId) { + this.shopId = shopId; + } + + /** + * 获取0-视觉验收 1-培训登记审批 2-开业运营方案 3-证照审批 + * + * @return audit_type - 0-视觉验收 1-培训登记审批 2-开业运营方案 3-证照审批 + */ + public Integer getAuditType() { + return auditType; + } + + /** + * 设置0-视觉验收 1-培训登记审批 2-开业运营方案 3-证照审批 + * + * @param auditType 0-视觉验收 1-培训登记审批 2-开业运营方案 3-证照审批 + */ + public void setAuditType(Integer auditType) { + this.auditType = auditType; + } + + /** + * 获取提交人ID + * + * @return submitted_user_id - 提交人ID + */ + public String getSubmittedUserId() { + return submittedUserId; + } + + /** + * 设置提交人ID + * + * @param submittedUserId 提交人ID + */ + public void setSubmittedUserId(String submittedUserId) { + this.submittedUserId = submittedUserId; + } + + /** + * 获取提交人名称 + * + * @return submitted_user_name - 提交人名称 + */ + public String getSubmittedUserName() { + return submittedUserName; + } + + /** + * 设置提交人名称 + * + * @param submittedUserName 提交人名称 + */ + public void setSubmittedUserName(String submittedUserName) { + this.submittedUserName = submittedUserName; + } + + /** + * 获取结果类型 0通过,1拒绝 + * + * @return result_type - 结果类型 0通过,1拒绝 + */ + public Integer getResultType() { + return resultType; + } + + /** + * 设置结果类型 0通过,1拒绝 + * + * @param resultType 结果类型 0通过,1拒绝 + */ + public void setResultType(Integer resultType) { + this.resultType = resultType; + } + + /** + * 获取通过原因 + * + * @return pass_reason - 通过原因 + */ + public String getPassReason() { + return passReason; + } + + /** + * 设置通过原因 + * + * @param passReason 通过原因 + */ + public void setPassReason(String passReason) { + this.passReason = passReason; + } + + /** + * 获取拒绝原因 + * + * @return reject_reason - 拒绝原因 + */ + public String getRejectReason() { + return rejectReason; + } + + /** + * 设置拒绝原因 + * + * @param rejectReason 拒绝原因 + */ + public void setRejectReason(String rejectReason) { + this.rejectReason = rejectReason; + } + + /** + * 获取证明文件或凭证 + * + * @return certify_file - 证明文件或凭证 + */ + public String getCertifyFile() { + return certifyFile; + } + + /** + * 设置证明文件或凭证 + * + * @param certifyFile 证明文件或凭证 + */ + public void setCertifyFile(String certifyFile) { + this.certifyFile = certifyFile; + } + + /** + * 获取创建时间 + * + * @return create_time - 创建时间 + */ + public Date getCreateTime() { + return createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * 获取更新时间 + * + * @return update_time - 更新时间 + */ + public Date getUpdateTime() { + return updateTime; + } + + /** + * 设置更新时间 + * + * @param updateTime 更新时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + /** + * 获取是否删除:0.否 1.是 + * + * @return deleted - 是否删除:0.否 1.是 + */ + public Boolean getDeleted() { + return deleted; + } + + /** + * 设置是否删除:0.否 1.是 + * + * @param deleted 是否删除:0.否 1.是 + */ + public void setDeleted(Boolean deleted) { + this.deleted = deleted; + } + + public Integer getDataType() { + return dataType; + } + + public void setDataType(Integer dataType) { + this.dataType = dataType; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopInfoDO.java new file mode 100644 index 000000000..389ed8714 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopInfoDO.java @@ -0,0 +1,111 @@ +package com.cool.store.entity; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +import javax.persistence.*; + +@Data +@Table(name = "xfsg_shop_info") +public class ShopInfoDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 区域ID + */ + @Column(name = "region_id") + private Long regionId; + + /** + * line_info.id + */ + @Column(name = "line_id") + private Long lineId; + + /** + * partner_id + */ + @Column(name = "partner_id") + private String partnerId; + + /** + * 点位id + */ + @Column(name = "point_id") + private Long pointId; + + /** + * 店铺名称 + */ + @Column(name = "shop_name") + private String shopName; + + /** + * 店铺code + */ + @Column(name = "shop_code") + private String shopCode; + + /** + * 门店系统门店编码 + */ + @Column(name = "store_num") + private String storeNum; + + /** + * 开店负责人 + */ + @Column(name = "shop_manager_user_id") + private String shopManagerUserId; + + /** + * 督导 + */ + @Column(name = "supervisor_user_id") + private String supervisorUserId; + + /** + * 计划开业时间 + */ + @Column(name = "plan_open_time") + private Date planOpenTime; + + /** + * 当前进度 + */ + @Column(name = "cur_progress") + private BigDecimal curProgress; + + /** + * 门店性质 + */ + @Column(name = "shop_type") + private Integer shopType; + + /** + * 阶段 0选址 1筹建 2开业 + */ + @Column(name = "shop_stage") + private Integer shopStage; + + /** + * 删除标识 + */ + private Boolean deleted; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopRentInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopRentInfoDO.java new file mode 100644 index 000000000..7e53bdc71 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopRentInfoDO.java @@ -0,0 +1,122 @@ +package com.cool.store.entity; + +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +@Data +@Table(name = "xfsg_shop_rent_info") +public class ShopRentInfoDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 店铺id + */ + @Column(name = "shop_id") + private Long shopId; + + /** + * 店铺id + */ + @Column(name = "point_id") + private Long pointId; + + /** + * 租赁类型 1铺位直租 2自有铺位 + */ + @Column(name = "rent_type") + private Integer rentType; + + /** + * 签约日期 + */ + @Column(name = "sign_time") + private Date signTime; + + /** + * 合同开始日期 + */ + @Column(name = "contract_start_time") + private Date contractStartTime; + + /** + * 合同结束日期 + */ + @Column(name = "contract_end_time") + private Date contractEndTime; + + /** + * 签约年限 + */ + @Column(name = "contract_months") + private Integer contractMonths; + + /** + * 店铺租金 1固定租金 2非固定租金 + */ + @Column(name = "shop_rent_type") + private Integer shopRentType; + + /** + * 月租金 + */ + @Column(name = "month_rent") + private String monthRent; + + /** + * 第一年月租金 + */ + @Column(name = "first_year_month_rent") + private String firstYearMonthRent; + + /** + * 第二年月租金 + */ + @Column(name = "second_year_month_rent") + private String secondYearMonthRent; + + /** + * 第三年月租金 + */ + @Column(name = "third_year_month_rent") + private String thirdYearMonthRent; + + /** + * 合同图片 + */ + @Column(name = "contract_pic") + private String contractPic; + + /** + * 房产证明 + */ + @Column(name = "house_certificate_pic") + private String houseCertificatePic; + + /** + * 审核id + */ + @Column(name = "audit_id") + private Long auditId; + + /** + * 删除标识 + */ + private Boolean deleted; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopStageInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopStageInfoDO.java new file mode 100644 index 000000000..3e5f0ffd3 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/ShopStageInfoDO.java @@ -0,0 +1,88 @@ +package com.cool.store.entity; + +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +@Data +@Table(name = "xfsg_shop_stage_info") +public class ShopStageInfoDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "line_id") + private Long lineId; + + /** + * 店铺id + */ + @Column(name = "shop_id") + private Long shopId; + + /** + * 店铺阶段 + */ + @Column(name = "shop_stage") + private Integer shopStage; + + /** + * 店铺子阶段 + */ + @Column(name = "shop_sub_stage") + private Integer shopSubStage; + + /** + * 店铺子阶段状态 + */ + @Column(name = "shop_sub_stage_status") + private Integer shopSubStageStatus; + + /** + * 当前阶段是否结束 0未结束 1已结束 + */ + @Column(name = "is_terminated") + private Boolean isTerminated; + + /** + * 计划完成时间 + */ + @Column(name = "plan_complete_time") + private String planCompleteTime; + + /** + * 实际完成时间 + */ + @Column(name = "actual_complete_time") + private String actualCompleteTime; + + /** + * 备注 + */ + private String remark; + + /** + * 审核id + */ + @Column(name = "audit_id") + private Long auditId; + + /** + * 删除标识 + */ + private Boolean deleted; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/SignFranchiseDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/SignFranchiseDO.java new file mode 100644 index 000000000..30c281c8a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/SignFranchiseDO.java @@ -0,0 +1,55 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.util.Date; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "xfsg_sign_franchise") +public class SignFranchiseDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @Column(name = "shop_id") + private Long shopId; + @Column(name = "audit_id") + private Long auditId; + @Column(name = "sign_type") + private Integer signType; + @Column(name = "brand_fee") + private String brandFee; + @Column(name = "is_business_license") + private Integer isBusinessLicense; + @Column(name = "is_food_license") + private Integer isFoodLicense; + @Column(name = "contract_start_time") + private Date contractStartTime; + @Column(name = "contract_end_time") + private Date contractEndTime; + @Column(name = "impression_num") + private String impressionNum; + @Column(name = "business_start_hours") + private Date businessStartHours; + @Column(name = "business_end_hours") + private Date businessEndHours; + @Column(name = "irregular_reason") + private String irregularReason; + @Column(name = "remark") + private String remark; + @Column(name = "resign") + private Integer resign; + @Column(name = "mobile") + private String mobile; + @Column(name = "create_time") + private Date createTime; + @Column(name = "update_time") + private Date updateTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/SigningBaseInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/SigningBaseInfoDO.java new file mode 100644 index 000000000..1093e32ee --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/SigningBaseInfoDO.java @@ -0,0 +1,48 @@ +package com.cool.store.entity; + +import lombok.Data; + +import java.util.Date; + +@Data +public class SigningBaseInfoDO { + + private Long id; + + private String partnerId; + + private Long lineId; + + private String signName; + + private String mobile; + + private Integer sex; + + private String idCardFront; + + private String idCardReverse; + + private String idCardNo; + + private String idCardAddress; + + private String currentResidence; + + private String addressDetail; + + private String businessLicense; + + private String businessLicenseCode; + + private String businessLicenseAddress; + + private Date createTime; + + private Date updateTime; + + private Integer deleted; + + private Long auditId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/StoreDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/StoreDO.java new file mode 100644 index 000000000..684c09871 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/StoreDO.java @@ -0,0 +1,223 @@ +package com.cool.store.entity; + +import lombok.Data; + +import java.util.Date; + +/** + * @ClassName StoreDO + * @Description 用一句话描述什么 + */ +@Data +public class StoreDO { + /** + * 自增ID + */ + private Long id; + + /** + * 门店ID + */ + private String storeId; + + /** + * 门店名称 + */ + private String storeName; + + /** + * 门店编号 + */ + private String storeNum; + + /** + * 门头照 + */ + private String avatar; + + + /** + * 区域id + */ + private Long regionId; + /** + * 省 + */ + private String province; + /** + * 市 + */ + private String city; + /** + * 区 + */ + private String county; + + /** + * 门店地址 + */ + private String storeAddress; + + /** + * 定位地址 + */ + private String locationAddress; + + /** + * 锁定定位:locked/锁定,not_ocked/未锁定 + */ + private String isLock; + + /** + * 经维度 + */ + private String longitudeLatitude; + + /** + * 经度 + */ + private String longitude; + + /** + * 维度 + */ + private String latitude; + + /** + * 状态:effective/有效,invalid/失效 + */ + private String isDelete; + + /** + * 电话号码 + */ + private String telephone; + + /** + * 营业时间 + */ + private String businessHours; + + /** + * 门店面积 + */ + private String storeAcreage; + + /** + * 门店带宽 + */ + private String storeBandwidth; + + /** + * 创建时间 + */ + private Long createTime; + + /** + * 创建人 + */ + private String createName; + + /** + * 创建人id + */ + private String createUser; + + /** + * 更新时间 + */ + private Long updateTime; + + /** + * 更新人 + */ + private String updateName; + + /** + * 更新人id + */ + private String updateUser; + + /** + * 备注 + */ + private String remark; + + /** + * 是否设备打卡:device/设备打卡,not_device/非设备打卡 + */ + private String isDevice; + + /** + * 阿里云租户id(视觉) + */ + private String aliyunCorpId; + /** + * 门店来源 + */ + private String source; + /** + * 是否忽略 + */ + private Long isValid; + /** + * 钉钉Id + */ + private String dingId; + + /** + * vdscorpId + */ + private String vdsCorpId; + + /** + * dinging部门id + */ + private String synDingDeptId; + + /** + * 区域路径 + */ + private String regionPath; + + /** + * 门店是否绑定摄像头 + */ + private Boolean hasCamera; + + /** + * 门店状态(open:营业、closed:闭店、not_open:未开业) + */ + private String storeStatus; + + /** + * 动态扩展字段 + */ + private String extendField; + + /** + * 地址经纬度 gis保存 + */ + private String addressPoint; + + /** + * 是否完善门店信息 + * */ + private String isPerfect; + + /** + * 第三方唯一id + */ + private String thirdDeptId; + + + /** + * 门店开店时间 + */ + private Date openDate; + + /** + * 距离我的距离 + */ + private String distance; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/SysMenuDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/SysMenuDO.java new file mode 100644 index 000000000..e4f743d7e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/SysMenuDO.java @@ -0,0 +1,102 @@ +package com.cool.store.entity; + + +import lombok.Data; + +/** + * 菜单表 + * + * @author shoul + */ +@Data +public class SysMenuDO { + + /** + * ID + */ + private Long id; + /** + * 父级ID + */ + private Long parentId; + /** + * 菜单编号 + */ + private String code; + /** + * 菜单名称 + */ + private String name; + /** + * 菜单别名 + */ + private String alias; + /** + * 请求地址(前端路由) + */ + private String path; + /** + * 后端权限标识 + */ + private String perms; + /** + * 菜单资源(图片) + */ + private String source; + /** + * 排序 + */ + private Integer sort; + /** + * 菜单类型(菜单,按钮) + */ + private Integer category; + /** + * 操作按钮类型(工具栏,操作栏,工具操作栏) + */ + private Integer action; + /** + * 描述 + */ + private String remark; + /** + * 所属项目(PC,小程序) + */ + private String platform; + /** + * 是否已删除 + */ + private Integer isDeleted; + /** + * 操作类型 + */ + private String type; + /** + * 是否新开页面 + */ + private String target; + /** + * 组件 + */ + private String component; + /** + * 图标 + */ + private String icon; + /** + * 是否选中 + */ + private Boolean isChecked; + + private Integer menuType; + + /** + * 菜单环境 + */ + private String env; + + /** + * 常用功能图标 + */ + private String commonFunctionsIcon; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/SysRoleDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/SysRoleDO.java new file mode 100644 index 000000000..2952c739e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/SysRoleDO.java @@ -0,0 +1,91 @@ +package com.cool.store.entity; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** + * 角色表 + * + * @author shoul + */ +@Data +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +public class SysRoleDO { + + /** + * 角色ID + */ + private Long id; + + /** + * 角色名称 + */ + private String roleName; + + /** + * 是否预制 + */ + @Deprecated + private Integer isInternal; + + private String appMenu; + + /** + * 岗位来源:(create:自建岗位, sync:从钉钉同步的角色, sync_position:钉钉同步的职位) + */ + private String source; + + private String roleAuth; + + private String positionType; + + /** + * 钉钉角色id + */ + private Long synDingRoleId; + /** + * 角色排序 + */ + private Integer priority; + /** + * 创建时间 + */ + private Date createTime; + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 角色枚举用于判定逻辑 + */ + private String roleEnum; + + /** + * 创建人 + */ + private String createUser; + + /** + * 更新人 + */ + private String updateUser; + + private String thirdUniqueId; + + + public SysRoleDO(Long id, String roleName, Integer isInternal, String source, String positionType) { + this.id = id; + this.roleName = roleName; + this.isInternal = isInternal; + this.source = source; + this.positionType = positionType; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/SysRoleMenuDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/SysRoleMenuDO.java new file mode 100644 index 000000000..4e905a205 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/SysRoleMenuDO.java @@ -0,0 +1,26 @@ +package com.cool.store.entity; + +import lombok.Data; + +/** + * describe: + * + * @author zhouyiping + * @date 2020/09/23 + */ +@Data +public class SysRoleMenuDO { + private Long id; + private Long menuId; + private Long roleId; + private String platform; + + public SysRoleMenuDO() { + } + + public SysRoleMenuDO(Long menuId, Long roleId, String platform) { + this.menuId = menuId; + this.roleId = roleId; + this.platform = platform; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/SystemBuildingShopDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/SystemBuildingShopDO.java new file mode 100644 index 000000000..87f62b756 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/SystemBuildingShopDO.java @@ -0,0 +1,189 @@ +package com.cool.store.entity; + +import com.cool.store.request.SysStoreAppRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.util.Date; +import java.util.Objects; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "xfsg_system_building_shop") +public class SystemBuildingShopDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @Column(name = "shop_id") + private Long shopId; + @Column(name = "line_id") + private Long lineId; + @Column(name = "audit_id") + private Long auditId; + @Column(name = "franchisee_type") + private Integer franchiseeType; + @Column(name = "store_invitees_name") + private String storeInviteesName; + @Column(name = "store_invitees_id") + private String storeInviteesId; + @Column(name = "store_nature") + private Integer storeNature; + @Column(name = "store_operator") + private Integer storeOperator; + @Column(name = "big_desc") + private String bigDesc; + @Column(name = "big_name") + private String bigName; + @Column(name = "big_code") + private String bigCode; + @Column(name = "fight_desc") + private String fightDesc; + @Column(name = "fight_name") + private String fightName; + @Column(name = "fight_code") + private String fightCode; + @Column(name = "small_code") + private String smallCode; + @Column(name = "small_desc") + private String smallDesc; + @Column(name = "small_name") + private String smallName; + @Column(name = "main_business_type") + private Integer mainBusinessType; + @Column(name = "sub_business_type") + private Integer subBusinessType; + @Column(name = "offline_competitor") + private Integer offlineCompetitor; + @Column(name = "offline_competing_brand") + private String offlineCompetingBrand; + @Column(name = "average_price_sh") + private Integer averagePriceSh; + @Column(name = "average_daily_rs") + private Integer averageDailyRs; + @Column(name = "business_store_type") + private String businessStoreType; + @Column(name = "estimated_turnover") + private Integer estimatedTurnover; + @Column(name = "sign_date") + private Date signDate; + @Column(name = "landlord_name") + private String landlordName; + @Column(name = "contract_delivery_date") + private Date contractDeliveryDate; + @Column(name = "landlord_mobile") + private String landlordMobile; + @Column(name = "reservation") + private Date reservation; + @Column(name = "store_rent") + private Integer storeRent; + @Column(name = "store_franchise_fee") + private Integer storeFranchiseFee; + @Column(name = "store_security_deposit") + private Integer storeSecurityDeposit; + @Column(name = "reasons") + private String reasons; + @Column(name = "supervisor_name") + private String supervisorName; + @Column(name = "supervisor_id") + private String supervisorId; + @Column(name = "regio_general") + private String regioGeneral; + @Column(name = "regio_general_id") + private String regioGeneralId; + @Column(name = "create_time") + private Date createTime; + @Column(name = "update_time") + private Date updateTime; + @Column(name = "store_name") + private String storeName; + @Column(name = "usage_rate") + private String usageRate; + + + + public static SystemBuildingShopDO convertToSystemBuildingShopDO(SysStoreAppRequest sysStoreAppRequest) { + if (Objects.isNull(sysStoreAppRequest)) { + return null; + } + SystemBuildingShopDO systemBuildingShopDO = new SystemBuildingShopDO(); + // id + // shopInfoId + systemBuildingShopDO.setShopId(sysStoreAppRequest.getShopId()); + // lineId + systemBuildingShopDO.setLineId(sysStoreAppRequest.getLineId()); + // franchiseeType + systemBuildingShopDO.setFranchiseeType(sysStoreAppRequest.getFranInfo().getFranchiseeType()); + // storeInviteesName + systemBuildingShopDO.setStoreInviteesName(sysStoreAppRequest.getFranInfo().getStoreInviteesName()); +// // storeInviteesId + systemBuildingShopDO.setStoreInviteesId(sysStoreAppRequest.getFranInfo().getInviteUserId()); + // storeNature + systemBuildingShopDO.setStoreNature(sysStoreAppRequest.getStoreDetail().getStoreNature()); + // storeOperator +// systemBuildingShopDO.setStoreOperator(sysStoreAppRequest.getStoreDetail().getstore); + // bigDesc + systemBuildingShopDO.setBigDesc(sysStoreAppRequest.getStoreDetail().getBigDesc()); + // fightDesc + systemBuildingShopDO.setFightDesc(sysStoreAppRequest.getStoreDetail().getFightDesc()); + // smallCode + systemBuildingShopDO.setSmallCode(sysStoreAppRequest.getStoreDetail().getSmallCode()); + // smallDesc + systemBuildingShopDO.setSmallDesc(sysStoreAppRequest.getStoreDetail().getSmallDesc()); + // mainBusinessType + systemBuildingShopDO.setMainBusinessType(sysStoreAppRequest.getStoreDetail().getMainBusinessType()); + // subBusinessType + systemBuildingShopDO.setSubBusinessType(sysStoreAppRequest.getStoreDetail().getSubBusinessType()); + // offlineCompetitor + systemBuildingShopDO.setOfflineCompetitor(sysStoreAppRequest.getStoreDetail().getOfflineCompetitor()); + // offlineCompetingBrand + systemBuildingShopDO.setOfflineCompetingBrand(sysStoreAppRequest.getStoreDetail().getOfflineCompetingBrand()); + // averagePriceSh + systemBuildingShopDO.setAveragePriceSh(sysStoreAppRequest.getStoreDetail().getAveragePriceSh()); + // averageDailyRs + systemBuildingShopDO.setAverageDailyRs(sysStoreAppRequest.getStoreDetail().getAverageDailyRs()); + // businessStoreType + systemBuildingShopDO.setBusinessStoreType(sysStoreAppRequest.getStoreDetail().getBusinessStoreType()); + // estimatedTurnover + systemBuildingShopDO.setEstimatedTurnover(sysStoreAppRequest.getStoreDetail().getEstimatedTurnover()); + // signDate + systemBuildingShopDO.setSignDate(sysStoreAppRequest.getStoreDetail().getSignDate()); + // landlordName + systemBuildingShopDO.setLandlordName(sysStoreAppRequest.getStoreDetail().getLandlordName()); + // contractDeliveryDate + systemBuildingShopDO.setContractDeliveryDate(sysStoreAppRequest.getStoreDetail().getContractDeliveryDate()); + // landlordMobile + systemBuildingShopDO.setLandlordMobile(sysStoreAppRequest.getStoreDetail().getLandlordMobile()); + // reservation + systemBuildingShopDO.setReservation(sysStoreAppRequest.getStoreDetail().getReservation()); + // storeRent + systemBuildingShopDO.setStoreRent(sysStoreAppRequest.getStoreDetail().getStoreRent()); + // storeFranchiseFee + systemBuildingShopDO.setStoreFranchiseFee(sysStoreAppRequest.getStoreDetail().getStoreFranchiseFee()); + // storeSecurityDeposit + systemBuildingShopDO.setStoreSecurityDeposit(sysStoreAppRequest.getStoreDetail().getStoreSecurityDeposit()); + // reasons + systemBuildingShopDO.setReasons(sysStoreAppRequest.getStoreDetail().getReasons()); + // supervisorName + systemBuildingShopDO.setSupervisorName(sysStoreAppRequest.getSupervisorDetail().getSupervisorName()); + // supervisorId + systemBuildingShopDO.setSupervisorId(sysStoreAppRequest.getSupervisorDetail().getSupervisorId()); + // regioGeneral + systemBuildingShopDO.setRegioGeneral(sysStoreAppRequest.getSupervisorDetail().getRegioGeneral()); + // regioGeneralId + systemBuildingShopDO.setRegioGeneralId(sysStoreAppRequest.getSupervisorDetail().getRegioGeneralId()); + systemBuildingShopDO.setStoreName(sysStoreAppRequest.getStoreDetail().getStoreName()); + systemBuildingShopDO.setBigName(sysStoreAppRequest.getStoreDetail().getBigName()); + systemBuildingShopDO.setBigCode(sysStoreAppRequest.getStoreDetail().getBigCode()); + systemBuildingShopDO.setFightName(sysStoreAppRequest.getStoreDetail().getFightName()); + systemBuildingShopDO.setFightCode(sysStoreAppRequest.getStoreDetail().getFightCode()); + systemBuildingShopDO.setSmallName(sysStoreAppRequest.getStoreDetail().getSmallName()); + systemBuildingShopDO.setUsageRate(sysStoreAppRequest.getStoreDetail().getUsageRate()); + systemBuildingShopDO.setStoreOperator(sysStoreAppRequest.getStoreDetail().getStoreOperator()); + return systemBuildingShopDO; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/TempUserDetailDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/TempUserDetailDO.java new file mode 100644 index 000000000..b4d59ba0c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/TempUserDetailDO.java @@ -0,0 +1,129 @@ +package com.cool.store.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.util.Date; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "xfsg_temp_user_detail") +public class TempUserDetailDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * line_info.id + */ + @Column(name = "line_id") + private Long lineId; + + /** + * shop_info.id + */ + @Column(name = "shop_id") + private Long shopId; + + /** + * 区域ID + */ + @Column(name = "region_id") + private Long regionId; + + /** + * 手机号 + */ + private String mobile; + + /** + * 申请人姓名 + */ + private String username; + + /** + * 性别0未选,1男,2女 + */ + private String sex; + + /** + * 年龄 + */ + private Integer age; + + private Integer status; + + /** + * 身份证号码 + */ + @Column(name = "id_card") + private String idCard; + + /** + * 学历 0-小学 1-初中 2-高中 3-中专 4-大专 5-本科 6-硕士 7-硕士以上 + */ + private Integer educational; + + /** + * 角色id 170000000-店长 160000000-店员 + */ + @Column(name = "role_id") + private Long roleId; + + /** + * 身份证正面url + */ + @Column(name = "id_card_positive_url") + private String idCardPositiveUrl; + + /** + * 身份证反面url + */ + @Column(name = "id_card_negative_url") + private String idCardNegativeUrl; + + /** + * 健康证url + */ + @Column(name = "health_certificate_url") + private String healthCertificateUrl; + + /** + * 登记时间 + */ + @Column(name = "register_time") + private Date registerTime; + + /** + * 来源:create-创建 sync-钉钉同步 + */ + private String source; + + /** + * 提交时间 + */ + @Column(name = "submit_time") + private Date submitTime; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + /** + * 是否删除:0.否 1.是 + */ + private Boolean deleted; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/ThirdDepartmentDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/ThirdDepartmentDO.java new file mode 100644 index 000000000..30453140d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/ThirdDepartmentDO.java @@ -0,0 +1,38 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ThirdDepartmentDO implements Serializable { + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("三方部门code") + private String departmentCode; + + @ApiModelProperty("三方部门名称") + private String departmentName; + + @ApiModelProperty("部门负责人 鲜丰水果是工号") + private String deptPrincipal; + + @ApiModelProperty("父部门code") + private String parentDepartmentCode; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/TransferLogDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/TransferLogDO.java new file mode 100644 index 000000000..a308fba3e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/TransferLogDO.java @@ -0,0 +1,185 @@ +package com.cool.store.entity; + +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +@Table(name = "xfsg_transfer_log") +@Data +public class TransferLogDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "line_id") + private Long lineId; + + @Column(name = "partner_id") + private String partnerId; + + /** + * 操作人 + */ + @Column(name = "from_user_id") + private String fromUserId; + + /** + * 被分配人ID + */ + @Column(name = "to_user_id") + private String toUserId; + + /** + * 操作类型 1-转交 2-委托面试 + */ + private Integer type; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + /** + * 新建人ID + */ + @Column(name = "create_user_id") + private String createUserId; + + /** + * 更新人ID + */ + @Column(name = "update_user_id") + private String updateUserId; + + /** + * @return id + */ + public Long getId() { + return id; + } + + /** + * @param id + */ + public void setId(Long id) { + this.id = id; + } + + /** + * 获取操作人 + * + * @return from_user_id - 操作人 + */ + public String getFromUserId() { + return fromUserId; + } + + /** + * 设置操作人 + * + * @param fromUserId 操作人 + */ + public void setFromUserId(String fromUserId) { + this.fromUserId = fromUserId; + } + + /** + * 获取被分配人ID + * + * @return to_user_id - 被分配人ID + */ + public String getToUserId() { + return toUserId; + } + + /** + * 设置被分配人ID + * + * @param toUserId 被分配人ID + */ + public void setToUserId(String toUserId) { + this.toUserId = toUserId; + } + + + + /** + * 获取创建时间 + * + * @return create_time - 创建时间 + */ + public Date getCreateTime() { + return createTime; + } + + /** + * 设置创建时间 + * + * @param createTime 创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * 获取更新时间 + * + * @return update_time - 更新时间 + */ + public Date getUpdateTime() { + return updateTime; + } + + /** + * 设置更新时间 + * + * @param updateTime 更新时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + /** + * 获取新建人ID + * + * @return create_user_id - 新建人ID + */ + public String getCreateUserId() { + return createUserId; + } + + /** + * 设置新建人ID + * + * @param createUserId 新建人ID + */ + public void setCreateUserId(String createUserId) { + this.createUserId = createUserId; + } + + /** + * 获取更新人ID + * + * @return update_user_id - 更新人ID + */ + public String getUpdateUserId() { + return updateUserId; + } + + /** + * 设置更新人ID + * + * @param updateUserId 更新人ID + */ + public void setUpdateUserId(String updateUserId) { + this.updateUserId = updateUserId; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/UserAuthMappingDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/UserAuthMappingDO.java new file mode 100644 index 000000000..6ba2b2d91 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/UserAuthMappingDO.java @@ -0,0 +1,38 @@ +package com.cool.store.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * describe:人员权限映射表 + * + * @author zhouyiping + * @date 2020/10/10 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class UserAuthMappingDO { + private Long id; + private String userId; + private String mappingId; + private String type; + private String source; + private String createId; + private Long createTime; + private String updateId; + private Long updateTime; + + public UserAuthMappingDO(String userId, String mappingId, String type, String source, String createId, Long createTime) { + this.userId = userId; + this.mappingId = mappingId; + this.type = type; + this.source = source; + this.createId = createId; + this.createTime = createTime; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/UserRegionMappingDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/UserRegionMappingDO.java new file mode 100644 index 000000000..1ba4e5289 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/UserRegionMappingDO.java @@ -0,0 +1,77 @@ +package com.cool.store.entity; + +import com.google.common.collect.Lists; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2022/2/24 15:37 + * @Version 1.0 + */ +@Data +public class UserRegionMappingDO { + + /** + * id + */ + private Integer id; + /** + * 映射主键 区域id + */ + private String regionId; + /** + * 用户id + */ + private String userId; + /** + * 创建人id + */ + private String createId; + /** + * 创建时间 + */ + private Long createTime; + /** + * 更新人id + */ + private String updateId; + /** + * 更新时间 + */ + private Long updateTime; + + + public static List convertList(String userId, List regionIds, String operator){ + if(CollectionUtils.isEmpty(regionIds)){ + return Lists.newArrayList(); + } + List userRegionList = new ArrayList<>(); + for (String regionId : regionIds) { + UserRegionMappingDO result = new UserRegionMappingDO(); + result.setUserId(userId); + result.setRegionId(regionId); + result.setCreateId(operator); + result.setUpdateId(operator); + result.setCreateTime(System.currentTimeMillis()); + result.setUpdateTime(System.currentTimeMillis()); + userRegionList.add(result); + } + return userRegionList; + } + + public static UserRegionMappingDO convertDO(String userId, String regionId, String operator){ + UserRegionMappingDO result = new UserRegionMappingDO(); + result.setUserId(userId); + result.setRegionId(regionId); + result.setCreateId(operator); + result.setUpdateId(operator); + result.setCreateTime(System.currentTimeMillis()); + result.setUpdateTime(System.currentTimeMillis()); + return result; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AcceptanceListRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AcceptanceListRequest.java new file mode 100644 index 000000000..19af69f2f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AcceptanceListRequest.java @@ -0,0 +1,25 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import org.springframework.web.bind.annotation.RequestParam; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/05/09/下午5:27 + * @Version 1.0 + * @注释: + */ +@Data +public class AcceptanceListRequest { + @ApiModelProperty("门店名称或编码") + private String keyWord; + @ApiModelProperty("阶段状态") + private List subStageStatus; + private Integer pageNum; + private Integer pageSize; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AddLineRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AddLineRequest.java new file mode 100644 index 000000000..0fa951060 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AddLineRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/4/7 10:39 + * @Version 1.0 + */ +@Data +public class AddLineRequest { + + private String userName; + + private String mobile; + + private Long wantShopAreaId; + + private String investmentManagerUserId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AddMapEvaluationReportRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AddMapEvaluationReportRequest.java new file mode 100644 index 000000000..8e4007080 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AddMapEvaluationReportRequest.java @@ -0,0 +1,20 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: AddMapEvaluationReportRequest + * @Description: + * @date 2024-04-01 17:49 + */ +@Data +public class AddMapEvaluationReportRequest { + + @ApiModelProperty("店铺id") + private Long pointId; + + @ApiModelProperty("高德地图评估报告") + private String mapEvaluationReport; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AddPointDetailRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AddPointDetailRequest.java new file mode 100644 index 000000000..47f6911e8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AddPointDetailRequest.java @@ -0,0 +1,314 @@ +package com.cool.store.request; + +import com.cool.store.entity.PointDetailInfoDO; +import com.cool.store.entity.PointInfoDO; +import com.cool.store.enums.StorageStatusEnum; +import com.cool.store.utils.GeoMapUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import java.util.Objects; + +@Data +public class AddPointDetailRequest { + + @NotBlank + @ApiModelProperty("铺位名称") + private String pointName; + + @ApiModelProperty("所属大区") + private Long regionId; + + @NotBlank + @ApiModelProperty("经度") + private String longitude; + + @NotBlank + @ApiModelProperty("纬度") + private String latitude; + + @ApiModelProperty("省") + private String province; + + @ApiModelProperty("市") + private String city; + + @ApiModelProperty("区/县") + private String district; + + @ApiModelProperty("街道") + private String township; + + @NotBlank + @ApiModelProperty("详细地址") + private String address; + + @ApiModelProperty("经营状况 1营业中 2空铺") + private Integer businessStatus; + + @ApiModelProperty("09:00-10:00人流量") + private Integer nineFlowRate; + + @ApiModelProperty("10:00-11:00人流量") + private Integer tenFlowRate; + + @ApiModelProperty("18:00-19:00人流量") + private Integer eighteenFlowRate; + + @ApiModelProperty("19:00-20:00人流量") + private Integer nineteenFlowRate; + + @Min(1) + @Max(2) + @ApiModelProperty("店铺方位 1主要路线, 2次要路线") + private Integer pointDirection; + + @Min(1) + @Max(4) + @ApiModelProperty("立地条件1.单门面 2.双门面 3.多门面 4.转角") + private Integer siteConditions; + + @ApiModelProperty("使用面积(一楼)") + private String pointArea; + + @ApiModelProperty("门店内宽") + private String storeWidth; + + @ApiModelProperty("房东姓名") + private String landlordUsername; + + @ApiModelProperty("房东电话") + private String landlordMobile; + + @Min(1) + @Max(4) + @ApiModelProperty("支付方式 1.月付 2.季付 3.半年付 4.年付") + private Integer paymentMethod; + + @Min(1) + @Max(4) + @ApiModelProperty("物业状态 1.原始房东 2.二房东 3.三房东 4.招投标性质") + private Integer propertyStatus; + + @ApiModelProperty("转让费") + private String transferFee; + + @Min(1) + @Max(4) + @ApiModelProperty("覆盖社区 1.800户以下 2.800-1200户 3.1200-2000户 4.2000户以上") + private Integer coverCommunity; + + @Min(1) + @Max(4) + @ApiModelProperty("消费能力 1.高端 2.中高端 3.中端 4.低端") + private Integer consumerAbility; + + @Min(1) + @Max(2) + @ApiModelProperty("聚客点农贸市场 1.是 2.否") + private Integer gatherGuestFarmerMarket; + + @Min(1) + @Max(4) + @ApiModelProperty("聚客点医院 1.甲等医院 2.市级医院 3.县区级医院 4.无医院") + private Integer gatherGuestHospital; + + @Min(1) + @Max(4) + @ApiModelProperty("聚客点学校 1.幼儿园/小学 2.大学/学院 3.初中/高中 4.无学校") + private Integer gatherGuestSchool; + + @Min(1) + @Max(2) + @ApiModelProperty("门店人流动向 1.主要流动路线 2.次要流动路线") + private Integer storeFlowTrend; + + @Min(1) + @Max(3) + @ApiModelProperty("周边100米内餐饮 1.餐饮连锁店或6家以上餐饮店 2.普通餐饮店 3.无餐饮店") + private Integer nearRepast; + + @Min(1) + @Max(4) + @ApiModelProperty("周边100米内小业态邻居 1.小业态品牌店3家以上 2.小业态普通店3家以上 3.普通小业态店3家以下 4.无小业态店") + private Integer nearNeighbor; + + @Min(1) + @Max(4) + @ApiModelProperty("周边100米内竞争对手 1.品牌水果店2家以上 2.品牌水果店1家及以上 3.夫妻水果店1家及以上 4.无水果店") + private Integer nearCompete; + + @Min(1) + @Max(3) + @ApiModelProperty("周边100米内业态经营情况 1.运营状况良好 2.运营状况一般 3.运营状况差") + private Integer nearBusinessCondition; + + @Min(1) + @Max(3) + @ApiModelProperty("所处位置 1.十字路口 2.居民生活中心 3.社区出入口") + private Integer intendPosition; + + @Min(1) + @Max(2) + @ApiModelProperty("绿化带 1.门口无绿化带阻挡 2.门口有绿化带阻挡") + private Integer greenBelt; + + @Min(1) + @Max(3) + @ApiModelProperty("门店观瞻 1.观赡非常好 2.观赡一般 3.观赡差") + private Integer storeOutlook; + + @Min(1) + @Max(3) + @ApiModelProperty("门店来客便利性 1.门口5米有人行横道 2.门口15米有人行横道 3.无人行横道") + private Integer guestConvenience; + + @Min(1) + @Max(5) + @ApiModelProperty("意向门店开间尺寸 1.转角 2.12米以上 3.8-12米 4.4-8米 5.4米以下") + private Integer wantShopSize; + + @Min(1) + @Max(4) + @ApiModelProperty("竞争对手性质 1.连锁店 2.强势单店 3.经营散户 4.小型摊贩") + private Integer competeType; + + @Min(1) + @Max(4) + @ApiModelProperty("竞争对手经营能力 1.非常好 2.好 3.一般 4.差") + private Integer competeBusinessCapacity; + + @ApiModelProperty("投资总额") + private String investAmount; + + @ApiModelProperty("预估日商") + private String dayTrader; + + @ApiModelProperty("理论毛利率") + private String profitRate; + + @ApiModelProperty("门店月毛利率") + private String monthProfitRate; + + @ApiModelProperty("品牌使用费率") + private String brandUseRate; + + @ApiModelProperty("品牌使用费") + private String brandUseFee; + + @ApiModelProperty("基本人工费用") + private String staffFee; + + @ApiModelProperty("奖金分红") + private String bonus; + + @ApiModelProperty("门店月房租") + private String monthRent; + + @ApiModelProperty("水电物业及其他") + private String otherFee; + + @ApiModelProperty("净利润") + private String netProfit; + + @ApiModelProperty("月投资回报率") + private String monthRateReturn; + + @ApiModelProperty("租赁合同") + private String rentContract; + + @ApiModelProperty("图片对象") + private String pictureObj; + + @ApiModelProperty("人流测算 1.>400人/时以上, 2.300~400人/时, 3.200~300人/时, 4.100~200人/时") + private Integer flowRateCalculate; + + + public static PointDetailInfoDO convertDO(AddPointDetailRequest request) { + PointDetailInfoDO result = new PointDetailInfoDO(); + result.setBusinessStatus(request.getBusinessStatus()); + result.setNineFlowRate(request.getNineFlowRate()); + result.setTenFlowRate(request.getTenFlowRate()); + result.setEighteenFlowRate(request.getEighteenFlowRate()); + result.setNineteenFlowRate(request.getNineteenFlowRate()); + result.setPointDirection(request.getPointDirection()); + result.setSiteConditions(request.getSiteConditions()); + result.setStoreWidth(request.getStoreWidth()); + result.setLandlordUsername(request.getLandlordUsername()); + result.setLandlordMobile(request.getLandlordMobile()); + result.setPaymentMethod(request.getPaymentMethod()); + result.setPropertyStatus(request.getPropertyStatus()); + result.setTransferFee(request.getTransferFee()); + result.setCoverCommunity(request.getCoverCommunity()); + result.setConsumerAbility(request.getConsumerAbility()); + result.setGatherGuestFarmerMarket(request.getGatherGuestFarmerMarket()); + result.setGatherGuestHospital(request.getGatherGuestHospital()); + result.setGatherGuestSchool(request.getGatherGuestSchool()); + result.setStoreFlowTrend(request.getStoreFlowTrend()); + result.setNearRepast(request.getNearRepast()); + result.setNearNeighbor(request.getNearNeighbor()); + result.setNearCompete(request.getNearCompete()); + result.setNearBusinessCondition(request.getNearBusinessCondition()); + result.setIntendPosition(request.getIntendPosition()); + result.setGreenBelt(request.getGreenBelt()); + result.setStoreOutlook(request.getStoreOutlook()); + result.setGuestConvenience(request.getGuestConvenience()); + result.setWantShopSize(request.getWantShopSize()); + result.setCompeteType(request.getCompeteType()); + result.setCompeteBusinessCapacity(request.getCompeteBusinessCapacity()); + result.setInvestAmount(request.getInvestAmount()); + result.setDayTrader(request.getDayTrader()); + result.setProfitRate(request.getProfitRate()); + result.setMonthProfitRate(request.getMonthProfitRate()); + result.setBrandUseRate(request.getBrandUseRate()); + result.setBrandUseFee(request.getBrandUseFee()); + result.setStaffFee(request.getStaffFee()); + result.setBonus(request.getBonus()); + result.setMonthRent(request.getMonthRent()); + result.setOtherFee(request.getOtherFee()); + result.setNetProfit(request.getNetProfit()); + result.setMonthRateReturn(request.getMonthRateReturn()); + result.setRentContract(request.getRentContract()); + result.setPictureObj(request.getPictureObj()); + result.setFlowRateCalculate(request.getFlowRateCalculate()); + return result; + } + + public static PointInfoDO convertPointDO(AddPointDetailRequest request) { + PointInfoDO result = new PointInfoDO(); + result.setPointName(request.getPointName()); + result.setRegionId(request.getRegionId()); + result.setPointArea(request.getPointArea()); + result.setLatitude(request.getLatitude()); + result.setLongitude(request.getLongitude()); + result.setAddress(request.getAddress()); + result.setProvince(request.getProvince()); + result.setCity(request.getCity()); + result.setDistrict(request.getDistrict()); + result.setTownship(request.getTownship()); + if(StringUtils.isAnyBlank(result.getProvince(),result.getCity(), result.getDistrict(), result.getTownship())){ + GeoMapUtil.AddressInfo addressInfo = GeoMapUtil.reverseGeoCoding(result.getLatitude(), result.getLongitude()); + if(Objects.nonNull(addressInfo)){ + if(StringUtils.isBlank(result.getProvince())){ + result.setProvince(addressInfo.getProvince()); + } + if(StringUtils.isBlank(result.getCity())){ + result.setCity(addressInfo.getCity()); + } + if(StringUtils.isBlank(result.getDistrict())){ + result.setDistrict(addressInfo.getDistrict()); + } + if(StringUtils.isBlank(result.getTownship())){ + result.setTownship(addressInfo.getTownship()); + } + } + } + result.setStorageStatus(StorageStatusEnum.NOT_IN_STORAGE.getCode()); + return result; + } + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AddRentContractRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AddRentContractRequest.java new file mode 100644 index 000000000..6289dd1e7 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AddRentContractRequest.java @@ -0,0 +1,129 @@ +package com.cool.store.request; + +import com.alibaba.fastjson.JSONObject; +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; +import com.cool.store.entity.ShopRentInfoDO; +import com.cool.store.enums.RentTypeEnum; +import com.cool.store.enums.ShopRentTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: UploadRentContractRequest + * @Description:上传租赁合同 + * @date 2024-04-16 11:38 + */ +@Data +public class AddRentContractRequest { + + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("铺位id") + private Long pointId; + + @NotNull + @ApiModelProperty("租赁类型 1铺位直租 2自有铺位") + private Integer rentType; + + @ApiModelProperty("签约日期") + private Date signTime; + + @ApiModelProperty("合同开始日期") + private Date contractStartTime; + + @ApiModelProperty("合同结束日期") + private Date contractEndTime; + + @ApiModelProperty("签约年限") + private Integer contractMonths; + + @ApiModelProperty("店铺租金 1固定租金 2非固定租金") + private Integer shopRentType; + + @ApiModelProperty("月租金") + private String monthRent; + + @ApiModelProperty("第一年月租金") + private String firstYearMonthRent; + + @ApiModelProperty("第二年月租金") + private String secondYearMonthRent; + + @ApiModelProperty("第三年月租金") + private String thirdYearMonthRent; + + @Size(max = 3, message = "最多上传三张租赁合同") + @ApiModelProperty("合同图片") + private List contractPic; + + @Size(max = 3, message = "最多上传三张房产证明") + @ApiModelProperty("房产证明") + private List houseCertificatePic; + + @ApiModelProperty(value = "当前线索id", hidden = true) + private Long curLineId; + + public boolean check(){ + if(Objects.isNull(shopId) && Objects.isNull(pointId)){ + return false; + } + if(RentTypeEnum.OWN.getCode().equals(rentType)){ + if(CollectionUtils.isEmpty(houseCertificatePic) || houseCertificatePic.size() > 3){ + return false; + } + return true; + } + if(Objects.isNull(signTime) || Objects.isNull(contractStartTime) || Objects.isNull(contractEndTime)){ + return false; + } + if(Objects.isNull(contractMonths) || Objects.isNull(shopRentType)){ + return false; + } + if(ShopRentTypeEnum.FIXED.getCode().equals(shopRentType)){ + if(StringUtils.isBlank(monthRent)){ + return false; + } + } + if(ShopRentTypeEnum.NOT_FIXED.getCode().equals(shopRentType)){ + if(StringUtils.isAnyBlank(firstYearMonthRent, secondYearMonthRent, thirdYearMonthRent)){ + return false; + } + } + if(CollectionUtils.isEmpty(contractPic) || contractPic.size() > 3){ + return false; + } + return true; + } + + public static ShopRentInfoDO convertDO(AddRentContractRequest param){ + if(Objects.isNull(param)){ + return null; + } + ShopRentInfoDO shopRentInfoDO = new ShopRentInfoDO(); + shopRentInfoDO.setShopId(param.getShopId()); + shopRentInfoDO.setPointId(param.getPointId()); + shopRentInfoDO.setRentType(param.getRentType()); + shopRentInfoDO.setSignTime(param.getSignTime()); + shopRentInfoDO.setContractStartTime(param.getContractStartTime()); + shopRentInfoDO.setContractEndTime(param.getContractEndTime()); + shopRentInfoDO.setContractMonths(param.getContractMonths()); + shopRentInfoDO.setShopRentType(param.getShopRentType()); + shopRentInfoDO.setMonthRent(param.getMonthRent()); + shopRentInfoDO.setFirstYearMonthRent(param.getFirstYearMonthRent()); + shopRentInfoDO.setSecondYearMonthRent(param.getSecondYearMonthRent()); + shopRentInfoDO.setThirdYearMonthRent(param.getThirdYearMonthRent()); + shopRentInfoDO.setContractPic(JSONObject.toJSONString(param.getContractPic())); + shopRentInfoDO.setHouseCertificatePic(JSONObject.toJSONString(param.getHouseCertificatePic())); + return shopRentInfoDO; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AddShopRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AddShopRequest.java new file mode 100644 index 000000000..a6d78a6be --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AddShopRequest.java @@ -0,0 +1,34 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: AddShopRequest + * @Description:新增店铺 + * @date 2024-04-16 19:54 + */ +@Data +public class AddShopRequest { + + @NotNull + @ApiModelProperty("线索id") + private Long lineId; + + @NotEmpty + @ApiModelProperty("店铺名称") + private List shopNameList; + + public AddShopRequest() { + } + + public AddShopRequest(Long lineId, List shopNameList) { + this.lineId = lineId; + this.shopNameList = shopNameList; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AddSignFranchiseRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AddSignFranchiseRequest.java new file mode 100644 index 000000000..08367ef92 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AddSignFranchiseRequest.java @@ -0,0 +1,94 @@ +package com.cool.store.request; + +import com.cool.store.entity.SignFranchiseDO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +@Data +public class AddSignFranchiseRequest { + + @ApiModelProperty("主键,更新时才存在") + private Long id; + + private Long shopId; + /** + * SignTypeEnum + */ + @ApiModelProperty("签约类型,0.转让 1.新签 2.续签 3.迁址 5.新签同异业转化") + private Integer signType; + + @ApiModelProperty("品牌使用费比例") + private String brandFee; + + @ApiModelProperty("是否有营业执照 0-是 1-否") + private Integer isBusinessLicense; + + @ApiModelProperty("是否有食营 0-是 2-否[二证合一] 3-否[[三小一摊] 4-否[暂未办理]") + private Integer isFoodLicense; + + @ApiModelProperty("合同开始日期") + private Date contractStartTime; + + @ApiModelProperty("合同结束日期") + private Date contractStartEndTime; + + @ApiModelProperty("用印次数") + private String impressionNum; + + @ApiModelProperty("营业开始时间(日期不重要传分秒即可)") + private Date businessStartHours; + @ApiModelProperty("营业结束时间(日期不重要传分秒即可)") + private Date businessEndHours; + + @ApiModelProperty("非常规营业时间原因") + private String irregularReason; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("是否补签") + private Integer resign; + + @ApiModelProperty("加盟商联系方式") + private String mobile; + + + public SignFranchiseDO toSignFranchiseDO() { + SignFranchiseDO signFranchiseDO = new SignFranchiseDO(); + signFranchiseDO.setId(this.id); + signFranchiseDO.setShopId(this.shopId); + signFranchiseDO.setSignType(this.signType); + signFranchiseDO.setBrandFee(this.brandFee); + signFranchiseDO.setIsBusinessLicense(this.isBusinessLicense); + signFranchiseDO.setIsFoodLicense(this.isFoodLicense); + signFranchiseDO.setContractStartTime(this.contractStartTime); + signFranchiseDO.setContractEndTime(this.contractStartEndTime); + signFranchiseDO.setImpressionNum(this.impressionNum); + signFranchiseDO.setBusinessStartHours(setMill(this.businessStartHours)); + signFranchiseDO.setBusinessEndHours(setMill(this.businessEndHours)); + signFranchiseDO.setIrregularReason(this.irregularReason); + signFranchiseDO.setRemark(this.remark); + signFranchiseDO.setResign(this.resign); + signFranchiseDO.setMobile(this.mobile); + return signFranchiseDO; + } + + /** + * 丢弃毫秒日期 + * @param date + * @return + */ + private Date setMill(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.set(Calendar.MILLISECOND, 0); + Date dateWithoutMilliseconds = calendar.getTime(); + return dateWithoutMilliseconds; + + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AddTagsRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AddTagsRequest.java new file mode 100644 index 000000000..662e7f72a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AddTagsRequest.java @@ -0,0 +1,22 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2023/5/31 11:19 + * @Version 1.0 + */ +@Data +@ApiModel +public class AddTagsRequest { + + @ApiModelProperty("加盟申请线索ID") + private Long lineId; + @ApiModelProperty("标签列表") + private List tags; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AllPointPageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AllPointPageRequest.java new file mode 100644 index 000000000..2214e105f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AllPointPageRequest.java @@ -0,0 +1,46 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import com.cool.store.enums.point.PointStatusEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import java.util.ArrayList; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: PointPageRequest + * @Description: + * @date 2024-04-08 10:28 + */ +@Data +public class AllPointPageRequest extends PageBasicInfo { + + @ApiModelProperty("铺位名称或编号") + private String keyword; + + @ApiModelProperty("选择区域") + private List regionIds; + + @ApiModelProperty(value = "拓展专员") + private String developmentManager; + + @ApiModelProperty("1.采集中、2.已评估、3.待审核、5.已审核、6.已签约、7.已失效") + private Integer pointStatus; + + @ApiModelProperty("创建时间-开始") + private String createStartTime; + + @ApiModelProperty("创建时间-结束") + private String createEndTime; + + @ApiModelProperty(value = "当前登录用户", hidden = true) + private String curUserId; + + @ApiModelProperty(value = "管辖区域",hidden = true) + private List authRegionIds; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AppointmentTimeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AppointmentTimeRequest.java new file mode 100644 index 000000000..3c00499d4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AppointmentTimeRequest.java @@ -0,0 +1,29 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author zhangchenbiao + * @FileName: AppointmentTimeRequest + * @Description:预约时间 + * @date 2024-03-19 9:57 + */ +@Data +public class AppointmentTimeRequest { + + @NotNull + @ApiModelProperty("线索id") + private Long lineId; + + @NotNull(message = "开始时间不能为空") + @ApiModelProperty("开始时间 yyyy-MM-dd HH:mm:ss") + private String startTime; + + @NotNull(message = "结束时间不能为空") + @ApiModelProperty("结束时间 yyyy-MM-dd HH:mm:ss") + private String endTime; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AuditCheckRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditCheckRequest.java new file mode 100644 index 000000000..1fd1baf42 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditCheckRequest.java @@ -0,0 +1,22 @@ +package com.cool.store.request; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AuditCheckRequest { + + @ApiModelProperty("稽核id") + private Long checkId; + + @ApiModelProperty("稽核状态 0通过 1不通过") + private Integer checkStatus; + + @ApiModelProperty("稽核意见") + private String checkResult; + + private Long lineId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AuditCloseRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditCloseRequest.java new file mode 100644 index 000000000..f909be18d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditCloseRequest.java @@ -0,0 +1,36 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: AuditRequest + * @Description: + * @date 2024-03-20 14:28 + */ +@Data +public class AuditCloseRequest { + + @NotNull + @ApiModelProperty("线索ID") + private Long lineId; + + @NotBlank + @ApiModelProperty("公开拒绝原因") + private String rejectPublicReason; + + @NotBlank + @ApiModelProperty("真实拒绝原因") + private String rejectRealReason; + + @NotEmpty + @ApiModelProperty("证明文件与凭证") + private List certifyFile; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AuditDetailRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditDetailRequest.java new file mode 100644 index 000000000..4a57d65e3 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditDetailRequest.java @@ -0,0 +1,10 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AuditDetailRequest { + @ApiModelProperty("稽核id") + private Long checkId; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AuditFranchiseFeeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditFranchiseFeeRequest.java new file mode 100644 index 000000000..fac0659e9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditFranchiseFeeRequest.java @@ -0,0 +1,19 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AuditFranchiseFeeRequest { + @ApiModelProperty("原因") + private String result; + + @ApiModelProperty("0通过 1不通过") + private Integer status; + + @ApiModelProperty("shopId") + private Long shopId; + + @ApiModelProperty("主键id") + private Long id; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AuditOpenNewShopRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditOpenNewShopRequest.java new file mode 100644 index 000000000..104fa1d85 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditOpenNewShopRequest.java @@ -0,0 +1,41 @@ +package com.cool.store.request; + +import com.cool.store.constants.CommonConstants; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: AuditOpenNewShopRequest + * @Description: + * @date 2024-05-09 17:28 + */ +@Data +public class AuditOpenNewShopRequest { + + @NotNull + @ApiModelProperty("记录id") + private Long recordId; + + @NotNull + @Min(1)@Max(2) + @ApiModelProperty("审核状态 0待审核 1通过 2不通过") + private Integer auditResult; + + @ApiModelProperty("店铺名称") + private List shopNameList; + + public boolean check(){ + if(CommonConstants.ONE == this.auditResult && CollectionUtils.isEmpty(this.shopNameList)){ + return false; + } + return true; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AuditPassRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditPassRequest.java new file mode 100644 index 000000000..23e851ec2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditPassRequest.java @@ -0,0 +1,29 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: AuditRequest + * @Description: + * @date 2024-03-20 14:28 + */ +@Data +public class AuditPassRequest { + + @ApiModelProperty("线索ID") + private Long lineId; + + @ApiModelProperty("线索子阶段") + private Integer workflowSubStage; + + @ApiModelProperty("证明文件与凭证") + private List certifyFile; + + @ApiModelProperty("通过原因") + private String passReason; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AuditRejectRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditRejectRequest.java new file mode 100644 index 000000000..97cdfaae0 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditRejectRequest.java @@ -0,0 +1,32 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: AuditRequest + * @Description: + * @date 2024-03-20 14:28 + */ +@Data +public class AuditRejectRequest { + + @ApiModelProperty("线索ID") + private Long lineId; + + @ApiModelProperty("线索子阶段") + private Integer workflowSubStage; + + @ApiModelProperty("公开拒绝原因") + private String rejectPublicReason; + + @ApiModelProperty("真实拒绝原因") + private String rejectRealReason; + + @ApiModelProperty("证明文件与凭证") + private List certifyFile; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AuditRentContractRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditRentContractRequest.java new file mode 100644 index 000000000..390a458d2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditRentContractRequest.java @@ -0,0 +1,55 @@ +package com.cool.store.request; + +import com.cool.store.entity.LineAuditInfoDO; +import com.cool.store.entity.ShopAuditInfoDO; +import com.cool.store.enums.AuditResultTypeEnum; +import com.cool.store.enums.AuditTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author zhangchenbiao + * @FileName: AuditRentContractRequest + * @Description:租赁合同审核 + * @date 2024-04-16 14:30 + */ +@Data +public class AuditRentContractRequest { + + @NotNull + @ApiModelProperty("店铺id") + private Long shopId; + + @NotNull + @ApiModelProperty("0通过,1拒绝") + private Integer resultType; + + @ApiModelProperty("原因") + private String reason; + + @ApiModelProperty(value = "操作人id", hidden = true) + private String operateUserId; + + @ApiModelProperty(value = "操作人姓名", hidden = true) + private String operateUserName; + + public static ShopAuditInfoDO convert(AuditRentContractRequest request, AuditTypeEnum auditType){ + ShopAuditInfoDO result = new ShopAuditInfoDO(); + result.setShopId(request.getShopId()); + result.setAuditType(auditType.getCode()); + result.setSubmittedUserId(request.getOperateUserId()); + result.setSubmittedUserName(request.getOperateUserName()); + result.setResultType(request.getResultType()); + if(AuditResultTypeEnum.PASS.getCode().equals(request.getResultType())){ + result.setResultType(AuditResultTypeEnum.PASS.getCode()); + }else{ + result.setRejectReason(request.getReason()); + } + return result; + } + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AuditResultRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditResultRequest.java new file mode 100644 index 000000000..4bf8194ec --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditResultRequest.java @@ -0,0 +1,24 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AuditResultRequest { + + @ApiModelProperty("kdz业务id唯一标识") + private String kdzBusinessId; + + @ApiModelProperty("审核结果 1:成功 0:失败") + private Integer auditResult; + + @ApiModelProperty("失败真实原因(审核结果为0时填写)") + private String failureCause = ""; + + @ApiModelProperty("通过/失败原因") + private String cause = ""; + + @ApiModelProperty("门店编码(系统建店时使用)") + private String storeNum; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AuditSettingRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditSettingRequest.java new file mode 100644 index 000000000..9ab7a5a51 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditSettingRequest.java @@ -0,0 +1,32 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: AuditSettingRequest + * @Description: + * @date 2024-04-02 14:11 + */ +@Data +public class AuditSettingRequest { + + @ApiModelProperty("第一级审批") + private List firstApproval; + + @ApiModelProperty("第二级审批") + private List secondApproval; + + @ApiModelProperty("第三级审批") + private List thirdApproval; + + @ApiModelProperty("第四级审批") + private List fourthApproval; + + @ApiModelProperty("第五级审批") + private List fifthApproval; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/BookingAcceptanceRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/BookingAcceptanceRequest.java new file mode 100644 index 000000000..5e9aa97ca --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/BookingAcceptanceRequest.java @@ -0,0 +1,20 @@ +package com.cool.store.request; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @Auther: WangShuo + * @Date: 2024/05/03/下午7:30 + * @Version 1.0 + * @注释: + */ +@Data +public class BookingAcceptanceRequest { + private Long shopId; + @ApiModelProperty("预约验收时间") + private Date bookingAcceptanceTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/BranchBankPageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/BranchBankPageRequest.java new file mode 100644 index 000000000..d5359d4a4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/BranchBankPageRequest.java @@ -0,0 +1,24 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author wxp + * @FileName: BranchBankPageRequest + * @Description:支行列表 + * @date 2024-03-28 15:51 + */ +@Data +public class BranchBankPageRequest extends PageBasicInfo { + + @ApiModelProperty("银行code") + @NotNull(message = "银行code不能为空") + private String bankCode; + + @ApiModelProperty("支行名字或code") + private String keyword; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/ChangeInvestmentRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/ChangeInvestmentRequest.java new file mode 100644 index 000000000..148ca089e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/ChangeInvestmentRequest.java @@ -0,0 +1,17 @@ +package com.cool.store.request; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/3/29 16:04 + * @Version 1.0 + */ +@Data +public class ChangeInvestmentRequest { + + private String investmentManagerId; + + private Long lineId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/DecorationPayRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/DecorationPayRequest.java new file mode 100644 index 000000000..2ca213ecc --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/DecorationPayRequest.java @@ -0,0 +1,43 @@ +package com.cool.store.request; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * @Auther: WangShuo + * @Date: 2024/04/28/下午9:58 + * @Version 1.0 + * @注释: + */ +@Data +public class DecorationPayRequest { + @ApiModelProperty("xfsg_user_info.partner_id") + private String partnerId; + @ApiModelProperty("line_info.id") + @NotNull(message = "线索id不能为空") + private Long lineId; + @ApiModelProperty("店铺shopId") + private String shopId; + @ApiModelProperty("加盟商姓名") + private String name; + @ApiModelProperty("支付账户") + private String payAccount; + @ApiModelProperty("开户行code") + private String bankCode; + @ApiModelProperty("开户行名称") + private String bankName; + @ApiModelProperty("支行code") + private String branchBankCode; + @ApiModelProperty("支行名称") + private String branchBankName; + @ApiModelProperty("缴纳时间") + private Date payTime; + @ApiModelProperty("付款截图") + private String payPic; + @ApiModelProperty("支付类型 2-装修款") + private Integer payBusinessType; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/DeleteShopRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/DeleteShopRequest.java new file mode 100644 index 000000000..007194f62 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/DeleteShopRequest.java @@ -0,0 +1,18 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: DeleteShopRequest + * @Description: 删除店铺 + * @date 2024-04-16 19:54 + */ +@Data +public class DeleteShopRequest { + + @ApiModelProperty("店铺id") + private Long shopId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeAssessmentCommitListRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeAssessmentCommitListRequest.java new file mode 100644 index 000000000..4f454b39e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeAssessmentCommitListRequest.java @@ -0,0 +1,20 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author byd + * @date 2024-04-30 17:30 + */ +@Data +public class EmployeeAssessmentCommitListRequest { + + @ApiModelProperty("培训id") + private Long employeeTrainingId; + + @ApiModelProperty("培训考核结果列表") + List list; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeAssessmentCommitRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeAssessmentCommitRequest.java new file mode 100644 index 000000000..4c1bd1c3a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeAssessmentCommitRequest.java @@ -0,0 +1,33 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author byd + * @date 2024-04-30 11:10 + */ +@Data +public class EmployeeAssessmentCommitRequest { + + @ApiModelProperty("数据项id") + private Long id; + + @ApiModelProperty("模版id") + private Long templateId; + + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("得分") + private Long score; + + @ApiModelProperty("评语") + private String comments; + + @ApiModelProperty("图片") + private String picture; + + @ApiModelProperty("视频") + private String video; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeAssessmentRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeAssessmentRequest.java new file mode 100644 index 000000000..b2012b535 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeAssessmentRequest.java @@ -0,0 +1,37 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author byd + * @date 2024-04-30 11:10 + */ +@Data +public class EmployeeAssessmentRequest extends PageBasicInfo { + + + @ApiModelProperty("姓名") + private String name; + + @ApiModelProperty("预计考核时间-开始") + private Long estimatedAssessmentBeginTime; + + @ApiModelProperty("预计考核时间-结束") + private Long estimatedAssessmentEndTime; + + @ApiModelProperty("实际考核时间-开始") + private Long actualAssessmentBeginTime; + + @ApiModelProperty("实际考核时间-结束") + private Long actualAssessmentEndTime; + + @ApiModelProperty("实训门店id列表") + private List storeIdList; + + @ApiModelProperty("考核状态 0-培训中 1-带考核 2-考核通过 3-考核不通过") + private Integer assessmentStatus; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeAssessmentTurnRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeAssessmentTurnRequest.java new file mode 100644 index 000000000..d4f7ba0c9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeAssessmentTurnRequest.java @@ -0,0 +1,20 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author byd + * @date 2024-04-30 11:10 + */ +@Data +public class EmployeeAssessmentTurnRequest { + + + @ApiModelProperty("员工id") + private Long id; + + @ApiModelProperty("转交人id") + private String turnUserId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeTrainingCommitListRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeTrainingCommitListRequest.java new file mode 100644 index 000000000..0de8fef2f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeTrainingCommitListRequest.java @@ -0,0 +1,20 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author byd + * @date 2024-04-30 17:30 + */ +@Data +public class EmployeeTrainingCommitListRequest { + + @ApiModelProperty("员工id") + private Long userDetailId; + + @ApiModelProperty("培训结果列表") + List list; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeTrainingCommitRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeTrainingCommitRequest.java new file mode 100644 index 000000000..ef8552e7d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeTrainingCommitRequest.java @@ -0,0 +1,30 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author byd + * @date 2024-04-30 11:10 + */ +@Data +public class EmployeeTrainingCommitRequest { + + @ApiModelProperty("数据项id") + private Long id; + + @ApiModelProperty("模版id") + private Long templateId; + + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("考核人id") + private String userDetailId; + + /** + * 店铺是否合格 + */ + @ApiModelProperty("店铺是否合格") + private Boolean qualified; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeTrainingDetailRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeTrainingDetailRequest.java new file mode 100644 index 000000000..b0673cfef --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeTrainingDetailRequest.java @@ -0,0 +1,48 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @author byd + * @date 2024-04-30 10:53 + */ +@Data +public class EmployeeTrainingDetailRequest { + + @ApiModelProperty("id") + private Long id; + /** + * 实训开始时间 + */ + @ApiModelProperty("实训开始时间") + private Date trainingStartTime; + + /** + * 实训结束时间 + */ + @ApiModelProperty("实训结束时间") + private Date trainingEndTime; + + /** + * 实训门店ID + */ + @ApiModelProperty("实训门店ID") + private String trainingStoreId; + + + /** + * 带教老师ID + */ + @ApiModelProperty("带教老师ID") + private String trainingTeacherUserId; + + + /** + * 预计考核时间 + */ + @ApiModelProperty("预计考核时间") + private Date estimatedAssessmentTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeTrainingRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeTrainingRequest.java new file mode 100644 index 000000000..07278bc3f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/EmployeeTrainingRequest.java @@ -0,0 +1,47 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author byd + * @date 2024-04-30 11:10 + */ +@Data +public class EmployeeTrainingRequest extends PageBasicInfo { + + + @ApiModelProperty("姓名或者手机号") + private String keyWord; + + @ApiModelProperty("区域id列表") + private List regionIdList; + + @ApiModelProperty("是否分配 0-待分配 1-已分配") + private Boolean assignFlag; + + @ApiModelProperty("是否分配门店 0-未分配 1-已分配") + private Boolean assignStoreFlag; + + @ApiModelProperty("开始时间") + private Long beginTime; + + @ApiModelProperty("结束时间") + private Long endTime; + + @ApiModelProperty("门店id列表") + private List storeIdList; + + @ApiModelProperty("理论考试状态 0-未开始 1-合格 2-不合格") + private Integer theoreticalExamStatus; + + @ApiModelProperty("实操考试状态 0-未开始 1-合格 2-不合格") + private Integer practicalExamStatus; + + @ApiModelProperty("带训状态 0-未完成 1-已完成") + private Integer assessmentStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/FirstOrderRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/FirstOrderRequest.java new file mode 100644 index 000000000..b98e459a7 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/FirstOrderRequest.java @@ -0,0 +1,29 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @Auther: WangShuo + * @Date: 2024/04/24/下午9:12 + * @Version 1.0 + * @注释: + */ +@Data +public class FirstOrderRequest { + + @ApiModelProperty("店铺Id") + private Long shopId; + @ApiModelProperty("首批订货金总额") + private String totalOrderDeposit; + @ApiModelProperty("最晚打款时间") + private Date latestPaymentDate; + + @ApiModelProperty("物料预计费用") + private String estimatedCost; + + @ApiModelProperty("水果预计费用") + private String fruitsCost; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseAgreementRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseAgreementRequest.java new file mode 100644 index 000000000..6588133a2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseAgreementRequest.java @@ -0,0 +1,443 @@ +package com.cool.store.request; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FranchiseAgreementRequest { + /** + * 流程发起人工号 + */ + private String apply_user; + /** + * 公司主体0.鲜丰水果股份有限公司 + */ + private Integer company; + /** + * 第一年度结束时间 + */ + private String end1; + /** + * 第二年度结束时间 + */ + private String end2; + /** + * 第三年度结束时间 + */ + private String end3; + /** + * 特许经营合同 + */ + private List fjsc; + /** + * 发起公司名称,默认值:鲜丰水果股份有限公司 + */ + private String fqgsmc; + /** + * 辅助字段0.个人签字 1.企业盖章 + */ + private Integer fzzd1; + /** + * 工程装修合同发起人工号,默认:20230724 + */ + private String gczxhtfqr; + /** + * 货款保证金 + */ + private Integer hkbzj; + /** + * 货款保证金大写 + */ + private Integer hkbzjdx; + /** + * 货款保证金大写文本 + */ + private String hkbzjwb; + /** + * 合同开始日 + */ + private Integer ht_day; + /** + * 合同结束日 + */ + private Integer ht_day2; + /** + * 合同开始月 + */ + private Integer ht_month1; + /** + * 合同结束月 + */ + private Integer ht_month2; + /** + * 合同开始年 + */ + private Integer ht_year1; + /** + * 合同结束年 + */ + private Integer ht_year2; + /** + * 身份证正面 + */ + private List idcard_1; + /** + * 身份证反面 + */ + private List idcard_2; + /** + * 身份证地址 + */ + private String idcard_address; + /** + * 是否有营业执照 + */ + private Integer is_business_license; + /** + * 是否补缴保证金0.是 1.否 + */ + private Integer is_deposit; + /** + * 是否有食品许可证0.是 2.否[二证合一] 3.否[三小一摊] 4.否[暂未办理] + */ + private Integer is_food_license; + /** + * 缴款日期 + */ + private String jiaokuandate; + /** + * 缴款人 + */ + private String jkr; + /** + * 加盟店区县 + */ + private String jmd_area; + /** + * 加盟店市 + */ + private String jmd_city; + /** + * 加盟店省 + */ + private String jmd_province; + /** + * 加盟店街 + */ + private String jmd_street; + /** + * 每年加盟费 + */ + private Integer jmf; + /** + * 第一年度加盟费 + */ + private Integer jmf2; + /** + * 第二年度加盟费 + */ + private Integer jmf3; + /** + * 第三年度加盟费 + */ + private Integer jmf4; + /** + * 第一年度开始日 + */ + private Integer jmfday1; + /** + * 第一年度结束日 + */ + private Integer jmfday2; + /** + * 第二年度开始日 + */ + private Integer jmfday3; + /** + * 第二年度结束日 + */ + private Integer jmfday4; + /** + * 第三年度开始日 + */ + private Integer jmfday5; + /** + * 第三年度结束日 + */ + private Integer jmfday6; + /** + * 加盟费 + */ + private Integer jmfdx; + /** + * 第一年度开始月 + */ + private Integer jmfmonth1; + /** + * 第一年度结束月 + */ + private Integer jmfmonth2; + /** + * 第二年度开始月 + */ + private Integer jmfmonth3; + /** + * 第二年度结束月 + */ + private Integer jmfmonth4; + /** + * 第三年度开始月 + */ + private Integer jmfmonth5; + /** + * 第三年度结束月 + */ + private Integer jmfmonth6; + /** + * 加盟费大写文本 + */ + private String jmfwb; + /** + * 第一年度开始年 + */ + private Integer jmfyear1; + /** + * 第一年度结束年 + */ + private Integer jmfyear2; + /** + * 第二年度开始年 + */ + private Integer jmfyear3; + /** + * 第二年度结束年 + */ + private Integer jmfyear4; + /** + * 第三年度开始年 + */ + private Integer jmfyear5; + /** + * 第三年度结束年 + */ + private Integer jmfyear6; + /** + * 加盟费/保证金打款截图,上传文件,是否补签=否时必填,是否补签=是时不传 + */ + private List jmsdkjt; + /** + * 加盟商代码88888888 + */ + private String jmsdm; + /** + * 加盟商合同状态0.生效 1.终止 2.转让 3.草稿,默认值:0 + */ + private Integer jmshtzt; + /** + * 加盟商类型0.新加盟商开单店 1.老加盟商开单店 2.老加盟商开区域单店 3.新加盟商开区域单店 + */ + private Integer jmslx; + /** + * 加盟商联系方式 + */ + private String jmslxfs; + /** + * 加盟商身份证号 + */ + private String jmssfzhm; + /** + * 加盟商编码 + */ + private String jmsxm; + /** + * 加盟商姓名 + */ + private String jmsxm1; + /** + * 合同结束日期 + */ + private String jsrq; + /** + * 加盟商结算账户账号 + */ + private String jszhhz; + /** + * 酷店掌业务id + */ + private String kdzBusinessId; + /** + * 加盟商结算账户开户行 + */ + private String khhjzh; + /** + * 履约保证金 + */ + private Integer lvbzj; + /** + * 履约保证金大写 + */ + private Integer lybzjdx; + /** + * 履约保证金大写文本 + */ + private String lybzjwb; + /** + * 门店地址 + */ + private String mddz; + /** + * 门店代码 + */ + private String mdmc; + /** + * 门店名称文本 + */ + private String mdmcwb; + /** + * 所属大区,ehr代码 + */ + private String oacompany; + /** + * 营业执照名称 + */ + private String partyb_name; + /** + * 经营者 + */ + private String partyb_operator; + /** + * 类型0.个体工商户 1.有限责任公司 2.独资企业 3.自然人经营 + */ + private Integer partyb_type; + /** + * 品牌使用费比例,默认值:0.05 + */ + private double ppsyfbl; + /** + * 配送费率,默认值:以实际结算为准 + */ + private String psfl; + /** + * 签署动作,默认值:PUBLIC_COMPANY,PUBLIC_OPERATOR + */ + private String qsdz; + /** + * 合同开始日期 + */ + private String qsrq; + /** + * 签约类型,0.转让 1.新签 2.续签 3.迁址 5.新签同异业转化 + */ + private Integer qylx; + /** + * 契约锁电子印章,默认值:2731707107593166911 + */ + private String qys_dzyz; + /** + * 契约锁电子合同分类,默认值:3051420203180101971 + */ + private String qys_htywfl; + /** + * 非常规营业时间原因(常规时间07:00-23:00) + */ + private String reason2; + /** + * 备注说明 + */ + private String remark; + /** + * 此店享受加盟费保证金优惠原因 + */ + private String remark2; + /** + * 是否补签0.是 1.否 + */ + private Integer sfbq__add; + /** + * 营业开始时间 + */ + private String sj1; + /** + * 营业结束时间 + */ + private String sj2; + /** + * 社会信用代码 + */ + private String social_credit_code; + /** + * 食品流通许可证 + */ + private List spltxkz; + /** + * 申请人姓名 + */ + private String sqr_name; + /** + * 申请日期 + */ + private String sqrq; + /** + * 第一年度开始时间 + */ + private String start1; + /** + * 第二年度开始时间 + */ + private String start2; + /** + * 第三年度开始时间 + */ + private String start3; + /** + * 流程标题:特许经营合同审批申请2023-{申请人姓名}-{申请日期yyyy-MM-dd} + */ + private String title; + /** + * 物理印章编码,默认值:201905081151092R + */ + private String wlyzbm; + /** + * 用印次数 + */ + private Integer yycs; + /** + * 营业执照办理授权书 + */ + private List yyzzblsqs; + /** + * 营业执照复印件,上传文件 + */ + private List yyzzfyj; + /** + * 支行 + */ + private String zhihang; + /** + * SAP签约类型,与签约类型关联,A104-转让 A101-新签 A102-续签 A103-迁址 A105-同业转换 + * 签约类型 SAP签约类型 + * 0 A104 + * 1 A101 + * 2 A102 + * 3 A103 + * 5 A105 + */ + private String zqyty; + + /** + * 装修合同业务分类,默认:3121375929356587766 + */ + private String zxhtywfl; + + /** + * 法定代表人或负责人 + */ + private String fddbr; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseFeeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseFeeRequest.java new file mode 100644 index 000000000..2af633294 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseFeeRequest.java @@ -0,0 +1,62 @@ +package com.cool.store.request; + +import com.cool.store.entity.FranchiseFeeDO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class FranchiseFeeRequest { + + private Long id; + @ApiModelProperty("shopId") + private Long shopId; + @ApiModelProperty("payId") + private Long payId; + @ApiModelProperty("每年加盟费") + private String yearFranchiseFee; + @ApiModelProperty("贷款保证金") + private String loanMargin; + @ApiModelProperty("第一年度开始时间") + private Date firstYearStartTime; + @ApiModelProperty("第一年度结束时间") + private Date firstYearEndTime; + @ApiModelProperty("第一年度加盟费") + private String firstYearFee; + @ApiModelProperty("第二年度开始时间") + private Date secondYearStartTime; + @ApiModelProperty("第二年度结束时间") + private Date secondYearEndTime; + @ApiModelProperty("第二年度加盟费") + private String secondYearFee; + @ApiModelProperty("第仨年度开始时间") + private Date thirdYearStartTime; + @ApiModelProperty("第仨年度结束时间") + private Date thirdYearEndTime; + @ApiModelProperty("第仨年度加盟费") + private String thirdYearFee; + @ApiModelProperty("履约保证金") + private String performanceBond; + + + public FranchiseFeeDO toFranchiseFeeDO() { + FranchiseFeeDO franchiseFeeDO = new FranchiseFeeDO(); + franchiseFeeDO.setShopId(this.shopId); + franchiseFeeDO.setPayId(this.payId); + franchiseFeeDO.setYearFranchiseFee(this.yearFranchiseFee); + franchiseFeeDO.setLoanMargin(this.loanMargin); + franchiseFeeDO.setFirstYearStartTime(this.firstYearStartTime); + franchiseFeeDO.setFirstYearEndTime(this.firstYearEndTime); + franchiseFeeDO.setFirstYearFee(this.firstYearFee); + franchiseFeeDO.setSecondYearStartTime(this.secondYearStartTime); + franchiseFeeDO.setSecondYearEndTime(this.secondYearEndTime); + franchiseFeeDO.setSecondYearFee(this.secondYearFee); + franchiseFeeDO.setThirdYearStartTime(this.thirdYearStartTime); + franchiseFeeDO.setThirdYearEndTime(this.thirdYearEndTime); + franchiseFeeDO.setThirdYearFee(this.thirdYearFee); + franchiseFeeDO.setPerformanceBond(this.performanceBond); + return franchiseFeeDO; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseeSaveRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseeSaveRequest.java new file mode 100644 index 000000000..6561516e2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseeSaveRequest.java @@ -0,0 +1,53 @@ +package com.cool.store.request; + +import com.cool.store.entity.FranchiseeDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class FranchiseeSaveRequest { + + private String partnerId; + + private Long lineId; + + @ApiModelProperty("加盟商姓名") + private String frName; + + @ApiModelProperty("加盟商手机号码") + private String frMobile; + + @ApiModelProperty("个人身份证号/企业统一社会信用代码") + private String idCard; + + @ApiModelProperty("身份证地址/公司地址") + private String idCardAddress; + + @ApiModelProperty("性别:0-女,1-男") + private Integer sex; + + @ApiModelProperty("身份证原件正面地址/营业执照拍照上传") + private String idCardFrontUrl; + @ApiModelProperty("身份证原件国徽面/食品经营许可证上传") + private String idCardBackUrl; + + @ApiModelProperty("0-个人签约;1-企业签约") + private Integer signType; + + @ApiModelProperty("生日,企业不用传") + private String birthday; + + + public FranchiseeDO toFranchiseeDO() { + FranchiseeDO franchiseeDO = new FranchiseeDO(); + franchiseeDO.setBirthday(this.birthday); + franchiseeDO.setFrMobile(this.frMobile); + franchiseeDO.setFrName(this.frName); + franchiseeDO.setIdCard(this.idCard); + franchiseeDO.setIdCardAddress(this.idCardAddress); + franchiseeDO.setIdCardBackUrl(this.idCardBackUrl); + franchiseeDO.setIdCardFrontUrl(this.idCardFrontUrl); + franchiseeDO.setSignType(this.signType); + return franchiseeDO; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/IdRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/IdRequest.java new file mode 100644 index 000000000..f92f43329 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/IdRequest.java @@ -0,0 +1,15 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author byd + * @date 2024-04-24 16:40 + */ +@Data +public class IdRequest { + + @ApiModelProperty("id") + private Long id; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/InitiatingRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/InitiatingRequest.java new file mode 100644 index 000000000..84aff66ea --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/InitiatingRequest.java @@ -0,0 +1,187 @@ +package com.cool.store.request; + +import com.cool.store.entity.InitiatingDO; +import com.cool.store.utils.StringUtil; +import io.swagger.models.auth.In; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Calendar; +import java.util.Date; + +@Data +public class InitiatingRequest { + + private Long lineId; + + private String signName; + + private String idCardNo; + + private String businessLicenseCode; + + private String mobile; + + private String idCardAddress; + + private String businessLicenseAddress; + + private String title; + + private String apply_user; + + private String apply_user_name; + + private String apply_date; + + private String jms_id_card; + + private String jms_id_card_address; + + private String jms_name; + + private BigDecimal lybzj; + + private BigDecimal lybzjwb; + + private String lybzjdx; + + private String jms_mobile; + + private String annex1; + + private String annex2; + + private String annex3; + + private Integer qy_year; + + private Integer qy_month; + + private Integer qy_day; + + private Integer jy_year; + + private Integer jy_month; + + private Integer jy_day; + + private String yxjzz; + + private Integer xyqx_month; + + private BigDecimal jmf; + + private BigDecimal jmfwb; + + private String jmfdx; + + private BigDecimal jmyxj; + + private BigDecimal jmyxjwb; + + private String jmyxjdx; + + private String csfz; + + private String jmsxx; + + private String annex4; + + private String annex5; + + private String annex6; + + private String annex7; + + private String dkr; + + private String dkrq; + + private Integer jm_type; + + private Integer jms_type; + + private String jm_csgs; + + private String csfzName; + + private Date signStartTime; + + private Date signEndTime; + + + public InitiatingDO toInitiatingDO() { + InitiatingDO initiatingDO = new InitiatingDO(); + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + // 格式化日期并输出 + String dateTime = currentDate.format(formatter); + initiatingDO.setTitle("加盟意向协议-" + this.signName + "-" + dateTime); + initiatingDO.setApply_date(this.apply_date); + initiatingDO.setJms_id_card(this.idCardNo); + if (StringUtil.isNotBlank(this.businessLicenseAddress)) { + initiatingDO.setJms_id_card_address(this.businessLicenseAddress); + } else if (StringUtil.isNotBlank(this.idCardAddress)) { + initiatingDO.setJms_id_card_address(this.idCardAddress); + } + if (StringUtil.isNotBlank(this.businessLicenseCode)) { + initiatingDO.setJms_id_card(this.businessLicenseCode); + } else if (StringUtil.isNotBlank(this.idCardNo)) { + initiatingDO.setJms_id_card(this.idCardNo); + } + initiatingDO.setJms_name(this.signName); + initiatingDO.setLybzj(this.lybzj); + initiatingDO.setLybzjwb(this.lybzj); + initiatingDO.setLybzjdx(this.lybzjdx); + initiatingDO.setJms_mobile(this.mobile); + initiatingDO.setAnnex1(this.annex1); + initiatingDO.setAnnex2(this.annex2); + initiatingDO.setAnnex3(this.annex3); + initiatingDO.setQy_year(timeUtils(this.signStartTime,"year")); + initiatingDO.setQy_month(timeUtils(this.signStartTime,"month")); + initiatingDO.setQy_day(timeUtils(this.signStartTime,"day")); + initiatingDO.setJy_year(timeUtils(this.signEndTime,"year")); + initiatingDO.setJy_month(timeUtils(this.signEndTime,"month")); + initiatingDO.setJy_day(timeUtils(this.signEndTime,"day")); + initiatingDO.setYxjzz(this.yxjzz); + initiatingDO.setXyqx_month(this.xyqx_month); + initiatingDO.setJmf(this.jmf); + initiatingDO.setJmfwb(this.jmf); + initiatingDO.setJmfdx(this.jmfdx); + initiatingDO.setJmyxj(this.jmyxj); + initiatingDO.setJmyxjwb(this.jmyxj); + initiatingDO.setCsfz(this.csfz); + initiatingDO.setJmsxx(this.jmsxx); + initiatingDO.setAnnex4(this.annex4); + initiatingDO.setAnnex5(this.annex5); + initiatingDO.setAnnex6(this.annex6); + initiatingDO.setAnnex7(this.annex7); + initiatingDO.setDkr(this.dkr); + initiatingDO.setDkrq(this.dkrq); + initiatingDO.setJm_type(this.jm_type); + initiatingDO.setJms_type(this.jms_type); + initiatingDO.setJm_csgs(this.jm_csgs); + initiatingDO.setJmyxjdx(this.jmyxjdx); + return initiatingDO; + } + + private int timeUtils(Date time, String type) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(time); + switch (type){ + case "year": + return calendar.get(Calendar.YEAR); + case "month": + return calendar.get(Calendar.MONTH) + 1; + case "day": + return calendar.get(Calendar.DAY_OF_MONTH); + default: + return 0; + } + + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/IntentAgreementSubmitRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/IntentAgreementSubmitRequest.java new file mode 100644 index 000000000..0d6192463 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/IntentAgreementSubmitRequest.java @@ -0,0 +1,59 @@ +package com.cool.store.request; + +import com.cool.store.entity.SigningBaseInfoDO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class IntentAgreementSubmitRequest { + + private String partnerId; + + private Long lineId; + + @ApiModelProperty("签约人姓名") + private String signName; + @ApiModelProperty("手机号") + private String mobile; + @ApiModelProperty("1男 2女") + private Integer sex; + @ApiModelProperty("身份证人像面url") + private String idCardFront; + @ApiModelProperty("身份证国徽面url") + private String idCardReverse; + @ApiModelProperty("身份证号") + private String idCardNo; + @ApiModelProperty("身份证地址") + private String idCardAddress; + @ApiModelProperty("现居住地") + private String currentResidence; + @ApiModelProperty("详细地址") + private String addressDetail; + @ApiModelProperty("营业执照图片") + private String businessLicense; + @ApiModelProperty("统一社会信用代码") + private String businessLicenseCode; + @ApiModelProperty("公司地址") + private String businessLicenseAddress; + + + public SigningBaseInfoDO toSigningBaseInfoDO() { + SigningBaseInfoDO signingBaseInfoDO = new SigningBaseInfoDO(); + signingBaseInfoDO.setPartnerId(this.partnerId); + signingBaseInfoDO.setLineId(this.lineId); + signingBaseInfoDO.setSignName(this.signName); + signingBaseInfoDO.setMobile(this.mobile); + signingBaseInfoDO.setSex(this.sex); + signingBaseInfoDO.setIdCardFront(this.idCardFront); + signingBaseInfoDO.setIdCardReverse(this.idCardReverse); + signingBaseInfoDO.setIdCardNo(this.idCardNo); + signingBaseInfoDO.setIdCardAddress(this.idCardAddress); + signingBaseInfoDO.setCurrentResidence(this.currentResidence); + signingBaseInfoDO.setAddressDetail(this.addressDetail); + signingBaseInfoDO.setBusinessLicense(this.businessLicense); + signingBaseInfoDO.setBusinessLicenseCode(this.businessLicenseCode); + signingBaseInfoDO.setBusinessLicenseAddress(this.businessLicenseAddress); + return signingBaseInfoDO; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/InterviewUploadVideoRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/InterviewUploadVideoRequest.java new file mode 100644 index 000000000..77a970385 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/InterviewUploadVideoRequest.java @@ -0,0 +1,27 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: InterviewUploadVideoRequest + * @Description: + * @date 2024-04-07 19:31 + */ +@Data +public class InterviewUploadVideoRequest { + + @NotNull + @ApiModelProperty("面试id") + private Long interviewId; + + @NotNull + @ApiModelProperty("视频链接") + private List videoUrlList; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/JoinIntentionRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/JoinIntentionRequest.java new file mode 100644 index 000000000..4011a8e42 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/JoinIntentionRequest.java @@ -0,0 +1,96 @@ +package com.cool.store.request; + +import com.cool.store.entity.LineInfoDO; +import com.cool.store.entity.MemberQuestionDO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Data +public class JoinIntentionRequest { + private Long id; + @ApiModelProperty("线索信息表-线索id") + private Long lineId; + @ApiModelProperty("用户信息表partnerId") + @NotBlank(message = "partnerId不能为空") + private String partnerId; + @ApiModelProperty("加盟身份 1个人加盟 2企业加盟") + private Integer joinType; + @ApiModelProperty("姓名") + private String userName; + @ApiModelProperty("手机号") + private String mobile; + @ApiModelProperty("1男 2女") + private Integer sex; + @ApiModelProperty("意向加盟区域") + private String wantShopArea; + @ApiModelProperty("意向区域编码") + private String areaCode; + @ApiModelProperty("常驻区域") + private String liveArea; + @ApiModelProperty("常驻区域详细地址") + private String liveAddress; + @ApiModelProperty("线索审核信息id") + private Long auditId; + @ApiModelProperty("职业状态 1:在职 2:个体 3:自己开公司 0:待业") + private Integer careerStatus; + @ApiModelProperty("教育程度 1:小学 2:初中 3:高中 4大学及以上") + private Integer educationLevel; + @ApiModelProperty("家庭年收入 1:10-20万 2:20-30万 3:30-50万 4:50万以上") + private String annualIncome; + @ApiModelProperty("是否有合伙人 1:是 0:否") + private Integer hasPartner; + @ApiModelProperty("资金来源 1:自有资金 2:合伙资金 3:借贷") + private Integer capitalSource; + @ApiModelProperty("经营方式 1:自己独立经营 2:和家人一起经营 3:和合伙人一起经营 4:只投资让他人经营") + private Integer businessMode; + @ApiModelProperty("是否有加盟品牌经营的经验 1:无 2:单店经验 3:多店经验 4:多店连锁经验") + private Integer joinExperience; + @ApiModelProperty("是否有水果行业经营的经验 1:无 2:单店经验 3:多店经验 4:多店连锁经验") + private Integer fruitIndustryExperience; + @ApiModelProperty("店铺情况 1:自有店铺 2:自有意向店铺 3:无意向店铺" ) + private String storeCondition; + @ApiModelProperty("预期回本的最长周期 1:1年半以上 2:1年半内 3:1年内 4:半年内") + private String paybackPeriod; + @ApiModelProperty("是否严格遵守管理标准 1:是 2:否") + private Integer followsManagementStandard; + @ApiModelProperty("是否能参加认证培训 1:是 2:否") + private Integer canTraining; + + public LineInfoDO toLineInfoDO() { + LineInfoDO lineInfoDO = new LineInfoDO(); + lineInfoDO.setPartnerId(this.partnerId); + lineInfoDO.setMobile(this.mobile); + lineInfoDO.setLiveAddress(this.liveAddress); + lineInfoDO.setUsername(this.userName); + lineInfoDO.setSex(String.valueOf(this.sex)); + lineInfoDO.setWantShopAreaId(Long.valueOf(this.areaCode)); + lineInfoDO.setId(this.lineId); + return lineInfoDO; + } + + + public MemberQuestionDO toMemberQuestionDO() { + MemberQuestionDO memberQuestionDO = new MemberQuestionDO(); + memberQuestionDO.setId(this.id); + memberQuestionDO.setAuditId(this.auditId); + memberQuestionDO.setPartnerId(this.partnerId); + memberQuestionDO.setLineId(this.lineId); + memberQuestionDO.setCareerStatus(this.careerStatus); + memberQuestionDO.setEducationLevel(this.educationLevel); + memberQuestionDO.setAnnualIncome(this.annualIncome); + memberQuestionDO.setHasPartner(this.hasPartner); + memberQuestionDO.setCapitalSource(this.capitalSource); + memberQuestionDO.setBusinessMode(this.businessMode); + memberQuestionDO.setJoinExperience(this.joinExperience); + memberQuestionDO.setFruitIndustryExperience(this.fruitIndustryExperience); + memberQuestionDO.setStoreCondition(this.storeCondition); + memberQuestionDO.setPaybackPeriod(this.paybackPeriod); + memberQuestionDO.setFollowsManagementStandard(this.followsManagementStandard); + memberQuestionDO.setCanTraining(this.canTraining); + memberQuestionDO.setJoinType(this.joinType); + return memberQuestionDO; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/LicenseBizContentRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/LicenseBizContentRequest.java new file mode 100644 index 000000000..f3c0f4be4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/LicenseBizContentRequest.java @@ -0,0 +1,8 @@ +package com.cool.store.request; + +import lombok.Data; + +@Data +public class LicenseBizContentRequest { + private String storeNum; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/LicenseListRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/LicenseListRequest.java new file mode 100644 index 000000000..76ccd2b73 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/LicenseListRequest.java @@ -0,0 +1,33 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class LicenseListRequest extends PageBasicInfo{ + + @ApiModelProperty("门店名称") + private String storeName; + @ApiModelProperty("提交申请时间") + private Long submitStartTime; + @ApiModelProperty("提交申请时间") + private Long submitEndTime; + @ApiModelProperty("所属区域") + private String regionId; + @ApiModelProperty("审核状态 1:待通过 2:未通过 3:已通过") + private Integer status; + + public LicenseListRequest(Integer pageNum,Integer pageSize,String storeName, Long submitStartTime, Long submitEndTime, String regionId, Integer status) { + setPageNum(pageNum); + setPageSize(pageSize); + this.storeName = storeName; + this.submitStartTime = submitStartTime; + this.submitEndTime = submitEndTime; + this.regionId = regionId; + this.status = status; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/LineFollowLogRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/LineFollowLogRequest.java new file mode 100644 index 000000000..56b332377 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/LineFollowLogRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: LineFollowLogRequest + * @Description: + * @date 2024-03-27 14:59 + */ +@Data +public class LineFollowLogRequest { + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("日志") + private String message; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/LineInterviewPageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/LineInterviewPageRequest.java new file mode 100644 index 000000000..12660c6ac --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/LineInterviewPageRequest.java @@ -0,0 +1,58 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: LineInterviewPageRequest + * @Description:面试列表 + * @date 2024-03-19 15:51 + */ +@Data +public class LineInterviewPageRequest extends PageBasicInfo { + + @ApiModelProperty("姓名&手机号") + private String keyword; + + @ApiModelProperty("线索姓名") + private String username; + + @ApiModelProperty("手机号") + private String mobile; + + @ApiModelProperty("流程阶段") + private String workflowStage; + + @ApiModelProperty("流程子阶段") + private String workflowSubStage; + + @ApiModelProperty("意向区域") + private Long wantShopAreaId; + + @ApiModelProperty("面试开始时间") + private String interviewStartTime; + + @ApiModelProperty("面试截止时间") + private String interviewEndTime; + + @ApiModelProperty("面试状态") + private Integer interviewStatus; + + @ApiModelProperty("线索来源") + private Integer lineSource; + + @ApiModelProperty("面试类型:0面谈;1一审;2二审") + private Integer interviewType; + + @ApiModelProperty("面试官") + private String interviewerUserId; + + private List wantShopAreaIds; + + private String areaPath; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/LineListRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/LineListRequest.java new file mode 100644 index 000000000..1d8364a88 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/LineListRequest.java @@ -0,0 +1,36 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/3/27 16:32 + * @Version 1.0 + */ +@Data +public class LineListRequest extends PageBasicInfo { + + @ApiModelProperty("线索姓名") + private String userName; + @ApiModelProperty("线索手机号") + private String mobile; + @ApiModelProperty("关键字") + private String keyword; + @ApiModelProperty("线索子阶段") + private Integer workflowSubStage; + @ApiModelProperty("线索创建时间_开始") + private String createTimeStart; + @ApiModelProperty("线索创建时间_结束") + private String createTimeEnd; + @ApiModelProperty("意向区域ID") + private Long wantShopAreaId; + @ApiModelProperty("线索来源") + private Integer lineSource; + @ApiModelProperty("招商经理ID") + private String investmentManagerUserId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/LinePaySubmitRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/LinePaySubmitRequest.java new file mode 100644 index 000000000..63c6e7e30 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/LinePaySubmitRequest.java @@ -0,0 +1,60 @@ +package com.cool.store.request; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class LinePaySubmitRequest { + + @ApiModelProperty("xfsg_user_info.partner_id") + private String partnerId; + + @ApiModelProperty("line_info.id") + private Long lineId; + + @ApiModelProperty("支付状态 45:待缴费 50:已缴费 55缴费失败") + private Integer payStatus; + + @ApiModelProperty("支付方式 1微信 2银行转账") + private Integer payType; + + @ApiModelProperty("付款人姓名/加盟商姓名") + private String payUserName; + + @ApiModelProperty("付款账号") + private String payAccount; + + @ApiModelProperty("开户行code") + private String bankCode; + + @ApiModelProperty("开户行名称") + private String bankName; + + @ApiModelProperty("支行code") + private String branchBankCode; + + @ApiModelProperty("支行名称") + private String branchBankName; + + @ApiModelProperty("缴纳时间") + private String payTime; + + @ApiModelProperty("付款截图") + private String payPic; + + @ApiModelProperty("承诺书图片") + private String promisePic; + + @ApiModelProperty("支付类型 0-缴纳意向金 1-缴纳加盟费 2-装修款") + private Integer payBusinessType; + @ApiModelProperty("铺位id") + private Long shopId; + @ApiModelProperty("缴费金额") + private BigDecimal amount; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/LineRecommendPointRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/LineRecommendPointRequest.java new file mode 100644 index 000000000..f1751b7ac --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/LineRecommendPointRequest.java @@ -0,0 +1,46 @@ +package com.cool.store.request; + +import com.cool.store.entity.PointRecommendDO; +import com.cool.store.enums.point.PointRecommendStatusEnum; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: RecommendPointRequest + * @Description: + * @date 2024-04-08 16:50 + */ +@Data +public class LineRecommendPointRequest { + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("铺位ids") + private List pointIds; + + @ApiModelProperty(value = "拓展经理", hidden = true) + private String developmentManager; + + public List convertList(){ + if(Objects.isNull(this.lineId) || CollectionUtils.isEmpty(pointIds)){ + return Lists.newArrayList(); + } + return this.pointIds.stream().map(pointId -> { + PointRecommendDO pointRecommendDO = new PointRecommendDO(); + pointRecommendDO.setLineId(this.lineId); + pointRecommendDO.setDevelopmentManager(this.developmentManager); + pointRecommendDO.setPointId(pointId); + pointRecommendDO.setStatus(PointRecommendStatusEnum.POINT_RECOMMEND_STATUS_1.getCode()); + return pointRecommendDO; + }).collect(Collectors.toList()); + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/MiniAddPointRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/MiniAddPointRequest.java new file mode 100644 index 000000000..3390f5f7d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/MiniAddPointRequest.java @@ -0,0 +1,134 @@ +package com.cool.store.request; + +import com.cool.store.entity.PointDetailInfoDO; +import com.cool.store.entity.PointInfoDO; +import com.cool.store.enums.StorageStatusEnum; +import com.cool.store.utils.GeoMapUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.Date; +import java.util.Objects; + +@Data +public class MiniAddPointRequest { + + @NotNull + @ApiModelProperty("店铺id") + private Long shopId; + + @NotBlank + @ApiModelProperty("铺位名称") + private String pointName; + + @ApiModelProperty("所属大区") + private Long regionId; + + @NotBlank + @ApiModelProperty("经度") + private String longitude; + + @NotBlank + @ApiModelProperty("纬度") + private String latitude; + + @NotBlank + @ApiModelProperty("详细地址") + private String address; + + @NotNull + @Min(1) + @Max(2) + @ApiModelProperty("经营状况 1营业中 2空铺") + private Integer businessStatus; + + @NotBlank + @ApiModelProperty("使用面积(一楼)") + private String pointArea; + + @Min(1) + @Max(4) + @ApiModelProperty("支付方式 1.月付 2.季付 3.半年付 4.年付") + private Integer paymentMethod; + + @NotBlank + @ApiModelProperty("转让费") + private String transferFee; + + @NotBlank + @ApiModelProperty("图片对象") + private String pictureObj; + + @ApiModelProperty(value = "当前线索id", hidden = true) + private Long curLineId; + + @NotBlank + @ApiModelProperty("加盟商签名") + private String lineSign; + + @NotBlank + @ApiModelProperty("省") + private String province; + + @NotBlank + @ApiModelProperty("市") + private String city; + + @NotBlank + @ApiModelProperty("区/县") + private String district; + + @ApiModelProperty("街道") + private String township; + + + public static PointDetailInfoDO convertDO(MiniAddPointRequest request) { + PointDetailInfoDO result = new PointDetailInfoDO(); + result.setBusinessStatus(request.getBusinessStatus()); + result.setPaymentMethod(request.getPaymentMethod()); + result.setTransferFee(request.getTransferFee()); + result.setPictureObj(request.getPictureObj()); + result.setLineSign(request.getLineSign()); + result.setLineSignTime(new Date()); + return result; + } + + public static PointInfoDO convertPointDO(MiniAddPointRequest request) { + PointInfoDO result = new PointInfoDO(); + result.setPointName(request.getPointName()); + result.setRegionId(request.getRegionId()); + result.setPointArea(request.getPointArea()); + result.setLatitude(request.getLatitude()); + result.setLongitude(request.getLongitude()); + result.setAddress(request.getAddress()); + result.setProvince(request.getProvince()); + result.setCity(request.getCity()); + result.setDistrict(request.getDistrict()); + result.setTownship(request.getTownship()); + if(StringUtils.isAnyBlank(result.getProvince(),result.getCity(), result.getDistrict(), result.getTownship())){ + GeoMapUtil.AddressInfo addressInfo = GeoMapUtil.reverseGeoCoding(result.getLatitude(), result.getLongitude()); + if(Objects.nonNull(addressInfo)){ + if(StringUtils.isBlank(result.getProvince())){ + result.setProvince(addressInfo.getProvince()); + } + if(StringUtils.isBlank(result.getCity())){ + result.setCity(addressInfo.getCity()); + } + if(StringUtils.isBlank(result.getDistrict())){ + result.setDistrict(addressInfo.getDistrict()); + } + if(StringUtils.isBlank(result.getTownship())){ + result.setTownship(addressInfo.getTownship()); + } + } + } + result.setStorageStatus(StorageStatusEnum.NOT_IN_STORAGE.getCode()); + return result; + } + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/MiniPointPageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/MiniPointPageRequest.java new file mode 100644 index 000000000..3a9dd4c24 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/MiniPointPageRequest.java @@ -0,0 +1,27 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; + +/** + * @author zhangchenbiao + * @FileName: MiniPointPageRequest + * @Description: + * @date 2024-04-12 14:33 + */ +@Data +public class MiniPointPageRequest extends PageBasicInfo { + + @Min(value = 1, message = "status不能小于1") + @Max(value = 3, message = "status不能大于3") + @ApiModelProperty("1.待选择 2.已选择 3.拒绝/失效") + private Integer status; + + @ApiModelProperty(value = "线索id") + private Long lineId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/MobileUpdateRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/MobileUpdateRequest.java new file mode 100644 index 000000000..8e6a55f87 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/MobileUpdateRequest.java @@ -0,0 +1,22 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @Author wxp + * @Date 2023/5/31 11:01 + * @Version 1.0 + */ +@Data +@ApiModel +public class MobileUpdateRequest { + + @NotBlank(message = "手机号code不能为空") + @ApiModelProperty("手机号code") + private String mobileCode; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/ModifyInterviewerRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/ModifyInterviewerRequest.java new file mode 100644 index 000000000..c66057553 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/ModifyInterviewerRequest.java @@ -0,0 +1,30 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author zhangchenbiao + * @FileName: AppointmentTimeRequest + * @Description:预约时间 + * @date 2024-03-19 9:57 + */ +@Data +public class ModifyInterviewerRequest { + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("面试类型:0面谈,1一审,2二审") + private Integer interviewType; + + @NotNull(message = "面审官不能为空") + @ApiModelProperty("面审官") + private String interviewerUserId; + + @ApiModelProperty(value = "当前操作人", hidden = true) + private String operatorUserId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/NewStoreOpeningRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/NewStoreOpeningRequest.java new file mode 100644 index 000000000..73b8eb9fd --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/NewStoreOpeningRequest.java @@ -0,0 +1,30 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @author byd + */ +@Data +public class NewStoreOpeningRequest { + /** + * line_info.id + */ + @ApiModelProperty("店铺id") + private Long shopId; + + /** + * 待办事项 + */ + @ApiModelProperty("待办事项") + private String todoItem; + + /** + * 完成时间 + */ + @ApiModelProperty("完成时间") + private Date completionTime; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/NewStoreRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/NewStoreRequest.java new file mode 100644 index 000000000..b3e8317a7 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/NewStoreRequest.java @@ -0,0 +1,266 @@ +package com.cool.store.request; + + +import com.cool.store.entity.LineInfoDO; +import com.cool.store.entity.PointInfoDO; +import com.cool.store.entity.RegionDO; +import lombok.Data; + +import java.util.List; + +@Data +public class NewStoreRequest { + + /** + * 选址确认书(加盟商签字版)上传文件 + */ + private List accessory_address; + /** + * 流程发起人工号 + */ + private String apply_user; + /** + * 所在市 + */ + private String city1; + /** + * 所属大区的ehr编码 + */ + private String csgs; + /** + * 次商圈名称 10-社区型;20-商业街边型;30-学校型;40-CBD/办公型;60-医院型;70-菜场型 + */ + private String csqmc; + /** + * 督导 + */ + private String ddxm; + /** + * 店铺租赁合同 上传文件 + */ + private List dpzlht; + /** + * 营业结束时间 + */ + private String end_time; + /** + * 预估营业额 + */ + private Integer forecast_turnover; + /** + * 门店邀约人 + */ + private String invite_people; + /** + * 加盟商编号 + */ + private String jms_id; + /** + * 加盟商客户登记表(完整截图)上传图片 + */ + private List jmskhdjbwzjt; + /** + * 加盟商类型 + * 0-新加盟商开单店;1-老加盟商开单店;2-新加盟商开新区域单店;3-新加盟商开老区域单店;4-老加盟商开新区域单店;5-老加盟商开老区域单店;6-直营门店;7-同异业转化;8-老加盟商迁址开新店 + */ + private Integer join_channel; + /** + * 竞争对手名称 + */ + private String jzdsmc; + /** + * 酷店掌业务id + */ + private String kdzBusinessId; + /** + * 客流量指数名称 + */ + private String kllzsmc; + /** + * 房东姓名 + */ + private String landlord_name; + /** + * 房东联系方式 + */ + private String landlord_tel; + /** + * 门店选址人工号 + */ + private String location_people; + /** + * 门店月租金 + */ + private Integer mdyzj; + /** + * 招商工号 + */ + private String merchant_people; + /** + * 门店名称 + */ + private String name1; + /** + * 所在省 + */ + private String regio; + /** + * 预约量房日期yyyy-MM-dd + */ + private String reservation_date; + /** + * 合同交房日期yyyy-MM-dd + */ + private String room_date; + /** + * 上传建店须知 上传文件 + */ + private List scjdxz; + /** + * 签约日期yyyy-MM-dd + */ + private String signing_date; + /** + * 商圈门店类型 + */ + private String sqmdlx; + /** + * 申请日期 + */ + private String sqrq; + /** + * 大区 + */ + private String ssdq; + /** + * 小区 + */ + private String ssxq; + /** + * 战区 + */ + private String sszq; + /** + * 营业起始时间 + */ + private String start_time; + /** + * 此店保证金/元 + */ + private Integer store_bzj; + /** + * 此店加盟费/元 + */ + private Integer store_jmf; + /** + * 享受加盟费和保证金优惠原因 + */ + private String store_reason; + /** + * 所在街道 + */ + private String street; + /** + * 流程标题:SAP-新店开业申请-{申请人姓名}-{申请日期yyyy-MM-dd} + */ + private String title; + /** + * 次商圈类型 10-社区型;20-商业街边型;30-学校型;40-CBD/办公型;60-医院型;70-菜场型 + */ + private Integer zcsqlx; + /** + * 大区名称 + */ + private String zdqms; + /** + * 是否货款控制:默认=Y(Y-控制) + */ + private String zhkkz; + /** + * 加盟商编码 + */ + private String zjmsbm; + /** + * 加盟商电话 + */ + private String zmddh; + /** + * 门店经营者代码:10-加盟商 20-店长 + */ + private Integer zmdjyz; + /** + * 门店经营者:10-加盟商 20-店长 + */ + private String zmdjyz_name; + /** + * 门店性质代码:默认=20 + */ + private Integer zmdxz; + /** + * 门店性质:默认=加盟 + */ + private String zmdxz_name; + /** + * 营业状态:默认值=10(10-营业) + */ + private Integer zmdzt; + /** + * 100米周末日均客流量指数 + */ + private Integer zmrjkllzs1; + /** + * 品牌使用费费率 + */ + private Double zppsyfy; + /** + * 所在区 + */ + private String zq; + /** + * 主商圈名称 10-社区型;20-商业街边型;30-学校型;40-CBD/办公型;60-医院型;70-菜场型 + */ + private String zsqmc; + /** + * 所属公司:默认值=1060(1060-鲜丰水果股份) + */ + private String zssgs; + /** + * 业务类型:默认=Z1 + */ + private String ztype; + /** + * 周围500米内二手房均价(元) + */ + private Integer zwesfj; + /** + * 小区名称 + */ + private String zxqms; + /** + * 主要竞争品牌 + */ + private String zxszyjzds; + /** + * 详细地址(路门牌号) + */ + private String zxxdz; + /** + * 线下主要竞争对手 10-品牌水果店;20-夫妻水果店;30-菜场店;40-大商超;50-生鲜店;60-无 + */ + private Integer zxxzyjzds; + /** + * 门店编码 + */ + private String zymdbm; + /** + * 战区名称 + */ + private String zzqms; + /** + * 主商圈类型 10-社区型;20-商业街边型;30-学校型;40-CBD/办公型;60-医院型;70-菜场型 + */ + private Integer zzsqlx; + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/OpenAcceptanceRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/OpenAcceptanceRequest.java new file mode 100644 index 000000000..bc1dcfa7b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/OpenAcceptanceRequest.java @@ -0,0 +1,36 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * @author byd + */ +@Data +@ApiModel +public class OpenAcceptanceRequest extends PageBasicInfo { + + @ApiModelProperty("门店名称") + private String storeName; + + @ApiModelProperty("区域") + private Long regionId; + + @ApiModelProperty("验收状态 0:未验收 1:已验收") + private Integer acceptanceStatus; + + @ApiModelProperty("计划开业时间-开始") + private Long planOpenTimeBegin; + + @ApiModelProperty("计划开业时间-结束") + private Long planOpenTimeEnd; + + @ApiModelProperty("招商经理") + private String investmentManager; + + @ApiModelProperty("督导") + private String supervisorUserId; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/OpenAreaRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/OpenAreaRequest.java new file mode 100644 index 000000000..3d748c4d4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/OpenAreaRequest.java @@ -0,0 +1,31 @@ +package com.cool.store.request; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2023/5/31 14:27 + * @Version 1.0 + */ +@Data +@ApiModel +public class OpenAreaRequest { + + @ApiModelProperty("开发区域ID集合") + private List idList; + + @ApiModelProperty("开放区域状态") + private String status; + + @ApiModelProperty("背景banner") + private String backgroundBanner; + + @ApiModelProperty("详细Banner") + private String detailBanner; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/OpeningOperationPlanAuditRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/OpeningOperationPlanAuditRequest.java new file mode 100644 index 000000000..b8604f663 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/OpeningOperationPlanAuditRequest.java @@ -0,0 +1,48 @@ +package com.cool.store.request; + +import com.cool.store.entity.ShopAuditInfoDO; +import com.cool.store.enums.AuditResultTypeEnum; +import com.cool.store.enums.AuditStatusEnum; +import com.cool.store.enums.AuditTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @Auther: WangShuo + * @Date: 2024/04/22/下午3:52 + * @Version 1.0 + * @注释: + */ +@Data +public class OpeningOperationPlanAuditRequest { + + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("审核结果状态:0.待审核 1. 通过 2. 拒绝") + private Integer resultType; + + @ApiModelProperty("通过原因") + private String passReason; + + @ApiModelProperty("拒绝原因") + private String rejectReason; + + public ShopAuditInfoDO toShopAuditInfoDO() { + ShopAuditInfoDO shopAuditInfoDO = new ShopAuditInfoDO(); + shopAuditInfoDO.setShopId(this.shopId); + shopAuditInfoDO.setAuditType(AuditTypeEnum.OPENING_OPERATION_PLAN.getCode()); + if (this.resultType.equals(AuditStatusEnum.PASS.getCode())) { + shopAuditInfoDO.setResultType(AuditResultTypeEnum.PASS.getCode()); + shopAuditInfoDO.setPassReason(this.passReason); + }else { + shopAuditInfoDO.setResultType(AuditResultTypeEnum.REJECT.getCode()); + shopAuditInfoDO.setRejectReason(this.rejectReason); + } + + shopAuditInfoDO.setCreateTime(new Date()); + return shopAuditInfoDO; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/OpeningOperationPlanRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/OpeningOperationPlanRequest.java new file mode 100644 index 000000000..97b2176a5 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/OpeningOperationPlanRequest.java @@ -0,0 +1,61 @@ +package com.cool.store.request; + +import com.cool.store.entity.OpeningOperationPlanDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; + +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/04/19/下午7:32 + * @Version 1.0 + * @注释: + */ +@Data +public class OpeningOperationPlanRequest { + + + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("0-新增/1-同步") + private Boolean planSource; + + @ApiModelProperty("调研结果") + private String surveyResult; + + @ApiModelProperty("调研结果url") + private String surveyResultUrl; + + @ApiModelProperty("活动主题") + private String activityTheme; + + @ApiModelProperty("活动主题url") + private String activityThemeUrl; + + @ApiModelProperty("筹备人员ids") + private List preparationUserIds; + + @ApiModelProperty("是否完成排车路线0未完成,1完成") + private Byte routeCompleted; + + + + public OpeningOperationPlanDO toOpeningOperationPlanDO() { + OpeningOperationPlanDO openingOperationPlanDO = new OpeningOperationPlanDO(); + openingOperationPlanDO.setShopId(this.shopId); + openingOperationPlanDO.setPlanSource(this.planSource); + openingOperationPlanDO.setSurveyResult(this.surveyResult); + openingOperationPlanDO.setSurveyResultUrl(this.surveyResultUrl); + openingOperationPlanDO.setActivityThemeUrl( this.activityThemeUrl); + if (CollectionUtils.isNotEmpty(this.preparationUserIds)) { + openingOperationPlanDO.setPreparationUserIds(String.join(",", this.preparationUserIds)); + } + openingOperationPlanDO.setActivityTheme(this.activityTheme); + openingOperationPlanDO.setRouteCompleted(this.routeCompleted); + return openingOperationPlanDO; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/OperationAuditRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/OperationAuditRequest.java new file mode 100644 index 000000000..9def73b2c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/OperationAuditRequest.java @@ -0,0 +1,100 @@ +package com.cool.store.request; + +import com.cool.store.entity.PointDetailInfoDO; +import com.cool.store.enums.AuditResultTypeEnum; +import com.cool.store.enums.AuditStatusEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.Date; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: PointAuditRequest + * @Description: + * @date 2024-04-03 14:13 + */ +@Data +public class OperationAuditRequest { + + @NotNull + @ApiModelProperty("铺位id") + private Long pointId; + + @NotNull + @Min(1) + @Max(2) + @ApiModelProperty("1通过,2拒绝") + private Integer auditStatus; + + @NotNull + @ApiModelProperty("签到时间") + private Date signTime; + + @NotNull + @NotBlank + @ApiModelProperty("签到位置") + private String signAddress; + + @NotNull + @NotBlank + @ApiModelProperty("图片") + private String pictureUrl; + + @ApiModelProperty("原因") + private String reason; + + @ApiModelProperty("店长数量") + private Integer shopManagerNum; + + @ApiModelProperty("店长基本工资") + private Integer shopManagerFee; + + @ApiModelProperty("店员数量") + private Integer clerkNum; + + @ApiModelProperty("店员基本工资") + private Integer clerkFee; + + @ApiModelProperty("营运人员签字") + private String operationUserSign; + + public boolean check() { + if(AuditStatusEnum.PASS.getCode().equals(this.auditStatus)){ + if(Objects.isNull(this.shopManagerNum) || Objects.isNull(this.shopManagerFee) || Objects.isNull(this.clerkNum) || Objects.isNull(this.clerkFee)){ + return false; + } + if(StringUtils.isBlank(this.operationUserSign)){ + return false; + } + }else{ + if(StringUtils.isBlank(this.reason)){ + return false; + } + } + return true; + } + + public static PointDetailInfoDO convertDO(Long pointDetailId, OperationAuditRequest request){ + PointDetailInfoDO pointDetailInfo = new PointDetailInfoDO(); + pointDetailInfo.setId(pointDetailId); + pointDetailInfo.setPointId(request.getPointId()); + pointDetailInfo.setShopManagerNum(request.getShopManagerNum()); + pointDetailInfo.setShopManagerFee(request.getShopManagerFee()); + pointDetailInfo.setClerkNum(request.getClerkNum()); + pointDetailInfo.setClerkFee(request.getClerkFee()); + pointDetailInfo.setOperationUserSign(request.getOperationUserSign()); + pointDetailInfo.setOperationUserSignTime(new Date()); + if(Objects.nonNull(request.getShopManagerNum()) && Objects.nonNull(request.getShopManagerFee()) && Objects.nonNull(request.getClerkNum()) && Objects.nonNull(request.getClerkFee())){ + pointDetailInfo.setStaffFee(String.valueOf((request.getShopManagerNum() * request.getShopManagerFee()) + (request.getClerkNum() * request.getClerkFee()))); + } + return pointDetailInfo; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/PartnerOpenNewShopPageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/PartnerOpenNewShopPageRequest.java new file mode 100644 index 000000000..0271f9f59 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/PartnerOpenNewShopPageRequest.java @@ -0,0 +1,30 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/4/1 11:21 + * @Version 1.0 + */ +@Data +public class PartnerOpenNewShopPageRequest extends PageBasicInfo { + + @ApiModelProperty("加盟上姓名或者手机号") + private String keyword; + + @ApiModelProperty("意向区域ID") + private Long wantShopAreaId; + + @ApiModelProperty("审核状态 0待审核 1通过 2不通过") + private Integer auditResult; + + @ApiModelProperty(value = "招商经理", hidden = true) + private String investmentManager; + + @ApiModelProperty(value = "区域路径", hidden = true) + private String areaPath; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/PartnerRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/PartnerRequest.java new file mode 100644 index 000000000..050ee037e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/PartnerRequest.java @@ -0,0 +1,29 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/4/1 11:21 + * @Version 1.0 + */ +@Data +public class PartnerRequest extends PageBasicInfo { + + + @ApiModelProperty("加密状态 1-蓄水池 2-正式") + private Integer joinStatus; + @ApiModelProperty("加盟上姓名或者手机号") + private String keyword; + @ApiModelProperty("线索子阶段") + private Integer workflowSubStage; + @ApiModelProperty("意向区域ID") + private Long wantShopAreaId; + @ApiModelProperty("招商经理-1 扩展经理-2") + private Integer queryType; + @ApiModelProperty("招商经理ID") + private String queryUserId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/PlanListRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/PlanListRequest.java new file mode 100644 index 000000000..3a4bed8b0 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/PlanListRequest.java @@ -0,0 +1,34 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDate; +import java.util.Date; +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/04/24/下午2:06 + * @Version 1.0 + * @注释: + */ +@Data +public class PlanListRequest { + @ApiModelProperty("店铺名称") + private String shopName; + @ApiModelProperty("起始日期") + private Date planStartDate; + @ApiModelProperty("结束日期") + private Date planEndDate; + @ApiModelProperty("选择区域") + private List regionIds; + @ApiModelProperty("审核结果状态:0.待审核 1. 通过 2. 拒绝") + private Integer resultType; + @ApiModelProperty ("页码") + private Integer pageNumber; + @ApiModelProperty ("分页大小") + private Integer pageSize; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/PointAuditRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/PointAuditRequest.java new file mode 100644 index 000000000..598b9662e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/PointAuditRequest.java @@ -0,0 +1,43 @@ +package com.cool.store.request; + +import com.cool.store.enums.AuditStatusEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import java.util.Date; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: PointAuditRequest + * @Description: + * @date 2024-04-03 14:13 + */ +@Data +public class PointAuditRequest { + + @ApiModelProperty("铺位id") + private Long pointId; + + @ApiModelProperty("1通过,2拒绝") + private Integer auditStatus; + + @ApiModelProperty("原因") + private String reason; + + public boolean check(){ + if(Objects.isNull(this.pointId)){ + return false; + } + if(Objects.isNull(this.auditStatus)){ + return false; + } + if(AuditStatusEnum.REJECT.equals(this.auditStatus) && StringUtils.isBlank(this.reason)){ + return false; + } + return true; + } + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/PointIdRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/PointIdRequest.java new file mode 100644 index 000000000..93f46c530 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/PointIdRequest.java @@ -0,0 +1,18 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: PointIdRequest + * @Description: + * @date 2024-04-02 17:19 + */ +@Data +public class PointIdRequest { + + @ApiModelProperty("点位id") + private Long pointId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/PointLinePageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/PointLinePageRequest.java new file mode 100644 index 000000000..75d9bac3b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/PointLinePageRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: PointLinePageRequest + * @Description: + * @date 2024-04-09 10:29 + */ +@Data +public class PointLinePageRequest extends PageBasicInfo { + + @ApiModelProperty(value = "搜索关键字 线索姓名手机号") + private String keyword; + + @ApiModelProperty(value = "拓展经理", hidden = true) + private String developmentManager; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/PointPageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/PointPageRequest.java new file mode 100644 index 000000000..a776ef625 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/PointPageRequest.java @@ -0,0 +1,68 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import com.cool.store.enums.point.PointStatusEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import java.util.ArrayList; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: PointPageRequest + * @Description: + * @date 2024-04-08 10:28 + */ +@Data +public class PointPageRequest extends PageBasicInfo { + + @ApiModelProperty("铺位名称或编号") + private String keyword; + + @ApiModelProperty("选择区域") + private List regionIds; + + @ApiModelProperty("营运人员") + private String operateUserId; + + @ApiModelProperty("开始拓展时间 yyyy-MM-dd HH:mm:ss") + private String developmentStartTime; + + @ApiModelProperty("结束拓展时间 yyyy-MM-dd HH:mm:ss") + private String developmentEndTime; + + @ApiModelProperty(value = "拓展专员", hidden = true) + private String developmentManager; + + @Min(1)@Max(2) + @ApiModelProperty("必传参数:1已入库 2暂未入库") + private Integer storageStatus; + + @ApiModelProperty("1.采集中、2.已评估、3.待审核、5.已审核、6.已签约、7.已失效") + private Integer pointStatus; + + @ApiModelProperty("创建时间-开始") + private String createStartTime; + + @ApiModelProperty("创建时间-结束") + private String createEndTime; + + @ApiModelProperty(value = "铺位状态列表", hidden = true) + private List pointStatusList; + + public List getPointStatusList() { + List pointStatusList = new ArrayList<>(); + if (pointStatus != null) { + pointStatusList.add(pointStatus); + } + if(PointStatusEnum.POINT_STATUS_3.getCode().equals(pointStatus)){ + pointStatusList.add(PointStatusEnum.POINT_STATUS_4.getCode()); + } + return pointStatusList; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/PointRecommendLineRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/PointRecommendLineRequest.java new file mode 100644 index 000000000..e4ec2b377 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/PointRecommendLineRequest.java @@ -0,0 +1,46 @@ +package com.cool.store.request; + +import com.cool.store.entity.PointRecommendDO; +import com.cool.store.enums.point.PointRecommendStatusEnum; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: RecommendPointRequest + * @Description: + * @date 2024-04-08 16:50 + */ +@Data +public class PointRecommendLineRequest { + + @ApiModelProperty("线索ids") + private List lineIds; + + @ApiModelProperty("铺位id") + private Long pointId; + + @ApiModelProperty(value = "拓展经理", hidden = true) + private String developmentManager; + + public List convertList(){ + if(Objects.isNull(this.lineIds) || CollectionUtils.isEmpty(this.lineIds) || Objects.isNull(pointId)){ + return Lists.newArrayList(); + } + return this.lineIds.stream().map(lineId -> { + PointRecommendDO pointRecommendDO = new PointRecommendDO(); + pointRecommendDO.setLineId(lineId); + pointRecommendDO.setDevelopmentManager(this.developmentManager); + pointRecommendDO.setPointId(pointId); + pointRecommendDO.setStatus(PointRecommendStatusEnum.POINT_RECOMMEND_STATUS_1.getCode()); + return pointRecommendDO; + }).collect(Collectors.toList()); + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/PointTodoPageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/PointTodoPageRequest.java new file mode 100644 index 000000000..9ddb04897 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/PointTodoPageRequest.java @@ -0,0 +1,19 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: TodoPageRequest + * @Description: + * @date 2024-04-11 14:30 + */ +@Data +public class PointTodoPageRequest extends PageBasicInfo { + + @ApiModelProperty(value = "扩展经理", hidden = true) + private String developmentManager; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/PreparationRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/PreparationRequest.java new file mode 100644 index 000000000..c163c2abc --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/PreparationRequest.java @@ -0,0 +1,47 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/26 15:15 + * @Version 1.0 + */ +@Data +public class PreparationRequest extends PageBasicInfo { + + @ApiModelProperty("选择区域") + private List regionIds; + + @ApiModelProperty("门店名称") + private String shopName; + + @ApiModelProperty("加盟商名称与手机号") + private String keyword; + + @ApiModelProperty("计划开业开始时间") + private String planOpenStartTime; + + @ApiModelProperty("计划开业结束时间") + private String planOpenEndTime; + + @ApiModelProperty("招商经理Id") + private String investmentUserId; + + @ApiModelProperty("督导ID") + private String supervisorUserId; + + @ApiModelProperty(value = "当前登录用户", hidden = true) + private String curUserId; + @ApiModelProperty(value = "管辖区域",hidden = true) + private List authRegionIds; + + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/PublicLineListRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/PublicLineListRequest.java new file mode 100644 index 000000000..8cfa92ea5 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/PublicLineListRequest.java @@ -0,0 +1,35 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/3/29 15:09 + * @Version 1.0 + */ +@Data +public class PublicLineListRequest extends PageBasicInfo { + + @ApiModelProperty("线索姓名") + private String userName; + @ApiModelProperty("线索手机号") + private String mobile; + @ApiModelProperty("关键字") + private String keyword; + @ApiModelProperty("线索创建时间_开始") + private String createTimeStart; + @ApiModelProperty("线索创建时间_结束") + private String createTimeEnd; + @ApiModelProperty("线索来源") + private List lineSource; + @ApiModelProperty("上一次招商经理ID") + private String lastInvestmentManagerUserId; + @ApiModelProperty("上一次招商经理ID") + private String lastDevelopmentManagerUserId; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/RecommendPointPageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/RecommendPointPageRequest.java new file mode 100644 index 000000000..434437153 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/RecommendPointPageRequest.java @@ -0,0 +1,40 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import com.cool.store.enums.point.PointStatusEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: RecommendPointPageRequest + * @Description: + * @date 2024-04-08 16:43 + */ +@Data +public class RecommendPointPageRequest extends PageBasicInfo { + + @ApiModelProperty("1.采集中、2.已评估、3.待审核、5.已审核、6.已签约、7.已失效") + private Integer pointStatus; + + @ApiModelProperty(value = "拓展专员", hidden = true) + private String developmentManager; + + @ApiModelProperty(value = "铺位状态列表", hidden = true) + private List pointStatusList; + + public List getPointStatusList() { + List pointStatusList = new ArrayList<>(); + if (pointStatus != null) { + pointStatusList.add(pointStatus); + } + if(PointStatusEnum.POINT_STATUS_3.getCode().equals(pointStatus)){ + pointStatusList.add(PointStatusEnum.POINT_STATUS_4.getCode()); + } + return pointStatusList; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/RegionAreaConfigAddRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/RegionAreaConfigAddRequest.java new file mode 100644 index 000000000..b39533b1a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/RegionAreaConfigAddRequest.java @@ -0,0 +1,26 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + + +/** + * @author wxp + */ +@ApiModel(value = "区域配置") +@Data +public class RegionAreaConfigAddRequest { + + @ApiModelProperty("区域id") + @NotNull(message = "区域id不能为空") + private Long regionId; + + @ApiModelProperty("省市集合") + private List areaIdList; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/RejectPointRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/RejectPointRequest.java new file mode 100644 index 000000000..9a51a0b13 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/RejectPointRequest.java @@ -0,0 +1,31 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + + +/** + * @author zhangchenbiao + * @FileName: SelectPointRequest + * @Description: + * @date 2024-04-12 15:08 + */ +@Data +public class RejectPointRequest { + + @NotNull + @ApiModelProperty("铺位id") + private Long pointId; + + @ApiModelProperty("拒绝原因") + private String reason; + + @ApiModelProperty(value = "当前线索id", hidden = true) + private Long lineId; + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/SeeAcceptanceRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/SeeAcceptanceRequest.java new file mode 100644 index 000000000..046e845c3 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/SeeAcceptanceRequest.java @@ -0,0 +1,22 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Auther: WangShuo + * @Date: 2024/05/17/下午6:15 + * @Version 1.0 + * @注释: + */ +@Data +public class SeeAcceptanceRequest { + private Long shopId; + @ApiModelProperty("'结果类型 0通过,1拒绝',") + @NotNull(message = "审核结果不能为空") + private Integer resultType; + @ApiModelProperty("原因") + private String reason; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/SeeAccetanceListRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/SeeAccetanceListRequest.java new file mode 100644 index 000000000..e2c23bd76 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/SeeAccetanceListRequest.java @@ -0,0 +1,18 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Auther: WangShuo + * @Date: 2024/05/17/下午8:32 + * @Version 1.0 + * @注释: + */ +@Data +public class SeeAccetanceListRequest { + @ApiModelProperty("门店名称或编码") + private String request; + private Integer pageNum; + private Integer pageSize; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/SelectPointRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/SelectPointRequest.java new file mode 100644 index 000000000..def599845 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/SelectPointRequest.java @@ -0,0 +1,34 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + + +/** + * @author zhangchenbiao + * @FileName: SelectPointRequest + * @Description: + * @date 2024-04-12 15:08 + */ +@Data +public class SelectPointRequest { + + @NotNull + @ApiModelProperty("店铺id") + private Long shopId; + + @NotNull + @ApiModelProperty("铺位id") + private Long pointId; + + @ApiModelProperty(value = "当前线索id", hidden = true) + private Long lineId; + + @NotBlank + @ApiModelProperty("加盟商签字") + private String lineSign; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/ShopAcceptanceRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/ShopAcceptanceRequest.java new file mode 100644 index 000000000..98a263ebe --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/ShopAcceptanceRequest.java @@ -0,0 +1,28 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * @author byd + */ +@Data +public class ShopAcceptanceRequest { + + + /** + * 店铺id + */ + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("开业时间") + private Date planOpenTime; + + @ApiModelProperty("店铺子阶段验收结果") + private List shopStageAcceptanceList; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/ShopIdRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/ShopIdRequest.java new file mode 100644 index 000000000..7f1b1c93d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/ShopIdRequest.java @@ -0,0 +1,15 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author byd + * @date 2024-04-24 16:40 + */ +@Data +public class ShopIdRequest { + + @ApiModelProperty("shopId") + private Long shopId; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/ShopStageAcceptanceRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/ShopStageAcceptanceRequest.java new file mode 100644 index 000000000..c993c723d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/ShopStageAcceptanceRequest.java @@ -0,0 +1,30 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author byd + */ +@Data +public class ShopStageAcceptanceRequest { + + + + /** + * 店铺阶段 + */ + @ApiModelProperty("店铺子阶段") + private Integer shopSubStage; + + + @ApiModelProperty("是否合格 0:不合格 1:合格") + private Boolean result; + + /** + * 店铺id + */ + @ApiModelProperty("店铺id") + private Long shopId; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/SubmitLicenseRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/SubmitLicenseRequest.java new file mode 100644 index 000000000..8aab2848b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/SubmitLicenseRequest.java @@ -0,0 +1,120 @@ +package com.cool.store.request; + +import com.cool.store.entity.LicenseTransactDO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class SubmitLicenseRequest { + + @ApiModelProperty("主键id") + private Long id; + + private Long shopId; + + @ApiModelProperty("营业执照拍照上传") + private String licenseUrl; + + @ApiModelProperty("营业执照名称") + private String licenseName; + + @ApiModelProperty("营业执照类型 0.个体工商户 1.有限责任公司 2.独资企业 3.自然人经营") + private Integer licenseType; + + @ApiModelProperty("营业执照上的法人") + private String licenseLegalPerson; + + @ApiModelProperty("统一社会信用代码") + private String socialCreditCode; + + @ApiModelProperty("发证日期") + private Date issueTime; + + @ApiModelProperty("营业执照经营场所") + private String licenseAddress; + + @ApiModelProperty("有效期类型 0:长期有效(不用传validity) 1:效期内") + private Integer validityType; + + @ApiModelProperty("有效期") + private Date validity; + + + @ApiModelProperty("法人双手持身份证正面+营业执照") + private String idCardAndLicense1; + + @ApiModelProperty("法人双手持身份证反面+营业执照") + private String idCardAndLicense2; + + @ApiModelProperty("食品经营许可证图片上传") + private String foodLicenseUrl; + + @ApiModelProperty("经营者") + private String operator; + + @ApiModelProperty("食品经营许可证上的法人") + private String foodLicenseLegalPerson; + + @ApiModelProperty("食营经营场所") + private String businessPremises; + + @ApiModelProperty("主体业态") + private String mainBusiness; + + @ApiModelProperty("经营项目") + private String businessProject; + + @ApiModelProperty("许可证编号") + private String foodLicenseCode; + + @ApiModelProperty("许可证开始时间") + private Date foodLicenseStartTime; + + @ApiModelProperty("许可证截止时间") + private Date foodLicenseEndTime; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("备注图片") + private String remarkUrl; + + @ApiModelProperty("0:保存 1:提交到待审核 2:未通过 3:已通过 ") + private Integer submitStatus; + + + public LicenseTransactDO toLicenseTransactDO() { + LicenseTransactDO licenseTransactDO = new LicenseTransactDO(); + licenseTransactDO.setLicenseType(this.licenseType); + licenseTransactDO.setLicenseLegalPerson(this.licenseLegalPerson); + licenseTransactDO.setLicenseAddress(this.licenseAddress); + licenseTransactDO.setIssueTime(this.issueTime); + licenseTransactDO.setMainBusiness(this.mainBusiness); + licenseTransactDO.setOperator(this.operator); + licenseTransactDO.setFoodLicenseLegalPerson(this.foodLicenseLegalPerson); + licenseTransactDO.setBusinessProject(this.businessProject); + licenseTransactDO.setRemark(this.remark); + licenseTransactDO.setRemarkUrl(this.remarkUrl); + licenseTransactDO.setShopId(this.shopId); + licenseTransactDO.setBusinessLicense(this.licenseName); + licenseTransactDO.setCreditCode(this.socialCreditCode); + licenseTransactDO.setCreditUrl(this.licenseUrl); + if (this.validityType == 0){ + licenseTransactDO.setValidity(null); + }else if (this.validityType == 1){ + licenseTransactDO.setValidity(this.validity); + } + licenseTransactDO.setIdCardPositiveCreditUrl(this.idCardAndLicense1); + licenseTransactDO.setIdCardNegativeCreditUrl(this.idCardAndLicense2); + licenseTransactDO.setFoodBusinessLicenseCode(this.foodLicenseCode); + licenseTransactDO.setFoodLicenseAddress(this.businessPremises); + licenseTransactDO.setFoodBusinessStartTime(this.foodLicenseStartTime); + licenseTransactDO.setFoodBusinessEndTime(this.foodLicenseEndTime); + licenseTransactDO.setFoodBusinessLicenseUrl(this.foodLicenseUrl); + licenseTransactDO.setSubmitStatus(this.submitStatus); + return licenseTransactDO; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/SubmitOpenNewShopRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/SubmitOpenNewShopRequest.java new file mode 100644 index 000000000..75957bd37 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/SubmitOpenNewShopRequest.java @@ -0,0 +1,41 @@ +package com.cool.store.request; + +import com.cool.store.entity.OpenNewShopRecordDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +/** + * @author zhangchenbiao + * @FileName: SubmitOpenNewShopRequest + * @Description: + * @date 2024-05-10 10:17 + */ +@Data +public class SubmitOpenNewShopRequest { + + @ApiModelProperty(value = "线索id", required = true) + private Long lineId; + + @NotNull + @Min(1)@Max(10) + @ApiModelProperty("新开意向店铺数量") + private Integer newWantShopNum; + + @Max(99999) + @ApiModelProperty("现有资金") + private Integer fund; + + public OpenNewShopRecordDO convertDO(){ + OpenNewShopRecordDO result = new OpenNewShopRecordDO(); + result.setLineId(this.lineId); + result.setNewWantShopNum(this.newWantShopNum); + result.setFund(this.fund); + return result; + } + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/SubmitPointAuditRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/SubmitPointAuditRequest.java new file mode 100644 index 000000000..e50acd3d1 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/SubmitPointAuditRequest.java @@ -0,0 +1,32 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * @author zhangchenbiao + * @FileName: SubmitPointAuditRequest + * @Description: + * @date 2024-04-03 14:03 + */ +@Data +public class SubmitPointAuditRequest { + + @NotNull + @ApiModelProperty("点位id") + private Long pointId; + + @NotNull + @NotBlank + @ApiModelProperty("营运人员") + private String operateUserId; + + @NotNull + @NotBlank + @ApiModelProperty("拓展专员签名") + private String developmentManagerSign; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/SysBuildResultRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/SysBuildResultRequest.java new file mode 100644 index 000000000..3153c4939 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/SysBuildResultRequest.java @@ -0,0 +1,16 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SysBuildResultRequest { + @ApiModelProperty("kdz业务id唯一标识") + private Long kdzBusinessId; + @ApiModelProperty("审核结果 1:成功 0:失败") + private Integer auditResult; + @ApiModelProperty("通过/失败原因") + private String cause = ""; + @ApiModelProperty("门店编码") + private String storeNum; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/SysStoreAppRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/SysStoreAppRequest.java new file mode 100644 index 000000000..72d59c8ad --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/SysStoreAppRequest.java @@ -0,0 +1,139 @@ +package com.cool.store.request; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class SysStoreAppRequest { + + @ApiModelProperty("主键id") + private Long id; + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("筹建门店id") + private Long shopId; + + private FranInfo franInfo; + + private StoreDetail storeDetail; + + private SupervisorDetail supervisorDetail; + + + @Data + public static class FranInfo { + @ApiModelProperty("加盟商类型" + + "0-新加盟商开单店;1-老加盟商开单店;" + + "2-新加盟商开新区域单店;" + + "3-新加盟商开老区域单店;" + + "4-老加盟商开新区域单店;" + + "5-老加盟商开老区域单店;" + + "6-直营门店;" + + "7-同异业转化;" + + "8-老加盟商迁址开新店") + private Integer franchiseeType; + + @ApiModelProperty("门店邀约人id") + private String inviteUserId; + + @ApiModelProperty("门店邀约人姓名") + private String storeInviteesName; + } + + @Data + public static class StoreDetail{ + @ApiModelProperty("门店性质 20:加盟 10:直营") + private Integer storeNature; + @ApiModelProperty("门店经营者") + private Integer storeOperator; + @ApiModelProperty("门店名称(默认带入一个门店名称,但是可修改)") + private String storeName; + @ApiModelProperty("大区描述") + private String bigDesc; + @ApiModelProperty("大区名称") + private String bigName; + @ApiModelProperty("大区code") + private String bigCode; + + @ApiModelProperty("战区描述") + private String fightDesc; + @ApiModelProperty("战区编码") + private String fightCode; + @ApiModelProperty("战区名称") + private String fightName; + + @ApiModelProperty("小区code") + private String smallCode; + @ApiModelProperty("小区描述") + private String smallDesc; + @ApiModelProperty("小区名称") + private String smallName; + + @ApiModelProperty("主商圈类型 10-社区型;20-商业街边型;30-学校型;40-CBD/办公型;60-医院型;70-菜场型") + private Integer mainBusinessType; + @ApiModelProperty("次商圈类型 10-社区型;20-商业街边型;30-学校型;40-CBD/办公型;60-医院型;70-菜场型") + private Integer subBusinessType; + @ApiModelProperty("线下主要竞争对手 10-品牌水果店;20-夫妻水果店;30-菜场店;40-大商超;50-生鲜店;60-无") + private Integer offlineCompetitor; + @ApiModelProperty("线下主要竞争品牌") + private String offlineCompetingBrand; + @ApiModelProperty("周边500米内二手房均价") + private Integer averagePriceSh; + @ApiModelProperty("100米周末日均客流量指数 0:1000以下 1:1000-1万 2:1万以上") + private Integer averageDailyRs; + @ApiModelProperty("商圈门店类型 普通社区店 高档社区店") + private String businessStoreType; + @ApiModelProperty("预估营业额") + private Integer estimatedTurnover; + @ApiModelProperty("签约日期") + private Date signDate; + @ApiModelProperty("房东姓名") + private String landlordName; + @ApiModelProperty("合同交房日期") + private Date contractDeliveryDate; + @ApiModelProperty("房东联系电话") + private String landlordMobile; + @ApiModelProperty("预约量房日期") + private Date reservation; + @ApiModelProperty("门店月租金") + private Integer storeRent; + @ApiModelProperty("此店加盟费") + private Integer storeFranchiseFee; + @ApiModelProperty("此店保证金") + private Integer storeSecurityDeposit; + @ApiModelProperty("享受加盟费和保证金优惠原因") + private String reasons; + @ApiModelProperty("品牌使用费率") + private String usageRate; + + @ApiModelProperty("详细地址") + private String detailAddress; + + } + + @Data + public static class SupervisorDetail{ + + @ApiModelProperty("督导姓名") + private String supervisorName; + + @ApiModelProperty("督导工号") + private String supervisorId; + + @ApiModelProperty("大区总姓名") + private String regioGeneral; + + @ApiModelProperty("大区总工号") + private String regioGeneralId; + + } + +} + + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/TempUserDetailRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/TempUserDetailRequest.java new file mode 100644 index 000000000..603a9d3d8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/TempUserDetailRequest.java @@ -0,0 +1,57 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * 员工详细信息数据接口 + * + * @author byd + */ +@NoArgsConstructor +@Data +public class TempUserDetailRequest { + + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("姓名") + private String name; + + @ApiModelProperty("身份证") + private String idCard; + + @ApiModelProperty("性别 0未选,1男,2女") + private String sex; + + @ApiModelProperty("年龄") + private Integer age; + + @ApiModelProperty("学历 0-小学 1-初中 2-高中 3-中专 4-大专 5-本科 6-硕士 7-硕士以上") + private Integer highestDegree; + + @ApiModelProperty("手机号(OA侧绑定的手机号)") + private String phone; + + + @ApiModelProperty("岗位Id") + private Long jobId; + + + @ApiModelProperty("身份证-人像面") + private String idNumPhoto; + + @ApiModelProperty("身份证-国徽面") + private String emblemPhoto; + + + @ApiModelProperty("健康证") + private String healthCertificate; + + @ApiModelProperty("登记时间") + private Date registerTime; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/ThreeAcceptanceCheckRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/ThreeAcceptanceCheckRequest.java new file mode 100644 index 000000000..b86befb47 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/ThreeAcceptanceCheckRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request; + +import com.cool.store.dto.decoration.AssessmentDataDTO; +import com.cool.store.entity.AssessmentDataDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/05/06/下午3:17 + * @Version 1.0 + * @注释: + */ +@Data +public class ThreeAcceptanceCheckRequest { + private Long shopId; + @ApiModelProperty("检查项") + private List assessmentDataDTOS; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/ThreeAcceptanceRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/ThreeAcceptanceRequest.java new file mode 100644 index 000000000..30bd292c5 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/ThreeAcceptanceRequest.java @@ -0,0 +1,25 @@ +package com.cool.store.request; + +import com.cool.store.dto.decoration.ThreeAcceptanceDTO; +import com.cool.store.entity.AssessmentDataDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/04/29/下午11:35 + * @Version 1.0 + * @注释:三方验收 + */ +@Data +public class ThreeAcceptanceRequest { + private Long shopId; + @ApiModelProperty("工程部验收") + private ThreeAcceptanceDTO engineeringAcceptance; + @ApiModelProperty("营运部验收") + private ThreeAcceptanceDTO operationsAcceptance; + @ApiModelProperty("加盟商验收") + private ThreeAcceptanceDTO partnerAcceptance; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/TrainingExperienceChangeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/TrainingExperienceChangeRequest.java new file mode 100644 index 000000000..b220ef79d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/TrainingExperienceChangeRequest.java @@ -0,0 +1,16 @@ +package com.cool.store.request; + +import com.cool.store.enums.ExperienceStatusEnum; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiParam; +import lombok.Data; + +@Data +public class TrainingExperienceChangeRequest { + @ApiModelProperty("实训体验状态 DONE:完成 ABANDON:放弃") + private ExperienceStatusEnum statusEnum; + @ApiModelProperty("线索id") + private Long lineId; + @ApiParam(value = "放弃原因,状态为ABANDON才填写") + private String abandonCause; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/TrainingExperienceDistributionRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/TrainingExperienceDistributionRequest.java new file mode 100644 index 000000000..a721537f6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/TrainingExperienceDistributionRequest.java @@ -0,0 +1,40 @@ +package com.cool.store.request; + +import com.cool.store.entity.LeaseBaseInfoDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.Date; + +@Data +public class TrainingExperienceDistributionRequest { + + @ApiModelProperty("线索信息表-线索id") + private Long lineId; + @ApiModelProperty("用户信息表partnerId") + private String partnerId; + @ApiModelProperty("体验门店id") + @NotNull(message = "门店id为空") + private String storeId; + @ApiModelProperty("门店名") + @NotNull(message = "门店名为空") + private String storeName; + @ApiModelProperty("开始体验时间") + private Date experienceStartTime; + @ApiModelProperty("结束体验时间") + private Date experienceEndTime; + + + public LeaseBaseInfoDO toLeaseBaseInfoDO() { + LeaseBaseInfoDO leaseBaseInfoDO = new LeaseBaseInfoDO(); + leaseBaseInfoDO.setLineId(this.lineId); + leaseBaseInfoDO.setStoreName(this.storeName); + leaseBaseInfoDO.setStoreId(this.storeId); + leaseBaseInfoDO.setExperienceStartTime(this.experienceStartTime); + leaseBaseInfoDO.setExperienceEndTime(this.experienceEndTime); + leaseBaseInfoDO.setPartnerId(this.partnerId); + return leaseBaseInfoDO; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/TurnDevelopmentManagerRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/TurnDevelopmentManagerRequest.java new file mode 100644 index 000000000..ff0fa1291 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/TurnDevelopmentManagerRequest.java @@ -0,0 +1,25 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author zhangchenbiao + * @FileName: TurnDevelopmentManagerRequest + * @Description:转让招商经理 + * @date 2024-04-07 14:34 + */ +@Data +public class TurnDevelopmentManagerRequest { + + @NotNull + @ApiModelProperty("铺位id") + private Long pointId; + + @NotNull + @ApiModelProperty("拓展经理") + private String developmentManager; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/TurnLineRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/TurnLineRequest.java new file mode 100644 index 000000000..4079e2a5d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/TurnLineRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: TurnLineRequest + * @Description: + * @date 2024-04-08 17:09 + */ +@Data +public class TurnLineRequest { + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("新的选址人员") + private String developmentManager; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/UpdatePointDetailRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/UpdatePointDetailRequest.java new file mode 100644 index 000000000..be1400a2c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/UpdatePointDetailRequest.java @@ -0,0 +1,106 @@ +package com.cool.store.request; + +import com.cool.store.entity.PointDetailInfoDO; +import com.cool.store.entity.PointInfoDO; +import com.cool.store.utils.GeoMapUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import javax.validation.constraints.NotNull; +import java.util.Objects; + +@Data +public class UpdatePointDetailRequest extends AddPointDetailRequest { + + @NotNull + @ApiModelProperty("点位id") + private Long pointId; + + + + public static PointDetailInfoDO convertDO(UpdatePointDetailRequest request) { + PointDetailInfoDO result = new PointDetailInfoDO(); + result.setPointId(request.getPointId()); + result.setBusinessStatus(request.getBusinessStatus()); + result.setNineFlowRate(request.getNineFlowRate()); + result.setTenFlowRate(request.getTenFlowRate()); + result.setEighteenFlowRate(request.getEighteenFlowRate()); + result.setNineteenFlowRate(request.getNineteenFlowRate()); + result.setPointDirection(request.getPointDirection()); + result.setSiteConditions(request.getSiteConditions()); + result.setStoreWidth(request.getStoreWidth()); + result.setLandlordUsername(request.getLandlordUsername()); + result.setLandlordMobile(request.getLandlordMobile()); + result.setPaymentMethod(request.getPaymentMethod()); + result.setPropertyStatus(request.getPropertyStatus()); + result.setTransferFee(request.getTransferFee()); + result.setCoverCommunity(request.getCoverCommunity()); + result.setConsumerAbility(request.getConsumerAbility()); + result.setGatherGuestFarmerMarket(request.getGatherGuestFarmerMarket()); + result.setGatherGuestHospital(request.getGatherGuestHospital()); + result.setGatherGuestSchool(request.getGatherGuestSchool()); + result.setStoreFlowTrend(request.getStoreFlowTrend()); + result.setNearRepast(request.getNearRepast()); + result.setNearNeighbor(request.getNearNeighbor()); + result.setNearCompete(request.getNearCompete()); + result.setNearBusinessCondition(request.getNearBusinessCondition()); + result.setIntendPosition(request.getIntendPosition()); + result.setGreenBelt(request.getGreenBelt()); + result.setStoreOutlook(request.getStoreOutlook()); + result.setGuestConvenience(request.getGuestConvenience()); + result.setWantShopSize(request.getWantShopSize()); + result.setCompeteType(request.getCompeteType()); + result.setCompeteBusinessCapacity(request.getCompeteBusinessCapacity()); + result.setInvestAmount(request.getInvestAmount()); + result.setDayTrader(request.getDayTrader()); + result.setProfitRate(request.getProfitRate()); + result.setMonthProfitRate(request.getMonthProfitRate()); + result.setBrandUseRate(request.getBrandUseRate()); + result.setBrandUseFee(request.getBrandUseFee()); + result.setStaffFee(request.getStaffFee()); + result.setBonus(request.getBonus()); + result.setMonthRent(request.getMonthRent()); + result.setOtherFee(request.getOtherFee()); + result.setNetProfit(request.getNetProfit()); + result.setMonthRateReturn(request.getMonthRateReturn()); + result.setRentContract(request.getRentContract()); + result.setPictureObj(request.getPictureObj()); + result.setFlowRateCalculate(request.getFlowRateCalculate()); + return result; + } + + public static PointInfoDO convertPointDO(UpdatePointDetailRequest request) { + PointInfoDO result = new PointInfoDO(); + result.setId(request.getPointId()); + result.setPointName(request.getPointName()); + result.setRegionId(request.getRegionId()); + result.setPointArea(request.getPointArea()); + result.setLatitude(request.getLatitude()); + result.setLongitude(request.getLongitude()); + result.setAddress(request.getAddress()); + result.setProvince(request.getProvince()); + result.setCity(request.getCity()); + result.setDistrict(request.getDistrict()); + result.setTownship(request.getTownship()); + if(StringUtils.isAnyBlank(result.getProvince(),result.getCity(), result.getDistrict(), result.getTownship())){ + GeoMapUtil.AddressInfo addressInfo = GeoMapUtil.reverseGeoCoding(result.getLatitude(), result.getLongitude()); + if(Objects.nonNull(addressInfo)){ + if(StringUtils.isBlank(result.getProvince())){ + result.setProvince(addressInfo.getProvince()); + } + if(StringUtils.isBlank(result.getCity())){ + result.setCity(addressInfo.getCity()); + } + if(StringUtils.isBlank(result.getDistrict())){ + result.setDistrict(addressInfo.getDistrict()); + } + if(StringUtils.isBlank(result.getTownship())){ + result.setTownship(addressInfo.getTownship()); + } + } + } + return result; + } + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/UpdateRentContractRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/UpdateRentContractRequest.java new file mode 100644 index 000000000..942d28fcd --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/UpdateRentContractRequest.java @@ -0,0 +1,134 @@ +package com.cool.store.request; + +import com.alibaba.fastjson.JSONObject; +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; +import com.cool.store.entity.ShopRentInfoDO; +import com.cool.store.enums.RentTypeEnum; +import com.cool.store.enums.ShopRentTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: UploadRentContractRequest + * @Description:上传租赁合同 + * @date 2024-04-16 11:38 + */ +@Data +public class UpdateRentContractRequest { + + @NotNull + @ApiModelProperty("租赁id") + private Long rentId; + + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("铺位id") + private Long pointId; + + @NotNull + @ApiModelProperty("租赁类型 1铺位直租 2自有铺位") + private Integer rentType; + + @ApiModelProperty("签约日期") + private Date signTime; + + @ApiModelProperty("合同开始日期") + private Date contractStartTime; + + @ApiModelProperty("合同截止日期") + private Date contractEndTime; + + @ApiModelProperty("签约年限") + private Integer contractMonths; + + @ApiModelProperty("店铺租金 1固定租金 2非固定租金") + private Integer shopRentType; + + @ApiModelProperty("月租金") + private String monthRent; + + @ApiModelProperty("第一年月租金") + private String firstYearMonthRent; + + @ApiModelProperty("第二年月租金") + private String secondYearMonthRent; + + @ApiModelProperty("第三年月租金") + private String thirdYearMonthRent; + + @Size(max = 3, message = "最多上传三张租赁合同") + @ApiModelProperty("合同图片") + private List contractPic; + + @Size(max = 3, message = "最多上传三张房产证明") + @ApiModelProperty("房产证明") + private List houseCertificatePic; + + @ApiModelProperty(value = "当前线索id", hidden = true) + private Long curLineId; + + public boolean check(){ + if(Objects.isNull(rentId)){ + return false; + } + if(RentTypeEnum.OWN.getCode().equals(rentType)){ + if(CollectionUtils.isEmpty(houseCertificatePic) || houseCertificatePic.size() > 3){ + return false; + } + return true; + } + if(Objects.isNull(signTime) || Objects.isNull(contractStartTime)){ + return false; + } + if(Objects.isNull(contractMonths) || Objects.isNull(shopRentType)){ + return false; + } + if(ShopRentTypeEnum.FIXED.getCode().equals(shopRentType)){ + if(StringUtils.isBlank(monthRent)){ + return false; + } + } + if(ShopRentTypeEnum.NOT_FIXED.getCode().equals(shopRentType)){ + if(StringUtils.isAnyBlank(firstYearMonthRent, secondYearMonthRent, thirdYearMonthRent)){ + return false; + } + } + if(CollectionUtils.isEmpty(contractPic) || contractPic.size() > 3){ + return false; + } + return true; + } + + public static ShopRentInfoDO convertDO(UpdateRentContractRequest param){ + if(Objects.isNull(param)){ + return null; + } + ShopRentInfoDO shopRentInfoDO = new ShopRentInfoDO(); + shopRentInfoDO.setId(param.getRentId()); + shopRentInfoDO.setShopId(param.getShopId()); + shopRentInfoDO.setPointId(param.getPointId()); + shopRentInfoDO.setRentType(param.getRentType()); + shopRentInfoDO.setSignTime(param.getSignTime()); + shopRentInfoDO.setContractStartTime(param.getContractStartTime()); + shopRentInfoDO.setContractEndTime(param.getContractEndTime()); + shopRentInfoDO.setContractMonths(param.getContractMonths()); + shopRentInfoDO.setShopRentType(param.getShopRentType()); + shopRentInfoDO.setMonthRent(param.getMonthRent()); + shopRentInfoDO.setFirstYearMonthRent(param.getFirstYearMonthRent()); + shopRentInfoDO.setSecondYearMonthRent(param.getSecondYearMonthRent()); + shopRentInfoDO.setThirdYearMonthRent(param.getThirdYearMonthRent()); + shopRentInfoDO.setContractPic(JSONObject.toJSONString(param.getContractPic())); + shopRentInfoDO.setHouseCertificatePic(JSONObject.toJSONString(param.getHouseCertificatePic())); + return shopRentInfoDO; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/UpdateWantShopNumRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/UpdateWantShopNumRequest.java new file mode 100644 index 000000000..7338e7492 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/UpdateWantShopNumRequest.java @@ -0,0 +1,28 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +/** + * @author zhangchenbiao + * @FileName: UpdateWantShopNumRequest + * @Description:意向开店数量 + * @date 2024-04-09 11:16 + */ +@Data +public class UpdateWantShopNumRequest { + + @NotNull + @ApiModelProperty("线索id") + private Long lineId; + + @NotNull + @Min(1)@Max(10) + @ApiModelProperty("意向开店数量") + private Integer wantShopNum; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/UserAndPositionRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/UserAndPositionRequest.java new file mode 100644 index 000000000..bba68c9ed --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/UserAndPositionRequest.java @@ -0,0 +1,27 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserAndPositionRequest { + + @ApiModelProperty("类型 职位:position 人员:person") + private String type; + + @ApiModelProperty("type对应的值") + private String value; + + @ApiModelProperty("名称") + private String name; + + + public static UserAndPositionRequest convert(String type, String value, String name) { + UserAndPositionRequest userAndPositionRequest = new UserAndPositionRequest(); + userAndPositionRequest.setType(type); + userAndPositionRequest.setValue(value); + userAndPositionRequest.setName(name); + return userAndPositionRequest; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/XfsgOpenApiRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/XfsgOpenApiRequest.java new file mode 100644 index 000000000..292c834b9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/XfsgOpenApiRequest.java @@ -0,0 +1,13 @@ +package com.cool.store.request; + +import lombok.Data; + +@Data +public class XfsgOpenApiRequest { + + private String sign; + + private Long timestamp; + + private String bizContent; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/xfsgFirstOrderListRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/xfsgFirstOrderListRequest.java new file mode 100644 index 000000000..8d178c82d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/xfsgFirstOrderListRequest.java @@ -0,0 +1,16 @@ +package com.cool.store.request; + +import lombok.Data; + +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/05/08/下午7:48 + * @Version 1.0 + * @注释: + */ +@Data +public class xfsgFirstOrderListRequest { + private List storeCodeList; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java new file mode 100644 index 000000000..233c353f5 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java @@ -0,0 +1,155 @@ +package com.cool.store.response; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class AddSignFranchiseResponse { + + @ApiModelProperty("主键,更新时才存在") + private Long id; + + private Long shopId; + /** + * SignTypeEnum + */ + @ApiModelProperty("签约类型,0.转让 1.新签 2.续签 3.迁址 5.新签同异业转化") + private Integer signType; + + @ApiModelProperty("品牌使用费比例") + private String brandFee; + + @ApiModelProperty("是否有营业执照 0-是 1-否") + private Integer isBusinessLicense; + + @ApiModelProperty("是否有食营 0-是 1-否") + private Integer isFoodLicense; + + @ApiModelProperty("合同开始日期") + private Date contractStartTime; + + @ApiModelProperty("合同结束日期") + private Date contractStartEndTime; + + @ApiModelProperty("用印次数") + private String impressionNum; + + @ApiModelProperty("营业开始时间(日期不重要传分秒即可)") + private Date businessStartHours; + @ApiModelProperty("营业结束时间(日期不重要传分秒即可)") + private Date businessEndHours; + + @ApiModelProperty("非常规营业时间原因") + private String irregularReason; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("是否补签") + private Integer resign; + + @ApiModelProperty("加盟商联系方式") + private String mobile; + + + @ApiModelProperty("门店名称") + private String storeName; + + @ApiModelProperty("门店地址") + private String storeAddress; + + @ApiModelProperty("所属大区") + private String bigRegion; + + @ApiModelProperty("大区分总") + private String bigRegionManager; + + @ApiModelProperty("加盟商类型") + private String franchiseeType; + + @ApiModelProperty("交款人") + private String payName; + + @ApiModelProperty("营业执照名称") + private String licenseName; + + @ApiModelProperty("经营者") + private String operator; + @ApiModelProperty("类型") + private String type; + + @ApiModelProperty("社会信用代码") + private String licenseCode; + + @ApiModelProperty("经营场所") + private String opeAddress; + @ApiModelProperty("加盟商姓名") + private String partnerName; + + @ApiModelProperty("加盟商身份证号") + private String idCardNo; + + @ApiModelProperty("加盟商结算账户") + private String bankCardNo; + @ApiModelProperty("开户行") + private String bank; + @ApiModelProperty("支行") + private String subBank; + + @ApiModelProperty("身份证地址") + private String idCardAddress; + @ApiModelProperty("交款日期") + private Date payDate; + + @ApiModelProperty("每年加盟费") + private String yearFranchiseFee; + @ApiModelProperty("每年加盟费大写") + private String bigYearFranchiseFee; + + @ApiModelProperty("贷款保证金") + private String loanMargin; + + @ApiModelProperty("贷款保证金大写") + private String bigLoanMargin; + + @ApiModelProperty("1开") + private Date firstYearStartTime; + @ApiModelProperty("1结") + private Date firstYearEndTime; + @ApiModelProperty("1费") + private String firstYearFee; + @ApiModelProperty("2开") + private Date secondYearStartTime; + @ApiModelProperty("2结") + private Date secondYearEndTime; + @ApiModelProperty("2费") + private String secondYearFee; + @ApiModelProperty("3开") + private Date thirdYearStartTime; + @ApiModelProperty("3结") + private Date thirdYearEndTime; + @ApiModelProperty("3费") + private String thirdYearFee; + + @ApiModelProperty("履约保证金") + private String performanceBond; + + @ApiModelProperty("履约保证金大写") + private String bigPerformanceBond; + @ApiModelProperty("享受加盟费和保证金优惠原因") + private String reasons; + + @ApiModelProperty("状态 0通过,1拒绝") + private Integer status; + + @ApiModelProperty("原因") + private String result; + + @ApiModelProperty("失败时间") + private Date resultTime; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/AuditDetailResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/AuditDetailResponse.java new file mode 100644 index 000000000..fad87d81a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/AuditDetailResponse.java @@ -0,0 +1,27 @@ +package com.cool.store.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class AuditDetailResponse { + + @ApiModelProperty("视频链接") + private List videoUrl; + + private String startTime; + + private String endTime; + + private String checkUser; + @ApiModelProperty("稽核时间") + private String checkTime; + + private Integer checkStatus; + + private String checkResult; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/CheckListResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/CheckListResponse.java new file mode 100644 index 000000000..137196d01 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/CheckListResponse.java @@ -0,0 +1,60 @@ +package com.cool.store.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class CheckListResponse { + + + private Long lineId; + + private Long interviewId; + + private Long auditId; + + private Long checkId; + + + @ApiModelProperty("面试人姓名") + private String interviewName; + + @ApiModelProperty("面试人手机号") + private String mobile; + + @ApiModelProperty("意向区域编码") + private Long wantRegion; + + @ApiModelProperty("意向区域名") + private String wantRegionName; + + @ApiModelProperty("面审人id") + private String intervieweeId; + + @ApiModelProperty("面审人姓名") + private String intervieweeName; + + @ApiModelProperty("面审通过时间") + private String intervieweePassTime; + + @ApiModelProperty("稽核状态 0:未稽核 1:合格 2:不合格") + private Integer checkStatus; + + @ApiModelProperty("招商经理id") + private String investmentId; + + @ApiModelProperty("招商经理姓名") + private String investmentName; + + @ApiModelProperty("稽核人") + private String checkUser; + + @ApiModelProperty("稽核时间") + private String checkTime; + + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/FitmentResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/FitmentResponse.java new file mode 100644 index 000000000..6e947e9c8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/FitmentResponse.java @@ -0,0 +1,19 @@ +package com.cool.store.response; + +import com.cool.store.vo.Fitment.DecorationStageVO; +import com.cool.store.vo.shop.ShopStageInfoVO; +import lombok.Data; + +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/05/03/下午1:03 + * @Version 1.0 + * @注释: + */ +@Data +public class FitmentResponse { + private Long shopId; + private List stageInfoList; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java new file mode 100644 index 000000000..616d4039c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java @@ -0,0 +1,176 @@ +package com.cool.store.response; + +import com.cool.store.entity.FranchiseFeeDO; +import com.cool.store.entity.LinePayDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.*; +import java.util.Date; + +@Data +public class FranchiseFeeResponse { + private Long id; + @ApiModelProperty("shopId") + private Long shopId; + @ApiModelProperty("payId") + private Long payId; + @ApiModelProperty("每年加盟费") + private String yearFranchiseFee; + @ApiModelProperty("贷款保证金") + private String loanMargin; + @ApiModelProperty("第一年度开始时间") + private Date firstYearStartTime; + @ApiModelProperty("第一年度结束时间") + private Date firstYearEndTime; + @ApiModelProperty("第一年度加盟费") + private String firstYearFee; + @ApiModelProperty("第二年度开始时间") + private Date secondYearStartTime; + @ApiModelProperty("第二年度结束时间") + private Date secondYearEndTime; + @ApiModelProperty("第二年度加盟费") + private String secondYearFee; + @ApiModelProperty("第仨年度开始时间") + private Date thirdYearStartTime; + @ApiModelProperty("第仨年度结束时间") + private Date thirdYearEndTime; + @ApiModelProperty("第仨年度加盟费") + private String thirdYearFee; + @ApiModelProperty("履约保证金") + private String performanceBond; + private Date createTime; + private Date updateTime; + + private LinePay linePayDO; + + @Data + public static class LinePay{ + @ApiModelProperty("") + private Long id; + + @ApiModelProperty("xfsg_user_info.partner_id") + private String partnerId; + + @ApiModelProperty("line_info.id") + private Long lineId; + + @ApiModelProperty("支付状态 45:待缴费 50:已缴费 55缴费失败") + private Integer payStatus; + + @ApiModelProperty("支付方式 1微信 2银行转账") + private Integer payType; + + @ApiModelProperty("付款人姓名") + private String payUserName; + + @ApiModelProperty("付款账号") + private String payAccount; + + @ApiModelProperty("开户行code") + private String bankCode; + + @ApiModelProperty("开户行名称") + private String bankName; + + @ApiModelProperty("支行code") + private String branchBankCode; + + @ApiModelProperty("支行名称") + private String branchBankName; + + @ApiModelProperty("缴纳时间") + private Date payTime; + + @ApiModelProperty("付款截图") + private String payPic; + + @ApiModelProperty("承诺书图片") + private String promisePic; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; + + @ApiModelProperty("创建人") + private String createUserId; + + @ApiModelProperty("更新人") + private String updateUserId; + + @ApiModelProperty("是否删除:0.否 1.是") + private Boolean deleted; + + @ApiModelProperty("支付类型 0-缴纳意向金 1-缴纳加盟费 2-装修款") + private Integer payBusinessType; + + @ApiModelProperty("缴费金额") + private String amount; + + @ApiModelProperty("加盟商姓名") + private String partnerName; + + @ApiModelProperty("审核原因") + private String result; + + @ApiModelProperty("审核状态 0通过,1拒绝") + private Integer status; + + public static LinePay from(LinePayDO linePayDO) { + if (linePayDO == null) { + return null; + } + LinePay linePayDO1 = new LinePay(); + linePayDO1.setId(linePayDO.getId()); + linePayDO1.setPartnerId(linePayDO.getPartnerId()); + linePayDO1.setLineId(linePayDO.getLineId()); + linePayDO1.setPayStatus(linePayDO.getPayStatus()); + linePayDO1.setPayType(linePayDO.getPayType()); + linePayDO1.setPayUserName(linePayDO.getPayUserName()); + linePayDO1.setPayAccount(linePayDO.getPayAccount()); + linePayDO1.setBankCode(linePayDO.getBankCode()); + linePayDO1.setBankName(linePayDO.getBankName()); + linePayDO1.setBranchBankCode(linePayDO.getBranchBankCode()); + linePayDO1.setBranchBankName(linePayDO.getBranchBankName()); + linePayDO1.setPayTime(linePayDO.getPayTime()); + linePayDO1.setPayPic(linePayDO.getPayPic()); + linePayDO1.setPromisePic(linePayDO.getPromisePic()); + linePayDO1.setCreateTime(linePayDO.getCreateTime()); + linePayDO1.setUpdateTime(linePayDO.getUpdateTime()); + linePayDO1.setCreateUserId(linePayDO.getCreateUserId()); + linePayDO1.setUpdateUserId(linePayDO.getUpdateUserId()); + linePayDO1.setDeleted(linePayDO.getDeleted()); + linePayDO1.setPayBusinessType(linePayDO.getPayBusinessType()); + return linePayDO1; + } + } + + + + public static FranchiseFeeResponse from(FranchiseFeeDO franchiseFeeDO) { + if (franchiseFeeDO == null) { + return null; + } + FranchiseFeeResponse franchiseFeeResponse = new FranchiseFeeResponse(); + franchiseFeeResponse.setId(franchiseFeeDO.getId()); + franchiseFeeResponse.setShopId(franchiseFeeDO.getShopId()); + franchiseFeeResponse.setPayId(franchiseFeeDO.getPayId()); + franchiseFeeResponse.setYearFranchiseFee(franchiseFeeDO.getYearFranchiseFee()); + franchiseFeeResponse.setLoanMargin(franchiseFeeDO.getLoanMargin()); + franchiseFeeResponse.setFirstYearStartTime(franchiseFeeDO.getFirstYearStartTime()); + franchiseFeeResponse.setFirstYearEndTime(franchiseFeeDO.getFirstYearEndTime()); + franchiseFeeResponse.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); + franchiseFeeResponse.setSecondYearStartTime(franchiseFeeDO.getSecondYearStartTime()); + franchiseFeeResponse.setSecondYearEndTime(franchiseFeeDO.getSecondYearEndTime()); + franchiseFeeResponse.setSecondYearFee(franchiseFeeDO.getSecondYearFee()); + franchiseFeeResponse.setThirdYearStartTime(franchiseFeeDO.getThirdYearStartTime()); + franchiseFeeResponse.setThirdYearEndTime(franchiseFeeDO.getThirdYearEndTime()); + franchiseFeeResponse.setThirdYearFee(franchiseFeeDO.getThirdYearFee()); + franchiseFeeResponse.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); + franchiseFeeResponse.setCreateTime(franchiseFeeDO.getCreateTime()); + franchiseFeeResponse.setUpdateTime(franchiseFeeDO.getUpdateTime()); + return franchiseFeeResponse; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/GetStoreInfoByCodeResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/GetStoreInfoByCodeResponse.java new file mode 100644 index 000000000..4262b9d72 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/GetStoreInfoByCodeResponse.java @@ -0,0 +1,171 @@ +package com.cool.store.response; + +import cn.hutool.core.date.DateUtil; +import com.cool.store.enums.LicenseTypeEnum; +import lombok.Data; + +import java.util.Objects; + +@Data +public class GetStoreInfoByCodeResponse { + /** + * 返回结果代码 + * 结果代码 + */ + private Integer code; + /** + * 返回结果数据 + * 结果数据 + */ + private InnerData data; + /** + * 提示信息 + */ + private String message; + + @Data + public static class InnerData { + /** + * 开店状态:0=关店1=开店 + */ + private String closeTime; + /** + * 加盟商编码 + */ + private String franchiseeId; + /** + * 开店状态:0=关店1=开店 + */ + private Long hdStatus; + /** + * 维度 + */ + private String latitude; + /** + * 经度 + */ + private String longitude; + /** + * 门店开业时间 + */ + private String openDate; + /** + * 开店状态:0=关店1=开店 + */ + private String openTime; + /** + * 门店地址 + */ + private String storeAdd; + /** + * 小区 + */ + private String storeArea; + /** + * 门店代码 + */ + private String storeCode; + /** + * 大区 + */ + private String storeCompany; + /** + * 门店证照信息 + */ + private StoreDocument storeDocument; + /** + * 战区 + */ + private String storeLarge; + /** + * 门店名称 + */ + private String storeName; + /** + * 门店性质 + */ + private String storeType; + } + + @Data + public static class StoreDocument { + /** + * 营业执照经营场所/住所 + */ + private String storeBusinessAdd; + /** + * 营业执照发证日期 + */ + private String storeBusinessDate; + /** + * 营业执照图片 + */ + private String storeBusinessImg; + /** + * 营业执照名称 + */ + private String storeBusinessName; + /** + * 营业执照统一社会信用代码 + */ + private String storeBusinessNumber; + /** + * 营业执照类型 + */ + private String storeBusinessType; + /** + * 营业执照有效期, 非OCR识别,手填。9=长期有效,非长期有效则为具体日期,例:2026-06-01 + */ + private String storeBusinessValidPeriod; + /** + * 门店代码 + */ + private String storeCode; + /** + * 营业执照经营者/法人 + */ + private String storeDirector; + /** + * 食品流通经营许可证编号 + */ + private String storeFoodLicense; + /** + * 食品流通/经营许可证有效期开始日期 + */ + private String storeFoodLicenseBeginDate; + /** + * 食品经营许可证经营场所 + */ + private String storeFoodLicenseBusinessAddress; + /** + * 食品经营许可证经营项目 + */ + private String storeFoodLicenseBusinessScope; + /** + * 食品流通/经营许可证有效期结束日期 + */ + private String storeFoodLicenseEndDate; + /** + * 食品经营许可证照片 + */ + private String storeFoodLicenseImg; + /** + * 食品经营许可证法定代表人(负责人) + */ + private String storeFoodLicenseLegalRepresentative; + /** + * 食品经营许可证主体业态 + */ + private String storeFoodLicenseMainBusiness; + /** + * 食品经营许可证经营者名称 + */ + private String storeFoodLicenseOperatorName; + /** + * 备注 + */ + private String storeRemark; + } + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/InitiatingResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/InitiatingResponse.java new file mode 100644 index 000000000..b92185dc1 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/InitiatingResponse.java @@ -0,0 +1,23 @@ +package com.cool.store.response; + +import lombok.Data; + +@Data +public class InitiatingResponse { + /** + * 返回结果代码 + */ + private long code; + /** + * oa流程id + */ + private String data; + /** + * 提示信息 + */ + private String msg; + + private long serverTime; + + private String message; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/LicenseApiResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/LicenseApiResponse.java new file mode 100644 index 000000000..c5c418ad6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/LicenseApiResponse.java @@ -0,0 +1,113 @@ +package com.cool.store.response; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LicenseApiResponse { + /** + * 营业执照经营场所/住所 + */ + @ApiModelProperty("营业执照经营场所/住所") + private String storeBusinessAdd; + /** + * 营业执照发证日期 + */ + @ApiModelProperty("营业执照发证日期") + private String storeBusinessDate; + /** + * 营业执照图片 + */ + @ApiModelProperty("营业执照图片") + private String storeBusinessImg; + /** + * 营业执照名称 + */ + @ApiModelProperty("营业执照名称") + private String storeBusinessName; + /** + * 营业执照统一社会信用代码 + */ + @ApiModelProperty("营业执照统一社会信用代码") + private String storeBusinessNumber; + /** + * 营业执照类型 + */ + @ApiModelProperty("营业执照类型") + private String storeBusinessType; + /** + * 营业执照有效期, 非OCR识别,手填。9=长期有效,非长期有效则为具体日期,例:2026-06-01 + */ + @ApiModelProperty("营业执照有效期, 非OCR识别,手填。9=长期有效,非长期有效则为具体日期,例:2026-06-01") + private String storeBusinessValidPeriod; + /** + * 门店代码 + */ + @ApiModelProperty("门店代码") + private String storeCode; + /** + * 营业执照经营者/法人 + */ + @ApiModelProperty("营业执照经营者/法人") + private String storeDirector; + /** + * 食品流通经营许可证编号 + */ + @ApiModelProperty("食品流通经营许可证编号") + private String storeFoodLicense; + /** + * 食品流通/经营许可证有效期开始日期 + */ + @ApiModelProperty("食品流通/经营许可证有效期开始日期") + private String storeFoodLicenseBeginDate; + /** + * 食品经营许可证经营场所 + */ + @ApiModelProperty("食品经营许可证经营场所") + private String storeFoodLicenseBusinessAddress; + /** + * 食品经营许可证经营项目 + */ + @ApiModelProperty("食品经营许可证经营项目") + private String storeFoodLicenseBusinessScope; + /** + * 食品流通/经营许可证有效期结束日期 + */ + @ApiModelProperty("食品流通/经营许可证有效期结束日期") + private String storeFoodLicenseEndDate; + /** + * 食品经营许可证照片 + */ + @ApiModelProperty("食品经营许可证照片") + private String storeFoodLicenseImg; + /** + * 食品经营许可证法定代表人(负责人) + */ + @ApiModelProperty("食品经营许可证法定代表人(负责人)") + private String storeFoodLicenseLegalRepresentative; + /** + * 食品经营许可证主体业态 + */ + @ApiModelProperty("食品经营许可证主体业态") + private String storeFoodLicenseMainBusiness; + /** + * 食品经营许可证经营者名称 + */ + @ApiModelProperty("食品经营许可证经营者名称") + private String storeFoodLicenseOperatorName; + /** + * 备注 + */ + @ApiModelProperty("备注") + private String storeRemark; +} + + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/LicenseListResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/LicenseListResponse.java new file mode 100644 index 000000000..e392c5d77 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/LicenseListResponse.java @@ -0,0 +1,47 @@ +package com.cool.store.response; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class LicenseListResponse { + + private String shopId; + @ApiModelProperty("门店名称") + private String storeName; + @ApiModelProperty("门店编码") + private String storeNum; + @ApiModelProperty("开店负责人id") + private String shopManagerUserId; + @ApiModelProperty("开店负责人姓名") + private String shopManagerUserName; + @ApiModelProperty("加盟商姓名") + private String franchiseeName; + @ApiModelProperty("加盟商手机号") + private String franchiseeMobile; + @ApiModelProperty("所属大区") + private String bigRegion; + @ApiModelProperty("所属大区id") + private Long bigRegionId; + @ApiModelProperty("所属战区") + private String fightRegion; + @ApiModelProperty("战区id") + private Long fightRegionId; + + @ApiModelProperty("招商经理id") + private String investmentManager; + @ApiModelProperty("招商经理姓名") + private String investmentManagerName; + @ApiModelProperty("督导id") + private String supervisorUserId; + @ApiModelProperty("督导姓名") + private String supervisorUserName; + @ApiModelProperty("提交申请时间") + private Date submitTime; + @ApiModelProperty("审核状态 1:待通过 2:未通过 3:已通过") + private Integer status; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/SigningBaseInfoResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/SigningBaseInfoResponse.java new file mode 100644 index 000000000..01795e311 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/SigningBaseInfoResponse.java @@ -0,0 +1,77 @@ +package com.cool.store.response; + +import com.cool.store.entity.SigningBaseInfoDO; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; + +import java.util.Date; + +@Data +public class SigningBaseInfoResponse { + @ApiModelProperty("id") + private Long id; + @ApiModelProperty("加盟商id") + private String partnerId; + @ApiModelProperty("线索id") + private Long lineId; + @ApiModelProperty("签名") + private String signName; + @ApiModelProperty("手机号") + private String mobile; + @ApiModelProperty("性别 1男 2女") + private Integer sex; + @ApiModelProperty("身份证正面url") + private String idCardFront; + @ApiModelProperty("身份证反面url") + private String idCardReverse; + @ApiModelProperty("身份证号") + private String idCardNo; + @ApiModelProperty("身份证地址") + private String idCardAddress; + @ApiModelProperty("当前地址") + private String currentResidence; + @ApiModelProperty("地址详情") + private String addressDetail; + @ApiModelProperty("证照url") + private String businessLicense; + @ApiModelProperty("证照码") + private String businessLicenseCode; + @ApiModelProperty("证照地址") + private String businessLicenseAddress; + @ApiModelProperty("创建时间") + private Date createTime; + @ApiModelProperty("更新时间") + private Date updateTime; + + @ApiModelProperty("加盟身份 1个人加盟 2企业加盟") + private Integer type; + + @ApiModelProperty("公开拒绝原因") + private String rejectPublicReason; + + public static SigningBaseInfoResponse from(SigningBaseInfoDO signingBaseInfoDO) { + if (signingBaseInfoDO == null) { + return null; + } + SigningBaseInfoResponse signingBaseInfoResponse = new SigningBaseInfoResponse(); + signingBaseInfoResponse.setId(signingBaseInfoDO.getId()); + signingBaseInfoResponse.setPartnerId(signingBaseInfoDO.getPartnerId()); + signingBaseInfoResponse.setLineId(signingBaseInfoDO.getLineId()); + signingBaseInfoResponse.setSignName(signingBaseInfoDO.getSignName()); + signingBaseInfoResponse.setMobile(signingBaseInfoDO.getMobile()); + signingBaseInfoResponse.setSex(signingBaseInfoDO.getSex()); + signingBaseInfoResponse.setIdCardFront(signingBaseInfoDO.getIdCardFront()); + signingBaseInfoResponse.setIdCardReverse(signingBaseInfoDO.getIdCardReverse()); + signingBaseInfoResponse.setIdCardNo(signingBaseInfoDO.getIdCardNo()); + signingBaseInfoResponse.setIdCardAddress(signingBaseInfoDO.getIdCardAddress()); + signingBaseInfoResponse.setCurrentResidence(signingBaseInfoDO.getCurrentResidence()); + signingBaseInfoResponse.setAddressDetail(signingBaseInfoDO.getAddressDetail()); + signingBaseInfoResponse.setBusinessLicense(signingBaseInfoDO.getBusinessLicense()); + signingBaseInfoResponse.setBusinessLicenseCode(signingBaseInfoDO.getBusinessLicenseCode()); + signingBaseInfoResponse.setBusinessLicenseAddress(signingBaseInfoDO.getBusinessLicenseAddress()); + signingBaseInfoResponse.setCreateTime(signingBaseInfoDO.getCreateTime()); + signingBaseInfoResponse.setUpdateTime(signingBaseInfoDO.getUpdateTime()); + return signingBaseInfoResponse; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/SmsSendResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/SmsSendResponse.java new file mode 100644 index 000000000..8578d2d14 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/SmsSendResponse.java @@ -0,0 +1,38 @@ +package com.cool.store.response; + +import lombok.Data; + +/** + * + * @author zw.yang + * @date 2023-07-03 + * @Description:普通短信发送响应实体类 + */ +@Data +public class SmsSendResponse { + /** + * 响应时间 + */ + private String time; + /** + * 消息id + */ + private String msgId; + /** + * 状态码说明(成功返回空) + */ + private String errorMsg; + /** + * 状态码(详细参考提交响应状态码) + */ + private String code; + + /** + * 失败的个数 + */ + private String failNum; + /** + * 成功的个数 + */ + private String successNum; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/SubmitLicenseResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/SubmitLicenseResponse.java new file mode 100644 index 000000000..62b8051a3 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/SubmitLicenseResponse.java @@ -0,0 +1,236 @@ +package com.cool.store.response; + +import cn.hutool.core.date.DateUtil; +import com.cool.store.entity.LicenseTransactDO; +import com.cool.store.entity.ShopAuditInfoDO; +import com.cool.store.enums.LicenseTypeEnum; +import com.cool.store.vo.ShopAuditInfoVO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; +import java.util.Objects; + +@Data +public class SubmitLicenseResponse { + + @ApiModelProperty("主键id") + private Long id; + + private Long shopId; + + @ApiModelProperty("营业执照拍照上传") + private String licenseUrl; + + @ApiModelProperty("营业执照名称") + private String licenseName; + + @ApiModelProperty("营业执照类型 0.个体工商户 1.有限责任公司 2.独资企业 3.自然人经营") + private Integer licenseType; + + @ApiModelProperty("营业执照上的法人") + private String licenseLegalPerson; + + @ApiModelProperty("统一社会信用代码") + private String socialCreditCode; + + @ApiModelProperty("发证日期") + private Date issueTime; + + @ApiModelProperty("营业执照经营场所") + private String licenseAddress; + + @ApiModelProperty("有效期(如果为空则是长期有效)") + private Date validity; + + @ApiModelProperty("有效期类型 0:长期有效(不用传validity) 1:效期内") + private Integer validityType; + + + @ApiModelProperty("法人双手持身份证正面+营业执照") + private String idCardAndLicense1; + + @ApiModelProperty("法人双手持身份证反面+营业执照") + private String idCardAndLicense2; + + @ApiModelProperty("食品经营许可证图片上传") + private String foodLicenseUrl; + + @ApiModelProperty("经营者") + private String operator; + + @ApiModelProperty("食品经营许可证上的法人") + private String foodLicenseLegalPerson; + + @ApiModelProperty("食营经营场所") + private String businessPremises; + + @ApiModelProperty("主体业态") + private String mainBusiness; + + @ApiModelProperty("经营项目") + private String businessProject; + + @ApiModelProperty("许可证编号") + private String foodLicenseCode; + + @ApiModelProperty("许可证开始时间") + private Date foodLicenseStartTime; + + @ApiModelProperty("许可证截止时间") + private Date foodLicenseEndTime; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("备注图片") + private String remarkUrl; + + @ApiModelProperty("0:保存 1:提交到待审核 2:未通过 3:已通过 ") + private Integer submitStatus; + + @ApiModelProperty("流程记录") + private List processRecords; + + @ApiModelProperty("鲜丰拉取方法体") + private StoreDocument storeDocument; + + @Data + public static class StoreDocument { + @ApiModelProperty("营业执照拍照上传") + private String licenseUrl; + + @ApiModelProperty("营业执照名称") + private String licenseName; + + @ApiModelProperty("营业执照类型 0:有限责任公司 1:工体工商") + private Integer licenseType; + + @ApiModelProperty("营业执照上的法人") + private String licenseLegalPerson; + + @ApiModelProperty("统一社会信用代码") + private String socialCreditCode; + + @ApiModelProperty("发证日期") + private Date issueTime; + + @ApiModelProperty("营业执照经营场所") + private String licenseAddress; + + @ApiModelProperty("有效期(如果为空则是长期有效)") + private Date validity; + + @ApiModelProperty("有效期类型 0:长期有效(不用传validity) 1:效期内") + private Integer validityType; + + + @ApiModelProperty("法人双手持身份证正面+营业执照") + private String idCardAndLicense1; + + @ApiModelProperty("法人双手持身份证反面+营业执照") + private String idCardAndLicense2; + + @ApiModelProperty("食品经营许可证图片上传") + private String foodLicenseUrl; + + @ApiModelProperty("经营者") + private String operator; + + @ApiModelProperty("食品经营许可证上的法人") + private String foodLicenseLegalPerson; + + @ApiModelProperty("食营经营场所") + private String businessPremises; + + @ApiModelProperty("主体业态") + private String mainBusiness; + + @ApiModelProperty("经营项目") + private String businessProject; + + @ApiModelProperty("许可证编号") + private String foodLicenseCode; + + @ApiModelProperty("许可证开始时间") + private Date foodLicenseStartTime; + + @ApiModelProperty("许可证截止时间") + private Date foodLicenseEndTime; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("备注图片") + private String remarkUrl; + + } + + public static SubmitLicenseResponse from(GetStoreInfoByCodeResponse storeInfoCode, + SubmitLicenseResponse submitLicenseResponse){ + if (Objects.isNull(submitLicenseResponse)){ + submitLicenseResponse = new SubmitLicenseResponse(); + } + GetStoreInfoByCodeResponse.StoreDocument storeDocument = storeInfoCode.getData().getStoreDocument(); + boolean storeBusinessValidPeriod = "9".equals(storeDocument.getStoreBusinessValidPeriod()); + submitLicenseResponse.setLicenseType(LicenseTypeEnum.matchName(storeDocument.getStoreBusinessType()).getCode()); + submitLicenseResponse.setLicenseLegalPerson(storeDocument.getStoreDirector()); + submitLicenseResponse.setIssueTime(DateUtil.parseDate(storeDocument.getStoreBusinessDate())); + submitLicenseResponse.setLicenseAddress(storeDocument.getStoreBusinessAdd()); + submitLicenseResponse.setValidity(storeBusinessValidPeriod ? null : DateUtil.parse(storeDocument.getStoreBusinessValidPeriod(),"yyyy-MM-dd")); + submitLicenseResponse.setValidityType(storeBusinessValidPeriod ? 0 : 1); + submitLicenseResponse.setOperator(storeDocument.getStoreFoodLicenseOperatorName()); + submitLicenseResponse.setFoodLicenseLegalPerson(storeDocument.getStoreFoodLicenseLegalRepresentative()); + submitLicenseResponse.setMainBusiness(storeDocument.getStoreFoodLicenseMainBusiness()); + submitLicenseResponse.setBusinessProject(storeDocument.getStoreFoodLicenseBusinessScope()); + submitLicenseResponse.setRemark(storeDocument.getStoreRemark()); + submitLicenseResponse.setLicenseUrl(storeDocument.getStoreBusinessImg()); + submitLicenseResponse.setLicenseName(storeDocument.getStoreBusinessName()); + submitLicenseResponse.setSocialCreditCode(storeDocument.getStoreBusinessNumber()); + submitLicenseResponse.setFoodLicenseUrl(storeDocument.getStoreFoodLicenseImg()); + submitLicenseResponse.setBusinessPremises(storeDocument.getStoreFoodLicenseBusinessAddress()); + submitLicenseResponse.setFoodLicenseCode(storeDocument.getStoreFoodLicense()); + submitLicenseResponse.setFoodLicenseStartTime(DateUtil.parseDate(storeDocument.getStoreFoodLicenseBeginDate())); + submitLicenseResponse.setFoodLicenseEndTime(DateUtil.parseDate(storeDocument.getStoreFoodLicenseEndDate())); + return submitLicenseResponse; + } + + public static SubmitLicenseResponse from(LicenseTransactDO licenseTransactDO) { + if (Objects.isNull(licenseTransactDO)) { + return null; + } + SubmitLicenseResponse submitLicenseResponse = new SubmitLicenseResponse(); + submitLicenseResponse.setId(licenseTransactDO.getId()); + submitLicenseResponse.setShopId(licenseTransactDO.getShopId()); + submitLicenseResponse.setLicenseType(licenseTransactDO.getLicenseType()); + submitLicenseResponse.setLicenseLegalPerson(licenseTransactDO.getLicenseLegalPerson()); + submitLicenseResponse.setIssueTime(licenseTransactDO.getIssueTime()); + submitLicenseResponse.setLicenseAddress(licenseTransactDO.getLicenseAddress()); + submitLicenseResponse.setValidity(licenseTransactDO.getValidity()); + if (Objects.nonNull(licenseTransactDO.getValidity())){ + submitLicenseResponse.setValidityType(1); + }else { + submitLicenseResponse.setValidityType(0); + } + submitLicenseResponse.setOperator(licenseTransactDO.getOperator()); + submitLicenseResponse.setFoodLicenseLegalPerson(licenseTransactDO.getFoodLicenseLegalPerson()); + submitLicenseResponse.setMainBusiness(licenseTransactDO.getMainBusiness()); + submitLicenseResponse.setBusinessProject(licenseTransactDO.getBusinessProject()); + submitLicenseResponse.setRemark(licenseTransactDO.getRemark()); + submitLicenseResponse.setRemarkUrl(licenseTransactDO.getRemarkUrl()); + submitLicenseResponse.setSubmitStatus(licenseTransactDO.getSubmitStatus()); + submitLicenseResponse.setLicenseUrl(licenseTransactDO.getCreditUrl()); + submitLicenseResponse.setLicenseName(licenseTransactDO.getBusinessLicense()); + submitLicenseResponse.setSocialCreditCode(licenseTransactDO.getCreditCode()); + submitLicenseResponse.setIdCardAndLicense2(licenseTransactDO.getIdCardNegativeCreditUrl()); + submitLicenseResponse.setIdCardAndLicense1(licenseTransactDO.getIdCardPositiveCreditUrl()); + submitLicenseResponse.setFoodLicenseUrl(licenseTransactDO.getFoodBusinessLicenseUrl()); + submitLicenseResponse.setBusinessPremises(licenseTransactDO.getFoodLicenseAddress()); + submitLicenseResponse.setFoodLicenseCode(licenseTransactDO.getFoodBusinessLicenseCode()); + submitLicenseResponse.setFoodLicenseStartTime(licenseTransactDO.getFoodBusinessStartTime()); + submitLicenseResponse.setFoodLicenseEndTime(licenseTransactDO.getFoodBusinessEndTime()); + return submitLicenseResponse; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/SysStoreAppResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/SysStoreAppResponse.java new file mode 100644 index 000000000..e15e96631 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/SysStoreAppResponse.java @@ -0,0 +1,187 @@ +package com.cool.store.response; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class SysStoreAppResponse { + + @ApiModelProperty("主键id") + private Long id; + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("筹建门店id") + private Long shopId; + + private Long auditId; + + private FranInfo franInfo; + + private StoreDetail storeDetail; + + private SupervisorDetail supervisorDetail; + + private AuditDetail auditDetail; + + + @Data + public static class AuditDetail { + @ApiModelProperty("0-视觉验收 1-培训登记审批 2-开业运营方案 3-证照审批 4-系统建店") + private Integer auditType; + @ApiModelProperty("结果类型 0通过,1拒绝") + private Integer resultType; + @ApiModelProperty("通过原因") + private String passReason; + @ApiModelProperty("拒绝原因") + private String rejectReason; + } + + @Data + public static class FranInfo { + + @ApiModelProperty("加盟商姓名") + private String franchiseeName; + + @ApiModelProperty("所属大区") + private String subregion; + + @ApiModelProperty("加盟商编码") + private String partnerNum; + + @ApiModelProperty("加盟商电话") + private String franchiseeMobile; + + @ApiModelProperty("加盟商类型" + + "0-新加盟商开单店;1-老加盟商开单店;" + + "2-新加盟商开新区域单店;" + + "3-新加盟商开老区域单店;" + + "4-老加盟商开新区域单店;" + + "5-老加盟商开老区域单店;" + + "6-直营门店;" + + "7-同异业转化;" + + "8-老加盟商迁址开新店") + private Integer franchiseeType; + + @ApiModelProperty("门店邀约人id") + private String inviteUserId; + + @ApiModelProperty("门店邀约人姓名") + private String storeInviteesName; + + @ApiModelProperty("招商姓名") + private String InvestmentName; + + @ApiModelProperty("招商人id") + private String InvestmentUserId; + + @ApiModelProperty("门店选址人姓名") + private String sitterName; + + @ApiModelProperty("门店选址人id") + private String sitterId; + } + + @Data + public static class StoreDetail { + @ApiModelProperty("门店性质") + private Integer storeNature; + @ApiModelProperty("门店经营者") + private Integer storeOperator; + @ApiModelProperty("门店名称(默认带入一个门店名称,但是可修改)") + private String storeName; + @ApiModelProperty("大区描述") + private String bigDesc; + @ApiModelProperty("大区名称") + private String bigName; + @ApiModelProperty("大区code") + private String bigCode; + + @ApiModelProperty("战区id") + private Long fightId; + @ApiModelProperty("战区描述") + private String fightDesc; + @ApiModelProperty("战区code") + private String fightCode; + @ApiModelProperty("战区名称") + private String fightName; + + @ApiModelProperty("小区code") + private String smallCode; + @ApiModelProperty("小区描述") + private String smallDesc; + @ApiModelProperty("小区名称") + private String smallName; + + @ApiModelProperty("主商圈类型 10-社区型;20-商业街边型;30-学校型;40-CBD/办公型;60-医院型;70-菜场型") + private Integer mainBusinessType; + @ApiModelProperty("次商圈类型 10-社区型;20-商业街边型;30-学校型;40-CBD/办公型;60-医院型;70-菜场型") + private Integer subBusinessType; + @ApiModelProperty("线下主要竞争对手 10-品牌水果店;20-夫妻水果店;30-菜场店;40-大商超;50-生鲜店;60-无") + private Integer offlineCompetitor; + @ApiModelProperty("线下主要竞争品牌") + private String offlineCompetingBrand; + @ApiModelProperty("周边500米内二手房均价") + private Integer averagePriceSh; + @ApiModelProperty("100米周末日均客流量指数 0:1000以下 1:1000-1万 2:1万以上") + private Integer averageDailyRs; + @ApiModelProperty("商圈门店类型 普通社区店 高档社区店") + private String businessStoreType; + @ApiModelProperty("预估营业额") + private Integer estimatedTurnover; + @ApiModelProperty("签约日期") + private Date signDate; + @ApiModelProperty("房东姓名") + private String landlordName; + @ApiModelProperty("合同交房日期") + private Date contractDeliveryDate; + @ApiModelProperty("房东联系电话") + private String landlordMobile; + @ApiModelProperty("预约量房日期") + private Date reservation; + @ApiModelProperty("门店月租金") + private Integer storeRent; + @ApiModelProperty("此店加盟费") + private Integer storeFranchiseFee; + @ApiModelProperty("此店保证金") + private Integer storeSecurityDeposit; + @ApiModelProperty("享受加盟费和保证金优惠原因") + private String reasons; + @ApiModelProperty("省") + private String province; + @ApiModelProperty("市") + private String city; + @ApiModelProperty("区") + private String district; + @ApiModelProperty("街道") + private String township; + @ApiModelProperty("详细地址") + private String detailAddress; + @ApiModelProperty("品牌使用费率") + private String usageRate; + + } + + @Data + public static class SupervisorDetail { + + @ApiModelProperty("督导姓名") + private String supervisorName; + + @ApiModelProperty("督导工号") + private String supervisorId; + + @ApiModelProperty("大区总姓名") + private String regioGeneral; + + @ApiModelProperty("大区总工号") + private String regioGeneralId; + + } + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/ThreeSignResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/ThreeSignResponse.java new file mode 100644 index 000000000..f0bce1bfc --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/ThreeSignResponse.java @@ -0,0 +1,21 @@ +package com.cool.store.response; + +import com.cool.store.dto.decoration.ThreeAcceptanceDTO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Auther: WangShuo + * @Date: 2024/05/06/下午5:50 + * @Version 1.0 + * @注释: + */ +@Data +public class ThreeSignResponse { + @ApiModelProperty("工程部验收") + private ThreeAcceptanceDTO engineeringAcceptance; + @ApiModelProperty("营运部验收") + private ThreeAcceptanceDTO operationsAcceptance; + @ApiModelProperty("加盟商验收") + private ThreeAcceptanceDTO partnerAcceptance; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/error/ErrorExcelResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/error/ErrorExcelResponse.java new file mode 100644 index 000000000..4e4baf86a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/error/ErrorExcelResponse.java @@ -0,0 +1,27 @@ +package com.cool.store.response.error; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @author hxd + * @FileName: ErrorExcelResponse + * @Description: + * @date 2023-08-13 19:43 + */ +@Data +@Accessors(chain = true) +public class ErrorExcelResponse { + + private Integer total; + + private Integer errorNum; + + private String file; + + public ErrorExcelResponse(Integer total,Integer errorNum,String file){ + this.total=total; + this.errorNum=errorNum; + this.file=file; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/error/ErrorResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/error/ErrorResponse.java new file mode 100644 index 000000000..049f497e9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/error/ErrorResponse.java @@ -0,0 +1,25 @@ +package com.cool.store.response.error; + +/** + * @author zhangchenbiao + * @FileName: ErrorResponse + * @Description: + * @date 2023-06-13 19:43 + */ +public class ErrorResponse { + private Integer code; + private String message; + + public ErrorResponse(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/event/CreateEventResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/event/CreateEventResponse.java new file mode 100644 index 000000000..cb282d36f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/event/CreateEventResponse.java @@ -0,0 +1,57 @@ +package com.cool.store.response.event; + +import lombok.Data; + +import java.util.List; + +/** + * @author Fun Li 2023/10/23 10:29 + * @version 1.0 + * 使用沪上阿姨事件中心创建事件的响应体 + */ +@Data +public class CreateEventResponse { + + /** + * 请求 ID + */ + private String requestId; + + private String resourceOwnerAccountId; + + /** + * 失败次数 + */ + private Integer failedEntryCount; + + /** + * 事件请求列表 + */ + private List entryList; + + @Data + private static class EventEntry { + + /** + * 事件 id + */ + private String eventId; + + /** + * 交易 id + */ + private String traceId; + + /** + * 失败 code + */ + private Integer errorCode; + + /** + * 失败信息 + */ + private String errorMessage; + + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/mdm/BelongRegion.java b/coolstore-partner-model/src/main/java/com/cool/store/response/mdm/BelongRegion.java new file mode 100644 index 000000000..1fd0d3e52 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/mdm/BelongRegion.java @@ -0,0 +1,26 @@ +package com.cool.store.response.mdm; + +import lombok.Data; + +/** + * @author Fun Li 2023/9/12 11:52 + * @version 1.0 + * mdm 所属大区 pojo + * 对应 + * { + * "id": "1642818197440036864", + * "orgregionid": "Org001", + * "orgregion": "东北战区" + * }, + */ +@Data +public class BelongRegion { + + private String id; + + private String orgregionid; + + private String orgregion; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/mdm/BusinessRegion.java b/coolstore-partner-model/src/main/java/com/cool/store/response/mdm/BusinessRegion.java new file mode 100644 index 000000000..6e17de56a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/mdm/BusinessRegion.java @@ -0,0 +1,22 @@ +package com.cool.store.response.mdm; + +import lombok.Data; + +/** + * @author Fun Li 2023/9/12 11:29 + * @version 1.0 + * mdm 业务区域 pojo + * 对应 + * { + * "id": "1643101868734676992", + * "buarea": "东北战区" + * }, + */ +@Data +public class BusinessRegion { + + private String id; + + private String buarea; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/xfsgFirstOderListResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/xfsgFirstOderListResponse.java new file mode 100644 index 000000000..99e21ab80 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/xfsgFirstOderListResponse.java @@ -0,0 +1,26 @@ +package com.cool.store.response; + +import com.cool.store.dto.xfsgFirstOderDTO; +import lombok.Data; + +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/05/08/下午7:38 + * @Version 1.0 + * @注释: + */ +@Data +public class xfsgFirstOderListResponse { + /** + * 返回结果代码 + */ + private long code; + + private List data; + /** + * 提示信息 + */ + private String msg; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/AssessmentTemplateDataVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/AssessmentTemplateDataVO.java new file mode 100644 index 000000000..873c5d630 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/AssessmentTemplateDataVO.java @@ -0,0 +1,91 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/25 11:26 + * @Version 1.0 + */ +@Data +public class AssessmentTemplateDataVO { + + @ApiModelProperty("ID") + private Long id; + + @ApiModelProperty("数据项id") + private Long assessmentDataId; + + /** + * 模板类型:0 - 教练员, 1 - 店长, 2 - 店员, 3 - 三方验收 + */ + @ApiModelProperty("模板类型:0 - 教练员, 1 - 店长, 2 - 店员, 3 - 三方验收") + private Integer type; + + /** + * 模板类别,可为空 + */ + @ApiModelProperty("分类") + private String category; + + /** + * 模板名称 + */ + @ApiModelProperty("模板名称") + private String templateName; + + /** + * 模板remark + */ + @ApiModelProperty("模板remark") + private List templateRemarkList; + + /** + * 考核项分值 + */ + @ApiModelProperty("考核项分值") + private Long score; + + /** + * 模板要求明细,包括详细的考核要求描述 + */ + @ApiModelProperty("模板要求明细,包括详细的考核要求描述") + private String templateRequirements; + + + /** + * 店铺是否合格 + */ + @ApiModelProperty("店铺是否合格") + private Boolean qualified; + + /** + * 评分 + */ + @ApiModelProperty("得分") + private Long goalScore; + + /** + * 原因 + */ + @ApiModelProperty("原因") + private String reason; + + /** + * 评语 + */ + @ApiModelProperty("评语") + private String comments; + + @ApiModelProperty("考核方式") + private String checkType; + + @ApiModelProperty("图片") + private String picture; + + @ApiModelProperty("视频") + private String video; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/AssessmentTemplateVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/AssessmentTemplateVO.java new file mode 100644 index 000000000..482502a8d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/AssessmentTemplateVO.java @@ -0,0 +1,56 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/25 11:26 + * @Version 1.0 + */ +@Data +public class AssessmentTemplateVO { + + @ApiModelProperty("ID") + private Long id; + + /** + * 模板类型:0 - 教练员, 1 - 店长, 2 - 店员, 3 - 三方验收 + */ + @ApiModelProperty("模板类型:0 - 教练员, 1 - 店长, 2 - 店员, 3 - 三方验收") + private Integer type; + + /** + * 模板类别,可为空 + */ + @ApiModelProperty("分类") + private String category; + + /** + * 模板名称 + */ + @ApiModelProperty("模板名称") + private String templateName; + + /** + * 模板remark + */ + @ApiModelProperty("模板remark") + private List templateRemarkList; + + /** + * 考核项分值 + */ + @ApiModelProperty("考核项分值") + private Long score; + + /** + * 模板要求明细,包括详细的考核要求描述 + */ + @ApiModelProperty("模板要求明细,包括详细的考核要求描述") + private String templateRequirements; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/AssessmentUserTrainingVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/AssessmentUserTrainingVO.java new file mode 100644 index 000000000..b66ab1382 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/AssessmentUserTrainingVO.java @@ -0,0 +1,126 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; +import java.util.Date; +import java.util.List; + +/** + * @author byd + * @date 2024-04-30 10:53 + */ +@Data +public class AssessmentUserTrainingVO { + + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("名字") + private String username; + + @ApiModelProperty("手机号") + private String mobile; + + @ApiModelProperty("身份证号") + private String idCard; + + @ApiModelProperty("区域id") + private Long regionId; + + @ApiModelProperty("角色id 170000000-店长 160000000-店员") + private Long roleId; + + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("店铺名称") + private String shopName; + + @ApiModelProperty("培训id") + private Long employeeTrainingId; + + /** + * 实训门店ID + */ + @ApiModelProperty("实训门店ID") + private String trainingStoreId; + + /** + * 实训门店ID + */ + @ApiModelProperty("实训门店名称") + private String trainingStoreName; + + /** + * 实操考核人员ID + */ + @ApiModelProperty("实操考核人员ID") + private String practicalAssessmentUserId; + + @ApiModelProperty("实操考核人员名称") + private String practicalAssessmentUserName; + + /** + * 预计考核时间 + */ + @ApiModelProperty("预计考核时间") + private Date estimatedAssessmentTime; + + /** + * 实际考核时间 + */ + @ApiModelProperty("实际考核时间") + private Date actualAssessmentTime; + + /** + * 理论考试状态 0-未开始 1-合格 2-不合格 + */ + @ApiModelProperty("理论考试状态 0-未开始 1-合格 2-不合格") + private Integer theoreticalExamStatus; + + /** + * 理论考试分值 + */ + @ApiModelProperty("理论考试分值") + private Integer theoreticalExamScore; + + /** + * 实操考试分值 + */ + @ApiModelProperty("实操考试分值") + private Integer practicalExamScore; + + + @ApiModelProperty("实操考试状态") + private Integer practicalExamStatus; + + + /** + * 考核状态 0-培训中 1-带考核 2-考核通过 3-考核不通过 + */ + @ApiModelProperty("核状态 0-培训中 1-带考核 2-考核通过 3-考核不通过") + private Integer assessmentStatus; + + + @ApiModelProperty("所属区域") + private String regionNodeName; + /** + * 考核项数 + */ + @ApiModelProperty("考核项数") + private Integer assessmentNum; + + /** + * 考核总项数 + */ + @ApiModelProperty("考核总项数") + private Integer assessmentTotalNum; + + + + @ApiModelProperty("考核数据") + List templateDataList; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/AuditInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/AuditInfoVO.java new file mode 100644 index 000000000..78fa0919c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/AuditInfoVO.java @@ -0,0 +1,53 @@ +package com.cool.store.vo; + +import com.cool.store.entity.ShopAuditInfoDO; +import com.cool.store.enums.AuditResultTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.Objects; + +@Data +public class AuditInfoVO { + + @ApiModelProperty("审核id") + private Long auditId; + + @ApiModelProperty("结果类型 0通过,1拒绝,2结束跟进") + private Integer resultType; + + @ApiModelProperty("原因") + private String reason; + + @ApiModelProperty("明文件或凭证") + private String certifyFile; + + @ApiModelProperty("审批时间") + private Date createTime; + + @ApiModelProperty(value = "操作人id") + private String operateUserId; + + @ApiModelProperty(value = "操作人姓名") + private String operateUserName; + + public static AuditInfoVO convertVO(ShopAuditInfoDO auditInfo) { + if(Objects.isNull(auditInfo)){ + return null; + } + AuditInfoVO result = new AuditInfoVO(); + result.setAuditId(auditInfo.getId()); + result.setResultType(auditInfo.getResultType()); + if(AuditResultTypeEnum.PASS.getCode().equals(result.getResultType())){ + result.setReason(auditInfo.getPassReason()); + }else if(AuditResultTypeEnum.REJECT.getCode().equals(result.getResultType())){ + result.setReason(auditInfo.getRejectReason()); + } + result.setOperateUserId(auditInfo.getSubmittedUserId()); + result.setOperateUserName(auditInfo.getSubmittedUserName()); + result.setCertifyFile(auditInfo.getCertifyFile()); + result.setCreateTime(auditInfo.getCreateTime()); + return result; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/BaseInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/BaseInfoVO.java new file mode 100644 index 000000000..3daad6ac6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/BaseInfoVO.java @@ -0,0 +1,66 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/3/26 15:18 + * @Version 1.0 + */ +@Data +public class BaseInfoVO { + + @ApiModelProperty("线索ID") + private Long lineId; + + @ApiModelProperty("partnerId") + private String partnerId; + + @ApiModelProperty("线索名称") + private String username; + + @ApiModelProperty("手机号") + private String mobile; + + @ApiModelProperty("意向加盟区域") + private String wantShopAreaName; + + @ApiModelProperty("线索状态") + private Integer lineStatus; + + @ApiModelProperty("线索标签") + private List userPortraitList; + + @ApiModelProperty("流程阶段:1意向加盟;2新店进展;") + private Integer workflowStage; + + private Integer workflowSubStage; + + @ApiModelProperty("子阶段状态") + private Integer workflowSubStageStatus; + + public BaseInfoVO(){} + /** + * 写一个构造方法 参数是BaseInfoVO + * @param baseInfoVO + */ + public BaseInfoVO(BaseInfoVO baseInfoVO) { + this.lineId = baseInfoVO.getLineId(); + this.partnerId = baseInfoVO.getPartnerId(); + this.username = baseInfoVO.getUsername(); + this.lineStatus = baseInfoVO.getLineStatus(); + this.mobile = baseInfoVO.getMobile(); + this.workflowSubStage = baseInfoVO.getWorkflowSubStage(); + this.wantShopAreaName = baseInfoVO.getWantShopAreaName(); + this.userPortraitList = baseInfoVO.getUserPortraitList(); + this.workflowStage = baseInfoVO.getWorkflowStage(); + this.workflowSubStageStatus = baseInfoVO.getWorkflowSubStageStatus(); + } + + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/BusinessLicenseInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/BusinessLicenseInfoVO.java new file mode 100644 index 000000000..07c0268f2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/BusinessLicenseInfoVO.java @@ -0,0 +1,51 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class BusinessLicenseInfoVO { + @ApiModelProperty("统一社会信用代码") + private String registerNumber; + + @ApiModelProperty("公司地址") + private String address; + + @ApiModelProperty("法人") + private String legalPerson; + + @ApiModelProperty("有效期") + private String validPeriod; + + @ApiModelProperty("建立日期") + private String establishDate; + + @ApiModelProperty("营业执照名称") + private String name; + + @ApiModelProperty("类型") + private String type; + + public BusinessLicenseInfoVO(String registerNumber, String address) { + this.registerNumber = registerNumber; + this.address = address; + } + + public BusinessLicenseInfoVO(String registerNumber, String address, String legalPerson, String validPeriod, String establishDate) { + this.registerNumber = registerNumber; + this.address = address; + this.legalPerson = legalPerson; + this.validPeriod = validPeriod; + this.establishDate = establishDate; + } + + public BusinessLicenseInfoVO(String registerNumber, String address, String legalPerson, String validPeriod, String establishDate, String name, String type) { + this.registerNumber = registerNumber; + this.address = address; + this.legalPerson = legalPerson; + this.validPeriod = validPeriod; + this.establishDate = establishDate; + this.name = name; + this.type = type; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/EmployeeTrainingDetailVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/EmployeeTrainingDetailVO.java new file mode 100644 index 000000000..87a66ad13 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/EmployeeTrainingDetailVO.java @@ -0,0 +1,153 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; +import java.util.Date; + +/** + * @author byd + * @date 2024-04-30 10:53 + */ +@Data +public class EmployeeTrainingDetailVO { + + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("名字") + private String username; + + @ApiModelProperty("手机号") + private String mobile; + + @ApiModelProperty("身份证号") + private String idCard; + + + @ApiModelProperty("区域id") + private Long regionId; + + @ApiModelProperty("角色id 170000000-店长 160000000-店员") + private Long roleId; + + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("店铺名称") + private String shopName; + + @ApiModelProperty("培训id") + private Long employeeTrainingId; + + + + @ApiModelProperty("所属区域") + private String regionNodeName; + /** + * 实训开始时间 + */ + @ApiModelProperty("实训开始时间") + private Date trainingStartTime; + + /** + * 实训结束时间 + */ + @ApiModelProperty("实训结束时间") + private Date trainingEndTime; + + /** + * 实训门店ID + */ + @ApiModelProperty("实训门店ID") + private String trainingStoreId; + + /** + * 实训门店ID + */ + @ApiModelProperty("实训门店名称") + private String trainingStoreName; + + /** + * 带教老师ID + */ + @ApiModelProperty("带教老师ID") + private String trainingTeacherUserId; + + /** + * 带教老师ID + */ + @ApiModelProperty("带教老师名称") + private String trainingTeacherUserName; + + /** + * 实操考核人员ID + */ + @ApiModelProperty("实操考核人员ID") + private String practicalAssessmentUserId; + + @ApiModelProperty("实操考核人员名称") + private String practicalAssessmentUserName; + + /** + * 预计考核时间 + */ + @ApiModelProperty("预计考核时间") + private Date estimatedAssessmentTime; + + /** + * 实际考核时间 + */ + @ApiModelProperty("实际考核时间") + private Date actualAssessmentTime; + + /** + * 是否分配 0-待分配 1-已分配 + */ + @ApiModelProperty("是否分配 0-待分配 1-已分配") + private Boolean assignFlag; + + /** + * 考核项数 + */ + @ApiModelProperty("考核项数") + private Integer assessmentNum; + + /** + * 考核总项数 + */ + @ApiModelProperty("考核总项数") + private Integer assessmentTotalNum; + + /** + * 理论考试状态 0-未开始 1-合格 2-不合格 + */ + @ApiModelProperty("理论考试状态 0-未开始 1-合格 2-不合格") + private Integer theoreticalExamStatus; + + /** + * 理论考试分值 + */ + @ApiModelProperty("理论考试分值") + private Integer theoreticalExamScore; + + /** + * 实操考试状态 0-未开始 1-合格 2-不合格 + */ + @ApiModelProperty("实操考试状态 0-未开始 1-合格 2-不合格") + private Integer practicalExamStatus; + + /** + * 实操考试分值 + */ + @ApiModelProperty("实操考试分值") + private Integer practicalExamScore; + + /** + * 考核状态 0-培训中 1-带考核 2-考核通过 3-考核不通过 + */ + @ApiModelProperty("考核状态 0-培训中 1-带考核 2-考核通过 3-考核不通过") + private Integer assessmentStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/EmployeeTrainingVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/EmployeeTrainingVO.java new file mode 100644 index 000000000..7c95e6ba1 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/EmployeeTrainingVO.java @@ -0,0 +1,134 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @author byd + * @date 2024-04-30 10:53 + */ +@Data +public class EmployeeTrainingVO { + + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("名字") + private String username; + + @ApiModelProperty("加盟商名字") + private String franchiseeName; + + @ApiModelProperty("手机号") + private String mobile; + + @ApiModelProperty("身份证号") + private String idCard; + + @ApiModelProperty("区域id") + private Long regionId; + + @ApiModelProperty("角色id 170000000-店长 160000000-店员") + private String roleId; + + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("店铺名称") + private String shopName; + + @ApiModelProperty("培训id") + private Long employeeTrainingId; + + @ApiModelProperty("考核项数") + private Integer assessmentNum; + + @ApiModelProperty("考核总项数") + private Integer assessmentTotalNum; + + @ApiModelProperty("理论考试状态 0-未开始 1-合格 2-不合格") + private Integer theoreticalExamStatus; + + @ApiModelProperty("理论考试分值") + private Integer theoreticalExamScore; + + @ApiModelProperty("实操考试状态 0-未开始 1-合格 2-不合格") + private Integer practicalExamStatus; + + @ApiModelProperty("实操考试分值") + private Integer practicalExamScore; + + @ApiModelProperty("考核状态 -1 未开始 0-培训中 1-带考核 2-考核通过 3-考核不通过") + private Integer assessmentStatus; + + + @ApiModelProperty("所属区域") + private String regionNodeName; + /** + * 实训结束时间 + */ + @ApiModelProperty("实训结束时间") + private Date trainingEndTime; + + /** + * 实训结束时间 + */ + @ApiModelProperty("实训开始时间") + private Date trainingStartTime; + + /** + * 实训门店ID + */ + @ApiModelProperty("实训门店ID") + private String trainingStoreId; + + /** + * 实训门店ID + */ + @ApiModelProperty("实训门店名称") + private String trainingStoreName; + + /** + * 带教老师ID + */ + @ApiModelProperty("带教老师ID") + private String trainingTeacherUserId; + + /** + * 带教老师ID + */ + @ApiModelProperty("带教老师名称") + private String trainingTeacherUserName; + + /** + * 实操考核人员ID + */ + @ApiModelProperty("实操考核人员ID") + private String practicalAssessmentUserId; + + @ApiModelProperty("实操考核人员名称") + private String practicalAssessmentUserName; + + /** + * 预计考核时间 + */ + @ApiModelProperty("预计考核时间") + private Date estimatedAssessmentTime; + + /** + * 实际考核时间 + */ + @ApiModelProperty("实际考核时间") + private Date actualAssessmentTime; + + @ApiModelProperty("登记时间") + private Date registerTime; + + @ApiModelProperty("是否分配 0-待分配 1-已分配") + private Boolean assignFlag; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/EmployeeUserTrainingVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/EmployeeUserTrainingVO.java new file mode 100644 index 000000000..6f8479d6b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/EmployeeUserTrainingVO.java @@ -0,0 +1,88 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * @author byd + * @date 2024-04-30 10:53 + */ +@Data +public class EmployeeUserTrainingVO { + + @ApiModelProperty("id") + private Long id; + + @ApiModelProperty("名字") + private String username; + + @ApiModelProperty("手机号") + private String mobile; + + @ApiModelProperty("身份证号") + private String idCard; + + @ApiModelProperty("区域id") + private Long regionId; + + @ApiModelProperty("角色id 170000000-店长 160000000-店员") + private Long roleId; + + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("店铺名称") + private String shopName; + + @ApiModelProperty("培训id") + private Long employeeTrainingId; + + @ApiModelProperty("考核项数") + private Integer assessmentNum; + + @ApiModelProperty("考核总项数") + private Integer assessmentTotalNum; + + @ApiModelProperty("实训开始时间") + private Date trainingStartTime; + /** + * 实训结束时间 + */ + @ApiModelProperty("实训结束时间") + private Date trainingEndTime; + + /** + * 实训门店ID + */ + @ApiModelProperty("实训门店ID") + private String trainingStoreId; + + /** + * 实训门店ID + */ + @ApiModelProperty("实训门店名称") + private String trainingStoreName; + + /** + * 带教老师ID + */ + @ApiModelProperty("带教老师ID") + private String trainingTeacherUserId; + + /** + * 带教老师ID + */ + @ApiModelProperty("带教老师名称") + private String trainingTeacherUserName; + + @ApiModelProperty("所属区域") + private String regionNodeName; + + + @ApiModelProperty("培训数据") + List templateDataList; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/Fitment/DecorationModelVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/Fitment/DecorationModelVO.java new file mode 100644 index 000000000..a33257395 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/Fitment/DecorationModelVO.java @@ -0,0 +1,36 @@ +package com.cool.store.vo.Fitment; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @Auther: WangShuo + * @Date: 2024/04/29/下午4:24 + * @Version 1.0 + * @注释: + */ +@Data +public class DecorationModelVO { + @ApiModelProperty("支付状态 45:待缴费 50:已缴费 55缴费失败") + private Byte payStatus; + @ApiModelProperty("付款人姓名/加盟商姓名") + private String payUserName; + @ApiModelProperty("付款账号") + private String payAccount; + @ApiModelProperty("付款截图") + private String payPic; + @ApiModelProperty("支行名称") + private String branchBankName; + @ApiModelProperty("开户行名称") + private String bankName; + @ApiModelProperty("缴纳金额") + private String amount; + @ApiModelProperty("缴纳时间") + private Date payTime; + @ApiModelProperty("上传时间") + private Date updateTime; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/Fitment/DecorationStageVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/Fitment/DecorationStageVO.java new file mode 100644 index 000000000..cb6c41d78 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/Fitment/DecorationStageVO.java @@ -0,0 +1,31 @@ +package com.cool.store.vo.Fitment; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; +import java.util.Date; + +/** + * @Auther: WangShuo + * @Date: 2024/04/30/上午10:08 + * @Version 1.0 + * @注释: + */ +@Data +public class DecorationStageVO { + @ApiModelProperty("阶段name") + private String shopSubStageName; + @ApiModelProperty("店铺子阶段") + private Integer shopSubStage; + @ApiModelProperty("装修阶段状态") + private Integer shopSubStageStatus; + @ApiModelProperty("创建时间") + private Date createDate; + @ApiModelProperty("计划开始时间") + private String planBeginDate; + @ApiModelProperty("计划结束时间") + private String planEndTDate; + @ApiModelProperty("实际完成时间") + private String actualEndDate; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/Fitment/DesignInfoVo.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/Fitment/DesignInfoVo.java new file mode 100644 index 000000000..220c7953a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/Fitment/DesignInfoVo.java @@ -0,0 +1,28 @@ +package com.cool.store.vo.Fitment; + +import com.cool.store.dto.decoration.BudgetDTO; +import com.cool.store.dto.decoration.ConstructionScheduleDTO; +import com.cool.store.dto.decoration.DesignSchemeDTO; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/04/28/下午3:37 + * @Version 1.0 + * @注释:设计阶段信息 + */ +@Data +public class DesignInfoVo { + @ApiModelProperty("平面图+施工图") + private List designScheme; + @ApiModelProperty("量房") + private ConstructionScheduleDTO measuringRoom; + @ApiModelProperty("预算") + private BudgetDTO proposedBookBudget; + @ApiModelProperty("阶段状态") + private Integer shopSubStageStatus; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/FoodLicenseVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/FoodLicenseVO.java new file mode 100644 index 000000000..2447bfca5 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/FoodLicenseVO.java @@ -0,0 +1,20 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class FoodLicenseVO { + @ApiModelProperty("经营者名称") + private String operatorName; + @ApiModelProperty("法人") + private String legalRepresentative; + @ApiModelProperty("经营场所") + private String businessAddress; + @ApiModelProperty("主体业态") + private String mainBusiness; + @ApiModelProperty("经营项目") + private String businessScope; + @ApiModelProperty("许可证编号") + private String licenceNumber; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/HyContentInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/HyContentInfoVO.java new file mode 100644 index 000000000..2a0a1aa06 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/HyContentInfoVO.java @@ -0,0 +1,50 @@ +package com.cool.store.vo; + +import com.cool.store.enums.ContentSubjectEnum; +import com.cool.store.enums.ContentTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class HyContentInfoVO { + + @ApiModelProperty("") + private Long id; + + @ApiModelProperty("内容标题") + private String contentTitle; + + @ApiModelProperty("栏目CODE") + private ContentSubjectEnum subject; + + @ApiModelProperty("类型 image-图文 video-视频") + private ContentTypeEnum contentType; + + @ApiModelProperty("封面URL") + private String cover; + + @ApiModelProperty("状态 0-启用 1-禁用") + private Integer status; + + @ApiModelProperty("创建时间") + private String createTime; + + @ApiModelProperty("更新时间") + private String updateTime; + + @ApiModelProperty("新建人ID") + private String createUserId; + + @ApiModelProperty("更新人ID") + private String updateUserId; + + @ApiModelProperty("更新人姓名") + private String updateUserName; + + @ApiModelProperty("更新人电话") + private String updateUserPhone; + + @ApiModelProperty("图文内容或者视频文件URL") + private String content; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/IdentityCardInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/IdentityCardInfoVO.java new file mode 100644 index 000000000..4307cec8c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/IdentityCardInfoVO.java @@ -0,0 +1,35 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class IdentityCardInfoVO { + + @ApiModelProperty("用户名") + private String username; + + @ApiModelProperty("地址") + private String liveAddress; + + @ApiModelProperty("出生日期") + private String birthdate; + + @ApiModelProperty("性别") + private String sex; + + @ApiModelProperty("身份证号") + private String idCard; + + @ApiModelProperty("民族") + private String nation; + + public IdentityCardInfoVO(String username, String liveAddress, String birthdate, String sex, String idCard, String nation) { + this.username = username; + this.liveAddress = liveAddress; + this.birthdate = birthdate; + this.sex = sex; + this.idCard = idCard; + this.nation = nation; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/IntendProcessTotalVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/IntendProcessTotalVO.java new file mode 100644 index 000000000..7deeb4321 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/IntendProcessTotalVO.java @@ -0,0 +1,44 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/2 14:46 + * @Version 1.0 + */ +@Data +public class IntendProcessTotalVO { + + @ApiModelProperty("预估完成天数") + private Integer totalDays; + @ApiModelProperty("预估完成时间") + private String completionTime; + @ApiModelProperty("意向加盟阶段集合") + private List intendProcessVOS; + +} + + + + + + + + + + + + + + + + + + + + + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/IntendProcessVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/IntendProcessVO.java new file mode 100644 index 000000000..107a8f4f9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/IntendProcessVO.java @@ -0,0 +1,26 @@ +package com.cool.store.vo; + +import com.cool.store.enums.WorkflowSubStageEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @Author suzhuhong + * @Date 2024/4/2 14:42 + * @Version 1.0 + */ +@Data +public class IntendProcessVO { + + @ApiModelProperty("意向加盟阶段编码") + private Integer code; + @ApiModelProperty("预期时间") + private String ExpectedTime; + @ApiModelProperty("实际时间") + private String ActualTime; + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/IsSubmitOpenNewShopVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/IsSubmitOpenNewShopVO.java new file mode 100644 index 000000000..aefaaa4c5 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/IsSubmitOpenNewShopVO.java @@ -0,0 +1,25 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: IsSubmitOpenNewShopVO + * @Description: + * @date 2024-05-11 11:22 + */ +@Data +public class IsSubmitOpenNewShopVO { + + @ApiModelProperty("是否可以开新店 true:可以开店 false:不能开新店") + private Boolean isSubmitOpenNewShop; + + @ApiModelProperty("审核状态 0待审核 1通过 2不通过") + private Integer auditResult; + + public IsSubmitOpenNewShopVO(Boolean isSubmitOpenNewShop, Integer auditResult) { + this.isSubmitOpenNewShop = isSubmitOpenNewShop; + this.auditResult = auditResult; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/LabelBaseInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/LabelBaseInfoVO.java new file mode 100644 index 000000000..79354d51f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/LabelBaseInfoVO.java @@ -0,0 +1,22 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/3/26 15:24 + * @Version 1.0 + */ +@Data +public class LabelBaseInfoVO { + + @ApiModelProperty("标签ID") + private Long labelId; + + @ApiModelProperty("标签名称") + private String labelName; + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/LabelGroupListVo.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/LabelGroupListVo.java new file mode 100644 index 000000000..c17c12106 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/LabelGroupListVo.java @@ -0,0 +1,34 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * @author Fun Li 2023/8/10 13:33 + * @version 1.0 + */ +@Data +public class LabelGroupListVo { + + @ApiModelProperty("标签组id") + private long id; + + @ApiModelProperty("标签组名称") + private String labelGroupName; + + @ApiModelProperty("编辑人姓名") + private String editName; + + @ApiModelProperty("编辑人电话") + private String editMobile; + + @ApiModelProperty("编辑时间") + private Date editDate; + + @ApiModelProperty("标签列表") + private List labelList; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/LabelGroupVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/LabelGroupVO.java new file mode 100644 index 000000000..c741ab911 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/LabelGroupVO.java @@ -0,0 +1,29 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class LabelGroupVO { + @ApiModelProperty(value = "标签组ID") + private Long id; + @ApiModelProperty(value = "标签组名称") + private String labelGroupName; + @ApiModelProperty(value = "标签组创建时间") + private Date groupCreateTime; + @ApiModelProperty(value = "标签列表") + private List labelList; + @Data + public static class LabelVO { + @ApiModelProperty(value = "标签ID") + private Long id; + @ApiModelProperty(value = "标签名称") + private String labelName; + @ApiModelProperty(value = "标签创建时间") + private Date labelCreateTime; + } +} + diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/LabelListVo.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/LabelListVo.java new file mode 100644 index 000000000..daabcdc7c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/LabelListVo.java @@ -0,0 +1,42 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @author Fun Li 2023/8/10 14:42 + * @version 1.0 + */ +@Data +public class LabelListVo { + + @ApiModelProperty(value = "标签名称") + private String labelName; + + @ApiModelProperty(value = "标签组名称") + private String labelGroupName; + + @ApiModelProperty(value = "编辑人姓名") + private String editName; + + @ApiModelProperty(value = "编辑人电话") + private String editMobile; + + @ApiModelProperty(value = "编辑时间") + private Date editDate; + + @ApiModelProperty(value = "标签id") + private Long id; + + @ApiModelProperty(value = "标签分组id") + private Long labelGroupId; + + @ApiModelProperty(value = "标签创建时间") + private Date labelCreateTime; + + @ApiModelProperty(value = "标签组创建时间") + private Date groupCreateTime; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/LineAuditInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/LineAuditInfoVO.java new file mode 100644 index 000000000..409425f48 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/LineAuditInfoVO.java @@ -0,0 +1,49 @@ +package com.cool.store.vo; + +import com.cool.store.entity.LineAuditInfoDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.*; +import java.util.Date; +import java.util.Objects; + +@Data +public class LineAuditInfoVO { + + @ApiModelProperty("审核id") + private Long auditId; + + @ApiModelProperty("结果类型 0通过,1拒绝,2结束跟进") + private Integer resultType; + + @ApiModelProperty("通过原因") + private String passReason; + + @ApiModelProperty("公开拒绝原因") + private String rejectPublicReason; + + @ApiModelProperty("真实拒绝原因") + private String rejectRealReason; + + @ApiModelProperty("明文件或凭证") + private String certifyFile; + + @ApiModelProperty("审批时间") + private Date createTime; + + public static LineAuditInfoVO convertVO(LineAuditInfoDO auditInfo) { + if(Objects.isNull(auditInfo)){ + return null; + } + LineAuditInfoVO result = new LineAuditInfoVO(); + result.setAuditId(auditInfo.getId()); + result.setResultType(auditInfo.getResultType()); + result.setPassReason(auditInfo.getPassReason()); + result.setRejectPublicReason(auditInfo.getRejectPublicReason()); + result.setRejectRealReason(auditInfo.getRejectRealReason()); + result.setCertifyFile(auditInfo.getCertifyFile()); + result.setCreateTime(auditInfo.getCreateTime()); + return result; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/LineInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/LineInfoVO.java new file mode 100644 index 000000000..1cf9ad017 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/LineInfoVO.java @@ -0,0 +1,225 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import java.util.Date; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/3/25 13:46 + * @Version 1.0 + */ +@Data +public class LineInfoVO { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * partner_user_info.partner_id + */ + @Column(name = "partner_id") + private String partnerId; + + @Column(name = "region_id") + @ApiModelProperty("战区Id") + private Long regionId; + + @ApiModelProperty("战区名称") + private String regionName; + + @ApiModelProperty("大区ID") + private Long largeRegionId; + + @ApiModelProperty("大区ID名称") + private String largeRegionName; + + /** + * 手机号 + */ + @ApiModelProperty("手机号") + private String mobile; + + /** + * 申请人姓名 + */ + @ApiModelProperty("申请人姓名") + private String username; + + /** + * 性别0未选,1男,2女 + */ + @ApiModelProperty("性别0未选,1男,2女") + private String sex; + + /** + * 意向开店区域 + */ + @Column(name = "want_shop_area_id") + @ApiModelProperty("意向开店区域") + private Long wantShopAreaId; + @ApiModelProperty("意向开店区域名称") + private String wantShopAreaName; + + /** + * 居住地址 + */ + @Column(name = "live_address") + @ApiModelProperty("居住地址") + private String liveAddress; + + /** + * 流程阶段:1意向加盟;2新店进展; + */ + @Column(name = "workflow_stage") + @ApiModelProperty("流程阶段:1意向加盟;2新店进展;") + private Integer workflowStage; + + @ApiModelProperty("加盟身份 1个人加盟 2企业加盟") + private Integer joinType; + + /** + * 流程子阶段 + */ + @Column(name = "workflow_sub_stage") + @ApiModelProperty("流程子阶段") + private Integer workflowSubStage; + + /** + * 流程子阶段状态 + */ + @Column(name = "workflow_sub_stage_status") + @ApiModelProperty("流程子阶段状态") + private Integer workflowSubStageStatus; + + @ApiModelProperty("意向开店数量") + private Integer wantShopNum; + + /** + * 待选址铺位 + */ + @Column(name = "select_site_num") + @ApiModelProperty("待选址铺位") + private Integer selectSiteNum; + + /** + * 筹备中铺位 + */ + @Column(name = "prepare_shop_num") + @ApiModelProperty("筹备中铺位") + private Integer prepareShopNum; + + /** + * 营业中铺位 + */ + @Column(name = "open_shop_num") + @ApiModelProperty("营业中铺位") + private Integer openShopNum; + + /** + * 线索来源 + */ + @Column(name = "line_source") + @ApiModelProperty("线索来源") + private Integer lineSource; + + @ApiModelProperty("线索来源") + private String lineSourceName; + + /** + * 招商经理 + */ + @ApiModelProperty("招商经理") + private String investmentManager; + + @ApiModelProperty("招商经理名称") + private String investmentManagerName; + + @ApiModelProperty("招商经理手机号") + private String investmentManagerMobile; + + /** + * 拓展经理 + */ + @Column(name = "development_manager") + @ApiModelProperty("拓展经理") + private String developmentManager; + + /** + * 一审面试官 + */ + @Column(name = "first_interviewer") + @ApiModelProperty("一审面试官") + private String firstInterviewer; + + /** + * 二审面试官 + */ + @Column(name = "second_interviewer") + @ApiModelProperty("二审面试官") + private String secondInterviewer; + + /** + * 用户画像 + */ + @Column(name = "user_portrait") + @ApiModelProperty("用户画像") + private List userPortraitList; + + /** + * 是否是加盟商:0.否 1.是 + */ + @Column(name = "join_status") + @ApiModelProperty("0-线索 1-蓄水池 2-加盟商") + private Integer joinStatus; + + /** + * 0.公海 1.私海 2黑名单 + */ + @Column(name = "line_status") + @ApiModelProperty("0.公海 1.私海 2黑名单") + private Integer lineStatus; + + /** + * 创建时间 + */ + @Column(name = "create_time") + @ApiModelProperty("创建时间") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + @ApiModelProperty("更新时间") + private Date updateTime; + + /** + * 创建人 + */ + @Column(name = "create_user_id") + @ApiModelProperty("创建人") + private String createUserId; + + /** + * 更新人 + */ + @Column(name = "update_user_id") + @ApiModelProperty("更新人") + private String updateUserId; + + @ApiModelProperty("公开拒绝原因") + private String rejectPublicReason; + + @ApiModelProperty("加盟商编码") + private String partnerNum; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/LineListVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/LineListVO.java new file mode 100644 index 000000000..44467dc95 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/LineListVO.java @@ -0,0 +1,36 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/3/27 16:13 + * @Version 1.0 + */ +@Data +public class LineListVO extends BaseInfoVO{ + + @ApiModelProperty("招商经理名称") + private String investmentManagerUserName; + + @ApiModelProperty("线索来源名称") + private String lineSourceName; + + @ApiModelProperty("创建时间") + private String createTime; + + @ApiModelProperty("更新时间") + private String updateTime; + + @ApiModelProperty("更新人名称") + private String updateUserName; + + public LineListVO(){} + + public LineListVO(BaseInfoVO baseInfoVO) { + super(baseInfoVO); + } + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/LinePayVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/LinePayVO.java new file mode 100644 index 000000000..45579c925 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/LinePayVO.java @@ -0,0 +1,81 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @Author wxp + * @Date 2024/3/25 13:46 + * @Version 1.0 + */ +@Data +public class LinePayVO { + + @ApiModelProperty("") + private Long id; + + @ApiModelProperty("xfsg_user_info.partner_id") + private String partnerId; + + @ApiModelProperty("加盟商姓名") + private String partnerName; + + /** + * 手机号 + */ + @ApiModelProperty("手机号") + private String mobile; + + @ApiModelProperty("line_info.id") + private Long lineId; + + @ApiModelProperty("支付状态 45:待缴费 50:已缴费 55缴费失败") + private Byte payStatus; + + @ApiModelProperty("支付方式 1微信 2银行转账") + private Byte payType; + + @ApiModelProperty("付款人姓名") + private String payUserName; + + @ApiModelProperty("付款账号") + private String payAccount; + + @ApiModelProperty("开户行code") + private String bankCode; + + @ApiModelProperty("开户行名称") + private String bankName; + + @ApiModelProperty("支行code") + private String branchBankCode; + + @ApiModelProperty("支行名称") + private String branchBankName; + + @ApiModelProperty("缴纳时间") + private Date payTime; + + @ApiModelProperty("付款截图") + private String payPic; + + @ApiModelProperty("承诺书图片") + private String promisePic; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; + + @ApiModelProperty("创建人") + private String createUserId; + + @ApiModelProperty("更新人") + private String updateUserId; + @ApiModelProperty("缴费金额") + private String amount; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/LinePointBaseInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/LinePointBaseInfoVO.java new file mode 100644 index 000000000..e584b6e77 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/LinePointBaseInfoVO.java @@ -0,0 +1,120 @@ +package com.cool.store.vo; + +import com.cool.store.entity.HyOpenAreaInfoDO; +import com.cool.store.entity.LineInfoDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: LineUsernameAndMobileVO + * @Description: + * @date 2024-04-07 14:39 + */ +@Data +public class LinePointBaseInfoVO { + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("用户名") + private String username; + + @ApiModelProperty("手机号") + private String mobile; + + @ApiModelProperty("区域名称") + private String areaName; + + @ApiModelProperty("区域路径") + private String areaPath; + + @ApiModelProperty("用户标签") + private List userPortraitList; + + @ApiModelProperty("招商经理") + private String investmentManagerUsername; + + @ApiModelProperty("已推门店") + private Integer recommendShopNum; + + @ApiModelProperty("已选门店") + private Integer selectedShopNum; + + @ApiModelProperty("意向开店数量") + private Integer wantShopNum; + + public LinePointBaseInfoVO(Long lineId, String username, String mobile) { + this.lineId = lineId; + this.username = username; + this.mobile = mobile; + } + + public static List convertList(List lineList, Map userNameMap, Map userPortraitMap, Map cityMap, Map recommendShopNumMap, Map selectedShopNumMap){ + List resultList = new ArrayList<>(); + for (LineInfoDO lineInfo : lineList) { + LinePointBaseInfoVO linePointBaseInfo = new LinePointBaseInfoVO(lineInfo.getId(), lineInfo.getUsername(), lineInfo.getMobile()); + linePointBaseInfo.setWantShopNum(lineInfo.getWantShopNum()); + String username = userNameMap.get(lineInfo.getInvestmentManager()); + linePointBaseInfo.setInvestmentManagerUsername(username); + HyOpenAreaInfoDO areaInfo = cityMap.get(lineInfo.getWantShopAreaId()); + if(Objects.nonNull(areaInfo)){ + linePointBaseInfo.setAreaName(areaInfo.getAreaName()); + linePointBaseInfo.setAreaPath(areaInfo.getAreaPath().replace("/", "").trim()); + } + linePointBaseInfo.setRecommendShopNum(recommendShopNumMap.get(lineInfo.getId())); + linePointBaseInfo.setSelectedShopNum(selectedShopNumMap.get(lineInfo.getId())); + if(StringUtils.isNotBlank(lineInfo.getUserPortrait())){ + List userPortraitList = new ArrayList<>(); + String[] parts = lineInfo.getUserPortrait().split(","); + for (String part : parts) { + String trimmedPart = part.trim(); + if (StringUtils.isNotBlank(trimmedPart)) { + String s = userPortraitMap.get(Long.valueOf(part)); + if(StringUtils.isNotBlank(s)){ + userPortraitList.add(s); + } + } + } + linePointBaseInfo.setUserPortraitList(userPortraitList); + } + resultList.add(linePointBaseInfo); + } + return resultList; + } + + + public static LinePointBaseInfoVO convert(LineInfoDO lineInfo, String username, Map userPortraitMap, HyOpenAreaInfoDO cityArea, Map recommendShopNumMap, Map selectedShopNumMap){ + LinePointBaseInfoVO linePointBaseInfo = new LinePointBaseInfoVO(lineInfo.getId(), lineInfo.getUsername(), lineInfo.getMobile()); + linePointBaseInfo.setWantShopNum(lineInfo.getWantShopNum()); + linePointBaseInfo.setInvestmentManagerUsername(username); + if(Objects.nonNull(cityArea)){ + linePointBaseInfo.setAreaName(cityArea.getAreaName()); + linePointBaseInfo.setAreaPath(cityArea.getAreaPath().replace("/", "").trim()); + } + linePointBaseInfo.setRecommendShopNum(recommendShopNumMap.get(lineInfo.getId())); + linePointBaseInfo.setSelectedShopNum(selectedShopNumMap.get(lineInfo.getId())); + if(StringUtils.isNotBlank(lineInfo.getUserPortrait())){ + List userPortraitList = new ArrayList<>(); + String[] parts = lineInfo.getUserPortrait().split(","); + for (String part : parts) { + String trimmedPart = part.trim(); + if (StringUtils.isNotBlank(trimmedPart)) { + String s = userPortraitMap.get(Long.valueOf(part)); + if(StringUtils.isNotBlank(s)){ + userPortraitList.add(s); + } + } + } + linePointBaseInfo.setUserPortraitList(userPortraitList); + } + return linePointBaseInfo; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/NewStoreOpeningVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/NewStoreOpeningVO.java new file mode 100644 index 000000000..a7b863c79 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/NewStoreOpeningVO.java @@ -0,0 +1,34 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @author byd + */ +@Data +public class NewStoreOpeningVO { + + @ApiModelProperty("id") + private Long id; + + /** + * line_info.id + */ + @ApiModelProperty("店铺id") + private Long shopId; + + /** + * 待办事项 + */ + @ApiModelProperty("待办事项") + private String todoItem; + + /** + * 完成时间 + */ + @ApiModelProperty("完成时间") + private Date completionTime; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenAcceptanceInfoListVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenAcceptanceInfoListVO.java new file mode 100644 index 000000000..1bffda6a6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenAcceptanceInfoListVO.java @@ -0,0 +1,58 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @author byd + * @date 2024-04-22 17:34 + */ +@Data +public class OpenAcceptanceInfoListVO { + + @ApiModelProperty("开业验收id") + private Long openAcceptanceInfoId; + @ApiModelProperty("店铺id") + private Long shopId; + @ApiModelProperty("门店名称") + private String shopName; + @ApiModelProperty("门店代码") + private String storeNum; + @ApiModelProperty("开店负责人id") + private String shopManagerUserId; + @ApiModelProperty("开店负责人名称") + private String shopManagerUserName; + @ApiModelProperty("督导id") + private String supervisorUserId; + @ApiModelProperty("督导名称") + private String supervisorUserName; + @ApiModelProperty("加盟商姓名") + private String partnerName; + @ApiModelProperty("手机号码") + private String partnerMobile; + + @ApiModelProperty("战区Id") + private Long regionId; + + @ApiModelProperty("所属区域") + private String regionNodeName; + + @ApiModelProperty("计划开业时间") + private Date planOpenTime; + @ApiModelProperty("新店开业结束时间") + private Date planOpenEndTime; + @ApiModelProperty("验收状态 0:未验收 1:已验收") + private String acceptanceStatus; + @ApiModelProperty("招商经理id") + private String investmentManager; + @ApiModelProperty("招商经理名称") + private String investmentManagerName; + @ApiModelProperty("验收时间") + private Date acceptanceTime; + @ApiModelProperty("验收人id") + private String acceptanceUserId; + @ApiModelProperty("验收人名称") + private String acceptanceUserName; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenAreaSingleVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenAreaSingleVO.java new file mode 100644 index 000000000..38c592ef7 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenAreaSingleVO.java @@ -0,0 +1,25 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2023/6/14 11:28 + * @Version 1.0 + */ +@Data +@ApiModel +public class OpenAreaSingleVO { + + @ApiModelProperty("ID") + private Long id; + + @ApiModelProperty("parent.id") + private Long parentId; + + @ApiModelProperty("区域名称") + private String areaName; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenAreaTreeVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenAreaTreeVO.java new file mode 100644 index 000000000..281d0794a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenAreaTreeVO.java @@ -0,0 +1,134 @@ +package com.cool.store.vo; + +import com.cool.store.entity.HyOpenAreaInfoDO; +import com.cool.store.enums.AreaStatusEnum; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2023/6/2 10:55 + * @Version 1.0 + */ +@Data +@ApiModel +@Slf4j +public class OpenAreaTreeVO { + + + @ApiModelProperty("ID") + private Long id; + + @ApiModelProperty("parent.id") + private Long parentId; + + @ApiModelProperty("区域名称") + private String areaName; + + @ApiModelProperty("区域路径") + private String areaPath; + + @ApiModelProperty("状态 open-开放 keyOpen-重点开放 notOpen-未开放 saturated-已饱和") + private String areaStatus; + + private String backgroundBanner; + + private String detailBanner; + + @ApiModelProperty("子区域") + private List childNode; + + + public static List convertTree(List allOpenArea, String keyword, Boolean applyFlag){ + long startTime = System.currentTimeMillis(); + List firstArea = allOpenArea.stream().filter(o -> Objects.isNull(o.getParentId())).collect(Collectors.toList()); + Map> openAreaParentMap = allOpenArea.stream().distinct().filter(o->Objects.nonNull(o.getParentId())).collect(Collectors.groupingBy(k -> k.getParentId())); + List allTree = new ArrayList<>(); + for (HyOpenAreaInfoDO openAreaInfo : firstArea) { + OpenAreaTreeVO node = copyProperties(openAreaInfo); + List childList = dealChild(openAreaInfo, openAreaParentMap); + node.setChildNode(childList); + allTree.add(node); + } + //不需要过滤 直接返回 + if(StringUtils.isBlank(keyword) && (Objects.isNull(applyFlag) || !applyFlag)){ + return allTree; + } + log.info("1#耗时:{}", System.currentTimeMillis() - startTime); + Map> childMap = allTree.stream().collect(Collectors.toMap(k -> k.getId(), v -> v.getChildNode())); + List filterList = allOpenArea.stream().filter(o -> (StringUtils.isBlank(keyword) || o.getAreaPath().contains(keyword)) + && (Objects.isNull(applyFlag) || AreaStatusEnum.OPEN.getCode().equals(o.getAreaStatus()) || AreaStatusEnum.OPEN.getCode().equals(o.getAreaStatus()))) + .collect(Collectors.toList()); + Map openAreaMap = allOpenArea.stream().collect(Collectors.toMap(k -> k.getId(), Function.identity())); + List filterAndParentList = new ArrayList<>(); + //向上处理节点 + for (HyOpenAreaInfoDO openAreaInfo : filterList) { + filterAndParentList.add(openAreaInfo); + while (Objects.nonNull(openAreaInfo) && Objects.nonNull(openAreaInfo.getParentId())){ + openAreaInfo = openAreaMap.get(openAreaInfo.getParentId()); + if(Objects.nonNull(openAreaInfo) && !filterAndParentList.contains(openAreaInfo)){ + filterAndParentList.add(openAreaInfo); + } + } + } + log.info("2#耗时:{}", System.currentTimeMillis() - startTime); + List resultList = new ArrayList<>(); + List filterFirstArea = filterAndParentList.stream().filter(o -> Objects.isNull(o.getParentId())).collect(Collectors.toList()); + Map> filterOpenAreaParentMap = filterAndParentList.stream().filter(Objects::nonNull).filter(o->Objects.nonNull(o.getParentId())).collect(Collectors.groupingBy(k -> k.getParentId())); + for (HyOpenAreaInfoDO openAreaInfo : filterFirstArea) { + Long id = openAreaInfo.getId(); + OpenAreaTreeVO node = copyProperties(openAreaInfo); + List childList = dealChild(openAreaInfo, filterOpenAreaParentMap); + if(CollectionUtils.isEmpty(childList)){ + childList = childMap.get(node.getId()); + } + node.setChildNode(childList); + resultList.add(node); + } + log.info("2#耗时:{}", System.currentTimeMillis() - startTime); + return resultList; + } + + public static List dealChild(HyOpenAreaInfoDO areaInfo, Map> openAreaParentMap){ + List childList = openAreaParentMap.get(areaInfo.getId()); + if(CollectionUtils.isEmpty(childList)){ + return Lists.newArrayList(); + } + List resultList = new ArrayList<>(); + for (HyOpenAreaInfoDO hyOpenAreaInfo : childList) { + OpenAreaTreeVO openAreaTree = copyProperties(hyOpenAreaInfo); + openAreaTree.setChildNode(dealChild(hyOpenAreaInfo, openAreaParentMap)); + resultList.add(openAreaTree); + } + return resultList; + } + + /** + * 属性处理 + * @param area + * @return + */ + public static OpenAreaTreeVO copyProperties(HyOpenAreaInfoDO area){ + OpenAreaTreeVO result = new OpenAreaTreeVO(); + result.setId(area.getId()); + result.setParentId(area.getParentId()); + result.setAreaName(area.getAreaName()); + result.setAreaPath(area.getAreaPath()); + result.setAreaStatus(area.getAreaStatus()); + result.setBackgroundBanner(area.getBackgroundBanner()); + result.setDetailBanner(area.getDetailBanner()); + return result; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenAreaVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenAreaVO.java new file mode 100644 index 000000000..2474265d2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenAreaVO.java @@ -0,0 +1,55 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * 开放城市VO + * @Author suzhuhong + * @Date 2023/5/29 16:27 + * @Version 1.0 + */ +@Data +@ApiModel +public class OpenAreaVO { + + @ApiModelProperty("ID") + private Long id; + + @ApiModelProperty("parent.id") + private Long parentId; + + @ApiModelProperty("区域名称") + private String areaName; + + @ApiModelProperty("区域路径") + private String areaPath; + + @ApiModelProperty("背景图URL 重点区域时候必填") + private String backgroundBanner; + + @ApiModelProperty("详情banner URL 重点区域时候必填") + private String detailBanner; + + @ApiModelProperty("状态 open-开放 keyOpen-重点开放 notOpen-未开放 saturated-已饱和") + private String areaStatus; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private String updateTime; + + @ApiModelProperty("更新人") + private String updateUserId; + + @ApiModelProperty("更新人名称") + private String updateUserName; + + @ApiModelProperty("重点开放城市状态 0-开启 1-禁用") + private Integer keyOpenStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenPreparationFlushVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenPreparationFlushVO.java new file mode 100644 index 000000000..a94bc8c88 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenPreparationFlushVO.java @@ -0,0 +1,21 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Auther: WangShuo + * @Date: 2024/04/25/下午6:58 + * @Version 1.0 + * @注释: + */ +@Data +public class OpenPreparationFlushVO { + + private Long shopId; + @ApiModelProperty("开业运营方案阶段状态") + private Integer openPlanState; + @ApiModelProperty("首批订货金阶段状态") + private Integer firstOderState; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenProvinceVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenProvinceVO.java new file mode 100644 index 000000000..3b0820c87 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/OpenProvinceVO.java @@ -0,0 +1,25 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2023/5/29 19:46 + * @Version 1.0 + */ +@Data +@ApiModel +public class OpenProvinceVO { + + @ApiModelProperty("可申请省份") + List applyProvinceList; + + @ApiModelProperty("可预约省份") + List reservationProvinceList; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/OpeningOperationPlanListVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/OpeningOperationPlanListVO.java new file mode 100644 index 000000000..e321410c6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/OpeningOperationPlanListVO.java @@ -0,0 +1,53 @@ +package com.cool.store.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @Auther: WangShuo + * @Date: 2024/04/23/上午10:47 + * @Version 1.0 + * @注释: 运营方案审核 + */ +@Data +public class OpeningOperationPlanListVO { + + @ApiModelProperty("门店id") + private Long shopId; + + @ApiModelProperty("门店名称") + private String shopName; + + @ApiModelProperty("门店代码") + private String storeNum; + + @ApiModelProperty("开店负责人") + private String shopManagerName; + + @ApiModelProperty("加盟商姓名") + private String partnerName; + + @ApiModelProperty("手机号码") + private String mobile; + + @ApiModelProperty("所属区域") + private String region; + + @ApiModelProperty("招商经理名字") + private String investmentManagerName; + + @ApiModelProperty("督导") + private String supervisorName; + + @ApiModelProperty("提交申请时间") + private Date submissionTime; + + @ApiModelProperty("审核结果,0待审核,1通过,2拒绝") + private Integer resultType; + + @ApiModelProperty("阶段状态") + private Integer subStageStatus; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/OpeningOperationPlanVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/OpeningOperationPlanVO.java new file mode 100644 index 000000000..da09dc7ab --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/OpeningOperationPlanVO.java @@ -0,0 +1,68 @@ +package com.cool.store.vo; + +import com.cool.store.dto.openPreparation.UserNameDTO; +import com.cool.store.entity.OpeningOperationPlanDO; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/04/22/下午7:58 + * @Version 1.0 + * @注释: + */ +@Data +public class OpeningOperationPlanVO { + + @ApiModelProperty("门店name") + private String shopName; + @ApiModelProperty("调研结果") + private String surveyResult; + + @ApiModelProperty("调研结果url") + private String surveyResultUrl; + + @ApiModelProperty("活动主题") + private String activityTheme; + + @ApiModelProperty("活动主题url") + private String activityThemeUrl; + + @ApiModelProperty("筹备人员name") + private List preparationUsers; + + @ApiModelProperty("是否完成排车路线") + private Byte routeCompleted; + + @ApiModelProperty("提交时间") + private Date submissionTime; + + @ApiModelProperty("提交人") + private String submittedUserId; + @ApiModelProperty("提交人名字") + private String submittedUserName; + + @ApiModelProperty("通过原因") + private String passReason; + + @ApiModelProperty("审核结果,0待审核,1通过,2拒绝") + private Integer resultType; + + public OpeningOperationPlanVO(OpeningOperationPlanDO openingOperationPlanDO) { + + this.resultType = openingOperationPlanDO.getResultType(); + this.submittedUserId = openingOperationPlanDO.getSubmittedUserId(); + this.submissionTime = openingOperationPlanDO.getSubmissionTime(); + this.routeCompleted = openingOperationPlanDO.getRouteCompleted(); + this.activityThemeUrl = openingOperationPlanDO.getActivityThemeUrl(); + this.surveyResultUrl = openingOperationPlanDO.getSurveyResultUrl(); + this.activityTheme = openingOperationPlanDO.getActivityTheme(); + this.surveyResult = openingOperationPlanDO.getSurveyResult(); + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerBaseInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerBaseInfoVO.java new file mode 100644 index 000000000..dfa54d416 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerBaseInfoVO.java @@ -0,0 +1,109 @@ +package com.cool.store.vo; + +import com.cool.store.entity.LineInfoDO; +import com.cool.store.entity.MemberQuestionDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.Objects; + +@Data +public class PartnerBaseInfoVO { + + private Long id; + + private String partnerId; + + private Long lineId; + + @ApiModelProperty("加盟身份 1个人加盟 2企业加盟") + private Integer joinType; + @ApiModelProperty("姓名") + private String userName; + @ApiModelProperty("手机号") + private String mobile; + @ApiModelProperty("1男 2女") + private Integer sex; + @ApiModelProperty("意向加盟区域") + private String area; + @ApiModelProperty("意向区域编码") + private String areaCode; + @ApiModelProperty("常驻区域详细地址(居住地址)") + private String liveAddress; + + @ApiModelProperty("线索审核信息id") + private Long auditId; + @ApiModelProperty("职业状态 1:在职 2:个体 3:自己开公司 0:待业") + private Integer careerStatus; + @ApiModelProperty("教育程度 1:小学 2:初中 3:高中 4大学及以上") + private Integer educationLevel; + @ApiModelProperty("家庭年收入 1:10-20万 2:20-30万 3:30-50万 4:50万以上") + private Integer annualIncome; + @ApiModelProperty("是否有合伙人 1:是 0:否") + private Integer hasPartner; + @ApiModelProperty("资金来源 1:自有资金 2:合伙资金 3:借贷") + private Integer capitalSource; + @ApiModelProperty("经营方式 1:自己独立经营 2:和家人一起经营 3:和合伙人一起经营 4:只投资让他人经营") + private Integer businessMode; + @ApiModelProperty("是否有加盟品牌经营的经验 1:无 2:单店经验 3:多店经验 4:多店连锁经验") + private Integer joinExperience; + @ApiModelProperty("是否有水果行业经营的经验 1:无 2:单店经验 3:多店经验 4:多店连锁经验") + private Integer fruitIndustryExperience; + @ApiModelProperty("店铺情况 1:自有店铺 2:自有意向店铺 3:无意向店铺" ) + private Integer storeCondition; + @ApiModelProperty("预期回本的最长周期 1:1年半以上 2:1年半内 3:1年内 4:半年内") + private Integer paybackPeriod; + @ApiModelProperty("是否严格遵守管理标准 1:是 2:否") + private Integer followsManagementStandard; + @ApiModelProperty("是否能参加认证培训 1:是 2:否") + private Integer canTraining; + + private Date createTime; + + private Date updateTime; + + private Integer deleted; + + + @ApiModelProperty("公开拒绝原因") + private String rejectPublicReason; + + + + + public static PartnerBaseInfoVO from(MemberQuestionDO memberQuestionDO, LineInfoDO lineInfoDO) { + if (Objects.isNull(memberQuestionDO) && Objects.isNull(lineInfoDO)) { + return null; + } + PartnerBaseInfoVO partnerBaseInfoVO = new PartnerBaseInfoVO(); + // MemberQuestionDO + partnerBaseInfoVO.setPartnerId(memberQuestionDO.getPartnerId()); + partnerBaseInfoVO.setAuditId(memberQuestionDO.getAuditId()); + partnerBaseInfoVO.setCareerStatus(memberQuestionDO.getCareerStatus()); + partnerBaseInfoVO.setEducationLevel(memberQuestionDO.getEducationLevel()); + partnerBaseInfoVO.setAnnualIncome(Integer.valueOf(memberQuestionDO.getAnnualIncome())); + partnerBaseInfoVO.setHasPartner(memberQuestionDO.getHasPartner()); + partnerBaseInfoVO.setCapitalSource(memberQuestionDO.getCapitalSource()); + partnerBaseInfoVO.setBusinessMode(memberQuestionDO.getBusinessMode()); + partnerBaseInfoVO.setJoinExperience(memberQuestionDO.getJoinExperience()); + partnerBaseInfoVO.setFruitIndustryExperience(memberQuestionDO.getFruitIndustryExperience()); + partnerBaseInfoVO.setStoreCondition(Integer.valueOf(memberQuestionDO.getStoreCondition())); + partnerBaseInfoVO.setPaybackPeriod(Integer.valueOf(memberQuestionDO.getPaybackPeriod())); + partnerBaseInfoVO.setFollowsManagementStandard(memberQuestionDO.getFollowsManagementStandard()); + partnerBaseInfoVO.setCanTraining(memberQuestionDO.getCanTraining()); + partnerBaseInfoVO.setJoinType(memberQuestionDO.getJoinType()); + //LineInfoDO + partnerBaseInfoVO.setId(lineInfoDO.getId()); + partnerBaseInfoVO.setPartnerId(lineInfoDO.getPartnerId()); + partnerBaseInfoVO.setUserName(lineInfoDO.getUsername()); + partnerBaseInfoVO.setMobile(lineInfoDO.getMobile()); + partnerBaseInfoVO.setLiveAddress(lineInfoDO.getLiveAddress()); + partnerBaseInfoVO.setLineId(lineInfoDO.getId()); + partnerBaseInfoVO.setSex(Integer.valueOf(lineInfoDO.getSex())); + partnerBaseInfoVO.setAreaCode(String.valueOf(lineInfoDO.getWantShopAreaId())); + return partnerBaseInfoVO; + } + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerListVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerListVO.java new file mode 100644 index 000000000..6591751ef --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerListVO.java @@ -0,0 +1,47 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/4/1 11:30 + * @Version 1.0 + */ +@Data +public class PartnerListVO extends BaseInfoVO{ + + @ApiModelProperty("招商经理名称") + private String investmentManagerUserName; + + @ApiModelProperty("线索来源名称") + private String lineSourceName; + + @ApiModelProperty("1-蓄水池 2-加盟商") + private Integer joinStatus; + + @ApiModelProperty("扩展经理名称") + private String developmentManagerUserName; + + @ApiModelProperty("加盟时间") + private String joinTime; + + @ApiModelProperty("更新时间") + private String updateTime; + + @ApiModelProperty("更新人名称") + private String updateUserName; + + private Integer wantShopNum; + + private String partnerNum; + + public PartnerListVO(){} + + public PartnerListVO(BaseInfoVO baseInfoVO) { + super(baseInfoVO); + } + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerOpenNewShopDetailVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerOpenNewShopDetailVO.java new file mode 100644 index 000000000..6ddd0e012 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerOpenNewShopDetailVO.java @@ -0,0 +1,45 @@ +package com.cool.store.vo; + +import com.cool.store.entity.OpenNewShopRecordDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: PartnerOpenNewShopDetailVO + * @Description:加盟商开新店申请详情 + * @date 2024-05-10 10:04 + */ +@Data +public class PartnerOpenNewShopDetailVO { + + @ApiModelProperty("记录id") + private Long recordId; + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("新开意向店铺数量") + private Integer newWantShopNum; + + @ApiModelProperty("现有资金") + private Integer fund; + + @ApiModelProperty("审核结果 0通过,1拒绝") + private Integer auditResult; + + public static PartnerOpenNewShopDetailVO convert(OpenNewShopRecordDO openNewShopRecord) { + if(Objects.isNull(openNewShopRecord)){ + return null; + } + PartnerOpenNewShopDetailVO result = new PartnerOpenNewShopDetailVO(); + result.setRecordId(openNewShopRecord.getId()); + result.setLineId(openNewShopRecord.getLineId()); + result.setNewWantShopNum(openNewShopRecord.getNewWantShopNum()); + result.setFund(openNewShopRecord.getFund()); + result.setAuditResult(openNewShopRecord.getAuditResult()); + return result; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerOpenNewShopPageVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerOpenNewShopPageVO.java new file mode 100644 index 000000000..caa4b22ee --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerOpenNewShopPageVO.java @@ -0,0 +1,99 @@ +package com.cool.store.vo; + +import com.cool.store.dto.partner.PartnerOpenNewShopPageDTO; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * @Author suzhuhong + * @Date 2024/4/1 11:30 + * @Version 1.0 + */ +@Data +public class PartnerOpenNewShopPageVO { + + @ApiModelProperty("记录id") + private Long recordId; + + @ApiModelProperty("线索ID") + private Long lineId; + + @ApiModelProperty("加盟商编号") + private String partnerNum; + + @ApiModelProperty("线索名称") + private String username; + + @ApiModelProperty("手机号") + private String mobile; + + @ApiModelProperty("意向加盟区域") + private String wantShopAreaName; + + @ApiModelProperty("线索标签") + private List userPortraitList; + + @ApiModelProperty("意向开店数量") + private Integer wantShopNum; + + @ApiModelProperty("扩展经理名称") + private String developmentManagerUserName; + + @ApiModelProperty("线索来源名称") + private String lineSourceName; + + @ApiModelProperty("加盟时间") + private Date joinTime; + + @ApiModelProperty("审核状态 0待审核 1通过 2不通过") + private Integer auditResult; + + public static List convertList(List list, Map joinTimeMap, Map wantShopAreaMap, + Map userNameMap, Map channelMap, Map userPortraitMap){ + if(CollectionUtils.isEmpty(list)){ + return Lists.newArrayList(); + } + List resultList = new ArrayList<>(); + for (PartnerOpenNewShopPageDTO page : list) { + PartnerOpenNewShopPageVO result = new PartnerOpenNewShopPageVO(); + result.setRecordId(page.getRecordId()); + result.setLineId(page.getLineId()); + result.setPartnerNum(page.getPartnerNum()); + result.setUsername(page.getUsername()); + result.setMobile(page.getMobile()); + result.setWantShopAreaName(wantShopAreaMap.get(page.getWantShopAreaId())); + result.setWantShopNum(page.getWantShopNum()); + result.setDevelopmentManagerUserName(userNameMap.get(page.getDevelopmentManager())); + result.setLineSourceName(channelMap.get(page.getLineSource())); + result.setJoinTime(joinTimeMap.get(page.getLineId())); + result.setAuditResult(page.getAuditResult()); + List userPortraitList = new ArrayList<>(); + if(StringUtils.isNotBlank(page.getUserPortrait())){ + String[] parts = page.getUserPortrait().split(","); + for (String part : parts) { + String trimmedPart = part.trim(); + if (StringUtils.isNotBlank(trimmedPart)) { + String s = userPortraitMap.get(Long.valueOf(part)); + if(StringUtils.isNotBlank(s)){ + userPortraitList.add(s); + } + } + } + result.setUserPortraitList(userPortraitList); + } + resultList.add(result); + } + return resultList; + } + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerUserInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerUserInfoVO.java new file mode 100644 index 000000000..585098ef4 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerUserInfoVO.java @@ -0,0 +1,62 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2023/6/2 10:29 + * @Version 1.0 + */ +@Data +@ApiModel +public class PartnerUserInfoVO { + + @ApiModelProperty("ID") + private Long id; + + @ApiModelProperty("xfsg_partner_user_info.partner_id") + private String partnerId; + + @ApiModelProperty("手机号") + private String mobile; + + @ApiModelProperty("申请人姓名") + private String username; + + @ApiModelProperty("居住地址") + private String liveAddress; + + @ApiModelProperty("意向开店区域ID") + private Long wantShopAreaId; + + @ApiModelProperty("意向开店区域名称") + private String wantShopAreaName; + + @ApiModelProperty("openid") + private String openid; + + @ApiModelProperty("unionid") + private String unionId; + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("流程阶段:1意向加盟;2新店进展;") + private Integer workflowStage; + + @ApiModelProperty("流程子阶段") + private Integer workflowSubStage; + + @ApiModelProperty("流程子阶段状态") + private Integer workflowSubStageStatus; + + @ApiModelProperty("0.公海 1.私海 2黑名单") + private Integer lineStatus; + + @ApiModelProperty("线索来源") + private Integer lineSource; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/Preparation/PreparationProcessVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/Preparation/PreparationProcessVO.java new file mode 100644 index 000000000..7e649b41f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/Preparation/PreparationProcessVO.java @@ -0,0 +1,21 @@ +package com.cool.store.vo.Preparation; + +import lombok.Data; + +import java.util.Date; + +/** + * @Author suzhuhong + * @Date 2024/5/25 17:51 + * @Version 1.0 + */ +@Data +public class PreparationProcessVO { + + private Date planStartTime; + + private Integer totalCount; + + private Integer finishCount; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/Preparation/PreparationScheduleDetailVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/Preparation/PreparationScheduleDetailVO.java new file mode 100644 index 000000000..c7679ff3c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/Preparation/PreparationScheduleDetailVO.java @@ -0,0 +1,79 @@ +package com.cool.store.vo.Preparation; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.temporal.ChronoUnit; +import java.util.Date; + +/** + * @Author suzhuhong + * @Date 2024/4/26 17:38 + * @Version 1.0 + */ +@Data +public class PreparationScheduleDetailVO { + + @ApiModelProperty("加盟商名称") + private String username; + + @ApiModelProperty("加盟手机号") + private String mobile; + + private Integer joinStatus; + + private Long shopId; + + @ApiModelProperty("门店名称") + private String shopName; + + @ApiModelProperty("门店编码") + private String storeNum; + + @ApiModelProperty("总项数") + private Integer totalColumn; + + @ApiModelProperty("完成项") + private Integer completionColumn; + + @ApiModelProperty("计划开店时间") + private Date planOpenTime; + + @ApiModelProperty("合同完成时间") + private Date ContractCompletionTime; + + @ApiModelProperty("开店时长") + private String days; + + @ApiModelProperty("所属站区") + private String regionNodeName; + + @ApiModelProperty("预估完成时间") + private Date planCompletionTime; + + @ApiModelProperty("招商经理名称") + private String investmentManagerName; + + @ApiModelProperty("招商经理手机号") + private String investmentManagerMobile; + + @ApiModelProperty("扩展经理名称") + private String developmentManagerName; + + @ApiModelProperty("扩展经理手机号") + private String developmentManagerMobile; + + public void setDays() { + if (this.planOpenTime==null|| this.ContractCompletionTime==null){ + return; + } + long between = ChronoUnit.SECONDS.between(this.ContractCompletionTime.toInstant(), this.planOpenTime.toInstant()); + double days = (double) between / (24*60*60); + this.days = String.format("%.1f", days); + } + + + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/Preparation/PreparationScheduleVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/Preparation/PreparationScheduleVO.java new file mode 100644 index 000000000..9ab71f52d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/Preparation/PreparationScheduleVO.java @@ -0,0 +1,70 @@ +package com.cool.store.vo.Preparation; + +import com.cool.store.vo.BaseInfoVO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.temporal.ChronoUnit; +import java.util.Date; + +/** + * @Author suzhuhong + * @Date 2024/4/26 15:00 + * @Version 1.0 + */ +@Data +public class PreparationScheduleVO { + + @ApiModelProperty("加盟商名称") + private String username; + + @ApiModelProperty("加盟手机号") + private String mobile; + + private Long shopId; + + @ApiModelProperty("门店名称") + private String shopName; + + @ApiModelProperty("门店编码") + private String storeNum; + + @ApiModelProperty("开店负责人") + private String shopManagerUserName; + + @ApiModelProperty("总项数") + private Integer totalColumn; + + @ApiModelProperty("完成项") + private Integer completionColumn; + + @ApiModelProperty("计划开店时间") + private Date planOpenTime; + + @ApiModelProperty("合同完成时间") + private Date ContractCompletionTime; + + @ApiModelProperty("开店时长") + private String days; + + @ApiModelProperty("所属站区") + private String regionNodeName; + + @ApiModelProperty("招商经理名称") + private String investmentManagerName; + + private Long lineId; + + + @ApiModelProperty("督导") + private String supervisionName; + + public void setDays() { + if (this.planOpenTime==null|| this.ContractCompletionTime==null){ + return; + } + long between = ChronoUnit.SECONDS.between(this.ContractCompletionTime.toInstant(), this.planOpenTime.toInstant()); + double days = (double) between / (24*60*60); + this.days = String.format("%.1f", days); + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/PublicLineListVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/PublicLineListVO.java new file mode 100644 index 000000000..5ab5962b6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/PublicLineListVO.java @@ -0,0 +1,46 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/3/29 15:12 + * @Version 1.0 + */ +@Data +public class PublicLineListVO extends BaseInfoVO{ + + @ApiModelProperty("招商经理名称") + private String lastInvestmentManagerUserName; + + @ApiModelProperty("招商经理名称") + private String lastDevelopmentManagerUserName; + + @ApiModelProperty("线索来源名称") + private String lineSourceName; + + @ApiModelProperty("创建时间") + private String createTime; + + @ApiModelProperty("更新时间") + private String updateTime; + + @ApiModelProperty("更新人名称") + private String updateUserName; + + public PublicLineListVO(){} + + public PublicLineListVO(BaseInfoVO baseInfoVO) { + super(baseInfoVO); + } + + + + + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/RegionPathNameVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/RegionPathNameVO.java new file mode 100644 index 000000000..0cb48b4c1 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/RegionPathNameVO.java @@ -0,0 +1,34 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * @author byd + * @ClassName RegionDO + * @Description 区域 + */ +@ApiModel("区域全路径返回实体") +@Builder +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RegionPathNameVO implements Serializable { + /** + * 区域全路径名称 + */ + @ApiModelProperty("区域全路径名称") + private String allRegionName; + + private List regionNameList; + + private static final long serialVersionUID = 1L; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/ShopAcceptanceVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/ShopAcceptanceVO.java new file mode 100644 index 000000000..d3bb16daa --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/ShopAcceptanceVO.java @@ -0,0 +1,34 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * @author byd + */ +@Data +public class ShopAcceptanceVO { + + + /** + * 店铺id + */ + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("开业时间") + private Date planOpenTime; + + /** + * 验收状态 + */ + @ApiModelProperty("验收状态 0:验收中 1:已验收") + private Integer acceptanceStatus; + + @ApiModelProperty("店铺子阶段验收结果") + private List shopStageAcceptanceList; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/ShopAuditInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/ShopAuditInfoVO.java new file mode 100644 index 000000000..67871cadd --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/ShopAuditInfoVO.java @@ -0,0 +1,59 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +@Data +public class ShopAuditInfoVO { + + private Long id; + + private Long shopId; + + @ApiModelProperty("'0-视觉验收 1-培训登记审批 2-开业运营方案 3-证照审批 4-系统建店5-三方验收") + private Integer auditType; + + + @ApiModelProperty("提交人ID") + private String submittedUserId; + + + @ApiModelProperty("提交人名称") + private String submittedUserName; + + + @ApiModelProperty("结果类型 0通过,1拒绝") + private Integer resultType; + + + @ApiModelProperty("通过原因") + private String passReason; + + + @ApiModelProperty("拒绝原因") + private String rejectReason; + + + private String certifyFile; + + + @ApiModelProperty("时间") + private Date createTime; + + + private Date updateTime; + + /** + * 是否删除:0.否 1.是 + */ + private Boolean deleted; + + + @ApiModelProperty("数据类型 0-提交 1-审批") + private Integer dataType; + + @ApiModelProperty("头像") + private String avatar; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/ShopStageAcceptanceVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/ShopStageAcceptanceVO.java new file mode 100644 index 000000000..4696c719f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/ShopStageAcceptanceVO.java @@ -0,0 +1,51 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.*; +import java.util.Date; + +/** + * @author byd + */ +@Data +public class ShopStageAcceptanceVO { + + /** + * 店铺id + */ + @ApiModelProperty("id") + private Long id; + + /** + * 店铺id + */ + @ApiModelProperty("店铺id") + private Long shopId; + + /** + * 店铺阶段 + */ + @ApiModelProperty("店铺子阶段") + private Integer shopSubStage; + + + /** + * 店铺阶段 + */ + @ApiModelProperty("店铺子阶段名称") + private String shopSubStageName; + + + /** + * 实际完成时间 + */ + @ApiModelProperty("实际完成时间") + private String actualCompleteTime; + + + @ApiModelProperty("是否合格 0:不合格 1:合格") + private Boolean result; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/SysRoleVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/SysRoleVO.java new file mode 100644 index 000000000..ebf9fba12 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/SysRoleVO.java @@ -0,0 +1,29 @@ +package com.cool.store.vo; + +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.entity.SysMenuDO; +import com.cool.store.entity.SysRoleDO; +import lombok.Data; + +import java.util.List; + +@Data +public class SysRoleVO extends SysRoleDO { + /** + * 角色相关的人数 + */ + private Long personNums; + /** + * 用户 + */ + private List enterpriseDOs; + /** + * 角色下拥有的权限 + */ + private List sysMenuDOs; + /** + * 角色是否可删除 + */ + private Boolean delete=true; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/TempUserDetailInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/TempUserDetailInfoVO.java new file mode 100644 index 000000000..62fbc1a0b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/TempUserDetailInfoVO.java @@ -0,0 +1,117 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.util.Date; + +/** + * @author byd + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TempUserDetailInfoVO { + + @ApiModelProperty("id") + private Long id; + + /** + * line_info.id + */ + @ApiModelProperty("线索id") + private Long lineId; + + /** + * shop_info.id + */ + @ApiModelProperty("店铺id") + private Long shopId; + + /** + * 区域ID + */ + @ApiModelProperty("区域ID") + private Long regionId; + + /** + * 手机号 + */ + @ApiModelProperty("手机号") + private String mobile; + + /** + * 申请人姓名 + */ + @ApiModelProperty("姓名") + private String username; + + /** + * 性别0未选,1男,2女 + */ + @ApiModelProperty("性别0未选,1男,2女") + private String sex; + + /** + * 年龄 + */ + @ApiModelProperty("年龄") + private Integer age; + + @ApiModelProperty("0-待审核 1-已登记 2-审核未通过") + private Integer status; + + /** + * 身份证号码 + */ + @ApiModelProperty("身份证号码") + private String idCard; + + /** + * 学历 0-小学 1-初中 2-高中 3-中专 4-大专 5-本科 6-硕士 7-硕士以上 + */ + @ApiModelProperty("学历 0-小学 1-初中 2-高中 3-中专 4-大专 5-本科 6-硕士 7-硕士以上") + private Integer educational; + + /** + * 角色id 170000000-店长 160000000-店员 + */ + @ApiModelProperty("角色id 170000000-店长 160000000-店员") + private Long roleId; + + /** + * 身份证正面url + */ + @ApiModelProperty("身份证正面url") + private String idCardPositiveUrl; + + /** + * 身份证反面url + */ + @ApiModelProperty("身份证反面url") + private String idCardNegativeUrl; + + /** + * 健康证url + */ + @ApiModelProperty("健康证url") + private String healthCertificateUrl; + + /** + * 登记时间 + */ + @ApiModelProperty("登记时间") + private Date registerTime; + + /** + * 来源:create-创建 sync-钉钉同步 + */ + @ApiModelProperty("来源:create-创建 sync-钉钉同步") + private String source; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/TempUserDetailListVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/TempUserDetailListVO.java new file mode 100644 index 000000000..96b47b784 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/TempUserDetailListVO.java @@ -0,0 +1,30 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; +import java.util.List; + +/** + * @author byd + * @date 2024-04-29 17:33 + */ +@Data +public class TempUserDetailListVO { + + @ApiModelProperty("员工列表") + private List userList; + + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("店铺code") + private String storeNum; + + /** + * 店铺子阶段状态 + */ + @ApiModelProperty("店铺子阶段状态") + private Integer shopSubStageStatus; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/TempUserDetailVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/TempUserDetailVO.java new file mode 100644 index 000000000..26053a0ec --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/TempUserDetailVO.java @@ -0,0 +1,77 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.util.Date; + +/** + * @author byd + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TempUserDetailVO { + + @ApiModelProperty("id") + private Long id; + + /** + * line_info.id + */ + @ApiModelProperty("line_info.id") + private Long lineId; + + /** + * shop_info.id + */ + @ApiModelProperty("店铺id") + private Long shopId; + + /** + * 区域ID + */ + @ApiModelProperty("区域ID") + private Long regionId; + + /** + * 手机号 + */ + @ApiModelProperty("手机号") + private String mobile; + + /** + * 申请人姓名 + */ + @ApiModelProperty("姓名") + private String username; + + /** + * 身份证号码 + */ + @ApiModelProperty("身份证号码") + private String idCard; + + /** + * 角色id 170000000-店长 160000000-店员 + */ + @ApiModelProperty("角色id 170000000-店长 160000000-店员") + private Long roleId; + + /** + * 登记时间 + */ + @ApiModelProperty("登记时间") + private Date registerTime; + + /** + * 来源:create-创建 sync-钉钉同步 + */ + @ApiModelProperty("来源:create-创建 sync-钉钉同步") + private String source; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/IntendPendingVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/IntendPendingVO.java new file mode 100644 index 000000000..fa2fb0e6e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/IntendPendingVO.java @@ -0,0 +1,25 @@ +package com.cool.store.vo.desk; + +import com.cool.store.vo.BaseInfoVO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @Author suzhuhong + * @Date 2024/3/26 15:33 + * @Version 1.0 + */ +@Data +public class IntendPendingVO extends BaseInfoVO { + + @ApiModelProperty("提交时间") + private Date joinTime; + + public IntendPendingVO(){} + + public IntendPendingVO(BaseInfoVO baseInfoVO) { + super(baseInfoVO); + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/InterviewPendingVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/InterviewPendingVO.java new file mode 100644 index 000000000..bf80be009 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/InterviewPendingVO.java @@ -0,0 +1,33 @@ +package com.cool.store.vo.desk; + +import com.cool.store.vo.BaseInfoVO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/3/27 11:36 + * @Version 1.0 + */ +@Data +public class InterviewPendingVO extends BaseInfoVO { + + @ApiModelProperty("面谈开始时间 2024年04月23日 16:00") + private String startTime; + + @ApiModelProperty("面谈结束时间 10:00") + private String endTime; + + @ApiModelProperty("面试官名称") + private String interviewer; + + private Long interviewId; + + public InterviewPendingVO(){}; + + public InterviewPendingVO(BaseInfoVO baseInfoVO) { + super(baseInfoVO); + } + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/PayStagePendingVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/PayStagePendingVO.java new file mode 100644 index 000000000..512be35dc --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/PayStagePendingVO.java @@ -0,0 +1,24 @@ +package com.cool.store.vo.desk; + +import com.cool.store.vo.BaseInfoVO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/4/1 16:37 + * @Version 1.0 + */ +@Data +public class PayStagePendingVO extends BaseInfoVO { + + @ApiModelProperty("缴费时间 2024年04月23日 16:00") + private String payTime; + + public PayStagePendingVO(){}; + + public PayStagePendingVO(BaseInfoVO baseInfoVO) { + super(baseInfoVO); + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/PreparationCommonPendingVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/PreparationCommonPendingVO.java new file mode 100644 index 000000000..fa28669fa --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/PreparationCommonPendingVO.java @@ -0,0 +1,37 @@ +package com.cool.store.vo.desk; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/5/7 10:48 + * @Version 1.0 + */ +@Data +public class PreparationCommonPendingVO { + + @ApiModelProperty("门店名称") + private String storeName; + @ApiModelProperty("门店负责人名称") + private String shopManagerUserName; + @ApiModelProperty("加盟商名称") + private String partnerName; + @ApiModelProperty("手机号") + private String partnerPhone; + @ApiModelProperty("所属战区") + private String regionNodeName; + @ApiModelProperty("阶段") + private Integer stage; + @ApiModelProperty("子阶段") + private Integer subStage; + @ApiModelProperty("阶段状态") + private Integer subStageStatus; + @ApiModelProperty("线索ID") + private Long lineId; + @ApiModelProperty("店铺ID") + private Long shopId; + @ApiModelProperty("提交时间") + private String submitTime; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/SigningPendingVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/SigningPendingVO.java new file mode 100644 index 000000000..d3c9bbf0c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/SigningPendingVO.java @@ -0,0 +1,26 @@ +package com.cool.store.vo.desk; + +import com.cool.store.vo.BaseInfoVO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/4/1 16:55 + * @Version 1.0 + */ +@Data +public class SigningPendingVO extends BaseInfoVO { + + @ApiModelProperty("提交时间 2024年04月23日 16:00") + private String submitTime; + + public SigningPendingVO(){}; + + public SigningPendingVO(BaseInfoVO baseInfoVO) { + super(baseInfoVO); + } + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/StoreExperiencePendingVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/StoreExperiencePendingVO.java new file mode 100644 index 000000000..a061a773e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/desk/StoreExperiencePendingVO.java @@ -0,0 +1,26 @@ +package com.cool.store.vo.desk; + +import com.cool.store.vo.BaseInfoVO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/4/1 17:05 + * @Version 1.0 + */ +@Data +public class StoreExperiencePendingVO extends BaseInfoVO { + @ApiModelProperty("开始时间 2024年04月23日") + private String experienceStartTime; + + @ApiModelProperty("结束时间 23日") + private String experienceEndTime; + + public StoreExperiencePendingVO(){}; + + public StoreExperiencePendingVO(BaseInfoVO baseInfoVO) { + super(baseInfoVO); + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/fitmentCheckVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/fitmentCheckVO.java new file mode 100644 index 000000000..75d2af232 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/fitmentCheckVO.java @@ -0,0 +1,49 @@ +package com.cool.store.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @Auther: WangShuo + * @Date: 2024/05/03/下午3:21 + * @Version 1.0 + * @注释: + */ +@Data +public class fitmentCheckVO { + private Long shopId; + private Long lineId; + private String shopName; + private String storeNum; + @ApiModelProperty("加盟商姓名") + private String partnerName; + @ApiModelProperty("所属战区id") + private Long regionId; + @ApiModelProperty("所属战区") + private String region; + @ApiModelProperty("招商经理id") + private String investmentManagerId; + @ApiModelProperty("招商经理") + private String investmentManager; + @ApiModelProperty("门店选址人id") + private String sitterId; + @ApiModelProperty("门店选址人姓名") + private String sitterName; + @ApiModelProperty("战区经理id") + private String fightManagerId; + @ApiModelProperty("战区经理") + private String fightManager; + @ApiModelProperty("计划完成时间") + private Date planEndTime; + @ApiModelProperty("实际完成时间") + private Date actualEndTime; + @ApiModelProperty("计划验收时间") + private Date planAcceptanceTime; + @ApiModelProperty("实际验收时间") + private Date acceptanceTime; + @ApiModelProperty("验收状态:三方验收1200待预约,1210 待验收,1220验收中,1230已验收;视觉验收:1300待验收,1310验收不通过,1320验收通过") + private Integer shopSubStageStatus; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/AppointmentTimeListVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/AppointmentTimeListVO.java new file mode 100644 index 000000000..913661521 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/AppointmentTimeListVO.java @@ -0,0 +1,31 @@ +package com.cool.store.vo.interview; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: AppointmentTimeVO + * @Description: + * @date 2024-03-15 16:07 + */ +@Data +public class AppointmentTimeListVO { + + @ApiModelProperty("时间") + private String time; + + @ApiModelProperty("周几") + private Integer weekDay; + + @ApiModelProperty("时间") + private List timeList; + + public AppointmentTimeListVO(String time, Integer weekDay, List timeList) { + this.time = time; + this.weekDay = weekDay; + this.timeList = timeList; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/AppointmentTimeVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/AppointmentTimeVO.java new file mode 100644 index 000000000..29c63f47b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/AppointmentTimeVO.java @@ -0,0 +1,113 @@ +package com.cool.store.vo.interview; + +import cn.hutool.core.date.DateUtil; +import com.cool.store.constants.CommonConstants; +import com.cool.store.entity.LineCalendarsEventDO; +import com.cool.store.enums.AppointmentStatusEnum; +import com.cool.store.enums.InterviewTypeEnum; +import com.cool.store.utils.CoolDateUtils; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.ListUtils; +import org.apache.commons.lang3.tuple.Pair; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * @author zhangchenbiao + * @FileName: AppointmentTimeVO + * @Description: + * @date 2024-03-15 16:07 + */ +@Data +public class AppointmentTimeVO { + + @ApiModelProperty("时间") + private String time; + + @ApiModelProperty("状态 0:不可预约 1:已被预约 2:可预约") + private Integer status; + + public static List getAppointmentTime(LocalDate localDate, List> timeSlots, List eventList) { + List resultList = new ArrayList<>(); + if(CollectionUtils.isEmpty(eventList)){ + for (Pair time : ListUtils.emptyIfNull(timeSlots)) { + resultList.add(new AppointmentTimeVO(time.getLeft(), time.getRight() ? AppointmentStatusEnum.CAN_APPOINTMENT.getCode() : AppointmentStatusEnum.NOT_APPOINTMENT.getCode())); + } + return resultList; + } + List> eventDateTime = new ArrayList<>(); + for (LineCalendarsEventDO event : eventList) { + Date startTime = event.getStartTime(); + Date endTime = event.getEndTime(); + LocalDateTime startDateTime = LocalDateTime.parse(DateUtil.format(startTime, CoolDateUtils.DATE_FORMAT_SEC), DateTimeFormatter.ofPattern(CoolDateUtils.DATE_FORMAT_SEC)); + LocalDateTime endDateTime = LocalDateTime.parse(DateUtil.format(endTime, CoolDateUtils.DATE_FORMAT_SEC), DateTimeFormatter.ofPattern(CoolDateUtils.DATE_FORMAT_SEC)); + eventDateTime.add(Pair.of(startDateTime, endDateTime)); + } + for (Pair time : ListUtils.emptyIfNull(timeSlots)) { + String timeStr = time.getLeft(); + boolean isAvailable = time.getRight(); + String[] timeArray = timeStr.split("-"); + String[] startTime = timeArray[0].split(CommonConstants.COLON); + Integer startHour = Integer.parseInt(startTime[0]); + Integer startMinute = Integer.parseInt(startTime[1]); + LocalDateTime startDateTime = LocalDateTime.of(localDate, LocalTime.of(startHour, startMinute)); + String[] endTime = timeArray[1].split(CommonConstants.COLON); + Integer endHour = Integer.parseInt(endTime[0]); + Integer endMinute = Integer.parseInt(endTime[1]); + LocalDateTime endDateTime = LocalDateTime.of(localDate, LocalTime.of(endHour, endMinute)); + boolean isOverlapping = false; + if(isAvailable){ + for (Pair event : eventDateTime) { + isOverlapping = isOverlapping(event.getLeft(), event.getRight(), startDateTime, endDateTime); + if(isOverlapping){ + break; + } + } + } + AppointmentStatusEnum appointmentStatus = isAvailable ? AppointmentStatusEnum.CAN_APPOINTMENT : AppointmentStatusEnum.NOT_APPOINTMENT; + if (isOverlapping && appointmentStatus.equals(AppointmentStatusEnum.CAN_APPOINTMENT)){ + appointmentStatus = AppointmentStatusEnum.APPOINTMENT; + } + resultList.add(new AppointmentTimeVO(time.getLeft(), appointmentStatus.getCode())); + } + return resultList; + } + + public AppointmentTimeVO(String time, Integer status) { + this.time = time; + this.status = status; + } + + public static boolean isOverlapping(LocalDateTime start1, LocalDateTime end1, LocalDateTime start2, LocalDateTime end2) { + if(start1.equals(start2) && end1.equals(end2)){ + return true; + } + // 如果第二个时间段的开始时间在第一个时间段内(包括两端点) + if (start2.isAfter(start1) && start2.isBefore(end1)) { + return true; + } + // 或者第二个时间段的结束时间在第一个时间段内(包括两端点) + if (end2.isAfter(start1) && end2.isBefore(end1)) { + return true; + } + // 或者第一个时间段的开始时间在第二个时间段内 + if (start1.isAfter(start2) && start1.isBefore(end2)) { + return true; + } + // 或者第一个时间段的结束时间在第二个时间段内 + if (end1.isAfter(start2) && end1.isBefore(end2)) { + return true; + } + // 如果以上条件都不满足,则说明两个时间段不重叠 + return false; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/EnterInterviewVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/EnterInterviewVO.java new file mode 100644 index 000000000..3c529f9c8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/EnterInterviewVO.java @@ -0,0 +1,41 @@ +package com.cool.store.vo.interview; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class EnterInterviewVO { + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("加盟商id") + private String partnerId; + + @ApiModelProperty("房间号") + private String roomId; + + @ApiModelProperty("userSig 进入会议需要的用户签名") + private String userSign; + + @ApiModelProperty("面试官id") + private String interviewerUserId; + + @ApiModelProperty("面试官姓名") + private String interviewerUsername; + + @ApiModelProperty("加盟商姓名") + private String partnerName; + + + + public EnterInterviewVO(Long lineId, String partnerId, String roomId, String userSign, String interviewerUserId, String interviewerUsername, String partnerName) { + this.lineId = lineId; + this.partnerId = partnerId; + this.roomId = roomId; + this.userSign = userSign; + this.interviewerUserId = interviewerUserId; + this.interviewerUsername = interviewerUsername; + this.partnerName = partnerName; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/InterviewDetailVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/InterviewDetailVO.java new file mode 100644 index 000000000..1539453c5 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/InterviewDetailVO.java @@ -0,0 +1,99 @@ +package com.cool.store.vo.interview; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.entity.LineInfoDO; +import com.cool.store.entity.LineInterviewDO; +import com.cool.store.vo.LineAuditInfoVO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; +import java.util.Date; +import java.util.List; + +@Data +public class InterviewDetailVO { + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("面试id") + private Long interviewId; + + @ApiModelProperty("加盟商id") + private String partnerId; + + @ApiModelProperty("面试官id") + private String interviewerUserId; + + @ApiModelProperty("面试官姓名") + private String interviewerUsername; + + @ApiModelProperty("加盟商姓名") + private String partnerName; + + @ApiModelProperty("区域ID") + private Long regionId; + + @ApiModelProperty("面试日期") + private Date interviewDate; + + @ApiModelProperty("面试开始时间") + private Date startTime; + + @ApiModelProperty("面试结束时间") + private Date endTime; + + @ApiModelProperty("0未参加,1加盟商先进入 2面试官先进入 3双方都参加") + private Integer joinInterviewStatus; + + @ApiModelProperty("实际开始时间") + private Date actualStartTime; + + @ApiModelProperty("实际结束时间") + private Date actualEndTime; + + @ApiModelProperty("房间号") + private String roomId; + + @ApiModelProperty("房间密码") + private String roomPassword; + + @ApiModelProperty("房间状态:0待开放;1已开放; 2已关闭'") + private Integer roomStatus; + + @ApiModelProperty("面试状态 1待面试 2待审核 3审批通过 4不通过") + private Integer interviewStatus; + + @ApiModelProperty("面试类型:0面谈,1一审,2二审") + private Integer interviewType; + + @ApiModelProperty("视频链接") + private List videoUrl; + + @ApiModelProperty("审核信息") + private LineAuditInfoVO auditInfo; + + public static InterviewDetailVO convertVO(LineInfoDO lineInfo, LineInterviewDO interviewInfo) { + InterviewDetailVO result = new InterviewDetailVO(); + result.setInterviewId(interviewInfo.getId()); + result.setLineId(lineInfo.getId()); + result.setPartnerId(lineInfo.getPartnerId()); + result.setInterviewerUserId(interviewInfo.getInterviewerUserId()); + result.setPartnerName(lineInfo.getUsername()); + result.setRegionId(lineInfo.getRegionId()); + result.setInterviewDate(interviewInfo.getInterviewDate()); + result.setStartTime(interviewInfo.getStartTime()); + result.setEndTime(interviewInfo.getEndTime()); + result.setJoinInterviewStatus(interviewInfo.getJoinInterviewStatus()); + result.setActualStartTime(interviewInfo.getActualStartTime()); + result.setActualEndTime(interviewInfo.getActualEndTime()); + result.setRoomId(interviewInfo.getRoomId()); + result.setRoomPassword(interviewInfo.getRoomPassword()); + result.setRoomStatus(interviewInfo.getRoomStatus()); + result.setInterviewStatus(interviewInfo.getInterviewStatus()); + result.setInterviewType(interviewInfo.getInterviewType()); + result.setVideoUrl(JSONObject.parseArray(interviewInfo.getVideoUrl(), String.class)); + return result; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/LineInterviewPageVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/LineInterviewPageVO.java new file mode 100644 index 000000000..cb51993af --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/LineInterviewPageVO.java @@ -0,0 +1,110 @@ +package com.cool.store.vo.interview; + +import com.cool.store.dto.interview.LineInterviewPageDTO; +import com.cool.store.utils.StringUtil; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @author zhangchenbiao + * @FileName: LineInterviewPageVO + * @Description: + * @date 2024-03-19 15:55 + */ +@Data +public class LineInterviewPageVO { + + @ApiModelProperty("面试id") + private Long interviewId; + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("线索姓名") + private String username; + + @ApiModelProperty("手机号") + private String mobile; + + @ApiModelProperty("意向区域") + private String wantShopArea; + + @ApiModelProperty("用户标签") + private List userPortraitList; + + @ApiModelProperty("计划开始时间") + private String startTime; + + @ApiModelProperty("计划结束时间") + private String endTime; + + @ApiModelProperty("面试状态 1待面试 2待审核 3审批通过 4不通过") + private Integer interviewStatus; + + @ApiModelProperty("招商经理") + private String investmentManagerUsername; + + @ApiModelProperty("线索来源名称") + private String lineSourceName; + + @ApiModelProperty("实际开始时间") + private String actualStartTime; + + @ApiModelProperty("实际结束时间") + private String actualEndTime; + + @ApiModelProperty("面审人") + private String interviewerUsername; + + @ApiModelProperty("房间id") + private String roomId; + + public static List convertList(List list, Map userPortraitMap, Map userNameMap, Map cityNameMap, Map channelMap){ + if(CollectionUtils.isEmpty(list)){ + return Lists.newArrayList(); + } + List resultList = new ArrayList<>(); + for (LineInterviewPageDTO lineInterviewPage : list) { + LineInterviewPageVO result = new LineInterviewPageVO(); + result.setInterviewId(lineInterviewPage.getInterviewId()); + result.setLineId(lineInterviewPage.getLineId()); + result.setUsername(lineInterviewPage.getUsername()); + result.setMobile(lineInterviewPage.getMobile()); + result.setWantShopArea(cityNameMap.get(lineInterviewPage.getWantShopAreaId())); + result.setStartTime(lineInterviewPage.getStartTime()); + result.setEndTime(lineInterviewPage.getEndTime()); + result.setInterviewStatus(lineInterviewPage.getInterviewStatus()); + result.setInvestmentManagerUsername(userNameMap.get(lineInterviewPage.getInvestmentManager())); + result.setLineSourceName(channelMap.get(lineInterviewPage.getLineSource())); + result.setActualStartTime(lineInterviewPage.getActualStartTime()); + result.setActualEndTime(lineInterviewPage.getActualEndTime()); + result.setInterviewerUsername(userNameMap.get(lineInterviewPage.getInterviewerUserId())); + List userPortraitList = new ArrayList<>(); + if(StringUtils.isNotBlank(lineInterviewPage.getUserPortrait())){ + String[] parts = lineInterviewPage.getUserPortrait().split(","); + for (String part : parts) { + String trimmedPart = part.trim(); + if (StringUtils.isNotBlank(trimmedPart)) { + String s = userPortraitMap.get(Long.valueOf(part)); + if(StringUtils.isNotBlank(s)){ + userPortraitList.add(s); + } + } + } + result.setUserPortraitList(userPortraitList); + } + result.setRoomId(lineInterviewPage.getRoomId()); + resultList.add(result); + } + return resultList; + } + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/log/LineFollowLogVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/log/LineFollowLogVO.java new file mode 100644 index 000000000..4c3b7bd13 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/log/LineFollowLogVO.java @@ -0,0 +1,42 @@ +package com.cool.store.vo.log; + +import com.cool.store.entity.LineFollowLogDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: LineFollowLogVO + * @Description:跟进日志 + * @date 2024-03-27 14:50 + */ +@Data +public class LineFollowLogVO { + + @ApiModelProperty("日志") + private String message; + + @ApiModelProperty("创建时间") + private Date createTime; + + public LineFollowLogVO(String message, Date createTime) { + this.message = message; + this.createTime = createTime; + } + + public static List convertList(List list){ + if (CollectionUtils.isEmpty(list)) { + return null; + } + List resultList = new ArrayList<>(); + for (LineFollowLogDO followLog : list) { + resultList.add(new LineFollowLogVO(followLog.getMessage(), followLog.getCreateTime())); + } + return resultList; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/oss/OssUploadConfigVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/oss/OssUploadConfigVO.java new file mode 100644 index 000000000..930409690 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/oss/OssUploadConfigVO.java @@ -0,0 +1,46 @@ +package com.cool.store.vo.oss; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: OssUploadConfigVO + * @Description: oss 上传config + * @date 2023-06-01 13:46 + */ +@Data +public class OssUploadConfigVO { + + @ApiModelProperty("域名") + private String accessKeyId; + + @ApiModelProperty("策略 Base64编过") + private String policy; + + @ApiModelProperty("对Policy签名后的字符串") + private String signature; + + @ApiModelProperty("上传目录") + private String dir; + + @ApiModelProperty("域名") + private String host; + + @ApiModelProperty("上传策略Policy失效时间") + private String expire; + + @ApiModelProperty("cdn地址") + private String cdnUrl; + + public OssUploadConfigVO(String accessKeyId, String policy, String signature, String dir, String host, String expire, String cdnUrl) { + this.accessKeyId = accessKeyId; + this.policy = policy; + this.signature = signature; + this.dir = dir; + this.host = host; + this.expire = expire; + this.cdnUrl = cdnUrl; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/AuditSettingVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/AuditSettingVO.java new file mode 100644 index 000000000..bafce2764 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/AuditSettingVO.java @@ -0,0 +1,33 @@ +package com.cool.store.vo.point; + +import com.cool.store.request.UserAndPositionRequest; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: AuditSettingRequest + * @Description: + * @date 2024-04-02 14:11 + */ +@Data +public class AuditSettingVO { + + @ApiModelProperty("第一级审批") + private List firstApproval; + + @ApiModelProperty("第二级审批") + private List secondApproval; + + @ApiModelProperty("第三级审批") + private List thirdApproval; + + @ApiModelProperty("第四级审批") + private List fourthApproval; + + @ApiModelProperty("第五级审批") + private List fifthApproval; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/MiniPointPageVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/MiniPointPageVO.java new file mode 100644 index 000000000..3a521695e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/MiniPointPageVO.java @@ -0,0 +1,63 @@ +package com.cool.store.vo.point; + +import com.cool.store.dto.point.MiniPointPageDTO; +import com.cool.store.entity.PointInfoDO; +import com.cool.store.enums.point.PointRecommendStatusEnum; +import com.cool.store.enums.point.PointStatusEnum; +import com.cool.store.enums.point.SelectStatusEnum; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Data +public class MiniPointPageVO { + + @ApiModelProperty("店铺id") + private Long pointId; + + @ApiModelProperty("铺位名称") + private String pointName; + + @ApiModelProperty("铺位编号") + private String pointCode; + + @ApiModelProperty("所属站区") + private String regionNodeName; + + @ApiModelProperty("地址") + private String address; + + @ApiModelProperty("铺位得分") + private Integer pointScore; + + @ApiModelProperty("铺位面积") + private String pointArea; + + @ApiModelProperty("1.待选择 2.已选择 3.已被他人选择 4.已签约 5.已拒绝 6.已失效") + private Integer recommendStatus; + + public static List convertVO(List pointList, Map regionNameMap, Long curLineId) { + if(CollectionUtils.isEmpty(pointList)){ + return Lists.newArrayList(); + } + List resultList = new ArrayList<>(); + for (MiniPointPageDTO pointInfo : pointList) { + MiniPointPageVO pointPageVO = new MiniPointPageVO(); + pointPageVO.setPointId(pointInfo.getPointId()); + pointPageVO.setPointName(pointInfo.getPointName()); + pointPageVO.setPointCode(pointInfo.getPointCode()); + pointPageVO.setRegionNodeName(regionNameMap.get(pointInfo.getRegionId())); + pointPageVO.setAddress(pointInfo.getAddress()); + pointPageVO.setPointScore(pointInfo.getPointScore()); + pointPageVO.setPointArea(pointInfo.getPointArea()); + pointPageVO.setRecommendStatus(pointInfo.getRecommendStatus()); + resultList.add(pointPageVO); + } + return resultList; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointAuditRecordVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointAuditRecordVO.java new file mode 100644 index 000000000..891969462 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointAuditRecordVO.java @@ -0,0 +1,87 @@ +package com.cool.store.vo.point; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; +import com.alibaba.fastjson.JSONObject; +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.entity.PointAuditRecordDO; +import com.cool.store.utils.StringUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.*; + +/** + * @author zhangchenbiao + * @FileName: AuditRecordVO + * @Description: + * @date 2024-04-08 11:36 + */ +@Data +public class PointAuditRecordVO { + + @ApiModelProperty("实际处理人") + private UserBaseInfoVO handlerUser; + + @ApiModelProperty("处理人列表") + private List handlerUserList; + + @ApiModelProperty("处理时间") + private Date handlerTime; + + @ApiModelProperty("原因") + private String reason; + + @ApiModelProperty("0待处理,1通过,2拒绝") + private String auditStatus; + + @ApiModelProperty("signTime") + private Date signTime; + + @ApiModelProperty("签到地址") + private String signAddress; + + @ApiModelProperty("图片") + private String pictureUrl; + + @ApiModelProperty("是否超时") + private Boolean isTimeout; + + @ApiModelProperty("节点") + private Integer nodeNo; + + public static List convert(List auditRecordList, Map userMap) { + List resultList = new ArrayList<>(); + for (PointAuditRecordDO pointAuditRecord : auditRecordList) { + PointAuditRecordVO pointAuditRecordVO = new PointAuditRecordVO(); + pointAuditRecordVO.setHandlerTime(pointAuditRecord.getFinishTaskTime()); + pointAuditRecordVO.setReason(pointAuditRecord.getReason()); + pointAuditRecordVO.setAuditStatus(pointAuditRecord.getAuditStatus().toString()); + pointAuditRecordVO.setSignTime(pointAuditRecord.getSignTime()); + pointAuditRecordVO.setSignAddress(pointAuditRecord.getSignAddress()); + pointAuditRecordVO.setPictureUrl(pointAuditRecord.getPictureUrl()); + pointAuditRecordVO.setIsTimeout(Boolean.FALSE); + pointAuditRecordVO.setNodeNo(pointAuditRecord.getNodeNo()); + if(Objects.nonNull(pointAuditRecord.getReceiveTaskTime())){ + Date time = Objects.isNull(pointAuditRecord.getFinishTaskTime()) ? new Date() : pointAuditRecord.getFinishTaskTime(); + LocalDateTime localDateTime = LocalDateTime.ofInstant(pointAuditRecord.getReceiveTaskTime().toInstant(), ZoneId.systemDefault()); + LocalDateTime localDateTime1 = LocalDateTime.ofInstant(time.toInstant(), ZoneId.systemDefault()); + Duration duration = Duration.between(localDateTime, localDateTime1); + long hours = duration.toHours(); + pointAuditRecordVO.setIsTimeout(hours >= 48); + } + pointAuditRecordVO.setHandlerUser(UserBaseInfoVO.convert(pointAuditRecord.getHandlerUserId(), userMap)); + List handlerUserIds = JSONObject.parseArray(pointAuditRecord.getHandlerUserIds(), String.class); + pointAuditRecordVO.setHandlerUserList(UserBaseInfoVO.convert(handlerUserIds, userMap)); + resultList.add(pointAuditRecordVO); + } + return resultList; + } + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointDetailVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointDetailVO.java new file mode 100644 index 000000000..dbe4cffd1 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointDetailVO.java @@ -0,0 +1,347 @@ +package com.cool.store.vo.point; + +import com.cool.store.entity.PointDetailInfoDO; +import com.cool.store.entity.PointInfoDO; +import com.cool.store.enums.point.PointStatusEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class PointDetailVO { + + @ApiModelProperty("店铺id") + private Long pointId; + + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("铺位名称") + private String pointName; + + @ApiModelProperty("铺位编号") + private String pointCode; + + @ApiModelProperty("所属大区") + private Long regionId; + + @ApiModelProperty("所属大区") + private String regionNodeName; + + @ApiModelProperty("店铺来源:1、鲜丰选址人员寻铺 2、加盟商自采") + private Integer pointSource; + + @ApiModelProperty("经度") + private String longitude; + + @ApiModelProperty("纬度") + private String latitude; + + @ApiModelProperty("详细地址") + private String address; + + @ApiModelProperty("铺位状态 1.采集中、2.已评估、3.待审核、5.已审核、6.已签约、7.已失效") + private Integer pointStatus; + + @ApiModelProperty("选择状态0.未选择, 1.已被选择") + private Integer selectStatus; + + @ApiModelProperty("扩展经理名称") + private String developmentManagerUserName; + + @ApiModelProperty("拓展时间") + private Date developmentTime; + + @ApiModelProperty("铺位得分") + private Integer pointScore; + + @ApiModelProperty("经营状况 1营业中 2空铺") + private Integer businessStatus; + + @ApiModelProperty("09:00-10:00人流量") + private Integer nineFlowRate; + + @ApiModelProperty("10:00-11:00人流量") + private Integer tenFlowRate; + + @ApiModelProperty("18:00-19:00人流量") + private Integer eighteenFlowRate; + + @ApiModelProperty("19:00-20:00人流量") + private Integer nineteenFlowRate; + + @ApiModelProperty("店铺方位 1.主要动线 2.次要动线") + private Integer pointDirection; + + @ApiModelProperty("立地条件0单门面, 1双门面, 2多门面, 3转角") + private Integer siteConditions; + + @ApiModelProperty("使用面积(一楼)") + private String pointArea; + + @ApiModelProperty("门店内宽") + private String storeWidth; + + @ApiModelProperty("房东姓名") + private String landlordUsername; + + @ApiModelProperty("房东电话") + private String landlordMobile; + + @ApiModelProperty("支付方式 1.月付 2.季付 3.半年付 4.年付") + private Integer paymentMethod; + + @ApiModelProperty("物业状态 1.原始房东 2.二房东 3.三房东 4.招投标性质") + private Integer propertyStatus; + + @ApiModelProperty("转让费") + private String transferFee; + + @ApiModelProperty("覆盖社区 1.800户以下 2.800-1200户 3.1200-2000户 4.2000户以上") + private Integer coverCommunity; + + @ApiModelProperty("消费能力 1.高端 2.中高端 3.中端 4.低端") + private Integer consumerAbility; + + @ApiModelProperty("人流测算 1.>400人/时以上, 2.300~400人/时, 3.200~300人/时, 4.100~200人/时") + private Integer flowRateCalculate; + + @ApiModelProperty("聚客点农贸市场 1.是 2.否") + private Integer gatherGuestFarmerMarket; + + @ApiModelProperty("聚客点医院 1.甲等医院 2.市级医院 3.县区级医院 4.无医院") + private Integer gatherGuestHospital; + + @ApiModelProperty("聚客点学校 1.幼儿园/小学 2.大学/学院 3.初中/高中 4.无学校") + private Integer gatherGuestSchool; + + @ApiModelProperty("门店人流动向 1.主要流动路线 2.次要流动路线") + private Integer storeFlowTrend; + + @ApiModelProperty("周边100米内餐饮 1.餐饮连锁店或6家以上餐饮店 2.普通餐饮店 3.无餐饮店") + private Integer nearRepast; + + @ApiModelProperty("周边100米内小业态邻居 1.小业态品牌店3家以上 2.小业态普通店3家以上 3.普通小业态店3家以下 4.无小业态店") + private Integer nearNeighbor; + + @ApiModelProperty("周边100米内竞争对手 1.品牌水果店2家以上 2.品牌水果店1家及以上 3.夫妻水果店1家及以上 4.无水果店") + private Integer nearCompete; + + @ApiModelProperty("周边100米内业态经营情况 1.运营状况良好 2.运营状况一般 3.运营状况差") + private Integer nearBusinessCondition; + + @ApiModelProperty("所处位置 1.十字路口 2.居民生活中心 3.社区出入口") + private Integer intendPosition; + + @ApiModelProperty("绿化带 1.门口无绿化带阻挡 2.门口有绿化带阻挡") + private Integer greenBelt; + + @ApiModelProperty("门店观瞻 1.观赡非常好 2.观赡一般 3.观赡差") + private Integer storeOutlook; + + @ApiModelProperty("门店来客便利性 1.门口5米有人行横道 2.门口15米有人行横道 3.无人行横道") + private Integer guestConvenience; + + @ApiModelProperty("意向门店开间尺寸 1.转角 2.12米以上 3.8-12米 4.4-8米 5.4米以下") + private Integer wantShopSize; + + @ApiModelProperty("竞争对手性质 1.连锁店 2.强势单店 3.经营散户 4.小型摊贩") + private Integer competeType; + + @ApiModelProperty("竞争对手经营能力 1.非常好 2.好 3.一般 4.差") + private Integer competeBusinessCapacity; + + @ApiModelProperty("投资总额") + private String investAmount; + + @ApiModelProperty("预估日商") + private String dayTrader; + + @ApiModelProperty("理论毛利率") + private String profitRate; + + @ApiModelProperty("门店月毛利率") + private String monthProfitRate; + + @ApiModelProperty("品牌使用费率") + private String brandUseRate; + + @ApiModelProperty("品牌使用费") + private String brandUseFee; + + @ApiModelProperty("基本人工费用") + private String staffFee; + + @ApiModelProperty("店长数量") + private Integer shopManagerNum; + + @ApiModelProperty("店长基本工资") + private Integer shopManagerFee; + + @ApiModelProperty("店员数量") + private Integer clerkNum; + + @ApiModelProperty("店员基本工资") + private Integer clerkFee; + + @ApiModelProperty("奖金分红") + private String bonus; + + @ApiModelProperty("门店月房租") + private String monthRent; + + @ApiModelProperty("水电物业及其他") + private String otherFee; + + @ApiModelProperty("净利润") + private String netProfit; + + @ApiModelProperty("月投资回报率") + private String monthRateReturn; + + @ApiModelProperty("拓展专员签名") + private String developmentManagerSign; + + @ApiModelProperty("拓展专员签字日期") + private Date developmentManagerSignTime; + + @ApiModelProperty("运营人员签名") + private String operationUserSign; + + @ApiModelProperty("运营人员签名日期") + private Date operationUserSignTime; + + @ApiModelProperty("加盟商签名") + private String lineSign; + + @ApiModelProperty("加盟商签名日期") + private Date lineSignTime; + + @ApiModelProperty("市场容量评估分数") + private Integer marketSizeScore; + + @ApiModelProperty("商圈氛围评估分数") + private Integer shopAreaScore; + + @ApiModelProperty("便利性评估分数") + private Integer convenientScore; + + @ApiModelProperty("门店属性与竞争环境评估分数") + private Integer environmentScore; + + @ApiModelProperty("租赁合同") + private String rentContract; + + @ApiModelProperty("高德地图评估报告") + private String mapEvaluationReport; + + @ApiModelProperty("图片对象") + private String pictureObj; + + @ApiModelProperty("当前节点") + private Integer curNodeNo; + + @ApiModelProperty("省") + private String province; + + @ApiModelProperty("市") + private String city; + + @ApiModelProperty("区/县") + private String district; + + @ApiModelProperty("街道") + private String township; + + @ApiModelProperty("是否可以上传租赁合同") + private boolean canSubmitRentContract; + + + public static PointDetailVO convertVO(PointInfoDO pointInfo, PointDetailInfoDO pointDetailInfo) { + PointDetailVO result = new PointDetailVO(); + result.setPointId(pointInfo.getId()); + result.setShopId(pointInfo.getShopId()); + result.setPointName(pointInfo.getPointName()); + result.setPointCode(pointInfo.getPointCode()); + result.setLongitude(pointInfo.getLongitude()); + result.setLatitude(pointInfo.getLatitude()); + result.setAddress(pointInfo.getAddress()); + result.setPointStatus(pointInfo.getPointStatus()); + if(PointStatusEnum.POINT_STATUS_4.getCode().equals(pointInfo.getPointStatus())){ + result.setPointStatus(PointStatusEnum.POINT_STATUS_3.getCode()); + } + result.setDevelopmentTime(pointInfo.getDevelopmentTime()); + result.setPointArea(pointInfo.getPointArea()); + result.setRegionId(pointInfo.getRegionId()); + result.setPointSource(pointInfo.getPointSource()); + result.setSelectStatus(pointInfo.getSelectStatus()); + result.setPointScore(pointInfo.getPointScore()); + result.setBusinessStatus(pointDetailInfo.getBusinessStatus()); + result.setNineFlowRate(pointDetailInfo.getNineFlowRate()); + result.setTenFlowRate(pointDetailInfo.getTenFlowRate()); + result.setEighteenFlowRate(pointDetailInfo.getEighteenFlowRate()); + result.setNineteenFlowRate(pointDetailInfo.getNineteenFlowRate()); + result.setPointDirection(pointDetailInfo.getPointDirection()); + result.setSiteConditions(pointDetailInfo.getSiteConditions()); + result.setStoreWidth(pointDetailInfo.getStoreWidth()); + result.setLandlordUsername(pointDetailInfo.getLandlordUsername()); + result.setLandlordMobile(pointDetailInfo.getLandlordMobile()); + result.setPaymentMethod(pointDetailInfo.getPaymentMethod()); + result.setPropertyStatus(pointDetailInfo.getPropertyStatus()); + result.setTransferFee(pointDetailInfo.getTransferFee()); + result.setCoverCommunity(pointDetailInfo.getCoverCommunity()); + result.setConsumerAbility(pointDetailInfo.getConsumerAbility()); + result.setFlowRateCalculate(pointDetailInfo.getFlowRateCalculate()); + result.setGatherGuestFarmerMarket(pointDetailInfo.getGatherGuestFarmerMarket()); + result.setGatherGuestHospital(pointDetailInfo.getGatherGuestHospital()); + result.setGatherGuestSchool(pointDetailInfo.getGatherGuestSchool()); + result.setStoreFlowTrend(pointDetailInfo.getStoreFlowTrend()); + result.setNearRepast(pointDetailInfo.getNearRepast()); + result.setNearNeighbor(pointDetailInfo.getNearNeighbor()); + result.setNearCompete(pointDetailInfo.getNearCompete()); + result.setNearBusinessCondition(pointDetailInfo.getNearBusinessCondition()); + result.setIntendPosition(pointDetailInfo.getIntendPosition()); + result.setGreenBelt(pointDetailInfo.getGreenBelt()); + result.setStoreOutlook(pointDetailInfo.getStoreOutlook()); + result.setGuestConvenience(pointDetailInfo.getGuestConvenience()); + result.setWantShopSize(pointDetailInfo.getWantShopSize()); + result.setCompeteType(pointDetailInfo.getCompeteType()); + result.setCompeteBusinessCapacity(pointDetailInfo.getCompeteBusinessCapacity()); + result.setInvestAmount(pointDetailInfo.getInvestAmount()); + result.setDayTrader(pointDetailInfo.getDayTrader()); + result.setProfitRate(pointDetailInfo.getProfitRate()); + result.setMonthProfitRate(pointDetailInfo.getMonthProfitRate()); + result.setBrandUseRate(pointDetailInfo.getBrandUseRate()); + result.setBrandUseFee(pointDetailInfo.getBrandUseFee()); + result.setStaffFee(pointDetailInfo.getStaffFee()); + result.setShopManagerNum(pointDetailInfo.getShopManagerNum()); + result.setShopManagerFee(pointDetailInfo.getShopManagerFee()); + result.setClerkNum(pointDetailInfo.getClerkNum()); + result.setClerkFee(pointDetailInfo.getClerkFee()); + result.setBonus(pointDetailInfo.getBonus()); + result.setMonthRent(pointDetailInfo.getMonthRent()); + result.setOtherFee(pointDetailInfo.getOtherFee()); + result.setNetProfit(pointDetailInfo.getNetProfit()); + result.setMonthRateReturn(pointDetailInfo.getMonthRateReturn()); + result.setDevelopmentManagerSign(pointDetailInfo.getDevelopmentManagerSign()); + result.setDevelopmentManagerSignTime(pointDetailInfo.getDevelopmentManagerSignTime()); + result.setOperationUserSign(pointDetailInfo.getOperationUserSign()); + result.setOperationUserSignTime(pointDetailInfo.getOperationUserSignTime()); + result.setLineSign(pointDetailInfo.getLineSign()); + result.setLineSignTime(pointDetailInfo.getLineSignTime()); + result.setMarketSizeScore(pointDetailInfo.getMarketSizeScore()); + result.setShopAreaScore(pointDetailInfo.getShopAreaScore()); + result.setConvenientScore(pointDetailInfo.getConvenientScore()); + result.setEnvironmentScore(pointDetailInfo.getEnvironmentScore()); + result.setRentContract(pointDetailInfo.getRentContract()); + result.setMapEvaluationReport(pointDetailInfo.getMapEvaluationReport()); + result.setPictureObj(pointDetailInfo.getPictureObj()); + result.setProvince(pointInfo.getProvince()); + result.setCity(pointInfo.getCity()); + result.setDistrict(pointInfo.getDistrict()); + result.setTownship(pointInfo.getTownship()); + return result; + } + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointHomePageDataVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointHomePageDataVO.java new file mode 100644 index 000000000..20958f069 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointHomePageDataVO.java @@ -0,0 +1,32 @@ +package com.cool.store.vo.point; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: PointHomePageDataVO + * @Description:铺位首页数据 + * @date 2024-04-07 16:57 + */ +@Data +public class PointHomePageDataVO { + + @ApiModelProperty("我的铺位") + private Integer myPoint; + + @ApiModelProperty("铺位池") + private Integer poolPoint; + + @ApiModelProperty("采集中") + private Integer collectPoint; + + @ApiModelProperty("已评估") + private Integer evaluatePoint; + + @ApiModelProperty("待审核铺位") + private Integer waitAuditPoint; + + @ApiModelProperty("已签约") + private Integer signPoint; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointPageVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointPageVO.java new file mode 100644 index 000000000..2b8e9a0cf --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointPageVO.java @@ -0,0 +1,91 @@ +package com.cool.store.vo.point; + +import com.cool.store.entity.PointInfoDO; +import com.cool.store.enums.point.PointStatusEnum; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Data +public class PointPageVO { + + @ApiModelProperty("店铺id") + private Long pointId; + + @ApiModelProperty("铺位名称") + private String pointName; + + @ApiModelProperty("铺位编号") + private String pointCode; + + @ApiModelProperty("所属大区") + private Long regionId; + + @ApiModelProperty("所属站区") + private String regionNodeName; + + @ApiModelProperty("铺位状态 1.采集中、2.已评估、3.待审核、5.已审核、6.已签约、7.已失效") + private Integer pointStatus; + + @ApiModelProperty("铺位得分") + private Integer pointScore; + + @ApiModelProperty("铺位面积") + private String pointArea; + + @ApiModelProperty("拓展专员") + private String developmentManagerUsername; + + @ApiModelProperty("拓展时间") + private Date developmentTime; + + @ApiModelProperty("选择状态0.未选择, 1.已被选择") + private Integer selectStatus; + + @ApiModelProperty("铺位地址") + private String address; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; + + + + public static List convertVO(List pointList, Map usernameMap, Map regionNameMap) { + if(CollectionUtils.isEmpty(pointList)){ + return Lists.newArrayList(); + } + List resultList = new ArrayList<>(); + for (PointInfoDO pointInfo : pointList) { + PointPageVO pointPageVO = new PointPageVO(); + pointPageVO.setPointId(pointInfo.getId()); + pointPageVO.setPointName(pointInfo.getPointName()); + pointPageVO.setPointCode(pointInfo.getPointCode()); + pointPageVO.setRegionId(pointInfo.getRegionId()); + pointPageVO.setRegionNodeName(regionNameMap.get(pointInfo.getRegionId())); + pointPageVO.setPointStatus(pointInfo.getPointStatus()); + if(PointStatusEnum.POINT_STATUS_4.getCode().equals(pointInfo.getPointStatus())){ + pointPageVO.setPointStatus(PointStatusEnum.POINT_STATUS_3.getCode()); + } + pointPageVO.setPointScore(pointInfo.getPointScore()); + pointPageVO.setPointArea(pointInfo.getPointArea()); + pointPageVO.setDevelopmentManagerUsername(usernameMap.get(pointInfo.getDevelopmentManager())); + pointPageVO.setDevelopmentTime(pointInfo.getDevelopmentTime()); + pointPageVO.setSelectStatus(pointInfo.getSelectStatus()); + pointPageVO.setAddress(pointInfo.getAddress()); + pointPageVO.setCreateTime(pointInfo.getCreateTime()); + pointPageVO.setUpdateTime(pointInfo.getUpdateTime()); + resultList.add(pointPageVO); + } + return resultList; + } + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointRecommendPageVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointRecommendPageVO.java new file mode 100644 index 000000000..875dc1c9b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointRecommendPageVO.java @@ -0,0 +1,98 @@ +package com.cool.store.vo.point; + +import com.cool.store.entity.PointInfoDO; +import com.cool.store.entity.PointRecommendDO; +import com.cool.store.enums.point.PointStatusEnum; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: PointRecommendPageVO + * @Description: + * @date 2024-04-08 16:11 + */ +@Data +public class PointRecommendPageVO { + + @ApiModelProperty("店铺id") + private Long pointId; + + @ApiModelProperty("铺位名称") + private String pointName; + + @ApiModelProperty("铺位编号") + private String pointCode; + + @ApiModelProperty("所属大区") + private Long regionId; + + @ApiModelProperty("所属站区") + private String regionNodeName; + + @ApiModelProperty("铺位状态 1.采集中、2.已评估、3.待审核、5.已审核、6.已签约、7.已失效") + private Integer pointStatus; + + @ApiModelProperty("铺位得分") + private Integer pointScore; + + @ApiModelProperty("铺位面积") + private String pointArea; + + @ApiModelProperty("拓展专员") + private String developmentManagerUsername; + + @ApiModelProperty("拓展时间") + private Date developmentTime; + + @ApiModelProperty("选择状态1.待选择 2.已选择 3.已被他人选择 4.已签约 5.已拒绝 6.已失效") + private Integer recommendStatus; + + @ApiModelProperty("铺位地址") + private String address; + + @ApiModelProperty("是否可以上传租赁合同") + private boolean canSubmitRentContract; + + + public static List convertVO(List recommendList, List pointList, Map usernameMap, Map regionNameMap, List canSubmitRentContractShopIds) { + if(CollectionUtils.isEmpty(recommendList) || CollectionUtils.isEmpty(pointList)){ + return Lists.newArrayList(); + } + List resultList = new ArrayList<>(); + Map pointMap = pointList.stream().collect(Collectors.toMap(k -> k.getId(), Function.identity())); + for (PointRecommendDO pointRecommend : recommendList) { + PointRecommendPageVO recommend = new PointRecommendPageVO(); + recommend.setRecommendStatus(pointRecommend.getStatus()); + PointInfoDO pointInfo = pointMap.get(pointRecommend.getPointId()); + if(Objects.nonNull(pointInfo)){ + recommend.setPointId(pointInfo.getId()); + recommend.setPointName(pointInfo.getPointName()); + recommend.setPointCode(pointInfo.getPointCode()); + recommend.setRegionId(pointInfo.getRegionId()); + recommend.setRegionNodeName(regionNameMap.get(pointInfo.getRegionId())); + recommend.setPointStatus(pointInfo.getPointStatus()); + if(PointStatusEnum.POINT_STATUS_4.getCode().equals(pointInfo.getPointStatus())){ + recommend.setPointStatus(PointStatusEnum.POINT_STATUS_3.getCode()); + } + recommend.setPointScore(pointInfo.getPointScore()); + recommend.setPointArea(pointInfo.getPointArea()); + recommend.setDevelopmentManagerUsername(usernameMap.get(pointInfo.getDevelopmentManager())); + recommend.setDevelopmentTime(pointInfo.getDevelopmentTime()); + recommend.setAddress(pointInfo.getAddress()); + if(canSubmitRentContractShopIds.contains(pointInfo.getShopId())){ + recommend.setCanSubmitRentContract(Boolean.TRUE); + } + } + resultList.add(recommend); + } + return resultList; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointToDoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointToDoVO.java new file mode 100644 index 000000000..eaa230e48 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointToDoVO.java @@ -0,0 +1,56 @@ +package com.cool.store.vo.point; + +import com.cool.store.entity.PointInfoDO; +import com.cool.store.enums.point.PointStatusEnum; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * @author zhangchenbiao + * @FileName: PointToDoVO + * @Description: + * @date 2024-04-22 14:56 + */ +@Data +public class PointToDoVO { + + @ApiModelProperty("铺位id") + private Long pointId; + + @ApiModelProperty("铺位名称") + private String pointName; + + @ApiModelProperty("详细地址") + private String address; + + @ApiModelProperty("所属大区") + private String regionNodeName; + + @ApiModelProperty("提交时间") + private Date submitTime; + + public static List convertVO(List pointList, Map regionNameMap, Map submitTimeMap) { + if(CollectionUtils.isEmpty(pointList)){ + return Lists.newArrayList(); + } + List resultList = new ArrayList<>(); + for (PointInfoDO pointInfo : pointList) { + PointToDoVO pointPageVO = new PointToDoVO(); + pointPageVO.setPointId(pointInfo.getId()); + pointPageVO.setPointName(pointInfo.getPointName()); + pointPageVO.setRegionNodeName(regionNameMap.get(pointInfo.getRegionId())); + pointPageVO.setAddress(pointInfo.getAddress()); + pointPageVO.setSubmitTime(submitTimeMap.get(pointInfo.getId())); + resultList.add(pointPageVO); + } + return resultList; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/ShopRentInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/ShopRentInfoVO.java new file mode 100644 index 000000000..b25cd5e8e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/ShopRentInfoVO.java @@ -0,0 +1,98 @@ +package com.cool.store.vo.point; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.entity.ShopRentInfoDO; +import com.cool.store.enums.RentTypeEnum; +import com.cool.store.vo.AuditInfoVO; +import com.cool.store.vo.LineAuditInfoVO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.Date; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: ShopRentInfoVO + * @Description: + * @date 2024-04-16 14:03 + */ +@Data +public class ShopRentInfoVO { + + @ApiModelProperty("租赁id") + private Long rentId; + + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("铺位id") + private Long pointId; + + @ApiModelProperty("租赁类型 1铺位直租 2自有铺位") + private Integer rentType; + + @ApiModelProperty("签约日期") + private Date signTime; + + @ApiModelProperty("合同开始日期") + private Date contractStartTime; + + @ApiModelProperty("合同结束日期") + private Date contractEndTime; + + @ApiModelProperty("签约年限") + private Integer contractMonths; + + @ApiModelProperty("店铺租金 1固定租金 2非固定租金") + private Integer shopRentType; + + @ApiModelProperty("月租金") + private String monthRent; + + @ApiModelProperty("第一年月租金") + private String firstYearMonthRent; + + @ApiModelProperty("第二年月租金") + private String secondYearMonthRent; + + @ApiModelProperty("第三年月租金") + private String thirdYearMonthRent; + + @ApiModelProperty("合同图片") + private List contractPic; + + @ApiModelProperty("房产证明") + private List houseCertificatePic; + + @ApiModelProperty("状态") + private Integer status; + + @ApiModelProperty("审核信息") + private AuditInfoVO auditInfo; + + public static ShopRentInfoVO build(ShopRentInfoDO shopRentInfo) { + ShopRentInfoVO result = new ShopRentInfoVO(); + result.setRentId(shopRentInfo.getId()); + result.setShopId(shopRentInfo.getShopId()); + result.setPointId(shopRentInfo.getPointId()); + result.setRentType(shopRentInfo.getRentType()); + result.setSignTime(shopRentInfo.getSignTime()); + if(RentTypeEnum.RENT.getCode().equals(shopRentInfo.getRentType())){ + result.setContractStartTime(shopRentInfo.getContractStartTime()); + result.setContractEndTime(shopRentInfo.getContractEndTime()); + result.setContractMonths(shopRentInfo.getContractMonths()); + } + result.setShopRentType(shopRentInfo.getShopRentType()); + result.setMonthRent(shopRentInfo.getMonthRent()); + result.setFirstYearMonthRent(shopRentInfo.getFirstYearMonthRent()); + result.setSecondYearMonthRent(shopRentInfo.getSecondYearMonthRent()); + result.setThirdYearMonthRent(shopRentInfo.getThirdYearMonthRent()); + result.setContractPic(JSONObject.parseArray(shopRentInfo.getContractPic(), String.class)); + result.setHouseCertificatePic(JSONObject.parseArray(shopRentInfo.getHouseCertificatePic(), String.class)); + return result; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/UserBaseInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/UserBaseInfoVO.java new file mode 100644 index 000000000..61e9c44df --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/UserBaseInfoVO.java @@ -0,0 +1,65 @@ +package com.cool.store.vo.point; + +import cn.hutool.core.map.MapUtil; +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; +import com.cool.store.entity.EnterpriseUserDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: UserBaseInfoVO + * @Description: + * @date 2024-04-08 13:42 + */ +@Data +public class UserBaseInfoVO { + + @ApiModelProperty("用户id") + private String userId; + + @ApiModelProperty("姓名") + private String username; + + @ApiModelProperty("头像") + private String avatar; + + public UserBaseInfoVO(String userId, String username, String avatar) { + this.userId = userId; + this.username = username; + this.avatar = avatar; + } + + public static UserBaseInfoVO convert(String userId, Map userMap) { + if(StringUtils.isBlank(userId) || MapUtil.isEmpty(userMap)){ + return null; + } + EnterpriseUserDO user = userMap.get(userId); + if(Objects.isNull(user)){ + return null; + } + return new UserBaseInfoVO(user.getUserId(), user.getName(), user.getAvatar()); + } + + public static List convert(List userIdList, Map userMap) { + if(CollectionUtils.isEmpty(userIdList) || MapUtil.isEmpty(userMap)){ + return null; + } + List resultList = new ArrayList<>(); + for (String userId : userIdList) { + EnterpriseUserDO user = userMap.get(userId); + if(Objects.isNull(user)){ + continue; + } + resultList.add(new UserBaseInfoVO(user.getUserId(), user.getName(), user.getAvatar())); + } + return resultList; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/MiniShopPageVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/MiniShopPageVO.java new file mode 100644 index 000000000..cdb952de8 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/MiniShopPageVO.java @@ -0,0 +1,38 @@ +package com.cool.store.vo.shop; + +import com.cool.store.entity.ShopInfoDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: MiniHomePageShopVO + * @Description: + * @date 2024-04-11 16:50 + */ +@Data +public class MiniShopPageVO { + + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("店铺名称") + private String shopName; + + public MiniShopPageVO(Long shopId, String shopName) { + this.shopId = shopId; + this.shopName = shopName; + } + + public static List convertList(List shopInfoList) { + List resultList = new ArrayList<>(); + for (ShopInfoDO shopInfo : shopInfoList) { + resultList.add(new MiniShopPageVO(shopInfo.getId(), shopInfo.getShopName())); + } + return resultList; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/RentInfoToDoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/RentInfoToDoVO.java new file mode 100644 index 000000000..42a90de15 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/RentInfoToDoVO.java @@ -0,0 +1,67 @@ +package com.cool.store.vo.shop; + +import com.cool.store.entity.PointInfoDO; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.*; + +/** + * @author zhangchenbiao + * @FileName: PointToDoVO + * @Description: + * @date 2024-04-22 14:56 + */ +@Data +public class RentInfoToDoVO { + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("加盟商名称") + private String lineUsername; + + @ApiModelProperty("电话号码") + private String lineMobile; + + @ApiModelProperty("铺位id") + private Long pointId; + + @ApiModelProperty("店铺id") + private Long shopId; + + @ApiModelProperty("店铺名称") + private String pointName; + + @ApiModelProperty("详细地址") + private String address; + + @ApiModelProperty("所属大区") + private String regionNodeName; + + @ApiModelProperty("提交时间") + private Date submitTime; + + public static List convert(List list, Map shopPointMap, Map pointMap, Map regionNameMap, Map rentContractSubmitTimeMap){ + if(CollectionUtils.isEmpty(list)){ + return Lists.newArrayList(); + } + List resultList = new ArrayList<>(); + for (RentInfoToDoVO rent : list) { + Long pointId = shopPointMap.get(rent.getShopId()); + rent.setPointId(pointId); + PointInfoDO pointInfo = pointMap.get(pointId); + if(Objects.nonNull(pointInfo)){ + rent.setPointName(pointInfo.getPointName()); + rent.setAddress(pointInfo.getAddress()); + rent.setRegionNodeName(regionNameMap.get(pointInfo.getRegionId())); + } + rent.setSubmitTime(rentContractSubmitTimeMap.get(rent.getShopId())); + resultList.add(rent); + } + return resultList; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/ShopStageInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/ShopStageInfoVO.java new file mode 100644 index 000000000..6541ecb80 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/ShopStageInfoVO.java @@ -0,0 +1,82 @@ +package com.cool.store.vo.shop; + +import com.cool.store.entity.LineAuditInfoDO; +import com.cool.store.entity.ShopAuditInfoDO; +import com.cool.store.entity.ShopStageInfoDO; +import com.cool.store.enums.point.ShopStageEnum; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.vo.AuditInfoVO; +import com.cool.store.vo.LineAuditInfoVO; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: ShopStageInfoVO + * @Description: + * @date 2024-04-11 17:10 + */ +@Data +public class ShopStageInfoVO { + + @ApiModelProperty("店铺阶段") + private Integer shopStage; + + @ApiModelProperty("店铺子阶段") + private Integer shopSubStage; + + @ApiModelProperty("店铺阶段状态") + private Integer shopSubStageStatus; + + @ApiModelProperty("当前阶段是否结束 0未结束 1已结束") + private Boolean isTerminated; + + @ApiModelProperty("预估完成时间") + private String planCompleteTime; + + @ApiModelProperty("实际完成时间") + private String actualCompleteTime; + + @ApiModelProperty("阶段审核信息") + private AuditInfoVO auditInfo; + + public ShopStageInfoVO(Integer shopStage, Integer shopSubStage, Integer shopSubStageStatus, Boolean isTerminated) { + this.shopStage = shopStage; + this.shopSubStage = shopSubStage; + this.shopSubStageStatus = shopSubStageStatus; + this.isTerminated = isTerminated; + + } + + public static List convertList(List stageList, List auditList){ + if(CollectionUtils.isEmpty(stageList)){ + return Lists.newArrayList(); + } + Map auditMap = auditList.stream().collect(Collectors.toMap(ShopAuditInfoDO::getId, Function.identity())); + List resultList = new ArrayList<>(); + for (ShopStageInfoDO stageInfo : stageList) { + if (ShopSubStageEnum.SHOP_STAGE_13.getShopSubStage().equals(stageInfo.getShopSubStage())){ + continue; + } + ShopStageInfoVO shopStageInfo = new ShopStageInfoVO(stageInfo.getShopStage(), stageInfo.getShopSubStage(), stageInfo.getShopSubStageStatus(), stageInfo.getIsTerminated()); + ShopAuditInfoDO auditInfo = auditMap.get(stageInfo.getAuditId()); + AuditInfoVO auditInfoVO = AuditInfoVO.convertVO(auditInfo); + shopStageInfo.setAuditInfo(auditInfoVO); + shopStageInfo.setPlanCompleteTime(stageInfo.getPlanCompleteTime()); + shopStageInfo.setActualCompleteTime(stageInfo.getActualCompleteTime()); + resultList.add(shopStageInfo); + } + return resultList; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/ShopStageVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/ShopStageVO.java new file mode 100644 index 000000000..e1eeca865 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/ShopStageVO.java @@ -0,0 +1,54 @@ +package com.cool.store.vo.shop; + +import com.cool.store.enums.point.ShopStageEnum; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: ShopStageEnumVO + * @Description: + * @date 2024-04-11 11:13 + */ +@Data +public class ShopStageVO { + + @ApiModelProperty("大阶段") + private Integer shopStage; + + @ApiModelProperty("阶段名称") + private String shopStageName; + + @ApiModelProperty("子阶段") + private List shopSubStageList; + + public ShopStageVO(Integer shopStage, String shopStageName, List shopSubStageList) { + this.shopStage = shopStage; + this.shopStageName = shopStageName; + this.shopSubStageList = shopSubStageList; + } + + public static List getShopStageList() { + List shopStageList = new ArrayList<>(); + for (ShopStageEnum shopStageEnum : ShopStageEnum.values()) { + List shopSubStageList = new ArrayList<>(); + List shopSubStageEnumList = ShopSubStageEnum.getShopStageEnum(shopStageEnum.getShopStage()); + for (ShopSubStageEnum shopSubStageEnum : shopSubStageEnumList) { + List subStageStatusList = new ArrayList<>(); + List shopSubStageStatusEnum = ShopSubStageStatusEnum.getShopSubStageStatusEnum(shopSubStageEnum); + for (ShopSubStageStatusEnum subStageStatusEnum : shopSubStageStatusEnum) { + subStageStatusList.add(new ShopSubStageStatusVO(subStageStatusEnum.getShopSubStageStatus(), subStageStatusEnum.getShopSubStageStatusName())); + } + shopSubStageList.add(new ShopSubStageVO(shopSubStageEnum.getShopSubStage(), shopSubStageEnum.getShopSubStageName(), subStageStatusList)); + } + shopStageList.add(new ShopStageVO(shopStageEnum.getShopStage(), shopStageEnum.getStageName(), shopSubStageList)); + } + return shopStageList; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/ShopSubStageStatusVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/ShopSubStageStatusVO.java new file mode 100644 index 000000000..801e201fb --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/ShopSubStageStatusVO.java @@ -0,0 +1,25 @@ +package com.cool.store.vo.shop; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: ShopSubStageStatusVO + * @Description: + * @date 2024-04-11 11:16 + */ +@Data +public class ShopSubStageStatusVO { + + @ApiModelProperty("店铺子阶段状态code") + private Integer shopSubStageStatus; + + @ApiModelProperty("店铺子阶段状态name") + private String shopSubStageStatusName; + + public ShopSubStageStatusVO(Integer shopSubStageStatus, String shopSubStageStatusName) { + this.shopSubStageStatus = shopSubStageStatus; + this.shopSubStageStatusName = shopSubStageStatusName; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/ShopSubStageVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/ShopSubStageVO.java new file mode 100644 index 000000000..a09609be1 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/ShopSubStageVO.java @@ -0,0 +1,32 @@ +package com.cool.store.vo.shop; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: ShopSubStageStatusVO + * @Description: + * @date 2024-04-11 11:12 + */ +@Data +public class ShopSubStageVO { + + @ApiModelProperty("子阶段code") + private Integer shopSubStage; + + @ApiModelProperty("子阶段名称") + private String shopSubStageName; + + @ApiModelProperty("子阶段状态") + private List subStageStatusList; + + public ShopSubStageVO(Integer shopSubStage, String shopSubStageName, List subStageStatusList) { + this.shopSubStage = shopSubStage; + this.shopSubStageName = shopSubStageName; + this.subStageStatusList = subStageStatusList; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/StageShopCountVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/StageShopCountVO.java new file mode 100644 index 000000000..904501538 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/shop/StageShopCountVO.java @@ -0,0 +1,24 @@ +package com.cool.store.vo.shop; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: StageShopCountVO + * @Description: + * @date 2024-04-16 14:59 + */ +@Data +public class StageShopCountVO { + + @ApiModelProperty("选址数量") + private Integer selectPointCount; + + @ApiModelProperty("筹建数量") + private Integer buildShopCount; + + @ApiModelProperty("开业数量") + private Integer openShopCount; + +} diff --git a/coolstore-partner-service/pom.xml b/coolstore-partner-service/pom.xml new file mode 100644 index 000000000..a6f1d873b --- /dev/null +++ b/coolstore-partner-service/pom.xml @@ -0,0 +1,127 @@ + + + + coolstore-partner-manage + com.coolstore + 1.0.0 + + 4.0.0 + + coolstore-partner-service + + + 8 + 8 + + + + + com.coolstore + coolstore-partner-common + + + com.coolstore + coolstore-partner-dao + + + com.coolstore + coolstore-partner-model + + + org.apache.shiro + shiro-core + + + com.aliyun + tea-openapi + + + com.aliyun + ons20190214 + + + + com.aliyun.oss + aliyun-sdk-oss + + + com.github.pagehelper + pagehelper + 5.3.2 + compile + + + redis.clients + jedis + + + org.springframework + spring-web + + + com.xuxueli + xxl-job-core + + + com.aliyun + dytnsapi20200217 + + + com.aliyun + ocr20191230 + + + com.aliyun + ocr_api20210707 + 2.0.7 + + + org.aspectj + aspectjrt + + + org.aspectj + aspectjweaver + + + com.aliyun + dysmsapi20170525 + 2.0.1 + + + + org.springframework.boot + spring-boot-starter-websocket + + + + com.alibaba + easyexcel + + + org.apache.poi + poi-ooxml + + + junit + junit + test + + + org.junit.jupiter + junit-jupiter + test + + + com.github.wechatpay-apiv3 + wechatpay-java + + + com.aliyun + alibabacloud-dysmsapi20170525 + + + + \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/config/redis/RedisUtilConfig.java b/coolstore-partner-service/src/main/java/com/cool/store/config/redis/RedisUtilConfig.java new file mode 100644 index 000000000..9472b1e76 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/config/redis/RedisUtilConfig.java @@ -0,0 +1,79 @@ +package com.cool.store.config.redis; + +import com.cool.store.utils.RedisUtilPool; +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; +import org.springframework.stereotype.Component; +import redis.clients.jedis.JedisPoolConfig; +import redis.clients.jedis.JedisShardInfo; +import redis.clients.jedis.ShardedJedisPool; + +import java.util.ArrayList; +import java.util.List; + +/** + * @ClassName RedisUtilConfig + * @Description 用一句话描述什么 + */ +@Component +public class RedisUtilConfig { + + @Value("${redis.host.uri}") + private String REDIS_HOST_URI; + +// @Value("${redis.host}") +// private String REDIS_HOST; +// +// @Value("${redis.password}") +// private String REDIS_PASSWORD; + + @Bean + public RedisUtilPool redisUtilPool() { + + RedisUtilPool redisUtil = new RedisUtilPool(); + + JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); + jedisPoolConfig.setMaxTotal(1024); + jedisPoolConfig.setMaxIdle(200); + jedisPoolConfig.setMaxWaitMillis(1000); + jedisPoolConfig.setTestOnBorrow(false); + + List shards = new ArrayList<>(); + JedisShardInfo jedisShardInfo = new JedisShardInfo(REDIS_HOST_URI); + shards.add(jedisShardInfo); + redisUtil.setShardedJedisPool(new ShardedJedisPool(jedisPoolConfig, shards)); + return redisUtil; + } + + /** + * 模板序列化 + * @Description 模板序列化 + * @param redisConnectionFactory + * @return RedisTemplate + * @throws Exception + */ + @Bean(name = "customizeTemplate") + public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { + Jackson2JsonRedisSerializer jacksonSerializer = new Jackson2JsonRedisSerializer<>(Object.class); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + jacksonSerializer.setObjectMapper(objectMapper); + // 创建并配置自定义 RedisTemplateRedisOperator + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(redisConnectionFactory); + template.setKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(new StringRedisSerializer()); + template.setValueSerializer(jacksonSerializer); + template.setHashValueSerializer(jacksonSerializer); + template.afterPropertiesSet(); + return template; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/config/rest/RestTemplateConfig.java b/coolstore-partner-service/src/main/java/com/cool/store/config/rest/RestTemplateConfig.java new file mode 100644 index 000000000..b3a6d584e --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/config/rest/RestTemplateConfig.java @@ -0,0 +1,20 @@ +package com.cool.store.config.rest; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; + +/** + * @author zhangchenbiao + * @FileName: RestTemplateConfig + * @Description: + * @date 2023-05-29 14:29 + */ +@Configuration +public class RestTemplateConfig { + + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } +} \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/config/websocket/WebSocketConfig.java b/coolstore-partner-service/src/main/java/com/cool/store/config/websocket/WebSocketConfig.java new file mode 100644 index 000000000..1e54e9746 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/config/websocket/WebSocketConfig.java @@ -0,0 +1,42 @@ +package com.cool.store.config.websocket; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +import javax.websocket.HandshakeResponse; +import javax.websocket.server.HandshakeRequest; +import javax.websocket.server.ServerEndpointConfig; +import java.util.List; +import java.util.Map; + +@Configuration +public class WebSocketConfig extends ServerEndpointConfig.Configurator { + + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } + + /** + * 建立握手时,连接前的操作 + */ + @Override + public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) { + // 这个userProperties 可以通过 session.getUserProperties()获取 + final Map userProperties = sec.getUserProperties(); + Map> headers = request.getHeaders(); + List mobiles = headers.get("mobiles"); + userProperties.put("mobiles", mobiles.get(0)); + } + + /** + * 初始化端点对象,也就是被@ServerEndpoint所标注的对象 + */ + @Override + public T getEndpointInstance(Class clazz) throws InstantiationException { + return super.getEndpointInstance(clazz); + } +} \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/config/weixin/WxPayAutoCertificateConfig.java b/coolstore-partner-service/src/main/java/com/cool/store/config/weixin/WxPayAutoCertificateConfig.java new file mode 100644 index 000000000..036ec93b3 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/config/weixin/WxPayAutoCertificateConfig.java @@ -0,0 +1,34 @@ +package com.cool.store.config.weixin; + +import com.wechat.pay.java.core.RSAAutoCertificateConfig; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.annotation.Resource; + +/** + * @description 微信支付证书自动更新配置 + * @date 2024-03-13 14:28 + */ +@Configuration +public class WxPayAutoCertificateConfig { + + @Resource + private WxPayConfig wxPayConfig; + /** + * 初始化商户配置 + * 使用自动更新平台证书的RSA配置 + * 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错 + * @return + */ + /*@Bean + public RSAAutoCertificateConfig rsaAutoCertificateConfig() { + RSAAutoCertificateConfig config = new RSAAutoCertificateConfig.Builder() + .merchantId(wxPayConfig.getMerchantId()) + .privateKeyFromPath(wxPayConfig.getPrivateKeyPath()) + .merchantSerialNumber(wxPayConfig.getMerchantSerialNumber()) + .apiV3Key(wxPayConfig.getApiV3Key()) + .build(); + return config; + }*/ +} \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/config/weixin/WxPayConfig.java b/coolstore-partner-service/src/main/java/com/cool/store/config/weixin/WxPayConfig.java new file mode 100644 index 000000000..fa5175958 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/config/weixin/WxPayConfig.java @@ -0,0 +1,29 @@ +package com.cool.store.config.weixin; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @description 微信支付配置类 + * @date 2024-03-13 14:28 + */ +@Data +@Component +@ConfigurationProperties(prefix = "wx.pay") +public class WxPayConfig { + + //mchid + private String merchantId; + /** 商户API私钥路径 */ + private String privateKeyPath; + //商户证书序列号 + private String merchantSerialNumber; + //商户APIv3密钥 + private String apiV3Key; + //支付通知地址 + private String payNotifyUrl; + //退款回调地址 + private String backNotifyUrl; + +} \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/context/CurrentUserHolder.java b/coolstore-partner-service/src/main/java/com/cool/store/context/CurrentUserHolder.java new file mode 100644 index 000000000..75146be10 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/context/CurrentUserHolder.java @@ -0,0 +1,52 @@ +package com.cool.store.context; + +import com.alibaba.fastjson.JSON; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import org.apache.commons.lang3.StringUtils; + +import java.util.Optional; + +/** + * 当前登录用户信息 + */ +public class CurrentUserHolder { + + private static final ThreadLocal contextHolder = new ThreadLocal(); + + public static LoginUserInfo getUser() { + String userStr = contextHolder.get(); + if (StringUtils.isNotBlank(userStr)) { + return JSON.parseObject(userStr, LoginUserInfo.class); + } + return new LoginUserInfo(); + } + + public static void setUser(String user) { + contextHolder.set(user); + } + + public static void removeUser(){ + contextHolder.remove(); + } + + /** + * 仅登录态可获取 + * @return + */ + public static String getUserId(){ + LoginUserInfo user = getUser(); + return Optional.ofNullable(user).map(o->o.getUserId()).orElseThrow(()->new ServiceException(ErrorCodeEnum.ACCESS_TOKEN_INVALID)); + } + + /** + * 仅登录态可获取 + * @return + */ +// public static String getRoleId(){ +// LoginUserInfo user = getUser(); +// return Optional.ofNullable(user).map(LoginUserInfo::getSysRole).map(SysRoleDO::getRoleId).orElse(null); +// } +} + + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/context/DataSourceContext.java b/coolstore-partner-service/src/main/java/com/cool/store/context/DataSourceContext.java new file mode 100644 index 000000000..3b48d4227 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/context/DataSourceContext.java @@ -0,0 +1,31 @@ +package com.cool.store.context; + +import java.util.ArrayList; +import java.util.List; + +public class DataSourceContext { + + private static final ThreadLocal CONTEXT_HOLDER = new ThreadLocal<>(); + + private static List dataSourceIds = new ArrayList<>(); + + public static void setDataSourceType(String dataSourceType) { + CONTEXT_HOLDER.set(dataSourceType); + } + + public static String getDataSourceType() { + return CONTEXT_HOLDER.get(); + } + + public static void clearDataSourceType() { + CONTEXT_HOLDER.remove(); + } + + public static boolean containsDataSource(String dsId) { + return dataSourceIds.contains(dsId); + } + + public static void setDataSourceIds(List dids){ + dataSourceIds = dids; + } +} \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/context/LoginUserInfo.java b/coolstore-partner-service/src/main/java/com/cool/store/context/LoginUserInfo.java new file mode 100644 index 000000000..18ac9900e --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/context/LoginUserInfo.java @@ -0,0 +1,38 @@ +package com.cool.store.context; + +import lombok.Data; + +@Data +public class LoginUserInfo { + + private String userId; + + private String name; + + private String mobile; + + private String accessToken; + + /** + * 员工角色 + */ + private String roleIds; + + /** + * 钉钉管理员和数智门店无关 + */ + private Boolean isAdmin; + + /** + * 头像 + */ + private String avatar; + +// private SysRoleDO sysRole; + + private Integer onlineStatus; + /** + * 工号 + */ + private String jobNumber; +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/context/PartnerUserHolder.java b/coolstore-partner-service/src/main/java/com/cool/store/context/PartnerUserHolder.java new file mode 100644 index 000000000..ffb5e9ca2 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/context/PartnerUserHolder.java @@ -0,0 +1,34 @@ +package com.cool.store.context; + +import com.alibaba.fastjson.JSON; +import com.cool.store.vo.PartnerUserInfoVO; +import org.apache.commons.lang3.StringUtils; + +/** + * C端登录用户信息 + */ +public class PartnerUserHolder { + + private static final ThreadLocal contextHolder = new ThreadLocal(); + + public static PartnerUserInfoVO getUser() { + String userStr = contextHolder.get(); + if (StringUtils.isNotBlank(userStr)) { + return JSON.parseObject(userStr, PartnerUserInfoVO.class); + } + return new PartnerUserInfoVO(); + } + + public static void setUser(String user) { + contextHolder.set(user); + } + + public static void removeUser(){ + contextHolder.remove(); + } + + + +} + + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/handler/CustomExceptionHandler.java b/coolstore-partner-service/src/main/java/com/cool/store/handler/CustomExceptionHandler.java new file mode 100644 index 000000000..89053a448 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/handler/CustomExceptionHandler.java @@ -0,0 +1,88 @@ +package com.cool.store.handler; + + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.cool.store.constants.CommonConstants; +import com.cool.store.exception.ApiException; +import com.cool.store.exception.ServiceException; +import com.cool.store.response.ResponseResult; +import com.cool.store.utils.UUIDUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.MDC; +import org.springframework.http.HttpStatus; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: CustomExceptionHandler + * @Description: 自定义异常处理 + * @date 2023-06-13 19:42 + */ +@Slf4j +@RestControllerAdvice +public class CustomExceptionHandler { + + @ExceptionHandler(value = ServiceException.class) + public void handleCustomException(ServiceException e, HttpServletResponse httpServletResponse) { + log.error(e.getMessage(), e); + ResponseResult responseResult = new ResponseResult(e.getErrorCode(), e.getErrorMessage()); + responseResult(httpServletResponse, responseResult); + } + + @ExceptionHandler(value = MethodArgumentNotValidException.class) + public void handleCustomException(MethodArgumentNotValidException e, HttpServletResponse httpServletResponse) { + log.error(e.getMessage(), e); + ResponseResult responseResult = new ResponseResult(500, String.join(",", getErrorMessages(e))); + responseResult(httpServletResponse, responseResult); + } + + private List getErrorMessages(MethodArgumentNotValidException ex) { + List errors = new ArrayList<>(); + ex.getBindingResult().getAllErrors().forEach((error) -> { + FieldError fieldError = (FieldError) error; + errors.add(fieldError.getObjectName() + " " + fieldError.getDefaultMessage()); + }); + return errors; + } + + @ExceptionHandler(value = ApiException.class) + public void handleCustomException(ApiException e, HttpServletResponse httpServletResponse) { + log.error(e.getMessage(), e); + ResponseResult responseResult = new ResponseResult(e.getErrorCode(), e.getMessage()); + responseResult(httpServletResponse, responseResult); + } + + @ExceptionHandler(value = Exception.class) + public void handleException(Exception e, HttpServletResponse httpServletResponse) { + log.error(e.getMessage(), e); + ResponseResult responseResult = new ResponseResult(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage()); + responseResult(httpServletResponse, responseResult); + } + + private void responseResult(HttpServletResponse response, ResponseResult result) { + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-type", "application/json;charset=UTF-8"); + String requestId = MDC.get(CommonConstants.REQUEST_ID); + if(StringUtils.isBlank(requestId)){ + requestId = UUIDUtils.get32UUID(); + } + result.setRequestId(requestId); + result.setData(null); + try { + response.getWriter().write(JSONObject.toJSONString(result, SerializerFeature.WriteNullStringAsEmpty)); + } catch (IOException ex) { + log.error(ex.getMessage(),ex); + } + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/handler/WebSocketServer.java b/coolstore-partner-service/src/main/java/com/cool/store/handler/WebSocketServer.java new file mode 100644 index 000000000..9d49269f4 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/handler/WebSocketServer.java @@ -0,0 +1,241 @@ +package com.cool.store.handler; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.config.websocket.WebSocketConfig; +import com.cool.store.utils.RedisUtil; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.SpringUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import javax.websocket.*; +import javax.websocket.server.PathParam; +import javax.websocket.server.ServerEndpoint; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; + +@Component +@Slf4j +@ServerEndpoint(value="/websocket/{tenantId}",configurator = WebSocketConfig.class) +public class WebSocketServer { + + /** + * 静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。 + */ + private static int onlineCount = 0; + /** + * concurrent包的线程安全Set,用来存放每个客户端对应的WebSocket对象。 + */ + private static final ConcurrentHashMap webSocketMap = new ConcurrentHashMap<>(); + /** + * 与某个客户端的连接会话,需要通过它来给客户端发送数据 + */ + private Session session; + /** + * 接收userId + */ + private String tenantId = ""; + + /** + * 手机号 + */ + private List mobiles; + + private static RedisUtilPool redisUtilPool = SpringUtils.getBean(RedisUtilPool.class); + /** + * 连接建立成 + * 功调用的方法 + */ + @OnOpen + public void onOpen(Session session, @PathParam("tenantId") String tenantId) { + String mobiles = getHeader(session, "mobiles"); + if(StringUtils.isEmpty(mobiles)){ + return; + } + + this.mobiles = Arrays.asList(mobiles.split(",")); + this.session = session; + this.tenantId = tenantId; + if (webSocketMap.containsKey(tenantId)) { + webSocketMap.remove(tenantId); + //加入set中 + webSocketMap.put(tenantId, this); + } else { + //加入set中 + webSocketMap.put(tenantId, this); + //在线数加1 + addOnlineCount(); + } + for (String mobile : this.mobiles) { + redisUtilPool.setString(mobile, tenantId, 3600); + } + log.info("用户连接:" + tenantId + ",当前在线人数为:" + getOnlineCount()); + sendMessage("连接成功"); + } + + /** + * 连接关闭 + * 调用的方法 + */ + @OnClose + public void onClose() { + if (webSocketMap.containsKey(tenantId)) { + webSocketMap.get(tenantId).mobiles.forEach(mobile -> redisUtilPool.delKey(mobile)); + webSocketMap.remove(tenantId); + //从set中删除 + subOnlineCount(); + } + log.info("用户退出:" + tenantId + ",当前在线人数为:" + getOnlineCount()); + } + + /** + * 收到客户端消 + * 息后调用的方法 + * + * @param message 客户端发送过来的消息 + **/ + @OnMessage + public void onMessage(String message, Session session) { + log.info("用户消息:" + tenantId + ",报文:" + message); + //可以群发消息 + //消息保存到数据库、redis + if (StringUtils.isNotBlank(message)) { + try { + //解析发送的报文 + JSONObject jsonObject = JSON.parseObject(message); + //追加发送人(防止串改) + jsonObject.put("fromUserId", this.tenantId); + String toUserId = jsonObject.getString("toUserId"); + //传送给对应toUserId用户的websocket + if (StringUtils.isNotBlank(toUserId) && webSocketMap.containsKey(toUserId)) { + webSocketMap.get(toUserId).sendMessage(message); + } else { + //否则不在这个服务器上,发送到mysql或者redis + log.error("请求的userId:" + toUserId + "不在该服务器上"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + + /** + * @param session Session + * @param error Throwable + */ + @OnError + public void onError(Session session, Throwable error) { + + log.error("用户错误:" + this.tenantId + ",原因:" + error.getMessage()); + error.printStackTrace(); + } + + /** + * 实现服务 + * 器主动推送 + */ + public boolean sendMessage(String message) { + boolean flag = false; + try { + this.session.getBasicRemote().sendText(message); + flag = true; + } catch (IOException e) { + log.error("发送消息失败:" + this.tenantId + ",原因:" + e.getMessage()); + e.printStackTrace(); + } + return flag; + } + + /** + * 发送自定 + * 义消息 + **/ + public static boolean sendInfo(String message, String tenantId) { + boolean flag = false; + log.info("发送消息到:" + tenantId + ",报文:" + message); + if (StringUtils.isNotBlank(tenantId) && webSocketMap.containsKey(tenantId)) { + webSocketMap.get(tenantId).sendMessage(message); + flag = true; + } else { + log.error("用户" + tenantId + ",不在线!"); + } + return flag; + } + + /** + * 获得此时的 + * 在线人数 + * + * @return int + */ + public static synchronized int getOnlineCount() { + return onlineCount; + } + + /** + * 在线人 + * 数加1 + */ + public static synchronized void addOnlineCount() { + WebSocketServer.onlineCount++; + } + + /** + * 在线人 + * 数减1 + */ + public static synchronized void subOnlineCount() { + WebSocketServer.onlineCount--; + } + + /** + * 判断用户是否在线 + * @param tenantId + * @return + */ + public static boolean isOnline(String tenantId) { + if(StringUtils.isEmpty(tenantId)) { + return false; + } + return webSocketMap.containsKey(tenantId); + } + + public static String getHeader(Session session, String headerName) { + final String header = (String) session.getUserProperties().get(headerName); + if (StrUtil.isBlank(header)) { + log.error("获取header失败,不安全的链接,即将关闭"); + try { + session.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return header; + } + + public static String getTenantIdByMobile(String mobile){ + String jsonStr = redisUtilPool.getString(mobile); + if (StringUtils.isNotEmpty(jsonStr)){ + return jsonStr; + } + + //如果redis中没有,循环webSocketMap,找到对应的tenantId + for (String key : webSocketMap.keySet()) { + WebSocketServer webSocketServer = webSocketMap.get(key); + if (webSocketServer.mobiles.contains(mobile)){ + return webSocketServer.tenantId; + } + } + + return null; + } +} \ No newline at end of file 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 new file mode 100644 index 000000000..5160cf538 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/http/WechatRest.java @@ -0,0 +1,123 @@ +package com.cool.store.http; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.dto.wx.CodeSessionDTO; +import com.cool.store.dto.wx.MiniAppUrlLinkDTO; +import com.cool.store.dto.wx.MiniAppUrlLinkReqDTO; +import com.cool.store.dto.wx.PhoneInfoDTO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mq.util.HttpRestTemplateService; +import com.cool.store.utils.RedisUtilPool; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.HashMap; + +/** + * @author zhangchenbiao + * @FileName: WechatRest + * @Description:微信api + * @date 2023-05-29 14:49 + */ +@Slf4j +@Service +public class WechatRest { + + @Resource + private RedisUtilPool redisUtilPool; + + @Resource + private HttpRestTemplateService httpRestTemplateService; + + /** + * 小程序Token 地址 + */ + String ACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"; + /** + * 获取手机号码 地址 + */ + String GET_USERPHONENUMBER = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=%s"; + + String GET_MINIAPP_URL_LINK = "https://api.weixin.qq.com/wxa/generate_urllink?access_token=%s"; + + + public CodeSessionDTO miniProgramJsCodeSession(String appId, String secret, String jsCode){ + log.info("WechatRest#miniProgramJsCodeSession, jsCode:{}", jsCode); + String url = "https://api.weixin.qq.com/sns/jscode2session"; + HashMap requestMap = new HashMap(); + requestMap.put("appid", appId); + requestMap.put("secret", secret); + requestMap.put("js_code", jsCode); + requestMap.put("grant_type","authorization_code"); + try { + String responseStr = httpRestTemplateService.getForObject(url, String.class ,requestMap); + log.info("WechatRest#miniProgramJsCodeSession, url:{}, response:{}", url, responseStr); + if(StringUtils.isNotBlank(responseStr)){ + return JSONObject.parseObject(responseStr, CodeSessionDTO.class); + } + } catch (Exception e) { + log.info("调用微信服务异常{}", e); + throw new ServiceException(ErrorCodeEnum.WX_SERVICE_ERROR); + } + return null; + } + + public String getAccessToken(String appId, String secret) { + String cacheAccessToken = "wechat_mini_" + appId; + String accessToken = redisUtilPool.getString(cacheAccessToken); + if (StringUtils.isNotBlank(accessToken)) { + return accessToken; + } + String reqUrl = String.format(ACCESS_TOKEN, appId, secret); + try { + JSONObject jsonObject = httpRestTemplateService.getForObject(reqUrl, JSONObject.class, new HashMap()); + log.info("WechatRest#getAccessToken, reqUrl:{}, response:{}", reqUrl, JSONObject.toJSONString(jsonObject)); + String token = jsonObject.getString("access_token"); + if (StringUtils.isBlank(token)) { + throw new ServiceException(ErrorCodeEnum.GET_ACCESSTOKEN_ERROR); + } + redisUtilPool.setString(cacheAccessToken, token, 7000); + return token; + } catch (Exception e) { + log.error("获取微信小程序token异常", e); + } + return null; + } + + + public PhoneInfoDTO getUserPhoneNumber(String code, String accessToken){ + String reqUrl = String.format(GET_USERPHONENUMBER, accessToken); + HashMap requestMap = new HashMap(); + requestMap.put("code", code); + String responseStr = null; + try { + responseStr = httpRestTemplateService.postForObject(reqUrl, requestMap, String.class); + log.info("WechatRest#getUserPhoneNumber, reqUrl:{}, response:{}", reqUrl, responseStr); + if(StringUtils.isNotBlank(responseStr)){ + return JSONObject.parseObject(responseStr, PhoneInfoDTO.class); + } + } catch (Exception e) { + log.error("获取手机号异常", e); + } + return null; + } + + public MiniAppUrlLinkDTO getMiniAppUrlLink(String accessToken, MiniAppUrlLinkReqDTO miniAppUrlLinkReqDTO){ + String reqUrl = String.format(GET_MINIAPP_URL_LINK, accessToken); + String responseStr = null; + try { + responseStr = httpRestTemplateService.postForObject(reqUrl, miniAppUrlLinkReqDTO, String.class); + log.info("WechatRest#getUserPhoneNumber, reqUrl:{}, response:{}", reqUrl, responseStr); + if(StringUtils.isNotBlank(responseStr)){ + return JSONObject.parseObject(responseStr, MiniAppUrlLinkDTO.class); + } + } catch (Exception e) { + log.error("获取手机号异常", e); + } + return null; + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/ProducerClient.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/ProducerClient.java new file mode 100644 index 000000000..f086d3ac5 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/ProducerClient.java @@ -0,0 +1,45 @@ +package com.cool.store.mq; + +import com.aliyun.openservices.ons.api.bean.OrderProducerBean; +import com.aliyun.openservices.ons.api.bean.ProducerBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +/** + * @author zhangchenbiao + * @FileName: ProducerClient + * @Description: 普通消息client + * @date 2021-12-21 11:33 + */ +@Configuration +public class ProducerClient { + + @Autowired + private RocketMqConfig rocketMqConfig; + + /** + * 普通消息 + * @return + */ + @Primary + @Bean(initMethod = "start", destroyMethod = "shutdown") + public ProducerBean producerBean() { + ProducerBean producer = new ProducerBean(); + producer.setProperties(rocketMqConfig.getMqProperties()); + return producer; + } + + /** + * 分区顺序消息 + * @return + */ + @Bean(initMethod = "start", destroyMethod = "shutdown") + public OrderProducerBean orderProducerBean() { + OrderProducerBean producer = new OrderProducerBean(); + producer.setProperties(rocketMqConfig.getMqProperties()); + return producer; + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/RocketMqConfig.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/RocketMqConfig.java new file mode 100644 index 000000000..864b76551 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/RocketMqConfig.java @@ -0,0 +1,78 @@ +package com.cool.store.mq; + +import com.aliyun.openservices.ons.api.PropertyKeyConst; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import java.util.Properties; + +/** + * @author zhangchenbiao + * @FileName: RocketMqConfig + * @Description: 该服务的rocketmq的配置 以及生产者的topic + * @date 2021-12-21 11:33 + */ +@Configuration +@ConfigurationProperties(prefix = "rocketmq") +public class RocketMqConfig { + + private String accessKey; + private String secretKey; + private String nameSrvAdder; + /** + * 普通消息的topic + */ + private String topic; + /** + * 分区顺序消息topic + */ + private String orderTopic; + + public Properties getMqProperties() { + Properties properties = new Properties(); + properties.setProperty(PropertyKeyConst.AccessKey, this.accessKey); + properties.setProperty(PropertyKeyConst.SecretKey, this.secretKey); + properties.setProperty(PropertyKeyConst.NAMESRV_ADDR, this.nameSrvAdder); + return properties; + } + + public String getAccessKey() { + return accessKey; + } + + public void setAccessKey(String accessKey) { + this.accessKey = accessKey; + } + + public String getSecretKey() { + return secretKey; + } + + public void setSecretKey(String secretKey) { + this.secretKey = secretKey; + } + + public String getNameSrvAdder() { + return nameSrvAdder; + } + + public void setNameSrvAdder(String nameSrvAdder) { + this.nameSrvAdder = nameSrvAdder; + } + + public String getTopic() { + return topic; + } + + public void setTopic(String topic) { + this.topic = topic; + } + + public String getOrderTopic() { + return orderTopic; + } + + public void setOrderTopic(String orderTopic) { + this.orderTopic = orderTopic; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/RocketMqLogAspect.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/RocketMqLogAspect.java new file mode 100644 index 000000000..59f62f5e1 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/RocketMqLogAspect.java @@ -0,0 +1,65 @@ +package com.cool.store.mq; + + +import com.aliyun.openservices.ons.api.Constants; +import com.aliyun.openservices.ons.api.Message; +import com.cool.store.constants.CommonConstants; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.slf4j.MDC; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.Objects; + +/** + * 切面处理类,操作日志异常日志记录处理 + * @author jiangjixiang + */ +@Aspect +@Component +@Slf4j +public class RocketMqLogAspect { + + + /** + * 设置操作异常切入点记录异常日志 扫描所有controller包下操作 + */ + @Pointcut(value = "execution(public * com.cool.store.mq.consumer.listener..*.consume(..))") + public void rocketMqMdc() { + } + + /** + * 正常返回通知,拦截用户操作日志,连接点正常执行完成后执行, 如果连接点抛出异常,则不会执行 + * + * @param joinPoint 切入点 + * @param keys 返回结果 + */ + @Before(value = "rocketMqMdc()") + public void mqBeforeLog(JoinPoint joinPoint) { + try { + Object[] args = joinPoint.getArgs(); + Message message = (Message)args[0]; + String traceId = message.getMsgID() + Constants.TOPIC_PARTITION_SEPARATOR + message.getReconsumeTimes(); + String requestId = message.getUserProperties(CommonConstants.REQUEST_ID); + MDC.put(CommonConstants.REQUEST_ID, requestId); + MDC.put(CommonConstants.MESSAGE_ID, traceId); + } catch (IllegalArgumentException e) { + log.info("MDC mqBeforeLog", e); + } + } + + + @AfterReturning(value = "rocketMqMdc()") + public void doAfterReturning(JoinPoint joinPoint){ + try { + MDC.clear(); + } catch (Exception e) { + log.info("MDC doAfterReturning", e); + } + } +} \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/ConsumerClient.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/ConsumerClient.java new file mode 100644 index 000000000..7bfffd031 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/ConsumerClient.java @@ -0,0 +1,103 @@ +package com.cool.store.mq.consumer; + +import com.aliyun.openservices.ons.api.MessageListener; +import com.aliyun.openservices.ons.api.PropertyKeyConst; +import com.aliyun.openservices.ons.api.PropertyValueConst; +import com.aliyun.openservices.ons.api.bean.ConsumerBean; +import com.aliyun.openservices.ons.api.bean.Subscription; +import com.cool.store.constants.CommonConstants; +import com.cool.store.enums.RocketMqGroupEnum; +import com.cool.store.mq.RocketMqConfig; +import com.cool.store.mq.consumer.listener.XfsgTrainingPersonSyncListener; +import com.google.common.collect.Maps; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.annotation.Resource; +import java.util.Map; +import java.util.Properties; + +/** + * @author zhangchenbiao + * @FileName: OrderlyConsumerClient + * @Description: 普通消息消费client + * @date 2021-12-21 11:35 + */ +@Configuration +public class ConsumerClient { + + @Resource + private RocketMqConfig rocketMqConfig; +// @Resource +// private FeiShuEventListener feiShuEventListener; + @Resource + private XfsgTrainingPersonSyncListener xfsgTrainingPersonSyncListener; + + /** + * 获取通用配置 + * @param groupEnum + * @return + */ + private Properties getCommonProperties(RocketMqGroupEnum groupEnum) { + //配置文件 + Properties properties = rocketMqConfig.getMqProperties(); + //消费者需指定groupId 根据实际情况指定groupId + properties.setProperty(PropertyKeyConst.GROUP_ID, RocketMqGroupEnum.getGroupId(groupEnum)); + //消费模式 集群消费 + properties.setProperty(PropertyKeyConst.MessageModel, PropertyValueConst.CLUSTERING); + //消息最大重试次数 + properties.setProperty(PropertyKeyConst.MaxReconsumeTimes, CommonConstants.MaxReconsumeTimes); + //开启最大线程数 + properties.setProperty(PropertyKeyConst.ConsumeThreadNums, CommonConstants.FIVE_STR); + return properties; + } + + /** + * 获取通用订阅关系 + * @param groupEnum + * @param listener + * @return + */ + public Map getCommonSubscriptionTable(RocketMqGroupEnum groupEnum, MessageListener listener) { + Map subscriptionTable = Maps.newHashMap(); + Subscription subscription = new Subscription(); + subscription.setTopic(rocketMqConfig.getTopic()); + subscription.setExpression(RocketMqGroupEnum.getTag(groupEnum)); + subscriptionTable.put(subscription, listener); + return subscriptionTable; + } + + /** + * 用户事件监听 + * @return + */ +// @Bean(initMethod = "start", destroyMethod = "shutdown") +// public ConsumerBean test() { +// RocketMqGroupEnum groupEnum = RocketMqGroupEnum.FEI_SHU_EVENT_LISTENER; +// ConsumerBean consumerBean = new ConsumerBean(); +// //配置文件 +// Properties properties = getCommonProperties(groupEnum); +// consumerBean.setProperties(properties); +//// Map commonSubscriptionTable = getCommonSubscriptionTable(groupEnum, feiShuEventListener); +// //订阅多个topic如上面设置 +// consumerBean.setSubscriptionTable(commonSubscriptionTable); +// return consumerBean; +// } + + /** + * 鲜丰门店下培训人员拉取 + */ + @Bean(initMethod = "start", destroyMethod = "shutdown") + public ConsumerBean xfsgTrainingPersonSyncQueueBean() { + RocketMqGroupEnum groupEnum = RocketMqGroupEnum.SYNC_TRAINING_PERSON; + ConsumerBean consumerBean = new ConsumerBean(); + //配置文件 + Properties properties = getCommonProperties(groupEnum); + consumerBean.setProperties(properties); + Map commonSubscriptionTable = getCommonSubscriptionTable(groupEnum, xfsgTrainingPersonSyncListener); + //订阅多个topic如上面设置 + consumerBean.setSubscriptionTable(commonSubscriptionTable); + return consumerBean; + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/listener/TestListener.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/listener/TestListener.java new file mode 100644 index 000000000..fd7fd3ea6 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/listener/TestListener.java @@ -0,0 +1,47 @@ +package com.cool.store.mq.consumer.listener; + +import com.aliyun.openservices.ons.api.Action; +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.constants.CommonConstants; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +/** + * 企业开通初始化 + * + * @author chenyupeng + * @since 2022/1/26 + */ +@Slf4j +@Service +public class TestListener implements MessageListener { + + + @Override + public Action consume(Message message, ConsumeContext consumeContext) { + if(message.getReconsumeTimes() + 1 >= Integer.parseInt(CommonConstants.MaxReconsumeTimes)){ + //超过最大消费次数 + return Action.CommitMessage; + } + String text = new String(message.getBody()); + log.info("text:{}", text); + if(StringUtils.isBlank(text)){ + return Action.CommitMessage; + } + return Action.CommitMessage; + } + + +} + + + + + + + + + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/listener/XfsgTrainingPersonSyncListener.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/listener/XfsgTrainingPersonSyncListener.java new file mode 100644 index 000000000..d7bd611fa --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/listener/XfsgTrainingPersonSyncListener.java @@ -0,0 +1,218 @@ +package com.cool.store.mq.consumer.listener; + +import com.alibaba.fastjson.JSONObject; +import com.aliyun.openservices.ons.api.Action; +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.constants.CommonConstants; +import com.cool.store.dao.*; +import com.cool.store.dto.ehr.StaffBaseInfoDTO; +import com.cool.store.dto.ehr.SyncXfsgTrainingPersonInfoDTO; +import com.cool.store.entity.*; +import com.cool.store.enums.RocketMqTagEnum; +import com.cool.store.enums.UserRoleEnum; +import com.cool.store.service.XfsgEhrService; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.poi.DateUtils; +import lombok.extern.slf4j.Slf4j; +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.Date; +import java.util.List; + +/** + * 鲜丰门店下培训人员拉取 + * @author wxp + * @since 2024/4/29 + */ +@Slf4j +@Service +public class XfsgTrainingPersonSyncListener implements MessageListener { + + @Resource + public XfsgEhrService xfsgEhrService; + + @Resource + private ShopInfoDAO shopInfoDAO; + + @Resource + private TempUserDetailDAO tempUserDetailDAO; + + @Autowired + public RedisUtilPool redisUtilPool; + + @Autowired + public StoreDao storeDao; + + @Autowired + public RegionDao regionDao; + + @Autowired + public EnterpriseUserDAO enterpriseUserDAO; + + @Override + public Action consume(Message message, ConsumeContext context) { + String text = new String(message.getBody()); + if(StringUtils.isBlank(text)){ + log.info("消息体为空,tag:{},messageId:{}",message.getTag(),message.getMsgID()); + return Action.CommitMessage; + } + String lockKey = "XfsgTrainingPersonSyncListener:" + message.getMsgID(); + boolean lock = redisUtilPool.setNxExpire(lockKey, message.getMsgID(), CommonConstants.NORMAL_LOCK_TIMES); + if(lock){ + try { + switch (RocketMqTagEnum.getByTag(message.getTag())){ + case SYNC_TRAINING_PERSON: + syncXfsgTrainingPerson(text); + break; + case SYNC_TRAINING_SHOP_PERSON: + syncXfsgTrainingShopPerson(text); + break; + } + }catch (Exception e){ + log.error("XfsgTrainingPersonSyncListener consume error",e); + return Action.ReconsumeLater; + }finally { + redisUtilPool.delKey(lockKey); + } + log.info("消费成功,tag:{},messageId:{},reqBody={}",message.getTag(),message.getMsgID(),text); + return Action.CommitMessage; + } + return Action.ReconsumeLater; + } + + public void syncXfsgTrainingPerson(String text) { + log.info("syncXfsgTrainingPerson, reqBody={}", text); + SyncXfsgTrainingPersonInfoDTO request = JSONObject.parseObject(text, SyncXfsgTrainingPersonInfoDTO.class); + if(StringUtils.isAnyBlank(request.getStoreNum(), request.getJobnumber(), request.getIdCard())){ + log.info("syncXfsgTrainingPerson参数缺失={}", text); + return; + } + // 系统建店完成一定有门店编码??? + ShopInfoDO shopInfoDO = shopInfoDAO.selectByStoreNum(request.getStoreNum()); + if(shopInfoDO == null){ + log.info("门店编码对应的店铺信息不存在storeNum:{}", request.getStoreNum()); + return; + } + TempUserDetailDO checkTempUserDetailDO = tempUserDetailDAO.selectByIdCard(request.getIdCard()); + // 系统已建店,并且身份证号信息不存在 + if(checkTempUserDetailDO == null){ + StaffBaseInfoDTO staffBaseInfoDTO = xfsgEhrService.getUserInfoByCode(request.getJobnumber()); + log.info("培训人员主数据信息:staffBaseInfoDTO:{}", JSONObject.toJSONString(staffBaseInfoDTO)); + if(staffBaseInfoDTO != null){ + TempUserDetailDO tempUserDetailDO = fillTempUserDetailDO(shopInfoDO, staffBaseInfoDTO); + tempUserDetailDAO.insertSelective(tempUserDetailDO); + } + }else if(checkTempUserDetailDO != null && + (checkTempUserDetailDO.getShopId() == 0L || checkTempUserDetailDO.getShopId() != shopInfoDO.getId())){ + // 已录入,但是没有店铺id + checkTempUserDetailDO.setLineId(shopInfoDO.getLineId()); + checkTempUserDetailDO.setShopId(shopInfoDO.getId()); + checkTempUserDetailDO.setRegionId(shopInfoDO.getRegionId()); + tempUserDetailDAO.updateByPrimaryKeySelective(checkTempUserDetailDO); + }else { + log.info("培训人员身份证信息已存在idCard:{}", checkTempUserDetailDO.getIdCard()); + return; + } + + } + + private TempUserDetailDO fillTempUserDetailDO(ShopInfoDO shopInfoDO, StaffBaseInfoDTO staffBaseInfoDTO) { + TempUserDetailDO tempUserDetailDO = new TempUserDetailDO(); + tempUserDetailDO.setLineId(shopInfoDO.getLineId()); + tempUserDetailDO.setShopId(shopInfoDO.getId()); + tempUserDetailDO.setRegionId(shopInfoDO.getRegionId()); + tempUserDetailDO.setMobile(staffBaseInfoDTO.getPhone()); + tempUserDetailDO.setUsername(staffBaseInfoDTO.getName()); + tempUserDetailDO.setSex(staffBaseInfoDTO.getSex()); + if(StringUtils.isNotBlank(staffBaseInfoDTO.getAge())){ + tempUserDetailDO.setAge(Integer.valueOf(staffBaseInfoDTO.getAge())); + } + tempUserDetailDO.setIdCard(staffBaseInfoDTO.getIdCard()); + tempUserDetailDO.setStatus(1); + tempUserDetailDO.setEducational(fillEducational(staffBaseInfoDTO.getHighestDegree())); + tempUserDetailDO.setRoleId(fillRoleId(staffBaseInfoDTO.getJobName())); + tempUserDetailDO.setIdCardNegativeUrl(staffBaseInfoDTO.getEmblemPhoto()); + tempUserDetailDO.setIdCardPositiveUrl(staffBaseInfoDTO.getIdNumPhoto()); + tempUserDetailDO.setHealthCertificateUrl(staffBaseInfoDTO.getHealthCertificate()); + tempUserDetailDO.setRegisterTime(new Date()); + if(StringUtils.isNotBlank(staffBaseInfoDTO.getEntryDate())){ + tempUserDetailDO.setRegisterTime(DateUtils.parseDate(staffBaseInfoDTO.getEntryDate())); + } + tempUserDetailDO.setSubmitTime(new Date()); + tempUserDetailDO.setSource("sync"); + return tempUserDetailDO; + } + + public void syncXfsgTrainingShopPerson(String text) { + log.info("syncXfsgTrainingShopPerson, reqBody={}", text); + ShopInfoDO shopInfoDO = JSONObject.parseObject(text, ShopInfoDO.class); + if(StringUtils.isAnyBlank(shopInfoDO.getStoreNum())){ + log.info("syncXfsgTrainingShopPerson={}", text); + return; + } + + StoreDO storeDO = storeDao.getByStoreNum(shopInfoDO.getStoreNum()); + + if(storeDO == null){ + log.info("syncXfsgTrainingShopPerson门店不存在={}", text); + return; + } + + RegionDO regionDO = regionDao.getRegionByStoreId(storeDO.getStoreId()); + + if(regionDO == null){ + log.info("syncXfsgTrainingShopPerson区域不存在={}", text); + return; + } + + List enterpriseUserDOList = enterpriseUserDAO.getUserListByRegionId(regionDO.getId()); + + enterpriseUserDOList.forEach(enterpriseUserDO -> { + // 拉取培训人员 + SyncXfsgTrainingPersonInfoDTO syncXfsgTrainingPersonInfoDTO = SyncXfsgTrainingPersonInfoDTO.builder() + .jobnumber(enterpriseUserDO.getJobnumber()) + .idCard(enterpriseUserDO.getThirdOaUniqueFlag()) + .storeNum(storeDO.getStoreNum()) + .build(); + this.syncXfsgTrainingPerson(JSONObject.toJSONString(syncXfsgTrainingPersonInfoDTO)); + }); + + } + + // 学历 0-小学 1-初中 2-高中 3-中专 4-大专 5-本科 6-硕士 7-硕士以上 + private Integer fillEducational(String highestDegree) { + if("小学".equals(highestDegree)){ + return 0; + }else if("初中".equals(highestDegree)){ + return 1; + }else if("高中".equals(highestDegree)){ + return 2; + }else if("中专".equals(highestDegree)){ + return 3; + }else if("大专".equals(highestDegree)){ + return 4; + }else if("本科".equals(highestDegree)){ + return 5; + }else if("硕士".equals(highestDegree)){ + return 6; + }else if("硕士以上".equals(highestDegree)){ + return 7; + } + return null; + } + + private Long fillRoleId(String jobName) { + if(UserRoleEnum.XFSG_CLERK.getDesc().equals(jobName)){ + return UserRoleEnum.XFSG_CLERK.getCode(); + }else if(UserRoleEnum.XFSG_SHOPOWNER.getDesc().equals(jobName)){ + return UserRoleEnum.XFSG_SHOPOWNER.getCode(); + } + return UserRoleEnum.XFSG_CLERK.getCode(); + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/producer/OrderMessageService.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/producer/OrderMessageService.java new file mode 100644 index 000000000..9aed3a7c9 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/producer/OrderMessageService.java @@ -0,0 +1,23 @@ +package com.cool.store.mq.producer; + +import com.aliyun.openservices.ons.api.SendResult; +import com.cool.store.enums.RocketMqTagEnum; + +/** + * @author zhangchenbiao + * @FileName: OrderMessageService + * @Description: 顺序消息生产者 + * @date 2021-12-22 17:37 + */ +public interface OrderMessageService { + + /** + * 发送顺序消息 + * @param message + * @param tag + * @param shardingKey + * @return + */ + SendResult send(String message, RocketMqTagEnum tag, final String shardingKey); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/producer/SimpleMessageService.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/producer/SimpleMessageService.java new file mode 100644 index 000000000..09ebec5a2 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/producer/SimpleMessageService.java @@ -0,0 +1,46 @@ +package com.cool.store.mq.producer; + +import com.aliyun.openservices.ons.api.SendCallback; +import com.aliyun.openservices.ons.api.SendResult; +import com.cool.store.enums.RocketMqTagEnum; + +/** + * @author zhangchenbiao + * @FileName: MessageProducerService + * @Description: rocketmq 消息生产者 + * @date 2021-12-22 16:12 + */ +public interface SimpleMessageService { + + /** + * 同步发送 + * @param message 消息 + * @param tag tag + * @return + */ + SendResult send(String message, RocketMqTagEnum tag); + + /** + * 单向发送 + * @param message 消息 + * @param tag tag + */ + void sendOneway(String message, RocketMqTagEnum tag); + + /** + * 异步发送 + * @param message 消息 + * @param tag tag + * @param sendCallback 回调 + */ + void sendAsync(String message, RocketMqTagEnum tag, SendCallback sendCallback); + + /** + * 同步发送(延时) + * @param message + * @param tag + * @param startDeliverTime + * @return + */ + SendResult send(String message, RocketMqTagEnum tag, Long startDeliverTime); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/producer/impl/OrderMessageServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/producer/impl/OrderMessageServiceImpl.java new file mode 100644 index 000000000..26a049fbf --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/producer/impl/OrderMessageServiceImpl.java @@ -0,0 +1,57 @@ +package com.cool.store.mq.producer.impl; + +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.producer.OrderMessageService; +import com.cool.store.mq.RocketMqConfig; +import com.cool.store.utils.UUIDUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.MDC; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; +import java.util.Properties; + +/** + * @author zhangchenbiao + * @FileName: OrderMessageServiceImpl + * @Description: 顺序消息生产实现 + * @date 2021-12-22 17:38 + */ +@Slf4j +@Service +public class OrderMessageServiceImpl implements OrderMessageService { + + @Resource + private RocketMqConfig rocketMqConfig; + + @Resource + private OrderProducerBean orderProducerBean; + + @Override + public SendResult send(String message, RocketMqTagEnum tag, String shardingKey) { + if(StringUtils.isAnyBlank(message, shardingKey) || Objects.isNull(tag)){ + return new SendResult(); + } + try { + Message msg = new Message(rocketMqConfig.getOrderTopic(), tag.getTag(), message.getBytes("UTF-8")); + Properties properties = new Properties(); + String requestId = MDC.get(CommonConstants.REQUEST_ID); + if(StringUtils.isBlank(requestId)){ + requestId = UUIDUtils.get32UUID(); + } + properties.setProperty(CommonConstants.REQUEST_ID, requestId); + msg.setUserProperties(properties); + SendResult send = orderProducerBean.send(msg, shardingKey); + return send; + } catch (Exception e) { + log.error("send@@@@@@@@@ddd", e); + } + return null; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/producer/impl/SimpleMessageServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/producer/impl/SimpleMessageServiceImpl.java new file mode 100644 index 000000000..6e67c406a --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/producer/impl/SimpleMessageServiceImpl.java @@ -0,0 +1,129 @@ +package com.cool.store.mq.producer.impl; + +import com.alibaba.fastjson.JSONObject; +import com.aliyun.openservices.ons.api.Message; +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.producer.SimpleMessageService; +import com.cool.store.utils.UUIDUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.MDC; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.Objects; +import java.util.Properties; + +/** + * @author zhangchenbiao + * @FileName: MessageProducerServiceImpl + * @Description: 消息生产者实现 + * @date 2021-12-22 16:12 + */ +@Service +@Slf4j +public class SimpleMessageServiceImpl implements SimpleMessageService { + + @Resource + private RocketMqConfig rocketMqConfig; + + @Resource + private ProducerBean producer; + + @Override + public SendResult send(String message, RocketMqTagEnum tag) { + if(StringUtils.isBlank(message) || Objects.isNull(tag)){ + return new SendResult(); + } + try { + Message msg = new Message(rocketMqConfig.getTopic(), tag.getTag(), message.getBytes("UTF-8")); + Properties properties = new Properties(); + String requestId = MDC.get(CommonConstants.REQUEST_ID); + if(StringUtils.isBlank(requestId)){ + requestId = UUIDUtils.get32UUID(); + } + properties.setProperty(CommonConstants.REQUEST_ID, requestId); + msg.setUserProperties(properties); + SendResult send = producer.send(msg); + log.info("消息发送send mqTag:{}, response:{}", tag.getTag(), JSONObject.toJSONString(send)); + return send; + } catch (Exception e) { + log.error("send#######", e); + } + return new SendResult(); + + } + + @Override + public void sendOneway(String message, RocketMqTagEnum tag) { + if(StringUtils.isBlank(message) || Objects.isNull(tag)){ + return; + } + try { + Message msg = new Message(rocketMqConfig.getTopic(), tag.getTag(), message.getBytes("UTF-8")); + Properties properties = new Properties(); + String requestId = MDC.get(CommonConstants.REQUEST_ID); + if(StringUtils.isBlank(requestId)){ + requestId = UUIDUtils.get32UUID(); + } + properties.setProperty(CommonConstants.REQUEST_ID, requestId); + msg.setUserProperties(properties); + producer.sendOneway(msg); + } catch (Exception e) { + log.error("send@@@@@@", e); + } + } + + @Override + public void sendAsync(String message, RocketMqTagEnum tag, SendCallback sendCallback) { + if(StringUtils.isBlank(message) || Objects.isNull(tag)){ + return; + } + try { + Message msg = new Message(rocketMqConfig.getTopic(), tag.getTag(), message.getBytes("UTF-8")); + Properties properties = new Properties(); + String requestId = MDC.get(CommonConstants.REQUEST_ID); + if(StringUtils.isBlank(requestId)){ + requestId = UUIDUtils.get32UUID(); + } + properties.setProperty(CommonConstants.REQUEST_ID, requestId); + msg.setUserProperties(properties); + producer.sendAsync(msg, sendCallback); + } catch (Exception e) { + log.error("sendAsync@@@@@@", e); + } + } + + @Override + public SendResult send(String message, RocketMqTagEnum tag, Long startDeliverTime) { + if(StringUtils.isBlank(message) || Objects.isNull(tag)){ + return new SendResult(); + } + try { + Message msg = new Message(rocketMqConfig.getTopic(), tag.getTag(), message.getBytes("UTF-8")); + if(Objects.nonNull(startDeliverTime)) { + log.info("{} startDeliverTime:{}", tag.getTag(),new Date(startDeliverTime)); + msg.setStartDeliverTime(startDeliverTime); + } + Properties properties = new Properties(); + String requestId = MDC.get(CommonConstants.REQUEST_ID); + if(StringUtils.isBlank(requestId)){ + requestId = UUIDUtils.get32UUID(); + } + properties.setProperty(CommonConstants.REQUEST_ID, requestId); + msg.setUserProperties(properties); + SendResult send = producer.send(msg); + log.info("发送消息:data:{}", JSONObject.toJSONString(send)); + return send; + } catch (Exception e) { + log.error("send@@@@@@@@@", e); + } + return new SendResult(); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/util/HttpRestTemplateService.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/util/HttpRestTemplateService.java new file mode 100644 index 000000000..8094938a2 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/util/HttpRestTemplateService.java @@ -0,0 +1,197 @@ +package com.cool.store.mq.util; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.google.common.collect.Lists; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.HttpStatusCodeException; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@Service +public class HttpRestTemplateService { + + @Autowired + private RestTemplate restTemplate; + + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + /** + * 获取请求实体对象 + * + * @param object + * @param tenantAccessToken + * @return + */ + private HttpEntity getHttpEntity(Object object, String tenantAccessToken) { + return new HttpEntity(object, this.getHeaders(tenantAccessToken)); + } + + public T getForObject(String url, Class responseType, Map uriVariables , Map headMap) { + logger.info("getForObject start:url={},responseType={},uriVariables={}", url, responseType.getName(), + JSONObject.toJSONString(uriVariables)); + ResponseEntity result = null; + try { + //封装请求头 + HttpHeaders headers = new HttpHeaders(); + headMap.forEach((k, v)->{ + headers.add(k, v); + }); + HttpEntity> formEntity = new HttpEntity>(headers); + result = exchange(url, HttpMethod.GET, formEntity, responseType, uriVariables); + } catch (RestClientException e) { + logger.error("getForObject error:{}", e); + throw new ServiceException(ErrorCodeEnum.UNKNOWN); + } + logger.info("getForObject end:result={}", JSONObject.toJSONString(result)); + return result.getBody(); + } + + public T getForObject(String url, Class responseType, Map uriVariables) { + logger.info("getForObject start:url={},responseType={},uriVariables={}", url, responseType.getName(), JSONObject.toJSONString(uriVariables)); + T result = null; + try { + result = restTemplate.getForObject(transUrl(url, uriVariables), responseType, uriVariables); + } catch (RestClientException e) { + logger.error("getForObject error:{}", e); + throw new ServiceException(ErrorCodeEnum.UNKNOWN); + } + logger.info("getForObject end:result={}", JSONObject.toJSONString(result)); + return result; + } + + private String transUrl(String url, Map uriVariables) { + StringBuilder finalUrl = new StringBuilder(url); + if (Objects.isNull(uriVariables)) { + return finalUrl.toString(); + } + if (StringUtils.isNotBlank(url)) { + if (url.contains("?")) { + if (url.endsWith("?")) { + finalUrl.append("1=1"); + } + } else { + finalUrl.append("?1=1"); + } + uriVariables.forEach((k, v) -> { + finalUrl.append("&").append(k).append("={").append(k).append("}"); + }); + + } + return finalUrl.toString(); + } + + + public T postForObject(String url, Object request, Class responseType) { + logger.info("postForObject start:url={},request={},responseType={}", + url, JSONObject.toJSONString(request), responseType.getName()); + T result = null; + try { + result = restTemplate.postForObject(url, getHttpEntity(request, null), responseType); + } catch (RestClientException e) { + logger.error("postForObject error:{}", e); + throw e; + } + logger.info("postForObject end:result={}", JSONObject.toJSONString(result)); + return result; + } + + public T postForObject(String url, Object request, String tenantAccessToken, Class responseType) { + logger.info("postForObject start:url={},request={},responseType={}, tenantAccessToken:{}", + url, JSONObject.toJSONString(request), responseType.getName(), tenantAccessToken); + T result = null; + try { + result = restTemplate.postForObject(url, getHttpEntity(request, tenantAccessToken), responseType); + } catch (RestClientException e) { + logger.error("postForObject error:{}", JSONObject.toJSONString(result)); + logger.error("postForObject error:{}", e); + throw e; + } + logger.info("postForObject end:result={}", JSONObject.toJSONString(result)); + return result; + } + + public T postForObject(String url, Object request, Class responseType, Map headMap) { + logger.info("postForObject start:url={},request={},responseType={}, tenantAccessToken:{}", url, JSONObject.toJSONString(request), responseType.getName(), JSONObject.toJSONString(headMap)); + T result = null; + try { + MultiValueMap headers = new LinkedMultiValueMap(); + headMap.forEach((k, v)->{ + headers.add(k, v); + }); + headers.add("Content-Type", "application/json"); + HttpEntity httpEntity = new HttpEntity(request, headers); + result = restTemplate.postForObject(url, httpEntity, responseType); + } catch (RestClientException e) { + logger.error("postForObject error:{}", JSONObject.toJSONString(result)); + logger.error("postForObject error:{}", e); + throw e; + } + logger.info("postForObject end:result={}", JSONObject.toJSONString(result)); + return result; + } + + + /** + * 获取Headers + * + * @param tenantAccessToken + * @return + */ + private MultiValueMap getHeaders(String tenantAccessToken) { + MultiValueMap headers = new LinkedMultiValueMap(); + if (StringUtils.isNotEmpty(tenantAccessToken)) { + headers.add("Authorization", "Bearer " + tenantAccessToken); + } + headers.add("Content-Type", "application/json"); + return headers; + } + + public ResponseEntity exchange(String uri, HttpMethod httpMethod, HttpEntity httpEntity, + Class responseEntity, Map params) { + List queryStrings = Lists.newArrayList(); + if (!CollectionUtils.isEmpty(params)) { + params.forEach((k, v) -> { + queryStrings.add(k + "=" + v); + }); + } + String queryString = null; + if (!CollectionUtils.isEmpty(queryStrings)) { + queryString = String.join("&", queryStrings); + } + if (StringUtils.isNotBlank(queryString)) { + uri = uri + "?" + queryString; + } + ResponseEntity exchange = null; + logger.info("start exchange=uri:{},httpMethod:{},httpEntity:{},responseEntity:{},params:{}", uri, + httpMethod.toString(), httpEntity.toString(), responseEntity.toString(), + Objects.nonNull(params) ? params.toString() : null); + try { + exchange = restTemplate.exchange(uri, httpMethod, httpEntity, responseEntity); + } catch (HttpStatusCodeException e) { + logger.error("exchange err, resp={}", e.getResponseBodyAsString()); + } catch (Exception e) { + logger.error("exchange err:", e); + } + logger.info("end exchange=exchange:{},", exchange); + return exchange; + } + +} 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 new file mode 100644 index 000000000..918bff946 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/util/RocketMqUtil.java @@ -0,0 +1,197 @@ +package com.cool.store.mq.util; + +import com.aliyun.ons20190214.*; +import com.aliyun.ons20190214.models.*; +import com.aliyun.teaopenapi.models.Config; +import com.cool.store.constants.CommonConstants; +import com.cool.store.enums.RocketMqGroupEnum; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.ListUtils; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author chenyupeng + * @since 2022/1/5 + */ +@Slf4j +public class RocketMqUtil { + + private static final String INSTANCE_ID = "MQ_INST_1947409023213164_BX3sLZnA"; + + /** + * 本地 + */ + private static final String LOCAL_INSTANCE_ID = "MQ_INST_1255228665351616_BX3wfyPO"; + + private static final String INSTANCE_ID_ONLINE_HD_PRE = "MQ_INST_1947409023213164_BX5N7rwl"; + private static final String ACCESS_KEY = "LTAI5t5ouXZuFgxJMbQea3b2"; + private static final String ACCESS_SECRET = "yuomDstRjSdihtN5zo8viDbWu8Z0ig"; + /** + * 使用AK&SK初始化账号Client + * @param accessKeyId + * @param accessKeySecret + * @return Client + * @throws Exception + */ + public static Client createClient(String accessKeyId, String accessKeySecret) throws Exception { + Config config = new Config() + // 您的AccessKey ID + .setAccessKeyId(accessKeyId) + // 您的AccessKey Secret + .setAccessKeySecret(accessKeySecret); + // 访问的域名 + config.endpoint = "ons.cn-hangzhou.aliyuncs.com"; + return new Client(config); + } + + public static Client createLocalClient(String accessKeyId, String accessKeySecret) throws Exception { + Config config = new Config() + // 您的AccessKey ID + .setAccessKeyId(accessKeyId) + // 您的AccessKey Secret + .setAccessKeySecret(accessKeySecret); + // 访问的域名 + config.endpoint = "ons.mq-internet-access.aliyuncs.com"; + return new Client(config); + } + + /** + * 新增测试、开发环境的group + * @author chenyupeng + * @date 2022/1/13 + * @param profiles 环境后缀,逗号分隔 例如: dev,dev2 + * @return void + */ + public static void initGroup(String profiles) throws Exception { + Client client = RocketMqUtil.createClient(ACCESS_KEY, ACCESS_SECRET); + List profileList = Arrays.asList(profiles.split(CommonConstants.COMMA)); + if(CollectionUtils.isEmpty(profileList)){ + return; + } + + OnsGroupListRequest onsGroupListRequest = new OnsGroupListRequest(); + onsGroupListRequest.setInstanceId(INSTANCE_ID); + OnsGroupListResponse onsGroupListResponse = client.onsGroupList(onsGroupListRequest); + List subscribeInfoDo = onsGroupListResponse.getBody().getData().getSubscribeInfoDo(); + Map collect = ListUtils.emptyIfNull(subscribeInfoDo).stream(). + collect(Collectors.toMap(OnsGroupListResponseBody.OnsGroupListResponseBodyDataSubscribeInfoDo::getGroupId, data -> data, (a, b) -> a)); + + for (String profile : profileList) { + for (RocketMqGroupEnum groupEnum : RocketMqGroupEnum.values()) { + String groupId = groupEnum.getDefaultGroup() + "_" + profile; + //已经创建就继续 + if(collect.get(groupId) != null){ + continue; + } + OnsGroupCreateRequest onsGroupCreateRequest = new OnsGroupCreateRequest(); + onsGroupCreateRequest.setGroupId(groupId); + onsGroupCreateRequest.setInstanceId(INSTANCE_ID); + // 复制代码运行请自行打印 API 的返回值 + try { + client.onsGroupCreate(onsGroupCreateRequest); + }catch (Exception e){ + log.error("initGroupAndTag fail",e); + } + Thread.sleep(1000); + } + } + } + + public static void initLocalGroup(String profiles) throws Exception { + Client client = RocketMqUtil.createLocalClient("LTAI5tPWCTeCyngfYLqoSGWk", "jkzIXlvNF17ne5TPPEFP1sQhcfg4Je"); + List profileList = Arrays.asList(profiles.split(CommonConstants.COMMA)); + if(CollectionUtils.isEmpty(profileList)){ + return; + } + + OnsGroupListRequest onsGroupListRequest = new OnsGroupListRequest(); + onsGroupListRequest.setInstanceId(LOCAL_INSTANCE_ID); + OnsGroupListResponse onsGroupListResponse = client.onsGroupList(onsGroupListRequest); + List subscribeInfoDo = onsGroupListResponse.getBody().getData().getSubscribeInfoDo(); + Map collect = ListUtils.emptyIfNull(subscribeInfoDo).stream(). + collect(Collectors.toMap(OnsGroupListResponseBody.OnsGroupListResponseBodyDataSubscribeInfoDo::getGroupId, data -> data, (a, b) -> a)); + + for (String profile : profileList) { + for (RocketMqGroupEnum groupEnum : RocketMqGroupEnum.values()) { + String groupId = groupEnum.getDefaultGroup() + "_" + profile; + //已经创建就继续 + if(collect.get(groupId) != null){ + continue; + } + OnsGroupCreateRequest onsGroupCreateRequest = new OnsGroupCreateRequest(); + onsGroupCreateRequest.setGroupId(groupId); + onsGroupCreateRequest.setInstanceId(LOCAL_INSTANCE_ID); + // 复制代码运行请自行打印 API 的返回值 + try { + client.onsGroupCreate(onsGroupCreateRequest); + }catch (Exception e){ + log.error("initGroupAndTag fail",e); + } + Thread.sleep(1000); + } + } + } + + /** + * 新增线上、灰度、预发环境的group + * @author chenyupeng + * @date 2022/1/13 + * @param profiles 环境后缀,逗号分隔 例如: online,hd,pre + * @return void + */ + public static void initOnlineAndHdAndPreGroup(String profiles) throws Exception { + Client client = RocketMqUtil.createClient(ACCESS_KEY, ACCESS_SECRET); + List profileList = Arrays.asList(profiles.split(CommonConstants.COMMA)); + if(CollectionUtils.isEmpty(profileList)){ + return; + } + + OnsGroupListRequest onsGroupListRequest = new OnsGroupListRequest(); + onsGroupListRequest.setInstanceId(INSTANCE_ID_ONLINE_HD_PRE); + OnsGroupListResponse onsGroupListResponse = client.onsGroupList(onsGroupListRequest); + List subscribeInfoDo = onsGroupListResponse.getBody().getData().getSubscribeInfoDo(); + Map collect = ListUtils.emptyIfNull(subscribeInfoDo).stream(). + collect(Collectors.toMap(OnsGroupListResponseBody.OnsGroupListResponseBodyDataSubscribeInfoDo::getGroupId, data -> data, (a, b) -> a)); + + for (String profile : profileList) { + for (RocketMqGroupEnum groupEnum : RocketMqGroupEnum.values()) { + String groupId = groupEnum.getDefaultGroup() + "_" + profile; + //已经创建就继续 + if(collect.get(groupId) != null){ + continue; + } + OnsGroupCreateRequest onsGroupCreateRequest = new OnsGroupCreateRequest(); + onsGroupCreateRequest.setGroupId(groupId); + onsGroupCreateRequest.setInstanceId(INSTANCE_ID_ONLINE_HD_PRE); + // 复制代码运行请自行打印 API 的返回值 + try { + client.onsGroupCreate(onsGroupCreateRequest); + }catch (Exception e){ + log.error("initGroupAndTag fail",e); + } + Thread.sleep(1000); + } + } + + } + + /** + * 删除测试、开发环境的group + * @author chenyupeng + * @date 2022/1/13 + * @param groupId + * @return void + */ + public static void deleteGroupById(String groupId) throws Exception { + Client client = RocketMqUtil.createClient(ACCESS_KEY, ACCESS_SECRET); + OnsGroupDeleteRequest request = new OnsGroupDeleteRequest(); + request.setGroupId(groupId); + request.setInstanceId(INSTANCE_ID); + client.onsGroupDelete(request); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/oss/OSSServer.java b/coolstore-partner-service/src/main/java/com/cool/store/oss/OSSServer.java new file mode 100644 index 000000000..81504fc4d --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/oss/OSSServer.java @@ -0,0 +1,116 @@ +package com.cool.store.oss; + +import com.aliyun.oss.ClientException; +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import com.aliyun.oss.OSSException; +import com.aliyun.oss.model.OSSObject; +import com.aliyun.oss.model.PutObjectRequest; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.io.*; + +@Component +@Slf4j +public class OSSServer { + + @Value("${oss.accessKeyId:null}") + private String accessKeyId; + @Value("${oss.accessKeySecret:null}") + private String accessKeySecret; + @Value("${oss.endpoint:null}") + private String endpoint; + @Value("${oss.bucket:null}") + private String bucket; + + @Value("${cdn.url:null}") + private String cdnUrl; + + @Value("${oss.file.dir:null}") + private String dir; + + /** + * 服务端上传文件的方法 + * ObjectName 为文件存放位置 + 名字,不可包含 bucket + */ + public String uploadFileServer(InputStream inputStream, String objectName) { + // 创建OSSClient实例。 + OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); + try { + // 创建PutObjectRequest对象 + objectName = dir + objectName; + PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, objectName, inputStream); + // 创建PutObject请求。 + ossClient.putObject(putObjectRequest); + return cdnUrl + "/" + objectName; + } catch (OSSException oe) { + log.error("Caught an OSSException, which means your request made it to OSS, " + + "but was rejected with an error response for some reason."); + log.error("Error Message:" + oe.getErrorMessage()); + log.error("Error Code:" + oe.getErrorCode()); + log.error("Request ID:" + oe.getRequestId()); + log.error("Host ID:" + oe.getHostId()); + } catch (ClientException ce) { + log.error("Caught an ClientException, which means the client encountered " + + "a serious internal problem while trying to communicate with OSS, " + + "such as not being able to access the network."); + log.error("Error Message:" + ce.getMessage()); + } catch (RuntimeException e) { + throw new RuntimeException(e); + } + finally { + if (ossClient != null) { + ossClient.shutdown(); + } + } + return null; + } + + /** + * 服务端下载文件到内存流 + * @param objectName 自定义路径 + 文件名 + */ + public ByteArrayOutputStream downloadFileServer(String objectName) throws IOException { + // 创建OSSClient实例。 + OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + try { + // ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。 + OSSObject ossObject = ossClient.getObject(bucket, dir + objectName); + + // 读取文件内容转为 ByteArrayInputStream + InputStream objectInputstream = ossObject.getObjectContent(); + byte[] buffer = new byte[1024]; + int len; + while ((len = objectInputstream.read(buffer)) != -1 ) { + outputStream.write(buffer, 0, len); + } + outputStream.flush(); + + // ossObject对象使用完毕后必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。 + ossObject.close(); + + } catch (OSSException oe) { + log.error("Caught an OSSException, which means your request made it to OSS, " + + "but was rejected with an error response for some reason."); + log.error("Error Message:" + oe.getErrorMessage()); + log.error("Error Code:" + oe.getErrorCode()); + log.error("Request ID:" + oe.getRequestId()); + log.error("Host ID:" + oe.getHostId()); + } catch (Throwable ce) { + log.error("Caught an ClientException, which means the client encountered " + + "a serious internal problem while trying to communicate with OSS, " + + "such as not being able to access the network."); + log.error("Error Message:" + ce.getMessage()); + } finally { + if (ossClient != null) { + ossClient.shutdown(); + } + outputStream.close(); + } + return outputStream; + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/EcClient.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/EcClient.java new file mode 100644 index 000000000..e1f55ccbc --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/EcClient.java @@ -0,0 +1,37 @@ +package com.cool.store.sdk.ec; + +import com.alibaba.fastjson.JSON; +import com.cool.store.sdk.ec.core.EcRequest; +import com.cool.store.sdk.ec.core.EcResponse; +import com.cool.store.utils.Get; +import com.cool.store.utils.MapUtil; +import com.cool.store.utils.Post; +import lombok.SneakyThrows; +import org.springframework.beans.factory.annotation.Value; + +import java.util.HashMap; + +public class EcClient { + + + + + @SneakyThrows + public T exec(String baseUrl,EcRequest request) { + String apiUrl = request.getApiUrl(); +// if (accessToken != null) { +// apiUrl += "?token=" + accessToken; +// } + String method = request.getMethod(); + String result = ""; + if (method.equals("GET")) { + result = Get.send(baseUrl+apiUrl, MapUtil.entityToUrlParam(request.getParameter())); + } else { + HashMap headers = new HashMap<>(1); + headers.put("Content-Type", "application/json"); + result = Post.send(baseUrl+apiUrl, JSON.toJSONString(request.getParameter()), headers); + } + + return JSON.parseObject(result, request.getResponseClass()); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/bo/ChangeFollowUserBo.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/bo/ChangeFollowUserBo.java new file mode 100644 index 000000000..1b0e99df8 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/bo/ChangeFollowUserBo.java @@ -0,0 +1,24 @@ +package com.cool.store.sdk.ec.bo; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @author hxd + */ +@Data +@Accessors(chain = true) +public class ChangeFollowUserBo { + + //跟进人 + private Long crmId; + + private String username; + + private String mobile; + + private Long followUserId; + + //1:更新跟进人 2:创建跟进人并更改跟进人 + private Integer type; +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/bo/SyncEcCustomerBo.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/bo/SyncEcCustomerBo.java new file mode 100644 index 000000000..848e6a5ed --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/bo/SyncEcCustomerBo.java @@ -0,0 +1,9 @@ +package com.cool.store.sdk.ec.bo; + +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class SyncEcCustomerBo { +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/bo/UpdateCustomerBo.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/bo/UpdateCustomerBo.java new file mode 100644 index 000000000..225878d39 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/bo/UpdateCustomerBo.java @@ -0,0 +1,16 @@ +package com.cool.store.sdk.ec.bo; + +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class UpdateCustomerBo { + + private String username; + + private String mobile; + + private Long crmId; + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/core/EcRequest.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/core/EcRequest.java new file mode 100644 index 000000000..d555cb636 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/core/EcRequest.java @@ -0,0 +1,28 @@ +package com.cool.store.sdk.ec.core; + +/** + * @author hxd + */ +abstract public class EcRequest implements EcRequestI { + + private Object parameter; + + @Override + public String getMethod() { + return "POST"; + } + + @Override + public Object getParameter() { + return parameter; + } + + public void setParameter(Object parameter) { + this.parameter = parameter; + } + + @Override + public Class getResponseClass() { + return null; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/core/EcRequestI.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/core/EcRequestI.java new file mode 100644 index 000000000..1c9d1b849 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/core/EcRequestI.java @@ -0,0 +1,28 @@ +package com.cool.store.sdk.ec.core; + +public interface EcRequestI { + + /** + * 地址 + * @return - + */ + String getApiUrl(); + + /** + * 方法 + * @return - + */ + String getMethod(); + + /** + * 设置参数 + * @return - + */ + Object getParameter(); + + /** + * 响应类类型 + * @return - + */ + Class getResponseClass(); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/core/EcResponse.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/core/EcResponse.java new file mode 100644 index 000000000..19cb9c377 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/core/EcResponse.java @@ -0,0 +1,14 @@ +package com.cool.store.sdk.ec.core; + +import lombok.Data; + +@Data +public class EcResponse { + + private Integer code; + + private String msg; + + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/ChangeFollowUserRequest.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/ChangeFollowUserRequest.java new file mode 100644 index 000000000..1213d0527 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/ChangeFollowUserRequest.java @@ -0,0 +1,19 @@ +package com.cool.store.sdk.ec.request; + +import com.cool.store.sdk.ec.core.EcRequest; +import com.cool.store.sdk.ec.response.ChangeFollowUserResponse; + +public class ChangeFollowUserRequest extends EcRequest { + + + + @Override + public String getApiUrl() { + return "/ec/selectChangeUser"; + } + + @Override + public Class getResponseClass() { + return ChangeFollowUserResponse.class; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/SyncEcCustomerLabelRequest.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/SyncEcCustomerLabelRequest.java new file mode 100644 index 000000000..10ec923f0 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/SyncEcCustomerLabelRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.sdk.ec.request; + +import com.cool.store.sdk.ec.core.EcRequest; +import com.cool.store.sdk.ec.response.SyncEcCustomerLabelResponse; + +/** + * @author hxd + */ +public class SyncEcCustomerLabelRequest extends EcRequest { + + @Override + public String getApiUrl() { + return "/ec/appletToEcLabel"; + } + + + @Override + public Class getResponseClass() { + return SyncEcCustomerLabelResponse.class; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/SyncEcCustomerRequest.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/SyncEcCustomerRequest.java new file mode 100644 index 000000000..996c6bcd9 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/SyncEcCustomerRequest.java @@ -0,0 +1,26 @@ +package com.cool.store.sdk.ec.request; + +import com.cool.store.sdk.ec.core.EcRequest; +import com.cool.store.sdk.ec.response.SyncEcCustomerResponse; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @author hxd + */ +@Data +@Accessors(chain = true) +public class SyncEcCustomerRequest extends EcRequest { + + @Override + public String getApiUrl() { + return "/ec/appletToEc"; + } + + + @Override + public Class getResponseClass() { + return SyncEcCustomerResponse.class; + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/UpdateCustomerRequest.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/UpdateCustomerRequest.java new file mode 100644 index 000000000..c2c30bb92 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/UpdateCustomerRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.sdk.ec.request; + +import com.cool.store.sdk.ec.core.EcRequest; +import com.cool.store.sdk.ec.response.UpdateCustomerResponse; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class UpdateCustomerRequest extends EcRequest { + + @Override + public String getApiUrl() { + return "/ec/updateCustomer"; + } + + @Override + public Class getResponseClass() { + return UpdateCustomerResponse.class; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/ChangeFollowUserResponse.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/ChangeFollowUserResponse.java new file mode 100644 index 000000000..7c9db1b32 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/ChangeFollowUserResponse.java @@ -0,0 +1,15 @@ +package com.cool.store.sdk.ec.response; + +import com.cool.store.sdk.ec.core.EcResponse; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author hxd + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class ChangeFollowUserResponse extends EcResponse { + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/SyncEcCustomerLabelResponse.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/SyncEcCustomerLabelResponse.java new file mode 100644 index 000000000..07afec140 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/SyncEcCustomerLabelResponse.java @@ -0,0 +1,21 @@ +package com.cool.store.sdk.ec.response; + + +import com.cool.store.sdk.ec.core.EcResponse; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * @author hxd + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +public class SyncEcCustomerLabelResponse extends EcResponse { + +// private List data; + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/SyncEcCustomerResponse.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/SyncEcCustomerResponse.java new file mode 100644 index 000000000..80e7278a3 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/SyncEcCustomerResponse.java @@ -0,0 +1,16 @@ +package com.cool.store.sdk.ec.response; + +import com.cool.store.sdk.ec.core.EcResponse; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @author hxd + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +public class SyncEcCustomerResponse extends EcResponse { + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/UpdateCustomerResponse.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/UpdateCustomerResponse.java new file mode 100644 index 000000000..a18282a31 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/UpdateCustomerResponse.java @@ -0,0 +1,16 @@ +package com.cool.store.sdk.ec.response; + +import com.cool.store.sdk.ec.core.EcResponse; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @author hxd + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +public class UpdateCustomerResponse extends EcResponse { + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/AliyunService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/AliyunService.java new file mode 100644 index 000000000..1279fdd48 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/AliyunService.java @@ -0,0 +1,43 @@ +package com.cool.store.service; + +import com.cool.store.enums.IDCardSideEnum; +import com.cool.store.enums.SmsCodeTypeEnum; +import com.cool.store.exception.ApiException; +import com.cool.store.response.ResponseResult; +import com.cool.store.vo.BusinessLicenseInfoVO; +import com.cool.store.vo.FoodLicenseVO; +import com.cool.store.vo.IdentityCardInfoVO; + +public interface AliyunService { + /** + * ORC识别身份证信息 + * @param faceImageUrl + * @param sideEnum + * @return + * @throws ApiException + */ + IdentityCardInfoVO getIdentityCardInfo(String faceImageUrl, IDCardSideEnum sideEnum) throws ApiException; + + /** + * ORC识别营业执照 + * @param imageUrl + * @return + * @throws ApiException + */ + BusinessLicenseInfoVO getBusinessLicenseInfo(String imageUrl) throws ApiException; + + /** + * 发送短信 + * @param mobile + * @param codeType + * @return + */ + ResponseResult sendMessage(String mobile, SmsCodeTypeEnum codeType); + + /** + * ORC食营证照解析 + * @param imageUrl + * @return + */ + FoodLicenseVO getFoodLicense(String imageUrl) throws ApiException ; +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/ApplyLicenseService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/ApplyLicenseService.java new file mode 100644 index 000000000..29066b7f5 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/ApplyLicenseService.java @@ -0,0 +1,40 @@ +package com.cool.store.service; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.LicenseListRequest; +import com.cool.store.request.SubmitLicenseRequest; +import com.cool.store.response.LicenseListResponse; +import com.cool.store.response.SubmitLicenseResponse; +import com.cool.store.vo.PartnerUserInfoVO; +import com.github.pagehelper.PageInfo; + +public interface ApplyLicenseService { + /** + * 提交证照信息 + * @param request + * @return + */ + Boolean submitLicense(SubmitLicenseRequest request, PartnerUserInfoVO user); + + /** + * 获取默认值 + * @param shopId + * @return + */ + SubmitLicenseResponse getDefault(Long shopId); + + /** + * 证照审核列表 + * @param request + * @return + */ + PageInfo licenseList(LicenseListRequest request,LoginUserInfo user); + + /** + * 证照审核审批 + * @param id + * @param status 0通过 1不通过 + * @return + */ + Boolean licenseExamine(Long shopId, Integer status,String result,LoginUserInfo user); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/AssessmentDataService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/AssessmentDataService.java new file mode 100644 index 000000000..e883c35a8 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/AssessmentDataService.java @@ -0,0 +1,20 @@ +package com.cool.store.service; + +import com.cool.store.entity.AssessmentDataDO; +import io.swagger.models.auth.In; + +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/04/29/下午10:46 + * @Version 1.0 + * @注释: + */ +public interface AssessmentDataService { + Boolean batchInsertSelective(List assessmentDataDOS); + + Integer batchUpdate(List assessmentDataDOS); + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/AssessmentTemplateService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/AssessmentTemplateService.java new file mode 100644 index 000000000..4c81c4959 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/AssessmentTemplateService.java @@ -0,0 +1,25 @@ +package com.cool.store.service; + +import com.cool.store.vo.AssessmentTemplateVO; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/25 11:24 + * @Version 1.0 + */ +public interface AssessmentTemplateService { + + /** + * listByType + * @Description + * @Author suzhuhong + * @Date 2024/4/25 11:24 + * @param type + * @return + */ + List listByType(Integer type); + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/AuditOpeningOperationPlanService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/AuditOpeningOperationPlanService.java new file mode 100644 index 000000000..4ed913cd4 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/AuditOpeningOperationPlanService.java @@ -0,0 +1,25 @@ +package com.cool.store.service; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.OpeningOperationPlanAuditRequest; + +/** + * @Auther: WangShuo + * @Date: 2024/04/22/下午3:19 + * @Version 1.0 + * @注释: + */ +public interface AuditOpeningOperationPlanService { + + + /** + * @Auther: wangshuo + * @Date: 2024/4/23 + * @description:审核方案 + */ + + Boolean auditPlan(OpeningOperationPlanAuditRequest openingOperationPlanAuditRequest, LoginUserInfo user); + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/AuditStatusService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/AuditStatusService.java new file mode 100644 index 000000000..75737a3f2 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/AuditStatusService.java @@ -0,0 +1,45 @@ +package com.cool.store.service; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.entity.AuditStatusDO; +import com.cool.store.request.AuditCheckRequest; +import com.cool.store.request.AuditDetailRequest; +import com.cool.store.response.AuditDetailResponse; +import com.cool.store.response.CheckListResponse; +import com.github.pagehelper.PageInfo; + +import java.util.Date; +import java.util.List; + +public interface AuditStatusService { + + + /** + * 稽核 + * @return + */ + Boolean audit(AuditCheckRequest request, LoginUserInfo user); + + /** + *插入数据 + * @return + */ + int insert(Long lineId, + Long interviewId, + Long auditId, + Integer auditStage); + + AuditDetailResponse detail(AuditDetailRequest request); + + /** + * 稽核列表 + * @param partnerNameOrPhone 关键字 + * @param time 时间 + * @param region 意向区域 + * @param checkStatus 稽核状态 + * @param pageNum + * @param pageSize + * @return + */ + PageInfo checkList(String partnerNameOrPhone, String startTime, String endTime, String region, Integer checkStatus, Integer checkStage, Integer pageNum, Integer pageSize); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/BankService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/BankService.java new file mode 100644 index 000000000..28bd4571b --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/BankService.java @@ -0,0 +1,22 @@ +package com.cool.store.service; + +import com.cool.store.entity.BankdocDO; +import com.cool.store.entity.BanktypeDO; +import com.cool.store.request.AuditRejectRequest; +import com.cool.store.request.BranchBankPageRequest; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +/** + * @author Fun Li 2023/8/10 14:23 + * @version 1.0 + */ +public interface BankService { + List listBank(); + + PageInfo listBranchBank(BranchBankPageRequest request); + + Boolean repayment(AuditRejectRequest request); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/ContentService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/ContentService.java new file mode 100644 index 000000000..487127543 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/ContentService.java @@ -0,0 +1,55 @@ +package com.cool.store.service; + +import com.cool.store.dto.content.ContentAddDto; +import com.cool.store.dto.content.ContentQueryListDto; +import com.cool.store.dto.content.ContentUpdateDto; +import com.cool.store.entity.HyContentInfoDO; +import com.cool.store.exception.ApiException; +import com.cool.store.vo.HyContentInfoVO; + +import java.util.List; + +public interface ContentService { + + /** + * + * @param dto + * @return contentId 新增动态id + */ + String addNews(ContentAddDto dto) throws ApiException; + + /** + * 删除动态 + * @param contentId + */ + void deleteContent(String contentId); + + /** + * 更新动态信息 + * @param dto + */ + void updateContent(ContentUpdateDto dto) throws ApiException; + + /** + * 查询动态列表 + */ + List queryContentList(ContentQueryListDto dto); + + /** + * 查询动态列表 C 端用 + */ + List queryContentListToC(ContentQueryListDto dto); + + /** + * 查询动态详情 + * @param contentId + * @return + */ + HyContentInfoDO queryContentInfo(String contentId); + + /** + * 标题是否重复 + */ + Boolean queryTitles(String title); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/CoolStoreStartFlowService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/CoolStoreStartFlowService.java new file mode 100644 index 000000000..c0da06413 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/CoolStoreStartFlowService.java @@ -0,0 +1,54 @@ +package com.cool.store.service; + +import com.cool.store.dto.xfsgFirstOderDTO; +import com.cool.store.request.FranchiseAgreementRequest; +import com.cool.store.request.NewStoreRequest; +import com.cool.store.request.xfsgFirstOrderListRequest; +import com.cool.store.response.GetStoreInfoByCodeResponse; +import com.cool.store.response.ResponseResult; +import com.cool.store.response.xfsgFirstOderListResponse; + +import java.util.List; + +/** + * 鲜丰水果API(筹备相关) + * https://apifox.com/apidoc/shared-c48218f7-4a34-4422-8689-927502f171ff/api-164932487 + * 密码:aJJq9F7k + */ +public interface CoolStoreStartFlowService { + + /** + * 新店开业流程 + * @param request + * @return + */ + ResponseResult newStore(NewStoreRequest request,Long shopId); + + /** + *特许经营合同 + * @param request + * @param type 1:个人 2:企业 + * @return + */ + ResponseResult franchiseAgreement(FranchiseAgreementRequest request,Integer type); + + /** + * @Auther: wangshuo + * @Date: 2024/4/25 + * @description:获取订货金 + */ + Boolean getFirstOrder(String shopNum); + /** + * @Auther: wangshuo + * @Date: 2024/5/8 + * @description:批量获取订货金 + */ + xfsgFirstOderListResponse getFirstOrderList(xfsgFirstOrderListRequest storeCodeList); + /** + * 获取证照信息 + * @param storeNum + * @return + */ + GetStoreInfoByCodeResponse getStoreInfoCode(String storeNum); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationService.java new file mode 100644 index 000000000..8288c8164 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/DecorationService.java @@ -0,0 +1,120 @@ +package com.cool.store.service; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dto.decoration.ConstructionScheduleDTO; +import com.cool.store.dto.decoration.DecorationModelDTO; +import com.cool.store.dto.decoration.ThreeAcceptanceDTO; +import com.cool.store.request.*; + + +import com.cool.store.response.ThreeSignResponse; +import com.cool.store.vo.Fitment.DecorationStageVO; +import com.cool.store.vo.Fitment.DesignInfoVo; +import com.cool.store.vo.LinePayVO; +import com.cool.store.vo.PartnerUserInfoVO; +import com.cool.store.vo.fitmentCheckVO; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/04/28/下午4:45 + * @Version 1.0 + * @注释: + */ +public interface DecorationService { + + /** + * @Auther: wangshuo + * @Date: 2024/4/28 + * @description:获取设计阶段子阶段信息 + */ + DesignInfoVo DesignInfo(Long shopId); + /** + * @Auther: wangshuo + * @Date: 2024/4/30 + * @description:获取装修款阶段信息 + */ + DecorationStageVO getDecorationGoldStage(Long shopId); + /** + * @Auther: wangshuo + * @Date: 2024/4/28 + * @description:获取装修款和支付二维码 + */ + DecorationModelDTO decorationModel(Long shopId); + /** + * @Auther: wangshuo + * @Date: 2024/4/28 + * @description:提交装修款付款凭证 + */ + Boolean submitDecorationModel(LinePaySubmitRequest LinePaySubmitRequest, PartnerUserInfoVO partnerUserInfoVO); + + /** + * @Auther: wangshuo + * @Date: 2024/4/29 + * @description:获得装修款信息 + */ + LinePayVO getDecorationModel(Long shopId, PartnerUserInfoVO partnerUserInfoVO); + /** + * @Auther: wangshuo + * @Date: 2024/4/28 + * @description:施工阶段下的信息 + */ + List getConstruction(Long shopId); + /** + * @Auther: wangshuo + * @Date: 2024/4/29 + * @description:获取施工阶段信息 + */ + ConstructionScheduleDTO getConstructionInfo(Long shopId); + /** + * @Auther: wangshuo + * @Date: 2024/4/29 + * @description:提交三方验收检查项 + */ + Boolean submitThreeCheck(ThreeAcceptanceCheckRequest request); + /** + * @Auther: wangshuo + * @Date: 2024/5/6 + * @description:查看三方验收检查项 + */ + ThreeAcceptanceCheckRequest getThreeChecks(Long shopId); + /** + * @Auther: wangshuo + * @Date: 2024/5/6 + * @description:mini提交三方验收检签字 + */ + Boolean miniSubmitAcceptanceSign(ThreeAcceptanceRequest request); + /** + * @Auther: wangshuo + * @Date: 2024/5/6 + * @description:pc提交三方验收检签字 + */ + Boolean pcSubmitAcceptanceSign(ThreeAcceptanceRequest request); + /** + * @Auther: wangshuo + * @Date: 2024/5/6 + * @description:查看三方验收签字 + */ + ThreeSignResponse getThreeAcceptanceSign(Long shopId); + /** + * @Auther: wangshuo + * @Date: 2024/5/3 + * @description:预约验收 + */ + Boolean bookingAcceptance(BookingAcceptanceRequest response,LoginUserInfo user); + + /** + * @Auther: wangshuo + * @Date: 2024/5/3 + * @description:获取三方验收列表 + */ + PageInfo getFitmentAcceptanceList(AcceptanceListRequest request, LoginUserInfo user); +/** + * @Auther: wangshuo + * @Date: 2024/5/11 + * @description:三方获取验收列表详情 + */ + fitmentCheckVO getAcceptanceDetail(Long shopId, LoginUserInfo user); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/DeskService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/DeskService.java new file mode 100644 index 000000000..33023a2e2 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/DeskService.java @@ -0,0 +1,154 @@ +package com.cool.store.service; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dto.InvestmentCountDTO; +import com.cool.store.dto.PendingCountDTO; +import com.cool.store.entity.HyPartnerLabelDO; +import com.cool.store.entity.LineInfoDO; +import com.cool.store.vo.BaseInfoVO; +import com.cool.store.vo.desk.*; +import com.github.pagehelper.PageInfo; + +import java.util.List; +import java.util.Map; + +/** + * @Author suzhuhong + * @Date 2024/3/26 15:15 + * @Version 1.0 + */ +public interface DeskService { + + + /** + * 加盟申请待处理 + * @param pageNum + * @param pageSize + * @param userId + * @return + */ + PageInfo intendPendingList(Integer pageNum, Integer pageSize,String userId); + + /** + * 面试待处理 + * @param pageNum + * @param pageSize + * @param userId + * @return + */ + PageInfo interviewPendingList(Integer pageNum, Integer pageSize,String userId); + + /** + * 一审面试待处理 + * @param pageNum + * @param pageSize + * @param user + * @return + */ + PageInfo firstInterviewPendingList(Integer pageNum, Integer pageSize, LoginUserInfo user); + + /** + * 二审面试待处理 + * @param pageNum + * @param pageSize + * @param user + * @return + */ + PageInfo secondInterviewPendingList(Integer pageNum, Integer pageSize, LoginUserInfo user); + + /** + * payStagePendingList + * @param pageNum + * @param pageSize + * @param user + * @return + */ + PageInfo payStagePendingList(Integer pageNum, Integer pageSize, LoginUserInfo user); + + + /** + * signingPendingList + * @param pageNum + * @param pageSize + * @param user + * @return + */ + PageInfo signingPendingList(Integer pageNum, Integer pageSize, LoginUserInfo user); + + /** + * storeExperiencePendingList + * @param pageNum + * @param pageSize + * @param user + * @return + */ + PageInfo storeExperiencePendingList(Integer pageNum, Integer pageSize, LoginUserInfo user); + + /** + * convertToBaseInfoVO + * @param lineInfoDO + * @param userPortraitMap + * @param wantShopAreaMap + * @return + */ + BaseInfoVO convertToBaseInfoVO(LineInfoDO lineInfoDO, Map userPortraitMap, Map wantShopAreaMap); + + /** + * getUserPortraitMap + * @param lineInfoDOList + * @return + */ + Map getUserPortraitMap(List lineInfoDOList); + + /** + * 待处理数据 + * @param user + * @return + */ + PendingCountDTO getPendingCount(LoginUserInfo user); + + InvestmentCountDTO getInvestmentCount(LoginUserInfo user); + + + /** + * 系统建店待处理数据 + * @param pageNum + * @param pageSize + * @param user + * @return + */ + PageInfo systemBuildStorePendingList(Integer pageNum, Integer pageSize, LoginUserInfo user); + /** + * 缴纳加盟费待处理数据 + * @param pageNum + * @param pageSize + * @param user + * @return + */ + PageInfo payFranchiseFeesPendingList(Integer pageNum, Integer pageSize, LoginUserInfo user); + /** + * 加盟合同签约待处理数据 + * @param pageNum + * @param pageSize + * @param user + * @return + */ + PageInfo signingOfFranchiseContractPendingList(Integer pageNum, Integer pageSize, LoginUserInfo user); + /** + * 开业运营方案待处理数据 + * @param pageNum + * @param pageSize + * @param user + * @return + */ + PageInfo openingAndOperationPlanPendingList(Integer pageNum, Integer pageSize, LoginUserInfo user); + /** + * 首批订货清单待处理数据 + * @param pageNum + * @param pageSize + * @param user + * @return + */ + PageInfo firstOrderListPendingList(Integer pageNum, Integer pageSize, LoginUserInfo user); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/EmployeeTrainingService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/EmployeeTrainingService.java new file mode 100644 index 000000000..392b64d0d --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/EmployeeTrainingService.java @@ -0,0 +1,39 @@ +package com.cool.store.service; + +import com.cool.store.request.*; +import com.cool.store.vo.AssessmentUserTrainingVO; +import com.cool.store.vo.EmployeeTrainingDetailVO; +import com.cool.store.vo.EmployeeTrainingVO; +import com.cool.store.vo.EmployeeUserTrainingVO; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +/** + * @author byd + * @date 2024-04-30 10:16 + */ +public interface EmployeeTrainingService { + + PageInfo employeeTrainingList(String userId, EmployeeTrainingRequest request); + + EmployeeTrainingDetailVO employeeTrainingDetail(Long id); + + void distribution(EmployeeTrainingDetailRequest request); + + List trainingListByShopId(Long shopId); + + PageInfo trainerUserList(String userId, Integer status, Integer pageNum, Integer pageSize); + + EmployeeUserTrainingVO trainerUserDetail(Long id); + + void trainerUserCommit(EmployeeTrainingCommitListRequest request); + + PageInfo assessmentUserList(String userId, EmployeeAssessmentRequest request); + + AssessmentUserTrainingVO assessmentUserDetail(Long id); + + void turn(Long id, String userId, String turnUserId); + + void assessmentUserCommit(EmployeeAssessmentCommitListRequest request); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/FirstOrderService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/FirstOrderService.java new file mode 100644 index 000000000..223d5dd68 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/FirstOrderService.java @@ -0,0 +1,20 @@ +package com.cool.store.service; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dto.openPreparation.FirstOrderDTO; +import com.cool.store.entity.FirstOrderDO; +import com.cool.store.request.FirstOrderRequest; + +/** + * @Auther: WangShuo + * @Date: 2024/04/24/下午8:52 + * @Version 1.0 + * @注释: + */ +public interface FirstOrderService { + + Integer saveOrder(FirstOrderRequest request, LoginUserInfo user); + + FirstOrderDTO getOrder(Long shopId); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/FranchiseFeeService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/FranchiseFeeService.java new file mode 100644 index 000000000..8703ace06 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/FranchiseFeeService.java @@ -0,0 +1,24 @@ +package com.cool.store.service; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.AuditFranchiseFeeRequest; +import com.cool.store.request.FranchiseFeeRequest; +import com.cool.store.response.FranchiseFeeResponse; + +public interface FranchiseFeeService { + /** + * 提交加盟费信息 + * @param request + * @return + */ + Boolean submitLicense(FranchiseFeeRequest request); + + /** + * 查询加盟费信息 + * @param shopId + * @return + */ + FranchiseFeeResponse getDetail(Long shopId); + + Boolean auditFranchiseFee(AuditFranchiseFeeRequest request, LoginUserInfo user); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerUserChannelService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerUserChannelService.java new file mode 100644 index 000000000..094d5a768 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerUserChannelService.java @@ -0,0 +1,21 @@ +package com.cool.store.service; + +import com.cool.store.dto.partner.UserChannelDTO; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2023/8/10 11:12 + * @Version 1.0 + */ +public interface HyPartnerUserChannelService { + + /** + * 查询所有的线索来源 + * @return + */ + List queryAllUserChannelList(); + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/IntentAgreementService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/IntentAgreementService.java new file mode 100644 index 000000000..a3f3d15b9 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/IntentAgreementService.java @@ -0,0 +1,33 @@ +package com.cool.store.service; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.exception.ApiException; +import com.cool.store.request.FranchiseeSaveRequest; +import com.cool.store.request.InitiatingRequest; +import com.cool.store.request.IntentAgreementSubmitRequest; +import com.cool.store.response.InitiatingResponse; +import com.cool.store.response.ResponseResult; +import com.cool.store.response.SigningBaseInfoResponse; + +public interface IntentAgreementService { + /** + * 签署意向协议 + * @param request + * @return + */ + boolean submit(IntentAgreementSubmitRequest request); + + /** + * 根据线索id或者加盟商id查询意向协议信息 + * @param partnerId + * @param lineId + * @return + */ + SigningBaseInfoResponse getMiniIntentAgreement(String partnerId, Long lineId); + + ResponseResult initiating(InitiatingRequest request,LoginUserInfo user); + + ResponseResult save(FranchiseeSaveRequest request, LoginUserInfo user) throws ApiException; + + InitiatingRequest getOaDetail(String mobile, String idCardNo); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/JoinIntentionService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/JoinIntentionService.java new file mode 100644 index 000000000..01406bef4 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/JoinIntentionService.java @@ -0,0 +1,14 @@ +package com.cool.store.service; + +import com.cool.store.request.JoinIntentionRequest; +import com.cool.store.vo.PartnerBaseInfoVO; + +public interface JoinIntentionService { + /** + * 提交意向加盟申请书 + * @param request + */ + boolean submit(JoinIntentionRequest request); + + PartnerBaseInfoVO getByLineId(Long lineId); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/KdzApiService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/KdzApiService.java new file mode 100644 index 000000000..99d7846ef --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/KdzApiService.java @@ -0,0 +1,17 @@ +package com.cool.store.service; + +import com.cool.store.request.AuditResultRequest; +import com.cool.store.request.SysBuildResultRequest; +import com.cool.store.response.LicenseApiResponse; + +public interface KdzApiService { + /** + * API审批 + * @param request + * @return + */ + boolean auditResult(AuditResultRequest request); + + LicenseApiResponse license(String storeNum); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/LabelGroupService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/LabelGroupService.java new file mode 100644 index 000000000..526c23b22 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/LabelGroupService.java @@ -0,0 +1,58 @@ +package com.cool.store.service; + +import com.cool.store.dto.label.LabelGroupAddDTO; +import com.cool.store.dto.label.LabelGroupDeleteDTO; +import com.cool.store.dto.label.LabelGroupListDTO; +import com.cool.store.dto.label.LabelGroupUpdateDTO; +import com.cool.store.entity.HyPartnerLabelGroupDO; +import com.cool.store.exception.ApiException; +import com.cool.store.vo.LabelGroupListVo; + +import java.util.List; + +/** + * @author Fun Li 2023/8/10 13:34 + * @version 1.0 + */ +public interface LabelGroupService { + + /** + * 查询标签组信息列表 + * @param dto 查询条件 + */ + List getLabelGroupList(LabelGroupListDTO dto); + + /** + * 添加标签组 + * @param dto 新增标签组信息 + */ + void addLabelGroup(LabelGroupAddDTO dto) throws ApiException; + + /** + * 修改标签组信息 + * @param dto 修改内容 + */ + void updateLabelGroup(LabelGroupUpdateDTO dto) throws ApiException; + + /** + * 删除标签组 + * @param dto 待删除标签组信息 + */ + void deleteLabelGroup(LabelGroupDeleteDTO dto) throws ApiException; + + /** + * 获取所有标签组 + */ + List getAllLabelGroupList(); + + /** + * 添加ec标签组 + * @param hyPartnerLabelGroupDO + */ + void addEcLabelGroup(HyPartnerLabelGroupDO hyPartnerLabelGroupDO); + + HyPartnerLabelGroupDO selectByPrimaryKey(Long id); + + List getLabelGroupListOrder(); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/LabelService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/LabelService.java new file mode 100644 index 000000000..f9ad29afb --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/LabelService.java @@ -0,0 +1,66 @@ +package com.cool.store.service; + +import com.cool.store.dto.label.LabelAddDTO; +import com.cool.store.dto.label.LabelDeleteDTO; +import com.cool.store.dto.label.LabelListDTO; +import com.cool.store.dto.label.LabelUpdateDTO; +import com.cool.store.entity.HyPartnerLabelDO; +import com.cool.store.exception.ApiException; +import com.cool.store.vo.LabelGroupVO; +import com.cool.store.vo.LabelListVo; + +import java.util.List; +import java.util.Map; + +/** + * @author Fun Li 2023/8/10 14:23 + * @version 1.0 + */ +public interface LabelService { + + /** + * 获取数组列表 + * + * @param dto 查询条件 + */ + List getLabelList(LabelListDTO dto); + + /** + * 添加标签组 + * @param dto 新增标签组信息 + */ + void addLabel(LabelAddDTO dto) throws ApiException; + + /** + * 标签MAP + * @param userPortraitStrList + * @return + */ + Map getUserPortraitMap(List userPortraitStrList); + + /** + * 查询标签中文名称集合 + * @param userPortraitMap + * @param userPortraitStr + * @return + */ + List getUserPortraitList(Map userPortraitMap,String userPortraitStr); + + /** + * 修改标签信息 + * @param dto 新标签信息 + */ + void updateLabel(LabelUpdateDTO dto) throws ApiException; + + /** + * 删除标签 + * @param dto + */ + void deleteLabel(LabelDeleteDTO dto); + + HyPartnerLabelDO selectByPrimaryKey(Long classId); + + void addEcLabel(HyPartnerLabelDO hyPartnerLabelDO); + + List getAllGroupAndLabelList(); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/LineFollowService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/LineFollowService.java new file mode 100644 index 000000000..59befe64a --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/LineFollowService.java @@ -0,0 +1,32 @@ +package com.cool.store.service; + +import com.cool.store.request.LineFollowLogRequest; +import com.cool.store.vo.log.LineFollowLogVO; +import com.github.pagehelper.PageInfo; + +/** + * @author zhangchenbiao + * @FileName: LineFollowService + * @Description:线索跟进 + * @date 2024-03-27 14:49 + */ +public interface LineFollowService { + + /** + * 分页获取跟进日志 + * @param lineId + * @param pageNum + * @param pageSize + * @return + */ + PageInfo getFollowLogPage(Long lineId, Integer pageNum, Integer pageSize); + + /** + * 新增跟进日志 + * @param followLog + * @param operateUserId + * @param operateUsername + * @return + */ + Long addFollowLog(LineFollowLogRequest followLog, String operateUserId, String operateUsername); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/LineInterviewService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/LineInterviewService.java new file mode 100644 index 000000000..f0dc37aac --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/LineInterviewService.java @@ -0,0 +1,102 @@ +package com.cool.store.service; + +import com.cool.store.enums.InterviewUserTypeEnum; +import com.cool.store.request.AppointmentTimeRequest; +import com.cool.store.request.LineInterviewPageRequest; +import com.cool.store.request.ModifyInterviewerRequest; +import com.cool.store.vo.interview.*; +import com.github.pagehelper.PageInfo; + +import java.time.LocalDate; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: LineInterviewService + * @Description: + * @date 2024-03-15 16:04 + */ +public interface LineInterviewService { + + /** + * 获取预约时间 + * @param lineId + * @param interviewType + * @param appointmentDate + * @return + */ + List getAppointmentTime(Long lineId, Integer interviewType, LocalDate appointmentDate); + + + List getAppointmentTime(Long lineId, Integer interviewType, LocalDate appointmentStartDate, LocalDate appointmentEndDate); + + /** + * 面试预约 + * @param request + * @return + */ + Boolean appointmentTime(AppointmentTimeRequest request); + + /** + * 修改面试时间 + * @param request + * @return + */ + Boolean modifyAppointmentTime(AppointmentTimeRequest request); + + /** + * 修改面审官 + * @param request + * @return + */ + Boolean modifyInterviewer(ModifyInterviewerRequest request); + + /** + * 获取分页 + * @param request + * @param userId + * @param isTeam + * @return + */ + PageInfo getInterviewerPage(LineInterviewPageRequest request, String userId, Boolean isTeam); + + /** + * 进入面试间 + * @param interviewId + * @param interviewUserId + * @param userType + * @return + */ + EnterInterviewVO enterInterviewRoom(Long interviewId, String interviewUserId, InterviewUserTypeEnum userType); + + /** + * 结束面试 + * @param interviewId + * @param userId + * @return + */ + Integer finishInterview(Long interviewId, String userId); + + /** + * 获取面试信息 + * @param lineId + * @param interviewType + * @return + */ + InterviewDetailVO getInterviewDetail(Long lineId, Integer interviewType); + + /** + * 上传文件 + * @param interviewId + * @param videoUrlList + * @return + */ + Integer uploadVideo(Long interviewId, List videoUrlList); + + /** + * 重新预约面审 + * @param lineId + * @return + */ + Integer reappointment(Long lineId); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/LinePayService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/LinePayService.java new file mode 100644 index 000000000..cc4bdaa4b --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/LinePayService.java @@ -0,0 +1,19 @@ +package com.cool.store.service; + +import com.cool.store.request.LinePaySubmitRequest; +import com.cool.store.vo.LinePayVO; +import com.cool.store.vo.PartnerUserInfoVO; + +/** + * @Author wxp + * @Date 2024/3/25 13:45 + * @Version 1.0 + */ +public interface LinePayService { + + LinePayVO getLinePayInfo(Long lineId,Integer businessType,Long shopId); + + Long submitPayInfo(LinePaySubmitRequest followLog, PartnerUserInfoVO partnerUser); + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/LineService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/LineService.java new file mode 100644 index 000000000..0d3544f6b --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/LineService.java @@ -0,0 +1,85 @@ +package com.cool.store.service; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.*; +import com.cool.store.vo.*; +import com.github.pagehelper.PageInfo; + +/** + * @Author suzhuhong + * @Date 2024/3/25 13:45 + * @Version 1.0 + */ +public interface LineService { + + + /** + * 获取线索信息 + * @param lineId + * @return + */ + LineInfoVO getLineInfo(Long lineId); + + + /** + * 我的线索 团队线索 + * @param lineListRequest + * @param loginUserInfo + * @return + */ + PageInfo getLineList(LineListRequest lineListRequest, LoginUserInfo loginUserInfo,Boolean teamFlag); + + + /** + * 公海线索 + * @param publicLineListRequest + * @param loginUserInfo + * @return + */ + PageInfo getPublicLineList(PublicLineListRequest publicLineListRequest, LoginUserInfo loginUserInfo ,Boolean publicFlag); + + + /** + * 我负责的加盟商 or 团队负责的加盟商 + * @param partnerRequest + * @param loginUserInfo + * @param teamFlag + * @return + */ + PageInfo getPartnerList(PartnerRequest partnerRequest, LoginUserInfo loginUserInfo, Boolean teamFlag); + + /** + * 添加标签 + * @param userInfo + * @param addTagsRequest + * @return + */ + Boolean addTags(LoginUserInfo userInfo, AddTagsRequest addTagsRequest); + + + /** + * 分配招商经理 + * @param changeInvestmentRequest + * @param userInfo + * @return + */ + Boolean transferInvestmentManager(ChangeInvestmentRequest changeInvestmentRequest, LoginUserInfo userInfo,Boolean transferFlag); + + /** + * 线索的各节点情况 + * @param lineId + * @return + */ + IntendProcessTotalVO getIntendProcessTotal(Long lineId); + + /** + * 添加线索 + * @param addLineRequest + * @return + */ + Boolean addLine(AddLineRequest addLineRequest) ; + + String getPayPicByLineId(Long lineId); + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/NewStoreOpeningService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/NewStoreOpeningService.java new file mode 100644 index 000000000..72b0740f3 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/NewStoreOpeningService.java @@ -0,0 +1,19 @@ +package com.cool.store.service; + +import com.cool.store.request.NewStoreOpeningRequest; +import com.cool.store.vo.NewStoreOpeningVO; + +import java.util.List; + +/** + * @author byd + * @date 2024-04-24 14:32 + */ +public interface NewStoreOpeningService { + + List storeTodoList(Long shopId); + + void addStoreTodo(NewStoreOpeningRequest newStoreOpeningRequest); + + void removeStoreTodo(Long id); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/OSSService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/OSSService.java new file mode 100644 index 000000000..abe78907f --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/OSSService.java @@ -0,0 +1,17 @@ +package com.cool.store.service; + +import com.cool.store.vo.oss.OssUploadConfigVO; +import org.springframework.web.multipart.MultipartFile; + +/** + * @Author suzhuhong + * @Date 2024/3/28 14:27 + * @Version 1.0 + */ +public interface OSSService { + /** + * 上传文件 + * @return + */ + OssUploadConfigVO getUploadFileConfig(); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/OpenAcceptanceInfoService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/OpenAcceptanceInfoService.java new file mode 100644 index 000000000..3d1f77d65 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/OpenAcceptanceInfoService.java @@ -0,0 +1,37 @@ +package com.cool.store.service; + +import com.cool.store.request.OpenAcceptanceRequest; +import com.cool.store.request.ShopAcceptanceRequest; +import com.cool.store.request.ShopStageAcceptanceRequest; +import com.cool.store.vo.OpenAcceptanceInfoListVO; +import com.cool.store.vo.ShopAcceptanceVO; +import com.github.pagehelper.PageInfo; + +/** + * @author byd + * @date 2024-04-22 14:41 + */ +public interface OpenAcceptanceInfoService { + + /** + * 开业验收列表 + * @param openAcceptanceRequest + * @return + */ + PageInfo openAcceptanceList(OpenAcceptanceRequest openAcceptanceRequest); + + /** + * 获取验收阶段 + * @param shopId 店铺id + * @return + */ + ShopAcceptanceVO acceptanceStageList(Long shopId); + + /** + * 验收 + * @param shopAcceptanceRequest + */ + void acceptance(ShopAcceptanceRequest shopAcceptanceRequest, String userId); + + void acceptanceOne(ShopStageAcceptanceRequest shopStageAcceptanceRequest); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/OpenAreaService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/OpenAreaService.java new file mode 100644 index 000000000..c6b522ebf --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/OpenAreaService.java @@ -0,0 +1,89 @@ +package com.cool.store.service; + +import com.cool.store.request.OpenAreaRequest; +import com.cool.store.vo.OpenAreaTreeVO; +import com.cool.store.vo.OpenAreaVO; +import com.cool.store.vo.OpenProvinceVO; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/3/13 22:11 + * @Version 1.0 + */ +public interface OpenAreaService { + + + /** + * 根据关键字搜索 + * @param keyword + * @return + */ + List queryByKeyword(String keyword,String areaStatus,Boolean flag); + + List searchOpenArea(String keyword, Boolean applyFlag,Boolean flag); + + + /** + * 查询所有的开放区域 城市树 + * @param keyword + * @param flag + * @return + */ + List queryAllOpenAreaByKeyword(String keyword,Boolean applyFlag,Boolean flag); + + + /** + * 查询字列表 + * @param parentId + * @return + */ + List getChildrenList(Long parentId); + + /** + * + * @param userId + * @param openAreaRequest + * @return + */ + Boolean batchUpdate(String userId, OpenAreaRequest openAreaRequest); + + + PageInfo queryKeyOpenAreaList(Integer pageSize, Integer pageNumber,String keyWord,Integer status); + + + /** + * 可加盟省份 + * @param pageSize + * @param pageNumber + * @return + */ + PageInfo franchisableProvinces(Integer pageSize, Integer pageNumber); + + /** + * 删除重点城市 将重点城市状态改为open + * @param id + * @return + */ + Boolean deleteKeyCity(Long id); + + /** + * 启用 or 禁用 + * @param id + * @param keyOpenStatus + * @return + */ + Boolean updateKeyCityStatus(Long id,Integer keyOpenStatus); + + + /** + * V1.4 + * 意向区域添加不限 + * 每个市下面添加一个不限 + */ + Boolean addOpenArea(); + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/OpenNewShopService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/OpenNewShopService.java new file mode 100644 index 000000000..58e98a5a3 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/OpenNewShopService.java @@ -0,0 +1,54 @@ +package com.cool.store.service; + +import com.cool.store.request.AuditOpenNewShopRequest; +import com.cool.store.request.PartnerOpenNewShopPageRequest; +import com.cool.store.request.SubmitOpenNewShopRequest; +import com.cool.store.vo.IsSubmitOpenNewShopVO; +import com.cool.store.vo.PartnerOpenNewShopDetailVO; +import com.cool.store.vo.PartnerOpenNewShopPageVO; +import com.github.pagehelper.PageInfo; + +/** + * @author zhangchenbiao + * @FileName: OpenNewShopService + * @Description: + * @date 2024-05-09 15:12 + */ +public interface OpenNewShopService { + + /** + * 获取老加盟商开新店 + * @param request + * @return + */ + PageInfo getPartnerOpenNewShopPage(PartnerOpenNewShopPageRequest request); + + + /** + * 获取详情 + * @param recordId + * @return + */ + PartnerOpenNewShopDetailVO getOpenNewShopRecordDetail(Long recordId); + + /** + * 审核开新店 + * @param request + * @return + */ + Integer auditOpenNewShop(AuditOpenNewShopRequest request); + + /** + * 提交开店申请 + * @param request + * @return + */ + Long submitOpenNewShop(SubmitOpenNewShopRequest request); + + /** + * 获取待审核记录 + * @param lineId + * @return + */ + IsSubmitOpenNewShopVO isSubmitOpenNewShop(Long lineId); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/OpeningOperationPlanService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/OpeningOperationPlanService.java new file mode 100644 index 000000000..219b9bab2 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/OpeningOperationPlanService.java @@ -0,0 +1,36 @@ +package com.cool.store.service; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.OpeningOperationPlanRequest; +import com.cool.store.request.PlanListRequest; +import com.cool.store.vo.OpeningOperationPlanListVO; +import com.cool.store.vo.OpeningOperationPlanVO; +import com.github.pagehelper.PageInfo; + +import java.time.LocalDate; +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/04/22/下午3:10 + * @Version 1.0 + * @注释: + */ +public interface OpeningOperationPlanService { + /** + * @Auther: wangshuo + * @Date: 2024/4/23 + * @description: 提交开业运营方案 + */ + Long savePlan(OpeningOperationPlanRequest openingOperationPlanRequest, LoginUserInfo userInfo); + + OpeningOperationPlanVO getPlanByShopId(Long ShopId); + /** + * @Auther: wangshuo + * @Date: 2024/4/23 + * @description: 根据条件查询方案列表 + */ + PageInfo getPlanListPage(PlanListRequest request); + Boolean flush(Long shopId); + Boolean getStatus(Long shopId); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/PointService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/PointService.java new file mode 100644 index 000000000..556fa5f91 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/PointService.java @@ -0,0 +1,287 @@ +package com.cool.store.service; + +import com.cool.store.request.*; +import com.cool.store.vo.LinePointBaseInfoVO; +import com.cool.store.vo.point.*; +import com.cool.store.vo.shop.RentInfoToDoVO; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: ShopPointService + * @Description: + * @date 2024-03-29 15:25 + */ +public interface PointService { + + /** + * 新增铺位 + * @param shopPointDetailRequest + * @param userId + * @return + */ + Long addPointDetailInfo(AddPointDetailRequest shopPointDetailRequest, String userId); + + + /** + * 获取铺位详情 + * @param pointId + * @return + */ + PointDetailVO getPointDetailInfo(Long pointId, Boolean isGetNodeNo); + + /** + * 更新铺位 + * @param shopPointDetailRequest + * @return + */ + Long updatePointDetailInfo(UpdatePointDetailRequest shopPointDetailRequest); + + /** + * 生成铺位评估报告 + * @param pointId + * @return + */ + Integer generateEvaluationReport(Long pointId); + + /** + * 铺位失效 + * @param pointId + * @return + */ + Integer pointInvalid(Long pointId); + + /** + * 解绑铺位 + * @param pointId + * @return + */ + Integer pointUnbind(Long pointId); + + /** + * 配置评估报告 + * @param request + * @return + */ + Integer addMapEvaluationReport(AddMapEvaluationReportRequest request); + + /** + * 提交审批 + * @param pointId + * @return + */ + Integer submitAudit(SubmitPointAuditRequest request); + + /** + * 审批设置 + * @param request + * @return + */ + Integer auditSetting(AuditSettingRequest request); + + /** + * 获取审批设置 + * @return + */ + AuditSettingVO getAuditSetting(); + + /** + * 获取点位待办用户列表 + * @param pointId + * @return + */ + List getTodoUserList(Long pointId); + + /** + * 营运人员审批 + * @param userId + * @param request + * @return + */ + Integer operationUserAudit(String userId, OperationAuditRequest request); + + /** + * 审批 + * @param userId + * @param request + * @return + */ + Integer audit(String userId, PointAuditRequest request); + + /** + * 转让招商经理 + * @param request + * @return + */ + Integer turnDevelopmentManager(TurnDevelopmentManagerRequest request); + + /** + * 获取我负责的线索列表 + * @param request + * @return + */ + PageInfo getLinePage(PointLinePageRequest request); + + + /** + * 获取单个加盟商信息 + * @param lineId + * @return + */ + LinePointBaseInfoVO getLineInfo(Long lineId); + + /** + * 获取我的数据 + * @param userId + * @return + */ + PointHomePageDataVO getMyPointData(String userId); + + /** + * 获取我的铺位 + * @param request + * @return + */ + PageInfo getMyPointPage(PointPageRequest request); + + /** + * 获取团队铺位 + * @param request + * @return + */ + PageInfo getTeamPointPage(AllPointPageRequest request); + + /** + * 获取审批记录 + * @param pointId + * @return + */ + List getPointAllAuditRecord(Long pointId); + + /** + * 获取推荐铺位列表 + * @param lineId + * @return + */ + List getLineRecommendPointList(Long lineId); + + /** + * 获取我的可推荐铺位列表 + * @param request + * @return + */ + PageInfo getRecommendPointList(RecommendPointPageRequest request); + + /** + * 加盟商推荐铺位 + * @param request + * @return + */ + Integer lineRecommendPoint(LineRecommendPointRequest request); + + /** + * 铺位推荐加盟商 + * @param request + * @return + */ + Integer pointRecommendLine(PointRecommendLineRequest request); + + /** + * 选址人员转让加盟商 + * @param request + * @return + */ + Integer turnLine(TurnLineRequest request); + + /** + * 修改意向开店数量 + * @param request + * @return + */ + Integer updateWantShopNum(UpdateWantShopNumRequest request); + + /** + * 获取待办列表 + * @param request + * @return + */ + PageInfo getTodoList(PointTodoPageRequest request); + + /** + * 获取线索推荐店铺列表 + * @param request + * @return + */ + PageInfo getLineRecommendPointPage(MiniPointPageRequest request); + + /** + * 线索选址铺位 + * @param request + * @return + */ + Integer lineSelectPoint(SelectPointRequest request); + + /** + * 拒绝铺位 + * @param request + * @return + */ + Integer lineRejectPoint(RejectPointRequest request); + + /** + * 加盟商提交新铺位 + * @param request + * @return + */ + Long miniAddPointDetailInfo(MiniAddPointRequest request); + + + /** + * 上传租赁合同 + * @param request + * @return + */ + Integer uploadRentContract(AddRentContractRequest request); + + /** + * 获取租赁合同详情 + * @param shopId + * @return + */ + ShopRentInfoVO getRentContractDetail(Long shopId); + + /** + * 租赁合同审核 + * @param request + * @return + */ + Integer auditRentContract(AuditRentContractRequest request); + + /** + * 更新租赁合同 + * @param request + * @return + */ + Integer updateRentContract(UpdateRentContractRequest request); + + /** + * 获取选址审批待办 + * @param userId + * @param pageNumber + * @param pageSize + * @return + */ + PageInfo getSelectPointToDoPage(String userId, Integer pageNumber, Integer pageSize); + + + /** + * 获取租赁合同审批 + * @param userId + * @param pageNumber + * @param pageSize + * @return + */ + PageInfo getRentContractToDoPage(String userId, Integer pageNumber, Integer pageSize); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/PreparationService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/PreparationService.java new file mode 100644 index 000000000..246c47b71 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/PreparationService.java @@ -0,0 +1,56 @@ +package com.cool.store.service; + +import com.cool.store.request.PreparationRequest; +import com.cool.store.vo.Preparation.PreparationProcessVO; +import com.cool.store.vo.Preparation.PreparationScheduleDetailVO; +import com.cool.store.vo.Preparation.PreparationScheduleVO; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/22 16:10 + * @Version 1.0 + */ +public interface PreparationService { + + + /** + * 开业进度列表 + * @param preparationRequest + * @return + */ + PageInfo getPreparationSchedule(PreparationRequest preparationRequest); + + + /** + * 开业进度详情 + * @param shopId + * @return + */ + PreparationScheduleDetailVO getPreparationDetail(Long shopId); + + PreparationProcessVO getPreparationProcess(Long shopId); + + /** + * 校验建店与加盟签约合同是否完成 并初始化后续流程数据 + * @param shopId + */ + void contractAndBuildStoreCompletion(Long shopId); + + + /** + * 是否开业验收 改走的流程都已经完成 ->初始化开业验收数据 + * @param shopId + */ + void whetherToOpenForAcceptance(Long shopId); + /** + * @Auther: wangshuo + * @Date: 2024/5/9 + * @description:装修阶段刷新 + */ + Boolean decorationFlush(Long shopId); + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/RegionAreaConfigService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/RegionAreaConfigService.java new file mode 100644 index 000000000..2a465bd3b --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/RegionAreaConfigService.java @@ -0,0 +1,19 @@ +package com.cool.store.service; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.RegionAreaConfigAddRequest; + +import java.util.List; + +/** + * @Author wxp + * @Date 2022/12/29 11:18 + * @Version 1.0 + */ +public interface RegionAreaConfigService { + + Boolean saveOrUpdateRegionAreaConfig(RegionAreaConfigAddRequest regionAreaConfigAddRequest, LoginUserInfo user); + + List listAreaIdByRegionId(Long regionId); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/RegionService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/RegionService.java new file mode 100644 index 000000000..6a4eb37f8 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/RegionService.java @@ -0,0 +1,43 @@ +package com.cool.store.service; + +import com.cool.store.entity.RegionDO; +import com.cool.store.vo.RegionPathNameVO; + +import java.util.List; +import java.util.Map; + +public interface RegionService { + + RegionPathNameVO getAllRegionName(Long regionId); + + /** + * 获取所属战区 + * @param regionId + * @return + */ + String getBelongWarRegionName(Long regionId); + + /** + * 获取所属战区 + * @param regionIds + * @return + */ + Map getBelongWarRegionNameMap(List regionIds); + + /** + * 根据意向区域找大区id + * @param wantShopAreaId + * @return + */ + Long getBigRegionIdByAreaId(Long wantShopAreaId); + + List listByThirdRegionType(Long parentId, String thirdRegionType); + + /** + * 获取当前区域regionId 和所有子区域regionId + * @param regionIds + * @return + */ + List getSubRegionIdsByRegionIds(List regionIds); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/SeeAcceptanceService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/SeeAcceptanceService.java new file mode 100644 index 000000000..15d664604 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/SeeAcceptanceService.java @@ -0,0 +1,25 @@ +package com.cool.store.service; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dto.decoration.ConstructionScheduleDTO; +import com.cool.store.entity.ShopAuditInfoDO; +import com.cool.store.request.AcceptanceListRequest; +import com.cool.store.request.SeeAcceptanceRequest; +import com.cool.store.request.SeeAccetanceListRequest; +import com.cool.store.vo.fitmentCheckVO; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/05/17/下午5:57 + * @Version 1.0 + * @注释: + */ +public interface SeeAcceptanceService { + Boolean auditSeeAcceptance(SeeAcceptanceRequest seeAcceptanceRequest, LoginUserInfo user); + ConstructionScheduleDTO getWithdrawal(Long shopId); + List getAuditInfo(Long shopId); + PageInfo getAcceptanceList(AcceptanceListRequest request, LoginUserInfo user); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/ShopService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/ShopService.java new file mode 100644 index 000000000..7c98e33a4 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/ShopService.java @@ -0,0 +1,71 @@ +package com.cool.store.service; + +import com.cool.store.entity.LineInfoDO; +import com.cool.store.entity.ShopInfoDO; +import com.cool.store.request.AddShopRequest; +import com.cool.store.request.DeleteShopRequest; +import com.cool.store.vo.shop.MiniShopPageVO; +import com.cool.store.vo.shop.RentInfoToDoVO; +import com.cool.store.vo.shop.ShopStageInfoVO; +import com.cool.store.vo.shop.StageShopCountVO; +import com.github.pagehelper.PageInfo; +import lombok.Data; + +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: ShopService + * @Description:店铺 + * @date 2024-04-11 10:25 + */ +public interface ShopService { + + /** + * 初始化店铺数据 + * @param lineInfo + * @return + */ + Integer initShop(LineInfoDO lineInfo); + + /** + * 获取首页数据 + * @param lineId + * @return + */ + List getShopList(Long lineId); + + /** + * 获取店铺阶段信息 + * @param shopId + * @param shopStage + * @return + */ + List getShopStageInfo(Long shopId, Integer shopStage); + + /** + * 获取各阶段店铺数量 + * @param lineId + * @return + */ + StageShopCountVO getStageShopCount(Long lineId); + + /** + * 删除铺位 + * @param request + * @return + */ + Integer deleteShop(DeleteShopRequest request); + + /** + * 新增铺位 + * @param request + * @return + */ + Long addShop(AddShopRequest request); + + /** + * 获取店铺信息 + */ + ShopInfoDO getShopInfo(Long shopId); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/SignFranchiseService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/SignFranchiseService.java new file mode 100644 index 000000000..ba67f9c0c --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/SignFranchiseService.java @@ -0,0 +1,27 @@ +package com.cool.store.service; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.AddSignFranchiseRequest; +import com.cool.store.response.AddSignFranchiseResponse; +import com.cool.store.response.ResponseResult; + +public interface SignFranchiseService { + /** + * 提交加盟合同签约 + * + * @param request + * @return + */ + ResponseResult submitSignFranchise(AddSignFranchiseRequest request, LoginUserInfo user); + + + AddSignFranchiseResponse getSignFranchise(Long shopId); + + /** + * 加盟合同退回后重新缴费 + * @param shopId + * @return + */ + Boolean rePay(Long shopId); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/SysRoleService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/SysRoleService.java new file mode 100644 index 000000000..432503a44 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/SysRoleService.java @@ -0,0 +1,21 @@ +package com.cool.store.service; + +import com.cool.store.enums.UserRoleEnum; + +import java.util.List; +import java.util.Map; + +public interface SysRoleService { + + Boolean checkIsAdmin(String userId); + + Map getXfsgRoles(); + + /** + * 根据区域 和 角色优先级(优先取第一个角色 没有用户取第二个角色,以此类推)获取一个用户 + * @param regionId + * @param roleList + * @return + */ + String getUserIdByRegionIdWithRolePriority(Long regionId, List roleList); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/SysStoreAppService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/SysStoreAppService.java new file mode 100644 index 000000000..422ae267b --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/SysStoreAppService.java @@ -0,0 +1,19 @@ +package com.cool.store.service; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.SysStoreAppRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.response.SysStoreAppResponse; + +public interface SysStoreAppService { + + /** + * 提交系统建店申请 + * @param request + * @return + */ + ResponseResult submitSysBuildStore(SysStoreAppRequest request,LoginUserInfo user); + + + SysStoreAppResponse getDefaultValueSysBuildStore(Long lineId, Long shopId, LoginUserInfo user); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/TRTCVideoService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/TRTCVideoService.java new file mode 100644 index 000000000..3873deac6 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/TRTCVideoService.java @@ -0,0 +1,9 @@ +package com.cool.store.service; + +import com.cool.store.dto.trtc.callback.VideoCallBackDTO; + +public interface TRTCVideoService { + + void handleVideoCallBack(VideoCallBackDTO videoCallBackDTO); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/TempUserDetailService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/TempUserDetailService.java new file mode 100644 index 000000000..6fd299c5f --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/TempUserDetailService.java @@ -0,0 +1,25 @@ +package com.cool.store.service; + +import com.cool.store.dto.ehr.StaffBaseInfoDTO; +import com.cool.store.request.TempUserDetailRequest; +import com.cool.store.vo.TempUserDetailInfoVO; +import com.cool.store.vo.TempUserDetailListVO; + + +/** + * @author byd + * @date 2024-04-29 16:13 + */ +public interface TempUserDetailService { + + TempUserDetailListVO userList(Long shopId); + + void addTempUserDetail(TempUserDetailRequest tempUserDetailRequest); + + + TempUserDetailInfoVO getUserInfoByIdUserDetailId(Long id); + + StaffBaseInfoDTO getUserInfoByIdCard(String idCard); + + void registrationCompleted(Long shopId); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/TrainingExperienceService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/TrainingExperienceService.java new file mode 100644 index 000000000..d69f7c0a3 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/TrainingExperienceService.java @@ -0,0 +1,25 @@ +package com.cool.store.service; + +import com.cool.store.entity.LeaseBaseInfoDO; +import com.cool.store.request.TrainingExperienceDistributionRequest; + +public interface TrainingExperienceService { + /** + * 实训分配 + * @param request + * @return + */ + boolean distribution(TrainingExperienceDistributionRequest request); + + /** + * 实训状态变更 + * @param lineId + * @param status + * @param abandonCause + */ + void experienceStatusChange(Long lineId, Integer status, String abandonCause); + + LeaseBaseInfoDO getTrainingExperience(Long lineId); + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/TransferLogService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/TransferLogService.java new file mode 100644 index 000000000..71e08e3e9 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/TransferLogService.java @@ -0,0 +1,26 @@ +package com.cool.store.service; + +import com.cool.store.dto.TransferLogDTO; +import com.cool.store.entity.LineInfoDO; +import com.cool.store.enums.OperationLogTypeEnum; +import com.github.pagehelper.PageInfo; + +/** + * @Author suzhuhong + * @Date 2024/3/29 18:04 + * @Version 1.0 + */ +public interface TransferLogService { + + /** + * 添加日志 操作日志类型 + * @param lineInfoDO + * @param formUserId + * @param toUserId + * @param operationLogTypeEnum + */ + void addLog(LineInfoDO lineInfoDO, String formUserId, String toUserId, OperationLogTypeEnum operationLogTypeEnum); + + + PageInfo getTransferLogPage(Integer pageNum, Integer pageSize, Long lineId); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/UserAuthMappingService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/UserAuthMappingService.java new file mode 100644 index 000000000..9f5b05a02 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/UserAuthMappingService.java @@ -0,0 +1,92 @@ +package com.cool.store.service; + +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.entity.UserAuthMappingDO; +import com.cool.store.enums.UserRoleEnum; + +import java.util.List; +import java.util.Map; + +/** + * describe: + * + * @author wxp + * @date 2020/11/11 + */ +public interface UserAuthMappingService { + + /** + * 获取用户权限 + * @param userId + * @return + */ + List listUserAuthMappingByUserId(String userId); + + /** + * 获取用户授权的所有区域id + * @param userId + * @return + */ + List getAuthRegionIdAndSubRegionIdByUserId(String userId); + + /** + * 获取用户授权的所有门店id + * @param userId + * @return + */ + List getAuthStoreIdAndSubRegionIdByUserId(String userId); + + /** + * 提供 根据职位 意向区域 查 对应人的接口 同时返回人名字 + * @param userRoleEnum + * @param wantShopAreaId + * @return + */ + EnterpriseUserDO getUserByRoleEnumAndWantShopAreaId(UserRoleEnum userRoleEnum, Long wantShopAreaId); + + /** + * 获取有区域权限和职位 的人 + * @param userRoleEnum + * @param regionId + * @return + */ + EnterpriseUserDO getUserByRoleEnumAndRegionId(UserRoleEnum userRoleEnum, Long regionId); + + /** + * 获取有区域权限和职位 所有人 + * @param userRoleEnum + * @param regionId + * @return + */ + List getUserByRoleEnumAndRegionIdList(UserRoleEnum userRoleEnum, Long regionId); + /** + * 跟进角色和战区获取用户id + * @param roleIds + * @param regionId + * @return + */ + Map> getUserIdByRoleIdAndRegionId(List roleIds, Long regionId); + + /** + * 根据 人 查 这个人管辖区域 对应的意向区域省市code 团队线索 + * @param userId + * @return + */ + List listWantShopAreaIdByUserId(String userId); + + /** + * 【铺位1】所属战区没有战区经理、营运经理和大区经理,开店负责人展示【王磊】 + * @return + */ + String getShopManagerUserId(); + + + /** + * 找督导,如果小区没有督导则带入战区经理,没有战区经理则带入大区经理、如果都没有则带入王磊 + * @param supervision + * @param regionId + * @return + */ + EnterpriseUserDO hierarchicalSearch(UserRoleEnum supervision, Long regionId); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/VodService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/VodService.java new file mode 100644 index 000000000..ad9549387 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/VodService.java @@ -0,0 +1,12 @@ +package com.cool.store.service; + +import com.cool.store.utils.vod.CallbackRequest; + +/** + * @author byd + * @date 2024-05-07 19:27 + */ +public interface VodService { + + void callback(CallbackRequest request); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/WechatMiniAppService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/WechatMiniAppService.java new file mode 100644 index 000000000..ce220417d --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/WechatMiniAppService.java @@ -0,0 +1,29 @@ +package com.cool.store.service; + +import com.cool.store.dto.wx.MiniAppUrlLinkReqDTO; +import com.cool.store.dto.wx.MiniProgramLoginDTO; +import com.cool.store.request.MobileUpdateRequest; +import com.cool.store.vo.PartnerUserInfoVO; + +/** + * @author zhangchenbiao + * @FileName: WechatMiniAppService + * @Description: + * @date 2023-05-29 14:28 + */ +public interface WechatMiniAppService { + + PartnerUserInfoVO miniProgramLogin(MiniProgramLoginDTO param); + + PartnerUserInfoVO getUserInfoByJsCode(String jsCode); + + String getUserPhoneNumber(String mobileCode); + + String updateUserPhoneNumber(MobileUpdateRequest request, PartnerUserInfoVO userInfoVO); + + PartnerUserInfoVO getUserInfo(String mobile, String openId); + + String getMiniAppUrl(); + + String getMiniAppUrlLink(MiniAppUrlLinkReqDTO miniAppUrlLinkReqDTO); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/WxPayService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/WxPayService.java new file mode 100644 index 000000000..1926bb966 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/WxPayService.java @@ -0,0 +1,70 @@ +package com.cool.store.service; + +import com.cool.store.dto.wx.PreOrderDTO; +import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse; +import com.wechat.pay.java.service.payments.model.Transaction; +import com.wechat.pay.java.service.refund.model.Refund; +import org.springframework.http.ResponseEntity; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.math.BigDecimal; + +/** + * 微信支付V3 + */ +public interface WxPayService { + /** + * JSAPI下单 + * + * @return + */ + PrepayWithRequestPaymentResponse jsApiOrder(PreOrderDTO preOrderDTO); + /** + * 支付回调 + * + * @param request + * @return + * @throws IOException + */ + ResponseEntity payNotify(HttpServletRequest request) throws IOException; + /** + * 根据商户订单号查询订单 + * + * @param outTradeNo + * @return + */ + Transaction queryOrderByOutTradeNo(String outTradeNo); + + /** + * 根据支付订单号查询订单 + * + * @param paymentNo + * @return + */ + Transaction queryOrderByPaymentNo(String paymentNo); + + /** + * 申请退款 + * @param orderID + * @param outRefundNo + * @param backAmount + */ + void applyRefund(String orderID, String outRefundNo, BigDecimal backAmount); + + ResponseEntity refundNotify(HttpServletRequest request) throws IOException; + + /** + * 获取订单退款结果信息 + * @param outRefundNo + * @return + */ + Refund getRefundOrderInfo(String outRefundNo); + /** + * 关闭订单 + * + * @return + */ + void closePay(String outTradeNo); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/XfsgEhrService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/XfsgEhrService.java new file mode 100644 index 000000000..f33c9e920 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/XfsgEhrService.java @@ -0,0 +1,32 @@ +package com.cool.store.service; + +import com.cool.store.dto.StaffExamInfoDTO; +import com.cool.store.dto.ehr.FranchiseeInfoDTO; +import com.cool.store.dto.ehr.StaffBaseInfoDTO; + +/** + * @author wxp + */ +public interface XfsgEhrService { + + /** + * 员工详细信息数据接口 + * @param staffNumber + * @return + */ + StaffBaseInfoDTO getUserInfoByCode(String staffNumber); + /** + * 根据加盟商编码查询加盟商 + * @param frId + * @return + */ + FranchiseeInfoDTO getFranchiseeInfoByFrId(String frId); + + + /** + * 员工考试信息接口 + * @param staffNumber + * @return + */ + StaffExamInfoDTO getUserExamInfo(String staffNumber); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/YlfService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/YlfService.java new file mode 100644 index 000000000..2bb2e110b --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/YlfService.java @@ -0,0 +1,24 @@ +package com.cool.store.service; + +import com.cool.store.dto.decoration.DecorationDTO; +import com.cool.store.dto.decoration.ProjectDTO; + +/** + * @Author suzhuhong + * @Date 2024/4/28 14:26 + * @Version 1.0 + */ +public interface YlfService { + + /** + * + */ + DecorationDTO getDecoration(Long id) ; + /** + * @Auther: wangshuo + * @Date: 2024/4/25 + * @description:项目列表 + */ + ProjectDTO getProjectList(String storeNum); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AliyunServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AliyunServiceImpl.java new file mode 100644 index 000000000..d977c25ac --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AliyunServiceImpl.java @@ -0,0 +1,216 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.aliyun.ocr20191230.models.*; +import com.aliyun.ocr_api20210707.Client; +import com.aliyun.ocr_api20210707.models.RecognizeAdvancedRequest; +import com.aliyun.ocr_api20210707.models.RecognizeFoodManageLicenseRequest; +import com.aliyun.ocr_api20210707.models.RecognizeFoodManageLicenseResponse; +import com.aliyuncs.CommonRequest; +import com.aliyuncs.http.MethodType; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.IDCardSideEnum; +import com.cool.store.enums.SmsCodeTypeEnum; +import com.cool.store.exception.ApiException; +import com.cool.store.exception.ServiceException; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.AliyunService; +import com.cool.store.utils.poi.StringUtils; +import com.cool.store.vo.BusinessLicenseInfoVO; +import com.cool.store.vo.FoodLicenseVO; +import com.cool.store.vo.IdentityCardInfoVO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Objects; +import java.util.Optional; + +@Service +@Slf4j +public class AliyunServiceImpl implements AliyunService { + + @Value("${aliyun.accessKeyId:null}") + private String accessKeyId; + + @Value("${aliyun.accessKeySecret:null}") + private String accessKeySecret; + +// @Value("${aliyun.sms.domain}") + private String smsDomain; + + + + @Override + public IdentityCardInfoVO getIdentityCardInfo(String faceImageUrl, + IDCardSideEnum sideEnum) throws ApiException { + com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config() + .setAccessKeyId(accessKeyId) + .setAccessKeySecret(accessKeySecret); + // 访问的域名 + config.endpoint = "ocr.cn-shanghai.aliyuncs.com"; + try { + com.aliyun.ocr20191230.Client client = new com.aliyun.ocr20191230.Client(config); + URL url = new URL(faceImageUrl); + InputStream inputStream = url.openConnection().getInputStream(); + com.aliyun.ocr20191230.models.RecognizeIdentityCardAdvanceRequest recognizeIdentityCardAdvanceRequest = new com.aliyun.ocr20191230.models.RecognizeIdentityCardAdvanceRequest() + .setImageURLObject(inputStream) + .setSide(sideEnum.getCode()); + com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); + RecognizeIdentityCardResponse idCardResponse = client.recognizeIdentityCardAdvance(recognizeIdentityCardAdvanceRequest, runtime); + log.info("身份证解析结果:{}", JSONObject.toJSONString(idCardResponse)); + RecognizeIdentityCardResponseBody.RecognizeIdentityCardResponseBodyDataFrontResult frontResult = Optional.ofNullable(idCardResponse).map(o -> o.getBody()).map(o -> o.data).map(o -> o.frontResult).orElse(null); + if(Objects.nonNull(frontResult)){ + String username = frontResult.name; + String liveAddress = frontResult.address; + String birthdate = frontResult.birthDate; + if(StringUtils.isNotBlank(birthdate)){ + birthdate = convertDate(birthdate, "yyyyMMdd"); + } + String sex = frontResult.gender; + String idCard = frontResult.IDNumber; + String nation = frontResult.nationality; + IdentityCardInfoVO result = new IdentityCardInfoVO(username, liveAddress, birthdate, sex, idCard, nation); + log.info("身份证解析:{}", JSONObject.toJSONString(result)); + return result; + } + return null; + } catch (com.aliyun.tea.TeaException e) { + log.error("身份证解析报错TeaException:{}", e); + throw new ApiException(e.getMessage()); + } catch (MalformedURLException e) { + log.error("身份证解析报错MalformedURLException:{}", e); + throw new ApiException(e.getMessage()); + } catch (IOException e) { + log.error("身份证解析报错IOException:{}", e); + throw new ApiException(e.getMessage()); + } catch (Exception e) { + log.error("身份证解析报错Exception:{}", e); + throw new ApiException(e.getMessage()); + } + } + + public static String convertDate(String date, String format) { + try { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); + LocalDate localDate = LocalDate.parse(date, formatter); + return localDate.toString(); + } catch (Exception e) { + throw new ServiceException(ErrorCodeEnum.DATA_CONVERT_ERROR); + } + } + + @Override + public BusinessLicenseInfoVO getBusinessLicenseInfo(String imageUrl) throws ApiException { + com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config() + .setAccessKeyId(accessKeyId) + .setAccessKeySecret(accessKeySecret); + config.endpoint = "ocr.cn-shanghai.aliyuncs.com"; + try { + com.aliyun.ocr20191230.Client client = new com.aliyun.ocr20191230.Client(config); + //非上海区域OSS必须使用流转换后使用 + URL url = new URL(imageUrl); + InputStream inputStream = url.openConnection().getInputStream(); + RecognizeBusinessLicenseAdvanceRequest recognizeBusinessLicenseRequest = new RecognizeBusinessLicenseAdvanceRequest() + .setImageURLObject(inputStream); + com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); + RecognizeBusinessLicenseResponse recognizeBusinessLicenseResponse = client.recognizeBusinessLicenseAdvance(recognizeBusinessLicenseRequest, runtime); + log.info("营业执照解析结果:{}", JSONObject.toJSONString(recognizeBusinessLicenseResponse)); + RecognizeBusinessLicenseResponseBody.RecognizeBusinessLicenseResponseBodyData result = Optional.ofNullable(recognizeBusinessLicenseResponse).map(o -> o.getBody()).map(o -> o.data).orElse(null); + if (Objects.nonNull(result)){ + String address = result.address;//住所(经营场所) + String registerNumber = result.registerNumber; + String legalPerson = result.legalPerson;//法人 + String validPeriod = result.validPeriod;//有效期 + String establishDate = result.establishDate; + String name = result.name;//营业执照名称 + String type = result.type;//类型 + BusinessLicenseInfoVO response = new BusinessLicenseInfoVO(registerNumber,address,legalPerson,validPeriod,establishDate,name,type); + return response; + } + return null; + } catch (com.aliyun.tea.TeaException e) { + log.error("营业执照解析报错TeaException:{}", e); + throw new ApiException(e.getMessage()); + } catch (MalformedURLException e) { + log.error("营业执照解析报错MalformedURLException:{}", e); + throw new ApiException(e.getMessage()); + } catch (IOException e) { + log.error("营业执照解析报错IOException:{}", e); + throw new ApiException(e.getMessage()); + } catch (Exception e) { + log.error("营业执照解析报错Exception:{}", e); + throw new ApiException(e.getMessage()); + } + } + + @Override + public FoodLicenseVO getFoodLicense(String imageUrl) throws ApiException { + com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config() + .setAccessKeyId(accessKeyId) + .setAccessKeySecret(accessKeySecret); + config.endpoint = "ocr-api.cn-hangzhou.aliyuncs.com"; + try { + com.aliyun.ocr_api20210707.Client client = new com.aliyun.ocr_api20210707.Client(config); + //非上海区域OSS必须使用流转换后使用 + URL url = new URL(imageUrl); + InputStream inputStream = url.openConnection().getInputStream(); + com.aliyun.ocr_api20210707.models.RecognizeFoodManageLicenseRequest recognizeFoodManageLicenseRequest = new com.aliyun.ocr_api20210707.models.RecognizeFoodManageLicenseRequest(); +// recognizeFoodManageLicenseRequest.setBody(inputStream); + recognizeFoodManageLicenseRequest.setUrl(imageUrl); + com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); + RecognizeFoodManageLicenseResponse recognizeFoodManageLicenseResponse = client.recognizeFoodManageLicenseWithOptions(recognizeFoodManageLicenseRequest,runtime); + log.info("食营解析结果:{}", JSONObject.toJSONString(recognizeFoodManageLicenseResponse)); + String result = Optional.ofNullable(recognizeFoodManageLicenseResponse).map(o -> o.getBody()).map(o -> o.data).orElse(null); + if (StringUtils.isNotBlank(result)){ + JSONObject data = JSONObject.parseObject(JSON.parseObject(result).get("data").toString()); + String operatorName = data.getString("operatorName");//经营者名称 + String legalRepresentative = data.getString("legalRepresentative");//法人 + String businessAddress = data.getString("businessAddress");//经营场所 + String mainBusiness = data.getString("mainBusiness");//主体业态 + String businessScope = data.getString("businessScope");//经营项目 + String licenceNumber = data.getString("licenceNumber");//许可证编号 + FoodLicenseVO foodLicenseVO = new FoodLicenseVO(); + foodLicenseVO.setBusinessAddress(businessAddress); + foodLicenseVO.setBusinessScope(businessScope); + foodLicenseVO.setLegalRepresentative(legalRepresentative); + foodLicenseVO.setMainBusiness(mainBusiness); + foodLicenseVO.setLicenceNumber(licenceNumber); + foodLicenseVO.setOperatorName(operatorName); + return foodLicenseVO; + } + return null; + } catch (com.aliyun.tea.TeaException e) { + log.error("食营解析报错TeaException:{}", e); + throw new ApiException(e.getMessage()); + } catch (MalformedURLException e) { + log.error("食营解析报错MalformedURLException:{}", e); + throw new ApiException(e.getMessage()); + } catch (IOException e) { + log.error("食营解析报错IOException:{}", e); + throw new ApiException(e.getMessage()); + } catch (Exception e) { + log.error("食营解析报错Exception:{}", e); + throw new ApiException(e.getMessage()); + } + } + + @Override + public ResponseResult sendMessage(String mobile, SmsCodeTypeEnum codeType) { + String msgKey = codeType + ":" + mobile; + CommonRequest request = new CommonRequest(); + request.setSysMethod(MethodType.POST); + request.setSysDomain(smsDomain); + request.setSysVersion("2017-05-25"); + request.setSysAction("SendSms"); + + return null; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java new file mode 100644 index 000000000..59fc74506 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java @@ -0,0 +1,295 @@ +package com.cool.store.service.impl; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.EnterpriseUserDAO; +import com.cool.store.dao.RegionDao; +import com.cool.store.dao.ShopStageInfoDAO; +import com.cool.store.entity.*; +import com.cool.store.enums.*; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.mapper.*; +import com.cool.store.request.LicenseListRequest; +import com.cool.store.request.SubmitLicenseRequest; +import com.cool.store.response.GetStoreInfoByCodeResponse; +import com.cool.store.response.LicenseListResponse; +import com.cool.store.response.SubmitLicenseResponse; +import com.cool.store.service.ApplyLicenseService; +import com.cool.store.service.CoolStoreStartFlowService; +import com.cool.store.service.PreparationService; +import com.cool.store.utils.StringUtil; +import com.cool.store.utils.poi.StringUtils; +import com.cool.store.utils.poi.constant.Constants; +import com.cool.store.vo.PartnerUserInfoVO; +import com.cool.store.vo.ShopAuditInfoVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class ApplyLicenseServiceImpl implements ApplyLicenseService { + + @Resource + ApplyLicenseMapper applyLicenseMapper; + + @Resource + ShopAuditInfoMapper shopAuditInfoMapper; + + @Resource + private EnterpriseUserDAO userDAO; + + @Resource + private RegionDao regionDao; + + @Resource + private RegionMapper regionMapper; + + @Resource + ShopStageInfoDAO shopStageInfoDAO; + + @Resource + EnterpriseUserMapper userMapper; + + @Resource + CoolStoreStartFlowService coolStoreStartFlowService; + + @Resource + ShopInfoMapper shopInfoMapper; + + @Resource + PreparationService preparationService; + + @Resource + EnterpriseUserRoleMapper enterpriseUserRoleMapper; + + @Resource + UserAuthMappingMapper userAuthMappingMapper; + + @Resource + CommonService commonService; + + @Resource + LineInfoMapper lineInfoMapper; + + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean submitLicense(SubmitLicenseRequest request, PartnerUserInfoVO user) { + log.info("submitLicense request:{}", JSONObject.toJSONString(request)); + if (Objects.isNull(request)) { + return false; + } + LicenseTransactDO licenseTransactDO = request.toLicenseTransactDO(); + if (request.getId() == null) { + applyLicenseMapper.insertSelective(licenseTransactDO); + } else { + licenseTransactDO.setId(request.getId()); + applyLicenseMapper.updateByPrimaryKeySelective(licenseTransactDO); + } + if (Constants.ONE_INTEGER.equals(request.getSubmitStatus())) { + ShopAuditInfoDO shopAuditInfoDO = new ShopAuditInfoDO(); + shopAuditInfoDO.setShopId(request.getShopId()); + shopAuditInfoDO.setAuditType(AuditTypeEnum.LICENSE_APPROVAL.getCode()); + shopAuditInfoDO.setSubmittedUserId(user.getOpenid()); + shopAuditInfoDO.setSubmittedUserName(user.getUsername()); + shopAuditInfoDO.setDataType(0); + shopAuditInfoMapper.insertSelective(shopAuditInfoDO); + shopStageInfoDAO.updateShopStageAndAuditInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_41, null); + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); + Map requestMap = new HashMap<>(); + requestMap.put("shopId", String.valueOf(request.getShopId())); + requestMap.put("storeName", shopInfoDO.getShopName()); + requestMap.put("partnerName", lineInfoDO.getUsername()); + requestMap.put("partnerMobile", lineInfoDO.getMobile()); + requestMap.put("lineId", String.valueOf(lineInfoDO.getId())); + log.info("submitLicense SMS requestMap:{}", JSONObject.toJSONString(requestMap)); + List sendUsers = new ArrayList<>(); + //如果没有督导,则发送给管辖此区域的所有战区经理 + if (StringUtil.isBlank(shopInfoDO.getSupervisorUserId())) { + Long regionId = shopInfoDO.getRegionId(); + List userAuthByMappingIds = userAuthMappingMapper.getUserAuthByMappingIds(Collections.singletonList(String.valueOf(regionId))); + if (CollectionUtils.isNotEmpty(userAuthByMappingIds)) { + List sendUserIds = userAuthByMappingIds.stream().map(UserAuthMappingDO::getUserId).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(sendUserIds)){ + sendUsers = enterpriseUserRoleMapper.getUserIdsByRoleIds(Collections.singletonList("130000000"), sendUserIds); + } + } + } else { + sendUsers.add(shopInfoDO.getSupervisorUserId()); + } + if (CollectionUtils.isEmpty(sendUsers)) { + log.info("未找到可发送工作通知的人员"); + return true; + } + commonService.sendMessage(sendUsers, MessageEnum.MESSAGE_17, requestMap); + } + return true; + } + + + @Override + public SubmitLicenseResponse getDefault(Long shopId) { + //1.如果已经提交过证照信息,直接查询后组装数据 + LicenseTransactDO result = applyLicenseMapper.selectByShopId(shopId); + SubmitLicenseResponse submitLicenseResponse = new SubmitLicenseResponse(); + if (Objects.nonNull(result)) { + submitLicenseResponse = SubmitLicenseResponse.from(result); + List listByShopIdAndType = shopAuditInfoMapper.getListByShopIdAndType(shopId, AuditTypeEnum.LICENSE_APPROVAL.getCode()); + List userIds = listByShopIdAndType.stream().map(ShopAuditInfoVO::getSubmittedUserId).collect(Collectors.toList()); + List userInfoByUserIds; + if (CollectionUtils.isNotEmpty(userIds)) { + userInfoByUserIds = userMapper.getUserInfoByUserIds(userIds); + Map userAvatarMap = userInfoByUserIds.stream() + .filter(item -> StringUtil.isNotBlank(item.getUserId()) && StringUtil.isNotBlank(item.getAvatar())) + .collect(Collectors.toMap(EnterpriseUserDO::getUserId, EnterpriseUserDO::getAvatar)); + listByShopIdAndType.forEach(item -> { + String avatar = userAvatarMap.get(item.getSubmittedUserId()); + if (StringUtils.isBlank(avatar)) { + item.setAvatar(Constants.AVATAR_DEFAULT); + } else { + item.setAvatar(avatar); + } + }); + } + submitLicenseResponse.setProcessRecords(listByShopIdAndType); + } + //2.未查到证照信息,所以查询鲜丰的默认值(只要鲜丰接口内有值,总是优先使用鲜丰数据) + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId); + if (Objects.nonNull(shopInfoDO.getStoreNum()) && StringUtil.isNotBlank(shopInfoDO.getStoreNum())) { + GetStoreInfoByCodeResponse storeInfoCode = coolStoreStartFlowService.getStoreInfoCode(shopInfoDO.getStoreNum()); + if (Objects.nonNull(storeInfoCode.getData()) + && Objects.nonNull(storeInfoCode.getData().getStoreDocument()) + && storeInfoCode.getCode() == 0 + && StringUtil.isNotBlank(storeInfoCode.getData().getStoreDocument().getStoreBusinessNumber())) { + //替换落库的值 + submitLicenseResponse = SubmitLicenseResponse.from(storeInfoCode, submitLicenseResponse); + //给前端判断哪些是鲜丰数据不可修改 + GetStoreInfoByCodeResponse.StoreDocument storeDocument = storeInfoCode.getData().getStoreDocument(); + SubmitLicenseResponse.StoreDocument storeDocumentResponse = toStoreDocument(storeDocument); + submitLicenseResponse.setStoreDocument(storeDocumentResponse); + return submitLicenseResponse; + } + } + //3.既没有提交数据,也没有在鲜丰端查到证照信息,则返回空自由填写 + return submitLicenseResponse; + } + + public SubmitLicenseResponse.StoreDocument toStoreDocument(GetStoreInfoByCodeResponse.StoreDocument storeDocument) { + SubmitLicenseResponse.StoreDocument submitLicenseResponse = new SubmitLicenseResponse.StoreDocument(); + boolean storeBusinessValidPeriod = "9".equals(storeDocument.getStoreBusinessValidPeriod()); + submitLicenseResponse.setLicenseType(Objects.requireNonNull(LicenseTypeEnum.matchName(storeDocument.getStoreBusinessType())).getCode()); + submitLicenseResponse.setLicenseLegalPerson(storeDocument.getStoreDirector()); + submitLicenseResponse.setIssueTime(DateUtil.parseDate(storeDocument.getStoreBusinessDate())); + submitLicenseResponse.setLicenseAddress(storeDocument.getStoreBusinessAdd()); + submitLicenseResponse.setValidity(storeBusinessValidPeriod ? null : DateUtil.parse(storeDocument.getStoreBusinessValidPeriod(),"yyyy-MM-dd")); + submitLicenseResponse.setValidityType(storeBusinessValidPeriod ? 0 : 1); + submitLicenseResponse.setOperator(storeDocument.getStoreDirector()); + submitLicenseResponse.setFoodLicenseLegalPerson(storeDocument.getStoreFoodLicenseLegalRepresentative()); + submitLicenseResponse.setMainBusiness(storeDocument.getStoreFoodLicenseMainBusiness()); + submitLicenseResponse.setBusinessProject(storeDocument.getStoreFoodLicenseBusinessScope()); + submitLicenseResponse.setRemark(storeDocument.getStoreRemark()); + submitLicenseResponse.setLicenseUrl(storeDocument.getStoreBusinessImg()); + submitLicenseResponse.setLicenseName(storeDocument.getStoreBusinessName()); + submitLicenseResponse.setSocialCreditCode(storeDocument.getStoreBusinessNumber()); + submitLicenseResponse.setFoodLicenseUrl(storeDocument.getStoreFoodLicenseImg()); + submitLicenseResponse.setBusinessPremises(storeDocument.getStoreFoodLicenseBusinessAddress()); + submitLicenseResponse.setFoodLicenseCode(storeDocument.getStoreFoodLicense()); + submitLicenseResponse.setFoodLicenseStartTime(DateUtil.parseDate(storeDocument.getStoreFoodLicenseBeginDate())); + submitLicenseResponse.setFoodLicenseEndTime(DateUtil.parseDate(storeDocument.getStoreFoodLicenseEndDate())); + return submitLicenseResponse; + } + + @Override + public PageInfo licenseList(LicenseListRequest request, LoginUserInfo user) { + //当前用户角色 + List userRoleIds = enterpriseUserRoleMapper.getUserRoleIds(user.getUserId()); + List licenseListResponses; + //查证照列表数据 + if (userRoleIds.contains(UserRoleEnum.THEATER_MANAGER.getCode())) { + //当前用户所属区域 + List regionIds = userAuthMappingMapper.getMappingIdsByUserId(user.getUserId()); + if (CollectionUtils.isEmpty(regionIds)) { + return new PageInfo<>(); + } + List fightRegion = regionDao.getFightRegionByRegionIds(regionIds); + List fightRegionIds = fightRegion.stream().map(RegionDO::getRegionId).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(fightRegion)) { + return new PageInfo<>(); + } + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + licenseListResponses = applyLicenseMapper.licenseList(request, null, fightRegionIds); + } else { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + licenseListResponses = applyLicenseMapper.licenseList(request, user.getUserId(), null); + } + List userIdList = new ArrayList<>(); + for (LicenseListResponse vo : licenseListResponses) { + userIdList.add(vo.getSupervisorUserId()); + userIdList.add(vo.getShopManagerUserId()); + userIdList.add(vo.getInvestmentManager()); + } + if (CollectionUtils.isNotEmpty(userIdList)) { + Map userNameMap = userDAO.getUserNameMap(userIdList); + for (LicenseListResponse vo : licenseListResponses) { + vo.setSupervisorUserName(userNameMap.get(vo.getSupervisorUserId())); + vo.setShopManagerUserName(userNameMap.get(vo.getShopManagerUserId())); + vo.setInvestmentManagerName(userNameMap.get(vo.getInvestmentManager())); + if (vo.getFightRegionId() != null) { + RegionDO regionDO = regionMapper.getBigRegionByRegionId(vo.getFightRegionId()); + Long bigRegionIdByAreaId = regionDO.getId(); + Map regionNameMap = regionDao.getRegionNameMap(Arrays.asList(bigRegionIdByAreaId, vo.getFightRegionId())); + vo.setFightRegionId(vo.getFightRegionId()); + vo.setFightRegion(regionNameMap.get(vo.getFightRegionId())); + vo.setBigRegionId(bigRegionIdByAreaId); + vo.setBigRegion(regionNameMap.get(bigRegionIdByAreaId)); + } + } + } + return new PageInfo<>(licenseListResponses); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean licenseExamine(Long shopId, Integer status, String result, LoginUserInfo user) { + ShopAuditInfoDO shopAuditInfoDO = new ShopAuditInfoDO(); + shopAuditInfoDO.setShopId(shopId); + ShopSubStageStatusEnum shopSubStageStatusEnum = null; + shopAuditInfoDO.setAuditType(AuditTypeEnum.LICENSE_APPROVAL.getCode()); + shopAuditInfoDO.setSubmittedUserId(user.getUserId()); + shopAuditInfoDO.setSubmittedUserName(user.getName()); + shopAuditInfoDO.setDataType(1); + shopAuditInfoDO.setResultType(status); + LicenseTransactDO licenseTransactDO = new LicenseTransactDO(); + licenseTransactDO.setShopId(shopId); + if (Constants.ZERO_INTEGER.equals(status)) { + //是否开业验收 改走的流程都已经完成 ->初始化开业验收数据 + preparationService.whetherToOpenForAcceptance(shopId); + shopAuditInfoDO.setPassReason(result); + shopSubStageStatusEnum = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_43; + licenseTransactDO.setSubmitStatus(3); + } else if (Constants.ONE_INTEGER.equals(status)) { + licenseTransactDO.setSubmitStatus(2); + shopAuditInfoDO.setRejectReason(result); + shopSubStageStatusEnum = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_42; + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId); + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); + commonService.sendSms(lineInfoDO.getMobile(), SMSMsgEnum.LICENSE_NOT_PASS); + } + applyLicenseMapper.updateByShopId(licenseTransactDO); + //插入操作/意见 + shopAuditInfoMapper.insertSelective(shopAuditInfoDO); + //更新阶段状态 + shopStageInfoDAO.updateShopStageAndAuditInfo(shopId, shopSubStageStatusEnum, shopAuditInfoDO.getId()); + return null; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AssessmentDataServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AssessmentDataServiceImpl.java new file mode 100644 index 000000000..855ce80b6 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AssessmentDataServiceImpl.java @@ -0,0 +1,37 @@ +package com.cool.store.service.impl; + +import com.cool.store.constants.CommonConstants; +import com.cool.store.dao.AssessmentDataDAO; +import com.cool.store.entity.AssessmentDataDO; +import com.cool.store.service.AssessmentDataService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/04/29/下午10:47 + * @Version 1.0 + * @注释: + */ +@Service +public class AssessmentDataServiceImpl implements AssessmentDataService { + @Resource + private AssessmentDataDAO assessmentDataDAO; + @Override + public Boolean batchInsertSelective(List assessmentDataDOS) { + if (assessmentDataDOS.isEmpty()) { + return Boolean.FALSE; + } + return assessmentDataDAO.batchInsert(assessmentDataDOS); + } + + @Override + public Integer batchUpdate(List assessmentDataDOS) { + if (assessmentDataDOS.isEmpty()) { + return CommonConstants.ZERO; + } + return assessmentDataDAO.batchUpdate(assessmentDataDOS); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AssessmentTemplateServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AssessmentTemplateServiceImpl.java new file mode 100644 index 000000000..1cf96f4b6 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AssessmentTemplateServiceImpl.java @@ -0,0 +1,44 @@ +package com.cool.store.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.dao.AssessmentTemplateDAO; +import com.cool.store.entity.AssessmentTemplateDO; +import com.cool.store.service.AssessmentTemplateService; +import com.cool.store.utils.poi.StringUtils; +import com.cool.store.vo.AssessmentTemplateVO; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/25 11:25 + * @Version 1.0 + */ +@Service +public class AssessmentTemplateServiceImpl implements AssessmentTemplateService { + + @Resource + AssessmentTemplateDAO assessmentTemplateDAO; + + @Override + public List listByType(Integer type) { + List assessmentTemplateDOS = assessmentTemplateDAO.listByType(type); + List result = new ArrayList<>(); + assessmentTemplateDOS.forEach(x->{ + AssessmentTemplateVO assessmentTemplateVO = new AssessmentTemplateVO(); + BeanUtil.copyProperties(x,assessmentTemplateVO); + x.getTemplateRemark(); + if (StringUtils.isNotEmpty(x.getTemplateRemark())){ + String[] split = x.getTemplateRemark().replaceAll("[\\[\\]\\s]", "").split(","); + assessmentTemplateVO.setTemplateRemarkList(Arrays.asList(split)); + } + result.add(assessmentTemplateVO); + }); + return result; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AuditOpeningOperationPlanImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AuditOpeningOperationPlanImpl.java new file mode 100644 index 000000000..7cba9607f --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AuditOpeningOperationPlanImpl.java @@ -0,0 +1,86 @@ +package com.cool.store.service.impl; + + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.*; +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.entity.OpeningOperationPlanDO; +import com.cool.store.entity.ShopAuditInfoDO; +import com.cool.store.enums.AuditResultTypeEnum; +import com.cool.store.enums.AuditTypeEnum; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.OpeningOperationPlanResultTypeEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.OpeningOperationPlanAuditRequest; +import com.cool.store.service.AuditOpeningOperationPlanService; +import com.cool.store.service.PreparationService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; +import java.util.Objects; + +/** + * @Auther: WangShuo + * @Date: 2024/04/22/下午3:19 + * @Version 1.0 + * @注释: + */ +@Slf4j +@Service +public class AuditOpeningOperationPlanImpl implements AuditOpeningOperationPlanService { + + + @Resource + private OpeningOperationPlanDAO openingOperationPlanDAO; + @Resource + private ShopStageInfoDAO shopStageInfoDAO; + @Resource + private PreparationService preparationService; + @Resource + private ShopAuditInfoDAO shopAuditInfoDAO; + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean auditPlan(OpeningOperationPlanAuditRequest request, LoginUserInfo user) { + log.info("auditPlan request:{}", JSONObject.toJSONString(request)); + if (Objects.isNull(request)) { + log.error("auditPlan request is null"); + throw new ServiceException("auditPlan request is null"); + } + try { + ShopAuditInfoDO shopAuditInfoDO = request.toShopAuditInfoDO(); + shopAuditInfoDO.setSubmittedUserId(user.getUserId()); + shopAuditInfoDO.setSubmittedUserName(user.getName()); + Long auditId = shopAuditInfoDAO.addAuditInfo(shopAuditInfoDO); + OpeningOperationPlanDO openingOperationPlanDO = new OpeningOperationPlanDO(); + openingOperationPlanDO.setShopId(request.getShopId()); + openingOperationPlanDO.setAuditId(auditId); + openingOperationPlanDO.setResultType(request.getResultType()); + openingOperationPlanDAO.updateResultType(request.getShopId(),auditId,request.getResultType()); + ShopSubStageStatusEnum shopSubStageStatusEnum = null; + Boolean flag = Boolean.FALSE; + if(OpeningOperationPlanResultTypeEnum.PASS_AUDIT.getCode().equals(request.getResultType())){ + shopSubStageStatusEnum = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_143; + flag = Boolean.TRUE; + }else { + shopSubStageStatusEnum = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_142; + } + shopStageInfoDAO.updateShopStageAndAuditInfo(request.getShopId(), + shopSubStageStatusEnum, auditId); + if (flag){ + preparationService.whetherToOpenForAcceptance(request.getShopId()); + } + return Boolean.TRUE; + } catch (Exception e) { + log.error("auditPlan Exception:{}", e); + return Boolean.FALSE; + } + + } + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AuditResultService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AuditResultService.java new file mode 100644 index 000000000..c2d33c5bb --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AuditResultService.java @@ -0,0 +1,10 @@ +package com.cool.store.service.impl; + + +import com.cool.store.request.AuditResultRequest; +import org.springframework.stereotype.Service; + +@Service("AuditResultService") +public interface AuditResultService { + Boolean auditResult(AuditResultRequest request); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AuditStatusServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AuditStatusServiceImpl.java new file mode 100644 index 000000000..85ac39bf6 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/AuditStatusServiceImpl.java @@ -0,0 +1,156 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.EnterpriseUserDAO; +import com.cool.store.dao.HyOpenAreaInfoDAO; +import com.cool.store.dao.LineAuditInfoDAO; +import com.cool.store.dao.LineInfoDAO; +import com.cool.store.entity.*; +import com.cool.store.enums.AuditResultTypeEnum; +import com.cool.store.mapper.AuditStatusMapper; +import com.cool.store.mapper.LineInterviewMapper; +import com.cool.store.request.AuditCheckRequest; +import com.cool.store.request.AuditDetailRequest; +import com.cool.store.response.AuditDetailResponse; +import com.cool.store.response.CheckListResponse; +import com.cool.store.service.AuditStatusService; +import com.cool.store.utils.poi.DateUtils; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class AuditStatusServiceImpl implements AuditStatusService { + + @Resource + AuditStatusMapper auditStatusMapper; + + @Resource + private LineInfoDAO lineInfoDAO; + + @Resource + private LineAuditInfoDAO lineAuditInfoDAO; + + @Resource + private LineInterviewMapper lineInterviewMapper; + + @Resource + HyOpenAreaInfoDAO hyOpenAreaInfoDAO; + + @Resource + EnterpriseUserDAO enterpriseUserDAO; + + + @Override + public Boolean audit(AuditCheckRequest request, LoginUserInfo user) { + //稽核信息 + AuditStatusDO auditStatusDO = auditStatusMapper.selectByPrimaryKey(request.getCheckId()); + //线索审核信息 + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId()); + String partnerId = lineInfo.getPartnerId(); + LineAuditInfoDO auditInfo = new LineAuditInfoDO(); + auditInfo.setLineId(request.getLineId()); + auditInfo.setPartnerId(partnerId); + if (request.getCheckStatus().equals(0)) { + auditInfo.setResultType(AuditResultTypeEnum.PASS.getCode()); + auditInfo.setPassReason(request.getCheckResult()); + } else if (request.getCheckStatus().equals(1)) { + auditInfo.setResultType(AuditResultTypeEnum.REJECT.getCode()); + auditInfo.setRejectPublicReason(request.getCheckResult()); + auditInfo.setRejectRealReason(request.getCheckResult()); + } + Long auditId = lineAuditInfoDAO.addAuditInfo(auditInfo); + auditStatusDO.setAuditId(auditId); + auditStatusDO.setAuditUserId(Long.valueOf(user.getUserId())); + auditStatusDO.setAuditUserName(user.getName()); + auditStatusDO.setAuditStatus(request.getCheckStatus()); + auditStatusDO.setUpdateTime(DateUtils.getNowDate()); + auditStatusMapper.updateByPrimaryKeySelective(auditStatusDO); + return true; + } + + @Override + public int insert(Long lineId, Long interviewId, Long auditId, Integer auditStage) { + AuditStatusDO auditStatusDO = new AuditStatusDO(); + auditStatusDO.setLineId(lineId); + auditStatusDO.setInterviewId(interviewId); + auditStatusDO.setAuditId(auditId); + auditStatusDO.setAuditStage(auditStage); + return auditStatusMapper.insertSelective(auditStatusDO); + } + + + @Override + public AuditDetailResponse detail(AuditDetailRequest request) { + AuditDetailResponse response = new AuditDetailResponse(); + AuditStatusDO auditStatusDO = auditStatusMapper.selectByPrimaryKey(request.getCheckId()); + LineInterviewDO lineInterviewDO = lineInterviewMapper.selectByPrimaryKey(auditStatusDO.getInterviewId()); + LineAuditInfoDO auditInfo = lineAuditInfoDAO.getAuditInfo(auditStatusDO.getAuditId()); + response.setVideoUrl(JSONObject.parseArray(lineInterviewDO.getVideoUrl(), String.class)); + if (Objects.nonNull(lineInterviewDO.getActualStartTime())) { + response.setStartTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, lineInterviewDO.getActualStartTime())); + } + if (Objects.nonNull(lineInterviewDO.getActualEndTime())) { + response.setEndTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, lineInterviewDO.getActualEndTime())); + } + if (Objects.nonNull(auditStatusDO.getUpdateTime())) { + response.setCheckTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, auditStatusDO.getUpdateTime())); + } + response.setCheckUser(auditStatusDO.getAuditUserName()); + response.setCheckStatus(auditStatusDO.getAuditStatus()); + if (auditInfo.getResultType() > 0) { + response.setCheckResult(auditInfo.getRejectPublicReason()); + } else { + response.setCheckResult(auditInfo.getPassReason()); + } + + return response; + } + + @Override + public PageInfo checkList(String partnerNameOrPhone, + String startTime, + String endTime, + String region, + Integer checkStatus, + Integer checkStage, + Integer pageNum, + Integer pageSize) { + if (Objects.nonNull(region)) { + HyOpenAreaInfoDO areaInfo = hyOpenAreaInfoDAO.selectById(Long.valueOf(region)); + if (Objects.nonNull(areaInfo)) { + region = areaInfo.getAreaPath(); + } + } + PageHelper.startPage(pageNum, pageSize); + List checkListResponses = auditStatusMapper.checkList(partnerNameOrPhone, startTime, endTime, region, checkStatus, checkStage, pageNum, pageSize); + //意向区域 + List wantRegions = checkListResponses.stream().map(CheckListResponse::getWantRegion).collect(Collectors.toList()); + //面审人 + List intervieweeIds = checkListResponses.stream().map(CheckListResponse::getIntervieweeId).collect(Collectors.toList()); + //招商经理 + List investmentIds = checkListResponses.stream().map(CheckListResponse::getInvestmentId).collect(Collectors.toList()); + //意向区域Map + Map wantShopAreaMap = hyOpenAreaInfoDAO.selectNameMapByIds(wantRegions); + //招商经理Map + Map investmentIdMap = enterpriseUserDAO.getUserNameMap(investmentIds); + //面审人Map + Map intervieweeIdMap = enterpriseUserDAO.getUserNameMap(intervieweeIds); + + checkListResponses.forEach(x -> { + x.setIntervieweeName(intervieweeIdMap.get(x.getIntervieweeId())); + x.setWantRegionName(wantShopAreaMap.get(x.getWantRegion())); + x.setInvestmentName(investmentIdMap.get(x.getInvestmentId())); + }); + return new PageInfo<>(checkListResponses); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/BankServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/BankServiceImpl.java new file mode 100644 index 000000000..248c96647 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/BankServiceImpl.java @@ -0,0 +1,113 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.dao.BankDAO; +import com.cool.store.dao.LineAuditInfoDAO; +import com.cool.store.dao.LineInfoDAO; +import com.cool.store.entity.BankdocDO; +import com.cool.store.entity.BanktypeDO; +import com.cool.store.entity.LineAuditInfoDO; +import com.cool.store.entity.LineInfoDO; +import com.cool.store.enums.*; +import com.cool.store.mapper.LinePayMapper; +import com.cool.store.request.AuditRejectRequest; +import com.cool.store.request.BranchBankPageRequest; +import com.cool.store.service.BankService; +import com.cool.store.utils.StringUtil; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageInfo; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +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.List; + +/** + * @author wxp + * @version 1.0 + */ +@Service +@Slf4j +public class BankServiceImpl extends LineFlowService implements BankService { + + @Autowired + private BankDAO bankDAO; + @Resource + LineInfoDAO lineInfoDAO; + + @Resource + LinePayMapper linePayMapper; + + @Resource + private LineAuditInfoDAO lineAuditInfoDAO; + + @Resource + CommonService commonService; + + @Override + public List listBank() { + List bankList = bankDAO.listBank(); + if (CollectionUtils.isEmpty(bankList)) { + log.info("银行类型为空"); + return Lists.newArrayList(); + } + return bankList; + } + + @Override + public PageInfo listBranchBank(BranchBankPageRequest request) { + Page pageInfo = bankDAO.listBranchBank(request); + PageInfo resultPage = new PageInfo(pageInfo); + return resultPage; + } + + @Override + protected Boolean auditPass(Long auditId, LineInfoDO lineInfo,String userId) { + WorkflowSubStageEnum workflowSubStageEnum = WorkflowSubStageEnum.getWorkflowSubStageEnum(lineInfo.getWorkflowSubStage()); + WorkflowSubStageEnum nextStage = workflowSubStageEnum.getNextStage(); + //更新线索阶段 + lineInfoDAO.updateWorkflowStage(lineInfo.getId(), nextStage, nextStage.getInitStatus(), userId); + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.INTENTION_PAYMENT_SUCCESS); + return Boolean.TRUE; + } + + @Override + protected Boolean auditReject(Long auditId, LineInfoDO lineInfo,String userId) { + lineInfo.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.PAY_FAIL_55.getCode()); + if(StringUtils.isNotEmpty(userId)){ + lineInfo.setUpdateUserId(userId); + } + lineInfoDAO.updateLineInfo(lineInfo); + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.INTENTION_PAYMENT_FAIL, null); + return Boolean.TRUE; + } + + @Override + public Boolean repayment(AuditRejectRequest request) { + //更新线索 + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId()); + lineInfo.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.PAY_FAIL_55.getCode()); + lineInfo.setWorkflowSubStage(WorkflowSubStageEnum.PAY_DEPOSIT.getCode()); + lineInfoDAO.updateLineInfo(lineInfo); + //插入线索审核信息 + String partnerId = lineInfo.getPartnerId(); + LineAuditInfoDO auditInfo = new LineAuditInfoDO(); + auditInfo.setLineId(request.getLineId()); + auditInfo.setPartnerId(partnerId); + auditInfo.setResultType(AuditResultTypeEnum.REJECT.getCode()); + auditInfo.setRejectPublicReason(request.getRejectPublicReason()); + auditInfo.setRejectRealReason(request.getRejectRealReason()); + auditInfo.setCertifyFile(JSONObject.toJSONString(request.getCertifyFile())); + Long auditId = lineAuditInfoDAO.addAuditInfo(auditInfo); + linePayMapper.updateByPidAndLid(request.getLineId(),lineInfo.getPartnerId(),auditId); + //发送短信 + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.INTENTION_PAYMENT_FAIL, null); + + return Boolean.TRUE; + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonService.java new file mode 100644 index 000000000..ea9aef6f9 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonService.java @@ -0,0 +1,183 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.aliyun.auth.credentials.Credential; +import com.aliyun.auth.credentials.provider.StaticCredentialProvider; +import com.aliyun.sdk.service.dysmsapi20170525.models.*; +import com.aliyun.sdk.service.dysmsapi20170525.*; +import com.aliyun.sdk.service.dysmsapi20170525.AsyncClient; +import com.cool.store.dao.EnterpriseUserDAO; +import com.cool.store.dto.message.SendMessageDTO; +import com.cool.store.enums.*; +import com.cool.store.mq.producer.SimpleMessageService; +import com.cool.store.request.AuditResultRequest; +import com.cool.store.utils.UUIDUtils; +import com.cool.store.utils.poi.constant.Constants; +import com.google.gson.Gson; +import darabonba.core.client.ClientOverrideConfiguration; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.text.MessageFormat; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: CommonService + * @Description: + * @date 2024-03-20 17:09 + */ +@Slf4j +@Service +public class CommonService { + + @Autowired + private ApplicationContext applicationContext; + @Resource + private EnterpriseUserDAO enterpriseUserDAO; + @Resource + private SimpleMessageService simpleMessageService; + @Value("${coolstore.page.domain}") + private String coolStoreDomainUrl; + @Value("${cool.app.id}") + private String appId; + @Value("${mybatis.configuration.variables.enterpriseId}") + private String enterpriseId; + @Value("${enterprise.dingCorpId}") + private String dingCorpId; + @Value("${aliyun.sms.accessKeyId}") + private String smsAccessKeyId; + @Value("${aliyun.sms.accessKeySecret}") + private String smsAccessKeySecret; + @Value("${aliyun.sms.signName}") + private String signName; + + public LineFlowService getLineFlowService(Integer workflowSubStage){ + WorkflowSubStageEnum workflowSubStageEnum = WorkflowSubStageEnum.getWorkflowSubStageEnum(workflowSubStage); + return (LineFlowService)applicationContext.getBean(workflowSubStageEnum.getClazz()); + } + + public AuditResultService getAuditService(AuditResultRequest request) { + String flag = splitMethod(request.getKdzBusinessId()); + AuditEnum auditEnum = AuditEnum.getWorkflowSubStageEnum(flag); + return (AuditResultService) applicationContext.getBean(auditEnum.getClazz()); + } + + public void sendMessageAsync(List userIds, MessageEnum message, Map requestMap){ + CompletableFuture.runAsync(() -> sendMessage(userIds, message, requestMap)); + } + + public void sendMessage(List userIds, MessageEnum message, Map requestMap){ + log.info("message:{}, request:{}, userIds:{}", message.getTitle(), JSONObject.toJSONString(requestMap), JSONObject.toJSONString(userIds)); + if(CollectionUtils.isEmpty(userIds)){ + return; + } + userIds = userIds.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(userIds)){ + return; + } + try { + String messageUrl = message.getMessageUrl(coolStoreDomainUrl, appId, dingCorpId, requestMap); + if(StringUtils.isBlank(messageUrl)){ + log.info("获取通知url为空"); + return; + } + SendMessageDTO messageDTO = new SendMessageDTO(); + messageDTO.setCorpId(dingCorpId); + messageDTO.setUserIds(String.join(Constants.COMMA, userIds)); + messageDTO.setOutBusinessId(UUIDUtils.get32UUID()); + messageDTO.setAppType("dingding2"); + JSONObject map = new JSONObject(); + map.put("message_url", messageUrl); + map.put("pcMessageUrl", messageUrl); + JSONObject headJson = new JSONObject(); + headJson.put("bgcolor", "FFBBBBBB"); + map.put("head", headJson); + JSONObject body = new JSONObject(); + body.put("title", message.getTitle()); + body.put("image", message.getImageUrl()); + body.put("content", message.getContent(requestMap)); + map.put("body",body); + messageDTO.setOaJson(map); + simpleMessageService.send(JSONObject.toJSONString(messageDTO), RocketMqTagEnum.STORE_DING_QUEUE); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void sendSms(String poneNumber, SMSMsgEnum templateCode){ + sendSms(Arrays.asList(poneNumber), templateCode, null); + } + + public void sendSms(String poneNumber, SMSMsgEnum templateCode, Map templateParamMap){ + sendSms(Arrays.asList(poneNumber), templateCode, templateParamMap); + } + + public void sendSmsAsync(String poneNumber, SMSMsgEnum templateCode, Map templateParamMap){ + CompletableFuture.runAsync(() -> sendSms(Arrays.asList(poneNumber), templateCode, templateParamMap)); + } + + public void sendSms(List poneNumbers, SMSMsgEnum templateCode, Map templateParamMap){ + log.info("templateCode:{}, request:{}, poneNumbers:{}", templateCode.getTitle(), JSONObject.toJSONString(templateParamMap), JSONObject.toJSONString(poneNumbers)); + if(CollectionUtils.isEmpty(poneNumbers)){ + return; + } + List signNameList = new ArrayList<>(); + signNameList.add("酷店掌"); + AsyncClient client = null; + try { + StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder() + .accessKeyId(smsAccessKeyId) + .accessKeySecret(smsAccessKeySecret) + .build()); + client = AsyncClient.builder() + .region("cn-hangzhou") + .credentialsProvider(provider) + .overrideConfiguration( + ClientOverrideConfiguration.create() + .setEndpointOverride("dysmsapi.aliyuncs.com") + ) + .build(); + SendBatchSmsRequest sendBatchSmsRequest = SendBatchSmsRequest.builder() + .phoneNumberJson(JSONObject.toJSONString(poneNumbers)) + .signNameJson(JSONObject.toJSONString(signNameList)) + .templateCode(templateCode.getTemplateCode()) + .templateParamJson("[" + JSONObject.toJSONString(templateParamMap) + "]") + .build(); + CompletableFuture response = client.sendBatchSms(sendBatchSmsRequest); + SendBatchSmsResponse resp = response.get(); + log.info("短信发送templateCode:{}, response:{}", templateCode.getTemplateCode(), JSONObject.toJSONString(resp)); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } finally { + if(Objects.isNull(client)){ + client.close(); + } + } + } + + public static String splitMethod(String kdzBusinessId) { + String[] split = kdzBusinessId.split(Constants.D_LINE); + if (split.length >= 2) { + return split[0]; + } else { + return null; + } + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ContentServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ContentServiceImpl.java new file mode 100644 index 000000000..c8e56e0a3 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ContentServiceImpl.java @@ -0,0 +1,109 @@ +package com.cool.store.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.RedisConstant; +import com.cool.store.dto.content.ContentAddDto; +import com.cool.store.dto.content.ContentQueryListDto; +import com.cool.store.dto.content.ContentUpdateDto; +import com.cool.store.entity.HyContentInfoDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ApiException; +import com.cool.store.mapper.HyContentInfoMapper; +import com.cool.store.service.ContentService; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.vo.HyContentInfoVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class ContentServiceImpl implements ContentService { + + @Autowired + private HyContentInfoMapper contentInfoMapper; + + @Autowired + private RedisUtilPool redisUtilPool; + + /** + * + * @param dto + * @return contentId 新增动态id + */ + @Override + public String addNews(ContentAddDto dto) throws ApiException { + //增加不允许重复标题的逻辑 + Boolean isDuplicated = contentInfoMapper.whetherTitleDuplicated(dto.getContentTitle()); + if (isDuplicated) { + throw new ApiException(ErrorCodeEnum.CONTENT_DUPLICATED); + } + HyContentInfoDO hyContentInfoDO = new HyContentInfoDO(); + BeanUtil.copyProperties(dto, hyContentInfoDO); + hyContentInfoDO.setUpdateUserId(dto.getCreateUserId()); + return Integer.toString(contentInfoMapper.insertSelective(hyContentInfoDO)); + } + + /** + * 删除动态 + * @param contentId + */ + @Override + public void deleteContent(String contentId) { + contentInfoMapper.deleteSelective(contentId); + } + + /** + * 更新动态信息 + * @param dto + */ + @Override + public void updateContent(ContentUpdateDto dto) throws ApiException { + HyContentInfoDO hyContentInfoDO = new HyContentInfoDO(); + BeanUtil.copyProperties(dto, hyContentInfoDO); + hyContentInfoDO.setId(Long.parseLong(dto.getContentId())); + contentInfoMapper.updateByPrimaryKeySelective(hyContentInfoDO); + } + + /** + * 查询动态列表 + */ + @Override + public List queryContentList(ContentQueryListDto dto) { + return contentInfoMapper.queryContentList(dto); + } + + /** + * 查询动态列表 C 端用 + */ + @Override + public List queryContentListToC(ContentQueryListDto dto) { + return contentInfoMapper.queryContentListForC(dto); + } + + /** + * 查询动态详情 + * @param contentId + * @return + */ + @Override + public HyContentInfoDO queryContentInfo(String contentId) { + return contentInfoMapper.queryContentInfo(contentId); + } + + /** + * 标题是否重复 + */ + @Override + public Boolean queryTitles(String title) { + List titles = (List) JSONObject.parseObject(redisUtilPool.getString(RedisConstant.CONTENT_TITLES), List.class); + if (titles != null && titles.size() != 0) { + return titles.contains(title); + } + titles = contentInfoMapper.queryTitles(); + redisUtilPool.setString(RedisConstant.CONTENT_TITLES, JSONObject.toJSONString(titles), 60); + return titles.contains(title); + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CoolStoreStartFlowServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CoolStoreStartFlowServiceImpl.java new file mode 100644 index 000000000..0a7dd346a --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CoolStoreStartFlowServiceImpl.java @@ -0,0 +1,155 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.dao.ShopStageInfoDAO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mq.util.HttpRestTemplateService; +import com.cool.store.request.FranchiseAgreementRequest; +import com.cool.store.request.NewStoreRequest; +import com.cool.store.request.xfsgFirstOrderListRequest; +import com.cool.store.response.GetStoreInfoByCodeResponse; +import com.cool.store.response.InitiatingResponse; +import com.cool.store.response.ResponseResult; +import com.cool.store.response.xfsgFirstOderListResponse; +import com.cool.store.service.CoolStoreStartFlowService; +import com.cool.store.utils.SecureUtil; +import com.cool.store.utils.poi.StringUtils; +import com.cool.store.utils.poi.constant.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +@Service +@Slf4j +public class CoolStoreStartFlowServiceImpl implements CoolStoreStartFlowService { + + + @Value("${xfsg.url}") + private String xfsgUrl; + + @Resource + ShopStageInfoDAO shopStageInfoDAO; + + @Resource + private HttpRestTemplateService httpRestTemplateService; + + @Override + public ResponseResult newStore(NewStoreRequest request, Long shopId) { + log.info("newStore param:{}", JSONObject.toJSONString(request)); + if (Objects.isNull(request)) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + Map requestMap = new HashMap<>(); + fillSignatureInfo(requestMap); + String url = xfsgUrl + Constants.NEW_STORE_URL + "?timestamp=" + requestMap.get("timestamp") + "&signature=" + requestMap.get("signature"); + InitiatingResponse initiatingResponse = httpRestTemplateService.postForObject(url, request, InitiatingResponse.class); + log.info("newStore API response:{}", JSONObject.toJSONString(initiatingResponse)); + if (initiatingResponse.getCode() != 0L) { + throw new ServiceException(ErrorCodeEnum.FRANCHISE_AGREEMENT_FALSE, initiatingResponse.getMsg(),initiatingResponse.getData()); +// return new ResponseResult(500, initiatingResponse.getMsg(), initiatingResponse.getData()); + } else { + //更新阶段信息 + shopStageInfoDAO.updateShopStageAndAuditInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_31, null); + return new ResponseResult(200000, initiatingResponse.getMsg(), initiatingResponse.getData()); + } + } + + @Override + public ResponseResult franchiseAgreement(FranchiseAgreementRequest request, Integer type) { + log.info("newStore param:{}", JSONObject.toJSONString(request)); + if (Objects.isNull(request)) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + Map requestMap = new HashMap<>(); + fillSignatureInfo(requestMap); + String url = null; + if (Constants.TWO_INTEGER == type) { + url = xfsgUrl + Constants.FRANCHISE_AGREEMENT_COMPANY + "?timestamp=" + requestMap.get("timestamp") + "&signature=" + requestMap.get("signature"); + request.setZxhtywfl("3121375929356587766"); + } else if (Constants.ONE_INTEGER == type) { + url = xfsgUrl + Constants.FRANCHISE_AGREEMENT_PERSON + "?timestamp=" + requestMap.get("timestamp") + "&signature=" + requestMap.get("signature"); + } + InitiatingResponse initiatingResponse = httpRestTemplateService.postForObject(url, request, InitiatingResponse.class); + log.info("franchiseAgreement API response:{}", JSONObject.toJSONString(initiatingResponse)); + if (initiatingResponse.getCode() != 0L) { +// throw new ServiceException(500, initiatingResponse.getMsg(), initiatingResponse.getData()); + throw new ServiceException(ErrorCodeEnum.FRANCHISE_AGREEMENT_FALSE, initiatingResponse.getMsg(),initiatingResponse.getData()); + } else { + return new ResponseResult(200000, initiatingResponse.getMsg(), initiatingResponse.getData()); + } + } + + + @Override + public Boolean getFirstOrder(String shopNum) { + log.info("getFirstOrder shopNum:{}", shopNum); + if (Objects.isNull(shopNum)) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + Map requestMap = new HashMap<>(); + fillSignatureInfo(requestMap); + try { + String url = xfsgUrl + Constants.FIRST_ORDER + + "?timestamp=" + requestMap.get("timestamp") + "&signature=" + requestMap.get("signature") + + "&storeCode=" + shopNum; + Long start = System.currentTimeMillis(); + JSONObject jsonObject = httpRestTemplateService.getForObject(url, JSONObject.class, new HashMap<>()); + log.info("get url:{},jsonObject:{},耗时:{}", url, jsonObject,System.currentTimeMillis() - start); + Boolean flag = (Boolean) jsonObject.get("data"); + return flag; + } catch (Exception e) { + log.error("获取鲜丰订货金异常", e); + throw new ServiceException(ErrorCodeEnum.GET_FIRST_ORDER); + } + } + + @Override + public xfsgFirstOderListResponse getFirstOrderList(xfsgFirstOrderListRequest storeCodeList) { + log.info("getFirstOrderList storeCodeList:{}", storeCodeList); + if (Objects.isNull(storeCodeList)) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + Map requestMap = new HashMap<>(); + fillSignatureInfo(requestMap); + try { + String url = xfsgUrl + Constants.BATCH_FIRST_ORDER + + "?timestamp=" + requestMap.get("timestamp") + "&signature=" + requestMap.get("signature"); + xfsgFirstOderListResponse xfsgFirstOderListResponse = httpRestTemplateService.postForObject(url, storeCodeList, xfsgFirstOderListResponse.class); + return xfsgFirstOderListResponse; + } catch (Exception e) { + log.error("获取鲜丰订货金异常", e); + } + return null; + } + + + @Override + public GetStoreInfoByCodeResponse getStoreInfoCode(String storeNum) { + log.info("getStoreInfoCode storeNum:{}", storeNum); + if (StringUtils.isBlank(storeNum)) { + throw new ServiceException(ErrorCodeEnum.STORE_NUM_NOT_FOUND); + } + Map requestMap = new HashMap<>(); + fillSignatureInfo(requestMap); + requestMap.put("storeCode", storeNum); + String url = xfsgUrl + Constants.GET_STORE_INFO_BY_CODE + "?timestamp=" + requestMap.get("timestamp") + "&signature=" + requestMap.get("signature"); + GetStoreInfoByCodeResponse response = httpRestTemplateService.getForObject(url, GetStoreInfoByCodeResponse.class, requestMap); + return response; + } + + + private void fillSignatureInfo(Map requestMap) { + long timestamp = System.currentTimeMillis(); + String signature = SecureUtil.getSignature(timestamp); + requestMap.put("timestamp", timestamp); + requestMap.put("signature", signature); + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationServiceImpl.java new file mode 100644 index 000000000..355c54c6e --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DecorationServiceImpl.java @@ -0,0 +1,712 @@ +package com.cool.store.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.*; +import com.cool.store.dto.decoration.*; +import com.cool.store.dto.openPreparation.OpenPlanShopInfoDTO; +import com.cool.store.dto.openPreparation.UserNameDTO; +import com.cool.store.entity.*; +import com.cool.store.enums.*; +import com.cool.store.enums.point.PayBusinessTypeEnum; +import com.cool.store.enums.point.ShopStageEnum; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.LineInfoMapper; +import com.cool.store.mapper.ShopInfoMapper; +import com.cool.store.request.*; + +import com.cool.store.response.ThreeSignResponse; +import com.cool.store.service.*; +import com.cool.store.utils.CoolDateUtils; +import com.cool.store.utils.poi.StringUtils; +import com.cool.store.vo.AssessmentTemplateVO; +import com.cool.store.vo.Fitment.DecorationStageVO; +import com.cool.store.vo.Fitment.DesignInfoVo; +import com.cool.store.vo.LinePayVO; +import com.cool.store.vo.PartnerUserInfoVO; + +import com.cool.store.vo.fitmentCheckVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.apache.commons.collections4.CollectionUtils; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Function; +import java.util.stream.Collectors; + + +/** + * @Auther: WangShuo + * @Date: 2024/04/28/下午4:46 + * @Version 1.0 + * @注释: + */ +@Service +public class DecorationServiceImpl implements DecorationService { + + private static final Logger log = LoggerFactory.getLogger(DecorationServiceImpl.class); + + private static final String payPic = "https://store-inspections-server.oss-cn-hangzhou.aliyuncs.com/coolstore/%E8%A3%85%E4%BF%AE%E6%AC%BE.png"; + @Resource + private AssessmentDataDAO assessmentDataDAO; + @Resource + private SysRoleService sysRoleService; + @Resource + private EnterpriseUserDAO enterpriseUserDAO; + @Resource + private RegionService regionService; + @Resource + private YlfService ylfService; + @Resource + private LineInfoMapper lineInfoMapper; + @Resource + private RegionQrcodeConfigDao regionQrcodeConfigDao; + @Resource + private ShopInfoDAO shopInfoDAO; + @Resource + private AcceptanceInfoDAO acceptanceInfoDAO; + @Resource + private PreparationService preparationService; + @Resource + private LinePayService linePayService; + @Resource + private ShopStageInfoDAO shopStageInfoDAO; + @Resource + private AssessmentDataService assessmentDataService; + @Resource + private UserAuthMappingService userAuthMappingService; + @Resource + private ShopInfoMapper shopInfoMapper; + @Resource + private CommonService commonService; + @Resource + private AssessmentTemplateService assessmentTemplateService; + + @Override + public DesignInfoVo DesignInfo(Long shopId) { + DecorationDTO decoration = getDecorationDTO(shopId); + if (decoration == null) { + log.error("拉取云立方接口获取数据为空"); + return null; + } + Long flag; + DesignInfoVo designInfoVo = new DesignInfoVo(); + //平面图和施工 + List designScheme = decoration.getDesignScheme(); + long count = designScheme.stream().filter(design -> DesignPhaseEnum.DESIGN_PHASE_ACCEPTANCE_PASS.getCode().equals(design.getStatus())).count(); + flag = count; + designInfoVo.setDesignScheme(designScheme); + List constructionSchedule = decoration.getConstructionSchedule(); + if (CollectionUtils.isNotEmpty(constructionSchedule)) { + Map constructionScheduleMap = constructionSchedule.stream().collect(Collectors.toMap(ConstructionScheduleDTO::getName, + Function.identity(), (a, b) -> b)); + if (CollectionUtils.isNotEmpty(constructionSchedule)) { + //量房 + ConstructionScheduleDTO measuringRoom = constructionScheduleMap.get(CommonConstants.MEASURING_THE_ROOM); + if (Objects.nonNull(measuringRoom)) { + designInfoVo.setMeasuringRoom(measuringRoom); + if (ConstructionPhaseEnum.construction_FINSH.getCode().equals(measuringRoom.getState())) { + flag++; + } + } + } + } + //获取最新预算 + BudgetDTO proposedBookBudget = getBudgetDTOS(decoration); + if (Objects.nonNull(proposedBookBudget)) { + designInfoVo.setProposedBookBudget(proposedBookBudget); + flag++; + } + if (flag == CommonConstants.FOUR) { + //如果设计阶段进行中 + ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_9); + if (ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_90.getShopSubStageStatus().equals(shopSubStageInfo.getShopSubStageStatus())) { + //更新设计阶段状态完成//初始化装修款阶段 + shopStageInfoDAO.batchUpdateShopStageStatus(shopId, Arrays.asList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_91, + ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_100)); + LineInfoDO lineInfo = lineInfoMapper.getByLineId(shopSubStageInfo.getLineId()); + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.DECORATION_MODEL_PAY, null); + } + } + return designInfoVo; + } + + @Override + public DecorationStageVO getDecorationGoldStage(Long shopId) { + ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_10); + if (Objects.isNull(shopSubStageInfo)) { + log.error("getDecorationModeStage , shopSubStageInfo is null"); + return null; + } + DecorationStageVO decorationStageVO = new DecorationStageVO(); + decorationStageVO.setShopSubStageStatus(shopSubStageInfo.getShopSubStageStatus()); + decorationStageVO.setPlanEndTDate(shopSubStageInfo.getPlanCompleteTime()); + decorationStageVO.setActualEndDate(shopSubStageInfo.getActualCompleteTime()); + LinePayVO linePayInfo = linePayService. + getLinePayInfo(shopSubStageInfo.getLineId(), PayBusinessTypeEnum.DECORATION_MODEL.getCode(), shopId); + if (Objects.nonNull(linePayInfo)) { + decorationStageVO.setCreateDate(linePayInfo.getCreateTime()); + } + return decorationStageVO; + } + + + @Override + public DecorationModelDTO decorationModel(Long shopId) { + DecorationDTO decoration = getDecorationDTO(shopId); + if (decoration == null) { + log.error("拉取云立方接口获取数据为空"); + return null; + } + //预算 + BudgetDTO proposedBookBudget = getBudgetDTOS(decoration); + if (proposedBookBudget == null) {return null;} + BigDecimal vzHj = proposedBookBudget.getVzHj(); + //支付二维码url + DecorationModelDTO decorationModelDTO = new DecorationModelDTO(); + decorationModelDTO.setPayUrl(payPic); + decorationModelDTO.setTotalAmount(vzHj); + return decorationModelDTO; + } + + private static @Nullable BudgetDTO getBudgetDTOS(DecorationDTO decoration) { + List proposedBookBudget = decoration.getProposedBookBudget(); + if (CollectionUtils.isEmpty(proposedBookBudget)) { + log.error("云立方获取预算 is null"); + return null; + } + Collections.sort(decoration.getProposedBookBudget(), (x1, x2) -> x2.getId().compareTo(x1.getId())); + BudgetDTO budgetDTO = proposedBookBudget.get(CommonConstants.ZERO); + return budgetDTO; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Boolean submitDecorationModel(LinePaySubmitRequest request, PartnerUserInfoVO partnerUserInfoVO) { + DecorationDTO decoration = getDecorationDTO(request.getShopId()); + if (decoration == null) { + log.error("拉取云立方接口获取数据为空"); + return null; + } + if (CollectionUtils.isNotEmpty(decoration.getPayment())) { + request.setPayStatus(WorkflowSubStageStatusEnum.PAY_DEPOSIT_50.getCode()); + //更新阶段状态 + shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_102); + } else { + request.setPayStatus(WorkflowSubStageStatusEnum.PAY_DEPOSIT_45.getCode()); + shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_101); + } + request.setPayBusinessType(PayBusinessTypeEnum.DECORATION_MODEL.getCode()); + linePayService.submitPayInfo(request, partnerUserInfoVO); + return Boolean.TRUE; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public LinePayVO getDecorationModel(Long shopId, PartnerUserInfoVO partnerUserInfoVO) { + //获取支付信息 + LinePayVO linePayInfo = new LinePayVO(); + if (Objects.isNull(partnerUserInfoVO)) { + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + linePayInfo = linePayService.getLinePayInfo(shopInfo.getLineId(), PayBusinessTypeEnum.DECORATION_MODEL.getCode(), shopId); + } else { + linePayInfo = linePayService.getLinePayInfo(partnerUserInfoVO.getLineId(), PayBusinessTypeEnum.DECORATION_MODEL.getCode(), shopId); + } + if (Objects.isNull(linePayInfo)) { + log.error("LinePayInfo is null"); + return null; + } + //已缴费直接返回支付信息 + if (((byte) WorkflowSubStageStatusEnum.PAY_DEPOSIT_50.getCode().intValue() == linePayInfo.getPayStatus())) { + return linePayInfo; + } + //云立方 + DecorationDTO decoration = getDecorationDTO(shopId); + if (decoration == null) { + log.error("拉取云立方接口获取数据为空"); + return null; + } + BudgetDTO proposedBookBudget = getBudgetDTOS(decoration); + if (Objects.isNull(proposedBookBudget)) { + log.error("拉取云立方接口获取缴费信息为空"); + return null; + } + //已完成 + if (CollectionUtils.isNotEmpty(decoration.getPayment())) { + linePayInfo.setPayStatus((byte) WorkflowSubStageStatusEnum.PAY_DEPOSIT_50.getCode().intValue()); + LinePaySubmitRequest submitRequest = new LinePaySubmitRequest(); + submitRequest.setLineId(linePayInfo.getLineId()); + submitRequest.setShopId(shopId); + submitRequest.setPayBusinessType(PayBusinessTypeEnum.DECORATION_MODEL.getCode()); + submitRequest.setPayStatus(WorkflowSubStageStatusEnum.PAY_DEPOSIT_50.getCode()); + linePayService.submitPayInfo(submitRequest, partnerUserInfoVO); + //更新阶段状态 + shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_102); + } + return linePayInfo; + } + + @Override + public List getConstruction(Long shopId) { + DecorationDTO decoration = getDecorationDTO(shopId); + if (decoration == null) { + log.error("DecorationModel storeNum is null"); + return null; + } + List constructionSchedule = decoration.getConstructionSchedule(); + List collect = new ArrayList<>(); + List name = new ArrayList<>(); + name.add(CommonConstants.APPROACH); + name.add(CommonConstants.ONE_DAY); + name.add(CommonConstants.TWO_DAY); + name.add(CommonConstants.THREE_DAY); + name.add(CommonConstants.FOUR_DAY); + name.add(CommonConstants.FIVE_DAY); + name.add(CommonConstants.SIX_DAY); + name.add(CommonConstants.SEVEN_DAY); + name.add(CommonConstants.EIGHT_DAY); + name.add(CommonConstants.WITHDRAWAL); + ConstructionScheduleDTO approach = new ConstructionScheduleDTO(); + AcceptanceInfoDO acceptanceInfoDO = acceptanceInfoDAO.selectByShopId(shopId); + + ConstructionScheduleDTO constructionSage = new ConstructionScheduleDTO(); + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + LineInfoDO lineInfo = lineInfoMapper.getByLineId(shopInfo.getLineId()); + for (ConstructionScheduleDTO constructionScheduleDTO : constructionSchedule) { + if (name.contains(constructionScheduleDTO.getName())) { + collect.add(constructionScheduleDTO); + if (constructionScheduleDTO.getName().equals(CommonConstants.APPROACH)) { + approach = constructionScheduleDTO; + } + //计划撤场时间 //如果撤场并且视觉验收状态为-100则更新待验收 + if (constructionScheduleDTO.getName().equals(CommonConstants.WITHDRAWAL)) { + ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_13); + if(shopSubStageInfo.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_00.getShopSubStageStatus()) + && constructionScheduleDTO.getState().equals(ConstructionPhaseEnum.construction_FINSH.getCode())){ + shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_130); + //发送给品牌设计经理 + EnterpriseUserDO enterpriseUser = userAuthMappingService.getUserByRoleEnumAndWantShopAreaId(UserRoleEnum.DESIGN_MANAGER, lineInfo.getWantShopAreaId()); + if (Objects.nonNull(enterpriseUser)){ + Map messageMap = new HashMap<>(); + messageMap.put("storeName",shopInfo.getShopName()); + messageMap.put("shopId",String.valueOf(shopId)); + messageMap.put("shopName",shopInfo.getShopName()); + messageMap.put("partnerUsername",lineInfo.getUsername()); + messageMap.put("partnerMobile",lineInfo.getMobile()); + commonService.sendMessage(Arrays.asList(enterpriseUser.getUserId()), MessageEnum.MESSAGE_28, messageMap); + } + } + ConstructionScheduleDTO withdrawal = constructionScheduleDTO; + if (Objects.nonNull(acceptanceInfoDO)) { + Date date = CoolDateUtils.parseDate(withdrawal.getPlanBeginDate(), CoolDateUtils.DATE_FORMAT_DAY); + acceptanceInfoDO.setPlanExitTime(date); + } + } + } + if (constructionScheduleDTO.getName().equals(CommonConstants.CONSTRUCTION_PHASE)) { + constructionSage = constructionScheduleDTO; + } + } + + //设置进场时间xfsg_acceptance_info + if (Objects.nonNull(acceptanceInfoDO) && StringUtils.isNotEmpty(approach.getActualBeginDate())) { + Date date = CoolDateUtils.parseDate(approach.getActualBeginDate(), CoolDateUtils.DATE_FORMAT_DAY); + acceptanceInfoDO.setActualEntryTime(date); + } + //施工完成时间,计划开始和完成时间 // + if (Objects.nonNull(acceptanceInfoDO) && StringUtils.isNotEmpty(constructionSage.getActualEndDate())) { + Date date = CoolDateUtils.parseDate(constructionSage.getActualEndDate(), CoolDateUtils.DATE_FORMAT_DAY); + acceptanceInfoDO.setConstructionCompletionTime(date); + } + if (Objects.nonNull(acceptanceInfoDO) && StringUtils.isNotEmpty(constructionSage.getPlanBeginDate())) { + Date date = CoolDateUtils.parseDate(constructionSage.getPlanBeginDate(), CoolDateUtils.DATE_FORMAT_DAY); + acceptanceInfoDO.setPlannedStartTime(date); + } + if (Objects.nonNull(acceptanceInfoDO) && StringUtils.isNotEmpty(constructionSage.getPlanEndDate())) { + Date date = CoolDateUtils.parseDate(constructionSage.getPlanEndDate(), CoolDateUtils.DATE_FORMAT_DAY); + acceptanceInfoDO.setPlannedCompletionTime(date); + } + acceptanceInfoDO.setUpdateTime(new Date()); + acceptanceInfoDAO.updateAcceptanceInfo(acceptanceInfoDO); + + + //如果完成更新施工阶段状态 + if (ConstructionPhaseEnum.construction_FINSH.getCode().equals(constructionSage.getState())) { + shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_112); + } else { + shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_111); + } + return collect; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public ConstructionScheduleDTO getConstructionInfo(Long shopId) { + DecorationDTO decoration = getDecorationDTO(shopId); + if (decoration == null) { + log.error("DecorationModel storeNum is null"); + return null; + } + List constructionSchedule = decoration.getConstructionSchedule(); + Map constructionScheduleMap = constructionSchedule.stream().collect(Collectors.toMap(ConstructionScheduleDTO::getName, + dto -> dto)); + ConstructionScheduleDTO constructionScheduleDTO = constructionScheduleMap.get(CommonConstants.CONSTRUCTION_PHASE); + //如果完成更新阶段状态 + if (ConstructionPhaseEnum.construction_FINSH.getCode().equals(constructionScheduleMap.get(CommonConstants.CONSTRUCTION_PHASE).getState())) { + shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_112); + ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_11); + shopSubStageInfo.setPlanCompleteTime(constructionScheduleDTO.getPlanEndDate()); + shopSubStageInfo.setActualCompleteTime(constructionScheduleDTO.getActualEndDate()); + shopStageInfoDAO.updateByShopId(shopSubStageInfo); + } else { + shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_111); + ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_11); + shopSubStageInfo.setPlanCompleteTime(constructionScheduleDTO.getPlanEndDate()); + shopSubStageInfo.setActualCompleteTime(constructionScheduleDTO.getActualEndDate()); + shopStageInfoDAO.updateByShopId(shopSubStageInfo); + } + return constructionScheduleDTO; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean submitThreeCheck(ThreeAcceptanceCheckRequest request) { + log.info("submitThreeCheck, request:{} ", JSONObject.toJSONString(request)); + List assessmentTemplateVOS = assessmentTemplateService.listByType(AssessmentTemplateType.TRIPARTITE_ACCEPTANCE.getCode()); + Long max = assessmentTemplateVOS.stream().mapToLong(AssessmentTemplateVO::getId).max().orElse(0L); + Long min = assessmentTemplateVOS.stream().mapToLong(AssessmentTemplateVO::getId).min().orElse(0L); + List assessmentDataDOList = assessmentDataDAO.selectListByShopId(request.getShopId(), min, max); + List assessmentDataDOS = new ArrayList<>(); + for (AssessmentDataDTO assessmentDataDTO : request.getAssessmentDataDTOS()) { + AssessmentDataDO assessmentDataDO = new AssessmentDataDO(); + assessmentDataDO.setId(assessmentDataDTO.getId()); + assessmentDataDO.setTemplateId(assessmentDataDTO.getTemplateId()); + assessmentDataDO.setQualified(assessmentDataDTO.getQualified()); + assessmentDataDO.setReason(assessmentDataDTO.getReason()); + assessmentDataDO.setComments(assessmentDataDTO.getComments()); + assessmentDataDO.setShopId(request.getShopId()); + assessmentDataDOS.add(assessmentDataDO); + } + if (CollectionUtils.isNotEmpty(assessmentDataDOList)) { + assessmentDataService.batchUpdate(assessmentDataDOS); + + } else { + assessmentDataService.batchInsertSelective(assessmentDataDOS); + } + shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_122); + return Boolean.TRUE; + } + + @Override + public ThreeAcceptanceCheckRequest getThreeChecks(Long shopId) { + List assessmentTemplateVOS = assessmentTemplateService.listByType(AssessmentTemplateType.TRIPARTITE_ACCEPTANCE.getCode()); + Long max = assessmentTemplateVOS.stream().mapToLong(AssessmentTemplateVO::getId).max().orElse(0L); + Long min = assessmentTemplateVOS.stream().mapToLong(AssessmentTemplateVO::getId).min().orElse(0L); + List assessmentDataDOS = assessmentDataDAO.selectListByShopId(shopId, min, max); + if (CollectionUtils.isEmpty(assessmentDataDOS)) { + log.error("该用户门店三方验收检查项为空"); + return null; + } + List assessmentDataDTOS = new ArrayList<>(); + for (AssessmentDataDO assessmentDataDO : assessmentDataDOS) { + AssessmentDataDTO assessmentDataDTO = new AssessmentDataDTO(); + BeanUtil.copyProperties(assessmentDataDO, assessmentDataDTO); + assessmentDataDTOS.add(assessmentDataDTO); + } + ThreeAcceptanceCheckRequest threeAcceptanceCheckRequest = new ThreeAcceptanceCheckRequest(); + threeAcceptanceCheckRequest.setShopId(shopId); + threeAcceptanceCheckRequest.setAssessmentDataDTOS(assessmentDataDTOS); + return threeAcceptanceCheckRequest; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean miniSubmitAcceptanceSign(ThreeAcceptanceRequest request) { + ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_10); + if (!ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_102.getShopSubStageStatus().equals(shopSubStageInfo.getShopSubStageStatus())) { + throw new ServiceException(ErrorCodeEnum.FITMENT_FAIL); + } + //工程部验收签名 + if (Objects.nonNull(request.getEngineeringAcceptance())) { + request.getEngineeringAcceptance().setAcceptanceTime(new Date()); + request.getEngineeringAcceptance().setStatus(CommonConstants.ONE); + String jsonString = JSONObject.toJSONString(request.getEngineeringAcceptance()); + AcceptanceInfoDO acceptanceInfoDO = new AcceptanceInfoDO(); + acceptanceInfoDO.setShopId(request.getShopId()); + acceptanceInfoDO.setEngineeringAcceptanceSignatures(jsonString); + acceptanceInfoDO.setUpdateTime(new Date()); + acceptanceInfoDAO.updateAcceptanceInfo(acceptanceInfoDO); + } + //加盟商 + if (Objects.nonNull(request.getPartnerAcceptance())) { + request.getPartnerAcceptance().setStatus(CommonConstants.ONE); + request.getPartnerAcceptance().setAcceptanceTime(new Date()); + String jsonString = JSONObject.toJSONString(request.getPartnerAcceptance()); + AcceptanceInfoDO acceptanceInfoDO = new AcceptanceInfoDO(); + acceptanceInfoDO.setShopId(request.getShopId()); + acceptanceInfoDO.setPartnerAcceptanceSignatures(jsonString); + acceptanceInfoDO.setUpdateTime(new Date()); + acceptanceInfoDAO.updateAcceptanceInfo(acceptanceInfoDO); + } + //更新阶段状态验收中 + shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_122); + return Boolean.TRUE; + } + + @Override + public PageInfo getFitmentAcceptanceList(AcceptanceListRequest request, LoginUserInfo user) { + List authRegionIds = userAuthMappingService.getAuthRegionIdAndSubRegionIdByUserId(user.getUserId()); + List regions = new ArrayList<>(); + for (String authRegionId : authRegionIds) { + regions.add(Long.parseLong(authRegionId)); + } + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + if (regions.isEmpty()) { + log.info("该用户下权限没有管理区域"); + return new PageInfo<>(); + } + List fitmentCheckVOList = new ArrayList<>(); + //shopId,lineid,regionid,shopname,storenum, + + List shopInfoDOS = shopInfoMapper.selectShopListByRegionId(regions, ShopSubStageEnum.SHOP_STAGE_12.getShopSubStage(),request.getSubStageStatus(),null); + PageInfo pageInfo = new PageInfo<>(shopInfoDOS); + if (shopInfoDOS.isEmpty()) { + log.info("该工程部监理下门店为空"); + return pageInfo; + } + Map ShopIdmap = shopInfoDOS.stream().collect(Collectors.toMap(ShopInfoDO::getId, dto1 -> dto1)); + //招商经理,选址人员(拓展经理)id + List lineIds = shopInfoDOS.stream().filter(o -> o.getLineId() != null) + .map(ShopInfoDO::getLineId).distinct().collect(Collectors.toList()); + List lineInfos = lineInfoMapper.getByLineIds(lineIds); + Map lineInfoDOMap = lineInfos.stream().collect(Collectors.toMap(LineInfoDO::getId, dto -> dto)); + //招商name + List userIds = new ArrayList<>(); + userIds.addAll(lineInfos.stream().filter(o -> o.getInvestmentManager() != null) + .map(LineInfoDO::getInvestmentManager).distinct().collect(Collectors.toList())); + //选址人员(拓展经理)name + userIds.addAll(lineInfos.stream().filter(o -> o.getDevelopmentManager() != null) + .map(LineInfoDO::getDevelopmentManager).distinct().collect(Collectors.toList())); + Map userNameMap = enterpriseUserDAO.getUserNameMap(userIds); + //所属战区 + List regionIds = shopInfoDOS.stream().filter(o -> o.getRegionId() != null). + map(ShopInfoDO::getRegionId).distinct().collect(Collectors.toList()); + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIds); + //战区经理name + Map fightManger = new HashMap<>(); + for (Long regionId : regionIds) { + String fightMangerUserId = sysRoleService.getUserIdByRegionIdWithRolePriority(regionId, Arrays.asList(UserRoleEnum.THEATER_MANAGER)); + String userName = enterpriseUserDAO.getUserName(fightMangerUserId); + fightManger.put(regionId, userName); + } + //施工计划完成时间 //施工实际完成实际//计划验收时间//验收实际时间 + List shopIds = new ArrayList<>(ShopIdmap.keySet()); + List acceptanceInfoDOS = acceptanceInfoDAO.selectByShopIds(shopIds); + Map acceptanceInfoDOSMap = acceptanceInfoDOS.stream() + .collect(Collectors.toMap(AcceptanceInfoDO::getShopId, dto1 -> dto1)); + //验收状态 + List subStageList = shopStageInfoDAO.getSubStageList(shopIds, ShopSubStageEnum.SHOP_STAGE_12.getShopSubStage()); + Map ShopStageInfoDOMap = subStageList.stream() + .collect(Collectors.toMap(ShopStageInfoDO::getShopId, dto1 -> dto1)); + for (ShopInfoDO shopInfoDO : shopInfoDOS) { + Long shopId = shopInfoDO.getId(); + Long lineId = shopInfoDO.getLineId(); + Long regionId = shopInfoDO.getRegionId(); + fitmentCheckVO fitmentCheckVO = new fitmentCheckVO(); + fitmentCheckVO.setShopId(shopId); + fitmentCheckVO.setLineId(lineId); + fitmentCheckVO.setShopName(shopInfoDO.getShopName()); + fitmentCheckVO.setStoreNum(shopInfoDO.getStoreNum()); + fitmentCheckVO.setRegionId(regionId); + fitmentCheckVO.setRegion(regionNameMap.get(regionId)); + fitmentCheckVO.setFightManager(fightManger.get(regionId)); + if (lineId != null) { + LineInfoDO a = lineInfoDOMap.getOrDefault(lineId, new LineInfoDO()); + fitmentCheckVO.setInvestmentManagerId(a.getInvestmentManager()); + fitmentCheckVO.setInvestmentManager(a.getInvestmentManager()); + fitmentCheckVO.setSitterId(a.getDevelopmentManager()); + fitmentCheckVO.setSitterName(a.getDevelopmentManager()); + fitmentCheckVO.setPartnerName(a.getUsername()); + } + AcceptanceInfoDO acceptanceInfoDO = acceptanceInfoDOSMap.get(shopId); + if (shopId != null) { + if (Objects.nonNull(acceptanceInfoDO)) { + fitmentCheckVO.setPlanEndTime(acceptanceInfoDO.getDecorationPlannedCompletionTime()); + fitmentCheckVO.setActualEndTime(acceptanceInfoDO.getConstructionCompletionTime()); + fitmentCheckVO.setPlanAcceptanceTime(acceptanceInfoDO.getPlanAcceptanceTime()); + fitmentCheckVO.setAcceptanceTime(acceptanceInfoDO.getActualAcceptanceTime()); + } + } + if (Objects.nonNull(ShopStageInfoDOMap.get(shopId))) { + fitmentCheckVO.setShopSubStageStatus(ShopStageInfoDOMap.getOrDefault(shopId,new ShopStageInfoDO()).getShopSubStageStatus()); + } + fitmentCheckVOList.add(fitmentCheckVO); + } + pageInfo.setList(fitmentCheckVOList); + return pageInfo; + } + + @Override + public fitmentCheckVO getAcceptanceDetail(Long shopId, LoginUserInfo user) { + fitmentCheckVO fitmentCheckVO = new fitmentCheckVO(); + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + if (Objects.isNull(shopInfo)) { + log.error("店铺信息不存在 shopId:{}", shopId); + return null; + } + //招商经理,选址人员(拓展经理)id + Long lineId = shopInfo.getLineId(); + LineInfoDO lineInfo = lineInfoMapper.getByLineId(lineId); + if (Objects.isNull(lineInfo)) { + log.error("线索信息不存在 shopId:{}", shopId); + return null; + } + //招商name + List userIds = new ArrayList<>(); + userIds.add(lineInfo.getInvestmentManager()); + //选址人员(拓展经理)name + userIds.add(lineInfo.getDevelopmentManager()); + Map userNameMap = enterpriseUserDAO.getUserNameMap(userIds); + //所属战区 + Long regionId = shopInfo.getRegionId(); + String regionName = regionService.getBelongWarRegionName(regionId); + //战区经理name + String fightMangerUserId = sysRoleService.getUserIdByRegionIdWithRolePriority(regionId, Arrays.asList(UserRoleEnum.THEATER_MANAGER)); + String fightName = enterpriseUserDAO.getUserName(fightMangerUserId); + //施工计划完成时间 //施工实际完成实际//计划验收时间//验收实际时间 + AcceptanceInfoDO acceptanceInfoDOS = acceptanceInfoDAO.selectByShopId(shopId); + //验收状态 + ShopStageInfoDO subStage = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_12); + fitmentCheckVO.setShopId(shopId); + fitmentCheckVO.setLineId(lineId); + fitmentCheckVO.setShopName(shopInfo.getShopName()); + fitmentCheckVO.setStoreNum(shopInfo.getStoreNum()); + fitmentCheckVO.setPartnerName(lineInfo.getUsername()); + fitmentCheckVO.setRegionId(regionId); + fitmentCheckVO.setRegion(regionName); + fitmentCheckVO.setFightManager(fightName); + if (userNameMap != null) { + fitmentCheckVO.setInvestmentManager(userNameMap.get(lineInfo.getInvestmentManager())); + fitmentCheckVO.setSitterName(userNameMap.get(lineInfo.getDevelopmentManager())); + } + if (Objects.nonNull(acceptanceInfoDOS)) { + fitmentCheckVO.setPlanEndTime(acceptanceInfoDOS.getDecorationPlannedCompletionTime()); + fitmentCheckVO.setActualEndTime(acceptanceInfoDOS.getConstructionCompletionTime()); + fitmentCheckVO.setPlanAcceptanceTime(acceptanceInfoDOS.getPlanAcceptanceTime()); + fitmentCheckVO.setAcceptanceTime(acceptanceInfoDOS.getActualAcceptanceTime()); + } + fitmentCheckVO.setShopSubStageStatus(subStage.getShopSubStageStatus()); + return fitmentCheckVO; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Boolean pcSubmitAcceptanceSign(ThreeAcceptanceRequest request) { + log.info("submitAcceptance, request:{} ", JSONObject.toJSONString(request)); + //营运部 验收签名 + AcceptanceInfoDO acceptanceInfoDO1 = acceptanceInfoDAO.selectByShopId(request.getShopId()); + if (StringUtils.isNotEmpty(acceptanceInfoDO1.getEngineeringAcceptanceSignatures()) + && StringUtils.isNotEmpty(acceptanceInfoDO1.getPartnerAcceptanceSignatures()) + && Objects.nonNull(request.getOperationsAcceptance())) { + ThreeAcceptanceDTO engineering = JSONObject.parseObject(acceptanceInfoDO1.getEngineeringAcceptanceSignatures(), ThreeAcceptanceDTO.class); + ThreeAcceptanceDTO partner = JSONObject.parseObject(acceptanceInfoDO1.getPartnerAcceptanceSignatures(), ThreeAcceptanceDTO.class); + request.getOperationsAcceptance().setStatus(CommonConstants.ONE); + request.getOperationsAcceptance().setAcceptanceTime(new Date()); + String jsonString = JSONObject.toJSONString(request.getOperationsAcceptance()); + AcceptanceInfoDO acceptanceInfoDO = new AcceptanceInfoDO(); + acceptanceInfoDO.setShopId(request.getShopId()); + acceptanceInfoDO.setOperationsAcceptanceSignatures(jsonString); + acceptanceInfoDO.setUpdateTime(new Date()); + acceptanceInfoDO.setActualAcceptanceTime(new Date()); + acceptanceInfoDAO.updateAcceptanceInfo(acceptanceInfoDO); + if (CommonConstants.ONE == request.getOperationsAcceptance().getResult() + && CommonConstants.ONE == partner.getResult() + && CommonConstants.ONE == engineering.getResult()) { + //更新阶段状态验收完毕 + shopStageInfoDAO.updateShopStageAndAuditInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_123, null); + preparationService.whetherToOpenForAcceptance(request.getShopId()); + } else { + //未通过至为带预约 + shopStageInfoDAO.updateShopStageAndAuditInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_120, null); + } + } + return Boolean.TRUE; + } + + @Override + public ThreeSignResponse getThreeAcceptanceSign(Long shopId) { + ThreeSignResponse threeSignResponse = new ThreeSignResponse(); + AcceptanceInfoDO acceptanceInfoDO = acceptanceInfoDAO.selectByShopId(shopId); + if (Objects.isNull(acceptanceInfoDO)) { + return threeSignResponse; + } + //工程部 + if (StringUtils.isNotEmpty(acceptanceInfoDO.getEngineeringAcceptanceSignatures())) { + ThreeAcceptanceDTO engineering = JSONObject.parseObject(acceptanceInfoDO.getEngineeringAcceptanceSignatures(), ThreeAcceptanceDTO.class); + threeSignResponse.setEngineeringAcceptance(engineering); + } + //营运部 + if (StringUtils.isNotEmpty(acceptanceInfoDO.getOperationsAcceptanceSignatures())) { + ThreeAcceptanceDTO operations = JSONObject.parseObject(acceptanceInfoDO.getOperationsAcceptanceSignatures(), ThreeAcceptanceDTO.class); + threeSignResponse.setOperationsAcceptance(operations); + } + //加盟商 + if (StringUtils.isNotEmpty(acceptanceInfoDO.getPartnerAcceptanceSignatures())) { + ThreeAcceptanceDTO partner = JSONObject.parseObject(acceptanceInfoDO.getPartnerAcceptanceSignatures(), ThreeAcceptanceDTO.class); + threeSignResponse.setPartnerAcceptance(partner); + } + return threeSignResponse; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean bookingAcceptance(BookingAcceptanceRequest request, LoginUserInfo user) { + shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_121); + ShopStageInfoDO newShopStageInfoDO = new ShopStageInfoDO(); + SimpleDateFormat sdf = new SimpleDateFormat(CoolDateUtils.DATE_FORMAT_SEC); + String date = sdf.format(request.getBookingAcceptanceTime()); + newShopStageInfoDO.setPlanCompleteTime(date); + newShopStageInfoDO.setShopSubStage(ShopSubStageEnum.SHOP_STAGE_12.getShopSubStage()); + newShopStageInfoDO.setShopId(request.getShopId()); + shopStageInfoDAO.updateByShopId(newShopStageInfoDO); + AcceptanceInfoDO acceptanceInfoDO = acceptanceInfoDAO.selectByShopId(request.getShopId()); + acceptanceInfoDO.setBookingUser(user.getUserId()); + acceptanceInfoDO.setUpdateTime(new Date()); + acceptanceInfoDO.setPlanAcceptanceTime(request.getBookingAcceptanceTime()); + acceptanceInfoDAO.updateAcceptanceInfo(acceptanceInfoDO); + return Boolean.TRUE; + } + + + private DecorationDTO getDecorationDTO(Long shopId) { + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + if (Objects.isNull(shopInfo)) { + throw new ServiceException(ErrorCodeEnum.SHOP_ID_NOT_EXIST); + } + String storeNum = shopInfo.getStoreNum(); + if (StringUtils.isNotEmpty(storeNum)) { + ProjectDTO projectList = ylfService.getProjectList(storeNum); + Long projectId = projectList.getProjectId(); + DecorationDTO decoration = ylfService.getDecoration(projectId); + return decoration; + } + return null; + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DefaultLineFlowService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DefaultLineFlowService.java new file mode 100644 index 000000000..41036fe6d --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DefaultLineFlowService.java @@ -0,0 +1,23 @@ +package com.cool.store.service.impl; + +import com.cool.store.entity.LineInfoDO; +import org.springframework.stereotype.Service; + +/** + * @author zhangchenbiao + * @FileName: DefaultLineFlowService + * @Description: + * @date 2024-04-17 14:12 + */ +@Service +public class DefaultLineFlowService extends LineFlowService{ + @Override + protected Boolean auditPass(Long auditId, LineInfoDO lineInfo, String userId) { + return null; + } + + @Override + protected Boolean auditReject(Long auditId, LineInfoDO lineInfo, String userId) { + return null; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DeskServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DeskServiceImpl.java new file mode 100644 index 000000000..17b191d0e --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/DeskServiceImpl.java @@ -0,0 +1,416 @@ +package com.cool.store.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.*; +import com.cool.store.dto.InvestmentCountDTO; +import com.cool.store.dto.PendingCountDTO; +import com.cool.store.dto.openPreparation.PlanLineDTO; +import com.cool.store.entity.*; +import com.cool.store.enums.InterviewTypeEnum; +import com.cool.store.enums.WorkflowSubStageStatusEnum; +import com.cool.store.enums.point.PayBusinessTypeEnum; +import com.cool.store.enums.point.PayTypeEnum; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.mapper.IntentAgreementMapper; +import com.cool.store.mapper.TrainingExperienceMapper; +import com.cool.store.service.DeskService; +import com.cool.store.service.RegionService; +import com.cool.store.utils.StringUtil; +import com.cool.store.utils.poi.DateUtils; +import com.cool.store.utils.poi.constant.Constants; +import com.cool.store.vo.BaseInfoVO; +import com.cool.store.vo.LabelBaseInfoVO; +import com.cool.store.vo.desk.*; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2024/3/26 15:15 + * @Version 1.0 + */ +@Service +public class DeskServiceImpl implements DeskService { + + @Resource + LineInfoDAO lineInfoDAO; + @Resource + HyPartnerLabelDAO hyPartnerLabelDAO; + @Resource + HyOpenAreaInfoDAO hyOpenAreaInfoDAO; + @Resource + LineInterviewDAO lineInterviewDAO; + @Resource + LinePayDAO linePayDAO; + @Resource + IntentAgreementMapper intentAgreementMapper; + @Resource + TrainingExperienceMapper trainingExperienceMapper; + @Resource + ShopStageInfoDAO shopStageInfoDAO; + @Resource + ShopInfoDAO shopInfoDAO; + @Resource + EnterpriseUserDAO enterpriseUserDAO; + @Resource + RegionService regionService; + + @Override + public PageInfo intendPendingList(Integer pageNum, Integer pageSize,String userId) { + PageHelper.startPage(pageNum, pageSize); + List lineInfoDOS = lineInfoDAO.listByInvestmentManager(userId, Arrays.asList(WorkflowSubStageStatusEnum.INTENT_5.getCode())); + PageInfo page = new PageInfo(lineInfoDOS); + Map userPortraitMap = this.getUserPortraitMap(lineInfoDOS); + List wantShopAreaIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getWantShopAreaId() != null).map(LineInfoDO::getWantShopAreaId).collect(Collectors.toList()); + Map wantShopAreaMap = hyOpenAreaInfoDAO.selectNameMapByIds(wantShopAreaIds); + List list = new ArrayList<>(); + lineInfoDOS.forEach(x->{ + BaseInfoVO baseInfoVO = convertToBaseInfoVO(x, userPortraitMap, wantShopAreaMap); + IntendPendingVO intendPendingVO = new IntendPendingVO(baseInfoVO); + intendPendingVO.setJoinTime(new Date()); + list.add(intendPendingVO); + }); + + page.setList(list); + return page ; + } + + @Override + public PageInfo interviewPendingList(Integer pageNum, Integer pageSize, String userId) { + PageHelper.startPage(pageNum, pageSize); + List lineInfoDOS = lineInfoDAO.listByInvestmentManager(userId,Arrays.asList(WorkflowSubStageStatusEnum.INVITING_INTERVIEWS_20.getCode())); + PageInfo page = new PageInfo(lineInfoDOS); + Map userPortraitMap = this.getUserPortraitMap(lineInfoDOS); + List wantShopAreaIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getWantShopAreaId() != null).map(LineInfoDO::getWantShopAreaId).collect(Collectors.toList()); + Map wantShopAreaMap = hyOpenAreaInfoDAO.selectNameMapByIds(wantShopAreaIds); + List lineIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getId() != null).map(LineInfoDO::getId).collect(Collectors.toList()); + List interviewByLindIds = lineInterviewDAO.getInterviewByLindIds(lineIds, InterviewTypeEnum.MEET); + Map interviewDOMap = interviewByLindIds.stream().collect(Collectors.toMap(LineInterviewDO::getLineId, x -> x, (k1, k2) -> k1)); + + List list = new ArrayList<>(); + lineInfoDOS.forEach(x->{ + BaseInfoVO baseInfoVO = convertToBaseInfoVO(x, userPortraitMap, wantShopAreaMap); + InterviewPendingVO interviewPendingVO = new InterviewPendingVO(baseInfoVO); + LineInterviewDO lineInterviewDO = interviewDOMap.get(x.getId()); + if (lineInterviewDO != null){ + interviewPendingVO.setStartTime(DateUtils.parseDateToStr(DateUtils.SPECIAL_DATE_START,lineInterviewDO.getStartTime())); + interviewPendingVO.setEndTime(DateUtils.parseDateToStr(DateUtils.SPECIAL_DATE_END,lineInterviewDO.getEndTime())); + } + list.add(interviewPendingVO); + }); + page.setList(list); + return page; + } + + @Override + public PageInfo firstInterviewPendingList(Integer pageNum, Integer pageSize, LoginUserInfo userInfo) { + PageHelper.startPage(pageNum, pageSize); + List lineInfoDOS = lineInfoDAO.listByInterview(userInfo.getUserId(),InterviewTypeEnum.INTERVIEW.getCode(), + Arrays.asList(WorkflowSubStageStatusEnum.FIRST_INTERVIEWS_30.getCode(),WorkflowSubStageStatusEnum.FIRST_INTERVIEWS_35.getCode()),WorkflowSubStageStatusEnum.FIRST_INTERVIEWS_40.getCode(),null); + PageInfo page = new PageInfo(lineInfoDOS); + Map userPortraitMap = this.getUserPortraitMap(lineInfoDOS); + List wantShopAreaIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getWantShopAreaId() != null).map(LineInfoDO::getWantShopAreaId).collect(Collectors.toList()); + Map wantShopAreaMap = hyOpenAreaInfoDAO.selectNameMapByIds(wantShopAreaIds); + List lineIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getId() != null).map(LineInfoDO::getId).collect(Collectors.toList()); + List interviewByLindIds = lineInterviewDAO.getInterviewByLindIds(lineIds, InterviewTypeEnum.INTERVIEW); + Map interviewDOMap = interviewByLindIds.stream().collect(Collectors.toMap(LineInterviewDO::getLineId, x -> x, (k1, k2) -> k1)); + List userIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getFirstInterviewer() != null).map(LineInfoDO::getFirstInterviewer).collect(Collectors.toList()); + Map userInfoMap = enterpriseUserDAO.getUserInfoMap(userIds); + + List list = new ArrayList<>(); + lineInfoDOS.forEach(x->{ + BaseInfoVO baseInfoVO = convertToBaseInfoVO(x, userPortraitMap, wantShopAreaMap); + InterviewPendingVO interviewPendingVO = new InterviewPendingVO(baseInfoVO); + LineInterviewDO lineInterviewDO = interviewDOMap.get(x.getId()); + if (lineInterviewDO != null){ + interviewPendingVO.setStartTime(DateUtils.parseDateToStr(DateUtils.SPECIAL_DATE_START,lineInterviewDO.getStartTime())); + interviewPendingVO.setEndTime(DateUtils.parseDateToStr(DateUtils.SPECIAL_DATE_END,lineInterviewDO.getEndTime())); + interviewPendingVO.setInterviewer(userInfoMap.getOrDefault(x.getFirstInterviewer(),new EnterpriseUserDO()).getName()); + interviewPendingVO.setInterviewId(lineInterviewDO.getId()); + } + list.add(interviewPendingVO); + }); + page.setList(list); + return page; + } + + + @Override + public PageInfo secondInterviewPendingList(Integer pageNum, Integer pageSize, LoginUserInfo userInfo) { + PageHelper.startPage(pageNum, pageSize); + List lineInfoDOS = lineInfoDAO.listByInterview(userInfo.getUserId(),InterviewTypeEnum.SECOND_INTERVIEW.getCode(), + Arrays.asList(WorkflowSubStageStatusEnum.SECOND_INTERVIEWS_105.getCode(),WorkflowSubStageStatusEnum.SECOND_INTERVIEWS_110.getCode()), WorkflowSubStageStatusEnum.SECOND_INTERVIEWS_115.getCode(),null); + PageInfo page = new PageInfo(lineInfoDOS); + Map userPortraitMap = this.getUserPortraitMap(lineInfoDOS); + List wantShopAreaIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getWantShopAreaId() != null).map(LineInfoDO::getWantShopAreaId).collect(Collectors.toList()); + Map wantShopAreaMap = hyOpenAreaInfoDAO.selectNameMapByIds(wantShopAreaIds); + List lineIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getId() != null).map(LineInfoDO::getId).collect(Collectors.toList()); + List interviewByLindIds = lineInterviewDAO.getInterviewByLindIds(lineIds, InterviewTypeEnum.SECOND_INTERVIEW); + Map interviewDOMap = interviewByLindIds.stream().collect(Collectors.toMap(LineInterviewDO::getLineId, x -> x, (k1, k2) -> k1)); + List userIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getSecondInterviewer() != null).map(LineInfoDO::getSecondInterviewer).collect(Collectors.toList()); + Map userInfoMap = enterpriseUserDAO.getUserInfoMap(userIds); + + + List list = new ArrayList<>(); + lineInfoDOS.forEach(x->{ + BaseInfoVO baseInfoVO = convertToBaseInfoVO(x, userPortraitMap, wantShopAreaMap); + InterviewPendingVO interviewPendingVO = new InterviewPendingVO(baseInfoVO); + LineInterviewDO lineInterviewDO = interviewDOMap.get(x.getId()); + if (lineInterviewDO != null){ + interviewPendingVO.setStartTime(DateUtils.parseDateToStr(DateUtils.SPECIAL_DATE_START,lineInterviewDO.getStartTime())); + interviewPendingVO.setEndTime(DateUtils.parseDateToStr(DateUtils.SPECIAL_DATE_END,lineInterviewDO.getEndTime())); + interviewPendingVO.setInterviewer(userInfoMap.getOrDefault(x.getSecondInterviewer(),new EnterpriseUserDO()).getName()); + interviewPendingVO.setInterviewId(lineInterviewDO.getId()); + } + list.add(interviewPendingVO); + }); + page.setList(list); + return page; + } + + @Override + public PageInfo payStagePendingList(Integer pageNum, Integer pageSize, LoginUserInfo user) { + PageHelper.startPage(pageNum, pageSize); + List lineInfoDOS = lineInfoDAO.listByInvestmentManager(user.getUserId(), Arrays.asList(WorkflowSubStageStatusEnum.PAY_DEPOSIT_50.getCode())); + PageInfo page = new PageInfo(lineInfoDOS); + Map userPortraitMap = this.getUserPortraitMap(lineInfoDOS); + List wantShopAreaIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getWantShopAreaId() != null).map(LineInfoDO::getWantShopAreaId).collect(Collectors.toList()); + Map wantShopAreaMap = hyOpenAreaInfoDAO.selectNameMapByIds(wantShopAreaIds); + List lineIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getId() != null).map(LineInfoDO::getId).collect(Collectors.toList()); + Map payMap = linePayDAO.getLinePayByLineIds(lineIds,PayBusinessTypeEnum.INTENT_MONEY.getCode()); + List list = new ArrayList<>(); + lineInfoDOS.forEach(x->{ + BaseInfoVO baseInfoVO = convertToBaseInfoVO(x, userPortraitMap, wantShopAreaMap); + PayStagePendingVO payStagePendingVO = new PayStagePendingVO(baseInfoVO); + LinePayDO linePayDO = payMap.get(x.getId()); + if (linePayDO != null && linePayDO.getPayTime() != null){ + payStagePendingVO.setPayTime(DateUtils.parseDateToStr(DateUtils.SPECIAL_DATE_START,linePayDO.getPayTime())); + } + + list.add(payStagePendingVO); + }); + page.setList(list); + return page ; + } + + @Override + public PageInfo signingPendingList(Integer pageNum, Integer pageSize, LoginUserInfo user) { + PageHelper.startPage(pageNum, pageSize); + List lineInfoDOS = lineInfoDAO.listByInvestmentManager(user.getUserId(), + Arrays.asList(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_63.getCode(), + WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_70.getCode(), + WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_80.getCode())); + PageInfo page = new PageInfo(lineInfoDOS); + Map userPortraitMap = this.getUserPortraitMap(lineInfoDOS); + List wantShopAreaIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getWantShopAreaId() != null).map(LineInfoDO::getWantShopAreaId).collect(Collectors.toList()); + Map wantShopAreaMap = hyOpenAreaInfoDAO.selectNameMapByIds(wantShopAreaIds); + List lineIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getId() != null).map(LineInfoDO::getId).collect(Collectors.toList()); + List signingBaseInfoDOS = intentAgreementMapper.selectByLineIds(lineIds); + Map dateMap = signingBaseInfoDOS.stream().collect(Collectors.toMap(SigningBaseInfoDO::getLineId, SigningBaseInfoDO::getCreateTime)); + List list = new ArrayList<>(); + lineInfoDOS.forEach(x->{ + BaseInfoVO baseInfoVO = convertToBaseInfoVO(x, userPortraitMap, wantShopAreaMap); + SigningPendingVO signingPendingVO = new SigningPendingVO(baseInfoVO); + Date date = dateMap.get(x.getId()); + if (date != null){ + signingPendingVO.setSubmitTime(DateUtils.parseDateToStr(DateUtils.SPECIAL_DATE_START,date)); + } + list.add(signingPendingVO); + }); + page.setList(list); + return page ; + } + + @Override + public PageInfo storeExperiencePendingList(Integer pageNum, Integer pageSize, LoginUserInfo user) { + PageHelper.startPage(pageNum, pageSize); + List lineInfoDOS = lineInfoDAO.listByInvestmentManager(user.getUserId(), + Arrays.asList(WorkflowSubStageStatusEnum.STORE_EXPERIENCE_85.getCode(), + WorkflowSubStageStatusEnum.STORE_EXPERIENCE_95.getCode())); + PageInfo page = new PageInfo(lineInfoDOS); + Map userPortraitMap = this.getUserPortraitMap(lineInfoDOS); + List wantShopAreaIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getWantShopAreaId() != null).map(LineInfoDO::getWantShopAreaId).collect(Collectors.toList()); + Map wantShopAreaMap = hyOpenAreaInfoDAO.selectNameMapByIds(wantShopAreaIds); + List lineIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getId() != null).map(LineInfoDO::getId).collect(Collectors.toList()); + Map infoDOMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(lineIds)){ + List leaseBaseInfoDOS = trainingExperienceMapper.selectByLineIds(lineIds); + infoDOMap = leaseBaseInfoDOS.stream().collect(Collectors.toMap(LeaseBaseInfoDO::getLineId, x -> x)); + } + List list = new ArrayList<>(); + Map finalInfoDOMap = infoDOMap; + lineInfoDOS.forEach(x->{ + BaseInfoVO baseInfoVO = convertToBaseInfoVO(x, userPortraitMap, wantShopAreaMap); + StoreExperiencePendingVO storeExperiencePendingVO = new StoreExperiencePendingVO(baseInfoVO); + LeaseBaseInfoDO date = finalInfoDOMap.get(x.getId()); + if (date != null && date.getExperienceStartTime() != null && date.getExperienceEndTime() != null){ + storeExperiencePendingVO.setExperienceStartTime(DateUtils.parseDateToStr(DateUtils.SPECIAL_DATE_START_1,date.getExperienceStartTime())); + storeExperiencePendingVO.setExperienceEndTime(DateUtils.parseDateToStr(DateUtils.SPECIAL_DATE_START_2,date.getExperienceEndTime())); + } + list.add(storeExperiencePendingVO); + }); + page.setList(list); + return page ; + } + + + /** + * convertToBaseInfoVO + * @param lineInfoDO + * @param userPortraitMap + * @param wantShopAreaMap + * @return + */ + @Override + public BaseInfoVO convertToBaseInfoVO(LineInfoDO lineInfoDO, Map userPortraitMap, Map wantShopAreaMap){ + BaseInfoVO baseInfoVO = new BaseInfoVO(); + BeanUtil.copyProperties(lineInfoDO, baseInfoVO); + baseInfoVO.setLineId(lineInfoDO.getId()); + String userPortrait = lineInfoDO.getUserPortrait(); + List labelBaseInfoList = new ArrayList<>(); + if (StringUtil.isNotEmpty(userPortrait)){ + Arrays.asList(userPortrait.split(",")).subList(1, userPortrait.split(",").length).forEach(x->{ + LabelBaseInfoVO labelBaseInfoVO = new LabelBaseInfoVO(); + HyPartnerLabelDO hyPartnerLabelDO = userPortraitMap.get(Long.valueOf(x)); + if (hyPartnerLabelDO != null){ + labelBaseInfoVO.setLabelId(userPortraitMap.getOrDefault(Long.valueOf(x), new HyPartnerLabelDO()).getId()); + labelBaseInfoVO.setLabelName(userPortraitMap.getOrDefault(Long.valueOf(x),new HyPartnerLabelDO()).getLabelName()); + labelBaseInfoList.add(labelBaseInfoVO); + } + }); + } + baseInfoVO.setUserPortraitList(labelBaseInfoList); + baseInfoVO.setWantShopAreaName(wantShopAreaMap.get(lineInfoDO.getWantShopAreaId())); + return baseInfoVO; + } + + + /** + * 用户画像MAP + * @param lineInfoDOList + * @return + */ + @Override + public Map getUserPortraitMap(List lineInfoDOList){ + List libelIds = new ArrayList<>(); + lineInfoDOList.stream().forEach(x->{ + if (StringUtil.isNotEmpty(x.getUserPortrait())){ + List list = Arrays.asList(x.getUserPortrait().split(",")).subList(1, x.getUserPortrait().split(",").length); + libelIds.addAll(list.stream().map(Long::valueOf).collect(Collectors.toList())); + } + }); + List hyPartnerLabelDOS = hyPartnerLabelDAO.listByIds(libelIds); + if (CollectionUtils.isEmpty(hyPartnerLabelDOS)){ + return new HashMap<>(); + } + return hyPartnerLabelDOS.stream().collect(Collectors.toMap(HyPartnerLabelDO::getId, x -> x)); + } + + @Override + public PendingCountDTO getPendingCount(LoginUserInfo user) { + PendingCountDTO pendingCount = lineInfoDAO.pendingCount(user.getUserId()); + return pendingCount; + } + + @Override + public InvestmentCountDTO getInvestmentCount(LoginUserInfo user) { + return lineInfoDAO.investmentData(user.getUserId()); + } + + + @Override + public PageInfo systemBuildStorePendingList(Integer pageNum, Integer pageSize, LoginUserInfo user) { + return commonPendingVOPageInfo(pageNum, pageSize, user, ShopSubStageEnum.SHOP_STAGE_3, Arrays.asList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_30.getShopSubStageStatus()), Constants.ZERO_INTEGER); + } + + @Override + public PageInfo payFranchiseFeesPendingList(Integer pageNum, Integer pageSize, LoginUserInfo user) { + return commonPendingVOPageInfo(pageNum, pageSize, user, ShopSubStageEnum.SHOP_STAGE_7, + Arrays.asList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_70.getShopSubStageStatus(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_72.getShopSubStageStatus()), Constants.ZERO_INTEGER); + } + + @Override + public PageInfo signingOfFranchiseContractPendingList(Integer pageNum, Integer pageSize, LoginUserInfo user) { + return commonPendingVOPageInfo(pageNum, pageSize, user, ShopSubStageEnum.SHOP_STAGE_8, + Arrays.asList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_80.getShopSubStageStatus(),ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_85.getShopSubStageStatus()), Constants.ZERO_INTEGER); + } + + @Override + public PageInfo openingAndOperationPlanPendingList(Integer pageNum, Integer pageSize, LoginUserInfo user) { + return commonPendingVOPageInfo(pageNum, pageSize, user, ShopSubStageEnum.SHOP_STAGE_14, Arrays.asList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_140.getShopSubStageStatus()), Constants.ONE_INTEGER); + } + + @Override + public PageInfo firstOrderListPendingList(Integer pageNum, Integer pageSize, LoginUserInfo user) { + return commonPendingVOPageInfo(pageNum, pageSize, user, ShopSubStageEnum.SHOP_STAGE_15, Arrays.asList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_150.getShopSubStageStatus()), Constants.ONE_INTEGER); + } + + + /** + * 通用查询 + * @param pageNum + * @param pageSize + * @param user + * @param shopSubStageEnum + * @param subStageStatusList + * @return + */ + private PageInfo commonPendingVOPageInfo(Integer pageNum, Integer pageSize, LoginUserInfo user,ShopSubStageEnum shopSubStageEnum,List subStageStatusList,Integer type){ + PageHelper.startPage(pageNum, pageSize); + List specialShopStageInfo = shopStageInfoDAO.getSpecialShopStageInfo(null, shopSubStageEnum.getShopSubStage(), + subStageStatusList, user.getUserId(),type); + PageInfo result = new PageInfo<>(specialShopStageInfo); + List shopIds = specialShopStageInfo.stream().map(ShopStageInfoDO::getShopId).collect(Collectors.toList()); + List lineIds = specialShopStageInfo.stream().map(ShopStageInfoDO::getLineId).collect(Collectors.toList()); + List shopInfoList = shopInfoDAO.getShopListByIds(shopIds); + List lines = lineInfoDAO.getLines(lineIds); + + //将shopInfoList 转为map + Map shopInfoMap = shopInfoList.stream().collect(Collectors.toMap(ShopInfoDO::getId, shop -> shop)); + //将lines 转为map + Map lineMap = lines.stream().collect(Collectors.toMap(PlanLineDTO::getLineId, line -> line)); + + + List regionIds = shopInfoList.stream().map(ShopInfoDO::getRegionId).distinct().collect(Collectors.toList()); + List developmentManagers = shopInfoList.stream().filter(x->StringUtil.isNotEmpty(x.getShopManagerUserId())).map(ShopInfoDO::getShopManagerUserId).distinct().collect(Collectors.toList()); + Map userNameMap = enterpriseUserDAO.getUserNameMap(developmentManagers); + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIds); + + Map shopPayDoMap = new HashMap<>(16); + if (ShopSubStageEnum.SHOP_STAGE_7.getShopSubStage().equals(shopSubStageEnum.getShopSubStage())){ + shopPayDoMap = linePayDAO.getLinePayByShopIds(shopIds, PayBusinessTypeEnum.FRANCHISE_FEE.getCode()); + } + + + List list = new ArrayList<>(); + Map finalShopPayDoMap = shopPayDoMap; + specialShopStageInfo.forEach(x->{ + PreparationCommonPendingVO preparationCommonPendingVO = new PreparationCommonPendingVO(); + preparationCommonPendingVO.setLineId(x.getLineId()); + preparationCommonPendingVO.setShopId(x.getShopId()); + preparationCommonPendingVO.setStage(x.getShopStage()); + preparationCommonPendingVO.setSubStage(x.getShopSubStage()); + preparationCommonPendingVO.setSubStageStatus(x.getShopSubStageStatus()); + ShopInfoDO shopInfoDO = shopInfoMap.getOrDefault(x.getShopId(),new ShopInfoDO()); + preparationCommonPendingVO.setSubmitTime(DateUtils.parseDateToStr(DateUtils.SPECIAL_DATE_START,finalShopPayDoMap.getOrDefault(x.getShopId(), new LinePayDO()).getCreateTime())); + preparationCommonPendingVO.setStoreName(shopInfoDO.getShopName()); + PlanLineDTO planLineDTO = lineMap.getOrDefault(x.getLineId(), new PlanLineDTO()); + preparationCommonPendingVO.setPartnerName(planLineDTO.getUsername()); + preparationCommonPendingVO.setPartnerPhone(planLineDTO.getMobile()); + preparationCommonPendingVO.setShopManagerUserName(userNameMap.getOrDefault(shopInfoDO.getShopManagerUserId(),"")); + preparationCommonPendingVO.setRegionNodeName(regionNameMap.getOrDefault(shopInfoDO.getRegionId(),"")); + list.add(preparationCommonPendingVO); + }); + result.setList(list); + return result; + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EmployeeTrainingServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EmployeeTrainingServiceImpl.java new file mode 100644 index 000000000..cea4fee27 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EmployeeTrainingServiceImpl.java @@ -0,0 +1,722 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; +import com.cool.store.constants.RedisConstant; +import com.cool.store.dao.*; +import com.cool.store.dto.SmallVideoDTO; +import com.cool.store.dto.SmallVideoInfoDTO; +import com.cool.store.dto.StaffExamInfoDTO; +import com.cool.store.dto.openPreparation.PlanLineDTO; +import com.cool.store.entity.*; +import com.cool.store.enums.*; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.enums.video.ResourceStatusEnum; +import com.cool.store.enums.video.UploadTypeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.*; +import com.cool.store.service.*; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.poi.DateUtils; +import com.cool.store.utils.vod.SmallVideoParam; +import com.cool.store.vo.*; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; + +/** + * @author byd + * @date 2024-04-30 10:16 + */ +@Service +public class EmployeeTrainingServiceImpl implements EmployeeTrainingService { + + @Resource + private SysRoleService sysRoleService; + + @Resource + private UserAuthMappingService userAuthMappingService; + + @Resource + private EmployeeTrainingDAO employeeTrainingDAO; + + @Resource + private RegionService regionService; + + @Resource + private RegionDao regionDao; + + @Resource + private TempUserDetailDAO tempUserDetailDAO; + + @Resource + private ShopInfoDAO shopInfoDAO; + + @Resource + private EnterpriseUserDAO enterpriseUserDAO; + + @Resource + private StoreDao storeDAO; + + @Resource + private AssessmentTemplateDAO assessmentTemplateDAO; + + @Resource + private AssessmentDataDAO assessmentDataDAO; + + @Resource + private RedisUtilPool redisUtilPool; + + @Resource + private XfsgEhrService xfsgEhrService; + + @Resource + private LineInfoDAO lineInfoDAO; + + @Resource + private CommonService commonService; + + @Resource + private ShopStageInfoDAO shopStageInfoDAO; + + @Resource + private PreparationService preparationService; + + @Override + public PageInfo employeeTrainingList(String userId, EmployeeTrainingRequest request) { + List authRegionIdList = new ArrayList<>(); + if (!sysRoleService.checkIsAdmin(userId)) { + authRegionIdList = userAuthMappingService.getAuthRegionIdAndSubRegionIdByUserId(userId); + } + if (CollectionUtils.isNotEmpty(request.getRegionIdList())) { + if (request.getRegionIdList().contains(CommonConstants.ROOT_DEPT_ID_STR)) { + request.setRegionIdList(null); + } else { + request.setRegionIdList(regionService.getSubRegionIdsByRegionIds(request.getRegionIdList())); + } + } + List storeNumList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(request.getStoreIdList())){ + storeNumList = storeDAO.getStoreNumByStoreIds(request.getStoreIdList()); + if(CollectionUtils.isEmpty(storeNumList)){ + return new PageInfo<>(); + } + } + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + List list = employeeTrainingDAO.employeeTrainingList(request.getKeyWord(), request.getRegionIdList(), authRegionIdList, request.getAssignFlag(), + DateUtils.parseLongDateToStr(request.getBeginTime()), + DateUtils.parseLongDateToStr(request.getEndTime()), storeNumList, + request.getTheoreticalExamStatus(), request.getPracticalExamStatus(), request.getAssessmentStatus(), request.getAssignStoreFlag()); + if (CollectionUtils.isEmpty(list)) { + return new PageInfo<>(list); + } + + List regionIds = list.stream().map(EmployeeTrainingVO::getRegionId).distinct().collect(Collectors.toList()); + + List lineIdList = list.stream().map(EmployeeTrainingVO::getLineId).distinct().collect(Collectors.toList()); + + List storeIdList = list.stream().map(EmployeeTrainingVO::getTrainingStoreId).distinct().collect(Collectors.toList()); + + List storeDOList = storeDAO.getEffectiveStoreByStoreIds(storeIdList); + Map storeNameMap = storeDOList.stream().collect(Collectors.toMap(StoreDO::getStoreId, StoreDO::getStoreName)); + + List userIdList = list.stream().map(EmployeeTrainingVO::getTrainingTeacherUserId).distinct().collect(Collectors.toList()); + + + List practicalUserIdList = list.stream().map(EmployeeTrainingVO::getPracticalAssessmentUserId).distinct().collect(Collectors.toList()); + + if (CollectionUtils.isNotEmpty(practicalUserIdList)) { + userIdList.addAll(practicalUserIdList); + } + + List lineInfoList = lineInfoDAO.getLines(lineIdList); + Map lineInfoMap = lineInfoList.stream().collect(Collectors.toMap(PlanLineDTO::getLineId, PlanLineDTO::getUsername)); + + Map userNameMap = enterpriseUserDAO.getUserNameMap(userIdList); + + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIds); + + list.forEach(item -> { + item.setRegionNodeName(regionNameMap.get(item.getRegionId())); + item.setTrainingStoreName(storeNameMap.get(item.getTrainingStoreId())); + item.setTrainingTeacherUserName(userNameMap.get(item.getTrainingTeacherUserId())); + item.setPracticalAssessmentUserName(userNameMap.get(item.getPracticalAssessmentUserId())); + item.setFranchiseeName(lineInfoMap.get(item.getLineId())); + }); + return new PageInfo<>(list); + } + + @Override + public EmployeeTrainingDetailVO employeeTrainingDetail(Long id) { + TempUserDetailDO tempUserDetailDO = tempUserDetailDAO.selectById(id); + + EmployeeTrainingDO employeeTrainingDO = employeeTrainingDAO.selectByUserDetailId(id); + + EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.getUserInfoByThirdOaUniqueFlag(tempUserDetailDO.getIdCard()); + + EmployeeTrainingDetailVO employeeTrainingVO = new EmployeeTrainingDetailVO(); + employeeTrainingVO.setRoleId(tempUserDetailDO.getRoleId()); + employeeTrainingVO.setMobile(tempUserDetailDO.getMobile()); + employeeTrainingVO.setUsername(tempUserDetailDO.getUsername()); + employeeTrainingVO.setIdCard(tempUserDetailDO.getIdCard()); + employeeTrainingVO.setId(tempUserDetailDO.getId()); + Map regionNameMap = regionService.getBelongWarRegionNameMap(Collections.singletonList(tempUserDetailDO.getRegionId())); + employeeTrainingVO.setRegionNodeName(regionNameMap.get(tempUserDetailDO.getRegionId())); + employeeTrainingVO.setRegionId(tempUserDetailDO.getRegionId()); + ShopInfoDO shopInfoDO = shopInfoDAO.getShopInfo(tempUserDetailDO.getShopId()); + employeeTrainingVO.setShopName(shopInfoDO.getShopName()); + employeeTrainingVO.setShopId(tempUserDetailDO.getShopId()); + employeeTrainingVO.setAssignFlag(Boolean.FALSE); + if(employeeTrainingDO != null){ + employeeTrainingVO.setTrainingStartTime(employeeTrainingDO.getTrainingStartTime()); + employeeTrainingVO.setTrainingEndTime(employeeTrainingDO.getTrainingEndTime()); + employeeTrainingVO.setTrainingStoreId(employeeTrainingDO.getTrainingStoreId()); + employeeTrainingVO.setEmployeeTrainingId(employeeTrainingDO.getId()); + StoreDO storeDO = storeDAO.getByStoreId(employeeTrainingDO.getTrainingStoreId()); + if (storeDO != null) { + employeeTrainingVO.setTrainingStoreName(storeDO.getStoreName()); + } + employeeTrainingVO.setTrainingTeacherUserId(employeeTrainingDO.getTrainingTeacherUserId()); + employeeTrainingVO.setTrainingTeacherUserName(enterpriseUserDAO.getUserName(employeeTrainingDO.getTrainingTeacherUserId())); + employeeTrainingVO.setAssessmentStatus(employeeTrainingDO.getAssessmentStatus()); + employeeTrainingVO.setAssessmentNum(employeeTrainingDO.getAssessmentNum()); + employeeTrainingVO.setAssessmentTotalNum(employeeTrainingDO.getAssessmentTotalNum()); + employeeTrainingVO.setTheoreticalExamStatus(employeeTrainingDO.getTheoreticalExamStatus()); + employeeTrainingVO.setTheoreticalExamScore(employeeTrainingDO.getTheoreticalExamScore()); + //查询理论分支并更新 + StaffExamInfoDTO staffExamInfoDTO = xfsgEhrService.getUserExamInfo(enterpriseUserDO.getJobnumber()); + if (staffExamInfoDTO != null && StringUtils.isNotBlank(staffExamInfoDTO.getExamResult()) + && StringUtils.isNotBlank(staffExamInfoDTO.getExamScore())) { + employeeTrainingVO.setTheoreticalExamScore(StringUtils.isNotBlank(staffExamInfoDTO.getExamScore()) ? Integer.valueOf(staffExamInfoDTO.getExamScore()) : null); + employeeTrainingVO.setTheoreticalExamStatus(ExamStatusEnum.matchCodeByDesc(staffExamInfoDTO.getExamResult())); + if(!employeeTrainingVO.getTheoreticalExamScore().equals(employeeTrainingDO.getTheoreticalExamScore()) + || !employeeTrainingVO.getTheoreticalExamStatus().equals(employeeTrainingDO.getTheoreticalExamStatus())){ + employeeTrainingDO.setTheoreticalExamScore(employeeTrainingVO.getTheoreticalExamScore()); + employeeTrainingDO.setTheoreticalExamStatus(employeeTrainingVO.getTheoreticalExamStatus()); + employeeTrainingDAO.updateByPrimaryKeySelective(employeeTrainingDO); + } + } + employeeTrainingVO.setPracticalExamStatus(employeeTrainingDO.getPracticalExamStatus()); + employeeTrainingVO.setPracticalExamScore(employeeTrainingDO.getPracticalExamScore()); + employeeTrainingVO.setEstimatedAssessmentTime(employeeTrainingDO.getEstimatedAssessmentTime()); + employeeTrainingVO.setActualAssessmentTime(employeeTrainingDO.getActualAssessmentTime()); + employeeTrainingVO.setPracticalAssessmentUserId(employeeTrainingDO.getPracticalAssessmentUserId()); + employeeTrainingVO.setPracticalAssessmentUserName(enterpriseUserDAO.getUserName(employeeTrainingDO.getPracticalAssessmentUserId())); + employeeTrainingVO.setAssignFlag(employeeTrainingDO.getAssignFlag()); + employeeTrainingVO.setShopId(employeeTrainingDO.getShopId()); + } + return employeeTrainingVO; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void distribution(EmployeeTrainingDetailRequest request) { + TempUserDetailDO tempUserDetailDO = tempUserDetailDAO.selectById(request.getId()); + + EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.getUserInfoByThirdOaUniqueFlag(tempUserDetailDO.getIdCard()); + + EmployeeTrainingDO employeeTrainingDO = employeeTrainingDAO.selectByUserDetailId(request.getId()); + + if (employeeTrainingDO != null && employeeTrainingDO.getAssignFlag()) { + throw new ServiceException("已经分配培训,无法再次分配"); + } + if (employeeTrainingDO == null) { + employeeTrainingDO = new EmployeeTrainingDO(); + } + List assessmentTemplateDOList = assessmentTemplateDAO.listByType(AssessmentTemplateType.TRAINER.getCode()); + + employeeTrainingDO.setAssignFlag(true); + employeeTrainingDO.setTrainingTeacherUserId(request.getTrainingTeacherUserId()); + employeeTrainingDO.setTrainingStoreId(request.getTrainingStoreId()); + employeeTrainingDO.setTrainingStartTime(request.getTrainingStartTime()); + employeeTrainingDO.setTrainingEndTime(request.getTrainingEndTime()); + employeeTrainingDO.setEstimatedAssessmentTime(request.getEstimatedAssessmentTime()); + employeeTrainingDO.setAssessmentNum(0); + employeeTrainingDO.setAssessmentTotalNum(assessmentTemplateDOList.size()); + employeeTrainingDO.setAssessmentStatus(0); + if (employeeTrainingDO.getId() == null) { + employeeTrainingDO.setXfsgUserDetailId(tempUserDetailDO.getId()); + employeeTrainingDO.setRegionId(tempUserDetailDO.getRegionId()); + employeeTrainingDO.setShopId(tempUserDetailDO.getShopId()); + employeeTrainingDAO.insertSelective(employeeTrainingDO); + } else { + employeeTrainingDAO.updateByPrimaryKeySelective(employeeTrainingDO); + } + Long shopId = tempUserDetailDO.getShopId(); + + //分配教练员之后初始化实训数据 + List assessmentDataDOList = new ArrayList<>(); + assessmentTemplateDOList.forEach(assessmentTemplateDO -> { + AssessmentDataDO assessmentDataDO = new AssessmentDataDO(); + assessmentDataDO.setTemplateId(assessmentTemplateDO.getId()); + assessmentDataDO.setAssessmentUserId(enterpriseUserDO.getUserId()); + assessmentDataDO.setShopId(shopId); + assessmentDataDOList.add(assessmentDataDO); + }); + assessmentDataDAO.batchInsertDO(assessmentDataDOList); + + + Map messageMap = new HashMap<>(); + messageMap.put("userName", tempUserDetailDO.getUsername()); + messageMap.put("mobile", tempUserDetailDO.getMobile()); + messageMap.put("registerTime", DateUtils.dateTime(tempUserDetailDO.getRegisterTime())); + messageMap.put("userDetailId", tempUserDetailDO.getId().toString()); + commonService.sendMessage(Collections.singletonList(employeeTrainingDO.getTrainingTeacherUserId()), MessageEnum.MESSAGE_22, messageMap); + } + + @Override + public List trainingListByShopId(Long shopId) { + + List list = employeeTrainingDAO.trainingListByShopId(shopId, null, null); + if (CollectionUtils.isEmpty(list)) { + return list; + } + List storeIdList = list.stream().map(EmployeeTrainingVO::getTrainingStoreId).collect(Collectors.toList()); + List storeDOList = storeDAO.getEffectiveStoreByStoreIds(storeIdList); + Map storeNameMap = storeDOList.stream().collect(Collectors.toMap(StoreDO::getStoreId, StoreDO::getStoreName)); + + List regionIdList = list.stream().map(EmployeeTrainingVO::getRegionId).collect(Collectors.toList()); + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIdList); + + list.forEach(item -> { + item.setTrainingStoreName(storeNameMap.get(item.getTrainingStoreId())); + item.setRegionNodeName(regionNameMap.get(item.getRegionId())); + if(item.getAssessmentStatus() == null){ + //培训未开始 + item.setAssessmentStatus(-1); + } + }); + return list; + } + + @Override + public PageInfo trainerUserList(String userId, Integer status, Integer pageNum, Integer pageSize) { + PageHelper.startPage(pageNum, pageSize); + List list = employeeTrainingDAO.trainingListByShopId(null, userId, status); + if (CollectionUtils.isEmpty(list)) { + return new PageInfo<>(); + } + List storeIdList = list.stream().map(EmployeeTrainingVO::getTrainingStoreId).collect(Collectors.toList()); + List storeDOList = storeDAO.getEffectiveStoreByStoreIds(storeIdList); + Map storeNameMap = storeDOList.stream().collect(Collectors.toMap(StoreDO::getStoreId, StoreDO::getStoreName)); + + List regionIdList = list.stream().map(EmployeeTrainingVO::getRegionId).collect(Collectors.toList()); + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIdList); + + list.forEach(item -> { + item.setTrainingStoreName(storeNameMap.get(item.getTrainingStoreId())); + item.setRegionNodeName(regionNameMap.get(item.getRegionId())); + }); + return new PageInfo<>(list); + } + + @Override + public EmployeeUserTrainingVO trainerUserDetail(Long id) { + EmployeeUserTrainingVO employeeUserTrainingVO = new EmployeeUserTrainingVO(); + TempUserDetailDO tempUserDetailDO = tempUserDetailDAO.selectById(id); + + EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.getUserInfoByThirdOaUniqueFlag(tempUserDetailDO.getIdCard()); + + EmployeeTrainingDO employeeTrainingDO = employeeTrainingDAO.selectByUserDetailId(id); + employeeUserTrainingVO.setEmployeeTrainingId(employeeTrainingDO.getId()); + employeeUserTrainingVO.setTrainingTeacherUserId(employeeTrainingDO.getTrainingTeacherUserId()); + employeeUserTrainingVO.setTrainingStoreId(employeeTrainingDO.getTrainingStoreId()); + employeeUserTrainingVO.setTrainingStartTime(employeeTrainingDO.getTrainingStartTime()); + employeeUserTrainingVO.setTrainingEndTime(employeeTrainingDO.getTrainingEndTime()); + employeeUserTrainingVO.setAssessmentNum(employeeTrainingDO.getAssessmentNum()); + employeeUserTrainingVO.setAssessmentTotalNum(employeeTrainingDO.getAssessmentTotalNum()); + employeeUserTrainingVO.setMobile(tempUserDetailDO.getMobile()); + employeeUserTrainingVO.setRoleId(tempUserDetailDO.getRoleId()); + employeeUserTrainingVO.setIdCard(tempUserDetailDO.getIdCard()); + employeeUserTrainingVO.setId(tempUserDetailDO.getId()); + employeeUserTrainingVO.setUsername(tempUserDetailDO.getUsername()); + employeeUserTrainingVO.setRegionId(tempUserDetailDO.getRegionId()); + employeeUserTrainingVO.setShopId(tempUserDetailDO.getShopId()); + ShopInfoDO shopInfoDO = shopInfoDAO.getShopInfo(tempUserDetailDO.getShopId()); + if (shopInfoDO != null) { + employeeUserTrainingVO.setShopName(shopInfoDO.getShopName()); + } + StoreDO storeDO = storeDAO.getByStoreId(employeeTrainingDO.getTrainingStoreId()); + if (storeDO != null) { + employeeUserTrainingVO.setTrainingStoreName(storeDO.getStoreName()); + } + + employeeUserTrainingVO.setTrainingTeacherUserName(enterpriseUserDAO.getUserName(employeeTrainingDO.getTrainingTeacherUserId())); + List assessmentTemplateDOList = assessmentTemplateDAO.listByType(AssessmentTemplateType.TRAINER.getCode()); + List templateIdList = assessmentTemplateDOList.stream().map(AssessmentTemplateDO::getId).collect(Collectors.toList()); + + List assessmentDataDOList = assessmentDataDAO.selectList(enterpriseUserDO.getUserId(), templateIdList); + + Map assessmentDataMap = new HashMap<>(); + assessmentDataDOList.forEach(item -> { + assessmentDataMap.put(item.getTemplateId() + CommonConstants.COLON + item.getAssessmentUserId(), item); + }); + List templateDataVOList = new ArrayList<>(); + assessmentTemplateDOList.forEach(item -> { + AssessmentTemplateDataVO assessmentTemplateDataVO = new AssessmentTemplateDataVO(); + AssessmentDataDO assessmentDataDO = assessmentDataMap.get(item.getId() + CommonConstants.COLON + enterpriseUserDO.getUserId()); + if (assessmentDataDO != null) { + assessmentTemplateDataVO.setGoalScore(assessmentDataDO.getScore()); + assessmentTemplateDataVO.setReason(assessmentDataDO.getReason()); + assessmentTemplateDataVO.setComments(assessmentDataDO.getComments()); + assessmentTemplateDataVO.setQualified(assessmentDataDO.getQualified()); + assessmentTemplateDataVO.setAssessmentDataId(assessmentDataDO.getId()); + } + assessmentTemplateDataVO.setScore(item.getScore()); + assessmentTemplateDataVO.setTemplateName(item.getTemplateName()); + assessmentTemplateDataVO.setTemplateRemarkList(Arrays.asList(item.getTemplateRemark().split(CommonConstants.COMMA))); + assessmentTemplateDataVO.setCategory(item.getCategory()); + assessmentTemplateDataVO.setId(item.getId()); + assessmentTemplateDataVO.setType(item.getType()); + assessmentTemplateDataVO.setTemplateRequirements(item.getTemplateRequirements()); + templateDataVOList.add(assessmentTemplateDataVO); + }); + employeeUserTrainingVO.setTemplateDataList(templateDataVOList); + Map regionNameMap = regionService.getBelongWarRegionNameMap(Collections.singletonList(employeeTrainingDO.getRegionId())); + employeeUserTrainingVO.setRegionNodeName(regionNameMap.get(employeeTrainingDO.getRegionId())); + return employeeUserTrainingVO; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void trainerUserCommit(EmployeeTrainingCommitListRequest request) { + if (CollectionUtils.isEmpty(request.getList())) { + return; + } + + Long userDetailId = request.getUserDetailId(); + TempUserDetailDO tempUserDetailDO = tempUserDetailDAO.selectById(userDetailId); + EmployeeTrainingDO employeeTrainingDO = employeeTrainingDAO.selectByUserDetailId(userDetailId); + + EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.getUserInfoByThirdOaUniqueFlag(tempUserDetailDO.getIdCard()); + String userId = enterpriseUserDO.getUserId(); + request.getList().forEach(item -> { + AssessmentDataDO assessmentDataDO = null; + if (item.getId() != null) { + assessmentDataDO = assessmentDataDAO.selectByPrimaryKey(item.getId()); + } else { + assessmentDataDO = assessmentDataDAO.selectByTemplateId(item.getTemplateId(), item.getUserDetailId(), item.getShopId()); + } + if (assessmentDataDO != null) { + assessmentDataDO.setQualified(item.getQualified()); + assessmentDataDAO.updateByPrimaryKeySelective(assessmentDataDO); + } else { + assessmentDataDO = new AssessmentDataDO(); + assessmentDataDO.setTemplateId(item.getTemplateId()); + assessmentDataDO.setAssessmentUserId(userId); + assessmentDataDO.setShopId(item.getShopId()); + assessmentDataDO.setQualified(item.getQualified()); + assessmentDataDAO.insertSelective(assessmentDataDO); + } + }); + Integer num = assessmentDataDAO.selectCount(userId, tempUserDetailDO.getShopId()); + employeeTrainingDO.setAssessmentNum(num); + if (num.equals(employeeTrainingDO.getAssessmentTotalNum())) { + employeeTrainingDO.setAssessmentStatus(1); + } + employeeTrainingDAO.updateByPrimaryKeySelective(employeeTrainingDO); + } + + @Override + public PageInfo assessmentUserList(String userId, EmployeeAssessmentRequest request) { + + List requestStoreIdList = request.getStoreIdList(); + Boolean isAdmin = sysRoleService.checkIsAdmin(userId); + if (CollectionUtils.isEmpty(requestStoreIdList) && StringUtils.isNotBlank(userId) && !isAdmin) { + requestStoreIdList = userAuthMappingService.getAuthStoreIdAndSubRegionIdByUserId(userId); + if(CollectionUtils.isEmpty(requestStoreIdList)){ + return new PageInfo<>(); + } + } + String practicalAssessmentUserId = userId; + //空意味着管理员 + if(isAdmin){ + practicalAssessmentUserId = null; + } + + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + List employeeTrainingVOList = employeeTrainingDAO + .assessmentUserList(request.getName(), practicalAssessmentUserId, request.getAssessmentStatus(), + DateUtils.parseLongDateToStr(request.getEstimatedAssessmentBeginTime()), + DateUtils.parseLongDateToStr(request.getEstimatedAssessmentEndTime()), + DateUtils.parseLongDateToStr(request.getActualAssessmentBeginTime()), + DateUtils.parseLongDateToStr(request.getActualAssessmentEndTime()), requestStoreIdList); + if (CollectionUtils.isEmpty(employeeTrainingVOList)) { + return new PageInfo<>(employeeTrainingVOList); + } + List storeIdList = employeeTrainingVOList.stream().map(EmployeeTrainingVO::getTrainingStoreId).collect(Collectors.toList()); + List storeDOList = storeDAO.getEffectiveStoreByStoreIds(storeIdList); + Map storeNameMap = storeDOList.stream().collect(Collectors.toMap(StoreDO::getStoreId, StoreDO::getStoreName)); + + List regionIdList = employeeTrainingVOList.stream().map(EmployeeTrainingVO::getRegionId).collect(Collectors.toList()); + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIdList); + + employeeTrainingVOList.forEach(item -> { + item.setTrainingStoreName(storeNameMap.get(item.getTrainingStoreId())); + item.setRegionNodeName(regionNameMap.get(item.getRegionId())); + }); + return new PageInfo<>(employeeTrainingVOList); + } + + @Override + public AssessmentUserTrainingVO assessmentUserDetail(Long id) { + AssessmentUserTrainingVO assessmentUserTrainingVO = new AssessmentUserTrainingVO(); + TempUserDetailDO tempUserDetailDO = tempUserDetailDAO.selectById(id); + + EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.getUserInfoByThirdOaUniqueFlag(tempUserDetailDO.getIdCard()); + + EmployeeTrainingDO employeeTrainingDO = employeeTrainingDAO.selectByUserDetailId(id); + assessmentUserTrainingVO.setEmployeeTrainingId(employeeTrainingDO.getId()); + assessmentUserTrainingVO.setTrainingStoreId(employeeTrainingDO.getTrainingStoreId()); + StoreDO storeDO = storeDAO.getByStoreId(employeeTrainingDO.getTrainingStoreId()); + if (storeDO != null) { + assessmentUserTrainingVO.setTrainingStoreName(storeDO.getStoreName()); + } + assessmentUserTrainingVO.setPracticalAssessmentUserId(employeeTrainingDO.getPracticalAssessmentUserId()); + assessmentUserTrainingVO.setPracticalAssessmentUserName(enterpriseUserDAO.getUserName(employeeTrainingDO.getPracticalAssessmentUserId())); + assessmentUserTrainingVO.setMobile(tempUserDetailDO.getMobile()); + assessmentUserTrainingVO.setRoleId(tempUserDetailDO.getRoleId()); + assessmentUserTrainingVO.setIdCard(tempUserDetailDO.getIdCard()); + assessmentUserTrainingVO.setActualAssessmentTime(employeeTrainingDO.getActualAssessmentTime()); + assessmentUserTrainingVO.setEstimatedAssessmentTime(employeeTrainingDO.getEstimatedAssessmentTime()); + assessmentUserTrainingVO.setUsername(tempUserDetailDO.getUsername()); + assessmentUserTrainingVO.setAssessmentStatus(employeeTrainingDO.getAssessmentStatus()); + assessmentUserTrainingVO.setShopId(tempUserDetailDO.getShopId()); + assessmentUserTrainingVO.setTheoreticalExamStatus(employeeTrainingDO.getTheoreticalExamStatus()); + assessmentUserTrainingVO.setTheoreticalExamScore(employeeTrainingDO.getTheoreticalExamScore()); + + //查询理论分支并更新 + StaffExamInfoDTO staffExamInfoDTO = xfsgEhrService.getUserExamInfo(enterpriseUserDO.getJobnumber()); + if (staffExamInfoDTO != null && StringUtils.isNotBlank(staffExamInfoDTO.getExamResult()) + && StringUtils.isNotBlank(staffExamInfoDTO.getExamScore())) { + assessmentUserTrainingVO.setTheoreticalExamScore(StringUtils.isNotBlank(staffExamInfoDTO.getExamScore()) ? Integer.valueOf(staffExamInfoDTO.getExamScore()) : null); + assessmentUserTrainingVO.setTheoreticalExamStatus(ExamStatusEnum.matchCodeByDesc(staffExamInfoDTO.getExamResult())); + if(!assessmentUserTrainingVO.getTheoreticalExamScore().equals(employeeTrainingDO.getTheoreticalExamScore()) + || !assessmentUserTrainingVO.getTheoreticalExamStatus().equals(employeeTrainingDO.getTheoreticalExamStatus())){ + employeeTrainingDO.setTheoreticalExamScore(assessmentUserTrainingVO.getTheoreticalExamScore()); + employeeTrainingDO.setTheoreticalExamStatus(assessmentUserTrainingVO.getTheoreticalExamStatus()); + employeeTrainingDAO.updateByPrimaryKeySelective(employeeTrainingDO); + } + } + assessmentUserTrainingVO.setAssessmentNum(employeeTrainingDO.getAssessmentNum()); + assessmentUserTrainingVO.setAssessmentTotalNum(employeeTrainingDO.getAssessmentTotalNum()); + assessmentUserTrainingVO.setPracticalExamScore(employeeTrainingDO.getPracticalExamScore()); + assessmentUserTrainingVO.setPracticalExamStatus(employeeTrainingDO.getPracticalExamStatus()); + assessmentUserTrainingVO.setId(tempUserDetailDO.getId()); + assessmentUserTrainingVO.setRegionId(tempUserDetailDO.getRegionId()); + ShopInfoDO shopInfoDO = shopInfoDAO.getShopInfo(employeeTrainingDO.getShopId()); + if (shopInfoDO != null) { + assessmentUserTrainingVO.setShopName(shopInfoDO.getShopName()); + } + + Map regionNameMap = regionService.getBelongWarRegionNameMap(Collections.singletonList(employeeTrainingDO.getRegionId())); + assessmentUserTrainingVO.setRegionNodeName(regionNameMap.get(employeeTrainingDO.getRegionId())); + + Integer templateType = AssessmentTemplateType.STORE_MANAGER.getCode(); + if(UserRoleEnum.XFSG_CLERK.getCode().equals(tempUserDetailDO.getRoleId())){ + templateType = AssessmentTemplateType.CLERK.getCode(); + } + + List assessmentTemplateDOList = assessmentTemplateDAO.listByType(templateType); + + List templateIdList = assessmentTemplateDOList.stream().map(AssessmentTemplateDO::getId).collect(Collectors.toList()); + + List assessmentDataDOList = assessmentDataDAO.selectList(enterpriseUserDO.getUserId(), templateIdList); + + Map assessmentDataMap = new HashMap<>(); + assessmentDataDOList.forEach(item -> { + assessmentDataMap.put(item.getTemplateId() + CommonConstants.COLON + item.getAssessmentUserId(), item); + }); + List templateDataVOList = new ArrayList<>(); + assessmentTemplateDOList.forEach(item -> { + AssessmentTemplateDataVO assessmentTemplateDataVO = new AssessmentTemplateDataVO(); + AssessmentDataDO assessmentDataDO = assessmentDataMap.get(item.getId() + CommonConstants.COLON + enterpriseUserDO.getUserId()); + if (assessmentDataDO != null) { + assessmentTemplateDataVO.setGoalScore(assessmentDataDO.getScore()); + assessmentTemplateDataVO.setReason(assessmentDataDO.getReason()); + assessmentTemplateDataVO.setComments(assessmentDataDO.getComments()); + assessmentTemplateDataVO.setQualified(assessmentDataDO.getQualified()); + assessmentTemplateDataVO.setAssessmentDataId(assessmentDataDO.getId()); + assessmentTemplateDataVO.setPicture(assessmentDataDO.getPicture()); + assessmentTemplateDataVO.setVideo(assessmentDataDO.getVideo()); + } + assessmentTemplateDataVO.setScore(item.getScore()); + assessmentTemplateDataVO.setTemplateName(item.getTemplateName()); + assessmentTemplateDataVO.setTemplateRemarkList(Arrays.asList(item.getTemplateRemark().split(CommonConstants.COMMA))); + assessmentTemplateDataVO.setCategory(item.getCategory()); + assessmentTemplateDataVO.setId(item.getId()); + assessmentTemplateDataVO.setType(item.getType()); + assessmentTemplateDataVO.setCategory(item.getCategory()); + assessmentTemplateDataVO.setTemplateRequirements(item.getTemplateRequirements()); + assessmentTemplateDataVO.setCheckType(item.getCheckType()); + templateDataVOList.add(assessmentTemplateDataVO); + }); + assessmentUserTrainingVO.setTemplateDataList(templateDataVOList); + return assessmentUserTrainingVO; + } + + @Override + public void turn(Long id, String userId, String turnUserId) { + TempUserDetailDO tempUserDetailDO = tempUserDetailDAO.selectById(id); + + EmployeeTrainingDO employeeTrainingDO = employeeTrainingDAO.selectByUserDetailId(id); + + employeeTrainingDO.setPracticalAssessmentUserId(turnUserId); + + employeeTrainingDAO.updateByPrimaryKeySelective(employeeTrainingDO); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void assessmentUserCommit(EmployeeAssessmentCommitListRequest request) { + if (CollectionUtils.isEmpty(request.getList())) { + return; + } + EmployeeTrainingDO employeeTrainingDO = employeeTrainingDAO.selectById(request.getEmployeeTrainingId()); + TempUserDetailDO tempUserDetailDO = tempUserDetailDAO.selectById(employeeTrainingDO.getXfsgUserDetailId()); + ShopInfoDO shopInfoDO = shopInfoDAO.getShopInfo(tempUserDetailDO.getShopId()); + Boolean pass = true; + EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.getUserInfoByThirdOaUniqueFlag(tempUserDetailDO.getIdCard()); + String userId = enterpriseUserDO.getUserId(); + AtomicReference totalScore = new AtomicReference<>(0L); + Integer templateType = AssessmentTemplateType.STORE_MANAGER.getCode(); + if(UserRoleEnum.XFSG_CLERK.getCode().equals(tempUserDetailDO.getRoleId())){ + templateType = AssessmentTemplateType.CLERK.getCode(); + } + List assessmentTemplateDOList = assessmentTemplateDAO.listByType(templateType); + + List templateIdList = assessmentTemplateDOList.stream().map(AssessmentTemplateDO::getId).collect(Collectors.toList()); + + List assessmentDataDOList = assessmentDataDAO.selectList(userId, templateIdList); + request.getList().forEach(item -> { + AssessmentDataDO assessmentDataDO = null; + totalScore.set(totalScore.get() + item.getScore()); + if (item.getId() != null) { + assessmentDataDO = assessmentDataDAO.selectByPrimaryKey(item.getId()); + } else { + assessmentDataDO = assessmentDataDAO.selectByTemplateId(item.getTemplateId(), userId, item.getShopId()); + } + if (assessmentDataDO != null) { + assessmentDataDO.setScore(item.getScore()); + assessmentDataDO.setComments(item.getComments()); + assessmentDataDO.setPicture(item.getPicture()); + assessmentDataDO.setVideo(item.getVideo()); + } else { + assessmentDataDO = new AssessmentDataDO(); + assessmentDataDO.setTemplateId(item.getTemplateId()); + assessmentDataDO.setShopId(item.getShopId()); + assessmentDataDO.setComments(item.getComments()); + assessmentDataDO.setScore(item.getScore()); + assessmentDataDO.setAssessmentUserId(userId); + assessmentDataDO.setPicture(item.getPicture()); + assessmentDataDO.setVideo(item.getVideo()); + assessmentDataDAO.insertSelective(assessmentDataDO); + } + assessmentDataDOList.add(assessmentDataDO); + }); + checkVideoHandel(assessmentDataDOList); + assessmentDataDAO.batchInsertOrUpdate(assessmentDataDOList); + + employeeTrainingDO.setPracticalAssessmentUserId(userId); + employeeTrainingDO.setPracticalExamScore(totalScore.get().intValue()); + if (totalScore.get().intValue() > CommonConstants.NINETY) { + employeeTrainingDO.setPracticalExamStatus(1); + } else { + employeeTrainingDO.setPracticalExamStatus(2); + } + employeeTrainingDO.setPracticalExamScore(totalScore.get().intValue()); + employeeTrainingDO.setActualAssessmentTime(new Date()); + + if(employeeTrainingDO.getTheoreticalExamScore() == null){ + //查询理论分支并更新 + StaffExamInfoDTO staffExamInfoDTO = xfsgEhrService.getUserExamInfo(enterpriseUserDO.getJobnumber()); + if (staffExamInfoDTO != null && StringUtils.isNotBlank(staffExamInfoDTO.getExamResult()) + && StringUtils.isNotBlank(staffExamInfoDTO.getExamScore())) { + employeeTrainingDO.setTheoreticalExamScore(StringUtils.isNotBlank(staffExamInfoDTO.getExamScore()) ? Integer.valueOf(staffExamInfoDTO.getExamScore()) : null); + employeeTrainingDO.setTheoreticalExamStatus(ExamStatusEnum.matchCodeByDesc(staffExamInfoDTO.getExamResult())); + } + } + + + if (employeeTrainingDO.getPracticalExamStatus() == CommonConstants.TWO) { + employeeTrainingDO.setAssessmentStatus(CommonConstants.THREE); + } + if (employeeTrainingDO.getPracticalExamStatus() == 1) { + employeeTrainingDO.setAssessmentStatus(CommonConstants.TWO); + } + employeeTrainingDAO.updateByPrimaryKeySelective(employeeTrainingDO); + + //查询员工是否全部培训完成 + Integer unCompleteNum = employeeTrainingDAO.unCompleteNum(employeeTrainingDO.getShopId()); + if (unCompleteNum != null && unCompleteNum == 0) { + // 培训全部结束 + + //登记人员,培训状态由未开始到培训中 + ShopStageInfoDO shopStageInfoDO = shopStageInfoDAO.getShopSubStageInfo(tempUserDetailDO.getShopId(), ShopSubStageEnum.SHOP_STAGE_6); + if(shopStageInfoDO != null && shopStageInfoDO.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_60.getShopSubStageStatus())){ + shopStageInfoDAO.updateShopStageInfo(tempUserDetailDO.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_61); + //状态结束 + preparationService.whetherToOpenForAcceptance(tempUserDetailDO.getShopId()); + } + + Map messageMap = new HashMap<>(); + messageMap.put("storeName", shopInfoDO.getShopName()); + LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(tempUserDetailDO.getLineId()); + commonService.sendSms(lineInfoDO.getMobile(), SMSMsgEnum.TRAINING_ASSESSMENT_SUCCESS, messageMap); + } + } + + private void checkVideoHandel(List assessmentDataDOList) { + if (CollectionUtils.isEmpty(assessmentDataDOList)) { + return; + } + for (AssessmentDataDO assessmentDataDO : assessmentDataDOList) { + SmallVideoInfoDTO smallVideoInfo = JSONObject.parseObject(assessmentDataDO.getVideo(), SmallVideoInfoDTO.class); + if (smallVideoInfo != null && CollectionUtils.isNotEmpty(smallVideoInfo.getVideoList())) { + String callbackCache; + SmallVideoDTO smallVideoCache; + SmallVideoParam smallVideoParam; + for (SmallVideoDTO smallVideo : smallVideoInfo.getVideoList()) { + //如果转码完成 + if (smallVideo.getStatus() != null && smallVideo.getStatus() >= ResourceStatusEnum.TRANSCODE_FINISH.getValue()) { + continue; + } + callbackCache = redisUtilPool.getString(RedisConstant.VIDEO_CALLBACK_CACHE + smallVideo.getVideoId()); + if (StringUtils.isNotBlank(callbackCache)) { + smallVideoCache = JSONObject.parseObject(callbackCache, SmallVideoDTO.class); + if (smallVideoCache != null && smallVideoCache.getStatus() != null && smallVideoCache.getStatus() >= 3) { + BeanUtils.copyProperties(smallVideoCache, smallVideo); + } else { + smallVideoParam = new SmallVideoParam(); + setNotCompleteCache(smallVideoParam, smallVideo, assessmentDataDO.getId()); + } + } else { + smallVideoParam = new SmallVideoParam(); + setNotCompleteCache(smallVideoParam, smallVideo, assessmentDataDO.getId()); + } + } + assessmentDataDO.setVideo(JSONObject.toJSONString(smallVideoInfo)); + } + } + } + + public void setNotCompleteCache(SmallVideoParam smallVideoParam, SmallVideoDTO smallVideo, Long businessId) { + smallVideoParam.setVideoId(smallVideo.getVideoId()); + smallVideoParam.setUploadType(UploadTypeEnum.ASSESSMENT_DATA_CONTENT.getValue()); + smallVideoParam.setBusinessId(businessId); + smallVideoParam.setUploadTime(new Date()); + //存入未转码完成的map,vod回调的时候使用 + redisUtilPool.hashSet(RedisConstant.VIDEO_NOT_COMPLETE_CACHE, smallVideo.getVideoId(), JSONObject.toJSONString(smallVideoParam)); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FirstOrderServiceImp.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FirstOrderServiceImp.java new file mode 100644 index 000000000..24546ef28 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FirstOrderServiceImp.java @@ -0,0 +1,170 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.EnterpriseUserDAO; +import com.cool.store.dao.FirstOrderDAO; +import com.cool.store.dao.LineInfoDAO; +import com.cool.store.dao.ShopStageInfoDAO; +import com.cool.store.dto.openPreparation.FirstOrderDTO; +import com.cool.store.entity.FirstOrderDO; +import com.cool.store.entity.LineInfoDO; +import com.cool.store.entity.ShopInfoDO; +import com.cool.store.entity.ShopStageInfoDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.SMSMsgEnum; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.FirstOrderRequest; +import com.cool.store.service.CoolStoreStartFlowService; +import com.cool.store.service.FirstOrderService; +import com.cool.store.service.PreparationService; +import com.cool.store.service.ShopService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.beanutils.BeanUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.lang.reflect.InvocationTargetException; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + + +/** + * @Auther: WangShuo + * @Date: 2024/04/24/下午8:53 + * @Version 1.0 + * @注释: + */ +@Service +@Slf4j +public class FirstOrderServiceImp implements FirstOrderService { + @Resource + private FirstOrderDAO firstOrderDAO; + @Resource + private PreparationService preparationService; + @Resource + private CommonService commonService; + @Resource + private ShopService shopService; + @Resource + private ShopStageInfoDAO shopStageInfoDAO; + @Resource + private CoolStoreStartFlowService coolStoreStartFlowService; + @Resource + private EnterpriseUserDAO enterpriseUserDAO; + @Resource + private LineInfoDAO lineInfoDAO; + + @Override + public Integer saveOrder(FirstOrderRequest request, LoginUserInfo user) { + log.info("save order:{}", JSONObject.toJSONString(request)); + if (request == null) { + throw new ServiceException(ErrorCodeEnum.FIRST_ORDER_PARAM_NULL); + } + String userId = user.getUserId(); + FirstOrderDO order = new FirstOrderDO(); + try { + BeanUtils.copyProperties(order, request); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + FirstOrderDTO firstOrderDTO = firstOrderDAO.selectFirstOrderByShopId(order.getShopId()); + Integer num; + if (Objects.isNull(firstOrderDTO)) { + //第一次提交 + order.setCreateTime(new Date()); + order.setCreateUserId(userId); + num = firstOrderDAO.insertFirstOrder(order); + } else { + //修改只更新下面2个 + order.setId(firstOrderDTO.getId()); + order.setUpdateTime(new Date()); + order.setUpdateUserId(userId); + num = firstOrderDAO.updateByPrimaryKeySelective(order); + } + shopStageInfoDAO.updateShopStageInfo(order.getShopId(), + ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_152); + //发送消息至加盟商 + ShopInfoDO shopInfo = shopService.getShopInfo(order.getShopId()); + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(shopInfo.getLineId()); + Map messageMap =new HashMap<>(); + messageMap.put("totalOrderDeposit",request.getTotalOrderDeposit()); + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.FIRST_ORDER, messageMap); + //云立方同步 + if (num > 0) { + try { + String storeNum = shopInfo.getStoreNum(); + Boolean flag = coolStoreStartFlowService.getFirstOrder(storeNum); + log.info("saveOrder,flag:{}", flag); + if (flag == null) { + throw new ServiceException(ErrorCodeEnum.GET_FIRST_ORDER); + } + if (flag) { + //更改子阶段状态 + shopStageInfoDAO.updateShopStageInfo(order.getShopId(), + ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_151); + preparationService.whetherToOpenForAcceptance(order.getShopId()); + } + } catch (Exception e) { + log.error("获取鲜丰订货金异常", e); + } + } + return num; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public FirstOrderDTO getOrder(Long shopId) { + log.info("getOrder shopId:{},", shopId); + if (shopId == null) { + log.error("shopId is null"); + throw new ServiceException(ErrorCodeEnum.FIRST_ORDER_PARAM_NULL); + } + FirstOrderDTO order = firstOrderDAO.selectFirstOrderByShopId(shopId); + ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_15); + if (ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_151.getShopSubStageStatus().equals(shopSubStageInfo.getShopSubStageStatus())) { + + String userName = enterpriseUserDAO.getUserName(order.getCreateUserId()); + order.setPartnerName(userName); + order.setFirstOrderSubStage(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_151.getShopSubStageStatus()); + return order; + } + if (Objects.nonNull(order)) { + try { + + String userName = enterpriseUserDAO.getUserName(order.getCreateUserId()); + order.setPartnerName(userName); + ShopInfoDO shopInfo = shopService.getShopInfo(order.getShopId()); + String storeNum = shopInfo.getStoreNum(); + Boolean flag = coolStoreStartFlowService.getFirstOrder(storeNum); + log.info("saveOrder,flag:{}", flag); + if (flag == null) { + throw new ServiceException(ErrorCodeEnum.GET_FIRST_ORDER); + } + if (flag) { + //更改子阶段状态 + shopStageInfoDAO.updateShopStageInfo(order.getShopId(), + ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_151); + order.setFirstOrderSubStage(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_151.getShopSubStageStatus()); + preparationService.whetherToOpenForAcceptance(order.getShopId()); + } else { + order.setFirstOrderSubStage(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_152.getShopSubStageStatus()); + } + } catch (Exception e) { + log.error("获取鲜丰订货金异常", e); + } + + } + return order; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java new file mode 100644 index 000000000..4c3299a7c --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java @@ -0,0 +1,147 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.ShopStageInfoDAO; +import com.cool.store.entity.*; +import com.cool.store.enums.AuditTypeEnum; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.MessageEnum; +import com.cool.store.enums.SMSMsgEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.*; +import com.cool.store.request.AuditFranchiseFeeRequest; +import com.cool.store.request.FranchiseFeeRequest; +import com.cool.store.response.FranchiseFeeResponse; +import com.cool.store.service.FranchiseFeeService; +import com.cool.store.utils.poi.constant.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigInteger; +import java.util.*; + +@Service +@Slf4j +public class FranchiseFeeServiceImpl implements FranchiseFeeService { + + @Resource + FranchiseFeeMapper franchiseFeeMapper; + + @Resource + LinePayMapper linePayMapper; + + @Resource + ShopAuditInfoMapper shopAuditInfoMapper; + + @Resource + ShopStageInfoDAO shopStageInfoDAO; + + @Resource + LineInfoMapper lineInfoMapper; + + @Resource + ShopInfoMapper shopInfoMapper; + + @Resource + CommonService commonService; + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean submitLicense(FranchiseFeeRequest request) { + log.info("submitLicense request:{}", JSONObject.toJSONString(request)); + FranchiseFeeDO franchiseFeeDO = request.toFranchiseFeeDO(); + shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_71); + if (request.getId() != null) { + franchiseFeeDO.setId(request.getId()); + franchiseFeeMapper.updateByPrimaryKeySelective(franchiseFeeDO); + } else { + FranchiseFeeDO isExist = franchiseFeeMapper.selectByShopId(request.getShopId()); + if (Objects.nonNull(isExist)){ + throw new ServiceException(ErrorCodeEnum.UNISSUED_STATEMENT_2); + } + franchiseFeeMapper.insertSelective(franchiseFeeDO); + } + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); + commonService.sendSms(lineInfoDO.getMobile(), SMSMsgEnum.FRANCHISE_FEE_SUBMITTED); + return true; + } + + @Override + public FranchiseFeeResponse getDetail(Long shopId) { + FranchiseFeeDO result = franchiseFeeMapper.selectByShopId(shopId); + if (Objects.isNull(result)){ + return new FranchiseFeeResponse(); + } + FranchiseFeeResponse resp = FranchiseFeeResponse.from(result); + LinePayDO linePayDO = linePayMapper.selectByPrimaryKey(result.getPayId()); + if (Objects.nonNull(linePayDO)) { + FranchiseFeeResponse.LinePay linePayResult = FranchiseFeeResponse.LinePay.from(linePayDO); + if (Objects.nonNull(linePayDO.getLineId())){ + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(linePayDO.getLineId()); + linePayResult.setPartnerName(lineInfoDO.getUsername()); + } + linePayResult.setAmount(new BigInteger(result.getPerformanceBond()).add(new BigInteger(result.getFirstYearFee())).toString()); + if (Objects.nonNull(result.getAuditId())) { + ShopAuditInfoDO shopAuditInfoDO = shopAuditInfoMapper.selectByPrimaryKey(result.getAuditId()); + linePayResult.setStatus(shopAuditInfoDO.getResultType()); + linePayResult.setResult(shopAuditInfoDO.getResultType() == 0 ? shopAuditInfoDO.getPassReason() : shopAuditInfoDO.getRejectReason()); + } + resp.setLinePayDO(linePayResult); + } + return resp; + } + + @Override + public Boolean auditFranchiseFee(AuditFranchiseFeeRequest request, LoginUserInfo user) { + ShopAuditInfoDO shopAuditInfoDO = new ShopAuditInfoDO(); + shopAuditInfoDO.setShopId(request.getShopId()); + ShopSubStageStatusEnum shopSubStageStatusEnum = null; + shopAuditInfoDO.setAuditType(AuditTypeEnum.PAY_FRANCHISE_FEE.getCode()); + shopAuditInfoDO.setSubmittedUserId(user.getUserId()); + shopAuditInfoDO.setSubmittedUserName(user.getName()); + shopAuditInfoDO.setDataType(1); + shopAuditInfoDO.setResultType(request.getStatus()); + if (Constants.ZERO_INTEGER.equals(request.getStatus())) { + shopAuditInfoDO.setPassReason(request.getResult()); + shopSubStageStatusEnum = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_73; + //更新阶段信息 + shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_80); + Map requestMap = new HashMap<>(); + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); + LineInfoDO lineInfo = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); + requestMap.put("storeName", shopInfoDO.getShopName()); + requestMap.put("partnerName", lineInfo.getUsername()); + requestMap.put("partnerMobile", lineInfo.getMobile()); + requestMap.put("lineId", String.valueOf(lineInfo.getId())); + requestMap.put("shopId", String.valueOf(shopInfoDO.getId())); + commonService.sendMessage(Collections.singletonList(lineInfo.getInvestmentManager()), MessageEnum.MESSAGE_19, requestMap); + } else if (Constants.ONE_INTEGER.equals(request.getStatus())) { + shopAuditInfoDO.setRejectReason(request.getResult()); + shopSubStageStatusEnum = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_74; + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); + commonService.sendSms(lineInfoDO.getMobile(), SMSMsgEnum.FRANCHISE_FEE_NOT_PASS); + } + //插入audit + shopAuditInfoMapper.insertSelective(shopAuditInfoDO); + shopStageInfoDAO.updateShopStageAndAuditInfo(request.getShopId(), shopSubStageStatusEnum, shopAuditInfoDO.getId()); + //更新auditId + FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByPrimaryKey(request.getId()); + franchiseFeeDO.setAuditId(shopAuditInfoDO.getId()); + franchiseFeeMapper.updateByPrimaryKeySelective(franchiseFeeDO); +// ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); +// LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); +// Map requestMap = new HashMap<>(); +// requestMap.put("storeName", shopInfoDO.getShopName()); +// requestMap.put("partnerName", lineInfoDO.getUsername()); +// requestMap.put("partnerMobile", lineInfoDO.getMobile()); +// requestMap.put("lineId", String.valueOf(lineInfoDO.getId())); +// commonService.sendMessage(Collections.singletonList(lineInfoDO.getInvestmentManager()), MessageEnum.MESSAGE_18, requestMap); + return true; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerUserChannelServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerUserChannelServiceImpl.java new file mode 100644 index 000000000..fbf9d4e60 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerUserChannelServiceImpl.java @@ -0,0 +1,36 @@ +package com.cool.store.service.impl; + +import com.cool.store.dto.partner.UserChannelDTO; +import com.cool.store.entity.HyPartnerUserChannelDO; +import com.cool.store.mapper.HyPartnerUserChannelMapper; +import com.cool.store.service.HyPartnerUserChannelService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2023/8/10 11:14 + * @Version 1.0 + */ +@Service +public class HyPartnerUserChannelServiceImpl implements HyPartnerUserChannelService { + + @Resource + HyPartnerUserChannelMapper hyPartnerUserChannelMapper; + + @Override + public List queryAllUserChannelList() { + List allUserChannel = hyPartnerUserChannelMapper.getAllUserChannel(); + List result = new ArrayList<>(); + allUserChannel.forEach(x->{ + UserChannelDTO userChannelDTO = new UserChannelDTO(); + userChannelDTO.setUserChannelId(x.getChannelId()); + userChannelDTO.setUserChannelName(x.getChannelName()); + result.add(userChannelDTO); + }); + return result; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/IntentAgreementServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/IntentAgreementServiceImpl.java new file mode 100644 index 000000000..7b4ca4bdf --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/IntentAgreementServiceImpl.java @@ -0,0 +1,358 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.LineInfoDAO; +import com.cool.store.entity.*; +import com.cool.store.enums.*; +import com.cool.store.exception.ApiException; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.*; +import com.cool.store.mq.util.HttpRestTemplateService; +import com.cool.store.request.*; +import com.cool.store.response.InitiatingResponse; +import com.cool.store.response.ResponseResult; +import com.cool.store.response.SigningBaseInfoResponse; +import com.cool.store.service.AliyunService; +import com.cool.store.service.IntentAgreementService; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.SecureUtil; +import com.cool.store.utils.StringUtil; +import com.cool.store.utils.poi.DateUtils; +import com.cool.store.utils.poi.constant.Constants; +import com.cool.store.vo.BusinessLicenseInfoVO; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + + +@Service +@Slf4j +public class IntentAgreementServiceImpl extends LineFlowService implements IntentAgreementService, AuditResultService { + + + @Resource + IntentAgreementMapper intentAgreementMapper; + + @Resource + LineInfoMapper lineInfoMapper; + + @Resource + JoinIntentionMapper joinIntentionMapper; + + @Resource + LineInfoDAO lineInfoDAO; + + @Resource + private HttpRestTemplateService httpRestTemplateService; + + @Value("${xfsg.url}") + private String xfsgUrl; + + @Resource + LineAuditInfoMapper lineAuditInfoMapper; + + @Resource + LinePayMapper linePayMapper; + + @Resource + HyOpenAreaInfoMapper openAreaInfoMapper; + + @Resource + RedisUtilPool redisUtilPool; + + @Resource + private CommonService commonService; + + @Resource + AliyunService aliyunService; + + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean submit(IntentAgreementSubmitRequest request) { + SigningBaseInfoDO signingBaseInfoDO = request.toSigningBaseInfoDO(); + boolean submitStatus = intentAgreementMapper.insert(signingBaseInfoDO); + if (submitStatus) { + LineInfoDO lineInfoDO = lineInfoMapper.getByPartnerId(request.getPartnerId()); + if (Objects.isNull(lineInfoDO)) { + throw new ServiceException(ErrorCodeEnum.INTERVIEW_PARTNER_NOT_EXIST); + } + lineInfoDO.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_63.getCode()); + lineInfoMapper.updateByPrimaryKeySelective(lineInfoDO); + Map requestMap = new HashMap<>(); + requestMap.put("partnerUsername", lineInfoDO.getUsername()); + requestMap.put("partnerMobile", lineInfoDO.getMobile()); + requestMap.put("lineId", String.valueOf(lineInfoDO.getId())); + requestMap.put("submitTime", DateUtils.dateTimeNow(DateUtils.SPECIAL_DATE_START)); + commonService.sendMessage(Collections.singletonList(lineInfoDO.getInvestmentManager()), + MessageEnum.MESSAGE_30, + requestMap); + return Boolean.TRUE; + + } + return false; + } + + @Override + public SigningBaseInfoResponse getMiniIntentAgreement(String partnerId, Long lineId) { + if (StringUtil.isBlank(partnerId) && lineId == null) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + SigningBaseInfoDO signingBaseInfoDO = intentAgreementMapper.selectByPartnerIdOrLineId(partnerId, lineId); + if (Objects.isNull(signingBaseInfoDO)) { + log.info("getMiniIntentAgreement signingBaseInfoDO IS NULL......"); + return null; + } + SigningBaseInfoResponse response = SigningBaseInfoResponse.from(signingBaseInfoDO); + MemberQuestionDO byLineId = joinIntentionMapper.getByLineId(lineId); + response.setType(byLineId.getJoinType()); + if (Objects.nonNull(signingBaseInfoDO.getAuditId())) { + LineAuditInfoDO lineAuditInfoDO = lineAuditInfoMapper.selectByPrimaryKey(signingBaseInfoDO.getAuditId()); + if (Objects.isNull(lineAuditInfoDO)) { + response.setRejectPublicReason(null); + } + response.setRejectPublicReason(lineAuditInfoDO.getRejectPublicReason()); + } + return response; + } + + @Override + protected Boolean auditPass(Long auditId, LineInfoDO lineInfo, String userId) { + //校验是否是审核节点 + if (!lineInfo.getWorkflowSubStageStatus().equals(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_63.getCode()) && + !lineInfo.getWorkflowSubStageStatus().equals(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_75.getCode())) { + throw new ServiceException(ErrorCodeEnum.NOT_APPROVE_NODE); + } + //待审核code 63 处理逻辑 + if (lineInfo.getWorkflowSubStageStatus().equals(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_63.getCode())) { + lineInfo.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_70.getCode()); + lineInfoDAO.updateLineInfo(lineInfo); + } + //待OA审核code 75 处理逻辑 + if (lineInfo.getWorkflowSubStageStatus().equals(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_75.getCode())) { + WorkflowSubStageEnum workflowSubStageEnum = WorkflowSubStageEnum.getWorkflowSubStageEnum(lineInfo.getWorkflowSubStage()); + WorkflowSubStageEnum nextStage = workflowSubStageEnum.getNextStage(); + //更新线索阶段 + lineInfoDAO.updateWorkflowStage(lineInfo.getId(), nextStage, nextStage.getInitStatus(), userId); + Map requestMap = new HashMap<>(); + requestMap.put("partnerUsername", lineInfo.getUsername()); + requestMap.put("lineId", String.valueOf(lineInfo.getId())); + requestMap.put("partnerMobile", lineInfo.getMobile()); + commonService.sendMessage(Collections.singletonList(lineInfo.getInvestmentManager()),MessageEnum.MESSAGE_32,requestMap); + commonService.sendSms(lineInfo.getMobile(),SMSMsgEnum.INTENTION_PAYMENT_PASS); + } + //更新auditId + SigningBaseInfoDO signingBaseInfoDO = intentAgreementMapper.selectByPartnerIdOrLineId(null, lineInfo.getId()); + if (Objects.nonNull(signingBaseInfoDO)) { + intentAgreementMapper.updateAuditId(lineInfo.getId(), auditId); + } else { + throw new ServiceException("无法更新,没有对应的签约基本信息"); + } + return Boolean.TRUE; + } + + @Override + protected Boolean auditReject(Long auditId, LineInfoDO lineInfo, String userId) { + if ((!lineInfo.getWorkflowSubStageStatus().equals(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_63.getCode()) && + !lineInfo.getWorkflowSubStageStatus().equals(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_75.getCode()))) { + throw new ServiceException(ErrorCodeEnum.NOT_APPROVE_NODE); + } + //待审核code 63 处理逻辑 + if (lineInfo.getWorkflowSubStageStatus().equals(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_63.getCode())) { + lineInfo.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_65.getCode()); + lineInfo.setUpdateUserId(userId); + lineInfoDAO.updateLineInfo(lineInfo); + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.INTENTION_PROTOCOL_FAIL); + } + //待OA审核code 75 处理逻辑 + if (lineInfo.getWorkflowSubStageStatus().equals(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_75.getCode())) { + lineInfo.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_80.getCode()); + lineInfo.setUpdateUserId(userId); + lineInfoDAO.updateLineInfo(lineInfo); + //message + Map requestMap = new HashMap<>(); + requestMap.put("partnerUsername", lineInfo.getUsername()); + requestMap.put("lineId", String.valueOf(lineInfo.getId())); + requestMap.put("submitTime", DateUtils.dateTimeNow(DateUtils.SPECIAL_DATE_START)); + commonService.sendMessage(Collections.singletonList(lineInfo.getInvestmentManager()), + MessageEnum.MESSAGE_31, + requestMap); +// commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.INTENTION_PAYMENT_FAIL); + } + //更新auditId + intentAgreementMapper.updateAuditId(lineInfo.getId(), auditId); + return Boolean.TRUE; + } + + + @Override + public ResponseResult initiating(InitiatingRequest request, LoginUserInfo user) { + log.info("initiating request:{}", JSONObject.toJSONString(request)); + if (Objects.isNull(request)) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + verifyDate(request); + Map requestMap = new HashMap<>(); + fillSignatureInfo(requestMap); + String url = xfsgUrl + Constants.INTENTION_CONTRACT_URL + "?timestamp=" + requestMap.get("timestamp") + "&signature=" + requestMap.get("signature"); + InitiatingDO initiatingDO = request.toInitiatingDO(); + //todo 暂时写死,后续用UserHolder + initiatingDO.setApply_user("22090043"); + initiatingDO.setApply_user_name("22090043"); + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(request.getLineId()); + initiatingDO.setJmsxx(lineInfoDO.getPartnerNum()); + initiatingDO.setKdzBusinessId(AuditEnum.CONTRACT_INTENTION.getCode() + "_" + lineInfoDO.getId() + "_" + lineInfoDO.getWorkflowSubStageStatus()); + InitiatingResponse initiatingResponse = httpRestTemplateService.postForObject(url, initiatingDO, InitiatingResponse.class); + if (initiatingResponse.getCode() != 0L) { + return new ResponseResult(500, initiatingResponse.getMsg(), initiatingResponse.getData()); + } else { + String redisKey = "OA:" + request.getMobile() + request.getIdCardNo(); + log.info("initiating redisKey:{},request:{}", redisKey, JSONObject.toJSONString(request)); + redisUtilPool.setString(redisKey, JSONObject.toJSONString(request)); + lineInfoDO.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_75.getCode()); + lineInfoMapper.updateByPrimaryKeySelective(lineInfoDO); + return new ResponseResult(200000, initiatingResponse.getMsg(), initiatingResponse.getData()); + } + } + + private void verifyDate(InitiatingRequest request) { + if (request.getSignStartTime() == null || request.getSignEndTime() == null) { + throw new ServiceException(ErrorCodeEnum.TIME_NULL_FALSE); + } + if (request.getSignStartTime().after(request.getSignEndTime())) { + throw new ServiceException(ErrorCodeEnum.TIME_FALSE); + } + } + + @Override + public InitiatingRequest getOaDetail(String mobile, String idCardNo) { + String redisKey = "OA:" + mobile + idCardNo; + String responseString = redisUtilPool.getString(redisKey); + if (StringUtils.isNotBlank(responseString)) { + return JSONObject.parseObject(responseString, InitiatingRequest.class); + } + return null; + } + + @Override + public ResponseResult save(FranchiseeSaveRequest request, LoginUserInfo user) throws ApiException { + log.info("save request:{}", JSONObject.toJSONString(request)); + if (Objects.isNull(request)) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + Map requestMap = new HashMap<>(); + fillSignatureInfo(requestMap); + String url = xfsgUrl + Constants.FRANCHISEE_STORE_NUM + "?timestamp=" + requestMap.get("timestamp") + "&signature=" + requestMap.get("signature"); + FranchiseeDO franchiseeDO = request.toFranchiseeDO(); + //查银行信息 + LinePayDO linePayDO = linePayMapper.getLinePayByLineId(request.getLineId()); + if (Objects.isNull(linePayDO)) { + throw new ServiceException(ErrorCodeEnum.LINE_PAY_FALSE); + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String dateString = sdf.format(linePayDO.getPayTime()); + franchiseeDO.setPayDateStr(dateString); + franchiseeDO.setRetAccount(ReceivingBankEnum.XFSG_RECEIVING_BANK.getAccountNum()); + franchiseeDO.setBank(linePayDO.getBankCode()); + franchiseeDO.setBankSub(linePayDO.getBranchBankCode()); + //查城市信息 + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(request.getLineId()); + if (Objects.isNull(lineInfoDO)) { + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + if (lineInfoDO.getPartnerNum() != null){ + return new ResponseResult(200000,null,null); + } + if ("1".equals(lineInfoDO.getSex())){ + franchiseeDO.setSex(1); + }else if ("2".equals(lineInfoDO.getSex())){ + franchiseeDO.setSex(0); + } + HyOpenAreaInfoDO openAreaInfoDO = openAreaInfoMapper.selectById(lineInfoDO.getWantShopAreaId()); + franchiseeDO.setProvinceCode(String.valueOf(openAreaInfoDO.getParentId())); + franchiseeDO.setCityCode(String.valueOf(openAreaInfoDO.getId())); + //todo 操作人工号 暂时写死 + franchiseeDO.setOperator("22090043"); + MemberQuestionDO memberQuestionDO = joinIntentionMapper.getByLineId(lineInfoDO.getId()); + //如果是企业加盟,需要传有效期和法人 + if (Objects.nonNull(memberQuestionDO) && Constants.TWO_INTEGER.equals(memberQuestionDO.getJoinType())){ + SigningBaseInfoDO signingBaseInfoDO = intentAgreementMapper.selectByPartnerIdOrLineId(null,lineInfoDO.getId()); + BusinessLicenseInfoVO businessLicenseInfo = aliyunService.getBusinessLicenseInfo(signingBaseInfoDO.getBusinessLicense()); + franchiseeDO.setBusinessTerm(businessLicenseInfo.getValidPeriod()); + franchiseeDO.setLegalPerson(businessLicenseInfo.getLegalPerson()); + } + InitiatingResponse initiatingResponse = httpRestTemplateService.postForObject(url, franchiseeDO, InitiatingResponse.class); + //更新线索(进入蓄水池并回填加盟商编码) + if (initiatingResponse.getCode() == 0) { + LineInfoDO lineInfoParam = new LineInfoDO(); + lineInfoParam.setId(request.getLineId()); + //蓄水池 + lineInfoParam.setJoinStatus(1); + lineInfoParam.setPartnerNum(initiatingResponse.getData()); + lineInfoMapper.updateByPrimaryKeySelective(lineInfoParam); + } + if (initiatingResponse.getCode() != 0) { + lineInfoDO.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_63.getCode()); + lineInfoMapper.updateByPrimaryKeySelective(lineInfoDO); + return new ResponseResult(500, initiatingResponse.getMessage(), initiatingResponse.getData()); + } else { + return new ResponseResult(200000, initiatingResponse.getMessage(), initiatingResponse.getData()); + } + } + + @Override + public Boolean auditResult(AuditResultRequest request) { + String kdzBusinessId = request.getKdzBusinessId(); + String lineId = getLineId(kdzBusinessId); + String redisKey = "kdzBusinessId:" + kdzBusinessId; + if (StringUtil.isBlank(lineId)) { + throw new ServiceException(ErrorCodeEnum.BUSINESS_ID_NOT_EXIST); + } + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(Long.valueOf(lineId)); + if (Objects.isNull(lineInfoDO)) { + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + String auditResult = redisUtilPool.getString(redisKey); + if (WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_70.getCode().equals(lineInfoDO.getWorkflowSubStageStatus())){ + //鲜丰系统不稳定,会出现调用成功但内部状态未更改的情况,这时直接返回true即可 + return true; + } + if (request.getAuditResult() == 1) { + AuditPassRequest auditPassRequest = new AuditPassRequest(); + auditPassRequest.setLineId(lineInfoDO.getId()); + auditPassRequest.setPassReason(request.getCause()); + auditPassRequest.setWorkflowSubStage(lineInfoDO.getWorkflowSubStage()); + commonService.getLineFlowService(auditPassRequest.getWorkflowSubStage()).auditPass(auditPassRequest, null); + } else if (request.getAuditResult() == 0) { + AuditRejectRequest auditRejectRequest = new AuditRejectRequest(); + auditRejectRequest.setLineId(lineInfoDO.getId()); + auditRejectRequest.setWorkflowSubStage(lineInfoDO.getWorkflowSubStage()); + auditRejectRequest.setRejectPublicReason(request.getCause()); + auditRejectRequest.setRejectRealReason(request.getFailureCause()); + commonService.getLineFlowService(auditRejectRequest.getWorkflowSubStage()).auditReject(auditRejectRequest, null); + } + redisUtilPool.setString(redisKey, JSONObject.toJSONString(request.getAuditResult())); + return true; + } + + private String getLineId(String kdzBusinessId) { + return kdzBusinessId.substring(kdzBusinessId.indexOf("_") + 1, kdzBusinessId.lastIndexOf("_")); + } + + private void fillSignatureInfo(Map requestMap) { + long timestamp = System.currentTimeMillis(); + String signature = SecureUtil.getSignature(timestamp); + requestMap.put("timestamp", timestamp); + requestMap.put("signature", signature); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/JoinIntentionServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/JoinIntentionServiceImpl.java new file mode 100644 index 000000000..f318b25ce --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/JoinIntentionServiceImpl.java @@ -0,0 +1,148 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.dao.LineInfoDAO; +import com.cool.store.dao.RegionAreaConfigDao; +import com.cool.store.entity.*; +import com.cool.store.enums.*; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.HyOpenAreaInfoMapper; +import com.cool.store.mapper.JoinIntentionMapper; +import com.cool.store.mapper.LineAuditInfoMapper; +import com.cool.store.mapper.LineInfoMapper; +import com.cool.store.request.JoinIntentionRequest; +import com.cool.store.service.JoinIntentionService; +import com.cool.store.service.UserAuthMappingService; +import com.cool.store.utils.poi.StringUtils; +import com.cool.store.vo.PartnerBaseInfoVO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + + +@Service +@Slf4j +public class JoinIntentionServiceImpl extends LineFlowService implements JoinIntentionService { + + @Resource + JoinIntentionMapper joinIntentionMapper; + + @Resource + LineInfoDAO lineInfoDAO; + + @Resource + HyOpenAreaInfoMapper openAreaInfoMapper; + + + @Resource + LineAuditInfoMapper lineAuditInfoMapper; + + @Resource + UserAuthMappingService userAuthMappingService; + + @Resource + RegionAreaConfigDao regionAreaConfigDao; + + @Resource + LineInfoMapper lineInfoMapper; + + @Resource + CommonService commonService; + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean submit(JoinIntentionRequest request) { + log.info("submit request :{}", JSONObject.toJSONString(request)); + if (Objects.isNull(request)) { + throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); + } + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(request.getLineId()); + log.info("lineInfoDO : {}", JSONObject.toJSONString(lineInfoDO)); + if (!Objects.isNull(lineInfoDO) && (WorkflowSubStageStatusEnum.INTENT_5.getCode().equals(lineInfoDO.getWorkflowSubStageStatus())|| + WorkflowSubStageEnum.INTEND.getCode() requestMap = new HashMap<>(); + requestMap.put("partnerUsername", lineInfoParam.getUsername()); + requestMap.put("partnerMobile", lineInfoParam.getMobile()); + requestMap.put("lineId", String.valueOf(lineInfoParam.getId())); + HyOpenAreaInfoDO openAreaInfoDO = openAreaInfoMapper.selectById(lineInfoParam.getWantShopAreaId()); + requestMap.put("regionName", openAreaInfoDO.getAreaName()); + commonService.sendMessage(Collections.singletonList(lineInfoParam.getInvestmentManager()), + MessageEnum.MESSAGE_29, + requestMap); + return Boolean.TRUE; + } + + @Override + protected Boolean auditPass(Long auditId, LineInfoDO lineInfo, String userId) { + WorkflowSubStageEnum workflowSubStageEnum = WorkflowSubStageEnum.getWorkflowSubStageEnum(lineInfo.getWorkflowSubStage()); + WorkflowSubStageEnum nextStage = workflowSubStageEnum.getNextStage(); + //更新线索阶段 + lineInfoDAO.updateWorkflowStage(lineInfo.getId(), nextStage, nextStage.getInitStatus(), userId); + //更新加盟问卷信息 + joinIntentionMapper.updateAuditIdByLineId(auditId, lineInfo.getId()); + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.INTERVIEW_APPOINTMENT_SUCCESS); + return Boolean.TRUE; + } + + @Override + protected Boolean auditReject(Long auditId, LineInfoDO lineInfo, String userId) { + lineInfo.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.INTENT_7.getCode()); + lineInfo.setUpdateUserId(userId); + lineInfoDAO.updateLineInfo(lineInfo); + //更新加盟问卷信息 + joinIntentionMapper.updateAuditIdByLineId(auditId, lineInfo.getId()); + return Boolean.TRUE; + } + + @Override + public PartnerBaseInfoVO getByLineId(Long lineId) { + LineInfoDO byLineId = lineInfoDAO.getLineInfo(lineId); + MemberQuestionDO result = joinIntentionMapper.getByLineId(lineId); + + if (Objects.isNull(byLineId)) { + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + if (Objects.isNull(result)) { + return new PartnerBaseInfoVO(); + } + PartnerBaseInfoVO response = PartnerBaseInfoVO.from(result, byLineId); + HyOpenAreaInfoDO openAreaInfoDO = openAreaInfoMapper.selectById(Long.valueOf(response.getAreaCode())); + response.setArea(openAreaInfoDO.getAreaPath()); + if (Objects.nonNull(result.getAuditId())) { + LineAuditInfoDO lineAuditInfoDO = lineAuditInfoMapper.selectByPrimaryKey(result.getAuditId()); + if (Objects.isNull(lineAuditInfoDO)) { + response.setRejectPublicReason(null); + } + response.setRejectPublicReason(lineAuditInfoDO.getRejectPublicReason()); + } + return response; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/KdzApiServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/KdzApiServiceImpl.java new file mode 100644 index 000000000..07efdca9b --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/KdzApiServiceImpl.java @@ -0,0 +1,80 @@ +package com.cool.store.service.impl; + +import com.cool.store.entity.LicenseTransactDO; +import com.cool.store.entity.ShopInfoDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.LicenseTypeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.ApplyLicenseMapper; +import com.cool.store.mapper.ShopInfoMapper; +import com.cool.store.request.AuditResultRequest; +import com.cool.store.response.LicenseApiResponse; +import com.cool.store.service.KdzApiService; +import com.cool.store.utils.StringUtil; +import com.cool.store.utils.poi.DateUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +@Service +@Slf4j +public class KdzApiServiceImpl implements KdzApiService { + + @Resource + private CommonService commonService; + + @Resource + private ShopInfoMapper shopInfoMapper; + + @Resource + ApplyLicenseMapper applyLicenseMapper; + + @Override + public boolean auditResult(AuditResultRequest request) { + if (Objects.isNull(request) || StringUtil.isBlank(request.getKdzBusinessId())) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + return commonService.getAuditService(request).auditResult(request); + } + + @Override + public LicenseApiResponse license(String storeNum) { + ShopInfoDO shopInfoDO = shopInfoMapper.selectByStoreNum(storeNum); + if (Objects.isNull(shopInfoDO)) { + throw new ServiceException(ErrorCodeEnum.STORE_NUM_NOT_FOUND); + } + Long shopId = shopInfoDO.getId(); + LicenseTransactDO licenseTransactDO = applyLicenseMapper.selectByShopId(shopId); + if (Objects.isNull(licenseTransactDO)) { + throw new ServiceException(ErrorCodeEnum.LICENSE_NOT_EXIST); + } + return convert(licenseTransactDO, storeNum); + } + + public LicenseApiResponse convert(LicenseTransactDO licenseTransactDO, + String storeNum) { + return LicenseApiResponse.builder() + .storeBusinessAdd(licenseTransactDO.getLicenseAddress()) + .storeBusinessDate(DateUtils.dateTime(licenseTransactDO.getIssueTime())) + .storeBusinessImg(licenseTransactDO.getCreditUrl()) + .storeBusinessName(licenseTransactDO.getBusinessLicense()) + .storeBusinessNumber(licenseTransactDO.getCreditCode()) + .storeBusinessType(Objects.requireNonNull(LicenseTypeEnum.match(licenseTransactDO.getLicenseType())).getMessage()) + .storeBusinessValidPeriod(Objects.isNull(licenseTransactDO.getValidity()) ? "9" : DateUtils.dateTime(licenseTransactDO.getValidity())) + .storeCode(storeNum) + .storeDirector(licenseTransactDO.getLicenseLegalPerson()) + .storeFoodLicense(licenseTransactDO.getFoodBusinessLicenseCode()) + .storeFoodLicenseBeginDate(DateUtils.dateTime(licenseTransactDO.getFoodBusinessStartTime())) + .storeFoodLicenseEndDate(DateUtils.dateTime(licenseTransactDO.getFoodBusinessEndTime())) + .storeFoodLicenseBusinessAddress(licenseTransactDO.getFoodLicenseAddress()) + .storeFoodLicenseBusinessScope(licenseTransactDO.getBusinessProject()) + .storeFoodLicenseImg(licenseTransactDO.getFoodBusinessLicenseUrl()) + .storeFoodLicenseLegalRepresentative(licenseTransactDO.getFoodLicenseLegalPerson()) + .storeFoodLicenseMainBusiness(licenseTransactDO.getMainBusiness()) + .storeFoodLicenseOperatorName(licenseTransactDO.getOperator()) + .storeRemark("") + .build(); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelGroupServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelGroupServiceImpl.java new file mode 100644 index 000000000..42f334876 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelGroupServiceImpl.java @@ -0,0 +1,161 @@ +package com.cool.store.service.impl; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.dto.label.LabelGroupAddDTO; +import com.cool.store.dto.label.LabelGroupDeleteDTO; +import com.cool.store.dto.label.LabelGroupListDTO; +import com.cool.store.dto.label.LabelGroupUpdateDTO; +import com.cool.store.entity.HyPartnerLabelGroupDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ApiException; +import com.cool.store.mapper.HyPartnerLabelGroupMapper; +import com.cool.store.mapper.HyPartnerLabelMapper; +import com.cool.store.service.LabelGroupService; +import com.cool.store.vo.LabelGroupListVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +/** + * @author Fun Li 2023/8/10 13:35 + * @version 1.0 + */ +@Service +public class LabelGroupServiceImpl implements LabelGroupService { + + @Autowired + private HyPartnerLabelGroupMapper labelGroupMapper; + + @Autowired + private HyPartnerLabelMapper labelMapper; + + + @Value("${ec.sync.createUserId:null}") + private String createUserId; + + /** + * 查询标签组信息列表 + * @param dto 查询条件 + */ + @Override + public List getLabelGroupList(LabelGroupListDTO dto) { + HyPartnerLabelGroupDO labelGroupDO = new HyPartnerLabelGroupDO(); + labelGroupDO.setLabelGroupName(dto.getLabelGroupName()); + return labelGroupMapper.getLabelGroupList(labelGroupDO); + } + + /** + * 添加标签组 + * @param dto 新增标签组信息 + */ + @Override + public void addLabelGroup(LabelGroupAddDTO dto) throws ApiException { + HyPartnerLabelGroupDO labelGroupDO = new HyPartnerLabelGroupDO(); + labelGroupDO.setLabelGroupName(dto.getLabelGroupName()); + if (whetherGroupDuplicated(labelGroupDO)) { + throw new ApiException(ErrorCodeEnum.LABEL_GROUP_EXIST); + } + String userId = CurrentUserHolder.getUserId(); + labelGroupDO.setEditUserId(userId); + labelGroupDO.setEditDate(new Date()); + labelGroupDO.setCreateUserId(userId); + labelGroupDO.setUpdateUserId(userId); + labelGroupMapper.insertSelective(labelGroupDO); + } + + /** + * 修改标签组信息 + * @param dto 修改内容 + */ + @Override + public void updateLabelGroup(LabelGroupUpdateDTO dto) throws ApiException { + HyPartnerLabelGroupDO labelGroupDO = new HyPartnerLabelGroupDO(); + labelGroupDO.setLabelGroupName(dto.getLabelGroupName()); + labelGroupDO.setId(dto.getId()); + if (whetherGroupDuplicated(labelGroupDO)) { + throw new ApiException(ErrorCodeEnum.LABEL_GROUP_EXIST); + } + String userId = CurrentUserHolder.getUserId(); + labelGroupDO.setId(dto.getId()); + labelGroupDO.setLabelGroupName(dto.getLabelGroupName()); + labelGroupDO.setEditUserId(userId); + labelGroupDO.setEditDate(new Date()); + labelGroupDO.setUpdateUserId(userId); + labelGroupMapper.updateByPrimaryKeySelective(labelGroupDO); + } + + /** + * 删除标签组 + * @param dto 待删除标签组信息 + */ + @Override + public void deleteLabelGroup(LabelGroupDeleteDTO dto) throws ApiException { + if (whetherGroupInUse(dto.getId())) { + throw new ApiException(ErrorCodeEnum.LABEL_GROUP_IN_USE); + } + HyPartnerLabelGroupDO labelGroupDO = new HyPartnerLabelGroupDO(); + String userId = CurrentUserHolder.getUserId(); + labelGroupDO.setId(dto.getId()); + labelGroupDO.setDeleted(Boolean.TRUE); + labelGroupDO.setUpdateUserId(userId); + labelGroupMapper.updateByPrimaryKeySelective(labelGroupDO); + } + + /** + * 获取所有标签组 + */ + @Override + public List getAllLabelGroupList() { + HyPartnerLabelGroupDO labelGroupDO = new HyPartnerLabelGroupDO(); + return labelGroupMapper.getLabelGroupList(labelGroupDO); + } + + @Override + public HyPartnerLabelGroupDO selectByPrimaryKey(Long id){ + return labelGroupMapper.selectByPrimaryKey(id); + } + + @Override + public void addEcLabelGroup(HyPartnerLabelGroupDO hyPartnerLabelGroupDO) { + hyPartnerLabelGroupDO.setCreateTime(new Date()).setCreateUserId(createUserId).setEditDate(new Date()) + .setEditUserId(createUserId); + labelGroupMapper.insertSelective(hyPartnerLabelGroupDO); + } + + /** + * 查询标签组信息列表正序 + */ + @Override + public List getLabelGroupListOrder() { + HyPartnerLabelGroupDO labelGroupDO = new HyPartnerLabelGroupDO(); + return labelGroupMapper.getLabelGroupListOrder(labelGroupDO); + } + + /** + * 某个标签组内是否有未删除的标签 + * @param id 标签组 id + */ + private Boolean whetherGroupInUse(Long id) { + return labelMapper.whetherGroupInUse(id); + } + + private Boolean whetherGroupDuplicated(HyPartnerLabelGroupDO labelGroupDO) { + Long id = labelGroupDO.getId(); + labelGroupDO.setId(null); + List hyPartnerLabelGroupDOS = labelGroupMapper.selectSelective(labelGroupDO); + labelGroupDO.setId(id); + //如果修改后的标签组名与原标签组名一致也不算重复,但是要记录更新人 + if (hyPartnerLabelGroupDOS != null && hyPartnerLabelGroupDOS.size() > 0) { + //更新操作还要检查是否与原标签组信息相同,相同的话也不算重复 + if (hyPartnerLabelGroupDOS.get(0).getId().equals(id)) { + return Boolean.FALSE; + } + return Boolean.TRUE; + } + return Boolean.FALSE; + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelServiceImpl.java new file mode 100644 index 000000000..b740423fc --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelServiceImpl.java @@ -0,0 +1,214 @@ +package com.cool.store.service.impl; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.dto.label.LabelAddDTO; +import com.cool.store.dto.label.LabelDeleteDTO; +import com.cool.store.dto.label.LabelListDTO; +import com.cool.store.dto.label.LabelUpdateDTO; +import com.cool.store.entity.HyPartnerLabelDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ApiException; +import com.cool.store.mapper.HyPartnerLabelMapper; +import com.cool.store.service.LabelService; +import com.cool.store.vo.LabelGroupVO; +import com.cool.store.vo.LabelListVo; +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.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author Fun Li 2023/8/10 14:24 + * @version 1.0 + */ +@Service +@Slf4j +public class LabelServiceImpl implements LabelService { + + @Autowired + private HyPartnerLabelMapper labelMapper; + + + + @Value("${ec.sync.createUserId:null}") + private String createUserId; + + /** + * 获取数组列表 + * + * @param dto 查询条件 + */ + @Override + public List getLabelList(LabelListDTO dto) { + return labelMapper.getLabelList(dto); + } + + /** + * 添加标签组 + * @param dto 新增标签组信息 + */ + @Override + public void addLabel(LabelAddDTO dto) throws ApiException { + HyPartnerLabelDO labelDO = new HyPartnerLabelDO(); + labelDO.setLabelName(dto.getLabelName()); + if (whetherLabelRepeat(labelDO)) { + throw new ApiException(ErrorCodeEnum.LABEL_EXIST); + } + String userId = CurrentUserHolder.getUserId(); + labelDO.setLabelGroupId(dto.getLabelGroupId()); + labelDO.setEditUserId(userId); + labelDO.setEditDate(new Date()); + labelDO.setCreateUserId(userId); + labelDO.setUpdateUserId(userId); + labelMapper.insertSelective(labelDO); + } + + /** + * 修改标签信息 + * @param dto 新标签信息 + */ + @Override + public void updateLabel(LabelUpdateDTO dto) throws ApiException { + HyPartnerLabelDO labelDO = new HyPartnerLabelDO(); + labelDO.setId(dto.getId()); + labelDO.setLabelName(dto.getLabelName()); + if (whetherLabelRepeat(labelDO)) { + throw new ApiException(ErrorCodeEnum.LABEL_EXIST); + } + String userId = CurrentUserHolder.getUserId(); + labelDO.setLabelGroupId(dto.getLabelGroupId()); + labelDO.setEditUserId(userId); + labelDO.setEditDate(new Date()); + labelDO.setUpdateUserId(userId); + labelMapper.updateByPrimaryKeySelective(labelDO); + } + + /** + * 删除标签 + * @param dto + */ + @Override + public void deleteLabel(LabelDeleteDTO dto) { + HyPartnerLabelDO labelDO = new HyPartnerLabelDO(); + String userId = CurrentUserHolder.getUserId(); + labelDO.setId(dto.getId()); + labelDO.setEditUserId(userId); + labelDO.setEditDate(new Date()); + labelDO.setUpdateUserId(userId); + labelDO.setDeleted(Boolean.TRUE); + labelMapper.updateByPrimaryKeySelective(labelDO); + } + + @Override + public HyPartnerLabelDO selectByPrimaryKey(Long classId) { + return labelMapper.selectByPrimaryKey(classId); + } + + @Override + public void addEcLabel(HyPartnerLabelDO hyPartnerLabelDO) { + hyPartnerLabelDO.setEditDate(new Date()).setCreateTime(new Date()).setEditUserId(createUserId).setCreateUserId(createUserId) + .setUpdateUserId(createUserId); + labelMapper.insertSelective(hyPartnerLabelDO); + } + + @Override + public List getAllGroupAndLabelList() { + List labelList = labelMapper.getLabelList(new LabelListDTO()); + if (CollectionUtils.isEmpty(labelList)) { + log.info("标签列表为空"); + return Lists.newArrayList(new LabelGroupVO()); + } + Map> idForVo = labelList.stream().collect(Collectors.groupingBy(LabelListVo::getLabelGroupId)); + List result = idForVo.entrySet().stream().map(entry -> { + LabelGroupVO vo = new LabelGroupVO(); + vo.setId(entry.getKey()); + vo.setLabelGroupName(entry.getValue().get(0).getLabelGroupName()); + vo.setGroupCreateTime(entry.getValue().get(0).getGroupCreateTime()); + List labelList1 = entry.getValue().stream().map(label -> { + LabelGroupVO.LabelVO labelVO = new LabelGroupVO.LabelVO(); + labelVO.setId(label.getId()); + labelVO.setLabelName(label.getLabelName()); + labelVO.setLabelCreateTime(label.getLabelCreateTime()); + return labelVO; + }).sorted(Comparator.comparing(LabelGroupVO.LabelVO::getLabelCreateTime)) + .collect(Collectors.toList()); + vo.setLabelList(labelList1); + return vo; + }).sorted(Comparator.comparing(LabelGroupVO::getGroupCreateTime).thenComparing(LabelGroupVO::getId)).collect(Collectors.toList()); + return result; + } + + private Boolean whetherLabelRepeat(HyPartnerLabelDO label) throws ApiException { + Long id = label.getId(); + label.setId(null); + List hyPartnerLabelDOS = labelMapper.selectSelective(label); + label.setId(id); + //如果修改后的标签名与原标签名一致也不算重复,但是要记录更新人 + if (hyPartnerLabelDOS != null && hyPartnerLabelDOS.size() > 0) { + //更新操作还要检查是否与原标签信息相同,相同的话也不算重复 + if (hyPartnerLabelDOS.get(0).getId().equals(id)) { + return Boolean.FALSE; + } + return Boolean.TRUE; + } + return Boolean.FALSE; + } + + @Override + public Map getUserPortraitMap(List userPortraitStrList){ + if(CollectionUtils.isEmpty(userPortraitStrList)){ + return Maps.newHashMap(); + } + Set userPortraitIdList = new HashSet<>(); + for (String userPortrait:userPortraitStrList) { + if(StringUtils.isBlank(userPortrait)){ + continue; + } + String[] parts = userPortrait.split(","); + for (String part : parts) { + String trimmedPart = part.trim(); + if (!trimmedPart.isEmpty()) { + try { + Long value = Long.parseLong(trimmedPart); + userPortraitIdList.add(value); + } catch (NumberFormatException e) { + log.info("Invalid format: {}" , trimmedPart); + } + } + } + } + List labelListByIds = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(userPortraitIdList)){ + labelListByIds = labelMapper.getLabelListByIds(new ArrayList<>(userPortraitIdList)); + } + return labelListByIds.stream().collect(Collectors.toMap(HyPartnerLabelDO::getId,HyPartnerLabelDO::getLabelName)); + } + + @Override + public List getUserPortraitList(Map userPortraitMap, String userPortraitStr) { + List userPortraitList= new ArrayList<>(); + if(StringUtils.isNotEmpty(userPortraitStr)){ + String[] parts = userPortraitStr.split(","); + for (String part : parts) { + String trimmedPart = part.trim(); + if (!trimmedPart.isEmpty()) { + try { + if (userPortraitMap.get(Long.valueOf(part)) != null){ + userPortraitList.add(userPortraitMap.get(Long.valueOf(part))); + } + } catch (NumberFormatException e) { + log.info("Invalid format: {}" , trimmedPart); + } + } + } + } + return userPortraitList; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineFlowService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineFlowService.java new file mode 100644 index 000000000..e346d3c40 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineFlowService.java @@ -0,0 +1,131 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.LineAuditInfoDAO; +import com.cool.store.dao.LineInfoDAO; +import com.cool.store.entity.LineAuditInfoDO; +import com.cool.store.entity.LineInfoDO; +import com.cool.store.enums.AuditResultTypeEnum; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.LineStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.AuditCloseRequest; +import com.cool.store.request.AuditPassRequest; +import com.cool.store.request.AuditRejectRequest; +import com.cool.store.request.LineFollowLogRequest; +import com.cool.store.service.LineFollowService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +/** + * @author zhangchenbiao + * @FileName: LineFlowService + * @Description: + * @date 2024-03-20 14:32 + */ +@Service("lineFlowService") +public abstract class LineFlowService { + + @Resource + private LineAuditInfoDAO lineAuditInfoDAO; + @Resource + private LineInfoDAO lineInfoDAO; + @Resource + private LineFollowService lineFollowService; + + /** + * 审核通过 + * @param request + * @return + */ + @Transactional(rollbackFor = Exception.class) + public Boolean auditPass(AuditPassRequest request,String userId){ + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId()); + if(!lineInfo.getWorkflowSubStage().equals(request.getWorkflowSubStage())){ + throw new ServiceException(ErrorCodeEnum.WORK_FLOW_STAGE_PASS_ERROR); + } + String partnerId = lineInfo.getPartnerId(); + LineAuditInfoDO auditInfo = new LineAuditInfoDO(); + auditInfo.setLineId(request.getLineId()); + auditInfo.setPartnerId(partnerId); + auditInfo.setResultType(AuditResultTypeEnum.PASS.getCode()); + auditInfo.setPassReason(request.getPassReason()); + auditInfo.setCertifyFile(JSONObject.toJSONString(request.getCertifyFile())); + Long auditId = lineAuditInfoDAO.addAuditInfo(auditInfo); + return auditPass(auditId, lineInfo,userId); + } + + /** + * 审核拒绝 + * @param request + * @return + */ + @Transactional(rollbackFor = Exception.class) + public Boolean auditReject(AuditRejectRequest request,String userId){ + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId()); + if(!lineInfo.getWorkflowSubStage().equals(request.getWorkflowSubStage())){ + throw new ServiceException(ErrorCodeEnum.WORK_FLOW_STAGE_PASS_ERROR); + } + String partnerId = lineInfo.getPartnerId(); + LineAuditInfoDO auditInfo = new LineAuditInfoDO(); + auditInfo.setLineId(request.getLineId()); + auditInfo.setPartnerId(partnerId); + auditInfo.setResultType(AuditResultTypeEnum.REJECT.getCode()); + auditInfo.setRejectPublicReason(request.getRejectPublicReason()); + auditInfo.setRejectRealReason(request.getRejectRealReason()); + auditInfo.setCertifyFile(JSONObject.toJSONString(request.getCertifyFile())); + Long auditId = lineAuditInfoDAO.addAuditInfo(auditInfo); + return auditReject(auditId, lineInfo,userId); + } + + /** + * 结束跟进 + * @param request + * @return + */ + @Transactional(rollbackFor = Exception.class) + public Boolean auditClose(AuditCloseRequest request, LoginUserInfo user){ + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId()); + String partnerId = lineInfo.getPartnerId(); + LineAuditInfoDO auditInfo = new LineAuditInfoDO(); + auditInfo.setLineId(request.getLineId()); + auditInfo.setPartnerId(partnerId); + auditInfo.setResultType(AuditResultTypeEnum.CLOSE.getCode()); + auditInfo.setRejectPublicReason(request.getRejectPublicReason()); + auditInfo.setRejectRealReason(request.getRejectRealReason()); + auditInfo.setCertifyFile(JSONObject.toJSONString(request.getCertifyFile())); + lineAuditInfoDAO.addAuditInfo(auditInfo); + LineInfoDO updateLineInfo = new LineInfoDO(); + updateLineInfo.setId(request.getLineId()); + updateLineInfo.setUpdateUserId(user.getUserId()); + updateLineInfo.setLineStatus(LineStatusEnum.PUBLIC_SEAS.getCode()); + lineInfoDAO.updateLineInfo(updateLineInfo); + LineFollowLogRequest lineFollowLogRequest = new LineFollowLogRequest(); + lineFollowLogRequest.setLineId(request.getLineId()); + lineFollowLogRequest.setMessage(String.format("结束跟进原因:%s", request.getRejectRealReason())); + lineFollowService.addFollowLog(lineFollowLogRequest,user.getUserId(),user.getName()); + return Boolean.TRUE; + } + + /** + * 审核通过 流转到下一阶段 + * @param auditId + * @param lineInfo + * @return + */ + protected abstract Boolean auditPass(Long auditId, LineInfoDO lineInfo,String userId); + + /** + * 审核拒绝 + * @param auditId + * @param lineInfo + * @return + */ + protected abstract Boolean auditReject(Long auditId, LineInfoDO lineInfo,String userId); + + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineFollowServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineFollowServiceImpl.java new file mode 100644 index 000000000..222e1035f --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineFollowServiceImpl.java @@ -0,0 +1,51 @@ +package com.cool.store.service.impl; + +import com.cool.store.dao.LineFollowLogDAO; +import com.cool.store.dao.LineInfoDAO; +import com.cool.store.entity.LineFollowLogDO; +import com.cool.store.entity.LineInfoDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.LineFollowLogRequest; +import com.cool.store.service.LineFollowService; +import com.cool.store.vo.log.LineFollowLogVO; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageInfo; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: LineFollowServiceImpl + * @Description: + * @date 2024-03-27 14:49 + */ +@Service +public class LineFollowServiceImpl implements LineFollowService { + + @Resource + private LineFollowLogDAO lineFollowLogDAO; + @Resource + private LineInfoDAO lineInfoDAO; + + @Override + public PageInfo getFollowLogPage(Long lineId, Integer pageNum, Integer pageSize) { + Page followLogPage = lineFollowLogDAO.getFollowLogPage(lineId, pageNum, pageSize); + PageInfo resultPage = new PageInfo(followLogPage); + List resultList = LineFollowLogVO.convertList(followLogPage); + resultPage.setList(resultList); + return resultPage; + } + + @Override + public Long addFollowLog(LineFollowLogRequest followLog, String operateUserId, String operateUsername) { + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(followLog.getLineId()); + if(Objects.isNull(lineInfo)){ + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + return lineFollowLogDAO.addFollowLog(lineInfo, operateUserId, operateUsername, followLog.getMessage()); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineInterviewServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineInterviewServiceImpl.java new file mode 100644 index 000000000..14e1ff89d --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineInterviewServiceImpl.java @@ -0,0 +1,519 @@ +package com.cool.store.service.impl; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; +import com.cool.store.dao.*; +import com.cool.store.dto.interview.LineInterviewPageDTO; +import com.cool.store.entity.*; +import com.cool.store.enums.*; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.AuditStatusMapper; +import com.cool.store.request.*; +import com.cool.store.service.*; +import com.cool.store.utils.TRTCUtils; +import com.cool.store.utils.UUIDUtils; +import com.cool.store.utils.poi.DateUtils; +import com.cool.store.vo.LineAuditInfoVO; +import com.cool.store.vo.interview.*; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.Pair; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author zhangchenbiao + * @FileName: LineInterviewServiceImpl + * @Description: + * @date 2024-03-15 16:04 + */ +@Slf4j +@Service +public class LineInterviewServiceImpl extends LineFlowService implements LineInterviewService { + + @Value("${trtc.sdkAppId}") + private Long sdkAppId; + @Value("${trtc.secretKey}") + private String key; + @Resource + private LineInfoDAO lineInfoDAO; + @Resource + private LineInterviewDAO lineInterviewDAO; + @Resource + private LineCalendarsEventDAO lineCalendarsEventDAO; + @Resource + private LabelService labelService; + @Resource + private EnterpriseUserDAO enterpriseUserDAO; + @Resource + private HyOpenAreaInfoDAO hyOpenAreaInfoDAO; + @Resource + private LineAuditInfoDAO lineAuditInfoDAO; + @Resource + private CommonService commonService; + @Resource + private UserAuthMappingService userAuthMappingService; + @Resource + private SysRoleService sysRoleService; + @Resource + private TransferLogService transferLogService; + @Resource + private HyPartnerUserChannelDAO hyPartnerUserChannelDAO; + @Resource + private ShopService shopService; + + @Resource + AuditStatusService auditStatusService; + + @Override + public List getAppointmentTime(Long lineId, Integer interviewType, LocalDate appointmentDate) { + InterviewTypeEnum interviewTypeEnum = InterviewTypeEnum.match(interviewType); + List> timeSlots = InterviewTypeEnum.getTimeSlots(interviewTypeEnum, appointmentDate); + List eventList = null; + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId); + if(Objects.isNull(lineInfo)){ + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + //如果是面谈 获取招商经理的时间 如果是面试 获取大区的时间 + if(InterviewTypeEnum.MEET.equals(interviewTypeEnum)){ + eventList = lineCalendarsEventDAO.getInterviewerLineCalendarsEvent(lineInfo.getInvestmentManager(), appointmentDate); + }else{ + eventList = lineCalendarsEventDAO.getRegionLineCalendarsEvent(lineInfo.getRegionId(), appointmentDate); + } + List resultList = AppointmentTimeVO.getAppointmentTime(appointmentDate, timeSlots, eventList); + return resultList; + } + + @Override + public List getAppointmentTime(Long lineId, Integer interviewType, LocalDate appointmentStartDate, LocalDate appointmentEndDate) { + if(Objects.isNull(lineId) || Objects.isNull(interviewType) || Objects.isNull(appointmentStartDate) || Objects.isNull(appointmentEndDate)){ + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + List resultList = new ArrayList<>(); + while (appointmentEndDate.isAfter(appointmentStartDate) || appointmentStartDate.equals(appointmentEndDate)){ + List appointmentTime = getAppointmentTime(lineId, interviewType, appointmentStartDate); + AppointmentTimeListVO appointmentTimeList = new AppointmentTimeListVO(appointmentStartDate.toString(), appointmentStartDate.getDayOfWeek().getValue(), appointmentTime); + resultList.add(appointmentTimeList); + appointmentStartDate = appointmentStartDate.plusDays(1); + } + return resultList; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean appointmentTime(AppointmentTimeRequest request) { + Date startTime = DateUtils.strToDate(request.getStartTime(), DateUtils.YYYY_MM_DD_HH_MM_SS); + Date endTime = DateUtils.strToDate(request.getEndTime(), DateUtils.YYYY_MM_DD_HH_MM_SS); + Date now = new Date(); + if(now.getTime() >= startTime.getTime()){ + throw new ServiceException(ErrorCodeEnum.APPOINTMENT_TIME_FAIL); + } + //查询线索信息 + //如果是面谈获取招商经理 如果是面试获取大区经理 + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId()); + if(Objects.isNull(lineInfo)){ + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + //判断是否存在当前类型的面审如果存在 删除面审信息 生成新的面审 + if(!WorkflowSubStageEnum.isInterviewStage(lineInfo.getWorkflowSubStage())){ + log.info("线索当前所处阶段不可预约日程"); + throw new ServiceException(ErrorCodeEnum.LINE_STATUS_NOT_ALLOW_OPERATE); + } + InterviewTypeEnum interviewType = WorkflowSubStageEnum.getInterviewType(lineInfo.getWorkflowSubStage()); + String interviewerUserId = lineInfo.getInvestmentManager(), firstInterviewer = null, secondInterviewer = null; + if(!InterviewTypeEnum.MEET.equals(interviewType)){ + EnterpriseUserDO enterpriseUser = userAuthMappingService.getUserByRoleEnumAndWantShopAreaId(UserRoleEnum.REGION_MANAGER, lineInfo.getWantShopAreaId()); + interviewerUserId = Optional.ofNullable(enterpriseUser).map(EnterpriseUserDO::getUserId).orElse(null); + } + firstInterviewer = InterviewTypeEnum.INTERVIEW.equals(interviewType) ? interviewerUserId : null; + secondInterviewer = InterviewTypeEnum.SECOND_INTERVIEW.equals(interviewType) ? interviewerUserId : null; + Boolean occupied = lineCalendarsEventDAO.isOccupied(interviewType.getCode(), lineInfo.getRegionId(), interviewerUserId, request.getStartTime(), request.getEndTime(), null); + if(occupied){ + throw new ServiceException(ErrorCodeEnum.TIME_OCCUPIED); + } + LineCalendarsEventDO calendarsEvent = LineCalendarsEventDO.convertDO(lineInfo, interviewType.getCode(), startTime, endTime, interviewerUserId); + Long eventId = lineCalendarsEventDAO.addCalendarsEvent(calendarsEvent); + WorkflowSubStageStatusEnum workflowSubStageStatus = InterviewTypeEnum.getWorkflowSubStageStatus(interviewType); + //跟新线索状态为已预约 + lineInfoDAO.updateWorkflowStageAndInterviewer(lineInfo.getId(), workflowSubStageStatus, firstInterviewer, secondInterviewer); + LineInterviewDO interviewInfo = lineInterviewDAO.getInterviewInfo(lineInfo.getId(), interviewType); + if(Objects.nonNull(interviewInfo)){ + if(!WorkflowSubStageStatusEnum.isReappointmentStatus(lineInfo.getWorkflowSubStageStatus())){ + log.info("当前线索状态不是重新预约状态"); + throw new ServiceException(ErrorCodeEnum.LINE_STATUS_NOT_ALLOW_OPERATE); + } + //删除该面试记录 + lineInterviewDAO.deleteInterviewInfo(interviewInfo.getId()); + } + LineInterviewDO addInterview = LineInterviewDO.convertDO(lineInfo, startTime, endTime, UUIDUtils.get8UUID(), interviewerUserId, interviewType.getCode(), eventId); + lineInterviewDAO.addInterviewInfo(addInterview); + MessageEnum messageEnum = MessageEnum.MESSAGE_2; + MessageEnum investmentManagerMessageEnum = null; + if(InterviewTypeEnum.INTERVIEW.equals(interviewType)){ + messageEnum = MessageEnum.MESSAGE_3; + investmentManagerMessageEnum = MessageEnum.MESSAGE_3_1; + } + if(InterviewTypeEnum.SECOND_INTERVIEW.equals(interviewType)){ + messageEnum = MessageEnum.MESSAGE_10; + investmentManagerMessageEnum = MessageEnum.MESSAGE_10_1; + } + Map messageMap = new HashMap<>(); + messageMap.put("lineId", String.valueOf(lineInfo.getId())); + messageMap.put("partnerUsername", lineInfo.getUsername()); + messageMap.put("appointmentTime", DateUtils.parseDateToStr(DateUtils.NOTICE_DATE, startTime)); + messageMap.put("interviewUsername", enterpriseUserDAO.getUserName(interviewerUserId)); + commonService.sendMessage(Arrays.asList(interviewerUserId), messageEnum, messageMap); + if(Objects.nonNull(investmentManagerMessageEnum)){ + commonService.sendMessage(Arrays.asList(lineInfo.getInvestmentManager()), investmentManagerMessageEnum, messageMap); + } + return Boolean.TRUE; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean modifyAppointmentTime(AppointmentTimeRequest request) { + Date startTime = DateUtils.strToDate(request.getStartTime(), DateUtils.YYYY_MM_DD_HH_MM_SS); + Date endTime = DateUtils.strToDate(request.getEndTime(), DateUtils.YYYY_MM_DD_HH_MM_SS); + Date nowTime = new Date(); + if(nowTime.getTime() >= startTime.getTime()){ + throw new ServiceException(ErrorCodeEnum.APPOINTMENT_TIME_FAIL); + } + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId()); + if(Objects.isNull(lineInfo)){ + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + if(!WorkflowSubStageEnum.isInterviewStage(lineInfo.getWorkflowSubStage())){ + //当前线索状态不允许修改面审时间 + log.info("当前线索所处阶段不允许修改面审时间"); + throw new ServiceException(ErrorCodeEnum.LINE_STATUS_NOT_ALLOW_OPERATE); + } + if(!WorkflowSubStageStatusEnum.isModifyAppointmentTime(lineInfo.getWorkflowSubStageStatus())){ + log.info("当前线索所处子状态不允许修改面审时间"); + throw new ServiceException(ErrorCodeEnum.LINE_STATUS_NOT_ALLOW_OPERATE); + } + InterviewTypeEnum interviewType = WorkflowSubStageEnum.getInterviewType(lineInfo.getWorkflowSubStage()); + LineInterviewDO interviewInfo = lineInterviewDAO.getInterviewInfo(request.getLineId(), interviewType); + if(Objects.isNull(interviewInfo)){ + throw new ServiceException(ErrorCodeEnum.INTERVIEW_NOT_EXIST); + } + Boolean occupied = lineCalendarsEventDAO.isOccupied(interviewType.getCode(), lineInfo.getRegionId(), interviewInfo.getInterviewerUserId(), request.getStartTime(), request.getEndTime(), interviewInfo.getId()); + if(occupied){ + throw new ServiceException(ErrorCodeEnum.TIME_OCCUPIED); + } + LocalDateTime startDateTime = LocalDateTime.ofInstant(startTime.toInstant(), ZoneId.systemDefault()).minusMinutes(10); + LocalDateTime now = LocalDateTime.ofInstant(new Date().toInstant(), ZoneId.systemDefault()); + if(startDateTime.isBefore(now)){ + throw new ServiceException(ErrorCodeEnum.FEISHU_UPDATE_SCHEDULE_ERROR); + } + LineInterviewDO updateInterview = new LineInterviewDO(); + updateInterview.setId(interviewInfo.getId()); + updateInterview.setInterviewDate(startTime); + updateInterview.setStartTime(startTime); + updateInterview.setEndTime(endTime); + lineInterviewDAO.updateInterviewInfo(updateInterview); + LineCalendarsEventDO updateEvent = new LineCalendarsEventDO(); + updateEvent.setId(interviewInfo.getCalendarsEventId()); + updateEvent.setStartTime(startTime); + updateEvent.setEndTime(endTime); + updateEvent.setInterviewDate(startTime); + lineCalendarsEventDAO.updateCalendarsEvent(updateEvent); + Map templateParam = new HashMap<>(); + templateParam.put("interviewTime", DateUtils.parseDateToStr(DateUtils.NOTICE_DATE, startTime)); + SMSMsgEnum smsMsgEnum = null; + if(InterviewTypeEnum.MEET.equals(interviewType)){ + smsMsgEnum = SMSMsgEnum.INTERVIEW_TIME_MODIFY; + } + if(InterviewTypeEnum.INTERVIEW.equals(interviewType)){ + smsMsgEnum = SMSMsgEnum.FIRST_INTERVIEW_TIME_MODIFY; + } + if(InterviewTypeEnum.SECOND_INTERVIEW.equals(interviewType)){ + smsMsgEnum = SMSMsgEnum.SECOND_INTERVIEW_TIME_MODIFY; + } + commonService.sendSms(lineInfo.getMobile(), smsMsgEnum, templateParam); + return true; + } + + @Override + public Boolean modifyInterviewer(ModifyInterviewerRequest request) { + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId()); + if(Objects.isNull(lineInfo)){ + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + InterviewTypeEnum interviewType = InterviewTypeEnum.match(request.getInterviewType()); + LineInterviewDO interviewInfo = lineInterviewDAO.getInterviewInfo(request.getLineId(), interviewType); + if(Objects.isNull(interviewInfo)){ + throw new ServiceException(ErrorCodeEnum.INTERVIEW_NOT_EXIST); + } + LineInterviewDO updateInterview = new LineInterviewDO(); + updateInterview.setId(interviewInfo.getId()); + updateInterview.setInterviewerUserId(request.getInterviewerUserId()); + lineInterviewDAO.updateInterviewInfo(updateInterview); + LineCalendarsEventDO update = new LineCalendarsEventDO(); + update.setId(interviewInfo.getCalendarsEventId()); + update.setInterviewerUserId(request.getInterviewerUserId()); + lineCalendarsEventDAO.updateCalendarsEvent(update); + LineInfoDO updateLineInfo = new LineInfoDO(); + updateLineInfo.setId(request.getLineId()); + if(InterviewTypeEnum.INTERVIEW.equals(interviewType)){ + updateLineInfo.setFirstInterviewer(request.getInterviewerUserId()); + } + if(InterviewTypeEnum.SECOND_INTERVIEW.equals(interviewType)){ + updateLineInfo.setSecondInterviewer(request.getInterviewerUserId()); + } + lineInfoDAO.updateLineInfo(updateLineInfo); + transferLogService.addLog(lineInfo, request.getOperatorUserId(), request.getInterviewerUserId(), OperationLogTypeEnum.ENTRUST_INTERVIEW); + return true; + } + + @Override + public PageInfo getInterviewerPage(LineInterviewPageRequest request, String userId, Boolean isTeam) { + if(isTeam && !sysRoleService.checkIsAdmin(userId)){ + List wantShopAreaIds = userAuthMappingService.listWantShopAreaIdByUserId(userId); + if(CollectionUtils.isEmpty(wantShopAreaIds)){ + request.setInterviewerUserId(userId); + }else{ + request.setWantShopAreaIds(wantShopAreaIds); + } + } + if(Objects.nonNull(request.getWantShopAreaId())){ + HyOpenAreaInfoDO areaInfo = hyOpenAreaInfoDAO.selectById(request.getWantShopAreaId()); + if(Objects.nonNull(areaInfo)){ + request.setAreaPath(areaInfo.getAreaPath()); + } + } + Page pageInfo = lineInterviewDAO.getInterviewerPage(request); + List userPortraitList = pageInfo.stream().filter(x -> StringUtils.isNotEmpty(x.getUserPortrait() )).map(LineInterviewPageDTO::getUserPortrait).collect(Collectors.toList()); + List investmentManagerUserIds = pageInfo.stream().filter(x -> StringUtils.isNotEmpty(x.getInvestmentManager() )).map(LineInterviewPageDTO::getInvestmentManager).collect(Collectors.toList()); + List interviewerUserIds = pageInfo.stream().filter(x -> StringUtils.isNotEmpty(x.getInterviewerUserId() )).map(LineInterviewPageDTO::getInterviewerUserId).collect(Collectors.toList()); + List wantShopAreaIds = pageInfo.stream().filter(x -> Objects.nonNull(x.getWantShopAreaId() )).map(LineInterviewPageDTO::getWantShopAreaId).collect(Collectors.toList()); + List lineSourceIds = pageInfo.stream().filter(lineInfoDO -> lineInfoDO.getLineSource() != null).map(LineInterviewPageDTO::getLineSource).collect(Collectors.toList()); + Map cityNameMap = hyOpenAreaInfoDAO.selectNameMapByIds(wantShopAreaIds); + List userIds = Stream.concat(investmentManagerUserIds.stream(), interviewerUserIds.stream()).distinct().collect(Collectors.toList()); + Map userNameMap = enterpriseUserDAO.getUserNameMap(userIds); + Map userPortraitMap = labelService.getUserPortraitMap(userPortraitList); + Map channelMap = hyPartnerUserChannelDAO.getChannelMapByIds(lineSourceIds); + List resultList = LineInterviewPageVO.convertList(pageInfo, userPortraitMap, userNameMap, cityNameMap, channelMap); + PageInfo resultPage = new PageInfo(pageInfo); + resultPage.setList(resultList); + return resultPage; + } + + @Override + public EnterInterviewVO enterInterviewRoom(Long interviewId, String interviewUserId, InterviewUserTypeEnum userType) { + LineInterviewDO interviewInfo = lineInterviewDAO.getInterviewInfoById(interviewId); + if(Objects.isNull(interviewInfo)){ + throw new ServiceException(ErrorCodeEnum.INTERVIEW_NOT_EXIST); + } + //已关闭就禁止进入房间了 + if (interviewInfo.getRoomStatus().equals(RoomStatus.CLOSED.getCode())) { + throw new ServiceException(ErrorCodeEnum.ROOM_STATUS_ERROR); + } + if(InterviewUserTypeEnum.INTERVIEWER.equals(userType) && !interviewUserId.equals(interviewInfo.getInterviewerUserId())){ + throw new ServiceException(ErrorCodeEnum.USER_NOT_ALLOW_ENTER_ROOM); + } + if(InterviewUserTypeEnum.LINE.equals(userType) && !interviewUserId.equals(interviewInfo.getPartnerId())){ + throw new ServiceException(ErrorCodeEnum.USER_NOT_ALLOW_ENTER_ROOM); + } + String userName = enterpriseUserDAO.getUserName(interviewInfo.getInterviewerUserId()); + Long lineId = interviewInfo.getLineId(); + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId); + if(Objects.isNull(lineInfo)){ + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + Integer joinInterviewStatus = JoinInterviewStatusEnum.getJoinInterviewStatus(interviewInfo.getJoinInterviewStatus(), userType); + if(Objects.isNull(interviewInfo.getActualStartTime())){ + interviewInfo.setActualStartTime(new Date()); + } + interviewInfo.setRoomStatus(RoomStatus.OPEN.getCode()); + interviewInfo.setJoinInterviewStatus(joinInterviewStatus); + lineInterviewDAO.updateInterviewInfo(interviewInfo); + String userSig = TRTCUtils.genUserSig(sdkAppId, key, interviewUserId); + return new EnterInterviewVO(interviewInfo.getLineId(), lineInfo.getPartnerId(), interviewInfo.getRoomId(), userSig, interviewInfo.getInterviewerUserId(), userName, lineInfo.getUsername()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer finishInterview(Long interviewId, String userId) { + LineInterviewDO interviewInfo = lineInterviewDAO.getInterviewInfoById(interviewId); + if(Objects.isNull(interviewInfo)){ + throw new ServiceException(ErrorCodeEnum.INTERVIEW_NOT_EXIST); + } + //已关闭就禁止进入房间了 + if (interviewInfo.getRoomStatus().equals(RoomStatus.CLOSED.getCode())) { + throw new ServiceException(ErrorCodeEnum.ROOM_STATUS_ERROR); + } + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(interviewInfo.getLineId()); + if(!WorkflowSubStageEnum.isReappointmentStage(lineInfo.getWorkflowSubStage())){ + throw new ServiceException(ErrorCodeEnum.LINE_STATUS_NOT_ALLOW_OPERATE); + } + LineInterviewDO updateInterviewInfo = new LineInterviewDO(); + updateInterviewInfo.setId(interviewId); + updateInterviewInfo.setRoomStatus(RoomStatus.CLOSED.getCode()); + updateInterviewInfo.setActualEndTime(new Date()); + updateInterviewInfo.setInterviewStatus(InterviewStatusEnum.WAIT_AUDIT.getCode()); + //更新线索状态 + WorkflowSubStageStatusEnum workflowSubStageStatus = null; + if(InterviewTypeEnum.INTERVIEW.getCode().equals(interviewInfo.getInterviewType())){ + workflowSubStageStatus = WorkflowSubStageStatusEnum.FIRST_INTERVIEWS_35; + } + if(InterviewTypeEnum.SECOND_INTERVIEW.getCode().equals(interviewInfo.getInterviewType())){ + workflowSubStageStatus = WorkflowSubStageStatusEnum.SECOND_INTERVIEWS_110; + } + lineInfoDAO.updateWorkflowStage(interviewInfo.getLineId(), null, workflowSubStageStatus,userId); + return lineInterviewDAO.updateInterviewInfo(updateInterviewInfo); + } + + @Override + public InterviewDetailVO getInterviewDetail(Long lineId, Integer interviewType) { + InterviewTypeEnum interviewTypeEnum = InterviewTypeEnum.match(interviewType); + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId); + LineInterviewDO interviewInfo = lineInterviewDAO.getInterviewInfo(lineId, interviewTypeEnum); + if(Objects.isNull(lineInfo) || Objects.isNull(interviewInfo)){ + return null; + } + InterviewDetailVO result = InterviewDetailVO.convertVO(lineInfo, interviewInfo); + result.setInterviewerUsername(enterpriseUserDAO.getUserName(interviewInfo.getInterviewerUserId())); + Long auditId = interviewInfo.getAuditId(); + if(Objects.nonNull(auditId) && auditId > CommonConstants.ZERO_LONG){ + LineAuditInfoDO auditInfo = lineAuditInfoDAO.getAuditInfo(auditId); + result.setAuditInfo(LineAuditInfoVO.convertVO(auditInfo)); + } + return result; + } + + @Override + public Integer uploadVideo(Long interviewId, List videoUrlList) { + LineInterviewDO interviewInfo = lineInterviewDAO.getInterviewInfoById(interviewId); + if(Objects.isNull(interviewInfo)){ + throw new ServiceException(ErrorCodeEnum.INTERVIEW_NOT_EXIST); + } + List videoList = JSONObject.parseArray(interviewInfo.getVideoUrl(), String.class); + if(videoList == null){ + videoList = new ArrayList<>(); + } + videoList.addAll(videoUrlList); + LineInterviewDO updateInterviewInfo = new LineInterviewDO(); + updateInterviewInfo.setId(interviewId); + updateInterviewInfo.setVideoUrl(JSONObject.toJSONString(videoList.stream().distinct().collect(Collectors.toList()))); + return lineInterviewDAO.updateInterviewInfo(updateInterviewInfo); + } + + @Override + public Integer reappointment(Long lineId) { + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId); + if(Objects.isNull(lineInfo)){ + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + if(!WorkflowSubStageEnum.isReappointmentStage(lineInfo.getWorkflowSubStage())){ + log.info("当前线索状态不允许重新预约"); + throw new ServiceException(ErrorCodeEnum.LINE_STATUS_NOT_ALLOW_OPERATE); + } + WorkflowSubStageStatusEnum workflowSubStageStatus = null; + if(WorkflowSubStageEnum.FIRST_INTERVIEWS.getCode().equals(lineInfo.getWorkflowSubStage())){ + workflowSubStageStatus = WorkflowSubStageStatusEnum.FIRST_INTERVIEWS_42; + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.FIRST_INTERVIEW_REAPPOINTMENT, null); + } + if(WorkflowSubStageEnum.SECOND_INTERVIEWS.getCode().equals(lineInfo.getWorkflowSubStage())){ + workflowSubStageStatus = WorkflowSubStageStatusEnum.SECOND_INTERVIEWS_120; + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.SECOND_INTERVIEW_REAPPOINTMENT, null); + } + return lineInfoDAO.updateWorkflowStage(lineInfo.getId(), null, workflowSubStageStatus,null); + } + + @Override + protected Boolean auditPass(Long auditId, LineInfoDO lineInfo, String userId) { + InterviewTypeEnum interviewType = WorkflowSubStageEnum.getInterviewType(lineInfo.getWorkflowSubStage()); + WorkflowSubStageEnum workflowSubStageEnum = WorkflowSubStageEnum.getWorkflowSubStageEnum(lineInfo.getWorkflowSubStage()); + WorkflowSubStageEnum nextStage = workflowSubStageEnum.getNextStage(); + LineInterviewDO interviewInfo = lineInterviewDAO.getInterviewInfo(lineInfo.getId(), interviewType); + if(Objects.isNull(interviewInfo)){ + throw new ServiceException(ErrorCodeEnum.INTERVIEW_NOT_EXIST); + } + if(!InterviewStatusEnum.WAIT_AUDIT.getCode().equals(interviewInfo.getInterviewStatus())){ + throw new ServiceException(ErrorCodeEnum.INTERVIEW_STATUS_WAS_AUDITED); + } + LineInterviewDO updateInterviewInfo = new LineInterviewDO(); + updateInterviewInfo.setId(interviewInfo.getId()); + updateInterviewInfo.setAuditId(auditId); + updateInterviewInfo.setInterviewStatus(InterviewStatusEnum.PASS.getCode()); + if(WorkflowSubStageEnum.INVITING_INTERVIEWS.equals(workflowSubStageEnum)){ + //更新线索阶段 + lineInfoDAO.updateWorkflowStage(lineInfo.getId(), nextStage, nextStage.getInitStatus(),userId); + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.FIRST_INTERVIEW_APPOINTMENT_SUCCESS, null); + } + if(WorkflowSubStageEnum.FIRST_INTERVIEWS.equals(workflowSubStageEnum)){ + //更新线索阶段 + lineInfoDAO.updateWorkflowStage(lineInfo.getId(), nextStage, nextStage.getInitStatus(),userId); + //一审稽核 + auditStatusService.insert(lineInfo.getId(),interviewInfo.getId(),auditId,AuditStageEnum.ONE.getCode()); + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.INTENTION_PAYMENT, null); + } + if(WorkflowSubStageEnum.SECOND_INTERVIEWS.equals(workflowSubStageEnum)){ + LineInfoDO updateLine = new LineInfoDO(); + updateLine.setId(lineInfo.getId()); + updateLine.setWorkflowStage(WorkflowStageEnum.STORE.getCode()); + updateLine.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.SECOND_INTERVIEWS_125.getCode()); + EnterpriseUserDO enterpriseUser = userAuthMappingService.getUserByRoleEnumAndWantShopAreaId(UserRoleEnum.SELECT_SITE_COMMISSIONER, lineInfo.getWantShopAreaId()); + String developmentManager = Optional.ofNullable(enterpriseUser).map(EnterpriseUserDO::getUserId).orElse(null); + updateLine.setDevelopmentManager(developmentManager); + updateLine.setUpdateUserId(userId); + lineInfoDAO.updateLineInfo(updateLine); + //初始化店铺 + shopService.initShop(lineInfo); + //发送短信 + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.TRAINING_REGISTER_SUCCESS, null); + //二审稽核 + auditStatusService.insert(lineInfo.getId(),interviewInfo.getId(),auditId,AuditStageEnum.TWO.getCode()); + //发送短信 + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.SECOND_INTERVIEW_SUCCESS, null); + String wantShopName = hyOpenAreaInfoDAO.selectNameMapById(lineInfo.getWantShopAreaId()); + Map messageMap = new HashMap<>(); + messageMap.put("lineId", String.valueOf(lineInfo.getId())); + messageMap.put("partnerUsername", lineInfo.getUsername()); + messageMap.put("partnerMobile", lineInfo.getMobile()); + messageMap.put("wantShopName", wantShopName); + commonService.sendMessage(Arrays.asList(developmentManager), MessageEnum.MESSAGE_14, messageMap); + } + return lineInterviewDAO.updateInterviewInfo(updateInterviewInfo) > 0; + } + + @Override + protected Boolean auditReject(Long auditId, LineInfoDO lineInfo,String userId) { + InterviewTypeEnum interviewType = WorkflowSubStageEnum.getInterviewType(lineInfo.getWorkflowSubStage()); + if(InterviewTypeEnum.MEET.equals(interviewType)){ + return Boolean.FALSE; + } + LineInterviewDO interviewInfo = lineInterviewDAO.getInterviewInfo(lineInfo.getId(), interviewType); + if(Objects.isNull(interviewInfo)){ + throw new ServiceException(ErrorCodeEnum.INTERVIEW_NOT_EXIST); + } + LineInterviewDO updateInterviewInfo = new LineInterviewDO(); + updateInterviewInfo.setId(interviewInfo.getId()); + updateInterviewInfo.setAuditId(auditId); + updateInterviewInfo.setInterviewStatus(InterviewStatusEnum.NOT_PASS.getCode()); + lineInfoDAO.updateWorkflowStage(lineInfo.getId(), null, WorkflowSubStageStatusEnum.getInterviewRejectStatus(interviewType),userId); + String noticeTime = DateUtils.parseDateToStr(DateUtils.NOTICE_DATE, interviewInfo.getStartTime()); + String interviewUserName = enterpriseUserDAO.getUserName(interviewInfo.getInterviewerUserId()); + Map messageMap = new HashMap<>(); + messageMap.put("lineId", String.valueOf(lineInfo.getId())); + messageMap.put("partnerUsername", lineInfo.getUsername()); + messageMap.put("interviewTime", noticeTime); + messageMap.put("interviewUsername", interviewUserName); + commonService.sendMessage(Arrays.asList(lineInfo.getInvestmentManager()), MessageEnum.MESSAGE_4, messageMap); + return lineInterviewDAO.updateInterviewInfo(updateInterviewInfo) > 0; + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LinePayServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LinePayServiceImpl.java new file mode 100644 index 000000000..3044faf77 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LinePayServiceImpl.java @@ -0,0 +1,168 @@ +package com.cool.store.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.dao.HyPartnerUserInfoDAO; +import com.cool.store.dao.LineInfoDAO; +import com.cool.store.dao.LinePayDAO; +import com.cool.store.dao.ShopStageInfoDAO; +import com.cool.store.entity.*; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.MessageEnum; +import com.cool.store.enums.WorkflowSubStageEnum; +import com.cool.store.enums.WorkflowSubStageStatusEnum; +import com.cool.store.enums.point.PayBusinessTypeEnum; +import com.cool.store.enums.point.PayTypeEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.FranchiseFeeMapper; +import com.cool.store.mapper.LineInfoMapper; +import com.cool.store.mapper.ShopInfoMapper; +import com.cool.store.request.LinePaySubmitRequest; +import com.cool.store.service.LinePayService; +import com.cool.store.utils.poi.DateUtils; +import com.cool.store.utils.poi.StringUtils; +import com.cool.store.utils.poi.constant.Constants; +import com.cool.store.vo.LinePayVO; +import com.cool.store.vo.PartnerUserInfoVO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestParam; + +import javax.annotation.Resource; +import java.util.*; + +/** + * @Author wxp + * @Date 2024/3/28 13:48 + * @Version 1.0 + */ +@Service +@Slf4j +public class LinePayServiceImpl implements LinePayService { + + @Resource + private LinePayDAO linePayDAO; + + @Resource + private LineInfoDAO lineInfoDAO; + + @Resource + FranchiseFeeMapper franchiseFeeMapper; + + @Resource + ShopStageInfoDAO shopStageInfoDAO; + + @Resource + CommonService commonService; + + @Resource + ShopInfoMapper shopInfoMapper; + + @Override + public LinePayVO getLinePayInfo(Long lineId, Integer businessType, Long shopId) { + LinePayVO result = null; + LinePayDO linePayDO = linePayDAO.getByLineIdAndPayTypeAndShopId(lineId, businessType, shopId); + if (linePayDO != null) { + result = new LinePayVO(); + BeanUtil.copyProperties(linePayDO, result); + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId); + result.setPartnerName(lineInfo != null ? lineInfo.getUsername() : ""); + result.setMobile(lineInfo != null ? lineInfo.getMobile() : ""); + } + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Long submitPayInfo(LinePaySubmitRequest request, PartnerUserInfoVO partnerUser) { + log.info("submitPayInfo request:{},partnerUser:{}", JSONObject.toJSONString(request), JSONObject.toJSONString(partnerUser)); + if (Objects.isNull(request.getPayBusinessType())){ + request.setPayBusinessType(Constants.ZERO_INTEGER); + } + LineInfoDO lineInfo = new LineInfoDO(); + if (request.getLineId() != null) { + lineInfo = lineInfoDAO.getLineInfo(request.getLineId()); + } + LinePayDO linePayDO = linePayDAO.getByLineIdAndPayTypeAndShopId(request.getLineId(), request.getPayBusinessType(), request.getShopId()); + linePayDO = checkAndFill(linePayDO, request, partnerUser); + Long payId = linePayDO.getId(); + if (PayBusinessTypeEnum.FRANCHISE_FEE.getCode().equals(request.getPayBusinessType()) && payId != null) { + FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(request.getShopId()); + if (Objects.isNull(franchiseFeeDO)) { + throw new ServiceException(ErrorCodeEnum.UNISSUED_STATEMENT); + } + franchiseFeeDO.setPayId(payId); + franchiseFeeMapper.updateByPrimaryKeySelective(franchiseFeeDO); + shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_72); + Map requestMap = new HashMap<>(); + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); + requestMap.put("storeName",shopInfoDO.getShopName()); + requestMap.put("partnerName",lineInfo.getUsername()); + requestMap.put("partnerMobile",lineInfo.getMobile()); + requestMap.put("lineId",String.valueOf(lineInfo.getId())); + requestMap.put("shopId",String.valueOf(shopInfoDO.getId())); + commonService.sendMessage(Arrays.asList(lineInfo.getInvestmentManager()), MessageEnum.MESSAGE_18,requestMap); + } + if (PayBusinessTypeEnum.INTENT_MONEY.getCode().equals(request.getPayBusinessType())) { + lineInfo.setWorkflowSubStage(WorkflowSubStageEnum.PAY_DEPOSIT.getCode()); + lineInfo.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.PAY_DEPOSIT_50.getCode()); + lineInfoDAO.insertOrUpdate(lineInfo); + Map requestMap = new HashMap<>(); + requestMap.put("partnerUsername",lineInfo.getUsername()); + requestMap.put("payTime",DateUtils.parseDateToStr(DateUtils.SPECIAL_DATE_START, linePayDO.getPayTime())); + requestMap.put("lineId",String.valueOf(lineInfo.getId())); + commonService.sendMessage(Arrays.asList(lineInfo.getInvestmentManager()), MessageEnum.MESSAGE_5,requestMap); + } + return payId == null ? null : payId; + } + + private LinePayDO checkAndFill(LinePayDO linePayDO, + LinePaySubmitRequest request, + PartnerUserInfoVO partnerUser) { + if (Objects.isNull(linePayDO)) { + linePayDO = new LinePayDO(); + fillLinePay(Boolean.TRUE, linePayDO, request, partnerUser); + Long aLong = linePayDAO.addLinePay(linePayDO); + return linePayDO; + } else { + fillLinePay(Boolean.FALSE, linePayDO, request, partnerUser); + linePayDAO.updateLinePay(linePayDO); + return linePayDO; + } + } + + private void fillLinePay(Boolean isAdd, LinePayDO linePayDO, LinePaySubmitRequest request, PartnerUserInfoVO partnerUser) { + linePayDO.setPayType(request.getPayType()); + linePayDO.setPayUserName(request.getPayUserName()); + linePayDO.setPayAccount(request.getPayAccount()); + linePayDO.setBankCode(request.getBankCode()); + linePayDO.setBankName(request.getBankName()); + linePayDO.setBranchBankCode(request.getBranchBankCode()); + linePayDO.setBranchBankName(request.getBranchBankName()); + linePayDO.setPayTime(DateUtils.dateTime("yyyy-MM-dd HH:mm:ss",request.getPayTime())); + linePayDO.setPayPic(request.getPayPic()); + linePayDO.setPromisePic(request.getPromisePic()); + linePayDO.setPayStatus(WorkflowSubStageStatusEnum.PAY_DEPOSIT_50.getCode()); + linePayDO.setPayBusinessType(request.getPayBusinessType()); + if (Objects.nonNull(request.getShopId())) { + linePayDO.setShopId(request.getShopId()); + } + if (isAdd) { + linePayDO.setPartnerId(partnerUser.getPartnerId()); + linePayDO.setLineId(request.getLineId()); + linePayDO.setCreateTime(new Date()); + linePayDO.setCreateUserId(partnerUser.getPartnerId()); + linePayDO.setDeleted(false); + } else { + linePayDO.setUpdateTime(new Date()); + if (Objects.nonNull(partnerUser)) { + linePayDO.setUpdateUserId(partnerUser.getPartnerId()); + } + } + linePayDO.setAmount(request.getAmount()); + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineServiceImpl.java new file mode 100644 index 000000000..e814a64d1 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineServiceImpl.java @@ -0,0 +1,451 @@ +package com.cool.store.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.*; +import com.cool.store.entity.*; +import com.cool.store.enums.*; +import com.cool.store.enums.point.PayBusinessTypeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.IntentAgreementMapper; +import com.cool.store.mapper.JoinIntentionMapper; +import com.cool.store.mapper.RegionMapper; +import com.cool.store.request.*; +import com.cool.store.service.*; +import com.cool.store.utils.CoolDateUtils; +import com.cool.store.utils.StringUtil; +import com.cool.store.utils.UUIDUtils; +import com.cool.store.utils.poi.DateUtils; +import com.cool.store.vo.*; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2024/3/25 13:48 + * @Version 1.0 + */ +@Slf4j +@Service +public class LineServiceImpl implements LineService { + + @Resource + LineInfoDAO lineInfoDAO; + @Resource + HyPartnerUserInfoDAO hyPartnerUserInfoDAO; + @Resource + private RegionAreaConfigDao regionAreaConfigDao; + @Resource + HyOpenAreaInfoDAO hyOpenAreaInfoDAO; + @Resource + DeskService deskService; + @Resource + HyPartnerUserChannelDAO hyPartnerUserChannelDAO; + @Resource + EnterpriseUserDAO enterpriseUserDAO; + @Resource + RegionService regionService; + @Resource + RegionDao regionDao; + @Resource + SysRoleService sysRoleService; + @Resource + UserAuthMappingService userAuthMappingService; + @Resource + TransferLogService transferLogService; + @Resource + IntentAgreementMapper intentAgreementMapper; + @Resource + JoinIntentionMapper joinIntentionMapper; + @Resource + LineInterviewDAO lineInterviewDAO; + @Resource + LineAuditInfoDAO lineAuditInfoDAO; + @Resource + LinePayDAO linePayDAO; + @Resource + TrainingExperienceService trainingExperienceService; + @Resource + private RegionQrcodeConfigDao regionQrcodeConfigDao; + + + @Override + public LineInfoVO getLineInfo(Long lineId) { + LineInfoVO result = new LineInfoVO(); + // 查询线索信息 + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId); + if (lineInfo==null){ + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + if (StringUtil.isBlank(lineInfo.getInvestmentManager())){ + return null; + } + if (lineInfo.getLineSource()!=null){ + Map channelMapByIds = hyPartnerUserChannelDAO.getChannelMapByIds(Arrays.asList(lineInfo.getLineSource())); + result.setLineSourceName(channelMapByIds.get(lineInfo.getLineSource())); + } + if (StringUtil.isNotEmpty(lineInfo.getInvestmentManager())){ + EnterpriseUserDO user = enterpriseUserDAO.getUserInfoById(lineInfo.getInvestmentManager()); + result.setInvestmentManagerName(user.getName()); + result.setInvestmentManagerMobile(user.getMobile()); + } + if(lineInfo.getRegionId() != null && lineInfo.getRegionId() != 0){ + Long bigRegionIdByAreaId = regionService.getBigRegionIdByAreaId(lineInfo.getWantShopAreaId()); + Map regionNameMap = regionDao.getRegionNameMap(Arrays.asList(bigRegionIdByAreaId, lineInfo.getRegionId())); + result.setRegionId(lineInfo.getRegionId()); + result.setRegionName(regionNameMap.get(lineInfo.getRegionId())); + result.setLargeRegionId(bigRegionIdByAreaId); + result.setLargeRegionName(regionNameMap.get(bigRegionIdByAreaId)); + } + LineAuditInfoDO lineAuditInfoDO = lineAuditInfoDAO.getAuditInfoByLineId(lineInfo.getId()); + if (lineAuditInfoDO!=null){ + result.setRejectPublicReason(lineAuditInfoDO.getRejectPublicReason()); + } + + MemberQuestionDO memberQuestionDO = joinIntentionMapper.getByLineId(lineInfo.getId()); + Map userPortraitMap = deskService.getUserPortraitMap(Arrays.asList(lineInfo)); + Map wantShopAreaMap = hyOpenAreaInfoDAO.selectNameMapByIds(Arrays.asList(lineInfo.getWantShopAreaId())); + BaseInfoVO baseInfoVO = deskService.convertToBaseInfoVO(lineInfo, userPortraitMap, wantShopAreaMap); + result.setWantShopAreaName(baseInfoVO.getWantShopAreaName()); + result.setUserPortraitList(baseInfoVO.getUserPortraitList()); + if (memberQuestionDO != null){ + result.setJoinType(memberQuestionDO.getJoinType()); + } + BeanUtil.copyProperties(lineInfo,result); + return result; + } + + @Override + public PageInfo getLineList(LineListRequest lineListRequest, LoginUserInfo loginUserInfo,Boolean teamFlag) { + List wantShopAreaIds = new ArrayList<>(); + String userId = null; + if(!teamFlag){ + userId = loginUserInfo.getUserId(); + } + if (teamFlag && !sysRoleService.checkIsAdmin(loginUserInfo.getUserId())){ + List list = userAuthMappingService.listWantShopAreaIdByUserId(loginUserInfo.getUserId()); + if (CollectionUtils.isNotEmpty(list)){ + wantShopAreaIds = list; + }else { + userId = loginUserInfo.getUserId(); + } + } + String areaName = null; + if (lineListRequest.getWantShopAreaId() != null){ + HyOpenAreaInfoDO hyOpenAreaInfoDO = hyOpenAreaInfoDAO.selectById(lineListRequest.getWantShopAreaId()); + areaName = hyOpenAreaInfoDO.getAreaPath(); + } + PageHelper.startPage(lineListRequest.getPageNum(), lineListRequest.getPageSize()); + List lineInfoDOS = lineInfoDAO.lineList(lineListRequest,areaName, userId, wantShopAreaIds); + PageInfo page = new PageInfo(lineInfoDOS); + Map userPortraitMap = deskService.getUserPortraitMap(lineInfoDOS); + List wantShopAreaIdList = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getWantShopAreaId() != null).map(LineInfoDO::getWantShopAreaId).collect(Collectors.toList()); + Map wantShopAreaMap = hyOpenAreaInfoDAO.selectNameMapByIds(wantShopAreaIdList); + List lineSourceIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getLineSource() != null).map(LineInfoDO::getLineSource).collect(Collectors.toList()); + Map channelMapByIds = hyPartnerUserChannelDAO.getChannelMapByIds(lineSourceIds); + List userIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getInvestmentManager() != null).map(LineInfoDO::getInvestmentManager).collect(Collectors.toList()); + userIds.addAll(lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getUpdateUserId() != null).map(LineInfoDO::getUpdateUserId).collect(Collectors.toList())); + Map userNameMap = enterpriseUserDAO.getUserNameMap(userIds); + + List result = new ArrayList<>(); + lineInfoDOS.forEach(x->{ + BaseInfoVO baseInfoVO = deskService.convertToBaseInfoVO(x, userPortraitMap, wantShopAreaMap); + LineListVO lineListVO = new LineListVO(baseInfoVO); + lineListVO.setCreateTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, x.getCreateTime())); + lineListVO.setUpdateTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, x.getUpdateTime())); + lineListVO.setLineSourceName(channelMapByIds.get(x.getLineSource())); + lineListVO.setInvestmentManagerUserName(userNameMap.get(x.getInvestmentManager())); + lineListVO.setUpdateUserName(userNameMap.get(x.getUpdateUserId())); + result.add(lineListVO); + }); + page.setList(result); + return page; + } + + @Override + public PageInfo getPublicLineList(PublicLineListRequest publicLineListRequest, LoginUserInfo loginUserInfo, Boolean publicFlag) { + PageHelper.startPage(publicLineListRequest.getPageNum(), publicLineListRequest.getPageSize()); + List lineInfoDOS = lineInfoDAO.publicLineList(publicLineListRequest,publicFlag); + PageInfo page = new PageInfo(lineInfoDOS); + Map userPortraitMap = deskService.getUserPortraitMap(lineInfoDOS); + List wantShopAreaIdList = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getWantShopAreaId() != null).map(LineInfoDO::getWantShopAreaId).collect(Collectors.toList()); + Map wantShopAreaMap = hyOpenAreaInfoDAO.selectNameMapByIds(wantShopAreaIdList); + List lineSourceIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getLineSource() != null).map(LineInfoDO::getLineSource).collect(Collectors.toList()); + Map channelMapByIds = hyPartnerUserChannelDAO.getChannelMapByIds(lineSourceIds); + List userIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getInvestmentManager() != null).map(LineInfoDO::getInvestmentManager).collect(Collectors.toList()); + userIds.addAll(lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getCreateUserId() != null).map(LineInfoDO::getCreateUserId).collect(Collectors.toList())); + userIds.addAll(lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getDevelopmentManager() != null).map(LineInfoDO::getDevelopmentManager).collect(Collectors.toList())); + Map userNameMap = enterpriseUserDAO.getUserNameMap(userIds); + + List result = new ArrayList<>(); + lineInfoDOS.forEach(x->{ + BaseInfoVO baseInfoVO = deskService.convertToBaseInfoVO(x, userPortraitMap, wantShopAreaMap); + PublicLineListVO publicLineListVO = new PublicLineListVO(baseInfoVO); + publicLineListVO.setCreateTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, x.getCreateTime())); + publicLineListVO.setUpdateTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, x.getUpdateTime())); + publicLineListVO.setLineSourceName(channelMapByIds.get(x.getLineSource())); + publicLineListVO.setLastInvestmentManagerUserName(userNameMap.get(x.getInvestmentManager())); + publicLineListVO.setLastDevelopmentManagerUserName(userNameMap.get(x.getDevelopmentManager())); + publicLineListVO.setUpdateUserName(userNameMap.get(x.getUpdateUserId())); + result.add(publicLineListVO); + }); + page.setList(result); + return page; + } + + @Override + public PageInfo getPartnerList(PartnerRequest partnerRequest, LoginUserInfo loginUserInfo, Boolean teamFlag) { + + List wantShopAreaIds = new ArrayList<>(); + String userId = null; + if(!teamFlag){ + userId = loginUserInfo.getUserId(); + } + if (teamFlag && !sysRoleService.checkIsAdmin(loginUserInfo.getUserId())){ + List list = userAuthMappingService.listWantShopAreaIdByUserId(loginUserInfo.getUserId()); + if (CollectionUtils.isNotEmpty(list)){ + wantShopAreaIds = list; + }else { + userId = loginUserInfo.getUserId(); + } + } + String areaName = null; + if (partnerRequest.getWantShopAreaId() != null){ + HyOpenAreaInfoDO hyOpenAreaInfoDO = hyOpenAreaInfoDAO.selectById(partnerRequest.getWantShopAreaId()); + areaName = hyOpenAreaInfoDO.getAreaPath(); + } + PageHelper.startPage(partnerRequest.getPageNum(), partnerRequest.getPageSize()); + List lineInfoDOS = lineInfoDAO.partnerList(partnerRequest,areaName, userId, wantShopAreaIds); + PageInfo page = new PageInfo(lineInfoDOS); + Map userPortraitMap = deskService.getUserPortraitMap(lineInfoDOS); + List wantShopAreaIdList = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getWantShopAreaId() != null).map(LineInfoDO::getWantShopAreaId).collect(Collectors.toList()); + Map wantShopAreaMap = hyOpenAreaInfoDAO.selectNameMapByIds(wantShopAreaIdList); + List lineSourceIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getLineSource() != null).map(LineInfoDO::getLineSource).collect(Collectors.toList()); + Map channelMapByIds = hyPartnerUserChannelDAO.getChannelMapByIds(lineSourceIds); + + List userIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getInvestmentManager() != null).map(LineInfoDO::getInvestmentManager).collect(Collectors.toList()); + userIds.addAll(lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getDevelopmentManager() != null).map(LineInfoDO::getDevelopmentManager).collect(Collectors.toList())); + userIds.addAll(lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getUpdateUserId() != null).map(LineInfoDO::getUpdateUserId).collect(Collectors.toList())); + Map userNameMap = enterpriseUserDAO.getUserNameMap(userIds); + + + List lineIds = lineInfoDOS.stream().filter(lineInfoDO -> lineInfoDO.getId() != null).map(LineInfoDO::getId).collect(Collectors.toList()); + List signingBaseInfoDOS = intentAgreementMapper.selectByLineIds(lineIds); + Map dateMap = signingBaseInfoDOS.stream().collect(Collectors.toMap(SigningBaseInfoDO::getLineId, SigningBaseInfoDO::getCreateTime)); + + List result = new ArrayList<>(); + lineInfoDOS.forEach(x->{ + BaseInfoVO baseInfoVO = deskService.convertToBaseInfoVO(x, userPortraitMap, wantShopAreaMap); + PartnerListVO partnerListVO = new PartnerListVO(baseInfoVO); + Date date = dateMap.get(x.getId()); + if (date != null){ + partnerListVO.setJoinTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, date)); + } + partnerListVO.setUpdateTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, x.getUpdateTime())); + partnerListVO.setLineSourceName(channelMapByIds.get(x.getLineSource())); + partnerListVO.setJoinStatus(x.getJoinStatus()); + partnerListVO.setPartnerNum(x.getPartnerNum()); + partnerListVO.setInvestmentManagerUserName(userNameMap.get(x.getInvestmentManager())); + partnerListVO.setUpdateUserName(userNameMap.get(x.getUpdateUserId())); + partnerListVO.setDevelopmentManagerUserName(userNameMap.get(x.getDevelopmentManager())); + partnerListVO.setWantShopNum(x.getWantShopNum()); + result.add(partnerListVO); + }); + page.setList(result); + return page; + } + + @Override + public Boolean addTags(LoginUserInfo user, AddTagsRequest addTagsRequest) { + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(addTagsRequest.getLineId()); + if (lineInfo==null){ + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + lineInfo.setUpdateUserId(user.getUserId()); + lineInfo.setUpdateTime(new Date()); + lineInfo.setUserPortrait(CollectionUtils.isNotEmpty(addTagsRequest.getTags())? + addTagsRequest.getTags().stream().map(Object::toString).collect(Collectors.joining(CommonConstants.COMMA, CommonConstants.COMMA, CommonConstants.COMMA)):""); + lineInfoDAO.updateLineInfo(lineInfo); + return Boolean.TRUE; + } + + @Override + public Boolean transferInvestmentManager(ChangeInvestmentRequest changeInvestmentRequest, LoginUserInfo userInfo,Boolean transferFlag) { + //查询线索 + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(changeInvestmentRequest.getLineId()); + if (lineInfo==null){ + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + //分配拦截 分配的时候在公海才能分配 转让不拦截 + if (!lineInfo.getLineStatus().equals(LineStatusEnum.PUBLIC_SEAS.getCode())&&!transferFlag){ + throw new ServiceException(ErrorCodeEnum.NOT_IN_PUBLIC_SEA); + } + //转让的时候拦截 且不能转让给自己 + if (lineInfo.getInvestmentManager().equals(changeInvestmentRequest.getInvestmentManagerId())&&transferFlag){ + throw new ServiceException(ErrorCodeEnum.NO_TRANSFER_REQUIRED); + } + + //如果线索招商经理为空 直接分配 如果不为空 且线索在公海 说明线索被结束 需要重置ID 生成一条新的线索 + lineInfo.setLineStatus(LineStatusEnum.PRIVATE_SEAS.getCode()); + lineInfo.setInvestmentManager(changeInvestmentRequest.getInvestmentManagerId()); + lineInfo.setUpdateUserId(userInfo.getUserId()); + lineInfoDAO.updateLineInfo(lineInfo); + if (transferFlag){ + //添加日志 + OperationLogTypeEnum operationLogTypeEnum = OperationLogTypeEnum.TRANSFER_INVESTMENT_MANAGER; + if (lineInfo.getJoinStatus()!=0){ + operationLogTypeEnum = OperationLogTypeEnum.TRANSFER_INVESTMENT_MANAGER_3; + } + transferLogService.addLog(lineInfo,userInfo.getUserId(),changeInvestmentRequest.getInvestmentManagerId(),operationLogTypeEnum); + } + return Boolean.TRUE; + } + + + + @Override + public IntendProcessTotalVO getIntendProcessTotal(Long lineId) { + MemberQuestionDO memberQuestionDO = joinIntentionMapper.getByLineId(lineId); + if (memberQuestionDO==null){ + return null; + } + //总天数 + Integer totalDays = 10; + IntendProcessTotalVO intendProcessTotalVO = new IntendProcessTotalVO(); + intendProcessTotalVO.setTotalDays(totalDays); + intendProcessTotalVO.setCompletionTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,DateUtils.addDays(memberQuestionDO.getCreateTime(),totalDays))); + + List auditIds = new ArrayList<>(); + if (memberQuestionDO.getAuditId()!=null){ + auditIds.add(memberQuestionDO.getAuditId()); + } + + List interviewList = lineInterviewDAO.getInterviewByLineId(lineId); + auditIds.addAll(interviewList.stream().filter(x->x.getAuditId()!=null).map(LineInterviewDO::getAuditId).collect(Collectors.toList())); + Map interviewDOMap = interviewList.stream().filter(x->x.getAuditId()!=null).collect(Collectors.toMap(k -> k.getInterviewType(), v -> v.getAuditId())); + interviewDOMap.put(10,memberQuestionDO.getAuditId()); + List lineAuditInfoList = lineAuditInfoDAO.getLineAuditInfoList(auditIds); + Map dateMap = lineAuditInfoList.stream().collect(Collectors.toMap(k -> k.getId(), v -> v.getCreateTime())); + + LinePayDO linePay = linePayDAO.getByLineIdAndPayTypeAndShopId(lineId,PayBusinessTypeEnum.INTENT_MONEY.getCode(),null); + SigningBaseInfoDO signingBaseInfoDO = intentAgreementMapper.selectByPartnerIdOrLineId(memberQuestionDO.getPartnerId(), lineId); + LeaseBaseInfoDO trainingExperience = trainingExperienceService.getTrainingExperience(lineId); + + + HashMap map = new HashMap<>(); + interviewDOMap.forEach((k, v) ->{ + if (k.equals(InterviewTypeEnum.MEET.getCode())){ + map.put(WorkflowSubStageEnum.INVITING_INTERVIEWS.getCode(),dateMap.get(v)); + } + if (k.equals(InterviewTypeEnum.INTERVIEW.getCode())){ + map.put(WorkflowSubStageEnum.FIRST_INTERVIEWS.getCode(),dateMap.get(v)); + } + if (k.equals(InterviewTypeEnum.SECOND_INTERVIEW.getCode())){ + map.put(WorkflowSubStageEnum.SECOND_INTERVIEWS.getCode(),dateMap.get(v)); + } + if (k.equals(10)){ + map.put(WorkflowSubStageEnum.INTEND.getCode(),dateMap.get(v)); + } + }); + if (linePay != null){ + map.put(WorkflowSubStageEnum.PAY_DEPOSIT.getCode(),linePay.getPayTime()); + } + if (signingBaseInfoDO != null){ + map.put(WorkflowSubStageEnum.SIGN_INTENT_AGREEMENT.getCode(),signingBaseInfoDO.getCreateTime()); + } + if (trainingExperience != null){ + map.put(WorkflowSubStageEnum.STORE_EXPERIENCE.getCode(),trainingExperience.getExperienceEndTime()); + } + + List list = new ArrayList<>(); + for (WorkflowSubStageEnum workflowSubStageEnum : WorkflowSubStageEnum.values()) { + IntendProcessVO intend = getIntend(memberQuestionDO.getCreateTime(), workflowSubStageEnum); + if (map.get(workflowSubStageEnum.getCode())!=null){ + intend.setActualTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,map.get(workflowSubStageEnum.getCode()))); + } + list.add(intend); + } + intendProcessTotalVO.setIntendProcessVOS(list); + log.info("intendProcessTotalVO:{}", JSONObject.toJSONString(intendProcessTotalVO)); + return intendProcessTotalVO; + } + + + + @Override + public Boolean addLine(AddLineRequest addLineRequest) { + //必填参数 + log.info("addLine:{}", JSONObject.toJSONString(addLineRequest)); + if (!StringUtil.isNoneBlank(addLineRequest.getMobile(),addLineRequest.getUserName())){ + throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); + } + HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByMobile(addLineRequest.getMobile()); + if (hyPartnerUserInfoDO!=null){ + throw new ServiceException(ErrorCodeEnum.MOBILE_EXIST); + } + hyPartnerUserInfoDO = new HyPartnerUserInfoDO(); + hyPartnerUserInfoDO.setMobile(addLineRequest.getMobile()); + hyPartnerUserInfoDO.setUserChannelId(Integer.valueOf(UserChannelEnum.ADD.getCode())); + hyPartnerUserInfoDO.setPartnerId(UUIDUtils.get32UUID()); + hyPartnerUserInfoDAO.insertSelective(hyPartnerUserInfoDO); + LineInfoDO lineInfoDO = new LineInfoDO(); + lineInfoDO.setLineStatus(LineStatusEnum.PRIVATE_SEAS.getCode()); + lineInfoDO.setWorkflowSubStage(WorkflowSubStageEnum.INTEND.getCode()); + lineInfoDO.setMobile(addLineRequest.getMobile()); + lineInfoDO.setWorkflowStage(WorkflowStageEnum.INTENT.getCode()); + lineInfoDO.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.INTENT_0.getCode()); + lineInfoDO.setWantShopAreaId(addLineRequest.getWantShopAreaId()); + lineInfoDO.setUsername(addLineRequest.getUserName()); + lineInfoDO.setLineSource(Integer.valueOf(UserChannelEnum.ADD.getCode())); + lineInfoDO.setPartnerId(hyPartnerUserInfoDO.getPartnerId()); + String userId = null; + if (StringUtils.isNotBlank(addLineRequest.getInvestmentManagerUserId())){ + userId = addLineRequest.getInvestmentManagerUserId(); + }else { + EnterpriseUserDO user = userAuthMappingService.getUserByRoleEnumAndWantShopAreaId(UserRoleEnum.INVESTMENT_COMMISSIONER, addLineRequest.getWantShopAreaId()); + userId = user.getUserId(); + } + Long regionId = regionAreaConfigDao.getByWantShopAreaId(addLineRequest.getWantShopAreaId()); + lineInfoDO.setRegionId(regionId); + lineInfoDO.setInvestmentManager(userId); + lineInfoDO.setCreateUserId(userId); + lineInfoDO.setUpdateUserId(userId); + lineInfoDAO.insertOrUpdate(lineInfoDO); + return Boolean.TRUE; + } + + @Override + public String getPayPicByLineId(Long lineId) { + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId); + if (lineInfo==null){ + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + Long bigRegionId = regionService.getBigRegionIdByAreaId(lineInfo.getWantShopAreaId()); + return regionQrcodeConfigDao.getPayPicByRegionId(bigRegionId); + } + + /** + * 计算预期时间 + * @param startTime + * @param workflowSubStageEnum + * @return + */ + public IntendProcessVO getIntend(Date startTime, WorkflowSubStageEnum workflowSubStageEnum){ + IntendProcessVO intendProcessVO = new IntendProcessVO(); + intendProcessVO.setCode(workflowSubStageEnum.getCode()); + intendProcessVO.setExpectedTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,DateUtils.addDays(startTime,workflowSubStageEnum.getProgress()))); + return intendProcessVO; + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/NewStoreOpeningServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/NewStoreOpeningServiceImpl.java new file mode 100644 index 000000000..35750e280 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/NewStoreOpeningServiceImpl.java @@ -0,0 +1,70 @@ +package com.cool.store.service.impl; + +import com.cool.store.dao.NewStoreOpeningDAO; +import com.cool.store.dao.ShopStageInfoDAO; +import com.cool.store.entity.NewStoreOpeningDO; +import com.cool.store.entity.ShopStageInfoDO; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.NewStoreOpeningRequest; +import com.cool.store.service.NewStoreOpeningService; +import com.cool.store.vo.NewStoreOpeningVO; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * @author byd + * @date 2024-04-24 14:32 + */ +@Service +public class NewStoreOpeningServiceImpl implements NewStoreOpeningService { + + @Resource + private NewStoreOpeningDAO newStoreOpeningDAO; + + @Resource + private ShopStageInfoDAO shopStageInfoDAO; + + @Override + public List storeTodoList(Long shopId) { + List storeOpeningDOList = newStoreOpeningDAO.storeTodoList(shopId); + List resultList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(storeOpeningDOList)){ + storeOpeningDOList.forEach(storeOpeningDO -> { + NewStoreOpeningVO newStoreOpeningVO = new NewStoreOpeningVO(); + newStoreOpeningVO.setId(storeOpeningDO.getId()); + newStoreOpeningVO.setShopId(storeOpeningDO.getShopId()); + newStoreOpeningVO.setCompletionTime(storeOpeningDO.getCompletionTime()); + newStoreOpeningVO.setTodoItem(storeOpeningDO.getTodoItem()); + resultList.add(newStoreOpeningVO); + }); + } + return resultList; + } + + @Override + public void addStoreTodo(NewStoreOpeningRequest newStoreOpeningRequest) { + // 判断是否可以添加 + ShopStageInfoDO shopStageInfoDO = shopStageInfoDAO.getShopSubStageInfo(newStoreOpeningRequest.getShopId(), ShopSubStageEnum.SHOP_STAGE_17); + + if(shopStageInfoDO != null && shopStageInfoDO.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_171.getShopSubStageStatus())){ + throw new ServiceException("该店铺已经完成试运营,不能再添加待办事项"); + } + + NewStoreOpeningDO newStoreOpeningDO = new NewStoreOpeningDO(); + newStoreOpeningDO.setShopId(newStoreOpeningRequest.getShopId()); + newStoreOpeningDO.setTodoItem(newStoreOpeningRequest.getTodoItem()); + newStoreOpeningDO.setCompletionTime(newStoreOpeningRequest.getCompletionTime()); + newStoreOpeningDAO.insertSelective(newStoreOpeningDO); + } + + @Override + public void removeStoreTodo(Long id) { + newStoreOpeningDAO.deleteByPrimaryKey(id); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OSSServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OSSServiceImpl.java new file mode 100644 index 000000000..e0230e857 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OSSServiceImpl.java @@ -0,0 +1,74 @@ +package com.cool.store.service.impl; + +import cn.hutool.core.date.DateUtil; +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import com.aliyun.oss.common.utils.BinaryUtil; +import com.aliyun.oss.model.MatchMode; +import com.aliyun.oss.model.PolicyConditions; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.OSSService; +import com.cool.store.utils.poi.DateUtils; +import com.cool.store.vo.oss.OssUploadConfigVO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Date; +import java.util.Objects; + +/** + * @Author suzhuhong + * @Date 2024/3/28 14:29 + * @Version 1.0 + */ +@Service +@Slf4j +public class OSSServiceImpl implements OSSService { + + @Value("${oss.accessKeyId:null}") + private String accessKeyId; + @Value("${oss.accessKeySecret:null}") + private String accessKeySecret; + @Value("${oss.endpoint:null}") + private String endpoint; + @Value("${oss.bucket:null}") + private String bucket; + @Value("${cdn.url:null}") + private String cdnUrl; + @Value("${oss.file.dir:null}") + private String dir; + + @Override + public OssUploadConfigVO getUploadFileConfig() { + // host的格式为 bucketname.endpoint + String host = "https://" + bucket + "." + endpoint; + OSS client = null; + try { + client = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); + long expireTime = 300; + long expireEndTime = System.currentTimeMillis() + expireTime * 1000; + Date expiration = new Date(expireEndTime); + PolicyConditions policyConds = new PolicyConditions(); + policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000); + policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir); + String postPolicy = client.generatePostPolicy(expiration, policyConds); + byte[] binaryData = postPolicy.getBytes("utf-8"); + String encodedPolicy = BinaryUtil.toBase64String(binaryData); + String signature = client.calculatePostSignature(postPolicy); + String time = DateUtil.format(new Date(), "yyMM") + "/"; + OssUploadConfigVO result = new OssUploadConfigVO(accessKeyId, encodedPolicy, signature, dir + time, host, String.valueOf(expireEndTime / 1000), cdnUrl); + return result; + }catch (Exception e){ + log.info("exception", e); + throw new ServiceException(ErrorCodeEnum.GET_INFO_ERROR); + }finally { + if(Objects.nonNull(client)){ + client.shutdown(); + } + } + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenAcceptanceInfoServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenAcceptanceInfoServiceImpl.java new file mode 100644 index 000000000..3611f815c --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenAcceptanceInfoServiceImpl.java @@ -0,0 +1,169 @@ +package com.cool.store.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ReflectUtil; +import com.cool.store.constants.CommonConstants; +import com.cool.store.dao.*; +import com.cool.store.entity.OpenAcceptanceInfoDO; +import com.cool.store.entity.ShopInfoDO; +import com.cool.store.entity.ShopStageInfoDO; +import com.cool.store.enums.point.ShopStageEnum; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageFieldEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.OpenAcceptanceRequest; +import com.cool.store.request.ShopAcceptanceRequest; +import com.cool.store.request.ShopStageAcceptanceRequest; +import com.cool.store.service.OpenAcceptanceInfoService; +import com.cool.store.service.RegionService; +import com.cool.store.utils.CoolDateUtils; +import com.cool.store.utils.poi.DateUtils; +import com.cool.store.vo.EmployeeTrainingVO; +import com.cool.store.vo.OpenAcceptanceInfoListVO; +import com.cool.store.vo.ShopAcceptanceVO; +import com.cool.store.vo.ShopStageAcceptanceVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author byd + * @date 2024-04-22 14:41 + */ +@Service +public class OpenAcceptanceInfoServiceImpl implements OpenAcceptanceInfoService { + + @Resource + private OpenAcceptanceInfoDAO openAcceptanceInfoDAO; + + @Resource + private EnterpriseUserDAO userDAO; + + @Resource + private RegionService regionService; + + @Resource + private RegionDao regionDao; + + @Resource + private ShopStageInfoDAO shopStageInfoDAO; + @Resource + ShopInfoDAO shopInfoDAO; + + @Override + public PageInfo openAcceptanceList(OpenAcceptanceRequest openAcceptanceRequest) { + PageHelper.startPage(openAcceptanceRequest.getPageNum(), openAcceptanceRequest.getPageSize()); + List resultList = openAcceptanceInfoDAO.openAcceptanceList(openAcceptanceRequest); + List userIdList = new ArrayList<>(); + for (OpenAcceptanceInfoListVO vo : resultList) { + userIdList.add(vo.getSupervisorUserId()); + userIdList.add(vo.getShopManagerUserId()); + userIdList.add(vo.getAcceptanceUserId()); + userIdList.add(vo.getInvestmentManager()); + } + + List regionIds = resultList.stream().map(OpenAcceptanceInfoListVO::getRegionId).distinct().collect(Collectors.toList()); + + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIds); + if (CollectionUtils.isNotEmpty(userIdList)) { + Map userNameMap = userDAO.getUserNameMap(userIdList); + for (OpenAcceptanceInfoListVO vo : resultList) { + vo.setSupervisorUserName(userNameMap.get(vo.getSupervisorUserId())); + vo.setShopManagerUserName(userNameMap.get(vo.getShopManagerUserId())); + vo.setAcceptanceUserName(userNameMap.get(vo.getAcceptanceUserId())); + vo.setInvestmentManagerName(userNameMap.get(vo.getInvestmentManager())); + if (vo.getPlanOpenTime() != null) { + vo.setPlanOpenEndTime(DateUtils.addDays(vo.getPlanOpenTime(), CommonConstants.THREE)); + } + if (vo.getRegionId() != null) { + vo.setRegionId(vo.getRegionId()); + vo.setRegionNodeName(regionNameMap.get(vo.getRegionId())); + } + } + } + return new PageInfo<>(resultList); + } + + @Override + public ShopAcceptanceVO acceptanceStageList(Long shopId) { + List stageInfoDOList = shopStageInfoDAO.getShopStageInfo(shopId, ShopStageEnum.SHOP_STAGE_2.getShopStage()); + List result = new ArrayList<>(); + OpenAcceptanceInfoDO openAcceptanceInfoDO = openAcceptanceInfoDAO.selectOne(OpenAcceptanceInfoDO.builder().shopId(shopId).build()); + stageInfoDOList.forEach(stageInfoDO -> { + ShopStageAcceptanceVO shopStageAcceptanceVO = new ShopStageAcceptanceVO(); + shopStageAcceptanceVO.setShopId(stageInfoDO.getShopId()); + shopStageAcceptanceVO.setShopSubStage(stageInfoDO.getShopSubStage()); + shopStageAcceptanceVO.setId(stageInfoDO.getId()); + shopStageAcceptanceVO.setActualCompleteTime(stageInfoDO.getActualCompleteTime()); + ShopSubStageEnum shopSubStageEnum = ShopSubStageEnum.getByShopSubStage(stageInfoDO.getShopSubStage()); + if (shopSubStageEnum != null) { + shopStageAcceptanceVO.setShopSubStageName(shopSubStageEnum.getShopSubStageName()); + } + ShopSubStageFieldEnum shopSubStageFieldEnum = ShopSubStageFieldEnum.getByShopSubStage(stageInfoDO.getShopSubStage()); + if (shopSubStageFieldEnum != null) { + shopStageAcceptanceVO.setResult(ReflectUtil.getFieldValue(openAcceptanceInfoDO, shopSubStageFieldEnum.getFiled()) == null ? + null : (Boolean) ReflectUtil.getFieldValue(openAcceptanceInfoDO, shopSubStageFieldEnum.getFiled())); + } + result.add(shopStageAcceptanceVO); + }); + ShopAcceptanceVO shopAcceptanceVO = new ShopAcceptanceVO(); + shopAcceptanceVO.setShopStageAcceptanceList(result); + shopAcceptanceVO.setShopId(shopId); + shopAcceptanceVO.setPlanOpenTime(openAcceptanceInfoDO.getPlanOpenTime()); + shopAcceptanceVO.setAcceptanceStatus(openAcceptanceInfoDO.getAcceptanceStatus()); + return shopAcceptanceVO; + } + + @Override + public void acceptance(ShopAcceptanceRequest shopAcceptanceRequest, String userId) { + OpenAcceptanceInfoDO openAcceptanceInfoDO = openAcceptanceInfoDAO.selectOne(OpenAcceptanceInfoDO.builder().shopId(shopAcceptanceRequest.getShopId()).build()); + if(openAcceptanceInfoDO == null){ + throw new ServiceException("该店铺不存在"); + } + if(openAcceptanceInfoDO.getAcceptanceStatus() != null && openAcceptanceInfoDO.getAcceptanceStatus() == 1){ + throw new ServiceException("该店铺已验收完成,不能再次验收"); + } + shopAcceptanceRequest.getShopStageAcceptanceList().forEach(shopStageAcceptanceRequest -> { + ShopSubStageFieldEnum shopSubStageFieldEnum = ShopSubStageFieldEnum.getByShopSubStage(shopStageAcceptanceRequest.getShopSubStage()); + if (shopSubStageFieldEnum != null) { + ReflectUtil.setFieldValue(openAcceptanceInfoDO, shopSubStageFieldEnum.getFiled(), shopStageAcceptanceRequest.getResult()); + } + }); + openAcceptanceInfoDO.setAcceptanceStatus(1); + openAcceptanceInfoDO.setAcceptanceUserId(userId); + openAcceptanceInfoDO.setPlanOpenTime(shopAcceptanceRequest.getPlanOpenTime()); + openAcceptanceInfoDO.setAcceptanceTime(new Date()); + openAcceptanceInfoDAO.updateByPrimaryKeySelective(openAcceptanceInfoDO); + ShopInfoDO shopInfoDO = new ShopInfoDO(); + shopInfoDO.setId(shopAcceptanceRequest.getShopId()); + shopInfoDO.setPlanOpenTime(shopAcceptanceRequest.getPlanOpenTime()); + shopInfoDAO.updateShopInfo(shopInfoDO); + //开业验收完成 + shopStageInfoDAO.updateShopStageInfo(shopInfoDO.getId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_161); + //新店开业试运营 + shopStageInfoDAO.updateShopStageInfo(shopInfoDO.getId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_170); + } + + @Override + public void acceptanceOne(ShopStageAcceptanceRequest shopStageAcceptanceRequest) { + OpenAcceptanceInfoDO openAcceptanceInfoDO = openAcceptanceInfoDAO.selectOne(OpenAcceptanceInfoDO.builder().shopId(shopStageAcceptanceRequest.getShopId()).build()); + if (openAcceptanceInfoDO == null) { + throw new ServiceException("该店铺不存在"); + } + if (openAcceptanceInfoDO.getAcceptanceStatus() != null && openAcceptanceInfoDO.getAcceptanceStatus() == 1) { + throw new ServiceException("该店铺已验收完成,不能再次验收"); + } + + ShopSubStageFieldEnum shopSubStageFieldEnum = ShopSubStageFieldEnum.getByShopSubStage(shopStageAcceptanceRequest.getShopSubStage()); + if (shopSubStageFieldEnum != null) { + ReflectUtil.setFieldValue(openAcceptanceInfoDO, shopSubStageFieldEnum.getFiled(), shopStageAcceptanceRequest.getResult()); + } + openAcceptanceInfoDAO.updateByPrimaryKeySelective(openAcceptanceInfoDO); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenAreaServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenAreaServiceImpl.java new file mode 100644 index 000000000..dea6a4f70 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenAreaServiceImpl.java @@ -0,0 +1,315 @@ +package com.cool.store.service.impl; + +import com.alibaba.excel.util.DateUtils; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; +import com.cool.store.dao.EnterpriseUserDAO; +import com.cool.store.dao.HyOpenAreaInfoDAO; +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.entity.HyOpenAreaInfoDO; +import com.cool.store.enums.AreaStatusEnum; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.HyOpenAreaInfoMapper; +import com.cool.store.request.OpenAreaRequest; +import com.cool.store.service.OpenAreaService; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.vo.OpenAreaTreeVO; +import com.cool.store.vo.OpenAreaVO; +import com.cool.store.vo.OpenProvinceVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2023/6/13 22:11 + * @Version 1.0 + */ +@Slf4j +@Service +public class OpenAreaServiceImpl implements OpenAreaService { + + @Resource + private HyOpenAreaInfoDAO hyOpenAreaInfoDAO; + @Resource + private HyOpenAreaInfoMapper hyOpenAreaInfoMapper; + @Resource + private RedisUtilPool redisUtilPool; + @Resource + EnterpriseUserDAO enterpriseUserDAO; + + + @Override + public List queryByKeyword(String keyword,String areaStatus,Boolean flag) { + //先查出所有的一级菜单 + List openArea = hyOpenAreaInfoDAO.queryFirstLevel(); + Map longHyOpenAreaInfoDOMap = openArea.stream().collect(Collectors.toMap(HyOpenAreaInfoDO::getId, x -> x)); + + //查询关键字下所有的数据 原始的数据 + List hyOpenAreaInfoDOS = hyOpenAreaInfoDAO.queryByKeyword(keyword,null,areaStatus,flag); + Set longSet = hyOpenAreaInfoDOS.stream().map(HyOpenAreaInfoDO::getId).collect(Collectors.toSet()); + + List result = new ArrayList<>(); + result.addAll(hyOpenAreaInfoDOS); + hyOpenAreaInfoDOS.stream().forEach(x->{ + Long parentId = x.getParentId(); + + if (parentId!=null&&!longSet.contains(parentId)){ + //添加到集合中 + longSet.add(x.getParentId()); + HyOpenAreaInfoDO hyOpenAreaInfoDO = longHyOpenAreaInfoDOMap.get(parentId); + result.add(hyOpenAreaInfoDO); + } + }); + + JSONArray objects = buildTree(JSONArray.parseArray(JSONObject.toJSONString(result)), "id", "parentId","childNode" ); + List openAreaTreeVOS = JSONObject.parseArray(objects.toJSONString(), OpenAreaTreeVO.class); + return openAreaTreeVOS; + } + + @Override + public List searchOpenArea(String keyword,Boolean applyFlag, Boolean flag) { + long startTime = System.currentTimeMillis(); + List allAreaList = hyOpenAreaInfoDAO.getAllOpenArea(); + log.info("11耗时:{}", System.currentTimeMillis() - startTime); + return OpenAreaTreeVO.convertTree(allAreaList, keyword, applyFlag); + } + + + @Override + public List queryAllOpenAreaByKeyword(String keyword,Boolean applyFlag, Boolean flag) { + long startTime = System.currentTimeMillis(); + //先查出所有的一级菜单 + List openArea = hyOpenAreaInfoDAO.queryFirstLevel(); + log.info("11耗时:{}", System.currentTimeMillis() - startTime); + Map longHyOpenAreaInfoDOMap = openArea.stream().collect(Collectors.toMap(HyOpenAreaInfoDO::getId, x -> x)); + + //查询关键字下所有的数据 原始的数据 + List hyOpenAreaInfoDOS = hyOpenAreaInfoDAO.queryByKeyword(keyword,applyFlag,null,flag); + log.info("22耗时:{}", System.currentTimeMillis() - startTime); + Map hyMap = hyOpenAreaInfoDOS.stream().collect(Collectors.toMap(HyOpenAreaInfoDO::getId, x -> x)); + + Set list = new HashSet(); + hyOpenAreaInfoDOS.stream().forEach(x->{ + Long parentId = x.getParentId(); + HyOpenAreaInfoDO hyOpenAreaInfoDO = hyMap.get(parentId); + if (hyOpenAreaInfoDO==null&&parentId!=null){ + //添加到集合中 + list.add(x.getParentId()); + } + }); + log.info("33耗时:{}", System.currentTimeMillis() - startTime); + if (CollectionUtils.isNotEmpty(list)){ + //二级采单 + List hyOpenAreaInfoDOList = hyOpenAreaInfoDAO.queryByIdsExcludeFirstLevel(new ArrayList<>(list)); + hyOpenAreaInfoDOS.addAll(hyOpenAreaInfoDOList); + //如果二级采单是空 说明list全部是一级采单 + if (CollectionUtils.isEmpty(hyOpenAreaInfoDOList)){ + list.stream().forEach(x->{ + HyOpenAreaInfoDO hyOpenAreaInfoDO = hyMap.get(x); + if (hyOpenAreaInfoDO==null){ + hyOpenAreaInfoDOS.add(longHyOpenAreaInfoDOMap.get(x)); + } + }); + } + hyOpenAreaInfoDOList.stream().forEach(x->{ + Long parentId = x.getParentId(); + HyOpenAreaInfoDO hyOpenAreaInfoDO = hyMap.get(parentId); + if (hyOpenAreaInfoDO==null){ + HyOpenAreaInfoDO infoDO = longHyOpenAreaInfoDOMap.get(parentId); + hyOpenAreaInfoDOS.add(infoDO); + } + }); + } + log.info("44耗时:{}", System.currentTimeMillis() - startTime); + JSONArray objects = buildTree(JSONArray.parseArray(JSONObject.toJSONString(hyOpenAreaInfoDOS)), "id", "parentId","childNode" ); + List openAreaTreeVOS = JSONObject.parseArray(objects.toJSONString(), OpenAreaTreeVO.class); + log.info("55耗时:{}", System.currentTimeMillis() - startTime); + return openAreaTreeVOS; + } + + + @Override + public List getChildrenList(Long parentId) { + List childrenList = hyOpenAreaInfoDAO.getChildrenList( parentId); + List result = new ArrayList<>(); + childrenList.stream().forEach(x->{ + OpenAreaVO openAreaVO = convertDoToVo(x); + result.add(openAreaVO); + }); + return result; + } + + @Override + public Boolean batchUpdate(String userId, OpenAreaRequest request) { + //修改选择的区域 + hyOpenAreaInfoDAO.batchUpdateById(request.getBackgroundBanner(),request.getDetailBanner(),request.getStatus(),userId,request.getIdList()); + //修改选择区域的子区域 子区域不需要更新背景图和详情图 + hyOpenAreaInfoDAO.batchUpdateByParentId(null,null,request.getStatus(),userId,request.getIdList()); + + return Boolean.TRUE; + } + + @Override + public PageInfo queryKeyOpenAreaList(Integer pageSize, Integer pageNumber,String keyWord,Integer status) { + PageHelper.startPage(pageNumber,pageSize); + List hyOpenAreaInfoDOS = hyOpenAreaInfoDAO.queryKeyOpenArea(keyWord,status); + PageInfo hyOpenAreaInfoDOPageInfo = new PageInfo<>(hyOpenAreaInfoDOS); + if (hyOpenAreaInfoDOPageInfo==null){ + return new PageInfo<>(); + } + List list = new ArrayList<>(); + List hyOpenAreaInfoDOList = hyOpenAreaInfoDOPageInfo.getList(); + List userIds = hyOpenAreaInfoDOList.stream().map(HyOpenAreaInfoDO::getUpdateUserId).collect(Collectors.toList()); + List userInfoByUserIds = enterpriseUserDAO.getUserInfoByUserIds(userIds); + Map userMap = userInfoByUserIds.stream().collect(Collectors.toMap(EnterpriseUserDO::getUserId, EnterpriseUserDO::getName)); + hyOpenAreaInfoDOList.stream().forEach(x->{ + OpenAreaVO openAreaVO = convertDoToVo(x); + openAreaVO.setUpdateUserName(userMap.get(x.getUpdateUserId())); + openAreaVO.setUpdateTime(DateUtils.format(x.getUpdateTime(),DateUtils.DATE_FORMAT_19)); + list.add(openAreaVO); + }); + hyOpenAreaInfoDOPageInfo.setList(list); + return hyOpenAreaInfoDOPageInfo; + } + + @Override + public PageInfo franchisableProvinces(Integer pageSize, Integer pageNumber) { + PageHelper.startPage(pageNumber,pageSize); + List openArea = hyOpenAreaInfoDAO.queryFirstLevel(); + PageInfo hyOpenAreaInfoDOPageInfo = new PageInfo<>(openArea); + List list = new ArrayList<>(); + List hyOpenAreaInfoDOList = hyOpenAreaInfoDOPageInfo.getList(); + hyOpenAreaInfoDOList.stream().forEach(x->{ + list.add(convertDoToVo(x)); + }); + hyOpenAreaInfoDOPageInfo.setList(list); + return hyOpenAreaInfoDOPageInfo; + } + + @Override + public Boolean deleteKeyCity(Long id) { + HyOpenAreaInfoDO hyOpenAreaInfoDO = hyOpenAreaInfoDAO.selectById(id); + if (hyOpenAreaInfoDO==null){ + throw new ServiceException(ErrorCodeEnum.OPEN_AREA_IS_NOT_EXISTS); + } + hyOpenAreaInfoDO.setAreaStatus(AreaStatusEnum.OPEN.getCode()); + hyOpenAreaInfoDAO.updateByPrimaryKeySelective(hyOpenAreaInfoDO); + return Boolean.TRUE; + } + + @Override + public Boolean updateKeyCityStatus(Long id, Integer keyOpenStatus) { + HyOpenAreaInfoDO hyOpenAreaInfoDO = hyOpenAreaInfoDAO.selectById(id); + if (hyOpenAreaInfoDO==null){ + throw new ServiceException(ErrorCodeEnum.OPEN_AREA_IS_NOT_EXISTS); + } + hyOpenAreaInfoDO.setKeyOpenStatus(keyOpenStatus); + hyOpenAreaInfoDAO.updateByPrimaryKeySelective(hyOpenAreaInfoDO); + return Boolean.TRUE; + } + + + @Override + public Boolean addOpenArea() { + //查询出所有的市 + List openArea = hyOpenAreaInfoDAO.selectAllCity(); + if (CollectionUtils.isNotEmpty(openArea)){ + //在每个市下面添加名称为不限的区 + openArea.forEach(x->{ + Long id = x.getId(); + HyOpenAreaInfoDO hyOpenAreaInfoDO = new HyOpenAreaInfoDO(); + hyOpenAreaInfoDO.setAreaStatus("open"); + hyOpenAreaInfoDO.setAreaName("不限"); + hyOpenAreaInfoDO.setParentId(id); + hyOpenAreaInfoDO.setAreaPath(x.getAreaPath()+"不限/"); + hyOpenAreaInfoMapper.insertSelective(hyOpenAreaInfoDO); + }); + } + return true; + } + + private OpenAreaVO convertDoToVo(HyOpenAreaInfoDO hyOpenAreaInfoDO){ + OpenAreaVO openAreaVO = new OpenAreaVO(); + openAreaVO.setId(hyOpenAreaInfoDO.getId()); + openAreaVO.setAreaName(hyOpenAreaInfoDO.getAreaName()); + openAreaVO.setParentId(hyOpenAreaInfoDO.getParentId()); + openAreaVO.setAreaPath(hyOpenAreaInfoDO.getAreaPath()); + openAreaVO.setAreaStatus(hyOpenAreaInfoDO.getAreaStatus()); + openAreaVO.setBackgroundBanner(hyOpenAreaInfoDO.getBackgroundBanner()); + openAreaVO.setDetailBanner(hyOpenAreaInfoDO.getDetailBanner()); + openAreaVO.setKeyOpenStatus(hyOpenAreaInfoDO.getKeyOpenStatus()); + return openAreaVO; + } + + + /** + * 构建树 + * @param arr + * @param id + * @param pid + * @param child + * @return + */ + public static JSONArray buildTree(JSONArray arr, String id, String pid, String child) { + //新建一个JSONArray来接收组装成树形结构的返回值 + JSONArray jsonArray = new JSONArray(); + //新建一个JSONObject对象 + JSONObject hash = new JSONObject(); + //将数组转换为object格式 + for (int i = 0; i < arr.size(); i++) { + //获取当前的JSON对象 + JSONObject json = (JSONObject) arr.get(i); + //把当前id作为键,当前JSON对象作为值 put回hash这个Object对象中 + //这里的put方法类似于map的put方法 + hash.put(json.getString(id), json); + } + //遍历结果集 + for (int j = 0; j < arr.size(); j++) { + //单条记录 + JSONObject aVal = (JSONObject) arr.get(j); + //在hash中取出key为单条记录中pid的值 + String pidStr = ""; + //如果父级id不等于null + if (aVal.get(pid) != null) { + pidStr = aVal.get(pid).toString(); + } + //从hash这个对象中获取父级对象 parent + JSONObject hashParent = (JSONObject) hash.get(pidStr); + //如果记录的pid存在,则说明它有父节点,将她添加到孩子节点的集合中 + if (hashParent != null) { + //检查是否有child属性 + if (hashParent.get(child) != null) { + //有子节点 则先将子节点取出 + JSONArray children = (JSONArray) hashParent.get(child); + //然后把当前这个对象放进子节点之中 + children.add(aVal); + //最后把子节点在放回父节点之中 + hashParent.put(child, children); + } else { + //无子节点 则新建一个子节点 + JSONArray children = new JSONArray(); + //然后再把当前对象放进去 + children.add(aVal); + //最后在放回父节点之中 + hashParent.put(child, children); + } + } else { + jsonArray.add(aVal); + } + } + return jsonArray; + } + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenNewShopServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenNewShopServiceImpl.java new file mode 100644 index 000000000..7ecbe0a15 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpenNewShopServiceImpl.java @@ -0,0 +1,159 @@ +package com.cool.store.service.impl; + +import com.cool.store.constants.CommonConstants; +import com.cool.store.dao.*; +import com.cool.store.dto.partner.PartnerOpenNewShopPageDTO; +import com.cool.store.entity.HyOpenAreaInfoDO; +import com.cool.store.entity.LineInfoDO; +import com.cool.store.entity.OpenNewShopRecordDO; +import com.cool.store.entity.SigningBaseInfoDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.IntentAgreementMapper; +import com.cool.store.request.AddShopRequest; +import com.cool.store.request.AuditOpenNewShopRequest; +import com.cool.store.request.PartnerOpenNewShopPageRequest; +import com.cool.store.request.SubmitOpenNewShopRequest; +import com.cool.store.service.LabelService; +import com.cool.store.service.OpenNewShopService; +import com.cool.store.service.ShopService; +import com.cool.store.vo.IsSubmitOpenNewShopVO; +import com.cool.store.vo.PartnerOpenNewShopDetailVO; +import com.cool.store.vo.PartnerOpenNewShopPageVO; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageInfo; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: OpenNewShopServiceImpl + * @Description: + * @date 2024-05-09 15:12 + */ +@Service +public class OpenNewShopServiceImpl implements OpenNewShopService { + + @Resource + private HyOpenAreaInfoDAO hyOpenAreaInfoDAO; + @Resource + private OpenNewShopRecordDAO openNewShopRecordDAO; + @Resource + private IntentAgreementMapper intentAgreementMapper; + @Resource + private EnterpriseUserDAO enterpriseUserDAO; + @Resource + private HyPartnerUserChannelDAO hyPartnerUserChannelDAO; + @Resource + private LabelService labelService; + @Resource + private ShopService shopService; + @Resource + private ShopStageInfoDAO shopStageInfoDAO; + @Resource + private LineInfoDAO lineInfoDAO; + + + @Override + public PageInfo getPartnerOpenNewShopPage(PartnerOpenNewShopPageRequest request) { + if(Objects.nonNull(request.getWantShopAreaId())){ + HyOpenAreaInfoDO areaInfo = hyOpenAreaInfoDAO.selectById(request.getWantShopAreaId()); + if(Objects.nonNull(areaInfo)){ + request.setAreaPath(areaInfo.getAreaPath()); + } + } + Page page = openNewShopRecordDAO.getPartnerOpenNewShopPage(request); + List resultList = Lists.newArrayList(); + if(Objects.nonNull(page) && CollectionUtils.isNotEmpty(page.getResult())){ + List result = page.getResult(); + List lineIds = result.stream().filter(o -> Objects.nonNull(o.getLineId())).map(PartnerOpenNewShopPageDTO::getLineId).distinct().collect(Collectors.toList()); + List wantShopAreaIds = result.stream().filter(o -> Objects.nonNull(o.getWantShopAreaId())).map(PartnerOpenNewShopPageDTO::getWantShopAreaId).distinct().collect(Collectors.toList()); + List developmentManagerUserIds = result.stream().filter(o -> Objects.nonNull(o.getDevelopmentManager())).map(PartnerOpenNewShopPageDTO::getDevelopmentManager).distinct().collect(Collectors.toList()); + List lineSourceIds = result.stream().filter(o -> Objects.nonNull(o.getLineSource())).map(PartnerOpenNewShopPageDTO::getLineSource).distinct().collect(Collectors.toList()); + List userPortraitList = result.stream().filter(x -> StringUtils.isNotEmpty(x.getUserPortrait() )).map(PartnerOpenNewShopPageDTO::getUserPortrait).collect(Collectors.toList()); + List signingBaseInfoDOS = intentAgreementMapper.selectByLineIds(lineIds); + Map wantShopAreaMap = hyOpenAreaInfoDAO.selectNameMapByIds(wantShopAreaIds); + Map userNameMap = enterpriseUserDAO.getUserNameMap(developmentManagerUserIds); + Map channelMap = hyPartnerUserChannelDAO.getChannelMapByIds(lineSourceIds); + Map userPortraitMap = labelService.getUserPortraitMap(userPortraitList); + Map dateMap = signingBaseInfoDOS.stream().collect(Collectors.toMap(SigningBaseInfoDO::getLineId, SigningBaseInfoDO::getCreateTime)); + resultList = PartnerOpenNewShopPageVO.convertList(result, dateMap, wantShopAreaMap, userNameMap, channelMap, userPortraitMap); + } + PageInfo resultPage = new PageInfo(page); + resultPage.setList(resultList); + return resultPage; + } + + @Override + public PartnerOpenNewShopDetailVO getOpenNewShopRecordDetail(Long recordId) { + OpenNewShopRecordDO openNewShopRecord = openNewShopRecordDAO.getOpenNewShopRecordById(recordId); + if(Objects.isNull(openNewShopRecord)){ + throw new ServiceException(ErrorCodeEnum.OPEN_NEW_SHOP_RECORD_NOT_EXIST); + } + return PartnerOpenNewShopDetailVO.convert(openNewShopRecord); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer auditOpenNewShop(AuditOpenNewShopRequest request) { + OpenNewShopRecordDO openNewShopRecord = openNewShopRecordDAO.getOpenNewShopRecordById(request.getRecordId()); + if(Objects.isNull(openNewShopRecord) || openNewShopRecord.getDeleted()){ + throw new ServiceException(ErrorCodeEnum.OPEN_NEW_SHOP_RECORD_NOT_EXIST); + } + if(CommonConstants.ZERO != openNewShopRecord.getAuditResult()){ + throw new ServiceException(ErrorCodeEnum.OPEN_NEW_SHOP_RECORD_AUDITED); + } + if(request.getAuditResult() == CommonConstants.ONE){ + shopService.addShop(new AddShopRequest(openNewShopRecord.getLineId(), request.getShopNameList())); + } + OpenNewShopRecordDO update = new OpenNewShopRecordDO(); + update.setId(request.getRecordId()); + update.setAuditResult(request.getAuditResult()); + return openNewShopRecordDAO.updateOpenNewShopRecord(update); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Long submitOpenNewShop(SubmitOpenNewShopRequest request) { + List recordList = openNewShopRecordDAO.getOpenNewShopRecordList(request.getLineId()); + if(CollectionUtils.isNotEmpty(recordList)){ + List waitAuditRecordList = recordList.stream().filter(o -> CommonConstants.ZERO == o.getAuditResult()).collect(Collectors.toList()); + //过滤待审核的 + if(CollectionUtils.isNotEmpty(waitAuditRecordList)){ + throw new ServiceException(ErrorCodeEnum.OPEN_NEW_SHOP_RECORD_WAIT_AUDIT); + } + List deleteIds = recordList.stream().map(OpenNewShopRecordDO::getId).collect(Collectors.toList()); + openNewShopRecordDAO.deleteOpenNewShopRecord(deleteIds); + } + return openNewShopRecordDAO.insertOpenNewShopRecord(request.convertDO()); + } + + @Override + public IsSubmitOpenNewShopVO isSubmitOpenNewShop(Long lineId) { + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId); + if(Objects.isNull(lineInfo)){ + return new IsSubmitOpenNewShopVO(Boolean.FALSE, null); + } + if(lineInfo.getJoinStatus() != 2){ + return new IsSubmitOpenNewShopVO(Boolean.FALSE, null); + } + //首先获取有没有待审核的记录 + OpenNewShopRecordDO openNewShopRecord = openNewShopRecordDAO.getWaitAuditOpenNewShopRecord(lineId); + if(Objects.nonNull(openNewShopRecord)){ + return new IsSubmitOpenNewShopVO(Boolean.FALSE, openNewShopRecord.getAuditResult()); + } + //没有待审核的记录 去获取店铺是否都已经在验收中 + Integer notOpenShopCount = shopStageInfoDAO.getNotOpenShopCountByLineId(lineId); + return new IsSubmitOpenNewShopVO(notOpenShopCount <= CommonConstants.ZERO, null); + } +} \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpeningOperationPlanImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpeningOperationPlanImpl.java new file mode 100644 index 000000000..6a179b932 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OpeningOperationPlanImpl.java @@ -0,0 +1,237 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.*; +import com.cool.store.dto.Preparation.PreparationDTO; +import com.cool.store.dto.openPreparation.OpenPlanShopInfoDTO; +import com.cool.store.dto.openPreparation.PlanLineDTO; +import com.cool.store.dto.openPreparation.UserNameDTO; +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.entity.OpeningOperationPlanDO; +import com.cool.store.entity.ShopInfoDO; +import com.cool.store.entity.ShopStageInfoDO; +import com.cool.store.enums.AuditStatusEnum; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.OpeningOperationPlanRequest; +import com.cool.store.request.PlanListRequest; +import com.cool.store.service.*; +import com.cool.store.utils.poi.StringUtils; +import com.cool.store.vo.OpeningOperationPlanListVO; +import com.cool.store.vo.OpeningOperationPlanVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Auther: WangShuo + * @Date: 2024/04/22/下午3:15 + * @Version 1.0 + * @注释: + */ +@Service +@Slf4j +public class OpeningOperationPlanImpl implements OpeningOperationPlanService { + + @Resource + private OpeningOperationPlanDAO openingOperationPlanDAO; + @Resource + private EnterpriseUserDAO enterpriseUserDAO; + @Resource + private ShopStageInfoDAO shopStageInfoDAO; + @Resource + private PreparationService preparationService; + @Resource + private RegionService regionService; + @Resource + private ShopInfoDAO shopInfoDAO; + @Resource + private CoolStoreStartFlowService coolStoreStartFlowService; + @Resource + private LineInfoDAO lineInfoDAO; + @Resource + private ShopService shopService; + + @Override + @Transactional(rollbackFor = Exception.class) + public Long savePlan(OpeningOperationPlanRequest request, LoginUserInfo userInfo) { + log.info("addNewPlan request:{}", JSONObject.toJSONString(request)); + if (request.getActivityTheme().length() > CommonConstants.MAX_LENGTH_ONE_HUNDRED) { + log.error("addNewPlan ActivityTheme length error"); + throw new ServiceException(ErrorCodeEnum.ACTIVITY_THEME_LENGTH_FALSE); + } + if (request.getSurveyResult().length() > CommonConstants.MAX_LENGTH_ONE_HUNDRED) { + log.error("addNewPlan SurveyResult length error"); + throw new ServiceException(ErrorCodeEnum.SURVEYRESULT_LENGTH_FALSE); + } + String userId = userInfo.getUserId(); + OpeningOperationPlanDO selectByShopId = openingOperationPlanDAO.selectByShopId(request.getShopId()); + Long planId; + OpeningOperationPlanDO openingOperationPlanDO = request.toOpeningOperationPlanDO(); + openingOperationPlanDO.setResultType(AuditStatusEnum.TODO.getCode()); + if (!Objects.isNull(selectByShopId)) { + //提交修改 + openingOperationPlanDO.setSubmissionTime(new Date()); + openingOperationPlanDO.setSubmittedUserId(userId); + openingOperationPlanDO.setId(selectByShopId.getId()); + openingOperationPlanDO.setUpdateTime(new Date()); + openingOperationPlanDO.setUpdateUserId(userId); + planId = openingOperationPlanDAO.updateSelective(openingOperationPlanDO); + } else { + //新增 + openingOperationPlanDO.setSubmissionTime(new Date()); + openingOperationPlanDO.setSubmittedUserId(userId); + openingOperationPlanDO.setCreateTime(new Date()); + openingOperationPlanDO.setCreateUserId(userId); + planId = openingOperationPlanDAO.insertSelective(openingOperationPlanDO); + } + shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_141); + return planId; + + } + + @Override + public OpeningOperationPlanVO getPlanByShopId(Long shopId) { + log.info("getPlanBy shopId:{}", shopId); + if (Objects.isNull(shopId)) { + log.error(" getPlanByShopId shopId is null"); + throw new ServiceException(ErrorCodeEnum.SHOP_ID_IS_NULL); + } + OpeningOperationPlanDO openingOperationPlanDO = openingOperationPlanDAO.selectByShopId(shopId); + if (Objects.nonNull(openingOperationPlanDO)) { + OpeningOperationPlanVO openingOperationPlanVO = new OpeningOperationPlanVO(openingOperationPlanDO); + String preparationUserIds = openingOperationPlanDO.getPreparationUserIds(); + List stream = Arrays.stream(preparationUserIds.split(CommonConstants.COMMA)).collect(Collectors.toList()); + List nameByUserId = enterpriseUserDAO.getNameByUserId(stream); + String userName = enterpriseUserDAO.getUserName(openingOperationPlanDO.getSubmittedUserId()); + openingOperationPlanVO.setSubmittedUserName(userName); + openingOperationPlanVO.setPreparationUsers(nameByUserId); + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + openingOperationPlanVO.setShopName(shopInfo.getShopName()); + return openingOperationPlanVO; + } + return null; + } + + @Override + public PageInfo getPlanListPage(PlanListRequest request) { + log.info("getPlanListPage request:{}", JSONObject.toJSONString(request)); + PageHelper.startPage(request.getPageNumber(), request.getPageSize()); + //不指定时间为3个月数据 去shop_info表查询店铺名字,店铺code,开店负责人id,督导id,区域id,open_plan,提交时间,审核状态 + List openPlanShopInfoDTOS = openingOperationPlanDAO.getOpenPlanShopListByCondition(request); + //lineinfo 加盟商name,手机号,招商经理name, + if (CollectionUtils.isEmpty(openPlanShopInfoDTOS)) { + log.error("查询运营方案列表没有数据"); + return new PageInfo<>(); + } + List lines = openPlanShopInfoDTOS.stream().filter(o -> o.getLineId() != null).map(OpenPlanShopInfoDTO::getLineId).collect(Collectors.toList()); + List lineInfos = lineInfoDAO.getLines(lines); + List shopIds = openPlanShopInfoDTOS.stream().filter(o -> o.getShopId() != null).map(OpenPlanShopInfoDTO::getShopId).collect(Collectors.toList()); + Map lineInfoMap = lineInfos.stream().collect(Collectors.toMap(PlanLineDTO::getLineId, dto -> dto)); + for (OpenPlanShopInfoDTO openPlanShopInfoDTO : openPlanShopInfoDTOS) { + openPlanShopInfoDTO.setPartnerName(lineInfoMap.getOrDefault(openPlanShopInfoDTO.getLineId(), new PlanLineDTO()).getUsername()); + openPlanShopInfoDTO.setMobile(lineInfoMap.getOrDefault(openPlanShopInfoDTO.getLineId(), new PlanLineDTO()).getMobile()); + openPlanShopInfoDTO.setInvestmentManagerId(lineInfoMap.getOrDefault(openPlanShopInfoDTO.getLineId(), new PlanLineDTO()).getInvestmentManagerId()); + } + PageInfo pageInfo = new PageInfo<>(openPlanShopInfoDTOS); + //开店负责人id,督导id,招商经理id // + Set userIdset = openPlanShopInfoDTOS.stream() + .filter(dto -> dto.getShopManagerUserId() != null) + .map(OpenPlanShopInfoDTO::getShopManagerUserId) + .collect(Collectors.toSet()); + userIdset.addAll(openPlanShopInfoDTOS.stream() + .filter(dto -> dto.getSupervisorUserId() != null) + .map(OpenPlanShopInfoDTO::getSupervisorUserId) + .collect(Collectors.toSet())); + userIdset.addAll(openPlanShopInfoDTOS.stream() + .filter(dto -> dto.getInvestmentManagerId() != null) + .map(OpenPlanShopInfoDTO::getInvestmentManagerId) + .collect(Collectors.toSet())); + List userIdList = new ArrayList<>(userIdset); + Map vonameMap = enterpriseUserDAO.getUserNameMap(userIdList); + log.info("getPlanListPage vonameMap:{}", JSONObject.toJSONString(vonameMap)); + //region + List regionIds = openPlanShopInfoDTOS.stream() + .filter(dto -> dto.getRegionId() != null).map(OpenPlanShopInfoDTO::getRegionId).collect(Collectors.toList()); + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIds); + //阶段状态 + List subStageList = shopStageInfoDAO.getSubStageList(shopIds, ShopSubStageEnum.SHOP_STAGE_14.getShopSubStage()); + Map subStageMap = subStageList.stream().collect(Collectors.toMap(ShopStageInfoDO::getShopId, dto -> dto)); + List openingOperationPlanListVOList = new ArrayList<>(); + openPlanShopInfoDTOS.forEach(x -> { + OpeningOperationPlanListVO openingOperationPlanListVO = new OpeningOperationPlanListVO(); + openingOperationPlanListVO.setShopId(x.getShopId()); + openingOperationPlanListVO.setShopName(x.getShopName()); + openingOperationPlanListVO.setStoreNum(x.getStoreNum()); + openingOperationPlanListVO.setPartnerName(x.getPartnerName()); + openingOperationPlanListVO.setMobile(x.getMobile()); + openingOperationPlanListVO.setRegion(regionNameMap.get(x.getRegionId())); + openingOperationPlanListVO.setInvestmentManagerName + (vonameMap.get(x.getInvestmentManagerId())); + openingOperationPlanListVO.setShopManagerName + (vonameMap.get(x.getShopManagerUserId())); + openingOperationPlanListVO.setSupervisorName( + vonameMap.get(x.getSupervisorUserId())); + openingOperationPlanListVO.setSubmissionTime(x.getSubmissionTime()); + openingOperationPlanListVO.setResultType(x.getResultType()); + openingOperationPlanListVO.setSubStageStatus(subStageMap.getOrDefault(x.getShopId(),new ShopStageInfoDO()).getShopSubStageStatus()); + openingOperationPlanListVOList.add(openingOperationPlanListVO); + }); + pageInfo.setList(openingOperationPlanListVOList); + return pageInfo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean flush(Long shopId) { + ShopStageInfoDO orderStageInfo = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_15); + try { + if (ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_152.getShopSubStageStatus(). + equals(orderStageInfo.getShopSubStageStatus())) { + ShopInfoDO shopInfo = shopService.getShopInfo(shopId); + String shopNum = shopInfo.getStoreNum(); + Boolean firstOrder = coolStoreStartFlowService.getFirstOrder(shopNum); + log.info("saveOrder,flag:{}", firstOrder); + if (firstOrder) { + //更改子阶段状态 + shopStageInfoDAO.updateShopStageAndAuditInfo(shopId, + ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_151, null); + preparationService.whetherToOpenForAcceptance(shopId); + } + } + return Boolean.TRUE; + } catch (Exception e) { + log.error("获取鲜丰订货金异常或更新状态失败"); + throw new ServiceException(ErrorCodeEnum.YLF_ERROR); + } + + } + + @Override + public Boolean getStatus(Long shopId) { + try { + ShopInfoDO shopInfo = shopService.getShopInfo(shopId); + String shopNum = shopInfo.getStoreNum(); + Boolean firstOrder = coolStoreStartFlowService.getFirstOrder(shopNum); + return firstOrder; + } catch (Exception e) { + log.error("获取鲜丰订货金异常或更新状态失败"); + throw new ServiceException(ErrorCodeEnum.XFSG_SERVICE_ERROR); + } + + } + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PointServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PointServiceImpl.java new file mode 100644 index 000000000..821d0d6d0 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PointServiceImpl.java @@ -0,0 +1,1156 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; +import com.cool.store.dao.*; +import com.cool.store.dto.point.AuditNodeDTO; +import com.cool.store.dto.point.MiniPointPageDTO; +import com.cool.store.entity.*; +import com.cool.store.enums.*; +import com.cool.store.enums.point.*; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.*; +import com.cool.store.service.*; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.poi.DateUtils; +import com.cool.store.utils.poi.StringUtils; +import com.cool.store.vo.AuditInfoVO; +import com.cool.store.vo.LinePointBaseInfoVO; +import com.cool.store.vo.point.*; +import com.cool.store.vo.shop.RentInfoToDoVO; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageInfo; +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.tuple.Pair; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.text.MessageFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: ShopPointServiceImpl + * @Description: + * @date 2024-03-29 15:25 + */ +@Slf4j +@Service +public class PointServiceImpl implements PointService { + + @Resource + private ShopInfoDAO shopInfoDAO; + @Resource + private PointInfoDAO pointInfoDAO; + @Resource + private PointDetailInfoDAO pointDetailInfoDAO; + @Resource + private LineInfoDAO lineInfoDAO; + @Resource + private PointRecommendDAO pointRecommendDAO; + @Resource + private RedisUtilPool redisUtilPool; + @Resource + private UserAuthMappingService userAuthMappingService; + @Resource + private PointAuditRecordDAO pointAuditRecordDAO; + @Resource + private PointTodoInfoDAO pointTodoInfoDAO; + @Resource + private EnterpriseUserDAO enterpriseUserDAO; + @Resource + private RegionService regionService; + @Resource + private LabelService labelService; + @Resource + private HyOpenAreaInfoDAO hyOpenAreaInfoDAO; + @Resource + private ShopStageInfoDAO shopStageInfoDAO; + @Resource + private ShopRentInfoDAO shopRentInfoDAO; + @Resource + private ShopAuditInfoDAO shopAuditInfoDAO; + @Resource + private SysRoleService sysRoleService; + @Resource + private CommonService commonService; + @Value("${mybatis.configuration.variables.enterpriseId}") + private String enterpriseId; + + private static final String AUDIT_SETTING_KEY = "audit_setting_key:{0}"; + private static final String POINT_SELECT_KEY = "point_select_key:{0}:{1}"; + + @Override + @Transactional(rollbackFor = Exception.class) + public Long addPointDetailInfo(AddPointDetailRequest shopPointDetailRequest, String userId) { + PointInfoDO pointInfo = AddPointDetailRequest.convertPointDO(shopPointDetailRequest); + pointInfo.setPointCode(generateCode()); + pointInfo.setDevelopmentManager(userId); + pointInfo.setDevelopmentTime(new Date()); + Long pointId = pointInfoDAO.addPointInfo(pointInfo); + PointDetailInfoDO shopPoint = AddPointDetailRequest.convertDO(shopPointDetailRequest); + shopPoint.setPointId(pointId); + return pointDetailInfoDAO.addPointDetailInfo(shopPoint); + } + + @Override + public PointDetailVO getPointDetailInfo(Long pointId, Boolean isGetNodeNo) { + PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(pointId); + if(Objects.isNull(pointInfo)){ + log.error("铺位基本信息不存在"); + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + PointDetailInfoDO pointDetailInfo = pointDetailInfoDAO.getPointDetailInfoByPointId(pointId); + if(Objects.isNull(pointDetailInfo)){ + log.error("铺位详情信息不存在"); + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + String userName = enterpriseUserDAO.getUserName(pointInfo.getDevelopmentManager()); + PointDetailVO result = PointDetailVO.convertVO(pointInfo, pointDetailInfo); + result.setDevelopmentManagerUserName(userName); + result.setRegionNodeName(regionService.getBelongWarRegionName(pointInfo.getRegionId())); + if(Objects.nonNull(isGetNodeNo) && isGetNodeNo){ + result.setCurNodeNo(pointTodoInfoDAO.getCurNodeNoByPoint(pointId)); + } + if(SelectStatusEnum.SELECT_STATUS_1.getCode().equals(pointInfo.getSelectStatus())){ + List canSubmitRentContractShopIds = shopStageInfoDAO.getCanSubmitRentContractShopIds(Arrays.asList(pointInfo.getShopId())); + boolean canSubmitRentContract = CollectionUtils.isEmpty(canSubmitRentContractShopIds) ? Boolean.FALSE : Boolean.TRUE; + result.setCanSubmitRentContract(canSubmitRentContract); + } + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Long updatePointDetailInfo(UpdatePointDetailRequest shopPointDetailRequest) { + PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(shopPointDetailRequest.getPointId()); + if(Objects.isNull(pointInfo)){ + log.error("铺位基本信息不存在"); + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + PointInfoDO shopPointInfo = UpdatePointDetailRequest.convertPointDO(shopPointDetailRequest); + PointDetailInfoDO shopPoint = UpdatePointDetailRequest.convertDO(shopPointDetailRequest); + if(!PointStatusEnum.POINT_STATUS_1.getCode().equals(pointInfo.getPointStatus()) && !shopPoint.isCanSubmitEvaluable()){ + throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); + } + shopPointInfo.setPointScore(shopPoint.getTotalPointScore()); + pointInfoDAO.perfectPointInfo(shopPointInfo); + pointDetailInfoDAO.updatePartFieldPointDetail(shopPoint); + return shopPointDetailRequest.getPointId(); + } + + @Override + public Integer generateEvaluationReport(Long pointId) { + PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(pointId); + PointDetailInfoDO pointDetailInfo = pointDetailInfoDAO.getPointDetailInfoByPointId(pointId); + if(Objects.isNull(pointInfo) || Objects.isNull(pointDetailInfo)){ + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + if(!pointDetailInfo.isCanSubmitEvaluable() || StringUtils.isBlank(pointInfo.getPointArea())){ + throw new ServiceException(ErrorCodeEnum.POINT_NOT_COMPLETE); + } + Integer totalPointScore = pointDetailInfo.getTotalPointScore(); + PointInfoDO updatePointInfo = new PointInfoDO(); + updatePointInfo.setId(pointId); + updatePointInfo.setPointScore(totalPointScore); + updatePointInfo.setPointStatus(PointStatusEnum.POINT_STATUS_2.getCode()); + pointInfoDAO.updatePointInfo(updatePointInfo); + return totalPointScore; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer pointInvalid(Long pointId) { + PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(pointId); + if(Objects.isNull(pointInfo)){ + log.error("铺位基本信息不存在"); + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + if(PointStatusEnum.POINT_STATUS_6.getCode().equals(pointInfo.getPointStatus())){ + throw new ServiceException(ErrorCodeEnum.POINT_SIGNED); + } + PointInfoDO updatePoint = new PointInfoDO(); + updatePoint.setId(pointId); + updatePoint.setPointStatus(PointStatusEnum.POINT_STATUS_7.getCode()); + pointInfoDAO.updatePointInfo(updatePoint); + if(SelectStatusEnum.SELECT_STATUS_1.getCode().equals(pointInfo.getSelectStatus())){ + rollbackSelectPoint(pointInfo.getShopId(), pointInfo.getId()); + } + return pointRecommendDAO.updateRecommendStatus(pointId, PointRecommendStatusEnum.POINT_RECOMMEND_STATUS_6, null); + } + + /** + * 回退选址状态 + * @return + */ + private void rollbackSelectPoint(Long shopId, Long pointId){ + //店铺回退待带选址 + shopInfoDAO.unbindPoint(shopId); + //铺位回退 + pointInfoDAO.recyclePoint(pointId); + //回到待选址状态 + shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_10); + //租赁合同回到未开始 + Integer result = shopStageInfoDAO.updateShopStageToNotStarted(shopId, ShopSubStageEnum.SHOP_STAGE_2); + if(result > CommonConstants.ZERO){ + //删除租赁合同 + shopRentInfoDAO.deleteRentContractByShopId(shopId); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer pointUnbind(Long pointId) { + PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(pointId); + if(Objects.isNull(pointInfo)){ + log.error("铺位基本信息不存在"); + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + if(PointStatusEnum.POINT_STATUS_6.getCode().equals(pointInfo.getPointStatus())){ + throw new ServiceException(ErrorCodeEnum.POINT_SIGNED); + } + if(SelectStatusEnum.SELECT_STATUS_1.getCode().equals(pointInfo.getSelectStatus())){ + rollbackSelectPoint(pointInfo.getShopId(), pointInfo.getId()); + } + //将已选择、已被他人选择的状态更新成待选泽 + return pointRecommendDAO.updateRecommendStatusByStatusAndPointId(pointId, PointRecommendStatusEnum.POINT_RECOMMEND_STATUS_1, Arrays.asList(PointRecommendStatusEnum.POINT_RECOMMEND_STATUS_2, PointRecommendStatusEnum.POINT_RECOMMEND_STATUS_3)); + } + + @Override + public Integer addMapEvaluationReport(AddMapEvaluationReportRequest request) { + PointDetailInfoDO pointDetailInfo = pointDetailInfoDAO.getPointDetailInfoByPointId(request.getPointId()); + if(Objects.isNull(pointDetailInfo)){ + log.error("铺位基本信息不存在"); + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + PointDetailInfoDO updatePoint = new PointDetailInfoDO(); + updatePoint.setId(pointDetailInfo.getId()); + updatePoint.setMapEvaluationReport(request.getMapEvaluationReport()); + return pointDetailInfoDAO.updatePointDetailInfo(updatePoint); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer submitAudit(SubmitPointAuditRequest request) { + Long pointId = request.getPointId(); + PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(pointId); + if(Objects.isNull(pointInfo)){ + log.error("铺位基本信息不存在"); + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + if(!PointStatusEnum.POINT_STATUS_2.getCode().equals(pointInfo.getPointStatus())){ + throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); + } + PointDetailInfoDO pointDetailInfo = pointDetailInfoDAO.getPointDetailInfoByPointId(pointId); + if(Objects.isNull(pointDetailInfo)){ + log.error("铺位详细信息不存在"); + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + int submitAuditCount = pointInfo.getSubmitAuditCount() + 1; + PointInfoDO updatePoint = new PointInfoDO(); + updatePoint.setId(pointId); + updatePoint.setPointStatus(PointStatusEnum.POINT_STATUS_3.getCode()); + updatePoint.setSubmitAuditCount(submitAuditCount); + updatePoint.setOperateUserId(request.getOperateUserId()); + PointDetailInfoDO updatePointDetail = new PointDetailInfoDO(); + updatePointDetail.setId(pointDetailInfo.getId()); + updatePointDetail.setDevelopmentManagerSign(request.getDevelopmentManagerSign()); + updatePointDetail.setDevelopmentManagerSignTime(new Date()); + pointDetailInfoDAO.updatePointDetailInfo(updatePointDetail); + //处理子任务审核记录表 + AuditSettingVO auditSetting = getAuditSetting(); + if(Objects.isNull(auditSetting)){ + throw new ServiceException(ErrorCodeEnum.POINT_AUDIT_NOT_SETTING); + } + List auditNode = dealAuditNode(auditSetting, pointInfo.getRegionId(), request.getOperateUserId(), pointInfo.getDevelopmentManager()); + //获取审批节点上的数据 + List recordList = AuditNodeDTO.convertDO(pointId, submitAuditCount, auditNode); + pointAuditRecordDAO.addPointAuditRecord(recordList); + Map pointAuditRecordMap = recordList.stream().collect(Collectors.toMap(k -> k.getNodeNo(), v -> v)); + dealNextAuditRecord(pointInfo, pointAuditRecordMap, NodeNoEnum.NODE_NO_0.getCode()); + return pointInfoDAO.updatePointInfo(updatePoint); + } + + @Override + public Integer auditSetting(AuditSettingRequest request) { + String cacheKey = MessageFormat.format(AUDIT_SETTING_KEY, enterpriseId); + request.setSecondApproval(Arrays.asList(UserAndPositionRequest.convert("position", null, "战区营运"))); + redisUtilPool.setString(cacheKey, JSONObject.toJSONString(request)); + return null; + } + + @Override + public AuditSettingVO getAuditSetting() { + String cacheKey = MessageFormat.format(AUDIT_SETTING_KEY, enterpriseId); + String auditSetting = redisUtilPool.getString(cacheKey); + if(StringUtils.isBlank(auditSetting)){ + return null; + } + return JSONObject.parseObject(auditSetting, AuditSettingVO.class); + } + + @Override + public List getTodoUserList(Long pointId) { + return pointTodoInfoDAO.getTodoUserList(pointId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer operationUserAudit(String userId, OperationAuditRequest request) { + if(!request.check()){ + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + Long pointId = request.getPointId(); + PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(pointId); + PointDetailInfoDO pointDetailInfo = pointDetailInfoDAO.getPointDetailInfoByPointId(pointId); + if(Objects.isNull(pointInfo) || Objects.isNull(pointDetailInfo)){ + log.info("铺位基本信息不存在"); + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + if(!PointStatusEnum.POINT_STATUS_3.getCode().equals(pointInfo.getPointStatus())){ + log.info("铺位状态不允许该操作"); + throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); + } + if(!userId.equals(pointInfo.getOperateUserId())){ + log.info("运营人员不对"); + throw new ServiceException(ErrorCodeEnum.NO_PERMISSION); + } + PointTodoInfoDO pointTodo = pointTodoInfoDAO.getPointToDoByUserIdAndPointId(userId, pointId); + if(Objects.isNull(pointTodo)){ + log.info("该用户没有待办数据"); + throw new ServiceException(ErrorCodeEnum.USER_NOT_TODO_AUDIT); + } + if(!NodeNoEnum.NODE_NO_2.getCode().equals(pointTodo.getNodeNo())){ + log.info("获取铺位待办数据不对"); + throw new ServiceException(ErrorCodeEnum.POINT_AUDIT_NODE_ERROR); + } + Map pointAuditRecordMap = pointAuditRecordDAO.getPointAuditRecordMap(pointId, pointInfo.getSubmitAuditCount()); + PointAuditRecordDO pointAuditRecord = pointAuditRecordMap.get(NodeNoEnum.NODE_NO_2.getCode()); + if(Objects.isNull(pointAuditRecord) || !AuditStatusEnum.TODO.getCode().equals(pointAuditRecord.getAuditStatus())){ + log.info("铺位处理记录中的数据不对或者状态不对"); + throw new ServiceException(ErrorCodeEnum.POINT_AUDIT_NODE_ERROR); + } + AuditStatusEnum auditStatus = AuditStatusEnum.getByCode(request.getAuditStatus()); + PointDetailInfoDO updatePointDetailInfo = OperationAuditRequest.convertDO(pointDetailInfo.getId(), request); + pointDetailInfoDAO.updatePointDetailInfo(updatePointDetailInfo); + pointTodoInfoDAO.updatePointTodoInfo(pointId, NodeNoEnum.NODE_NO_2.getCode(), pointInfo.getSubmitAuditCount(), userId); + PointAuditRecordDO updateAuditRecord = PointAuditRecordDO.convert(pointAuditRecord.getId(), userId, auditStatus, request.getReason(), NodeNoEnum.NODE_NO_2, request.getSignTime(), request.getSignAddress(), request.getPictureUrl()); + pointAuditRecordDAO.updatePointAuditRecord(updateAuditRecord); + if(AuditStatusEnum.REJECT.equals(auditStatus)){ + return auditRejectDeal(pointInfo, request.getReason()); + } + return dealNextAuditRecord(pointInfo, pointAuditRecordMap, NodeNoEnum.NODE_NO_2.getCode()); + } + + /** + * 初始化上传租赁合同阶段 + * @param pointInfo + */ + private void initUploadRentContract(PointInfoDO pointInfo) { + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(pointInfo.getLineId()); + shopStageInfoDAO.batchUpdateShopStageStatus(pointInfo.getShopId(), Arrays.asList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_12, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_20)); + Map templateParam = new HashMap<>(); + templateParam.put("pointName", pointInfo.getAddress()); + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.SELECT_SUCCESS, templateParam); + } + + /** + * 处理下一个节点的审批记录 + * @param pointInfo + * @param pointAuditRecordMap + * @param currentNo + * @return + */ + private Integer dealNextAuditRecord(PointInfoDO pointInfo, Map pointAuditRecordMap, Integer currentNo){ + Integer result = CommonConstants.ZERO; + PointAuditRecordDO nextAuditRecord = getNextAuditRecord(currentNo, pointAuditRecordMap); + if(Objects.nonNull(nextAuditRecord)){ + pointAuditRecordDAO.updatePointAuditRecord(PointAuditRecordDO.convert(nextAuditRecord.getId(), new Date())); + //审批通过的情况下 生成下一个节点的待办数据 + pointTodoInfoDAO.addPointTodoInfo(PointAuditRecordDO.convertTODO(nextAuditRecord)); + if(NodeNoEnum.NODE_NO_2.getCode().equals(currentNo)){ + PointInfoDO updatePoint = new PointInfoDO(); + updatePoint.setId(pointInfo.getId()); + updatePoint.setPointStatus(PointStatusEnum.POINT_STATUS_4.getCode()); + updatePoint.setStorageStatus(StorageStatusEnum.IN_STORAGE.getCode()); + result = pointInfoDAO.updatePointInfo(updatePoint); + } + List sendMessageUserIds = JSONObject.parseArray(nextAuditRecord.getHandlerUserIds(), String.class); + Map messageMap = new HashMap<>(); + messageMap.put("pointId", String.valueOf(pointInfo.getId())); + messageMap.put("pointName", pointInfo.getPointName()); + messageMap.put("pointAddress", pointInfo.getAddress()); + commonService.sendMessage(sendMessageUserIds, MessageEnum.MESSAGE_13, messageMap); + }else{ + PointInfoDO updatePoint = new PointInfoDO(); + updatePoint.setId(pointInfo.getId()); + //没有下一节点 审批通过 + updatePoint.setPointStatus(PointStatusEnum.POINT_STATUS_5.getCode()); + if(SelectStatusEnum.SELECT_STATUS_1.getCode().equals(pointInfo.getSelectStatus())){ + initUploadRentContract(pointInfo); + } + Map messageMap = new HashMap<>(); + messageMap.put("pointId", String.valueOf(pointInfo.getId())); + messageMap.put("pointName", pointInfo.getPointName()); + messageMap.put("pointAddress", pointInfo.getAddress()); + commonService.sendMessage(Arrays.asList(pointInfo.getDevelopmentManager()), MessageEnum.MESSAGE_11, messageMap); + result = pointInfoDAO.updatePointInfo(updatePoint); + } + return result; + } + + /** + * 铺位审核拒绝处理 + * @param pointInfo + * @param reason + * @return + */ + private Integer auditRejectDeal(PointInfoDO pointInfo, String reason){ + Long pointId = pointInfo.getId(); + PointInfoDO pointInfoUpdate = new PointInfoDO(); + pointInfoUpdate.setId(pointId); + pointInfoUpdate.setPointStatus(PointStatusEnum.POINT_STATUS_2.getCode()); + pointInfoUpdate.setStorageStatus(StorageStatusEnum.NOT_IN_STORAGE.getCode()); + //删除剩余未完成的审核记录 + pointAuditRecordDAO.deletePointAuditRecord(pointId, pointInfo.getSubmitAuditCount()); + Map messageMap = new HashMap<>(); + messageMap.put("pointId", String.valueOf(pointInfo.getId())); + messageMap.put("pointName", pointInfo.getPointName()); + messageMap.put("pointAddress", pointInfo.getAddress()); + messageMap.put("reason", reason); + commonService.sendMessage(Arrays.asList(pointInfo.getDevelopmentManager()), MessageEnum.MESSAGE_12, messageMap); + return pointInfoDAO.updatePointInfo(pointInfoUpdate); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer audit(String userId, PointAuditRequest request) { + if(!request.check()){ + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + Long pointId = request.getPointId(); + PointTodoInfoDO pointTodo = pointTodoInfoDAO.getPointToDoByUserIdAndPointId(userId, pointId); + if(Objects.isNull(pointTodo)){ + log.info("该用户没有待办数据"); + throw new ServiceException(ErrorCodeEnum.USER_NOT_TODO_AUDIT); + } + if(NodeNoEnum.NODE_NO_2.getCode().equals(pointTodo.getNodeNo())){ + log.info("获取铺位待办数据不对"); + throw new ServiceException(ErrorCodeEnum.POINT_AUDIT_NODE_ERROR); + } + PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(pointId); + if(Objects.isNull(pointInfo)){ + log.info("铺位不存在"); + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + AuditStatusEnum auditStatus = AuditStatusEnum.getByCode(request.getAuditStatus()); + //更新当前待办 + pointTodoInfoDAO.updatePointTodoInfo(pointId, pointTodo.getNodeNo(), pointInfo.getSubmitAuditCount(), userId); + Map pointAuditRecordMap = pointAuditRecordDAO.getPointAuditRecordMap(pointId, pointInfo.getSubmitAuditCount()); + PointAuditRecordDO pointAuditRecord = pointAuditRecordMap.get(pointTodo.getNodeNo()); + if(Objects.isNull(pointAuditRecord)){ + log.info("铺位处理记录中的数据不对"); + throw new ServiceException(ErrorCodeEnum.POINT_AUDIT_NODE_ERROR); + } + NodeNoEnum nodeNoEnum = NodeNoEnum.getByCode(pointTodo.getNodeNo()); + PointAuditRecordDO auditRecord = PointAuditRecordDO.convert(pointAuditRecord.getId(), userId, auditStatus, request.getReason(), nodeNoEnum); + pointAuditRecordDAO.updatePointAuditRecord(auditRecord); + if(AuditStatusEnum.REJECT.equals(auditStatus)){ + return auditRejectDeal(pointInfo, request.getReason()); + } + //处理下一节点任务及更新point状态 + return dealNextAuditRecord(pointInfo, pointAuditRecordMap, pointTodo.getNodeNo()); + } + + @Override + public Integer turnDevelopmentManager(TurnDevelopmentManagerRequest request) { + PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(request.getPointId()); + if(Objects.isNull(pointInfo)){ + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + if(SelectStatusEnum.SELECT_STATUS_1.getCode().equals(pointInfo.getSelectStatus()) || PointStatusEnum.POINT_STATUS_6.getCode().equals(pointInfo.getPointStatus())){ + throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); + } + if(PointStatusEnum.POINT_STATUS_7.getCode().equals(pointInfo.getPointStatus())){ + throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); + } + pointInfo.setDevelopmentManager(request.getDevelopmentManager()); + return pointInfoDAO.updatePointInfo(pointInfo); + } + + @Override + public PageInfo getLinePage(PointLinePageRequest request) { + Page lineList = lineInfoDAO.getLinePageByDevelopmentManager(request); + List userPortraitList = lineList.stream().filter(x -> StringUtils.isNotEmpty(x.getUserPortrait() )).map(LineInfoDO::getUserPortrait).collect(Collectors.toList()); + List investmentManagerUserIds = lineList.stream().filter(x -> StringUtils.isNotEmpty(x.getInvestmentManager() )).map(LineInfoDO::getInvestmentManager).collect(Collectors.toList()); + List lineIds = lineList.stream().map(LineInfoDO::getId).collect(Collectors.toList()); + List wantShopAreaIds = lineList.stream().map(LineInfoDO::getWantShopAreaId).collect(Collectors.toList()); + Map recommendShopNumMap = pointRecommendDAO.getPushShopNumMap(lineIds); + Map cityMap = hyOpenAreaInfoDAO.getCityMap(wantShopAreaIds); + Map selectedShopNumMap = shopInfoDAO.getSelectedShopNumMap(lineIds); + Map userNameMap = enterpriseUserDAO.getUserNameMap(investmentManagerUserIds); + Map userPortraitMap = labelService.getUserPortraitMap(userPortraitList); + List resultList = LinePointBaseInfoVO.convertList(lineList, userNameMap, userPortraitMap, cityMap, recommendShopNumMap, selectedShopNumMap); + PageInfo resultPage = new PageInfo(lineList); + resultPage.setList(resultList); + return resultPage; + } + + /** + * 获取单个加盟商信息 + * @param lineId + * @return + */ + @Override + public LinePointBaseInfoVO getLineInfo(Long lineId){ + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId); + Map recommendShopNumMap = pointRecommendDAO.getPushShopNumMap(Arrays.asList(lineId)); + HyOpenAreaInfoDO cityArea = hyOpenAreaInfoDAO.selectById(lineInfo.getWantShopAreaId()); + Map selectedShopNumMap = shopInfoDAO.getSelectedShopNumMap(Arrays.asList(lineId)); + String userName = enterpriseUserDAO.getUserName(lineInfo.getInvestmentManager()); + Map userPortraitMap = labelService.getUserPortraitMap(Arrays.asList(lineInfo.getUserPortrait())); + return LinePointBaseInfoVO.convert(lineInfo, userName, userPortraitMap, cityArea, recommendShopNumMap, selectedShopNumMap); + } + + @Override + public PointHomePageDataVO getMyPointData(String userId) { + return pointInfoDAO.getMyPointData(userId); + } + + @Override + public PageInfo getMyPointPage(PointPageRequest request) { + if(CollectionUtils.isNotEmpty(request.getRegionIds())){ + if(request.getRegionIds().contains(CommonConstants.ROOT_DEPT_ID_STR)){ + request.setRegionIds(null); + }else{ + request.setRegionIds(regionService.getSubRegionIdsByRegionIds(request.getRegionIds())); + } + } + List resultList = new ArrayList(); + Page pointPage = pointInfoDAO.getMyPointPage(request); + if(Objects.nonNull(pointPage) && CollectionUtils.isNotEmpty(pointPage.getResult())){ + List regionIds = pointPage.stream().map(PointInfoDO::getRegionId).distinct().collect(Collectors.toList()); + List developmentManagers = pointPage.stream().map(PointInfoDO::getDevelopmentManager).distinct().collect(Collectors.toList()); + Map userNameMap = enterpriseUserDAO.getUserNameMap(developmentManagers); + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIds); + resultList = PointPageVO.convertVO(pointPage.getResult(), userNameMap, regionNameMap); + } + PageInfo resultPage = new PageInfo(pointPage); + resultPage.setList(resultList); + return resultPage; + } + + @Override + public PageInfo getTeamPointPage(AllPointPageRequest request){ + if(!sysRoleService.checkIsAdmin(request.getCurUserId())){ + request.setAuthRegionIds(userAuthMappingService.getAuthRegionIdAndSubRegionIdByUserId(request.getCurUserId())); + } + if(CollectionUtils.isNotEmpty(request.getRegionIds())){ + if(request.getRegionIds().contains(CommonConstants.ROOT_DEPT_ID_STR)){ + request.setRegionIds(null); + }else{ + request.setRegionIds(regionService.getSubRegionIdsByRegionIds(request.getRegionIds())); + } + } + if(Objects.nonNull(request.getPointStatus()) && PointStatusEnum.POINT_STATUS_3.getCode().equals(request.getPointStatus())){ + request.setPointStatus(PointStatusEnum.POINT_STATUS_4.getCode()); + } + List resultList = new ArrayList(); + Page pointPage = pointInfoDAO.getTeamPointPage(request); + if(Objects.nonNull(pointPage) && CollectionUtils.isNotEmpty(pointPage.getResult())){ + List regionIds = pointPage.stream().map(PointInfoDO::getRegionId).distinct().collect(Collectors.toList()); + List developmentManagers = pointPage.stream().map(PointInfoDO::getDevelopmentManager).distinct().collect(Collectors.toList()); + Map userNameMap = enterpriseUserDAO.getUserNameMap(developmentManagers); + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIds); + resultList = PointPageVO.convertVO(pointPage.getResult(), userNameMap, regionNameMap); + } + PageInfo resultPage = new PageInfo(pointPage); + resultPage.setList(resultList); + return resultPage; + } + + @Override + public List getPointAllAuditRecord(Long pointId) { + List auditRecordList = pointAuditRecordDAO.getPointAllAuditRecord(pointId); + if(CollectionUtils.isEmpty(auditRecordList)){ + return Lists.newArrayList(); + } + List userIds = auditRecordList.stream().map(o->JSONObject.parseArray(o.getHandlerUserIds(), String.class)).flatMap(Collection::stream).distinct().collect(Collectors.toList()); + Map userMap = enterpriseUserDAO.getUserInfoMap(userIds); + return PointAuditRecordVO.convert(auditRecordList, userMap); + } + + @Override + public List getLineRecommendPointList(Long lineId) { + List recommendPointList = pointRecommendDAO.getRecommendPointList(lineId); + List pointIds = recommendPointList.stream().map(PointRecommendDO::getPointId).distinct().collect(Collectors.toList()); + List pointList = pointInfoDAO.getPointListByIds(pointIds); + List regionIds = pointList.stream().map(PointInfoDO::getRegionId).distinct().collect(Collectors.toList()); + List developmentManagers = pointList.stream().map(PointInfoDO::getDevelopmentManager).distinct().collect(Collectors.toList()); + List shopIds = pointList.stream().map(PointInfoDO::getShopId).distinct().collect(Collectors.toList()); + List canSubmitRentContractShopIds = shopStageInfoDAO.getCanSubmitRentContractShopIds(shopIds); + Map userNameMap = enterpriseUserDAO.getUserNameMap(developmentManagers); + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIds); + return PointRecommendPageVO.convertVO(recommendPointList, pointList, userNameMap, regionNameMap, canSubmitRentContractShopIds); + } + + @Override + public PageInfo getRecommendPointList(RecommendPointPageRequest request) { + List resultList = new ArrayList(); + Page pointPage = pointInfoDAO.getRecommendPointList(request); + if(Objects.nonNull(pointPage) && CollectionUtils.isNotEmpty(pointPage.getResult())){ + List regionIds = pointPage.stream().map(PointInfoDO::getRegionId).distinct().collect(Collectors.toList()); + List developmentManagers = pointPage.stream().map(PointInfoDO::getDevelopmentManager).distinct().collect(Collectors.toList()); + Map userNameMap = enterpriseUserDAO.getUserNameMap(developmentManagers); + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIds); + resultList = PointPageVO.convertVO(pointPage.getResult(), userNameMap, regionNameMap); + } + PageInfo resultPage = new PageInfo(pointPage); + resultPage.setList(resultList); + return resultPage; + } + + @Override + public Integer lineRecommendPoint(LineRecommendPointRequest request) { + List pointIds = request.getPointIds(); + List pointList = pointInfoDAO.getPointListByIds(pointIds); + List selectList = pointList.stream().filter(o -> SelectStatusEnum.SELECT_STATUS_1.getCode().equals(o.getSelectStatus())).collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(selectList)){ + String pointNames = selectList.stream().map(PointInfoDO::getPointName).collect(Collectors.joining(",")); + throw new ServiceException(ErrorCodeEnum.ERROR_MESSAGE, pointNames + ",已经被选"); + } + List invalidList = pointList.stream().filter(o -> PointStatusEnum.POINT_STATUS_7.getCode().equals(o.getPointStatus())).collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(invalidList)){ + String pointNames = invalidList.stream().map(PointInfoDO::getPointName).collect(Collectors.joining(",")); + throw new ServiceException(ErrorCodeEnum.ERROR_MESSAGE, pointNames + ",已失效"); + } + List recommendPointList = pointRecommendDAO.getRecommendPointList(request.getLineId()); + if(CollectionUtils.isNotEmpty(recommendPointList)){ + List recommendList = recommendPointList.stream().filter(o -> PointRecommendStatusEnum.POINT_RECOMMEND_STATUS_1.getCode().equals(o.getStatus()) || + PointRecommendStatusEnum.POINT_RECOMMEND_STATUS_2.getCode().equals(o.getStatus()) || + PointRecommendStatusEnum.POINT_RECOMMEND_STATUS_4.getCode().equals(o.getStatus())) + .filter(o->request.getPointIds().contains(o.getPointId())).collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(recommendList)){ + throw new ServiceException(ErrorCodeEnum.ERROR_MESSAGE, "铺位已推送,请勿重复推送"); + } + List selectedList = recommendPointList.stream().filter(o -> PointRecommendStatusEnum.POINT_RECOMMEND_STATUS_3.getCode().equals(o.getStatus())).filter(o->request.getPointIds().contains(o.getPointId())).collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(selectedList)){ + throw new ServiceException(ErrorCodeEnum.ERROR_MESSAGE, "铺位已选,请勿重复推送"); + } + } + List recommendList = request.convertList(); + return pointRecommendDAO.addRecommendPoint(recommendList); + } + + @Override + public Integer pointRecommendLine(PointRecommendLineRequest request) { + Long pointId = request.getPointId(); + PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(pointId); + if(Objects.isNull(pointInfo)){ + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + if(PointStatusEnum.POINT_STATUS_7.getCode().equals(pointInfo.getPointStatus())){ + throw new ServiceException(ErrorCodeEnum.POINT_IS_INVALID); + } + if(SelectStatusEnum.SELECT_STATUS_1.getCode().equals(pointInfo.getSelectStatus())){ + throw new ServiceException(ErrorCodeEnum.POINT_SELECTED); + } + List recommendPointList = pointRecommendDAO.getRecommendPointListByPointId(pointId); + if(CollectionUtils.isNotEmpty(recommendPointList)){ + List recommendList = recommendPointList.stream().filter(o -> PointRecommendStatusEnum.POINT_RECOMMEND_STATUS_2.getCode().equals(o.getStatus()) || + PointRecommendStatusEnum.POINT_RECOMMEND_STATUS_3.getCode().equals(o.getStatus()) || + PointRecommendStatusEnum.POINT_RECOMMEND_STATUS_4.getCode().equals(o.getStatus())) + .filter(o->request.getLineIds().contains(o.getLineId())).collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(recommendList)){ + throw new ServiceException(ErrorCodeEnum.ERROR_MESSAGE, "推送失败,铺位已被选"); + } + List lineIds = recommendPointList.stream().filter(o -> PointRecommendStatusEnum.POINT_RECOMMEND_STATUS_1.getCode().equals(o.getStatus())).filter(o->request.getLineIds().contains(o.getLineId())).map(PointRecommendDO::getLineId).collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(lineIds)){ + lineIds.retainAll(request.getLineIds()); + if(CollectionUtils.isNotEmpty(lineIds)){ + throw new ServiceException(ErrorCodeEnum.ERROR_MESSAGE, "请勿重复推送"); + } + } + } + List recommendList = request.convertList(); + return pointRecommendDAO.addRecommendPoint(recommendList); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer turnLine(TurnLineRequest request) { + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId()); + Long lineId = request.getLineId(); + //更改线索中的拓展经理 + LineInfoDO updateLineInfo = new LineInfoDO(); + updateLineInfo.setId(lineId); + updateLineInfo.setDevelopmentManager(request.getDevelopmentManager()); + lineInfoDAO.updateLineInfo(updateLineInfo); + //更新已被选择的铺位的拓展经理 + pointInfoDAO.updateSelectedDevelopmentManager(lineId, request.getDevelopmentManager()); + String wantShopName = hyOpenAreaInfoDAO.selectNameMapById(lineInfo.getWantShopAreaId()); + + Map messageMap = new HashMap<>(); + messageMap.put("lineId", String.valueOf(lineId)); + messageMap.put("partnerUsername", lineInfo.getUsername()); + messageMap.put("partnerMobile", lineInfo.getMobile()); + messageMap.put("wantShopName", wantShopName); + commonService.sendMessage(Arrays.asList(request.getDevelopmentManager()), MessageEnum.MESSAGE_14, messageMap); + //删除未选择的推荐铺位 + return pointRecommendDAO.turnLineUpdateRecommendStatus(lineId, request.getDevelopmentManager()); + } + + @Override + public Integer updateWantShopNum(UpdateWantShopNumRequest request) { + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId()); + if(Objects.isNull(lineInfo)){ + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + if(!WorkflowStageEnum.INTENT.getCode().equals(lineInfo.getWorkflowStage())){ + throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_MODIFY_WANT_SHOP_NUM); + } + LineInfoDO updateLine = new LineInfoDO(); + updateLine.setId(request.getLineId()); + updateLine.setWantShopNum(request.getWantShopNum()); + return lineInfoDAO.updateLineInfo(updateLine); + } + + @Override + public PageInfo getTodoList(PointTodoPageRequest request) { + Page pointPage = pointTodoInfoDAO.getUserTodoList(request); + List resultList = new ArrayList<>(); + if(Objects.nonNull(pointPage) && CollectionUtils.isNotEmpty(pointPage.getResult())){ + List regionIds = pointPage.stream().map(PointInfoDO::getRegionId).distinct().collect(Collectors.toList()); + List developmentManagers = pointPage.stream().map(PointInfoDO::getDevelopmentManager).distinct().collect(Collectors.toList()); + Map userNameMap = enterpriseUserDAO.getUserNameMap(developmentManagers); + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIds); + resultList = PointPageVO.convertVO(pointPage.getResult(), userNameMap, regionNameMap); + } + PageInfo resultPage = new PageInfo(pointPage); + resultPage.setList(resultList); + return resultPage; + } + + @Override + public PageInfo getLineRecommendPointPage(MiniPointPageRequest request) { + Page pointPage = pointRecommendDAO.getLineRecommendPointPage(request); + List resultList = new ArrayList<>(); + if(Objects.nonNull(pointPage) && CollectionUtils.isNotEmpty(pointPage.getResult())){ + List regionIds = pointPage.getResult().stream().map(MiniPointPageDTO::getRegionId).distinct().collect(Collectors.toList()); + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIds); + resultList = MiniPointPageVO.convertVO(pointPage, regionNameMap, request.getLineId()); + } + PageInfo resultPage = new PageInfo(pointPage); + resultPage.setList(resultList); + return resultPage; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer lineSelectPoint(SelectPointRequest request) { + Long pointId = request.getPointId(), shopId = request.getShopId(), lineId = request.getLineId(); + String lockKey = MessageFormat.format(POINT_SELECT_KEY, enterpriseId, pointId); + if(!redisUtilPool.setNxExpire(lockKey, JSONObject.toJSONString(request), 30)){ + throw new ServiceException(ErrorCodeEnum.POINT_IS_LOCK); + } + try { + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + if(Objects.isNull(shopInfo)){ + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + if(!ShopStageEnum.SHOP_STAGE_1.getShopStage().equals(shopInfo.getShopStage())){ + throw new ServiceException(ErrorCodeEnum.SHOP_STAGE_NOT_OPERATE); + } + if(Objects.nonNull(shopInfo.getPointId())){ + throw new ServiceException(ErrorCodeEnum.SHOP_IS_SELECTED); + } + PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(pointId); + if(Objects.isNull(pointInfo)){ + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + if(SelectStatusEnum.SELECT_STATUS_1.getCode().equals(pointInfo.getSelectStatus())){ + if(lineId.equals(pointInfo.getLineId())){ + throw new ServiceException(ErrorCodeEnum.POINT_ALREADY_SELECT); + } + throw new ServiceException(ErrorCodeEnum.POINT_IS_SELECTED); + } + PointInfoDO updatePoint = new PointInfoDO(); + updatePoint.setId(pointId); + updatePoint.setSelectStatus(SelectStatusEnum.SELECT_STATUS_1.getCode()); + updatePoint.setLineId(lineId); + updatePoint.setShopId(shopId); + pointInfoDAO.updatePointInfo(updatePoint); + ShopInfoDO updateShop = new ShopInfoDO(); + updateShop.setId(shopId); + updateShop.setShopName(pointInfo.getPointName()); + updateShop.setPointId(pointId); + shopInfoDAO.updateShopInfo(updateShop); + ShopSubStageStatusEnum selectStatus = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_11; + PointDetailInfoDO updateDetail = new PointDetailInfoDO(); + updateDetail.setPointId(pointId); + updateDetail.setLineSign(request.getLineSign()); + updateDetail.setLineSignTime(new Date()); + pointDetailInfoDAO.updatePointDetailInfo(updateDetail); + List updateStatusList = new ArrayList<>(); + //如果铺位是已审核 则进入上传租赁合同状态 + if(PointStatusEnum.POINT_STATUS_5.getCode().equals(pointInfo.getPointStatus())){ + selectStatus = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_12; + updateStatusList.add(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_20); + Map templateParam = new HashMap<>(); + templateParam.put("pointName", pointInfo.getAddress()); + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId()); + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.SELECT_SUCCESS, templateParam); + } + updateStatusList.add(selectStatus); + shopStageInfoDAO.batchUpdateShopStageStatus(shopId, updateStatusList); + return pointRecommendDAO.updateStatusByPointIdAndLineId(pointId, lineId); + } catch (ServiceException e) { + throw e; + } finally { + redisUtilPool.delKey(lockKey); + } + } + @Override + @Transactional(rollbackFor = Exception.class) + public Integer lineRejectPoint(RejectPointRequest request){ + return pointRecommendDAO.rejectPoint(request.getLineId(), request.getPointId(), request.getReason()); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public Long miniAddPointDetailInfo(MiniAddPointRequest request) { + Long lineId = request.getCurLineId(); + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId); + if(Objects.isNull(lineInfo)){ + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(request.getShopId()); + if(Objects.isNull(shopInfo)){ + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + if(Objects.nonNull(shopInfo.getPointId())){ + throw new ServiceException(ErrorCodeEnum.SHOP_IS_SELECTED); + } + PointDetailInfoDO pointDetailInfo = MiniAddPointRequest.convertDO(request); + PointInfoDO pointInfo = MiniAddPointRequest.convertPointDO(request); + pointInfo.setRegionId(lineInfo.getRegionId()); + pointInfo.setLineId(lineId); + pointInfo.setSelectStatus(SelectStatusEnum.SELECT_STATUS_1.getCode()); + pointInfo.setDevelopmentManager(lineInfo.getDevelopmentManager()); + pointInfo.setDevelopmentTime(new Date()); + pointInfo.setPointSource(PointSourceEnum.POINT_SOURCE_2.getCode()); + pointInfo.setPointCode(generateCode()); + Long pointId = pointInfoDAO.addPointInfo(pointInfo); + pointDetailInfo.setPointId(pointId); + pointDetailInfoDAO.addPointDetailInfo(pointDetailInfo); + shopInfo.setShopName(pointInfo.getPointName()); + shopInfo.setPointId(pointId); + shopInfoDAO.updateShopInfo(shopInfo); + PointRecommendDO pointRecommendDO = new PointRecommendDO(); + pointRecommendDO.setLineId(lineId); + pointRecommendDO.setDevelopmentManager(lineInfo.getDevelopmentManager()); + pointRecommendDO.setPointId(pointId); + pointRecommendDO.setStatus(PointRecommendStatusEnum.POINT_RECOMMEND_STATUS_2.getCode()); + //推荐列表新增 + pointRecommendDAO.addRecommendPoint(Lists.newArrayList(pointRecommendDO)); + //更新店铺所处阶段 + shopStageInfoDAO.updateShopStageInfo(shopInfo.getId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_11); + PointInfoDO updatePoint = new PointInfoDO(); + updatePoint.setId(pointId); + updatePoint.setShopId(shopInfo.getId()); + pointInfoDAO.updatePointInfo(updatePoint); + return pointId; + } + + @Override + public Integer uploadRentContract(AddRentContractRequest request){ + if(!request.check()){ + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + Long pointId = request.getPointId(), shopId = request.getShopId(); + if(Objects.isNull(pointId) && Objects.nonNull(shopId)){ + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + pointId = shopInfo.getPointId(); + } + if(Objects.nonNull(pointId) && Objects.isNull(shopId)){ + PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(pointId); + shopId = pointInfo.getShopId(); + } + ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_2); + if(Objects.isNull(shopSubStageInfo)){ + throw new ServiceException(ErrorCodeEnum.SHOP_STAGE_ERROR); + } + List operateStatusList = Lists.newArrayList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_20.getShopSubStageStatus(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_22.getShopSubStageStatus()); + if(!operateStatusList.contains(shopSubStageInfo.getShopSubStageStatus())){ + throw new ServiceException(ErrorCodeEnum.SHOP_STAGE_NOT_OPERATE); + } + //是否存在租赁合同 + ShopRentInfoDO rentContract = shopRentInfoDAO.getRentContractByShopId(shopId); + ShopRentInfoDO shopRentInfo = AddRentContractRequest.convertDO(request); + shopRentInfo.setShopId(shopId); + shopRentInfo.setPointId(pointId); + if(Objects.isNull(rentContract)){ + shopRentInfoDAO.addShopRentInfo(shopRentInfo); + }else{ + shopRentInfo.setId(rentContract.getId()); + shopRentInfoDAO.updateRentContract(shopRentInfo); + } + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(shopSubStageInfo.getLineId()); + Map messageMap = new HashMap<>(); + messageMap.put("lineId", String.valueOf(lineInfo.getId())); + messageMap.put("partnerUsername", lineInfo.getUsername()); + messageMap.put("submitTime", DateUtils.parseDateToStr(DateUtils.NOTICE_DATE, new Date())); + commonService.sendMessage(Arrays.asList(lineInfo.getDevelopmentManager()), MessageEnum.MESSAGE_15, messageMap); + return shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_21); + } + + @Override + public ShopRentInfoVO getRentContractDetail(Long shopId) { + ShopRentInfoDO rentContract = shopRentInfoDAO.getRentContractByShopId(shopId); + if(Objects.isNull(rentContract)){ + return null; + } + ShopRentInfoVO result = ShopRentInfoVO.build(rentContract); + ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_2); + result.setStatus(shopSubStageInfo.getShopSubStageStatus()); + boolean isAudit = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_22.getShopSubStageStatus().equals(shopSubStageInfo.getShopSubStageStatus()) || + ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_23.getShopSubStageStatus().equals(shopSubStageInfo.getShopSubStageStatus()); + if(Objects.nonNull(shopSubStageInfo.getAuditId()) && isAudit){ + //当前是审核过的状态才获取原因 + ShopAuditInfoDO auditInfo = shopAuditInfoDAO.getAuditInfo(shopSubStageInfo.getAuditId()); + result.setAuditInfo(AuditInfoVO.convertVO(auditInfo)); + } + return result; + } + + @Override + public Integer auditRentContract(AuditRentContractRequest request) { + Long shopId = request.getShopId(); + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(request.getShopId()); + if(Objects.isNull(shopInfo)){ + throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST); + } + if(!ShopStageEnum.SHOP_STAGE_1.getShopStage().equals(shopInfo.getShopStage())){ + throw new ServiceException(ErrorCodeEnum.SHOP_STAGE_NOT_OPERATE); + } + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(shopInfo.getLineId()); + if(!request.getOperateUserId().equals(lineInfo.getDevelopmentManager())){ + throw new ServiceException(ErrorCodeEnum.NO_PERMISSION); + } + Long auditId = shopAuditInfoDAO.addAuditInfo(AuditRentContractRequest.convert(request, AuditTypeEnum.UPLOAD_RENT_CONTRACT)); + + ShopSubStageStatusEnum subStageStatus = AuditResultTypeEnum.PASS.getCode().equals(request.getResultType()) ? ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_23 : ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_22; + if(AuditResultTypeEnum.REJECT.getCode().equals(request.getResultType())){ + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.RENT_CONTRACT_AUDIT_FAIL, null); + } + if(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_23.equals(subStageStatus)){ + //审核通过铺位变为已签约 + PointInfoDO updatePoint = new PointInfoDO(); + updatePoint.setId(shopInfo.getPointId()); + updatePoint.setPointStatus(PointStatusEnum.POINT_STATUS_6.getCode()); + pointInfoDAO.updatePointInfo(updatePoint); + shopStageInfoDAO.batchUpdateShopStageStatus(shopId, Lists.newArrayList(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_30, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_40)); + ShopInfoDO updateShop = new ShopInfoDO(); + updateShop.setId(shopId); + updateShop.setShopStage(ShopStageEnum.SHOP_STAGE_2.getShopStage()); + List roleList = Arrays.asList(UserRoleEnum.THEATER_MANAGER, UserRoleEnum.OPERATIONS_MANAGER, UserRoleEnum.REGION_MANAGER); + String shopManagerUserId = sysRoleService.getUserIdByRegionIdWithRolePriority(shopInfo.getRegionId(), roleList); + if(StringUtils.isBlank(shopManagerUserId)){ + shopManagerUserId = userAuthMappingService.getShopManagerUserId(); + } + updateShop.setShopManagerUserId(shopManagerUserId); + shopInfoDAO.updateShopInfo(updateShop); + //发送验证码 + commonService.sendSms(lineInfo.getMobile(),SMSMsgEnum.LICENSE_SUBMITTED); + //发送工作通知 + Map requestMap = new HashMap<>(); + requestMap.put("partnerName",lineInfo.getUsername()); + requestMap.put("partnerMobile",lineInfo.getMobile()); + requestMap.put("lineId",String.valueOf(lineInfo.getId())); + requestMap.put("shopId",String.valueOf(shopId)); + if (Objects.nonNull(shopInfo.getShopName())) { + requestMap.put("storeName",shopInfo.getShopName()); + commonService.sendMessage(Arrays.asList(lineInfo.getInvestmentManager()),MessageEnum.MESSAGE_16,requestMap); + }else { + commonService.sendMessage(Arrays.asList(lineInfo.getInvestmentManager()),MessageEnum.MESSAGE_16_1,requestMap); + } + } + return shopStageInfoDAO.updateShopStageAndAuditInfo(shopId, subStageStatus, auditId); + } + + @Override + public Integer updateRentContract(UpdateRentContractRequest request){ + if(!request.check()){ + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + ShopRentInfoDO shopRentInfo = UpdateRentContractRequest.convertDO(request); + ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_2); + if(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_22.getShopSubStageStatus().equals(shopSubStageInfo.getShopSubStageStatus())){ + shopStageInfoDAO.updateShopStageAndAuditInfo(shopRentInfo.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_21, null); + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(shopSubStageInfo.getLineId()); + Map messageMap = new HashMap<>(); + messageMap.put("lineId", String.valueOf(lineInfo.getId())); + messageMap.put("partnerUsername", lineInfo.getUsername()); + messageMap.put("submitTime", DateUtils.parseDateToStr(DateUtils.NOTICE_DATE, new Date())); + commonService.sendMessage(Arrays.asList(lineInfo.getDevelopmentManager()), MessageEnum.MESSAGE_15, messageMap); + } + return shopRentInfoDAO.updateRentContract(shopRentInfo); + } + + @Override + public PageInfo getSelectPointToDoPage(String userId, Integer pageNumber, Integer pageSize) { + PointTodoPageRequest request = new PointTodoPageRequest(); + request.setDevelopmentManager(userId); + request.setPageNum(pageNumber); + request.setPageSize(pageSize); + Page pointPage = pointTodoInfoDAO.getUserTodoList(request); + List resultList = new ArrayList<>(); + if(Objects.nonNull(pointPage) && CollectionUtils.isNotEmpty(pointPage.getResult())){ + List regionIds = pointPage.stream().map(PointInfoDO::getRegionId).distinct().collect(Collectors.toList()); + List pointIds = pointPage.stream().map(PointInfoDO::getId).collect(Collectors.toList()); + //获取提交时间 + Map submitTimeMap = pointAuditRecordDAO.getPointSubmitTimeMap(pointIds); + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIds); + resultList = PointToDoVO.convertVO(pointPage.getResult(), regionNameMap, submitTimeMap); + } + PageInfo resultPage = new PageInfo(pointPage); + resultPage.setList(resultList); + return resultPage; + } + + @Override + public PageInfo getRentContractToDoPage(String userId, Integer pageNumber, Integer pageSize) { + Page todoPage = shopStageInfoDAO.getRentContractToDoPage(userId, pageNumber, pageSize); + List resultList = null; + if(Objects.nonNull(todoPage) && CollectionUtils.isNotEmpty(todoPage.getResult())){ + List shopIds = todoPage.getResult().stream().map(RentInfoToDoVO::getShopId).collect(Collectors.toList()); + List shopList = shopInfoDAO.getShopListByIds(shopIds); + Map shopPointMap = shopList.stream().collect(Collectors.toMap(k->k.getId(), v->v.getPointId())); + List regionIds = shopList.stream().map(ShopInfoDO::getRegionId).distinct().collect(Collectors.toList()); + List pointIds = shopList.stream().map(ShopInfoDO::getPointId).collect(Collectors.toList()); + List pointList = pointInfoDAO.getPointListByIds(pointIds); + Map pointMap = ListUtils.emptyIfNull(pointList).stream().collect(Collectors.toMap(k->k.getId(), Function.identity())); + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIds); + List rentContractList = shopRentInfoDAO.getRentContractByShopIds(shopIds); + Map rentContractSubmitTimeMap = ListUtils.emptyIfNull(rentContractList).stream().collect(Collectors.toMap(k->k.getShopId(), v->v.getCreateTime())); + resultList = RentInfoToDoVO.convert(todoPage, shopPointMap, pointMap, regionNameMap, rentContractSubmitTimeMap); + } + PageInfo resultPage = new PageInfo(todoPage); + resultPage.setList(resultList); + return resultPage; + } + + public List dealAuditNode(AuditSettingVO auditSetting, Long regionId, String operateUserId, String developmentManager) { + List roleIds = new ArrayList<>(); + //审核人 + Pair, List> firstApproval = getUserIdsAndPositionIds(auditSetting.getFirstApproval()); + Pair, List> thirdApproval = getUserIdsAndPositionIds(auditSetting.getThirdApproval()); + Pair, List> fourthApproval = getUserIdsAndPositionIds(auditSetting.getFourthApproval()); + Pair, List> fifthApproval = getUserIdsAndPositionIds(auditSetting.getFifthApproval()); + if(CollectionUtils.isNotEmpty(firstApproval.getValue())){ + roleIds.addAll(firstApproval.getValue()); + } + if(CollectionUtils.isNotEmpty(thirdApproval.getValue())){ + roleIds.addAll(thirdApproval.getValue()); + } + if(CollectionUtils.isNotEmpty(fourthApproval.getValue())){ + roleIds.addAll(fourthApproval.getValue()); + } + if(CollectionUtils.isNotEmpty(fifthApproval.getValue())){ + roleIds.addAll(fifthApproval.getValue()); + } + List resultList = new ArrayList<>(); + Map> userIdsMap = userAuthMappingService.getUserIdByRoleIdAndRegionId(roleIds, regionId); + List firstApprovalUserIds = getUserIdsByPositionIds(firstApproval, userIdsMap); + List thirdApprovalUserIds = getUserIdsByPositionIds(thirdApproval, userIdsMap); + List fourthApprovalUserIds = getUserIdsByPositionIds(fourthApproval, userIdsMap); + List fifthApprovalUserIds = getUserIdsByPositionIds(fifthApproval, userIdsMap); + resultList.add(new AuditNodeDTO(NodeNoEnum.NODE_NO_0.getCode(), PointAuditRecordDO.SUBMIT_TASK, Boolean.FALSE, Arrays.asList(developmentManager))); + if(CollectionUtils.isNotEmpty(firstApprovalUserIds)){ + resultList.add(new AuditNodeDTO(NodeNoEnum.NODE_NO_1.getCode(), PointAuditRecordDO.RECEIVE_TASK, Boolean.TRUE, firstApprovalUserIds)); + resultList.add(new AuditNodeDTO(NodeNoEnum.NODE_NO_2.getCode(), Arrays.asList(operateUserId))); + }else{ + resultList.add(new AuditNodeDTO(NodeNoEnum.NODE_NO_2.getCode(), PointAuditRecordDO.RECEIVE_TASK, Boolean.TRUE, Arrays.asList(operateUserId))); + } + + if(CollectionUtils.isNotEmpty(thirdApprovalUserIds)){ + resultList.add(new AuditNodeDTO(NodeNoEnum.NODE_NO_3.getCode(), thirdApprovalUserIds)); + } + if(CollectionUtils.isNotEmpty(fourthApprovalUserIds)){ + resultList.add(new AuditNodeDTO(NodeNoEnum.NODE_NO_4.getCode(), fourthApprovalUserIds)); + } + if(CollectionUtils.isNotEmpty(fifthApprovalUserIds)){ + resultList.add(new AuditNodeDTO(NodeNoEnum.NODE_NO_5.getCode(), fifthApprovalUserIds)); + } + return resultList; + } + + /** + * 获取配置的userId 和 角色id + * @param requests + * @return + */ + private Pair, List> getUserIdsAndPositionIds(List requests){ + List positionIds = ListUtils.emptyIfNull(requests).stream().filter(o -> "position".equals(o.getType())).map(UserAndPositionRequest::getValue).collect(Collectors.toList()); + List userIds = ListUtils.emptyIfNull(requests).stream().filter(o -> "person".equals(o.getType())).map(UserAndPositionRequest::getValue).collect(Collectors.toList()); + return Pair.of(userIds, positionIds); + } + + /** + * 获取userId + * @param userIdsAndPositionIds + * @param userIdsMap + * @return + */ + private List getUserIdsByPositionIds(Pair, List> userIdsAndPositionIds, Map> userIdsMap) { + Set userIds = new HashSet<>(); + if(CollectionUtils.isNotEmpty(userIdsAndPositionIds.getKey())){ + userIds.addAll(userIdsAndPositionIds.getKey()); + } + if(CollectionUtils.isNotEmpty(userIdsAndPositionIds.getValue())){ + userIdsAndPositionIds.getValue().forEach(positionId -> { + List userIdList = userIdsMap.get(positionId); + if(CollectionUtils.isNotEmpty(userIdList)){ + userIds.addAll(userIdList); + } + }); + } + return new ArrayList<>(userIds); + } + + private PointAuditRecordDO getNextAuditRecord(Integer currentNodeNo, Map auditRecordMap){ + List nextNodeNoList = NodeNoEnum.getNextNodeNoList(currentNodeNo); + if(CollectionUtils.isEmpty(nextNodeNoList)){ + return null; + } + for (NodeNoEnum nodeNoEnum : nextNodeNoList) { + PointAuditRecordDO pointAuditRecord = auditRecordMap.get(nodeNoEnum.getCode()); + if(Objects.nonNull(pointAuditRecord)){ + return pointAuditRecord; + } + } + return null; + } + + /** + * 生成code + * @return + */ + private String generateCode() { + // 获取当前时间戳,格式化为YYYYMMddHHmmssSSS + LocalDateTime now = LocalDateTime.now(); + String timestampStr = now.format(DateTimeFormatter.ofPattern("yyMMddHHmmssSSS")); + // 组合成订单编号,这里假设订单编号格式为:时间戳-序列号 + return timestampStr; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PreparationServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PreparationServiceImpl.java new file mode 100644 index 000000000..97b0fecb4 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PreparationServiceImpl.java @@ -0,0 +1,290 @@ +package com.cool.store.service.impl; + +import com.cool.store.constants.CommonConstants; +import com.cool.store.dao.*; +import com.cool.store.dto.Preparation.PreparationDTO; +import com.cool.store.dto.Preparation.ScheduleDTO; +import com.cool.store.dto.decoration.ConstructionScheduleDTO; +import com.cool.store.dto.decoration.DecorationDTO; +import com.cool.store.dto.decoration.ProjectDTO; +import com.cool.store.dto.openPreparation.OpenPlanShopInfoDTO; +import com.cool.store.entity.*; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.MessageEnum; +import com.cool.store.enums.point.ShopStageEnum; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.PreparationRequest; +import com.cool.store.service.*; +import com.cool.store.utils.poi.DateUtils; +import com.cool.store.utils.poi.StringUtils; +import com.cool.store.utils.poi.constant.Constants; +import com.cool.store.vo.Preparation.PreparationProcessVO; +import com.cool.store.vo.Preparation.PreparationScheduleDetailVO; +import com.cool.store.vo.Preparation.PreparationScheduleVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2024/4/22 16:21 + * @Version 1.0 + */ +@Service +public class PreparationServiceImpl implements PreparationService { + + private static final Logger log = LoggerFactory.getLogger(PreparationServiceImpl.class); + @Resource + private CommonService commonService; + @Resource + private ShopStageInfoDAO shopStageInfoDAO; + @Resource + private OpenAcceptanceInfoDAO openAcceptanceInfoDAO; + @Resource + private SysRoleService sysRoleService; + @Resource + private UserAuthMappingService userAuthMappingService; + @Resource + private RegionService regionService; + @Resource + ShopInfoDAO shopInfoDAO; + @Resource + EnterpriseUserDAO enterpriseUserDAO; + @Resource + LineInfoDAO lineInfoDAO; + @Resource + private AcceptanceInfoDAO acceptanceInfoDAO; + @Resource + private DecorationService decorationService; + + @Override + public PageInfo getPreparationSchedule(PreparationRequest request) { + if (!sysRoleService.checkIsAdmin(request.getCurUserId())) { + request.setAuthRegionIds(userAuthMappingService.getAuthRegionIdAndSubRegionIdByUserId(request.getCurUserId())); + } + if (CollectionUtils.isNotEmpty(request.getRegionIds())) { + if (request.getRegionIds().contains(CommonConstants.ROOT_DEPT_ID_STR)) { + request.setRegionIds(null); + } else { + request.setRegionIds(regionService.getSubRegionIdsByRegionIds(request.getRegionIds())); + } + } + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + //开业进度数据 + List preparationDTOS = shopInfoDAO.ListByCondition(request); + PageInfo pageInfo = new PageInfo<>(preparationDTOS); + List shopIds = preparationDTOS.stream().map(PreparationDTO::getId).collect(Collectors.toList()); + List scheduleList = shopStageInfoDAO.getScheduleList(shopIds); + List shopContractActualCompletionTime = shopStageInfoDAO.getShopContractActualCompletionTime(shopIds); + Map scheduleDTOMap = scheduleList.stream().collect(Collectors.toMap(ScheduleDTO::getShopId, x -> x)); + Map shopStageInfoDOMap = shopContractActualCompletionTime.stream().collect(Collectors.toMap(ShopStageInfoDO::getShopId, x -> x)); + List regionIds = preparationDTOS.stream().map(PreparationDTO::getRegionId).collect(Collectors.toList()); + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIds); + Set userIds = preparationDTOS.stream().filter(x -> StringUtils.isNotEmpty(x.getShopManagerUserId())).map(PreparationDTO::getShopManagerUserId).collect(Collectors.toSet()); + userIds.addAll(preparationDTOS.stream().filter(x -> StringUtils.isNotEmpty(x.getInvestmentManager())).map(PreparationDTO::getInvestmentManager).collect(Collectors.toSet())); + userIds.addAll(preparationDTOS.stream().filter(x -> StringUtils.isNotEmpty(x.getSupervisorUserId())).map(PreparationDTO::getSupervisorUserId).collect(Collectors.toSet())); + Map userInfoMap = enterpriseUserDAO.getUserInfoMap(new ArrayList<>(userIds)); + + List preparationScheduleVOS = new ArrayList<>(); + preparationDTOS.forEach(x -> { + PreparationScheduleVO preparationScheduleVO = new PreparationScheduleVO(); + preparationScheduleVO.setMobile(x.getMobile()); + preparationScheduleVO.setUsername(x.getUsername()); + preparationScheduleVO.setShopId(x.getId()); + preparationScheduleVO.setLineId(x.getLineId()); + preparationScheduleVO.setShopName(x.getShopName()); + preparationScheduleVO.setPlanOpenTime(x.getPlanOpenTime()); + preparationScheduleVO.setStoreNum(x.getStoreNum()); + preparationScheduleVO.setShopManagerUserName(userInfoMap.getOrDefault(x.getShopManagerUserId(), new EnterpriseUserDO()).getName()); + preparationScheduleVO.setSupervisionName(userInfoMap.getOrDefault(x.getSupervisorUserId(), new EnterpriseUserDO()).getName()); + preparationScheduleVO.setInvestmentManagerName(userInfoMap.getOrDefault(x.getInvestmentManager(), new EnterpriseUserDO()).getName()); + preparationScheduleVO.setRegionNodeName(regionNameMap.getOrDefault(x.getRegionId(), "")); + ScheduleDTO dto = scheduleDTOMap.getOrDefault(x.getId(), new ScheduleDTO()); + preparationScheduleVO.setCompletionColumn(dto.getCompletionColumn()); + //-1 去掉视觉验收 + preparationScheduleVO.setTotalColumn(dto.getTotalColumn()-1); + ShopStageInfoDO stageInfoDO = shopStageInfoDOMap.getOrDefault(x.getId(), new ShopStageInfoDO()); + if (StringUtils.isNotEmpty(stageInfoDO.getActualCompleteTime())) { + preparationScheduleVO.setContractCompletionTime(DateUtils.strToDate(stageInfoDO.getActualCompleteTime(), DateUtils.YYYY_MM_DD_HH_MM_SS)); + } + preparationScheduleVO.setDays(); + preparationScheduleVOS.add(preparationScheduleVO); + }); + pageInfo.setList(preparationScheduleVOS); + return pageInfo; + } + + @Override + public PreparationScheduleDetailVO getPreparationDetail(Long shopId) { + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + if (shopInfo == null) { + throw new ServiceException(ErrorCodeEnum.SHOP_ID_IS_NULL); + } + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(shopInfo.getLineId()); + + List shopContractActualCompletionTime = shopStageInfoDAO.getScheduleList(Collections.singletonList(shopId)); + PreparationScheduleDetailVO preparationScheduleDetailVO = new PreparationScheduleDetailVO(); + List shop = shopStageInfoDAO.getShopContractActualCompletionTime(Collections.singletonList(shopId)); + Set userSet = new HashSet<>(); + if (StringUtils.isNotEmpty(lineInfo.getInvestmentManager())) { + userSet.add(lineInfo.getInvestmentManager()); + } + if (StringUtils.isNotEmpty(lineInfo.getDevelopmentManager())) { + userSet.add(lineInfo.getDevelopmentManager()); + } + Map regionNameMap = regionService.getBelongWarRegionNameMap(Collections.singletonList(shopInfo.getRegionId())); + Map userInfoMap = enterpriseUserDAO.getUserInfoMap(new ArrayList(userSet)); + preparationScheduleDetailVO.setShopId(shopId); + preparationScheduleDetailVO.setUsername(lineInfo.getUsername()); + preparationScheduleDetailVO.setMobile(lineInfo.getMobile()); + preparationScheduleDetailVO.setJoinStatus(lineInfo.getJoinStatus()); + preparationScheduleDetailVO.setShopName(shopInfo.getShopName()); + preparationScheduleDetailVO.setPlanOpenTime(shopInfo.getPlanOpenTime()); + preparationScheduleDetailVO.setStoreNum(shopInfo.getStoreNum()); + preparationScheduleDetailVO.setJoinStatus(lineInfo.getJoinStatus()); + if (CollectionUtils.isNotEmpty(shopContractActualCompletionTime)) { + ScheduleDTO scheduleDTO = shopContractActualCompletionTime.get(CommonConstants.ZERO); + preparationScheduleDetailVO.setCompletionColumn(scheduleDTO.getCompletionColumn()); + preparationScheduleDetailVO.setTotalColumn(scheduleDTO.getTotalColumn()-1); + preparationScheduleDetailVO.setPlanCompletionTime(scheduleDTO.getPlanCompleteTime()); + } + if (CollectionUtils.isNotEmpty(shop)) { + ShopStageInfoDO shopStageInfoDO = shop.get(CommonConstants.ZERO); + preparationScheduleDetailVO.setContractCompletionTime(DateUtils.strToDate(shopStageInfoDO.getActualCompleteTime(), DateUtils.YYYY_MM_DD_HH_MM_SS)); + } + EnterpriseUserDO developmentManager = userInfoMap.getOrDefault(lineInfo.getDevelopmentManager(), new EnterpriseUserDO()); + EnterpriseUserDO investmentManager = userInfoMap.getOrDefault(lineInfo.getInvestmentManager(), new EnterpriseUserDO()); + preparationScheduleDetailVO.setDevelopmentManagerName(developmentManager.getName()); + preparationScheduleDetailVO.setDevelopmentManagerMobile(developmentManager.getMobile()); + preparationScheduleDetailVO.setInvestmentManagerName(investmentManager.getName()); + preparationScheduleDetailVO.setInvestmentManagerMobile(investmentManager.getMobile()); + preparationScheduleDetailVO.setRegionNodeName(regionNameMap.get(shopInfo.getRegionId())); + preparationScheduleDetailVO.setDays(); + return preparationScheduleDetailVO; + } + + @Override + public PreparationProcessVO getPreparationProcess(Long shopId) { + PreparationProcessVO preparationProcess = shopStageInfoDAO.getPreparationProcess(shopId); + if (preparationProcess == null){ + return null; + } + preparationProcess.setTotalCount(14); + return preparationProcess; + } + + @Override + public void contractAndBuildStoreCompletion(Long shopId) { + List shopStageInfo = shopStageInfoDAO.getShopStageInfo(shopId, null); + if (CollectionUtils.isNotEmpty(shopStageInfo)) { + Map shopStageInfoDOMap = shopStageInfo.stream().collect(Collectors.toMap(ShopStageInfoDO::getShopSubStage, data -> data)); + Boolean buildStoreCompletionFlag = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_33.getShopSubStageStatus().equals(shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_3.getShopSubStage()).getShopSubStageStatus()); + Boolean contractCompletionFlag = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_73.getShopSubStageStatus().equals(shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_7.getShopSubStage()).getShopSubStageStatus()); + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(shopInfo.getLineId()); + //都完成了 初始化后续流程数据 + if (buildStoreCompletionFlag && contractCompletionFlag) { + //初始化后续流程数据 设计阶段 装修阶段 开业运营方案 首批订货清单 + List list = new ArrayList<>(); + ShopStageInfoDO data1 = shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_9.getShopSubStage()); + data1.setShopSubStageStatus(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_90.getShopSubStageStatus()); + list.add(data1); + ShopStageInfoDO data2 = shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_11.getShopSubStage()); + data2.setShopSubStageStatus(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_110.getShopSubStageStatus()); + list.add(data2); + //初始化xfsg_acceptance_info表 + AcceptanceInfoDO acceptanceInfoDO1 = acceptanceInfoDAO.selectByShopId(shopId); + AcceptanceInfoDO acceptanceInfoDO = new AcceptanceInfoDO(); + acceptanceInfoDO.setShopId(shopId); + acceptanceInfoDO.setCreateTime(new Date()); + if(Objects.isNull(acceptanceInfoDO1)) { + acceptanceInfoDAO.insertSelectiveAcceptanceInfo(acceptanceInfoDO); + } + ShopStageInfoDO data3 = shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_14.getShopSubStage()); + data3.setShopSubStageStatus(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_140.getShopSubStageStatus()); + list.add(data3); + //发送督导钉钉 + Map messageMap = new HashMap<>(); + messageMap.put("storeName",shopInfo.getShopName()); + messageMap.put("shopId",String.valueOf(shopId)); + messageMap.put("lineId", shopInfo.getLineId().toString()); + messageMap.put("partnerUsername",lineInfo.getUsername()); + messageMap.put("shopName",shopInfo.getShopName()); + messageMap.put("partnerMobile",lineInfo.getMobile()); + commonService.sendMessage(Arrays.asList(shopInfo.getSupervisorUserId()), MessageEnum.MESSAGE_26, messageMap); + ShopStageInfoDO data4 = shopStageInfoDOMap.get(ShopSubStageEnum.SHOP_STAGE_15.getShopSubStage()); + data4.setShopSubStageStatus(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_150.getShopSubStageStatus()); + list.add(data4); + //发送督导钉钉 + Map messageMap1 = new HashMap<>(); + messageMap1.put("storeName",shopInfo.getShopName()); + messageMap1.put("shopId",String.valueOf(shopId)); + messageMap1.put("shopName",shopInfo.getShopName()); + messageMap1.put("lineId", String.valueOf(shopInfo.getLineId())); + messageMap1.put("partnerUsername",lineInfo.getUsername()); + messageMap1.put("partnerMobile",lineInfo.getMobile()); + commonService.sendMessage(Arrays.asList(shopInfo.getSupervisorUserId()), MessageEnum.MESSAGE_27, messageMap1); + shopStageInfoDAO.batchUpdate(list); + } + } + } + + @Override + public void whetherToOpenForAcceptance(Long shopId) { + Integer allCompletionCount = shopStageInfoDAO.getAllCompletionCount(shopId); + //如果等于6 表示前面阶段都已经完成 初始化开业验收数据 + if (allCompletionCount.equals(CommonConstants.FIVE)) { + OpenAcceptanceInfoDO openAcceptanceInfoDO = new OpenAcceptanceInfoDO(); + openAcceptanceInfoDO.setShopId(shopId); + openAcceptanceInfoDO.setAcceptanceStatus(CommonConstants.ZERO); + openAcceptanceInfoDAO.insertSelective(openAcceptanceInfoDO); + shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_160); + } + } + + @Override + public Boolean decorationFlush(Long shopId) { + List shopStageInfo = shopStageInfoDAO.getShopStageInfo(shopId, ShopStageEnum.SHOP_STAGE_2.getShopStage()); + Map collect = shopStageInfo.stream().collect(Collectors.toMap(ShopStageInfoDO::getShopSubStage, Function.identity())); + //设计 + Boolean flushFlag = Boolean.FALSE; + Integer Status900 = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_90.getShopSubStageStatus(); + Integer Design = collect.get(ShopSubStageEnum.SHOP_STAGE_9.getShopSubStage()).getShopSubStageStatus(); + if (Status900.equals(Design)) { + decorationService.DesignInfo(shopId); + flushFlag = Boolean.TRUE; + } + //装修款 + Integer Status1000 = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_100.getShopSubStageStatus(); + Integer Status1010 = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_101.getShopSubStageStatus(); + Integer DecorationModel = collect.get(ShopSubStageEnum.SHOP_STAGE_10.getShopSubStage()).getShopSubStageStatus(); + if (Status1000.equals(DecorationModel) || Status1010.equals(DecorationModel)) { + decorationService.getDecorationModel(shopId, null); + flushFlag = Boolean.TRUE; + } + //施工阶段 + Integer Status1100 = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_110.getShopSubStageStatus(); + Integer Status1110 = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_111.getShopSubStageStatus(); + Integer Construction = collect.get(ShopSubStageEnum.SHOP_STAGE_11.getShopSubStage()).getShopSubStageStatus(); + if (Status1110.equals(Construction) || Status1100.equals(Construction)) { + decorationService.getConstructionInfo(shopId); + flushFlag = Boolean.TRUE; + } + return flushFlag; + } + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/RegionAreaConfigServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/RegionAreaConfigServiceImpl.java new file mode 100644 index 000000000..b35dcf9d7 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/RegionAreaConfigServiceImpl.java @@ -0,0 +1,80 @@ +package com.cool.store.service.impl; + +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.RegionAreaConfigDao; +import com.cool.store.dao.RegionDao; +import com.cool.store.entity.RegionAreaConfigDO; +import com.cool.store.entity.RegionDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.ThirdRegionTypeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.RegionAreaConfigAddRequest; +import com.cool.store.service.RegionAreaConfigService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.ListUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author wxp + * @Date 2022/12/29 11:18 + * @Version 1.0 + */ +@Service +@Slf4j +public class RegionAreaConfigServiceImpl implements RegionAreaConfigService { + + @Resource + private RegionAreaConfigDao regionAreaConfigDao; + + @Resource + private RegionDao regionDao; + + @Override + public Boolean saveOrUpdateRegionAreaConfig(RegionAreaConfigAddRequest regionAreaConfigAddRequest, LoginUserInfo user) { + RegionDO regionDO = regionDao.getRegionById(regionAreaConfigAddRequest.getRegionId()); + if(regionDO == null){ + throw new ServiceException(ErrorCodeEnum.REGION_NOT_EXIST); + } + if(!ThirdRegionTypeEnum.WAR_REGION.getCode().equals(regionDO.getThirdRegionType())){ + throw new ServiceException(ErrorCodeEnum.ONLY_WAR_REGION_CONFIG); + } + List areaIdList = regionAreaConfigAddRequest.getAreaIdList(); + regionAreaConfigDao.deleteRegionAreaConfigByRegionId(regionAreaConfigAddRequest.getRegionId()); + if(CollectionUtils.isEmpty(areaIdList)){ + return Boolean.TRUE; + } + regionAreaConfigDao.deleteByWantShopAreaIds(areaIdList); + List regionAreaConfigList = new ArrayList<>(); + for (Long areaId: areaIdList) { + RegionAreaConfigDO regionAreaConfigDO = new RegionAreaConfigDO(); + regionAreaConfigDO.setRegionId(regionAreaConfigAddRequest.getRegionId()); + regionAreaConfigDO.setRegionPath(regionDO.getFullRegionPath()); + regionAreaConfigDO.setWantShopAreaId(areaId); + regionAreaConfigDO.setCreateUserId(user.getUserId()); + regionAreaConfigDO.setUpdateUserId(user.getUserId()); + regionAreaConfigList.add(regionAreaConfigDO); + } + if (CollectionUtils.isNotEmpty(regionAreaConfigList)) { + regionAreaConfigDao.batchInsertOrUpdateRegionAreaConfig(regionAreaConfigList); + } + return Boolean.TRUE; + } + + @Override + public List listAreaIdByRegionId(Long regionId) { + List regionAreaConfigDOList = regionAreaConfigDao.listAreaByRegionId(regionId); + List areaIdIdList = ListUtils.emptyIfNull(regionAreaConfigDOList) + .stream() + .map(RegionAreaConfigDO::getWantShopAreaId) + .collect(Collectors.toList()); + return areaIdIdList; + } + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/RegionServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/RegionServiceImpl.java new file mode 100644 index 000000000..c612a620d --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/RegionServiceImpl.java @@ -0,0 +1,164 @@ +package com.cool.store.service.impl; + +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; +import com.cool.store.dao.RegionAreaConfigDao; +import com.cool.store.dao.RegionDao; +import com.cool.store.entity.RegionDO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.ThirdRegionTypeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.RegionMapper; +import com.cool.store.service.RegionService; +import com.cool.store.utils.RedisConstantUtil; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.poi.constant.Constants; +import com.cool.store.vo.RegionPathNameVO; +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.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; + +import static com.cool.store.enums.ErrorCodeEnum.PARAMS_VALIDATE_ERROR; + +/** + * @ClassName RegionServiceImpl + * @Description 区域服务 + */ +@Slf4j +@Service +public class RegionServiceImpl implements RegionService { + + @Autowired + private RedisConstantUtil redisConstantUtil; + @Resource + private RedisUtilPool redisUtilPool; + @Resource + private RegionMapper regionMapper; + @Resource + private RegionDao regionDao; + @Resource + private RegionAreaConfigDao regionAreaConfigDao; + + + @Override + public RegionPathNameVO getAllRegionName(Long regionId) { + RegionDO regionDO = regionMapper.getByRegionId(regionId); + if(regionDO == null){ + throw new ServiceException(ErrorCodeEnum.REGION_NOT_EXIST); + } + + if(regionDO.getDeleted() || StringUtils.isBlank(regionDO.getRegionPath()) || CommonConstants.LONG_ONE.equals(regionDO.getId())){ + return RegionPathNameVO.builder().allRegionName(regionDO.getName()).regionNameList(Arrays.asList(regionDO.getName())).build(); + } + //若果在缓存中存在,从缓存中去取 + String regionNameListStr = redisUtilPool.getString(redisConstantUtil.getRegionNameListKey(String.valueOf(regionId))); + if(StringUtils.isNotBlank(regionNameListStr)){ + RegionPathNameVO regionPathNameVO = JSONObject.parseObject(regionNameListStr, RegionPathNameVO.class); + if(regionPathNameVO == null){ + regionPathNameVO = new RegionPathNameVO(); + } + return regionPathNameVO; + } + String regionPath = regionDO.getRegionPath().substring(1, regionDO.getRegionPath().length() - 1); + String[] regionIdArr = regionPath.split(Constants.FORWARD_SLASH); + List regionDOList = regionMapper.getRegionByRegionIds(Arrays.asList(regionIdArr)); + Map regionNameMap = new HashMap<>(); + if(CollectionUtils.isNotEmpty(regionDOList)){ + regionNameMap = regionDOList.stream().collect(Collectors.toMap(RegionDO::getId,RegionDO::getName)); + } + List regionNameList = new ArrayList<>(); + StringBuilder allRegionName = new StringBuilder(); + for (String id : regionIdArr){ + if(StringUtils.isBlank(id) || !regionNameMap.containsKey(Long.valueOf(id))){ + continue; + } + allRegionName.append(regionNameMap.get(Long.valueOf(id))).append(Constants.M_LINE); + regionNameList.add(regionNameMap.get(Long.valueOf(id))); + } + allRegionName.append(regionDO.getName()); + regionNameList.add(regionDO.getName()); + RegionPathNameVO regionPathNameVO = RegionPathNameVO.builder().allRegionName(allRegionName.toString()).regionNameList(regionNameList).build(); + //放在缓存中存5分钟 + redisUtilPool.setString(redisConstantUtil.getRegionNameListKey(String.valueOf(regionId)), JSONUtil.toJsonStr(regionPathNameVO), 5 * 60); + return regionPathNameVO; + } + + @Override + public String getBelongWarRegionName(Long regionId) { + RegionPathNameVO regionPathNameVO = this.getAllRegionName(regionId); + if(regionPathNameVO != null && StringUtils.isNotBlank(regionPathNameVO.getAllRegionName())){ + String allRegionName = regionPathNameVO.getAllRegionName(); + return allRegionName.substring(allRegionName.indexOf(Constants.M_LINE) + 1); + } + return ""; + } + + @Override + public Map getBelongWarRegionNameMap(List regionIds) { + if(CollectionUtils.isEmpty(regionIds)){ + return Maps.newHashMap(); + } + Map regionNameMap = Maps.newHashMap(); + for (Long regionId : regionIds) { + regionNameMap.put(regionId, getBelongWarRegionName(regionId)); + } + return regionNameMap; + } + + /** + * 根据意向区域找大区id + * @param wantShopAreaId + * @return + */ + @Override + public Long getBigRegionIdByAreaId(Long wantShopAreaId) { + // 根据意向省市获取战区id + Long warRegionId = regionAreaConfigDao.getByWantShopAreaId(wantShopAreaId); + if(Objects.isNull(warRegionId)){ + return 0L; + } + RegionDO warRegion = regionMapper.getByRegionId(warRegionId); + if(warRegion == null){ + throw new ServiceException(ErrorCodeEnum.REGION_NOT_EXIST); + } + // 根据战区id获取大区id + String warRegionPath = warRegion.getRegionPath().substring(1, warRegion.getRegionPath().length() - 1); + String[] warRegionIdArr = warRegionPath.split(Constants.FORWARD_SLASH); + List regionDOList = regionMapper.getRegionByRegionIds(Arrays.asList(warRegionIdArr)); + for (RegionDO regionDO : regionDOList){ + if(ThirdRegionTypeEnum.LARGE_REGION.getCode().equals(regionDO.getThirdRegionType())){ + return regionDO.getId(); + } + } + return 0L; + } + + @Override + public List listByThirdRegionType(Long parentId, String thirdRegionType) { + if(Objects.isNull(parentId) && StringUtils.isBlank(thirdRegionType)){ + throw new ServiceException(PARAMS_VALIDATE_ERROR); + } + return regionDao.listByThirdRegionType(parentId, thirdRegionType); + } + + @Override + public List getSubRegionIdsByRegionIds(List regionIds) { + if(CollectionUtils.isEmpty(regionIds)){ + return Lists.newArrayList(); + } + List subRegionIds = regionMapper.getSubRegionIdsByRegionIds(regionIds); + if(CollectionUtils.isNotEmpty(subRegionIds)){ + regionIds.addAll(subRegionIds); + } + return regionIds; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SeeAcceptanceServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SeeAcceptanceServiceImpl.java new file mode 100644 index 000000000..9d98a5496 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SeeAcceptanceServiceImpl.java @@ -0,0 +1,255 @@ +package com.cool.store.service.impl; + +import com.cool.store.constants.CommonConstants; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.*; +import com.cool.store.dto.decoration.ConstructionScheduleDTO; +import com.cool.store.dto.decoration.DecorationDTO; +import com.cool.store.dto.decoration.ProjectDTO; +import com.cool.store.entity.*; +import com.cool.store.enums.AuditResultTypeEnum; +import com.cool.store.enums.AuditTypeEnum; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.UserRoleEnum; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.LineInfoMapper; +import com.cool.store.mapper.ShopInfoMapper; +import com.cool.store.request.AcceptanceListRequest; +import com.cool.store.request.SeeAcceptanceRequest; +import com.cool.store.request.SeeAccetanceListRequest; +import com.cool.store.service.*; +import com.cool.store.utils.poi.StringUtils; +import com.cool.store.vo.fitmentCheckVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @Auther: WangShuo + * @Date: 2024/05/17/下午5:58 + * @Version 1.0 + * @注释: + */ +@Service +public class SeeAcceptanceServiceImpl implements SeeAcceptanceService { + private static final Logger log = LoggerFactory.getLogger(SeeAcceptanceServiceImpl.class); + @Resource + private DecorationService decorationService; + @Resource + private ShopInfoDAO shopInfoDAO; + @Resource + private YlfService ylfService; + @Resource + private ShopAuditInfoDAO shopAuditInfoDAO; + @Resource + private TempUserDetailDAO tempUserDetailDAO; + @Resource + private ShopStageInfoDAO shopStageInfoDAO; + @Resource + private PreparationService preparationService; + @Resource + private UserAuthMappingService userAuthMappingService; + @Resource + private ShopInfoMapper shopInfoMapper; + @Resource + private LineInfoMapper lineInfoMapper; + @Resource + private EnterpriseUserDAO enterpriseUserDAO; + @Resource + private RegionService regionService; + @Resource + private SysRoleService sysRoleService; + @Resource + private AcceptanceInfoDAO acceptanceInfoDAO; + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean auditSeeAcceptance(SeeAcceptanceRequest request, LoginUserInfo user) { + if (request.getShopId() == null || request.getShopId() == 0) { + throw new ServiceException(ErrorCodeEnum.SHOP_ID_IS_NULL); + } + if (request.getResultType() == null) { + throw new ServiceException(ErrorCodeEnum.SEE_ACCEPTANCE_AUDIT_NULL); + } + if (Objects.isNull(user)) { + throw new ServiceException(ErrorCodeEnum.USER_NOT_LOGIN); + } + + ShopAuditInfoDO shopAuditInfoDO = new ShopAuditInfoDO(); + shopAuditInfoDO.setShopId(request.getShopId()); + shopAuditInfoDO.setAuditType(AuditTypeEnum.VISUAL_ACCEPTANCE.getCode()); + shopAuditInfoDO.setSubmittedUserId(user.getUserId()); + shopAuditInfoDO.setSubmittedUserName(user.getName()); + shopAuditInfoDO.setResultType(request.getResultType()); + if (AuditResultTypeEnum.PASS.getCode().equals(request.getResultType())) { + shopAuditInfoDO.setPassReason(request.getReason()); + } else { + shopAuditInfoDO.setRejectReason(request.getReason()); + } + // TODO xfsg_user_detail_id + shopAuditInfoDO.setCreateTime(new Date()); + shopAuditInfoDO.setDataType(CommonConstants.ONE); + Long id = shopAuditInfoDAO.addAuditInfo(shopAuditInfoDO); + if (AuditResultTypeEnum.PASS.getCode().equals(request.getResultType())) { + shopStageInfoDAO.updateShopStageAndAuditInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_132, id); + preparationService.whetherToOpenForAcceptance(request.getShopId()); + } else { + shopStageInfoDAO.updateShopStageAndAuditInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_131, id); + } + return true; + } + + @Override + public ConstructionScheduleDTO getWithdrawal(Long shopId) { + DecorationDTO decoration = getDecorationDTO(shopId); + if (decoration == null) { + log.error("DecorationModel is null"); + return null; + } + ConstructionScheduleDTO constructionScheduleDTO = new ConstructionScheduleDTO(); + List constructionSchedule = decoration.getConstructionSchedule(); + for (ConstructionScheduleDTO a : constructionSchedule) { + if (CommonConstants.WITHDRAWAL.equals(a.getName())) { + constructionScheduleDTO = a; + } + } + if (Objects.isNull(constructionScheduleDTO)) { + throw new ServiceException(ErrorCodeEnum.SEE_ACCEPTANCE_ERROR); + } + return constructionScheduleDTO; + + } + + @Override + public List getAuditInfo(Long shopId) { + return shopAuditInfoDAO.getAuditList(shopId, AuditTypeEnum.VISUAL_ACCEPTANCE.getCode()); + } + + @Override + public PageInfo getAcceptanceList(AcceptanceListRequest request, LoginUserInfo user) { + List authRegionIds = userAuthMappingService.getAuthRegionIdAndSubRegionIdByUserId(user.getUserId()); + List regions = new ArrayList<>(); + for (String authRegionId : authRegionIds) { + regions.add(Long.parseLong(authRegionId)); + } + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + if (regions.isEmpty()) { + log.info("该用户下权限没有管理区域"); + return new PageInfo<>(); + } + List fitmentCheckVOList = new ArrayList<>(); + //shopId,lineid,regionid,shopname,storenum, + + List shopInfoDOS = shopInfoMapper.selectShopListByRegionId(regions, ShopSubStageEnum.SHOP_STAGE_13.getShopSubStage(),request.getSubStageStatus(),request.getKeyWord()); + PageInfo pageInfo = new PageInfo<>(shopInfoDOS); + if (shopInfoDOS.isEmpty()) { + log.info("该工程部监理下门店为空"); + return pageInfo; + } + Map ShopIdmap = shopInfoDOS.stream().collect(Collectors.toMap(ShopInfoDO::getId, dto1 -> dto1)); + //招商经理,选址人员(拓展经理)id + List lineIds = shopInfoDOS.stream().filter(o -> o.getLineId() != null) + .map(ShopInfoDO::getLineId).distinct().collect(Collectors.toList()); + List lineInfos = lineInfoMapper.getByLineIds(lineIds); + Map lineInfoDOMap = lineInfos.stream().collect(Collectors.toMap(LineInfoDO::getId, dto -> dto)); + //招商name + List userIds = new ArrayList<>(); + userIds.addAll(lineInfos.stream().filter(o -> o.getInvestmentManager() != null) + .map(LineInfoDO::getInvestmentManager).distinct().collect(Collectors.toList())); + //选址人员(拓展经理)name + userIds.addAll(lineInfos.stream().filter(o -> o.getDevelopmentManager() != null) + .map(LineInfoDO::getDevelopmentManager).distinct().collect(Collectors.toList())); + Map userNameMap = enterpriseUserDAO.getUserNameMap(userIds); + //所属战区 + List regionIds = shopInfoDOS.stream().filter(o -> o.getRegionId() != null). + map(ShopInfoDO::getRegionId).distinct().collect(Collectors.toList()); + Map regionNameMap = regionService.getBelongWarRegionNameMap(regionIds); + //战区经理name + Map fightManger = new HashMap<>(); + for (Long regionId : regionIds) { + String fightMangerUserId = sysRoleService.getUserIdByRegionIdWithRolePriority(regionId, Arrays.asList(UserRoleEnum.THEATER_MANAGER)); + String userName = enterpriseUserDAO.getUserName(fightMangerUserId); + fightManger.put(regionId, userName); + } + //施工实际完成实际 + List shopIds = new ArrayList<>(ShopIdmap.keySet()); + List acceptanceInfoDOS = acceptanceInfoDAO.selectByShopIds(shopIds); + Map acceptanceInfoDOSMap = acceptanceInfoDOS.stream() + .collect(Collectors.toMap(AcceptanceInfoDO::getShopId, dto1 -> dto1)); + //验收状态 + List subStageList = shopStageInfoDAO.getSubStageList(shopIds, ShopSubStageEnum.SHOP_STAGE_13.getShopSubStage()); + List audits = subStageList.stream().filter(o -> o.getAuditId() != null).map(ShopStageInfoDO::getAuditId).collect(Collectors.toList()); + //验收时间 + List auditInfoList = shopAuditInfoDAO.getAuditInfoList(audits); + Map auditMap = auditInfoList.stream().filter(o -> o.getShopId() != null).collect(Collectors.toMap(ShopAuditInfoDO::getShopId, Function.identity())); + + Map ShopStageInfoDOMap = subStageList.stream() + .collect(Collectors.toMap(ShopStageInfoDO::getShopId, dto1 -> dto1)); + for (ShopInfoDO shopInfoDO : shopInfoDOS) { + Long shopId = shopInfoDO.getId(); + Long lineId = shopInfoDO.getLineId(); + Long regionId = shopInfoDO.getRegionId(); + fitmentCheckVO fitmentCheckVO = new fitmentCheckVO(); + fitmentCheckVO.setShopId(shopId); + fitmentCheckVO.setLineId(lineId); + fitmentCheckVO.setShopName(shopInfoDO.getShopName()); + fitmentCheckVO.setStoreNum(shopInfoDO.getStoreNum()); + fitmentCheckVO.setRegionId(regionId); + fitmentCheckVO.setRegion(regionNameMap.get(regionId)); + fitmentCheckVO.setFightManager(fightManger.get(regionId)); + if (lineId != null) { + fitmentCheckVO.setInvestmentManagerId(lineInfoDOMap.get(lineId) + .getInvestmentManager()); + fitmentCheckVO.setInvestmentManager(userNameMap.get(lineInfoDOMap.get(lineId) + .getInvestmentManager())); + fitmentCheckVO.setSitterId(lineInfoDOMap.get(lineId) + .getDevelopmentManager()); + fitmentCheckVO.setSitterName(userNameMap.get(lineInfoDOMap.get(lineId) + .getDevelopmentManager())); + fitmentCheckVO.setPartnerName(lineInfoDOMap.get(lineId).getUsername()); + } + AcceptanceInfoDO acceptanceInfoDO = acceptanceInfoDOSMap.get(shopId); + if (shopId != null) { + if (Objects.nonNull(acceptanceInfoDO)) { + fitmentCheckVO.setActualEndTime(acceptanceInfoDO.getConstructionCompletionTime()); + } + } + if (Objects.nonNull(auditMap.get(shopId))) { + fitmentCheckVO.setAcceptanceTime(auditMap.get(shopId).getCreateTime()); + } + if (Objects.nonNull(ShopStageInfoDOMap.get(shopId))) { + fitmentCheckVO.setShopSubStageStatus(ShopStageInfoDOMap.get(shopId).getShopSubStageStatus()); + } + fitmentCheckVOList.add(fitmentCheckVO); + } + pageInfo.setList(fitmentCheckVOList); + return pageInfo; + } + + + + private DecorationDTO getDecorationDTO(Long shopId) { + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId); + if (Objects.isNull(shopInfo)) { + throw new ServiceException(ErrorCodeEnum.SHOP_ID_NOT_EXIST); + } + String storeNum = shopInfo.getStoreNum(); + if (StringUtils.isNotEmpty(storeNum)) { + ProjectDTO projectList = ylfService.getProjectList(storeNum); + Long projectId = projectList.getProjectId(); + DecorationDTO decoration = ylfService.getDecoration(projectId); + return decoration; + } + return null; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopServiceImpl.java new file mode 100644 index 000000000..854d21c64 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopServiceImpl.java @@ -0,0 +1,167 @@ +package com.cool.store.service.impl; + +import com.cool.store.dao.*; +import com.cool.store.entity.*; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.MessageEnum; +import com.cool.store.enums.SMSMsgEnum; +import com.cool.store.enums.point.*; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.AddShopRequest; +import com.cool.store.request.DeleteShopRequest; +import com.cool.store.service.ShopService; +import com.cool.store.utils.NumberConverter; +import com.cool.store.vo.shop.MiniShopPageVO; +import com.cool.store.vo.shop.ShopStageInfoVO; +import com.cool.store.vo.shop.StageShopCountVO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: ShopServiceImpl + * @Description: + * @date 2024-04-11 10:26 + */ +@Service +public class ShopServiceImpl implements ShopService { + + @Resource + private ShopInfoDAO shopInfoDAO; + @Resource + private ShopStageInfoDAO shopStageInfoDAO; + @Resource + private ShopAuditInfoDAO shopAuditInfoDAO; + @Resource + private LineInfoDAO lineInfoDAO; + @Resource + private PointInfoDAO pointInfoDAO; + @Resource + private PointRecommendDAO pointRecommendDAO; + @Resource + private CommonService commonService; + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer initShop(LineInfoDO lineInfo) { + if(Objects.isNull(lineInfo)){ + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + Integer wantShopNum = lineInfo.getWantShopNum(); + List shopList = shopInfoDAO.getShopList(lineInfo.getId()); + int shopSize = shopList.size(); + if(shopSize >= wantShopNum){ + return 0; + } + List addShopList = new ArrayList<>(); + for (int i = shopSize; i < wantShopNum; i++) { + ShopInfoDO shopInfo = new ShopInfoDO(); + shopInfo.setRegionId(lineInfo.getRegionId()); + shopInfo.setLineId(lineInfo.getId()); + shopInfo.setPartnerId(lineInfo.getPartnerId()); + shopInfo.setShopName("店铺" + NumberConverter.convertArabicToChinese(i + 1)); + addShopList.add(shopInfo); + } + shopInfoDAO.batchAddShop(addShopList); + List shopIds = addShopList.stream().map(ShopInfoDO::getId).collect(Collectors.toList()); + Integer result = shopStageInfoDAO.initShopStageInfo(lineInfo.getId(), shopIds); + Map requestMap = new HashMap<>(); + for (Long shopId : shopIds) { + requestMap.put("partnerName",lineInfo.getUsername()); + requestMap.put("partnerMobile",lineInfo.getMobile()); + requestMap.put("lineId",String.valueOf(lineInfo.getId())); + requestMap.put("shopId",String.valueOf(shopId)); + commonService.sendMessage(Arrays.asList(lineInfo.getInvestmentManager()), MessageEnum.MESSAGE_23,requestMap); + } + return result; + } + + @Override + public List getShopList(Long lineId) { + List shopList = shopInfoDAO.getShopList(lineId); + return MiniShopPageVO.convertList(shopList); + } + + @Override + public List getShopStageInfo(Long shopId, Integer shopStage) { + if(Objects.nonNull(shopStage)){ + ShopStageEnum shopStageEnum = ShopStageEnum.getShopStageEnum(shopStage); + if(Objects.isNull(shopStageEnum)){ + throw new ServiceException(ErrorCodeEnum.SHOP_STAGE_ERROR); + } + } + List shopStageInfo = shopStageInfoDAO.getShopStageInfo(shopId, shopStage); + List auditIds = shopStageInfo.stream().filter(o->Objects.nonNull(o.getAuditId())).map(ShopStageInfoDO::getAuditId).distinct().collect(Collectors.toList()); + List auditList = shopAuditInfoDAO.getAuditInfoList(auditIds); + return ShopStageInfoVO.convertList(shopStageInfo, auditList); + } + + @Override + public StageShopCountVO getStageShopCount(Long lineId) { + return shopInfoDAO.getStageShopCount(lineId); + } + + @Override + public Integer deleteShop(DeleteShopRequest request) { + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(request.getShopId()); + if(Objects.nonNull(shopInfo)){ + //进入选址不允许删除操作 + throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); + } + ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(shopInfo.getId(), ShopSubStageEnum.SHOP_STAGE_3); + if(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_33.getShopSubStageStatus().equals(shopSubStageInfo.getShopSubStageStatus())){ + throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); + } + if(Objects.nonNull(shopInfo.getPointId())){ + PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(shopInfo.getPointId()); + if(Objects.nonNull(pointInfo) && SelectStatusEnum.SELECT_STATUS_1.getCode().equals(pointInfo.getSelectStatus())){ + pointInfoDAO.recyclePoint(pointInfo.getId()); + } + pointRecommendDAO.updateRecommendStatus(shopInfo.getPointId(), PointRecommendStatusEnum.POINT_RECOMMEND_STATUS_1, Arrays.asList(PointRecommendStatusEnum.POINT_RECOMMEND_STATUS_5)); + } + ShopInfoDO updateShop = new ShopInfoDO(); + updateShop.setId(request.getShopId()); + updateShop.setDeleted(true); + return shopInfoDAO.updateShopInfo(updateShop); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Long addShop(AddShopRequest request) { + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId()); + if(Objects.isNull(lineInfo)){ + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + List shopNameList = request.getShopNameList(); + List shopList = shopInfoDAO.getShopList(request.getLineId()); + LineInfoDO updateLine = new LineInfoDO(); + updateLine.setId(request.getLineId()); + updateLine.setWantShopNum(shopList.size() + shopNameList.size()); + lineInfoDAO.updateLineInfo(updateLine); + List addShopList = new ArrayList<>(); + for (String shopName : shopNameList) { + ShopInfoDO addShop = new ShopInfoDO(); + addShop.setRegionId(lineInfo.getRegionId()); + addShop.setLineId(request.getLineId()); + addShop.setPartnerId(lineInfo.getPartnerId()); + addShop.setShopName(shopName); + addShopList.add(addShop); + } + shopInfoDAO.batchAddShop(addShopList); + List shopIds = addShopList.stream().map(ShopInfoDO::getId).collect(Collectors.toList()); + shopStageInfoDAO.initShopStageInfo(lineInfo.getId(), shopIds); + //发送短信 + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.TRAINING_REGISTER_SUCCESS, null); + return 1L; + } + + @Override + public ShopInfoDO getShopInfo(Long shopId) { + + return shopInfoDAO.getShopInfo(shopId); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java new file mode 100644 index 000000000..a61bd66b4 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -0,0 +1,468 @@ +package com.cool.store.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateTime; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.ShopStageInfoDAO; +import com.cool.store.entity.*; +import com.cool.store.enums.*; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.*; +import com.cool.store.request.AddSignFranchiseRequest; +import com.cool.store.request.AuditResultRequest; +import com.cool.store.request.FranchiseAgreementRequest; +import com.cool.store.response.AddSignFranchiseResponse; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.CoolStoreStartFlowService; +import com.cool.store.service.PreparationService; +import com.cool.store.service.SignFranchiseService; +import com.cool.store.utils.poi.DateUtils; +import com.cool.store.utils.poi.constant.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +@Slf4j +public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResultService { + @Resource + SignFranchiseMapper signFranchiseMapper; + + @Resource + CoolStoreStartFlowService coolStoreStartFlowService; + + @Resource + FranchiseFeeMapper franchiseFeeMapper; + + @Resource + ShopInfoMapper shopInfoMapper; + + @Resource + IntentAgreementMapper intentAgreementMapper; + + @Resource + LinePayMapper linePayMapper; + + @Resource + PointInfoMapper pointInfoMapper; + + @Resource + LineInfoMapper lineInfoMapper; + + @Resource + SystemBuildingShopMapper systemBuildingShopMapper; + + @Resource + ApplyLicenseMapper applyLicenseMapper; + + @Resource + ThirdDepartmentMapper thirdDepartmentMapper; + + @Resource + JoinIntentionMapper joinIntentionMapper; + + @Resource + ShopStageInfoDAO shopStageInfoDAO; + + @Resource + ShopAuditInfoMapper shopAuditInfoMapper; + + @Resource + PreparationService preparationService; + + @Resource + CommonService commonService; + + @Override + public Boolean auditResult(AuditResultRequest request) { + log.info("SignFranchiseServiceImpl auditResult request:{}", JSONObject.toJSONString(request)); + Long shopId = getShopId(request.getKdzBusinessId()); + ShopSubStageStatusEnum shopSubStageStatusEnum = null; + if (request.getAuditResult() == 1) { + shopSubStageStatusEnum = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_84; + } else if (request.getAuditResult() == 0) { + shopSubStageStatusEnum = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_85; + } + ShopAuditInfoDO shopAuditInfoDO = new ShopAuditInfoDO(); + shopAuditInfoDO.setShopId(shopId); + shopAuditInfoDO.setAuditType(AuditTypeEnum.SIGN_FRANCHISE.getCode()); + shopAuditInfoDO.setSubmittedUserId(""); + shopAuditInfoDO.setSubmittedUserName(""); + if (Constants.ZERO_INTEGER.equals(request.getAuditResult())) { + shopAuditInfoDO.setResultType(Constants.ONE_INTEGER); + shopAuditInfoDO.setRejectReason(request.getCause()); + Map requestMap = new HashMap<>(); + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId); + LineInfoDO lineInfo = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); + requestMap.put("storeName", shopInfoDO.getShopName()); + requestMap.put("partnerName", lineInfo.getUsername()); + requestMap.put("partnerMobile", lineInfo.getMobile()); + requestMap.put("lineId", String.valueOf(lineInfo.getId())); + requestMap.put("shopId", String.valueOf(shopInfoDO.getId())); + commonService.sendMessage(Collections.singletonList(lineInfo.getInvestmentManager()), MessageEnum.MESSAGE_20, requestMap); + } else if (Constants.ONE_INTEGER.equals(request.getAuditResult())) { + shopAuditInfoDO.setResultType(Constants.ZERO_INTEGER); + shopAuditInfoDO.setPassReason(request.getCause()); + //校验建店与加盟签约合同是否完成 并初始化后续流程数据 + preparationService.contractAndBuildStoreCompletion(shopId); + } + shopAuditInfoMapper.insertSelective(shopAuditInfoDO); + Long auditId = shopAuditInfoDO.getId(); + shopStageInfoDAO.updateShopStageAndAuditInfo(shopId, shopSubStageStatusEnum, auditId); + signFranchiseMapper.updateAuditByShopId(auditId, shopId); + return true; + } + + private Long getShopId(String kdzBusinessId) { + String shopId = kdzBusinessId.substring(kdzBusinessId.indexOf("_") + 1, kdzBusinessId.lastIndexOf("_")); + return Long.valueOf(shopId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ResponseResult submitSignFranchise(AddSignFranchiseRequest request, LoginUserInfo user) { + log.info("submitSignFranchise request:{}", JSONObject.toJSONString(request)); + if (Objects.isNull(request)) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + if (Objects.isNull(request.getShopId())) { + throw new ServiceException(ErrorCodeEnum.SHOP_ID_NOT_EXIST); + } + SignFranchiseDO signFranchiseDO = request.toSignFranchiseDO(); + if (Objects.isNull(request.getId())) { + signFranchiseMapper.insertSelective(signFranchiseDO); + } else { + signFranchiseMapper.updateByPrimaryKeySelective(signFranchiseDO); + } + //店铺信息 + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); + FranchiseAgreementRequest franchiseAgreementRequest = convertFranchiseAgreement(request, shopInfoDO, user); + MemberQuestionDO memberQuestionDO = joinIntentionMapper.getByLineId(shopInfoDO.getLineId()); + log.info("submitSignFranchise franchiseAgreementRequest :{}",JSONObject.toJSONString(franchiseAgreementRequest)); + ResponseResult responseResult = coolStoreStartFlowService.franchiseAgreement(franchiseAgreementRequest, memberQuestionDO.getJoinType()); + //更新状态为加盟商 + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); + lineInfoDO.setJoinStatus(2); + lineInfoMapper.insertOrUpdate(lineInfoDO); + shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_83); + return responseResult; + } + + + public FranchiseAgreementRequest convertFranchiseAgreement(AddSignFranchiseRequest request, + ShopInfoDO shopInfoDO, + LoginUserInfo user) { + + //shopId + Long shopId = request.getShopId(); + //线索信息 + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); + if (Objects.isNull(lineInfoDO)){ + throw new ServiceException(109014,ApiErrorCodeEnum.getByCode("lineInfoDO").getErrorMessage()); + } + //缴费信息 + FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(shopId); + if (Objects.isNull(franchiseFeeDO)){ + throw new ServiceException(109014,ApiErrorCodeEnum.getByCode("franchiseFeeDO").getErrorMessage()); + } + //线索id + Long lineId = shopInfoDO.getLineId(); + //签约信息 + SigningBaseInfoDO signingBaseInfoDO = intentAgreementMapper.selectByPartnerIdOrLineId(null, lineId); + if (Objects.isNull(signingBaseInfoDO)){ + throw new ServiceException(109014,ApiErrorCodeEnum.getByCode("signingBaseInfoDO").getErrorMessage()); + } + //缴款信息 + LinePayDO linePayDO = linePayMapper.getByLineIdAndPayTypeAndShopId(lineId, 1, shopId); + if (Objects.isNull(linePayDO)){ + throw new ServiceException(109014,ApiErrorCodeEnum.getByCode("linePayDO").getErrorMessage()); + } + //铺位信息 + PointInfoDO pointInfoDO = pointInfoMapper.getDataByShopIdAndLineId(lineId, shopId); + if (Objects.isNull(pointInfoDO)){ + throw new ServiceException(109014,ApiErrorCodeEnum.getByCode("pointInfoDO").getErrorMessage()); + } + //建店数据 + SystemBuildingShopDO systemBuildingShopDO = systemBuildingShopMapper.selectOne(SystemBuildingShopDO.builder().shopId(shopId).lineId(lineId).build()); + if (Objects.isNull(systemBuildingShopDO)){ + throw new ServiceException(109014,ApiErrorCodeEnum.getByCode("systemBuildingShopDO").getErrorMessage()); + } + //证照办理 + LicenseTransactDO licenseTransactDO = applyLicenseMapper.selectByShopId(shopId); + if (Objects.isNull(licenseTransactDO)){ + throw new ServiceException(109014,ApiErrorCodeEnum.getByCode("licenseTransactDO").getErrorMessage()); + } + ThirdDepartmentDO thirdDepartmentDO = new ThirdDepartmentDO(); + if (Objects.nonNull(systemBuildingShopDO)) { + //三方部门表 + thirdDepartmentDO = thirdDepartmentMapper.getByName(systemBuildingShopDO.getBigName()); + if (Objects.isNull(thirdDepartmentDO)){ + throw new ServiceException(109014,ApiErrorCodeEnum.getByCode("thirdDepartmentDO").getErrorMessage()); + } + } + //找不到的url统一用这个 + List temp = new ArrayList<>(); + temp.add("object"); + return FranchiseAgreementRequest.builder() +// todo .apply_user(user.getJobNumber()) + .apply_user("20230724") + .company(0) + .start1(getDateTimeFormat(Constants.TIME_STAMP_FLAG_TWO, franchiseFeeDO.getFirstYearStartTime())) + .start2(getDateTimeFormat(Constants.TIME_STAMP_FLAG_TWO, franchiseFeeDO.getSecondYearStartTime())) + .start3(getDateTimeFormat(Constants.TIME_STAMP_FLAG_TWO, franchiseFeeDO.getThirdYearStartTime())) + .end1(getDateTimeFormat(Constants.TIME_STAMP_FLAG_TWO, franchiseFeeDO.getFirstYearEndTime())) + .end2(getDateTimeFormat(Constants.TIME_STAMP_FLAG_TWO, franchiseFeeDO.getSecondYearEndTime())) + .end3(getDateTimeFormat(Constants.TIME_STAMP_FLAG_TWO, franchiseFeeDO.getThirdYearEndTime())) + .fjsc(temp) + .fqgsmc("鲜丰水果股份有限公司") + .fzzd1(0) + .gczxhtfqr("20230724")//没有 + .hkbzj(Integer.valueOf(franchiseFeeDO.getLoanMargin())) + .hkbzjdx(Integer.valueOf(franchiseFeeDO.getLoanMargin())) + .hkbzjwb(Convert.digitToChinese(Integer.valueOf(franchiseFeeDO.getLoanMargin()))) + .ht_day(timeUtils(request.getContractStartTime(),"day")) + .ht_day2(timeUtils(request.getContractStartEndTime(),"day")) + .ht_month1(timeUtils(request.getContractStartTime(),"month")) + .ht_month2(timeUtils(request.getContractStartEndTime(),"month")) + .ht_year1(timeUtils(request.getContractStartTime(),"year")) + .ht_year2(timeUtils(request.getContractStartEndTime(),"year")) + .idcard_1(Collections.singletonList(signingBaseInfoDO.getIdCardFront())) + .idcard_2(Collections.singletonList(signingBaseInfoDO.getIdCardReverse())) + .idcard_address(signingBaseInfoDO.getIdCardAddress()) + .is_business_license(request.getIsBusinessLicense()) + .is_deposit(1) + .is_food_license(request.getIsFoodLicense()) + .jiaokuandate(getDateTimeFormat(Constants.TIME_STAMP_FLAG, linePayDO.getPayTime())) + .jkr(linePayDO.getPayUserName()) + .jmd_area(pointInfoDO.getDistrict()) + .jmd_city(pointInfoDO.getCity()) + .jmd_province(pointInfoDO.getProvince()) + .jmd_street(pointInfoDO.getTownship()) + .jmf(Integer.valueOf(franchiseFeeDO.getYearFranchiseFee())) + .jmf2(Integer.valueOf(franchiseFeeDO.getFirstYearFee())) + .jmf3(Integer.valueOf(franchiseFeeDO.getSecondYearFee())) + .jmf4(Integer.valueOf(franchiseFeeDO.getThirdYearFee())) + .jmfday1(timeUtils(franchiseFeeDO.getFirstYearStartTime(),"day")) + .jmfday2(timeUtils(franchiseFeeDO.getFirstYearEndTime(),"day")) + .jmfday3(timeUtils(franchiseFeeDO.getSecondYearStartTime(),"day")) + .jmfday4(timeUtils(franchiseFeeDO.getSecondYearEndTime(),"day")) + .jmfday5(timeUtils(franchiseFeeDO.getThirdYearStartTime(),"day")) + .jmfday6(timeUtils(franchiseFeeDO.getThirdYearEndTime(),"day")) + .jmfdx(Integer.valueOf(franchiseFeeDO.getYearFranchiseFee())) + .jmfmonth1(timeUtils(franchiseFeeDO.getFirstYearStartTime(),"month")) + .jmfmonth2(timeUtils(franchiseFeeDO.getFirstYearEndTime(),"month")) + .jmfmonth3(timeUtils(franchiseFeeDO.getSecondYearStartTime(),"month")) + .jmfmonth4(timeUtils(franchiseFeeDO.getSecondYearEndTime(),"month")) + .jmfmonth5(timeUtils(franchiseFeeDO.getThirdYearStartTime(),"month")) + .jmfmonth6(timeUtils(franchiseFeeDO.getThirdYearEndTime(),"month")) + .jmfwb(Convert.digitToChinese(Integer.valueOf(franchiseFeeDO.getYearFranchiseFee()))) + .jmfyear1(timeUtils(franchiseFeeDO.getFirstYearStartTime(),"year")) + .jmfyear2(timeUtils(franchiseFeeDO.getFirstYearEndTime(),"year")) + .jmfyear3(timeUtils(franchiseFeeDO.getSecondYearStartTime(),"year")) + .jmfyear4(timeUtils(franchiseFeeDO.getSecondYearEndTime(),"year")) + .jmfyear5(timeUtils(franchiseFeeDO.getThirdYearStartTime(),"year")) + .jmfyear6(timeUtils(franchiseFeeDO.getThirdYearEndTime(),"year")) + .jmsdkjt(temp) + .jmsdm(lineInfoDO.getPartnerNum()) + .jmshtzt(0) + .jmslx(systemBuildingShopDO.getFranchiseeType()) + .jmslxfs(request.getMobile()) + .jmssfzhm(signingBaseInfoDO.getIdCardNo()) + .jmsxm(lineInfoDO.getPartnerNum()) + .jmsxm1(lineInfoDO.getUsername()) + .jsrq(getDateTimeFormat(Constants.TIME_STAMP_FLAG, request.getContractStartEndTime())) + .jszhhz(linePayDO.getPayAccount()) + .kdzBusinessId(AuditEnum.SIGN_FRANCHISE.getCode() + "_" + shopId + "_" + lineId) + .khhjzh(linePayDO.getBankName()) + .lvbzj(Integer.valueOf(franchiseFeeDO.getPerformanceBond())) + .lybzjdx(Integer.valueOf(franchiseFeeDO.getPerformanceBond())) + .lybzjwb(Convert.digitToChinese(Integer.valueOf(franchiseFeeDO.getPerformanceBond()))) + .mddz(pointInfoDO.getAddress()) + .mdmc(shopInfoDO.getStoreNum()) + .mdmcwb(systemBuildingShopDO.getStoreName()) + .oacompany(thirdDepartmentDO.getDepartmentCode()) + .partyb_name(licenseTransactDO.getBusinessLicense()) + .partyb_operator(licenseTransactDO.getOperator()) + .partyb_type(licenseTransactDO.getLicenseType()) + .ppsyfbl(Double.parseDouble(request.getBrandFee())) + .psfl("以实际结算为准") + .qsdz("PUBLIC_COMPANY,PUBLIC_OPERATOR") + .qsrq(getDateTimeFormat(Constants.TIME_STAMP_FLAG, request.getContractStartTime())) + .qylx(SignTypeEnum.getWorkflowStageByCode(request.getSignType()).getCode()) + .qys_dzyz("2731707107593166911") + .qys_htywfl("3051420203180101971") + .reason2(request.getIrregularReason()) + .remark(request.getRemark()) + .remark2(systemBuildingShopDO.getReasons()) + .sfbq__add(request.getResign()) + .sj1(getDateTimeFormat(Constants.TIME_STAMP_FLAG_THREE, request.getBusinessStartHours())) + .sj2(getDateTimeFormat(Constants.TIME_STAMP_FLAG_THREE, request.getBusinessEndHours())) + .social_credit_code(licenseTransactDO.getCreditCode()) + .spltxkz(temp) + .sqr_name(user.getName()) + .sqrq(getDateTimeFormat(Constants.TIME_STAMP_FLAG, new Date())) + .title("特许经营合同审批申请2023-" + lineInfoDO.getUsername() + "-" + DateUtils.getDate()) + .wlyzbm("201905081151092R") + .yycs(Integer.valueOf(request.getImpressionNum())) + .yyzzblsqs(temp) + .yyzzfyj(temp) + .zhihang(linePayDO.getBranchBankName()) + .zqyty(SignTypeEnum.getWorkflowStageByCode(request.getSignType()).getSap()) + .fddbr(licenseTransactDO.getLicenseLegalPerson()) + .build(); + } + + + @Override + public AddSignFranchiseResponse getSignFranchise(Long shopId) { + SignFranchiseDO signFranchiseDO = signFranchiseMapper.selectByShopId(shopId); + AddSignFranchiseResponse response = from(signFranchiseDO, shopId); + ShopAuditInfoDO shopAuditInfoDO = null; + if (Objects.nonNull(signFranchiseDO)) { + shopAuditInfoDO = shopAuditInfoMapper.selectByPrimaryKey(signFranchiseDO.getAuditId()); + } + if (Objects.nonNull(shopAuditInfoDO)) { + response.setStatus(shopAuditInfoDO.getResultType()); + if (shopAuditInfoDO.getResultType() == 0) { + response.setResult(shopAuditInfoDO.getPassReason()); + } else { + response.setResult(shopAuditInfoDO.getRejectReason()); + } + response.setResultTime(shopAuditInfoDO.getCreateTime()); + } + return response; + } + + public AddSignFranchiseResponse from(SignFranchiseDO signFranchiseDO, + Long shopId) { + AddSignFranchiseResponse addSignFranchiseResponse = new AddSignFranchiseResponse(); + //店铺信息 + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId); + //线索信息 + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); + //加盟问卷信息 + MemberQuestionDO memberQuestionDO = joinIntentionMapper.getByLineId(shopInfoDO.getLineId()); + //缴费信息 + FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectOne(FranchiseFeeDO.builder().shopId(shopId).build()); + //线索id + Long lineId = shopInfoDO.getLineId(); + //签约信息 + SigningBaseInfoDO signingBaseInfoDO = intentAgreementMapper.selectByPartnerIdOrLineId(null, lineId); + //缴款信息 + LinePayDO linePayDO = linePayMapper.getByLineIdAndPayTypeAndShopId(lineId, 1, shopId); + //铺位信息 + PointInfoDO pointInfoDO = pointInfoMapper.getDataByShopIdAndLineId(lineId, shopId); + //建店数据 + SystemBuildingShopDO systemBuildingShopDO = systemBuildingShopMapper.selectOne(SystemBuildingShopDO.builder().shopId(shopId).lineId(lineId).build()); + //证照办理 + LicenseTransactDO licenseTransactDO = applyLicenseMapper.selectByShopId(shopId); + if (Objects.nonNull(signFranchiseDO)) { + addSignFranchiseResponse.setId(signFranchiseDO.getId()); + addSignFranchiseResponse.setShopId(signFranchiseDO.getShopId()); + addSignFranchiseResponse.setSignType(signFranchiseDO.getSignType()); + addSignFranchiseResponse.setBrandFee(signFranchiseDO.getBrandFee()); + addSignFranchiseResponse.setIsBusinessLicense(signFranchiseDO.getIsBusinessLicense()); + addSignFranchiseResponse.setIsFoodLicense(signFranchiseDO.getIsFoodLicense()); + addSignFranchiseResponse.setContractStartTime(signFranchiseDO.getContractStartTime()); + addSignFranchiseResponse.setContractStartEndTime(signFranchiseDO.getContractEndTime()); + addSignFranchiseResponse.setImpressionNum(signFranchiseDO.getImpressionNum()); + addSignFranchiseResponse.setBusinessStartHours(signFranchiseDO.getBusinessStartHours()); + addSignFranchiseResponse.setBusinessEndHours(signFranchiseDO.getBusinessEndHours()); + addSignFranchiseResponse.setIrregularReason(signFranchiseDO.getIrregularReason()); + addSignFranchiseResponse.setRemark(signFranchiseDO.getRemark()); + addSignFranchiseResponse.setResign(signFranchiseDO.getResign()); + addSignFranchiseResponse.setMobile(signFranchiseDO.getMobile()); + } else { + addSignFranchiseResponse.setMobile(lineInfoDO.getMobile()); + } + if (Objects.nonNull(systemBuildingShopDO)) { + addSignFranchiseResponse.setStoreName(systemBuildingShopDO.getStoreName()); + addSignFranchiseResponse.setBigRegion(systemBuildingShopDO.getBigName()); + addSignFranchiseResponse.setBigRegionManager(systemBuildingShopDO.getRegioGeneral()); + addSignFranchiseResponse.setFranchiseeType(Objects.requireNonNull(FranchiseeTypeEnum.getByCode(systemBuildingShopDO.getFranchiseeType())).getMessage()); + addSignFranchiseResponse.setReasons(systemBuildingShopDO.getReasons()); + } + if (Objects.nonNull(pointInfoDO)) { + addSignFranchiseResponse.setStoreAddress(pointInfoDO.getAddress()); + } + if (Objects.nonNull(linePayDO)) { + addSignFranchiseResponse.setPayName(linePayDO.getPayUserName()); + addSignFranchiseResponse.setBankCardNo(linePayDO.getPayAccount()); + addSignFranchiseResponse.setBank(linePayDO.getBankName()); + addSignFranchiseResponse.setSubBank(linePayDO.getBranchBankName()); + addSignFranchiseResponse.setPayDate(linePayDO.getPayTime()); + } + if (Objects.nonNull(licenseTransactDO)) { + addSignFranchiseResponse.setLicenseName(licenseTransactDO.getBusinessLicense()); + addSignFranchiseResponse.setOpeAddress(licenseTransactDO.getLicenseAddress()); + addSignFranchiseResponse.setOperator(licenseTransactDO.getOperator()); + addSignFranchiseResponse.setLicenseCode(licenseTransactDO.getCreditCode()); + addSignFranchiseResponse.setType(LicenseTypeEnum.match(licenseTransactDO.getLicenseType()).getMessage()); + } + if (Objects.nonNull(lineInfoDO)) { + addSignFranchiseResponse.setPartnerName(lineInfoDO.getUsername()); + } + if (Objects.nonNull(signingBaseInfoDO) && Objects.nonNull(memberQuestionDO)) { + if (JoinTypeEnum.JOIN_TYPE_ONE.getCode().equals(memberQuestionDO.getJoinType())) { + addSignFranchiseResponse.setIdCardNo(signingBaseInfoDO.getIdCardNo()); + } else if (JoinTypeEnum.JOIN_TYPE_TWO.getCode().equals(memberQuestionDO.getJoinType())) { + addSignFranchiseResponse.setIdCardNo(signingBaseInfoDO.getBusinessLicenseCode()); + } + addSignFranchiseResponse.setIdCardAddress(signingBaseInfoDO.getIdCardAddress()); + } + if (Objects.nonNull(franchiseFeeDO)) { + addSignFranchiseResponse.setYearFranchiseFee(franchiseFeeDO.getYearFranchiseFee()); + addSignFranchiseResponse.setBigYearFranchiseFee(Convert.digitToChinese(Integer.valueOf(franchiseFeeDO.getYearFranchiseFee()))); + addSignFranchiseResponse.setLoanMargin(franchiseFeeDO.getLoanMargin()); + addSignFranchiseResponse.setBigLoanMargin(Convert.digitToChinese(Integer.valueOf(franchiseFeeDO.getLoanMargin()))); + addSignFranchiseResponse.setFirstYearStartTime(franchiseFeeDO.getFirstYearStartTime()); + addSignFranchiseResponse.setFirstYearEndTime(franchiseFeeDO.getFirstYearEndTime()); + addSignFranchiseResponse.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); + addSignFranchiseResponse.setSecondYearStartTime(franchiseFeeDO.getSecondYearStartTime()); + addSignFranchiseResponse.setSecondYearEndTime(franchiseFeeDO.getSecondYearEndTime()); + addSignFranchiseResponse.setSecondYearFee(franchiseFeeDO.getSecondYearFee()); + addSignFranchiseResponse.setThirdYearStartTime(franchiseFeeDO.getThirdYearStartTime()); + addSignFranchiseResponse.setThirdYearEndTime(franchiseFeeDO.getThirdYearEndTime()); + addSignFranchiseResponse.setThirdYearFee(franchiseFeeDO.getThirdYearFee()); + addSignFranchiseResponse.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); + addSignFranchiseResponse.setBigPerformanceBond(Convert.digitToChinese(Integer.valueOf(franchiseFeeDO.getPerformanceBond()))); + } + return addSignFranchiseResponse; + } + + public static String getDateTimeFormat(String pattern, Date date) { + return new SimpleDateFormat(pattern).format(date); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean rePay(Long shopId) { + shopStageInfoDAO.updateShopStageInfo(shopId,ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_74); + shopStageInfoDAO.updateShopStageToNotStarted(shopId, ShopSubStageEnum.SHOP_STAGE_8); + return true; + } + + private int timeUtils(Date time, String type) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(time); + switch (type){ + case "year": + return calendar.get(Calendar.YEAR); + case "month": + return calendar.get(Calendar.MONTH) + 1; + case "day": + return calendar.get(Calendar.DAY_OF_MONTH); + default: + return 0; + } + + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SysRoleServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SysRoleServiceImpl.java new file mode 100644 index 000000000..8f8113eba --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,72 @@ +package com.cool.store.service.impl; + +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.entity.SysRoleDO; +import com.cool.store.enums.Role; +import com.cool.store.enums.RoleSourceEnum; +import com.cool.store.enums.UserRoleEnum; +import com.cool.store.mapper.SysRoleMapper; +import com.cool.store.service.SysRoleService; +import com.cool.store.service.UserAuthMappingService; +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.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 角色service + * @author wxp + */ +@Slf4j +@Service +public class SysRoleServiceImpl implements SysRoleService { + + @Resource + private SysRoleMapper sysRoleMapper; + + @Resource + private UserAuthMappingService userAuthMappingService; + + @Override + public Boolean checkIsAdmin(String userId) { + // 1.取出所有用户角色 + // 2.匹配是否有管理员角色 + List sysRoleDOList = sysRoleMapper.listRoleByUserId(userId); + return ListUtils.emptyIfNull(sysRoleDOList) + .stream() + .anyMatch(role-> StringUtils.equals(Role.MASTER.getRoleEnum(),role.getRoleEnum())); + } + + @Override + public Map getXfsgRoles() { + List xfsgRoleNames = Arrays.stream(UserRoleEnum.values()) + .map(UserRoleEnum::getDesc) + .collect(Collectors.toList()); + List sysRoleDOList = sysRoleMapper.getRolesByNamesAndSource(xfsgRoleNames, RoleSourceEnum.CREATE.getCode()); + Map sysRoleDOMap = sysRoleDOList.stream().collect(Collectors.toMap(k -> k.getRoleName(), v -> v.getId(), (k1, k2) -> k1)); + return sysRoleDOMap; + } + + @Override + public String getUserIdByRegionIdWithRolePriority(Long regionId, List roleList) { + if(CollectionUtils.isEmpty(roleList)){ + return null; + } + for(UserRoleEnum roleEnum: roleList){ + EnterpriseUserDO enterpriseUserDO = userAuthMappingService.getUserByRoleEnumAndRegionId(roleEnum, regionId); + if(enterpriseUserDO != null){ + return enterpriseUserDO.getUserId(); + } + } + return null; + } + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SysStoreAppServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SysStoreAppServiceImpl.java new file mode 100644 index 000000000..6686cba22 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SysStoreAppServiceImpl.java @@ -0,0 +1,474 @@ +package com.cool.store.service.impl; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.ShopStageInfoDAO; +import com.cool.store.entity.*; +import com.cool.store.enums.*; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.enums.prepare.newStore.BusinessDistrictEnum; +import com.cool.store.enums.prepare.newStore.OfflineCompetitorEnum; +import com.cool.store.enums.prepare.newStore.PassengerFlowEnum; +import com.cool.store.enums.prepare.newStore.StoreOperatorEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.*; +import com.cool.store.mq.producer.SimpleMessageService; +import com.cool.store.request.AuditResultRequest; +import com.cool.store.request.NewStoreRequest; +import com.cool.store.request.SysStoreAppRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.response.SysStoreAppResponse; +import com.cool.store.service.CoolStoreStartFlowService; +import com.cool.store.service.PreparationService; +import com.cool.store.service.SysStoreAppService; +import com.cool.store.service.UserAuthMappingService; +import com.cool.store.utils.poi.StringUtils; +import com.cool.store.utils.poi.constant.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class SysStoreAppServiceImpl implements SysStoreAppService, AuditResultService { + + @Resource + private CoolStoreStartFlowService coolStoreStartFlowService; + + @Resource + private SystemBuildingShopMapper systemBuildingShopMapper; + + @Resource + private LineInfoMapper lineInfoMapper; + + @Resource + PointInfoMapper pointInfoMapper; + + @Resource + RegionMapper regionMapper; + + @Resource + ThirdDepartmentMapper thirdDepartmentMapper; + + @Resource + EnterpriseUserMapper enterpriseUserMapper; + + @Resource + UserAuthMappingService userAuthMappingService; + + @Resource + PreparationService preparationService; + + @Resource + ShopAuditInfoMapper shopAuditInfoMapper; + + @Resource + ShopInfoMapper shopInfoMapper; + + @Resource + ShopStageInfoDAO shopStageInfoDAO; + + @Resource + CommonService commonService; + + @Resource + SimpleMessageService simpleMessageService; + + @Resource + PointDetailInfoMapper pointDetailInfoMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public ResponseResult submitSysBuildStore(SysStoreAppRequest request, LoginUserInfo user) { + log.info("submitSysBuildStore request :{}", JSONObject.toJSONString(request)); + if (Objects.isNull(request)) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + //1.操作数据库 + SystemBuildingShopDO systemBuildingShopDO = SystemBuildingShopDO.convertToSystemBuildingShopDO(request); + if (request.getId() == null) { + systemBuildingShopMapper.insertSelective(systemBuildingShopDO); + } else { + systemBuildingShopDO.setId(request.getId()); + systemBuildingShopMapper.updateByPrimaryKeySelective(systemBuildingShopDO); + } + //2.查找、组装数组 + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(request.getLineId());//线索信息 + PointInfoDO pointInfoDO = pointInfoMapper.getDataByShopIdAndLineId(request.getLineId(), request.getShopId());//查铺位信息确定铺位所在大区、战区、门店所在省市区街道地址 + //3.请求鲜丰接口 + NewStoreRequest apiRequest = convertToNewStoreRequest(request, lineInfoDO, pointInfoDO, user); + log.info("submitSysBuildStore apiRequest:{}",JSONObject.toJSONString(apiRequest)); + return coolStoreStartFlowService.newStore(apiRequest, request.getShopId()); + } + + @Override + public SysStoreAppResponse getDefaultValueSysBuildStore(Long lineId, Long shopId, LoginUserInfo user) { + SysStoreAppResponse sysStoreAppResponse = new SysStoreAppResponse(); + //1.查找数据 + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(lineId); + SystemBuildingShopDO systemBuildingShopDO = SystemBuildingShopDO.builder().lineId(lineId).shopId(shopId).build(); + systemBuildingShopDO = systemBuildingShopMapper.selectOne(systemBuildingShopDO); + PointInfoDO pointInfoDO = pointInfoMapper.getDataByShopIdAndLineId(lineId, shopId); + //2.组装数据并返回 + sysStoreAppResponse = polymerization(sysStoreAppResponse, systemBuildingShopDO, lineInfoDO, pointInfoDO); + ShopAuditInfoDO shopAuditInfoDO = shopAuditInfoMapper.selectBykeyAndType(shopId); + if (Objects.nonNull(shopAuditInfoDO)) { + SysStoreAppResponse.AuditDetail auditDetail = new SysStoreAppResponse.AuditDetail(); + auditDetail.setAuditType(shopAuditInfoDO.getAuditType()); + auditDetail.setPassReason(shopAuditInfoDO.getPassReason()); + auditDetail.setRejectReason(shopAuditInfoDO.getRejectReason()); + auditDetail.setResultType(shopAuditInfoDO.getResultType()); + sysStoreAppResponse.setAuditDetail(auditDetail); + } + return sysStoreAppResponse; + } + + /** + * 聚合返回体 + */ + private SysStoreAppResponse polymerization(SysStoreAppResponse sysStoreAppResponse, + SystemBuildingShopDO systemBuildingShopDO, + LineInfoDO lineInfoDO, + PointInfoDO pointInfoDO) { + sysStoreAppResponse = from(systemBuildingShopDO, lineInfoDO, pointInfoDO); + return sysStoreAppResponse; + } + + public SysStoreAppResponse from(SystemBuildingShopDO systemBuildingShopDO, + LineInfoDO lineInfoDO, + PointInfoDO pointInfoDO) { + SysStoreAppResponse.FranInfo franInfo = new SysStoreAppResponse.FranInfo(); + SysStoreAppResponse.StoreDetail storeDetail = new SysStoreAppResponse.StoreDetail(); + SysStoreAppResponse.SupervisorDetail supervisorDetail = new SysStoreAppResponse.SupervisorDetail(); + SysStoreAppResponse sysStoreAppResponse = new SysStoreAppResponse(); + Long regionId = pointInfoDO.getRegionId(); + RegionDO bigRegion = regionMapper.getBigRegionByRegionId(regionId);//大区 + RegionDO fightRegion = regionMapper.getByRegionId(regionId);//战区 + EnterpriseUserDO regionManager = userAuthMappingService.getUserByRoleEnumAndRegionId(UserRoleEnum.REGION_MANAGER, bigRegion.getId()); +// EnterpriseUserDO supervisor = userAuthMappingService.getUserByRoleEnumAndRegionId(UserRoleEnum.SUPERVISION, fightRegion.getId()); + if (Objects.nonNull(regionManager)) { + // regioGeneral + supervisorDetail.setRegioGeneral(regionManager.getName()); + // regioGeneralId + supervisorDetail.setRegioGeneralId(regionManager.getUserId()); + } +// if (Objects.nonNull(supervisor)) { +// // supervisorName +// supervisorDetail.setSupervisorName(supervisor.getName()); +// // supervisorId +// supervisorDetail.setSupervisorId(supervisor.getUserId()); +// } + storeDetail.setBigName(bigRegion.getName()); + storeDetail.setBigCode(bigRegion.getSynDingDeptId()); + storeDetail.setFightName(fightRegion.getName()); + storeDetail.setFightCode(fightRegion.getSynDingDeptId()); + storeDetail.setFightId(fightRegion.getId()); + + if (Objects.nonNull(systemBuildingShopDO)) { + sysStoreAppResponse.setId(systemBuildingShopDO.getId()); + sysStoreAppResponse.setLineId(systemBuildingShopDO.getLineId()); + sysStoreAppResponse.setShopId(systemBuildingShopDO.getShopId()); + sysStoreAppResponse.setAuditId(systemBuildingShopDO.getAuditId()); + franInfo.setFranchiseeType(systemBuildingShopDO.getFranchiseeType()); + franInfo.setStoreInviteesName(systemBuildingShopDO.getStoreInviteesName()); + franInfo.setInviteUserId(systemBuildingShopDO.getStoreInviteesId()); + storeDetail.setStoreNature(systemBuildingShopDO.getStoreNature()); + storeDetail.setStoreOperator(systemBuildingShopDO.getStoreOperator()); + storeDetail.setStoreName(systemBuildingShopDO.getStoreName()); + // bigDesc + storeDetail.setBigDesc(systemBuildingShopDO.getBigDesc()); + // fightDesc + storeDetail.setFightDesc(systemBuildingShopDO.getFightDesc()); + // smallCode + storeDetail.setSmallCode(systemBuildingShopDO.getSmallCode()); + // smallDesc + storeDetail.setSmallDesc(systemBuildingShopDO.getSmallDesc()); + // smallName + storeDetail.setSmallName(systemBuildingShopDO.getSmallName()); + // mainBusinessType + storeDetail.setMainBusinessType(systemBuildingShopDO.getMainBusinessType()); + // subBusinessType + storeDetail.setSubBusinessType(systemBuildingShopDO.getSubBusinessType()); + // offlineCompetitor + storeDetail.setOfflineCompetitor(systemBuildingShopDO.getOfflineCompetitor()); + // offlineCompetingBrand + storeDetail.setOfflineCompetingBrand(systemBuildingShopDO.getOfflineCompetingBrand()); + // averagePriceSh + storeDetail.setAveragePriceSh(systemBuildingShopDO.getAveragePriceSh()); + // averageDailyRs + storeDetail.setAverageDailyRs(systemBuildingShopDO.getAverageDailyRs()); + // businessStoreType + storeDetail.setBusinessStoreType(systemBuildingShopDO.getBusinessStoreType()); + // estimatedTurnover + storeDetail.setEstimatedTurnover(systemBuildingShopDO.getEstimatedTurnover()); + // signDate + storeDetail.setSignDate(systemBuildingShopDO.getSignDate()); + // landlordName + storeDetail.setLandlordName(systemBuildingShopDO.getLandlordName()); + // contractDeliveryDate + storeDetail.setContractDeliveryDate(systemBuildingShopDO.getContractDeliveryDate()); + // landlordMobile + storeDetail.setLandlordMobile(systemBuildingShopDO.getLandlordMobile()); + // reservation + storeDetail.setReservation(systemBuildingShopDO.getReservation()); + // storeRent + storeDetail.setStoreRent(systemBuildingShopDO.getStoreRent()); + // storeFranchiseFee + storeDetail.setStoreFranchiseFee(systemBuildingShopDO.getStoreFranchiseFee()); + // storeSecurityDeposit + storeDetail.setStoreSecurityDeposit(systemBuildingShopDO.getStoreSecurityDeposit()); + // reasons + storeDetail.setReasons(systemBuildingShopDO.getReasons()); + storeDetail.setUsageRate(systemBuildingShopDO.getUsageRate()); + // + supervisorDetail.setSupervisorName(systemBuildingShopDO.getSupervisorName()); + // supervisorId + supervisorDetail.setSupervisorId(systemBuildingShopDO.getSupervisorId()); + } + PointDetailInfoDO shopPointDetailInfoByPointId = pointDetailInfoMapper.getShopPointDetailInfoByPointId(pointInfoDO.getId()); + if (Objects.isNull(systemBuildingShopDO) && Objects.nonNull(shopPointDetailInfoByPointId)){ + storeDetail.setLandlordMobile(shopPointDetailInfoByPointId.getLandlordMobile()); + storeDetail.setLandlordName(shopPointDetailInfoByPointId.getLandlordUsername()); + storeDetail.setStoreRent(Integer.valueOf(shopPointDetailInfoByPointId.getMonthRent())); + } + if (Objects.nonNull(lineInfoDO)) { + RegionDO byRegionId = regionMapper.getByRegionId(lineInfoDO.getRegionId()); + franInfo.setSubregion(byRegionId.getName()); + franInfo.setPartnerNum(lineInfoDO.getPartnerNum()); + franInfo.setFranchiseeMobile(lineInfoDO.getMobile()); + franInfo.setFranchiseeName(lineInfoDO.getUsername()); + franInfo.setInvestmentUserId(lineInfoDO.getInvestmentManager()); + EnterpriseUserDO userInfoById = enterpriseUserMapper.getUserInfoById(lineInfoDO.getInvestmentManager()); + franInfo.setInvestmentName(userInfoById.getName()); + } + EnterpriseUserDO locationPeople = enterpriseUserMapper.getUserInfoById(pointInfoDO.getDevelopmentManager());//门店选址人 + franInfo.setSitterId(pointInfoDO.getDevelopmentManager()); + franInfo.setSitterName(locationPeople.getName()); + storeDetail.setProvince(pointInfoDO.getProvince()); + storeDetail.setCity(pointInfoDO.getCity()); + storeDetail.setDistrict(pointInfoDO.getDistrict()); + storeDetail.setTownship(pointInfoDO.getTownship()); + storeDetail.setDetailAddress(pointInfoDO.getAddress()); + storeDetail.setStoreName(pointInfoDO.getPointName()); + + sysStoreAppResponse.setStoreDetail(storeDetail); + sysStoreAppResponse.setSupervisorDetail(supervisorDetail); + sysStoreAppResponse.setFranInfo(franInfo); + return sysStoreAppResponse; + } + + public NewStoreRequest convertToNewStoreRequest( + SysStoreAppRequest sysStoreAppRequest, + LineInfoDO lineInfoDO, + PointInfoDO pointInfoDO, + LoginUserInfo user) { + //用户信息map + List userIdList = new ArrayList<>(); + userIdList.add(sysStoreAppRequest.getSupervisorDetail().getSupervisorId());//督导 + userIdList.add(sysStoreAppRequest.getFranInfo().getInviteUserId());//邀约人 + userIdList.add(pointInfoDO.getDevelopmentManager());//选址人 + userIdList.add(lineInfoDO.getInvestmentManager());//招商人 + List userInfoByUserIds = enterpriseUserMapper.getUserInfoByUserIds(userIdList); + Map userMap = userInfoByUserIds.stream().collect(Collectors.toMap(EnterpriseUserDO::getUserId, Function.identity())); + + NewStoreRequest newStoreRequest = new NewStoreRequest(); + ArrayList objects = new ArrayList<>(); + objects.add("123"); + // accessory_address + newStoreRequest.setAccessory_address(objects); + // apply_user + //todo LoginUserInfo user + newStoreRequest.setApply_user("19110026"); + // city1 + newStoreRequest.setCity1(pointInfoDO.getCity()); + // csgs + ThirdDepartmentDO thirdDepartmentDO = thirdDepartmentMapper.getByName(sysStoreAppRequest.getStoreDetail().getBigName()); + newStoreRequest.setCsgs(thirdDepartmentDO.getDepartmentCode()); + // csqmc + newStoreRequest.setCsqmc(BusinessDistrictEnum.getByCode(sysStoreAppRequest.getStoreDetail().getSubBusinessType()).getDesc()); + //todo ddxm 督导 sysStoreAppRequest.getSupervisorDetail().getSupervisorId() + newStoreRequest.setDdxm("22090043"); + // dpzlht + newStoreRequest.setDpzlht(objects); + // end_time + newStoreRequest.setEnd_time(null); + // forecast_turnover + newStoreRequest.setForecast_turnover(sysStoreAppRequest.getStoreDetail().getEstimatedTurnover()); + // invite_people + //todo 邀约人 sysStoreAppRequest.getFranInfo().getInviteUserId() + newStoreRequest.setInvite_people("21100037"); + // jms_id + newStoreRequest.setJms_id(lineInfoDO.getPartnerNum()); + // jmskhdjbwzjt + newStoreRequest.setJmskhdjbwzjt(objects); + // join_channel + newStoreRequest.setJoin_channel(sysStoreAppRequest.getFranInfo().getFranchiseeType()); + // jzdsmc + newStoreRequest.setJzdsmc(OfflineCompetitorEnum.getByCode(sysStoreAppRequest.getStoreDetail().getOfflineCompetitor()).getDesc()); + // kdzBusinessid + newStoreRequest.setKdzBusinessId(AuditEnum.SYS_BUILD.getCode() + "_" + sysStoreAppRequest.getShopId() + "_" + pointInfoDO.getId()); + // kllzsmc + newStoreRequest.setKllzsmc(PassengerFlowEnum.getByCode(sysStoreAppRequest.getStoreDetail().getAverageDailyRs()).getDesc()); + // landlord_name + newStoreRequest.setLandlord_name(sysStoreAppRequest.getStoreDetail().getLandlordName()); + // landlord_tel + newStoreRequest.setLandlord_tel(sysStoreAppRequest.getStoreDetail().getLandlordMobile()); + //todo location_people 门店选址人 pointInfoDO.getDevelopmentManager() + newStoreRequest.setLocation_people("21100037"); + // mdyzj + newStoreRequest.setMdyzj(sysStoreAppRequest.getStoreDetail().getStoreRent()); + //todo merchant_people 招商人工号 lineInfoDO.getInvestmentManager() + newStoreRequest.setMerchant_people("22090043"); + // name1 + newStoreRequest.setName1(sysStoreAppRequest.getStoreDetail().getStoreName()); + // regio + newStoreRequest.setRegio(pointInfoDO.getProvince()); + // reservation_date + newStoreRequest.setReservation_date(DateUtil.format(sysStoreAppRequest.getStoreDetail().getReservation(), Constants.TIME_STAMP_FLAG)); + // room_date + newStoreRequest.setRoom_date(DateUtil.format(sysStoreAppRequest.getStoreDetail().getContractDeliveryDate(), Constants.TIME_STAMP_FLAG)); + // scjdxz + newStoreRequest.setScjdxz(objects); + // signing_date + newStoreRequest.setSigning_date(DateUtil.format(sysStoreAppRequest.getStoreDetail().getSignDate(), Constants.TIME_STAMP_FLAG)); + // sqmdlx + newStoreRequest.setSqmdlx(sysStoreAppRequest.getStoreDetail().getBusinessStoreType()); + // sqrq + newStoreRequest.setSqrq(DateUtil.today()); + // ssdq + newStoreRequest.setSsdq(sysStoreAppRequest.getStoreDetail().getBigCode()); + // ssxq +// RegionDO smallRegion = regionMapper.getByRegionId(Long.valueOf(sysStoreAppRequest.getStoreDetail().getSmallCode())); + RegionDO smallRegion = regionMapper.getRegionInfoBySynDingDeptId(Long.valueOf(sysStoreAppRequest.getStoreDetail().getSmallCode())); + newStoreRequest.setSsxq(smallRegion.getSynDingDeptId()); + // sszq + newStoreRequest.setSszq(sysStoreAppRequest.getStoreDetail().getFightCode()); + // start_time + newStoreRequest.setStart_time(null); + // store_bzj + newStoreRequest.setStore_bzj(sysStoreAppRequest.getStoreDetail().getStoreSecurityDeposit()); + // store_jmf + newStoreRequest.setStore_jmf(sysStoreAppRequest.getStoreDetail().getStoreFranchiseFee()); + // store_reason + newStoreRequest.setStore_reason(sysStoreAppRequest.getStoreDetail().getReasons()); + // street + newStoreRequest.setStreet(pointInfoDO.getTownship()); + // title + newStoreRequest.setTitle("SAP-新店开业申请-" + lineInfoDO.getUsername() + "-" + DateUtil.today()); + // zcsqlx + newStoreRequest.setZcsqlx(sysStoreAppRequest.getStoreDetail().getSubBusinessType()); + // zdqms + newStoreRequest.setZdqms(sysStoreAppRequest.getStoreDetail().getBigName()); + // zhkkz + newStoreRequest.setZhkkz("Y"); + // zjmsbm + newStoreRequest.setZjmsbm(lineInfoDO.getPartnerNum()); + // zmddh + newStoreRequest.setZmddh(lineInfoDO.getMobile()); + // zmdjyz + newStoreRequest.setZmdjyz(sysStoreAppRequest.getStoreDetail().getStoreOperator()); + // zmdjyz_name + newStoreRequest.setZmdjyz_name(StoreOperatorEnum.getByCode(sysStoreAppRequest.getStoreDetail().getStoreOperator()).getDesc()); + // zmdxz + newStoreRequest.setZmdxz(20); + // zmdxz_name + newStoreRequest.setZmdxz_name("加盟"); + // zmdzt + newStoreRequest.setZmdzt(10); + // zmrjkllzs1 + newStoreRequest.setZmrjkllzs1(PassengerFlowEnum.getByCode(sysStoreAppRequest.getStoreDetail().getAverageDailyRs()).getType()); + // zppsyfy + newStoreRequest.setZppsyfy(0.05); + newStoreRequest.setZppsyfy(Double.valueOf(sysStoreAppRequest.getStoreDetail().getUsageRate())); + // zq + newStoreRequest.setZq(pointInfoDO.getDistrict()); + // zsqmc + newStoreRequest.setZsqmc(BusinessDistrictEnum.getByCode(sysStoreAppRequest.getStoreDetail().getMainBusinessType()).getDesc()); + // zssgs + newStoreRequest.setZssgs("1060"); + // ztype + newStoreRequest.setZtype("Z1"); + // zwesfj + newStoreRequest.setZwesfj(sysStoreAppRequest.getStoreDetail().getAveragePriceSh()); + // zxqms + newStoreRequest.setZxqms(sysStoreAppRequest.getStoreDetail().getSmallName()); + // zxszyjzds + newStoreRequest.setZxszyjzds(sysStoreAppRequest.getStoreDetail().getOfflineCompetingBrand()); + // zxxdz + newStoreRequest.setZxxdz(pointInfoDO.getAddress()); + // zxxzyjzds + newStoreRequest.setZxxzyjzds(sysStoreAppRequest.getStoreDetail().getOfflineCompetitor()); +// // zymdbm + newStoreRequest.setZymdbm(""); + // zzqms + newStoreRequest.setZzqms(sysStoreAppRequest.getStoreDetail().getFightName()); + newStoreRequest.setZzsqlx(sysStoreAppRequest.getStoreDetail().getMainBusinessType()); + // zzsqlx + return newStoreRequest; + } + + @Override + public Boolean auditResult(AuditResultRequest request) { + String kdzBusinessId = request.getKdzBusinessId(); + Long shopId = getShopId(kdzBusinessId); + ShopAuditInfoDO shopAuditInfoDO = new ShopAuditInfoDO(); + ShopSubStageStatusEnum shopSubStageStatusEnum = null; + //1.成功/失败原因 + try { + //删除上次提交数据 + ShopAuditInfoDO deleteShopAuditDo = shopAuditInfoMapper.selectBykeyAndType(shopId); + if (Objects.nonNull(deleteShopAuditDo)){ + deleteShopAuditDo.setDeleted(false); + shopAuditInfoMapper.updateByPrimaryKeySelective(deleteShopAuditDo); + } + //新增本次数据 + shopAuditInfoDO.setShopId(shopId); + shopAuditInfoDO.setAuditType(AuditTypeEnum.SYS_BUILD.getCode()); + shopAuditInfoDO.setSubmittedUserId(""); + shopAuditInfoDO.setSubmittedUserName(""); + if (Constants.ZERO_INTEGER.equals(request.getAuditResult())) { + shopAuditInfoDO.setResultType(Constants.ONE_INTEGER); + shopAuditInfoDO.setRejectReason(request.getCause()); + shopSubStageStatusEnum = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_32; + } else if (Constants.ONE_INTEGER.equals(request.getAuditResult())) { + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId); + EnterpriseUserDO supervisor = userAuthMappingService.hierarchicalSearch(UserRoleEnum.SUPERVISION, shopInfoDO.getRegionId()); + shopInfoDO.setStoreNum(request.getStoreNum()); //更新门店编码 + shopInfoDO.setSupervisorUserId(Objects.isNull(supervisor) ? "" : supervisor.getUserId());//更新督导 + SystemBuildingShopDO systemBuildingShopDO = systemBuildingShopMapper.selectOne(SystemBuildingShopDO.builder().shopId(shopId).build()); + shopInfoDO.setShopName(systemBuildingShopDO.getStoreName());//更新铺位名称 + shopInfoMapper.updateByPrimaryKeySelective(shopInfoDO); + shopAuditInfoDO.setResultType(Constants.ZERO_INTEGER); + shopAuditInfoDO.setPassReason(request.getCause()); + shopSubStageStatusEnum = ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_33; + //校验建店与加盟签约合同是否完成 并初始化后续流程数据 + preparationService.contractAndBuildStoreCompletion(shopId); + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); + commonService.sendSms(lineInfoDO.getMobile(), SMSMsgEnum.SYS_BUILD_STORE_DONE); + // 异步处理 + simpleMessageService.send(JSONObject.toJSONString(shopInfoDO), RocketMqTagEnum.SYNC_TRAINING_SHOP_PERSON); + } + shopAuditInfoMapper.insertSelective(shopAuditInfoDO); + //更新阶段状态 + shopStageInfoDAO.updateShopStageAndAuditInfo(shopId, shopSubStageStatusEnum, shopAuditInfoDO.getId()); + } catch (Exception e) { + log.error("auditResult message:{}",e.getMessage()); + throw new ServiceException(ErrorCodeEnum.UNKNOWN); + } + return true; + } + + private Long getShopId(String kdzBusinessId) { + String shopId = kdzBusinessId.substring(kdzBusinessId.indexOf("_") + 1, kdzBusinessId.lastIndexOf("_")); + return Long.valueOf(shopId); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TRTCVideoServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TRTCVideoServiceImpl.java new file mode 100644 index 000000000..9db91fe26 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TRTCVideoServiceImpl.java @@ -0,0 +1,41 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.dao.LineInterviewDAO; +import com.cool.store.dto.trtc.callback.VideoCallBackDTO; +import com.cool.store.entity.LineInterviewDO; +import com.cool.store.service.TRTCVideoService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@Service +public class TRTCVideoServiceImpl implements TRTCVideoService { + + @Resource + private LineInterviewDAO lineInterviewDAO; + + @Override + public void handleVideoCallBack(VideoCallBackDTO videoCallBackDTO) { + //将视频播放地址拼接到对应的面试信息字段中 + String videoUrl = videoCallBackDTO.getEventInfo().getPayload().getTencentVod().getVideoUrl(); + String roomId = videoCallBackDTO.getEventInfo().getRoomId(); + LineInterviewDO interviewInfo = lineInterviewDAO.getInterviewInfoByRoomId(roomId); + if(Objects.isNull(interviewInfo)){ + return; + } + String[] split = videoUrl.split(","); + List videoList = JSONObject.parseArray(interviewInfo.getVideoUrl(), String.class); + if(Objects.isNull(videoList)){ + videoList = new ArrayList<>(); + } + videoList.addAll(Stream.of(split).collect(Collectors.toList())); + interviewInfo.setVideoUrl(JSONObject.toJSONString(videoList.stream().distinct().collect(Collectors.toList()))); + lineInterviewDAO.updateInterviewInfo(interviewInfo); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TempUserDetailServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TempUserDetailServiceImpl.java new file mode 100644 index 000000000..481f93096 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TempUserDetailServiceImpl.java @@ -0,0 +1,201 @@ +package com.cool.store.service.impl; + +import com.cool.store.dao.*; +import com.cool.store.dto.ehr.StaffBaseInfoDTO; +import com.cool.store.entity.*; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.MessageEnum; +import com.cool.store.enums.UserRoleEnum; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.TempUserDetailRequest; +import com.cool.store.service.PreparationService; +import com.cool.store.service.TempUserDetailService; +import com.cool.store.service.XfsgEhrService; +import com.cool.store.utils.StringUtil; +import com.cool.store.utils.poi.DateUtils; +import com.cool.store.vo.TempUserDetailInfoVO; +import com.cool.store.vo.TempUserDetailListVO; +import com.cool.store.vo.TempUserDetailVO; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; + +/** + * @author byd + * @date 2024-04-29 16:14 + */ +@Service +public class TempUserDetailServiceImpl implements TempUserDetailService { + + @Resource + private TempUserDetailDAO tempUserDetailDAO; + + @Resource + private ShopInfoDAO shopInfoDAO; + + @Resource + private EnterpriseUserDAO enterpriseUserDAO; + + @Autowired + private XfsgEhrService xfsgEhrService; + + @Autowired + private ShopStageInfoDAO shopStageInfoDAO; + + @Autowired + private CommonService commonService; + + @Autowired + private EnterpriseUserRoleDao enterpriseUserRoleDao; + + @Autowired + private PreparationService preparationService; + + @Autowired + private RegionDao regionDao; + + @Override + public TempUserDetailListVO userList(Long shopId) { + List tempUserDetailDOList = tempUserDetailDAO.userList(shopId); + List resultList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(tempUserDetailDOList)) { + tempUserDetailDOList.forEach(tempUserDetailDO -> { + TempUserDetailVO tempUserDetailVO = new TempUserDetailVO(); + tempUserDetailVO.setId(tempUserDetailDO.getId()); + tempUserDetailVO.setMobile(tempUserDetailDO.getMobile()); + tempUserDetailVO.setIdCard(tempUserDetailDO.getIdCard()); + tempUserDetailVO.setSource(tempUserDetailDO.getSource()); + tempUserDetailVO.setRegisterTime(tempUserDetailDO.getRegisterTime()); + tempUserDetailVO.setShopId(tempUserDetailDO.getShopId()); + tempUserDetailVO.setLineId(tempUserDetailDO.getLineId()); + tempUserDetailVO.setUsername(tempUserDetailDO.getUsername()); + tempUserDetailVO.setRegionId(tempUserDetailDO.getRegionId()); + tempUserDetailVO.setRoleId(tempUserDetailDO.getRoleId()); + resultList.add(tempUserDetailVO); + }); + } + ShopInfoDO shopInfoDO = shopInfoDAO.getShopInfo(shopId); + if(shopInfoDO == null){ + throw new ServiceException("该店铺不存在"); + } + TempUserDetailListVO tempUserDetailListVO = new TempUserDetailListVO(); + tempUserDetailListVO.setUserList(resultList); + tempUserDetailListVO.setShopId(shopId); + tempUserDetailListVO.setStoreNum(shopInfoDO.getStoreNum()); + ShopStageInfoDO shopStageInfoDO = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_5); + if(shopStageInfoDO != null){ + tempUserDetailListVO.setShopSubStageStatus(shopStageInfoDO.getShopSubStageStatus()); + } + return tempUserDetailListVO; + } + + @Override + public void addTempUserDetail(TempUserDetailRequest tempUserDetailRequest) { + TempUserDetailDO tempUserDetailDO = tempUserDetailDAO.selectByIdCard(tempUserDetailRequest.getIdCard()); + if(tempUserDetailDO != null){ + throw new ServiceException("该员工已登记"); + } + EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.getUserInfoByThirdOaUniqueFlag(tempUserDetailRequest.getIdCard()); + if(enterpriseUserDO == null){ + throw new ServiceException("用户不存在"); + } + ShopInfoDO shopInfoDO = shopInfoDAO.getShopInfo(tempUserDetailRequest.getShopId()); + if(shopInfoDO == null){ + throw new ServiceException("该店铺不存在"); + } +// if(StringUtil.isNotBlank(shopInfoDO.getStoreNum())){ +// throw new ServiceException("系统建店已完成,无法手动登记"); +// } + tempUserDetailDO = new TempUserDetailDO(); + tempUserDetailDO.setLineId(shopInfoDO.getLineId()); + tempUserDetailDO.setShopId(tempUserDetailRequest.getShopId()); + tempUserDetailDO.setRegionId(shopInfoDO.getRegionId()); + tempUserDetailDO.setMobile(tempUserDetailRequest.getPhone()); + tempUserDetailDO.setUsername(tempUserDetailRequest.getName()); + tempUserDetailDO.setSex(tempUserDetailRequest.getSex()); + tempUserDetailDO.setAge(tempUserDetailRequest.getAge()); + tempUserDetailDO.setIdCard(tempUserDetailRequest.getIdCard()); + tempUserDetailDO.setStatus(1); + tempUserDetailDO.setEducational(tempUserDetailRequest.getHighestDegree()); + tempUserDetailDO.setRoleId(tempUserDetailRequest.getJobId()); + tempUserDetailDO.setIdCardNegativeUrl(tempUserDetailRequest.getEmblemPhoto()); + tempUserDetailDO.setIdCardPositiveUrl(tempUserDetailRequest.getIdNumPhoto()); + tempUserDetailDO.setHealthCertificateUrl(tempUserDetailRequest.getHealthCertificate()); + tempUserDetailDO.setRegisterTime(tempUserDetailRequest.getRegisterTime()); + tempUserDetailDO.setSubmitTime(new Date()); + tempUserDetailDO.setSource("create"); + tempUserDetailDAO.insertSelective(tempUserDetailDO); + + //登记人员,培训状态由未开始到培训中 + ShopStageInfoDO shopStageInfoDO = shopStageInfoDAO.getShopSubStageInfo(tempUserDetailDO.getShopId(), ShopSubStageEnum.SHOP_STAGE_6); + if(shopStageInfoDO != null && shopStageInfoDO.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_00.getShopSubStageStatus())){ + shopStageInfoDAO.updateShopStageInfo(tempUserDetailDO.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_60); + } + + List userIdList = enterpriseUserRoleDao.getUserIdsByRoleIdList(Collections.singletonList(UserRoleEnum.TRAINER.getCode())); + RegionDO regionDO = regionDao.getRegionById(shopInfoDO.getRegionId()); + // + userIdList = enterpriseUserDAO.getUserIdListByRegionId(Long.valueOf(regionDO.getParentId()), userIdList); + + Map messageMap = new HashMap<>(); + messageMap.put("userName", tempUserDetailRequest.getName()); + messageMap.put("mobile", tempUserDetailRequest.getPhone()); + messageMap.put("registerTime", DateUtils.dateTime(tempUserDetailRequest.getRegisterTime())); + messageMap.put("userDetailId", tempUserDetailDO.getId().toString()); + commonService.sendMessage(userIdList, MessageEnum.MESSAGE_21, messageMap); + } + + @Override + public TempUserDetailInfoVO getUserInfoByIdUserDetailId(Long userDetailId) { + TempUserDetailDO tempUserDetailDO = tempUserDetailDAO.selectById(userDetailId); + TempUserDetailInfoVO tempUserDetailInfoVO = new TempUserDetailInfoVO(); + tempUserDetailInfoVO.setLineId(tempUserDetailDO.getLineId()); + tempUserDetailInfoVO.setShopId(tempUserDetailDO.getShopId()); + tempUserDetailInfoVO.setRegionId(tempUserDetailDO.getRegionId()); + tempUserDetailInfoVO.setMobile(tempUserDetailDO.getMobile()); + tempUserDetailInfoVO.setUsername(tempUserDetailDO.getUsername()); + tempUserDetailInfoVO.setSex(tempUserDetailDO.getSex()); + tempUserDetailInfoVO.setAge(tempUserDetailDO.getAge()); + tempUserDetailInfoVO.setIdCard(tempUserDetailDO.getIdCard()); + tempUserDetailInfoVO.setStatus(tempUserDetailDO.getStatus()); + tempUserDetailInfoVO.setEducational(tempUserDetailDO.getEducational()); + tempUserDetailInfoVO.setRoleId(tempUserDetailDO.getRoleId()); + tempUserDetailInfoVO.setIdCardNegativeUrl(tempUserDetailDO.getIdCardNegativeUrl()); + tempUserDetailInfoVO.setIdCardPositiveUrl(tempUserDetailDO.getIdCardPositiveUrl()); + tempUserDetailInfoVO.setHealthCertificateUrl(tempUserDetailDO.getHealthCertificateUrl()); + tempUserDetailInfoVO.setRegisterTime(tempUserDetailDO.getRegisterTime()); + return tempUserDetailInfoVO; + } + + @Override + public StaffBaseInfoDTO getUserInfoByIdCard(String idCard) { + if (StringUtil.isBlank(idCard)) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.getUserInfoByThirdOaUniqueFlag(idCard); + if(Objects.isNull(enterpriseUserDO)){ + throw new ServiceException(ErrorCodeEnum.USER_NOT_EXIST); + } + if (StringUtil.isBlank(enterpriseUserDO.getJobnumber())) { + throw new ServiceException(ErrorCodeEnum.JOBNUMBER_NOT_EXIST); + } + return xfsgEhrService.getUserInfoByCode(enterpriseUserDO.getJobnumber()); + } + + @Override + public void registrationCompleted(Long shopId) { + ShopStageInfoDO shopStageInfoDO = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_5); + if(shopStageInfoDO != null){ + shopStageInfoDAO.updateShopStageInfo(shopId, ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_51); + //状态结束 + preparationService.whetherToOpenForAcceptance(shopId); + } + } + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TrainingExperienceServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TrainingExperienceServiceImpl.java new file mode 100644 index 000000000..329db143c --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TrainingExperienceServiceImpl.java @@ -0,0 +1,176 @@ +package com.cool.store.service.impl; + +import com.cool.store.dao.LineInfoDAO; +import com.cool.store.entity.*; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.ExperienceStatusEnum; +import com.cool.store.enums.WorkflowSubStageEnum; +import com.cool.store.enums.WorkflowSubStageStatusEnum; +import com.cool.store.enums.*; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.*; +import com.cool.store.request.TrainingExperienceDistributionRequest; +import com.cool.store.service.TrainingExperienceService; +import com.cool.store.utils.poi.DateUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.annotation.Tainted; +import java.time.LocalDate; +import java.util.*; +import java.util.stream.Collectors; + +import static com.cool.store.enums.ErrorCodeEnum.INTERVIEW_LINE_ID_IS_NULL; + +@Service +@Slf4j +public class TrainingExperienceServiceImpl extends LineFlowService implements TrainingExperienceService { + + @Resource + TrainingExperienceMapper trainingExperienceMapper; + + @Resource + LineInfoMapper lineInfoMapper; + + @Resource + LineInfoDAO lineInfoDAO; + + @Resource + SysRoleMapper sysRoleMapper; + + @Resource + EnterpriseUserMapper enterpriseUserMapper; + + @Resource + EnterpriseUserRoleMapper enterpriseUserRoleMapper; + + @Resource + UserAuthMappingMapper userAuthMappingMapper; + + + @Resource + private CommonService commonService; + + @Resource + RegionMapper regionMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean distribution(TrainingExperienceDistributionRequest request) { + if (Objects.isNull(request)) { + return Boolean.FALSE; + } + if (Objects.isNull(request.getLineId())) { + throw new ServiceException(ErrorCodeEnum.INTERVIEW_LINE_ID_IS_NULL); + } + LeaseBaseInfoDO leaseBaseInfoDO = request.toLeaseBaseInfoDO(); + Date currentDate = new Date(); + LineInfoDO lineInfoDO = new LineInfoDO(); + if (request.getExperienceStartTime().compareTo(request.getExperienceEndTime()) >= 0) { + throw new ServiceException(ErrorCodeEnum.TIME_FALSE); + } + if (currentDate.before(request.getExperienceStartTime())) { + leaseBaseInfoDO.setExperienceStatus(WorkflowSubStageStatusEnum.STORE_EXPERIENCE_85.getCode()); + lineInfoDO.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.STORE_EXPERIENCE_85.getCode()); + LineInfoDO msgLineInfo = lineInfoMapper.getByLineId(request.getLineId()); + Map templateParam = new HashMap<>(); + templateParam.put("shopName", request.getStoreName()); + templateParam.put("experienceTime", String.format("%s 到 %s", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, request.getExperienceStartTime()), + DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, request.getExperienceEndTime()))); + commonService.sendSms(msgLineInfo.getMobile(), SMSMsgEnum.SHOP_EXPERIENCE,templateParam); + } else if (currentDate.after(request.getExperienceStartTime()) || currentDate.before(request.getExperienceEndTime())) { + leaseBaseInfoDO.setExperienceStatus(WorkflowSubStageStatusEnum.STORE_EXPERIENCE_90.getCode()); + lineInfoDO.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.STORE_EXPERIENCE_90.getCode()); + } else { + throw new ServiceException("时间"); + } + trainingExperienceMapper.insert(leaseBaseInfoDO); + lineInfoDO.setWorkflowSubStage(WorkflowSubStageEnum.STORE_EXPERIENCE.getCode()); + lineInfoDO.setId(request.getLineId()); + lineInfoMapper.updateByPrimaryKeySelective(lineInfoDO); + return true; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void experienceStatusChange(Long lineId, Integer status, String abandonCause) { + trainingExperienceMapper.updateStatus(lineId, status, abandonCause); + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(lineId); + if (ExperienceStatusEnum.DONE.getExperienceStatus().equals(status)) { + if (Objects.isNull(lineInfoDO)) { + throw new ServiceException(ErrorCodeEnum.INTERVIEW_PARTNER_NOT_EXIST); + } + lineInfoDO.setWorkflowSubStage(WorkflowSubStageEnum.SECOND_INTERVIEWS.getCode()); + lineInfoDO.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.SECOND_INTERVIEWS_100.getCode()); + lineInfoMapper.updateByPrimaryKeySelective(lineInfoDO); + commonService.sendSms(lineInfoDO.getMobile(),SMSMsgEnum.SECOND_INTERVIEW_APPOINTMENT); + } else { + lineInfoDO.setWorkflowSubStage(WorkflowSubStageEnum.STORE_EXPERIENCE.getCode()); + lineInfoDO.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.STORE_EXPERIENCE_95.getCode()); + lineInfoMapper.updateByPrimaryKeySelective(lineInfoDO); + + Map requestMap = new HashMap<>(); + requestMap.put("partnerUsername",lineInfoDO.getUsername()); + requestMap.put("partnerMobile",lineInfoDO.getMobile()); + requestMap.put("lineId",String.valueOf(lineInfoDO.getId())); + commonService.sendMessage(Collections.singletonList(lineInfoDO.getInvestmentManager()), + MessageEnum.MESSAGE_33, + requestMap); + } + + } + + @Override + public LeaseBaseInfoDO getTrainingExperience(Long lineId) { + List roleNames = new ArrayList<>(); + roleNames.add("加盟店店长"); + roleNames.add("加盟店储备店长"); + roleNames.add("店长"); + + LeaseBaseInfoDO leaseBaseInfoDO = trainingExperienceMapper.selectByLineId(lineId); + if (Objects.isNull(leaseBaseInfoDO)) { + leaseBaseInfoDO = new LeaseBaseInfoDO(); + LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(lineId); + if (Objects.nonNull(lineInfoDO) + && lineInfoDO.getWorkflowSubStage().equals(WorkflowSubStageEnum.STORE_EXPERIENCE.getCode()) + && lineInfoDO.getWorkflowSubStageStatus().equals(WorkflowSubStageStatusEnum.STORE_EXPERIENCE_85.getCode())) { + leaseBaseInfoDO.setExperienceStatus(WorkflowSubStageStatusEnum.STORE_EXPERIENCE_85.getCode()); + return leaseBaseInfoDO; + } + return null; + } + List xfStoreManager = sysRoleMapper.getXFStoreManager(roleNames); + List roleIds = xfStoreManager.stream().map(SysRoleDO::getId).collect(Collectors.toList()); + //店长角色的用户id + List userIdsByRoleIdList = enterpriseUserRoleMapper.getUserIdsByRoleIdList(roleIds); + //当前门店 + RegionDO storeRegion = regionMapper.getRegionByStoreId(leaseBaseInfoDO.getStoreId()); + //权限 + List userIdsByMappingIds = userAuthMappingMapper.getUserIdsByMappingIds(Collections.singletonList(storeRegion.getRegionId())); + //过滤 + userIdsByMappingIds.retainAll(userIdsByRoleIdList); + //用户 + List userInfoByUserIds = enterpriseUserMapper.getUserInfoByUserIds(userIdsByMappingIds); + String nameList = userInfoByUserIds.stream().map(EnterpriseUserDO::getName).collect(Collectors.toList()).toString(); + leaseBaseInfoDO.setStoreManager(nameList); + return leaseBaseInfoDO; + } + + @Override + protected Boolean auditPass(Long auditId, LineInfoDO lineInfo, String userId) { + WorkflowSubStageEnum workflowSubStageEnum = WorkflowSubStageEnum.getWorkflowSubStageEnum(lineInfo.getWorkflowSubStage()); + WorkflowSubStageEnum nextStage = workflowSubStageEnum.getNextStage(); + //更新线索阶段 + lineInfoDAO.updateWorkflowStage(lineInfo.getId(), nextStage, nextStage.getInitStatus(), userId); + return Boolean.TRUE; + } + + @Override + protected Boolean auditReject(Long auditId, LineInfoDO lineInfo, String userId) { + return Boolean.TRUE; + } + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TransferLogServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TransferLogServiceImpl.java new file mode 100644 index 000000000..581eddad5 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/TransferLogServiceImpl.java @@ -0,0 +1,49 @@ +package com.cool.store.service.impl; + +import com.cool.store.dao.TransferLogDAO; +import com.cool.store.dto.TransferLogDTO; +import com.cool.store.entity.LineInfoDO; +import com.cool.store.entity.TransferLogDO; +import com.cool.store.enums.OperationLogTypeEnum; +import com.cool.store.service.TransferLogService; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/3/29 18:11 + * @Version 1.0 + */ +@Service +public class TransferLogServiceImpl implements TransferLogService { + + @Resource + private TransferLogDAO transferLogDAO; + + @Override + public void addLog(LineInfoDO lineInfoDO, String formUserId, String toUserId, OperationLogTypeEnum operationLogTypeEnum) { + TransferLogDO transferLogDO = new TransferLogDO(); + transferLogDO.setLineId(lineInfoDO.getId()); + transferLogDO.setPartnerId(lineInfoDO.getPartnerId()); + transferLogDO.setFromUserId(formUserId); + transferLogDO.setToUserId(toUserId); + transferLogDO.setType(operationLogTypeEnum.getCode()); + //todo 更改库的逻辑或增加获取当前操作人 + transferLogDO.setCreateUserId("create"); + transferLogDO.setUpdateUserId("update"); + // 添加操作日志 + transferLogDAO.add(transferLogDO); + } + + @Override + public PageInfo getTransferLogPage(Integer pageNum, Integer pageSize, Long lineId) { + PageHelper.startPage(pageNum, pageSize); + List transferLogList = transferLogDAO.getTransferLogList(lineId); + PageInfo transferLogDTOPageInfo = new PageInfo<>(transferLogList); + return transferLogDTOPageInfo; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/UserAuthMappingServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/UserAuthMappingServiceImpl.java new file mode 100644 index 000000000..6d2f8933c --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/UserAuthMappingServiceImpl.java @@ -0,0 +1,439 @@ +package com.cool.store.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.cool.store.constants.CommonConstants; +import com.cool.store.dao.EnterpriseUserDAO; +import com.cool.store.dao.RegionAreaConfigDao; +import com.cool.store.entity.*; +import com.cool.store.enums.*; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.RegionMapper; +import com.cool.store.mapper.SysRoleMapper; +import com.cool.store.mapper.UserAuthMappingMapper; +import com.cool.store.service.UserAuthMappingService; +import com.cool.store.utils.RedisConstantUtil; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.poi.constant.Constants; +import com.cool.store.vo.SysRoleVO; +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.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +/** + * describe: + * + * @author wxp + * @date 2020/11/11 + */ +@Service +@Slf4j +public class UserAuthMappingServiceImpl implements UserAuthMappingService { + + @Resource + private UserAuthMappingMapper userAuthMappingMapper; + + @Resource + private RegionAreaConfigDao regionAreaConfigDao; + + @Resource + private SysRoleMapper sysRoleMapper; + + @Resource + private RegionMapper regionMapper; + + @Resource + private EnterpriseUserDAO enterpriseUserDAO; + + @Resource + private RedisUtilPool redisUtilPool; + + @Autowired + private RedisConstantUtil redisConstantUtil; + + @Value("${spring.profiles.active}") + private String active; + + @Override + public List listUserAuthMappingByUserId(String userId) { + if (StringUtils.isBlank(userId)) { + return Lists.newArrayList(); + } + return userAuthMappingMapper.listUserAuthMappingByUserId(userId); + } + + @Override + public List getAuthRegionIdAndSubRegionIdByUserId(String userId) { + List userAuthMapping = listUserAuthMappingByUserId(userId); + if (CollectionUtils.isEmpty(userAuthMapping)) { + return Lists.newArrayList(); + } + List regionIds = userAuthMapping.stream().map(UserAuthMappingDO::getMappingId).collect(Collectors.toList()); + List subRegionIds = regionMapper.getSubRegionIdsByRegionIds(regionIds); + if (CollectionUtils.isNotEmpty(subRegionIds)) { + regionIds.addAll(subRegionIds); + } + return regionIds; + } + + @Override + public List getAuthStoreIdAndSubRegionIdByUserId(String userId) { + List userAuthMapping = listUserAuthMappingByUserId(userId); + if (CollectionUtils.isEmpty(userAuthMapping)) { + return Lists.newArrayList(); + } + List regionIds = userAuthMapping.stream().map(UserAuthMappingDO::getMappingId).collect(Collectors.toList()); + List subRegionIds = regionMapper.getStoreIdsByRegionIds(regionIds); + if (CollectionUtils.isNotEmpty(subRegionIds)) { + regionIds.addAll(subRegionIds); + } + return regionIds; + } + + /** + * 提供 根据职位 意向区域 查 对应人的接口 同时返回人名字 + * + * @param userRoleEnum + * @param wantShopAreaId + * @return + */ + @Override + public EnterpriseUserDO getUserByRoleEnumAndWantShopAreaId(UserRoleEnum userRoleEnum, Long wantShopAreaId) { + log.info("getUserByRoleEnumAndAreaId:{},wantShopAreaId:{}", userRoleEnum, wantShopAreaId); + if (Objects.isNull(userRoleEnum) || Objects.isNull(wantShopAreaId)) { + return null; + } + String investmentManagerKey = redisConstantUtil.getInvestmentManagerKey(wantShopAreaId, userRoleEnum.getCode()); + String suitableUserId = redisUtilPool.rpopStr(investmentManagerKey); + if (StringUtils.isNotBlank(suitableUserId)) { + EnterpriseUserDO userDO = enterpriseUserDAO.getUserInfoById(suitableUserId); + return userDO; + } + Long warRegionId = regionAreaConfigDao.getByWantShopAreaId(wantShopAreaId); + if (warRegionId == null) { + return fillDefaultUser(userRoleEnum); + } + // 查找有战区权限的人 + List authWarRegionUserIdList = authWarRegionUser(warRegionId); + if (CollectionUtils.isEmpty(authWarRegionUserIdList)) { + return fillDefaultUser(userRoleEnum); + } + Long roleId = userRoleEnum.getCode(); + List hasRoleUserIdList = sysRoleMapper.getPositionUserIds(Collections.singletonList(String.valueOf(roleId))); + if (CollectionUtils.isEmpty(hasRoleUserIdList)) { + return fillDefaultUser(userRoleEnum); + } + authWarRegionUserIdList.retainAll(hasRoleUserIdList); + if (CollectionUtils.isEmpty(authWarRegionUserIdList)) { + return fillDefaultUser(userRoleEnum); + } + authWarRegionUserIdList = authWarRegionUserIdList.stream() + .sorted((a, b) -> b.compareTo(a)) + .collect(Collectors.toList()); + redisUtilPool.listPushTail(investmentManagerKey, authWarRegionUserIdList.toArray(new String[authWarRegionUserIdList.size()])); + suitableUserId = redisUtilPool.rpopStr(investmentManagerKey); + EnterpriseUserDO userDO = enterpriseUserDAO.getUserInfoById(suitableUserId); + return userDO; + } + + /** + * 获取有区域权限和职位 的人 + * + * @param userRoleEnum + * @param regionId + * @return + */ + @Override + public EnterpriseUserDO getUserByRoleEnumAndRegionId(UserRoleEnum userRoleEnum, Long regionId) { + // 查找有区域权限的人 + List authRegionUserIdList = authWarRegionUser(regionId); + if (CollectionUtils.isEmpty(authRegionUserIdList)) { + return null; + } + Long roleId = userRoleEnum.getCode(); + List hasRoleUserIdList = sysRoleMapper.getPositionUserIds(Collections.singletonList(String.valueOf(roleId))); + if (CollectionUtils.isEmpty(hasRoleUserIdList)) { + return null; + } + authRegionUserIdList.retainAll(hasRoleUserIdList); + if (CollectionUtils.isEmpty(authRegionUserIdList)) { + return null; + } + if (CollectionUtils.isNotEmpty(authRegionUserIdList)) { + EnterpriseUserDO userDO = enterpriseUserDAO.getUserInfoById(authRegionUserIdList.get(0)); + return userDO; + } + return null; + } + + @Override + public List getUserByRoleEnumAndRegionIdList(UserRoleEnum userRoleEnum, Long regionId) { + // 查找有区域权限的人 + List authRegionUserIdList = authWarRegionUser(regionId); + if (CollectionUtils.isEmpty(authRegionUserIdList)) { + return null; + } + Long roleId = userRoleEnum.getCode(); + List hasRoleUserIdList = sysRoleMapper.getPositionUserIds(Collections.singletonList(String.valueOf(roleId))); + if (CollectionUtils.isEmpty(hasRoleUserIdList)) { + return null; + } + authRegionUserIdList.retainAll(hasRoleUserIdList); + if (CollectionUtils.isEmpty(authRegionUserIdList)) { + return null; + } + if (CollectionUtils.isNotEmpty(authRegionUserIdList)) { + return enterpriseUserDAO.getUserInfoByUserIds(authRegionUserIdList); + + } + return null; + } + + private EnterpriseUserDO fillDefaultUser(UserRoleEnum userRoleEnum) { + String defaultJobnumber = getDefaultJobnumber(userRoleEnum); + // 如果找不到招商专员,则分配给默认的招商经理 + if (UserRoleEnum.INVESTMENT_COMMISSIONER.equals(userRoleEnum)) { + EnterpriseUserDO defaultUser = enterpriseUserDAO.getUserInfoByJobnumber(defaultJobnumber); + if (defaultUser == null) { + defaultUser = enterpriseUserDAO.getUserInfoById(defaultJobnumber); + } + return defaultUser; + } else if (UserRoleEnum.SELECT_SITE_COMMISSIONER.equals(userRoleEnum)) { + // 如果找不到选址专员,则分配给默认的选址经理 + EnterpriseUserDO defaultUser = enterpriseUserDAO.getUserInfoByJobnumber(defaultJobnumber); + if (defaultUser == null) { + defaultUser = enterpriseUserDAO.getUserInfoById(defaultJobnumber); + } + return defaultUser; + } + return null; + } + + @Override + public Map> getUserIdByRoleIdAndRegionId(List roleIds, Long regionId) { + if (CollectionUtils.isEmpty(roleIds) || Objects.isNull(regionId)) { + return Maps.newHashMap(); + } + RegionDO regionDO = regionMapper.getByRegionId(regionId); + if (regionDO == null) { + throw new ServiceException(ErrorCodeEnum.REGION_NOT_EXIST); + } + // 查找有区域权限的人 + List authRegionUserIdList = authWarRegionUser(regionId); + if (CollectionUtils.isEmpty(authRegionUserIdList)) { + return Maps.newHashMap(); + } + List roleIdList = roleIds.stream().map(a -> Long.valueOf(a)).collect(Collectors.toList()); + List enterpriseUserRoleList = sysRoleMapper.getUserIdListByRoleIdList(roleIdList); + enterpriseUserRoleList = ListUtils.emptyIfNull(enterpriseUserRoleList).stream().filter(o -> authRegionUserIdList.contains(o.getUserId())).collect(Collectors.toList()); + Map> enterpriseUserRoleMap = ListUtils.emptyIfNull(enterpriseUserRoleList).stream().collect(Collectors.groupingBy(EnterpriseUserRole::getRoleId, Collectors.mapping(k -> k.getUserId(), Collectors.toList()))); + return enterpriseUserRoleMap; + } + + /** + * 根据 人 查 这个人管辖区域 对应的意向区域省市code 团队线索 + * + * @param userId + * @return + */ + @Override + public List listWantShopAreaIdByUserId(String userId) { + //如果在缓存中存在,从缓存中去取 + String userWantAreaListKey = redisConstantUtil.getUserWantAreaListKey(userId); + List userWantAreaList = redisUtilPool.listGetAll(userWantAreaListKey); + if (CollectionUtils.isNotEmpty(userWantAreaList)) { + List authRegionIdListFromCache = userWantAreaList.stream().map(regionId -> Long.valueOf(regionId)).collect(Collectors.toList()); + return authRegionIdListFromCache; + } + List userAuthList = this.listUserAuthMappingByUserId(userId); + List authRegionIds = ListUtils.emptyIfNull(userAuthList) + .stream().map(UserAuthMappingDO::getMappingId) + .collect(Collectors.toList()); + List authRegionIdList = ListUtils.emptyIfNull(authRegionIds).stream().map(regionId -> Long.valueOf(regionId)).collect(Collectors.toList()); + List regionAreaConfigDOList = regionAreaConfigDao.listAreaByRegionIdList(authRegionIdList); + List wantShopAreaIdList = ListUtils.emptyIfNull(regionAreaConfigDOList) + .stream().map(RegionAreaConfigDO::getWantShopAreaId) + .collect(Collectors.toList()); + List wantShopAreaIdStrList = wantShopAreaIdList.stream().map(areaId -> String.valueOf(areaId)).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(wantShopAreaIdStrList)) { + redisUtilPool.listPushTail(userWantAreaListKey, wantShopAreaIdStrList.toArray(new String[wantShopAreaIdList.size()])); + redisUtilPool.expire(userWantAreaListKey, 5 * 60); + } + return wantShopAreaIdList; + } + + @Override + public String getShopManagerUserId() { + Boolean isOnline = active.equals(CommonConstants.HD_ENV) || active.equals(CommonConstants.ONLINE_ENV); + return isOnline ? CommonConstants.DEAULT_SHOP_MANAGER_USER_ID_ONLINE : CommonConstants.DEAULT_SHOP_MANAGER_USER_ID_TEST; + } + + // 查找有战区权限的人 + public List authWarRegionUser(Long warRegionId) { + List result = new ArrayList<>(); + if (Objects.isNull(warRegionId)) { + return result; + } + RegionDO regionDO = regionMapper.getByRegionId(warRegionId); + if (regionDO == null) { + throw new ServiceException(ErrorCodeEnum.REGION_NOT_EXIST); + } + //将拥有管理员角色、角色属性为全企业数据的人查询出来 + List roleUserByRoleId = sysRoleMapper.getRoleUserByRoleEnum(Role.MASTER.getRoleEnum(), null); + List roleUserByRoleAuth = sysRoleMapper.getRoleUserByRoleAuth(AuthRoleEnum.ALL.getCode(), null); + //组合出拥有所有门店信息的人 + List allWarRegionUserIdList = getAllWarRegionAuthUserIdList(roleUserByRoleId, roleUserByRoleAuth); + //查询出有门店权限配置的的人员 + // 1.将门店区域切分出门店所属于的区域ID + // 2.将配置了区域的人 查询出来 + List fullAreaIdList = StrUtil.splitTrim(regionDO.getRegionPath(), "/"); + List lastAreaIdList = Collections.singletonList(String.valueOf(regionDO.getId())); + //除不包含子区域的可视化范围的区域配置。 + List regionUserAuthMappingList = + userAuthMappingMapper.listUserAuthMappingByAuth(UserAuthMappingTypeEnum.REGION.getCode(), fullAreaIdList, null, AuthRoleEnum.NOT_INCLUDE_SUBORDINATE.getCode()); + //不包含子区域的的直属连接门店的区域下的配置(会重复一些选择了上面数据) + List notIncludeRegionUserAuthMappingList = + userAuthMappingMapper.listUserAuthMappingByAuth(UserAuthMappingTypeEnum.REGION.getCode(), lastAreaIdList, null, null); + List authWarRegionUserIdList = mapAuthStoreUserDTO(regionUserAuthMappingList, allWarRegionUserIdList, notIncludeRegionUserAuthMappingList); + return authWarRegionUserIdList; + } + + + private List getAllWarRegionAuthUserIdList(List roleUserByRoleId, List roleUserByRoleAuth) { + List allUserIdList = new ArrayList<>(); + List masterUserList = ListUtils.emptyIfNull(roleUserByRoleId).stream() + .map(SysRoleVO::getEnterpriseDOs) + .flatMap(Collection::stream) + .map(EnterpriseUserDO::getUserId) + .collect(Collectors.toList()); + List roleAllUserList = ListUtils.emptyIfNull(roleUserByRoleAuth).stream() + .map(SysRoleVO::getEnterpriseDOs) + .flatMap(Collection::stream) + .map(EnterpriseUserDO::getUserId) + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(masterUserList)) { + allUserIdList.addAll(masterUserList); + } + if (CollectionUtils.isNotEmpty(roleAllUserList)) { + allUserIdList.addAll(roleAllUserList); + } + return ListUtils.emptyIfNull(allUserIdList) + .stream() + .distinct() + .collect(Collectors.toList()); + + } + + + private List mapAuthStoreUserDTO( + List regionUserAuthMappingList, + List allWarRegionUserIdList, + List notIncludeRegionUserAuthMappingList) { + //组装全部的人员信息 + List authUserIdList = new ArrayList<>(); + //组装拥有所有门店信息的人 + if (CollectionUtils.isNotEmpty(allWarRegionUserIdList)) { + authUserIdList.addAll(allWarRegionUserIdList); + } + //组装配置了区域权限的人(除了不包含子区域可视化范围) + List regionUserIdList = ListUtils.emptyIfNull(regionUserAuthMappingList).stream() + .map(UserAuthMappingDO::getUserId) + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(regionUserIdList)) { + authUserIdList.addAll(regionUserIdList); + } + //组装配置了区域权限的人(不包含子区域可视化范围) + List notIncludeRegionUserIdList = ListUtils.emptyIfNull(notIncludeRegionUserAuthMappingList).stream() + .map(UserAuthMappingDO::getUserId) + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(notIncludeRegionUserIdList)) { + authUserIdList.addAll(notIncludeRegionUserIdList); + } + //去除重复数据 + List distinctUserIdList = ListUtils.emptyIfNull(authUserIdList).stream() + .distinct() + .collect(Collectors.toList()); + return distinctUserIdList; + } + + private String getDefaultJobnumber(UserRoleEnum userRoleEnum) { + Boolean isOnline = active.equals(CommonConstants.HD_ENV) || active.equals(CommonConstants.ONLINE_ENV); + // 如果找不到招商专员,则分配给默认的招商经理 + if (UserRoleEnum.INVESTMENT_COMMISSIONER.equals(userRoleEnum)) { + return isOnline ? CommonConstants.DEAULT_INVESTMENT_JOBNUMBER_ONLINE : CommonConstants.DEAULT_INVESTMENT_JOBNUMBER_TEST; + } else if (UserRoleEnum.SELECT_SITE_COMMISSIONER.equals(userRoleEnum)) { + // 如果找不到选址专员,则分配给默认的选址经理 + return isOnline ? CommonConstants.DEAULT_SELECT_SITE_MANAGER_ONLINE : CommonConstants.DEAULT_SELECT_SITE_MANAGER_TEST; + } + return null; + } + + + @Override + public EnterpriseUserDO hierarchicalSearch(UserRoleEnum supervision, Long regionId) { + //督导 + EnterpriseUserDO supervisionUser = getUserByRoleEnumAndRegionId(UserRoleEnum.SUPERVISION, regionId); + RegionDO smallRegion = regionMapper.getByRegionId(regionId); + List regionIds = extractNumbers(smallRegion.getRegionPath()); + List regionByRegionIds = regionMapper.getRegionByRegionIds(regionIds); + List fightRegions = regionByRegionIds.stream().filter(item -> Constants.TWO_STRING.equals(item.getThirdRegionType())).collect(Collectors.toList()); + List bigRegions = regionByRegionIds.stream().filter(item -> Constants.ONE_STRING.equals(item.getThirdRegionType())).collect(Collectors.toList()); + RegionDO fightRegion = new RegionDO(); + RegionDO bigRegion = new RegionDO(); + if (CollectionUtils.isNotEmpty(fightRegions)){ + fightRegion = fightRegions.get(0); + } + if (CollectionUtils.isNotEmpty(bigRegions)){ + bigRegion = bigRegions.get(0); + } + try { + if (Objects.isNull(supervisionUser)){ + //战区经理 + EnterpriseUserDO theaterManager = getUserByRoleEnumAndRegionId(UserRoleEnum.THEATER_MANAGER, fightRegion.getId()); + if (Objects.isNull(theaterManager)){ + //大区总 + EnterpriseUserDO regionManager = getUserByRoleEnumAndRegionId(UserRoleEnum.REGION_MANAGER, bigRegion.getId()); + if (Objects.isNull(regionManager)){ + EnterpriseUserDO userInfoByJobnumber = enterpriseUserDAO.getUserInfoByJobnumber(Constants.WANG_LEI_JOB_NUMBER); + if (Objects.isNull(userInfoByJobnumber)){ + throw new ServiceException("找不到督导"); + }else { + return userInfoByJobnumber; + } + } + } + return theaterManager; + } + }catch (Exception e){ + log.error("hierarchicalSearch errorMessage:{}",e.getMessage()); + throw new ServiceException(ErrorCodeEnum.UNKNOWN); + } + + return supervisionUser; + } + + private List extractNumbers(String regionPath) { + List regionIds = new ArrayList<>(); + Pattern pattern = Pattern.compile("\\d+"); + Matcher matcher = pattern.matcher(regionPath); + + while (matcher.find()) { + regionIds.add(String.valueOf(matcher.group())); + } + + return regionIds; + } + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/VodServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/VodServiceImpl.java new file mode 100644 index 000000000..37576d4b3 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/VodServiceImpl.java @@ -0,0 +1,199 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; +import com.cool.store.constants.RedisConstant; +import com.cool.store.dao.AssessmentDataDAO; +import com.cool.store.dto.SmallVideoDTO; +import com.cool.store.dto.SmallVideoInfoDTO; +import com.cool.store.entity.AssessmentDataDO; +import com.cool.store.enums.video.ResourceStatusEnum; +import com.cool.store.enums.video.UploadTypeEnum; +import com.cool.store.service.VodService; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.vod.CallbackRequest; +import com.cool.store.utils.vod.CallbackStreamInfo; +import com.cool.store.utils.vod.EventType; +import com.cool.store.utils.vod.SmallVideoParam; +import com.google.common.io.Files; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +/** + * @author byd + * @date 2024-05-07 19:28 + */ +@Slf4j +@Service +public class VodServiceImpl implements VodService { + + @Resource + private RedisUtilPool redisUtilPool; + + @Resource + private AssessmentDataDAO assessmentDataDAO; + + public static final Integer EXPIRE_TIME = 3600 * 72; + + + @Override + public void callback(CallbackRequest request) { + log.info("CallbackRequest:{}", JSONObject.toJSONString(request)); + //未完成转码的视频 + String videoId = request.getVideoId(); + + String eventType = request.getEventType(); + String newVideoInfo = ""; + String callbackCache = redisUtilPool.getString(RedisConstant.VIDEO_CALLBACK_CACHE + videoId); + SmallVideoDTO smallVideoDTO; + if (StringUtils.isNotBlank(callbackCache)) { + smallVideoDTO = JSONObject.parseObject(callbackCache, SmallVideoDTO.class); + } else { + smallVideoDTO = new SmallVideoDTO(); + } + log.info("smallVideoDTO:{}", JSONObject.toJSONString(smallVideoDTO)); + smallVideoDTO.setSize(request.getSize()); + smallVideoDTO.setVideoId(videoId); + switch (eventType) { + //视频上传完成 + case EventType.FileUploadComplete: + smallVideoDTO.setStatus(ResourceStatusEnum.TRANSCODING.getValue()); + smallVideoDTO.setVideoUrlBefore(request.getFileUrl()); + log.info("视频原始地址:{}", request.getFileUrl()); + //mp4不转码处理 + if (Files.getFileExtension(request.getFileUrl()).equalsIgnoreCase(CommonConstants.TRANSCODE_VIDEO)) { + if (CommonConstants.SUCCESS_STR.equalsIgnoreCase(request.getStatus())) { + smallVideoDTO.setVideoUrl(request.getFileUrl()); + } else { + smallVideoDTO.setStatus(ResourceStatusEnum.TRANSCODE_FAILED.getValue()); + } + } + smallVideoDTO.setUploadStatus(true); + newVideoInfo = JSONObject.toJSONString(smallVideoDTO); + //过期时间为一周 + redisUtilPool.setString(RedisConstant.VIDEO_CALLBACK_CACHE + videoId, newVideoInfo, EXPIRE_TIME); + break; + //视频截图完成 + case EventType.SnapshotComplete: + // 视频截图完成,且课件状态在转码完成之前时,更新状态为截图完成 + if (smallVideoDTO.getStatus() == null || smallVideoDTO.getStatus() < ResourceStatusEnum.TRANSCODE_FINISH.getValue()) { + smallVideoDTO.setStatus(ResourceStatusEnum.SCREENSHOT_FINISHED.getValue()); + } + //视频封面 + smallVideoDTO.setVideoSnapshot(request.getCoverUrl()); + + //如果上传的就是mp4,就不进行转码,截图完成就把状态改为转码完成 + if (StringUtils.isNotBlank(smallVideoDTO.getVideoUrlBefore()) + && Files.getFileExtension(smallVideoDTO.getVideoUrlBefore()).equalsIgnoreCase(CommonConstants.TRANSCODE_VIDEO) + && !smallVideoDTO.getStatus().equals(ResourceStatusEnum.TRANSCODE_FAILED.getValue())) { + + smallVideoDTO.setStatus(ResourceStatusEnum.TRANSCODE_FINISH.getValue()); + smallVideoDTO.setTransCodeStatus(true); + } + smallVideoDTO.setSnapShotStatus(true); + newVideoInfo = JSONObject.toJSONString(smallVideoDTO); + + //过期时间为一周 + redisUtilPool.setString(RedisConstant.VIDEO_CALLBACK_CACHE + videoId, newVideoInfo, EXPIRE_TIME); + break; + //视频全部清晰度转码完成 + case EventType.TranscodeComplete: + if (CommonConstants.SUCCESS_STR.equalsIgnoreCase(request.getStatus())) { + smallVideoDTO.setTransCodeStatus(true); + smallVideoDTO.setStatus(ResourceStatusEnum.TRANSCODE_FINISH.getValue()); + List streamInfoList = request.getStreamInfos(); + for (CallbackStreamInfo streamInfo : streamInfoList) { + log.info("VodService callback playInfo.getFormat:{}", streamInfo.getFormat()); + if (Objects.nonNull(smallVideoDTO.getStatus()) && smallVideoDTO.getStatus().intValue() != ResourceStatusEnum.TRANSCODE_FAILED.getValue()) { + smallVideoDTO.setVideoUrl(streamInfo.getFileUrl()); + } + } + } else { + smallVideoDTO.setStatus(ResourceStatusEnum.TRANSCODE_FAILED.getValue()); + } + + log.info("视频转码完成,videoId:{}", videoId); + newVideoInfo = JSONObject.toJSONString(smallVideoDTO); + //过期时间为一周 + redisUtilPool.setString(RedisConstant.VIDEO_CALLBACK_CACHE + videoId, newVideoInfo, EXPIRE_TIME); + break; + default: + } + log.info("videoId:{},转码状态:{}", videoId, smallVideoDTO.getStatus()); + //未完成转码处理 + notCompleteCacheHandle(smallVideoDTO, videoId); + } + + /** + * 如果前端提交的时候,视频还没有转码成功,会把videoId存入缓存,回调的时候再进行处理 + * + * @param smallVideoDTO + * @param videoId + * @return void + * @author chenyupeng + * @date 2021/10/14 + */ + public void notCompleteCacheHandle(SmallVideoDTO smallVideoDTO, String videoId) { + log.info("videoId:{}, smallVideoDTO:{}", videoId, JSONObject.toJSONString(smallVideoDTO)); + //回调事件都完成才入库 + if (!(smallVideoDTO.isUploadStatus() && smallVideoDTO.isSnapShotStatus() && smallVideoDTO.isTransCodeStatus())) { + log.info("回调事件都完成才入库videoId:{}", videoId); + return; + } + String notCompleteCache = redisUtilPool.hashGet(RedisConstant.VIDEO_NOT_COMPLETE_CACHE, videoId); + log.info("notCompleteCache:{}", notCompleteCache); + if (StringUtils.isNotBlank(notCompleteCache)) { + if (StringUtils.isNotBlank(smallVideoDTO.getVideoUrl())) { + smallVideoDTO.setVideoUrl(smallVideoDTO.getVideoUrl().replace("http://", "https://")); + } + + if (StringUtils.isNotBlank(smallVideoDTO.getVideoUrlBefore())) { + smallVideoDTO.setVideoUrlBefore(smallVideoDTO.getVideoUrlBefore().replace("http://", "https://")); + } + SmallVideoParam smallVideoParam = JSONObject.parseObject(notCompleteCache, SmallVideoParam.class); + if (UploadTypeEnum.ASSESSMENT_DATA_CONTENT.getValue().equals(smallVideoParam.getUploadType())) { + //检查项提交 + dealVideo(smallVideoDTO, smallVideoParam); + //保存完删除缓存 + redisUtilPool.hashDel(RedisConstant.VIDEO_NOT_COMPLETE_CACHE, videoId); + } + } + } + + public void dealVideo(SmallVideoDTO smallVideoDTO, SmallVideoParam smallVideoParam) { + + AssessmentDataDO assessmentDataDO = assessmentDataDAO.selectByPrimaryKey(smallVideoParam.getBusinessId()); + + log.info("视频信息,checkVideo:{}", assessmentDataDO.getVideo()); + assessmentDataDO.setVideo(transSmallVideoDTO(assessmentDataDO.getVideo(), smallVideoDTO)); + assessmentDataDAO.updateByPrimaryKeySelective(assessmentDataDO); + } + + public static String transSmallVideoDTO(String videoInfo, SmallVideoDTO smallVideoDto) { + + log.info("transSmallVideoDTO,videoInfo:{},smallVideoDto:{}", videoInfo, smallVideoDto.toString()); + SmallVideoInfoDTO smallVideoInfoDTO = JSONObject.parseObject(videoInfo, SmallVideoInfoDTO.class); + if (smallVideoInfoDTO == null) { + smallVideoInfoDTO = new SmallVideoInfoDTO(); + } + if (CollectionUtils.isEmpty(smallVideoInfoDTO.getVideoList())) { + smallVideoInfoDTO.setVideoList(Collections.singletonList(smallVideoDto)); + return JSONObject.toJSONString(smallVideoInfoDTO); + } + for (SmallVideoDTO smallVideo : smallVideoInfoDTO.getVideoList()) { + if (smallVideo.getVideoId() == null || StringUtils.equals(smallVideo.getVideoId(), smallVideoDto.getVideoId())) { + BeanUtils.copyProperties(smallVideoDto, smallVideo); + } + } + return JSONObject.toJSONString(smallVideoInfoDTO); + } +} + diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/WechatMiniAppServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/WechatMiniAppServiceImpl.java new file mode 100644 index 000000000..dd4a6809c --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/WechatMiniAppServiceImpl.java @@ -0,0 +1,260 @@ +package com.cool.store.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; +import com.cool.store.dao.*; +import com.cool.store.dto.wx.*; +import com.cool.store.entity.*; +import com.cool.store.enums.*; +import com.cool.store.exception.ServiceException; +import com.cool.store.http.WechatRest; +import com.cool.store.mapper.HyPartnerUserChannelMapper; +import com.cool.store.request.MobileUpdateRequest; +import com.cool.store.service.WechatMiniAppService; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.UUIDUtils; +import com.cool.store.vo.PartnerUserInfoVO; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.MessageFormat; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: WechatMiniAppServiceImpl + * @Description: + * @date 2023-05-29 14:29 + */ +@Slf4j +@Service +public class WechatMiniAppServiceImpl implements WechatMiniAppService { + + @Resource + private RedisUtilPool redisUtilPool; + @Resource + private WechatRest wechatRest; + @Resource + private HyPartnerUserInfoDAO hyPartnerUserInfoDAO; + @Autowired + private HyPartnerUserChannelMapper hyPartnerUserChannelMapper; + @Resource + private LineInfoDAO lineInfoDAO; + @Resource + HyOpenAreaInfoDAO hyOpenAreaInfoDAO; + @Value("${weixin.appId}") + private String wxAppId; + @Value("${weixin.appSecret}") + private String wxAppSecret; + @Value("${fixMobileOpenid}") + private String fixMobileOpenid; + @Value("${exhibition.channel.id}") + private Integer exhibition; + @Value("${recommended.channel.id}") + private Integer recommended; + + @Override + public PartnerUserInfoVO miniProgramLogin(MiniProgramLoginDTO param) { + log.info("miniProgramLogin #param {}", JSONObject.toJSONString(param)); + PartnerUserInfoVO userInfoVO = new PartnerUserInfoVO(); + String jsCode = param.getJsCode(); + String lockKey = "codeSession:" + wxAppId + CommonConstants.MOSAICS + jsCode; + boolean lock = redisUtilPool.lock(lockKey); + if (!lock) { + throw new ServiceException(ErrorCodeEnum.OPERATION_OVER_TIME); + } + CodeSessionDTO codeSession = wechatRest.miniProgramJsCodeSession(wxAppId, wxAppSecret, jsCode); + String openid = codeSession.getOpenid(); + String sessionCacheKey = MessageFormat.format(CommonConstants.MINI_PROGRAM_SESSION_KEY, wxAppId, openid); + redisUtilPool.setString(sessionCacheKey, codeSession.getSessionKey(), CommonConstants.THREE_DAY_SECONDS); + String unionId = codeSession.getUnionId(); + log.info("小程序登录:{}", unionId); + log.info("sessionKey {}", codeSession.getSessionKey()); + /* String decryptUser = AesUtil.decryptWechat(codeSession.getSessionKey(), param.getEncryptedData(), param.getIvStr()); + log.info("解密用户信息:{}", decryptUser); + MiniProgramUserVO miniProgramUser = JSON.parseObject(decryptUser, MiniProgramUserVO.class); + if (Objects.isNull(miniProgramUser)) { + throw new ServiceException(ErrorCodeEnum.GET_WECHAT_USER_INFO_FAIL); + }*/ + // 获取小程序token + String accessToken = wechatRest.getAccessToken(wxAppId, wxAppSecret); + // 获取手机号码 + PhoneInfoDTO phoneInfoDTO = wechatRest.getUserPhoneNumber(param.getMobileCode(), accessToken); + if(phoneInfoDTO != null && phoneInfoDTO.getPhoneInfo() != null && StringUtils.isNotBlank(phoneInfoDTO.getPhoneInfo().getPhoneNumber())){ + HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByOpenid(openid); + if( hyPartnerUserInfoDO != null && !hyPartnerUserInfoDO.getMobile().equals(phoneInfoDTO.getPhoneInfo().getPhoneNumber())){ + throw new ServiceException(ErrorCodeEnum.WECHAT_BIND_OTHER_MOBILE); + } + // 微信未授权过 + if(hyPartnerUserInfoDO == null){ + hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByMobile(phoneInfoDTO.getPhoneInfo().getPhoneNumber()); + if(hyPartnerUserInfoDO != null && StringUtils.isNotBlank(hyPartnerUserInfoDO.getOpenid()) && !openid.equals(hyPartnerUserInfoDO.getOpenid())){ + throw new ServiceException(ErrorCodeEnum.MOBILE_WECHAT_EXIST); + } + if(hyPartnerUserInfoDO == null){ + hyPartnerUserInfoDO = new HyPartnerUserInfoDO(); + hyPartnerUserInfoDO.setMobile(phoneInfoDTO.getPhoneInfo().getPhoneNumber()); + hyPartnerUserInfoDO.setOpenid(openid); + hyPartnerUserInfoDO.setPartnerId(UUIDUtils.get32UUID()); + Integer channelId = null; + String userChannel = param.getUserChannelEnum(); + if(StringUtils.isNotEmpty(userChannel)){ + if(UserChannelEnum.EXHIBITION.getCode().equals(userChannel)){ + channelId = exhibition; + }else if(UserChannelEnum.RECOMMENDED.getCode().equals(userChannel)){ + channelId = recommended; + }else { + if (StringUtils.isNumeric(userChannel)) { + channelId = Integer.valueOf(userChannel); + HyPartnerUserChannelDO hyPartnerUserChannelDO = hyPartnerUserChannelMapper.selectByChannelId(Long.valueOf(channelId)); + if (Objects.isNull(hyPartnerUserChannelDO)|| hyPartnerUserChannelDO.getChannelId() == null ) { + //用户渠道不存在 + throw new ServiceException(ErrorCodeEnum.USER_CHANNEL_NOT_EXISTS); + } + + } + } + } + hyPartnerUserInfoDO.setUserChannelId(channelId); + hyPartnerUserInfoDAO.insertSelective(hyPartnerUserInfoDO); + //授权的时候 新增线索 放到公海 + LineInfoDO lineInfoDO = new LineInfoDO(); + lineInfoDO.setLineStatus(LineStatusEnum.PUBLIC_SEAS.getCode()); + lineInfoDO.setWorkflowSubStage(WorkflowSubStageEnum.INTEND.getCode()); + lineInfoDO.setMobile(hyPartnerUserInfoDO.getMobile()); + lineInfoDO.setWorkflowStage(WorkflowStageEnum.INTENT.getCode()); + lineInfoDO.setWorkflowSubStageStatus(WorkflowSubStageStatusEnum.INTENT_0.getCode()); + lineInfoDO.setPartnerId(hyPartnerUserInfoDO.getPartnerId()); + lineInfoDAO.insertOrUpdate(lineInfoDO); + }else { + hyPartnerUserInfoDO.setOpenid(openid); + hyPartnerUserInfoDAO.updateByPrimaryKeySelective(hyPartnerUserInfoDO); + } + } + BeanUtil.copyProperties(hyPartnerUserInfoDO, userInfoVO); + fillLineInfo(userInfoVO, hyPartnerUserInfoDO.getPartnerId()); + } + userInfoVO.setOpenid(openid); + userInfoVO.setUnionId(unionId); + return userInfoVO; + } + + @Override + public PartnerUserInfoVO getUserInfoByJsCode(String jsCode) { + PartnerUserInfoVO userInfoVO = null; + String lockKey = "codeSession:" + wxAppId + CommonConstants.MOSAICS + jsCode; + boolean lock = redisUtilPool.lock(lockKey); + if (!lock) { + throw new ServiceException(ErrorCodeEnum.OPERATION_OVER_TIME); + } + CodeSessionDTO codeSession = wechatRest.miniProgramJsCodeSession(wxAppId, wxAppSecret, jsCode); + String openid = codeSession.getOpenid(); + String sessionCacheKey = MessageFormat.format(CommonConstants.MINI_PROGRAM_SESSION_KEY, wxAppId, openid); + redisUtilPool.setString(sessionCacheKey, codeSession.getSessionKey(), CommonConstants.THREE_DAY_SECONDS); + HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByOpenid(openid); + if(hyPartnerUserInfoDO != null){ + userInfoVO = new PartnerUserInfoVO(); + BeanUtil.copyProperties(hyPartnerUserInfoDO, userInfoVO); + fillLineInfo(userInfoVO, hyPartnerUserInfoDO.getPartnerId()); + } + return userInfoVO; + } + + + @Override + public String getUserPhoneNumber(String mobileCode) { + // 获取小程序token + String accessToken = wechatRest.getAccessToken(wxAppId, wxAppSecret); + // 获取手机号码 + PhoneInfoDTO phoneInfoDTO = wechatRest.getUserPhoneNumber(mobileCode, accessToken); + if(phoneInfoDTO != null && phoneInfoDTO.getPhoneInfo() != null && StringUtils.isNotBlank(phoneInfoDTO.getPhoneInfo().getPhoneNumber())){ + return phoneInfoDTO.getPhoneInfo().getPhoneNumber(); + } + return null; + } + + @Override + public String updateUserPhoneNumber(MobileUpdateRequest request, PartnerUserInfoVO userInfoVO) { + String newMobile = ""; + HyPartnerUserInfoDO oldUserInfo = hyPartnerUserInfoDAO.selectByMobile(userInfoVO.getMobile()); + if (oldUserInfo == null) { + throw new ServiceException(ErrorCodeEnum.PARTNER_USER_NOT_EXIST); + } + // 获取小程序token + String accessToken = wechatRest.getAccessToken(wxAppId, wxAppSecret); + // 获取手机号码 + PhoneInfoDTO phoneInfoDTO = wechatRest.getUserPhoneNumber(request.getMobileCode(), accessToken); + if(phoneInfoDTO != null && phoneInfoDTO.getPhoneInfo() != null && StringUtils.isNotBlank(phoneInfoDTO.getPhoneInfo().getPhoneNumber())){ + newMobile = phoneInfoDTO.getPhoneInfo().getPhoneNumber(); + if(newMobile.equals(oldUserInfo.getMobile())){ + return newMobile; + } + HyPartnerUserInfoDO newUserInfo = hyPartnerUserInfoDAO.selectByMobile(newMobile); + if (newUserInfo != null) { + throw new ServiceException(ErrorCodeEnum.NEW_MOBILE_HAS_EXIST); + } + oldUserInfo.setMobile(newMobile); + hyPartnerUserInfoDAO.updateByPrimaryKeySelective(oldUserInfo); + //修改意向申请信息中的手机号 + // hyPartnerBaseInfoDAO.updateByPartnerId(null, newMobile, oldUserInfo.getPartnerId()); + } + return newMobile; + } + + @Override + public PartnerUserInfoVO getUserInfo(String mobile, String openId) { + PartnerUserInfoVO userInfoVO = new PartnerUserInfoVO(); + if(fixMobileOpenid.equals(mobile)){ + userInfoVO.setMobile(mobile); + userInfoVO.setOpenid(mobile); + userInfoVO.setPartnerId(""); + return userInfoVO; + } + HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByOpenid(openId); + if(hyPartnerUserInfoDO != null){ + BeanUtil.copyProperties(hyPartnerUserInfoDO, userInfoVO); + /*if(StringUtils.isNotBlank(hyPartnerUserInfoDO.getWantShopArea())){ + HyOpenAreaInfoDO hyOpenAreaInfoDO = hyOpenAreaInfoDAO.selectById(Long.valueOf(hyPartnerUserInfoDO.getWantShopArea())); + userInfoVO.setWantShopAreaName(hyOpenAreaInfoDO.getAreaPath().replace("/", " ").trim()); + }*/ + fillLineInfo(userInfoVO, hyPartnerUserInfoDO.getPartnerId()); + } + return userInfoVO; + } + + private void fillLineInfo(PartnerUserInfoVO userInfoVO, String partnerId) { + LineInfoDO lineInfoDO = lineInfoDAO.getByPartnerId(partnerId); + if (lineInfoDO != null){ + userInfoVO.setLiveAddress(lineInfoDO.getLiveAddress()); + userInfoVO.setUsername(lineInfoDO.getUsername()); + userInfoVO.setLineId(lineInfoDO.getId()); + userInfoVO.setWorkflowStage(lineInfoDO.getWorkflowStage()); + userInfoVO.setWorkflowSubStage(lineInfoDO.getWorkflowSubStage()); + userInfoVO.setWorkflowSubStageStatus(lineInfoDO.getWorkflowSubStageStatus()); + userInfoVO.setLineStatus(lineInfoDO.getLineStatus()); + userInfoVO.setLineSource(lineInfoDO.getLineSource()); + } + } + + @Override + public String getMiniAppUrl() { + MiniAppUrlLinkReqDTO miniAppUrlLinkReqDTO = new MiniAppUrlLinkReqDTO(); + return getMiniAppUrlLink(miniAppUrlLinkReqDTO); + } + + @Override + public String getMiniAppUrlLink(MiniAppUrlLinkReqDTO miniAppUrlLinkReqDTO) { + String accessToken = wechatRest.getAccessToken(wxAppId, wxAppSecret); + MiniAppUrlLinkDTO miniAppUrlLink = wechatRest.getMiniAppUrlLink(accessToken, miniAppUrlLinkReqDTO); + if (miniAppUrlLink != null){ + return miniAppUrlLink.getUrlLink(); + } + return null; + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/WxPayServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/WxPayServiceImpl.java new file mode 100644 index 000000000..ab088f40e --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/WxPayServiceImpl.java @@ -0,0 +1,273 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.config.weixin.WxPayConfig; +import com.cool.store.dto.wx.PreOrderDTO; +import com.cool.store.service.WxPayService; +import com.cool.store.utils.HttpServletUtils; +import com.wechat.pay.java.core.RSAAutoCertificateConfig; +import com.wechat.pay.java.core.exception.HttpException; +import com.wechat.pay.java.core.exception.MalformedMessageException; +import com.wechat.pay.java.core.exception.ServiceException; +import com.wechat.pay.java.core.exception.ValidationException; +import com.wechat.pay.java.core.notification.NotificationParser; +import com.wechat.pay.java.core.notification.RequestParam; +import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension; +import com.wechat.pay.java.service.payments.jsapi.model.*; +import com.wechat.pay.java.service.payments.jsapi.model.Amount; +import com.wechat.pay.java.service.payments.model.Transaction; +import com.wechat.pay.java.service.refund.RefundService; +import com.wechat.pay.java.service.refund.model.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.math.BigDecimal; + +/** + * 微信支付相关 + * @author + * @date 2024-03-13 14:28 + */ +@Slf4j +@Service +public class WxPayServiceImpl implements WxPayService { + + // @Resource + private RSAAutoCertificateConfig rsaAutoCertificateConfig; + + @Resource + private WxPayConfig wxPayConfig; + + @Value("${weixin.appId}") + private String wxAppId; + + /** + * 微信支付 + */ + @Override + @Transactional + public PrepayWithRequestPaymentResponse jsApiOrder(PreOrderDTO order) { + log.info("微信预支付下单:{}", JSONObject.toJSONString(order)); + //请求微信支付相关配置 + PrepayWithRequestPaymentResponse response = new PrepayWithRequestPaymentResponse(); + try { + PrepayRequest request = new PrepayRequest(); + request.setAppid(wxAppId); + request.setMchid(wxPayConfig.getMerchantId()); + request.setDescription(order.getDescription()); + request.setOutTradeNo(order.getOutTradeNo()); + request.setNotifyUrl(wxPayConfig.getPayNotifyUrl()); + Amount amount = new Amount(); + amount.setTotal(order.getTotal()); + amount.setCurrency("CNY"); + request.setAmount(amount); + Payer payer = new Payer(); + payer.setOpenid(order.getWxOpenId()); + request.setPayer(payer); + log.info("请求预支付下单,请求参数:{}", JSONObject.toJSONString(request)); + // 调用预下单接口 + response = getJsapiService().prepayWithRequestPayment(request); + log.info("订单【{}】发起预支付成功,返回信息:{}", order.getOutTradeNo(), response); + } catch (HttpException e) { + // 发送HTTP请求失败 + log.error("微信下单发送HTTP请求失败,错误信息:{}", e.getHttpRequest()); + } catch (ServiceException e) { + // 服务返回状态小于200或大于等于300,例如500 + log.error("微信下单服务状态错误,错误信息:{}", e.getErrorMessage()); + } catch (MalformedMessageException e) { + // 服务返回成功,返回体类型不合法,或者解析返回体失败 + log.error("服务返回成功,返回体类型不合法,或者解析返回体失败,错误信息:{}", e.getMessage()); + } + return response; + } + + /** + * 微信回调 + * + * @param request + * @return + * @throws IOException + */ + @Transactional + @Override + public ResponseEntity payNotify(HttpServletRequest request) throws IOException { + log.info("------收到支付通知------"); + RequestParam requestParam = new RequestParam.Builder() + .serialNumber(request.getHeader("Wechatpay-Serial")) + .nonce(request.getHeader("Wechatpay-Nonce")) + .signature(request.getHeader("Wechatpay-Signature")) + .timestamp(request.getHeader("Wechatpay-Timestamp")) + .signType(request.getHeader("Wechatpay-Signature-Type")) + .body(HttpServletUtils.getRequestBody(request)) + .build(); + // 初始化 NotificationParser + NotificationParser parser = new NotificationParser(rsaAutoCertificateConfig); + // 以支付通知回调为例,验签、解密并转换成 Transaction + log.info("验签参数:{}", requestParam); + try { + // 验签、解密并转换成 Transaction(返回参数对象) + Transaction transaction = parser.parse(requestParam, Transaction.class); + log.info("验签成功!-支付回调结果:{}", JSON.toJSONString(transaction)); + // TODO 处理你的业务逻辑 + //修改订单前,建议主动请求微信查询订单是否支付成功,防止恶意post + + //修改订单信息 + // 处理成功,返回 200 OK 状态码 + return ResponseEntity.status(HttpStatus.OK).build(); + } catch (ValidationException e) { + log.error("sign verification failed", e); + log.error("微信支付回调v3java失败=" + e.getMessage(), e); + } + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + + @Override + public Transaction queryOrderByOutTradeNo(String outTradeNo) { + QueryOrderByOutTradeNoRequest request = new QueryOrderByOutTradeNoRequest(); + request.setMchid(wxPayConfig.getMerchantId()); + request.setOutTradeNo(outTradeNo); + Transaction result = getJsapiService().queryOrderByOutTradeNo(request); + if (Transaction.TradeStateEnum.SUCCESS != result.getTradeState()) { + log.info("内部订单号【{}】,微信支付订单号【{}】支付未成功", result.getOutTradeNo(), result.getTransactionId()); + } + // TODO 处理业务逻辑 + return result; + } + + @Override + public Transaction queryOrderByPaymentNo(String paymentNo) { + QueryOrderByIdRequest queryRequest = new QueryOrderByIdRequest(); + queryRequest.setMchid(wxPayConfig.getMerchantId()); + queryRequest.setTransactionId(paymentNo); + Transaction result = getJsapiService().queryOrderById(queryRequest); + if (Transaction.TradeStateEnum.SUCCESS != result.getTradeState()) { + log.info("内部订单号【{}】,微信支付订单号【{}】支付未成功", result.getOutTradeNo(), result.getTransactionId()); + } + // TODO 处理业务逻辑 + return result; + } + + /** + * 申请退款 + * @param orderID + * @param outRefundNo + * @param backAmount + */ + @Override + public void applyRefund(String orderID, String outRefundNo, BigDecimal backAmount) { + Transaction transaction = queryOrderByOutTradeNo(orderID); + CreateRequest request = new CreateRequest(); + request.setTransactionId(transaction.getTransactionId()); + request.setNotifyUrl(wxPayConfig.getBackNotifyUrl()); + request.setOutTradeNo(transaction.getOutTradeNo()); + request.setOutRefundNo(outRefundNo); + request.setReason("测试退款"); + AmountReq amountReq = new AmountReq(); + amountReq.setCurrency(transaction.getAmount().getCurrency()); + amountReq.setTotal(Long.parseLong((transaction.getAmount().getTotal().toString()))); + amountReq.setRefund((backAmount.multiply(new BigDecimal(100))).longValue()); + request.setAmount(amountReq); + getRefundService().create(request); + } + + @Override + public ResponseEntity refundNotify(HttpServletRequest request) throws IOException { + log.info("------收到退款回调通知------"); + RequestParam requestParam = new RequestParam.Builder() + .serialNumber(request.getHeader("Wechatpay-Serial")) + .nonce(request.getHeader("Wechatpay-Nonce")) + .signature(request.getHeader("Wechatpay-Signature")) + .timestamp(request.getHeader("Wechatpay-Timestamp")) + .signType(request.getHeader("Wechatpay-Signature-Type")) + .body(HttpServletUtils.getRequestBody(request)) + .build(); + // 如果已经初始化了 RSAAutoCertificateConfig,可以直接使用 config + // 初始化 NotificationParser + NotificationParser parser = new NotificationParser(rsaAutoCertificateConfig); + log.info("验签参数:{}", requestParam); + try { + // 验签、解密并转换成 Refund + Refund refund = parser.parse(requestParam, Refund.class); + log.info("验签成功!-退款回调结果:{}", JSON.toJSONString(refund)); + //记录日志信息 + Status state = refund.getStatus(); + String orderID = refund.getOutTradeNo(); + String backID = refund.getOutRefundNo(); + System.out.println("订单ID:" + orderID); + System.out.println("退款ID:" + backID); + if (state == Status.PROCESSING) { + //TODO------ + //根据自己的需求处理相应的业务逻辑,异步 + + //通知微信回调成功 + return ResponseEntity.status(HttpStatus.OK).build(); + } else if (state == Status.SUCCESS) { + //TODO------ + //根据自己的需求处理相应的业务逻辑,异步 + + //通知微信回调成功 + return ResponseEntity.status(HttpStatus.OK).build(); + } else { + System.out.println("微信回调失败,JsapiPayController.Refund:" + state.toString()); + //通知微信回调失败 + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + } catch (ValidationException e) { + log.error("sign verification failed", e); + log.error("微信支付回调v3java失败=" + e.getMessage(), e); + } + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + + /** + * 获取订单退款结果信息 + * @param outRefundNo + * @return + */ + @Override + public Refund getRefundOrderInfo(String outRefundNo) { + QueryByOutRefundNoRequest request = new QueryByOutRefundNoRequest(); + request.setOutRefundNo(outRefundNo); + // 调用request.setXxx(val)设置所需参数,具体参数可见Request定义 + // 调用接口 + return getRefundService().queryByOutRefundNo(request); + } + + /** + * 关闭微信支付 + */ + @Override + public void closePay(String outTradeNo) { + CloseOrderRequest closeRequest = new CloseOrderRequest(); + closeRequest.setMchid(wxPayConfig.getMerchantId()); + closeRequest.setOutTradeNo(outTradeNo); + getJsapiService().closeOrder(closeRequest); + } + /** + * 创建小程序支付服务 + * @return + */ + protected JsapiServiceExtension getJsapiService() { + JsapiServiceExtension jsapiServiceExtension = + new JsapiServiceExtension.Builder() + .config(rsaAutoCertificateConfig) + .signType("RSA") // 不填默认为RSA + .build(); + return jsapiServiceExtension; + } + + protected RefundService getRefundService() { + RefundService refundService = new RefundService.Builder() + .config(rsaAutoCertificateConfig) + .build(); + return refundService; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/XfsgEhrServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/XfsgEhrServiceImpl.java new file mode 100644 index 000000000..e06dd3973 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/XfsgEhrServiceImpl.java @@ -0,0 +1,111 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.dto.StaffExamInfoDTO; +import com.cool.store.dto.ehr.FranchiseeInfoDTO; +import com.cool.store.dto.ehr.StaffBaseInfoDTO; +import com.cool.store.exception.ServiceException; +import com.cool.store.mq.util.HttpRestTemplateService; +import com.cool.store.service.XfsgEhrService; +import com.cool.store.utils.SecureUtil; +import com.cool.store.utils.poi.constant.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +/** + * describe: 鲜丰水果api + * + * @author wxp + * @date 2024/04/28 + */ +@Service +@Slf4j +public class XfsgEhrServiceImpl implements XfsgEhrService { + + @Value("${xfsg.url}") + private String xfsgUrl; + + @Resource + private HttpRestTemplateService httpRestTemplateService; + + @Override + public StaffBaseInfoDTO getUserInfoByCode(String staffNumber) { + Map requestMap = new HashMap<>(); + fillSignatureInfo(requestMap); + requestMap.put("staffNumber", staffNumber); + String url = xfsgUrl + Constants.GET_USER_INFO_BY_CODE; + JSONObject result = httpRestTemplateService.getForObject(url, JSONObject.class, requestMap); + Integer code = result.getInteger("code"); + if (code != 0) { + log.info("xfsg#getUserInfoByCode,staffNumber:{},请求失败", staffNumber); + throw new ServiceException("鲜丰水果"+result.getString("msg")); + } + JSONObject data = result.getJSONObject("data"); + if (data == null) { + log.info("xfsg#getUserInfoByCode,staffNumber:{},返回值data为空", staffNumber); + return null; + } + StaffBaseInfoDTO staffBaseInfoDTO = JSON.parseObject(data.toJSONString(), StaffBaseInfoDTO.class); + return staffBaseInfoDTO; + } + + @Override + public FranchiseeInfoDTO getFranchiseeInfoByFrId(String frId) { + Map requestMap = new HashMap<>(); + fillSignatureInfo(requestMap); + requestMap.put("frId", frId); + String url = xfsgUrl + Constants.GET_FRANCHISEE_INFO_BY_CODE; + JSONObject result = httpRestTemplateService.getForObject(url, JSONObject.class, requestMap); + Integer code = result.getInteger("code"); + if (code != 0) { + log.info("xfsg#getFranchiseeInfoByFrId,frId:{},请求失败", frId); + return null; + } + JSONObject data = result.getJSONObject("data"); + if (data == null) { + log.info("xfsg#getFranchiseeInfoByFrId,frId:{},返回值data为空", frId); + return null; + } + FranchiseeInfoDTO franchiseeInfoDTO = JSON.parseObject(data.toJSONString(), FranchiseeInfoDTO.class); + return franchiseeInfoDTO; + } + + private void fillSignatureInfo(Map requestMap) { + long timestamp = System.currentTimeMillis(); + String signature = SecureUtil.getSignature(timestamp); + requestMap.put("timestamp", timestamp); + requestMap.put("signature", signature); + } + + @Override + public StaffExamInfoDTO getUserExamInfo(String staffNumber) { + Map requestMap = new HashMap<>(); + fillSignatureInfo(requestMap); + requestMap.put("staffNumber", staffNumber); + String url = xfsgUrl + Constants.GET_USER_EXAM_INFO; + try { + JSONObject result = httpRestTemplateService.getForObject(url, JSONObject.class, requestMap); + Integer code = result.getInteger("code"); + if (code != 0) { + log.info("xfsg#getUserExamInfo,staffNumber:{},请求失败", staffNumber); + return null; + } + JSONObject data = result.getJSONObject("data"); + if (data == null) { + log.info("xfsg#getUserExamInfo,staffNumber:{},返回值data为空", staffNumber); + return null; + } + return JSON.parseObject(data.toJSONString(), StaffExamInfoDTO.class); + } catch (Exception e) { + log.info("xfsg#getUserExamInfo,staffNumber:{},Exception:", staffNumber, e); + } + return null; + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/YlfServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/YlfServiceImpl.java new file mode 100644 index 000000000..2556736cc --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/YlfServiceImpl.java @@ -0,0 +1,105 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.dto.decoration.DecorationDTO; +import com.cool.store.dto.decoration.DesignRowsDTO; +import com.cool.store.dto.decoration.ProjectDTO; +import com.cool.store.dto.decoration.RowsDTO; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mq.util.HttpRestTemplateService; +import com.cool.store.service.YlfService; +import com.cool.store.utils.poi.constant.Constants; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; +import springfox.documentation.spring.web.json.Json; + +import javax.annotation.Resource; +import java.util.*; + +/** + * @Author suzhuhong + * @Date 2024/4/28 14:26 + * @Version 1.0 + */ +@Service +@Slf4j +public class YlfServiceImpl implements YlfService { + + static String url = "https://hzly.cloudcubic.net/ajaxHandle/synchronization/JCallBackSynchronizationHandler.ashx?action=app&controller=GetProjectDetails&projectid="; + + @Resource + private HttpRestTemplateService httpRestTemplateService; + + @Override + public DecorationDTO getDecoration(Long id) { + String detailUrl = String.format("%s%d", url, id); + try { + String forObject = httpRestTemplateService.getForObject(detailUrl, String.class, new HashMap<>()); + Integer status = (Integer) JSONObject.parseObject(forObject, JSONObject.class).get("status"); + if (status != 200) { + String msg = (String) JSONObject.parseObject(forObject, JSONObject.class).get("msg"); + log.info("获取云立方装修公司信息失败,id:{}", id); + throw new ServiceException(msg); + } + Object data = JSONObject.parseObject(forObject, JSONObject.class).get("data"); + if (data == null) { + return null; + } + RowsDTO rowsDTOS = JSONObject.parseObject(JSONObject.toJSONString(data), RowsDTO.class); + List list = rowsDTOS.getRows(); + if (CollectionUtils.isNotEmpty(list)) { + return list.get(0); + } + } catch (Exception e) { + throw new ServiceException(ErrorCodeEnum.YLF_ERROR,((ServiceException)e).getErrorMessage()); + } + return null; + } + + @Override + public ProjectDTO getProjectList(String storeNum) { + log.info("getProjectList param:{}", storeNum); + if (Objects.isNull(storeNum)) { + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + String url = String.format(Constants.GET_PROJECT_LIST, storeNum); + log.info("CoolStoreStartFlowServiceImpl#getOrder, url:{}", url); + try { + String jsonString = httpRestTemplateService.getForObject(url, String.class, new HashMap<>()); + JSONObject jsonObject = JSONObject.parseObject(jsonString); + Integer status = (Integer) jsonObject.get("status"); + if (status != 200) { + log.info("获取云立方装修公司信息失败,storeNum:{}", storeNum); + String msg = (String) jsonObject.get("msg"); + throw new ServiceException(msg); + } + JSONObject data = jsonObject.getJSONObject("data"); + log.info("CoolStoreStartFlowServiceImpl#getOrder,jsonObject:{}", jsonObject); + if (Objects.nonNull(data)) { + DesignRowsDTO designRowsDTO = JSONObject.parseObject(JSONObject.toJSONString(data), DesignRowsDTO.class); + List rows = designRowsDTO.getRows(); + if (CollectionUtils.isNotEmpty(rows)) { + Collections.sort(rows, new Comparator() { + @Override + public int compare(ProjectDTO p1, ProjectDTO p2) { + return Long.compare(p2.getProjectId(), p1.getProjectId()); // 降序排序 + } + }); // 降序排序 + return rows.get(0); + } + } else { + log.info("获取云立方装修公司信息失败,shopNum:{}", storeNum); + throw new ServiceException(ErrorCodeEnum.YLF_ERROR); + } + } catch (Exception e) { + log.info("调用云立方获取项目列表异常,getProjectList error:{}", e); + throw new ServiceException(ErrorCodeEnum.YLF_ERROR,((ServiceException)e).getErrorMessage()); + } + + return null; + } + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/Client.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/Client.java new file mode 100644 index 000000000..17f4aeeb4 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/Client.java @@ -0,0 +1,164 @@ +package com.cool.store.utils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; + +/** + * @author leoxie + */ +public class Client { + + private String url; + private String method = "POST"; + private HashMap header; + private String data; + private Integer timeout = 8000; + private Integer maxLength = 10000; + + private static final Logger log = LoggerFactory.getLogger(Client.class); + + public String exec() throws IOException { + + HttpURLConnection connection = null; + OutputStreamWriter out = null; + BufferedReader reader = null; + StringBuilder res = null; + String result = null; + Long optTime = 0L; + InputStream is = null; + + LocalDateTime beginTime = LocalDateTime.now(); + + URL url = new URL(getUrl()); + connection = (HttpURLConnection) url.openConnection(); + + try { + connection.setDoOutput(true); + connection.setDoInput(true); + connection.setUseCaches(false); + connection.setInstanceFollowRedirects(true); + + //设置超时时间 + connection.setConnectTimeout(getTimeout()); + connection.setReadTimeout(getTimeout()); + + // 设置请求方式 + connection.setRequestMethod(getMethod()); + // 设置发送数据的格式 + if (!getHeader().isEmpty()) { + for (Map.Entry entry : getHeader().entrySet()) { + connection.setRequestProperty(entry.getKey(), entry.getValue()); + } + } + //发起连接 + connection.connect(); + + // utf-8编码[推送提交的参数] + if (!getData().isEmpty()) { + out = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8); + out.append(getData()); + out.flush(); + out.close(); + } + + if(connection.getResponseCode() > 2000){ + is = connection.getErrorStream(); + }else{ + is = connection.getInputStream(); + } + // 读取响应 + reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8)); + String line; + res = new StringBuilder(); + while ((line = reader.readLine()) != null) { + res.append(line); + } + reader.close(); + + result = res.toString(); + return result; + + }catch (Exception e){ + throw e; + }finally { + if (connection != null){ + connection.disconnect(); + } + + if(out != null){ + out.close(); + } + + if(reader != null){ + reader.close(); + } + +// log.info("request url is : " + getUrl()); +// log.info("request params is : " + getData()); +// if(result != null && result.length() < maxLength) { +// log.info("response : " + result); +// } +// optTime = Duration.between(beginTime,LocalDateTime.now()).toMillis(); +// log.info("response time: " + optTime.toString()); + } + } + + public String getUrl() { + assert !url.isEmpty(); + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getMethod() { + assert !method.isEmpty(); + return method; + } + + public void setMethod(String method) { + this.method = method; + } + + public HashMap getHeader() { + return header; + } + + public void setHeader(HashMap header) { + this.header = header; + } + + public String getData() { + return data; + } + + /** + * 提交参数 + * + * 如果是json形式,那么就是json字符串, + * 如果是表单形式,就是name1=value1&name2=value2 的形式 + * @param data + */ + public void setData(String data) { + this.data = data; + } + + public Integer getTimeout() { + return timeout; + } + + public void setTimeout(Integer timeout) { + this.timeout = timeout; + } + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/Get.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/Get.java new file mode 100644 index 000000000..c1a6a810f --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/Get.java @@ -0,0 +1,104 @@ +package com.cool.store.utils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author leoxie + */ +public class Get { + + private static final Logger log = LoggerFactory.getLogger(Get.class); + + private static final Integer connectTimeout = 1000; + private static final Integer timeout = 5000; + + public static String send(String url, String param) throws IOException { + return send(url,param,true); + } + + /** + * 向指定URL发送GET方法的请求 + * + * @param url 发送请求的URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return URL 所代表远程资源的响应结果 + */ + public static String send(String url, String param,boolean hasLog) throws IOException { + return send(url, param, hasLog, null); + } + + public static String send(String url, String param, boolean hasLog, HashMap headers) throws IOException { + StringBuilder result = new StringBuilder(); + BufferedReader reader = null; + HttpURLConnection connection = null; + + try { + String urlNameString = url + (param.isEmpty()?"":"?" + param); + + log.info("url:"+url); + log.info("param:"+param); + + URL realUrl = new URL(urlNameString); + // 打开和URL之间的连接 + connection = (HttpURLConnection)realUrl.openConnection(); + // 设置通用的请求属性 + connection.setRequestProperty("accept", "*/*"); + connection.setRequestProperty("connection", "Keep-Alive"); + connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + + //添加头部信息 + if(headers != null && !headers.isEmpty()){ + for (Map.Entry entry:headers.entrySet()) { + connection.setRequestProperty(entry.getKey(),entry.getValue()); + } + } + + connection.setConnectTimeout(connectTimeout); + connection.setReadTimeout(timeout); + // 建立实际的连接 + connection.connect(); + + // 获取所有响应头字段 + Map> responseHeader = connection.getHeaderFields(); + // 遍历所有的响应头字段 + if(hasLog) { + log.info("响应头"); + for (String key : responseHeader.keySet()) { + log.info(key + "--->" + responseHeader.get(key)); + } + } + + // 定义 BufferedReader输入流来读取URL的响应 + reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String line; + while ((line = reader.readLine()) != null) { + result.append(line); + } + + if(hasLog) { + log.info("响应结果:" + result.toString()); + } + + return result.toString(); + } finally { + if (connection != null){ + connection.disconnect(); + } + + if (reader != null) { + reader.close(); + } + } + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/HttpServletUtils.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/HttpServletUtils.java new file mode 100644 index 000000000..36cc3d7d6 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/HttpServletUtils.java @@ -0,0 +1,40 @@ +package com.cool.store.utils; + +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +/** + * @author + * @date 2023/07/26 上午9:17 + **/ +public class HttpServletUtils { + /** + * 获取请求体 + * + * @param request + * @return + * @throws IOException + */ + public static String getRequestBody(HttpServletRequest request) throws IOException { + ServletInputStream stream = null; + BufferedReader reader = null; + StringBuffer sb = new StringBuffer(); + try { + stream = request.getInputStream(); + // 获取响应 + reader = new BufferedReader(new InputStreamReader(stream)); + String line; + while ((line = reader.readLine()) != null) { + sb.append(line); + } + } catch (IOException e) { + throw new IOException("读取返回支付接口数据流出现异常!"); + } finally { + reader.close(); + } + return sb.toString(); + } +} \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/MapUtil.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/MapUtil.java new file mode 100644 index 000000000..d4fc55063 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/MapUtil.java @@ -0,0 +1,123 @@ +package com.cool.store.utils; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class MapUtil { + public static void setMapValue(Map hashMap, String name, T value) { + if (value == null) { + return; + } + hashMap.put(name, value); + } + + public static void setMapObjectValue(Map hashMap, T obj) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + if (obj == null) { + return; + } + Field[] fields = obj.getClass().getDeclaredFields(); + for (Field field : fields) { + String name = field.getName(); + String uName = name.substring(0, 1).toUpperCase() + name.substring(1); + + Method m = obj.getClass().getMethod("get" + uName); + Object value = m.invoke(obj); + if (value == null) { + continue; + } + // 基础类型 + if (isBaseType(value)) { + setMapValue(hashMap, name, value); + } else if (value instanceof List) { + if (((List) value).size() > 0) { + setMapObjectValue(hashMap, ((List) value).get(0)); + } + } else { + setMapObjectValue(hashMap, value); + } + } + + } + + public static boolean isBaseType(Object object) { + Class className = object.getClass(); + return className.equals(Integer.class) || + className.equals(Byte.class) || + className.equals(Long.class) || + className.equals(Double.class) || + className.equals(Float.class) || + className.equals(Character.class) || + className.equals(Short.class) || + className.equals(Boolean.class) || + className.equals(String.class); + } + + /** + * 实体类对象转URL参 + * @param t 实体类对象 + * @param callSuper 是否转换父类成员 + * @param 实体类泛型 + * @return a=1&b=2 + */ + public static String entityToUrlParam(T t, boolean callSuper){ + // URL 参数存储器 + StringBuffer urlParam = new StringBuffer(); + //扩展转换父类成员功能 + entitySuperclassToUrlParam(t, t.getClass(),callSuper,urlParam); + if(urlParam.length()>0){ + //去除最后一个&字符 + urlParam.deleteCharAt(urlParam.length() - 1); + } + return urlParam.toString(); + } + + public static String entityToUrlParam(T t) { + if (t == null) { + return null; + } + return entityToUrlParam(t, true); + } + + /** + * 实体类对象转URL参 + * @param t 实体类对象 + * @param clazz 实体类类型 + * @param callSuper 是否转换父类成员 + * @param urlParam URL 参数存储器 + * @param 实体类泛型 + * @return a=1&b=2 + */ + @Deprecated + public static void entitySuperclassToUrlParam(T t,Class clazz,boolean callSuper,StringBuffer urlParam){ + //如果实体类对象为Object类型,则不处理 + if(!clazz.equals(Object.class)) { + //获取实体类对象下的所有成员,并保存到 URL 参数存储器中 + Arrays.stream(clazz.getDeclaredFields()).forEach(field -> { + //设置可以操作私有成员 + field.setAccessible(true); + try { + //获取成员值 + Object value = field.get(t); + //成员值为 Null 时,则不处理 + if (Objects.nonNull(value)) { + urlParam.append(field.getName()).append("=").append(value).append("&"); + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + }); + //是否转换父类成员 + if(callSuper){ + //获取父类类型 + clazz = clazz.getSuperclass(); + //递归调用,获取父类的处理结果 + entitySuperclassToUrlParam(t,clazz,callSuper,urlParam); + } + } + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/MybatisBatchUtils.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/MybatisBatchUtils.java new file mode 100644 index 000000000..90dba4d4c --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/MybatisBatchUtils.java @@ -0,0 +1,56 @@ +package com.cool.store.utils; + +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; +import java.util.function.BiConsumer; + +@Component +@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class}) +public class MybatisBatchUtils { + + /** + * 每次处理500条 + */ + private static final int BATCH_SIZE = 500; + + @Resource + private SqlSessionFactory sqlSessionFactory; + + /** + * 批量处理修改或者插入 + * + * @param data 需要被处理的数据 + * @param mapperClass Mybatis的Mapper类 + * @param consumer 自定义处理逻辑 + * @return int 影响的总行数 + * @author renwd + */ + public int batchInsertOrUpdate(List data, Class mapperClass, BiConsumer consumer) { + int i = 1; + SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); + try { + U mapper = sqlSession.getMapper(mapperClass); + int size = data.size(); + for (T element : data) { + consumer.accept(element, mapper); + if ((i % BATCH_SIZE == 0) || i == size) { + sqlSession.flushStatements(); + } + i++; + } + sqlSession.commit(); + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + sqlSession.close(); + } + return i - 1; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/Post.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/Post.java new file mode 100644 index 000000000..b1a393f5b --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/Post.java @@ -0,0 +1,37 @@ +package com.cool.store.utils; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * @author leoxie + */ +public class Post { + + /** + * 向指定 URL 发送POST方法的请求 + * @param url 发送请求的 URL + * @param data 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String send(String url, String data,HashMap headers) throws IOException { + Client client = new Client(); + client.setData(data); + client.setUrl(url); + + HashMap headerMap = new HashMap<>(16); + headerMap.put("Content-Type","application/x-www-form-urlencoded"); + + //添加头部信息 + if(!headers.isEmpty()){ + for (Map.Entry entry:headers.entrySet()) { + headerMap.put(entry.getKey(),entry.getValue()); + } + } + client.setHeader(headerMap); + + return client.exec(); + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/DateUtils.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/DateUtils.java new file mode 100644 index 000000000..0bb102b26 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/DateUtils.java @@ -0,0 +1,240 @@ +package com.cool.store.utils.poi; + +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.time.DateFormatUtils; +import org.jetbrains.annotations.NotNull; + +import java.lang.management.ManagementFactory; +import java.text.ParseException; +import java.text.ParsePosition; +import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.TemporalAdjusters; +import java.util.Date; + +/** + * 时间工具类 + * + * @author fanlyun + */ +public class DateUtils extends org.apache.commons.lang3.time.DateUtils { + public static String YYYY = "yyyy"; + + public static String YYYY_MM = "yyyy-MM"; + + public static String YYYY_MM_DD = "yyyy-MM-dd"; + + public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; + + public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; + + public static String SPECIAL_DATE_START = "yyyy年MM月dd日 HH:mm"; + + public static String SPECIAL_DATE_START_1 = "yyyy年MM月dd日"; + + public static String SPECIAL_DATE_START_2 = "dd日"; + + public static String SPECIAL_DATE_END = "HH:mm"; + + private static String[] parsePatterns = { + "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", + "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", + "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; + + /** + * 获取当前Date型日期 + * + * @return Date() 当前日期 + */ + public static Date getNowDate() { + return new Date(); + } + + /** + * 获取当前日期, 默认格式为yyyy-MM-dd + * + * @return String + */ + public static String getDate() { + return dateTimeNow(YYYY_MM_DD); + } + + public static String getTime() { + return dateTimeNow(YYYY_MM_DD_HH_MM_SS); + } + + public static String dateTimeNow() { + return dateTimeNow(YYYYMMDDHHMMSS); + } + + public static String dateTimeNow(final String format) { + return parseDateToStr(format, new Date()); + } + + public static String dateTime(final Date date) { + return parseDateToStr(YYYY_MM_DD, date); + } + + /** + * 格式化日期 + * + * @param format 格式化规则 + * @param date 日期 + * @return 格式化完毕的日期 + */ + public static String parseDateToStr(final String format, final Date date) { + if(StringUtils.isEmpty(format)|| ObjectUtils.isEmpty(date)){ + return null; + } + return new SimpleDateFormat(format).format(date); + } + + /** + * 以规则解析时间字符串 + * + * @param format 格式化规则 + * @param ts 时间字符串 + * @return 解析后时间 + */ + public static Date dateTime(final String format, final String ts) { + try { + return new SimpleDateFormat(format).parse(ts); + } catch (ParseException e) { + throw new RuntimeException(e); + } + } + + /** + * 日期路径 即年/月/日 如2018/08/08 + */ + public static String datePath() { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyy/MM/dd"); + } + + /** + * 日期路径 即年/月/日 如20180808 + */ + public static String dateTime() { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyyMMdd"); + } + + /** + * 日期型字符串转化为日期 格式 + */ + public static Date parseDate(Object str) { + if (str == null) { + return null; + } + try { + return parseDate(str.toString(), parsePatterns); + } catch (ParseException e) { + return null; + } + } + + /** + * 获取服务器启动时间 + */ + public static Date getServerStartDate() { + long time = ManagementFactory.getRuntimeMXBean().getStartTime(); + return new Date(time); + } + + /** + * 计算两个时间差 + */ + public static String getDatePoor(Date endDate, Date nowDate) { + long nd = 1000 * 24 * 60 * 60; + long nh = 1000 * 60 * 60; + long nm = 1000 * 60; + // long ns = 1000; + // 获得两个时间的毫秒时间差异 + long diff = endDate.getTime() - nowDate.getTime(); + // 计算差多少天 + long day = diff / nd; + // 计算差多少小时 + long hour = diff % nd / nh; + // 计算差多少分钟 + long min = diff % nd % nh / nm; + // 计算差多少秒//输出结果 + // long sec = diff % nd % nh % nm / ns; + return day + "天" + hour + "小时" + min + "分钟"; + } + + /** + * 以规则解析时间字符串 + * + * @param strDate 时间字符串 + * @param pattern 格式化规则 + * @return 解析后时间 + */ + public static Date strToDate(String strDate, String pattern) { + SimpleDateFormat formatter = new SimpleDateFormat(pattern); + ParsePosition pos = new ParsePosition(0); + return formatter.parse(strDate, pos); + } + + /** + * 根据毫秒数获取时间 + * + * @param millis 毫秒数 + * @return 时间 + */ + public static String getDateByMillis(long millis) { + //12小时制 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS); + Date date = new Date(); + date.setTime(millis); + return simpleDateFormat.format(date); + } + + + public static String YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm"; + public static String NOTICE_DATE = "yyyy年MM月dd日 HH:mm"; + + /** + * 返回11个月之前的月,从月的第一天开始,如当前是2020-05-03 返回的是2019-06-01 00:00:00 + * + * @return Date + */ + public static Date getNestOneYear() { + LocalDate minusDays = LocalDate.now().minusMonths(11).with(TemporalAdjusters.firstDayOfMonth()); + return fromDate(minusDays); + } + + /** + * 从1.8新增的{@link LocalDate}转换为{@link Date} + * + * @param localDate {@link LocalDate} + * @return 时间 + */ + private static Date fromDate(LocalDate localDate) { + ZoneId zone = ZoneId.systemDefault(); + Instant instant = localDate.atStartOfDay().atZone(zone).toInstant(); + return Date.from(instant); + } + + public static String parseLongDateToStr(final Long time) { + if (time == null) { + return null; + } + return new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS).format(new Date(time)); + } + /** + * + * @Date: 2024/5/11 + * @description:获取X天后的时间 LocalDate + */ + public static LocalDate getPlusFDays(Date date, Integer days) { + Instant instant = date.toInstant(); + ZoneId zone = ZoneId.systemDefault(); + LocalDate localDate = instant.atZone(zone).toLocalDate(); + LocalDate datePlusFDays = localDate.plusDays(days); + return datePlusFDays; + + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/ExcelUtil.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/ExcelUtil.java new file mode 100644 index 000000000..ccea4e063 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/ExcelUtil.java @@ -0,0 +1,1191 @@ +package com.cool.store.utils.poi; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.excel.EasyExcel; +import com.aliyun.openservices.shade.com.google.common.collect.Lists; +import com.cool.store.annotation.Excel; +import com.cool.store.annotation.Excels; +import com.cool.store.utils.poi.constant.Constants; +import com.cool.store.utils.poi.reflect.ReflectUtils; +import com.cool.store.utils.poi.text.Convert; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddressList; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFDataValidation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.CollectionUtils; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; +/** + * Excel相关处理 + * + * @author ruoyi + */ +public class ExcelUtil { + + private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class); + /** + * 字体变红 + */ + public static String FONT_RED = "fontRed"; + + /** + * 背景色变绿 + */ + public static String BACKGROUND_COLOR_YELLOW = "backgroundColorYellow"; + + /** + * Excel sheet最大行数,默认65536 + */ + public static final int SHEET_SIZE = 65536; + + /** + * 工作表名称 + */ + private String sheetName; + + /** + * 导出类型(EXPORT:导出数据;IMPORT:导入模板) + */ + private Excel.Type type; + + /** + * 工作薄对象 + */ + private Workbook wb; + + /** + * 工作表对象 + */ + private Sheet sheet; + + /** + * 样式列表 + */ + private Map styles; + + /** + * 设置样式列表 map<行,map<列,样式>> + */ + private Map>> styleCells; + + /** + * 导入导出数据列表 + */ + private List list; + + /** + * 注解列表 + */ + private List fields; + + /** + * 统计列表 + */ + private Map statistics = new HashMap<>(); + + /** + * 数字格式 + */ + private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00"); + + /** + * 实体对象 + */ + public Class clazz; + + public ExcelUtil(Class clazz) { + this.clazz = clazz; + } + + + public void init(List list, String sheetName, Excel.Type type) { + if (list == null) { + list = new ArrayList<>(); + } + this.list = list; + this.sheetName = sheetName; + this.type = type; + createExcelField(); + createWorkbook(); + } + + public void init(List list, String sheetName, Excel.Type type, Map>> styleCells) { + if (list == null) { + list = new ArrayList<>(); + } + this.list = list; + this.sheetName = sheetName; + this.type = type; + this.styleCells = styleCells; + createExcelField(); + createWorkbook(); + } + + /** + * 对excel表单默认第一个索引名转换成list + * + * @param is 输入流 + * @return 转换后集合 + */ + public List importExcel(InputStream is) throws Exception { + return importExcel(StringUtils.EMPTY, is); + } + + /** + * 对excel表单默认第一个索引名转换成list(EasyExcel) + * + * @param is 输入流 + * @return 转换后集合 + */ + public List importEasyExcel(InputStream is) throws Exception + { + return EasyExcel.read(is).head(clazz).sheet().doReadSync(); + } + + /** + * 对excel表单指定表格索引名转换成list + * + * @param sheetName 表格索引名 + * @param is 输入流 + * @return 转换后集合 + */ + public List importExcel(String sheetName, InputStream is) throws Exception { + this.type = Excel.Type.IMPORT; + this.wb = WorkbookFactory.create(is); + List list = null; + Sheet sheet; + if (StringUtils.isNotEmpty(sheetName)) { + // 如果指定sheet名,则取指定sheet中的内容. + sheet = wb.getSheet(sheetName); + } else { + // 如果传入的sheet名不存在则默认指向第1个sheet. + sheet = wb.getSheetAt(0); + } + + if (sheet == null) { + throw new IOException("文件sheet不存在"); + } + + int num = sheet.getLastRowNum(); + //删除的空行(包含空白行和带有格式的空行) + int bk = 0; + //记录空白行的集合 + List nums = Lists.newArrayList(); + for (int i = 1; i <= num; i++) { + Row row = sheet.getRow(i); + boolean flag = false; + //带有格式的空白行 + if (row != null) { + for (Cell cell : row) { + //判断该单元格是否全为空 + if (StringUtils.isNotEmpty(cell.toString())) { + flag = true; + break; + } + } + if (!flag) { + nums.add(i); + bk++; + } + //空白行 + } else { + nums.add(i); + bk++; + } + } + //删除无效数据行(空白行,带格式的空白行) + for (Integer n : nums) { + if (sheet.getRow(n) != null) { + sheet.removeRow(sheet.getRow(n)); + } + } + int rows = sheet.getPhysicalNumberOfRows(); + + if (rows > 0) { + // 定义一个map用于存放excel列的序号和field. + Map cellMap = new HashMap<>(16); + // 获取表头 + Row heard = sheet.getRow(0); + for (int i = 0; i < heard.getPhysicalNumberOfCells(); i++) { + Cell cell = heard.getCell(i); + if (ObjectUtil.isNotNull(cell)) { + String value = this.getCellValue(heard, i).toString(); + cellMap.put(value, i); + } else { + cellMap.put(null, i); + } + } + // 有数据时才处理 得到类的所有field. + Field[] allFields = clazz.getDeclaredFields(); + // 定义一个map用于存放列的序号和field. + Map fieldsMap = new HashMap<>(16); + for (Field field : allFields) { + Excel attr = field.getAnnotation(Excel.class); + // 判断字段是否为导出导入或为this.type + boolean isExportAndImport = attr != null && (attr.type() == Excel.Type.ALL || attr.type() == type); + if (isExportAndImport) { + // 设置类的私有字段属性可访问. + field.setAccessible(true); + Integer column = cellMap.get(attr.name()); + if (column != null) { + fieldsMap.put(column, field); + } + } + } + // 将数据填入集合 + list = fillCollection(sheet, rows, fieldsMap); + } + return list; + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param response 返回数据 + * @param list 导出数据集合 + * @param sheetName 工作表的名称 + */ + public void exportExcel(HttpServletResponse response, List list, String sheetName) throws IOException { + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + this.init(list, sheetName, Excel.Type.EXPORT); + exportExcel(response.getOutputStream(),false); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param response 返回数据 + * @param list 导出数据集合 + * @param sheetName 工作表的名称 + */ + public void exportExcel(HttpServletResponse response, List list, String sheetName, Map>> styleCells) throws IOException { + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + this.init(list, sheetName, Excel.Type.EXPORT, styleCells); + exportExcel(response.getOutputStream(),true); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param list 导出数据集合 + * @param sheetName 工作表的名称 + */ + public void exportExcel(OutputStream outputStream, List list, String sheetName, Map>> styleCells) throws IOException { + if (styleCells.size()==0) { + this.init(list, sheetName, Excel.Type.EXPORT); + }else { + this.init(list, sheetName, Excel.Type.EXPORT,styleCells); + } + exportExcel(outputStream,true); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param sheetName 工作表的名称 + */ + public void importTemplateExcel(HttpServletResponse response, String sheetName) throws IOException { + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + this.init(null, sheetName, Excel.Type.IMPORT); + exportExcel(response.getOutputStream(),false); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * @param outputStream + * @param pan 是否设置样式 + */ + public void exportExcel(OutputStream outputStream,boolean pan) { + try { + // 取出一共有多少个sheet. + int sheetNo = list.size() % SHEET_SIZE > 0 ? list.size() / SHEET_SIZE + 1 : list.size() / SHEET_SIZE; + createSheet(sheetNo, 0); + for (int index = 0; index <= sheetNo; index++) { + // 产生一行 + Row row = sheet.createRow(0); + int column = 0; + // 写入各个字段的列头名称 + for (Object[] os : fields) { + Excel excel = (Excel) os[1]; + this.createCell(excel, row, column++); + } + if (Excel.Type.EXPORT.equals(type)) { + fillExcelData(index, row,pan); + addStatisticsRow(); + } + } + wb.write(outputStream); + } catch (Exception e) { + log.error("导出Excel异常{}", e.getMessage()); + } finally { + if (wb != null) { + try { + wb.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + } + } + + /** + * 填充excel数据 + * + * @param index 序号 + * @param row 单元格行 + */ + public void fillExcelData(int index, Row row,boolean pan) { + int startNo = index * SHEET_SIZE; + int endNo = Math.min(startNo + SHEET_SIZE, list.size()); + for (int i = startNo; i < endNo; i++) { + row = sheet.createRow(i + 1 - startNo); + // 得到导出对象. + T vo = (T) list.get(i); + int column = 0; + for (Object[] os : fields) { + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + // 设置实体类私有属性可访问 + field.setAccessible(true); + this.addCell(excel, row, vo, field, column++, i,pan); + } + } + } + + /** + * 创建表格样式 + * + * @param wb 工作薄对象 + * @return 样式列表 + */ + private Map createStyles(Workbook wb) { + // 写入各条记录,每条记录对应excel表中的一行 + Map styles = new HashMap<>(16); + CellStyle style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + Font dataFont = wb.createFont(); + dataFont.setFontName("Arial"); + dataFont.setFontHeightInPoints((short) 10); + style.setFont(dataFont); + styles.put("data", style); + + style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("data")); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + Font headerFont = wb.createFont(); + headerFont.setFontName("Arial"); + headerFont.setFontHeightInPoints((short) 10); + headerFont.setBold(true); + headerFont.setColor(IndexedColors.WHITE.getIndex()); + style.setFont(headerFont); + styles.put("header", style); + + style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font totalFont = wb.createFont(); + totalFont.setFontName("Arial"); + totalFont.setFontHeightInPoints((short) 10); + style.setFont(totalFont); + styles.put("total", style); + + return styles; + } + + + /** + * 创建单元格 + * + * @param attr 属性配置 + * @param row 行 + * @param column 列 + * @return 单元格 + */ + public Cell createCell(Excel attr, Row row, int column) { + // 创建列 + Cell cell = row.createCell(column); + // 写入列信息 + cell.setCellValue(attr.name()); + setDataValidation(attr, row, column); + //默认样式 + CellStyle cellStyle = styles.get("header"); + cell.setCellStyle(cellStyle); + return cell; + } + + /** + * 设置单元格信息 + * + * @param value 单元格值 + * @param attr 注解相关 + * @param cell 单元格信息 + */ + public void setCellVo(Object value, Excel attr, Cell cell) { + if (Excel.ColumnType.STRING == attr.cellType()) { + cell.setCellType(CellType.STRING); + cell.setCellValue(StringUtils.isNull(value) ? attr.defaultValue() : value + attr.suffix()); + } else if (Excel.ColumnType.NUMERIC == attr.cellType()) { + cell.setCellType(CellType.NUMERIC); + if (StringUtils.isNull(value)) { + cell.setCellValue(attr.defaultValue()); + } else { + cell.setCellValue(StringUtils.contains(Convert.toStr(value), ".") ? Convert.toDouble(value) : Convert.toInt(value)); + } + } + } + + /** + * 创建表格样式 + */ + public void setDataValidation(Excel attr, Row row, int column) { + String prefix = "注:"; + if (attr.name().contains(prefix)) { + sheet.setColumnWidth(column, 6000); + } else { + // 设置列宽 + sheet.setColumnWidth(column, (int) ((attr.width() + 0.72) * 256)); + row.setHeight((short) (attr.height() * 20)); + } + // 如果设置了提示信息则鼠标放上去提示. + if (StringUtils.isNotEmpty(attr.prompt())) { + // 这里默认设了2-101列提示. + setXSSFPrompt(sheet, "", attr.prompt(), 1, 100, column, column); + } + // 如果设置了combo属性则本列只能选择不能输入 + if (attr.combo().length > 0) { + // 这里默认设了2-101列只能选择不能输入. + setXSSFValidation(sheet, attr.combo(), 1, 100, column, column); + } + } + + /** + * 添加单元格 + * + * @param attr 注解相关 + * @param row 单元行 + * @param vo 实体对象 + * @param field 字段 + * @param column 列 + * @return 单元格 + */ + public Cell addCell(Excel attr, Row row, T vo, Field field, int column, int lineNumber,boolean stylePan) { + Cell cell = null; + try { + // 设置行高 + row.setHeight((short) (attr.height() * 20)); + // 根据Excel中设置情况决定是否导出,有些情况需要保持为空,希望用户填写这一列. + if (attr.isExport()) { + // 创建cell + cell = row.createCell(column); + // 用于读取对象中的属性 + Object value = getTargetValue(vo, field, attr); + String dateFormat = attr.dateFormat(); + String readConverterExp = attr.readConverterExp(); + String separator = attr.separator(); + //默认样式 + CellStyle cellStyle = cell.getRow().getSheet().getWorkbook().createCellStyle(); + cellStyle.cloneStyleFrom(styles.get("data")); + if(stylePan&&!CollectionUtils.isEmpty(styleCells)){ + if (styleCells.containsKey(lineNumber)) { + Map> columnMap = styleCells.get(lineNumber); + if (columnMap.containsKey(column)) { + List styleFlagList = columnMap.get(column); + boolean pan = true; + for (String styleFlag : styleFlagList) { + if (FONT_RED.equals(styleFlag)) { + //设置字体颜色 + setFontColor(cellStyle, IndexedColors.RED.index); + } + if (BACKGROUND_COLOR_YELLOW.equals(styleFlag)) { + //设置背景颜色 + cellStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); + cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + //设置了背景颜色就不设置默认自定义背景颜色 + pan = false; + } + } + if (pan) { + setColumnsColor(attr, cellStyle); + } + } else { + //自定义样式 + setColumnsColor(attr, cellStyle); + } + cell.setCellStyle(cellStyle); + } else { + //自定义样式 + short columnsColor = attr.columnsColor(); + if (columnsColor != 0) { + //设置单元格的填充颜色 + cellStyle.setFillForegroundColor(columnsColor); + cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + cell.setCellStyle(cellStyle); + } else { + cell.setCellStyle(cellStyle); + } + } + } + if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)) { + cell.setCellValue(parseDateToStr(dateFormat, (Date) value)); + } else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value)) { + cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator)); + } else if (value instanceof BigDecimal && -1 != attr.scale()) { + cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).stripTrailingZeros().toPlainString()); + } else { + // 设置列类型 + setCellVo(value, attr, cell); + } + addStatisticsData(column, Convert.toStr(value), attr); + } + } catch (Exception e) { + log.error("导出Excel失败{}", e); + } + return cell; + } + + + /** + * 格式化日期 + * @param format 格式化规则 + * @param date 日期 + * @return 格式化完毕的日期 + */ + public static String parseDateToStr(final String format, final Date date) + { + return new SimpleDateFormat(format).format(date); + } + + + /** + * 设置样式列 + * + * @param styleMap 样式map + * @param row 行号 + * @param sort 列号 + * @param styles 样式字符 + */ + public static void setStyleMap(Map>> styleMap, int row, int sort, String[] styles) { + if (styleMap.containsKey(row)) { + Map> columnListMap = styleMap.get(row); + if (columnListMap.containsKey(sort)) { + List list = columnListMap.get(sort); + List arrList = new ArrayList(Arrays.asList(styles)); + list.addAll(arrList); + columnListMap.put(sort, list); + }else { + columnListMap.put(sort, new ArrayList(Arrays.asList(styles))); + } + } else { + styleMap.put(row, new HashMap>() {{ + put(sort, new ArrayList(Arrays.asList(styles))); + }}); + } + } + + + /** + * 设置整行样式 + * + * @param styleMap + * @param style + * @param columnNumCount 总列数 + */ + public static void setRowStyle(Map>> styleMap, String style, int columnNumCount) { + for (Integer row : styleMap.keySet()) { + boolean pan = false; + Map> integerListMap = styleMap.get(row); + for (int i = 0; i <= columnNumCount; i++) { + if (pan) { + continue; + } + if (integerListMap.containsKey(i)) { + if (i == 0) { + pan = true; + } else { + List stringList = integerListMap.get(i); + stringList.add(style); + } + } else { + integerListMap.put(i, new ArrayList() {{ + add(style); + }}); + } + } + } + } + + + /** + * 自定义设置背景颜色 + * + * @param attr + * @param baseCellStyle + */ + private void setColumnsColor(Excel attr, CellStyle baseCellStyle) { + //自定义样式 + short columnsColor = attr.columnsColor(); + if (columnsColor != 0) { + //设置单元格的填充颜色 + baseCellStyle.setFillForegroundColor(columnsColor); + baseCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + } + } + + /** + * 自定义设置字体颜色 + * + * @param baseCellStyle + * @param color + */ + private void setFontColor(CellStyle baseCellStyle, short color) { + Font dataFont = wb.createFont(); + dataFont.setFontName("Arial"); + dataFont.setFontHeightInPoints((short) 10); + dataFont.setColor(color); + baseCellStyle.setFont(dataFont); + } + + /** + * 设置 POI XSSFSheet 单元格提示 + * + * @param sheet 表单 + * @param promptTitle 提示标题 + * @param promptContent 提示内容 + * @param firstRow 开始行 + * @param endRow 结束行 + * @param firstCol 开始列 + * @param endCol 结束列 + */ + public void setXSSFPrompt(Sheet sheet, String promptTitle, String promptContent, int firstRow, int endRow, + int firstCol, int endCol) { + DataValidationHelper helper = sheet.getDataValidationHelper(); + DataValidationConstraint constraint = helper.createCustomConstraint("DD1"); + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + DataValidation dataValidation = helper.createValidation(constraint, regions); + dataValidation.createPromptBox(promptTitle, promptContent); + dataValidation.setShowPromptBox(true); + sheet.addValidationData(dataValidation); + } + + /** + * 设置某些列的值只能输入预制的数据,显示下拉框. + * + * @param sheet 要设置的sheet. + * @param textlist 下拉框显示的内容 + * @param firstRow 开始行 + * @param endRow 结束行 + * @param firstCol 开始列 + * @param endCol 结束列 + */ + public void setXSSFValidation(Sheet sheet, String[] textlist, int firstRow, int endRow, int firstCol, int endCol) { + DataValidationHelper helper = sheet.getDataValidationHelper(); + // 加载下拉列表内容 + DataValidationConstraint constraint = helper.createExplicitListConstraint(textlist); + // 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列 + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + // 数据有效性对象 + DataValidation dataValidation = helper.createValidation(constraint, regions); + // 处理Excel兼容性问题 + if (dataValidation instanceof XSSFDataValidation) { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + } else { + dataValidation.setSuppressDropDownArrow(false); + } + + sheet.addValidationData(dataValidation); + } + + /** + * 解析导出值 0=男,1=女,2=未知 + * + * @param propertyValue 参数值 + * @param converterExp 翻译注解 + * @param separator 分隔符 + * @return 解析后值 + */ + public static String convertByExp(String propertyValue, String converterExp, String separator) { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) { + String[] itemArray = item.split(Constants.EQUAL_SIGN); + if (StringUtils.containsAny(separator, propertyValue)) { + for (String value : propertyValue.split(separator)) { + if (itemArray[0].equals(value)) { + propertyString.append(itemArray[1]).append(separator); + break; + } + } + } else { + if (itemArray[0].equals(propertyValue)) { + return itemArray[1]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 反向解析值 男=0,女=1,未知=2 + * + * @param propertyValue 参数值 + * @param converterExp 翻译注解 + * @param separator 分隔符 + * @return 解析后值 + */ + public static String reverseByExp(String propertyValue, String converterExp, String separator) { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) { + String[] itemArray = item.split(Constants.EQUAL_SIGN); + if (StringUtils.containsAny(separator, propertyValue)) { + for (String value : propertyValue.split(separator)) { + if (itemArray[1].equals(value)) { + propertyString.append(itemArray[0]).append(separator); + break; + } + } + } else { + if (itemArray[1].equals(propertyValue)) { + return itemArray[0]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 合计统计信息 + */ + private void addStatisticsData(Integer index, String text, Excel entity) { + if (entity != null && entity.isStatistics()) { + Double temp = 0D; + if (!statistics.containsKey(index)) { + statistics.put(index, temp); + } + try { + temp = Double.valueOf(text); + } catch (NumberFormatException e) { + e.printStackTrace(); + } + statistics.put(index, statistics.get(index) + temp); + } + } + + /** + * 创建统计行 + */ + public void addStatisticsRow() { + if (statistics.size() > 0) { + Cell cell = null; + Row row = sheet.createRow(sheet.getLastRowNum() + 1); + Set keys = statistics.keySet(); + cell = row.createCell(0); + cell.setCellStyle(styles.get("total")); + cell.setCellValue("合计"); + + for (Integer key : keys) { + cell = row.createCell(key); + cell.setCellStyle(styles.get("total")); + cell.setCellValue(DOUBLE_FORMAT.format(statistics.get(key))); + } + statistics.clear(); + } + } + + /** + * 获取bean中的属性值 + * + * @param vo 实体对象 + * @param field 字段 + * @param excel 注解 + * @return 最终的属性值 + * @throws Exception 没有找到字段 + */ + private Object getTargetValue(T vo, Field field, Excel excel) throws Exception { + Object o = field.get(vo); + if (StringUtils.isNotEmpty(excel.targetAttr())) { + String target = excel.targetAttr(); + if (target.contains(Constants.POMINT)) { + String[] targets = target.split("[.]"); + for (String name : targets) { + o = getValue(o, name); + } + } else { + o = getValue(o, target); + } + } + return o; + } + + /** + * 以类的属性的get方法方法形式获取值 + * + * @param o 实体对象 + * @param name 字段名 + * @return value + * @throws Exception 没有找到该字段 + */ + private Object getValue(Object o, String name) throws Exception { + if (StringUtils.isNotEmpty(name)) { + Class clazz = o.getClass(); + Field field = clazz.getDeclaredField(name); + field.setAccessible(true); + o = field.get(o); + } + return o; + } + + /** + * 得到所有定义字段 + */ + private void createExcelField() { + this.fields = new ArrayList<>(); + List tempFields = new ArrayList<>(); + tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields())); + tempFields.addAll(Arrays.asList(clazz.getDeclaredFields())); + for (Field field : tempFields) { + // 单注解 + if (field.isAnnotationPresent(Excel.class)) { + putToField(field, field.getAnnotation(Excel.class)); + } + + // 多注解 + if (field.isAnnotationPresent(Excels.class)) { + Excels attrs = field.getAnnotation(Excels.class); + Excel[] excels = attrs.value(); + for (Excel excel : excels) { + putToField(field, excel); + } + } + } + this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList()); + } + + /** + * 放到字段集合中 + */ + private void putToField(Field field, Excel attr) { + // 判断字段是否为导出导入或为this.type + boolean isExportAndImport = attr != null && (attr.type() == Excel.Type.ALL || attr.type() == type); + if (isExportAndImport) { + this.fields.add(new Object[]{field, attr}); + } + } + + /** + * 创建一个工作簿 + */ + public void createWorkbook() { + this.wb = new SXSSFWorkbook(800); + } + + /** + * 创建工作表 + * + * @param sheetNo sheet数量 + * @param index 序号 + */ + public void createSheet(double sheetNo, int index) { + this.sheet = wb.createSheet(); + this.styles = createStyles(wb); + // 设置工作表的名称. + if (sheetNo == 0) { + wb.setSheetName(index, sheetName); + } else { + wb.setSheetName(index, sheetName + index); + } + } + + /** + * 获取单元格值 + * + * @param row 获取的行 + * @param column 获取单元格列号 + * @return 单元格值 + */ + public Object getCellValue(Row row, int column) { + if (row == null) { + return row; + } + Object val = ""; + try { + Cell cell = row.getCell(column); + if (StringUtils.isNotNull(cell)) { + if (cell.getCellTypeEnum() == CellType.NUMERIC || cell.getCellTypeEnum() == CellType.FORMULA) { + val = cell.getNumericCellValue(); + if (HSSFDateUtil.isCellDateFormatted(cell)) { + // POI Excel 日期格式转换 + val = DateUtil.getJavaDate((Double) val); + } else { + if ((Double) val % 1 > 0) { + val = new BigDecimal(val.toString()); + } else { + val = new DecimalFormat("0").format(val); + } + } + } else if (cell.getCellTypeEnum() == CellType.STRING) { + val = cell.getStringCellValue(); + } else if (cell.getCellTypeEnum() == CellType.BOOLEAN) { + val = cell.getBooleanCellValue(); + } else if (cell.getCellTypeEnum() == CellType.ERROR) { + val = cell.getErrorCellValue(); + } + + } + } catch (Exception e) { + return val; + } + return val; + } + + + private static ArrayList PoiDateList = new ArrayList() { + { + add("年"); + add("月"); + add("日"); + } + }; + + /** + * 获取单元格值 + * + * @param cell 单元格 + * @return String单元格值 + */ + public static String getCellValue(Cell cell) { + //判断是否为null或空串 + if (cell == null || "".equals(cell.toString().trim())) { + return ""; + } + CellType cellType = cell.getCellTypeEnum(); + String cellValue = ""; + // 1:字符串,2:数字,3:浮点,4:日期 + switch (cellType) { + //字符串类型 + case STRING: + cellValue = cell.getStringCellValue(); + //去除unicode字符串中的不可见字符 + cellValue = StringUtils.isEmpty(cellValue) ? "" : cellValue.trim() + .replaceAll("\\p{C}", ""); + break; + case BLANK: + cellValue = ""; + break; + // 数字 + case NUMERIC: + // 获取单元格值的格式化信息 + String dataFormat = cell.getCellStyle().getDataFormatString(); + // 判断格式化信息中是否存在:年月日 + AtomicReference isDate = new AtomicReference<>(false); + if (StringUtils.isNotNull(dataFormat)) { + PoiDateList.forEach(x -> isDate.set(isDate.get() || dataFormat.contains(x))); + } + + if (DateUtil.isCellDateFormatted(cell)) { + cellValue = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(DateUtil.getJavaDate(cell.getNumericCellValue())); + } else if (DateUtil.isCellInternalDateFormatted(cell)) { + cellValue = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(DateUtil.getJavaDate(cell.getNumericCellValue())); + } else if (isDate.get()) { + cellValue = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cell.getDateCellValue()); + } else if (dataFormat == null) { + cellValue = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(DateUtil.getJavaDate(cell.getNumericCellValue())); + } else { + if (StringUtils.isNull(dataFormat)) { + cellValue = String.valueOf(cell.getNumericCellValue()); + } else { + if (cell.getCellStyle().getDataFormatString().contains(Constants.USD)) { + cellValue = Constants.USD + cell.getNumericCellValue(); + } else if (cell.getCellStyle().getDataFormatString().contains(Constants.RMB_FULL)) { + cellValue = Constants.RMB_FULL + cell.getNumericCellValue(); + } else if (cell.getCellStyle().getDataFormatString().contains(Constants.RMB_HALF)) { + cellValue = Constants.RMB_HALF + cell.getNumericCellValue(); + } else if (cell.getCellStyle().getDataFormatString().contains(Constants.EUR)) { + cellValue = Constants.EUR + cell.getNumericCellValue(); + } else { + cellValue = String.valueOf(cell.getNumericCellValue()); + } + } + } + break; + default: + cellValue = ""; + break; + } + return cellValue; + } + + /** + * 获取单元格值 + * + * @param cell 单元格 + * @param cellType 单元格类型 + * @return String单元格值 + */ + public static String getCellValue(Cell cell, int cellType) { + //判断是否为null或空串 + if (cell == null || "".equals(cell.toString().trim())) { + return ""; + } + String cellValue = ""; + // 1:字符串,2:数字,3:浮点,4:日期 + switch (cellType) { + //字符串类型 + case 1: + cell.setCellType(CellType.STRING); + cellValue = cell.getStringCellValue(); + //去除unicode字符串中的不可见字符 + cellValue = StringUtils.isEmpty(cellValue) ? "" : cellValue.trim() + .replaceAll("\\p{C}", ""); + break; + // 数字 + case 2: + cellValue = new DecimalFormat("#").format(cell.getNumericCellValue()); + break; + //日期 + case 3: + cellValue = new DecimalFormat("#.###").format(cell.getNumericCellValue()); + break; + case 4: + // 获取单元格值的格式化信息 + String dataFormat = cell.getCellStyle().getDataFormatString(); + // 判断格式化信息中是否存在:年月日 + AtomicReference isDate = new AtomicReference<>(false); + if (StringUtils.isNotNull(dataFormat)) { + PoiDateList.forEach(x -> isDate.set(isDate.get() || dataFormat.contains(x))); + } + + if (DateUtil.isCellDateFormatted(cell)) { + cellValue = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(DateUtil.getJavaDate(cell.getNumericCellValue())); + } else if (DateUtil.isCellInternalDateFormatted(cell)) { + cellValue = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(DateUtil.getJavaDate(cell.getNumericCellValue())); + } else if (isDate.get()) { + cellValue = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cell.getDateCellValue()); + } else if (dataFormat == null) { + cellValue = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(DateUtil.getJavaDate(cell.getNumericCellValue())); + } else { + if (cell.getCellStyle().getDataFormatString().contains(Constants.USD)) { + cellValue = Constants.USD + cell.getNumericCellValue(); + } else if (cell.getCellStyle().getDataFormatString().contains(Constants.RMB_FULL)) { + cellValue = Constants.RMB_FULL + cell.getNumericCellValue(); + } else if (cell.getCellStyle().getDataFormatString().contains(Constants.RMB_HALF)) { + cellValue = Constants.RMB_HALF + cell.getNumericCellValue(); + } else if (cell.getCellStyle().getDataFormatString().contains(Constants.EUR)) { + cellValue = Constants.EUR + cell.getNumericCellValue(); + } else { + cellValue = String.valueOf(cell.getNumericCellValue()); + } + } + break; + default: + cellValue = ""; + break; + } + return cellValue; + } + + + /** + * 将数据填入集合 + * + * @param sheet sheet + * @param rows 行数 + * @param fieldsMap 用于存放列的序号和field + * @throws InstantiationException 实例创建异常 + * @throws IllegalAccessException 实例创建异常 + */ + private List fillCollection(Sheet sheet, int rows, Map fieldsMap) throws InstantiationException, IllegalAccessException { + List list = new ArrayList<>(); + int j=1; + for (int i = 0; i < rows-1; i++) { + // 从第2行开始取数据,默认第一行是表头. + Row row = sheet.getRow(j); + j++; + T entity = null; + for (Map.Entry entry : fieldsMap.entrySet()) { + Object val = this.getCellValue(row, entry.getKey()); + + // 如果不存在实例则新建. + entity = (entity == null ? clazz.newInstance() : entity); + // 从map中得到对应列的field. + Field field = fieldsMap.get(entry.getKey()); + // 取得类型,并根据对象类型设置值. + Class fieldType = field.getType(); + boolean isNumber = (Integer.TYPE == fieldType || Integer.class == fieldType) && StringUtils.isNumeric(Convert.toStr(val)); + if (String.class == fieldType) { + String s = Convert.toStr(val); + if (StringUtils.endsWith(s, ".0")) { + val = StringUtils.substringBefore(s, ".0"); + } else { + val = Convert.toStr(val); + } + } else if (isNumber) { + val = Convert.toInt(val); + } else if (Long.TYPE == fieldType || Long.class == fieldType) { + val = Convert.toLong(val); + } else if (Double.TYPE == fieldType || Double.class == fieldType) { + val = Convert.toDouble(val); + } else if (Float.TYPE == fieldType || Float.class == fieldType) { + val = Convert.toFloat(val); + } else if (BigDecimal.class == fieldType) { + val = Convert.toBigDecimal(val); + } else if (Date.class == fieldType) { + if (val instanceof String) { + val = DateUtils.parseDate(val); + } else if (val instanceof Double) { + val = DateUtil.getJavaDate((Double) val); + } + } + Excel attr = field.getAnnotation(Excel.class); + String propertyName = field.getName(); + if (StringUtils.isNotEmpty(attr.targetAttr())) { + propertyName = field.getName() + "." + attr.targetAttr(); + } else if (StringUtils.isNotEmpty(attr.readConverterExp())) { + val = reverseByExp(Convert.toStr(val), attr.readConverterExp(), attr.separator()); + } + ReflectUtils.invokeSetter(entity, propertyName, val); + } + list.add(entity); + } + return list; + } + + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/StringUtils.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/StringUtils.java new file mode 100644 index 000000000..df135fb3d --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/StringUtils.java @@ -0,0 +1,522 @@ +package com.cool.store.utils.poi; + +import cn.hutool.core.text.StrFormatter; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 字符串工具类 + * + * @author ruoyi + */ +public class StringUtils extends org.apache.commons.lang3.StringUtils +{ + /** 空字符串 */ + private static final String NULLSTR = ""; + + /** 下划线 */ + private static final char SEPARATOR = '_'; + + /** 星号 */ + private static final String START = "*"; + + /** + * 获取参数不为空值 + * + * @param value defaultValue 要判断的value + * @return value 返回值 + */ + public static T nvl(T value, T defaultValue) + { + return value != null ? value : defaultValue; + } + + /** + * * 判断一个Collection是否为空, 包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Collection coll) + { + return isNull(coll) || coll.isEmpty(); + } + + /** + * * 判断一个Collection是否非空,包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Collection coll) + { + return !isEmpty(coll); + } + + /** + * * 判断一个对象数组是否为空 + * + * @param objects 要判断的对象数组 + ** @return true:为空 false:非空 + */ + public static boolean isEmpty(Object[] objects) + { + return isNull(objects) || (objects.length == 0); + } + + /** + * * 判断一个对象数组是否非空 + * + * @param objects 要判断的对象数组 + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Object[] objects) + { + return !isEmpty(objects); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Map map) + { + return isNull(map) || map.isEmpty(); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Map map) + { + return !isEmpty(map); + } + + /** + * * 判断一个字符串是否为空串 + * + * @param str String + * @return true:为空 false:非空 + */ + public static boolean isEmpty(String str) + { + return isNull(str) || NULLSTR.equals(str.trim()); + } + + /** + * * 判断一个字符串是否为非空串 + * + * @param str String + * @return true:非空串 false:空串 + */ + public static boolean isNotEmpty(String str) + { + return !isEmpty(str); + } + + /** + * * 判断一个对象是否为空 + * + * @param object Object + * @return true:为空 false:非空 + */ + public static boolean isNull(Object object) + { + return object == null; + } + + /** + * * 判断一个对象是否非空 + * + * @param object Object + * @return true:非空 false:空 + */ + public static boolean isNotNull(Object object) + { + return !isNull(object); + } + + /** + * * 判断一个对象是否是数组类型(Java基本型别的数组) + * + * @param object 对象 + * @return true:是数组 false:不是数组 + */ + public static boolean isArray(Object object) + { + return isNotNull(object) && object.getClass().isArray(); + } + + /** + * 去空格 + */ + public static String trim(String str) + { + return (str == null ? "" : str.trim()); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @return 结果 + */ + public static String substring(final String str, int start) + { + if (str == null) + { + return NULLSTR; + } + + if (start < 0) + { + start = str.length() + start; + } + + if (start < 0) + { + start = 0; + } + if (start > str.length()) + { + return NULLSTR; + } + + return str.substring(start); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @param end 结束 + * @return 结果 + */ + public static String substring(final String str, int start, int end) + { + if (str == null) + { + return NULLSTR; + } + + if (end < 0) + { + end = str.length() + end; + } + if (start < 0) + { + start = str.length() + start; + } + + if (end > str.length()) + { + end = str.length(); + } + + if (start > end) + { + return NULLSTR; + } + + if (start < 0) + { + start = 0; + } + if (end < 0) + { + end = 0; + } + + return str.substring(start, end); + } + + /** + * 格式化文本, {} 表示占位符
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param template 文本模板,被替换的部分用 {} 表示 + * @param params 参数值 + * @return 格式化后的文本 + */ + public static String format(String template, Object... params) + { + if (isEmpty(params) || isEmpty(template)) + { + return template; + } + return StrFormatter.format(template, params); + } + + /** + * 下划线转驼峰命名 + */ + public static String toUnderScoreCase(String str) + { + if (str == null) + { + return null; + } + StringBuilder sb = new StringBuilder(); + // 前置字符是否大写 + boolean preCharIsUpperCase = true; + // 当前字符是否大写 + boolean curreCharIsUpperCase = true; + // 下一字符是否大写 + boolean nexteCharIsUpperCase = true; + for (int i = 0; i < str.length(); i++) + { + char c = str.charAt(i); + if (i > 0) + { + preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1)); + } + else + { + preCharIsUpperCase = false; + } + + curreCharIsUpperCase = Character.isUpperCase(c); + + if (i < (str.length() - 1)) + { + nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1)); + } + + // 分词 + boolean participles = (i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase; + if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase) + { + sb.append(SEPARATOR); + } + else if (participles) + { + sb.append(SEPARATOR); + } + sb.append(Character.toLowerCase(c)); + } + + return sb.toString(); + } + + /** + * 是否包含字符串 + * + * @param str 验证字符串 + * @param strs 字符串组 + * @return 包含返回true + */ + public static boolean inStringIgnoreCase(String str, String... strs) + { + if (str != null && strs != null) + { + for (String s : strs) + { + if (str.equalsIgnoreCase(trim(s))) + { + return true; + } + } + } + return false; + } + + /** + * 驼峰式命名法 例如:user_name->userName + */ + public static String toCamelCase(String s) + { + if (s == null) + { + return null; + } + s = s.toLowerCase(); + StringBuilder sb = new StringBuilder(s.length()); + boolean upperCase = false; + for (int i = 0; i < s.length(); i++) + { + char c = s.charAt(i); + + if (c == SEPARATOR) + { + upperCase = true; + } + else if (upperCase) + { + sb.append(Character.toUpperCase(c)); + upperCase = false; + } + else + { + sb.append(c); + } + } + return sb.toString(); + } + + /** + * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串 + * + * @param str 指定字符串 + * @param strs 需要检查的字符串数组 + * @return 是否匹配 + */ + public static boolean matches(String str, List strs) + { + if (isEmpty(str) || isEmpty(strs)) + { + return false; + } + for (String testStr : strs) + { + if (matches(str, testStr)) + { + return true; + } + } + return false; + } + + /** + * 查找指定字符串是否匹配指定字符串数组中的任意一个字符串 + * + * @param str 指定字符串 + * @param strs 需要检查的字符串数组 + * @return 是否匹配 + */ + public static boolean matches(String str, String... strs) + { + if (isEmpty(str) || isEmpty(strs)) + { + return false; + } + for (String testStr : strs) + { + if (matches(str, testStr)) + { + return true; + } + } + return false; + } + + /** + * 查找指定字符串是否匹配 + * + * @param str 指定字符串 + * @param pattern 需要检查的字符串 + * @return 是否匹配 + */ + public static boolean matches(String str, String pattern) + { + if (isEmpty(pattern) || isEmpty(str)) + { + return false; + } + + // 替换空格 + pattern = pattern.replaceAll("\\s*", ""); + // pattern截取开始位置 + int beginOffset = 0; + // 前星号的偏移位置 + int formerStarOffset; + // 后星号的偏移位置 + int latterStarOffset; + + String remainingUri = str; + String prefixPattern; + String suffixPattern; + + boolean result; + do + { + formerStarOffset = indexOf(pattern, START, beginOffset); + prefixPattern = substring(pattern, beginOffset, formerStarOffset > -1 ? formerStarOffset : pattern.length()); + + // 匹配前缀Pattern + result = remainingUri.contains(prefixPattern); + // 已经没有星号,直接返回 + if (formerStarOffset == -1) + { + return result; + } + + // 匹配失败,直接返回 + if (!result) { + return false; + } + + if (!isEmpty(prefixPattern)) + { + remainingUri = substringAfter(str, prefixPattern); + } + + // 匹配后缀Pattern + latterStarOffset = indexOf(pattern, START, formerStarOffset + 1); + suffixPattern = substring(pattern, formerStarOffset + 1, latterStarOffset > -1 ? latterStarOffset : pattern.length()); + + result = remainingUri.contains(suffixPattern); + // 匹配失败,直接返回 + if (!result) { + return false; + } + + if (!isEmpty(suffixPattern)) + { + remainingUri = substringAfter(str, suffixPattern); + } + + // 移动指针 + beginOffset = latterStarOffset + 1; + + } + while (!isEmpty(suffixPattern) && !isEmpty(remainingUri)); + + return true; + } + + @SuppressWarnings("unchecked") + public static T cast(Object obj) + { + return (T) obj; + } + + /** + * 判断是否非空 + * @param values 待校验的字符串 + * @return 是否所有非空 + */ + public static boolean areNotEmpty(String... values) { + boolean result = true; + if ((values == null) || (values.length == 0)) { + result = false; + } else { + for (String value : values) { + result &= !isEmpty(value); + } + } + return result; + } + + /** 首字母转小写 */ + public static String toLowerCaseFirstOne(String s) { + if(Character.isLowerCase(s.charAt(0))) { + return s; + } else { + return Character.toLowerCase(s.charAt(0)) + s.substring(1); + } + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/constant/Constants.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/constant/Constants.java new file mode 100644 index 000000000..f4262d9e7 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/constant/Constants.java @@ -0,0 +1,225 @@ +package com.cool.store.utils.poi.constant; + +/** + * 通用常量信息 + * + * @author ruoyi + */ +public class Constants +{ + /** + * UTF-8 字符集 + */ + public static final String UTF8 = "UTF-8"; + + /** + * GBK 字符集 + */ + public static final String GBK = "GBK"; + + /** + * http请求 + */ + public static final String HTTP = "http://"; + + /** + * info 信息 + */ + public static final String INFO = "INFO:"; + + /** + * https请求 + */ + public static final String HTTPS = "https://"; + + /** + * 成功标记 + */ + public static final Integer SUCCESS = 200; + + /** + * 失败标记 + */ + public static final Integer FAIL = 500; + + + /** + * 登录失败 + */ + public static final String LOGIN_FAIL = "Error"; + + /** + * 等号 + */ + public static final String EQUAL_SIGN = "="; + /** + * 逗号 + */ + public static final String COMMA = ","; + + /** + * 单引号 + */ + public static final String SINGLE_QUOTES = "'"; + /** + * 小数点 + */ + public static final String POMINT = "."; + /** + * 冒号 + */ + public static final String COLON = ":"; + /** + * 分号 + */ + public static final String SEMICOLON = ";"; + + /** + * 空格 + */ + public static final String SPACE = " "; + /** + * 横线 + */ + public static final String M_LINE = "-"; + /** + * 下划线 + */ + public static final String D_LINE = "_"; + + + public static final String SEPARATOR= "\\|"; + + + public static final String FORWARD_SLASH = "/"; + + /** + * 图片格式 + */ + public static final String IMAGE_PNG = "png"; + + /** + * 图片格式 + */ + public static final String IMAGE_JPG = "jpg"; + /** + * 图片格式 + */ + public static final String EXCEL_XLSX = "xlsx"; + /** + * 图片格式 + */ + public static final String IMAGE_POINT_PNG = ".png"; + + /** + * 图片格式 + */ + public static final String IMAGE_POINT_JPG = ".jpg"; + + /** + * 删除标识-0 + */ + public static final String DEL_FLAG_0 = "0"; + /** + * 删除标识-1 + */ + public static final String STR_WITH = "&"; + + /** + * 删除标识-1 + */ + public static final String DEL_FLAG_1 = "1"; + + + /** + * 字符串-未知 + */ + public static final String UNKNOWN = "unknown"; + + /** + * 美元 + */ + public static final String USD = "$"; + + /** + * 人民币 全角 + */ + public static final String RMB_FULL = "¥"; + + /** + * 人民币 半角 + */ + public static final String RMB_HALF = "¥"; + + /** + * 欧元 + */ + public static final String EUR = "€"; + + /** + * 小写MD5 + */ + public static final String MD5 = "md5"; + + /** + * 请求头 Content-Encoding + */ + public static final String CONTENT_ENCODING = "Content-Encoding"; + + + public static final String INTENTION_CONTRACT_URL = "/api/coolstore/start-flow/intention-contract"; + + + public static final String FRANCHISEE_STORE_NUM = "/api/kdz/franchisee/save"; + + public static final String NEW_STORE_URL = "/api/coolstore/start-flow/new-store"; + + public static final String FRANCHISE_AGREEMENT_COMPANY = "/api/coolstore/start-flow/franchise-agreement-company"; + + public static final String FRANCHISE_AGREEMENT_PERSON = "/api/coolstore/start-flow/franchise-agreement-person"; + + public static final String GET_STORE_INFO_BY_CODE = "/api/kdz/get-store-info-by-code"; + + // 员工详细信息数据接口 + public static final String GET_USER_INFO_BY_CODE = "/api/kdz/get-user-info-by-code"; + // 加盟商信息数据接口 + public static final String GET_FRANCHISEE_INFO_BY_CODE = "/api/kdz/franchisee/get-info"; + + // 员工云学堂考核结果 + public static final String GET_USER_EXAM_INFO = "/api/kdz/get-user-exam-info"; + + + public static final Integer ZERO_INTEGER = 0; + + public static final Integer ONE_INTEGER = 1; + + + public static final Integer TWO_INTEGER = 2; + + public static final String ONE_STRING = "1"; + + public static final String TWO_STRING = "2"; + + public static final String INSERT_FLAG = "insert"; + + public static final String UPDATE_FLAG = "update"; + + public static final String TIME_STAMP_FLAG = "yyyy-MM-dd"; + + public static final String TIME_STAMP_FLAG_TWO = "yyyyMMdd"; + + public static final String TIME_STAMP_FLAG_THREE = "HH:mm"; + + public static final String GET_PROJECT_LIST = "https://hzly.cloudcubic.net/ajaxHandle/synchronization/JCallBackSynchronizationHandler.ashx?action=app&controller=GetProjectByCustomLable&remark=%s"; + public static final String GET_PROJECT_DETAIL= "https://hzly.cloudcubic.net/ajaxHandle/synchronization/JCallBackSynchronizationHandler.ashx?action=app&controller=GetProjectDetails"; + + public static final String FIRST_ORDER = "/api/kdz/get-store-balance"; + public static final String BATCH_FIRST_ORDER = "/api/kdz/list-store-balance"; + + public static String AVATAR_DEFAULT = "https://oss-store.coolcollege.cn/eid/e17cd2dc350541df8a8b0af9bd27f77d/2404/53308197437354940.png"; + + public static final String WANG_LEI_JOB_NUMBER = "19060164"; + + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/reflect/ReflectUtils.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/reflect/ReflectUtils.java new file mode 100644 index 000000000..3119fe538 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/reflect/ReflectUtils.java @@ -0,0 +1,403 @@ +package com.cool.store.utils.poi.reflect; + +import com.cool.store.utils.poi.DateUtils; +import com.cool.store.utils.poi.constant.Constants; +import com.cool.store.utils.poi.text.Convert; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +import org.apache.poi.ss.usermodel.DateUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.lang.reflect.*; +import java.util.Arrays; +import java.util.Date; + +/** + * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数. + * + * @author ruoyi + */ +@SuppressWarnings("rawtypes") +public class ReflectUtils +{ + private static final String SETTER_PREFIX = "set"; + + private static final String GETTER_PREFIX = "get"; + + private static final String CGLIB_CLASS_SEPARATOR = "$$"; + + private static final Logger logger = LoggerFactory.getLogger(ReflectUtils.class); + + /** + * 调用Getter方法. + * 支持多级,如:对象名.对象名.方法 + */ + @SuppressWarnings("unchecked") + public static E invokeGetter(Object obj, String propertyName) + { + Object object = obj; + for (String name : StringUtils.split(propertyName, Constants.POMINT)) + { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name); + object = invokeMethod(object, getterMethodName, new Class[] {}, new Object[] {}); + } + return (E) object; + } + + /** + * 调用Setter方法, 仅匹配方法名。 + * 支持多级,如:对象名.对象名.方法 + */ + public static void invokeSetter(Object obj, String propertyName, E value) + { + Object object = obj; + String[] names = StringUtils.split(propertyName, "."); + for (int i = 0; i < names.length; i++) + { + if (i < names.length - 1) + { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(names[i]); + object = invokeMethod(object, getterMethodName, new Class[] {}, new Object[] {}); + } + else + { + String setterMethodName = SETTER_PREFIX + StringUtils.capitalize(names[i]); + invokeMethodByName(object, setterMethodName, new Object[] { value }); + } + } + } + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + */ + @SuppressWarnings("unchecked") + public static E getFieldValue(final Object obj, final String fieldName) + { + Field field = getAccessibleField(obj, fieldName); + if (field == null) + { + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + fieldName + "] 字段 "); + return null; + } + E result = null; + try + { + result = (E) field.get(obj); + } + catch (IllegalAccessException e) + { + logger.error("不可能抛出的异常{}", e.getMessage()); + } + return result; + } + + /** + * 直接设置对象属性值, 无视private/protected修饰符, 不经过setter函数. + */ + public static void setFieldValue(final Object obj, final String fieldName, final E value) + { + Field field = getAccessibleField(obj, fieldName); + if (field == null) + { + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + fieldName + "] 字段 "); + return; + } + try + { + field.set(obj, value); + } + catch (IllegalAccessException e) + { + logger.error("不可能抛出的异常: {}", e.getMessage()); + } + } + + /** + * 直接调用对象方法, 无视private/protected修饰符. + * 用于一次性调用的情况,否则应使用getAccessibleMethod()函数获得Method后反复调用. + * 同时匹配方法名+参数类型, + */ + @SuppressWarnings("unchecked") + public static E invokeMethod(final Object obj, final String methodName, final Class[] parameterTypes, + final Object[] args) + { + if (obj == null || methodName == null) + { + return null; + } + Method method = getAccessibleMethod(obj, methodName, parameterTypes); + if (method == null) + { + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + methodName + "] 方法 "); + return null; + } + try + { + return (E) method.invoke(obj, args); + } + catch (Exception e) + { + String msg = "method: " + method + ", obj: " + obj + ", args: " + args + ""; + throw convertReflectionExceptionToUnchecked(msg, e); + } + } + + /** + * 直接调用对象方法, 无视private/protected修饰符, + * 用于一次性调用的情况,否则应使用getAccessibleMethodByName()函数获得Method后反复调用. + * 只匹配函数名,如果有多个同名函数调用第一个。 + */ + @SuppressWarnings("unchecked") + public static E invokeMethodByName(final Object obj, final String methodName, final Object[] args) + { + Method method = getAccessibleMethodByName(obj, methodName, args.length); + if (method == null) + { + // 如果为空不报错,直接返回空。 + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + methodName + "] 方法 "); + return null; + } + try + { + // 类型转换(将参数数据类型转换为目标方法参数类型) + Class[] cs = method.getParameterTypes(); + for (int i = 0; i < cs.length; i++) + { + if (args[i] != null && !args[i].getClass().equals(cs[i])) + { + if (cs[i] == String.class) + { + args[i] = Convert.toStr(args[i]); + if (StringUtils.endsWith((String) args[i], ".0")) + { + args[i] = StringUtils.substringBefore((String) args[i], ".0"); + } + } + else if (cs[i] == Integer.class) + { + args[i] = Convert.toInt(args[i]); + } + else if (cs[i] == Long.class) + { + args[i] = Convert.toLong(args[i]); + } + else if (cs[i] == Double.class) + { + args[i] = Convert.toDouble(args[i]); + } + else if (cs[i] == Float.class) + { + args[i] = Convert.toFloat(args[i]); + } + else if (cs[i] == Date.class) + { + if (args[i] instanceof String) + { + args[i] = DateUtils.parseDate(args[i]); + } + else + { + args[i] = DateUtil.getJavaDate((Double) args[i]); + } + } + } + } + return (E) method.invoke(obj, args); + } + catch (Exception e) + { + String msg = "method: " + method + ", obj: " + obj + ", args: " + Arrays.toString(args) + ""; + throw convertReflectionExceptionToUnchecked(msg, e); + } + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + */ + public static Field getAccessibleField(final Object obj, final String fieldName) + { + // 为空不报错。直接返回 null + if (obj == null) + { + return null; + } + Validate.notBlank(fieldName, "fieldName can't be blank"); + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) + { + try + { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } + catch (NoSuchFieldException e) + { + e.printStackTrace(); + } + } + return null; + } + + /** + * 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + * 匹配函数名+参数类型。 + * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethod(final Object obj, final String methodName, + final Class... parameterTypes) + { + // 为空不报错。直接返回 null + if (obj == null) + { + return null; + } + Validate.notBlank(methodName, "methodName can't be blank"); + for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) + { + try + { + Method method = searchType.getDeclaredMethod(methodName, parameterTypes); + makeAccessible(method); + return method; + } + catch (NoSuchMethodException e) + { + e.printStackTrace(); + } + } + return null; + } + + /** + * 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + * 只匹配函数名。 + * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethodByName(final Object obj, final String methodName, int argsNum) + { + // 为空不报错。直接返回 null + if (obj == null) + { + return null; + } + Validate.notBlank(methodName, "methodName can't be blank"); + for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) + { + Method[] methods = searchType.getDeclaredMethods(); + for (Method method : methods) + { + if (method.getName().equals(methodName) && method.getParameterTypes().length == argsNum) + { + makeAccessible(method); + return method; + } + } + } + return null; + } + + /** + * 改变private/protected的方法为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + */ + public static void makeAccessible(Method method) + { + boolean notAccessible = (!Modifier.isPublic(method.getModifiers()) || !Modifier.isPublic(method.getDeclaringClass().getModifiers())) + && !method.isAccessible(); + if (notAccessible) { + method.setAccessible(true); + } + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + */ + public static void makeAccessible(Field field) + { + boolean notAccessible = (!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) + || Modifier.isFinal(field.getModifiers())) && !field.isAccessible(); + if (notAccessible) { + field.setAccessible(true); + } + } + + /** + * 通过反射, 获得Class定义中声明的泛型参数的类型, 注意泛型必须定义在父类处 + * 如无法找到, 返回Object.class. + */ + @SuppressWarnings("unchecked") + public static Class getClassGenricType(final Class clazz) + { + return getClassGenricType(clazz, 0); + } + + /** + * 通过反射, 获得Class定义中声明的父类的泛型参数的类型. + * 如无法找到, 返回Object.class. + */ + public static Class getClassGenricType(final Class clazz, final int index) + { + Type genType = clazz.getGenericSuperclass(); + + if (!(genType instanceof ParameterizedType)) + { + logger.debug(clazz.getSimpleName() + "'s superclass not ParameterizedType"); + return Object.class; + } + + Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); + + if (index >= params.length || index < 0) + { + logger.debug("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: " + + params.length); + return Object.class; + } + if (!(params[index] instanceof Class)) + { + logger.debug(clazz.getSimpleName() + " not set the actual class on superclass generic parameter"); + return Object.class; + } + + return (Class) params[index]; + } + + public static Class getUserClass(Object instance) + { + if (instance == null) + { + throw new RuntimeException("Instance must not be null"); + } + Class clazz = instance.getClass(); + if (clazz != null && clazz.getName().contains(CGLIB_CLASS_SEPARATOR)) + { + Class superClass = clazz.getSuperclass(); + if (superClass != null && !Object.class.equals(superClass)) + { + return superClass; + } + } + return clazz; + + } + + /** + * 将反射时的checked exception转换为unchecked exception. + */ + public static RuntimeException convertReflectionExceptionToUnchecked(String msg, Exception e) + { + if (e instanceof IllegalAccessException || e instanceof IllegalArgumentException + || e instanceof NoSuchMethodException) + { + return new IllegalArgumentException(msg, e); + } + else if (e instanceof InvocationTargetException) + { + return new RuntimeException(msg, ((InvocationTargetException) e).getTargetException()); + } + return new RuntimeException(msg, e); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/text/Convert.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/text/Convert.java new file mode 100644 index 000000000..d4526c088 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/text/Convert.java @@ -0,0 +1,998 @@ +package com.cool.store.utils.poi.text; + + +import com.cool.store.utils.poi.StringUtils; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.text.NumberFormat; +import java.util.Set; + +/** + * 类型转换器 + * + * @author fanlyun + */ +public class Convert +{ + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static String toStr(Object value, String defaultValue) + { + if (null == value) + { + return defaultValue; + } + if (value instanceof String) + { + return (String) value; + } + return value.toString(); + } + + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static String toStr(Object value) + { + return toStr(value, null); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Character toChar(Object value, Character defaultValue) + { + if (null == value) + { + return defaultValue; + } + if (value instanceof Character) + { + return (Character) value; + } + + final String valueStr = toStr(value, null); + return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Character toChar(Object value) + { + return toChar(value, null); + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Byte toByte(Object value, Byte defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Byte) + { + return (Byte) value; + } + if (value instanceof Number) + { + return ((Number) value).byteValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Byte.parseByte(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Byte toByte(Object value) + { + return toByte(value, null); + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Short toShort(Object value, Short defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Short) + { + return (Short) value; + } + if (value instanceof Number) + { + return ((Number) value).shortValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Short.parseShort(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Short toShort(Object value) + { + return toShort(value, null); + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Number toNumber(Object value, Number defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Number) + { + return (Number) value; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return NumberFormat.getInstance().parse(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Number toNumber(Object value) + { + return toNumber(value, null); + } + + /** + * 转换为int
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Integer toInt(Object value, Integer defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Integer) + { + return (Integer) value; + } + if (value instanceof Number) + { + return ((Number) value).intValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Integer.parseInt(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为int
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Integer toInt(Object value) + { + return toInt(value, null); + } + + /** + * 转换为Integer数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static Integer[] toIntArray(String str) + { + return toIntArray(",", str); + } + + /** + * 转换为Long数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static Long[] toLongArray(String str) + { + return toLongArray(",", str); + } + + /** + * 转换为Integer数组
+ * + * @param split 分隔符 + * @param str 被转换的值 + * @return 结果 + */ + public static Integer[] toIntArray(String split, String str) + { + if (StringUtils.isEmpty(str)) + { + return new Integer[] {}; + } + String[] arr = str.split(split); + final Integer[] ints = new Integer[arr.length]; + for (int i = 0; i < arr.length; i++) + { + final Integer v = toInt(arr[i], 0); + ints[i] = v; + } + return ints; + } + + /** + * 转换为Long数组
+ * + * @param split 分隔符 + * @param str 被转换的值 + * @return 结果 + */ + public static Long[] toLongArray(String split, String str) + { + if (StringUtils.isEmpty(str)) + { + return new Long[] {}; + } + String[] arr = str.split(split); + final Long[] longs = new Long[arr.length]; + for (int i = 0; i < arr.length; i++) + { + final Long v = toLong(arr[i], null); + longs[i] = v; + } + return longs; + } + + /** + * 转换为String数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static String[] toStrArray(String str) + { + return toStrArray(",", str); + } + + /** + * 转换为String数组
+ * + * @param split 分隔符 + * @param str 被转换的值 + * @return 结果 + */ + public static String[] toStrArray(String split, String str) + { + return str.split(split); + } + + /** + * 转换为long
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Long toLong(Object value, Long defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Long) + { + return (Long) value; + } + if (value instanceof Number) + { + return ((Number) value).longValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).longValue(); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为long
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Long toLong(Object value) + { + return toLong(value, null); + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Double toDouble(Object value, Double defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Double) + { + return (Double) value; + } + if (value instanceof Number) + { + return ((Number) value).doubleValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).doubleValue(); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Double toDouble(Object value) + { + return toDouble(value, null); + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Float toFloat(Object value, Float defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Float) + { + return (Float) value; + } + if (value instanceof Number) + { + return ((Number) value).floatValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Float.parseFloat(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Float toFloat(Object value) + { + return toFloat(value, null); + } + + /** + * 转换为boolean
+ * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Boolean toBool(Object value, Boolean defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Boolean) + { + return (Boolean) value; + } + String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + valueStr = valueStr.trim().toLowerCase(); + switch (valueStr) + { + // 为 true、yes、ok、1 时均认为 true + case "true": + case "yes": + case "ok": + case "1": + return true; + //否则认为 false + case "false": + case "no": + case "0": + return false; + default: + return defaultValue; + } + } + + /** + * 转换为boolean
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Boolean toBool(Object value) + { + return toBool(value, null); + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * + * @param clazz Enum的Class + * @param value 值 + * @param defaultValue 默认值 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value, E defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (clazz.isAssignableFrom(value.getClass())) + { + @SuppressWarnings("unchecked") + E myE = (E) value; + return myE; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Enum.valueOf(clazz, valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * + * @param clazz Enum的Class + * @param value 值 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value) + { + return toEnum(clazz, value, null); + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static BigInteger toBigInteger(Object value, BigInteger defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof BigInteger) + { + return (BigInteger) value; + } + if (value instanceof Long) + { + return BigInteger.valueOf((Long) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return new BigInteger(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static BigInteger toBigInteger(Object value) + { + return toBigInteger(value, null); + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof BigDecimal) + { + return (BigDecimal) value; + } + if (value instanceof Long) + { + return new BigDecimal((Long) value); + } + if (value instanceof Double) + { + return BigDecimal.valueOf((Double) value); + } + if (value instanceof Integer) + { + return new BigDecimal((Integer) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return new BigDecimal(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static BigDecimal toBigDecimal(Object value) + { + return toBigDecimal(value, null); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @return 字符串 + */ + public static String utf8Str(Object obj) + { + return str(obj, StandardCharsets.UTF_8); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @param charsetName 字符集 + * @return 字符串 + */ + public static String str(Object obj, String charsetName) + { + return str(obj, Charset.forName(charsetName)); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @param charset 字符集 + * @return 字符串 + */ + public static String str(Object obj, Charset charset) + { + if (null == obj) + { + return null; + } + + if (obj instanceof String) + { + return (String) obj; + } + else if (obj instanceof byte[] || obj instanceof Byte[]) + { + return str(obj, charset); + } + else if (obj instanceof ByteBuffer) + { + return str((ByteBuffer) obj, charset); + } + return obj.toString(); + } + + /** + * 将byte数组转为字符串 + * + * @param bytes byte数组 + * @param charset 字符集 + * @return 字符串 + */ + public static String str(byte[] bytes, String charset) + { + return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset)); + } + + /** + * 解码字节码 + * + * @param data 字符串 + * @param charset 字符集,如果此字段为空,则解码的结果取决于平台 + * @return 解码后的字符串 + */ + public static String str(byte[] data, Charset charset) + { + if (data == null) + { + return null; + } + + if (null == charset) + { + return new String(data); + } + return new String(data, charset); + } + + /** + * 将编码的byteBuffer数据转换为字符串 + * + * @param data 数据 + * @param charset 字符集,如果为空使用当前系统字符集 + * @return 字符串 + */ + public static String str(ByteBuffer data, String charset) + { + if (data == null) + { + return null; + } + + return str(data, Charset.forName(charset)); + } + + /** + * 将编码的byteBuffer数据转换为字符串 + * + * @param data 数据 + * @param charset 字符集,如果为空使用当前系统字符集 + * @return 字符串 + */ + public static String str(ByteBuffer data, Charset charset) + { + if (null == charset) + { + charset = Charset.defaultCharset(); + } + return charset.decode(data).toString(); + } + + // ----------------------------------------------------------------------- 全角半角转换 + /** + * 半角转全角 + * + * @param input String. + * @return 全角字符串. + */ + public static String toSBC(String input) + { + return toSBC(input, null); + } + + /** + * 半角转全角 + * + * @param input String + * @param notConvertSet 不替换的字符集合 + * @return 全角字符串. + */ + public static String toSBC(String input, Set notConvertSet) + { + char[] c = input.toCharArray(); + for (int i = 0; i < c.length; i++) + { + if (null != notConvertSet && notConvertSet.contains(c[i])) + { + // 跳过不替换的字符 + continue; + } + + if (c[i] == ' ') + { + c[i] = '\u3000'; + } + else if (c[i] < '\177') + { + c[i] = (char) (c[i] + 65248); + + } + } + return new String(c); + } + + /** + * 全角转半角 + * + * @param input String. + * @return 半角字符串 + */ + public static String toDBC(String input) + { + return toDBC(input, null); + } + + /** + * 替换全角为半角 + * + * @param text 文本 + * @param notConvertSet 不替换的字符集合 + * @return 替换后的字符 + */ + public static String toDBC(String text, Set notConvertSet) + { + char[] c = text.toCharArray(); + for (int i = 0; i < c.length; i++) + { + if (null != notConvertSet && notConvertSet.contains(c[i])) + { + // 跳过不替换的字符 + continue; + } + + if (c[i] == '\u3000') + { + c[i] = ' '; + } + else if (c[i] > '\uFF00' && c[i] < '\uFF5F') + { + c[i] = (char) (c[i] - 65248); + } + } + + return new String(c); + } + + /** + * 数字金额大写转换 先写个完整的然后将如零拾替换成零 + * + * @param n 数字 + * @return 中文大写数字 + */ + public static String digitUppercase(double n) + { + String[] fraction = { "角", "分" }; + String[] digit = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; + String[][] unit = { { "元", "万", "亿" }, { "", "拾", "佰", "仟" } }; + + String head = n < 0 ? "负" : ""; + n = Math.abs(n); + + StringBuilder s = new StringBuilder(); + for (int i = 0; i < fraction.length; i++) + { + s.append((digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", "")); + } + if (s.length() < 1) + { + s = new StringBuilder("整"); + } + int integerPart = (int) Math.floor(n); + + for (int i = 0; i < unit[0].length && integerPart > 0; i++) + { + StringBuilder p = new StringBuilder(); + for (int j = 0; j < unit[1].length && n > 0; j++) + { + p.insert(0, digit[integerPart % 10] + unit[1][j]); + integerPart = integerPart / 10; + } + s.insert(0, p.toString().replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i]); + } + return head + s.toString().replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整"); + } +} diff --git a/coolstore-partner-service/src/test/java/com/cool/store/service/SmsServiceTest.java b/coolstore-partner-service/src/test/java/com/cool/store/service/SmsServiceTest.java new file mode 100644 index 000000000..1ec152a99 --- /dev/null +++ b/coolstore-partner-service/src/test/java/com/cool/store/service/SmsServiceTest.java @@ -0,0 +1,17 @@ +package com.cool.store.service; + + +import org.junit.jupiter.api.Test; + +/** + * @Author: young.yu + * @Date: 2023-09-14 15:22 + * @Description: + */ +class SmsServiceTest { + + @Test + void sendSmsNormal() { + + } +} \ No newline at end of file diff --git a/coolstore-partner-web/Dockerfile b/coolstore-partner-web/Dockerfile new file mode 100644 index 000000000..d754ae643 --- /dev/null +++ b/coolstore-partner-web/Dockerfile @@ -0,0 +1,19 @@ +FROM openjdk:8u342 +# 作者 +MAINTAINER hsay +# VOLUME 指定了临时文件目录为/tmp。 +VOLUME /tmp +# 设置时区 +ENV TZ=Asia/Shanghai + +RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime +RUN echo "Asia/Shanghai" > /etc/timezone + +# 将jar包添加到容器中并更名为app.jar +ARG JAR_FILE +ADD target/coolstore-partner-web-1.0.0.jar /app.jar +#配置项目端口 + +# 运行jar包 +RUN bash -c 'touch /app.jar' +ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /app.jar $PARAMS"] \ No newline at end of file diff --git a/coolstore-partner-web/pom.xml b/coolstore-partner-web/pom.xml new file mode 100644 index 000000000..f39517ff5 --- /dev/null +++ b/coolstore-partner-web/pom.xml @@ -0,0 +1,57 @@ + + + + coolstore-partner-manage + com.coolstore + 1.0.0 + + 4.0.0 + + coolstore-partner-web + + + 8 + 8 + + + + + com.coolstore + coolstore-partner-service + + + org.springframework.boot + spring-boot-starter-test + + + org.springframework.boot + spring-boot-starter-web + + + com.aliyun.oss + aliyun-sdk-oss + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.sonarsource.scanner.maven + sonar-maven-plugin + + + org.jacoco + jacoco-maven-plugin + + + compile + + + \ No newline at end of file diff --git a/coolstore-partner-web/src/main/java/com/cool/store/PartnerWebApplication.java b/coolstore-partner-web/src/main/java/com/cool/store/PartnerWebApplication.java new file mode 100644 index 000000000..9f1f66664 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/PartnerWebApplication.java @@ -0,0 +1,43 @@ +package com.cool.store; + +import com.zaxxer.hikari.HikariDataSource; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; +import org.springframework.scheduling.annotation.EnableAsync; +import tk.mybatis.spring.annotation.MapperScan; + +import javax.sql.DataSource; + +/** + * @author zhangchenbiao + * @FileName: PartnerCWebApplication + * @Description: C端web层 + * @date 2023-05-17 11:28 + */ +@SpringBootApplication +@EnableAsync +@MapperScan("com.cool.store.mapper") +public class PartnerWebApplication { + + public static void main(String[] args) { + SpringApplication.run(PartnerWebApplication.class, args); + } + + @Bean + @Primary + @ConfigurationProperties("default.datasource") + public DataSourceProperties defaultDataSourceProperties() { + return new DataSourceProperties(); + } + + @Bean + @ConfigurationProperties("spring.datasource.hikari") + public DataSource defaultDataSource() { + return defaultDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build(); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/config/BodyWrapperFilter.java b/coolstore-partner-web/src/main/java/com/cool/store/config/BodyWrapperFilter.java new file mode 100644 index 000000000..623a40a60 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/config/BodyWrapperFilter.java @@ -0,0 +1,35 @@ +package com.cool.store.config; + +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + + +/** + * @Author: JCccc + * @Date: 2022-6-12 10:35 + * @Description: + */ +@Component +@Order(2) +public class BodyWrapperFilter implements Filter { + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + ServletRequest requestWrapper = null; + if (org.springframework.util.StringUtils.hasLength(servletRequest.getContentType()) && servletRequest.getContentType().contains("multipart/form-data")) { + filterChain.doFilter(servletRequest, servletResponse); + }else { + if (servletRequest instanceof HttpServletRequest) { + requestWrapper = new CustomHttpServletRequestWrapper((HttpServletRequest) servletRequest); + } + if (requestWrapper == null) { + filterChain.doFilter(servletRequest, servletResponse); + } else { + filterChain.doFilter(requestWrapper, servletResponse); + } + } + } +} \ No newline at end of file diff --git a/coolstore-partner-web/src/main/java/com/cool/store/config/CorsFilter.java b/coolstore-partner-web/src/main/java/com/cool/store/config/CorsFilter.java new file mode 100644 index 000000000..711926df2 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/config/CorsFilter.java @@ -0,0 +1,50 @@ +package com.cool.store.config; + + +import cn.hutool.http.HttpStatus; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @Description 跨域配置 + * @author Aaron + * @date 2020/1/9 + */ +@Component +@Order(1) +public class CorsFilter implements Filter { + + @Override + public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { + HttpServletResponse response = (HttpServletResponse) res; + HttpServletRequest reqs = (HttpServletRequest) req; + response.setHeader("Access-Control-Allow-Origin",reqs.getHeader("Origin")); + response.setHeader("Access-Control-Allow-Credentials", "true"); + response.setHeader("Access-Control-Allow-Methods", "POST, OPTIONS, GET, DELETE, PUT"); + response.setHeader("Access-Control-Max-Age", "36000"); + response.setHeader("Access-Control-Allow-Headers", "*"); + if (reqs.getMethod().equals("OPTIONS") || reqs.getMethod().equals("HEAD")) { + response.setStatus(HttpStatus.HTTP_OK); + return; + } + chain.doFilter(req, res); + } + + + @Override + public void init(FilterConfig filterConfig) { + //do nothing + } + + + @Override + public void destroy() { + //do nothing + } + +} \ No newline at end of file diff --git a/coolstore-partner-web/src/main/java/com/cool/store/config/CustomHttpServletRequestWrapper.java b/coolstore-partner-web/src/main/java/com/cool/store/config/CustomHttpServletRequestWrapper.java new file mode 100644 index 000000000..0e1a4d64d --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/config/CustomHttpServletRequestWrapper.java @@ -0,0 +1,66 @@ +package com.cool.store.config; + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.io.*; +import java.nio.charset.StandardCharsets; + +/** + * @Author: JCccc + * @Date: 2022-6-12 10:36 + * @Description: 重写一个自己的 RequestWrapper 拿出body给自己用 + */ + +public class CustomHttpServletRequestWrapper extends HttpServletRequestWrapper { + private byte[] body; + public CustomHttpServletRequestWrapper(HttpServletRequest request) throws IOException { + super(request); + BufferedReader reader = request.getReader(); + try (StringWriter writer = new StringWriter()) { + int read; + char[] buf = new char[1024 * 8]; + while ((read = reader.read(buf)) != -1) { + writer.write(buf, 0, read); + } + this.body = writer.getBuffer().toString().getBytes(); + } + } + public String getBody(){ + return new String(body, StandardCharsets.UTF_8); + } + @Override + public ServletInputStream getInputStream() { + final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body); + return new ServletInputStream() { + @Override + public boolean isFinished() { + return false; + } + @Override + public boolean isReady() { + return false; + } + + /** + * Sets the ReadListener for this ServletInputStream. + * @param readListener The non-blocking IO read listener + * + */ + @Override + public void setReadListener(ReadListener readListener) { + //do nothing + } + + @Override + public int read() { + return byteArrayInputStream.read(); + } + }; + } + @Override + public BufferedReader getReader() { + return new BufferedReader(new InputStreamReader(this.getInputStream())); + } +} \ No newline at end of file diff --git a/coolstore-partner-web/src/main/java/com/cool/store/config/ServletContextConfig.java b/coolstore-partner-web/src/main/java/com/cool/store/config/ServletContextConfig.java new file mode 100644 index 000000000..30fab16a2 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/config/ServletContextConfig.java @@ -0,0 +1,68 @@ +package com.cool.store.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.web.servlet.HandlerExceptionResolver; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; + +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: ServletContextConfig + * @Description: + * @date 2023-06-08 16:28 + */ +@Configuration +public class ServletContextConfig extends WebMvcConfigurationSupport { + + /** + * 配置servlet处理 + */ + @Override + public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { + configurer.enable(); + } + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("*") + .allowCredentials(true) + .allowedMethods("GET", "POST", "OPTIONS", "PUT", "DELETE") + .maxAge(3600); + } + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/**").addResourceLocations("classpath:/static/"); + registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/"); + super.addResourceHandlers(registry); + } + + /** + * 消息改写器 + * @param converters + */ + @Override + public void configureMessageConverters(List> converters) { + //do nothing + } + + /** + * 统一异常处理 + * + * @param exceptionResolvers + */ + @Override + public void configureHandlerExceptionResolvers(List exceptionResolvers) { + //do nothing + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/config/SignValidateFilter.java b/coolstore-partner-web/src/main/java/com/cool/store/config/SignValidateFilter.java new file mode 100644 index 000000000..d7702cb72 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/config/SignValidateFilter.java @@ -0,0 +1,155 @@ +package com.cool.store.config; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; +import com.cool.store.context.PartnerUserHolder; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.WechatMiniAppService; +import com.cool.store.utils.*; +import com.cool.store.utils.poi.StringUtils; +import com.cool.store.vo.PartnerUserInfoVO; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.annotation.Order; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; +import org.springframework.util.AntPathMatcher; + +import javax.annotation.Resource; +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + +/** + * @author ydw + * @Description 权限校验 + * @date 2020/1/15 + */ +@Component +@Order(3) +@Slf4j +public class SignValidateFilter implements Filter { + + @Resource + private WechatMiniAppService wechatMiniAppService; + + @Value("${signKey}") + private String signKey; + + private static AntPathMatcher matcher = new AntPathMatcher(); + + private static List patternList = + Lists.newArrayList( + "/web/check/ok", + "/check/ok", + "/xfsg/doc.html", + "/xfsg/favicon.ico", + "/xfsg/v2/api-docs","/**/test/**", + "/xfsg/mini/program/oss/getUploadFileConfig", + "/xfsg/mini/program/v1/partnerManage/partner/getIdentityCardInfo", + "/**/swagger*/**", + "/**/webjars/**", + "/xfsg/mini/program/v1/partnerManage/openArea/areaApplyQuery", + "/xfsg/**/api/audit/result", + "/xfsg/**/api/license", + "/xfsg/mini/line/getRegionPayPic" + + ); + + + /** + * @param uri + * @return boolean + * @throws + * @Title excludePath + * @Description 是否是放行的请求 + */ + private boolean excludePath(String uri) { + for (String pattern : patternList) { + if (matcher.match(pattern, uri)) { + return true; + } + } + return false; + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + //do nothing + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + HttpServletRequest request = (HttpServletRequest) servletRequest; + String uri = request.getRequestURI(); + if(uri.startsWith("/xfsg/pc")){ + filterChain.doFilter(servletRequest, servletResponse); + return; + } + MDC.put(CommonConstants.REQUEST_ID, UUIDUtils.get32UUID()); + HttpServletResponse response = (HttpServletResponse) servletResponse; + + CustomHttpServletRequestWrapper wrapper = (CustomHttpServletRequestWrapper) request; + String method = request.getMethod(); + String userStr = ""; + boolean isInWhiteList = excludePath(uri); + log.info("url:{}, method:{}", uri, method); + if ( !isInWhiteList && !method.equals("OPTIONS")) { + String params = ""; + if("GET".equalsIgnoreCase(method)){ + params = request.getQueryString(); + }else if("POST".equalsIgnoreCase(method)){ + params = wrapper.getBody(); + } + log.info("params:{}", params); + String sign = request.getHeader("SIGN"); + String nonce = request.getHeader("NONCE"); + String timestamp = request.getHeader("TIMESTAMP"); + String aesPhone = request.getHeader("PHONE"); + String openid = request.getHeader("OPENID"); + if(StringUtils.isAnyBlank(sign, nonce, timestamp, aesPhone, openid)){ + throw new ServiceException(ErrorCodeEnum.SIGN_FAIL); + } + log.info("aesPhone:{}, signKey:{}", aesPhone, signKey); + String phone = AESDecryptor.decrypt(aesPhone, signKey); + String plaintextOpenid = AESDecryptor.decrypt(openid, signKey); + String md5Value = phone + Md5Utils.md5(Md5Utils.md5(plaintextOpenid)); + log.info("sign:{}, nonce:{}, timestamp:{},aesPhone:{}, openid:{}, 解密后的手机号:{}, md5Value:{}, 明文plaintextOpenid:{}", + sign, nonce, timestamp, aesPhone, openid, phone, md5Value, plaintextOpenid); + String signStr = timestamp + nonce + params + signKey + md5Value; + String newSign = Sha1Utils.getSha1(signStr.getBytes()); + log.info("signStr: {}, newSign: {}", signStr, newSign); + // 前后端验签不等 + if (!newSign.equals(sign)) { + response.setStatus(HttpStatus.OK.value()); + response.setContentType("application/json;charset=UTF-8"); + response.getWriter().write(JSON.toJSONString(ResponseResult.fail(ErrorCodeEnum.SIGN_FAIL))); + return; + } + PartnerUserInfoVO partnerUserInfoVO = wechatMiniAppService.getUserInfo(phone, plaintextOpenid); + if(partnerUserInfoVO != null){ + userStr = JSONObject.toJSONString(partnerUserInfoVO); + log.info("userStr:{}", userStr); + } + } + try { + PartnerUserHolder.setUser(userStr); + filterChain.doFilter(servletRequest, servletResponse); + } finally { + PartnerUserHolder.removeUser(); + MDC.clear(); + } + } + + @Override + public void destroy() { + //do nothing + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/config/TRTCCallbackFilter.java b/coolstore-partner-web/src/main/java/com/cool/store/config/TRTCCallbackFilter.java new file mode 100644 index 000000000..fc5a6acf0 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/config/TRTCCallbackFilter.java @@ -0,0 +1,77 @@ +package com.cool.store.config; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.Base64; +import java.util.stream.Collectors; + +/** + * 对腾讯云音视频回调单独验签 + */ +@Component +@Order(4) +@Slf4j +public class TRTCCallbackFilter implements Filter { + + @Value("${trtc.video.callback.secretKey:null}") + private String secretkey; + + @Override + public void init(FilterConfig filterConfig) { + //do nothing + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + HttpServletRequest request = (HttpServletRequest) servletRequest; + String uri = request.getRequestURI(); + //不是腾讯云音视频回调请求 + if (!uri.startsWith("/partner/pc/video")) { + filterChain.doFilter(servletRequest, servletResponse); + return; + } + if (!"POST".equals(request.getMethod())) { + return; + } + String requestBody = request.getReader().lines().collect(Collectors.joining()); + //回调的签名 + String sign = request.getHeader("Sign"); + //服务器端生成的签名 + String newSign = ""; + try { + newSign = getResultSign(secretkey, requestBody); + } catch (Exception e) { + log.error("腾讯云音视频回调签名生成错误,e:\t{}", e.getMessage()); + return; + } + if (StringUtils.isEmpty(sign) || !newSign.equals(sign)) { + log.error("腾讯云音视频回调签名错误, sign:\t{}, newSign:\t{}", sign, newSign); + return; + } + filterChain.doFilter(servletRequest, servletResponse); + } + + @Override + public void destroy() { + //do nothing + } + + private String getResultSign(String key, String body) throws NoSuchAlgorithmException, InvalidKeyException { + Mac hmacSha256 = Mac.getInstance("HmacSHA256"); + SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "HmacSHA256"); + hmacSha256.init(secretKey); + return Base64.getEncoder().encodeToString(hmacSha256.doFinal(body.getBytes())); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/config/TokenValidateFilter.java b/coolstore-partner-web/src/main/java/com/cool/store/config/TokenValidateFilter.java new file mode 100644 index 000000000..beaac2820 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/config/TokenValidateFilter.java @@ -0,0 +1,138 @@ +package com.cool.store.config; + +import com.alibaba.fastjson.JSON; +import com.cool.store.constants.CommonConstants; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.response.ResponseResult; +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.utils.UUIDUtils; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.MDC; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.Order; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; +import org.springframework.util.AntPathMatcher; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.text.MessageFormat; +import java.util.List; +import java.util.Objects; + +/** + * @author ydw + * @Description 权限校验 + * @date 2020/1/15 + */ +@Component +@Order(3) +@Slf4j +public class TokenValidateFilter implements Filter { + + @Autowired + private RedisUtilPool redisUtilPool; + + private static AntPathMatcher matcher = new AntPathMatcher(); + + private static List patternList = + + Lists.newArrayList("/web/check/ok","/check/ok", + "/xfsg/doc.html","/xfsg/v2/api-docs","/xfsg/favicon.ico","/**/test/**","/xfsg/pc/feiShuLogin","/xfsg/pc/oss/getUploadFileConfig", + "/**/swagger*/**", "/**/webjars/**", + //腾讯音视频回调,单独做验签 + "/xfsg/pc/video/**", + "/xfsg/pc/vod/callback", + "/xfsg/pc/sysRole/**", + "/xfsg/**/api/audit/result", + "/xfsg/pc/video/**", + "/xfsg/**/api/license" + + + ); + + /** + * @param uri + * @return boolean + * @throws + * @Title excludePath + * @Description 是否是放行的请求 + */ + private boolean excludePath(String uri) { + for (String pattern : patternList) { + if (matcher.match(pattern, uri)) { + return true; + } + } + return false; + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + //do nothing + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + HttpServletRequest reqs = (HttpServletRequest) servletRequest; + String uri = reqs.getRequestURI(); + if(uri.startsWith("/xfsg/mini")){ + filterChain.doFilter(servletRequest, servletResponse); + return; + } + MDC.put(CommonConstants.REQUEST_ID, UUIDUtils.get32UUID()); + HttpServletResponse response = (HttpServletResponse) servletResponse; + String method = reqs.getMethod(); + String userStr = ""; + LoginUserInfo currentUser = null; + boolean isInWhiteList = excludePath(uri); + String accessToken = reqs.getHeader("accessToken"); + String key = MessageFormat.format(CommonConstants.ACCESS_TOKEN_KEY, accessToken); + if(StringUtils.isNotBlank(accessToken)){ + userStr = redisUtilPool.getString(key); + if(StringUtils.isNotBlank(userStr)){ + currentUser = JSON.parseObject(userStr, LoginUserInfo.class); + } + } + log.info("url:{}, method:{}", uri, method); + if ( !isInWhiteList && !method.equals("OPTIONS")) { + if (StringUtils.isEmpty(accessToken)) { + response.setStatus(HttpStatus.OK.value()); + response.getWriter().write(JSON.toJSONString( + ResponseResult.fail(ErrorCodeEnum.ACCESS_TOKEN_INVALID))); + return; + } + if (Objects.isNull(currentUser)) { + response.setStatus(HttpStatus.OK.value()); + response.getWriter().write(JSON.toJSONString( + ResponseResult.fail(ErrorCodeEnum.ACCESS_TOKEN_INVALID))); + return; + } + log.info("access_token:{}, userId:{}, username:{}", accessToken, currentUser.getUserId(), currentUser.getName()); + } + if(StringUtils.isBlank(userStr) && !isInWhiteList){ + response.setStatus(HttpStatus.OK.value()); + response.getWriter().write(JSON.toJSONString( + ResponseResult.fail(ErrorCodeEnum.ACCESS_TOKEN_INVALID))); + return; + } + try { + CurrentUserHolder.setUser(userStr); + filterChain.doFilter(servletRequest, servletResponse); + } finally { + CurrentUserHolder.removeUser(); + MDC.clear(); + } + } + + @Override + public void destroy() { + //do nothing + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/config/XxlJobConfig.java b/coolstore-partner-web/src/main/java/com/cool/store/config/XxlJobConfig.java new file mode 100644 index 000000000..7b63b9b33 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/config/XxlJobConfig.java @@ -0,0 +1,58 @@ +package com.cool.store.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +/** + * @author zhangchenbiao + * @FileName: XxlJobConfig + * @Description: xxljob 配置信息 + * @date 2021-11-12 15:26 + */ +@Configuration +@ComponentScan(basePackages = "com.cool.store.job") +public class XxlJobConfig { + + private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class); + + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.executor.appname}") + private String appName; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + logger.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appName); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + return xxlJobSpringExecutor; + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/config/swagger/Swagger2Config.java b/coolstore-partner-web/src/main/java/com/cool/store/config/swagger/Swagger2Config.java new file mode 100644 index 000000000..171d63ab2 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/config/swagger/Swagger2Config.java @@ -0,0 +1,82 @@ +package com.cool.store.config.swagger; + +import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import org.apache.commons.lang3.StringUtils; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import springfox.documentation.RequestHandler; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Parameter; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author zhangchenbiao + * @description: + * @date 2023/05/15 02:52 + */ +@Profile({"local", "test", "pre"}) +@Configuration +@EnableSwagger2 +@EnableKnife4j +public class Swagger2Config { + + /** + * 扫描接口地址的包名 + */ + public static final String BASE_PACKAGE = "com.cool.store.controller"; + + private ApiInfo getApiInfo() { + return new ApiInfoBuilder() + .title("xfsg") + .description("接口文档") + .version("1.0") + .build(); + } + + private Docket createDocket (String groupName, String... packages){ + List pars = getParameters(); + return new Docket(DocumentationType.SWAGGER_2) + .enable(Boolean.TRUE) + .apiInfo(this.getApiInfo()) + .groupName(groupName) + .select() + .apis(this.scanBasePackage(packages)) + //.paths(PathSelectors.regex(".*/getPartnerIntentInfo|.*/queryPartnerClerkInfoList|.*/queryPartnerBaseInfo")) + .build() + .globalOperationParameters(pars); + } + + private List getParameters() { + return new ArrayList<>(); + } + + private Predicate scanBasePackage(final String... controllerPack) { + Predicate predicate = null; + for (String strBasePackage : controllerPack) { + if(StringUtils.isNotBlank(strBasePackage)){ + Predicate tempPredicate = RequestHandlerSelectors.basePackage(strBasePackage); + predicate = predicate == null ? tempPredicate : Predicates.or(tempPredicate,predicate); + } + } + return predicate; + } + + + @Bean + public Docket allApi() { + return this.createDocket("全部", BASE_PACKAGE); + } + +} + diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/AssessmentTemplateController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/AssessmentTemplateController.java new file mode 100644 index 000000000..71ff0a674 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/AssessmentTemplateController.java @@ -0,0 +1,39 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.AssessmentTemplateService; +import com.cool.store.vo.AssessmentTemplateVO; +import com.cool.store.vo.desk.IntendPendingVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/25 11:41 + * @Version 1.0 + */ +@Api(tags = "模板列表") +@RestController +@RequestMapping("pc/template") +public class AssessmentTemplateController { + + @Resource + AssessmentTemplateService assessmentTemplateService; + + @ApiOperation("检查项模板列表type 0 1 2 3") + @GetMapping("/listByType") + public ResponseResult> intendPendingList(@RequestParam(value = "type",required = true)Integer type) { + return ResponseResult.success(assessmentTemplateService.listByType(type)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/AuditStatusController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/AuditStatusController.java new file mode 100644 index 000000000..50e95d9b2 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/AuditStatusController.java @@ -0,0 +1,57 @@ +package com.cool.store.controller.webb; + + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.AuditCheckRequest; +import com.cool.store.request.AuditDetailRequest; +import com.cool.store.response.AuditDetailResponse; +import com.cool.store.response.CheckListResponse; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.AuditStatusService; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Date; + +@Api(tags = "稽核相关") +@RestController +@RequestMapping("pc/audit/stage") +public class AuditStatusController { + + @Resource + AuditStatusService auditStatusService; + + @ApiOperation("稽核") + @PostMapping("/check") + public ResponseResult check(@RequestBody AuditCheckRequest request) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(auditStatusService.audit(request,user)); + } + + @ApiOperation("查看/稽核按钮") + @PostMapping("/detail") + public ResponseResult detail(@RequestBody AuditDetailRequest request) { + return ResponseResult.success(auditStatusService.detail(request)); + } + + + @ApiOperation("稽核列表") + @GetMapping("/checkList") + public ResponseResult> checkList(@RequestParam(value = "partnerNameOrPhone",required = false) String partnerNameOrPhone, + @RequestParam(value = "startTime",required = false) String startTime, + @RequestParam(value = "endTime",required = false) String endTime, + @RequestParam(value = "region",required = false) String region, + @RequestParam(value = "checkStatus",required = false) Integer checkStatus, + @RequestParam(value = "checkStage",defaultValue = "1") Integer checkStage, + @RequestParam(value = "pageNum",defaultValue = "1") Integer pageNum, + @RequestParam(value = "pageSize",defaultValue = "10")Integer pageSize) { + + return ResponseResult.success(auditStatusService.checkList(partnerNameOrPhone,startTime,endTime,region,checkStatus,checkStage,pageNum,pageSize)); + } + + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ContentController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ContentController.java new file mode 100644 index 000000000..cdd1fb7cb --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ContentController.java @@ -0,0 +1,72 @@ +package com.cool.store.controller.webb; + +import com.cool.store.dto.content.*; +import com.cool.store.entity.HyContentInfoDO; +import com.cool.store.exception.ApiException; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.ContentService; +import com.cool.store.vo.HyContentInfoVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("pc/news") +@Api(tags = "PC动态") +@Slf4j +public class ContentController { + + @Autowired + private ContentService contentService; + + @PostMapping("/queryTitles") + @ApiOperation("搜索标题是否重复") + public ResponseResult queryTitles(@RequestBody ContentQueryTitlesDto title) { + return ResponseResult.success(contentService.queryTitles(title.getTitle())); + } + + @PostMapping("/add") + @ApiOperation("新增动态") + public ResponseResult addContent(@RequestBody ContentAddDto dto) throws ApiException { + return ResponseResult.success(contentService.addNews(dto)); + } + + @PostMapping("/delete") + @ApiOperation("删除动态") + public ResponseResult deleteContent(@RequestBody ContentDelDto dto) { + contentService.deleteContent(dto.getContentId()); + return ResponseResult.success(); + } + + @PostMapping("/modify") + @ApiOperation("修改动态") + public ResponseResult updateContent(@RequestBody ContentUpdateDto dto) throws ApiException { + contentService.updateContent(dto); + return ResponseResult.success(); + } + + @PostMapping("/queryContentList") + @ApiOperation("查询动态列表") + public ResponseResult> queryContentList(@RequestBody ContentQueryListDto dto) { + PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); + List list = contentService.queryContentList(dto); + PageInfo page = new PageInfo<>(list); + return ResponseResult.success(page); + } + + @PostMapping("/detail") + @ApiOperation("动态详情") + public ResponseResult queryContentInfo(@RequestBody ContentQueryDetailDto dto) { + return ResponseResult.success(contentService.queryContentInfo(dto.getContentId())); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DeskController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DeskController.java new file mode 100644 index 000000000..62252f8a6 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/DeskController.java @@ -0,0 +1,145 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dto.InvestmentCountDTO; +import com.cool.store.dto.PendingCountDTO; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.DeskService; +import com.cool.store.vo.desk.*; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @Author suzhuhong + * @Date 2024/3/26 17:49 + * @Version 1.0 + */ +@Api(tags = "工作台接口") +@RestController +@RequestMapping("pc/desk") +public class DeskController { + + + @Resource + DeskService deskService; + + @ApiOperation("待处理-加盟申请") + @GetMapping("/intendPendingList") + public ResponseResult> intendPendingList(@RequestParam(value = "pageNumber",required = true,defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",required = true,defaultValue = "10")Integer pageSize) { + LoginUserInfo userInfo = CurrentUserHolder.getUser(); + return ResponseResult.success(deskService.intendPendingList(pageNumber,pageSize,userInfo.getUserId())); + } + + @ApiOperation("待处理-邀约面谈") + @GetMapping("/interviewPendingList") + public ResponseResult> interviewPendingList(@RequestParam(value = "pageNumber",required = true,defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",required = true,defaultValue = "10")Integer pageSize) { + LoginUserInfo userInfo = CurrentUserHolder.getUser(); + return ResponseResult.success(deskService.interviewPendingList(pageNumber,pageSize,userInfo.getUserId())); + } + + @ApiOperation("待处理-一审") + @GetMapping("/firstInterviewPendingList") + public ResponseResult> firstInterviewPendingList(@RequestParam(value = "pageNumber",required = true,defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",required = true,defaultValue = "10")Integer pageSize) { + LoginUserInfo userInfo = CurrentUserHolder.getUser(); + return ResponseResult.success(deskService.firstInterviewPendingList(pageNumber,pageSize,userInfo)); + } + + @ApiOperation("待处理-二审") + @GetMapping("/secondInterviewPendingList") + public ResponseResult> secondInterviewPendingList(@RequestParam(value = "pageNumber",required = true,defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",required = true,defaultValue = "10")Integer pageSize) { + LoginUserInfo userInfo = CurrentUserHolder.getUser(); + return ResponseResult.success(deskService.secondInterviewPendingList(pageNumber,pageSize,userInfo)); + } + + + @ApiOperation("待处理-缴纳意向金") + @GetMapping("/payStagePendingList") + public ResponseResult> payStagePendingList(@RequestParam(value = "pageNumber",required = true,defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",required = true,defaultValue = "10")Integer pageSize) { + LoginUserInfo userInfo = CurrentUserHolder.getUser(); + return ResponseResult.success(deskService.payStagePendingList(pageNumber,pageSize,userInfo)); + } + + @ApiOperation("待处理-意向协议") + @GetMapping("/signingPendingList") + public ResponseResult> signingPendingList(@RequestParam(value = "pageNumber",required = true,defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",required = true,defaultValue = "10")Integer pageSize) { + LoginUserInfo userInfo = CurrentUserHolder.getUser(); + return ResponseResult.success(deskService.signingPendingList(pageNumber,pageSize,userInfo)); + } + + @ApiOperation("待处理-实训体验") + @GetMapping("/storeExperiencePendingList") + public ResponseResult> storeExperiencePendingList(@RequestParam(value = "pageNumber",required = true,defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",required = true,defaultValue = "10")Integer pageSize) { + LoginUserInfo userInfo = CurrentUserHolder.getUser(); + return ResponseResult.success(deskService.storeExperiencePendingList(pageNumber,pageSize,userInfo)); + } + + + @ApiOperation("待处理-数据") + @GetMapping("/getPendingCount") + public ResponseResult getPendingCount(@RequestParam(value = "pageNumber",required = true,defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",required = true,defaultValue = "10")Integer pageSize) { + LoginUserInfo userInfo = CurrentUserHolder.getUser(); + return ResponseResult.success(deskService.getPendingCount(userInfo)); + } + + + @ApiOperation("招商经理-我的数据") + @GetMapping("/getInvestmentCount") + public ResponseResult getInvestmentCount() { + LoginUserInfo userInfo = CurrentUserHolder.getUser(); + return ResponseResult.success(deskService.getInvestmentCount(userInfo)); + } + + + @ApiOperation("待处理-系统建店") + @GetMapping("/systemBuildStorePendingList") + public ResponseResult> systemBuildStorePendingList(@RequestParam(value = "pageNumber",required = true,defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",required = true,defaultValue = "10")Integer pageSize) { + LoginUserInfo userInfo = CurrentUserHolder.getUser(); + return ResponseResult.success(deskService.systemBuildStorePendingList(pageNumber,pageSize,userInfo)); + } + @ApiOperation("待处理-支付加盟费保证金") + @GetMapping("/payFranchiseFeesPendingList") + public ResponseResult> payFranchiseFeesPendingList(@RequestParam(value = "pageNumber",required = true,defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",required = true,defaultValue = "10")Integer pageSize) { + LoginUserInfo userInfo = CurrentUserHolder.getUser(); + return ResponseResult.success(deskService.payFranchiseFeesPendingList(pageNumber,pageSize,userInfo)); + } + @ApiOperation("待处理-签约加盟合同") + @GetMapping("/signingOfFranchiseContractPendingList") + public ResponseResult> signingOfFranchiseContractPendingList(@RequestParam(value = "pageNumber",required = true,defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",required = true,defaultValue = "10")Integer pageSize) { + LoginUserInfo userInfo = CurrentUserHolder.getUser(); + return ResponseResult.success(deskService.signingOfFranchiseContractPendingList(pageNumber,pageSize,userInfo)); + } + @ApiOperation("待处理-开店运营方案") + @GetMapping("/openingAndOperationPlanPendingList") + public ResponseResult> openingAndOperationPlanPendingList(@RequestParam(value = "pageNumber",required = true,defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",required = true,defaultValue = "10")Integer pageSize) { + LoginUserInfo userInfo = CurrentUserHolder.getUser(); + return ResponseResult.success(deskService.openingAndOperationPlanPendingList(pageNumber,pageSize,userInfo)); + } + @ApiOperation("待处理-首批订货清单") + @GetMapping("/firstOrderListPendingList") + public ResponseResult> firstOrderListPendingList(@RequestParam(value = "pageNumber",required = true,defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",required = true,defaultValue = "10")Integer pageSize) { + LoginUserInfo userInfo = CurrentUserHolder.getUser(); + return ResponseResult.success(deskService.firstOrderListPendingList(pageNumber,pageSize,userInfo)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/EmployeeTrainingController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/EmployeeTrainingController.java new file mode 100644 index 000000000..5b76d016b --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/EmployeeTrainingController.java @@ -0,0 +1,139 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.request.*; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.EmployeeTrainingService; +import com.cool.store.vo.AssessmentUserTrainingVO; +import com.cool.store.vo.EmployeeTrainingDetailVO; +import com.cool.store.vo.EmployeeTrainingVO; +import com.cool.store.vo.EmployeeUserTrainingVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author byd + * @date 2024-04-30 10:15 + */ +@Api(tags = "PC员工培训") +@RestController +@RequestMapping("pc/employeeTraining") +public class EmployeeTrainingController { + + @Resource + private EmployeeTrainingService employeeTrainingService; + + + @ApiOperation("培训员工列表") + @GetMapping("/trainingListByShopId") + @ApiImplicitParams({ + @ApiImplicitParam(name = "shopId", value = "店铺id", required = true) + }) + public ResponseResult> trainingListByShopId(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(employeeTrainingService.trainingListByShopId(shopId)); + } + + @ApiOperation("待训员工列表") + @PostMapping("/employeeTrainingList") + public ResponseResult> employeeTrainingList(@RequestBody EmployeeTrainingRequest employeeTrainingRequest) { + return ResponseResult.success(employeeTrainingService.employeeTrainingList(CurrentUserHolder.getUserId(), employeeTrainingRequest)); + } + + @ApiOperation("员工培训详情") + @GetMapping("/employeeTrainingDetail") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "id", required = true) + }) + public ResponseResult employeeTrainingDetail(@RequestParam("id") Long id) { + return ResponseResult.success(employeeTrainingService.employeeTrainingDetail(id)); + } + + @ApiOperation("员工培训--分配") + @PostMapping("/distribution") + public ResponseResult distribution(@RequestBody EmployeeTrainingDetailRequest request) { + employeeTrainingService.distribution(request); + return ResponseResult.success(Boolean.TRUE); + } + + @ApiOperation("培训进度-列表") + @PostMapping("/trainingScheduleList") + public ResponseResult> trainingScheduleList(@RequestBody EmployeeTrainingRequest employeeTrainingRequest) { + employeeTrainingRequest.setAssignFlag(Boolean.TRUE); + return ResponseResult.success(employeeTrainingService.employeeTrainingList(CurrentUserHolder.getUserId(), employeeTrainingRequest)); + } + + + @ApiOperation("培训-教练员-员工列表") + @GetMapping("/trainerUserList") + @ApiImplicitParams({ + @ApiImplicitParam(name = "status", value = "带训状态 0-未完成 1-已完成"), + @ApiImplicitParam(name = "pageNum", value = "分页页数"), + @ApiImplicitParam(name = "pageSize", value = "分页大小"), + }) + public ResponseResult> trainerUserList(@RequestParam(value = "status", required = false) Integer status, + @RequestParam(value = "pageNum" ,defaultValue = "1")Integer pageNum, + @RequestParam(value = "pageSize",defaultValue = "10")Integer pageSize) { + return ResponseResult.success(employeeTrainingService.trainerUserList(CurrentUserHolder.getUserId(), status, pageNum, pageSize)); + } + + @ApiOperation("培训-教练员-员工带训详情") + @RequestMapping("/trainerUserDetail") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "用户id", required = true) + }) + public ResponseResult trainerUserDetail(Long id) { + return ResponseResult.success(employeeTrainingService.trainerUserDetail(id)); + } + + @ApiOperation("培训-教练员-提交培训") + @PostMapping("/trainerUserCommit") + public ResponseResult trainerUserCommit(@RequestBody EmployeeTrainingCommitListRequest request) { + employeeTrainingService.trainerUserCommit(request); + return ResponseResult.success(Boolean.TRUE); + } + + + @ApiOperation("培训-战区经理-考核员工列表") + @PostMapping("/assessmentUserList") + public ResponseResult> assessmentUserList(@RequestBody EmployeeAssessmentRequest request) { + return ResponseResult.success(employeeTrainingService.assessmentUserList(CurrentUserHolder.getUserId(), request)); + } + + @ApiOperation("培训-督导-考核员工列表") + @PostMapping("/supervisorUserList") + public ResponseResult> supervisorUserList(@RequestBody EmployeeAssessmentRequest request) { + return ResponseResult.success(employeeTrainingService.assessmentUserList(CurrentUserHolder.getUserId(), request)); + } + + @ApiOperation("培训-战区经理-员工考核详情") + @RequestMapping("/assessmentUserDetail") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "员工id", required = true) + }) + public ResponseResult assessmentUserDetail(Long id) { + return ResponseResult.success(employeeTrainingService.assessmentUserDetail(id)); + } + + @ApiOperation("培训-实训考核-转交") + @PostMapping("/turn") + public ResponseResult turn(@RequestBody EmployeeAssessmentTurnRequest request) { + employeeTrainingService.turn(request.getId(), CurrentUserHolder.getUserId(), request.getTurnUserId()); + return ResponseResult.success(Boolean.TRUE); + } + + @ApiOperation("培训-实训考核-提交考核结果") + @PostMapping("/assessmentUserCommit") + public ResponseResult assessmentUserCommit(@RequestBody EmployeeAssessmentCommitListRequest request) { + employeeTrainingService.assessmentUserCommit(request); + return ResponseResult.success(Boolean.TRUE); + } + + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/KdzApiController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/KdzApiController.java new file mode 100644 index 000000000..c62459ae0 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/KdzApiController.java @@ -0,0 +1,76 @@ +package com.cool.store.controller.webb; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.request.AuditResultRequest; +import com.cool.store.request.LicenseBizContentRequest; +import com.cool.store.request.XfsgOpenApiRequest; +import com.cool.store.response.LicenseApiResponse; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.KdzApiService; +import com.cool.store.utils.EncryptUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@Api(tags = "酷店掌API") +@RestController +@RequestMapping("/{enterprise-id}/api") +@Slf4j +public class KdzApiController { + + String allowEnterpriseId = "45f92210375346858b6b6694967f44de,e17cd2dc350541df8a8b0af9bd27f77d,28c20a7b42b94171acb1ab3f631d69e1,9ee7b8b48e2447f9a2075b5a46e94d08"; + + @Resource + KdzApiService kdzApiService; + + @ApiOperation("审核结果") + @PostMapping("/audit/result") + public ResponseResult auditResult(@PathVariable(value = "enterprise-id") String eid, + @RequestBody XfsgOpenApiRequest request) { + log.info("auditResult requestBody :{}", JSONObject.toJSONString(request)); + if (!verifyMD5(request, eid)) { + log.error("验签失败,request:{};eid:{}", JSONObject.toJSONString(request), eid); + return ResponseResult.fail(ErrorCodeEnum.VERIFY_MD5_FALSE); + } + if (eid == null || request.getBizContent() == null) { + log.error("参数校验失败,BizContent:{}", JSONObject.toJSONString(request.getBizContent())); + return ResponseResult.fail(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + AuditResultRequest auditResultRequest = JSONObject.parseObject(request.getBizContent(), AuditResultRequest.class); + return ResponseResult.success(kdzApiService.auditResult(auditResultRequest)); + } + + @ApiOperation("证照信息回调") + @PostMapping("/license") + public ResponseResult license(@PathVariable(value = "enterprise-id") String eid, + @RequestBody XfsgOpenApiRequest request) { + log.info("license requestBody :{}", JSONObject.toJSONString(request)); + if (!verifyMD5(request, eid)) { + log.error("验签失败,request:{};eid:{}", JSONObject.toJSONString(request), eid); + return ResponseResult.fail(ErrorCodeEnum.VERIFY_MD5_FALSE); + } + if (eid == null || request.getBizContent() == null) { + log.error("参数校验失败,BizContent:{}", JSONObject.toJSONString(request.getBizContent())); + return ResponseResult.fail(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + LicenseBizContentRequest storeNum = JSONObject.parseObject(request.getBizContent(), LicenseBizContentRequest.class); + return ResponseResult.success(kdzApiService.license(storeNum.getStoreNum())); + } + + + public static boolean verifyMD5(XfsgOpenApiRequest request, String eid) { + //签名 + StringBuffer sb = new StringBuffer(); + //用户唯一标识id + sb.append("timestamp=").append(request.getTimestamp()).append("&"); + //企业唯一标识enterpriseId + sb.append("enterpriseId=").append(eid); + String md5 = EncryptUtil.xfsgMd5(sb.toString()); + return md5.equals(request.getSign()); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/LabelController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/LabelController.java new file mode 100644 index 000000000..f1725538a --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/LabelController.java @@ -0,0 +1,69 @@ +package com.cool.store.controller.webb; + +import com.cool.store.dto.label.LabelAddDTO; +import com.cool.store.dto.label.LabelDeleteDTO; +import com.cool.store.dto.label.LabelListDTO; +import com.cool.store.dto.label.LabelUpdateDTO; +import com.cool.store.exception.ApiException; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.LabelService; +import com.cool.store.vo.LabelGroupVO; +import com.cool.store.vo.LabelListVo; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author Fun Li 2023/8/10 14:20 + * @version 1.0 + */ +@Api(tags = "标签管理") +@RestController +@RequestMapping("pc/label") +public class LabelController { + + @Autowired + private LabelService labelService; + + @ApiOperation("标签列表查询") + @PostMapping("/list") + public ResponseResult> getLabelList(@RequestBody LabelListDTO dto) { + PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); + List result = labelService.getLabelList(dto); + return ResponseResult.success(new PageInfo<>(result)); + } + + @ApiOperation("查询标签组及子标签列表") + @GetMapping("/labelGroupAndLabelList") + public ResponseResult> getAllLabelList() { + List result = labelService.getAllGroupAndLabelList(); + return ResponseResult.success(result); + } + + @ApiOperation("新增标签") + @PostMapping("/add") + public ResponseResult addLabel(@RequestBody LabelAddDTO dto) throws ApiException { + labelService.addLabel(dto); + return ResponseResult.success(); + } + + @ApiOperation("修改标签") + @PostMapping("/edit") + public ResponseResult updateLabel(@RequestBody LabelUpdateDTO dto) throws ApiException { + labelService.updateLabel(dto); + return ResponseResult.success(); + } + + @ApiOperation("删除标签") + @PostMapping("/delete") + public ResponseResult deleteLabel(@RequestBody LabelDeleteDTO dto) { + labelService.deleteLabel(dto); + return ResponseResult.success(); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/LabelGroupController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/LabelGroupController.java new file mode 100644 index 000000000..7c436c64f --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/LabelGroupController.java @@ -0,0 +1,75 @@ +package com.cool.store.controller.webb; + +import com.cool.store.dto.label.LabelGroupAddDTO; +import com.cool.store.dto.label.LabelGroupDeleteDTO; +import com.cool.store.dto.label.LabelGroupListDTO; +import com.cool.store.dto.label.LabelGroupUpdateDTO; +import com.cool.store.exception.ApiException; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.LabelGroupService; +import com.cool.store.vo.LabelGroupListVo; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author Fun Li 2023/8/10 10:54 + * @version 1.0 + */ +@Api(tags = {"标签组管理"}) +@RestController +@RequestMapping({"pc/labelGroup"}) +public class LabelGroupController { + @Autowired + private LabelGroupService labelGroupService; + + @ApiOperation("标签组分页查询") + @PostMapping({"/list"}) + public ResponseResult> getLabelGroupList(@RequestBody LabelGroupListDTO dto) { + PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); + List result = labelGroupService.getLabelGroupList(dto); + return ResponseResult.success(new PageInfo<>(result)); + } + + @ApiOperation("新增标签组") + @PostMapping({"/add"}) + public ResponseResult addLabelGroup(@RequestBody LabelGroupAddDTO dto) throws ApiException { + labelGroupService.addLabelGroup(dto); + return ResponseResult.success(); + } + + @ApiOperation("修改标签组") + @PostMapping({"/edit"}) + public ResponseResult updateLabelGroup(@RequestBody LabelGroupUpdateDTO dto) throws ApiException { + labelGroupService.updateLabelGroup(dto); + return ResponseResult.success(); + } + + @ApiOperation("删除标签组") + @PostMapping({"/delete"}) + public ResponseResult deleteLabelGroup(@RequestBody LabelGroupDeleteDTO dto) throws ApiException { + labelGroupService.deleteLabelGroup(dto); + return ResponseResult.success(); + } + + @ApiOperation("获取所有标签组") + @PostMapping({"/allList"}) + public ResponseResult> deleteLabelGroup() { + return ResponseResult.success(labelGroupService.getAllLabelGroupList()); + } + + @ApiOperation("获取所有标签组") + @PostMapping({"/allListAsc"}) + public ResponseResult> getLabelGroupListOrder() { + return ResponseResult.success(labelGroupService.getLabelGroupListOrder()); + } +} + diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/LineAuditController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/LineAuditController.java new file mode 100644 index 000000000..aa90f3b0d --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/LineAuditController.java @@ -0,0 +1,71 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.dao.LineInfoDAO; +import com.cool.store.entity.LineInfoDO; +import com.cool.store.enums.WorkflowSubStageEnum; +import com.cool.store.request.AuditCloseRequest; +import com.cool.store.request.AuditPassRequest; +import com.cool.store.request.AuditRejectRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.BankService; +import com.cool.store.service.impl.CommonService; +import com.cool.store.service.impl.DefaultLineFlowService; +import com.cool.store.service.impl.LineFlowService; +import com.cool.store.service.impl.LineInterviewServiceImpl; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.ApplicationContext; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @author zhangchenbiao + * @FileName: LineOperationController + * @Description: + * @date 2024-03-20 14:20 + */ +@Api(tags = "线索审核") +@RestController +@RequestMapping({"pc/audit"}) +public class LineAuditController { + + @Resource + private CommonService commonService; + @Resource(name = "defaultLineFlowService") + private LineFlowService lineFlowService; + + @Resource + BankService bankService; + + @ApiOperation("审核通过") + @PostMapping("/pass") + public ResponseResult auditPass(@RequestBody AuditPassRequest request){ + return ResponseResult.success(commonService.getLineFlowService(request.getWorkflowSubStage()).auditPass(request,CurrentUserHolder.getUserId())); + } + + @ApiOperation("审核拒绝") + @PostMapping("/reject") + public ResponseResult auditReject(@RequestBody AuditRejectRequest request){ + return ResponseResult.success(commonService.getLineFlowService(request.getWorkflowSubStage()).auditReject(request,CurrentUserHolder.getUserId())); + } + + @ApiOperation("重新缴费") + @PostMapping("/repayment") + public ResponseResult repayment(@RequestBody AuditRejectRequest request){ + return ResponseResult.success(bankService.repayment(request)); + } + + @ApiOperation("结束跟进") + @PostMapping("/close") + public ResponseResult auditClose(@RequestBody AuditCloseRequest request){ + return ResponseResult.success(lineFlowService.auditClose(request, CurrentUserHolder.getUser())); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/LineFollowController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/LineFollowController.java new file mode 100644 index 000000000..9db62aca9 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/LineFollowController.java @@ -0,0 +1,43 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.LineFollowLogRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.LineFollowService; +import com.cool.store.vo.log.LineFollowLogVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @author zhangchenbiao + * @FileName: LineFollowController + * @Description: + * @date 2024-03-27 15:02 + */ +@Api(tags = "跟进日志") +@RestController +@RequestMapping({"pc/follow"}) +public class LineFollowController { + + @Resource + private LineFollowService lineFollowService; + + @ApiOperation("跟进日志分页") + @GetMapping("/page") + public ResponseResult> getFollowLogPage(Long lineId, Integer pageNum, Integer pageSize){ + return ResponseResult.success(lineFollowService.getFollowLogPage(lineId, pageNum, pageSize)); + } + + @ApiOperation("新增跟进日志") + @PostMapping("/log/add") + public ResponseResult addFollowLog(@RequestBody LineFollowLogRequest request){ + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(lineFollowService.addFollowLog(request, user.getUserId(), user.getName())); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/LineInfoController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/LineInfoController.java new file mode 100644 index 000000000..f003ee205 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/LineInfoController.java @@ -0,0 +1,149 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dto.TransferLogDTO; +import com.cool.store.enums.point.PayBusinessTypeEnum; +import com.cool.store.request.*; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.LinePayService; +import com.cool.store.service.LineService; +import com.cool.store.service.TransferLogService; +import com.cool.store.vo.*; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @Author suzhuhong + * @Date 2024/3/27 15:57 + * @Version 1.0 + */ +@RestController +@RequestMapping("/pc/line") +@Api(tags = "PC线索信息") +@Slf4j +public class LineInfoController { + + @Resource + LineService lineService; + @Resource + TransferLogService transferLogService; + @Resource + private LinePayService linePayService; + + @ApiOperation("查询线索详情") + @GetMapping("/getLineDetail") + @ApiImplicitParams({ + @ApiImplicitParam(name = "lineId", value = "线索id", required = true) + }) + public ResponseResult getLineInfo(@RequestParam("lineId")Long lineId) { + return ResponseResult.success(lineService.getLineInfo(lineId)); + } + + @ApiOperation("我的线索") + @PostMapping("/getMyLineList") + public ResponseResult> getLineList(@RequestBody LineListRequest lineListRequest) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(lineService.getLineList(lineListRequest,user,Boolean.FALSE)); + } + + @ApiOperation("团队线索") + @PostMapping("/getTeamLineList") + public ResponseResult> getTeamLineList(@RequestBody LineListRequest lineListRequest) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(lineService.getLineList(lineListRequest,user,Boolean.TRUE)); + } + + @ApiOperation("公海线索") + @PostMapping("/getPublicLineList") + public ResponseResult> getPublicLineList(@RequestBody PublicLineListRequest publicLineListRequest) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(lineService.getPublicLineList(publicLineListRequest,user,Boolean.TRUE)); + } + + @ApiOperation("待分配线索") + @PostMapping("/getAssignedLineList") + public ResponseResult> getAssignedLineList(@RequestBody PublicLineListRequest publicLineListRequest) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(lineService.getPublicLineList(publicLineListRequest,user,Boolean.FALSE)); + } + + @ApiOperation("我负责的加盟商") + @PostMapping("/getPartnerList") + public ResponseResult> getPartnerList(@RequestBody PartnerRequest partnerRequest) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(lineService.getPartnerList(partnerRequest,user,Boolean.FALSE)); + } + + @ApiOperation("团队的加盟商") + @PostMapping("/getTeamPartnerList") + public ResponseResult> getTeamPartnerList(@RequestBody PartnerRequest partnerRequest) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(lineService.getPartnerList(partnerRequest,user,Boolean.TRUE)); + } + + @PostMapping(path = "/addTags") + @ApiOperation("添加标签接口") + public ResponseResult addTags(@RequestBody AddTagsRequest addTagsRequest){ + return ResponseResult.success(lineService.addTags(CurrentUserHolder.getUser(),addTagsRequest)); + } + + @ApiOperation("分配招商经理") + @PostMapping("/distributionInvestmentManager") + public ResponseResult distributionInvestmentManager(@RequestBody ChangeInvestmentRequest changeInvestmentRequest) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(lineService.transferInvestmentManager(changeInvestmentRequest,user,Boolean.FALSE)); + } + + @ApiOperation("转让") + @PostMapping("/transferInvestmentManager") + public ResponseResult transferInvestmentManager(@RequestBody ChangeInvestmentRequest changeInvestmentRequest) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(lineService.transferInvestmentManager(changeInvestmentRequest,user,Boolean.TRUE)); + } + + @ApiOperation("线索转让记录") + @GetMapping("/getTransferLogPage") + @ApiImplicitParams({ + @ApiImplicitParam(name = "lineId", value = "线索id", required = true), + @ApiImplicitParam(name = "pageNum", value = "页码", required = true), + @ApiImplicitParam(name = "pageSize", value = "大小", required = true) + }) + public ResponseResult> getTransferLogPage(@RequestParam("lineId")Long lineId, + @RequestParam(value = "pageNum" ,defaultValue = "1")Integer pageNum, + @RequestParam(value = "pageSize",defaultValue = "10")Integer pageSize) { + return ResponseResult.success(transferLogService.getTransferLogPage(pageNum,pageSize,lineId)); + } + + @ApiOperation("查询意向金详情") + @GetMapping("/getLinePayInfo") + @ApiImplicitParams({ + @ApiImplicitParam(name = "lineId", value = "线索id", required = true) + }) + public ResponseResult getLinePayInfo(@RequestParam("lineId")Long lineId) { + return ResponseResult.success(linePayService.getLinePayInfo(lineId, PayBusinessTypeEnum.INTENT_MONEY.getCode(),null)); + } + + @ApiOperation("线索流程进度") + @GetMapping("/getIntendProcess") + @ApiImplicitParams({ + @ApiImplicitParam(name = "lineId", value = "线索id", required = true) + }) + public ResponseResult getIntendProcessTotal(@RequestParam("lineId")Long lineId) { + return ResponseResult.success(lineService.getIntendProcessTotal(lineId)); + } + + @ApiOperation("新建线索") + @PostMapping("/addLine") + public ResponseResult addLine(@RequestBody AddLineRequest addLineRequest) { + return ResponseResult.success(lineService.addLine(addLineRequest)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/NewStoreOpeningController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/NewStoreOpeningController.java new file mode 100644 index 000000000..d23dadcaa --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/NewStoreOpeningController.java @@ -0,0 +1,68 @@ +package com.cool.store.controller.webb; + +import com.cool.store.request.IdRequest; +import com.cool.store.request.NewStoreOpeningRequest; +import com.cool.store.request.OpenAcceptanceRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.NewStoreOpeningService; +import com.cool.store.service.OpenAcceptanceInfoService; +import com.cool.store.vo.NewStoreOpeningVO; +import com.cool.store.vo.OpenAcceptanceInfoListVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author byd + * @Date 2023/6/15 9:49 + * @Version 1.0 + */ +@RestController +@RequestMapping("pc/newStoreOpening") +@Api(tags = "PC新店开业") +public class NewStoreOpeningController { + + @Resource + OpenAcceptanceInfoService openAcceptanceInfoService; + + @Resource + NewStoreOpeningService newStoreOpeningService; + + @GetMapping(path = "/newStoreOpeningList") + @ApiOperation("新店开业列表") + public ResponseResult> newStoreOpeningList(OpenAcceptanceRequest openAcceptanceRequest) { + //已验收 + openAcceptanceRequest.setAcceptanceStatus(1); + return ResponseResult.success(openAcceptanceInfoService.openAcceptanceList(openAcceptanceRequest)); + } + + @GetMapping(path = "/storeTodoList") + @ApiOperation("新店开业待办列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "shopId", value = "店铺id", required = true) + }) + public ResponseResult> storeTodoList(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(newStoreOpeningService.storeTodoList(shopId)); + } + + + @PostMapping(path = "/addStoreTodo") + @ApiOperation("新店开业-新建待办") + public ResponseResult addStoreTodo(@RequestBody NewStoreOpeningRequest newStoreOpeningRequest) { + newStoreOpeningService.addStoreTodo(newStoreOpeningRequest); + return ResponseResult.success(Boolean.TRUE); + } + + @PostMapping(path = "/removeStoreTodo") + @ApiOperation("新店开业-删除待办") + public ResponseResult removeStoreTodo(@RequestBody IdRequest idRequest) { + newStoreOpeningService.removeStoreTodo(idRequest.getId()); + return ResponseResult.success(Boolean.TRUE); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenAcceptanceInfoController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenAcceptanceInfoController.java new file mode 100644 index 000000000..71f849e45 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenAcceptanceInfoController.java @@ -0,0 +1,63 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.request.OpenAcceptanceRequest; +import com.cool.store.request.ShopAcceptanceRequest; +import com.cool.store.request.ShopStageAcceptanceRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.OpenAcceptanceInfoService; +import com.cool.store.vo.OpenAcceptanceInfoListVO; +import com.cool.store.vo.ShopAcceptanceVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @Author byd + * @Date 2023/6/15 9:49 + * @Version 1.0 + */ +@RestController +@RequestMapping("pc/openAcceptanceInfo") +@Api(tags = "PC开业验收") +public class OpenAcceptanceInfoController { + + @Resource + OpenAcceptanceInfoService openAcceptanceInfoService; + + @GetMapping(path = "/openAcceptanceList") + @ApiOperation("开业验收列表") + public ResponseResult> openAcceptanceList(OpenAcceptanceRequest openAcceptanceRequest) { + return ResponseResult.success(openAcceptanceInfoService.openAcceptanceList(openAcceptanceRequest)); + } + + @GetMapping(path = "/acceptanceStageList") + @ApiOperation("开业验收阶段结果列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "shopId", value = "店铺id", required = true) + }) + public ResponseResult acceptanceStageList(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(openAcceptanceInfoService.acceptanceStageList(shopId)); + } + + + @ApiOperation("开业验收") + @PostMapping(path = "/acceptance") + public ResponseResult acceptance(@RequestBody ShopAcceptanceRequest shopAcceptanceRequest) { + openAcceptanceInfoService.acceptance(shopAcceptanceRequest, CurrentUserHolder.getUserId()); + return ResponseResult.success(Boolean.TRUE); + } + + @ApiOperation("开业验收-单项") + @PostMapping(path = "/acceptanceOne") + public ResponseResult acceptanceOne(@RequestBody ShopStageAcceptanceRequest shopStageAcceptanceRequest) { + openAcceptanceInfoService.acceptanceOne(shopStageAcceptanceRequest); + return ResponseResult.success(Boolean.TRUE); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenAreaController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenAreaController.java new file mode 100644 index 000000000..71e331769 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenAreaController.java @@ -0,0 +1,99 @@ +package com.cool.store.controller.webb; + +import com.cool.store.common.PageBasicInfo; +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.request.OpenAreaRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.OpenAreaService; +import com.cool.store.vo.OpenAreaTreeVO; +import com.cool.store.vo.OpenAreaVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2023/6/15 9:49 + * @Version 1.0 + */ +@RestController +@RequestMapping("pc/openArea") +@Api(tags = "PC开放城市") +public class OpenAreaController { + + @Resource + OpenAreaService openAreaService; + + @GetMapping(path = "/getOpenAreaTree") + @ApiOperation("开放城市树-搜索城市 到第二节点") + @ApiImplicitParams({ + @ApiImplicitParam(name = "keyword", value = "搜索关键字", required = false), + @ApiImplicitParam(name = "areaStatus", value = "状态 open-开放 keyOpen-重点开放 notOpen-未开放 saturated-已饱和", required = false) + }) + public ResponseResult> getOpenAreaTree(@RequestParam(value = "keyword",required = false)String keyword, + @RequestParam(value = "areaStatus",required = false)String areaStatus){ + return ResponseResult.success(openAreaService.queryByKeyword(keyword,areaStatus,Boolean.TRUE)); + } + + + @GetMapping(path = "/getAllOpenAreaTree") + @ApiOperation("开放城市树-所有节点") + @ApiImplicitParams({ + @ApiImplicitParam(name = "keyword", value = "搜索关键字", required = false) + }) + public ResponseResult> getAllOpenAreaTree(@RequestParam(value = "keyword",required = false)String keyword){ + return ResponseResult.success(openAreaService.queryAllOpenAreaByKeyword(keyword,null,Boolean.FALSE)); + } + + + @GetMapping(path = "/getOpenAreaList") + @ApiOperation("开放城市树-子列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "parentId", value = "父区域名称", required = false) + }) + public ResponseResult> getOpenAreaList(@RequestParam(value = "parentId",required = false)Long parentId){ + return ResponseResult.success(openAreaService.getChildrenList(parentId)); + } + + @PostMapping(path = "/changeOpenAreaStatus") + @ApiOperation("变更开放区域状态") + public ResponseResult changeOpenAreaStatus(@RequestBody OpenAreaRequest openAreaRequest){ + String userId = CurrentUserHolder.getUserId(); + return ResponseResult.success(openAreaService.batchUpdate( userId, openAreaRequest)); + } + + + @GetMapping(path = "/getKeyOpenAreaList") + @ApiOperation("重点城市列表") + public ResponseResult> getKeyOpenAreaList(@RequestParam(value = "pageNumber",required = true,defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",required = true,defaultValue = "10")Integer pageSize, + @RequestParam(value = "keyword",required = false)String keyword, + @RequestParam(value = "status",required = false)Integer status ){ + return ResponseResult.success(openAreaService.queryKeyOpenAreaList(pageSize,pageNumber,keyword,status)); + } + + @GetMapping(path = "/updateKeyCityStatus") + @ApiOperation("启用或者禁用重点城市") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "区域ID", required = true), + @ApiImplicitParam(name = "keyOpenStatus", value = "启用或者禁用 启用-0 禁用-1", required = true) + }) + public ResponseResult getKeyOpenAreaList(@RequestParam(value = "id",required = false)Long id, + @RequestParam(value = "keyOpenStatus",required = false)Integer keyOpenStatus ){ + return ResponseResult.success(openAreaService.updateKeyCityStatus(id,keyOpenStatus)); + } + + + @GetMapping(path = "/deleteKeyCity") + @ApiOperation("删除重点城市") + public ResponseResult getKeyOpenAreaList(@RequestParam(value = "id",required = false)Long id){ + return ResponseResult.success(openAreaService.deleteKeyCity(id)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OssClientController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OssClientController.java new file mode 100644 index 000000000..b523b1502 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OssClientController.java @@ -0,0 +1,31 @@ +package com.cool.store.controller.webb; + +import com.cool.store.response.ResponseResult; +import com.cool.store.service.OSSService; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @Author suzhuhong + * @Date 2024/3/28 14:25 + * @Version 1.0 + */ +@Api(tags ="PC OSS配置") +@RestController +@RequestMapping({"/pc/oss"}) +@Slf4j +public class OssClientController { + + @Resource + OSSService ossService; + + @GetMapping("/getUploadFileConfig") + public ResponseResult getUploadFileConfig(){ + return ResponseResult.success(ossService.getUploadFileConfig()); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCApplyLicenseController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCApplyLicenseController.java new file mode 100644 index 000000000..c93096661 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCApplyLicenseController.java @@ -0,0 +1,63 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.LicenseListRequest; +import com.cool.store.response.LicenseListResponse; +import com.cool.store.response.ResponseResult; +import com.cool.store.response.SubmitLicenseResponse; +import com.cool.store.service.ApplyLicenseService; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("/pc/license") +@Api(tags = "PC证照审核") +@Slf4j +public class PCApplyLicenseController { + + @Resource + ApplyLicenseService applyLicenseService; + + @GetMapping(path = "/licenseList") + @ApiOperation("证照审批列表") + public ResponseResult> licenseList(@RequestParam(value = "pageNumber", required = true, defaultValue = "1") Integer pageNumber, + @RequestParam(value = "pageSize", required = true, defaultValue = "10") Integer pageSize, + @RequestParam(value = "storeName", required = false) String storeName, + @RequestParam(value = "submitStartTime", required = false) Long submitStartTime, + @RequestParam(value = "submitEndTime", required = false) Long submitEndTime, + @RequestParam(value = "regionId", required = false) String regionId, + @RequestParam(value = "status", required = false) Integer status) { + LicenseListRequest request = new LicenseListRequest(pageNumber, pageSize, storeName, submitStartTime, submitEndTime, regionId, status); + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(applyLicenseService.licenseList(request,user)); + } + + @ApiOperation("证照办理数据回显") + @GetMapping("/default/get") + public ResponseResult getDefault(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(applyLicenseService.getDefault(shopId)); + } + + /** + * @param + * @param status 0通过 1不通过 + * @return + */ + @GetMapping(path = "/examine") + @ApiOperation("证照审批") + public ResponseResult licenseExamine(@RequestParam("id") Long shopId, + @RequestParam("status") Integer status, + @RequestParam("result") String result) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(applyLicenseService.licenseExamine(shopId, status, result, user)); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCDecorationController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCDecorationController.java new file mode 100644 index 000000000..92727d3fa --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCDecorationController.java @@ -0,0 +1,126 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; + +import com.cool.store.dto.decoration.ConstructionScheduleDTO; +import com.cool.store.entity.ShopAuditInfoDO; +import com.cool.store.request.*; +import com.cool.store.response.ResponseResult; +import com.cool.store.response.ThreeSignResponse; +import com.cool.store.service.DecorationService; +import com.cool.store.service.PreparationService; +import com.cool.store.service.SeeAcceptanceService; +import com.cool.store.vo.Fitment.DesignInfoVo; +import com.cool.store.vo.LinePayVO; + +import com.cool.store.vo.fitmentCheckVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/04/28/下午4:19 + * @Version 1.0 + * @注释: + */ +@RestController +@RequestMapping("/pc/decoration") +@Api(tags = "PC装修阶段") +@Slf4j +public class PCDecorationController { + @Resource + private DecorationService decorationService; + @Resource + private PreparationService preparationService; + @Resource + private SeeAcceptanceService seeAcceptanceService; + @ApiOperation("获取新店装修flush") + @GetMapping("/flush") + public ResponseResult getFitmentSub(@RequestParam Long shopId) { + return ResponseResult.success(preparationService.decorationFlush(shopId)); + } + @ApiOperation("获取设计子阶段信息") + @GetMapping("/designSub") + public ResponseResult getDesignSub(@RequestParam Long shopId){ + return ResponseResult.success( decorationService.DesignInfo(shopId)) ; + } + + @ApiOperation("获取施工子阶段信息") + @GetMapping("/getConstructionSub") + public ResponseResult> getConstructionSub(@RequestParam Long shopId){ + return ResponseResult.success(decorationService.getConstruction(shopId)) ; + } + @ApiOperation("获取装修款信息") + @GetMapping("/getDecorationModelInfo") + public ResponseResult getDecorationModelInfo(@RequestParam Long shopId){ + return ResponseResult.success(decorationService.getDecorationModel(shopId,null)); + } + @ApiOperation("获取验收列表:三方验收1200待预约,1210 待验收,1220验收中,1230已验收;视觉验收:1300待验收,1310验收不通过,1320验收通过") + @PostMapping("/getAcceptanceList") + public ResponseResult> getAcceptanceList(@RequestBody AcceptanceListRequest request){ + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(decorationService.getFitmentAcceptanceList(request,user)); + } + @ApiOperation("获取三方验收列表详情") + @GetMapping("/getAcceptanceDetail") + public ResponseResult getAcceptanceDetail(@RequestParam("shopId") Long shopId){ + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(decorationService.getAcceptanceDetail(shopId,user)); + } + @ApiOperation("预约三方验收") + @PostMapping("/bookingAcceptance") + public ResponseResult submitBookingAcceptance(@RequestBody BookingAcceptanceRequest response){ + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(decorationService.bookingAcceptance(response,user)); + } + @ApiOperation("获取三方验收检查项") + @GetMapping("/getAcceptanceChecks") + public ResponseResult getAcceptanceChecks(@RequestParam Long shopId){ + return ResponseResult.success(decorationService.getThreeChecks(shopId)); + } + @ApiOperation("提交三方验收签字") + @PostMapping("/submitThreeAcceptanceSign") + public ResponseResult submitThreeAcceptanceSign(@RequestBody ThreeAcceptanceRequest request){ + return ResponseResult.success(decorationService.pcSubmitAcceptanceSign(request)); + } + @ApiOperation("查看三方验收签字") + @GetMapping("/getThreeSign") + public ResponseResult getThreeAcceptance(@RequestParam Long shopId){ + return ResponseResult.success(decorationService.getThreeAcceptanceSign(shopId)); + } + @ApiOperation("获取视觉验收撤场数据") + @GetMapping("/getSeeAcceptanceWithdrawal") + public ResponseResult getSeeAcceptanceWithdrawal(@RequestParam Long shopId){ + return ResponseResult.success(seeAcceptanceService.getWithdrawal(shopId)); + } + @ApiOperation("视觉验收列表") + @PostMapping("/getSeeAcceptanceList") + public ResponseResult< PageInfo> getSeeAcceptanceList(@RequestBody AcceptanceListRequest request){ + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(seeAcceptanceService.getAcceptanceList(request,user)); + } + @ApiOperation("获取撤场数据") + @GetMapping("/getWithdrawal") + public ResponseResult getWithdrawal(@RequestParam Long shopId){ + return ResponseResult.success(seeAcceptanceService.getWithdrawal(shopId)); + } + @ApiOperation("获取视觉验收审核数据") + @GetMapping("/getSeeAuditInfo") + public ResponseResult< List > getAuditInfo(@RequestParam Long shopId){ + return ResponseResult.success(seeAcceptanceService.getAuditInfo(shopId)); + } + @ApiOperation("验收视觉验收") + @PostMapping("/auditSee") + public ResponseResult auditSee(@RequestBody SeeAcceptanceRequest request){ + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(seeAcceptanceService.auditSeeAcceptance(request,user)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCFranchiseFeeController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCFranchiseFeeController.java new file mode 100644 index 000000000..b88078018 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCFranchiseFeeController.java @@ -0,0 +1,47 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.AuditFranchiseFeeRequest; +import com.cool.store.request.FranchiseFeeRequest; +import com.cool.store.response.FranchiseFeeResponse; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.FranchiseFeeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("/pc/franchiseFee") +@Api(tags = "PC加盟费/保证金") +@Slf4j +public class PCFranchiseFeeController { + + + @Resource + FranchiseFeeService franchiseFeeService; + + @ApiOperation("基本信息提交") + @PostMapping("/submit") + public ResponseResult submitLicense(@RequestBody FranchiseFeeRequest request) { + return ResponseResult.success(franchiseFeeService.submitLicense(request)); + } + + @ApiOperation("基本信息查询") + @GetMapping("/getDetail") + public ResponseResult getDetail(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(franchiseFeeService.getDetail(shopId)); + } + + + @ApiOperation("缴纳加盟费/保证金审核接口") + @PostMapping("/audit") + public ResponseResult auditFranchiseFee(@RequestBody AuditFranchiseFeeRequest request) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(franchiseFeeService.auditFranchiseFee(request,user)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCIntentAgreementController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCIntentAgreementController.java new file mode 100644 index 000000000..2925b7339 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCIntentAgreementController.java @@ -0,0 +1,63 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.exception.ApiException; +import com.cool.store.request.FranchiseeSaveRequest; +import com.cool.store.request.InitiatingRequest; +import com.cool.store.response.InitiatingResponse; +import com.cool.store.response.ResponseResult; +import com.cool.store.response.SigningBaseInfoResponse; +import com.cool.store.service.IntentAgreementService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@RestController +@RequestMapping({"/pc/IntentAgreement"}) +@Slf4j +@Api(tags = "PC意向协议") +public class PCIntentAgreementController { + + @Resource + IntentAgreementService intentAgreementService; + + @GetMapping(path = "/get") + @ApiOperation("查询意向协议信息") + public ResponseResult getMiniIntentAgreement( + @RequestParam(value = "partnerId", required = false) String partnerId, + @RequestParam(value = "lineId", required = false) Long lineId) { + SigningBaseInfoResponse resp = intentAgreementService.getMiniIntentAgreement(partnerId, lineId); + return ResponseResult.success(resp); + } + + @PostMapping(path = "/initiating") + @ApiOperation("kdz -> xfsg 发起意向协议流程") + public ResponseResult initiating(@RequestBody InitiatingRequest request) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return intentAgreementService.initiating(request,user); + } + + @PostMapping(path = "/franchisee/save") + @ApiOperation("kdz -> xfsg 加盟商新增") + public ResponseResult save(@RequestBody FranchiseeSaveRequest request) throws ApiException { + LoginUserInfo user = CurrentUserHolder.getUser(); + return intentAgreementService.save(request,user); + } + + + + @GetMapping(path = "/getOaDetail") + @ApiOperation("oa数据回显") + public ResponseResult getOaDetail(@RequestParam("mobile") String mobile, + @RequestParam("idCardNo") String idCardNo) { + return ResponseResult.success(intentAgreementService.getOaDetail(mobile,idCardNo)); + } + + + + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCJoinIntentionController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCJoinIntentionController.java new file mode 100644 index 000000000..3c42b92e5 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCJoinIntentionController.java @@ -0,0 +1,32 @@ +package com.cool.store.controller.webb; + + +import com.cool.store.response.ResponseResult; +import com.cool.store.service.JoinIntentionService; +import com.cool.store.vo.PartnerBaseInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@RestController +@RequestMapping({"/pc/JoinIntention"}) +@Slf4j +@Api(tags = "PC意向加盟") +public class PCJoinIntentionController { + + @Resource + private JoinIntentionService joinIntentionService; + + @GetMapping(path = "/getByLineId") + @ApiOperation("查找加盟意向申请书") + public ResponseResult getByLineId(@RequestParam("lineId") Long lineId) { + return ResponseResult.success(joinIntentionService.getByLineId(lineId)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCLineInterviewController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCLineInterviewController.java new file mode 100644 index 000000000..d2b69a821 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCLineInterviewController.java @@ -0,0 +1,114 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.enums.InterviewUserTypeEnum; +import com.cool.store.exception.ApiException; +import com.cool.store.request.AppointmentTimeRequest; +import com.cool.store.request.InterviewUploadVideoRequest; +import com.cool.store.request.LineInterviewPageRequest; +import com.cool.store.request.ModifyInterviewerRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.LineInterviewService; +import com.cool.store.vo.interview.*; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: LineInterviewController + * @Description: + * @date 2024-03-15 16:04 + */ +@RestController +@RequestMapping("/pc/interview/") +@Api(tags = "PC端-面试&面谈") +@Slf4j +public class PCLineInterviewController { + + @Resource + private LineInterviewService lineInterviewService; + + @ApiOperation("获取面试/面谈 预约时间") + @GetMapping("/appointment/time") + @ApiImplicitParams({ + @ApiImplicitParam(name = "lineId", value = "线索id", required = true), + @ApiImplicitParam(name = "interviewType", value = "面试类型:0面谈;1面试", required = true), + @ApiImplicitParam(name = "appointmentDate", value = "预约日期 yyyy-MM-dd", required = true) + }) + public ResponseResult> getAppointmentTime(@RequestParam("lineId")Long lineId, + @RequestParam("interviewType")Integer interviewType, + @RequestParam("appointmentStartDate") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate appointmentStartDate, + @RequestParam("appointmentEndDate") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate appointmentEndDate) { + return ResponseResult.success(lineInterviewService.getAppointmentTime(lineId, interviewType, appointmentStartDate, appointmentEndDate)); + } + + @ApiOperation("修改面审时间") + @PostMapping("/appointment/time/modify") + public ResponseResult modifyAppointmentTime(@RequestBody @Validated AppointmentTimeRequest request) { + return ResponseResult.success(lineInterviewService.modifyAppointmentTime(request)); + } + + @ApiOperation("修改面试官") + @PostMapping("/modify") + public ResponseResult modifyInterviewer(@RequestBody @Validated ModifyInterviewerRequest request) { + request.setOperatorUserId(CurrentUserHolder.getUserId()); + return ResponseResult.success(lineInterviewService.modifyInterviewer(request)); + } + + @ApiOperation("一审列表/二审列表") + @PostMapping("/page") + public ResponseResult> getInterviewerPage(@RequestBody LineInterviewPageRequest request) { + request.setInterviewerUserId(CurrentUserHolder.getUserId()); + return ResponseResult.success(lineInterviewService.getInterviewerPage(request, CurrentUserHolder.getUserId(), Boolean.FALSE)); + } + + @ApiOperation("团队一审/团队二审") + @PostMapping("/team/page") + public ResponseResult> getTeamInterviewerPage(@RequestBody LineInterviewPageRequest request) { + return ResponseResult.success(lineInterviewService.getInterviewerPage(request, CurrentUserHolder.getUserId(), Boolean.TRUE)); + } + + @ApiOperation("获取面试信息") + @GetMapping("/detail") + public ResponseResult getInterviewDetail(@RequestParam("lineId")Long lineId, @RequestParam("interviewType")Integer interviewType) { + return ResponseResult.success(lineInterviewService.getInterviewDetail(lineId, interviewType)); + } + + @ApiOperation("进入房间") + @GetMapping("/room/enter") + public ResponseResult enterInterviewRoom(@RequestParam("interviewId")Long interviewId) { + String userId = CurrentUserHolder.getUserId(); + return ResponseResult.success(lineInterviewService.enterInterviewRoom(interviewId, userId, InterviewUserTypeEnum.INTERVIEWER)); + } + + @ApiOperation("结束面试") + @GetMapping("/finish") + public ResponseResult finishInterview(@RequestParam("interviewId")Long interviewId) { + String userId = CurrentUserHolder.getUserId(); + lineInterviewService.finishInterview(interviewId, userId); + return ResponseResult.success(); + } + + @ApiOperation("上传文件") + @PostMapping("/upload/video") + public ResponseResult uploadVideo(@RequestBody @Validated InterviewUploadVideoRequest request) { + return ResponseResult.success(lineInterviewService.uploadVideo(request.getInterviewId(), request.getVideoUrlList())); + } + + @ApiOperation("重新面审") + @GetMapping("/reappointment") + public ResponseResult reappointment(@RequestParam("lineId")Long lineId) { + return ResponseResult.success(lineInterviewService.reappointment(lineId)); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCOpenNewShopController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCOpenNewShopController.java new file mode 100644 index 000000000..aee935ee5 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCOpenNewShopController.java @@ -0,0 +1,53 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.request.AuditOpenNewShopRequest; +import com.cool.store.request.PartnerOpenNewShopPageRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.OpenNewShopService; +import com.cool.store.vo.PartnerOpenNewShopDetailVO; +import com.cool.store.vo.PartnerOpenNewShopPageVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @author zhangchenbiao + * @FileName: PCOpenNewShopController + * @Description: + * @date 2024-05-09 15:08 + */ +@RestController +@RequestMapping("/pc/open/new/shop") +@Api(tags = "PC端-老加盟商开新店") +@Slf4j +public class PCOpenNewShopController { + + @Resource + private OpenNewShopService openNewShopService; + + @ApiOperation("获取老加盟商开新店列表") + @PostMapping("/getPartnerOpenNewShopPage") + public ResponseResult> getPartnerOpenNewShopPage(@RequestBody PartnerOpenNewShopPageRequest request) { + request.setInvestmentManager(CurrentUserHolder.getUserId()); + return ResponseResult.success(openNewShopService.getPartnerOpenNewShopPage(request)); + } + + @ApiOperation("获取详情") + @GetMapping("/getOpenNewShopRecordDetail") + public ResponseResult getOpenNewShopRecordDetail(@RequestParam("recordId") Long recordId) { + return ResponseResult.success(openNewShopService.getOpenNewShopRecordDetail(recordId)); + } + + @ApiOperation("审核") + @PostMapping("/auditOpenNewShop") + public ResponseResult auditOpenNewShop(@RequestBody @Validated AuditOpenNewShopRequest request) { + return ResponseResult.success(openNewShopService.auditOpenNewShop(request)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCOpenPreparationController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCOpenPreparationController.java new file mode 100644 index 000000000..3fda462f6 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCOpenPreparationController.java @@ -0,0 +1,97 @@ +package com.cool.store.controller.webb; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.dao.ShopStageInfoDAO; +import com.cool.store.dto.openPreparation.FirstOrderDTO; +import com.cool.store.entity.FirstOrderDO; +import com.cool.store.entity.ShopInfoDO; +import com.cool.store.entity.ShopStageInfoDO; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.request.FirstOrderRequest; +import com.cool.store.request.OpeningOperationPlanAuditRequest; +import com.cool.store.request.OpeningOperationPlanRequest; +import com.cool.store.request.PlanListRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.*; +import com.cool.store.vo.OpeningOperationPlanListVO; +import com.cool.store.vo.OpeningOperationPlanVO; +import com.cool.store.vo.shop.ShopStageInfoVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.beanutils.BeanUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.lang.reflect.InvocationTargetException; +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/04/25/下午6:35 + * @Version 1.0 + * @注释: + */ +@RestController +@RequestMapping("/pc/openPreparation") +@Api(tags = "pc开业筹备") +@Slf4j +public class PCOpenPreparationController { + + @Resource + private FirstOrderService firstOrderService; + @Resource + private OpeningOperationPlanService openingOperationPlanService; + @Resource + private AuditOpeningOperationPlanService auditOpeningOperationPlanService; + @ApiOperation("刷新订货金状态") + @GetMapping("/flush") + public ResponseResult flush(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(openingOperationPlanService.flush(shopId)); + } + @ApiOperation("获取鲜丰订货金状态") + @GetMapping("/getStatus") + public ResponseResult getStatus(@RequestParam("shopId") Long shopId) { + + return ResponseResult.success(openingOperationPlanService.getStatus(shopId)); + } + @PostMapping("/openingOperationPlan/submit") + @ApiOperation("提交开业运营方案") + public ResponseResult submitPlan(@RequestBody OpeningOperationPlanRequest request) { + return ResponseResult.success(openingOperationPlanService.savePlan(request,CurrentUserHolder.getUser())); + } + + @GetMapping("/openingOperationPlan/getPlan") + @ApiOperation("查询开业运营方案") + public ResponseResult getPlan(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(openingOperationPlanService.getPlanByShopId(shopId)); + } + @PostMapping("/openingOperationPlan/planList") + @ApiOperation("查询运营方案列表") + public ResponseResult> planList(@RequestBody PlanListRequest request) { + + return ResponseResult.success(openingOperationPlanService.getPlanListPage(request)); + } + @PostMapping("/openingOperationPlan/audit") + @ApiOperation("审核运营方案") + public ResponseResult auditPlan(@RequestBody OpeningOperationPlanAuditRequest request) { + return ResponseResult.success(auditOpeningOperationPlanService.auditPlan(request,CurrentUserHolder.getUser())); + } + + @GetMapping("/firstOrder/get") + @ApiOperation("查询订货金") + public ResponseResult get(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(firstOrderService.getOrder(shopId)); + } + + @PostMapping("/firstOrder/submit") + @ApiOperation("提交订货金") + public ResponseResult submit(@RequestBody FirstOrderRequest request) { + return ResponseResult.success(firstOrderService.saveOrder(request,CurrentUserHolder.getUser())); + + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCShopController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCShopController.java new file mode 100644 index 000000000..ad41bd3ba --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCShopController.java @@ -0,0 +1,62 @@ +package com.cool.store.controller.webb; + +import com.cool.store.request.AddShopRequest; +import com.cool.store.request.DeleteShopRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.ShopService; +import com.cool.store.vo.shop.MiniShopPageVO; +import com.cool.store.vo.shop.ShopStageInfoVO; +import com.cool.store.vo.shop.StageShopCountVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: PCShopController + * @Description: + * @date 2024-04-16 14:44 + */ +@Api(tags = "pc店铺") +@RestController +@RequestMapping("/pc/shop") +public class PCShopController { + + @Resource + private ShopService shopService; + + @ApiOperation("获取店铺列表") + @GetMapping("/getShopList") + public ResponseResult> getShopList(@RequestParam("lineId")Long lineId) { + return ResponseResult.success(shopService.getShopList(lineId)); + } + + @ApiOperation("获取各个阶段店铺数量") + @GetMapping("/getStageShopCount") + public ResponseResult getStageShopCount(@RequestParam("lineId")Long lineId) { + return ResponseResult.success(shopService.getStageShopCount(lineId)); + } + + @ApiOperation("获取店铺的阶段信息") + @GetMapping("/getShopStageInfo") + public ResponseResult> getShopStageInfo(@RequestParam("shopId")Long shopId, @RequestParam(value = "shopStage", required = false)Integer shopStage) { + return ResponseResult.success(shopService.getShopStageInfo(shopId, shopStage)); + } + + @ApiOperation("删除店铺") + @PostMapping("/deleteShop") + public ResponseResult deleteShop(@RequestBody @Validated DeleteShopRequest request) { + return ResponseResult.success(shopService.deleteShop(request)); + } + + @ApiOperation("新增店铺") + @PostMapping("/addShop") + public ResponseResult addShop(@RequestBody @Validated AddShopRequest request) { + return ResponseResult.success(shopService.addShop(request)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCSignFranchiseController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCSignFranchiseController.java new file mode 100644 index 000000000..7ac515329 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCSignFranchiseController.java @@ -0,0 +1,42 @@ +package com.cool.store.controller.webb; + + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.AddSignFranchiseRequest; +import com.cool.store.response.AddSignFranchiseResponse; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.SignFranchiseService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@Api(tags = "pc加盟合同签约") +@RestController +@RequestMapping("/pc/signFranchise") +public class PCSignFranchiseController { + @Resource + SignFranchiseService signFranchiseService; + + @ApiOperation("提交(更新)加盟合同签约") + @PostMapping("/submitOrUpdate") + public ResponseResult submitSignFranchise(@RequestBody AddSignFranchiseRequest request) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return signFranchiseService.submitSignFranchise(request,user); + } + + @ApiOperation("获取默认值") + @GetMapping("/default/get") + public ResponseResult getSignFranchise(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(signFranchiseService.getSignFranchise(shopId)); + } + + @ApiOperation("重新缴费(加盟合同阶段退回后)") + @GetMapping("/rePay") + public ResponseResult rePay(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(signFranchiseService.rePay(shopId)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTempUserDetailController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTempUserDetailController.java new file mode 100644 index 000000000..d546ea9f8 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTempUserDetailController.java @@ -0,0 +1,69 @@ +package com.cool.store.controller.webb; + +import com.cool.store.dto.ehr.StaffBaseInfoDTO; +import com.cool.store.request.IdRequest; +import com.cool.store.request.ShopIdRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.TempUserDetailService; +import com.cool.store.vo.TempUserDetailInfoVO; +import com.cool.store.vo.TempUserDetailListVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @author byd + * @date 2024-04-29 16:15 + */ +@RestController +@RequestMapping({"/pc/tempUserDetail"}) +@Slf4j +@Api(tags = "PC培训登记") +public class PCTempUserDetailController { + + @Autowired + private TempUserDetailService tempUserDetailService; + + @GetMapping(path = "/getUserList") + @ApiOperation("登记员工列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "shopId", value = "店铺Id") + }) + public ResponseResult getUserList(@RequestParam(value = "shopId") Long shopId) { + return ResponseResult.success(tempUserDetailService.userList(shopId)); + } + + @GetMapping(path = "/getUserInfoByIdCard") + @ApiImplicitParams({ + @ApiImplicitParam(name = "idCard", value = "身份证号") + }) + @ApiOperation("培训登记-身份证号查询信息") + public ResponseResult getUserInfoByIdCard(@RequestParam(value = "idCard") String idCard) { + return ResponseResult.success(tempUserDetailService.getUserInfoByIdCard((idCard))); + } + + + @GetMapping(path = "/getUserInfoByIdUserDetailId") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userDetailId", value = "用户详情表id") + }) + @ApiOperation("培训登记-查询信息根据用户详情id") + public ResponseResult getUserInfoByIdUserDetailId(@RequestParam(value = "userDetailId") Long userDetailId) { + return ResponseResult.success(tempUserDetailService.getUserInfoByIdUserDetailId((userDetailId))); + } + + @PostMapping(path = "/registrationCompleted") + @ApiOperation("培训登记-完成") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "店铺id shopId") + }) + public ResponseResult registrationCompleted(@RequestBody ShopIdRequest shopIdRequest) { + tempUserDetailService.registrationCompleted(shopIdRequest.getShopId()); + return ResponseResult.success(Boolean.TRUE); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java new file mode 100644 index 000000000..c69192f12 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java @@ -0,0 +1,87 @@ +package com.cool.store.controller.webb; + +import com.cool.store.constants.CommonConstants; +import com.cool.store.dao.*; +import com.cool.store.entity.*; +import com.cool.store.enums.MessageEnum; +import com.cool.store.enums.SMSMsgEnum; +import com.cool.store.mq.util.HttpRestTemplateService; +import com.cool.store.request.xfsgFirstOrderListRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.response.xfsgFirstOderListResponse; +import com.cool.store.service.ShopService; +import com.cool.store.service.impl.CommonService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.*; + +@Slf4j +@RestController +@RequestMapping("/pc/test") +public class PCTestController { + + @Resource + private CommonService commonService; + @Resource + private LineInfoDAO lineInfoDAO; + @Resource + private PointInfoDAO pointInfoDAO; + @Resource + private ShopService shopService; + @Resource + private LineInterviewDAO lineInterviewDAO; + static String url = "https://hzly.cloudcubic.net/ajaxHandle/synchronization/JCallBackSynchronizationHandler.ashx?action=app&controller=GetProjectDetails&projectid="; + + @Resource + private HttpRestTemplateService httpRestTemplateService; + + @GetMapping("/sendMessage") + public ResponseResult sendMessage(@RequestParam("lineId")Long lineId, + @RequestParam("pointId")Long pointId, + @RequestParam("shopId")Long shopId, + @RequestParam MessageEnum messageEnum){ + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId); + PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(pointId); + ShopInfoDO shopInfo = shopService.getShopInfo(shopId); + Map messageMap = new HashMap<>(); + messageMap.put("lineId", String.valueOf(lineId)); + messageMap.put("pointId", String.valueOf(pointId)); + messageMap.put("shopId", String.valueOf(shopId)); + messageMap.put("storeName", shopInfo.getShopName()); + messageMap.put("partnerUsername", lineInfo.getUsername()); + messageMap.put("partnerMobile", lineInfo.getMobile()); + messageMap.put("wantShopName", "杭州市余杭区"); + messageMap.put("appointmentTime", "2024-05-06 12:30"); + messageMap.put("interviewUsername", "章臣彪"); + messageMap.put("payTime", "2024-05-01 12:30"); + messageMap.put("submitTime", "2024-05-04 12:30"); + messageMap.put("pointName", pointInfo.getPointName()); + messageMap.put("pointAddress", pointInfo.getAddress()); + messageMap.put("reason", "表现一般不予通过"); + commonService.sendMessage(Arrays.asList("123836131931284423","020125244825417786"), messageEnum, messageMap); + return ResponseResult.success(Boolean.FALSE); + } + + @GetMapping("/sendSms") + public ResponseResult sendSms(@RequestParam("startTime")String startTime, @RequestParam("endTime")String endTime){ + List interviewList = lineInterviewDAO.getInterviewRemindList(startTime, endTime); + Map templateParam = new HashMap<>(); + templateParam.put("pointName", "杭州门店A"); + List smsMsgList = new ArrayList<>(); + smsMsgList.add(SMSMsgEnum.SELECT_SUCCESS); + for (SMSMsgEnum value : smsMsgList) { + commonService.sendSms("17681878615", value, templateParam); + } + return ResponseResult.success(Boolean.FALSE); + } + + @GetMapping("/initShop") + public ResponseResult initShop(@RequestParam("lineId")Long lineId){ + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId); + shopService.initShop(lineInfo); + return ResponseResult.success(Boolean.FALSE); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTrainingExperienceController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTrainingExperienceController.java new file mode 100644 index 000000000..5105692de --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTrainingExperienceController.java @@ -0,0 +1,36 @@ +package com.cool.store.controller.webb; + +import com.cool.store.entity.LeaseBaseInfoDO; +import com.cool.store.request.TrainingExperienceDistributionRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.TrainingExperienceService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("/pc/training/experience/") +@Api(tags = "PC端-实训体验") +@Slf4j +public class PCTrainingExperienceController { + + @Resource + TrainingExperienceService trainingExperienceService; + + @ApiOperation("实训体验分配或更新") + @PostMapping("/distribution") + public ResponseResult distribution(@RequestBody @Validated TrainingExperienceDistributionRequest request) { + return ResponseResult.success(trainingExperienceService.distribution(request)); + } + + @ApiOperation("查询实训体验") + @GetMapping("/get") + public ResponseResult getTrainingExperience(@RequestParam("lineId") Long lineId) { + return ResponseResult.success(trainingExperienceService.getTrainingExperience(lineId)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PointController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PointController.java new file mode 100644 index 000000000..eef6d56d1 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PointController.java @@ -0,0 +1,239 @@ +package com.cool.store.controller.webb; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.request.*; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.PointService; +import com.cool.store.vo.LinePointBaseInfoVO; +import com.cool.store.vo.point.*; +import com.cool.store.vo.shop.ShopStageVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: ShopPointController + * @Description: + * @date 2024-03-29 15:36 + */ +@Slf4j +@Api(tags = "选址&铺位") +@RestController +@RequestMapping("/pc/point") +public class PointController { + + @Resource + private PointService pointService; + + @ApiOperation("新增铺位") + @PostMapping("/add") + public ResponseResult addPointDetailInfo(@RequestBody @Validated AddPointDetailRequest shopPointDetailRequest) { + log.info("新增铺位:{}", JSONObject.toJSONString(shopPointDetailRequest)); + return ResponseResult.success(pointService.addPointDetailInfo(shopPointDetailRequest, CurrentUserHolder.getUserId())); + } + + @ApiOperation("铺位详情") + @GetMapping("/detail") + public ResponseResult getPointDetailInfo(@RequestParam("pointId")Long pointId, + @RequestParam(value = "isGetNodeNo", required = false)Boolean isGetNodeNo) { + return ResponseResult.success(pointService.getPointDetailInfo(pointId, isGetNodeNo)); + } + + @ApiOperation("完善铺位") + @PostMapping("/update") + public ResponseResult updatePointDetailInfo(@RequestBody @Validated UpdatePointDetailRequest shopPointDetailRequest) { + return ResponseResult.success(pointService.updatePointDetailInfo(shopPointDetailRequest)); + } + + @ApiOperation("生成评估报告") + @PostMapping("/generateEvaluationReport") + public ResponseResult generateEvaluationReport(@RequestBody PointIdRequest request) { + return ResponseResult.success(pointService.generateEvaluationReport(request.getPointId())); + } + + @ApiOperation("铺位失效") + @PostMapping("/invalid") + public ResponseResult pointInvalid(@RequestBody PointIdRequest request) { + return ResponseResult.success(pointService.pointInvalid(request.getPointId())); + } + + @ApiOperation("铺位解绑") + @PostMapping("/unbind") + public ResponseResult pointUnbind(@RequestBody PointIdRequest request) { + return ResponseResult.success(pointService.pointUnbind(request.getPointId())); + } + + @ApiOperation("配置高德评估报告") + @PostMapping("/addMapEvaluationReport") + public ResponseResult addMapEvaluationReport(@RequestBody AddMapEvaluationReportRequest request) { + return ResponseResult.success(pointService.addMapEvaluationReport(request)); + } + + @ApiOperation("选址人员提交审批") + @PostMapping("/submitAudit") + public ResponseResult submitAudit(@RequestBody @Validated SubmitPointAuditRequest request) { + return ResponseResult.success(pointService.submitAudit(request)); + } + + @ApiOperation("选址审批设置") + @PostMapping("/auditSetting") + public ResponseResult auditSetting(@RequestBody AuditSettingRequest request) { + return ResponseResult.success(pointService.auditSetting(request)); + } + + @ApiOperation("获取选址审批设置") + @GetMapping("/getAuditSetting") + public ResponseResult getAuditSetting() { + return ResponseResult.success(pointService.getAuditSetting()); + } + + @ApiOperation("获取催办用户列表") + @GetMapping("/getTodoUserList") + public ResponseResult> getTodoUserList(@RequestParam("pointId")Long pointId) { + return ResponseResult.success(pointService.getTodoUserList(pointId)); + } + + @ApiOperation("营运人员审批") + @PostMapping("/operationUserAudit") + public ResponseResult operationUserAudit(@RequestBody @Validated OperationAuditRequest request) { + return ResponseResult.success(pointService.operationUserAudit(CurrentUserHolder.getUserId(), request)); + } + + @ApiOperation("审批(排除第二级审批)") + @PostMapping("/audit") + public ResponseResult audit(@RequestBody PointAuditRequest request) { + return ResponseResult.success(pointService.audit(CurrentUserHolder.getUserId(), request)); + } + + @ApiOperation("铺位转让") + @PostMapping("/turnDevelopmentManager") + public ResponseResult turnDevelopmentManager(@RequestBody @Validated TurnDevelopmentManagerRequest request) { + return ResponseResult.success(pointService.turnDevelopmentManager(request)); + } + + @ApiOperation("获取我负责的加盟商列表") + @PostMapping("/getLinePage") + public ResponseResult> getLinePage(@RequestBody PointLinePageRequest request) { + request.setDevelopmentManager(CurrentUserHolder.getUserId()); + return ResponseResult.success(pointService.getLinePage(request)); + } + + @ApiOperation("获取单个加盟商选址数据") + @GetMapping("/getLineInfo") + public ResponseResult getLineInfo(@RequestParam("lineId") Long lineId) { + return ResponseResult.success(pointService.getLineInfo(lineId)); + } + + @ApiOperation("首页我的数据") + @GetMapping("/getMyData") + public ResponseResult getMyPointData() { + return ResponseResult.success(pointService.getMyPointData(CurrentUserHolder.getUserId())); + } + + @ApiOperation("我的铺位-已入库/暂未入库") + @PostMapping("/getMyPointPage") + public ResponseResult> getMyPointPage(@RequestBody @Validated PointPageRequest request) { + request.setDevelopmentManager(CurrentUserHolder.getUserId()); + return ResponseResult.success(pointService.getMyPointPage(request)); + } + + @ApiOperation("全部铺位") + @PostMapping("/getTeamPointPage") + public ResponseResult> getTeamPointPage(@RequestBody @Validated AllPointPageRequest request) { + request.setCurUserId(CurrentUserHolder.getUserId()); + return ResponseResult.success(pointService.getTeamPointPage(request)); + } + + @ApiOperation("获取单个铺位审批记录") + @GetMapping("/getAuditRecord") + public ResponseResult> getPointAllAuditRecord(@RequestParam("pointId")Long pointId) { + return ResponseResult.success(pointService.getPointAllAuditRecord(pointId)); + } + + @ApiOperation("获取加盟商的推荐铺位列表") + @GetMapping("/getLineRecommendPointList") + public ResponseResult> getLineRecommendPointList(@RequestParam("lineId")Long lineId) { + return ResponseResult.success(pointService.getLineRecommendPointList(lineId)); + } + + @ApiOperation("选址人员获取可推荐铺位列表") + @PostMapping("/getRecommendPointList") + public ResponseResult> getRecommendPointList(@RequestBody @Validated RecommendPointPageRequest request) { + request.setDevelopmentManager(CurrentUserHolder.getUserId()); + return ResponseResult.success(pointService.getRecommendPointList(request)); + } + + @ApiOperation("加盟商详情推送铺位") + @PostMapping("/lineRecommendPoint") + public ResponseResult lineRecommendPoint(@RequestBody @Validated LineRecommendPointRequest request) { + request.setDevelopmentManager(CurrentUserHolder.getUserId()); + return ResponseResult.success(pointService.lineRecommendPoint(request)); + } + + @ApiOperation("铺位详情推送加盟商") + @PostMapping("/pointRecommendLine") + public ResponseResult pointRecommendLine(@RequestBody @Validated PointRecommendLineRequest request) { + request.setDevelopmentManager(CurrentUserHolder.getUserId()); + return ResponseResult.success(pointService.pointRecommendLine(request)); + } + + @ApiOperation("选址人员转让加盟商") + @PostMapping("/turnLine") + public ResponseResult turnLine(@RequestBody @Validated TurnLineRequest request) { + return ResponseResult.success(pointService.turnLine(request)); + } + + @ApiOperation("修改意向开店数量") + @PostMapping("/updateWantShopNum") + public ResponseResult updateWantShopNum(@RequestBody @Validated UpdateWantShopNumRequest request) { + return ResponseResult.success(pointService.updateWantShopNum(request)); + } + + @ApiOperation("获取阶段/子阶段/子阶段状态枚举") + @GetMapping("/getShopSubStageStatusEnum") + public ResponseResult> getShopSubStageStatusEnum() { + return ResponseResult.success(ShopStageVO.getShopStageList()); + } + + @ApiOperation("获取待办列表") + @PostMapping("/getTodoList") + public ResponseResult> getTodoList(@RequestBody PointTodoPageRequest request) { + request.setDevelopmentManager(CurrentUserHolder.getUserId()); + return ResponseResult.success(pointService.getTodoList(request)); + } + + @ApiOperation("获取租赁合同详情") + @GetMapping("/getRentContractDetail") + public ResponseResult getRentContractDetail(@RequestParam("shopId")Long shopId) { + return ResponseResult.success(pointService.getRentContractDetail(shopId)); + } + + @ApiOperation("租赁合同审核") + @PostMapping("/auditRentContract") + public ResponseResult auditRentContract(@RequestBody @Validated AuditRentContractRequest request) { + request.setOperateUserId(CurrentUserHolder.getUserId()); + request.setOperateUserName(CurrentUserHolder.getUser().getName()); + return ResponseResult.success(pointService.auditRentContract(request)); + } + + @ApiOperation("获取推荐给加盟商的铺位") + @PostMapping("/getLineRecommendPointPage") + public ResponseResult> getLineRecommendPointPage(@RequestBody MiniPointPageRequest request) { + return ResponseResult.success(pointService.getLineRecommendPointPage(request)); + } + + @ApiOperation("上传租赁合同") + @PostMapping("/uploadRentContract") + public ResponseResult uploadRentContract(@RequestBody @Validated AddRentContractRequest request) { + return ResponseResult.success(pointService.uploadRentContract(request)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PreparationController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PreparationController.java new file mode 100644 index 000000000..e180e1e2a --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PreparationController.java @@ -0,0 +1,56 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.request.PreparationRequest; +import com.cool.store.request.TrainingExperienceDistributionRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.PreparationService; +import com.cool.store.service.impl.PreparationServiceImpl; +import com.cool.store.vo.Preparation.PreparationProcessVO; +import com.cool.store.vo.Preparation.PreparationScheduleDetailVO; +import com.cool.store.vo.Preparation.PreparationScheduleVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/26 16:56 + * @Version 1.0 + */ +@Slf4j +@Api(tags = "筹建进度") +@RestController +@RequestMapping("/pc/preparation") +public class PreparationController { + + @Resource + PreparationService preparationService; + + @ApiOperation("进度列表") + @PostMapping("/list") + public ResponseResult> distribution(@RequestBody PreparationRequest request) { + request.setCurUserId(CurrentUserHolder.getUserId()); + return ResponseResult.success(preparationService.getPreparationSchedule(request)); + } + + + @ApiOperation("筹建详情") + @GetMapping("/getPreparationDetail") + public ResponseResult getPreparationDetail(@RequestParam("shopId")Long shopId) { + return ResponseResult.success(preparationService.getPreparationDetail(shopId)); + } + + + @ApiOperation("筹建进展") + @GetMapping("/getPreparationProcess") + public ResponseResult getPreparationProcess(@RequestParam("shopId")Long shopId) { + return ResponseResult.success(preparationService.getPreparationProcess(shopId)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/RegionAreaConfigController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/RegionAreaConfigController.java new file mode 100644 index 000000000..3b3c1134b --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/RegionAreaConfigController.java @@ -0,0 +1,41 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.RegionAreaConfigAddRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.RegionAreaConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * @author wxp + * @version 1.0 + */ +@Api(tags = "区域配置") +@RestController +@RequestMapping("pc/regionAreaConfig") +public class RegionAreaConfigController { + + @Autowired + private RegionAreaConfigService regionAreaConfigService; + + @ApiOperation(value = "区域配置省市") + @PostMapping("/addRegionAreaConfig") + public ResponseResult saveOrUpdateRegionAreaConfig(@Valid @RequestBody RegionAreaConfigAddRequest request) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(regionAreaConfigService.saveOrUpdateRegionAreaConfig(request, user)); + } + + @ApiOperation("根据战区id获取配置的省市列表") + @GetMapping("/listAreaIdByRegionId") + public ResponseResult> listAreaIdByRegionId(@RequestParam("regionId")Long regionId) { + return ResponseResult.success(regionAreaConfigService.listAreaIdByRegionId(regionId)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/RegionController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/RegionController.java new file mode 100644 index 000000000..278de5ba3 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/RegionController.java @@ -0,0 +1,49 @@ +package com.cool.store.controller.webb; + +import com.cool.store.entity.RegionDO; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.RegionService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @ClassName RegionController + * @Description 区域 + */ +@RestController +@RequestMapping("/pc/region") +@Api(tags = "区域信息") +@Slf4j +public class RegionController { + + @Autowired + private RegionService regionService; + + @ApiOperation("根据意向区域找大区id") + @GetMapping("/getBigRegionIdByAreaId") + public ResponseResult getBigRegionIdByAreaId(@RequestParam(value = "wantShopAreaId", required = true) Long wantShopAreaId) { + return ResponseResult.success(regionService.getBigRegionIdByAreaId(wantShopAreaId)); + } + + @ApiOperation("根据三方区域类型获取区域列表 0-根 1=大区 2=战区 3=小区(督导区 4=门店") + @GetMapping("/listByThirdRegionType") + public ResponseResult> listByThirdRegionType(@RequestParam(value = "parentId", required = false) Long parentId, + @RequestParam(value = "thirdRegionType", required = false) String thirdRegionType) { + return ResponseResult.success(regionService.listByThirdRegionType(parentId, thirdRegionType)); + } + + @ApiOperation("获取所属战区") + @GetMapping("/getBelongWarRegionName") + public ResponseResult getBelongWarRegionName(@RequestParam(value = "regionId", required = true) Long regionId) { + return ResponseResult.success(regionService.getBelongWarRegionName(regionId)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/SysRoleController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/SysRoleController.java new file mode 100644 index 000000000..f04e3fd88 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/SysRoleController.java @@ -0,0 +1,50 @@ +package com.cool.store.controller.webb; + +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.enums.UserRoleEnum; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.SysRoleService; +import com.cool.store.service.UserAuthMappingService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/pc/sysRole") +@Api(tags = "角色信息") +@Slf4j +public class SysRoleController { + @Autowired + private SysRoleService sysRoleService; + + @Resource + private UserAuthMappingService userAuthMappingService; + + @GetMapping(path = "/getXfsgRoles") + public ResponseResult> getXfsgRoles() { + return ResponseResult.success(sysRoleService.getXfsgRoles()); + } + + @GetMapping(path = "/getUserIdByRegionIdWithRolePriority") + public ResponseResult getUserIdByRegionIdWithRolePriority(@RequestParam(value = "regionId", required = true) Long regionId) { + List roleList = Arrays.asList(UserRoleEnum.THEATER_MANAGER, UserRoleEnum.OPERATIONS_MANAGER, UserRoleEnum.REGION_MANAGER); + return ResponseResult.success(sysRoleService.getUserIdByRegionIdWithRolePriority(regionId, roleList)); + } + + @GetMapping(path = "/getUserByRoleEnumAndRegionId") + @ApiOperation("获取有区域权限和职位") + public ResponseResult getUserByRoleEnumAndRegionId(@RequestParam("regionId") Long regionId, @RequestParam("roleName") String roleName) { + UserRoleEnum userRoleEnum = UserRoleEnum.getByDesc(roleName); + return ResponseResult.success(userAuthMappingService.getUserByRoleEnumAndRegionId(userRoleEnum, regionId)); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/SysStoreAppController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/SysStoreAppController.java new file mode 100644 index 000000000..b4253d597 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/SysStoreAppController.java @@ -0,0 +1,56 @@ +package com.cool.store.controller.webb; + + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.enums.UserRoleEnum; +import com.cool.store.request.SysStoreAppRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.response.SysStoreAppResponse; +import com.cool.store.service.SysStoreAppService; +import com.cool.store.service.UserAuthMappingService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("/pc/sysStore") +@Api(tags = "PC系统建店") +@Slf4j +public class SysStoreAppController { + + @Resource + private SysStoreAppService sysStoreAppService; + + @Resource + UserAuthMappingService userAuthMappingService; + + @PostMapping(path = "/submit") + @ApiOperation("提交(更新) 系统建店申请") + public ResponseResult submitSysBuildStore(@RequestBody SysStoreAppRequest request) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return sysStoreAppService.submitSysBuildStore(request, user); + } + + @GetMapping(path = "/default/get") + @ApiOperation("获取系统建店默认值") + public ResponseResult getDefaultValueSysBuildStore(@RequestParam("lineId") Long lineId, + @RequestParam("shopId") Long shopId) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(sysStoreAppService.getDefaultValueSysBuildStore(lineId, shopId, user)); + } + + + @GetMapping(path = "/getSmallRegionDD") + @ApiOperation("获取小区督导") + public ResponseResult getSmallRegionDD(@RequestParam("regionId") Long regionId) { + return ResponseResult.success(userAuthMappingService.hierarchicalSearch(UserRoleEnum.SUPERVISION, regionId)); + } + + + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ToDoController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ToDoController.java new file mode 100644 index 000000000..ff4326448 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ToDoController.java @@ -0,0 +1,44 @@ +package com.cool.store.controller.webb; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.PointService; +import com.cool.store.vo.point.PointToDoVO; +import com.cool.store.vo.shop.RentInfoToDoVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @author zhangchenbiao + * @FileName: ToDoController + * @Description: + * @date 2024-04-22 14:29 + */ +@Api(tags = "待办") +@RestController +@RequestMapping("/pc/todo") +public class ToDoController { + + @Resource + private PointService pointService; + + @ApiOperation("获取铺位选址待办") + @GetMapping("/getSelectPointToDoPage") + public ResponseResult> getSelectPointToDoPage(@RequestParam(value = "pageNumber",defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",defaultValue = "10")Integer pageSize){ + String userId = CurrentUserHolder.getUserId(); + return ResponseResult.success(pointService.getSelectPointToDoPage(userId, pageNumber, pageSize)); + } + + @ApiOperation("上传租赁合同待办") + @PostMapping("/getRentContractToDoPage") + public ResponseResult> getRentContractToDoPage(@RequestParam(value = "pageNumber",defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",defaultValue = "10")Integer pageSize){ + String userId = CurrentUserHolder.getUserId(); + return ResponseResult.success(pointService.getRentContractToDoPage(userId, pageNumber, pageSize)); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/UserAuthMappingController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/UserAuthMappingController.java new file mode 100644 index 000000000..bba41df56 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/UserAuthMappingController.java @@ -0,0 +1,54 @@ +package com.cool.store.controller.webb; + +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.enums.UserRoleEnum; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.UserAuthMappingService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Map; + +/** + * @ClassName UserAuthMappingController + * @Description 区域权限信息 + */ +@RestController +@RequestMapping("/pc/userAuthMapping") +@Api(tags = "区域权限信息") +@Slf4j +public class UserAuthMappingController { + + @Autowired + private UserAuthMappingService userAuthMappingService; + + + @ApiOperation("找人") + @GetMapping("/getUserByRoleNameAndAreaId") + public ResponseResult getUserByRoleNameAndAreaId(@RequestParam(value = "roleName", required = true) String roleName, + @RequestParam(value = "wantShopAreaId", required = true) Long wantShopAreaId) { + UserRoleEnum roleEnum = UserRoleEnum.getByDesc(roleName); + return ResponseResult.success(userAuthMappingService.getUserByRoleEnumAndWantShopAreaId(roleEnum, wantShopAreaId)); + } + + @ApiOperation("找意向区域") + @GetMapping("/listWantShopAreaIdByUserId") + public ResponseResult> listWantShopAreaIdByUserId(@RequestParam(value = "userId", required = true) String userId) { + return ResponseResult.success(userAuthMappingService.listWantShopAreaIdByUserId(userId)); + } + + @ApiOperation("找角色下的人") + @GetMapping("/getUserIdByRoleIdAndRegionId") + public ResponseResult>> getUserIdByRoleIdAndRegionId(@RequestParam(value = "roleIds", required = true) List roleIds, + @RequestParam(value = "regionId", required = true) Long regionId) { + return ResponseResult.success(userAuthMappingService.getUserIdByRoleIdAndRegionId(roleIds, regionId)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/UserChannelController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/UserChannelController.java new file mode 100644 index 000000000..181af8cc4 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/UserChannelController.java @@ -0,0 +1,35 @@ +package com.cool.store.controller.webb; + +import com.cool.store.dto.partner.UserChannelDTO; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.HyPartnerUserChannelService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2023/8/10 11:17 + * @Version 1.0 + */ +@RestController +@RequestMapping("/pc/") +@Api(tags = "线索来源") +@Slf4j +public class UserChannelController { + + @Resource + HyPartnerUserChannelService hyPartnerUserChannelService; + + @GetMapping(path = "/queryAllUserChannelList") + @ApiOperation("线索来源列表") + public ResponseResult> queryAllUserChannelList(){ + return ResponseResult.success(hyPartnerUserChannelService.queryAllUserChannelList()); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/VideoController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/VideoController.java new file mode 100644 index 000000000..376502bdf --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/VideoController.java @@ -0,0 +1,46 @@ +package com.cool.store.controller.webb; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.dto.trtc.callback.VideoCallBackDTO; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.TRTCVideoService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("pc/video") +@Api(tags = "腾讯音视频接口") +@Slf4j +public class VideoController { + + @Autowired + private TRTCVideoService videoService; + + @PostMapping("/callback") + @ApiOperation("音视频回调(腾讯云回调)") + public ResponseResult videoCallback(@RequestBody VideoCallBackDTO videoCallBackDTO) { + try { + log.info("腾讯音视频上传回调开始,request{}", JSONObject.toJSONString(videoCallBackDTO)); + //不是音视频上传的回调 + if (311 != videoCallBackDTO.getEventType()) { + return null; + } + if (0 != videoCallBackDTO.getEventInfo().getPayload().getStatus()) { + log.error("腾讯音视频录制视频上传错误:request:\t{}", videoCallBackDTO); + return null; + } + videoService.handleVideoCallBack(videoCallBackDTO); + return new ResponseResult(0, "腾讯云回调音视频回调数据接收成功"); + } catch (Exception e) { + log.error("腾讯音视频录制视频上传回调错误:e:\t{}", e.toString()); + } + return null; + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/VodController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/VodController.java new file mode 100644 index 000000000..528956fca --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/VodController.java @@ -0,0 +1,46 @@ +package com.cool.store.controller.webb; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.service.VodService; +import com.cool.store.utils.vod.AliResponseUtil; +import com.cool.store.utils.vod.CallbackRequest; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + +/** + * @author byd + * @date 2024-05-07 19:13 + */ +@RestController +@RequestMapping("pc/vod") +@Api(tags = "视频回调接口") +@Slf4j +public class VodController { + + @Autowired + private VodService vodService; + + @RequestMapping("callback") + public JSONObject callback(HttpServletRequest request) throws IOException { + log.info("================================="); + log.info("VOD视频回调"); + String cl = request.getHeader("content-length"); + log.info("content-length:" + cl); + String vodCallbackBody = AliResponseUtil.GetPostBody(request.getInputStream(), Integer.parseInt(cl)); + log.info("vodCallbackBody:" + vodCallbackBody); + CallbackRequest callback = JSON.parseObject(vodCallbackBody, CallbackRequest.class); + log.info("callback" + JSON.toJSONString(callback)); + vodService.callback(callback); + log.info("================================="); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("Status", "OK"); + return jsonObject; + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/ApplyLicenseController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/ApplyLicenseController.java new file mode 100644 index 000000000..24076fcfa --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/ApplyLicenseController.java @@ -0,0 +1,60 @@ +package com.cool.store.controller.webc; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.context.PartnerUserHolder; +import com.cool.store.request.SubmitLicenseRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.response.SubmitLicenseResponse; +import com.cool.store.service.ApplyLicenseService; +import com.cool.store.service.CoolStoreStartFlowService; +import com.cool.store.vo.PartnerUserInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * 证照办理 + */ +@RestController +@RequestMapping("/mini/license") +@Api(tags = "移动端证照办理") +@Slf4j +public class ApplyLicenseController { + + + @Resource + ApplyLicenseService applyLicenseService; + + @ApiOperation("证照办理提交") + @PostMapping("/submit") + public ResponseResult submitLicense(@RequestBody SubmitLicenseRequest request) { + PartnerUserInfoVO user = PartnerUserHolder.getUser(); + return ResponseResult.success(applyLicenseService.submitLicense(request,user)); + } + + + @ApiOperation("证照办理数据回显") + @GetMapping("/default/get") + public ResponseResult getDefault(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(applyLicenseService.getDefault(shopId)); + } + + /** + * + * @param + * @param status 0通过 1不通过 + * @return + */ + @GetMapping(path = "/examine") + @ApiOperation("证照审批列表") + public ResponseResult licenseExamine(@RequestParam("id") Long shopId, + @RequestParam("status") Integer status, + @RequestParam("result") String result) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(applyLicenseService.licenseExamine(shopId,status,result,user)); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/BankController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/BankController.java new file mode 100644 index 000000000..11cce33cc --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/BankController.java @@ -0,0 +1,44 @@ +package com.cool.store.controller.webc; + +import com.cool.store.entity.BankdocDO; +import com.cool.store.entity.BanktypeDO; +import com.cool.store.request.BranchBankPageRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.BankService; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author Fun Li 2023/8/10 14:20 + * @version 1.0 + */ +@RestController +@RequestMapping("/mini/bank") +@Api(tags = "银行信息") +@Slf4j +public class BankController { + + @Autowired + private BankService bankService; + + @ApiOperation("银行类型") + @GetMapping("/listBank") + public ResponseResult> listBank() { + List result = bankService.listBank(); + return ResponseResult.success(result); + } + + @ApiOperation("支行列表查询") + @PostMapping("/listBranchBank") + public ResponseResult> listBranchBank(@RequestBody @Validated BranchBankPageRequest request) { + return ResponseResult.success(bankService.listBranchBank(request)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/LineController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/LineController.java new file mode 100644 index 000000000..d599aa4e9 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/LineController.java @@ -0,0 +1,70 @@ +package com.cool.store.controller.webc; + +import com.cool.store.response.ResponseResult; +import com.cool.store.service.LinePayService; +import com.cool.store.service.LineService; +import com.cool.store.vo.IntendProcessTotalVO; +import com.cool.store.vo.LineInfoVO; +import com.cool.store.vo.interview.AppointmentTimeVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/3/25 13:43 + * @Version 1.0 + */ +@RestController +@RequestMapping("/mini/line") +@Api(tags = "线索信息") +@Slf4j +public class LineController { + + @Resource + LineService lineService; + + @Resource + LinePayService linePayService; + + + @ApiOperation("查询线索详情") + @GetMapping("/getLineDetail") + @ApiImplicitParams({ + @ApiImplicitParam(name = "lineId", value = "线索id", required = true) + }) + public ResponseResult getLineInfo(@RequestParam("lineId")Long lineId) { + return ResponseResult.success(lineService.getLineInfo(lineId)); + } + + @ApiOperation("根据线索id查询大区的支付二维码图片") + @GetMapping("/getRegionPayPic") + public ResponseResult getRegionPayPic(@RequestParam("lineId")Long lineId) { + return ResponseResult.success(lineService.getPayPicByLineId(lineId)); + } + + + @ApiOperation("线索流程进度") + @GetMapping("/getIntendProcess") + @ApiImplicitParams({ + @ApiImplicitParam(name = "lineId", value = "线索id", required = true) + }) + public ResponseResult getIntendProcessTotal(@RequestParam("lineId")Long lineId) { + return ResponseResult.success(lineService.getIntendProcessTotal(lineId)); + } + + + + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/LineInterviewController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/LineInterviewController.java new file mode 100644 index 000000000..cc74e2994 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/LineInterviewController.java @@ -0,0 +1,78 @@ +package com.cool.store.controller.webc; + +import com.cool.store.context.PartnerUserHolder; +import com.cool.store.enums.InterviewUserTypeEnum; +import com.cool.store.request.AppointmentTimeRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.LineInterviewService; +import com.cool.store.vo.PartnerUserInfoVO; +import com.cool.store.vo.interview.AppointmentTimeVO; +import com.cool.store.vo.interview.EnterInterviewVO; +import com.cool.store.vo.interview.InterviewDetailVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: LineInterviewController + * @Description: + * @date 2024-03-15 16:04 + */ +@RestController +@RequestMapping("/mini/interview") +@Api(tags = "加盟商端-面试&面谈") +@Slf4j +public class LineInterviewController { + + @Resource + private LineInterviewService lineInterviewService; + + @ApiOperation("获取面试/面谈 预约时间") + @GetMapping("/appointment/time") + @ApiImplicitParams({ + @ApiImplicitParam(name = "lineId", value = "线索id", required = true), + @ApiImplicitParam(name = "interviewType", value = "面试类型:0面谈;1一审;2二审", required = true), + @ApiImplicitParam(name = "appointmentDate", value = "预约日期 yyyy-MM-dd", required = true) + }) + public ResponseResult> getAppointmentTime(@RequestParam("lineId")Long lineId, + @RequestParam("interviewType")Integer interviewType, + @RequestParam("appointmentDate") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate appointmentDate) { + return ResponseResult.success(lineInterviewService.getAppointmentTime(lineId, interviewType, appointmentDate)); + } + + @ApiOperation("预约时间") + @PostMapping("/appointment/time") + public ResponseResult appointmentTime(@RequestBody @Validated AppointmentTimeRequest request) { + return ResponseResult.success(lineInterviewService.appointmentTime(request)); + } + + @ApiOperation("获取面试信息") + @GetMapping("/detail") + public ResponseResult getInterviewDetail(@RequestParam("lineId")Long lineId, @RequestParam("interviewType")Integer interviewType) { + return ResponseResult.success(lineInterviewService.getInterviewDetail(lineId, interviewType)); + } + + @ApiOperation("进入房间") + @GetMapping("/room/enter") + public ResponseResult enterInterviewRoom(@RequestParam("interviewId")Long interviewId) { + PartnerUserInfoVO partnerUser = PartnerUserHolder.getUser(); + return ResponseResult.success(lineInterviewService.enterInterviewRoom(interviewId, partnerUser.getPartnerId(), InterviewUserTypeEnum.LINE)); + } + + @ApiOperation("修改面审时间") + @PostMapping("/appointment/time/modify") + public ResponseResult modifyAppointmentTime(@RequestBody @Validated AppointmentTimeRequest request) { + return ResponseResult.success(lineInterviewService.modifyAppointmentTime(request)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/LinePayController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/LinePayController.java new file mode 100644 index 000000000..332d7f239 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/LinePayController.java @@ -0,0 +1,49 @@ +package com.cool.store.controller.webc; + +import com.cool.store.context.PartnerUserHolder; +import com.cool.store.enums.point.PayBusinessTypeEnum; +import com.cool.store.request.LinePaySubmitRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.LinePayService; +import com.cool.store.vo.LinePayVO; +import com.cool.store.vo.PartnerUserInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @Author wxp + * @Date 2024/3/25 13:43 + * @Version 1.0 + */ +@RestController +@RequestMapping("/mini/linePay") +@Api(tags = "缴纳意向金") +@Slf4j +public class LinePayController { + + @Resource + private LinePayService linePayService; + + @ApiOperation("查询意向金详情") + @GetMapping("/getLinePayInfo") + @ApiImplicitParams({ + @ApiImplicitParam(name = "lineId", value = "线索id", required = true) + }) + public ResponseResult getLinePayInfo(@RequestParam("lineId")Long lineId) { + return ResponseResult.success(linePayService.getLinePayInfo(lineId, PayBusinessTypeEnum.INTENT_MONEY.getCode(),null)); + } + + @ApiOperation("缴纳意向金/加盟费") + @PostMapping("/submitPayInfo") + public ResponseResult submitPayInfo(@RequestBody LinePaySubmitRequest request){ + PartnerUserInfoVO partnerUser = PartnerUserHolder.getUser(); + return ResponseResult.success(linePayService.submitPayInfo(request, partnerUser)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniAssessmentTemplateController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniAssessmentTemplateController.java new file mode 100644 index 000000000..86e8656dd --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniAssessmentTemplateController.java @@ -0,0 +1,37 @@ +package com.cool.store.controller.webc; + +import com.cool.store.response.ResponseResult; +import com.cool.store.service.AssessmentTemplateService; +import com.cool.store.vo.AssessmentTemplateVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/4/28 16:29 + * @Version 1.0 + */ +@RestController +@RequestMapping("/mini/template") +@Api(tags = "小程序检查项模板") +@Slf4j +public class MiniAssessmentTemplateController { + + @Resource + AssessmentTemplateService assessmentTemplateService; + + @ApiOperation("检查项模板列表type 0 1 2 3") + @GetMapping("/listByType") + public ResponseResult> intendPendingList(@RequestParam(value = "type",required = true)Integer type) { + return ResponseResult.success(assessmentTemplateService.listByType(type)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniContentController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniContentController.java new file mode 100644 index 000000000..bdad8f724 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniContentController.java @@ -0,0 +1,49 @@ +package com.cool.store.controller.webc; + +import com.cool.store.dto.content.ContentQueryDetailDto; +import com.cool.store.dto.content.ContentQueryListDto; +import com.cool.store.entity.HyContentInfoDO; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.ContentService; +import com.cool.store.vo.HyContentInfoVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/3/13 14:33 + * @Version 1.0 + */ +@RestController +@RequestMapping("mini/news") +@Api(tags = "小程序动态") +@Slf4j +public class MiniContentController { + @Autowired + private ContentService contentService; + + @PostMapping("/queryContentList") + @ApiOperation("查询动态列表") + public ResponseResult> queryContentList(@RequestBody ContentQueryListDto dto) { + PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); + List list = contentService.queryContentListToC(dto); + PageInfo page = new PageInfo<>(list); + return ResponseResult.success(page); + } + + @PostMapping("/detail") + @ApiOperation("动态详情") + public ResponseResult queryContentInfo(@RequestBody ContentQueryDetailDto dto) { + return ResponseResult.success(contentService.queryContentInfo(dto.getContentId())); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniDecorationController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniDecorationController.java new file mode 100644 index 000000000..a115a439f --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniDecorationController.java @@ -0,0 +1,115 @@ +package com.cool.store.controller.webc; + +import com.cool.store.context.PartnerUserHolder; +import com.cool.store.dto.decoration.ConstructionScheduleDTO; +import com.cool.store.dto.decoration.DecorationModelDTO; +import com.cool.store.dto.decoration.ThreeAcceptanceDTO; +import com.cool.store.entity.ShopAuditInfoDO; +import com.cool.store.request.LinePaySubmitRequest; +import com.cool.store.request.ThreeAcceptanceCheckRequest; +import com.cool.store.request.ThreeAcceptanceRequest; +import com.cool.store.response.ResponseResult; + +import com.cool.store.response.ThreeSignResponse; +import com.cool.store.service.AssessmentTemplateService; +import com.cool.store.service.DecorationService; +import com.cool.store.service.SeeAcceptanceService; +import com.cool.store.vo.AssessmentTemplateVO; +import com.cool.store.vo.Fitment.DecorationStageVO; + +import com.cool.store.vo.Fitment.DesignInfoVo; +import com.cool.store.vo.LinePayVO; +import com.cool.store.vo.PartnerUserInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Auther: WangShuo + * @Date: 2024/04/29/下午2:46 + * @Version 1.0 + * @注释: + */ +@RestController +@RequestMapping("/mini/decoration") +@Api(tags = "mini装修阶段") +@Slf4j +public class MiniDecorationController { + @Resource + private DecorationService decorationService; + @Resource + private AssessmentTemplateService assessmentTemplateService; + @Resource + private SeeAcceptanceService seeAcceptanceService; + @ApiOperation("获取设计阶段子阶段信息") + @GetMapping("/designSub") + public ResponseResult getDesign(@RequestParam Long shopId){ + return ResponseResult.success( decorationService.DesignInfo(shopId)) ; + } + @ApiOperation("获取施工阶段子阶段信息") + @GetMapping("/getConstructionSub") + public ResponseResult> getConstructionSub(@RequestParam Long shopId){ + return ResponseResult.success(decorationService.getConstruction(shopId)) ; + } + @PostMapping("/submitDecorationModel") + @ApiOperation("提交装修款") + public ResponseResult submitDecorationModel(@RequestBody LinePaySubmitRequest linePaySubmitRequest){ + return ResponseResult.success(decorationService.submitDecorationModel(linePaySubmitRequest, PartnerUserHolder.getUser())); + } + @ApiOperation("获取装修款信息,和二维码") + @GetMapping("/getDecorationModel") + public ResponseResult getDecorationModel(@RequestParam Long shopId){ + return ResponseResult.success(decorationService.decorationModel(shopId)) ; + } + @ApiOperation("获取装修款阶段信息") + @GetMapping("/getDecorationModeStage") + public ResponseResult getDecorationModeStage(@RequestParam Long shopId){ + return ResponseResult.success(decorationService.getDecorationGoldStage(shopId)) ; + } + + @ApiOperation("获取装修款详情信息") + @GetMapping("/getDecorationModelInfo") + public ResponseResult getDecorationModelInfo(@RequestParam Long shopId){ + PartnerUserInfoVO user = PartnerUserHolder.getUser(); + return ResponseResult.success(decorationService.getDecorationModel(shopId,user)); + } + @ApiOperation("获取三方验收模板检查项") + @GetMapping("/getChecks") + public ResponseResult> getChecks(@RequestParam Integer type){ + return ResponseResult.success(assessmentTemplateService.listByType(type)); + } + @ApiOperation("提交三方验收检查项") + @PostMapping("/submitThreeChecks") + public ResponseResult submitThreeChecks(@RequestBody ThreeAcceptanceCheckRequest request){ + return ResponseResult.success(decorationService.submitThreeCheck(request)); + } + @ApiOperation("获取三方验收检查项") + @GetMapping("/getAcceptanceChecks") + public ResponseResult getAcceptanceChecks(@RequestParam Long shopId){ + return ResponseResult.success(decorationService.getThreeChecks(shopId)); + } + @ApiOperation("提交三方验收签字") + @PostMapping("/submitThreeAcceptanceSign") + public ResponseResult submitThreeAcceptance(@RequestBody ThreeAcceptanceRequest request){ + return ResponseResult.success(decorationService.miniSubmitAcceptanceSign(request)); + } + @ApiOperation("查看三方验收签字") + @GetMapping("/getThreeSign") + public ResponseResult getThreeAcceptance(@RequestParam Long shopId){ + return ResponseResult.success(decorationService.getThreeAcceptanceSign(shopId)); + } + @ApiOperation("获取撤场数据") + @GetMapping("/getWithdrawal") + public ResponseResult getWithdrawal(@RequestParam Long shopId){ + return ResponseResult.success(seeAcceptanceService.getWithdrawal(shopId)); + } + @ApiOperation("获取视觉验收审核数据") + @GetMapping("/getSeeAuditInfo") + public ResponseResult< List > getAuditInfo(@RequestParam Long shopId){ + return ResponseResult.success(seeAcceptanceService.getAuditInfo(shopId)); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniEmployeeTrainingController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniEmployeeTrainingController.java new file mode 100644 index 000000000..6d56670f7 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniEmployeeTrainingController.java @@ -0,0 +1,39 @@ +package com.cool.store.controller.webc; + +import com.cool.store.response.ResponseResult; +import com.cool.store.service.EmployeeTrainingService; +import com.cool.store.vo.EmployeeTrainingVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author byd + * @date 2024-04-30 10:15 + */ +@Api(tags = "mini员工培训") +@RestController +@RequestMapping("mini/employeeTraining") +public class MiniEmployeeTrainingController { + + @Resource + private EmployeeTrainingService employeeTrainingService; + + @ApiOperation("培训员工列表") + @GetMapping("/trainingListByShopId") + @ApiImplicitParams({ + @ApiImplicitParam(name = "shopId", value = "店铺id", required = true) + }) + public ResponseResult> trainingListByShopId(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(employeeTrainingService.trainingListByShopId(shopId)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniFranchiseFeeController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniFranchiseFeeController.java new file mode 100644 index 000000000..bda8e655f --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniFranchiseFeeController.java @@ -0,0 +1,47 @@ +package com.cool.store.controller.webc; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.AuditFranchiseFeeRequest; +import com.cool.store.request.FranchiseFeeRequest; +import com.cool.store.response.FranchiseFeeResponse; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.FranchiseFeeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("/mini/franchiseFee") +@Api(tags = "Mini 加盟费/保证金") +@Slf4j +public class MiniFranchiseFeeController { + + + @Resource + FranchiseFeeService franchiseFeeService; + + @ApiOperation("基本信息提交") + @PostMapping("/submit") + public ResponseResult submitLicense(@RequestBody FranchiseFeeRequest request) { + return ResponseResult.success(franchiseFeeService.submitLicense(request)); + } + + @ApiOperation("基本信息查询") + @GetMapping("/getDetail") + public ResponseResult getDetail(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(franchiseFeeService.getDetail(shopId)); + } + + + @ApiOperation("缴纳加盟费/保证金审核接口") + @PostMapping("/audit") + public ResponseResult auditFranchiseFee(@RequestBody AuditFranchiseFeeRequest request) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(franchiseFeeService.auditFranchiseFee(request,user)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniIntentAgreementController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniIntentAgreementController.java new file mode 100644 index 000000000..533731ffd --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniIntentAgreementController.java @@ -0,0 +1,39 @@ +package com.cool.store.controller.webc; + +import com.cool.store.request.IntentAgreementSubmitRequest; +import com.cool.store.request.JoinIntentionRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.response.SigningBaseInfoResponse; +import com.cool.store.service.IntentAgreementService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@RestController +@RequestMapping({"/mini/IntentAgreement"}) +@Slf4j +@Api(tags = "小程序意向协议") +public class MiniIntentAgreementController { + + @Resource + IntentAgreementService intentAgreementService; + + @PostMapping(path = "/submit") + @ApiOperation("签署意向协议") + public ResponseResult submit(@RequestBody IntentAgreementSubmitRequest request) { + boolean resp = intentAgreementService.submit(request); + return ResponseResult.success(resp); + } + + @GetMapping(path = "/get") + @ApiOperation("查询意向协议信息") + public ResponseResult getMiniIntentAgreement( + @RequestParam(value = "partnerId",required = false) String partnerId, + @RequestParam(value = "lineId",required = false) Long lineId) { + SigningBaseInfoResponse resp = intentAgreementService.getMiniIntentAgreement(partnerId,lineId); + return ResponseResult.success(resp); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniJoinIntentionController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniJoinIntentionController.java new file mode 100644 index 000000000..24861b315 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniJoinIntentionController.java @@ -0,0 +1,37 @@ +package com.cool.store.controller.webc; + + +import com.cool.store.request.JoinIntentionRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.JoinIntentionService; +import com.cool.store.vo.PartnerBaseInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@RestController +@RequestMapping({"/mini/JoinIntention"}) +@Slf4j +@Api(tags = "小程序意向加盟") +public class MiniJoinIntentionController { + + @Resource + private JoinIntentionService joinIntentionService; + + @PostMapping(path = "/submitOrUpdate") + @ApiOperation("填写或更新加盟意向申请书") + public ResponseResult submit(@RequestBody @Valid JoinIntentionRequest request) { + return ResponseResult.success(joinIntentionService.submit(request)); + } + + @GetMapping(path = "/getByLineId") + @ApiOperation("查找加盟意向申请书") + public ResponseResult getByLineId(@RequestParam("lineId") Long lineId) { + return ResponseResult.success(joinIntentionService.getByLineId(lineId)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniNewStoreOpeningController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniNewStoreOpeningController.java new file mode 100644 index 000000000..76b49d98e --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniNewStoreOpeningController.java @@ -0,0 +1,42 @@ +package com.cool.store.controller.webc; + +import com.cool.store.response.ResponseResult; +import com.cool.store.service.NewStoreOpeningService; +import com.cool.store.vo.NewStoreOpeningVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author byd + * @Date 2023/6/15 9:49 + * @Version 1.0 + */ +@RestController +@RequestMapping("/mini/newStoreOpening") +@Api(tags = "mini新店开业") +public class MiniNewStoreOpeningController { + + + @Resource + NewStoreOpeningService newStoreOpeningService; + + + @GetMapping(path = "/storeTodoList") + @ApiOperation("新店开业待办列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "shopId", value = "店铺id", required = true) + }) + public ResponseResult> storeTodoList(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(newStoreOpeningService.storeTodoList(shopId)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniOpenAcceptanceInfoController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniOpenAcceptanceInfoController.java new file mode 100644 index 000000000..8040e5175 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniOpenAcceptanceInfoController.java @@ -0,0 +1,49 @@ +package com.cool.store.controller.webc; + +import com.cool.store.request.OpenAcceptanceRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.OpenAcceptanceInfoService; +import com.cool.store.vo.OpenAcceptanceInfoListVO; +import com.cool.store.vo.ShopAcceptanceVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @Author byd + * @Date 2023/6/15 9:49 + * @Version 1.0 + */ +@RestController +@RequestMapping("/mini/openAcceptanceInfo") +@Api(tags = "mini开业验收") +public class MiniOpenAcceptanceInfoController { + + @Resource + OpenAcceptanceInfoService openAcceptanceInfoService; + + @GetMapping(path = "/openAcceptanceList") + @ApiOperation("开业验收列表") + public ResponseResult> openAcceptanceList(OpenAcceptanceRequest openAcceptanceRequest) { + return ResponseResult.success(openAcceptanceInfoService.openAcceptanceList(openAcceptanceRequest)); + } + + @GetMapping(path = "/acceptanceStageList") + @ApiOperation("开业验收阶段结果列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "shopId", value = "店铺id", required = true) + }) + public ResponseResult acceptanceStageList(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(openAcceptanceInfoService.acceptanceStageList(shopId)); + } + + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniOpenAreaController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniOpenAreaController.java new file mode 100644 index 000000000..746786931 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniOpenAreaController.java @@ -0,0 +1,76 @@ +package com.cool.store.controller.webc; + +import com.cool.store.response.ResponseResult; +import com.cool.store.service.OpenAreaService; +import com.cool.store.utils.poi.constant.Constants; +import com.cool.store.vo.OpenAreaTreeVO; +import com.cool.store.vo.OpenAreaVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/3/13 14:37 + * @Version 1.0 + */ +@RestController +@RequestMapping({"/mini/openArea" }) +@Slf4j +@Api(tags = "小程序开发区域城市") +public class MiniOpenAreaController { + @Resource + OpenAreaService openAreaService; + + + @GetMapping(path = "/getOpenAreaList") + @ApiOperation("点击重点城市 子列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "parentId", value = "父区域ID", required = false), + }) + public ResponseResult> getOpenAreaList(@RequestParam(value = "parentId",required = false)Long parentId){ + + return ResponseResult.success(openAreaService.getChildrenList(parentId)); + } + + @GetMapping(path = "/areaApplyQuery") + @ApiOperation("区域申请搜索 树形结构") + @ApiImplicitParams({ + @ApiImplicitParam(name = "keyword", value = "搜索关键字", required = false) + }) + public ResponseResult> getOpenAreaList(@RequestParam(value = "keyword",required = false)String keyword){ + List openAreaTreeVOS = openAreaService.searchOpenArea(keyword,null,Boolean.FALSE); + return ResponseResult.success(openAreaTreeVOS); + } + + + @GetMapping(path = "/getKeyOpenAreaList") + @ApiOperation("重点开放城市列表)") + public ResponseResult> getOpenAreaList(@RequestParam(value = "pageNumber",required = false,defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",required = false,defaultValue = "10")Integer pageSize){ + PageInfo openAreaVOPageInfo = openAreaService.queryKeyOpenAreaList(pageSize, pageNumber,null, Constants.ZERO_INTEGER); + return ResponseResult.success(openAreaVOPageInfo); + } + + @GetMapping(path = "/franchisableProvinces") + @ApiOperation("可申请省份)") + public ResponseResult> franchisableProvinces(@RequestParam(value = "pageNumber",required = false,defaultValue = "1")Integer pageNumber, + @RequestParam(value = "pageSize",required = false,defaultValue = "10")Integer pageSize){ + PageInfo openAreaVOPageInfo = openAreaService.franchisableProvinces(pageSize, pageNumber); + return ResponseResult.success(openAreaVOPageInfo); + } + + + + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniOpenNewShopController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniOpenNewShopController.java new file mode 100644 index 000000000..299ca757d --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniOpenNewShopController.java @@ -0,0 +1,43 @@ +package com.cool.store.controller.webc; + +import com.cool.store.context.PartnerUserHolder; +import com.cool.store.request.SubmitOpenNewShopRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.OpenNewShopService; +import com.cool.store.vo.IsSubmitOpenNewShopVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @author zhangchenbiao + * @FileName: PCOpenNewShopController + * @Description: + * @date 2024-05-09 15:08 + */ +@RestController +@RequestMapping("/mini/open/new/shop") +@Api(tags = "小程序-老加盟商开新店") +@Slf4j +public class MiniOpenNewShopController { + + @Resource + private OpenNewShopService openNewShopService; + + @ApiOperation("开新店") + @PostMapping("/submitOpenNewShop") + public ResponseResult submitOpenNewShop(@RequestBody SubmitOpenNewShopRequest request) { + request.setLineId(PartnerUserHolder.getUser().getLineId()); + return ResponseResult.success(openNewShopService.submitOpenNewShop(request)); + } + + @ApiOperation("获取是否可提交开新店申请") + @GetMapping("/isSubmitOpenNewShop") + public ResponseResult isSubmitOpenNewShop() { + return ResponseResult.success(openNewShopService.isSubmitOpenNewShop(PartnerUserHolder.getUser().getLineId())); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniOpenPreparationController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniOpenPreparationController.java new file mode 100644 index 000000000..26fd6eb9e --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniOpenPreparationController.java @@ -0,0 +1,62 @@ +package com.cool.store.controller.webc; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.dao.ShopStageInfoDAO; +import com.cool.store.dto.openPreparation.FirstOrderDTO; +import com.cool.store.entity.ShopInfoDO; +import com.cool.store.entity.ShopStageInfoDO; +import com.cool.store.enums.AuditStatusEnum; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.*; +import com.cool.store.vo.OpeningOperationPlanVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @Auther: WangShuo + * @Date: 2024/04/25/下午7:07 + * @Version 1.0 + * @注释: + */ +@RestController +@RequestMapping("/mini/openPreparation") +@Api(tags = "mini开业筹备") +@Slf4j +public class MiniOpenPreparationController { + @Resource + private OpeningOperationPlanService openingOperationPlanService; + + @Resource + private FirstOrderService firstOrderService; + + + @GetMapping("/openingOperationPlan/getPlan") + @ApiOperation("查询开业运营方案") + public ResponseResult getPlan(@RequestParam("shopId") Long shopId) { + OpeningOperationPlanVO plan = openingOperationPlanService.getPlanByShopId(shopId); + if (AuditStatusEnum.PASS.getCode().equals(plan.getResultType())) { + return ResponseResult.success(plan); + } + log.info("运营方案待审核或未通过"); + return ResponseResult.success(null); + } + + @GetMapping("/firstOrder/get") + @ApiOperation("查询订货金") + public ResponseResult get(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(firstOrderService.getOrder(shopId)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniOssClientController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniOssClientController.java new file mode 100644 index 000000000..417c90621 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniOssClientController.java @@ -0,0 +1,31 @@ +package com.cool.store.controller.webc; + +import com.cool.store.response.ResponseResult; +import com.cool.store.service.OSSService; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @Author suzhuhong + * @Date 2024/3/28 14:25 + * @Version 1.0 + */ +@RestController +@Api(tags ="小程序OSS配置") +@RequestMapping({"/mini/oss"}) +@Slf4j +public class MiniOssClientController { + + @Resource + OSSService ossService; + + @GetMapping("/getUploadFileConfig") + public ResponseResult getUploadFileConfig(){ + return ResponseResult.success(ossService.getUploadFileConfig()); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniProgramAppController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniProgramAppController.java new file mode 100644 index 000000000..2bcb6fb7f --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniProgramAppController.java @@ -0,0 +1,62 @@ +package com.cool.store.controller.webc; + +import com.cool.store.context.PartnerUserHolder; +import com.cool.store.dto.wx.MiniProgramLoginDTO; +import com.cool.store.request.MobileUpdateRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.WechatMiniAppService; +import com.cool.store.vo.PartnerUserInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +/** + * @FileName: MiniProgramAppController + * @Description: + * @date 2023-05-29 14:28 + */ + +@Api(tags = "微信小程序app接口") +@RestController +@RequestMapping({"/mini/miniProgram" }) +public class MiniProgramAppController { + + @Resource + private WechatMiniAppService wechatMiniAppService; + + @ApiOperation("判断用户是否存在的接口") + @GetMapping("/getUserInfoByJsCode") + public ResponseResult getUserInfoByJsCode(@RequestParam(value = "jsCode",required = true)String jsCode) { + return ResponseResult.success(wechatMiniAppService.getUserInfoByJsCode(jsCode)); + } + + @ApiOperation("小程序登录") + @PostMapping("/login") + public ResponseResult login(@RequestBody @Valid MiniProgramLoginDTO param) { + PartnerUserInfoVO userInfoVO = wechatMiniAppService.miniProgramLogin(param); + return ResponseResult.success(userInfoVO); + } + + @ApiOperation("获取手机号") + @GetMapping("/getUserPhoneNumber") + public ResponseResult getUserPhoneNumber(@RequestParam(value = "mobileCode",required = true)String mobileCode) { + return ResponseResult.success(wechatMiniAppService.getUserPhoneNumber(mobileCode)); + } + + @ApiOperation("更新手机号") + @PostMapping("/updateUserPhoneNumber") + public ResponseResult updateUserPhoneNumber(@RequestBody @Valid MobileUpdateRequest request) { + PartnerUserInfoVO userInfoVO = PartnerUserHolder.getUser(); + return ResponseResult.success(wechatMiniAppService.updateUserPhoneNumber(request, userInfoVO)); + } + + @ApiOperation("根据mobile和openId获取用户信息") + @GetMapping("/getUserInfo") + public ResponseResult getUserInfo(){ + PartnerUserInfoVO userInfoVO = PartnerUserHolder.getUser(); + return ResponseResult.success(userInfoVO); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniShopController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniShopController.java new file mode 100644 index 000000000..d154a1548 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniShopController.java @@ -0,0 +1,120 @@ +package com.cool.store.controller.webc; + +import com.cool.store.context.PartnerUserHolder; +import com.cool.store.request.*; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.PointService; +import com.cool.store.service.ShopService; +import com.cool.store.vo.point.MiniPointPageVO; +import com.cool.store.vo.point.PointDetailVO; +import com.cool.store.vo.point.ShopRentInfoVO; +import com.cool.store.vo.shop.MiniShopPageVO; +import com.cool.store.vo.shop.ShopStageInfoVO; +import com.cool.store.vo.shop.ShopStageVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: MiniPointController + * @Description: + * @date 2024-04-11 16:29 + */ +@RestController +@Api(tags ="小程序店铺选址") +@RequestMapping({"/mini/shop"}) +public class MiniShopController { + + @Resource + private ShopService shopService; + @Resource + private PointService pointService; + + @ApiOperation("获取店铺列表") + @GetMapping("/getShopList") + public ResponseResult> getShopList() { + Long lineId = PartnerUserHolder.getUser().getLineId(); + return ResponseResult.success(shopService.getShopList(lineId)); + } + + @ApiOperation("获取店铺的阶段信息") + @GetMapping("/getShopStageInfo") + public ResponseResult> getShopStageInfo(@RequestParam("shopId")Long shopId, @RequestParam(value = "shopStage", required = false)Integer shopStage) { + Long lineId = PartnerUserHolder.getUser().getLineId(); + return ResponseResult.success(shopService.getShopStageInfo(shopId, shopStage)); + } + + @ApiOperation("获取阶段/子阶段/子阶段状态枚举") + @GetMapping("/getShopSubStageStatusEnum") + public ResponseResult> getShopSubStageStatusEnum() { + return ResponseResult.success(ShopStageVO.getShopStageList()); + } + + @ApiOperation("获取推荐给我的铺位") + @PostMapping("/getLineRecommendPointPage") + public ResponseResult> getLineRecommendPointPage(@RequestBody MiniPointPageRequest request) { + Long lineId = PartnerUserHolder.getUser().getLineId(); + request.setLineId(lineId); + return ResponseResult.success(pointService.getLineRecommendPointPage(request)); + } + + @ApiOperation("铺位详情") + @GetMapping("/detail") + public ResponseResult getPointDetailInfo(@RequestParam("pointId")Long pointId, + @RequestParam(value = "isGetNodeNo", required = false)Boolean isGetNodeNo) { + return ResponseResult.success(pointService.getPointDetailInfo(pointId, isGetNodeNo)); + } + + @ApiOperation("选择铺位") + @PostMapping("/selectPoint") + public ResponseResult lineSelectPoint(@RequestBody @Validated SelectPointRequest request) { + Long lineId = PartnerUserHolder.getUser().getLineId(); + request.setLineId(lineId); + return ResponseResult.success(pointService.lineSelectPoint(request)); + } + + @ApiOperation("拒绝铺位") + @PostMapping("/rejectPoint") + public ResponseResult lineRejectPoint(@RequestBody @Validated RejectPointRequest request) { + Long lineId = PartnerUserHolder.getUser().getLineId(); + request.setLineId(lineId); + return ResponseResult.success(pointService.lineRejectPoint(request)); + } + + @ApiOperation("提交新铺位") + @PostMapping("/addPoint") + public ResponseResult miniAddPointDetailInfo(@RequestBody @Validated MiniAddPointRequest request) { + request.setCurLineId(PartnerUserHolder.getUser().getLineId()); + return ResponseResult.success(pointService.miniAddPointDetailInfo(request)); + } + + @ApiOperation("上传租赁合同") + @PostMapping("/uploadRentContract") + public ResponseResult uploadRentContract(@RequestBody @Validated AddRentContractRequest request) { + Long lineId = PartnerUserHolder.getUser().getLineId(); + request.setCurLineId(lineId); + return ResponseResult.success(pointService.uploadRentContract(request)); + } + + @ApiOperation("获取租赁合同详情") + @GetMapping("/getRentContractDetail") + public ResponseResult getRentContractDetail(@RequestParam("shopId")Long shopId) { + return ResponseResult.success(pointService.getRentContractDetail(shopId)); + } + + @ApiOperation("更新租赁合同") + @PostMapping("/updateRentContract") + public ResponseResult updateRentContract(@RequestBody @Validated UpdateRentContractRequest request) { + Long lineId = PartnerUserHolder.getUser().getLineId(); + request.setCurLineId(lineId); + return ResponseResult.success(pointService.updateRentContract(request)); + } + + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniSignFranchiseController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniSignFranchiseController.java new file mode 100644 index 000000000..3424e248c --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniSignFranchiseController.java @@ -0,0 +1,42 @@ +package com.cool.store.controller.webc; + + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.request.AddSignFranchiseRequest; +import com.cool.store.response.AddSignFranchiseResponse; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.SignFranchiseService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@Api(tags = "Mini加盟合同签约") +@RestController +@RequestMapping("/mini/signFranchise") +public class MiniSignFranchiseController { + @Resource + SignFranchiseService signFranchiseService; + + @ApiOperation("提交(更新)加盟合同签约") + @PostMapping("/submitOrUpdate") + public ResponseResult submitSignFranchise(@RequestBody AddSignFranchiseRequest request) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return signFranchiseService.submitSignFranchise(request,user); + } + + @ApiOperation("获取默认值") + @GetMapping("/default/get") + public ResponseResult getSignFranchise(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(signFranchiseService.getSignFranchise(shopId)); + } + + @ApiOperation("重新缴费(加盟合同阶段退回后)") + @GetMapping("/rePay") + public ResponseResult rePay(@RequestParam("shopId") Long shopId) { + return ResponseResult.success(signFranchiseService.rePay(shopId)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniSysStoreAppController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniSysStoreAppController.java new file mode 100644 index 000000000..b44572bfb --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniSysStoreAppController.java @@ -0,0 +1,53 @@ +package com.cool.store.controller.webc; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.context.LoginUserInfo; +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.enums.UserRoleEnum; +import com.cool.store.request.SysStoreAppRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.response.SysStoreAppResponse; +import com.cool.store.service.SysStoreAppService; +import com.cool.store.service.UserAuthMappingService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("/mini/sysStore") +@Api(tags = "mini系统建店") +@Slf4j +public class MiniSysStoreAppController { + + @Resource + private SysStoreAppService sysStoreAppService; + + + @Resource + UserAuthMappingService userAuthMappingService; + + @PostMapping(path = "/submit") + @ApiOperation("提交(更新) 系统建店申请") + public ResponseResult submitSysBuildStore(@RequestBody SysStoreAppRequest request) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return sysStoreAppService.submitSysBuildStore(request,user); + } + + @GetMapping(path = "/default/get") + @ApiOperation("获取系统建店默认值") + public ResponseResult getDefaultValueSysBuildStore(@RequestParam("lineId") Long lineId, + @RequestParam("shopId") Long shopId) { + LoginUserInfo user = CurrentUserHolder.getUser(); + return ResponseResult.success(sysStoreAppService.getDefaultValueSysBuildStore(lineId,shopId,user)); + } + + @GetMapping(path = "/getSmallRegionDD") + @ApiOperation("获取小区督导") + public ResponseResult getSmallRegionDD(@RequestParam("regionId") Long regionId) { + return ResponseResult.success(userAuthMappingService.hierarchicalSearch(UserRoleEnum.SUPERVISION, regionId)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniTrainingExperienceController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniTrainingExperienceController.java new file mode 100644 index 000000000..6d19bf2c4 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniTrainingExperienceController.java @@ -0,0 +1,38 @@ +package com.cool.store.controller.webc; + +import com.cool.store.entity.LeaseBaseInfoDO; +import com.cool.store.request.TrainingExperienceChangeRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.TrainingExperienceService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("/mini/training/experience/") +@Api(tags = "移动端-实训体验") +@Slf4j +public class MiniTrainingExperienceController { + + @Resource + TrainingExperienceService trainingExperienceService; + + @ApiOperation("实训体验状态变更") + @PostMapping("/experience/change") + public ResponseResult experienceStatusChange(@RequestBody TrainingExperienceChangeRequest request) { + trainingExperienceService.experienceStatusChange(request.getLineId(), request.getStatusEnum().getExperienceStatus(), request.getAbandonCause()); + return ResponseResult.success(); + } + + @ApiOperation("查询实训体验") + @GetMapping("/getStore") + public ResponseResult getStore(@RequestParam("lineId") Long lineId) { + return ResponseResult.success(trainingExperienceService.getTrainingExperience(lineId)); + } + + + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/NewsContentController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/NewsContentController.java new file mode 100644 index 000000000..196ba479e --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/NewsContentController.java @@ -0,0 +1,46 @@ +package com.cool.store.controller.webc; + +import com.cool.store.dto.content.ContentQueryDetailDto; +import com.cool.store.dto.content.ContentQueryListDto; +import com.cool.store.entity.HyContentInfoDO; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.ContentService; +import com.cool.store.vo.HyContentInfoVO; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("/mini/program/news") +@Api(tags = "小程序端动态") +@Slf4j +public class NewsContentController { + + @Autowired + private ContentService contentService; + + @PostMapping("/queryContentList") + @ApiOperation("查询动态列表") + public ResponseResult> queryContentList(@RequestBody ContentQueryListDto dto) { + PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); + List list = contentService.queryContentListToC(dto); + PageInfo page = new PageInfo<>(list); + return ResponseResult.success(page); + } + + @PostMapping("/detail") + @ApiOperation("动态详情") + public ResponseResult queryContentInfo(@RequestBody ContentQueryDetailDto dto) { + return ResponseResult.success(contentService.queryContentInfo(dto.getContentId())); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/OcrController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/OcrController.java new file mode 100644 index 000000000..9da5e9048 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/OcrController.java @@ -0,0 +1,67 @@ +package com.cool.store.controller.webc; + +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.IDCardSideEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.AliyunService; +import com.cool.store.vo.BusinessLicenseInfoVO; +import com.cool.store.vo.FoodLicenseVO; +import com.cool.store.vo.IdentityCardInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * https://ocr.console.aliyun.com/overview?spm=5176.6660585.ocr_enterprisecard_public_cn-top.i1.3d657992vcDnCC + * 目前接入了身份证识别、营业执照识别、食品经营许可证 + */ +@RestController +@RequestMapping({"/mini/orc"}) +@Slf4j +@Api(tags = "文字识别OCR") +public class OcrController { + + @Resource + AliyunService aliyunService; + + @GetMapping(path = "/getIdentityCardInfo") + @ApiOperation("根据身份证正面解析获取数据") + public ResponseResult getIdentityCardInfo(@RequestParam(value = "faceImageUrl")String faceImageUrl, + @RequestParam("side") IDCardSideEnum sideEnum){ + try { + IdentityCardInfoVO identityCardInfo = aliyunService.getIdentityCardInfo(faceImageUrl, sideEnum); + return ResponseResult.success(identityCardInfo); + } catch (Exception e) { + throw new ServiceException(ErrorCodeEnum.IDENTITY_CARD_PARSE_FAIL); + } + } + + @GetMapping(path = "/getBusinessLicenseInfo") + @ApiOperation("根据营业证照解析获取数据") + public ResponseResult getBusinessLicenseInfo(@RequestParam(value = "imageUrl")String imageUrl){ + try { + BusinessLicenseInfoVO businessLicenseInfo = aliyunService.getBusinessLicenseInfo(imageUrl); + return ResponseResult.success(businessLicenseInfo); + } catch (Exception e) { + throw new ServiceException(ErrorCodeEnum.BUSINESS_LICENSE_PARSE_FAIL); + } + } + + @GetMapping(path = "/getFoodBusinessLicense") + @ApiOperation("根据食营证照解析获取数据") + public ResponseResult getFoodLicense(@RequestParam(value = "imageUrl")String imageUrl){ + try { + FoodLicenseVO businessLicenseInfo = aliyunService.getFoodLicense(imageUrl); + return ResponseResult.success(businessLicenseInfo); + } catch (Exception e) { + throw new ServiceException(ErrorCodeEnum.FOOD_BUSINESS_LICENSE_PARSE_FAIL); + } + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TempUserDetailController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TempUserDetailController.java new file mode 100644 index 000000000..e5737ddc3 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TempUserDetailController.java @@ -0,0 +1,65 @@ +package com.cool.store.controller.webc; + +import com.cool.store.dto.ehr.StaffBaseInfoDTO; +import com.cool.store.request.IdRequest; +import com.cool.store.request.TempUserDetailRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.TempUserDetailService; +import com.cool.store.service.XfsgEhrService; +import com.cool.store.vo.TempUserDetailInfoVO; +import com.cool.store.vo.TempUserDetailListVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @author byd + * @date 2024-04-29 16:15 + */ +@RestController +@RequestMapping({"/mini/tempUserDetail"}) +@Slf4j +@Api(tags = "培训登记") +public class TempUserDetailController { + + @Autowired + private TempUserDetailService tempUserDetailService; + + @GetMapping(path = "/getUserList") + @ApiOperation("登记员工列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "shopId", value = "店铺Id") + }) + public ResponseResult getUserList(@RequestParam(value = "shopId") Long shopId) { + return ResponseResult.success(tempUserDetailService.userList(shopId)); + } + + @GetMapping(path = "/getUserInfoByIdCard") + @ApiImplicitParams({ + @ApiImplicitParam(name = "idCard", value = "身份证号") + }) + @ApiOperation("培训登记-身份证号查询信息") + public ResponseResult getUserInfoByIdCard(@RequestParam(value = "idCard") String idCard) { + return ResponseResult.success(tempUserDetailService.getUserInfoByIdCard((idCard))); + } + + @PostMapping(path = "/addTempUserDetail") + @ApiOperation("培训登记-确认登记") + public ResponseResult addTempUserDetail(@RequestBody TempUserDetailRequest tempUserDetailRequest) { + tempUserDetailService.addTempUserDetail((tempUserDetailRequest)); + return ResponseResult.success(Boolean.TRUE); + } + + @GetMapping(path = "/getUserInfoByIdUserDetailId") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userDetailId", value = "用户详情表id") + }) + @ApiOperation("培训登记-查询信息根据用户详情id") + public ResponseResult getUserInfoByIdUserDetailId(@RequestParam(value = "userDetailId") Long userDetailId) { + return ResponseResult.success(tempUserDetailService.getUserInfoByIdUserDetailId((userDetailId))); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TestController.java new file mode 100644 index 000000000..247b9228e --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TestController.java @@ -0,0 +1,210 @@ +package com.cool.store.controller.webc; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.dao.*; +import com.cool.store.dto.OpenCityDTO; +import com.cool.store.entity.*; +import com.cool.store.job.XxlJobHandler; +import com.cool.store.mapper.HyOpenAreaInfoMapper; +import com.cool.store.request.xfsgFirstOrderListRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.response.xfsgFirstOderListResponse; +import com.cool.store.service.CoolStoreStartFlowService; +import com.cool.store.service.RegionService; +import com.cool.store.utils.poi.ExcelUtil; +import com.cool.store.vo.RegionPathNameVO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.ByteArrayOutputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.concurrent.Future; + +@Slf4j +@RestController +@RequestMapping("/test") +public class TestController { + @Resource + private CoolStoreStartFlowService coolStoreStartFlowService; + @Resource + private EnterpriseUserDAO enterpriseUserDAO; + + @Resource + private EnterpriseUserRoleDao enterpriseUserRoleDao; + + @Resource + private HyPartnerUserInfoDAO hyPartnerUserInfoDAO; + + @Resource + private RegionDao regionDao; + + @Resource + private SysRoleDao sysRoleDao; + + @Resource + private UserRegionMappingDAO userRegionMappingDAO; + + @Resource + private RegionService regionService; + + @Resource + private XxlJobHandler xxlJobHandler; + @PostMapping("/getFirstOrders") + public ResponseResult getFirstOrders(@RequestBody xfsgFirstOrderListRequest storeCodeList) { + xfsgFirstOderListResponse firstOrderList = coolStoreStartFlowService.getFirstOrderList(storeCodeList); + return ResponseResult.success(firstOrderList); + } + @PostMapping("/importCity") + public ResponseResult importCity(MultipartFile file){ + ExcelUtil util = new ExcelUtil<>(OpenCityDTO.class); + try { + List lineDOList = util.importExcel(file.getInputStream()); + get(lineDOList); + } catch (Exception e) { + e.printStackTrace(); + } + return ResponseResult.success(0); + } + + @Resource + HyOpenAreaInfoMapper hyOpenAreaInfoMapper; + + public Integer get(List importTask) { + List codes = new ArrayList<>(); + try { + List acityDTOS = importTask; + HashMap first = new HashMap<>(8); + for (OpenCityDTO acityDTO : acityDTOS){ + Integer code = acityDTO.getCode(); + //如果code后面三位都是0 + int i = code % 10000; + if (i == 0){ + //表示是一级菜单 + acityDTO.setPath("/"+acityDTO.getName()+"/"); + first.put(code / 10000,acityDTO.getName()); + HyOpenAreaInfoDO hyOpenAreaInfoDO = new HyOpenAreaInfoDO(); + hyOpenAreaInfoDO.setAreaPath(acityDTO.getPath()); + hyOpenAreaInfoDO.setId(acityDTO.getCode().longValue()); + hyOpenAreaInfoDO.setAreaName(acityDTO.getName()); + hyOpenAreaInfoDO.setAreaStatus("open"); + hyOpenAreaInfoMapper.insertSelective(hyOpenAreaInfoDO); + continue; + } + //二级菜单 + int j = code % 100; + if (j == 0){ + //北京市直辖市 + String name = acityDTO.getName(); + //code + int k = code / 10000; + String firstName = first.get(k); + if (firstName == null){ + codes.add(acityDTO); + log.info("========================={}",acityDTO); + continue; + } + // 先对name中相同的字段进行去重 + String newName = name.replace(firstName, ""); + // 然后拼接path + acityDTO.setPath("/"+firstName+"/"+newName+"/"); + acityDTO.setName(newName); + HyOpenAreaInfoDO hyOpenAreaInfoDO = new HyOpenAreaInfoDO(); + hyOpenAreaInfoDO.setAreaPath(acityDTO.getPath()); + hyOpenAreaInfoDO.setId(acityDTO.getCode().longValue()); + hyOpenAreaInfoDO.setAreaName(acityDTO.getName()); + hyOpenAreaInfoDO.setAreaStatus("open"); + hyOpenAreaInfoDO.setParentId(k*10000L); + hyOpenAreaInfoMapper.insertSelective(hyOpenAreaInfoDO); + } + + } + System.out.println(JSONObject.toJSONString(codes)); + } catch (Exception e) { + } + return 0; + } + + + + @GetMapping("/getUserInfo") + public ResponseResult getUserInfo(@RequestParam("userId")String userId){ + EnterpriseUserDO enterpriseUser = enterpriseUserDAO.getUserInfoById(userId); + return ResponseResult.success(enterpriseUser); + } + + @GetMapping("/getUserInfoByUserIds") + public ResponseResult getUserInfoByUserIds(@RequestParam(value = "userIdList", required = false) List userIdList){ + List enterpriseUserDOList = enterpriseUserDAO.getUserInfoByUserIds(userIdList); + return ResponseResult.success(enterpriseUserDOList); + } + + @GetMapping("/getUserRoleIds") + public ResponseResult getUserRoleIds(@RequestParam("userId")String userId){ + List roleIdList = enterpriseUserRoleDao.getUserRoleIds(userId); + return ResponseResult.success(roleIdList); + } + + @GetMapping("/selectByMobile") + public ResponseResult selectByMobile(@RequestParam("mobile")String mobile){ + HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByMobile(mobile); + return ResponseResult.success(hyPartnerUserInfoDO); + } + + @GetMapping("/getRegionById") + public ResponseResult getRegionById(@RequestParam("regionId")Long regionId){ + RegionDO regionDO = regionDao.getRegionById(regionId); + return ResponseResult.success(regionDO); + } + + @GetMapping("/selectRoleByRoleIds") + public ResponseResult selectRoleByRoleIds(@RequestParam("roleIds")List roleIds){ + List sysRoleDOList = sysRoleDao.selectRoleByRoleIds(roleIds); + return ResponseResult.success(sysRoleDOList); + } + + @GetMapping("/listUserRegionMappingByUserId") + public ResponseResult listUserRegionMappingByUserId(@RequestParam("userIds")List userIds){ + List userRegionMappingDOList = userRegionMappingDAO.listUserRegionMappingByUserId(userIds); + return ResponseResult.success(userRegionMappingDOList); + } + + @GetMapping("/getAllRegionName") + public ResponseResult getAllRegionName(@RequestParam("regionId")Long regionId){ + RegionPathNameVO regionPathNameVO = regionService.getAllRegionName(regionId); + return ResponseResult.success(regionPathNameVO); + } + @GetMapping("/updateFirstOrder") + public ResponseResult updateFirstOrder(){ + xxlJobHandler.updateFirstOrder(); + return ResponseResult.success(); + } + @GetMapping("updateEntryTime") + public ResponseResult updateEntryTime(){ + xxlJobHandler.updateEntryTime(); + return ResponseResult.success(); + } + @GetMapping("/fitmentAcceptanceHandler") + public ResponseResult fitmentAcceptanceHandler(){ + xxlJobHandler.fitmentAcceptanceHandler(); + return ResponseResult.success(); + } + @GetMapping("/threeAcceptanceBookingMessage") + public ResponseResult threeAcceptanceBookingMessage(){ + xxlJobHandler.threeAcceptanceBookingMessage(); + return ResponseResult.success(); + } + @GetMapping("/threeAcceptanceMessage") + public ResponseResult threeAcceptanceMessage(){ + xxlJobHandler.threeAcceptanceMessage(); + return ResponseResult.success(); + } + @GetMapping("/waitThreeAcceptanceMessage") + public ResponseResult waitThreeAcceptanceMessage(){ + xxlJobHandler.waitThreeAcceptanceMessage(); + return ResponseResult.success(); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TrainingRegistController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TrainingRegistController.java new file mode 100644 index 000000000..85ac6bd23 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TrainingRegistController.java @@ -0,0 +1,41 @@ +package com.cool.store.controller.webc; + +import com.cool.store.dto.ehr.FranchiseeInfoDTO; +import com.cool.store.dto.ehr.StaffBaseInfoDTO; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.XfsgEhrService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * 培训登记 + */ +@RestController +@RequestMapping("/mini/trainingRegist") +@Api(tags = "移动端培训登记") +@Slf4j +public class TrainingRegistController { + + @Resource + XfsgEhrService xfsgEhrService; + + @ApiOperation("根据工号获取人员主数据") + @GetMapping("/getUserInfoByCode") + public ResponseResult getUserInfoByCode(@RequestParam("staffNumber") String staffNumber) { + return ResponseResult.success(xfsgEhrService.getUserInfoByCode(staffNumber)); + } + + @ApiOperation("根据加盟商编码查询加盟商信息") + @GetMapping("/getFranchiseeInfoByFrId") + public ResponseResult getFranchiseeInfoByFrId(@RequestParam("frId") String frId) { + return ResponseResult.success(xfsgEhrService.getFranchiseeInfoByFrId(frId)); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/WechatPayController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/WechatPayController.java new file mode 100644 index 000000000..39edd0944 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/WechatPayController.java @@ -0,0 +1,90 @@ +package com.cool.store.controller.webc; + +import com.cool.store.dto.wx.PreOrderDTO; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.WxPayService; +import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse; +import com.wechat.pay.java.service.payments.model.Transaction; +import com.wechat.pay.java.service.refund.model.Refund; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.Map; + +/** + * @FileName: WechatPayController + * @Description: + * @date 2024-03-13 14:28 + */ + +@Slf4j +@Api(tags = "微信小程序支付接口") +@RestController +@RequestMapping({"/mini/wechatPay"}) +public class WechatPayController { + + @Resource + private WxPayService wxPayService; + + @ApiOperation(value = "预支付订单", notes = "预支付订单") + @PostMapping("/create") + public ResponseResult createOrder(@Validated @RequestBody PreOrderDTO preOrderDTO) { + //创建初始化订单 + PrepayWithRequestPaymentResponse response = wxPayService.jsApiOrder(preOrderDTO); + //更新订单状态 + return ResponseResult.success(response); + } + + @ApiOperation("根据商户订单号查询订单") + @GetMapping("/queryOrderByOutTradeNo") + public ResponseResult queryOrderByOutTradeNo(@RequestParam(value = "outTradeNo",required = true)String outTradeNo) { + return ResponseResult.success(wxPayService.queryOrderByOutTradeNo(outTradeNo)); + } + + @ApiOperation("根据支付订单号查询订单") + @GetMapping("/queryOrderByPaymentNo") + public ResponseResult queryOrderByPaymentNo(@RequestParam(value = "paymentNo",required = true)String paymentNo) { + return ResponseResult.success(wxPayService.queryOrderByPaymentNo(paymentNo)); + } + + @ApiOperation(value = "预支付-回调") + @PostMapping("/payNotify") + public ResponseEntity payNotify(HttpServletRequest request) throws IOException { + ResponseEntity responseEntity = wxPayService.payNotify(request); + return responseEntity; + } + + @ApiOperation(value = "退款申请") + @PostMapping("/applyRefund") + public ResponseResult applyRefund(@RequestBody Map params){ + String orderID = String.valueOf(params.get("orderID")); + String backID = String.valueOf(params.get("backID")); + BigDecimal backAmount = new BigDecimal(String.valueOf(params.get("backAmount"))); + wxPayService.applyRefund(orderID, backID, backAmount); + return ResponseResult.success(true); + } + + @ApiOperation(value = "退款回调") + @PostMapping("/refundNotify") + public ResponseEntity refundNotify(HttpServletRequest request, HttpServletResponse response) throws IOException { + ResponseEntity responseEntity = wxPayService.refundNotify(request); + return responseEntity; + } + + @GetMapping("/getRefundOrderInfo") + @ApiOperation("退款查询") + public ResponseResult getRefundOrderInfo(@RequestParam(value = "outRefundNo",required = true)String outRefundNo){ + Refund refund = wxPayService.getRefundOrderInfo(outRefundNo); + return ResponseResult.success(refund); + } + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java b/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java new file mode 100644 index 000000000..7493270ba --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java @@ -0,0 +1,509 @@ +package com.cool.store.job; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; +import com.cool.store.dao.*; +import com.cool.store.dto.StaffExamInfoDTO; +import com.cool.store.dto.decoration.ConstructionScheduleDTO; +import com.cool.store.dto.openPreparation.OpenPlanShopInfoDTO; +import com.cool.store.dto.xfsgFirstOderDTO; +import com.cool.store.entity.*; +import com.cool.store.enums.*; +import com.cool.store.enums.point.ShopSubStageEnum; +import com.cool.store.enums.point.ShopSubStageStatusEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.LineInfoMapper; +import com.cool.store.mapper.TrainingExperienceMapper; +import com.cool.store.mq.util.HttpRestTemplateService; +import com.cool.store.request.xfsgFirstOrderListRequest; +import com.cool.store.response.xfsgFirstOderListResponse; +import com.cool.store.service.*; +import com.cool.store.service.impl.CommonService; +import com.cool.store.utils.CoolDateUtils; +import com.cool.store.utils.poi.DateUtils; +import com.cool.store.utils.poi.StringUtils; +import com.cool.store.utils.poi.constant.Constants; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.jetbrains.annotations.NotNull; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class XxlJobHandler { + + + @Resource + TrainingExperienceMapper trainingExperienceMapper; + @Value("${xfsg.url}") + private String xfsgUrl; + @Resource + private HttpRestTemplateService httpRestTemplateService; + @Resource + LineInfoMapper lineInfoMapper; + @Resource + private PreparationService preparationService; + @Resource + private LineInterviewDAO lineInterviewDAO; + @Resource + private LineInfoDAO lineInfoDAO; + @Resource + private ShopInfoDAO shopInfoDAO; + @Resource + private ShopStageInfoDAO shopStageInfoDAO; + @Resource + private CoolStoreStartFlowService coolStoreStartFlowService; + @Resource + private AcceptanceInfoDAO acceptanceInfoDAO; + @Resource + private DecorationService decorationService; + @Resource + private CommonService commonService; + @Resource + private EmployeeTrainingDAO employeeTrainingDAO; + @Resource + private XfsgEhrService xfsgEhrService; + @Resource + private TempUserDetailDAO tempUserDetailDAO; + @Resource + private EnterpriseUserDAO enterpriseUserDAO; + @Resource + private UserAuthMappingService userAuthMappingService; + @Resource + private OpenAcceptanceInfoDAO openAcceptanceInfoDAO; + + /** + * 每天都将待体验门店信息变更到体验中 + */ + @XxlJob("updateStoreExperience") + public void updateStoreExperience() { + log.info("------实训体验状态变更------"); + String param = XxlJobHelper.getJobParam(); + String enterpriseId = param; + //查出数据并更新为体验中 + List leaseBaseInfoDOS = trainingExperienceMapper.selectESTime(); + if (CollectionUtils.isEmpty(leaseBaseInfoDOS)) { + log.info("------今日没有待更新数据------"); + return; + } + //线索ids + List lineIds = leaseBaseInfoDOS.stream().map(LeaseBaseInfoDO::getLineId).collect(Collectors.toList()); + WorkflowSubStageStatusEnum storeExperience90 = WorkflowSubStageStatusEnum.STORE_EXPERIENCE_90; + lineInfoMapper.toExperiencing(lineIds, storeExperience90.getCode()); + + log.info("------实训体验状态变更结束------"); + XxlJobHelper.handleSuccess(); + } + + @XxlJob("batchUpdateInterviewWorkflowStage") + public void batchUpdateInterviewWorkflowStage() { + log.info("------面谈待审核状态变更------"); + List interviewList = lineInterviewDAO.getWaitAuditInterview(); + if (CollectionUtils.isEmpty(interviewList)) { + log.info("------今日没有待更新数据------"); + return; + } + List lineIds = interviewList.stream().map(LineInterviewDO::getLineId).collect(Collectors.toList()); + List interviewIds = interviewList.stream().map(LineInterviewDO::getId).collect(Collectors.toList()); + lineInfoDAO.batchUpdateInterviewWorkflowStage(lineIds, WorkflowSubStageEnum.INVITING_INTERVIEWS, WorkflowSubStageStatusEnum.INVITING_INTERVIEWS_20); + lineInterviewDAO.batchUpdateInterviewStatus(interviewIds, InterviewStatusEnum.WAIT_AUDIT); + XxlJobHelper.handleSuccess(); + } + + /** + * @Auther: wangshuo + * @Date: 2024/4/25 + * @description:每天查询更新订货金 + */ + @XxlJob("updateFirstOrder") + public void updateFirstOrder() { + log.info("----定时任务查询更新订货金----"); + boolean hasNext = true; + int pageNum = 1; + int pageSize = 50; + while (hasNext) { + PageHelper.startPage(pageNum, pageSize); + List shopIdListByStageStatus = shopStageInfoDAO.getShopIdListByStageStatus(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_152.getShopSubStageStatus()); + if (CollectionUtils.isEmpty(shopIdListByStageStatus)) { + log.info("------定时任务结束调用鲜丰更新订货金结束------"); + return; + } + List shopIds = shopIdListByStageStatus.stream().filter(o -> o.getShopId() != null).map(ShopStageInfoDO::getShopId).collect(Collectors.toList()); + try { + List openPlanShopInfoDTOS = shopInfoDAO.queryStoreNumeListByid(shopIds); + Map map = openPlanShopInfoDTOS.stream().filter(OpenPlanShopInfoDTO -> StringUtils.isNoneBlank(OpenPlanShopInfoDTO.getStoreNum())). + collect(Collectors.toMap(OpenPlanShopInfoDTO::getStoreNum, OpenPlanShopInfoDTO::getShopId)); + List storeCodes = new ArrayList<>(map.keySet()); + xfsgFirstOrderListRequest request = new xfsgFirstOrderListRequest(); + request.setStoreCodeList(storeCodes); + xfsgFirstOderListResponse firstOrderList = coolStoreStartFlowService.getFirstOrderList(request); + if (Objects.nonNull(firstOrderList) && CollectionUtils.isNotEmpty(firstOrderList.getData())) { + for (xfsgFirstOderDTO o : firstOrderList.getData()) { + if (o.getBalance()) { + shopStageInfoDAO.updateShopStageInfo(map.get(o.getStoreCode()), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_151); + preparationService.whetherToOpenForAcceptance(map.get(o.getStoreCode())); + } + } + } + } catch (Exception e) { + log.error("定时任务更新订货金失败 shopIds:{},e:{}", shopIds, e.getMessage()); + } + hasNext = shopIdListByStageStatus.size() >= pageSize; + pageNum++; + } + log.info("------定时任务结束调用鲜丰更新订货金结束------"); + XxlJobHelper.handleSuccess(); + } + + /** + * @Auther: wangshuo + * @Date: 2024/4/29 + * @description: 每天更新装修阶段进场时间等 + */ + @XxlJob("updateEntryTime") + public void updateEntryTime() { + log.info("----定时任务每天更新装修阶段进场时间,施工完成时间等----"); + boolean hasNext = true; + int pageNum = 1; + int pageSize = 50; + while (hasNext) { + PageHelper.startPage(pageNum, pageSize); + //获取表中进场时间为空的 + List acceptanceInfoDOS = acceptanceInfoDAO.selectByEntryTimeNull(); + if (CollectionUtils.isEmpty(acceptanceInfoDOS)) { + log.info("------定时任务结束每天更新至预约状态结束------"); + return; + } + for (AcceptanceInfoDO acceptanceInfoDO : acceptanceInfoDOS) { + int flag = CommonConstants.ZERO; + while (flag < CommonConstants.TWO) { + try { + Long shopId = acceptanceInfoDO.getShopId(); + //施工子阶段 更新装修阶段进场时间等 + decorationService.getConstruction(shopId); + break; + } catch (Exception e) { + log.error("定时任务设置进场时间失败,shopId:{},e:{}", acceptanceInfoDO.getShopId(), e.getMessage()); + flag++; + } + } + } + hasNext = acceptanceInfoDOS.size() >= pageSize; + pageNum++; + } + log.info("------定时任务结束每天更新至预约状态结束------"); + XxlJobHelper.handleSuccess(); + } + + /** + * @Auther: wangshuo + * @Date: 2024/4/29 + * @description: 每天更新装修阶段进场时间等,至预约状态 + */ + @XxlJob("fitmentAcceptanceHandler") + public void fitmentAcceptanceHandler() { + log.info("----定时任务每天更新至预约状态----"); + boolean hasNext = true; + int pageNum = 1; + int pageSize = 50; + while (hasNext) { + PageHelper.startPage(pageNum, pageSize); + //获取表中的三方验收状态为-100状态和进场时间不为空的 + List acceptanceInfoDOS = acceptanceInfoDAO.selectAcceptanceInfoBySignatures(ShopSubStageEnum.SHOP_STAGE_12.getShopSubStage(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_00.getShopSubStageStatus()); + if (CollectionUtils.isEmpty(acceptanceInfoDOS)) { + log.info("------定时任务结束每天更新至预约状态结束------"); + return; + } + List shopIds = new ArrayList<>(); + for (AcceptanceInfoDO acceptanceInfoDO : acceptanceInfoDOS) { + Long shopId = acceptanceInfoDO.getShopId(); + Date actualEntryTime = acceptanceInfoDO.getActualEntryTime(); + LocalDate plusFDays = DateUtils.getPlusFDays(actualEntryTime, CommonConstants.FOUR); + //小于等于当前时间 + if (plusFDays.isEqual(LocalDate.now()) || plusFDays.isBefore(LocalDate.now())) { + //三方验收待预约 + shopIds.add(shopId); + + } + } + shopStageInfoDAO.batchUpdateShopStageStatus(shopIds, ShopSubStageEnum.SHOP_STAGE_12.getShopSubStage(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_120.getShopSubStageStatus()); + hasNext = acceptanceInfoDOS.size() >= pageSize; + pageNum++; + } + log.info("------定时任务结束调用鲜丰获取进场时间结束------"); + XxlJobHelper.handleSuccess(); + } + + /** + * @Auther: wangshuo + * @Date: 2024/5/10 + * @description:实际进场时间+5天,发送钉钉通知到工程监理 + */ + @XxlJob("threeAcceptanceBookingMessage") + public void threeAcceptanceBookingMessage() { + log.info("------定时任务三方验收待预约钉钉通知-----"); + boolean hasNext = true; + int pageNum = 1; + int pageSize = 50; + while (hasNext) { + PageHelper.startPage(pageNum, pageSize); + //进场时间不为空的 + List acceptanceInfoDOS = acceptanceInfoDAO + .selectListNotNullEntryTime(); + if (CollectionUtils.isEmpty(acceptanceInfoDOS)) { + log.info("------定时任务结束三方验收待预约钉钉通知------"); + return; + } + for (AcceptanceInfoDO acceptanceInfoDO : acceptanceInfoDOS) { + int flag = CommonConstants.ZERO; + //进场时间 + while (flag < CommonConstants.TWO) { + try { + Date approach = acceptanceInfoDO.getActualEntryTime(); + LocalDate plusFDays = DateUtils.getPlusFDays(approach, CommonConstants.FOUR); + if (plusFDays.equals(LocalDate.now())) { + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(acceptanceInfoDO.getShopId()); + List supervisor = userAuthMappingService + .getUserByRoleEnumAndRegionIdList(UserRoleEnum.ENGINEER_DEP_SUPERVISOR, shopInfo.getRegionId()); + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(shopInfo.getLineId()); + for (EnterpriseUserDO enterpriseUserDO : supervisor) { + Map messageMap = new HashMap<>(); + messageMap.put("storeName", shopInfo.getShopName()); + messageMap.put("partnerUsername", lineInfo.getUsername()); + messageMap.put("partnerMobile", lineInfo.getMobile()); + commonService.sendMessage(Arrays.asList(enterpriseUserDO.getUserId()), MessageEnum.MESSAGE_24, messageMap); + } + } + break; + } catch (Exception e) { + log.error("------定时任务三方验收待预约钉钉通知失败,shopId:{},e:{}", acceptanceInfoDO.getShopId(), e.getMessage()); + flag++; + } + } + } + hasNext = acceptanceInfoDOS.size() >= pageSize; + pageNum++; + } + } + + /** + * @Auther: wangshuo + * @Date: 2024/5/7 + * @description:三方验收预约短信通知,进场时间+7天的18:00,发送短信到加盟商, + */ + @XxlJob("threeAcceptanceMessage") + public void threeAcceptanceMessage() { + log.info("------定时任务三方验收待验收的短信通知-----"); + boolean hasNext = true; + int pageNum = 1; + int pageSize = 50; + while (hasNext) { + PageHelper.startPage(pageNum, pageSize); + //获取待验收的 + List acceptanceInfoDOS = acceptanceInfoDAO + .selectAcceptanceInfoBySignatures(ShopSubStageEnum.SHOP_STAGE_12.getShopSubStage(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_121.getShopSubStageStatus()); + if (CollectionUtils.isEmpty(acceptanceInfoDOS)) { + log.info("------定时任务结束三方验收待验收的短信通知------"); + return; + } + for (AcceptanceInfoDO acceptanceInfoDO : acceptanceInfoDOS) { + int flag = CommonConstants.ZERO; + while (flag < CommonConstants.TWO) { + try { + Date approach = acceptanceInfoDO.getActualEntryTime(); + if (Objects.nonNull(approach)) { + LocalDate plusFDays = DateUtils.getPlusFDays(approach, CommonConstants.SIX);//7 day + if (plusFDays.equals(LocalDate.now())) { + //三方验收带预约 + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(acceptanceInfoDO.getShopId()); + //加盟商手机号 + Long lineId = shopInfo.getLineId(); + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId); + if (Objects.isNull(lineInfo) && StringUtils.isNull(lineInfo.getMobile())) { + log.error("定时任务三方验收待验收的短信通知:加盟商手机号为空,shopId:#{}", acceptanceInfoDO.getShopId()); + break; + } + EnterpriseUserDO supervisor = userAuthMappingService + .getUserByRoleEnumAndRegionId(UserRoleEnum.ENGINEER_DEP_SUPERVISOR, shopInfo.getRegionId()); + if (Objects.isNull(supervisor)) { + log.error("该区域没有工程部监理,RegionId:{}", shopInfo.getRegionId()); + break; + } + //获取计划撤场时间 + Date planExitTime = acceptanceInfoDO.getPlanExitTime(); + //获取施工阶段计划完成时间 + Date decorationEndTime = acceptanceInfoDO.getDecorationPlannedCompletionTime(); + //获取计划验收时间 + String planAcceptanceTime = CoolDateUtils.DateFormat(acceptanceInfoDO.getPlanAcceptanceTime(), CoolDateUtils.DATE_FORMAT_SEC); + if (StringUtils.isBlank(planAcceptanceTime)) { + planAcceptanceTime = ""; + } + //区域监理手机号 + Boolean f = Boolean.TRUE; + String mobile = supervisor.getMobile(); + String supervisionName = supervisor.getName(); + + Map messageMap = new HashMap<>(); + if (Objects.nonNull(planExitTime)) { + String date = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, planExitTime); + messageMap.put("demolitionPlanTime", date); + } else { + if (Objects.nonNull(decorationEndTime)) { + String date = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, decorationEndTime); + messageMap.put("demolitionPlanTime", date); + } + } + messageMap.put("palnAcceptanceTime", planAcceptanceTime); + messageMap.put("supervisionName", supervisionName); + messageMap.put("supervisionMobile", mobile); + commonService.sendSms(lineInfo.getMobile(), SMSMsgEnum.THREE_ACCEPTANCE_WAIT, messageMap); + } + } + break; + } catch (Exception e) { + log.error("定时任务三方验收待验收的短信通知失败 shopId:{},e:{}", acceptanceInfoDO.getShopId(), e.getMessage()); + flag++; + } + } + + } + hasNext = acceptanceInfoDOS.size() >= pageSize; + pageNum++; + } + XxlJobHelper.handleSuccess(); + } + + /** + * @Auther: wangshuo + * @Date: 2024/5/7 + * @description:实际进场时间+7天,发送钉钉通知到督导 + */ + @XxlJob("waitThreeAcceptanceMessage") + public void waitThreeAcceptanceMessage() { + log.info("------定时任务三方待验收钉钉通知-----"); + boolean hasNext = true; + int pageNum = 1; + int pageSize = 50; + while (hasNext) { + PageHelper.startPage(pageNum, pageSize); + //获取待验收的 + List acceptanceInfoDOS = acceptanceInfoDAO + .selectAcceptanceInfoBySignatures(ShopSubStageEnum.SHOP_STAGE_12.getShopSubStage(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_121.getShopSubStageStatus()); + if (CollectionUtils.isEmpty(acceptanceInfoDOS)) { + log.info("------定时任务结束三方待验收钉钉通知------"); + return; + } + List shopIds = acceptanceInfoDOS.stream().filter(o -> o.getShopId() != null) + .map(AcceptanceInfoDO::getShopId).collect(Collectors.toList()); + List shopListByIds = shopInfoDAO.getShopListByIds(shopIds); + Map shopIdMap = shopListByIds.stream().filter(o -> o.getId() != null) + .collect(Collectors.toMap(ShopInfoDO::getId, Function.identity())); + for (AcceptanceInfoDO acceptance : acceptanceInfoDOS) { + //进场时间 + Date approach = acceptance.getActualEntryTime(); + Long shopId = acceptance.getShopId(); + if (Objects.nonNull(approach)) { + LocalDate plusFDays = DateUtils.getPlusFDays(approach, CommonConstants.SIX);//7天 + if (plusFDays.equals(LocalDate.now())) { + ShopInfoDO shopInfoDO = shopIdMap.get(shopId); + if (StringUtils.isBlank(shopInfoDO.getSupervisorUserId())) { + log.error("定时任务三方待验收钉钉通知,督导id为空,shopId:{}", shopId); + } + Long lineId = shopInfoDO.getLineId(); + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(lineId); + Map messageMap = new HashMap<>(); + messageMap.put("storeName", shopInfoDO.getShopName()); + messageMap.put("partnerUsername", lineInfo.getUsername()); + messageMap.put("partnerMobile", lineInfo.getMobile()); + commonService.sendMessage(Arrays.asList(shopInfoDO.getSupervisorUserId()), MessageEnum.MESSAGE_25, messageMap); + + } + } + } + hasNext = acceptanceInfoDOS.size() >= pageSize; + pageNum++; + } + XxlJobHelper.handleSuccess(); + } + + @XxlJob("interviewRemind") + public void interviewRemind() { + log.info("------面试提醒------"); + String startTime = LocalDateTime.now().plusHours(1).minusMinutes(CommonConstants.FIVE).format(DateTimeFormatter.ofPattern(CoolDateUtils.DATE_FORMAT_SEC)); + String endTime = LocalDateTime.now().plusHours(1).plusMinutes(CommonConstants.FIVE).format(DateTimeFormatter.ofPattern(CoolDateUtils.DATE_FORMAT_SEC)); + List interviewList = lineInterviewDAO.getInterviewRemindList(startTime, endTime); + if (CollectionUtils.isEmpty(interviewList)) { + log.info("------今日没有待更新数据------"); + return; + } + List lineIds = interviewList.stream().map(LineInterviewDO::getLineId).collect(Collectors.toList()); + Map lineMobileMap = lineInfoDAO.getLineMobileMap(lineIds); + for (LineInterviewDO interview : interviewList) { + Map templateParamMap = new HashMap<>(); + templateParamMap.put("interviewTime", DateUtil.format(interview.getStartTime(), "HH:mm")); + if (InterviewTypeEnum.INTERVIEW.getCode().equals(interview.getInterviewType())) { + commonService.sendSms(lineMobileMap.get(interview.getLineId()), SMSMsgEnum.FIRST_INTERVIEW_REMIND, templateParamMap); + } + if (InterviewTypeEnum.SECOND_INTERVIEW.getCode().equals(interview.getInterviewType())) { + commonService.sendSms(lineMobileMap.get(interview.getLineId()), SMSMsgEnum.SECOND_INTERVIEW_REMIND, templateParamMap); + } + } + XxlJobHelper.handleSuccess(); + } + + @XxlJob("theoreticalExam") + public void theoreticalExam() { + log.info("------理论考试更新------"); + List theoreticalList = employeeTrainingDAO.theoreticalList(); + if (CollectionUtils.isEmpty(theoreticalList)) { + log.info("------今日没有待更新数据------"); + return; + } + for (EmployeeTrainingDO employeeTrainingDO : theoreticalList) { + TempUserDetailDO tempUserDetailDO = tempUserDetailDAO.selectById(employeeTrainingDO.getXfsgUserDetailId()); + + EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.getUserInfoByThirdOaUniqueFlag(tempUserDetailDO.getIdCard()); + //查询理论分支并更新 + StaffExamInfoDTO staffExamInfoDTO = xfsgEhrService.getUserExamInfo(enterpriseUserDO.getJobnumber()); + if (staffExamInfoDTO != null && StringUtils.isNotBlank(staffExamInfoDTO.getExamResult()) + && StringUtils.isNotBlank(staffExamInfoDTO.getExamScore())) { + employeeTrainingDO.setTheoreticalExamScore(StringUtils.isNotBlank(staffExamInfoDTO.getExamScore()) ? Integer.valueOf(staffExamInfoDTO.getExamScore()) : null); + employeeTrainingDO.setTheoreticalExamStatus(ExamStatusEnum.matchCodeByDesc(staffExamInfoDTO.getExamResult())); + employeeTrainingDAO.updateByPrimaryKeySelective(employeeTrainingDO); + } + + } + XxlJobHelper.handleSuccess(); + } + + /** + * 店铺新店开业状态更新 + */ + @XxlJob("shopOpenAcceptanceStatusUpdate") + public void shopOpenAcceptanceStatusUpdate() { + log.info("------店铺新店开业状态更新------"); + int num = openAcceptanceInfoDAO.shopOpenAcceptanceStatusUpdate(); + log.info("------店铺新店开业状态更新完成num:{}------", num); + XxlJobHelper.handleSuccess(); + } + +} diff --git a/coolstore-partner-web/src/main/resources/application-ab.properties b/coolstore-partner-web/src/main/resources/application-ab.properties new file mode 100644 index 000000000..3afaec71e --- /dev/null +++ b/coolstore-partner-web/src/main/resources/application-ab.properties @@ -0,0 +1,80 @@ + +#mysql config +default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_36?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true +default.datasource.username=coolstore +default.datasource.password=CSCErYcXniNYm7bT + +#redis +redis.host.uri=http://userInfo:Cx111111@tstore-coolcollege.redis.rds.aliyuncs.com:6379/0 + +#pagehelper +pagehelper.helper-dialect=mysql +pagehelper.reasonable=false +pagehelper.returnPageInfo=check +pagehelper.support-methods-arguments=false +pagehelper.params=count=countSql +pagehelper.page-size-zero=true + +spring.mvc.async.request-timeout=60000 + +# mybatis config +mybatis.mapper-locations=classpath*:mapper/**/*Mapper.xml + +mybatis.configuration.call-setters-on-nulls=true +mybatis.configuration.map-underscore-to-camel-case=true + +isv.domain=https://abstore-isv.coolstore.cn/isv + +#rocketmq \u914D\u7F6E +rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2 +rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig +rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-internal.aliyuncs.com:8080 +rocketmq.topic=simple_message + +#oss配置 +oss.accessKeyId=LTAI5tRSXy2MrqaaBJ6gReur +oss.accessKeySecret=FFsl8d9batprJ0vXr0k4Y8ada40Wm2 +oss.endpoint=oss-cn-hangzhou.aliyuncs.com +oss.bucket=cool-store-hsay +oss.file.dir=partner/171cddee76471740/ +oss.excelFile.dir=lineExcel/ + + +#cdn地址 +cdn.url=https://testhsaypic.coolstore.cn + +#TRTC +trtc.sdkAppId=1600026212 +trtc.secretKey=e036b654c665f649f053a01ff6f5652a826980027be298d4d49949f6e26434a5 +trtc.video.callback.secretKey=ur4wq2iFbRI03Q35 + +weixin.appId=wx085c84fe42691bf1 +weixin.appSecret=58e89c9ec4ade1d094bbe21836a19ec4 +weixin.index.url=pages/index/index + +signKey=77fea013c3a6459685b83c21a2fc3411 +fixMobileOpenid=HSAY5531DA7 +#xxljob配置 +#xxljob配置 +xxl.job.admin.addresses = http://10.7.53.224:10001/xxl-job-admin +xxl.job.executor.appname = ${spring.application.name} +xxl.job.executor.ip = +xxl.job.executor.port = 40001 +xxl.job.executor.logpath = logs/xxl-job/jobhandler +xxl.job.executor.logretentiondays = 30 +xxl.job.accessToken = 25365115eed84e9ba5e0040abb255a09 + +exhibition.channel.id=52399 +recommended.channel.id=52400 + +cool.app.id=80685 +coolstore.page.domain=https://t2store.coolstore.cn + +xfsg.url=https://inf-test.xianfengsg.com/InfService + +aliyun.sms.accessKeyId=LTAI5tAVZ3r9UtSpLGcmGoQn +aliyun.sms.accessKeySecret=WIMjO4BjVg3YAHwmplq86yOyS2HMpa +aliyun.sms.signName=酷店掌 + +mybatis.configuration.variables.enterpriseId=e17cd2dc350541df8a8b0af9bd27f77d +enterprise.dingCorpId=dingef2502a50df74ccc35c2f4657eb6378f \ No newline at end of file diff --git a/coolstore-partner-web/src/main/resources/application-hd.properties b/coolstore-partner-web/src/main/resources/application-hd.properties new file mode 100644 index 000000000..2d49248e5 --- /dev/null +++ b/coolstore-partner-web/src/main/resources/application-hd.properties @@ -0,0 +1,79 @@ + +#mysql config +default.datasource.url=jdbc:mysql://store-big1.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_9096?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true +default.datasource.username=coolstore +default.datasource.password=CSCErYcXniNYm7bT + +#redis +redis.host.uri=http://userInfo:Cx111111@store-coolcollege.redis.rds.aliyuncs.com:6379/0 + +#pagehelper +pagehelper.helper-dialect=mysql +pagehelper.reasonable=false +pagehelper.returnPageInfo=check +pagehelper.support-methods-arguments=false +pagehelper.params=count=countSql +pagehelper.page-size-zero=true + +spring.mvc.async.request-timeout=60000 + +# mybatis config +mybatis.mapper-locations=classpath*:mapper/**/*Mapper.xml + +mybatis.configuration.call-setters-on-nulls=true +mybatis.configuration.map-underscore-to-camel-case=true + +isv.domain=https://hdstore-isv.coolstore.cn/isv + +#rocketmq \u914D\u7F6E +rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2 +rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig +rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX5N7rwl.cn-hangzhou.mq-internal.aliyuncs.com:8080 +rocketmq.topic=simple_message + +#oss配置 +oss.accessKeyId=LTAI5tS2khSZfYrTL5cerHbY +oss.accessKeySecret=YChLLev5KRZmgHCAkU7odkhGWk1aif +oss.endpoint=oss-cn-hangzhou.aliyuncs.com +oss.bucket=coolstore-storage +oss.file.dir=eid/9ee7b8b48e2447f9a2075b5a46e94d08/ + + +#cdn地址 +cdn.url=https://oss-store.coolcollege.cn + +#TRTC +trtc.sdkAppId=1600026212 +trtc.secretKey=e036b654c665f649f053a01ff6f5652a826980027be298d4d49949f6e26434a5 +trtc.video.callback.secretKey=ur4wq2iFbRI03Q35 + +weixin.appId=wx7b16b308c9127a48 +weixin.appSecret=65217b4fe10d74b5785a5ab9475fcb24 +weixin.index.url=pages/index/index + +signKey=d851f2a9ac90474abecdc2fbb148d4d7 +fixMobileOpenid=HSAY4AF322E +#xxljob配置 +#xxljob配置 +xxl.job.admin.addresses = http://10.7.53.224:10001/xxl-job-admin +xxl.job.executor.appname = ${spring.application.name} +xxl.job.executor.ip = +xxl.job.executor.port = 40001 +xxl.job.executor.logpath = logs/xxl-job/jobhandler +xxl.job.executor.logretentiondays = 30 +xxl.job.accessToken = 25365115eed84e9ba5e0040abb255a09 + +exhibition.channel.id=52399 +recommended.channel.id=52400 + +cool.app.id=78836 +coolstore.page.domain=https://store.coolstore.cn + +xfsg.url=https://inf-test.xianfengsg.com/InfService + +aliyun.sms.accessKeyId=LTAI5tAVZ3r9UtSpLGcmGoQn +aliyun.sms.accessKeySecret=WIMjO4BjVg3YAHwmplq86yOyS2HMpa +aliyun.sms.signName=酷店掌 + +mybatis.configuration.variables.enterpriseId=9ee7b8b48e2447f9a2075b5a46e94d08 +enterprise.dingCorpId=ding4da17dabe9a7b19f \ No newline at end of file diff --git a/coolstore-partner-web/src/main/resources/application-local.properties b/coolstore-partner-web/src/main/resources/application-local.properties new file mode 100644 index 000000000..6e325df06 --- /dev/null +++ b/coolstore-partner-web/src/main/resources/application-local.properties @@ -0,0 +1,86 @@ + +#mysql config +default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_69?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true +default.datasource.username=coolstore +default.datasource.password=CSCErYcXniNYm7bT + +redis.host.uri=http://userInfo:Cx111111@tstore-coolcollege.redis.rds.aliyuncs.com:6379/0 +redis.isv.host.uri=http://userInfo:Cx111111@tstore-coolcollege.redis.rds.aliyuncs.com:6379/2 + +#pagehelper +pagehelper.helper-dialect=mysql +pagehelper.reasonable=false +pagehelper.returnPageInfo=check +pagehelper.support-methods-arguments=false +pagehelper.params=count=countSql +pagehelper.page-size-zero=true + +spring.mvc.async.request-timeout=60000 + +# mybatis config +mybatis.mapper-locations=classpath*:mapper/**/*Mapper.xml + +mybatis.configuration.call-setters-on-nulls=true +mybatis.configuration.map-underscore-to-camel-case=true + +isv.domain=https://abstore-isv.coolstore.cn/isv + +#rocketmq \u914D\u7F6E +rocketmq.accessKey=zK2oVEz4G1ts23d2 +rocketmq.secretKey=0UstLCS0mh2ASgBh +rocketmq.nameSrvAdder=http://rmq-cn-9lb38l1rx04.cn-hangzhou.rmq.aliyuncs.com:8080 +rocketmq.topic=simple_message + +#oss配置 +oss.accessKeyId=LTAI5tRSXy2MrqaaBJ6gReur +oss.accessKeySecret=FFsl8d9batprJ0vXr0k4Y8ada40Wm2 +oss.endpoint=oss-cn-hangzhou.aliyuncs.com +oss.bucket=cool-store-hsay +oss.file.dir=partner/171cddee76471740/ +oss.excelFile.dir=lineExcel/ + + +#cdn地址 +cdn.url=https://testhsaypic.coolstore.cn + +#TRTC +trtc.sdkAppId=1600026212 +trtc.secretKey=e036b654c665f649f053a01ff6f5652a826980027be298d4d49949f6e26434a5 +trtc.video.callback.secretKey=ur4wq2iFbRI03Q35 + +weixin.appId=wx997f2206e276e513 +weixin.appSecret=2ddea4374abeace05e83c948392c2952 +weixin.index.url=pages/index/index + +signKey=77fea013c3a6459685b83c21a2fc3411 +fixMobileOpenid=HSAY5531DA7 +#xxljob配置 +#xxljob配置 +xxl.job.admin.addresses= +xxl.job.executor.appname=${spring.application.name} +xxl.job.executor.ip= +xxl.job.executor.port=31001 +xxl.job.executor.logpath=logs/xxl-job/jobhandler +xxl.job.executor.logretentiondays=3 +xxl.job.accessToken=25365115eed84e9ba5e0040abb255a09 + + +exhibition.channel.id=52399 +recommended.channel.id=52400 + +wx.pay.privateKeyPath=D:\\weixin\\apiclient_key.pem + +aliyun.accessKeyId=LTAI5tQ6QBnWaB5LaJYz6zcD +aliyun.accessKeySecret=spqsOgtfr54cwK861O3N3fInydTgjA + +cool.app.id=80685 +coolstore.page.domain=https://t2store.coolstore.cn + +xfsg.url=https://inf-test.xianfengsg.com/InfService + +aliyun.sms.accessKeyId=LTAI5tAVZ3r9UtSpLGcmGoQn +aliyun.sms.accessKeySecret=WIMjO4BjVg3YAHwmplq86yOyS2HMpa +aliyun.sms.signName=酷店掌 + +mybatis.configuration.variables.enterpriseId=28c20a7b42b94171acb1ab3f631d69e1 +enterprise.dingCorpId=ding0006ae30cf81071ea1320dcb25e91351 \ No newline at end of file diff --git a/coolstore-partner-web/src/main/resources/application-online.properties b/coolstore-partner-web/src/main/resources/application-online.properties new file mode 100644 index 000000000..56f7254b6 --- /dev/null +++ b/coolstore-partner-web/src/main/resources/application-online.properties @@ -0,0 +1,80 @@ + +#mysql config +default.datasource.url=jdbc:mysql://store-big1.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_9096?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true +default.datasource.username=coolstore +default.datasource.password=CSCErYcXniNYm7bT + +#redis +redis.host.uri=http://userInfo:Cx111111@store-coolcollege.redis.rds.aliyuncs.com:6379/0 + +#pagehelper +pagehelper.helper-dialect=mysql +pagehelper.reasonable=false +pagehelper.returnPageInfo=check +pagehelper.support-methods-arguments=false +pagehelper.params=count=countSql +pagehelper.page-size-zero=true + +spring.mvc.async.request-timeout=60000 + +# mybatis config +mybatis.mapper-locations=classpath*:mapper/**/*Mapper.xml + +mybatis.configuration.call-setters-on-nulls=true +mybatis.configuration.map-underscore-to-camel-case=true + +isv.domain=https://store-isv.coolstore.cn/isv + +#rocketmq \u914D\u7F6E +rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2 +rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig +rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX5N7rwl.cn-hangzhou.mq-internal.aliyuncs.com:8080 +rocketmq.topic=simple_message + +#oss配置 +oss.accessKeyId=LTAI5tS2khSZfYrTL5cerHbY +oss.accessKeySecret=YChLLev5KRZmgHCAkU7odkhGWk1aif +oss.endpoint=oss-cn-hangzhou.aliyuncs.com +oss.bucket=coolstore-storage +oss.file.dir=eid/9ee7b8b48e2447f9a2075b5a46e94d08/ + + +#cdn地址 +cdn.url=https://oss-store.coolcollege.cn + +#TRTC +trtc.sdkAppId=1600026212 +trtc.secretKey=e036b654c665f649f053a01ff6f5652a826980027be298d4d49949f6e26434a5 +trtc.video.callback.secretKey=ur4wq2iFbRI03Q35 + +weixin.appId=wx7b16b308c9127a48 +weixin.appSecret=65217b4fe10d74b5785a5ab9475fcb24 +weixin.index.url=pages/index/index + +signKey=d851f2a9ac90474abecdc2fbb148d4d7 +fixMobileOpenid=HSAY4AF322E +#xxljob配置 +#xxljob配置 + +xxl.job.admin.addresses = http://10.7.53.217:10001/xxl-job-admin,http://10.6.49.25:10001/xxl-job-admin +xxl.job.executor.appname = ${spring.application.name} +xxl.job.executor.ip = +xxl.job.executor.port = 40001 +xxl.job.executor.logpath = logs/xxl-job/jobhandler +xxl.job.executor.logretentiondays = 30 +xxl.job.accessToken = + +exhibition.channel.id=52399 +recommended.channel.id=52400 + +cool.app.id=78836 +coolstore.page.domain=https://store.coolstore.cn + +xfsg.url=https://inf.xianfengsg.com/InfService + +aliyun.sms.accessKeyId=LTAI5tAVZ3r9UtSpLGcmGoQn +aliyun.sms.accessKeySecret=WIMjO4BjVg3YAHwmplq86yOyS2HMpa +aliyun.sms.signName=酷店掌 + +mybatis.configuration.variables.enterpriseId=9ee7b8b48e2447f9a2075b5a46e94d08 +enterprise.dingCorpId=ding4da17dabe9a7b19f \ No newline at end of file diff --git a/coolstore-partner-web/src/main/resources/application-test.properties b/coolstore-partner-web/src/main/resources/application-test.properties new file mode 100644 index 000000000..4b652bdef --- /dev/null +++ b/coolstore-partner-web/src/main/resources/application-test.properties @@ -0,0 +1,80 @@ + +#mysql config +default.datasource.url=jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcollege_intelligent_69?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true +default.datasource.username=coolstore +default.datasource.password=CSCErYcXniNYm7bT + +#redis +redis.host.uri=http://userInfo:Cx111111@tstore-coolcollege.redis.rds.aliyuncs.com:6379/0 + +#pagehelper +pagehelper.helper-dialect=mysql +pagehelper.reasonable=false +pagehelper.returnPageInfo=check +pagehelper.support-methods-arguments=false +pagehelper.params=count=countSql +pagehelper.page-size-zero=true + +spring.mvc.async.request-timeout=60000 + +# mybatis config +mybatis.mapper-locations=classpath*:mapper/**/*Mapper.xml + +mybatis.configuration.call-setters-on-nulls=true +mybatis.configuration.map-underscore-to-camel-case=true + +isv.domain=https://abstore-isv.coolstore.cn/isv + +#rocketmq \u914D\u7F6E +rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2 +rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig +rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-internal.aliyuncs.com:8080 +rocketmq.topic=simple_message + +#oss配置 +oss.accessKeyId=LTAI5tRSXy2MrqaaBJ6gReur +oss.accessKeySecret=FFsl8d9batprJ0vXr0k4Y8ada40Wm2 +oss.endpoint=oss-cn-hangzhou.aliyuncs.com +oss.bucket=cool-store-hsay +oss.file.dir=partner/171cddee76471740/ +oss.excelFile.dir=lineExcel/ + + +#cdn地址 +cdn.url=https://testhsaypic.coolstore.cn + +#TRTC +trtc.sdkAppId=1600026212 +trtc.secretKey=e036b654c665f649f053a01ff6f5652a826980027be298d4d49949f6e26434a5 +trtc.video.callback.secretKey=ur4wq2iFbRI03Q35 + +weixin.appId=wx997f2206e276e513 +weixin.appSecret=2ddea4374abeace05e83c948392c2952 +weixin.index.url=pages/index/index + +signKey=77fea013c3a6459685b83c21a2fc3411 +fixMobileOpenid=HSAY5531DA7 +#xxljob配置 +#xxljob配置 +xxl.job.admin.addresses = http://10.7.53.224:10001/xxl-job-admin +xxl.job.executor.appname = ${spring.application.name} +xxl.job.executor.ip = +xxl.job.executor.port = 40001 +xxl.job.executor.logpath = logs/xxl-job/jobhandler +xxl.job.executor.logretentiondays = 30 +xxl.job.accessToken = 25365115eed84e9ba5e0040abb255a09 + +exhibition.channel.id=52399 +recommended.channel.id=52400 + +cool.app.id=80685 +coolstore.page.domain=https://tstore.coolstore.cn + +xfsg.url=https://inf-test.xianfengsg.com/InfService + +aliyun.sms.accessKeyId=LTAI5tAVZ3r9UtSpLGcmGoQn +aliyun.sms.accessKeySecret=WIMjO4BjVg3YAHwmplq86yOyS2HMpa +aliyun.sms.signName=酷店掌 + +mybatis.configuration.variables.enterpriseId=28c20a7b42b94171acb1ab3f631d69e1 +enterprise.dingCorpId=ding0006ae30cf81071ea1320dcb25e91351 \ No newline at end of file diff --git a/coolstore-partner-web/src/main/resources/application.properties b/coolstore-partner-web/src/main/resources/application.properties new file mode 100644 index 000000000..0e613a596 --- /dev/null +++ b/coolstore-partner-web/src/main/resources/application.properties @@ -0,0 +1,62 @@ +spring.application.name=hsay-partner-web +spring.profiles.active=@profileActive@ + +server.port=40000 +server.servlet.context-path=/xfsg + +#logback +logging.config=classpath:logback-spring.xml +logging.path=/data/log/partner + +#connection pool config +spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.hikari.cachePrepStmts=true +spring.datasource.hikari.prepStmtCacheSize=250 +spring.datasource.hikari.prepStmtCacheSqlLimit=2048 +spring.datasource.hikari.useServerPrepStmts=true +spring.datasource.hikari.useLocalSessionState=true +spring.datasource.hikari.rewriteBatchedStatements=true +spring.datasource.hikari.cacheResultSetMetadata=true +spring.datasource.hikari.cacheServerConfiguration=true +spring.datasource.hikari.elideSetAutoCommits=true +spring.datasource.hikari.maintainTimeStats=false +spring.datasource.hikari.minimumIdle=10 +spring.datasource.hikari.maximumPoolSize=150 +spring.datasource.hikari.maxLifetime=200000 +spring.datasource.hikari.connectionTimeout=3000 +spring.datasource.hikari.poolName=DefaultHikariCP +spring.datasource.hikari.idleTimeout=300000 +#\u914D\u7F6E\u8FD4\u56DE\u65F6\u95F4\u6233 +spring.jackson.serialization.write-dates-as-timestamps=true +# file size +spring.servlet.multipart.maxFileSize=1024MB +spring.servlet.multipart.maxRequestSize=1024MB +# Max file size. +spring.servlet.multipart.max-file-size=1024MB +# Max request size. +spring.servlet.multipart.max-request-size=1024MB +spring.main.allow-circular-references=true + +allow.upload.image.ext=jpg,jpeg,gif,png,bmp,jfif +allow.upload.file.ext=zip,mp4,pptx,ppt,doc,docx,pdf +allow.upload.video.ext=3gp,asf,avi,dat,dv,flv,f4v,gif,m2t,m3u8,m4v,mj2,mjpeg,mkv,mov,mp4,mpe,mpg,mpeg,mts,ogg,qt,rm,rmvb,swf,ts,vob,wmv,webm +allow.upload.audio.ext=mp3 +allow.upload.image.size=1024 * 1024L * 1024L +allow.upload.file.size=30 * 1024 * 1024L +allow.upload.video.size=1024 * 1024 * 10L +allow.upload.audio.size=1024 * 1024 * 10L + +server.connection-timeout=18000000 +server.tomcat.basedir=/tmp/tomcat/partner-b + +log4j2.formatMsgNoLookups=true + +wx.pay.merchantId=1670560201 +wx.pay.privateKeyPath=/opt/apps/coolcollege/apiclient/apiclient_key.pem +wx.pay.merchantSerialNumber=66B8E966AFE796BA06006664FCBFBC3F0E2F5A1B +wx.pay.apiV3Key=wxpayzhenghu123JKJHkjafWXCertUt1 +wx.pay.payNotifyUrl=https://abstore-api.coolstore.cn/xfsg/mini/wechatPay/payNotify +wx.pay.backNotifyUrl=https://abstore-api.coolstore.cn/xfsg/mini/wechatPay/refundNotify + +aliyun.accessKeyId=LTAI5tQ6QBnWaB5LaJYz6zcD +aliyun.accessKeySecret=spqsOgtfr54cwK861O3N3fInydTgjA \ No newline at end of file diff --git a/coolstore-partner-web/src/main/resources/logback-spring.xml b/coolstore-partner-web/src/main/resources/logback-spring.xml new file mode 100644 index 000000000..145a5f06c --- /dev/null +++ b/coolstore-partner-web/src/main/resources/logback-spring.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + DEBUG + + + ${log_pattern} + + + + + > + ${logBaseFolder}/${logFileNamePrefix}.%d{yyyy-MM-dd}.log + ${every_his_size} + + + ${log_pattern} + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-web/src/main/resources/static/Alibaba-PuHuiTi-Regular.ttf b/coolstore-partner-web/src/main/resources/static/Alibaba-PuHuiTi-Regular.ttf new file mode 100644 index 000000000..9f8ab8d8f Binary files /dev/null and b/coolstore-partner-web/src/main/resources/static/Alibaba-PuHuiTi-Regular.ttf differ diff --git a/coolstore-partner-web/src/main/resources/static/passLetterBg.jpg b/coolstore-partner-web/src/main/resources/static/passLetterBg.jpg new file mode 100644 index 000000000..9c2c01786 Binary files /dev/null and b/coolstore-partner-web/src/main/resources/static/passLetterBg.jpg differ diff --git a/pom.xml b/pom.xml new file mode 100644 index 000000000..40c8f0d12 --- /dev/null +++ b/pom.xml @@ -0,0 +1,271 @@ + + + 4.0.0 + + com.coolstore + coolstore-partner-manage + pom + 1.0.0 + + coolstore-partner-web + coolstore-partner-common + coolstore-partner-dao + coolstore-partner-model + coolstore-partner-service + + + + org.springframework.boot + spring-boot-starter-parent + 2.2.6.RELEASE + + + + 8 + 8 + Hoxton.SR4 + 2.2.0.RELEASE + + + + + + + com.coolstore + coolstore-partner-common + 1.0.0 + + + com.coolstore + coolstore-partner-web + 1.0.0 + + + com.coolstore + coolstore-partner-service + 1.0.0 + + + com.coolstore + coolstore-partner-model + 1.0.0 + + + com.coolstore + coolstore-partner-dao + 1.0.0 + + + org.springframework.boot + spring-boot-starter-jdbc + 3.0.2 + + + com.github.pagehelper + pagehelper-spring-boot-starter + 1.4.6 + + + org.springframework.boot + spring-boot-starter-test + 2.4.5 + + + org.apache.commons + commons-lang3 + 3.12.0 + + + mysql + mysql-connector-java + 8.0.18 + + + org.projectlombok + lombok + 1.18.6 + + + com.alibaba + fastjson + 1.2.60 + + + org.apache.commons + commons-collections4 + 4.1 + + + org.apache.commons + commons-pool2 + 2.8.0 + + + redis.clients + jedis + 2.8.0 + + + com.github.xiaoymin + knife4j-spring-boot-starter + 2.0.4 + + + org.slf4j + slf4j-api + 1.7.30 + + + xerces + xercesImpl + 2.11.0 + + + org.apache.shiro + shiro-core + 1.2.3 + + + com.aliyun.openservices + ons-client + 1.8.8.3.Final + + + cn.hutool + hutool-all + 5.0.7 + + + com.aliyun + tea-openapi + 0.0.19 + + + com.aliyun + ons20190214 + 1.0.0 + + + com.google.guava + guava + 20.0 + + + com.aliyun + ons20190214 + 1.0.0 + + + com.aliyun + tea-openapi + 0.0.19 + + + com.aliyun.oss + aliyun-sdk-oss + 3.13.0 + + + org.springframework.boot + spring-boot-starter-data-redis + 3.0.4 + + + com.xuxueli + xxl-job-core + 2.3.0 + + + com.aliyun + dytnsapi20200217 + 1.0.28 + + + com.aliyun + ocr20191230 + 1.0.26 + + + org.aspectj + aspectjrt + 1.9.5 + + + org.aspectj + aspectjweaver + 1.9.5 + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + com.alibaba + easyexcel + 2.2.6 + + + org.apache.poi + poi-ooxml + 3.17 + + + + com.github.danielwegener + logback-kafka-appender + 0.2.0-RC2 + + + + com.github.wechatpay-apiv3 + wechatpay-java + 0.2.11 + + + com.aliyun + alibabacloud-dysmsapi20170525 + 2.0.24 + + + + + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.2 + + + prepare-agent + + prepare-agent + + + + prepare-agent-integration + + prepare-agent-integration + + + + jacoco-site + + report + + + + + + + + + \ No newline at end of file