Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
P
promotion-service
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
promotion
promotion-service
Commits
8a07f30e
提交
8a07f30e
authored
5月 20, 2024
作者:
000516
提交者:
Coding
5月 20, 2024
浏览文件
操作
浏览文件
下载
差异文件
发版v0.1.0 - 小程序基本功能上线
一、发版功能 1. 促销员注册 2. 促销员登录(自动/手动登录) 3. 个人信息查看 4. 每日打卡任务 5. 销量上报、图片上报 6. 任务记录列表查询 7. 任务记录详情 8. 提交审批 9. 当日数据查看 10. 发送手机号-验证码 11. 勤策 - 同步部门、员工、终端 二、TODO 功能 时间段限制关闭:上班卡、午休下班卡、午休上班卡、下班卡
上级
4519626e
830ee160
显示空白字符变更
内嵌
并排
正在显示
106 个修改的文件
包含
5618 行增加
和
40 行删除
+5618
-40
.gitignore
.gitignore
+1
-0
pom.xml
pom.xml
+62
-0
WangxiaoluPromotionServiceApplication.java
...aolu/promotion/WangxiaoluPromotionServiceApplication.java
+3
-0
RedisKeys.java
...java/com/wangxiaolu/promotion/common/redis/RedisKeys.java
+24
-0
RedisCache.java
...wangxiaolu/promotion/common/redis/service/RedisCache.java
+90
-0
MybatisPlusConfig.java
.../wangxiaolu/promotion/config/mysql/MybatisPlusConfig.java
+26
-0
WxMaConfiguration.java
...wangxiaolu/promotion/config/weixin/WxMaConfiguration.java
+131
-0
WxMaProperties.java
...om/wangxiaolu/promotion/config/weixin/WxMaProperties.java
+45
-0
TemporaryActivityClockQueryController.java
...vity/temporary/TemporaryActivityClockQueryController.java
+43
-0
TemporaryActivityCoreController.java
...r/activity/temporary/TemporaryActivityCoreController.java
+148
-0
TemporaryActivityQueryController.java
.../activity/temporary/TemporaryActivityQueryController.java
+56
-0
PromotionLoginController.java
...u/promotion/controller/user/PromotionLoginController.java
+1
-1
QinCeClienteleDataQueryController.java
...on/controller/user/QinCeClienteleDataQueryController.java
+36
-0
QinCeDataTaskController.java
...lu/promotion/controller/user/QinCeDataTaskController.java
+8
-0
UserSendSms.java
...com/wangxiaolu/promotion/controller/user/UserSendSms.java
+41
-0
WeChatUserCoreController.java
...promotion/controller/wechat/WeChatUserCoreController.java
+65
-0
WeChatUserQueryController.java
...romotion/controller/wechat/WeChatUserQueryController.java
+62
-0
TemporaryActivityClockDao.java
...motion/domain/activity/dao/TemporaryActivityClockDao.java
+29
-0
TemporaryActivityLogDao.java
...romotion/domain/activity/dao/TemporaryActivityLogDao.java
+14
-0
TemporaryActivityPhotoDao.java
...motion/domain/activity/dao/TemporaryActivityPhotoDao.java
+29
-0
TemporaryActivityReportedDao.java
...ion/domain/activity/dao/TemporaryActivityReportedDao.java
+38
-0
TemporaryActivityClockDaoImpl.java
...main/activity/dao/impl/TemporaryActivityClockDaoImpl.java
+92
-0
TemporaryActivityLogDaoImpl.java
...domain/activity/dao/impl/TemporaryActivityLogDaoImpl.java
+28
-0
TemporaryActivityPhotoDaoImpl.java
...main/activity/dao/impl/TemporaryActivityPhotoDaoImpl.java
+112
-0
TemporaryActivityReportedDaoImpl.java
...n/activity/dao/impl/TemporaryActivityReportedDaoImpl.java
+159
-0
TemporaryActivityClockMapper.java
.../domain/activity/mapper/TemporaryActivityClockMapper.java
+22
-0
TemporaryActivityLogMapper.java
...on/domain/activity/mapper/TemporaryActivityLogMapper.java
+22
-0
TemporaryActivityPhotoMapper.java
.../domain/activity/mapper/TemporaryActivityPhotoMapper.java
+22
-0
TemporaryActivityReportedMapper.java
...main/activity/mapper/TemporaryActivityReportedMapper.java
+22
-0
TemporaryActivityClockDO.java
...main/activity/mapper/entity/TemporaryActivityClockDO.java
+122
-0
TemporaryActivityLogDO.java
...domain/activity/mapper/entity/TemporaryActivityLogDO.java
+79
-0
TemporaryActivityPhotoDO.java
...main/activity/mapper/entity/TemporaryActivityPhotoDO.java
+64
-0
TemporaryActivityReportedDO.java
...n/activity/mapper/entity/TemporaryActivityReportedDO.java
+98
-0
TemporaryActivityWrapper.java
...n/domain/activity/wrapperQo/TemporaryActivityWrapper.java
+33
-0
TemporaryClockWrapper.java
...tion/domain/activity/wrapperQo/TemporaryClockWrapper.java
+33
-0
QinCeClienteleStoreDao.java
...olu/promotion/domain/user/dao/QinCeClienteleStoreDao.java
+25
-0
QinCeEmployeeDao.java
...angxiaolu/promotion/domain/user/dao/QinCeEmployeeDao.java
+7
-1
TemporaryInfoDao.java
...angxiaolu/promotion/domain/user/dao/TemporaryInfoDao.java
+28
-0
QinCeClienteleStoreDaoImpl.java
...tion/domain/user/dao/impl/QinCeClienteleStoreDaoImpl.java
+141
-0
QinCeEmployeeDaoImpl.java
.../promotion/domain/user/dao/impl/QinCeEmployeeDaoImpl.java
+28
-0
TemporaryInfoDaoImpl.java
.../promotion/domain/user/dao/impl/TemporaryInfoDaoImpl.java
+81
-0
QinCeClienteleStoreMapper.java
...omotion/domain/user/mapper/QinCeClienteleStoreMapper.java
+21
-0
TemporaryInfoMapper.java
...olu/promotion/domain/user/mapper/TemporaryInfoMapper.java
+26
-0
QinCeClienteleStoreDO.java
...tion/domain/user/mapper/entity/QinCeClienteleStoreDO.java
+521
-0
QinCeDepartmentDO.java
...romotion/domain/user/mapper/entity/QinCeDepartmentDO.java
+1
-1
TemporaryInfoDO.java
.../promotion/domain/user/mapper/entity/TemporaryInfoDO.java
+84
-0
StoreWrapper.java
...gxiaolu/promotion/domain/user/wrapperQo/StoreWrapper.java
+32
-0
TemporaryWrapper.java
...olu/promotion/domain/user/wrapperQo/TemporaryWrapper.java
+27
-0
ActivityPhotoType.java
...angxiaolu/promotion/enums/activity/ActivityPhotoType.java
+45
-0
ClockType.java
...va/com/wangxiaolu/promotion/enums/activity/ClockType.java
+30
-0
LogType.java
...java/com/wangxiaolu/promotion/enums/activity/LogType.java
+24
-0
TemActApproveStatus.java
...gxiaolu/promotion/enums/activity/TemActApproveStatus.java
+27
-0
DataException.java
...ava/com/wangxiaolu/promotion/exception/DataException.java
+33
-0
FlowException.java
...ava/com/wangxiaolu/promotion/exception/FlowException.java
+33
-0
PageInfo.java
src/main/java/com/wangxiaolu/promotion/pojo/PageInfo.java
+92
-0
QinCeEmployeeDto.java
...omotion/pojo/activity/temporary/dto/QinCeEmployeeDto.java
+130
-0
TemporaryActivityReportedDto.java
.../activity/temporary/dto/TemporaryActivityReportedDto.java
+116
-0
TemporaryClockDto.java
...motion/pojo/activity/temporary/dto/TemporaryClockDto.java
+95
-0
TemporaryActivityDataVo.java
...n/pojo/activity/temporary/vo/TemporaryActivityDataVo.java
+75
-0
TemporaryClockVo.java
...romotion/pojo/activity/temporary/vo/TemporaryClockVo.java
+60
-0
QinCeClienteleStoreDto.java
...iaolu/promotion/pojo/user/dto/QinCeClienteleStoreDto.java
+27
-0
WxTemporaryInfoDto.java
...angxiaolu/promotion/pojo/user/dto/WxTemporaryInfoDto.java
+79
-0
ClienteleStoreQueryVo.java
...gxiaolu/promotion/pojo/user/vo/ClienteleStoreQueryVo.java
+33
-0
WxTemporaryEnrollVo.java
...angxiaolu/promotion/pojo/user/vo/WxTemporaryEnrollVo.java
+80
-0
WxTemporaryLoginVo.java
...wangxiaolu/promotion/pojo/user/vo/WxTemporaryLoginVo.java
+25
-0
ControllerExceptionAdvice.java
...lu/promotion/result/advice/ControllerExceptionAdvice.java
+43
-3
RCode.java
.../java/com/wangxiaolu/promotion/result/basedata/RCode.java
+22
-2
TemporaryActivityClockQueryService.java
...ctivity/temporary/TemporaryActivityClockQueryService.java
+14
-0
TemporaryActivityCoreService.java
...vice/activity/temporary/TemporaryActivityCoreService.java
+32
-0
TemporaryActivityQueryService.java
...ice/activity/temporary/TemporaryActivityQueryService.java
+26
-0
TemporaryActivityClockQueryServiceImpl.java
...emporary/impl/TemporaryActivityClockQueryServiceImpl.java
+69
-0
TemporaryActivityCoreServiceImpl.java
...vity/temporary/impl/TemporaryActivityCoreServiceImpl.java
+197
-0
TemporaryActivityQueryServiceImpl.java
...ity/temporary/impl/TemporaryActivityQueryServiceImpl.java
+70
-0
QinCeClienteleDataQueryService.java
...romotion/service/user/QinCeClienteleDataQueryService.java
+15
-0
QinCeDataTaskService.java
...ngxiaolu/promotion/service/user/QinCeDataTaskService.java
+3
-0
TencentCoreService.java
...wangxiaolu/promotion/service/user/TencentCoreService.java
+14
-0
QinCeClienteleDataQueryServiceImpl.java
...service/user/impl/QinCeClienteleDataQueryServiceImpl.java
+35
-0
QinCeDataTaskServiceImpl.java
...promotion/service/user/impl/QinCeDataTaskServiceImpl.java
+26
-3
TencentCoreServiceImpl.java
...u/promotion/service/user/impl/TencentCoreServiceImpl.java
+54
-0
WeChatUserCoreService.java
...iaolu/promotion/service/wechat/WeChatUserCoreService.java
+16
-0
WeChatUserQueryService.java
...aolu/promotion/service/wechat/WeChatUserQueryService.java
+15
-0
WeChatUserCoreServiceImpl.java
...motion/service/wechat/impl/WeChatUserCoreServiceImpl.java
+47
-0
WeChatUserQueryServiceImpl.java
...otion/service/wechat/impl/WeChatUserQueryServiceImpl.java
+58
-0
DataUtils.java
src/main/java/com/wangxiaolu/promotion/utils/DataUtils.java
+46
-0
DateUtils.java
src/main/java/com/wangxiaolu/promotion/utils/DateUtils.java
+32
-0
JwtUtils.java
src/main/java/com/wangxiaolu/promotion/utils/JwtUtils.java
+68
-0
OkHttp.java
src/main/java/com/wangxiaolu/promotion/utils/OkHttp.java
+2
-5
QinCeUtils.java
src/main/java/com/wangxiaolu/promotion/utils/QinCeUtils.java
+40
-7
TencentUtils.java
...ain/java/com/wangxiaolu/promotion/utils/TencentUtils.java
+130
-0
WxMaUtils.java
src/main/java/com/wangxiaolu/promotion/utils/WxMaUtils.java
+52
-0
application-dev.yml
src/main/resources/application-dev.yml
+62
-0
application-live.yml
src/main/resources/application-live.yml
+62
-0
application.yml
src/main/resources/application.yml
+1
-16
logback-spring.xml
src/main/resources/logback-spring.xml
+1
-1
QinCeClienteleStoreMapper.xml
src/main/resources/mapper/QinCeClienteleStoreMapper.xml
+123
-0
TemporaryActivityClockMapper.xml
src/main/resources/mapper/TemporaryActivityClockMapper.xml
+50
-0
TemporaryActivityLogMapper.xml
src/main/resources/mapper/TemporaryActivityLogMapper.xml
+18
-0
TemporaryActivityPhotoMapper.xml
src/main/resources/mapper/TemporaryActivityPhotoMapper.xml
+29
-0
TemporaryActivityReportedMapper.xml
...main/resources/mapper/TemporaryActivityReportedMapper.xml
+31
-0
TemporaryInfoMapper.xml
src/main/resources/mapper/TemporaryInfoMapper.xml
+40
-0
TemporaryActivityCoreControllerTest.java
...tivity/temporary/TemporaryActivityCoreControllerTest.java
+32
-0
QinCeDataTaskControllerTest.java
...romotion/controller/user/QinCeDataTaskControllerTest.java
+6
-0
WeChatUserCoreControllerTest.java
...otion/controller/wechat/WeChatUserCoreControllerTest.java
+46
-0
WeChatUserQueryControllerTest.java
...tion/controller/wechat/WeChatUserQueryControllerTest.java
+36
-0
DateUtilsTest.java
...st/java/com/wangxiaolu/promotion/utils/DateUtilsTest.java
+27
-0
TencentUtilsTest.java
...java/com/wangxiaolu/promotion/utils/TencentUtilsTest.java
+42
-0
没有找到文件。
.gitignore
浏览文件 @
8a07f30e
...
...
@@ -31,6 +31,7 @@ build/
!**/src/main/**/build/
!**/src/test/**/build/
/logs/**
/LOG_PATH_IS_UNDEFINED
### VS Code ###
.vscode/
pom.xml
浏览文件 @
8a07f30e
...
...
@@ -122,6 +122,68 @@
<version>
1.15
</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk18on -->
<dependency>
<groupId>
org.bouncycastle
</groupId>
<artifactId>
bcprov-jdk15on
</artifactId>
<version>
1.64
</version>
</dependency>
<!-- 微信小程序 SDK 依赖 -->
<dependency>
<groupId>
com.github.binarywang
</groupId>
<artifactId>
weixin-java-miniapp
</artifactId>
<version>
4.6.0
</version>
</dependency>
<!-- 腾讯云服务 -->
<!-- 请到https://search.maven.org/search?q=tencentcloud-sdk-java查询所有版本,最新版本如下 -->
<dependency>
<groupId>
com.tencentcloudapi
</groupId>
<artifactId>
tencentcloud-sdk-java-sms
</artifactId>
<version>
3.1.998
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-redis
</artifactId>
<version>
2.4.2
</version>
</dependency>
<dependency>
<groupId>
redis.clients
</groupId>
<artifactId>
jedis
</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
<dependency>
<groupId>
com.auth0
</groupId>
<artifactId>
java-jwt
</artifactId>
<version>
4.4.0
</version>
</dependency>
<dependency>
<groupId>
com.alibaba.cloud
</groupId>
<artifactId>
spring-cloud-starter-alibaba-nacos-discovery
</artifactId>
<version>
2021.1
</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-config -->
<dependency>
<groupId>
com.alibaba.cloud
</groupId>
<artifactId>
spring-cloud-starter-alibaba-nacos-config
</artifactId>
<version>
2021.1
</version>
</dependency>
<!--解决SpringCloud项目无法读取bootstrap.yaml配置文件-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-bootstrap -->
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-starter-bootstrap
</artifactId>
<version>
4.0.1
</version>
</dependency>
</dependencies>
<build>
...
...
src/main/java/com/wangxiaolu/promotion/WangxiaoluPromotionServiceApplication.java
浏览文件 @
8a07f30e
...
...
@@ -3,8 +3,11 @@ package com.wangxiaolu.promotion;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.cloud.client.discovery.EnableDiscoveryClient
;
import
org.springframework.context.annotation.EnableAspectJAutoProxy
;
import
org.springframework.scheduling.annotation.EnableAsync
;
@EnableAsync
@EnableConfigurationProperties
@EnableAspectJAutoProxy
@SpringBootApplication
...
...
src/main/java/com/wangxiaolu/promotion/common/redis/RedisKeys.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
common
.
redis
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
public
interface
RedisKeys
{
@AllArgsConstructor
@Getter
enum
UserKeys
{
/**
* 用户接收手机验证码
*/
PHONE_VER_CODE
(
"user:phone_code:phone_"
),
/**
* 用户登录信息:token
*/
TEMPORARY_TOKEN
(
"user:login_token:temporary:"
),
;
String
key
;
}
}
src/main/java/com/wangxiaolu/promotion/common/redis/service/RedisCache.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
common
.
redis
.
service
;
import
com.alibaba.fastjson.JSONObject
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.core.ValueOperations
;
import
org.springframework.stereotype.Component
;
import
java.util.concurrent.TimeUnit
;
@Component
public
class
RedisCache
{
@Autowired
RedisTemplate
<
String
,
String
>
redisTemplate
;
/**
* 保存一个值
*/
public
void
add
(
String
key
,
String
val
)
{
ValueOperations
<
String
,
String
>
vo
=
redisTemplate
.
opsForValue
();
vo
.
set
(
key
,
val
);
}
/**
* 保存一个值,设置过期时间(分钟)
*/
public
void
addToMinute
(
String
key
,
String
val
,
long
time
)
{
ValueOperations
<
String
,
String
>
vo
=
redisTemplate
.
opsForValue
();
vo
.
set
(
key
,
val
,
time
,
TimeUnit
.
MINUTES
);
}
/**
* 保存一个值,并将val json化
*/
public
void
addToJson
(
String
key
,
Object
val
)
{
ValueOperations
<
String
,
String
>
vo
=
redisTemplate
.
opsForValue
();
vo
.
set
(
key
,
valToJson
(
val
));
}
/**
* 保存一个值,并将val json化,设置过期时间(分钟)
*/
public
void
addToJsonToMinute
(
String
key
,
Object
val
,
long
time
)
{
ValueOperations
<
String
,
String
>
vo
=
redisTemplate
.
opsForValue
();
vo
.
set
(
key
,
valToJson
(
val
),
time
,
TimeUnit
.
MINUTES
);
}
/**
* 保存一个值,并将val json化,设置过期时间(天)
*/
public
void
addToJsonToDays
(
String
key
,
Object
val
,
long
days
)
{
ValueOperations
<
String
,
String
>
vo
=
redisTemplate
.
opsForValue
();
vo
.
set
(
key
,
valToJson
(
val
),
days
,
TimeUnit
.
DAYS
);
}
/**
* 获取一个值
*/
public
String
get
(
String
key
)
{
ValueOperations
<
String
,
String
>
vo
=
redisTemplate
.
opsForValue
();
return
vo
.
get
(
key
);
}
/**
* 获取一个值,并将val json化
*/
public
JSONObject
getToJson
(
String
key
)
{
ValueOperations
<
String
,
String
>
vo
=
redisTemplate
.
opsForValue
();
String
val
=
vo
.
get
(
key
);
return
JSONObject
.
parseObject
(
val
);
}
/**
* 获取一个值,并将val json化
*/
// public JSONObject getUserJsonInfo(String authorization) {
// JSONObject userDetail = getToJson(RedisKeys.UserKeys.TOKEN.getKey() + authorization);
// return userDetail;
// }
public
void
removeKey
(
String
key
)
{
redisTemplate
.
delete
(
key
);
}
private
String
valToJson
(
Object
o
)
{
return
JSONObject
.
toJSONString
(
o
);
}
}
src/main/java/com/wangxiaolu/promotion/config/mysql/MybatisPlusConfig.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
config
.
mysql
;
import
com.baomidou.mybatisplus.annotation.DbType
;
import
com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor
;
import
com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.transaction.annotation.EnableTransactionManagement
;
/**
* @author : liqiulin
* @date : 2024-04-25 13
* @describe :
*/
@Configuration
@EnableTransactionManagement
//@MapperScan( { "com.wangxiaolu.promotion.domain" })
public
class
MybatisPlusConfig
{
@Bean
public
MybatisPlusInterceptor
mybatisPlusInterceptor
()
{
MybatisPlusInterceptor
mybatisPlusInterceptor
=
new
MybatisPlusInterceptor
();
mybatisPlusInterceptor
.
addInnerInterceptor
(
new
PaginationInnerInterceptor
(
DbType
.
MYSQL
));
return
mybatisPlusInterceptor
;
}
}
src/main/java/com/wangxiaolu/promotion/config/weixin/WxMaConfiguration.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
config
.
weixin
;
import
cn.binarywang.wx.miniapp.api.WxMaService
;
import
cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl
;
import
cn.binarywang.wx.miniapp.bean.WxMaKefuMessage
;
import
cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage
;
import
cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl
;
import
cn.binarywang.wx.miniapp.message.WxMaMessageHandler
;
import
cn.binarywang.wx.miniapp.message.WxMaMessageRouter
;
import
com.google.common.collect.Lists
;
import
lombok.extern.slf4j.Slf4j
;
import
me.chanjar.weixin.common.bean.result.WxMediaUploadResult
;
import
me.chanjar.weixin.common.error.WxErrorException
;
import
me.chanjar.weixin.common.error.WxRuntimeException
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
java.io.File
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* @author <a href="https://github.com/binarywang">Binary Wang</a>
*/
@Slf4j
@Configuration
@EnableConfigurationProperties
(
WxMaProperties
.
class
)
public
class
WxMaConfiguration
{
private
final
WxMaProperties
properties
;
@Autowired
public
WxMaConfiguration
(
WxMaProperties
properties
)
{
this
.
properties
=
properties
;
}
@Bean
public
WxMaService
wxMaService
()
{
List
<
WxMaProperties
.
Config
>
configs
=
this
.
properties
.
getConfigs
();
if
(
configs
==
null
)
{
throw
new
WxRuntimeException
(
"微信相关配置错误"
);
}
WxMaService
maService
=
new
WxMaServiceImpl
();
maService
.
setMultiConfigs
(
configs
.
stream
()
.
map
(
a
->
{
WxMaDefaultConfigImpl
config
=
new
WxMaDefaultConfigImpl
();
// WxMaDefaultConfigImpl config = new WxMaRedisConfigImpl(new JedisPool());
// 使用上面的配置时,需要同时引入jedis-lock的依赖,否则会报类无法找到的异常
config
.
setAppid
(
a
.
getAppid
());
config
.
setSecret
(
a
.
getSecret
());
config
.
setToken
(
a
.
getToken
());
config
.
setAesKey
(
a
.
getAesKey
());
config
.
setMsgDataFormat
(
a
.
getMsgDataFormat
());
return
config
;
}).
collect
(
Collectors
.
toMap
(
WxMaDefaultConfigImpl:
:
getAppid
,
a
->
a
,
(
o
,
n
)
->
o
)));
return
maService
;
}
@Bean
public
WxMaMessageRouter
wxMaMessageRouter
(
WxMaService
wxMaService
)
{
final
WxMaMessageRouter
router
=
new
WxMaMessageRouter
(
wxMaService
);
router
.
rule
().
handler
(
logHandler
).
next
()
.
rule
().
async
(
false
).
content
(
"订阅消息"
).
handler
(
subscribeMsgHandler
).
end
()
.
rule
().
async
(
false
).
content
(
"文本"
).
handler
(
textHandler
).
end
()
.
rule
().
async
(
false
).
content
(
"图片"
).
handler
(
picHandler
).
end
()
.
rule
().
async
(
false
).
content
(
"二维码"
).
handler
(
qrcodeHandler
).
end
();
return
router
;
}
private
final
WxMaMessageHandler
subscribeMsgHandler
=
(
wxMessage
,
context
,
service
,
sessionManager
)
->
{
service
.
getMsgService
().
sendSubscribeMsg
(
WxMaSubscribeMessage
.
builder
()
.
templateId
(
"此处更换为自己的模板id"
)
.
data
(
Lists
.
newArrayList
(
new
WxMaSubscribeMessage
.
MsgData
(
"keyword1"
,
"339208499"
)))
.
toUser
(
wxMessage
.
getFromUser
())
.
build
());
return
null
;
};
private
final
WxMaMessageHandler
logHandler
=
(
wxMessage
,
context
,
service
,
sessionManager
)
->
{
log
.
info
(
"收到消息:"
+
wxMessage
.
toString
());
service
.
getMsgService
().
sendKefuMsg
(
WxMaKefuMessage
.
newTextBuilder
().
content
(
"收到信息为:"
+
wxMessage
.
toJson
())
.
toUser
(
wxMessage
.
getFromUser
()).
build
());
return
null
;
};
private
final
WxMaMessageHandler
textHandler
=
(
wxMessage
,
context
,
service
,
sessionManager
)
->
{
service
.
getMsgService
().
sendKefuMsg
(
WxMaKefuMessage
.
newTextBuilder
().
content
(
"回复文本消息"
)
.
toUser
(
wxMessage
.
getFromUser
()).
build
());
return
null
;
};
private
final
WxMaMessageHandler
picHandler
=
(
wxMessage
,
context
,
service
,
sessionManager
)
->
{
try
{
WxMediaUploadResult
uploadResult
=
service
.
getMediaService
()
.
uploadMedia
(
"image"
,
"png"
,
ClassLoader
.
getSystemResourceAsStream
(
"tmp.png"
));
service
.
getMsgService
().
sendKefuMsg
(
WxMaKefuMessage
.
newImageBuilder
()
.
mediaId
(
uploadResult
.
getMediaId
())
.
toUser
(
wxMessage
.
getFromUser
())
.
build
());
}
catch
(
WxErrorException
e
)
{
e
.
printStackTrace
();
}
return
null
;
};
private
final
WxMaMessageHandler
qrcodeHandler
=
(
wxMessage
,
context
,
service
,
sessionManager
)
->
{
try
{
final
File
file
=
service
.
getQrcodeService
().
createQrcode
(
"123"
,
430
);
WxMediaUploadResult
uploadResult
=
service
.
getMediaService
().
uploadMedia
(
"image"
,
file
);
service
.
getMsgService
().
sendKefuMsg
(
WxMaKefuMessage
.
newImageBuilder
()
.
mediaId
(
uploadResult
.
getMediaId
())
.
toUser
(
wxMessage
.
getFromUser
())
.
build
());
}
catch
(
WxErrorException
e
)
{
e
.
printStackTrace
();
}
return
null
;
};
}
src/main/java/com/wangxiaolu/promotion/config/weixin/WxMaProperties.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
config
.
weixin
;
import
lombok.Data
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
java.util.List
;
/**
* @author <a href="https://github.com/binarywang">Binary Wang</a>
*/
@Data
@ConfigurationProperties
(
prefix
=
"wx.miniapp"
)
public
class
WxMaProperties
{
private
List
<
Config
>
configs
;
@Data
public
static
class
Config
{
/**
* 设置微信小程序的appid
*/
private
String
appid
;
/**
* 设置微信小程序的Secret
*/
private
String
secret
;
/**
* 设置微信小程序消息服务器配置的token
*/
private
String
token
;
/**
* 设置微信小程序消息服务器配置的EncodingAESKey
*/
private
String
aesKey
;
/**
* 消息格式,XML或者JSON
*/
private
String
msgDataFormat
;
}
}
src/main/java/com/wangxiaolu/promotion/controller/activity/temporary/TemporaryActivityClockQueryController.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
controller
.
activity
.
temporary
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto
;
import
com.wangxiaolu.promotion.service.activity.temporary.TemporaryActivityClockQueryService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
javax.validation.constraints.NotNull
;
/**
* @author : liqiulin
* @date : 2024-04-23 18
* @describe : 打卡信息查询
*/
@Slf4j
@RestController
@RequestMapping
(
"/temporary/clock/query"
)
public
class
TemporaryActivityClockQueryController
{
@Autowired
TemporaryActivityClockQueryService
temporaryActivityClockQueryService
;
/**
* 根据促销员id查询今日打卡信息
*/
@GetMapping
(
"/{temporary_id}"
)
public
TemporaryClockDto
findTodayTemporaryClockByTemId
(
@PathVariable
(
"temporary_id"
)
@NotNull
Integer
temporaryId
)
{
return
temporaryActivityClockQueryService
.
findTodayTemporaryClockByTemId
(
temporaryId
);
}
/**
* 根据促销员id查询指定日期打卡信息
* @param temporaryId 促销员id
* @param createDate 指定日期,格式:2024-04-25
* @return 打卡信息
*/
@GetMapping
(
"/date"
)
public
TemporaryClockDto
findTemporaryClockByTemIdAndDate
(
Integer
temporaryId
,
String
createDate
)
{
return
temporaryActivityClockQueryService
.
findTemporaryClockByTemIdAndDate
(
temporaryId
,
createDate
);
}
}
src/main/java/com/wangxiaolu/promotion/controller/activity/temporary/TemporaryActivityCoreController.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
controller
.
activity
.
temporary
;
import
com.wangxiaolu.promotion.enums.activity.ClockType
;
import
com.wangxiaolu.promotion.exception.ParamException
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.vo.TemporaryActivityDataVo
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.vo.TemporaryClockVo
;
import
com.wangxiaolu.promotion.result.basedata.RCode
;
import
com.wangxiaolu.promotion.service.activity.temporary.TemporaryActivityCoreService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
javax.validation.constraints.NotNull
;
import
java.util.Date
;
import
java.util.Objects
;
/**
* @author : liqiulin
* @date : 2024-04-17 19
* @describe : 促销员活动上报、修改
*/
@Slf4j
@RestController
@RequestMapping
(
"/activity/temporary/core"
)
public
class
TemporaryActivityCoreController
{
@Autowired
private
TemporaryActivityCoreService
tempActivityCoreService
;
/**
* 促销员当日打卡信息保存
*/
@PostMapping
(
"/today/clock"
)
public
void
clockInTodayActivity
(
@RequestBody
@Validated
TemporaryClockVo
clockVo
)
{
Integer
clockType
=
clockVo
.
getClockType
();
boolean
isClockIn
=
ClockType
.
TEMPORARY_CLOCK_IN
.
equals
(
clockType
);
// 上班卡必需有店铺id
if
(
isClockIn
&&
StringUtils
.
isBlank
(
clockVo
.
getStoreQcId
()))
{
throw
new
ParamException
(
RCode
.
CLOCK_DETAIL_ERROR
,
null
);
}
// 非上班卡必需有打卡记录ID
if
(!
isClockIn
&&
Objects
.
isNull
((
clockVo
.
getId
())))
{
throw
new
ParamException
(
RCode
.
CLOCK_DETAIL_ERROR
,
null
);
}
Date
clockTime
=
new
Date
();
TemporaryClockDto
dto
=
new
TemporaryClockDto
(
clockVo
.
getClockType
(),
clockVo
.
getId
(),
clockVo
.
getTemporaryId
(),
clockVo
.
getTemporaryName
());
// 上班卡、午休下班卡、午休上班卡、下班卡
if
(
isClockIn
)
{
builderClockInData
(
clockVo
,
dto
,
clockTime
);
}
else
if
(
ClockType
.
TEMPORARY_NOON_CLOCK_OUT
.
equals
(
clockType
))
{
builderNoonClockOutData
(
clockVo
,
dto
,
clockTime
);
}
else
if
(
ClockType
.
TEMPORARY_NOON_CLOCK_IN
.
equals
(
clockType
))
{
builderNoonClockInData
(
clockVo
,
dto
,
clockTime
);
}
else
if
(
ClockType
.
TEMPORARY_CLOCK_OUT
.
equals
(
clockType
))
{
builderClockOutData
(
clockVo
,
dto
,
clockTime
);
}
tempActivityCoreService
.
clockInTodayActivity
(
dto
,
clockType
);
}
/**
* 促销员[今日活动]数据保存
* 返回活动生成id
*/
@PostMapping
(
"/today/reported"
)
public
Long
todayActivityDataReported
(
@RequestBody
@Validated
TemporaryActivityDataVo
activityVo
)
{
TemporaryActivityReportedDto
temActDto
=
new
TemporaryActivityReportedDto
();
BeanUtils
.
copyProperties
(
activityVo
,
temActDto
);
temActDto
.
setId
(
activityVo
.
getActivityReportedId
());
// 有ID则修改,无ID则新建
if
(
Objects
.
nonNull
(
activityVo
.
getActivityReportedId
()))
{
tempActivityCoreService
.
activityDataReportedUpdate
(
temActDto
);
return
activityVo
.
getActivityReportedId
();
}
return
tempActivityCoreService
.
activityDataReportedSave
(
temActDto
);
}
/**
* 促销员[今日活动]数据提交审批
* 修改审批状态
*/
@PutMapping
(
"/reported/approve/submit/{id}"
)
public
void
activityReportedSubmit
(
@PathVariable
(
"id"
)
@NotNull
Long
id
)
{
tempActivityCoreService
.
activityReportedSubmit
(
id
);
}
// 上班打卡
private
void
builderClockInData
(
TemporaryClockVo
clockVo
,
TemporaryClockDto
clockDto
,
Date
dateTime
)
{
// todo if (!DateUtils.parseTime(new Date(), ClockType.TEMPORARY_CLOCK_IN_BEGIN_TIME, ClockType.TEMPORARY_CLOCK_IN_END_TIME)) {
// throw new ParamException(RCode.CLOCK_DETAIL_TIME_ERROR, null);
// }
clockDto
.
setTemporaryId
(
clockVo
.
getTemporaryId
())
.
setTemporaryName
(
clockVo
.
getTemporaryName
())
.
setStoreQcId
(
clockVo
.
getStoreQcId
())
.
setStoreName
(
clockVo
.
getStoreName
())
.
setClockInAddress
(
clockVo
.
getClockAddress
())
.
setClockInCoordinates
(
clockVo
.
getClockCoordinates
())
.
setClockInPhoto
(
clockVo
.
getClockPhoto
())
.
setClockInTime
(
dateTime
);
}
// 午休下班卡
private
void
builderNoonClockOutData
(
TemporaryClockVo
clockVo
,
TemporaryClockDto
clockDto
,
Date
dateTime
)
{
// todo if (!DateUtils.parseTime(new Date(), ClockType.TEMPORARY_NOON_CLOCK_OUT_BEGIN_TIME, ClockType.TEMPORARY_NOON_CLOCK_OUT_END_TIME)) {
// throw new ParamException(RCode.CLOCK_DETAIL_TIME_ERROR, null);
// }
clockDto
.
setId
(
clockVo
.
getId
())
.
setNoonClockOutAddress
(
clockVo
.
getClockAddress
())
.
setNoonClockOutCoordinates
(
clockVo
.
getClockCoordinates
())
.
setNoonClockOutPhoto
(
clockVo
.
getClockPhoto
())
.
setNoonClockOutTime
(
dateTime
);
}
// 午休上班卡
private
void
builderNoonClockInData
(
TemporaryClockVo
clockVo
,
TemporaryClockDto
clockDto
,
Date
dateTime
)
{
// todo if (!DateUtils.parseTime(new Date(), ClockType.TEMPORARY_NOON_CLOCK_IN_BEGIN_TIME, ClockType.TEMPORARY_NOON_CLOCK_IN_END_TIME)) {
// throw new ParamException(RCode.CLOCK_DETAIL_TIME_ERROR, null);
// }
clockDto
.
setId
(
clockVo
.
getId
())
.
setNoonClockInAddress
(
clockVo
.
getClockAddress
())
.
setNoonClockInCoordinates
(
clockVo
.
getClockCoordinates
())
.
setNoonClockInPhoto
(
clockVo
.
getClockPhoto
())
.
setNoonClockInTime
(
dateTime
);
}
// 下班卡
private
void
builderClockOutData
(
TemporaryClockVo
clockVo
,
TemporaryClockDto
clockDto
,
Date
dateTime
)
{
// todo if (!DateUtils.parseTime(new Date(), ClockType.TEMPORARY_CLOCK_OUT_BEGIN_TIME, ClockType.TEMPORARY_CLOCK_OUT_END_TIME)) {
// throw new ParamException(RCode.CLOCK_DETAIL_TIME_ERROR, null);
// }
clockDto
.
setId
(
clockVo
.
getId
())
.
setClockOutAddress
(
clockVo
.
getClockAddress
())
.
setClockOutCoordinates
(
clockVo
.
getClockCoordinates
())
.
setClockOutPhoto
(
clockVo
.
getClockPhoto
())
.
setClockOutTime
(
dateTime
);
}
}
src/main/java/com/wangxiaolu/promotion/controller/activity/temporary/TemporaryActivityQueryController.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
controller
.
activity
.
temporary
;
import
com.alibaba.fastjson.JSONObject
;
import
com.wangxiaolu.promotion.pojo.PageInfo
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto
;
import
com.wangxiaolu.promotion.service.activity.temporary.TemporaryActivityQueryService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
javax.validation.constraints.NotNull
;
import
java.util.Arrays
;
import
java.util.List
;
/**
* @author : liqiulin
* @date : 2024-04-18 13
* @describe : 促销员活动上报数据查询
*/
@Slf4j
@RestController
@RequestMapping
(
"/activity/temporary/query"
)
public
class
TemporaryActivityQueryController
{
@Autowired
TemporaryActivityQueryService
temporaryActivityQueryService
;
/**
* 根据促销员id查询所有任务
*
* @return 所有任务(分页查询)
*/
@PostMapping
(
"/all/{id}"
)
public
PageInfo
findtemporaryIdActivityDataList
(
@PathVariable
(
"id"
)
@NotNull
Integer
temporaryId
,
@RequestBody
PageInfo
pageInfo
)
{
temporaryActivityQueryService
.
findtemporaryIdActivityDataList
(
temporaryId
,
pageInfo
);
return
pageInfo
;
}
/**
* 根据促销员id查询今日任务
*/
@GetMapping
(
"/today/{id}"
)
public
TemporaryActivityReportedDto
findTemporaryTodayActivityData
(
@PathVariable
(
"id"
)
@NotNull
Integer
temporaryId
)
{
TemporaryActivityReportedDto
dto
=
temporaryActivityQueryService
.
findtemporaryIdTodayActivityData
(
temporaryId
);
return
dto
;
}
/**
* 根据任务id查询
*/
@GetMapping
(
"/{id}"
)
public
TemporaryActivityReportedDto
findTemporaryActivityById
(
@PathVariable
(
"id"
)
@NotNull
Long
activityId
)
{
TemporaryActivityReportedDto
dto
=
temporaryActivityQueryService
.
findTemporaryActivityById
(
activityId
);
return
dto
;
}
}
src/main/java/com/wangxiaolu/promotion/controller/user/PromotionLoginController.java
浏览文件 @
8a07f30e
...
...
@@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.RestController;
/**
* @author : liqiulin
* @date : 2024-03-28 17
* @describe :用户(销售)登录
* @describe :用户(销售)登录
暂未使用
*/
@RestController
...
...
src/main/java/com/wangxiaolu/promotion/controller/user/QinCeClienteleDataQueryController.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
controller
.
user
;
import
com.wangxiaolu.promotion.pojo.user.dto.QinCeClienteleStoreDto
;
import
com.wangxiaolu.promotion.pojo.user.vo.ClienteleStoreQueryVo
;
import
com.wangxiaolu.promotion.service.user.QinCeClienteleDataQueryService
;
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 : liqiulin
* @date : 2024-04-22 17
* @describe : 【勤策 - 客户数据】查询
*/
@RestController
@RequestMapping
(
"/user/clientele/query"
)
public
class
QinCeClienteleDataQueryController
{
@Autowired
QinCeClienteleDataQueryService
qinCeClienteleDataQueryService
;
/**
* 【勤策 - 客户数据 - 终端】数据查询
* 模糊查询门店名称
*/
@PostMapping
(
"/store/list"
)
public
List
<
QinCeClienteleStoreDto
>
getStoreList
(
@RequestBody
ClienteleStoreQueryVo
storeQueryVo
){
return
qinCeClienteleDataQueryService
.
getStoreList
(
storeQueryVo
);
}
}
src/main/java/com/wangxiaolu/promotion/controller/user/QinCeDataTaskController.java
浏览文件 @
8a07f30e
...
...
@@ -34,5 +34,13 @@ public class QinCeDataTaskController {
qinCeDataTaskService
.
employeeSyncTask
();
}
/**
* 同步[终端数据]
*/
@GetMapping
(
"/shops"
)
public
void
shopDetailAllTask
(){
qinCeDataTaskService
.
shopDetailAllTask
();
}
}
src/main/java/com/wangxiaolu/promotion/controller/user/UserSendSms.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
controller
.
user
;
import
com.wangxiaolu.promotion.exception.ParamException
;
import
com.wangxiaolu.promotion.result.basedata.RCode
;
import
com.wangxiaolu.promotion.service.user.TencentCoreService
;
import
com.wangxiaolu.promotion.utils.DataUtils
;
import
com.wangxiaolu.promotion.utils.TencentUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.Map
;
/**
* @author : liqiulin
* @date : 2024-05-15 15
* @describe :调用腾讯云短信
*/
@Slf4j
@RestController
@RequestMapping
(
"/user/tencent/sms"
)
public
class
UserSendSms
{
@Autowired
TencentCoreService
tencentCoreService
;
/**
* 腾讯云短信
*/
@PostMapping
(
"/send/ver_code"
)
public
void
sendSms
(
@RequestBody
Map
<
String
,
String
>
phoneInfo
)
{
String
phone
=
phoneInfo
.
get
(
"phone"
);
if
(
StringUtils
.
isEmpty
(
phone
)
||
!
DataUtils
.
phonePattern
(
phone
))
{
throw
new
ParamException
(
RCode
.
PHONE_PARAM_ERROR
,
null
);
}
tencentCoreService
.
sendSmsPhoneVerCode
(
phone
);
}
}
src/main/java/com/wangxiaolu/promotion/controller/wechat/WeChatUserCoreController.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
controller
.
wechat
;
import
com.alibaba.fastjson.JSONObject
;
import
com.wangxiaolu.promotion.common.redis.RedisKeys
;
import
com.wangxiaolu.promotion.common.redis.service.RedisCache
;
import
com.wangxiaolu.promotion.exception.ParamException
;
import
com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto
;
import
com.wangxiaolu.promotion.pojo.user.vo.WxTemporaryEnrollVo
;
import
com.wangxiaolu.promotion.result.basedata.RCode
;
import
com.wangxiaolu.promotion.service.wechat.WeChatUserCoreService
;
import
com.wangxiaolu.promotion.utils.DataUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
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
;
/**
* @author : liqiulin
* @date : 2024-04-03 17
* @describe : 微信用户信息
*/
@Slf4j
@RestController
@RequestMapping
(
"/user/wechat/core"
)
public
class
WeChatUserCoreController
{
@Autowired
WeChatUserCoreService
weChatUserCoreService
;
@Autowired
RedisCache
redisCache
;
/**
* 促销员注册信息
*/
@PostMapping
(
"/temporary/enroll"
)
public
boolean
enrollUserInfo
(
@RequestBody
@Validated
WxTemporaryEnrollVo
wxTemporaryEnrollVo
)
{
log
.
info
(
"微信-促销员注册:{}"
,
JSONObject
.
toJSONString
(
wxTemporaryEnrollVo
));
// 人员信息校验
boolean
isIden
=
DataUtils
.
idenCardPattern
(
wxTemporaryEnrollVo
.
getIdenNumber
());
boolean
isPhone
=
DataUtils
.
phonePattern
(
wxTemporaryEnrollVo
.
getPhone
());
if
(!
isIden
||
!
isPhone
)
{
throw
new
ParamException
(
RCode
.
ENROLL_PARAM_ERROR
,
null
);
}
/**
* 手机号-验证码 校验
*/
String
redisKey
=
RedisKeys
.
UserKeys
.
PHONE_VER_CODE
.
getKey
()
+
wxTemporaryEnrollVo
.
getPhone
();
String
phoneCodeOld
=
redisCache
.
get
(
redisKey
);
if
(
StringUtils
.
isBlank
(
phoneCodeOld
)
||
!
phoneCodeOld
.
equals
(
wxTemporaryEnrollVo
.
getPhoneCode
())){
throw
new
ParamException
(
RCode
.
TENCENT_SMS_PHONE_CODE_ERROR
,
null
);
}
redisCache
.
removeKey
(
redisKey
);
WxTemporaryInfoDto
temporaryDto
=
new
WxTemporaryInfoDto
();
BeanUtils
.
copyProperties
(
wxTemporaryEnrollVo
,
temporaryDto
);
return
weChatUserCoreService
.
saveWxUserInfoTemporary
(
temporaryDto
);
}
}
src/main/java/com/wangxiaolu/promotion/controller/wechat/WeChatUserQueryController.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
controller
.
wechat
;
import
com.wangxiaolu.promotion.exception.ParamException
;
import
com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto
;
import
com.wangxiaolu.promotion.pojo.user.vo.WxTemporaryLoginVo
;
import
com.wangxiaolu.promotion.result.basedata.RCode
;
import
com.wangxiaolu.promotion.service.wechat.WeChatUserQueryService
;
import
com.wangxiaolu.promotion.utils.DataUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.Objects
;
/**
* @author : liqiulin
* @date : 2024-04-09 13
* @describe :微信用户信息查询
*/
@Slf4j
@RestController
@RequestMapping
(
"/user/wechat/query"
)
public
class
WeChatUserQueryController
{
@Autowired
private
WeChatUserQueryService
weChatUserQueryService
;
/**
* 根据OpenId、Phone登录(促销员查询是否存在)
*
* @return 非null则登录成功
*/
@PostMapping
(
"/temporary/login/phone_openid"
)
public
boolean
temporaryLoginByPhoneAndOpenId
(
@RequestBody
WxTemporaryLoginVo
wxTemporaryLoginVo
)
{
phontAndOpenIdVerify
(
wxTemporaryLoginVo
);
if
(!
DataUtils
.
phonePattern
(
wxTemporaryLoginVo
.
getPhone
()))
{
throw
new
ParamException
(
RCode
.
PHONE_PARAM_ERROR
,
null
);
}
return
weChatUserQueryService
.
loginTemporaryByOpenIdAndPhone
(
wxTemporaryLoginVo
.
getOpenId
(),
wxTemporaryLoginVo
.
getPhone
());
}
/**
* 促销员信息查询
*/
@PostMapping
(
"/temporary/phone_openid"
)
public
WxTemporaryInfoDto
getTemporaryInfoByOpenIdAndPhone
(
@RequestBody
WxTemporaryLoginVo
wxTemporaryLoginVo
)
{
phontAndOpenIdVerify
(
wxTemporaryLoginVo
);
WxTemporaryInfoDto
temporaryInfoDto
=
weChatUserQueryService
.
getTemporaryInfoByOpenIdAndPhone
(
wxTemporaryLoginVo
.
getOpenId
(),
wxTemporaryLoginVo
.
getPhone
());
if
(
Objects
.
isNull
(
temporaryInfoDto
))
{
throw
new
ParamException
(
RCode
.
LOGIN_PARAM_ERROR
,
null
);
}
return
temporaryInfoDto
;
}
private
void
phontAndOpenIdVerify
(
WxTemporaryLoginVo
wxTemporaryLoginVo
)
{
if
(
StringUtils
.
isBlank
(
wxTemporaryLoginVo
.
getOpenId
())
||
StringUtils
.
isBlank
(
wxTemporaryLoginVo
.
getPhone
()))
{
throw
new
ParamException
(
RCode
.
LOGIN_PARAM_ERROR
,
null
);
}
}
}
src/main/java/com/wangxiaolu/promotion/domain/activity/dao/TemporaryActivityClockDao.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
dao
;
import
com.wangxiaolu.promotion.domain.activity.wrapperQo.TemporaryClockWrapper
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto
;
/**
* @author : liqiulin
* @date : 2024-04-23 17
* @describe :
*/
public
interface
TemporaryActivityClockDao
{
/**
* 保存打卡信息
* @param dto 信息
*/
void
save
(
TemporaryClockDto
dto
);
/**
* 修改打卡信息
* @param dto 信息
*/
void
updateById
(
TemporaryClockDto
dto
);
/**
* @param tcw 查询条件
* @return 上述条件只能满足一条记录
*/
TemporaryClockDto
selectOne
(
TemporaryClockWrapper
tcw
);
}
src/main/java/com/wangxiaolu/promotion/domain/activity/dao/TemporaryActivityLogDao.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
dao
;
import
com.wangxiaolu.promotion.enums.activity.LogType
;
/**
* @author : liqiulin
* @date : 2024-05-15 13
* @describe :
*/
public
interface
TemporaryActivityLogDao
{
void
save
(
Integer
temporaryId
,
String
temporaryName
,
LogType
typeE
,
Long
flowDataId
,
Object
logObj
);
}
src/main/java/com/wangxiaolu/promotion/domain/activity/dao/TemporaryActivityPhotoDao.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
dao
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author : liqiulin
* @date : 2024-05-09 11
* @describe :
*/
public
interface
TemporaryActivityPhotoDao
{
/**
* 保存活动上报照片list
*/
void
saveReportedList
(
Integer
temporaryId
,
Long
reportedId
,
Integer
photoType
,
List
<
String
>
urls
,
List
<
String
>
changeUrls
);
/**
* 保存促销员上下班打卡图片
*/
void
saveClockPhoto
(
Integer
temporaryId
,
Long
clockId
,
Integer
photoType
,
String
url
);
/**
* 根据促销员id-活动上报id查询图片
*/
Map
<
Integer
,
List
<
String
>>
findReportedGroup
(
Integer
temporaryId
,
Long
reportedId
);
Map
<
Integer
,
String
>
findClockPhotoGroupByClockId
(
Long
clockId
);
}
src/main/java/com/wangxiaolu/promotion/domain/activity/dao/TemporaryActivityReportedDao.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
dao
;
import
com.wangxiaolu.promotion.pojo.PageInfo
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto
;
import
java.util.List
;
/**
* @author : liqiulin
* @date : 2024-04-18 10
* @describe :
*/
public
interface
TemporaryActivityReportedDao
{
/**
* 新增并返回id
*/
long
activityDataSave
(
TemporaryActivityReportedDto
temActDto
);
/**
* 分页查询促销员任务列表
*/
void
findListByTemporaryId
(
Integer
temporaryId
,
PageInfo
pageInfo
);
/**
* 查询当日任务
*/
TemporaryActivityReportedDto
findOneByCurrentDate
(
Integer
temporaryId
);
/**
* 根据ID查询
*/
TemporaryActivityReportedDto
findOneById
(
Long
id
);
/**
* 根据ID修改
*/
void
updateById
(
TemporaryActivityReportedDto
temActDto
);
}
src/main/java/com/wangxiaolu/promotion/domain/activity/dao/impl/TemporaryActivityClockDaoImpl.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
dao
.
impl
;
import
cn.hutool.core.date.DateUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityClockDao
;
import
com.wangxiaolu.promotion.domain.activity.mapper.TemporaryActivityClockMapper
;
import
com.wangxiaolu.promotion.domain.activity.mapper.entity.TemporaryActivityClockDO
;
import
com.wangxiaolu.promotion.domain.activity.wrapperQo.TemporaryClockWrapper
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.Objects
;
/**
* @author : liqiulin
* @date : 2024-04-23 17
* @describe :
*/
@Service
@Slf4j
public
class
TemporaryActivityClockDaoImpl
implements
TemporaryActivityClockDao
{
@Autowired
TemporaryActivityClockMapper
temporaryActivityClockMapper
;
@Override
public
void
save
(
TemporaryClockDto
dto
)
{
// 避免重复打卡
TemporaryClockWrapper
tcw
=
new
TemporaryClockWrapper
()
.
setTemporaryId
(
dto
.
getTemporaryId
())
.
setCreateDate
(
DateUtil
.
today
());
LambdaQueryWrapper
<
TemporaryActivityClockDO
>
qw
=
buildWrapper
(
tcw
);
Integer
count
=
temporaryActivityClockMapper
.
selectCount
(
qw
);
if
(
count
>
0
)
{
return
;
}
TemporaryActivityClockDO
clockDo
=
new
TemporaryActivityClockDO
();
BeanUtils
.
copyProperties
(
dto
,
clockDo
);
clockDo
.
setCreateDate
(
DateUtil
.
today
());
temporaryActivityClockMapper
.
insert
(
clockDo
);
dto
.
setId
(
clockDo
.
getId
());
}
@Override
public
void
updateById
(
TemporaryClockDto
dto
)
{
TemporaryActivityClockDO
clockDo
=
new
TemporaryActivityClockDO
();
BeanUtils
.
copyProperties
(
dto
,
clockDo
);
temporaryActivityClockMapper
.
updateById
(
clockDo
);
}
/**
* @param tcw 查询条件
* @return 上述条件只能满足一条记录
*/
@Override
public
TemporaryClockDto
selectOne
(
TemporaryClockWrapper
tcw
)
{
LambdaQueryWrapper
<
TemporaryActivityClockDO
>
qw
=
buildWrapper
(
tcw
);
TemporaryActivityClockDO
clockDO
=
temporaryActivityClockMapper
.
selectOne
(
qw
);
return
transitionDto
(
clockDO
);
}
private
LambdaQueryWrapper
<
TemporaryActivityClockDO
>
buildWrapper
(
TemporaryClockWrapper
tcw
)
{
LambdaQueryWrapper
<
TemporaryActivityClockDO
>
qw
=
new
LambdaQueryWrapper
<>();
if
(
Objects
.
nonNull
(
tcw
.
getId
()))
{
qw
.
eq
(
TemporaryActivityClockDO:
:
getId
,
tcw
.
getId
());
return
qw
;
}
if
(
Objects
.
nonNull
(
tcw
.
getTemporaryId
()))
{
qw
.
eq
(
TemporaryActivityClockDO:
:
getTemporaryId
,
tcw
.
getTemporaryId
());
}
if
(
StringUtils
.
isNotBlank
(
tcw
.
getCreateDate
()))
{
qw
.
eq
(
TemporaryActivityClockDO:
:
getCreateDate
,
tcw
.
getCreateDate
());
}
return
qw
;
}
private
TemporaryClockDto
transitionDto
(
TemporaryActivityClockDO
clockDO
)
{
TemporaryClockDto
dto
=
null
;
if
(
Objects
.
isNull
(
clockDO
))
{
return
dto
;
}
dto
=
new
TemporaryClockDto
();
BeanUtils
.
copyProperties
(
clockDO
,
dto
);
return
dto
;
}
}
src/main/java/com/wangxiaolu/promotion/domain/activity/dao/impl/TemporaryActivityLogDaoImpl.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
dao
.
impl
;
import
com.alibaba.fastjson.JSONObject
;
import
com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityLogDao
;
import
com.wangxiaolu.promotion.domain.activity.mapper.TemporaryActivityLogMapper
;
import
com.wangxiaolu.promotion.domain.activity.mapper.entity.TemporaryActivityLogDO
;
import
com.wangxiaolu.promotion.enums.activity.LogType
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* @author : liqiulin
* @date : 2024-05-15 13
* @describe :
*/
@Service
public
class
TemporaryActivityLogDaoImpl
implements
TemporaryActivityLogDao
{
@Autowired
TemporaryActivityLogMapper
temporaryActivityLogMapper
;
@Override
public
void
save
(
Integer
temporaryId
,
String
temporaryName
,
LogType
typeE
,
Long
flowDataId
,
Object
logObj
)
{
TemporaryActivityLogDO
tDo
=
new
TemporaryActivityLogDO
(
temporaryId
,
temporaryName
,
typeE
,
flowDataId
,
JSONObject
.
toJSONString
(
logObj
));
temporaryActivityLogMapper
.
insert
(
tDo
);
}
}
src/main/java/com/wangxiaolu/promotion/domain/activity/dao/impl/TemporaryActivityPhotoDaoImpl.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
dao
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityPhotoDao
;
import
com.wangxiaolu.promotion.domain.activity.mapper.TemporaryActivityPhotoMapper
;
import
com.wangxiaolu.promotion.domain.activity.mapper.entity.TemporaryActivityPhotoDO
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* @author : liqiulin
* @date : 2024-05-09 11
* @describe :
*/
@Slf4j
@Service
public
class
TemporaryActivityPhotoDaoImpl
implements
TemporaryActivityPhotoDao
{
@Autowired
TemporaryActivityPhotoMapper
temporaryActivityPhotoMapper
;
@Override
public
void
saveReportedList
(
Integer
temporaryId
,
Long
reportedId
,
Integer
photoType
,
List
<
String
>
urls
,
List
<
String
>
changeUrls
)
{
if
(
CollectionUtils
.
isEmpty
(
changeUrls
))
{
log
.
info
(
"活动id[{}]图片无改变值"
,
reportedId
);
return
;
}
Map
<
String
,
String
>
urlTypeMap
=
new
HashMap
<>();
for
(
String
changeUrl
:
changeUrls
)
{
String
[]
uArr
=
changeUrl
.
split
(
"/"
);
String
type
=
uArr
[
0
];
String
uId
=
uArr
[
uArr
.
length
-
1
];
urlTypeMap
.
put
(
uId
,
type
);
}
log
.
info
(
"活动id[{}]图片修改后的list为:{}"
,
reportedId
,
urlTypeMap
);
for
(
String
photoUrl
:
urls
)
{
String
[]
photoArr
=
photoUrl
.
split
(
"/"
);
String
photoFiledId
=
photoArr
[
photoArr
.
length
-
1
];
String
type
=
urlTypeMap
.
get
(
photoFiledId
);
log
.
info
(
"图片文件id[{}]类型为{}"
,
photoFiledId
,
type
);
// 现存图片列表中不存在,删除
if
(
StringUtils
.
isBlank
(
type
))
{
temporaryActivityPhotoMapper
.
updateIsDelete
(
reportedId
,
photoFiledId
);
}
else
if
(
"cloud:"
.
equals
(
type
))
{
// 新增数据
TemporaryActivityPhotoDO
photoDo
=
new
TemporaryActivityPhotoDO
();
photoDo
.
setTemporaryId
(
temporaryId
).
setReportedId
(
reportedId
).
setType
(
photoType
).
setPhotoUrl
(
photoUrl
).
setPhotoFiledId
(
photoFiledId
);
temporaryActivityPhotoMapper
.
insert
(
photoDo
);
}
}
}
/**
* 保存促销员上下班打卡图片
*/
@Override
public
void
saveClockPhoto
(
Integer
temporaryId
,
Long
clockId
,
Integer
photoType
,
String
url
)
{
String
[]
photoArr
=
url
.
split
(
"/"
);
String
photoFiledId
=
photoArr
[
photoArr
.
length
-
1
];
TemporaryActivityPhotoDO
photoDo
=
new
TemporaryActivityPhotoDO
();
photoDo
.
setTemporaryId
(
temporaryId
).
setClockId
(
clockId
).
setType
(
photoType
).
setPhotoUrl
(
url
).
setPhotoFiledId
(
photoFiledId
);
temporaryActivityPhotoMapper
.
insert
(
photoDo
);
log
.
info
(
"保存促销员打卡图片:{}"
,
photoDo
);
}
/**
* 活动上报图片查询
*
* @param temporaryId 促销员id
* @param reportedId 活动id
*/
@Override
public
Map
<
Integer
,
List
<
String
>>
findReportedGroup
(
Integer
temporaryId
,
Long
reportedId
)
{
LambdaQueryWrapper
<
TemporaryActivityPhotoDO
>
wq
=
new
LambdaQueryWrapper
<>();
wq
.
eq
(
TemporaryActivityPhotoDO:
:
getReportedId
,
reportedId
).
eq
(
TemporaryActivityPhotoDO:
:
getIsDelete
,
1
);
List
<
TemporaryActivityPhotoDO
>
dos
=
temporaryActivityPhotoMapper
.
selectList
(
wq
);
if
(
CollectionUtils
.
isEmpty
(
dos
))
{
return
null
;
}
Map
<
Integer
,
List
<
String
>>
groupPhoto
=
dos
.
stream
().
collect
(
Collectors
.
groupingBy
(
TemporaryActivityPhotoDO:
:
getType
,
Collectors
.
mapping
(
TemporaryActivityPhotoDO:
:
getPhotoUrl
,
Collectors
.
toList
())));
return
groupPhoto
;
}
/**
* 根据打卡ID查询图片,根据业务类型进行分组
*
* @param clockId 打卡ID
* @return 分组结果
*/
@Override
public
Map
<
Integer
,
String
>
findClockPhotoGroupByClockId
(
Long
clockId
)
{
LambdaQueryWrapper
<
TemporaryActivityPhotoDO
>
wq
=
new
LambdaQueryWrapper
<>();
wq
.
eq
(
TemporaryActivityPhotoDO:
:
getClockId
,
clockId
).
eq
(
TemporaryActivityPhotoDO:
:
getIsDelete
,
1
);
List
<
TemporaryActivityPhotoDO
>
dos
=
temporaryActivityPhotoMapper
.
selectList
(
wq
);
Map
<
Integer
,
String
>
map
=
dos
.
stream
().
collect
(
Collectors
.
toMap
(
TemporaryActivityPhotoDO:
:
getType
,
TemporaryActivityPhotoDO:
:
getPhotoUrl
));
return
map
;
}
}
src/main/java/com/wangxiaolu/promotion/domain/activity/dao/impl/TemporaryActivityReportedDaoImpl.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
dao
.
impl
;
import
cn.hutool.core.date.DateUtil
;
import
com.alibaba.druid.util.StringUtils
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityReportedDao
;
import
com.wangxiaolu.promotion.domain.activity.mapper.TemporaryActivityReportedMapper
;
import
com.wangxiaolu.promotion.domain.activity.mapper.entity.TemporaryActivityReportedDO
;
import
com.wangxiaolu.promotion.domain.activity.wrapperQo.TemporaryActivityWrapper
;
import
com.wangxiaolu.promotion.enums.activity.TemActApproveStatus
;
import
com.wangxiaolu.promotion.pojo.PageInfo
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Objects
;
/**
* @author : liqiulin
* @date : 2024-04-18 10
* @describe :
*/
@Service
@Slf4j
public
class
TemporaryActivityReportedDaoImpl
implements
TemporaryActivityReportedDao
{
@Autowired
TemporaryActivityReportedMapper
temporaryActivityReportedMapper
;
/**
* 保存促销员任务
*/
@Override
public
long
activityDataSave
(
TemporaryActivityReportedDto
temActDto
)
{
TemporaryActivityReportedDO
tDo
=
new
TemporaryActivityReportedDO
();
BeanUtils
.
copyProperties
(
temActDto
,
tDo
);
tDo
.
setApproveStatus
(
temActDto
.
getApproveStatus
().
name
());
tDo
.
setCreateDate
(
DateUtil
.
today
());
temporaryActivityReportedMapper
.
insert
(
tDo
);
log
.
info
(
"促销员今日活动上报数据完成,生成id[{}],数据信息:{}"
,
tDo
.
getId
(),
tDo
);
return
tDo
.
getId
();
}
/**
* 根据促销员id查询所有任务
*/
@Override
public
void
findListByTemporaryId
(
Integer
temporaryId
,
PageInfo
pageInfo
)
{
TemporaryActivityWrapper
taw
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
pageInfo
.
getQueryParams
()),
TemporaryActivityWrapper
.
class
);
taw
=
Objects
.
isNull
(
taw
)
?
new
TemporaryActivityWrapper
()
:
taw
;
taw
.
setTemporaryId
(
temporaryId
);
LambdaQueryWrapper
<
TemporaryActivityReportedDO
>
temQw
=
buildQueryList
(
taw
);
Page
<
TemporaryActivityReportedDO
>
page
=
new
Page
<>(
pageInfo
.
getPageNum
(),
pageInfo
.
getPageSize
());
Page
<
TemporaryActivityReportedDO
>
temDoPage
=
temporaryActivityReportedMapper
.
selectPage
(
page
,
temQw
);
pageInfo
.
pageCovert
(
temDoPage
);
pageInfo
.
setRecords
(
transitionDtos
(
temDoPage
.
getRecords
()));
}
/**
* 根据促销员id查询今日任务
*/
@Override
public
TemporaryActivityReportedDto
findOneByCurrentDate
(
Integer
temporaryId
)
{
TemporaryActivityWrapper
taw
=
new
TemporaryActivityWrapper
()
.
setTemporaryId
(
temporaryId
)
.
setCreateDate
(
DateUtil
.
today
());
LambdaQueryWrapper
<
TemporaryActivityReportedDO
>
temQw
=
buildQueryList
(
taw
);
TemporaryActivityReportedDO
temDO
=
temporaryActivityReportedMapper
.
selectOne
(
temQw
);
return
transitionDto
(
temDO
);
}
@Override
public
TemporaryActivityReportedDto
findOneById
(
Long
id
)
{
TemporaryActivityReportedDO
temDO
=
temporaryActivityReportedMapper
.
selectById
(
id
);
return
transitionDto
(
temDO
);
}
@Override
public
void
updateById
(
TemporaryActivityReportedDto
temActDto
)
{
TemporaryActivityReportedDO
rDo
=
new
TemporaryActivityReportedDO
();
BeanUtils
.
copyProperties
(
temActDto
,
rDo
);
if
(
Objects
.
nonNull
(
temActDto
.
getApproveStatus
())){
rDo
.
setApproveStatus
(
temActDto
.
getApproveStatus
().
name
());
}
rDo
.
setModifyTime
(
new
Date
());
temporaryActivityReportedMapper
.
updateById
(
rDo
);
}
private
LambdaQueryWrapper
<
TemporaryActivityReportedDO
>
buildQueryList
(
TemporaryActivityWrapper
tw
)
{
LambdaQueryWrapper
<
TemporaryActivityReportedDO
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
if
(
Objects
.
nonNull
(
tw
.
getTemporaryId
()))
{
queryWrapper
.
eq
(
TemporaryActivityReportedDO:
:
getTemporaryId
,
tw
.
getTemporaryId
());
}
if
(!
StringUtils
.
isEmpty
(
tw
.
getCreateDate
()))
{
queryWrapper
.
eq
(
TemporaryActivityReportedDO:
:
getCreateDate
,
tw
.
getCreateDate
());
}
if
(!
StringUtils
.
isEmpty
(
tw
.
getApproveStatus
())){
queryWrapper
.
eq
(
TemporaryActivityReportedDO:
:
getApproveStatus
,
tw
.
getApproveStatus
());
}
// 默认创建日期倒序排列
queryWrapper
.
orderByDesc
(
TemporaryActivityReportedDO:
:
getCreateDate
);
return
queryWrapper
;
}
/**
* DO to DTO (单个对象)
*
* @param temDos DO对象List
* @return DTO对象
*/
private
List
<
TemporaryActivityReportedDto
>
transitionDtos
(
List
<
TemporaryActivityReportedDO
>
temDos
)
{
if
(
CollectionUtils
.
isEmpty
(
temDos
))
{
return
new
ArrayList
<>();
}
List
<
TemporaryActivityReportedDto
>
dtos
=
new
ArrayList
<>(
temDos
.
size
()
*
2
);
for
(
TemporaryActivityReportedDO
temDo
:
temDos
)
{
dtos
.
add
(
transitionDto
(
temDo
));
}
return
dtos
;
}
/**
* DO to DTO (单个对象)
*
* @param temDo DO对象
* @return DTO对象
*/
private
TemporaryActivityReportedDto
transitionDto
(
TemporaryActivityReportedDO
temDo
)
{
TemporaryActivityReportedDto
temporaryDto
=
null
;
if
(
Objects
.
isNull
(
temDo
))
{
return
temporaryDto
;
}
temporaryDto
=
new
TemporaryActivityReportedDto
();
BeanUtils
.
copyProperties
(
temDo
,
temporaryDto
);
// 审批状态回显
if
(
Objects
.
nonNull
(
temDo
.
getApproveStatus
()))
{
temporaryDto
.
setApproveStatus
(
TemActApproveStatus
.
valueOf
(
temDo
.
getApproveStatus
()));
temporaryDto
.
setApproveStatusMsg
(
temporaryDto
.
getApproveStatus
().
getMsg
());
}
return
temporaryDto
;
}
}
src/main/java/com/wangxiaolu/promotion/domain/activity/mapper/TemporaryActivityClockMapper.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
mapper
;
import
com.wangxiaolu.promotion.domain.activity.mapper.entity.TemporaryActivityClockDO
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.springframework.stereotype.Repository
;
/**
* @author a02200059
* @description 针对表【temporary_activity_clock】的数据库操作Mapper
* @createDate 2024-04-23 17:10:46
* @Entity com.wangxiaolu.promotion.domain.activity.mapper.entity.TemporaryActivityClockDO
*/
@Mapper
@Repository
public
interface
TemporaryActivityClockMapper
extends
BaseMapper
<
TemporaryActivityClockDO
>
{
}
src/main/java/com/wangxiaolu/promotion/domain/activity/mapper/TemporaryActivityLogMapper.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
mapper
;
import
com.wangxiaolu.promotion.domain.activity.mapper.entity.TemporaryActivityLogDO
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.springframework.stereotype.Repository
;
/**
* @author a02200059
* @description 针对表【temporary_activity_log】的数据库操作Mapper
* @createDate 2024-05-15 13:24:13
* @Entity com.wangxiaolu.promotion.domain.activity.mapper.entity.TemporaryActivityLogDO
*/
@Mapper
@Repository
public
interface
TemporaryActivityLogMapper
extends
BaseMapper
<
TemporaryActivityLogDO
>
{
}
src/main/java/com/wangxiaolu/promotion/domain/activity/mapper/TemporaryActivityPhotoMapper.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.wangxiaolu.promotion.domain.activity.mapper.entity.TemporaryActivityPhotoDO
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.springframework.stereotype.Repository
;
/**
* @author a02200059
* @description 针对表【temporary_activity_photo】的数据库操作Mapper
* @createDate 2024-05-09 11:22:33
* @Entity com.wangxiaolu.promotion.domain.activity.mapper.entity.TemporaryActivityPhoto
*/
@Mapper
@Repository
public
interface
TemporaryActivityPhotoMapper
extends
BaseMapper
<
TemporaryActivityPhotoDO
>
{
void
updateIsDelete
(
Long
reportedId
,
String
photoFiledId
);
}
src/main/java/com/wangxiaolu/promotion/domain/activity/mapper/TemporaryActivityReportedMapper.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.wangxiaolu.promotion.domain.activity.mapper.entity.TemporaryActivityReportedDO
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.springframework.stereotype.Repository
;
/**
* @author a02200059
* @description 针对表【temporary_activity_reported】的数据库操作Mapper
* @createDate 2024-04-18 10:38:42
* @Entity generator.domain.TemporaryActivityReported
*/
@Mapper
@Repository
public
interface
TemporaryActivityReportedMapper
extends
BaseMapper
<
TemporaryActivityReportedDO
>
{
}
src/main/java/com/wangxiaolu/promotion/domain/activity/mapper/entity/TemporaryActivityClockDO.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
mapper
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
java.io.Serializable
;
import
java.util.Date
;
import
lombok.Data
;
/**
*
* @TableName temporary_activity_clock
*/
@TableName
(
value
=
"temporary_activity_clock"
)
@Data
public
class
TemporaryActivityClockDO
implements
Serializable
{
/**
* 主键id
*/
@TableId
(
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* temporary_info表id
*/
private
Integer
temporaryId
;
/**
* temporary_info表name
*/
private
String
temporaryName
;
/**
* qince_clientele_store表qc_id
*/
private
String
storeQcId
;
/**
* qince_clientele_store表store_name
*/
private
String
storeName
;
/**
* 上班打卡地址
*/
private
String
clockInAddress
;
/**
* 上班打卡经纬度
*/
private
String
clockInCoordinates
;
/**
* 上班打卡时间
*/
private
Date
clockInTime
;
/**
* 午休下班打卡地址
*/
private
String
noonClockOutAddress
;
/**
* 午休下班打卡经纬度
*/
private
String
noonClockOutCoordinates
;
/**
* 午休下班打卡时间
*/
private
Date
noonClockOutTime
;
/**
* 午休上班打卡地址
*/
private
String
noonClockInAddress
;
/**
* 午休上班打卡经纬度
*/
private
String
noonClockInCoordinates
;
/**
* 午休上班打卡时间
*/
private
Date
noonClockInTime
;
/**
* 下班打卡地址
*/
private
String
clockOutAddress
;
/**
* 下班打卡经纬度
*/
private
String
clockOutCoordinates
;
/**
* 下班打卡时间
*/
private
Date
clockOutTime
;
/**
* 创建日期YYYY-MM-DD
*/
private
String
createDate
;
/**
* 创建时间
*/
private
Date
createTime
;
/**
* 修改时间
*/
private
Date
modifyTime
;
@TableField
(
exist
=
false
)
private
static
final
long
serialVersionUID
=
1L
;
}
\ No newline at end of file
src/main/java/com/wangxiaolu/promotion/domain/activity/mapper/entity/TemporaryActivityLogDO.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
mapper
.
entity
;
import
cn.hutool.json.JSON
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
java.io.Serializable
;
import
java.util.Date
;
import
com.wangxiaolu.promotion.enums.activity.LogType
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @TableName temporary_activity_log
* 【促销员活动类】信息日志
*/
@TableName
(
value
=
"temporary_activity_log"
)
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
TemporaryActivityLogDO
implements
Serializable
{
/**
*
*/
@TableId
(
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* temporary_info表id
*/
private
Integer
temporaryId
;
/**
* 促销员姓名
*/
private
String
temporaryName
;
/**
* 日志所在业务类型
*/
private
Integer
type
;
/**
* 日志所在业务名称
*/
private
String
typeName
;
/**
* 当前日志所属业务数据的id
*/
private
Long
flowDataId
;
/**
* 日志内容
*/
private
Object
dataDetail
;
/**
* 创建时间
*/
private
Date
createTime
;
@TableField
(
exist
=
false
)
private
static
final
long
serialVersionUID
=
1L
;
public
TemporaryActivityLogDO
(
Integer
temporaryId
,
String
temporaryName
,
LogType
typeE
,
Long
flowDataId
,
Object
dataDetail
)
{
this
.
temporaryId
=
temporaryId
;
this
.
type
=
typeE
.
getType
();
this
.
typeName
=
typeE
.
getName
();
this
.
dataDetail
=
dataDetail
;
this
.
temporaryName
=
temporaryName
;
this
.
flowDataId
=
flowDataId
;
}
}
\ No newline at end of file
src/main/java/com/wangxiaolu/promotion/domain/activity/mapper/entity/TemporaryActivityPhotoDO.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
mapper
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
java.io.Serializable
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
/**
*
* @TableName temporary_activity_photo
*/
@TableName
(
value
=
"temporary_activity_photo"
)
@Data
@Accessors
(
chain
=
true
)
public
class
TemporaryActivityPhotoDO
implements
Serializable
{
/**
* 主键id
*/
@TableId
(
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* temporary_info表id
*/
private
Integer
temporaryId
;
/**
* 活动上报ID,关联表temporary_activity_reported表主键id
*/
private
Long
reportedId
;
/**
* 促销员上班打卡记录ID,关联temporary_activity_clock表主键ID
*/
private
Long
clockId
;
/**
* 图片所属类别:1:推广试吃;2……
*/
private
Integer
type
;
/**
* 图片http地址
*/
private
String
photoUrl
;
/**
* 图片Id
*/
private
String
photoFiledId
;
/**
* 是否删除
* 0:删除;1:可用
*/
private
Integer
isDelete
;
@TableField
(
exist
=
false
)
private
static
final
long
serialVersionUID
=
1L
;
}
\ No newline at end of file
src/main/java/com/wangxiaolu/promotion/domain/activity/mapper/entity/TemporaryActivityReportedDO.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
mapper
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
*
* @TableName temporary_activity_reported
*/
@TableName
(
value
=
"temporary_activity_reported"
)
@Data
public
class
TemporaryActivityReportedDO
implements
Serializable
{
/**
* 主键id
*/
@TableId
(
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* 关联—temporary_info表id
*/
private
Integer
temporaryId
;
/**
* 关联—temporary_info表name
*/
private
String
temporaryName
;
/**
* 关联—活动店铺id
*/
private
String
storeQcId
;
/**
* 关联—活动店铺名称(例:小美超市)
*/
private
String
storeName
;
/**
* 关联—活动店铺地址(例:北京朝阳北路31号1层)
*/
private
String
storeAddr
;
/**
* 关联—审核人员id
*/
private
Long
approverId
;
/**
* 关联—审核人员姓名
*/
private
String
approveName
;
/**
* 审批状态(审批中、审批通过、退回……)
* 关联enum类 TemActApproveStatus
*/
private
String
approveStatus
;
/**
* 最后一次审批时间
*/
private
Date
approveTime
;
private
Integer
sellXiangA
;
private
Integer
sellXiangB
;
private
Integer
sellXiangC
;
private
Integer
sellXiangD
;
private
Integer
sellDaiA
;
private
Integer
sellDaiB
;
private
Integer
sellDaiC
;
private
Integer
sellDaiD
;
/**
* 创建时间
*/
private
Date
createTime
;
/**
* 创建日期
*/
private
String
createDate
;
/**
* 修改时间
*/
private
Date
modifyTime
;
@TableField
(
exist
=
false
)
private
static
final
long
serialVersionUID
=
1L
;
}
\ No newline at end of file
src/main/java/com/wangxiaolu/promotion/domain/activity/wrapperQo/TemporaryActivityWrapper.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
wrapperQo
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.experimental.Accessors
;
/**
* @author : liqiulin
* @date : 2024-04-09 18
* @describe :
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors
(
chain
=
true
)
public
class
TemporaryActivityWrapper
{
/**
* temporaryId
*/
private
Integer
temporaryId
;
/**
* 创建时间YYYY-MM-DD
*/
private
String
createDate
;
/**
* 审批状态(审批中、审批通过、退回……)
* 关联enum类 TemActApproveStatus
*/
private
String
approveStatus
;
}
src/main/java/com/wangxiaolu/promotion/domain/activity/wrapperQo/TemporaryClockWrapper.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
activity
.
wrapperQo
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.experimental.Accessors
;
/**
* @author : liqiulin
* @date : 2024-04-23 19
* @describe :
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors
(
chain
=
true
)
public
class
TemporaryClockWrapper
{
/**
* 主键id
*/
private
Long
id
;
/**
* temporary_info表id
*/
private
Integer
temporaryId
;
/**
* 创建日期YYYY-MM-DD
*/
private
String
createDate
;
}
src/main/java/com/wangxiaolu/promotion/domain/user/dao/QinCeClienteleStoreDao.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
user
.
dao
;
import
com.alibaba.fastjson.JSONArray
;
import
com.wangxiaolu.promotion.domain.user.wrapperQo.StoreWrapper
;
import
com.wangxiaolu.promotion.pojo.user.dto.QinCeClienteleStoreDto
;
import
java.util.List
;
/**
* @author : liqiulin
* @date : 2024-04-22 16
* @describe :
*/
public
interface
QinCeClienteleStoreDao
{
/**
* 勤策人员数据同步
*/
void
shopDetailAllTask
(
JSONArray
responseDatas
);
List
<
QinCeClienteleStoreDto
>
getStoreList
(
StoreWrapper
storeWrapper
);
QinCeClienteleStoreDto
getOneStore
(
StoreWrapper
storeWrapper
);
}
src/main/java/com/wangxiaolu/promotion/domain/user/dao/QinCeEmployeeDao.java
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
user
.
dao
;
import
com.alibaba.fastjson.JSONArray
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.QinCeEmployeeDto
;
/**
* @author : liqiulin
...
...
@@ -10,7 +11,12 @@ import com.alibaba.fastjson.JSONArray;
public
interface
QinCeEmployeeDao
{
/**
* 勤
微
人员数据同步
* 勤
策
人员数据同步
*/
void
employeeSyncTask
(
JSONArray
responseDatas
);
/**
* 根据勤策ID查询人员信息
*/
QinCeEmployeeDto
selectOntByQcId
(
String
qcId
);
}
src/main/java/com/wangxiaolu/promotion/domain/user/dao/TemporaryInfoDao.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
user
.
dao
;
import
com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto
;
/**
* @author : liqiulin
* @date : 2024-04-08 16
* @describe :促销员-信息
*/
public
interface
TemporaryInfoDao
{
/**
* 微信-小程序注册的促销员信息
*/
int
saveWxTemporaryInfo
(
WxTemporaryInfoDto
temporaryDto
);
/**
* 根据OpenId查询人员是否存在(非保密信息)
*/
WxTemporaryInfoDto
getUnimportantData
(
String
openId
);
/**
* 根据OpenId、phone查询人员是否存在(非保密信息)
*/
WxTemporaryInfoDto
getUnimportantData
(
String
openId
,
String
phone
);
WxTemporaryInfoDto
selectOneById
(
Integer
id
);
}
src/main/java/com/wangxiaolu/promotion/domain/user/dao/impl/QinCeClienteleStoreDaoImpl.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
user
.
dao
.
impl
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.wangxiaolu.promotion.domain.user.dao.QinCeClienteleStoreDao
;
import
com.wangxiaolu.promotion.domain.user.mapper.QinCeClienteleStoreMapper
;
import
com.wangxiaolu.promotion.domain.user.mapper.entity.QinCeClienteleStoreDO
;
import
com.wangxiaolu.promotion.domain.user.wrapperQo.StoreWrapper
;
import
com.wangxiaolu.promotion.pojo.user.dto.QinCeClienteleStoreDto
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Objects
;
/**
* @author : liqiulin
* @date : 2024-04-22 16
* @describe :
*/
@Slf4j
@Service
public
class
QinCeClienteleStoreDaoImpl
implements
QinCeClienteleStoreDao
{
@Autowired
QinCeClienteleStoreMapper
qinCeClienteleStoreMapper
;
/**
* 拉取信息
* @param responseDatas 信息json格式数据
*/
@Override
public
void
shopDetailAllTask
(
JSONArray
responseDatas
)
{
LambdaQueryWrapper
<
QinCeClienteleStoreDO
>
qw
=
new
LambdaQueryWrapper
<>();
for
(
Object
responseData
:
responseDatas
)
{
qw
.
clear
();
QinCeClienteleStoreDO
qinCeShopDO
=
JSONObject
.
parseObject
(
responseData
.
toString
(),
QinCeClienteleStoreDO
.
class
);
qw
.
eq
(
QinCeClienteleStoreDO:
:
getQcId
,
qinCeShopDO
.
getQcId
());
QinCeClienteleStoreDO
doExist
=
qinCeClienteleStoreMapper
.
selectOne
(
qw
);
if
(
Objects
.
isNull
(
doExist
))
{
qinCeClienteleStoreMapper
.
insert
(
qinCeShopDO
);
}
else
{
qinCeShopDO
.
setId
(
doExist
.
getId
());
qinCeClienteleStoreMapper
.
updateById
(
qinCeShopDO
);
}
}
}
/**
* 查询门店列表
* @param storeWrapper 查询条件
*/
@Override
public
List
<
QinCeClienteleStoreDto
>
getStoreList
(
StoreWrapper
storeWrapper
)
{
LambdaQueryWrapper
<
QinCeClienteleStoreDO
>
qw
=
builderQueryWrapper
(
storeWrapper
);
// 指定字段查询
qw
.
select
(
QinCeClienteleStoreDO:
:
getQcId
,
QinCeClienteleStoreDO:
:
getStoreName
,
QinCeClienteleStoreDO:
:
getStoreAddr
);
List
<
QinCeClienteleStoreDO
>
qinCeClienteleStoreDOS
=
qinCeClienteleStoreMapper
.
selectList
(
qw
);
List
<
QinCeClienteleStoreDto
>
storeDtos
=
transitionDtos
(
qinCeClienteleStoreDOS
);
return
storeDtos
;
}
@Override
public
QinCeClienteleStoreDto
getOneStore
(
StoreWrapper
storeWrapper
)
{
LambdaQueryWrapper
<
QinCeClienteleStoreDO
>
qw
=
builderQueryWrapper
(
storeWrapper
);
// 指定字段查询
qw
.
select
(
QinCeClienteleStoreDO:
:
getQcId
,
QinCeClienteleStoreDO:
:
getStoreName
,
QinCeClienteleStoreDO:
:
getStoreAddr
);
QinCeClienteleStoreDO
qinCeClienteleStoreDO
=
qinCeClienteleStoreMapper
.
selectOne
(
qw
);
return
transitionDto
(
qinCeClienteleStoreDO
);
}
private
LambdaQueryWrapper
<
QinCeClienteleStoreDO
>
builderQueryWrapper
(
StoreWrapper
storeWrapper
){
LambdaQueryWrapper
<
QinCeClienteleStoreDO
>
qw
=
new
LambdaQueryWrapper
<>();
// 默认查询有效数据 >>> 门店删除状态。0:删除,1:正常:store_status = 1
qw
.
eq
(
QinCeClienteleStoreDO:
:
getStoreStatus
,
storeWrapper
.
getStoreStatus
());
// 默认查询有效数据 >>> 门店审批状态。1:待审批,2:审批打回,3:审批通过:store_approval_status = 3
qw
.
eq
(
QinCeClienteleStoreDO:
:
getStoreApprovalStatus
,
storeWrapper
.
getStoreApprovalStatus
());
// 按qcId查询
if
(
StringUtils
.
isNotBlank
(
storeWrapper
.
getQcId
())){
qw
.
eq
(
QinCeClienteleStoreDO:
:
getQcId
,
storeWrapper
.
getQcId
());
return
qw
;
}
// 按门店名称模糊查询
if
(
StringUtils
.
isNotBlank
(
storeWrapper
.
getStoreNameVague
())){
qw
.
like
(
QinCeClienteleStoreDO:
:
getStoreName
,
storeWrapper
.
getStoreNameVague
());
}
return
qw
;
}
/**
* DO to DTO (单个对象)
* @param storeDO DO对象
* @return DTO对象
*/
private
QinCeClienteleStoreDto
transitionDto
(
QinCeClienteleStoreDO
storeDO
){
QinCeClienteleStoreDto
storedDto
=
null
;
if
(!
Objects
.
isNull
(
storeDO
)){
storedDto
=
new
QinCeClienteleStoreDto
();
BeanUtils
.
copyProperties
(
storeDO
,
storedDto
);
}
return
storedDto
;
}
private
List
<
QinCeClienteleStoreDto
>
transitionDtos
(
List
<
QinCeClienteleStoreDO
>
storeDOs
)
{
if
(
CollectionUtils
.
isEmpty
(
storeDOs
))
{
return
new
ArrayList
<>();
}
List
<
QinCeClienteleStoreDto
>
dtos
=
new
ArrayList
<>(
storeDOs
.
size
()
*
2
);
for
(
QinCeClienteleStoreDO
storeDO
:
storeDOs
)
{
QinCeClienteleStoreDto
storeDto
=
transitionDto
(
storeDO
);
dtos
.
add
(
storeDto
);
}
return
dtos
;
}
}
src/main/java/com/wangxiaolu/promotion/domain/user/dao/impl/QinCeEmployeeDaoImpl.java
浏览文件 @
8a07f30e
...
...
@@ -6,7 +6,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import
com.wangxiaolu.promotion.domain.user.dao.QinCeEmployeeDao
;
import
com.wangxiaolu.promotion.domain.user.mapper.QinceEmployeeMapper
;
import
com.wangxiaolu.promotion.domain.user.mapper.entity.QinCeEmployeeDO
;
import
com.wangxiaolu.promotion.domain.user.mapper.entity.TemporaryInfoDO
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.QinCeEmployeeDto
;
import
com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -50,4 +54,28 @@ public class QinCeEmployeeDaoImpl implements QinCeEmployeeDao {
}
}
@Override
public
QinCeEmployeeDto
selectOntByQcId
(
String
qcId
)
{
LambdaQueryWrapper
<
QinCeEmployeeDO
>
qw
=
new
LambdaQueryWrapper
<>();
qw
.
eq
(
QinCeEmployeeDO:
:
getQcId
,
qcId
);
QinCeEmployeeDO
qcEmpDo
=
qinceEmployeeMapper
.
selectOne
(
qw
);
return
transitionDto
(
qcEmpDo
);
}
/**
* DO to DTO (单个对象)
*
* @param qcEmpDo DO对象
* @return DTO对象
*/
private
QinCeEmployeeDto
transitionDto
(
QinCeEmployeeDO
qcEmpDo
)
{
QinCeEmployeeDto
qcEmpDto
=
null
;
if
(!
Objects
.
isNull
(
qcEmpDo
))
{
qcEmpDto
=
new
QinCeEmployeeDto
();
BeanUtils
.
copyProperties
(
qcEmpDo
,
qcEmpDto
);
}
return
qcEmpDto
;
}
}
src/main/java/com/wangxiaolu/promotion/domain/user/dao/impl/TemporaryInfoDaoImpl.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
user
.
dao
.
impl
;
import
com.alibaba.druid.util.StringUtils
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.wangxiaolu.promotion.domain.user.dao.TemporaryInfoDao
;
import
com.wangxiaolu.promotion.domain.user.mapper.TemporaryInfoMapper
;
import
com.wangxiaolu.promotion.domain.user.mapper.entity.TemporaryInfoDO
;
import
com.wangxiaolu.promotion.domain.user.wrapperQo.TemporaryWrapper
;
import
com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.Objects
;
/**
* @author : liqiulin
* @date : 2024-04-08 16
* @describe :促销员-信息
*/
@Service
public
class
TemporaryInfoDaoImpl
implements
TemporaryInfoDao
{
@Autowired
TemporaryInfoMapper
temporaryInfoMapper
;
/**
* 微信-小程序注册的促销员信息
*/
@Override
public
int
saveWxTemporaryInfo
(
WxTemporaryInfoDto
temporaryDto
){
TemporaryInfoDO
entity
=
new
TemporaryInfoDO
();
BeanUtils
.
copyProperties
(
temporaryDto
,
entity
);
return
temporaryInfoMapper
.
insert
(
entity
);
}
@Override
public
WxTemporaryInfoDto
getUnimportantData
(
String
openId
)
{
TemporaryInfoDO
temDo
=
temporaryInfoMapper
.
getUnimportantData
(
openId
);
return
transitionDto
(
temDo
);
}
@Override
public
WxTemporaryInfoDto
getUnimportantData
(
String
openId
,
String
phone
)
{
TemporaryWrapper
tw
=
new
TemporaryWrapper
().
setOpenId
(
openId
).
setPhone
(
phone
);
LambdaQueryWrapper
<
TemporaryInfoDO
>
doqwer
=
buildQueryList
(
tw
);
TemporaryInfoDO
temDo
=
temporaryInfoMapper
.
selectOne
(
doqwer
);
return
transitionDto
(
temDo
);
}
@Override
public
WxTemporaryInfoDto
selectOneById
(
Integer
id
)
{
TemporaryInfoDO
temDo
=
temporaryInfoMapper
.
selectById
(
id
);
return
transitionDto
(
temDo
);
}
private
LambdaQueryWrapper
<
TemporaryInfoDO
>
buildQueryList
(
TemporaryWrapper
tw
){
LambdaQueryWrapper
<
TemporaryInfoDO
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
if
(!
StringUtils
.
isEmpty
(
tw
.
getOpenId
())){
queryWrapper
.
eq
(
TemporaryInfoDO:
:
getOpenId
,
tw
.
getOpenId
());
}
if
(!
StringUtils
.
isEmpty
(
tw
.
getPhone
())){
queryWrapper
.
eq
(
TemporaryInfoDO:
:
getPhone
,
tw
.
getPhone
());
}
return
queryWrapper
;
}
/**
* DO to DTO (单个对象)
* @param temDo DO对象
* @return DTO对象
*/
private
WxTemporaryInfoDto
transitionDto
(
TemporaryInfoDO
temDo
){
WxTemporaryInfoDto
temporaryDto
=
null
;
if
(!
Objects
.
isNull
(
temDo
)){
temporaryDto
=
new
WxTemporaryInfoDto
();
BeanUtils
.
copyProperties
(
temDo
,
temporaryDto
);
}
return
temporaryDto
;
}
}
src/main/java/com/wangxiaolu/promotion/domain/user/mapper/QinCeClienteleStoreMapper.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
user
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.wangxiaolu.promotion.domain.user.mapper.entity.QinCeClienteleStoreDO
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.springframework.stereotype.Repository
;
/**
* @author a02200059
* @description 针对表【qc_clientele_shop(勤策-客户管理-终端)】的数据库操作Mapper
* @createDate 2024-04-22 16:42:53
* @Entity com.wangxiaolu.promotion.domain.user.mapper.entity.QcClienteleShop
*/
@Mapper
@Repository
public
interface
QinCeClienteleStoreMapper
extends
BaseMapper
<
QinCeClienteleStoreDO
>
{
}
src/main/java/com/wangxiaolu/promotion/domain/user/mapper/TemporaryInfoMapper.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
user
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.wangxiaolu.promotion.domain.user.mapper.entity.TemporaryInfoDO
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.stereotype.Repository
;
/**
* @author a02200059
* @description 针对表【temporary_info】的数据库操作Mapper
* @createDate 2024-04-09 18:34:54
* @Entity com.wangxiaolu.promotion.domain.user.mapper.entity.TemporaryInfo
*/
@Mapper
@Repository
public
interface
TemporaryInfoMapper
extends
BaseMapper
<
TemporaryInfoDO
>
{
// 根据openId查询非保密数据,保密数据不返回:身份证号、身份证照片等信息
TemporaryInfoDO
getUnimportantData
(
@Param
(
"openId"
)
String
openId
);
}
src/main/java/com/wangxiaolu/promotion/domain/user/mapper/entity/QinCeClienteleStoreDO.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
user
.
mapper
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
java.io.Serializable
;
import
java.util.Date
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
lombok.Data
;
/**
* 勤策-客户管理-终端
* @TableName qc_clientele_shop
*/
@TableName
(
value
=
"qince_clientele_store"
)
@Data
public
class
QinCeClienteleStoreDO
implements
Serializable
{
/**
* 主键id
*/
@TableId
(
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* 勤策的门店唯一ID
*/
@JsonProperty
(
"id"
)
private
String
qcId
;
/**
* 源于第三方系统的门店唯一ID
*/
@JsonProperty
(
"store_id"
)
private
String
storeId
;
/**
* 创建人id,来源勤策员工唯一ID
*/
@JsonProperty
(
"creator_waiqin_id"
)
private
String
creatorWaiqinId
;
/**
* 创建人名称
*/
@JsonProperty
(
"creator_name"
)
private
String
creatorName
;
/**
* 创建人id,来源第三方系统的唯一ID
*/
@JsonProperty
(
"creator_id"
)
private
String
creatorId
;
/**
* 退回原因
*/
@JsonProperty
(
"return_pool_reason"
)
private
String
returnPoolReason
;
/**
* 门店名称
*/
@JsonProperty
(
"store_name"
)
private
String
storeName
;
/**
* 门店编码
*/
@JsonProperty
(
"store_code"
)
private
String
storeCode
;
/**
* 门店经理,多门店经理名称间以“,”分隔
*/
@JsonProperty
(
"store_manager"
)
private
String
storeManager
;
/**
* 勤策门店经理id。第三方唯一标识,多门店经理id间以“,”分隔
*/
@JsonProperty
(
"store_manager_id"
)
private
String
storeManagerId
;
/**
* 勤策门店经理id。勤策唯一标识,多门店经理id间以“,”分隔。store_manager_waiqin365_id、store_manager_id、store_manager如果同时存在,优先级依次降低
*/
@JsonProperty
(
"store_manager_waiqin365_id"
)
private
String
storeManagerWaiqin365Id
;
/**
* 门店类型名称
*/
@JsonProperty
(
"store_type"
)
private
String
storeType
;
/**
* 门店类型编码
*/
@JsonProperty
(
"store_type_code"
)
private
String
storeTypeCode
;
/**
* 门店类型id
*/
@JsonProperty
(
"store_type_id"
)
private
String
storeTypeId
;
/**
* 勤策门店等级ID
*/
@JsonProperty
(
"store_level_id"
)
private
String
storeLevelId
;
/**
* 门店等级名称
*/
@JsonProperty
(
"store_level"
)
private
String
storeLevel
;
/**
* 勤策门店所属部门ID
*/
@JsonProperty
(
"store_dept_waiqin365_id"
)
private
String
storeDeptWaiqin365Id
;
/**
* 门店所属部门,来源第三方系统的唯一标识和部门信息中org_id对应
*/
@JsonProperty
(
"store_dept_id"
)
private
String
storeDeptId
;
/**
* 门店部门名称
*/
@JsonProperty
(
"store_dept_name"
)
private
String
storeDeptName
;
/**
* 门店所属销售区域,此字段为 销售区域的最末级结构
*/
@JsonProperty
(
"store_district"
)
private
String
storeDistrict
;
/**
* 门店所属销售区域,此字段为销售区域的完整层级结构,多层级间以“,”分隔。 如:华中大区,南京分区,秦淮社区
*/
@JsonProperty
(
"store_district_full_path"
)
private
String
storeDistrictFullPath
;
/**
* 门店所属销售区域ID,来源于勤策的销售区域唯一ID
*/
@JsonProperty
(
"store_district_waiqin365_id"
)
private
String
storeDistrictWaiqin365Id
;
/**
* 第三方销售区域id
*/
@JsonProperty
(
"store_third_district_id"
)
private
String
storeThirdDistrictId
;
/**
* 门店所属行政区域-省份名称,如:北京市、江苏省
*/
@JsonProperty
(
"store_mss_province"
)
private
String
storeMssProvince
;
/**
* 门店所属行政区域-省份编码,如:110000、320000
*/
@JsonProperty
(
"store_mss_province_code"
)
private
String
storeMssProvinceCode
;
/**
* 门店所属行政区域-城市名称,如:南京市
*/
@JsonProperty
(
"store_mss_city"
)
private
String
storeMssCity
;
/**
* 门店所属行政区域-城市编码,如:320100
*/
@JsonProperty
(
"store_mss_city_code"
)
private
String
storeMssCityCode
;
/**
* 门店所属行政区域-区县名称,如:鼓楼区
*/
@JsonProperty
(
"store_mss_area"
)
private
String
storeMssArea
;
/**
* 门店所属行政区域-区县编码,如:320106
*/
@JsonProperty
(
"store_mss_area_code"
)
private
String
storeMssAreaCode
;
/**
* 门店所属行政区域-乡镇街道名称,如:宁海路街道
*/
@JsonProperty
(
"store_mss_street"
)
private
String
storeMssStreet
;
/**
* 门店所属行政区域-乡镇街道编码,如:320106001
*/
@JsonProperty
(
"store_mss_street_code"
)
private
String
storeMssStreetCode
;
/**
* 门店所在地址
*/
@JsonProperty
(
"store_addr"
)
private
String
storeAddr
;
/**
* 勤策合作状态ID
*/
@JsonProperty
(
"store_cooperate_status_id"
)
private
String
storeCooperateStatusId
;
/**
* 合作状态编码。0:终止合作,1:合作中,2:未合作,3:有意向
*/
@JsonProperty
(
"store_cooperate_status"
)
private
String
storeCooperateStatus
;
/**
* 门店所属连锁品牌
*/
@JsonProperty
(
"store_ka_sys"
)
private
String
storeKaSys
;
/**
* 门店电话,如:02544550010或025-44550010
*/
@JsonProperty
(
"store_tel"
)
private
String
storeTel
;
/**
* 门店传真,如:02544550010或025-44550010
*/
@JsonProperty
(
"store_fax"
)
private
String
storeFax
;
/**
* 门店邮编
*/
@JsonProperty
(
"store_post"
)
private
String
storePost
;
/**
* 门店备注
*/
@JsonProperty
(
"store_remarks"
)
private
String
storeRemarks
;
/**
* 商圈等级
*/
@JsonProperty
(
"tradingarea_big"
)
private
String
tradingareaBig
;
/**
* 商圈标签
*/
@JsonProperty
(
"tradingarea"
)
private
String
tradingarea
;
/**
* 商圈等级编码
*/
@JsonProperty
(
"tradingarea_level_code"
)
private
String
tradingareaLevelCode
;
/**
* 商圈等级名称
*/
@JsonProperty
(
"tradingarea_level_name"
)
private
String
tradingareaLevelName
;
/**
* 勤策销售区域id。此字段从2021年8月01日起,对新创建第三方应用不再返回真实store_district_id,使用store_district_waiqin365_id代替store_district_id
*/
@JsonProperty
(
"store_district_id"
)
private
String
storeDistrictId
;
/**
* 门店所属销售区域编码,来源于勤策的销售区域编码。
*/
@JsonProperty
(
"store_district_code"
)
private
String
storeDistrictCode
;
/**
* 销售区域创建时间。格式:yyyy-MM-dd HH:mm:ss
*/
@JsonProperty
(
"store_district_create_time"
)
private
String
storeDistrictCreateTime
;
/**
* 销售区域修改时间。格式:yyyy-MM-dd HH:mm:ss
*/
@JsonProperty
(
"store_district_modify_time"
)
private
String
storeDistrictModifyTime
;
/**
* 销售区域创建人
*/
@JsonProperty
(
"store_district_creator_name"
)
private
String
storeDistrictCreatorName
;
/**
* 销售区域修改人
*/
@JsonProperty
(
"store_district_modifyier_name"
)
private
String
storeDistrictModifyierName
;
/**
* 销售区域状态。1:正常,0:删除。默认值为1
*/
@JsonProperty
(
"store_district_status"
)
private
String
storeDistrictStatus
;
/**
* 勤策客户层级id。“-1”表示是根节点
*/
@JsonProperty
(
"store_rel_level_id"
)
private
String
storeRelLevelId
;
/**
* 门店分层标签名称。多分层标签名称以“,”分隔
*/
@JsonProperty
(
"store_label"
)
private
String
storeLabel
;
/**
* 门店分层标签id。多分层标签id以“,”分隔
*/
@JsonProperty
(
"store_label_id"
)
private
String
storeLabelId
;
/**
* 门店协助员唯一标识。多协助员唯一标识以“,”分隔
*/
@JsonProperty
(
"store_assistant_id"
)
private
String
storeAssistantId
;
/**
* 门店协助员名称。多协助员名称以“,”分隔
*/
@JsonProperty
(
"store_assistant_name"
)
private
String
storeAssistantName
;
/**
* 门店道路信息
*/
@JsonProperty
(
"store_road_msg"
)
private
String
storeRoadMsg
;
/**
* 门店门牌号信息
*/
@JsonProperty
(
"store_house_number"
)
private
String
storeHouseNumber
;
/**
* 门店营业执照信息
*/
@JsonProperty
(
"store_liscence_name"
)
private
String
storeLiscenceName
;
/**
* 门店工商注册号信息
*/
@JsonProperty
(
"store_registration_no"
)
private
String
storeRegistrationNo
;
/**
* 门店注册日期。格式:yyyy-MM-dd
*/
@JsonProperty
(
"store_registration_date"
)
private
String
storeRegistrationDate
;
/**
* 门店经营者信息
*/
@JsonProperty
(
"store_operator"
)
private
String
storeOperator
;
/**
* 是否直接交易客户。0:是,1:否
*/
@JsonProperty
(
"store_sale_direct"
)
private
String
storeSaleDirect
;
/**
* 门店修改时间。格式:yyyy-MM-dd HH:mm:ss
*/
@JsonProperty
(
"store_modify_time"
)
private
String
storeModifyTime
;
/**
* 门店修改人名称
*/
@JsonProperty
(
"store_modifyier_name"
)
private
String
storeModifyierName
;
/**
* 新增门店最终审批通过时间。格式:yyyy-MM-dd HH:mm:ss
*/
@JsonProperty
(
"store_create_approval_time"
)
private
String
storeCreateApprovalTime
;
/**
* 修改客户审批通过时间。格式:yyyy-MM-dd HH:mm:ss
*/
@JsonProperty
(
"store_modify_approval_time"
)
private
String
storeModifyApprovalTime
;
/**
* 创建方式
*/
@JsonProperty
(
"store_source_type"
)
private
String
storeSourceType
;
/**
* 门店营业面积
*/
@JsonProperty
(
"store_selling_area"
)
private
String
storeSellingArea
;
/**
* 门店收银台个数
*/
@JsonProperty
(
"store_cashiers_num"
)
private
String
storeCashiersNum
;
/**
* 门店货架组数
*/
@JsonProperty
(
"store_shelf_num"
)
private
String
storeShelfNum
;
/**
* 门店总排面数
*/
@JsonProperty
(
"store_total_num"
)
private
String
storeTotalNum
;
/**
* 门店本品排面数
*/
@JsonProperty
(
"store_self_product_num"
)
private
String
storeSelfProductNum
;
/**
* 门店营业开始时间。格式:yyyy-MM-dd HH:mm:ss
*/
@JsonProperty
(
"store_open_time"
)
private
Date
storeOpenTime
;
/**
* 门店营业结束时间。格式:yyyy-MM-dd HH:mm:ss
*/
@JsonProperty
(
"store_close_time"
)
private
Date
storeCloseTime
;
/**
* 门店门头照信息,多个以“,”号隔开
*/
@JsonProperty
(
"store_pictures"
)
private
String
storePictures
;
/**
* 门店营业执照信息,多个以“,”号隔开
*/
@JsonProperty
(
"store_liscence"
)
private
String
storeLiscence
;
/**
* 门店客户经理编码,即为员工登录账号,多客户经理唯一标识间以英文“,”隔开
*/
@JsonProperty
(
"store_manager_code"
)
private
String
storeManagerCode
;
/**
* 创建人编码
*/
@JsonProperty
(
"store_creator_code"
)
private
String
storeCreatorCode
;
/**
* 修改人编码,取最新修改记录操作人
*/
@JsonProperty
(
"store_modifier_code"
)
private
String
storeModifierCode
;
/**
* 门店审批状态。1:待审批,2:审批打回,3:审批通过
*/
@JsonProperty
(
"store_approval_status"
)
private
String
storeApprovalStatus
;
/**
* 门店删除状态。0:删除,1:正常
*/
@JsonProperty
(
"store_status"
)
private
String
storeStatus
;
/**
* 创建日期。格式:yyyy-MM-dd HH:mm:ss
*/
@JsonProperty
(
"create_time"
)
private
String
createTime
;
@TableField
(
exist
=
false
)
private
static
final
long
serialVersionUID
=
1L
;
}
\ No newline at end of file
src/main/java/com/wangxiaolu/promotion/domain/user/mapper/entity/QinCeDepartmentDO.java
浏览文件 @
8a07f30e
...
...
@@ -13,7 +13,7 @@ import java.util.Date;
/**
* @author : liqiulin
* @date : 2024-03-29 15
* @describe : 勤策-组织架构
-dto
* @describe : 勤策-组织架构
*/
@TableName
(
value
=
"qince_department"
)
@Data
...
...
src/main/java/com/wangxiaolu/promotion/domain/user/mapper/entity/TemporaryInfoDO.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
user
.
mapper
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
*
* @TableName temporary_info
*/
@Data
@TableName
(
value
=
"temporary_info"
)
public
class
TemporaryInfoDO
implements
Serializable
{
/**
* 主键id
*/
@TableId
(
type
=
IdType
.
AUTO
)
private
Integer
id
;
/**
* 姓名
*/
private
String
name
;
/**
* 手机号
*/
private
String
phone
;
/**
* 身份证号码
*/
private
String
idenNumber
;
/**
* 微信openId
*/
private
String
openId
;
/**
* 此促销员的任务人-勤策id
*/
String
chargerQcId
;
/**
* 此促销员的任务人姓名
*/
String
chargerName
;
/**
* 头像url
*/
private
String
avatarUrl
;
/**
* 身份证正面url
*/
private
String
idenFrontPhotoUrl
;
/**
* 身份证反面url
*/
private
String
idenReversePhotoUrl
;
/**
* 创建时间
*/
private
Date
createTime
;
/**
* 修改时间
*/
private
Date
modifyTime
;
@TableField
(
exist
=
false
)
private
static
final
long
serialVersionUID
=
1L
;
}
\ No newline at end of file
src/main/java/com/wangxiaolu/promotion/domain/user/wrapperQo/StoreWrapper.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
user
.
wrapperQo
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.experimental.Accessors
;
/**
* @author : liqiulin
* @date : 2024-04-22 17
* @describe : 门店信息查询对象
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors
(
chain
=
true
)
public
class
StoreWrapper
{
private
String
qcId
;
/**
* 按名称模糊查询
*/
private
String
storeNameVague
;
/**
* 默认查询有效数据
* 门店删除状态。0:删除,1:正常:store_status = 1
* 门店审批状态。1:待审批,2:审批打回,3:审批通过:store_approval_status = 3
*/
private
String
storeStatus
=
"1"
;
private
String
storeApprovalStatus
=
"3"
;
}
src/main/java/com/wangxiaolu/promotion/domain/user/wrapperQo/TemporaryWrapper.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
domain
.
user
.
wrapperQo
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.experimental.Accessors
;
/**
* @author : liqiulin
* @date : 2024-04-09 18
* @describe :
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors
(
chain
=
true
)
public
class
TemporaryWrapper
{
/**
* openId
*/
String
openId
;
/**
* 手机号
*/
String
phone
;
}
src/main/java/com/wangxiaolu/promotion/enums/activity/ActivityPhotoType.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
enums
.
activity
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
/**
* @author : liqiulin
* @date : 2024-05-09 11
* @describe : 活动照片图片类型
*/
@Getter
@AllArgsConstructor
public
enum
ActivityPhotoType
{
/**
* 推广试吃照片
*/
TGSC
(
1
),
/**
* 推广互动照片
*/
TGHD
(
2
),
/**
* 推广成交照片
*/
TGCJ
(
3
),
/**
* 上班打卡图片
*/
CLOCK_IN
(
4
),
/**
* 午休下班打卡图片
*/
NOON_CLOCK_OUT
(
5
),
/**
* 午休上班打卡图片
*/
NOON_CLOCK_IN
(
6
),
/**
* 下班打卡图片
*/
CLOCK_OUT
(
7
),
;
private
int
type
;
}
src/main/java/com/wangxiaolu/promotion/enums/activity/ClockType.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
enums
.
activity
;
/**
* @author : liqiulin
* @date : 2024-04-23 14
* @describe : 打卡类型
*/
public
interface
ClockType
{
/**
* 打卡类型:1、上班卡;2、午休下班卡;3、午休上班卡;4、下班卡
*/
Integer
TEMPORARY_CLOCK_IN
=
1
;
String
TEMPORARY_CLOCK_IN_BEGIN_TIME
=
"09:30:00"
;
String
TEMPORARY_CLOCK_IN_END_TIME
=
"10:00:00"
;
Integer
TEMPORARY_NOON_CLOCK_OUT
=
2
;
String
TEMPORARY_NOON_CLOCK_OUT_BEGIN_TIME
=
"13:00:00"
;
String
TEMPORARY_NOON_CLOCK_OUT_END_TIME
=
"13:30:00"
;
Integer
TEMPORARY_NOON_CLOCK_IN
=
3
;
String
TEMPORARY_NOON_CLOCK_IN_BEGIN_TIME
=
"14:30:00"
;
String
TEMPORARY_NOON_CLOCK_IN_END_TIME
=
"15:00:00"
;
Integer
TEMPORARY_CLOCK_OUT
=
4
;
String
TEMPORARY_CLOCK_OUT_BEGIN_TIME
=
"19:00:00"
;
String
TEMPORARY_CLOCK_OUT_END_TIME
=
"23:59:00"
;
}
src/main/java/com/wangxiaolu/promotion/enums/activity/LogType.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
enums
.
activity
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
/**
* @author : liqiulin
* @date : 2024-05-15 13
* @describe : 促销员日志类型分类
*/
@Getter
@AllArgsConstructor
public
enum
LogType
{
/**
* 促销员活动日志
*/
t_1
(
1
,
"打卡"
),
t_2
(
2
,
"活动数据保存"
),
t_3
(
3
,
"活动数据提交审批"
),
;
private
Integer
type
;
private
String
name
;
}
src/main/java/com/wangxiaolu/promotion/enums/activity/TemActApproveStatus.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
enums
.
activity
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
/**
* @author : liqiulin
* @date : 2024-04-18 11
* @describe :temproary activity approve status
* 促销员活动上报审批状态
*/
@Getter
@AllArgsConstructor
public
enum
TemActApproveStatus
{
/**
* 审批状态
*/
// 保存但未提交审批
SUBMITTED
(
"已保存"
),
IN_APPROVAL
(
"审批中"
),
APPROVED
(
"审批通过"
),
SEND_BACK
(
"退回"
),
;
private
String
msg
;
}
src/main/java/com/wangxiaolu/promotion/exception/DataException.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
exception
;
import
com.wangxiaolu.promotion.result.basedata.RCode
;
import
com.wangxiaolu.promotion.result.basedata.StatusCode
;
import
lombok.Getter
;
/**
* @author : liqiulin
* @date : 2024-03-28 17
* @describe : response包装R失败
*/
@Getter
public
class
DataException
extends
RuntimeException
{
private
int
code
;
private
String
msg
;
public
DataException
(
StatusCode
statusCode
,
String
message
)
{
super
(
message
);
this
.
code
=
statusCode
.
getCode
();
this
.
msg
=
statusCode
.
getMsg
();
}
/**
* 默认异常编码
*/
public
DataException
(
String
message
)
{
super
(
message
);
this
.
code
=
RCode
.
API_ERROR
.
getCode
();
this
.
msg
=
RCode
.
API_ERROR
.
getMsg
();
}
}
src/main/java/com/wangxiaolu/promotion/exception/FlowException.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
exception
;
import
com.wangxiaolu.promotion.result.basedata.RCode
;
import
com.wangxiaolu.promotion.result.basedata.StatusCode
;
import
lombok.Getter
;
/**
* @author : liqiulin
* @date : 2024-03-28 19
* @describe : 业务流程异常
*/
@Getter
public
class
FlowException
extends
RuntimeException
{
private
int
code
;
private
String
msg
;
public
FlowException
(
StatusCode
statusCode
,
String
message
)
{
super
(
message
);
this
.
code
=
statusCode
.
getCode
();
this
.
msg
=
statusCode
.
getMsg
();
}
/**
* 默认异常编码
*/
public
FlowException
(
String
message
)
{
super
(
message
);
this
.
code
=
RCode
.
LOGIN_PARAM_ERROR
.
getCode
();
this
.
msg
=
RCode
.
LOGIN_PARAM_ERROR
.
getMsg
();
}
}
src/main/java/com/wangxiaolu/promotion/pojo/PageInfo.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
pojo
;
import
cn.hutool.core.bean.BeanUtil
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.wangxiaolu.promotion.exception.APIException
;
import
com.wangxiaolu.promotion.result.basedata.RCode
;
import
lombok.Data
;
import
org.springframework.util.CollectionUtils
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author : liqiulin
* @date : 2024-04-19 13
* @describe : 分页配置,默认每页10条记录
*/
@Data
public
class
PageInfo
<
T
>
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* 当前页数,第1页开始
*/
private
int
pageNum
=
1
;
/**
* 每页条数
*/
private
int
pageSize
=
1
;
/**
* 总条数
*/
private
int
totalRecord
;
/**
* 总页数
*/
private
int
totalPage
;
private
List
<
T
>
records
;
private
Map
<
String
,
Object
>
queryParams
;
/**
*
* current:当前页数,必须大于等于 1,默认值为 1。
* size:每页条数,默认值为 10。
* total:总条数,默认值为 0。
* records:当前页数据集合,默认值为空集合。
* searchCount:是否进行 count 查询,默认值为 true,表示会统计总条数。
* pages:总页数,通过计算得出。
* optimizeCountSql:是否优化 count 查询,默认值为 true。
* hitCount:是否对 count 进行 limit 优化,默认值为 false。
* countId:count 查询的列名,默认为 null,表示所有列。
* maxLimit:设置最大的 limit 查询限制,默认值为 -1,表示不限制。
* @param iPage 查询出的分页对象
* @param t 需要转换的对象(用于返回前端,不能直接返回DO)
* @param <P> 分页对象中的类型
*/
public
<
P
>
void
pageCovert
(
IPage
<
P
>
iPage
,
Class
<
T
>
t
)
{
this
.
totalRecord
=
(
int
)
iPage
.
getTotal
();
this
.
totalPage
=
(
int
)
iPage
.
getPages
();
List
<
P
>
iPageRecords
=
iPage
.
getRecords
();
if
(
CollectionUtils
.
isEmpty
(
iPageRecords
))
{
this
.
records
=
new
ArrayList
<>();
return
;
}
try
{
List
<
T
>
tList
=
new
ArrayList
<>(
iPageRecords
.
size
()
*
2
);
for
(
P
pr
:
iPageRecords
)
{
T
newT
=
t
.
newInstance
();
// 把原对象数据拷贝到新的对象
BeanUtil
.
copyProperties
(
pr
,
newT
);
tList
.
add
(
newT
);
}
this
.
records
=
tList
;
}
catch
(
Exception
e
)
{
throw
new
APIException
(
RCode
.
FAILED
,
e
.
getMessage
());
}
}
public
<
P
>
void
pageCovert
(
IPage
<
P
>
iPage
)
{
this
.
totalRecord
=
(
int
)
iPage
.
getTotal
();
this
.
totalPage
=
(
int
)
iPage
.
getPages
();
}
}
src/main/java/com/wangxiaolu/promotion/pojo/activity/temporary/dto/QinCeEmployeeDto.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
pojo
.
activity
.
temporary
.
dto
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.experimental.Accessors
;
/**
* @author : liqiulin
* @date : 2024-03-29 16
* @describe :
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors
(
chain
=
true
)
public
class
QinCeEmployeeDto
{
/**
* 主键id
*/
private
Integer
id
;
/**
* 勤策的员工唯一标识
* 对应[QinCeEmployeeDTO.id]
*/
private
String
qcId
;
/**
* 来源第三方系统的员工唯一标识
*/
private
String
empId
;
/**
* 员工登录帐号
*/
private
String
empCode
;
/**
* 姓名
*/
private
String
empName
;
/**
* 员工别名
*/
private
String
aliasName
;
/**
* 人员编码
*/
private
String
employeeCode
;
/**
* 员工手机号码
*/
private
String
empMobile
;
/**
* 邮箱
*/
private
String
empEmail
;
/**
* 来源第三方系统隶属部门
*/
private
String
empOrgId
;
/**
* 隶属部门编码
*/
private
String
empOrgCode
;
/**
* 勤策部门唯一标识
* 对应QinCeDepartmentDO.qcId
*/
private
String
waiqin365OrgId
;
/**
* 来源第三方系统,员工上级唯一标识
*/
private
String
empParentId
;
/**
* 员工账号状态。0:销户,1:正常,2:停用
*/
private
String
empStatus
;
/**
* 勤策经销商唯一标识
*/
private
String
dealerId
;
/**
* 经销商中文名称
*/
private
String
dealerName
;
/**
* 勤策职务唯一标识
*/
private
String
waiqin365PositionId
;
/**
* 职务编码
*/
private
String
empPositionCode
;
/**
* 职务名称
*/
private
String
empPosition
;
/**
* 勤策岗位唯一标识
*/
private
String
waiqin365JobId
;
/**
* 岗位编码
*/
private
String
empJobCode
;
/**
* 岗位名称
*/
private
String
empJob
;
}
src/main/java/com/wangxiaolu/promotion/pojo/activity/temporary/dto/TemporaryActivityReportedDto.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
pojo
.
activity
.
temporary
.
dto
;
import
com.wangxiaolu.promotion.enums.activity.TemActApproveStatus
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.experimental.Accessors
;
import
java.util.Arrays
;
import
java.util.Date
;
import
java.util.List
;
/**
* @author : liqiulin
* @date : 2024-04-18 10
* @describe :
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors
(
chain
=
true
)
public
class
TemporaryActivityReportedDto
{
/**
* temporary_activity_reported主键id
*/
private
Long
id
;
/**
* 关联—temporary_info表id
*/
private
Integer
temporaryId
;
/**
* 关联—temporary_info表name
*/
private
String
temporaryName
;
/**
* 关联—活动店铺id
*/
private
String
storeQcId
;
/**
* 关联—活动店铺名称(例:小美超市)
*/
private
String
storeName
;
/**
* 关联—活动店铺地址(例:北京朝阳北路31号1层)
*/
private
String
storeAddr
;
/**
* 关联—审核人员id
*/
private
Long
approverId
;
/**
* 关联—审核人员姓名
*/
private
String
approveName
;
/**
* 审批状态(审批中、审批通过、退回……)
*/
private
TemActApproveStatus
approveStatus
;
private
String
approveStatusMsg
;
/**
* 最后一次审批时间
*/
private
Date
approveTime
;
/**
* 推广试吃照片
*/
List
<
String
>
tgscPhotoUrls
;
List
<
String
>
tgscChangePhotoUrls
;
/**
* 推广互动照片
*/
List
<
String
>
tghdPhotoUrls
;
List
<
String
>
tghdChangePhotoUrls
;
/**
* 推广成交照片
*/
List
<
String
>
tgcjPhotoUrls
;
List
<
String
>
tgcjChangePhotoUrls
;
private
Integer
sellXiangA
;
private
Integer
sellXiangB
;
private
Integer
sellXiangC
;
private
Integer
sellXiangD
;
private
Integer
sellDaiA
;
private
Integer
sellDaiB
;
private
Integer
sellDaiC
;
private
Integer
sellDaiD
;
/**
* 创建时间
*/
private
Date
createTime
;
/**
* 创建日期
*/
private
String
createDate
;
/**
* 修改时间
*/
private
Date
modifyTime
;
}
src/main/java/com/wangxiaolu/promotion/pojo/activity/temporary/dto/TemporaryClockDto.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
pojo
.
activity
.
temporary
.
dto
;
import
com.wangxiaolu.promotion.enums.activity.ClockType
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.experimental.Accessors
;
import
java.util.Date
;
/**
* @author : liqiulin
* @date : 2024-04-23 14
* @describe :促销员打卡数据DTO
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors
(
chain
=
true
)
public
class
TemporaryClockDto
{
/**
* 打卡记录id
* 上班打卡无记录id
*/
Long
id
;
/**
* temporaryId
*/
Integer
temporaryId
;
String
temporaryName
;
// 店铺勤策id
String
storeQcId
;
// 店铺名称
String
storeName
;
// 上班打卡地址
String
clockInAddress
;
// 上班打卡经纬度
String
clockInCoordinates
;
// 上班打卡图片
String
clockInPhoto
;
// 上班打卡时间
Date
clockInTime
;
// 午休下班打卡地点
String
noonClockOutAddress
;
// 午休下班打卡经纬度
String
noonClockOutCoordinates
;
// 午休下班打卡图片
String
noonClockOutPhoto
;
// 午休下班打卡时间
Date
noonClockOutTime
;
// 午休上班打卡地点
String
noonClockInAddress
;
// 午休上班打卡经纬度
String
noonClockInCoordinates
;
// 午休上班打卡图片
String
noonClockInPhoto
;
// 午休上班打卡时间
Date
noonClockInTime
;
// 下班打卡地点
String
clockOutAddress
;
// 下班打卡经纬度
String
clockOutCoordinates
;
// 下班打卡图片
String
clockOutPhoto
;
// 下班打卡时间
Date
clockOutTime
;
public
TemporaryClockDto
(
Integer
clockType
,
Long
id
,
Integer
temporaryId
,
String
temporaryName
)
{
if
(!
ClockType
.
TEMPORARY_CLOCK_IN
.
equals
(
clockType
))
{
this
.
id
=
id
;
}
this
.
temporaryId
=
temporaryId
;
this
.
temporaryName
=
temporaryName
;
}
}
src/main/java/com/wangxiaolu/promotion/pojo/activity/temporary/vo/TemporaryActivityDataVo.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
pojo
.
activity
.
temporary
.
vo
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotNull
;
import
java.util.List
;
/**
* @author : liqiulin
* @date : 2024-04-17 19
* @describe : 促销员今日活动上报VO
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors
(
chain
=
true
)
public
class
TemporaryActivityDataVo
{
/**
* 促销员活动上报id
* 关联ID:temporary_activity_reported表id
*/
Long
activityReportedId
;
/**
* 促销员id
* temporaryInfo表id
*/
@NotNull
(
message
=
"促销员账号异常"
)
private
Integer
temporaryId
;
/**
* 促销员姓名
* temporaryInfo表name
*/
private
String
temporaryName
;
/**
* 活动店铺Id
*/
@NotNull
(
message
=
"活动店铺异常"
)
private
String
storeQcId
;
/**
* 推广试吃照片
*/
private
List
<
String
>
tgscPhotoUrls
;
private
List
<
String
>
tgscChangePhotoUrls
;
/**
* 推广互动照片
*/
private
List
<
String
>
tghdPhotoUrls
;
private
List
<
String
>
tghdChangePhotoUrls
;
/**
* 推广成交照片
*/
private
List
<
String
>
tgcjPhotoUrls
;
private
List
<
String
>
tgcjChangePhotoUrls
;
private
Integer
ax
;
private
Integer
sellXiangA
;
private
Integer
sellXiangB
;
private
Integer
sellXiangC
;
private
Integer
sellXiangD
;
private
Integer
sellDaiA
;
private
Integer
sellDaiB
;
private
Integer
sellDaiC
;
private
Integer
sellDaiD
;
}
\ No newline at end of file
src/main/java/com/wangxiaolu/promotion/pojo/activity/temporary/vo/TemporaryClockVo.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
pojo
.
activity
.
temporary
.
vo
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.experimental.Accessors
;
import
org.hibernate.validator.constraints.Range
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
/**
* @author : liqiulin
* @date : 2024-04-23 13
* @describe : 促销员打卡数据模型
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors
(
chain
=
true
)
public
class
TemporaryClockVo
{
/**
* 打卡记录id
*/
Long
id
;
/**
* 打卡类型:1、上班卡;2、午休下班卡;3、午休上班卡;4、下班卡
*/
@NotNull
(
message
=
"无打卡类型"
)
@Range
(
max
=
4
,
min
=
1
,
message
=
"超出状态"
)
Integer
clockType
;
/**
* temporaryId
*/
@NotNull
(
message
=
"找不到打卡人"
)
Integer
temporaryId
;
String
temporaryName
;
// 店铺勤策id
String
storeQcId
;
// 店铺名称
String
storeName
;
// 上班打卡地点
@NotBlank
(
message
=
"请选择打卡地址"
)
String
clockAddress
;
// 上班打卡经纬度
@NotBlank
(
message
=
"请选择打卡地点"
)
String
clockCoordinates
;
// 上班打卡图片
@NotBlank
(
message
=
"请上传图片"
)
String
clockPhoto
;
}
src/main/java/com/wangxiaolu/promotion/pojo/user/dto/QinCeClienteleStoreDto.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
pojo
.
user
.
dto
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.experimental.Accessors
;
/**
* @author : liqiulin
* @date : 2024-04-22 18
* @describe : store-DTO
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors
(
chain
=
true
)
public
class
QinCeClienteleStoreDto
{
/**
* 勤策的门店唯一ID
*/
private
String
qcId
;
private
String
storeName
;
private
String
storeAddr
;
}
src/main/java/com/wangxiaolu/promotion/pojo/user/dto/WxTemporaryInfoDto.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
pojo
.
user
.
dto
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.experimental.Accessors
;
import
java.util.Date
;
/**
* @author : liqiulin
* @date : 2024-04-08 16
* @describe :微信促销员DTO
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors
(
chain
=
true
)
public
class
WxTemporaryInfoDto
{
/**
* temporary_info表id
*/
Integer
id
;
/**
* openId
*/
String
openId
;
/**
* 头像
*/
String
avatarUrl
;
/**
* 姓名
*/
String
name
;
/**
* 手机号
*/
String
phone
;
/**
* 身份证号
*/
String
idenNumber
;
/**
* 身份证正面照
*/
String
idenFrontPhotoUrl
;
/**
* 身份证反面照
*/
String
idenReversePhotoUrl
;
/**
* 详细地址
*/
String
address
;
/**
* 创建时间
*/
Date
createTime
;
/**
* 此促销员的任务人-勤策id
*/
String
chargerQcId
;
/**
* 此促销员的任务人姓名
*/
String
chargerName
;
}
src/main/java/com/wangxiaolu/promotion/pojo/user/vo/ClienteleStoreQueryVo.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
pojo
.
user
.
vo
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.experimental.Accessors
;
/**
* @author : liqiulin
* @date : 2024-04-22 17
* @describe : 按条件查询门店信息
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors
(
chain
=
true
)
public
class
ClienteleStoreQueryVo
{
private
String
qcId
;
/**
* 按名称模糊查询
*/
private
String
storeNameVague
;
/**
* 默认查询有效数据
* 门店删除状态。0:删除,1:正常:store_status = 1
* 门店审批状态。1:待审批,2:审批打回,3:审批通过:store_approval_status = 3
*/
private
String
storeStatus
=
"1"
;
private
String
storeApprovalStatus
=
"3"
;
}
src/main/java/com/wangxiaolu/promotion/pojo/user/vo/WxTemporaryEnrollVo.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
pojo
.
user
.
vo
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotBlank
;
/**
* @author : liqiulin
* @date : 2024-04-08 12
* @describe : 微信-促销员注册参数
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors
(
chain
=
true
)
public
class
WxTemporaryEnrollVo
{
/**
* openId
*/
@NotBlank
(
message
=
"微信登录错误"
)
String
openId
;
/**
* 头像
*/
@NotBlank
(
message
=
"请上传头像"
)
String
avatarUrl
;
/**
* 姓名
*/
@NotBlank
(
message
=
"姓名不可为空"
)
String
name
;
/**
* 手机号
*/
@NotBlank
(
message
=
"手机号不可为空"
)
String
phone
;
/**
* 身份证号
*/
@NotBlank
(
message
=
"身份证号不可为空"
)
String
idenNumber
;
/**
* 身份证正面照
*/
@NotBlank
(
message
=
"请上传身份证正面照"
)
String
idenFrontPhotoUrl
;
/**
* 身份证反面照
*/
@NotBlank
(
message
=
"请上传身份证反面照"
)
String
idenReversePhotoUrl
;
/**
* 详细地址
*/
String
address
;
/**
* 手机验证码
*/
@NotBlank
(
message
=
"验证码无效"
)
String
phoneCode
;
/**
* 此促销员的任务人-勤策id
*/
String
chargerQcId
=
"8453472204758793216"
;
}
src/main/java/com/wangxiaolu/promotion/pojo/user/vo/WxTemporaryLoginVo.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
pojo
.
user
.
vo
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotBlank
;
/**
* @author : liqiulin
* @date : 2024-04-16 10
* @describe : 促销员登录
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors
(
chain
=
true
)
public
class
WxTemporaryLoginVo
{
@NotBlank
(
message
=
"微信登录错误"
)
String
openId
;
@NotBlank
(
message
=
"手机号不可为空"
)
String
phone
;
}
src/main/java/com/wangxiaolu/promotion/result/advice/ControllerExceptionAdvice.java
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
result
.
advice
;
import
com.wangxiaolu.promotion.exception.APIException
;
import
com.wangxiaolu.promotion.exception.FlowException
;
import
com.wangxiaolu.promotion.exception.ParamException
;
import
com.wangxiaolu.promotion.result.basedata.R
;
import
com.wangxiaolu.promotion.result.basedata.RCode
;
import
org.apache.ibatis.exceptions.TooManyResultsException
;
import
org.springframework.dao.DataIntegrityViolationException
;
import
org.springframework.web.bind.MethodArgumentNotValidException
;
import
org.springframework.web.bind.annotation.ExceptionHandler
;
import
org.springframework.web.bind.annotation.RestControllerAdvice
;
import
java.sql.SQLIntegrityConstraintViolationException
;
/**
* @author : liqiulin
* @date : 2024-03-28 19
...
...
@@ -18,19 +23,54 @@ import org.springframework.web.bind.annotation.RestControllerAdvice;
public
class
ControllerExceptionAdvice
{
@ExceptionHandler
({
ParamException
.
class
})
public
R
ParamExceptionHandler
(
ParamException
e
)
{
public
R
paramExceptionHandler
(
ParamException
e
)
{
return
new
R
(
e
.
getCode
(),
e
.
getMsg
(),
e
.
getMessage
());
}
@ExceptionHandler
({
FlowException
.
class
})
public
R
flowExceptionHandler
(
FlowException
e
)
{
return
new
R
(
e
.
getCode
(),
e
.
getMsg
(),
e
.
getMessage
());
}
@ExceptionHandler
({
APIException
.
class
})
public
R
API
ExceptionHandler
(
APIException
e
)
{
public
R
api
ExceptionHandler
(
APIException
e
)
{
return
new
R
(
e
.
getCode
(),
e
.
getMsg
(),
e
.
getMessage
());
}
@ExceptionHandler
({
SQLIntegrityConstraintViolationException
.
class
})
public
R
dbConstraintViolationExceptionHandler
(
SQLIntegrityConstraintViolationException
e
)
{
RCode
errorCode
=
RCode
.
USER_PHONE_IDENNUMBER_WXOPENID_UNIQUE_ERROR
;
String
msg
=
errorCode
.
getMsg
();
String
message
=
e
.
getMessage
();
if
(
message
.
contains
(
"phone_unique"
))
{
msg
=
"手机号已注册"
;
}
else
if
(
message
.
contains
(
"iden_num_unique"
))
{
msg
=
"身份证已注册"
;
}
else
if
(
message
.
contains
(
"open_id_unique"
))
{
msg
=
"微信号已注册"
;
}
return
new
R
(
errorCode
.
getCode
(),
msg
,
message
);
}
@ExceptionHandler
({
MethodArgumentNotValidException
.
class
})
public
R
M
ethodArgumentNotValidExceptionHandler
(
MethodArgumentNotValidException
e
)
{
public
R
m
ethodArgumentNotValidExceptionHandler
(
MethodArgumentNotValidException
e
)
{
String
msg
=
e
.
getBindingResult
().
getFieldError
().
getDefaultMessage
();
return
new
R
(
RCode
.
PARAM_ERROR
.
getCode
(),
msg
);
}
@ExceptionHandler
({
DataIntegrityViolationException
.
class
})
public
R
dataIntegrityViolationExceptionHandler
(
DataIntegrityViolationException
e
)
{
String
msg
=
e
.
getMessage
();
if
(
msg
.
contains
(
"java.sql.SQLIntegrityConstraintViolationException"
)){
return
dbConstraintViolationExceptionHandler
(
new
SQLIntegrityConstraintViolationException
(
msg
));
}
return
new
R
(
RCode
.
API_DATA_ERROR
.
getCode
(),
RCode
.
API_DATA_ERROR
.
getMsg
(),
msg
);
}
@ExceptionHandler
({
TooManyResultsException
.
class
})
public
R
tooManyResultsExceptionHandler
(
TooManyResultsException
e
)
{
String
msg
=
e
.
getMessage
();
return
new
R
(
RCode
.
DATA_TOO_MANY_ERROR
.
getCode
(),
msg
);
}
}
src/main/java/com/wangxiaolu/promotion/result/basedata/RCode.java
浏览文件 @
8a07f30e
...
...
@@ -23,12 +23,32 @@ public enum RCode implements StatusCode {
* 2000+
*/
API_ERROR
(
2000
,
"业务异常"
),
API_DATA_ERROR
(
2001
,
"业务数据异常"
),
DATA_HAVE_ERROR
(
2002
,
"数据已存在,不可新增"
),
STATUS_UPDATE_ERROR
(
2003
,
"当前状态不可修改"
),
DATA_NOT_HAVE_ERROR
(
2004
,
"数据不存在"
),
DATA_TOO_MANY_ERROR
(
2005
,
"唯一数据存在多条"
),
/**
* user
模块
* user
* 3000+
*/
LOGIN_PARAM_ERROR
(
3000
,
"登录信息错误"
);
LOGIN_PARAM_ERROR
(
3000
,
"登录信息错误"
),
ENROLL_PARAM_ERROR
(
3001
,
"注册信息错误"
),
PHONE_PARAM_ERROR
(
3002
,
"手机号异常"
),
USER_PHONE_IDENNUMBER_WXOPENID_UNIQUE_ERROR
(
3003
,
"个人信息已注册"
),
LOGIN_USER_IS_NULL_ERROR
(
3004
,
"账号未注册"
),
CLOCK_DETAIL_ERROR
(
3005
,
"打卡信息错误"
),
CLOCK_DETAIL_TIME_ERROR
(
3006
,
"不在打卡时间范围内"
),
CHARGER_ID_ERROR
(
3007
,
"未找到负责人"
),
/**
* 腾讯云
* 3500+
*/
TENCENT_SMS_ERROR
(
3500
,
"短信发送失败"
),
TENCENT_SMS_REPETITION
(
3501
,
"短信已发送"
),
TENCENT_SMS_PHONE_CODE_ERROR
(
3502
,
"验证码错误"
),
;
...
...
src/main/java/com/wangxiaolu/promotion/service/activity/temporary/TemporaryActivityClockQueryService.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
service
.
activity
.
temporary
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto
;
/**
* @author : liqiulin
* @date : 2024-04-23 19
* @describe :
*/
public
interface
TemporaryActivityClockQueryService
{
TemporaryClockDto
findTodayTemporaryClockByTemId
(
Integer
temporaryId
);
TemporaryClockDto
findTemporaryClockByTemIdAndDate
(
Integer
temporaryId
,
String
createDate
);
}
src/main/java/com/wangxiaolu/promotion/service/activity/temporary/TemporaryActivityCoreService.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
service
.
activity
.
temporary
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto
;
/**
* @author : liqiulin
* @date : 2024-04-18 11
* @describe :
*/
public
interface
TemporaryActivityCoreService
{
/**
* 活动上报保存
*/
long
activityDataReportedSave
(
TemporaryActivityReportedDto
temActDto
);
/**
* 活动上报数据修改
*/
void
activityDataReportedUpdate
(
TemporaryActivityReportedDto
temActDto
);
/**
* 促销员当日打卡信息保存
*/
void
clockInTodayActivity
(
TemporaryClockDto
dto
,
Integer
clockType
);
/**
* 活动上报数据修改审批状态
*/
void
activityReportedSubmit
(
Long
id
);
}
src/main/java/com/wangxiaolu/promotion/service/activity/temporary/TemporaryActivityQueryService.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
service
.
activity
.
temporary
;
import
com.wangxiaolu.promotion.pojo.PageInfo
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto
;
import
java.util.List
;
/**
* @author : liqiulin
* @date : 2024-04-18 13
* @describe :
*/
public
interface
TemporaryActivityQueryService
{
/**
* 根据促销员id查询所有任务
*/
void
findtemporaryIdActivityDataList
(
Integer
temporaryId
,
PageInfo
pageInfo
);
/**
* 根据促销员id查询今日任务
*/
TemporaryActivityReportedDto
findtemporaryIdTodayActivityData
(
Integer
temporaryId
);
TemporaryActivityReportedDto
findTemporaryActivityById
(
Long
activityId
);
}
src/main/java/com/wangxiaolu/promotion/service/activity/temporary/impl/TemporaryActivityClockQueryServiceImpl.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
service
.
activity
.
temporary
.
impl
;
import
cn.hutool.core.date.DateUtil
;
import
com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityClockDao
;
import
com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityPhotoDao
;
import
com.wangxiaolu.promotion.domain.activity.wrapperQo.TemporaryClockWrapper
;
import
com.wangxiaolu.promotion.enums.activity.ActivityPhotoType
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto
;
import
com.wangxiaolu.promotion.service.activity.temporary.TemporaryActivityClockQueryService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.Map
;
import
java.util.Objects
;
/**
* @author : liqiulin
* @date : 2024-04-23 19
* @describe :
*/
@Slf4j
@Service
public
class
TemporaryActivityClockQueryServiceImpl
implements
TemporaryActivityClockQueryService
{
@Autowired
TemporaryActivityClockDao
temporaryActivityClockDao
;
@Autowired
TemporaryActivityPhotoDao
temporaryActivityPhotoDao
;
@Override
public
TemporaryClockDto
findTodayTemporaryClockByTemId
(
Integer
temporaryId
)
{
String
today
=
DateUtil
.
today
();
TemporaryClockWrapper
tcw
=
new
TemporaryClockWrapper
()
.
setTemporaryId
(
temporaryId
)
.
setCreateDate
(
today
);
TemporaryClockDto
temporaryClockDto
=
temporaryActivityClockDao
.
selectOne
(
tcw
);
findClockPhoto
(
temporaryClockDto
);
return
temporaryClockDto
;
}
/**
* 查询指定日期打卡信息
*/
@Override
public
TemporaryClockDto
findTemporaryClockByTemIdAndDate
(
Integer
temporaryId
,
String
createDate
)
{
TemporaryClockWrapper
tcw
=
new
TemporaryClockWrapper
()
.
setTemporaryId
(
temporaryId
)
.
setCreateDate
(
createDate
);
TemporaryClockDto
temporaryClockDto
=
temporaryActivityClockDao
.
selectOne
(
tcw
);
findClockPhoto
(
temporaryClockDto
);
return
temporaryClockDto
;
}
/**
* 查询打卡图片
*/
private
void
findClockPhoto
(
TemporaryClockDto
temporaryClockDto
)
{
if
(
Objects
.
isNull
(
temporaryClockDto
))
{
return
;
}
Map
<
Integer
,
String
>
photoGroup
=
temporaryActivityPhotoDao
.
findClockPhotoGroupByClockId
(
temporaryClockDto
.
getId
());
temporaryClockDto
.
setClockInPhoto
(
photoGroup
.
get
(
ActivityPhotoType
.
CLOCK_IN
.
getType
()));
temporaryClockDto
.
setNoonClockOutPhoto
(
photoGroup
.
get
(
ActivityPhotoType
.
NOON_CLOCK_OUT
.
getType
()));
temporaryClockDto
.
setNoonClockInPhoto
(
photoGroup
.
get
(
ActivityPhotoType
.
NOON_CLOCK_IN
.
getType
()));
temporaryClockDto
.
setClockOutPhoto
(
photoGroup
.
get
(
ActivityPhotoType
.
CLOCK_OUT
.
getType
()));
log
.
info
(
"查询打卡记录{}的所有图片:{}"
,
temporaryClockDto
.
getId
(),
photoGroup
);
}
}
src/main/java/com/wangxiaolu/promotion/service/activity/temporary/impl/TemporaryActivityCoreServiceImpl.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
service
.
activity
.
temporary
.
impl
;
import
com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityClockDao
;
import
com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityLogDao
;
import
com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityPhotoDao
;
import
com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityReportedDao
;
import
com.wangxiaolu.promotion.domain.user.dao.QinCeClienteleStoreDao
;
import
com.wangxiaolu.promotion.domain.user.dao.TemporaryInfoDao
;
import
com.wangxiaolu.promotion.domain.user.wrapperQo.StoreWrapper
;
import
com.wangxiaolu.promotion.enums.activity.ActivityPhotoType
;
import
com.wangxiaolu.promotion.enums.activity.ClockType
;
import
com.wangxiaolu.promotion.enums.activity.LogType
;
import
com.wangxiaolu.promotion.enums.activity.TemActApproveStatus
;
import
com.wangxiaolu.promotion.exception.FlowException
;
import
com.wangxiaolu.promotion.exception.ParamException
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto
;
import
com.wangxiaolu.promotion.pojo.user.dto.QinCeClienteleStoreDto
;
import
com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto
;
import
com.wangxiaolu.promotion.result.basedata.RCode
;
import
com.wangxiaolu.promotion.service.activity.temporary.TemporaryActivityCoreService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
java.util.Objects
;
/**
* @author : liqiulin
* @date : 2024-04-18 11
* @describe :
*/
@Service
@Slf4j
public
class
TemporaryActivityCoreServiceImpl
implements
TemporaryActivityCoreService
{
@Autowired
private
TemporaryActivityReportedDao
temporaryActivityReportedDao
;
@Autowired
private
TemporaryActivityClockDao
temporaryActivityClockDao
;
@Autowired
private
QinCeClienteleStoreDao
qinCeClienteleStoreDao
;
@Autowired
private
TemporaryActivityPhotoDao
tempActivityPhotoDao
;
@Autowired
private
TemporaryActivityLogDao
tempActivityLogDao
;
@Autowired
private
TemporaryInfoDao
temporaryInfoDao
;
/**
* 活动上报保存
*
* @return 生成id
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
long
activityDataReportedSave
(
TemporaryActivityReportedDto
temActDto
)
{
// 判断是否已存在上报数据
TemporaryActivityReportedDto
haveDate
=
temporaryActivityReportedDao
.
findOneByCurrentDate
(
temActDto
.
getTemporaryId
());
if
(
Objects
.
nonNull
(
haveDate
))
{
throw
new
FlowException
(
RCode
.
DATA_HAVE_ERROR
,
null
);
}
// 初始化任务状态:已保存
temActDto
.
setApproveStatus
(
TemActApproveStatus
.
SUBMITTED
);
// 根据storeQcId查询店铺信息,进行店铺信息补充
QinCeClienteleStoreDto
storeDto
=
qinCeClienteleStoreDao
.
getOneStore
(
new
StoreWrapper
().
setQcId
(
temActDto
.
getStoreQcId
()));
temActDto
.
setStoreName
(
storeDto
.
getStoreName
()).
setStoreAddr
(
storeDto
.
getStoreAddr
());
// 保存活动数据 temporary_activity_reported
long
reportedId
=
temporaryActivityReportedDao
.
activityDataSave
(
temActDto
);
temActDto
.
setId
(
reportedId
);
// 保存图片
saveActivityPhoto
(
temActDto
);
// 日志保存
tempActivityLogDao
.
save
(
temActDto
.
getTemporaryId
(),
temActDto
.
getTemporaryName
(),
LogType
.
t_2
,
temActDto
.
getId
(),
temActDto
);
return
reportedId
;
}
/**
* 活动信息修改
* 1、判断活动是否可以修改
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
void
activityDataReportedUpdate
(
TemporaryActivityReportedDto
temActDto
)
{
// 图片增量保存
saveActivityPhoto
(
temActDto
);
temporaryActivityReportedDao
.
updateById
(
temActDto
);
// 日志保存
tempActivityLogDao
.
save
(
temActDto
.
getTemporaryId
(),
temActDto
.
getTemporaryName
(),
LogType
.
t_2
,
temActDto
.
getId
(),
temActDto
);
}
/**
* 促销员当日打卡信息保存
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
void
clockInTodayActivity
(
TemporaryClockDto
dto
,
Integer
clockType
)
{
log
.
info
(
"促销员当日打卡[type-{}]信息保存:{}"
,
clockType
,
dto
.
toString
());
if
(
Objects
.
isNull
(
dto
.
getId
()))
{
temporaryActivityClockDao
.
save
(
dto
);
}
else
{
temporaryActivityClockDao
.
updateById
(
dto
);
}
// 根据ID保存图片
saveClockPhoto
(
dto
,
clockType
);
// 日志保存
tempActivityLogDao
.
save
(
dto
.
getTemporaryId
(),
dto
.
getTemporaryName
(),
LogType
.
t_1
,
dto
.
getId
(),
dto
);
}
/**
* 修改审批状态
*
* @param id 上报记录id
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
void
activityReportedSubmit
(
Long
id
)
{
// 判断此id任务是否存在,并且是否满足提交审批条件
TemporaryActivityReportedDto
reportedDto
=
temporaryActivityReportedDao
.
findOneById
(
id
);
if
(
Objects
.
isNull
(
reportedDto
)){
throw
new
ParamException
(
RCode
.
DATA_NOT_HAVE_ERROR
,
null
);
}
TemActApproveStatus
approveStatus
=
reportedDto
.
getApproveStatus
();
if
(!
TemActApproveStatus
.
SUBMITTED
.
name
().
equals
(
approveStatus
.
name
())
&&
!
TemActApproveStatus
.
SEND_BACK
.
name
().
equals
(
approveStatus
.
name
()))
{
throw
new
FlowException
(
RCode
.
STATUS_UPDATE_ERROR
,
null
);
}
// 查询促销员负责人,将人员补充到审批中
WxTemporaryInfoDto
wxTemporaryInfoDto
=
temporaryInfoDao
.
selectOneById
(
reportedDto
.
getTemporaryId
());
TemporaryActivityReportedDto
updateDto
=
new
TemporaryActivityReportedDto
()
.
setId
(
id
)
.
setApproveName
(
wxTemporaryInfoDto
.
getChargerName
())
.
setApproveStatus
(
TemActApproveStatus
.
IN_APPROVAL
);
// 修改审批
temporaryActivityReportedDao
.
updateById
(
updateDto
);
// 日志保存
tempActivityLogDao
.
save
(
reportedDto
.
getTemporaryId
(),
reportedDto
.
getTemporaryName
(),
LogType
.
t_3
,
updateDto
.
getId
(),
updateDto
);
}
/**
* 推广活动照片保存
*
* @param temActDto 活动提交数据
*/
private
void
saveActivityPhoto
(
TemporaryActivityReportedDto
temActDto
)
{
Integer
temporaryId
=
temActDto
.
getTemporaryId
();
Long
reportedId
=
temActDto
.
getId
();
// 推广试吃照片
if
(!
CollectionUtils
.
isEmpty
(
temActDto
.
getTgscPhotoUrls
()))
{
tempActivityPhotoDao
.
saveReportedList
(
temporaryId
,
reportedId
,
ActivityPhotoType
.
TGSC
.
getType
(),
temActDto
.
getTgscPhotoUrls
(),
temActDto
.
getTgscChangePhotoUrls
());
}
// 推广互动照片
if
(!
CollectionUtils
.
isEmpty
(
temActDto
.
getTghdPhotoUrls
()))
{
tempActivityPhotoDao
.
saveReportedList
(
temporaryId
,
reportedId
,
ActivityPhotoType
.
TGHD
.
getType
(),
temActDto
.
getTghdPhotoUrls
(),
temActDto
.
getTghdChangePhotoUrls
());
}
// 推广成交照片
if
(!
CollectionUtils
.
isEmpty
(
temActDto
.
getTgcjPhotoUrls
()))
{
tempActivityPhotoDao
.
saveReportedList
(
temporaryId
,
reportedId
,
ActivityPhotoType
.
TGCJ
.
getType
(),
temActDto
.
getTgcjPhotoUrls
(),
temActDto
.
getTgcjChangePhotoUrls
());
}
log
.
info
(
"促销员今日活动上报-图片保存成功,关联活动上报数据id[{}],数据信息:{}"
,
temActDto
.
getId
(),
temActDto
);
}
/**
* 促销员上班打卡图片保存
*/
private
void
saveClockPhoto
(
TemporaryClockDto
dto
,
Integer
clockType
)
{
// 上班卡、午休下班卡、午休上班卡、下班卡
if
(
ClockType
.
TEMPORARY_CLOCK_IN
.
equals
(
clockType
))
{
tempActivityPhotoDao
.
saveClockPhoto
(
dto
.
getTemporaryId
(),
dto
.
getId
(),
ActivityPhotoType
.
CLOCK_IN
.
getType
(),
dto
.
getClockInPhoto
());
}
else
if
(
ClockType
.
TEMPORARY_NOON_CLOCK_OUT
.
equals
(
clockType
))
{
tempActivityPhotoDao
.
saveClockPhoto
(
dto
.
getTemporaryId
(),
dto
.
getId
(),
ActivityPhotoType
.
NOON_CLOCK_OUT
.
getType
(),
dto
.
getNoonClockOutPhoto
());
}
else
if
(
ClockType
.
TEMPORARY_NOON_CLOCK_IN
.
equals
(
clockType
))
{
tempActivityPhotoDao
.
saveClockPhoto
(
dto
.
getTemporaryId
(),
dto
.
getId
(),
ActivityPhotoType
.
NOON_CLOCK_IN
.
getType
(),
dto
.
getNoonClockInPhoto
());
}
else
if
(
ClockType
.
TEMPORARY_CLOCK_OUT
.
equals
(
clockType
))
{
tempActivityPhotoDao
.
saveClockPhoto
(
dto
.
getTemporaryId
(),
dto
.
getId
(),
ActivityPhotoType
.
CLOCK_OUT
.
getType
(),
dto
.
getClockOutPhoto
());
}
}
}
src/main/java/com/wangxiaolu/promotion/service/activity/temporary/impl/TemporaryActivityQueryServiceImpl.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
service
.
activity
.
temporary
.
impl
;
import
com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityPhotoDao
;
import
com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityReportedDao
;
import
com.wangxiaolu.promotion.enums.activity.ActivityPhotoType
;
import
com.wangxiaolu.promotion.pojo.PageInfo
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto
;
import
com.wangxiaolu.promotion.service.activity.temporary.TemporaryActivityQueryService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Objects
;
/**
* @author : liqiulin
* @date : 2024-04-18 13
* @describe :
*/
@Service
@Slf4j
public
class
TemporaryActivityQueryServiceImpl
implements
TemporaryActivityQueryService
{
@Autowired
TemporaryActivityReportedDao
temporaryActivityReportedDao
;
@Autowired
TemporaryActivityPhotoDao
temporaryActivityPhotoDao
;
/**
* 根据促销员id查询所有任务
*/
@Override
public
void
findtemporaryIdActivityDataList
(
Integer
temporaryId
,
PageInfo
pageInfo
)
{
temporaryActivityReportedDao
.
findListByTemporaryId
(
temporaryId
,
pageInfo
);
}
/**
* 根据促销员id查询今日任务
*/
@Override
public
TemporaryActivityReportedDto
findtemporaryIdTodayActivityData
(
Integer
temporaryId
)
{
TemporaryActivityReportedDto
dto
=
temporaryActivityReportedDao
.
findOneByCurrentDate
(
temporaryId
);
findActivityReportedPhoto
(
dto
);
return
dto
;
}
@Override
public
TemporaryActivityReportedDto
findTemporaryActivityById
(
Long
activityId
)
{
TemporaryActivityReportedDto
dto
=
temporaryActivityReportedDao
.
findOneById
(
activityId
);
findActivityReportedPhoto
(
dto
);
return
dto
;
}
private
void
findActivityReportedPhoto
(
TemporaryActivityReportedDto
dto
)
{
if
(
Objects
.
isNull
(
dto
))
{
return
;
}
Map
<
Integer
,
List
<
String
>>
reportedGroup
=
temporaryActivityPhotoDao
.
findReportedGroup
(
dto
.
getTemporaryId
(),
dto
.
getId
());
if
(!
CollectionUtils
.
isEmpty
(
reportedGroup
))
{
dto
.
setTgscPhotoUrls
(
reportedGroup
.
get
(
ActivityPhotoType
.
TGSC
.
getType
()));
dto
.
setTghdPhotoUrls
(
reportedGroup
.
get
(
ActivityPhotoType
.
TGHD
.
getType
()));
dto
.
setTgcjPhotoUrls
(
reportedGroup
.
get
(
ActivityPhotoType
.
TGCJ
.
getType
()));
}
}
}
src/main/java/com/wangxiaolu/promotion/service/user/QinCeClienteleDataQueryService.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
service
.
user
;
import
com.wangxiaolu.promotion.pojo.user.dto.QinCeClienteleStoreDto
;
import
com.wangxiaolu.promotion.pojo.user.vo.ClienteleStoreQueryVo
;
import
java.util.List
;
/**
* @author : liqiulin
* @date : 2024-04-22 17
* @describe :
*/
public
interface
QinCeClienteleDataQueryService
{
List
<
QinCeClienteleStoreDto
>
getStoreList
(
ClienteleStoreQueryVo
storeQueryVo
);
}
src/main/java/com/wangxiaolu/promotion/service/user/QinCeDataTaskService.java
浏览文件 @
8a07f30e
...
...
@@ -9,4 +9,7 @@ public interface QinCeDataTaskService {
void
departmentSyncTask
();
void
employeeSyncTask
();
void
shopDetailAllTask
();
}
src/main/java/com/wangxiaolu/promotion/service/user/TencentCoreService.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
service
.
user
;
/**
* @author : liqiulin
* @date : 2024-04-15 15
* @describe :
*/
public
interface
TencentCoreService
{
/**
* 发送手机号验证码
* @param phone 手机号
*/
void
sendSmsPhoneVerCode
(
String
phone
);
}
src/main/java/com/wangxiaolu/promotion/service/user/impl/QinCeClienteleDataQueryServiceImpl.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
service
.
user
.
impl
;
import
com.wangxiaolu.promotion.domain.user.dao.QinCeClienteleStoreDao
;
import
com.wangxiaolu.promotion.domain.user.wrapperQo.StoreWrapper
;
import
com.wangxiaolu.promotion.pojo.user.dto.QinCeClienteleStoreDto
;
import
com.wangxiaolu.promotion.pojo.user.vo.ClienteleStoreQueryVo
;
import
com.wangxiaolu.promotion.service.user.QinCeClienteleDataQueryService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
/**
* @author : liqiulin
* @date : 2024-04-22 17
* @describe :
*/
@Slf4j
@Service
public
class
QinCeClienteleDataQueryServiceImpl
implements
QinCeClienteleDataQueryService
{
@Autowired
QinCeClienteleStoreDao
qinCeClienteleStoreDao
;
@Override
public
List
<
QinCeClienteleStoreDto
>
getStoreList
(
ClienteleStoreQueryVo
storeQueryVo
)
{
StoreWrapper
sw
=
new
StoreWrapper
();
BeanUtils
.
copyProperties
(
storeQueryVo
,
sw
);
return
qinCeClienteleStoreDao
.
getStoreList
(
sw
);
}
}
src/main/java/com/wangxiaolu/promotion/service/user/impl/QinCeDataTaskServiceImpl.java
浏览文件 @
8a07f30e
...
...
@@ -2,6 +2,7 @@ package com.wangxiaolu.promotion.service.user.impl;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.wangxiaolu.promotion.domain.user.dao.QinCeClienteleStoreDao
;
import
com.wangxiaolu.promotion.domain.user.dao.QinCeDepartmentDao
;
import
com.wangxiaolu.promotion.domain.user.dao.QinCeEmployeeDao
;
import
com.wangxiaolu.promotion.service.user.QinCeDataTaskService
;
...
...
@@ -22,18 +23,20 @@ import java.util.Map;
@Service
public
class
QinCeDataTaskServiceImpl
implements
QinCeDataTaskService
{
@Autowired
QinCeUtils
qinCeUtils
;
@Autowired
QinCeDepartmentDao
qinCeDepartmentDao
;
@Autowired
QinCeEmployeeDao
qinCeEmployeeDao
;
@Autowired
QinCe
Utils
qinCeUtils
;
QinCe
ClienteleStoreDao
qinCeClienteleShopDao
;
@Override
public
void
departmentSyncTask
()
{
// 查询组织架构参数、创建url
Map
<
String
,
Object
>
params
=
qinCeUtils
.
queryOrgParam
();
String
url
=
qinCeUtils
.
builderUrl
(
QinCeUtils
.
QUERY_ORGANIZATION
,
params
);
String
url
=
qinCeUtils
.
builderUrl
(
QinCeUtils
.
QUERY_ORGANIZATION
,
params
);
// 发起请求、接收结果
JSONObject
resultJson
=
OkHttp
.
post
(
url
,
params
);
...
...
@@ -51,7 +54,7 @@ public class QinCeDataTaskServiceImpl implements QinCeDataTaskService {
public
void
employeeSyncTask
()
{
// 查询组织架构参数、创建url
Map
<
String
,
Object
>
params
=
qinCeUtils
.
queryEmployeeParam
(
false
);
String
url
=
qinCeUtils
.
builderUrl
(
QinCeUtils
.
QUERY_EMPLOYEE
,
params
);
String
url
=
qinCeUtils
.
builderUrl
(
QinCeUtils
.
QUERY_EMPLOYEE
,
params
);
// 发起请求、接收结果
JSONObject
resultJson
=
OkHttp
.
post
(
url
,
params
);
...
...
@@ -64,4 +67,24 @@ public class QinCeDataTaskServiceImpl implements QinCeDataTaskService {
qinCeEmployeeDao
.
employeeSyncTask
(
responseDatas
);
}
/**
* 同步[终端数据]
*/
@Override
public
void
shopDetailAllTask
()
{
Map
<
String
,
Object
>
params
=
qinCeUtils
.
queryShopParam
();
String
url
=
qinCeUtils
.
builderUrl
(
QinCeUtils
.
QUERY_SHORE
,
params
);
// 发起请求、接收结果
JSONObject
resultJson
=
OkHttp
.
post
(
url
,
params
);
JSONArray
responseDatas
=
resultJson
.
getJSONArray
(
"response_data"
);
if
(
responseDatas
.
size
()
<=
0
)
{
log
.
error
(
"勤策-同步人员数据,未查询到数据"
);
return
;
}
log
.
info
(
"勤策-同步终端数据,查询到数据「{}」条"
,
responseDatas
.
size
());
qinCeClienteleShopDao
.
shopDetailAllTask
(
responseDatas
);
}
}
src/main/java/com/wangxiaolu/promotion/service/user/impl/TencentCoreServiceImpl.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
service
.
user
.
impl
;
import
com.wangxiaolu.promotion.common.redis.RedisKeys
;
import
com.wangxiaolu.promotion.common.redis.service.RedisCache
;
import
com.wangxiaolu.promotion.exception.ParamException
;
import
com.wangxiaolu.promotion.result.basedata.RCode
;
import
com.wangxiaolu.promotion.service.user.TencentCoreService
;
import
com.wangxiaolu.promotion.utils.DataUtils
;
import
com.wangxiaolu.promotion.utils.TencentUtils
;
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
;
/**
* @author : liqiulin
* @date : 2024-04-15 15
* @describe :
*/
@Slf4j
@Service
public
class
TencentCoreServiceImpl
implements
TencentCoreService
{
@Value
(
"${tengxunyun.sms.overdue_long}"
)
private
long
overdueLong
;
@Autowired
TencentUtils
tencentUtils
;
@Autowired
RedisCache
redisCache
;
@Override
public
void
sendSmsPhoneVerCode
(
String
phone
)
{
String
redisKey
=
RedisKeys
.
UserKeys
.
PHONE_VER_CODE
.
getKey
()
+
phone
;
// 判断是否已获取
String
verCodeOld
=
redisCache
.
get
(
redisKey
);
if
(
StringUtils
.
isNotBlank
(
verCodeOld
)){
throw
new
ParamException
(
RCode
.
TENCENT_SMS_REPETITION
,
null
);
}
// 生成6位验证码
String
phoneVerCode
=
DataUtils
.
phoneVerCode
();
log
.
info
(
"腾讯云短信,发送验证码:{}-{}"
,
phone
,
phoneVerCode
);
redisCache
.
addToMinute
(
redisKey
,
phoneVerCode
,
overdueLong
);
boolean
succss
=
tencentUtils
.
sendSmsPhoneVerCode
(
phone
,
phoneVerCode
);
// boolean succss = true;
if
(!
succss
)
{
redisCache
.
removeKey
(
redisKey
);
log
.
info
(
"腾讯云短信发送失败:删除验证码:{}-{}"
,
phone
,
phoneVerCode
);
}
}
}
src/main/java/com/wangxiaolu/promotion/service/wechat/WeChatUserCoreService.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
service
.
wechat
;
import
com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto
;
/**
* @author : liqiulin
* @date : 2024-04-08 16
* @describe :微信信息操作
*/
public
interface
WeChatUserCoreService
{
/**
* 保存促销员用户信息
*/
boolean
saveWxUserInfoTemporary
(
WxTemporaryInfoDto
temporaryDto
);
}
src/main/java/com/wangxiaolu/promotion/service/wechat/WeChatUserQueryService.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
service
.
wechat
;
import
com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto
;
/**
* @author : liqiulin
* @date : 2024-04-09 18
* @describe :微信人员信息查询
*/
public
interface
WeChatUserQueryService
{
boolean
loginTemporaryByOpenIdAndPhone
(
String
openId
,
String
phone
);
WxTemporaryInfoDto
getTemporaryInfoByOpenIdAndPhone
(
String
openId
,
String
phone
);
}
src/main/java/com/wangxiaolu/promotion/service/wechat/impl/WeChatUserCoreServiceImpl.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
service
.
wechat
.
impl
;
import
com.alibaba.fastjson.JSONObject
;
import
com.wangxiaolu.promotion.domain.user.dao.QinCeEmployeeDao
;
import
com.wangxiaolu.promotion.domain.user.dao.TemporaryInfoDao
;
import
com.wangxiaolu.promotion.exception.ParamException
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.dto.QinCeEmployeeDto
;
import
com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto
;
import
com.wangxiaolu.promotion.result.basedata.RCode
;
import
com.wangxiaolu.promotion.service.wechat.WeChatUserCoreService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.Objects
;
/**
* @author : liqiulin
* @date : 2024-04-08 16
* @describe :微信用户信息操作
*/
@Slf4j
@Service
public
class
WeChatUserCoreServiceImpl
implements
WeChatUserCoreService
{
@Autowired
TemporaryInfoDao
temporaryInfoDao
;
@Autowired
QinCeEmployeeDao
qinCeEmployeeDao
;
/**
* 保存促销员用户信息
*/
@Override
public
boolean
saveWxUserInfoTemporary
(
WxTemporaryInfoDto
temporaryDto
)
{
// 根据chargerQcId查询人员详情
QinCeEmployeeDto
qcEmpDto
=
qinCeEmployeeDao
.
selectOntByQcId
(
temporaryDto
.
getChargerQcId
());
if
(
Objects
.
isNull
(
qcEmpDto
)){
throw
new
ParamException
(
RCode
.
CHARGER_ID_ERROR
,
null
);
}
temporaryDto
.
setChargerName
(
qcEmpDto
.
getEmpName
());
int
saveId
=
temporaryInfoDao
.
saveWxTemporaryInfo
(
temporaryDto
);
log
.
info
(
"微信-促销员[{}]:[{}]注册成功:{}"
,
saveId
,
temporaryDto
.
getName
(),
JSONObject
.
toJSONString
(
temporaryDto
));
return
saveId
>
0
;
}
}
src/main/java/com/wangxiaolu/promotion/service/wechat/impl/WeChatUserQueryServiceImpl.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
service
.
wechat
.
impl
;
import
com.alibaba.fastjson.JSONObject
;
import
com.wangxiaolu.promotion.common.redis.RedisKeys
;
import
com.wangxiaolu.promotion.common.redis.service.RedisCache
;
import
com.wangxiaolu.promotion.domain.user.dao.TemporaryInfoDao
;
import
com.wangxiaolu.promotion.exception.ParamException
;
import
com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto
;
import
com.wangxiaolu.promotion.result.basedata.RCode
;
import
com.wangxiaolu.promotion.service.wechat.WeChatUserQueryService
;
import
com.wangxiaolu.promotion.utils.JwtUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.Objects
;
/**
* @author : liqiulin
* @date : 2024-04-09 18
* @describe :微信人员信息查询
*/
@Service
public
class
WeChatUserQueryServiceImpl
implements
WeChatUserQueryService
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
WeChatUserQueryServiceImpl
.
class
);
@Autowired
TemporaryInfoDao
temporaryInfoDao
;
@Autowired
RedisCache
redisCache
;
@Autowired
JwtUtils
jwtUtils
;
/**
* 根据openId、手机号登录
*/
@Override
public
boolean
loginTemporaryByOpenIdAndPhone
(
String
openId
,
String
phone
)
{
WxTemporaryInfoDto
temDto
=
temporaryInfoDao
.
getUnimportantData
(
openId
,
phone
);
boolean
exist
=
!
Objects
.
isNull
(
temDto
);
if
(
exist
)
{
log
.
info
(
"微信-促销员{}登录成功(openId、手机号),openId:{},phone:{}"
,
temDto
.
getName
(),
openId
,
phone
);
log
.
info
(
JSONObject
.
toJSONString
(
temDto
));
}
else
{
log
.
info
(
"微信-促销员登录失败,当前信息未注册(openId、手机号),openId:{},phone:{}"
,
openId
,
phone
);
}
return
exist
;
}
@Override
public
WxTemporaryInfoDto
getTemporaryInfoByOpenIdAndPhone
(
String
openId
,
String
phone
)
{
return
temporaryInfoDao
.
getUnimportantData
(
openId
,
phone
);
}
}
src/main/java/com/wangxiaolu/promotion/utils/DataUtils.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
utils
;
import
java.util.Random
;
import
java.util.regex.Pattern
;
/**
* 人员信息校验
*/
public
class
DataUtils
{
private
static
final
String
ID_CARD_PATTERN
=
"^[1-9]\\d{5}(19|20)\\d{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2]\\d|3[0-1])|(04|06|09|11)(0[1-9]|[1-2]\\d|30)|02(0[1-9]|[1-2]\\d))\\d{3}[\\dXx]$"
;
private
static
final
String
PHONE_NUMBER_PATTERN
=
"^1[3-9]\\d{9}$"
;
/**
* 身份证号检验
*/
public
static
boolean
idenCardPattern
(
String
idCard
)
{
return
Pattern
.
matches
(
ID_CARD_PATTERN
,
idCard
);
}
/**
* 手机号验证,是否合法
*
* @param phoneNumber 手机号
* @return 是否合法
*/
public
static
boolean
phonePattern
(
String
phoneNumber
)
{
return
phoneNumber
.
matches
(
PHONE_NUMBER_PATTERN
);
}
/**
* 生成6位数字验证码
*/
public
static
String
phoneVerCode
()
{
String
code
=
""
;
Random
random
=
new
Random
();
for
(
int
i
=
0
;
i
<
6
;
i
++)
{
int
ri
=
random
.
nextInt
(
10
);
code
+=
ri
;
}
return
code
;
}
}
src/main/java/com/wangxiaolu/promotion/utils/DateUtils.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
utils
;
import
cn.hutool.core.date.DatePattern
;
import
cn.hutool.core.date.DateUtil
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
/**
* @author : liqiulin
* @date : 2024-04-23 15
* @describe : 时间工具类
*/
public
class
DateUtils
{
/**
* 判断时间是否是范围内
* 入参时间格式:"00:00:00"
*/
public
static
boolean
parseTime
(
Date
date
,
String
beginTime
,
String
endTime
)
{
try
{
String
today
=
DateUtil
.
today
();
String
format
=
DatePattern
.
NORM_DATETIME_PATTERN
;
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
format
);
Date
beginTimeD
=
sdf
.
parse
(
today
+
" "
+
beginTime
);
Date
endTimeD
=
sdf
.
parse
(
today
+
" "
+
endTime
);
return
DateUtil
.
isIn
(
date
,
beginTimeD
,
endTimeD
);
}
catch
(
ParseException
e
)
{
throw
new
RuntimeException
(
e
);
}
}
}
src/main/java/com/wangxiaolu/promotion/utils/JwtUtils.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
utils
;
import
com.auth0.jwt.JWT
;
import
com.auth0.jwt.JWTVerifier
;
import
com.auth0.jwt.algorithms.Algorithm
;
import
com.auth0.jwt.interfaces.DecodedJWT
;
import
com.wangxiaolu.promotion.exception.ParamException
;
import
com.wangxiaolu.promotion.result.basedata.RCode
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
/**
* @author : liqiulin
* @date : 2024-04-16 17
* @describe : java web token
*/
@Slf4j
@Component
public
class
JwtUtils
{
/**
* 促销员-解密秘钥
*/
@Value
(
"${wx.miniapp.temporary.token_secret}"
)
private
String
TEMPORARY_SECRET
;
public
String
getTemporaryToken
(
String
openId
,
String
phone
)
{
try
{
//用秘钥生成签名
Algorithm
algorithm
=
Algorithm
.
HMAC256
(
TEMPORARY_SECRET
);
//默认头部+载荷(手机号/id)+签名=jwt
String
jwtToken
=
JWT
.
create
()
.
withClaim
(
"openId"
,
openId
)
.
withClaim
(
"phone"
,
phone
)
.
sign
(
algorithm
);
return
jwtToken
;
}
catch
(
Exception
e
)
{
log
.
error
(
"用户{}的token生成异常:{}"
,
openId
,
e
);
throw
new
ParamException
(
RCode
.
LOGIN_PARAM_ERROR
,
e
.
getMessage
());
}
}
/**
* 校验token是否正确
**/
public
boolean
verifyTemporaryToken
(
String
token
,
String
openId
,
String
phone
)
{
try
{
// 生成JWT效验器
Algorithm
algorithm
=
Algorithm
.
HMAC256
(
TEMPORARY_SECRET
);
JWTVerifier
verifier
=
JWT
.
require
(
algorithm
).
build
();
verifier
.
verify
(
token
);
return
true
;
// DecodedJWT jwt = JWT.decode(token);
// if (
// openId.equals(jwt.getClaim("openId").asString())
// && phone.equals(jwt.getClaim("phone").asString())
// ){
// return true;
// }
// return false;
}
catch
(
Exception
e
)
{
log
.
error
(
"用户{}的token解析异常:{}"
,
openId
,
e
);
throw
new
ParamException
(
RCode
.
LOGIN_PARAM_ERROR
,
e
.
getMessage
());
}
}
}
src/main/java/com/wangxiaolu/promotion/utils/OkHttp.java
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
utils
;
import
cn.hutool.http.HttpUtil
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
java.util.Map
;
...
...
@@ -14,14 +13,12 @@ import java.util.Map;
public
class
OkHttp
{
public
static
JSONObject
post
(
String
url
,
Map
<
String
,
Object
>
params
)
{
String
requestBody
=
HttpUtil
.
createPost
(
url
).
contentType
(
"application/json;charset=utf-8"
).
body
(
JSONObject
.
toJSONString
(
params
)).
execute
().
body
();
String
requestBody
=
HttpUtil
.
createPost
(
url
).
contentType
(
"application/json;charset=utf-8"
).
body
(
JSONObject
.
toJSONString
(
params
)).
execute
().
body
();
JSONObject
resultJson
=
JSONObject
.
parseObject
(
requestBody
);
String
returnCode
=
resultJson
.
getString
(
"return_code"
);
if
(!
"0"
.
equals
(
returnCode
)){
if
(!
"0"
.
equals
(
returnCode
))
{
throw
new
RuntimeException
(
"OkHttp.post请求error,详情:"
+
requestBody
);
}
return
resultJson
;
}
}
src/main/java/com/wangxiaolu/promotion/utils/QinCeUtils.java
浏览文件 @
8a07f30e
...
...
@@ -3,6 +3,7 @@ package com.wangxiaolu.promotion.utils;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.codec.digest.DigestUtils
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
...
...
@@ -22,9 +23,12 @@ public class QinCeUtils {
/**
* =================== 勤策API - config ===================
*/
private
static
final
String
OPEN_API
=
"https://openapi.region2.qince.com"
;
private
static
final
String
OPEN_ID
=
"8030282350124307682"
;
private
static
final
String
APP_KEY
=
"Gx0yQw4UhDtNjESmDl"
;
@Value
(
"${qince.open_api}"
)
private
String
OPEN_API
;
@Value
(
"${qince.open_id}"
)
private
String
OPEN_ID
;
@Value
(
"${qince.app_key}"
)
private
String
APP_KEY
;
/**
...
...
@@ -34,6 +38,8 @@ public class QinCeUtils {
public
static
final
String
QUERY_ORGANIZATION
=
"/api/organization/v1/queryOrganization/"
;
// 员工列表
public
static
final
String
QUERY_EMPLOYEE
=
"/api/employee/v3/queryEmployee/"
;
// 终端(商店)列表
public
static
final
String
QUERY_SHORE
=
"/api/store/v1/queryStore/"
;
public
String
builderUrl
(
String
sidepath
,
Map
<
String
,
Object
>
params
)
{
String
msgId
=
UUID
.
randomUUID
().
toString
();
...
...
@@ -45,7 +51,7 @@ public class QinCeUtils {
}
/**
* 查询
部门
参数
* 查询
[部门]
参数
*/
public
Map
<
String
,
Object
>
queryOrgParam
()
{
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
...
...
@@ -60,12 +66,12 @@ public class QinCeUtils {
}
/**
* 查询
人员
参数
* 查询
[人员]
参数
*/
public
Map
<
String
,
Object
>
queryEmployeeParam
(
boolean
queryId
)
{
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
// 根据来源勤策的员工唯一标识精确查询
if
(
queryId
){
if
(
queryId
)
{
params
.
put
(
"id"
,
""
);
}
...
...
@@ -88,13 +94,40 @@ public class QinCeUtils {
return
params
;
}
/**
* 查询[客户管理-终端]参数
*/
public
Map
<
String
,
Object
>
queryShopParam
()
{
HashMap
<
String
,
Object
>
params
=
new
HashMap
<>();
// 分页页码,默认1
params
.
put
(
"page_number"
,
"1"
);
// 记录状态。0:已删除,1:正常
// 0:已删除:客户回收站中的终端数据
params
.
put
(
"status"
,
""
);
// 勤策的门店唯一ID
params
.
put
(
"id"
,
""
);
// 来源于第三方系统的门店唯一ID,对应新增门店 (store_id)字段,只有当数据来源于新增接口时才有值,如果数据从勤策系统中直接创建则该字段值为空。 如果两个值同时存在则优先顺序为store_waiqin_id、store_id
params
.
put
(
"store_id"
,
""
);
// 门店名称,唯一
params
.
put
(
"store_name"
,
""
);
// 门店编码
params
.
put
(
"store_code"
,
""
);
// 根据门店客户经理标识查询
params
.
put
(
"store_manager_id"
,
""
);
// 门店类型编码,store_type、store_type_code如果同时存在优先取store_type_code
params
.
put
(
"store_type_code"
,
""
);
// 门店类型
params
.
put
(
"store_type"
,
""
);
// 门店所属销售区域,此字段需要销售区域的完整层级结构, 多层级间以“,”分隔,如:华中大区,南京分区,秦淮社区
params
.
put
(
"store_district"
,
""
);
return
params
;
}
private
String
getDigest
(
Map
<
String
,
Object
>
params
,
Long
currentTimeMillis
)
{
String
json
=
""
;
if
(!
CollectionUtils
.
isEmpty
(
params
))
{
json
=
JSONObject
.
toJSONString
(
params
);
}
System
.
out
.
println
(
json
+
"|"
+
APP_KEY
+
"|"
+
currentTimeMillis
);
String
digest
=
DigestUtils
.
md5Hex
(
json
+
"|"
+
APP_KEY
+
"|"
+
currentTimeMillis
);
return
digest
;
}
...
...
src/main/java/com/wangxiaolu/promotion/utils/TencentUtils.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
utils
;
import
com.tencentcloudapi.common.Credential
;
import
com.tencentcloudapi.common.exception.TencentCloudSDKException
;
import
com.tencentcloudapi.common.profile.ClientProfile
;
import
com.tencentcloudapi.common.profile.HttpProfile
;
import
com.tencentcloudapi.sms.v20210111.SmsClient
;
import
com.tencentcloudapi.sms.v20210111.models.SendSmsRequest
;
import
com.tencentcloudapi.sms.v20210111.models.SendSmsResponse
;
import
com.tencentcloudapi.sms.v20210111.models.SendStatus
;
import
com.wangxiaolu.promotion.exception.ParamException
;
import
com.wangxiaolu.promotion.result.basedata.RCode
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
/**
* @author : liqiulin
* @date : 2024-04-15 15
* @describe :
*/
@Slf4j
@Component
public
class
TencentUtils
{
/**
* tengxunyun.sms
*/
@Value
(
"${tengxunyun.secret_d}"
)
private
String
secretId
;
@Value
(
"${tengxunyun.secret_key}"
)
private
String
secretKey
;
/**
* tengxunyun.sms
*/
@Value
(
"${tengxunyun.sms.endpoint_beijing}"
)
private
String
endpointBeijing
;
@Value
(
"${tengxunyun.sms.ap_beijing}"
)
private
String
apBeijing
;
@Value
(
"${tengxunyun.sms.sdk_app_id_defult}"
)
private
String
sdkAppIdDefult
;
@Value
(
"${tengxunyun.sms.sign_name_a}"
)
private
String
signNameA
;
@Value
(
"${tengxunyun.sms.template_id_a}"
)
private
String
templateIdA
;
@Value
(
"${tengxunyun.sms.overdue_long}"
)
private
long
overdueLong
;
/**
* 给指定手机号发送验证码
*
* @param phone 手机号(1个)
*/
public
boolean
sendSmsPhoneVerCode
(
String
phone
,
String
phoneVerCode
)
{
String
signName
=
signNameA
;
String
templateId
=
templateIdA
;
String
[]
templateParamSet
=
{
phoneVerCode
,
Long
.
toString
(
overdueLong
)};
String
[]
phoneNumberSet
=
{
"+86"
+
phone
};
SendSmsResponse
res
=
sendSms
(
templateParamSet
,
phoneNumberSet
,
signName
,
templateId
);
SendStatus
sendStatus
=
res
.
getSendStatusSet
()[
0
];
if
(
StringUtils
.
isBlank
(
sendStatus
.
getCode
())
||
!
sendStatus
.
getCode
().
contains
(
"Ok"
))
{
return
false
;
}
return
true
;
}
/**
* 核心工具:发送短信
* @return 发送结果
*/
private
SendSmsResponse
sendSms
(
String
[]
templateParamSet
,
String
[]
phoneNumberSet
,
String
signName
,
String
templateId
)
{
try
{
// 必要步骤
// 1、实例化一个认证对象
Credential
cred
=
new
Credential
(
secretId
,
secretKey
);
// 2、实例化http选项,SDK默认使用POST方法,GET方法无法处理一些较大的请求(非必要不使用);SDK有默认的超时时间,非必要请不要进行调整
HttpProfile
httpProfile
=
new
HttpProfile
();
httpProfile
.
setReqMethod
(
"POST"
);
httpProfile
.
setConnTimeout
(
60
);
httpProfile
.
setEndpoint
(
endpointBeijing
);
// 非必要步骤
// 1、例化一个客户端配置对象
ClientProfile
clientProfile
=
new
ClientProfile
();
/* SDK默认用TC3-HMAC-SHA256进行签名
* 非必要请不要修改这个字段 */
clientProfile
.
setSignMethod
(
"HmacSHA256"
);
clientProfile
.
setHttpProfile
(
httpProfile
);
// 实例化sms(服务)的client对象
SmsClient
client
=
new
SmsClient
(
cred
,
apBeijing
,
clientProfile
);
/* 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数*/
SendSmsRequest
req
=
new
SendSmsRequest
();
req
.
setSmsSdkAppId
(
sdkAppIdDefult
);
req
.
setSignName
(
signName
);
req
.
setTemplateId
(
templateId
);
// 参数列表:index0:验证码;index1:过期时间(分钟)
req
.
setTemplateParamSet
(
templateParamSet
);
// 下发手机号码,采用E.164标准(+[国家或地区码][手机号]),最多不要超过200个手机号
req
.
setPhoneNumberSet
(
phoneNumberSet
);
/* 用户的 session 内容(无需要可忽略): 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
String
sessionContext
=
""
;
req
.
setSessionContext
(
sessionContext
);
/* 短信码号扩展号(无需要可忽略): 默认未开通,如需开通请联系 [腾讯云短信小助手] */
String
extendCode
=
""
;
req
.
setExtendCode
(
extendCode
);
/* 国内短信无需填写该项;国际/港澳台短信已申请独立 SenderId 需要填写该字段,默认使用公共 SenderId,无需填写该字段。注:月度使用量达到指定量级可申请独立 SenderId 使用,详情请联系 [腾讯云短信小助手](https://cloud.tencent.com/document/product/382/3773#.E6.8A.80.E6.9C.AF.E4.BA.A4.E6.B5.81)。*/
String
senderid
=
""
;
req
.
setSenderId
(
senderid
);
/* 通过 client 对象调用 SendSms 方法发起请求。注意请求方法名与请求对象是对应的
* 返回的 res 是一个 SendSmsResponse 类的实例,与请求对象对应 */
SendSmsResponse
res
=
client
.
SendSms
(
req
);
// 输出json格式的字符串回包,或者取出单个值:System.out.println(res.getRequestId());
log
.
info
(
"腾讯云-短信发送结果:{}"
,
SendSmsResponse
.
toJsonString
(
res
));
return
res
;
}
catch
(
TencentCloudSDKException
e
)
{
log
.
error
(
"腾讯云-短信服务,SMS发送异常:{}"
,
e
.
getMessage
());
throw
new
ParamException
(
RCode
.
TENCENT_SMS_ERROR
,
null
);
}
}
}
src/main/java/com/wangxiaolu/promotion/utils/WxMaUtils.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
utils
;
import
cn.binarywang.wx.miniapp.api.WxMaService
;
import
cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult
;
import
cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo
;
import
cn.binarywang.wx.miniapp.bean.WxMaUserInfo
;
import
lombok.AllArgsConstructor
;
import
me.chanjar.weixin.common.error.WxErrorException
;
import
org.springframework.stereotype.Component
;
/**
* @author : liqiulin
* @date : 2024-04-08 11
* @describe : 微信工具
*/
@AllArgsConstructor
@Component
public
class
WxMaUtils
{
private
final
WxMaService
wxMaService
;
/**
* 根据code查询openId
*/
public
String
getWxOpenId
(
String
jsCode
)
throws
WxErrorException
{
WxMaJscode2SessionResult
sessionInfo
=
wxMaService
.
getUserService
().
getSessionInfo
(
jsCode
);
String
openid
=
sessionInfo
.
getOpenid
();
return
openid
;
}
/**
* 微信用户信息解密
* (粗糙信息)
*/
public
String
decrUserInfo
(
String
jsCode
,
String
encryptedData
,
String
iv
)
{
WxMaJscode2SessionResult
sessionInfo
=
null
;
try
{
sessionInfo
=
wxMaService
.
getUserService
().
getSessionInfo
(
jsCode
);
String
openid
=
sessionInfo
.
getOpenid
();
String
sessionKey
=
sessionInfo
.
getSessionKey
();
WxMaPhoneNumberInfo
phoneNoInfo
=
wxMaService
.
getUserService
().
getPhoneNoInfo
(
sessionKey
,
encryptedData
,
iv
);
String
phoneNumber
=
phoneNoInfo
.
getPhoneNumber
();
WxMaUserInfo
userInfo
=
wxMaService
.
getUserService
().
getUserInfo
(
sessionKey
,
encryptedData
,
iv
);
}
catch
(
WxErrorException
e
)
{
throw
new
RuntimeException
(
e
);
}
return
null
;
}
}
src/main/resources/application-dev.yml
浏览文件 @
8a07f30e
spring
:
datasource
:
driver-class-name
:
com.mysql.jdbc.Driver
url
:
jdbc:mysql://bj-cdb-j8ppdy86.sql.tencentcdb.com:63569/promotion_dev?autoReconnect=true
username
:
LnNDBM
password
:
fd0%bhD4@oO(%
redis
:
port
:
21101
host
:
bj-crs-oyzhz3c6.sql.tencentcdb.com
database
:
0
password
:
u)R3jrHk(qwt~mv$Tg=U
logging
:
config
:
classpath:logback-spring.xml
async
:
executor
:
thread
:
core_pool_size
:
4
name
:
prefix
:
promotion-
wx
:
miniapp
:
configs
:
-
appid
:
wxac14dc7765484d7d
secret
:
b3315e66608a397f88e7e82b8f950bcd
token
:
#微信小程序消息服务器配置的token
aesKey
:
#微信小程序消息服务器配置的EncodingAESKey
msgDataFormat
:
JSON
temporary
:
token_secret
:
sXwHPj#U#xmim^ts
tengxunyun
:
# 腾讯云个人账号信息
secret_d
:
AKIDVt353sWyY0GXn0ANa0YyGdwDIBtjQwGS
secret_key
:
SBqJcrxypSxeGOPF81mLgsANXo3ALhz7
sms
:
#指定接入地域域名,默认就近地域接入域名为 sms.tencentcloudapi.com
endpoint_beijing
:
sms.ap-beijing.tencentcloudapi.com
#地域信息
ap_beijing
:
ap-beijing
#应用ID(默认应用)
sdk_app_id_defult
:
1400903035
#签名内容
sign_name_a
:
北京王小卤
#模板ID
template_id_a
:
2127434
#验证码过期时间(分钟)
overdue_long
:
5
qince
:
open_api
:
https://openapi.region2.qince.com
open_id
:
8030282350124307682
app_key
:
Gx0yQw4UhDtNjESmDl
# mybatis-plus 打印sql日志
mybatis-plus
:
configuration
:
log-impl
:
org.apache.ibatis.logging.slf4j.Slf4jImpl
\ No newline at end of file
src/main/resources/application-live.yml
0 → 100644
浏览文件 @
8a07f30e
spring
:
datasource
:
driver-class-name
:
com.mysql.jdbc.Driver
url
:
jdbc:192.168.0.3:3306/promotion?autoReconnect=true
username
:
NvqGbJXH
password
:
D9Y@FR,84B*$MD^A36&m
redis
:
port
:
7548
host
:
192.168.0.11
database
:
1
password
:
u)R3jrHk(qwt~mv$Tg=U
logging
:
config
:
classpath:logback-spring.xml
async
:
executor
:
thread
:
core_pool_size
:
4
name
:
prefix
:
promotion-
wx
:
miniapp
:
configs
:
-
appid
:
wxac14dc7765484d7d
secret
:
b3315e66608a397f88e7e82b8f950bcd
token
:
#微信小程序消息服务器配置的token
aesKey
:
#微信小程序消息服务器配置的EncodingAESKey
msgDataFormat
:
JSON
temporary
:
token_secret
:
sXwHPj#U#xmim^ts
tengxunyun
:
# 腾讯云个人账号信息
secret_d
:
AKIDVt353sWyY0GXn0ANa0YyGdwDIBtjQwGS
secret_key
:
SBqJcrxypSxeGOPF81mLgsANXo3ALhz7
sms
:
#指定接入地域域名,默认就近地域接入域名为 sms.tencentcloudapi.com
endpoint_beijing
:
sms.ap-beijing.tencentcloudapi.com
#地域信息
ap_beijing
:
ap-beijing
#应用ID(默认应用)
sdk_app_id_defult
:
1400903035
#签名内容
sign_name_a
:
北京王小卤
#模板ID
template_id_a
:
2127434
#验证码过期时间(分钟)
overdue_long
:
5
qince
:
open_api
:
https://openapi.region2.qince.com
open_id
:
8546408787259919799
app_key
:
oV0FHfMt81Tii2_kst
# mybatis-plus 打印sql日志
mybatis-plus
:
configuration
:
log-impl
:
org.apache.ibatis.logging.slf4j.Slf4jImpl
\ No newline at end of file
src/main/resources/application.yml
浏览文件 @
8a07f30e
...
...
@@ -4,21 +4,6 @@ server:
spring
:
application
:
name
:
wangxiaolu-promotion-service
profiles
:
active
:
dev
datasource
:
driver-class-name
:
com.mysql.jdbc.Driver
url
:
jdbc:mysql://bj-cdb-j8ppdy86.sql.tencentcdb.com:63569/promotion_dev?autoReconnect=true
username
:
LnNDBM
password
:
fd0%bhD4@oO(%
logging
:
config
:
classpath:logback-spring.xml
async
:
executor
:
thread
:
core_pool_size
:
4
name
:
prefix
:
promotion-
src/main/resources/logback-spring.xml
浏览文件 @
8a07f30e
...
...
@@ -21,7 +21,7 @@
</springProfile>
<springProfile
name=
"qa,live"
>
<property
name=
"LOG_PATH"
value=
"
./data
/logs/${APP_NAME}/${HOSTNAME}"
/>
<property
name=
"LOG_PATH"
value=
"
/var
/logs/${APP_NAME}/${HOSTNAME}"
/>
</springProfile>
<property
name=
"CONSOLE_LOG_PATTERN"
value=
"${CONSOLE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${HOSTNAME} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"
/>
...
...
src/main/resources/mapper/QinCeClienteleStoreMapper.xml
0 → 100644
浏览文件 @
8a07f30e
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.wangxiaolu.promotion.domain.user.mapper.QinCeClienteleStoreMapper"
>
<resultMap
id=
"BaseResultMap"
type=
"com.wangxiaolu.promotion.domain.user.mapper.entity.QinCeClienteleStoreDO"
>
<id
property=
"id"
column=
"id"
jdbcType=
"BIGINT"
/>
<result
property=
"qcId"
column=
"qc_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeId"
column=
"store_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"creatorWaiqinId"
column=
"creator_waiqin_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"creatorName"
column=
"creator_name"
jdbcType=
"VARCHAR"
/>
<result
property=
"creatorId"
column=
"creator_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"returnPoolReason"
column=
"return_pool_reason"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeName"
column=
"store_name"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeCode"
column=
"store_code"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeManager"
column=
"store_manager"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeManagerId"
column=
"store_manager_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeManagerWaiqin365Id"
column=
"store_manager_waiqin365_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeType"
column=
"store_type"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeTypeCode"
column=
"store_type_code"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeTypeId"
column=
"store_type_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeLevelId"
column=
"store_level_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeLevel"
column=
"store_level"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeDeptWaiqin365Id"
column=
"store_dept_waiqin365_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeDeptId"
column=
"store_dept_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeDeptName"
column=
"store_dept_name"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeDistrict"
column=
"store_district"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeDistrictFullPath"
column=
"store_district_full_path"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeDistrictWaiqin365Id"
column=
"store_district_waiqin365_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeThirdDistrictId"
column=
"store_third_district_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeMssProvince"
column=
"store_mss_province"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeMssProvinceCode"
column=
"store_mss_province_code"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeMssCity"
column=
"store_mss_city"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeMssCityCode"
column=
"store_mss_city_code"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeMssArea"
column=
"store_mss_area"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeMssAreaCode"
column=
"store_mss_area_code"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeMssStreet"
column=
"store_mss_street"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeMssStreetCode"
column=
"store_mss_street_code"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeAddr"
column=
"store_addr"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeCooperateStatusId"
column=
"store_cooperate_status_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeCooperateStatus"
column=
"store_cooperate_status"
jdbcType=
"CHAR"
/>
<result
property=
"storeKaSys"
column=
"store_ka_sys"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeTel"
column=
"store_tel"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeFax"
column=
"store_fax"
jdbcType=
"VARCHAR"
/>
<result
property=
"storePost"
column=
"store_post"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeRemarks"
column=
"store_remarks"
jdbcType=
"VARCHAR"
/>
<result
property=
"tradingareaBig"
column=
"tradingarea_big"
jdbcType=
"VARCHAR"
/>
<result
property=
"tradingarea"
column=
"tradingarea"
jdbcType=
"VARCHAR"
/>
<result
property=
"tradingareaLevelCode"
column=
"tradingarea_level_code"
jdbcType=
"VARCHAR"
/>
<result
property=
"tradingareaLevelName"
column=
"tradingarea_level_name"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeDistrictId"
column=
"store_district_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeDistrictCode"
column=
"store_district_code"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeDistrictCreateTime"
column=
"store_district_create_time"
jdbcType=
"CHAR"
/>
<result
property=
"storeDistrictModifyTime"
column=
"store_district_modify_time"
jdbcType=
"CHAR"
/>
<result
property=
"storeDistrictCreatorName"
column=
"store_district_creator_name"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeDistrictModifyierName"
column=
"store_district_modifyier_name"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeDistrictStatus"
column=
"store_district_status"
jdbcType=
"CHAR"
/>
<result
property=
"storeRelLevelId"
column=
"store_rel_level_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeLabel"
column=
"store_label"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeLabelId"
column=
"store_label_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeAssistantId"
column=
"store_assistant_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeAssistantName"
column=
"store_assistant_name"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeRoadMsg"
column=
"store_road_msg"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeHouseNumber"
column=
"store_house_number"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeLiscenceName"
column=
"store_liscence_name"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeRegistrationNo"
column=
"store_registration_no"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeRegistrationDate"
column=
"store_registration_date"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeOperator"
column=
"store_operator"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeSaleDirect"
column=
"store_sale_direct"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeModifyTime"
column=
"store_modify_time"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeModifyierName"
column=
"store_modifyier_name"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeCreateApprovalTime"
column=
"store_create_approval_time"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeModifyApprovalTime"
column=
"store_modify_approval_time"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeSourceType"
column=
"store_source_type"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeSellingArea"
column=
"store_selling_area"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeCashiersNum"
column=
"store_cashiers_num"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeShelfNum"
column=
"store_shelf_num"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeTotalNum"
column=
"store_total_num"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeSelfProductNum"
column=
"store_self_product_num"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeOpenTime"
column=
"store_open_time"
jdbcType=
"TIMESTAMP"
/>
<result
property=
"storeCloseTime"
column=
"store_close_time"
jdbcType=
"TIMESTAMP"
/>
<result
property=
"storePictures"
column=
"store_pictures"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeLiscence"
column=
"store_liscence"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeManagerCode"
column=
"store_manager_code"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeCreatorCode"
column=
"store_creator_code"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeModifierCode"
column=
"store_modifier_code"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeApprovalStatus"
column=
"store_approval_status"
jdbcType=
"CHAR"
/>
<result
property=
"storeStatus"
column=
"store_status"
jdbcType=
"CHAR"
/>
<result
property=
"createTime"
column=
"create_time"
jdbcType=
"CHAR"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id,qc_id,store_id,
creator_waiqin_id,creator_name,creator_id,
return_pool_reason,store_name,store_code,
store_manager,store_manager_id,store_manager_waiqin365_id,
store_type,store_type_code,store_type_id,
store_level_id,store_level,store_dept_waiqin365_id,
store_dept_id,store_dept_name,store_district,
store_district_full_path,store_district_waiqin365_id,store_third_district_id,
store_mss_province,store_mss_province_code,store_mss_city,
store_mss_city_code,store_mss_area,store_mss_area_code,
store_mss_street,store_mss_street_code,store_addr,
store_cooperate_status_id,store_cooperate_status,store_ka_sys,
store_tel,store_fax,store_post,
store_remarks,tradingarea_big,tradingarea,
tradingarea_level_code,tradingarea_level_name,store_district_id,
store_district_code,store_district_create_time,store_district_modify_time,
store_district_creator_name,store_district_modifyier_name,store_district_status,
store_rel_level_id,store_label,store_label_id,
store_assistant_id,store_assistant_name,store_road_msg,
store_house_number,store_liscence_name,store_registration_no,
store_registration_date,store_operator,store_sale_direct,
store_modify_time,store_modifyier_name,store_create_approval_time,
store_modify_approval_time,store_source_type,store_selling_area,
store_cashiers_num,store_shelf_num,store_total_num,
store_self_product_num,store_open_time,store_close_time,
store_pictures,store_liscence,store_manager_code,
store_creator_code,store_modifier_code,store_approval_status,
store_status,create_time
</sql>
</mapper>
src/main/resources/mapper/TemporaryActivityClockMapper.xml
0 → 100644
浏览文件 @
8a07f30e
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.wangxiaolu.promotion.domain.activity.mapper.TemporaryActivityClockMapper"
>
<resultMap
id=
"BaseResultMap"
type=
"com.wangxiaolu.promotion.domain.activity.mapper.entity.TemporaryActivityClockDO"
>
<id
property=
"id"
column=
"id"
jdbcType=
"BIGINT"
/>
<result
property=
"temporaryId"
column=
"temporary_id"
jdbcType=
"INTEGER"
/>
<result
property=
"temporaryName"
column=
"temporary_name"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeQcId"
column=
"store_qc_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeName"
column=
"store_name"
jdbcType=
"VARCHAR"
/>
<result
property=
"clockInAddress"
column=
"clock_in_address"
jdbcType=
"VARCHAR"
/>
<result
property=
"clockInCoordinates"
column=
"clock_in_coordinates"
jdbcType=
"VARCHAR"
/>
<result
property=
"clockInPhoto"
column=
"clock_in_photo"
jdbcType=
"VARCHAR"
/>
<result
property=
"clockInPhotoFieldId"
column=
"clock_in_photo_field_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"clockInTime"
column=
"clock_in_time"
jdbcType=
"TIMESTAMP"
/>
<result
property=
"noonClockOutAddress"
column=
"noon_clock_out_address"
jdbcType=
"VARCHAR"
/>
<result
property=
"noonClockOutCoordinates"
column=
"noon_clock_out_coordinates"
jdbcType=
"VARCHAR"
/>
<result
property=
"noonClockOutPhoto"
column=
"noon_clock_out_photo"
jdbcType=
"VARCHAR"
/>
<result
property=
"noonClockOutPhotoFieldId"
column=
"noon_clock_out_photo_field_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"noonClockOutTime"
column=
"noon_clock_out_time"
jdbcType=
"TIMESTAMP"
/>
<result
property=
"noonClockInAddress"
column=
"noon_clock_in_address"
jdbcType=
"VARCHAR"
/>
<result
property=
"noonClockInCoordinates"
column=
"noon_clock_in_coordinates"
jdbcType=
"VARCHAR"
/>
<result
property=
"noonClockInPhoto"
column=
"noon_clock_in_photo"
jdbcType=
"VARCHAR"
/>
<result
property=
"noonClockInPhotoFieldId"
column=
"noon_clock_in_photo_field_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"noonClockInTime"
column=
"noon_clock_in_time"
jdbcType=
"TIMESTAMP"
/>
<result
property=
"clockOutAddress"
column=
"clock_out_address"
jdbcType=
"VARCHAR"
/>
<result
property=
"clockOutCoordinates"
column=
"clock_out_coordinates"
jdbcType=
"VARCHAR"
/>
<result
property=
"clockOutPhoto"
column=
"clock_out_photo"
jdbcType=
"VARCHAR"
/>
<result
property=
"clockOutPhotoFieldId"
column=
"clock_out_photo_field_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"clockOutTime"
column=
"clock_out_time"
jdbcType=
"TIMESTAMP"
/>
<result
property=
"createDate"
column=
"create_date"
jdbcType=
"CHAR"
/>
<result
property=
"createTime"
column=
"create_time"
jdbcType=
"TIMESTAMP"
/>
<result
property=
"modifyTime"
column=
"modify_time"
jdbcType=
"TIMESTAMP"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id,temporary_id,temporary_name,
store_qc_id,store_name,clock_in_address,
clock_in_coordinates,clock_in_photo,clock_in_photo_field_id,
clock_in_time,noon_clock_out_address,noon_clock_out_coordinates,
noon_clock_out_photo,noon_clock_out_photo_field_id,noon_clock_out_time,
noon_clock_in_address,noon_clock_in_coordinates,noon_clock_in_photo,
noon_clock_in_photo_field_id,noon_clock_in_time,clock_out_address,
clock_out_coordinates,clock_out_photo,clock_out_photo_field_id,
clock_out_time,create_date,create_time,
modify_time
</sql>
</mapper>
src/main/resources/mapper/TemporaryActivityLogMapper.xml
0 → 100644
浏览文件 @
8a07f30e
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.wangxiaolu.promotion.domain.activity.mapper.TemporaryActivityLogMapper"
>
<resultMap
id=
"BaseResultMap"
type=
"com.wangxiaolu.promotion.domain.activity.mapper.entity.TemporaryActivityLogDO"
>
<id
property=
"id"
column=
"id"
jdbcType=
"BIGINT"
/>
<result
property=
"temporaryId"
column=
"temporary_id"
jdbcType=
"INTEGER"
/>
<result
property=
"dataDetail"
column=
"data_detail"
jdbcType=
"OTHER"
/>
<result
property=
"createTime"
column=
"create_time"
jdbcType=
"TIMESTAMP"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id,temporary_id,data_detail,
create_time
</sql>
</mapper>
src/main/resources/mapper/TemporaryActivityPhotoMapper.xml
0 → 100644
浏览文件 @
8a07f30e
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.wangxiaolu.promotion.domain.activity.mapper.TemporaryActivityPhotoMapper"
>
<resultMap
id=
"BaseResultMap"
type=
"com.wangxiaolu.promotion.domain.activity.mapper.entity.TemporaryActivityPhotoDO"
>
<id
property=
"id"
column=
"id"
jdbcType=
"BIGINT"
/>
<result
property=
"temporaryId"
column=
"temporary_id"
jdbcType=
"INTEGER"
/>
<result
property=
"reportedId"
column=
"reported_id"
jdbcType=
"BIGINT"
/>
<result
property=
"type"
column=
"type"
jdbcType=
"INTEGER"
/>
<result
property=
"photoUrl"
column=
"photo_url"
jdbcType=
"VARCHAR"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id
,temporary_id,type,
photo_url,photo_field_id
</sql>
<update
id=
"updateIsDelete"
>
update temporary_activity_photo
set is_delete = 0
where reported_id = #{reportedId}
and photo_filed_id = #{photoFiledId};
</update>
</mapper>
src/main/resources/mapper/TemporaryActivityReportedMapper.xml
0 → 100644
浏览文件 @
8a07f30e
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.wangxiaolu.promotion.domain.activity.mapper.TemporaryActivityReportedMapper"
>
<resultMap
id=
"BaseResultMap"
type=
"com.wangxiaolu.promotion.domain.activity.mapper.entity.TemporaryActivityReportedDO"
>
<id
property=
"id"
column=
"id"
jdbcType=
"BIGINT"
/>
<result
property=
"temporaryId"
column=
"temporary_id"
jdbcType=
"INTEGER"
/>
<result
property=
"temporaryName"
column=
"temporary_name"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeQcId"
column=
"store_qc_id"
jdbcType=
"BIGINT"
/>
<result
property=
"storeName"
column=
"store_name"
jdbcType=
"VARCHAR"
/>
<result
property=
"storeAddr"
column=
"store_addr"
jdbcType=
"VARCHAR"
/>
<result
property=
"approverId"
column=
"approver_id"
jdbcType=
"BIGINT"
/>
<result
property=
"approveName"
column=
"approve_name"
jdbcType=
"VARCHAR"
/>
<result
property=
"approveStatus"
column=
"approve_status"
jdbcType=
"VARCHAR"
/>
<result
property=
"approveTime"
column=
"approve_time"
jdbcType=
"TIMESTAMP"
/>
<result
property=
"createTime"
column=
"create_time"
jdbcType=
"TIMESTAMP"
/>
<result
property=
"createDate"
column=
"create_date"
jdbcType=
"CHAR"
/>
<result
property=
"modifyTime"
column=
"modify_time"
jdbcType=
"TIMESTAMP"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id
,temporary_id,temporary_name,
shop_id,shop_name,shop_address,
approver_id,approve_name,approve_status,
create_time,modify_time
</sql>
</mapper>
src/main/resources/mapper/TemporaryInfoMapper.xml
0 → 100644
浏览文件 @
8a07f30e
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.wangxiaolu.promotion.domain.user.mapper.TemporaryInfoMapper"
>
<resultMap
id=
"BaseResultMap"
type=
"com.wangxiaolu.promotion.domain.user.mapper.entity.TemporaryInfoDO"
>
<id
property=
"id"
column=
"id"
jdbcType=
"INTEGER"
/>
<result
property=
"name"
column=
"name"
jdbcType=
"VARCHAR"
/>
<result
property=
"phone"
column=
"phone"
jdbcType=
"CHAR"
/>
<result
property=
"idenNumber"
column=
"iden_number"
jdbcType=
"CHAR"
/>
<result
property=
"openId"
column=
"open_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"avatarUrl"
column=
"avatar_url"
jdbcType=
"VARCHAR"
/>
<result
property=
"avatarUrlFieldId"
column=
"avatar_url_field_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"idenFrontPhotoUrl"
column=
"iden_front_photo_url"
jdbcType=
"VARCHAR"
/>
<result
property=
"idenFrontPhotoFieldId"
column=
"iden_front_photo_field_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"idenReversePhotoUrl"
column=
"iden_reverse_photo_url"
jdbcType=
"VARCHAR"
/>
<result
property=
"idenReversePhotoFieldId"
column=
"iden_reverse_photo_field_id"
jdbcType=
"VARCHAR"
/>
<result
property=
"createTime"
column=
"create_time"
jdbcType=
"TIMESTAMP"
/>
<result
property=
"modifyTime"
column=
"modify_time"
jdbcType=
"TIMESTAMP"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id
,name,phone,
iden_number,open_id,avatar_url,
avatar_url_field_id,iden_front_photo_url,iden_front_photo_field_id,
iden_reverse_photo_url,iden_reverse_photo_field_id,create_time,
modify_time
</sql>
<sql
id=
"Base_Column_Unimportant"
>
id,name,phone,open_id,avatar_url,create_time,modify_time
</sql>
<select
id=
"getUnimportantData"
resultMap=
"BaseResultMap"
>
select
<include
refid=
"Base_Column_Unimportant"
/>
from temporary_info where open_id = #{openId}
</select>
</mapper>
src/test/java/com/wangxiaolu/promotion/controller/activity/temporary/TemporaryActivityCoreControllerTest.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
controller
.
activity
.
temporary
;
import
com.wangxiaolu.promotion.pojo.activity.temporary.vo.TemporaryActivityDataVo
;
import
org.junit.jupiter.api.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.*;
/**
* @author : liqiulin
* @date : 2024-04-18 11
* @describe :
*/
@SpringBootTest
@RunWith
(
SpringRunner
.
class
)
class
TemporaryActivityCoreControllerTest
{
@Autowired
TemporaryActivityCoreController
temporaryActivityCoreController
;
@Test
void
todayActivityDataReported
()
{
TemporaryActivityDataVo
activityVo
=
new
TemporaryActivityDataVo
();
Long
aLong
=
temporaryActivityCoreController
.
todayActivityDataReported
(
activityVo
);
System
.
out
.
println
(
" 促销员活动上报成功,生成id:"
+
aLong
);
}
}
\ No newline at end of file
src/test/java/com/wangxiaolu/promotion/controller/user/QinCeDataTaskControllerTest.java
浏览文件 @
8a07f30e
...
...
@@ -29,4 +29,9 @@ class QinCeDataTaskControllerTest {
void
employeeTask
()
{
qinCeDataTaskController
.
employeeTask
();
}
@Test
void
shopDetailAllTask
()
{
qinCeDataTaskController
.
shopDetailAllTask
();
}
}
\ No newline at end of file
src/test/java/com/wangxiaolu/promotion/controller/wechat/WeChatUserCoreControllerTest.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
controller
.
wechat
;
import
com.alibaba.fastjson.JSONObject
;
import
com.wangxiaolu.promotion.pojo.user.vo.WxTemporaryEnrollVo
;
import
org.junit.jupiter.api.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
/**
* @author : liqiulin
* @date : 2024-04-08 16
* @describe :
*/
@SpringBootTest
@RunWith
(
SpringRunner
.
class
)
class
WeChatUserCoreControllerTest
{
@Autowired
WeChatUserCoreController
weChatUserCoreController
;
@Autowired
WeChatUserQueryController
weChatUserQueryController
;
@Test
void
enrollUserInfo
()
{
WxTemporaryEnrollVo
vo
=
new
WxTemporaryEnrollVo
()
.
setOpenId
(
"openid111"
)
.
setAvatarUrl
(
"头像Url"
)
.
setName
(
"姓名"
)
.
setPhone
(
"手机号"
)
.
setIdenNumber
(
"身份证号"
)
.
setIdenFrontPhotoUrl
(
"身份证正面照"
)
.
setIdenReversePhotoUrl
(
"身份证反面照"
)
.
setPhoneCode
(
"手机验证码"
)
;
System
.
out
.
println
(
JSONObject
.
toJSONString
(
vo
));
weChatUserCoreController
.
enrollUserInfo
(
vo
);
}
@Test
void
getOpenIdByWxcode
()
{
}
}
\ No newline at end of file
src/test/java/com/wangxiaolu/promotion/controller/wechat/WeChatUserQueryControllerTest.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
controller
.
wechat
;
import
com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto
;
import
com.wangxiaolu.promotion.pojo.user.vo.WxTemporaryLoginVo
;
import
org.junit.jupiter.api.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.*;
/**
* @author : liqiulin
* @date : 2024-04-16 11
* @describe :
*/
@SpringBootTest
@RunWith
(
SpringRunner
.
class
)
class
WeChatUserQueryControllerTest
{
@Autowired
WeChatUserQueryController
weChatUserQueryController
;
@Test
void
temporaryLoginByPhoneAndOpenId
()
{
WxTemporaryLoginVo
loginVO
=
new
WxTemporaryLoginVo
().
setOpenId
(
"oCMt-66hnlY9-bQcZAAZKX0p3s6I"
).
setPhone
(
"15701654502"
);
boolean
b
=
weChatUserQueryController
.
temporaryLoginByPhoneAndOpenId
(
loginVO
);
System
.
out
.
println
(
"temporaryLoginByPhoneAndOpenId 登录结果:"
+
b
);
}
@Test
void
getTemporaryInfoByOpenId
()
{
}
}
\ No newline at end of file
src/test/java/com/wangxiaolu/promotion/utils/DateUtilsTest.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
utils
;
import
org.junit.jupiter.api.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
java.util.Date
;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.*;
/**
* @author : liqiulin
* @date : 2024-04-23 16
* @describe :
*/
@SpringBootTest
@RunWith
(
SpringRunner
.
class
)
class
DateUtilsTest
{
@Test
void
parseTime
()
{
boolean
b
=
DateUtils
.
parseTime
(
new
Date
(),
"16:00:00"
,
"16:30:00"
);
System
.
out
.
println
(
"是否在时间范围内:"
+
b
);
}
}
\ No newline at end of file
src/test/java/com/wangxiaolu/promotion/utils/TencentUtilsTest.java
0 → 100644
浏览文件 @
8a07f30e
package
com
.
wangxiaolu
.
promotion
.
utils
;
import
com.alibaba.fastjson.JSONObject
;
import
com.tencentcloudapi.sms.v20210111.models.SendSmsResponse
;
import
com.tencentcloudapi.sms.v20210111.models.SendStatus
;
import
org.apache.commons.lang3.StringUtils
;
import
org.junit.jupiter.api.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.*;
/**
* @author : liqiulin
* @date : 2024-05-15 15
* @describe :
*/
@SpringBootTest
@RunWith
(
SpringRunner
.
class
)
class
TencentUtilsTest
{
@Autowired
TencentUtils
tencentUtils
;
@Test
void
sendSmsPhoneVerCOde
()
{
// boolean b = tencentUtils.sendSmsPhoneVerCOde("15701654502", "345123");
// System.out.println("短信发送结果:" + b);
}
public
static
void
main
(
String
[]
args
)
{
SendSmsResponse
res
=
JSONObject
.
parseObject
(
"{\"SendStatusSet\":[{\"SerialNo\":\"9319:154810136917157576005565450\",\"PhoneNumber\":\"+8615701654502\",\"Fee\":1,\"SessionContext\":\"\",\"Code\":\"Ok\",\"Message\":\"send success\",\"IsoCode\":\"CN\"}],\"RequestId\":\"d962f019-1228-4cb3-aa35-6d7b8c7a716b\"}\n"
,
SendSmsResponse
.
class
);
SendStatus
sendStatus
=
res
.
getSendStatusSet
()[
0
];
if
(
StringUtils
.
isBlank
(
sendStatus
.
getCode
())
||
!
sendStatus
.
getCode
().
contains
(
"Ok"
))
{
System
.
out
.
println
(
false
);
}
System
.
out
.
println
(
true
);
}
}
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论