Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
不是太高的手
SPTools
提交
94432a48
S
SPTools
项目概览
不是太高的手
/
SPTools
通知
4
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
SPTools
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
94432a48
编写于
9月 03, 2020
作者:
小
小柒2012
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
蘑菇钉定时打卡
上级
2f6e522b
变更
18
隐藏空白更改
内联
并排
Showing
18 changed file
with
765 addition
and
222 deletion
+765
-222
pom.xml
pom.xml
+1
-1
src/main/java/com/tools/common/constant/SystemConstant.java
src/main/java/com/tools/common/constant/SystemConstant.java
+13
-0
src/main/java/com/tools/common/util/SpringUtils.java
src/main/java/com/tools/common/util/SpringUtils.java
+92
-0
src/main/java/com/tools/module/app/entity/AppDingDetails.java
...main/java/com/tools/module/app/entity/AppDingDetails.java
+0
-83
src/main/java/com/tools/module/app/entity/AppDingSignInLog.java
...in/java/com/tools/module/app/entity/AppDingSignInLog.java
+17
-6
src/main/java/com/tools/module/app/entity/AppDingUser.java
src/main/java/com/tools/module/app/entity/AppDingUser.java
+77
-0
src/main/java/com/tools/module/app/service/AppDingDetailService.java
...va/com/tools/module/app/service/AppDingDetailService.java
+0
-20
src/main/java/com/tools/module/app/service/AppDingService.java
...ain/java/com/tools/module/app/service/AppDingService.java
+8
-2
src/main/java/com/tools/module/app/service/AppDingUserService.java
...java/com/tools/module/app/service/AppDingUserService.java
+4
-2
src/main/java/com/tools/module/app/service/impl/AppDingDetailServiceImpl.java
...ols/module/app/service/impl/AppDingDetailServiceImpl.java
+0
-60
src/main/java/com/tools/module/app/service/impl/AppDingLogServiceImpl.java
.../tools/module/app/service/impl/AppDingLogServiceImpl.java
+1
-1
src/main/java/com/tools/module/app/service/impl/AppDingServiceImpl.java
...com/tools/module/app/service/impl/AppDingServiceImpl.java
+103
-24
src/main/java/com/tools/module/app/service/impl/AppDingUserServiceImpl.java
...tools/module/app/service/impl/AppDingUserServiceImpl.java
+27
-8
src/main/java/com/tools/module/app/task/ToolsJob.java
src/main/java/com/tools/module/app/task/ToolsJob.java
+25
-0
src/main/java/com/tools/module/app/web/DingController.java
src/main/java/com/tools/module/app/web/DingController.java
+60
-14
src/main/java/com/tools/module/sys/service/impl/SysMenuServiceImpl.java
...com/tools/module/sys/service/impl/SysMenuServiceImpl.java
+1
-1
src/main/resources/templates/app/moguding/form.html
src/main/resources/templates/app/moguding/form.html
+125
-0
src/main/resources/templates/app/moguding/list.html
src/main/resources/templates/app/moguding/list.html
+211
-0
未找到文件。
pom.xml
浏览文件 @
94432a48
...
...
@@ -184,7 +184,7 @@
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
fastjson
</artifactId>
<version>
1.2.
69
</version>
<version>
1.2.
73
</version>
</dependency>
</dependencies>
<build>
...
...
src/main/java/com/tools/common/constant/SystemConstant.java
浏览文件 @
94432a48
...
...
@@ -76,6 +76,19 @@ public class SystemConstant {
public
static
final
Short
HOT_STATUS_NO
=
0
;
/**
* 签到:0 否 1 是
*/
public
static
final
Short
SIGN_STATUS_YES
=
1
;
public
static
final
Short
SIGN_STATUS_NO
=
0
;
/**
* 异常标识
*/
public
static
final
String
CODE_500
=
"500"
;
/**
* 菜单类型
*/
...
...
src/main/java/com/tools/common/util/SpringUtils.java
0 → 100644
浏览文件 @
94432a48
package
com.tools.common.util
;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.factory.NoSuchBeanDefinitionException
;
import
org.springframework.beans.factory.config.BeanFactoryPostProcessor
;
import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory
;
import
org.springframework.stereotype.Component
;
@Component
public
final
class
SpringUtils
implements
BeanFactoryPostProcessor
{
//静态
private
static
ConfigurableListableBeanFactory
beanFactory
;
// Spring应用上下文环境
@Override
public
void
postProcessBeanFactory
(
ConfigurableListableBeanFactory
beanFactory
)
throws
BeansException
{
SpringUtils
.
beanFactory
=
beanFactory
;
}
/**
* 获取对象
*
* @param name
* @return Object 一个以所给名字注册的bean的实例
* @throws org.springframework.beans.BeansException
*
*/
@SuppressWarnings
(
"unchecked"
)
public
static
<
T
>
T
getBean
(
String
name
)
throws
BeansException
{
return
(
T
)
beanFactory
.
getBean
(
name
);
}
/**
* 获取类型为requiredType的对象
*
* @param clz
* @return
* @throws org.springframework.beans.BeansException
*
*/
public
static
<
T
>
T
getBean
(
Class
<
T
>
clz
)
throws
BeansException
{
@SuppressWarnings
(
"unchecked"
)
T
result
=
(
T
)
beanFactory
.
getBean
(
clz
);
return
result
;
}
/**
* 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
*
* @param name
* @return boolean
*/
public
static
boolean
containsBean
(
String
name
)
{
return
beanFactory
.
containsBean
(
name
);
}
/**
* 判断以给定名字注册的bean定义是一个singleton还是一个prototype。
* 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
*
* @param name
* @return boolean
* @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
*
*/
public
static
boolean
isSingleton
(
String
name
)
throws
NoSuchBeanDefinitionException
{
return
beanFactory
.
isSingleton
(
name
);
}
/**
* @param name
* @return Class 注册对象的类型
* @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
*
*/
public
static
Class
<?>
getType
(
String
name
)
throws
NoSuchBeanDefinitionException
{
return
beanFactory
.
getType
(
name
);
}
/**
* 如果给定的bean名字在bean定义中有别名,则返回这些别名
*
* @param name
* @return
* @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
*
*/
public
static
String
[]
getAliases
(
String
name
)
throws
NoSuchBeanDefinitionException
{
return
beanFactory
.
getAliases
(
name
);
}
}
src/main/java/com/tools/module/app/entity/AppDingDetails.java
已删除
100644 → 0
浏览文件 @
2f6e522b
package
com.tools.module.app.entity
;
import
com.tools.common.model.PageBean
;
import
lombok.Data
;
import
javax.persistence.Column
;
import
javax.persistence.Entity
;
import
javax.persistence.Id
;
import
javax.persistence.Table
;
import
java.io.Serializable
;
import
java.util.GregorianCalendar
;
@Data
@Entity
@Table
(
name
=
"app_ding_details"
)
public
class
AppDingDetails
extends
PageBean
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* 用户id
*/
@Id
private
Integer
userId
;
/**
* 国家
*/
@Column
(
name
=
"country"
)
private
String
country
;
/**
* 地址
*/
@Column
(
name
=
"address"
)
private
String
address
;
/**
* 省
*/
@Column
(
name
=
"province"
)
private
String
province
;
/**
* 城市
*/
@Column
(
name
=
"city"
)
private
String
city
;
/**
* 纬度
*/
@Column
(
name
=
"latitude"
)
private
String
latitude
;
/**
* 发表的信息
*/
@Column
(
name
=
"description"
)
private
String
description
;
/**
* START 上班 END 下班
*/
@Column
(
name
=
"type"
)
private
String
type
;
/**
* 经度
*/
private
String
longitude
;
public
AppDingDetails
()
{
// 结果为“0”是上午 结果为“1”是下午
GregorianCalendar
ca
=
new
GregorianCalendar
();
if
(
ca
.
get
(
GregorianCalendar
.
AM_PM
)
==
0
||
"0"
.
equals
(
ca
.
get
(
GregorianCalendar
.
AM_PM
)))
{
this
.
type
=
"START"
;
}
else
{
this
.
type
=
"END"
;
}
}
}
\ No newline at end of file
src/main/java/com/tools/module/app/entity/AppDingSignInLog.java
浏览文件 @
94432a48
package
com.tools.module.app.entity
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.tools.common.model.PageBean
;
import
lombok.Data
;
import
javax.persistence.*
;
import
java.io.Serializable
;
import
java.sql.Timestamp
;
import
static
javax
.
persistence
.
GenerationType
.
IDENTITY
;
...
...
@@ -24,15 +25,25 @@ public class AppDingSignInLog extends PageBean implements Serializable {
@Column
(
name
=
"id"
,
unique
=
true
,
nullable
=
false
)
private
Integer
logId
;
@Column
(
name
=
"username"
)
private
String
username
;
@Column
(
name
=
"address"
)
private
String
address
;
/**
* 创建时间
*/
@Column
(
name
=
"gmt_create"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Timestamp
gmtCreate
;
private
String
state
;
@Column
(
name
=
"message"
)
private
String
message
;
private
String
logTime
;
/**
* 发送 状态 0 失败 1正常
*/
@Column
(
name
=
"status"
)
private
short
status
;
}
src/main/java/com/tools/module/app/entity/AppDingUser.java
浏览文件 @
94432a48
package
com.tools.module.app.entity
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.tools.common.model.PageBean
;
import
lombok.Data
;
import
javax.persistence.*
;
import
java.io.Serializable
;
import
java.sql.Timestamp
;
import
java.util.GregorianCalendar
;
import
static
javax
.
persistence
.
GenerationType
.
IDENTITY
;
...
...
@@ -38,4 +41,78 @@ public class AppDingUser extends PageBean implements Serializable {
@Column
(
name
=
"password"
)
private
String
password
;
/**
* 国家
*/
@Column
(
name
=
"country"
)
private
String
country
;
/**
* 地址
*/
@Column
(
name
=
"address"
)
private
String
address
;
/**
* 省
*/
@Column
(
name
=
"province"
)
private
String
province
;
/**
* 城市
*/
@Column
(
name
=
"city"
)
private
String
city
;
/**
* 纬度
*/
@Column
(
name
=
"latitude"
)
private
String
latitude
;
/**
* 发表的信息
*/
@Column
(
name
=
"description"
)
private
String
description
;
/**
* 经度
*/
@Column
(
name
=
"longitude"
)
private
String
longitude
;
/**
* 创建时间
*/
@Column
(
name
=
"gmt_create"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Timestamp
gmtCreate
;
/**
* 修改时间
*/
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@Column
(
name
=
"gmt_modified"
)
private
Timestamp
gmtModified
;
/**
* START 上班 END 下班
*/
@Transient
private
String
type
;
public
AppDingUser
()
{
/**
* 结果为“0”是上午 结果为“1”是下午
*/
GregorianCalendar
ca
=
new
GregorianCalendar
();
if
(
ca
.
get
(
GregorianCalendar
.
AM_PM
)
==
0
||
"0"
.
equals
(
ca
.
get
(
GregorianCalendar
.
AM_PM
)))
{
this
.
type
=
"START"
;
}
else
{
this
.
type
=
"END"
;
}
}
}
src/main/java/com/tools/module/app/service/AppDingDetailService.java
已删除
100644 → 0
浏览文件 @
2f6e522b
package
com.tools.module.app.service
;
import
com.tools.common.model.Result
;
import
com.tools.module.app.entity.AppDingDetails
;
/**
* @Description
* @Author 爪洼笔记
* @Date 2022/9/34
*/
public
interface
AppDingDetailService
{
Result
listDetailsBean
(
AppDingDetails
detail
);
Result
save
(
AppDingDetails
detail
);
Result
delete
(
AppDingDetails
detail
);
Result
update
(
AppDingDetails
detail
);
}
src/main/java/com/tools/module/app/service/AppDingService.java
浏览文件 @
94432a48
package
com.tools.module.app.service
;
import
com.tools.common.model.Result
;
import
com.tools.module.app.entity.AppDingDetails
;
import
com.tools.module.app.entity.AppDingUser
;
/**
...
...
@@ -31,5 +30,12 @@ public interface AppDingService {
* @param detail
* @return
*/
Result
sin
(
String
authorization
,
String
planId
,
AppDingDetails
detail
);
String
sin
(
String
authorization
,
String
planId
,
AppDingUser
detail
);
/**
* 触发签到
* @param user
* @return
*/
Result
sign
(
AppDingUser
user
);
}
src/main/java/com/tools/module/app/service/AppDingUserService.java
浏览文件 @
94432a48
...
...
@@ -12,13 +12,15 @@ import java.util.List;
*/
public
interface
AppDingUserService
{
Result
list
Userinfo
(
Integer
pageNo
,
Integer
pageSize
);
Result
list
(
AppDingUser
user
);
List
<
AppDingUser
>
listUser
();
AppDingUser
get
(
Integer
userId
);
Result
save
(
AppDingUser
user
);
Result
delete
(
AppDingUser
user
);
Result
delete
(
Integer
userId
);
Result
update
(
AppDingUser
user
);
}
src/main/java/com/tools/module/app/service/impl/AppDingDetailServiceImpl.java
已删除
100644 → 0
浏览文件 @
2f6e522b
package
com.tools.module.app.service.impl
;
import
com.tools.common.dynamicquery.DynamicQuery
;
import
com.tools.common.model.PageBean
;
import
com.tools.common.model.Result
;
import
com.tools.module.app.entity.AppDingDetails
;
import
com.tools.module.app.service.AppDingDetailService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
/**
* @Description 蘑菇钉
* @Author 爪洼笔记
* @Date 2022/9/34
*/
@Service
public
class
AppDingDetailServiceImpl
implements
AppDingDetailService
{
@Autowired
private
DynamicQuery
dynamicQuery
;
@Override
public
Result
listDetailsBean
(
AppDingDetails
detail
)
{
String
countSql
=
"SELECT COUNT(*) FROM app_ding_details"
;
Long
totalCount
=
dynamicQuery
.
nativeQueryCount
(
countSql
);
PageBean
<
AppDingDetails
>
data
=
new
PageBean
<>();
if
(
totalCount
>
0
)
{
StringBuffer
nativeSql
=
new
StringBuffer
();
nativeSql
.
append
(
"SELECT * FROM app_ding_details "
);
Object
[]
params
=
new
Object
[]{};
Pageable
pageable
=
PageRequest
.
of
(
detail
.
getPageNo
()
-
1
,
detail
.
getPageSize
());
List
<
AppDingDetails
>
list
=
dynamicQuery
.
nativeQueryPagingList
(
AppDingDetails
.
class
,
pageable
,
nativeSql
.
toString
(),
params
);
data
=
new
PageBean
<>(
list
,
totalCount
);
}
return
Result
.
ok
(
data
);
}
@Override
public
Result
save
(
AppDingDetails
detail
)
{
dynamicQuery
.
save
(
detail
);
return
Result
.
ok
();
}
@Override
public
Result
delete
(
AppDingDetails
detail
)
{
String
nativeSql
=
"DELETE FROM app_ding_details WHERE id=?"
;
dynamicQuery
.
nativeExecuteUpdate
(
nativeSql
,
new
Object
[]{
detail
.
getUserId
()});
return
Result
.
ok
();
}
@Override
public
Result
update
(
AppDingDetails
detail
)
{
dynamicQuery
.
update
(
detail
);
return
Result
.
ok
();
}
}
src/main/java/com/tools/module/app/service/impl/AppDingLogServiceImpl.java
浏览文件 @
94432a48
...
...
@@ -19,7 +19,7 @@ import java.util.List;
* @Author 爪洼笔记
* @Date 2022/9/34
*/
@Service
@Service
(
"dingLogService"
)
public
class
AppDingLogServiceImpl
implements
AppDingLogService
{
@Autowired
...
...
src/main/java/com/tools/module/app/service/impl/AppDingServiceImpl.java
浏览文件 @
94432a48
...
...
@@ -2,11 +2,19 @@ package com.tools.module.app.service.impl;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
com.tools.common.constant.SystemConstant
;
import
com.tools.common.model.Result
;
import
com.tools.common.util.DateUtils
;
import
com.tools.common.util.HttpUtils
;
import
com.tools.module.app.entity.AppDing
Details
;
import
com.tools.module.app.entity.AppDing
SignInLog
;
import
com.tools.module.app.entity.AppDingUser
;
import
com.tools.module.app.service.AppDingLogService
;
import
com.tools.module.app.service.AppDingService
;
import
com.tools.module.app.service.AppDingUserService
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.HashMap
;
...
...
@@ -17,7 +25,7 @@ import java.util.Map;
* @Author 爪洼笔记
* @Date 2022/9/34
*/
@Service
@Service
(
"appDingService"
)
public
class
AppDingServiceImpl
implements
AppDingService
{
...
...
@@ -35,10 +43,8 @@ public class AppDingServiceImpl implements AppDingService {
headersMap
.
put
(
"Connection"
,
"close"
);
headersMap
.
put
(
"Accept-Encoding"
,
"gzip, deflate"
);
headersMap
.
put
(
"Cache-Control"
,
"no-cache"
);
/* 请求地址 */
String
url
=
"https://api.moguding.net:9000/session/user/v1/login"
;
/* 请求参数 */
Map
<
String
,
String
>
paramsMap
=
new
HashMap
(
10
);
paramsMap
.
put
(
"phone"
,
user
.
getUsername
());
...
...
@@ -52,12 +58,20 @@ public class AppDingServiceImpl implements AppDingService {
* 发送请求
*/
String
post
=
HttpUtils
.
post
(
url
,
params
,
headersMap
);
/**
* 获取响应参数
*/
String
Authorization
=
JSON
.
parseObject
(
post
).
getString
(
"data"
);
Authorization
=
JSON
.
parseObject
(
Authorization
).
getString
(
"token"
);
return
Authorization
;
String
code
=
JSON
.
parseObject
(
post
).
getString
(
"code"
);
logger
.
info
(
"{}登录{}"
,
user
.
getUsername
(),
post
);
if
(
SystemConstant
.
CODE_500
.
equals
(
code
)){
String
msg
=
JSON
.
parseObject
(
post
).
getString
(
"msg"
);
logger
.
error
(
"{}登录失败:{}"
,
user
.
getUsername
(),
msg
);
return
null
;
}
else
{
/**
* 获取响应参数
*/
String
Authorization
=
JSON
.
parseObject
(
post
).
getString
(
"data"
);
Authorization
=
JSON
.
parseObject
(
Authorization
).
getString
(
"token"
);
return
Authorization
;
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
...
...
@@ -90,14 +104,22 @@ public class AppDingServiceImpl implements AppDingService {
* 发送请求
*/
String
post
=
HttpUtils
.
post
(
url
,
params
,
headersMap
);
/**
* 获取响应参数
*/
String
planId
=
JSON
.
parseObject
(
post
).
getString
(
"data"
);
JSONArray
array
=
JSON
.
parseArray
(
planId
);
planId
=
array
.
get
(
0
).
toString
();
planId
=
JSON
.
parseObject
(
planId
).
getString
(
"planId"
);
return
planId
;
String
code
=
JSON
.
parseObject
(
post
).
getString
(
"code"
);
logger
.
info
(
"获取planId{}"
,
post
);
if
(
SystemConstant
.
CODE_500
.
equals
(
code
)){
String
msg
=
JSON
.
parseObject
(
post
).
getString
(
"msg"
);
logger
.
error
(
"获取planId失败{}"
,
msg
);
return
null
;
}
else
{
/**
* 获取响应参数
*/
String
planId
=
JSON
.
parseObject
(
post
).
getString
(
"data"
);
JSONArray
array
=
JSON
.
parseArray
(
planId
);
planId
=
array
.
get
(
0
).
toString
();
planId
=
JSON
.
parseObject
(
planId
).
getString
(
"planId"
);
return
planId
;
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
...
...
@@ -105,7 +127,7 @@ public class AppDingServiceImpl implements AppDingService {
}
@Override
public
Result
sin
(
String
authorization
,
String
planId
,
AppDingDetails
detail
)
{
public
String
sin
(
String
authorization
,
String
planId
,
AppDingUser
detail
)
{
/* 请求头 */
Map
<
String
,
String
>
headersMap
=
new
HashMap
(
20
);
headersMap
.
put
(
"Accept-Language"
,
"zh-CN,zh;q=0.8"
);
...
...
@@ -137,14 +159,71 @@ public class AppDingServiceImpl implements AppDingService {
/* 请求参数转为json字符串 */
String
params
=
JSON
.
toJSONString
(
paramsMap
);
try
{
/* 发送请求 */
String
post
=
HttpUtils
.
post
(
url
,
params
,
headersMap
);
System
.
out
.
println
(
post
);
/* 返回响应参数 */
return
Result
.
ok
(
post
);
String
code
=
JSON
.
parseObject
(
post
).
getString
(
"code"
);
logger
.
info
(
"{}签到{}"
,
detail
.
getUsername
(),
post
);
if
(
SystemConstant
.
CODE_500
.
equals
(
code
)){
String
msg
=
JSON
.
parseObject
(
post
).
getString
(
"msg"
);
logger
.
error
(
"签到失败{}"
,
msg
);
return
null
;
}
else
{
return
post
;
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
Result
.
error
(
"签到失败"
);
}
return
null
;
}
@Autowired
private
AppDingUserService
dingUserService
;
@Autowired
private
AppDingLogService
dingLogService
;
protected
Logger
logger
=
LoggerFactory
.
getLogger
(
getClass
());
@Override
public
Result
sign
(
AppDingUser
user
)
{
AppDingSignInLog
log
=
new
AppDingSignInLog
();
log
.
setUsername
(
user
.
getUsername
());
log
.
setAddress
(
user
.
getAddress
());
log
.
setGmtCreate
(
DateUtils
.
getTimestamp
());
/**
* 获取 authorization
*/
String
authorization
=
login
(
user
);
if
(
StringUtils
.
isNotBlank
(
authorization
)){
/**
* 获取 planId
*/
String
planId
=
planId
(
authorization
);
if
(
StringUtils
.
isNotBlank
(
planId
)){
String
sin
=
sin
(
authorization
,
planId
,
user
);
if
(
StringUtils
.
isNotBlank
(
sin
)){
log
.
setStatus
(
SystemConstant
.
SIGN_STATUS_YES
);
logger
.
info
(
"{}签到成功"
,
user
.
getUsername
());
}
else
{
log
.
setStatus
(
SystemConstant
.
SIGN_STATUS_NO
);
logger
.
error
(
"{}签到失败"
,
user
.
getUsername
());
log
.
setMessage
(
"签到失败"
);
return
Result
.
error
(
"签到失败"
);
}
}
else
{
log
.
setStatus
(
SystemConstant
.
SIGN_STATUS_NO
);
logger
.
error
(
"{}获取planId失败"
,
user
.
getUsername
());
log
.
setMessage
(
"获取planId失败"
);
return
Result
.
error
(
"获取planId失败"
);
}
}
else
{
log
.
setStatus
(
SystemConstant
.
SIGN_STATUS_NO
);
logger
.
error
(
"{}获取authorization失败"
,
user
.
getUsername
());
log
.
setMessage
(
"获取authorization失败"
);
return
Result
.
error
(
"认证失败"
);
}
/**
* 保存日志
*/
dingLogService
.
save
(
log
);
return
Result
.
ok
();
}
}
src/main/java/com/tools/module/app/service/impl/AppDingUserServiceImpl.java
浏览文件 @
94432a48
...
...
@@ -3,6 +3,7 @@ package com.tools.module.app.service.impl;
import
com.tools.common.dynamicquery.DynamicQuery
;
import
com.tools.common.model.PageBean
;
import
com.tools.common.model.Result
;
import
com.tools.common.util.DateUtils
;
import
com.tools.module.app.entity.AppDingUser
;
import
com.tools.module.app.service.AppDingUserService
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -18,21 +19,21 @@ import java.util.List;
* @Author 爪洼笔记
* @Date 2022/9/34
*/
@Service
@Service
(
"dingUserService"
)
public
class
AppDingUserServiceImpl
implements
AppDingUserService
{
@Autowired
private
DynamicQuery
dynamicQuery
;
@Override
public
Result
list
Userinfo
(
Integer
pageNo
,
Integer
pageSize
)
{
public
Result
list
(
AppDingUser
user
)
{
String
countSql
=
"SELECT COUNT(*) FROM app_ding_user"
;
Long
totalCount
=
dynamicQuery
.
nativeQueryCount
(
countSql
);
PageBean
<
AppDingUser
>
data
=
new
PageBean
<>();
if
(
totalCount
>
0
)
{
StringBuffer
nativeSql
=
new
StringBuffer
();
nativeSql
.
append
(
"SELECT * FROM app_ding_user"
);
Pageable
pageable
=
PageRequest
.
of
(
pageNo
-
1
,
pageSize
);
Pageable
pageable
=
PageRequest
.
of
(
user
.
getPageNo
(),
user
.
getPageSize
()
);
List
<
AppDingUser
>
list
=
dynamicQuery
.
nativeQueryPagingList
(
AppDingUser
.
class
,
pageable
,
nativeSql
.
toString
());
data
=
new
PageBean
<>(
list
,
totalCount
);
}
...
...
@@ -42,22 +43,40 @@ public class AppDingUserServiceImpl implements AppDingUserService {
@Override
public
List
<
AppDingUser
>
listUser
()
{
String
nativeSql
=
"SELECT * FROM app_ding_user"
;
Pageable
pageable
=
PageRequest
.
of
(
0
,
10
);
List
<
AppDingUser
>
list
=
dynamicQuery
.
nativeQueryPagingList
(
AppDingUser
.
class
,
pageable
,
nativeSql
);
List
<
AppDingUser
>
list
=
dynamicQuery
.
query
(
AppDingUser
.
class
,
nativeSql
,
new
Object
[]{});
return
list
;
}
@Override
public
AppDingUser
get
(
Integer
userId
)
{
String
nativeSql
=
"SELECT * FROM app_ding_user where id=?"
;
return
dynamicQuery
.
nativeQuerySingleResult
(
AppDingUser
.
class
,
nativeSql
,
new
Object
[]{
userId
});
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
Result
save
(
AppDingUser
user
)
{
dynamicQuery
.
save
(
user
);
String
nativeSql
=
"SELECT * FROM app_ding_user WHERE username=?"
;
AppDingUser
appDingUser
=
dynamicQuery
.
nativeQuerySingleResult
(
AppDingUser
.
class
,
nativeSql
,
new
Object
[]{
user
.
getUsername
()});
if
(
appDingUser
!=
null
){
if
(!
appDingUser
.
getUserId
().
equals
(
user
.
getUserId
())){
return
Result
.
error
(
"用户名重复"
);
}
dynamicQuery
.
update
(
user
);
}
else
{
user
.
setGmtCreate
(
DateUtils
.
getTimestamp
());
user
.
setGmtModified
(
user
.
getGmtCreate
());
dynamicQuery
.
save
(
user
);
}
return
Result
.
ok
();
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
Result
delete
(
AppDingUser
user
)
{
public
Result
delete
(
Integer
userId
)
{
String
nativeSql
=
"DELETE FROM app_ding_user WHERE id=?"
;
dynamicQuery
.
nativeExecuteUpdate
(
nativeSql
,
new
Object
[]{
user
.
getUserId
()
});
dynamicQuery
.
nativeExecuteUpdate
(
nativeSql
,
new
Object
[]{
user
Id
});
return
Result
.
ok
();
}
...
...
src/main/java/com/tools/module/app/task/ToolsJob.java
浏览文件 @
94432a48
package
com.tools.module.app.task
;
import
com.tools.common.util.SpringUtils
;
import
com.tools.module.app.entity.AppDingUser
;
import
com.tools.module.app.service.AppDingService
;
import
com.tools.module.app.service.AppDingUserService
;
import
org.quartz.*
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
java.io.Serializable
;
import
java.lang.reflect.InvocationTargetException
;
import
java.lang.reflect.Method
;
import
java.util.List
;
/**
* 实现序列化接口、防止重启应用出现quartz Couldn't retrieve job because a required class was not found 的问题
...
...
@@ -17,6 +25,13 @@ public class ToolsJob implements Job, Serializable {
private
static
final
long
serialVersionUID
=
1L
;
protected
Logger
logger
=
LoggerFactory
.
getLogger
(
getClass
());
@Autowired
private
AppDingService
dingService
;
@Autowired
private
AppDingUserService
dingUserService
;
@Override
public
void
execute
(
JobExecutionContext
context
){
JobDetail
jobDetail
=
context
.
getJobDetail
();
...
...
@@ -43,4 +58,14 @@ public class ToolsJob implements Job, Serializable {
public
void
test2
(){
System
.
out
.
println
(
"测试方法2"
);
}
/**
* 批量签到
*/
public
void
sign
(){
dingService
=
SpringUtils
.
getBean
(
"appDingService"
);
dingUserService
=
SpringUtils
.
getBean
(
"dingUserService"
);
List
<
AppDingUser
>
list
=
dingUserService
.
listUser
();
list
.
forEach
(
user
->
dingService
.
sign
(
user
));
}
}
src/main/java/com/tools/module/app/web/DingController.java
浏览文件 @
94432a48
...
...
@@ -2,12 +2,14 @@ package com.tools.module.app.web;
import
com.tools.common.config.AbstractController
;
import
com.tools.common.model.Result
;
import
com.tools.
module.app.entity.AppDingDeta
ils
;
import
com.tools.
common.util.CommonUt
ils
;
import
com.tools.module.app.entity.AppDingUser
;
import
com.tools.module.app.service.AppDingService
;
import
com.tools.module.app.service.App
Email
Service
;
import
com.tools.module.app.service.App
DingUser
Service
;
import
io.swagger.annotations.Api
;
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
;
...
...
@@ -25,28 +27,72 @@ public class DingController extends AbstractController {
@Autowired
private
AppDingService
appDingService
;
@Autowired
private
AppDingUserService
dingUserService
;
/**
* 列表
*/
@PostMapping
(
"list"
)
public
Result
list
(
AppDingUser
user
){
return
dingUserService
.
list
(
user
);
}
/**
* 保存
*/
@PostMapping
(
"save"
)
public
Result
save
(
@RequestBody
AppDingUser
user
){
return
dingUserService
.
save
(
user
);
}
/**
* 获取用户
*/
@PostMapping
(
"get"
)
public
Result
get
(
Integer
userId
){
AppDingUser
user
=
dingUserService
.
get
(
userId
);
return
CommonUtils
.
msg
(
user
);
}
/**
* 删除用户
*/
@PostMapping
(
"delete"
)
public
Result
delete
(
Integer
userId
){
return
dingUserService
.
delete
(
userId
);
}
/**
* 签到
*/
@PostMapping
(
"sign"
)
public
Result
sign
(
Integer
userId
){
AppDingUser
user
=
dingUserService
.
get
(
userId
);
return
appDingService
.
sign
(
user
);
}
/**
* 列表
*/
@RequestMapping
(
"sign"
)
@RequestMapping
(
"sign
T
"
)
public
Result
sign
(){
try
{
AppDingUser
user
=
new
AppDingUser
();
user
.
setUsername
(
"
******
"
);
user
.
setPassword
(
"
******
"
);
user
.
setUsername
(
"
8888
"
);
user
.
setPassword
(
"
8888
"
);
String
authorization
=
appDingService
.
login
(
user
);
System
.
out
.
println
(
authorization
);
String
planId
=
appDingService
.
planId
(
authorization
);
System
.
out
.
println
(
planId
);
AppDingDetails
detailsBean
=
new
AppDingDetails
();
detailsBean
.
setAddress
(
"河南省.郑州市.人民政府"
);
detailsBean
.
setCountry
(
"中国"
);
detailsBean
.
setProvince
(
"河南省"
);
detailsBean
.
setCity
(
"郑州市"
);
detailsBean
.
setLatitude
(
"37.773296"
);
detailsBean
.
setLongitude
(
"113.759527"
);
detailsBean
.
setDescription
(
"开心"
);
Result
sin
=
appDingService
.
sin
(
authorization
,
planId
,
detailsBean
);
user
.
setAddress
(
"河南省.郑州市.人民政府"
);
user
.
setCountry
(
"中国"
);
user
.
setProvince
(
"河南省"
);
user
.
setCity
(
"郑州市"
);
user
.
setLatitude
(
"37.773296"
);
user
.
setLongitude
(
"113.759527"
);
user
.
setDescription
(
"开心"
);
String
sin
=
appDingService
.
sin
(
authorization
,
planId
,
user
);
System
.
out
.
println
(
sin
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
...
...
src/main/java/com/tools/module/sys/service/impl/SysMenuServiceImpl.java
浏览文件 @
94432a48
...
...
@@ -77,7 +77,7 @@ public class SysMenuServiceImpl implements SysMenuService {
nativeSql
+=
"LEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id "
;
nativeSql
+=
"LEFT JOIN sys_role r ON r.role_id = rm.role_id "
;
nativeSql
+=
"WHERE r.role_id IN (SELECT role_id FROM sys_user_role WHERE user_id=?) "
;
nativeSql
+=
"AND m.TYPE = 0 "
;
nativeSql
+=
"AND m.TYPE = 0
ORDER BY m.order_num
"
;
List
<
SysMenu
>
list
=
dynamicQuery
.
query
(
SysMenu
.
class
,
nativeSql
,
new
Object
[]{
userId
});
list
.
stream
().
forEach
(
menu
->{
String
subSql
=
"SELECT DISTINCT m.* FROM sys_menu m "
;
...
...
src/main/resources/templates/app/moguding/form.html
0 → 100644
浏览文件 @
94432a48
<!DOCTYPE html>
<html
lang=
"en"
xmlns:th=
"http://www.thymeleaf.org"
>
<head
th:replace=
"common/head :: head(links)"
/>
<body>
<div
class=
"ok-body"
id=
"app"
v-cloak
>
<template>
<i-form
ref=
"checkForm"
:model=
"user"
:rules=
"ruleValidate"
:label-width=
"100"
>
<form-item
prop=
"username"
label=
"用户名:"
v-if=
"user.userId==null"
>
<i-input
maxlength=
"20"
v-model=
"user.username"
placeholder=
"请输入用户名"
></i-input>
</form-item>
<form-item
prop=
"username"
label=
"用户名:"
v-if=
"user.userId!=null"
>
{{user.username}}
</form-item>
<form-item
prop=
"password"
label=
"密码:"
>
<i-input
maxlength=
"20"
v-model=
"user.password"
placeholder=
"请输入密码"
></i-input>
</form-item>
<form-item
prop=
"address"
label=
"地址:"
>
<i-input
maxlength=
"20"
v-model=
"user.address"
placeholder=
"请输入地址"
></i-input>
</form-item>
<form-item
prop=
"country"
label=
"国家:"
>
<i-input
v-model=
"user.country"
placeholder=
"请输入国家"
></i-input>
</form-item>
<form-item
prop=
"province"
label=
"省:"
>
<i-input
v-model=
"user.province"
placeholder=
"请输入省"
></i-input>
</form-item>
<form-item
prop=
"city"
label=
"市:"
>
<i-input
v-model=
"user.city"
placeholder=
"请输入市"
></i-input>
</form-item>
<form-item
prop=
"latitude"
label=
"纬度:"
>
<i-input
v-model=
"user.latitude"
placeholder=
"请输入纬度"
></i-input>
</form-item>
<form-item
prop=
"longitude"
label=
"经度:"
>
<i-input
v-model=
"user.longitude"
placeholder=
"请输入经度"
></i-input>
</form-item>
<form-item
prop=
"description"
label=
"心情:"
>
<i-input
v-model=
"user.description"
placeholder=
"请输入心情"
></i-input>
</form-item>
</i-form>
</template>
</div>
<div
th:replace=
"common/foot :: foot(script)"
></div>
<script
th:inline=
"none"
>
var
vm
=
new
Vue
({
el
:
'
#app
'
,
data
:{
user
:{
status
:
1
,
orgName
:
''
,
orgId
:
null
},
roleName
:
""
,
statusList
:[{
"
label
"
:
"
正常
"
,
"
value
"
:
1
},{
"
label
"
:
"
禁用
"
,
"
value
"
:
0
}],
ruleValidate
:
{
username
:
[
{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}
],
password
:
[
{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}
],
address
:
[
{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
change
'
}
],
country
:
[
{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}
],
province
:
[
{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}
],
city
:
[
{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}
],
latitude
:
[
{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
blur
'
}
],
longitude
:
[
{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
change
'
}
],
description
:
[
{
required
:
true
,
message
:
'
不能为空
'
,
trigger
:
'
change
'
}
]
},
okUtils
:
null
,
okLayer
:
null
},
methods
:
{
load
:
function
(){
layui
.
use
([
"
okUtils
"
,
"
okLayer
"
],
function
()
{
vm
.
okUtils
=
layui
.
okUtils
;
vm
.
okLayer
=
layui
.
okLayer
;
if
(
vm
.
user
.
userId
!=
undefined
){
vm
.
okUtils
.
ajaxCloud
({
url
:
"
/app/ding/get
"
,
param
:
{
userId
:
vm
.
user
.
userId
},
close
:
false
,
success
:
function
(
result
)
{
vm
.
user
=
result
.
msg
;
}
});
}
});
},
acceptClick
:
function
(
dialog
){
vm
.
$refs
.
checkForm
.
validate
(
function
(
valid
){
if
(
valid
)
{
vm
.
okUtils
.
ajaxCloud
({
url
:
"
/app/ding/save
"
,
param
:
vm
.
user
,
json
:
true
,
success
:
function
(
result
)
{
vm
.
okLayer
.
msg
.
greenTick
(
result
.
msg
,
function
()
{
dialog
.
load
();
})
}
});
}
});
}
},
created
:
function
()
{
}
});
</script>
</body>
</html>
src/main/resources/templates/app/moguding/list.html
0 → 100644
浏览文件 @
94432a48
<!DOCTYPE html>
<html
lang=
"en"
xmlns:th=
"http://www.thymeleaf.org"
>
<head
th:replace=
"common/head :: head(link)"
/>
<body>
<div
id=
"app"
class=
"ok-body"
v-cloak
>
<!--模糊搜索区域-->
<template>
<div
style=
"margin-bottom: 8px;margin-top: 8px;"
>
<i-input
placeholder=
"输入内容"
v-model=
"user.description"
style=
"width: 300px"
></i-input>
<i-button
type=
"primary"
icon=
"ios-search"
@
click=
"load()"
>
搜索
</i-button>
<i-button
type=
"primary"
icon=
"ios-redo"
@
click=
"reload()"
>
重置
</i-button>
<i-button
type=
"primary"
style=
"float:right;"
icon=
"md-add"
@
click=
"add()"
>
新增
</i-button>
</div>
</template>
<template>
<i-table
size=
"small"
:columns=
"tableTitle"
:data=
"tableData"
>
</i-table>
<br>
<Page
style=
"float: right;"
:current=
"user.pageNo"
:total=
"tableSize"
:page-size=
"user.pageSize"
@
on-change=
"changePage"
@
on-page-size-change=
"changePageSize"
show-elevator
show-sizer
show-total
></Page>
</template>
</div>
<div
th:replace=
"common/foot :: foot(script)"
></div>
<script
th:inline=
"none"
>
layui
.
use
([
"
okUtils
"
,
"
okLayer
"
],
function
()
{
var
okUtils
=
layui
.
okUtils
;
var
okLayer
=
layui
.
okLayer
;
var
vm
=
new
Vue
({
el
:
'
#app
'
,
data
:
function
(){
var
that
=
this
;
return
{
tableTitle
:
[{
title
:
'
序号
'
,
minWidth
:
100
,
render
:
function
(
h
,
params
)
{
return
h
(
'
span
'
,
params
.
index
+
(
that
.
user
.
pageNo
-
1
)
*
that
.
user
.
pageSize
+
1
);
}
},{
key
:
"
username
"
,
title
:
"
用户名
"
,
minWidth
:
100
},{
key
:
"
address
"
,
title
:
"
地址
"
,
minWidth
:
100
},{
key
:
"
description
"
,
title
:
"
信息
"
,
minWidth
:
150
},{
key
:
"
gmtCreate
"
,
title
:
"
创建时间
"
,
sortable
:
true
,
minWidth
:
150
},{
title
:
'
操作
'
,
key
:
'
action
'
,
minWidth
:
200
,
align
:
'
center
'
,
render
:
function
(
h
,
params
)
{
var
functionList
=
[];
var
edit
=
h
(
'
Button
'
,
{
props
:
{
type
:
'
primary
'
,
size
:
'
small
'
,
icon
:
'
md-create
'
},
style
:
{
marginRight
:
'
8px
'
},
on
:
{
click
:
function
()
{
vm
.
edit
(
params
.
row
);
}
}
},
'
修改
'
);
functionList
.
push
(
edit
);
var
remove
=
h
(
'
Button
'
,
{
props
:
{
type
:
'
primary
'
,
size
:
'
small
'
,
icon
:
'
md-trash
'
},
style
:
{
marginRight
:
'
8px
'
},
on
:
{
click
:
function
()
{
vm
.
remove
(
params
.
row
);
}
}
},
'
删除
'
);
functionList
.
push
(
remove
);
var
sign
=
h
(
'
Button
'
,
{
props
:
{
type
:
'
primary
'
,
size
:
'
small
'
,
icon
:
'
md-create
'
},
style
:
{
marginRight
:
'
8px
'
},
on
:
{
click
:
function
()
{
vm
.
sign
(
params
.
row
);
}
}
},
'
签到
'
);
functionList
.
push
(
sign
);
return
h
(
'
div
'
,
functionList
);
}
}
],
tableData
:
[],
user
:
{
pageSize
:
10
,
pageNo
:
1
,
description
:
''
},
tableSize
:
50
,
}
},
methods
:
{
load
:
function
()
{
var
that
=
this
;
okUtils
.
ajaxCloud
({
url
:
"
/app/ding/list
"
,
param
:
that
.
user
,
success
:
function
(
result
)
{
that
.
tableData
=
result
.
msg
.
pageData
;
that
.
tableSize
=
result
.
msg
.
totalCount
;
}
});
},
reload
:
function
(){
vm
.
user
.
pageSize
=
10
;
vm
.
user
.
pageNo
=
1
;
vm
.
user
.
description
=
''
;
this
.
load
();
},
changePage
:
function
(
pageNo
)
{
vm
.
user
.
pageNo
=
pageNo
;
vm
.
load
();
},
changePageSize
:
function
(
pageSize
)
{
vm
.
user
.
pageSize
=
pageSize
;
vm
.
load
();
},
edit
:
function
(
user
)
{
okUtils
.
dialogOpen
({
title
:
'
修改
'
,
url
:
"
app/moguding/form.html
"
,
scroll
:
true
,
width
:
'
40%
'
,
height
:
'
90%
'
,
success
:
function
(
dialog
)
{
dialog
.
vm
.
user
.
userId
=
user
.
userId
;
dialog
.
vm
.
load
();
},
yes
:
function
(
dialog
)
{
dialog
.
vm
.
acceptClick
(
vm
);
}
});
},
add
:
function
(){
okUtils
.
dialogOpen
({
title
:
'
新增
'
,
url
:
"
app/moguding/form.html
"
,
scroll
:
true
,
width
:
'
40%
'
,
height
:
'
90%
'
,
success
:
function
(
dialog
)
{
dialog
.
vm
.
load
();
},
yes
:
function
(
dialog
)
{
dialog
.
vm
.
acceptClick
(
vm
);
}
});
},
remove
:
function
(
user
)
{
okLayer
.
confirm
(
"
确定要删除吗?
"
,
function
()
{
okUtils
.
ajaxCloud
({
url
:
"
/app/ding/delete
"
,
param
:
{
userId
:
user
.
userId
},
success
:
function
(
result
)
{
okLayer
.
msg
.
greenTick
(
result
.
msg
,
function
()
{
vm
.
load
();
});
}
});
})
},
sign
:
function
(
user
)
{
okLayer
.
confirm
(
"
确定要签到吗?
"
,
function
()
{
okUtils
.
ajaxCloud
({
url
:
"
/app/ding/sign
"
,
param
:
{
userId
:
user
.
userId
},
success
:
function
(
result
)
{
okLayer
.
msg
.
greenTick
(
result
.
msg
)
}
});
})
}
},
created
:
function
()
{
this
.
load
()
}
})
});
</script>
</body>
</html>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录