Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
Y
YX_IDENT_beijing_auxiliary_YD
Project
Project
Details
Activity
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
zhangyusheng
YX_IDENT_beijing_auxiliary_YD
Commits
84bddbc4
Commit
84bddbc4
authored
Apr 21, 2025
by
xiachenqi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修正读取个人邮寄excel中受理号的识别问题
parent
35e0f45c
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
118 additions
and
68 deletions
+118
-68
LogApi.java
src/main/java/com/yxproject/start/api/LogApi.java
+8
-4
ReadExcelApi.java
src/main/java/com/yxproject/start/api/ReadExcelApi.java
+2
-2
TaskListApi.java
src/main/java/com/yxproject/start/api/TaskListApi.java
+38
-37
LogMapper.java
src/main/java/com/yxproject/start/mapper/LogMapper.java
+1
-1
PersonPostMapper.java
...ain/java/com/yxproject/start/mapper/PersonPostMapper.java
+1
-1
TaskListMapper.java
src/main/java/com/yxproject/start/mapper/TaskListMapper.java
+0
-0
GroupNoService.java
...main/java/com/yxproject/start/service/GroupNoService.java
+5
-6
LogService.java
src/main/java/com/yxproject/start/service/LogService.java
+2
-2
TaskListService.java
...ain/java/com/yxproject/start/service/TaskListService.java
+5
-2
TaskListServiceImpl.java
...com/yxproject/start/service/impl/TaskListServiceImpl.java
+56
-13
No files found.
src/main/java/com/yxproject/start/api/LogApi.java
View file @
84bddbc4
...
...
@@ -22,13 +22,17 @@ import static com.yxproject.start.utils.YXStringUtils.getCurrentDate2String;
@RestController
@RequestMapping
(
"LogApi"
)
public
class
LogApi
{
@Autowired
private
LogService
logService
;
@Autowired
private
PersonPostService
personPostService
;
private
final
LogService
logService
;
private
final
PersonPostService
personPostService
;
Logger
logger
=
Logger
.
getLogger
(
LogApi
.
class
);
public
LogApi
(
LogService
logService
,
PersonPostService
personPostService
)
{
this
.
logService
=
logService
;
this
.
personPostService
=
personPostService
;
}
/**
* 查询新包生成日志
* @param newFileName 新文件名
...
...
src/main/java/com/yxproject/start/api/ReadExcelApi.java
View file @
84bddbc4
...
...
@@ -208,8 +208,8 @@ public class ReadExcelApi {
personPostEntity
.
setLatticeMouthInformation
((
String
)
list2
.
get
(
21
));
personPostEntity
.
setNatureOfTheInternal
((
String
)
list2
.
get
(
22
));
personPostEntity
.
setNatureOfTheInformation
((
String
)
list2
.
get
(
23
));
//
personPostEntity.setFirstWhite(list2.get(24).toString().substring(5, 27));
personPostEntity
.
setFirstWhite
(
list2
.
get
(
24
).
toString
());
personPostEntity
.
setFirstWhite
(
list2
.
get
(
24
).
toString
().
substring
(
5
,
27
));
//
personPostEntity.setFirstWhite(list2.get(24).toString());
personPostEntity
.
setFileId
(
fileNameDicEntity
.
getFileId
());
personPostEntity
.
setGk
(
gkMap
);
}
...
...
src/main/java/com/yxproject/start/api/TaskListApi.java
View file @
84bddbc4
...
...
@@ -2,19 +2,20 @@ package com.yxproject.start.api;
import
com.yxproject.start.entity.*
;
import
com.yxproject.start.service.*
;
import
com.yxproject.start.service.impl.TaskListServiceImpl
;
import
net.sf.json.JSONArray
;
import
net.sf.json.JSONObject
;
import
org.apache.log4j.Logger
;
import
org.apache.log4j.MDC
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.core.io.FileSystemResource
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.transaction.Transactional
;
import
java.io.IOException
;
import
java.util.*
;
/**
...
...
@@ -24,21 +25,26 @@ import java.util.*;
@RestController
@RequestMapping
(
"TaskList"
)
public
class
TaskListApi
{
@Autowired
private
TaskListService
taskListService
;
@Autowired
private
SpecialCardService
specialCardService
;
@Autowired
private
GroupNoService
groupNoService
;
@Autowired
private
PreproPersonService
preproPersonService
;
@Autowired
private
ReceiptService
receiptService
;
@Autowired
private
FailedCardService
failedCardService
;
private
final
TaskListService
taskListService
;
private
final
SpecialCardService
specialCardService
;
private
final
GroupNoService
groupNoService
;
private
final
PreproPersonService
preproPersonService
;
private
final
ReceiptService
receiptService
;
private
final
FailedCardService
failedCardService
;
private
final
TaskListServiceImpl
taskListServiceImpl
;
Logger
logger
=
Logger
.
getLogger
(
TaskListApi
.
class
);
public
TaskListApi
(
TaskListService
taskListService
,
SpecialCardService
specialCardService
,
GroupNoService
groupNoService
,
PreproPersonService
preproPersonService
,
ReceiptService
receiptService
,
FailedCardService
failedCardService
,
TaskListServiceImpl
taskListServiceImpl
)
{
this
.
taskListService
=
taskListService
;
this
.
specialCardService
=
specialCardService
;
this
.
groupNoService
=
groupNoService
;
this
.
preproPersonService
=
preproPersonService
;
this
.
receiptService
=
receiptService
;
this
.
failedCardService
=
failedCardService
;
this
.
taskListServiceImpl
=
taskListServiceImpl
;
}
/**
* 更改任务单状态
* (下发、预订位、平压、冲切、分拣)
...
...
@@ -205,13 +211,8 @@ public class TaskListApi {
public
List
<
Object
>
queryByCountyAtAuxiliary
(
@RequestParam
(
"process"
)
String
process
,
HttpServletResponse
resp
,
HttpServletRequest
requ
)
{
String
remoteAddr
=
requ
.
getRemoteAddr
();
MDC
.
put
(
"ip"
,
remoteAddr
);
List
<
Object
>
objects
=
new
ArrayList
<>();
// try {
objects
=
taskListService
.
selectByCountyAtAuxiliary
(
Long
.
valueOf
(
process
)
-
1
);
// }catch (Exception e){
// logger.error("工序:" + process);
// logger.error("Exception 查询任务单详情(辅助库)(下发、数据核验、膜打印)异常", e);
// }
List
<
Object
>
objects
;
objects
=
taskListService
.
selectByCountyAtAuxiliary
(
Long
.
parseLong
(
process
)
-
1
);
return
objects
;
}
...
...
@@ -290,16 +291,17 @@ public class TaskListApi {
* (创建、下发、膜打印、预订位、平压、冲切)
*
* @param process 工序
* @param resp
* @return
*/
@RequestMapping
(
"queryHistoryTaskAtAuxiliary"
)
public
List
<
Object
>
queryHistoryTaskAtAuxiliary
(
@RequestParam
(
"process"
)
String
process
,
@RequestParam
(
"date"
)
String
date
,
@RequestParam
(
"workGroup"
)
String
workGroup
,
HttpServletResponse
resp
,
HttpServletRequest
requ
)
{
public
List
<
Object
>
queryHistoryTaskAtAuxiliary
(
@RequestParam
(
"process"
)
String
process
,
@RequestParam
(
"date"
)
String
date
,
@RequestParam
(
"workGroup"
)
String
workGroup
,
HttpServletRequest
requ
)
{
String
remoteAddr
=
requ
.
getRemoteAddr
();
MDC
.
put
(
"ip"
,
remoteAddr
);
List
<
Object
>
objects
=
new
ArrayList
<>();
try
{
objects
=
taskListService
.
selectHistoryTaskAtAuxiliary
(
Long
.
valueOf
(
process
),
replaceDate
(
date
),
workGroup
);
objects
=
taskListService
.
selectHistoryTaskAtAuxiliary
(
Long
.
parseLong
(
process
),
replaceDate
(
date
),
workGroup
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"工序:"
+
process
+
"查询时间:"
+
date
+
"工作组"
+
workGroup
);
logger
.
error
(
"Exception 查询任务单详情(历史)(辅助库)(创建、下发、膜打印、预订位、平压、冲切)异常"
,
e
);
...
...
@@ -761,15 +763,14 @@ public class TaskListApi {
return
str
.
replace
(
"-"
,
""
).
replace
(
" "
,
""
).
replace
(
":"
,
""
);
}
/**
* 字符串去除空格
*
* @param str 原始字符串
* @return 返回新的字符串
*/
private
String
replaceNullString
(
String
str
)
{
if
(
str
==
""
)
{
return
null
;
}
else
return
str
;
@GetMapping
(
"exportPostPersonInfo"
)
public
ResponseEntity
<
FileSystemResource
>
exportPostPersonInfo
(
@RequestParam
String
taskDate
)
throws
IOException
{
String
fileName
=
taskListServiceImpl
.
exportPostPersonInfo
(
taskDate
);
FileSystemResource
resource
=
new
FileSystemResource
(
fileName
);
// 返回文件下载响应
return
ResponseEntity
.
ok
()
.
header
(
HttpHeaders
.
CONTENT_DISPOSITION
,
"attachment; filename="
+
fileName
)
.
contentType
(
org
.
springframework
.
http
.
MediaType
.
parseMediaType
(
"text/csv"
))
.
body
(
resource
);
}
}
src/main/java/com/yxproject/start/mapper/LogMapper.java
View file @
84bddbc4
...
...
@@ -89,7 +89,7 @@ public interface LogMapper {
* @return
*/
@Insert
(
"INSERT INTO ANALYSIS (FILE_DIC_ID,FILE_ID,COMMON_CARD_COUNT,POST_CARD_COUNT,ANALYSIS_DATE) VALUES (#{fileDic},#{fileId},#{commonCardCount},#{postCardCount},#{analysisDate})"
)
public
boolean
insertIntoAnalysis
(
@Param
(
"fileDic"
)
String
fileDic
,
@Param
(
"fileId"
)
String
fileId
,
@Param
(
"commonCardCount"
)
String
commonCardCount
,
@Param
(
"postCardCount"
)
String
postCardCount
,
@Param
(
"analysisDate"
)
String
analysisDate
);
boolean
insertIntoAnalysis
(
@Param
(
"fileDic"
)
String
fileDic
,
@Param
(
"fileId"
)
String
fileId
,
@Param
(
"commonCardCount"
)
String
commonCardCount
,
@Param
(
"postCardCount"
)
String
postCardCount
,
@Param
(
"analysisDate"
)
String
analysisDate
);
//查询解析数据
...
...
src/main/java/com/yxproject/start/mapper/PersonPostMapper.java
View file @
84bddbc4
...
...
@@ -57,7 +57,7 @@ public interface PersonPostMapper {
" <when test='latticeMouthInformation!=\"\"'> and PERSON_POST.LATTICE_MOUTH_INFORMATION=#{latticeMouthInformation} </when>"
+
" <when test='getToCounty!=\"\"'> and PERSON_POST.GET_TO_COUNTY in ( ${getToCounty}) </when>"
+
" <if test='GK== 0 '> and GK = 0 </if>"
+
" <if test='GK== 1 '> and GK in (1
,2,3,
4) </if>"
+
" <if test='GK== 1 '> and GK in (1
,2,3,
4) </if>"
+
" <if test='GK== 5 '> and GK = 5</if>"
+
" <when test='startDate!=\"\"'> and subStr(FILE_NAME_DIC.UPLOAD_DATE,0,8) between ${startDate} and ${endDate} </when>"
+
" <when test='printDate!=\"\"'> and to_char(PERSON_POST.print_Date,'yyyyMMdd') = ${printDate} </when>"
+
...
...
src/main/java/com/yxproject/start/mapper/TaskListMapper.java
View file @
84bddbc4
This diff is collapsed.
Click to expand it.
src/main/java/com/yxproject/start/service/GroupNoService.java
View file @
84bddbc4
...
...
@@ -2,7 +2,6 @@ package com.yxproject.start.service;
import
com.yxproject.start.entity.GroupNoEntity
;
import
javax.jws.Oneway
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -11,9 +10,9 @@ import java.util.Map;
* 2019/3/6 21:12
*/
public
interface
GroupNoService
{
public
boolean
saveGroupNo
(
GroupNoEntity
groupNoEntity
);
public
List
<
GroupNoEntity
>
selectGroupNoEntityByGroupNo
(
String
groupNo
);
public
boolean
updateGroupNoSpecialCount
(
GroupNoEntity
groupNoEntity
);
public
int
selectGroupCount
(
long
TaskId
);
public
List
<
Map
<
String
,
Object
>>
selectAcceptNo
(
String
cardId
);
boolean
saveGroupNo
(
GroupNoEntity
groupNoEntity
);
List
<
GroupNoEntity
>
selectGroupNoEntityByGroupNo
(
String
groupNo
);
boolean
updateGroupNoSpecialCount
(
GroupNoEntity
groupNoEntity
);
int
selectGroupCount
(
long
TaskId
);
List
<
Map
<
String
,
Object
>>
selectAcceptNo
(
String
cardId
);
}
src/main/java/com/yxproject/start/service/LogService.java
View file @
84bddbc4
...
...
@@ -26,7 +26,7 @@ public interface LogService {
public
boolean
insertAnalysisDate
(
String
printDate
,
String
fileId
);
public
boolean
changeCardTypeByPrintDate
(
String
analysisDate
,
String
printDate
);
boolean
changeCardTypeByPrintDate
(
String
analysisDate
,
String
printDate
);
public
boolean
deleteFilesData
(
@Param
(
"id"
)
String
id
);
...
...
@@ -34,7 +34,7 @@ public interface LogService {
public
List
<
String
>
selectId
(
@Param
(
"uploadTime"
)
String
uploadTime
);
public
boolean
insertIntoAnalysis
(
@Param
(
"fileDic"
)
String
fileDic
,
@Param
(
"fileId"
)
String
fileId
,
@Param
(
"commonCardCount"
)
String
commonCardCount
,
@Param
(
"postCardCount"
)
String
postCardCount
,
@Param
(
"analysisDate"
)
String
analysisDate
);
boolean
insertIntoAnalysis
(
@Param
(
"fileDic"
)
String
fileDic
,
@Param
(
"fileId"
)
String
fileId
,
@Param
(
"commonCardCount"
)
String
commonCardCount
,
@Param
(
"postCardCount"
)
String
postCardCount
,
@Param
(
"analysisDate"
)
String
analysisDate
);
List
<
Map
<
String
,
Object
>>
selectFileIdByUploadDate
(
@Param
(
"uploadDate"
)
String
uploadDate
);
...
...
src/main/java/com/yxproject/start/service/TaskListService.java
View file @
84bddbc4
...
...
@@ -8,6 +8,7 @@ import com.yxproject.start.entity.TaskList.CountGajgEntity;
import
com.yxproject.start.entity.TaskList.TaskListEntity
;
import
org.apache.ibatis.annotations.Param
;
import
java.io.IOException
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -27,9 +28,9 @@ public interface TaskListService {
public
Map
<
String
,
Object
>
selectByGroupNoAtACCU
(
String
date
,
String
typeCode
,
String
countyCode
,
long
currPage
,
long
pageSize
);
public
List
<
Object
>
selectByCountyAtAuxiliary
(
long
process
);
List
<
Object
>
selectByCountyAtAuxiliary
(
long
process
);
public
List
selectHistoryTaskAtAuxiliary
(
long
process
,
String
date
,
String
workGroup
);
List
selectHistoryTaskAtAuxiliary
(
long
process
,
String
date
,
String
workGroup
);
public
List
selectHistoryTaskAtAuxiliary2
(
String
date
);
...
...
@@ -127,4 +128,6 @@ public interface TaskListService {
public
boolean
deletePolice
(
String
policeCode
);
public
boolean
updateTaskIdInDataAuditing
(
long
newTaskId
,
long
oldTaskId
);
String
exportPostPersonInfo
(
String
taskDate
)
throws
IOException
;
}
src/main/java/com/yxproject/start/service/impl/TaskListServiceImpl.java
View file @
84bddbc4
package
com
.
yxproject
.
start
.
service
.
impl
;
import
com.opencsv.CSVWriter
;
import
com.yxproject.start.entity.*
;
import
com.yxproject.start.entity.TaskList.TaskListEntity
;
import
com.yxproject.start.mapper.DataAuditingMapper
;
import
com.yxproject.start.mapper.GroupNoMapper
;
import
com.yxproject.start.mapper.SpecialCardMapper
;
...
...
@@ -12,7 +12,12 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.OutputStreamWriter
;
import
java.math.BigDecimal
;
import
java.nio.charset.StandardCharsets
;
import
java.time.LocalDate
;
import
java.util.*
;
@Service
...
...
@@ -403,7 +408,7 @@ public class TaskListServiceImpl implements TaskListService {
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
List
<
Object
>
selectByCountyAtAuxiliary
(
long
process
)
{
List
list
=
new
ArrayList
()
;
List
list
;
if
(
process
==
0
)
{
//查询下发状态下的任务单
//查询普通组号列表 在辅助库中
...
...
@@ -645,10 +650,9 @@ public class TaskListServiceImpl implements TaskListService {
default
:
break
;
}
List
<
Map
<
String
,
Object
>>
mapList1
=
formateMap3
(
mapList
);
return
mapList1
;
return
formatMap3
(
mapList
)
;
}
/**
...
...
@@ -1731,15 +1735,15 @@ private String createGroupNo(List<Integer> c, List<Integer> nsList) {
}
private
List
<
Map
<
String
,
Object
>>
format
e
Map3
(
List
<
Map
<
String
,
Object
>>
maplist
)
{
Map
<
String
,
Object
>
typeMap
=
new
LinkedHashMap
<>();
for
(
Map
o
:
maplist
)
{
private
List
<
Map
<
String
,
Object
>>
formatMap3
(
List
<
Map
<
String
,
Object
>>
maplist
)
{
Map
<
String
,
Object
>
typeMap
=
new
LinkedHashMap
<>();
//类型Map
for
(
Map
o
:
maplist
)
{
//遍历原始list获取单个map
// 组合JSON
if
(
typeMap
!=
null
&
typeMap
.
containsKey
(
o
.
get
(
"CARD_TYPE"
)
+
""
))
{
List
<
Map
<
String
,
Object
>>
mapList
=
(
List
<
Map
<
String
,
Object
>>)
typeMap
.
get
(
o
.
get
(
"CARD_TYPE"
));
mapList
.
add
(
o
);
typeMap
.
put
(
o
.
get
(
"CARD_TYPE"
)
+
""
,
mapList
);
}
else
{
if
(
typeMap
.
containsKey
(
o
.
get
(
"CARD_TYPE"
)
+
""
))
{
//如果类型map中已有单个map中这个类型
List
<
Map
<
String
,
Object
>>
mapList
=
(
List
<
Map
<
String
,
Object
>>)
typeMap
.
get
(
o
.
get
(
"CARD_TYPE"
));
// 先获取类型map中这个类型的list
mapList
.
add
(
o
);
//然后把当前的单个map加入到这个list中
typeMap
.
put
(
o
.
get
(
"CARD_TYPE"
)
+
""
,
mapList
);
//list重新放回类型map
}
else
{
// 类型map中没有这个类型则新建一个然后添加
List
<
Map
<
String
,
Object
>>
mapList
=
new
ArrayList
<>();
mapList
.
add
(
o
);
typeMap
.
put
(
o
.
get
(
"CARD_TYPE"
)
+
""
,
mapList
);
...
...
@@ -1750,7 +1754,7 @@ private String createGroupNo(List<Integer> c, List<Integer> nsList) {
List
<
Map
<
String
,
Object
>>
mapList
=
(
List
<
Map
<
String
,
Object
>>)
typeMap
.
get
(
type
);
Map
<
String
,
Object
>
typemap
=
new
LinkedHashMap
<>();
for
(
Map
<
String
,
Object
>
o
:
mapList
)
{
if
(
typemap
!=
null
&&
typemap
.
containsKey
(
o
.
get
(
"TASK_ID"
)
+
""
))
{
if
(
typemap
.
containsKey
(
o
.
get
(
"TASK_ID"
)
+
""
))
{
List
<
Map
<
String
,
Object
>>
maplist_county
=
(
List
<
Map
<
String
,
Object
>>)
typemap
.
get
(
o
.
get
(
"TASK_ID"
)
+
""
);
maplist_county
.
add
(
o
);
typemap
.
put
(
o
.
get
(
"TASK_ID"
)
+
""
,
maplist_county
);
...
...
@@ -1947,4 +1951,43 @@ private String createGroupNo(List<Integer> c, List<Integer> nsList) {
return
typeList
;
}
@Override
public
String
exportPostPersonInfo
(
String
taskDate
)
throws
IOException
{
List
<
Map
<
String
,
Object
>>
postPersonInfo
=
taskListMapper
.
exportPostPersonInfo
(
taskDate
);
return
generateCsv
(
postPersonInfo
);
}
private
String
generateCsv
(
List
<
Map
<
String
,
Object
>>
personInfoList
)
throws
IOException
{
LocalDate
date
=
LocalDate
.
now
();
// 定义 CSV 文件路径
String
csvFile
=
date
+
"_postPersonInfo.csv"
;
// 创建 CSVWriter
// 使用 OutputStreamWriter 和 FileOutputStream 来设置 UTF-8 编码
try
(
FileOutputStream
fileOut
=
new
FileOutputStream
(
csvFile
);
OutputStreamWriter
writer
=
new
OutputStreamWriter
(
fileOut
,
StandardCharsets
.
UTF_8
))
{
// 可选:写入 UTF-8 BOM(用于兼容 Excel)
writer
.
write
(
'\
uFEFF
'
);
// 创建 CSVWriter
CSVWriter
csvWriter
=
new
CSVWriter
(
writer
);
// 写入表头
String
[]
header
=
{
"身份证号"
,
"姓名"
,
"联系电话"
,
"收件地址"
};
csvWriter
.
writeNext
(
header
);
// 写入数据
for
(
Map
<
String
,
Object
>
data
:
personInfoList
)
{
// 确保所有字段都作为字符串保存,防止 Excel 将其解析为数字
String
[]
row
=
{
data
.
get
(
"ID_CARD"
)
==
null
?
""
:
data
.
get
(
"ID_CARD"
).
toString
()
+
"\t"
,
// 身份证号
data
.
get
(
"APPLICANT_NAME"
)
==
null
?
""
:
data
.
get
(
"APPLICANT_NAME"
).
toString
(),
// 姓名
data
.
get
(
"RECIPIENT_PHONE"
)
==
null
?
""
:
data
.
get
(
"RECIPIENT_PHONE"
).
toString
()
+
"\t"
,
// 联系电话
data
.
get
(
"RECIPIENT_ADDRESS"
)
==
null
?
""
:
data
.
get
(
"RECIPIENT_ADDRESS"
).
toString
(),
// 收件地址
};
csvWriter
.
writeNext
(
row
);
}
}
System
.
out
.
println
(
"CSV 文件生成成功,路径为:"
+
csvFile
);
return
csvFile
;
}
}
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