记得上下班打卡 | git大法好,push需谨慎
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liquidnet-bus-v1
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
董敬伟
liquidnet-bus-v1
Commits
03e6c6ff
Commit
03e6c6ff
authored
Jan 19, 2022
by
胡佳晨
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev_goblin' into dev_goblin
parents
54249b71
95e0f7df
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
230 additions
and
61 deletions
+230
-61
AdamPosScanitVo.java
...va/com/liquidnet/service/adam/dto/vo/AdamPosScanitVo.java
+41
-0
AdamProScanitVo.java
...va/com/liquidnet/service/adam/dto/vo/AdamProScanitVo.java
+13
-2
category.html
...esources/templates/zhengzai/goblin/category/category.html
+90
-48
PlatformAdamPosController.java
...e/platform/controller/adam/PlatformAdamPosController.java
+41
-0
PlatformAdamProController.java
...e/platform/controller/adam/PlatformAdamProController.java
+5
-8
PlatformAdamUserPosService.java
...latform/service/impl/adam/PlatformAdamUserPosService.java
+35
-0
PlatformAdamUserProService.java
...latform/service/impl/adam/PlatformAdamUserProService.java
+5
-3
No files found.
liquidnet-bus-api/liquidnet-service-adam-api/src/main/java/com/liquidnet/service/adam/dto/vo/AdamPosScanitVo.java
0 → 100644
View file @
03e6c6ff
package
com
.
liquidnet
.
service
.
adam
.
dto
.
vo
;
import
com.liquidnet.commons.lang.util.SensitizeUtil
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
org.apache.commons.lang3.StringUtils
;
import
java.io.Serializable
;
import
java.util.Arrays
;
import
java.util.List
;
@ApiModel
(
value
=
"AdamPosScanitVo"
,
description
=
"POS机用户扫码信息"
)
@Data
public
class
AdamPosScanitVo
implements
Serializable
,
Cloneable
{
private
static
final
long
serialVersionUID
=
5633320792752494064L
;
@ApiModelProperty
(
position
=
10
,
value
=
"会员标记[0-普通用户|2-过期会员|10-老会员|11-新会员]"
)
private
String
uid
;
@ApiModelProperty
(
position
=
11
,
value
=
"昵称"
)
private
String
nickname
;
@ApiModelProperty
(
position
=
12
,
value
=
"手机号"
)
private
String
mobile
;
@ApiModelProperty
(
position
=
13
,
value
=
"会员标记[0-普通用户|2-过期会员|10-老会员|11-新会员]"
)
private
Integer
stageMarker
;
private
static
final
AdamPosScanitVo
obj
=
new
AdamPosScanitVo
();
public
static
AdamPosScanitVo
getNew
()
{
try
{
return
(
AdamPosScanitVo
)
obj
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
return
new
AdamPosScanitVo
();
}
}
public
AdamPosScanitVo
desensitize
()
{
this
.
setMobile
(
SensitizeUtil
.
custom
(
this
.
getMobile
(),
3
,
4
));
return
this
;
}
}
liquidnet-bus-api/liquidnet-service-adam-api/src/main/java/com/liquidnet/service/adam/dto/vo/AdamProScanitVo.java
View file @
03e6c6ff
package
com
.
liquidnet
.
service
.
adam
.
dto
.
vo
;
import
com.liquidnet.commons.lang.util.SensitizeUtil
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
@@ -11,9 +12,13 @@ import java.util.List;
@Data
public
class
AdamProScanitVo
implements
Serializable
,
Cloneable
{
private
static
final
long
serialVersionUID
=
5633320792752494064L
;
@ApiModelProperty
(
position
=
11
,
value
=
"会员标记[0-普通用户|2-过期会员|10-老会员|11-新会员]"
)
@ApiModelProperty
(
position
=
11
,
value
=
"昵称"
)
private
String
nickname
;
@ApiModelProperty
(
position
=
12
,
value
=
"手机号"
)
private
String
mobile
;
@ApiModelProperty
(
position
=
13
,
value
=
"会员标记[0-普通用户|2-过期会员|10-老会员|11-新会员]"
)
private
Integer
stageMarker
;
@ApiModelProperty
(
position
=
1
2
,
value
=
"用户演出标记信息List"
)
@ApiModelProperty
(
position
=
1
4
,
value
=
"用户演出标记信息List"
)
private
List
<
AdamProPerformMarkVo
>
performMarkVos
;
private
static
final
AdamProScanitVo
obj
=
new
AdamProScanitVo
();
...
...
@@ -25,4 +30,10 @@ public class AdamProScanitVo implements Serializable, Cloneable {
return
new
AdamProScanitVo
();
}
}
public
AdamProScanitVo
desensitize
()
{
this
.
setMobile
(
SensitizeUtil
.
custom
(
this
.
getMobile
(),
3
,
4
));
return
this
;
}
}
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/resources/templates/zhengzai/goblin/category/category.html
View file @
03e6c6ff
...
...
@@ -121,7 +121,17 @@
<table
id=
"bootstrap-table"
></table>
</div>
<div
id=
"addClassify"
>
<div
class=
"selectClassify"
>
</div>
</div>
</div>
<th:block
th:include=
"include :: footer"
/>
<th:block
th:include=
"include :: bootstrap-fileinput-js"
/>
<script
th:inline=
"javascript"
>
var
rmvFlg
=
[[
$
{@
permission
.
hasPermi
(
'goblin:category:rmv'
)}]];
var
prefix
=
ctx
+
"goblin/category"
;
let
rowId
=
''
;
let
modalDom
=
`<div class="selectClassify">
<span>分类选择:</span>
<label>
<input type="radio" checked value="1" id="optionsRadios1" name="optionsRadios"><span>一级</span></label>
...
...
@@ -135,6 +145,7 @@
<span>一级分类:</span>
<input class="form-control" id="firstTypeIpt" type="text">
<select class="form-control" name="tagType" id="firstTypeSelect" style="display: none;">
<option value="">全部</option>
</select>
</div>
<div class="selectClassifyOne selectClassifyOne2" style="display: none;">
...
...
@@ -161,16 +172,7 @@
<div class="bottomBtn">
<a src="javascript:;" class="layui-layer-btn0 paddings" onclick="yes(1,2)">确定</a>
<a class="layui-layer-btn1 layui-layer-btn1" onclick="closeModal()">取消</a>
</div>
</div>
</div>
</div>
<th:block
th:include=
"include :: footer"
/>
<th:block
th:include=
"include :: bootstrap-fileinput-js"
/>
<script
th:inline=
"javascript"
>
var
rmvFlg
=
[[
$
{@
permission
.
hasPermi
(
'goblin:category:rmv'
)}]];
var
prefix
=
ctx
+
"goblin/category"
;
let
rowId
=
''
;
</div>`
$
(
function
()
{
$
(
"#fileinput"
).
fileinput
({
'theme'
:
'explorer-fas'
,
...
...
@@ -225,6 +227,65 @@
$
.
table
.
init
(
options
);
});
$
(
"#button-open-10"
).
click
(
function
(){
$
(
'#addClassify'
).
append
(
modalDom
)
$
(
"#fileinput"
).
fileinput
({
'theme'
:
'explorer-fas'
,
'uploadUrl'
:
'https://devplatform.zhengzai.tv/platform/basicServices/alOss/upload'
,
"uploadExtraData"
:
{
"pathName"
:
"banner"
,
"buckType"
:
1
},
autoReplace
:
true
,
showCaption
:
false
,
showPreview
:
false
,
showRemove
:
false
,
showUpload
:
false
,
showCancel
:
false
,
showClose
:
false
,
autoReplace
:
true
,
dropZoneTitle
:
"请上传文件"
,
maxFileCount
:
1
}).
on
(
"filebatchselected"
,
function
(
event
,
files
)
{
//默认上传
$
(
this
).
fileinput
(
"upload"
);
})
.
on
(
"fileuploaded"
,
function
(
event
,
data
)
{
//上传回调事件
showPicture
=
'https://img.zhengzai.tv/'
+
data
.
response
.
data
.
ossPath
;
$
(
"#viewImg"
).
attr
(
'src'
,
showPicture
)
})
$
(
"input[name=optionsRadios]"
).
on
(
'change'
,
function
(
e
)
{
console
.
log
(
e
.
target
.
value
)
let
num
=
e
.
target
.
value
;
$
(
"#typeValue"
).
val
(
num
);
if
(
num
==
1
)
{
$
(
".selectClassifyOne2"
).
hide
();
$
(
".selectClassifyOne3"
).
hide
();
$
(
".selectClassifyOne"
).
show
();
$
(
"#firstTypeSelect"
).
hide
();
$
(
"#firstTypeIpt"
).
show
();
}
else
if
(
num
==
2
)
{
$
(
".selectClassifyOne2"
).
show
();
$
(
"#secondTypeSelect"
).
hide
();
$
(
"#secondTypeIpt"
).
show
();
$
(
".selectClassifyOne"
).
show
();
$
(
"#firstTypeSelect"
).
show
();
$
(
"#firstTypeIpt"
).
hide
();
$
(
".selectClassifyOne3"
).
hide
();
filterSelect
(
''
,
2
)
}
else
{
$
(
".selectClassifyOne"
).
show
();
$
(
"#firstTypeSelect"
).
show
();
$
(
"#firstTypeIpt"
).
hide
();
$
(
".selectClassifyOne2"
).
show
();
$
(
"#secondTypeSelect"
).
show
();
$
(
"#secondTypeIpt"
).
hide
();
$
(
".selectClassifyOne3"
).
show
();
filterSelect
(
''
,
2
)
}
})
$
(
"#firstTypeSelect"
).
on
(
'change'
,
function
(
e
)
{
console
.
log
(
e
)
filterSelect
(
e
.
target
.
value
,
3
)
})
layer
.
open
({
type
:
1
,
shade
:
true
,
...
...
@@ -237,10 +298,7 @@
}
});
})
$
(
"#firstTypeSelect"
).
on
(
'change'
,
function
(
e
)
{
console
.
log
(
e
)
filterSelect
(
e
.
target
.
value
,
3
)
})
// function onCheck (row, $element) {
// console.log(row, $element)
// rowId = row.fcateId;
...
...
@@ -272,46 +330,28 @@
success
:
function
(
res
)
{
console
.
log
(
res
,
'res'
)
$
(
"pull-right button[type=refresh]"
).
click
();
closeModal
()
closeModal
()
;
}
})
}
function
closeModal
()
{
$
(
"#addClassify"
).
empty
()
// $("#firstTypeIpt").val('');
// $("#secondTypeIpt").val('');
// $("#threeIpt").val('');
// $("#threeIpt").attr('src', '');
// $("#firstTypeSelect").empty().append('
<
option
value
=
""
>
全部
<
/option>'
)
// $("#secondTypeSelect").empty().append('
<
option
value
=
""
>
全部
<
/option>'
)
// $("input[name=optionsRadios value=1]").attr('checked')
$
(
".layui-layer-close1"
).
click
();
}
$
(
"input[name=optionsRadios]"
).
on
(
'change'
,
function
(
e
)
{
console
.
log
(
e
.
target
.
value
)
let
num
=
e
.
target
.
value
;
$
(
"#typeValue"
).
val
(
num
);
if
(
num
==
1
)
{
$
(
".selectClassifyOne2"
).
hide
();
$
(
".selectClassifyOne3"
).
hide
();
$
(
".selectClassifyOne"
).
show
();
$
(
"#firstTypeSelect"
).
hide
();
$
(
"#firstTypeIpt"
).
show
();
}
else
if
(
num
==
2
)
{
$
(
".selectClassifyOne2"
).
show
();
$
(
"#secondTypeSelect"
).
hide
();
$
(
"#secondTypeIpt"
).
show
();
$
(
".selectClassifyOne"
).
show
();
$
(
"#firstTypeSelect"
).
show
();
$
(
"#firstTypeIpt"
).
hide
();
$
(
".selectClassifyOne3"
).
hide
();
filterSelect
(
''
,
2
)
}
else
{
$
(
".selectClassifyOne"
).
show
();
$
(
"#firstTypeSelect"
).
show
();
$
(
"#firstTypeIpt"
).
hide
();
$
(
".selectClassifyOne2"
).
show
();
$
(
"#secondTypeSelect"
).
show
();
$
(
"#secondTypeIpt"
).
hide
();
$
(
".selectClassifyOne3"
).
show
();
filterSelect
(
''
,
2
)
}
})
// $("input[name=optionsRadios]").on('change', function (e) {
// })
function
filterSelect
(
parentsId
,
num
)
{
console
.
log
(
'这个没触发'
)
let
data
=
{
cateId
:
parentsId
,
grade
:
num
-
1
...
...
@@ -329,9 +369,11 @@
str
+=
`<option value="
${
item
.
cateId
}
">
${
item
.
name
}
</option>`
})
if
(
!
parentsId
)
{
$
(
"#firstTypeSelect"
).
html
(
str
);
$
(
"#firstTypeSelect"
).
empty
().
append
(
'<option value="">全部</option>'
);
$
(
"#firstTypeSelect"
).
append
(
str
);
}
else
{
$
(
"#secondTypeSelect"
).
html
(
str
);
$
(
"#secondTypeSelect"
).
empty
().
append
(
'<option value="">全部</option>'
);
$
(
"#secondTypeSelect"
).
append
(
str
);
}
}
})
...
...
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/controller/adam/PlatformAdamPosController.java
0 → 100644
View file @
03e6c6ff
package
com
.
liquidnet
.
service
.
platform
.
controller
.
adam
;
import
com.github.xiaoymin.knife4j.annotations.ApiOperationSupport
;
import
com.liquidnet.service.adam.dto.vo.AdamPosScanitVo
;
import
com.liquidnet.service.adam.dto.vo.AdamProScanitVo
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.platform.service.impl.adam.PlatformAdamUserPosService
;
import
com.liquidnet.service.platform.service.impl.adam.PlatformAdamUserProService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.PutMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.validation.constraints.NotBlank
;
@Api
(
tags
=
"POS机支付:用户相关"
)
@Slf4j
@Validated
@RestController
@RequestMapping
(
"pos"
)
public
class
PlatformAdamPosController
{
@Autowired
PlatformAdamUserPosService
platformAdamUserPosService
;
@ApiOperationSupport
(
order
=
1
)
@ApiOperation
(
value
=
"扫一扫"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"code"
,
value
=
"用户QRCODE"
),
})
@PutMapping
(
value
=
{
"scanit"
})
public
ResponseDto
<
AdamPosScanitVo
>
scanit
(
@NotBlank
(
message
=
"参数有误"
)
@RequestParam
String
code
)
{
return
ResponseDto
.
success
(
platformAdamUserPosService
.
scanitProcess
(
code
).
desensitize
());
}
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/controller/adam/PlatformAdamProController.java
View file @
03e6c6ff
...
...
@@ -3,16 +3,14 @@ package com.liquidnet.service.platform.controller.adam;
import
com.github.xiaoymin.knife4j.annotations.ApiOperationSupport
;
import
com.liquidnet.common.exception.constant.ErrorCode
;
import
com.liquidnet.service.adam.dto.vo.AdamProScanitVo
;
import
com.liquidnet.service.base.ErrorMapping
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.platform.service.impl.adam.PlatformAdamProService
;
import
com.liquidnet.service.platform.service.impl.adam.PlatformAdam
User
ProService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.PutMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
...
...
@@ -28,17 +26,16 @@ import javax.validation.constraints.NotBlank;
@RequestMapping
(
"pro"
)
public
class
PlatformAdamProController
{
@Autowired
PlatformAdam
ProService
platformAdam
ProService
;
PlatformAdam
UserProService
platformAdamUser
ProService
;
@ApiOperationSupport
(
order
=
1
)
@ApiOperation
(
value
=
"扫一扫"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"pidco
de"
,
value
=
"用户QRCODE@演出ID
"
),
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"pidco
"
,
value
=
"格式[用户QRCODE@演出ID]
"
),
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"pname"
,
value
=
"演出名称"
),
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"cod"
,
value
=
"用户QRCODE"
),
})
@PutMapping
(
value
=
{
"scanit"
})
public
ResponseDto
<
AdamProScanitVo
>
s
endSms
(
@NotBlank
(
message
=
"参数有误"
)
@RequestParam
String
pidco
,
public
ResponseDto
<
AdamProScanitVo
>
s
can
(
@NotBlank
(
message
=
"参数有误"
)
@RequestParam
String
pidco
,
@NotBlank
(
message
=
"参数有误"
)
@RequestParam
String
pname
)
{
String
[]
split
=
pidco
.
split
(
"@"
);
if
(
split
.
length
<
2
)
{
...
...
@@ -46,6 +43,6 @@ public class PlatformAdamProController {
return
ResponseDto
.
failure
(
ErrorCode
.
HTTP_PARAM_ERROR
.
getMessage
());
}
log
.
info
(
"PRO:SCANIT[pidco={},pname={}]"
,
pidco
,
pname
);
return
ResponseDto
.
success
(
platformAdam
ProService
.
scanitProcess
(
split
[
0
],
split
[
1
],
split
[
2
]
));
return
ResponseDto
.
success
(
platformAdam
UserProService
.
scanitProcess
(
split
[
0
],
split
[
1
],
split
[
2
]).
desensitize
(
));
}
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/service/impl/adam/PlatformAdamUserPosService.java
0 → 100644
View file @
03e6c6ff
package
com
.
liquidnet
.
service
.
platform
.
service
.
impl
.
adam
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.liquidnet.common.cache.redis.util.RedisDataSourceUtil
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.service.adam.dto.vo.AdamPosScanitVo
;
import
com.liquidnet.service.adam.dto.vo.AdamProPerformMarkVo
;
import
com.liquidnet.service.adam.dto.vo.AdamProScanitVo
;
import
com.liquidnet.service.adam.entity.AdamUser
;
import
com.liquidnet.service.adam.entity.AdamUserInfo
;
import
com.liquidnet.service.adam.mapper.AdamUserInfoMapper
;
import
com.liquidnet.service.adam.mapper.AdamUserMapper
;
import
com.liquidnet.service.platform.utils.ObjectUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.time.LocalDate
;
import
java.util.ArrayList
;
@Service
public
class
PlatformAdamUserPosService
extends
ServiceImpl
<
AdamUserMapper
,
AdamUser
>
{
@Autowired
private
RedisDataSourceUtil
redisDataSourceUtil
;
public
AdamPosScanitVo
scanitProcess
(
String
code
)
{
AdamPosScanitVo
scanitVo
=
AdamPosScanitVo
.
getNew
();
scanitVo
.
setNickname
(
"nk"
);
scanitVo
.
setMobile
(
"13700000000"
);
scanitVo
.
setStageMarker
(
11
);
scanitVo
.
setUid
(
"99999"
);
return
scanitVo
;
}
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/service/impl/adam/PlatformAdamProService.java
→
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/service/impl/adam/PlatformAdam
User
ProService.java
View file @
03e6c6ff
...
...
@@ -5,8 +5,8 @@ import com.liquidnet.common.cache.redis.util.RedisDataSourceUtil;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.service.adam.dto.vo.AdamProPerformMarkVo
;
import
com.liquidnet.service.adam.dto.vo.AdamProScanitVo
;
import
com.liquidnet.service.adam.entity.AdamUser
Info
;
import
com.liquidnet.service.adam.mapper.AdamUser
Info
Mapper
;
import
com.liquidnet.service.adam.entity.AdamUser
;
import
com.liquidnet.service.adam.mapper.AdamUserMapper
;
import
com.liquidnet.service.platform.utils.ObjectUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -15,13 +15,15 @@ import java.time.LocalDate;
import
java.util.ArrayList
;
@Service
public
class
PlatformAdam
ProService
extends
ServiceImpl
<
AdamUserInfoMapper
,
AdamUserInfo
>
{
public
class
PlatformAdam
UserProService
extends
ServiceImpl
<
AdamUserMapper
,
AdamUser
>
{
@Autowired
private
RedisDataSourceUtil
redisDataSourceUtil
;
public
AdamProScanitVo
scanitProcess
(
String
pid
,
String
pna
,
String
cod
)
{
AdamProScanitVo
scanitVo
=
AdamProScanitVo
.
getNew
();
scanitVo
.
setNickname
(
"nk"
);
scanitVo
.
setMobile
(
"13700000000"
);
scanitVo
.
setStageMarker
(
11
);
ArrayList
<
AdamProPerformMarkVo
>
performMarkVoArrayList
=
ObjectUtil
.
getAdamProPerformMarkVoArrayList
();
...
...
Write
Preview
Markdown
is supported
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