Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Litemall
Commits
d5d6e481
Commit
d5d6e481
authored
Jan 09, 2020
by
Junling Bu
Browse files
Merge branch 'master' into dev
parents
91c74f8e
8086d8a1
Changes
14
Hide whitespace changes
Inline
Side-by-side
docker/bin/deploy.sh
0 → 100644
View file @
d5d6e481
#!/bin/bash
cd
/home/ubuntu/docker
sudo
docker-compose down
sudo
docker-compose build
sudo
docker image prune
-f
sudo
docker-compose up
-d
docker/bin/reset.sh
0 → 100644
View file @
d5d6e481
#!/bin/bash
# 本脚本的作用是重置部署环境
# 1.重置数据库
# 2.删除storage文件夹内文件
# 3.调用deploy.sh启动服务
# 注意:由于1和2的原因,请仅在开发测试阶段使用本脚本!
# 重置数据库
# i. 请在`XXXXXX`处设置相应的root密码
# ii. 同时请注意root密码放在脚本是非常危险的,因此这里仅仅是用于开发测试阶段。
ROOT
=
root
PASSWORD
=
litemall123456
if
test
-z
"
$PASSWORD
"
then
echo
"请设置云服务器MySQL的root账号密码"
exit
1
fi
# 删除storage文件夹内文件
cd
/home/ubuntu/docker/litemall/storage
||
exit
2
sudo rm
-f
./
**
cd
/home/ubuntu/docker
||
exit
3
sudo
docker-compose down
sudo
docker-compose build
sudo
docker image prune
-f
# 删除db/data文件夹内文件重置数据
# 这样docker启动时会自动运行db/init-sql脚本,导入新的数据
cd
/home/ubuntu/docker/db/data
||
exit
1
sudo rm
-rf
./
**
cd
/home/ubuntu/docker
||
exit
3
sudo
docker-compose up
-d
docker/litemall/Dockerfile
View file @
d5d6e481
FROM
openjdk:8-jre
COPY
application.yml
/litemall/
application.yml
COPY
litemall.jar
/litemall/
litemall.jar
COPY
application.yml application.yml
COPY
litemall.jar litemall.jar
ENTRYPOINT
["java","-Djava.security.egd=file:/dev/./urandom","-jar","litemall.jar"]
\ No newline at end of file
docker/util/lazy.sh
View file @
d5d6e481
...
...
@@ -7,10 +7,10 @@
# 请设置云服务器的IP地址和账户
# 例如 ubuntu@122.51.199.160
REMOTE
=
REMOTE
=
ubuntu@122.51.199.160
# 请设置本地SSH私钥文件id_rsa路径
# 例如 /home/litemall/id_rsa
ID_RSA
=
ID_RSA
=
/d/00/cloud/litemall.txt
if
test
-z
"
$REMOTE
"
then
...
...
@@ -38,8 +38,8 @@ cd $LITEMALL_HOME || exit 2
scp
-i
$ID_RSA
-r
./docker
$REMOTE
:/home/ubuntu/
# 远程登录云服务器并执行reset脚本
#ssh $REMOTE -i $ID_RSA << eeooff
#cd /home/ubuntu
#sudo ./docker/bin/reset.sh
#exit
#eeooff
\ No newline at end of file
ssh
$REMOTE
-i
$ID_RSA
<<
eeooff
cd /home/ubuntu
sudo ./docker/bin/reset.sh
exit
eeooff
\ No newline at end of file
litemall-core/src/main/java/org/linlinjava/litemall/core/task/Task.java
View file @
d5d6e481
package
org.linlinjava.litemall.core.task
;
import
com.google.common.primitives.Ints
;
import
java.time.LocalDateTime
;
import
java.util.concurrent.Delayed
;
import
java.util.concurrent.TimeUnit
;
...
...
@@ -24,7 +27,7 @@ public abstract class Task implements Delayed, Runnable{
@Override
public
int
compareTo
(
Delayed
o
)
{
return
(
int
)(
this
.
getDelay
(
TimeUnit
.
MILLISECONDS
)
-
o
.
getDelay
(
TimeUnit
.
MILLISECONDS
)
);
return
Ints
.
saturatedCast
(
this
.
start
-
((
Task
)
o
).
start
);
}
@Override
...
...
litemall-core/src/test/java/org/linlinjava/litemall/core/TaskTest.java
View file @
d5d6e481
...
...
@@ -89,4 +89,21 @@ public class TaskTest {
e
.
printStackTrace
();
}
}
@Test
public
void
test2
()
{
DateTimeFormatter
df
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
);
String
now
=
df
.
format
(
LocalDateTime
.
now
());
System
.
out
.
println
(
"start at time="
+
now
);
taskService
.
addTask
(
new
DemoTask
(
"1"
,
0
));
taskService
.
addTask
(
new
DemoTask
(
"2"
,
1200
));
taskService
.
addTask
(
new
DemoTask
(
"3"
,
5200
));
try
{
Thread
.
sleep
(
10
*
1000
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
}
litemall-db/sql/litemall_schema.sql
View file @
d5d6e481
drop
database
if
exists
litemall
;
drop
user
if
exists
'litemall'
@
'
localhost
'
;
drop
user
if
exists
'litemall'
@
'
%
'
;
-- 支持emoji:需要mysql数据库参数: character_set_server=utf8mb4
create
database
litemall
default
character
set
utf8mb4
collate
utf8mb4_unicode_ci
;
use
litemall
;
create
user
'litemall'
@
'
localhost
'
identified
by
'litemall123456'
;
grant
all
privileges
on
litemall
.
*
to
'litemall'
@
'
localhost
'
;
create
user
'litemall'
@
'
%
'
identified
by
'litemall123456'
;
grant
all
privileges
on
litemall
.
*
to
'litemall'
@
'
%
'
;
flush
privileges
;
\ No newline at end of file
litemall-vue/src/api/api.js
View file @
d5d6e481
...
...
@@ -59,6 +59,13 @@ export function authProfile(data) {
})
}
const
AuthRegister
=
'
wx/auth/register
'
;
//账号注册
export
function
authRegister
(
data
)
{
return
request
({
url
:
AuthRegister
,
method
:
'
post
'
,
data
});
}
const
AuthReset
=
'
wx/auth/reset
'
;
//账号密码重置
export
function
authReset
(
data
)
{
return
request
({
...
...
litemall-vue/src/router/login.js
View file @
d5d6e481
...
...
@@ -10,8 +10,9 @@ export default [
component
:
()
=>
import
(
'
@/views/login/register-getCode
'
)
},
{
path
:
'
/login/registerSubmit
'
,
path
:
'
/login/registerSubmit
/:phone
'
,
name
:
'
registerSubmit
'
,
props
:
true
,
component
:
()
=>
import
(
'
@/views/login/register-submit
'
)
},
{
...
...
litemall-vue/src/views/login/register-getCode/index.vue
View file @
d5d6e481
...
...
@@ -20,6 +20,7 @@
<
script
>
import
field
from
'
@/components/field/
'
;
import
fieldGroup
from
'
@/components/field-group/
'
;
import
{
mobileReg
}
from
'
@/utils/validate
'
;
export
default
{
data
()
{
...
...
@@ -30,7 +31,21 @@ export default {
methods
:
{
submitCode
()
{
this
.
$router
.
push
({
name
:
'
registerSubmit
'
});
if
(
this
.
mobile
===
''
){
return
}
if
(
!
mobileReg
.
test
(
this
.
mobile
)){
this
.
mobile
=
''
return
}
try
{
this
.
$router
.
push
({
name
:
'
registerSubmit
'
,
params
:
{
phone
:
this
.
mobile
}
});
}
catch
(
error
)
{
console
.
log
(
error
.
message
);
}
}
},
...
...
litemall-vue/src/views/login/register-status/index.vue
View file @
d5d6e481
...
...
@@ -5,39 +5,63 @@
<div>
{{
statusText
}}
</div>
</div>
<div
class=
"status_text"
><span
class=
"red"
>
3秒
</span>
后返回到登录页, 您也可以
<router-link
to=
"/login"
class=
"red"
>
点此登录
</router-link></div>
<div
class=
"status_text"
>
<span
class=
"red"
>
<countdown
v-if=
"counting"
:time=
"3000"
@
end=
"countDownEnd"
>
<template
slot-scope=
"props"
>
{{
+
props
.
seconds
||
3
}}
</
template
>
秒
</countdown>
</span>
后返回到登录页, 您也可以
<router-link
to=
"/login"
class=
"red"
>
点此登录
</router-link>
</div>
</div>
</template>
<
script
>
import
field
from
'
@/components/field/
'
;
import
fieldGroup
from
'
@/components/field-group/
'
;
export
default
{
name
:
'
payment-status
'
,
props
:
{
status
:
String
},
data
()
{
return
{
isSuccess
:
true
};
},
computed
:
{
statusText
()
{
return
this
.
isSuccess
?
'
注册成功
'
:
'
注册失败
'
;
},
statusIcon
()
{
return
this
.
isSuccess
?
'
checked
'
:
'
fail
'
;
},
statusClass
()
{
return
this
.
isSuccess
?
'
success_icon
'
:
'
fail_icon
'
;
}
},
activated
()
{
this
.
isSuccess
=
this
.
status
===
'
success
'
;
}
name
:
'
payment-status
'
,
props
:
{
status
:
String
},
data
()
{
return
{
counting
:
true
,
isSuccess
:
true
};
},
methods
:{
countDownEnd
()
{
this
.
counting
=
false
;
window
.
location
=
'
#/login/
'
;
}
},
computed
:
{
statusText
()
{
return
this
.
isSuccess
?
'
注册成功
'
:
'
注册失败
'
;
},
statusIcon
()
{
return
this
.
isSuccess
?
'
checked
'
:
'
fail
'
;
},
statusClass
()
{
return
this
.
isSuccess
?
'
success_icon
'
:
'
fail_icon
'
;
}
},
activated
()
{
this
.
isSuccess
=
this
.
status
===
'
success
'
;
},
components
:
{
[
field
.
name
]:
field
,
[
fieldGroup
.
name
]:
fieldGroup
}
};
</
script
>
...
...
litemall-vue/src/views/login/register-submit/index.vue
View file @
d5d6e481
...
...
@@ -2,12 +2,13 @@
<md-field-group
class=
"register_submit"
>
<md-field
v-model=
"code"
icon=
"mobile"
placeholder=
"请输入验证码"
>
<div
slot=
"rightIcon"
@
click=
"getCode"
class=
"getCode red"
>
<countdown
v-if=
"counting"
:time=
"60000"
@
end=
"count
d
own
e
nd"
>
<countdown
v-if=
"counting"
:time=
"60000"
@
end=
"count
D
own
E
nd"
>
<template
slot-scope=
"props"
>
{{
+
props
.
seconds
||
60
}}
秒后获取
</
template
>
</countdown>
<span
v-else
>
获取验证码
</span>
</div>
</md-field>
<md-field
v-model=
"username"
icon=
"username"
placeholder=
"请输入用户名"
/>
<md-field
v-model=
"password"
icon=
"lock"
placeholder=
"请输入密码"
/>
<md-field
v-model=
"repeatPassword"
icon=
"lock"
placeholder=
"请再次确认密码"
/>
...
...
@@ -20,29 +21,83 @@
<
script
>
import
field
from
'
@/components/field/
'
;
import
fieldGroup
from
'
@/components/field-group/
'
;
import
{
authRegisterCaptcha
}
from
'
@/api/api
'
;
import
{
authRegister
}
from
'
@/api/api
'
;
import
{
Toast
}
from
"
vant
"
;
export
default
{
data
()
{
return
{
counting
:
true
,
code
:
''
,
password
:
''
,
repeatPassword
:
''
};
},
props
:
{
phone
:
String
},
data
()
{
return
{
counting
:
true
,
code
:
''
,
username
:
''
,
password
:
''
,
repeatPassword
:
''
};
},
mounted
:
function
(){
this
.
getCode
();
},
methods
:
{
registerSubmit
()
{
this
.
$router
.
push
({
name
:
'
registerStatus
'
,
params
:
{
status
:
'
success
'
}
if
(
this
.
username
===
''
||
this
.
code
===
''
){
return
}
if
(
this
.
password
===
''
||
this
.
repeatPassword
===
''
){
return
}
if
(
this
.
password
!==
this
.
repeatPassword
){
this
.
password
=
''
this
.
repeatPassword
=
''
return
}
let
data
=
this
.
getRegisterData
();
authRegister
(
data
).
then
(
res
=>
{
this
.
$router
.
push
({
name
:
'
registerStatus
'
,
params
:
{
status
:
'
success
'
}
});
}).
catch
(
error
=>
{
Toast
.
fail
(
error
.
data
.
errmsg
);
if
(
error
.
data
.
errno
==
705
)
{
window
.
location
=
'
#/login/
'
;
}
});
},
getCode
()
{
this
.
counting
=
true
;
let
data
=
{
mobile
:
this
.
phone
};
authRegisterCaptcha
(
data
).
then
(
res
=>
{
this
.
counting
=
true
;
}).
catch
(
error
=>
{
alert
(
error
.
data
.
errmsg
);
this
.
counting
=
true
;
});
},
countdownend
()
{
getRegisterData
()
{
const
password
=
this
.
password
;
const
code
=
this
.
code
;
const
repeatPassword
=
this
.
repeatPassword
;
const
mobile
=
this
.
phone
;
const
username
=
this
.
username
;
return
{
code
:
code
,
username
:
username
,
password
:
password
,
repeatPassword
:
repeatPassword
,
mobile
:
mobile
};
},
countDownEnd
()
{
this
.
counting
=
false
;
}
},
...
...
litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAuthController.java
View file @
d5d6e481
...
...
@@ -318,14 +318,13 @@ public class WxAuthController {
// token
String
token
=
UserTokenManager
.
generateToken
(
user
.
getId
());
Map
<
Object
,
Object
>
result
=
new
HashMap
<
Object
,
Object
>();
result
.
put
(
"token"
,
token
);
result
.
put
(
"userInfo"
,
userInfo
);
return
ResponseUtil
.
ok
(
result
);
}
/**
* 请求验证码
*
...
...
pom.xml
View file @
d5d6e481
...
...
@@ -78,7 +78,7 @@
<dependency>
<groupId>
org.hibernate.validator
</groupId>
<artifactId>
hibernate-validator
</artifactId>
<version>
6.
0.15
.Final
</version>
<version>
6.
1.0
.Final
</version>
</dependency>
<!-- MySQL 连接驱动依赖 -->
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment