Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
jiedao-api-boot-master
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
lanbaoming
jiedao-api-boot-master
Commits
0700cd34
Commit
0700cd34
authored
Mar 28, 2025
by
Smile
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
需求160 后台-批量费用申请 批量包裹申请中间表实体类
parent
6801d112
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
465 additions
and
0 deletions
+465
-0
20250328lh.sql
sql/v2.4/20250328lh.sql
+14
-0
BpmBatchConsFeeApplyResultListener.java
...ice/cons/listener/BpmBatchConsFeeApplyResultListener.java
+31
-0
BatchConsApprovalConvert.java
...r/convert/batchConsApproval/BatchConsApprovalConvert.java
+55
-0
BatchConsApprovalDO.java
...dal/dataobject/batchConsApproval/BatchConsApprovalDO.java
+40
-0
BatchConsApprovalMapper.java
.../dal/mysql/batchConsApproval/BatchConsApprovalMapper.java
+47
-0
BatchConsApprovalService.java
...r/service/batchConsApproval/BatchConsApprovalService.java
+67
-0
BatchConsApprovalServiceImpl.java
...rvice/batchConsApproval/BatchConsApprovalServiceImpl.java
+82
-0
BatchConsApprovalBackVO.java
...e/order/vo/batchConsApproval/BatchConsApprovalBackVO.java
+41
-0
BatchConsApprovalBaseVO.java
...e/order/vo/batchConsApproval/BatchConsApprovalBaseVO.java
+27
-0
BatchConsApprovalCreateReqVO.java
...er/vo/batchConsApproval/BatchConsApprovalCreateReqVO.java
+12
-0
BatchConsApprovalQueryVO.java
.../order/vo/batchConsApproval/BatchConsApprovalQueryVO.java
+32
-0
BatchConsApprovalUpdateReqVO.java
...er/vo/batchConsApproval/BatchConsApprovalUpdateReqVO.java
+17
-0
No files found.
sql/v2.4/20250328lh.sql
0 → 100644
View file @
0700cd34
CREATE
TABLE
ecw_batch_cons_approval
(
id
BIGINT
NOT
NULL
AUTO_INCREMENT
COMMENT
'自增主键'
,
approval_id
BIGINT
NOT
NULL
COMMENT
'审批单ID'
,
cons_id
BIGINT
NOT
NULL
COMMENT
'包裹ID'
,
business_no
VARCHAR
(
64
)
NOT
NULL
COMMENT
'业务流水号'
,
deleted
bit
not
null
default
0
,
creator
varchar
(
32
)
not
null
,
create_time
datetime
not
null
,
updater
varchar
(
32
),
update_time
datetime
,
PRIMARY
KEY
(
id
),
KEY
idx_approval_cons
(
approval_id
,
cons_id
),
KEY
idx_cons_id
(
cons_id
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COMMENT
=
'批量包裹审批关联表'
;
\ No newline at end of file
yudao-module-bpm/yudao-module-bpm-base/src/main/java/cn/iocoder/yudao/module/bpm/service/cons/listener/BpmBatchConsFeeApplyResultListener.java
0 → 100644
View file @
0700cd34
package
cn
.
iocoder
.
yudao
.
module
.
bpm
.
service
.
cons
.
listener
;
import
cn.iocoder.yudao.module.bpm.enums.WorkFlowEmus
;
import
cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEvent
;
import
cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventListener
;
import
cn.iocoder.yudao.module.order.service.consApproval.ConsApprovalService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
@Component
@Slf4j
public
class
BpmBatchConsFeeApplyResultListener
extends
BpmProcessInstanceResultEventListener
{
@Resource
ConsApprovalService
consApprovalService
;
@Override
protected
String
getProcessDefinitionKey
()
{
return
WorkFlowEmus
.
ECW_BATCH_CONS_FEE_APPLY
.
getKey
();
}
@Override
protected
void
onEvent
(
BpmProcessInstanceResultEvent
event
)
{
log
.
info
(
"------------------批量集运包裹批量申请费用审核回调--------------------------{},{}"
,
event
.
getId
(),
event
.
getResult
());
consApprovalService
.
updateBatchConsFeeApproveBatchResult
(
event
.
getId
(),
event
.
getResult
());
}
}
yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/convert/batchConsApproval/BatchConsApprovalConvert.java
0 → 100644
View file @
0700cd34
package
cn
.
iocoder
.
yudao
.
module
.
order
.
convert
.
batchConsApproval
;
import
java.util.*
;
import
cn.iocoder.yudao.framework.common.pojo.PageResult
;
import
cn.iocoder.yudao.module.order.vo.batchConsApproval.BatchConsApprovalBackVO
;
import
cn.iocoder.yudao.module.order.vo.batchConsApproval.BatchConsApprovalCreateReqVO
;
import
cn.iocoder.yudao.module.order.vo.batchConsApproval.BatchConsApprovalUpdateReqVO
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.factory.Mappers
;
import
cn.iocoder.yudao.module.order.dal.dataobject.batchConsApproval.BatchConsApprovalDO
;
/**
* 批量包裹审批关联 Convert
* @author 系统管理员
*/
@Mapper
public
interface
BatchConsApprovalConvert
{
/*****转换MapStruct*****/
BatchConsApprovalConvert
INSTANCE
=
Mappers
.
getMapper
(
BatchConsApprovalConvert
.
class
);
/***
* 创建VO转实体
* @param bean
* @return
*/
BatchConsApprovalDO
convert
(
BatchConsApprovalCreateReqVO
bean
);
/***
* 修改VO转实体
* @param bean
* @return
*/
BatchConsApprovalDO
convert
(
BatchConsApprovalUpdateReqVO
bean
);
/***
* 实体转返回VO
* @param bean
* @return
*/
BatchConsApprovalBackVO
convert
(
BatchConsApprovalDO
bean
);
/***
* 实体列表转返回VO列表
* @param list
* @return
*/
List
<
BatchConsApprovalBackVO
>
convertList
(
List
<
BatchConsApprovalDO
>
list
);
/***
* 实体分页转返回分页
* @param page
* @return
*/
PageResult
<
BatchConsApprovalBackVO
>
convertPage
(
PageResult
<
BatchConsApprovalDO
>
page
);
}
yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/dal/dataobject/batchConsApproval/BatchConsApprovalDO.java
0 → 100644
View file @
0700cd34
package
cn
.
iocoder
.
yudao
.
module
.
order
.
dal
.
dataobject
.
batchConsApproval
;
import
lombok.*
;
import
java.util.*
;
import
com.baomidou.mybatisplus.annotation.*
;
import
cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO
;
/**
* 批量包裹审批关联 DO
*
* @author 系统管理员
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName
(
"ecw_batch_cons_approval"
)
@EqualsAndHashCode
(
callSuper
=
true
)
@ToString
(
callSuper
=
true
)
public
class
BatchConsApprovalDO
extends
BaseDO
{
/**
* 自增主键
*/
@TableId
private
Long
id
;
/**
* 审批单ID
*/
private
Long
approvalId
;
/**
* 包裹ID
*/
private
Long
consId
;
/**
* 业务流水号
*/
private
String
businessNo
;
}
yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/dal/mysql/batchConsApproval/BatchConsApprovalMapper.java
0 → 100644
View file @
0700cd34
package
cn
.
iocoder
.
yudao
.
module
.
order
.
dal
.
mysql
.
batchConsApproval
;
import
java.util.*
;
import
cn.iocoder.yudao.framework.common.pojo.PageResult
;
import
cn.iocoder.yudao.framework.mybatis.core.query.LambdaQuery
;
import
cn.iocoder.yudao.framework.mybatis.core.mapper.AbstractMapper
;
import
cn.iocoder.yudao.module.order.dal.dataobject.batchConsApproval.BatchConsApprovalDO
;
import
cn.iocoder.yudao.framework.mybatis.core.vo.PageVO
;
import
cn.iocoder.yudao.module.order.vo.batchConsApproval.BatchConsApprovalQueryVO
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* 批量包裹审批关联 Mapper
* @author 系统管理员
*/
@Mapper
public
interface
BatchConsApprovalMapper
extends
AbstractMapper
<
BatchConsApprovalDO
>
{
@Override
default
PageResult
<
BatchConsApprovalDO
>
selectPage
(
PageVO
page
,
Object
object
)
{
if
(
object
instanceof
BatchConsApprovalQueryVO
)
{
BatchConsApprovalQueryVO
vo
=
(
BatchConsApprovalQueryVO
)
object
;
return
selectPage
(
page
,
new
LambdaQuery
<
BatchConsApprovalDO
>()
.
eqIfPresent
(
BatchConsApprovalDO:
:
getApprovalId
,
vo
.
getApprovalId
())
.
eqIfPresent
(
BatchConsApprovalDO:
:
getConsId
,
vo
.
getConsId
())
.
eqIfPresent
(
BatchConsApprovalDO:
:
getBusinessNo
,
vo
.
getBusinessNo
())
.
betweenIfPresent
(
BatchConsApprovalDO:
:
getCreateTime
,
vo
.
getBeginCreateTime
(),
vo
.
getEndCreateTime
())
.
orderByDesc
(
BatchConsApprovalDO:
:
getId
));
}
return
null
;
}
@Override
default
List
<
BatchConsApprovalDO
>
selectList
(
Object
object
)
{
if
(
object
instanceof
BatchConsApprovalQueryVO
)
{
BatchConsApprovalQueryVO
vo
=
(
BatchConsApprovalQueryVO
)
object
;
return
selectList
(
new
LambdaQuery
<
BatchConsApprovalDO
>()
.
eqIfPresent
(
BatchConsApprovalDO:
:
getApprovalId
,
vo
.
getApprovalId
())
.
eqIfPresent
(
BatchConsApprovalDO:
:
getConsId
,
vo
.
getConsId
())
.
eqIfPresent
(
BatchConsApprovalDO:
:
getBusinessNo
,
vo
.
getBusinessNo
())
.
betweenIfPresent
(
BatchConsApprovalDO:
:
getCreateTime
,
vo
.
getBeginCreateTime
(),
vo
.
getEndCreateTime
())
.
orderByDesc
(
BatchConsApprovalDO:
:
getId
));
}
return
null
;
}
}
yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/service/batchConsApproval/BatchConsApprovalService.java
0 → 100644
View file @
0700cd34
package
cn
.
iocoder
.
yudao
.
module
.
order
.
service
.
batchConsApproval
;
import
java.util.*
;
import
javax.validation.*
;
import
cn.iocoder.yudao.framework.mybatis.core.vo.PageVO
;
import
cn.iocoder.yudao.framework.mybatis.core.service.IService
;
import
cn.iocoder.yudao.module.order.dal.dataobject.batchConsApproval.BatchConsApprovalDO
;
import
cn.iocoder.yudao.framework.common.pojo.PageResult
;
import
cn.iocoder.yudao.module.order.vo.batchConsApproval.BatchConsApprovalCreateReqVO
;
import
cn.iocoder.yudao.module.order.vo.batchConsApproval.BatchConsApprovalQueryVO
;
import
cn.iocoder.yudao.module.order.vo.batchConsApproval.BatchConsApprovalUpdateReqVO
;
/**
* 批量包裹审批关联 Service 接口
*
* @author 系统管理员
*/
public
interface
BatchConsApprovalService
extends
IService
<
BatchConsApprovalDO
>
{
/**
* 创建批量包裹审批关联
* @param createReqVO 创建信息
* @return 编号
*/
Long
createBatchConsApproval
(
@Valid
BatchConsApprovalCreateReqVO
createReqVO
);
/**
* 更新批量包裹审批关联
* @param updateReqVO 更新信息
*/
void
updateBatchConsApproval
(
@Valid
BatchConsApprovalUpdateReqVO
updateReqVO
);
/**
* 删除批量包裹审批关联
* @param id 编号
*/
void
deleteBatchConsApproval
(
Long
id
);
/**
* 获得批量包裹审批关联
* @param id 编号
* @return 批量包裹审批关联
*/
BatchConsApprovalDO
getBatchConsApproval
(
Long
id
);
/**
* 获得批量包裹审批关联列表
* @param ids 编号
* @return 批量包裹审批关联列表
*/
List
<
BatchConsApprovalDO
>
getBatchConsApprovalList
(
Collection
<
Long
>
ids
);
/**
* 获得批量包裹审批关联分页
* @param page 分页查询
* @param query 查询
* @return 批量包裹审批关联分页
*/
PageResult
<
BatchConsApprovalDO
>
getBatchConsApprovalPage
(
BatchConsApprovalQueryVO
query
,
PageVO
page
);
/**
* 获得批量包裹审批关联列表, 用于 Excel 导出
* @param query 查询
* @return 批量包裹审批关联列表
*/
List
<
BatchConsApprovalDO
>
getBatchConsApprovalList
(
BatchConsApprovalQueryVO
query
);
}
yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/service/batchConsApproval/BatchConsApprovalServiceImpl.java
0 → 100644
View file @
0700cd34
package
cn
.
iocoder
.
yudao
.
module
.
order
.
service
.
batchConsApproval
;
import
cn.iocoder.yudao.framework.common.pojo.PageResult
;
import
cn.iocoder.yudao.framework.mybatis.core.service.AbstractService
;
import
cn.iocoder.yudao.framework.mybatis.core.vo.PageVO
;
import
cn.iocoder.yudao.module.order.convert.batchConsApproval.BatchConsApprovalConvert
;
import
cn.iocoder.yudao.module.order.dal.dataobject.batchConsApproval.BatchConsApprovalDO
;
import
cn.iocoder.yudao.module.order.dal.mysql.batchConsApproval.BatchConsApprovalMapper
;
import
cn.iocoder.yudao.module.order.vo.batchConsApproval.BatchConsApprovalCreateReqVO
;
import
cn.iocoder.yudao.module.order.vo.batchConsApproval.BatchConsApprovalQueryVO
;
import
cn.iocoder.yudao.module.order.vo.batchConsApproval.BatchConsApprovalUpdateReqVO
;
import
org.springframework.stereotype.Service
;
import
org.springframework.validation.annotation.Validated
;
import
javax.annotation.Resource
;
import
java.util.Collection
;
import
java.util.List
;
/**
* 批量包裹审批关联 Service 实现类
*
* @author 系统管理员
*/
@Service
@Validated
public
class
BatchConsApprovalServiceImpl
extends
AbstractService
<
BatchConsApprovalMapper
,
BatchConsApprovalDO
>
implements
BatchConsApprovalService
{
@Resource
private
BatchConsApprovalMapper
batchConsApprovalMapper
;
@Override
public
Long
createBatchConsApproval
(
BatchConsApprovalCreateReqVO
createReqVO
)
{
// 插入
BatchConsApprovalDO
batchConsApproval
=
BatchConsApprovalConvert
.
INSTANCE
.
convert
(
createReqVO
);
batchConsApprovalMapper
.
insert
(
batchConsApproval
);
// 返回
return
batchConsApproval
.
getId
();
}
@Override
public
void
updateBatchConsApproval
(
BatchConsApprovalUpdateReqVO
updateReqVO
)
{
// 校验存在
this
.
validateBatchConsApprovalExists
(
updateReqVO
.
getId
());
// 更新
BatchConsApprovalDO
updateObj
=
BatchConsApprovalConvert
.
INSTANCE
.
convert
(
updateReqVO
);
batchConsApprovalMapper
.
updateById
(
updateObj
);
}
@Override
public
void
deleteBatchConsApproval
(
Long
id
)
{
// 校验存在
this
.
validateBatchConsApprovalExists
(
id
);
// 删除
batchConsApprovalMapper
.
deleteById
(
id
);
}
private
void
validateBatchConsApprovalExists
(
Long
id
)
{
if
(
batchConsApprovalMapper
.
selectById
(
id
)
==
null
)
{
// throw exception(BATCH_CONS_APPROVAL_NOT_EXISTS);
}
}
@Override
public
BatchConsApprovalDO
getBatchConsApproval
(
Long
id
)
{
return
batchConsApprovalMapper
.
selectById
(
id
);
}
@Override
public
List
<
BatchConsApprovalDO
>
getBatchConsApprovalList
(
Collection
<
Long
>
ids
)
{
return
batchConsApprovalMapper
.
selectBatchIds
(
ids
);
}
@Override
public
PageResult
<
BatchConsApprovalDO
>
getBatchConsApprovalPage
(
BatchConsApprovalQueryVO
query
,
PageVO
page
)
{
return
batchConsApprovalMapper
.
selectPage
(
page
,
query
);
}
@Override
public
List
<
BatchConsApprovalDO
>
getBatchConsApprovalList
(
BatchConsApprovalQueryVO
query
)
{
return
batchConsApprovalMapper
.
selectList
(
query
);
}
}
yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/vo/batchConsApproval/BatchConsApprovalBackVO.java
0 → 100644
View file @
0700cd34
package
cn
.
iocoder
.
yudao
.
module
.
order
.
vo
.
batchConsApproval
;
import
lombok.*
;
import
java.util.*
;
import
io.swagger.annotations.*
;
import
com.alibaba.excel.annotation.ExcelProperty
;
import
org.springframework.format.annotation.DateTimeFormat
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
common
.
util
.
date
.
DateUtils
.
FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND
;
/**
* 批量包裹审批关联 Response VO
* @author 系统管理员
*/
@Data
@ApiModel
(
"管理后台 - 批量包裹审批关联 Response VO"
)
public
class
BatchConsApprovalBackVO
{
@ExcelProperty
(
"自增主键"
)
@ApiModelProperty
(
value
=
"自增主键"
,
required
=
true
)
private
Long
id
;
@ExcelProperty
(
"审批单ID"
)
@ApiModelProperty
(
value
=
"审批单ID"
,
required
=
true
)
private
Long
approvalId
;
@ExcelProperty
(
"包裹ID"
)
@ApiModelProperty
(
value
=
"包裹ID"
,
required
=
true
)
private
Long
consId
;
@ExcelProperty
(
"业务流水号"
)
@ApiModelProperty
(
value
=
"业务流水号"
,
required
=
true
)
private
String
businessNo
;
@ExcelProperty
(
""
)
@DateTimeFormat
(
pattern
=
FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND
)
@ApiModelProperty
(
value
=
""
,
required
=
true
)
private
Date
createTime
;
}
yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/vo/batchConsApproval/BatchConsApprovalBaseVO.java
0 → 100644
View file @
0700cd34
package
cn
.
iocoder
.
yudao
.
module
.
order
.
vo
.
batchConsApproval
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotNull
;
/**
* 批量包裹审批关联 Base VO,提供给添加、修改、详细的子 VO 使用
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
*/
@Data
public
class
BatchConsApprovalBaseVO
{
@ApiModelProperty
(
value
=
"审批单ID"
,
required
=
true
)
@NotNull
(
message
=
"审批单ID不能为空"
)
private
Long
approvalId
;
@ApiModelProperty
(
value
=
"包裹ID"
,
required
=
true
)
@NotNull
(
message
=
"包裹ID不能为空"
)
private
Long
consId
;
@ApiModelProperty
(
value
=
"业务流水号"
,
required
=
true
)
@NotNull
(
message
=
"业务流水号不能为空"
)
private
String
businessNo
;
}
yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/vo/batchConsApproval/BatchConsApprovalCreateReqVO.java
0 → 100644
View file @
0700cd34
package
cn
.
iocoder
.
yudao
.
module
.
order
.
vo
.
batchConsApproval
;
import
lombok.*
;
import
io.swagger.annotations.*
;
@Data
@ToString
(
callSuper
=
true
)
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
"管理后台 - 批量包裹审批关联创建 Request VO"
)
public
class
BatchConsApprovalCreateReqVO
extends
BatchConsApprovalBaseVO
{
}
yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/vo/batchConsApproval/BatchConsApprovalQueryVO.java
0 → 100644
View file @
0700cd34
package
cn
.
iocoder
.
yudao
.
module
.
order
.
vo
.
batchConsApproval
;
import
lombok.*
;
import
java.util.*
;
import
io.swagger.annotations.*
;
import
cn.iocoder.yudao.framework.common.pojo.PageParam
;
import
org.springframework.format.annotation.DateTimeFormat
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
common
.
util
.
date
.
DateUtils
.
FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND
;
@Data
@ApiModel
(
"管理后台 - 批量包裹审批关联查询 VO"
)
public
class
BatchConsApprovalQueryVO
{
@ApiModelProperty
(
value
=
"审批单ID"
)
private
Long
approvalId
;
@ApiModelProperty
(
value
=
"包裹ID"
)
private
Long
consId
;
@ApiModelProperty
(
value
=
"业务流水号"
)
private
String
businessNo
;
@DateTimeFormat
(
pattern
=
FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND
)
@ApiModelProperty
(
value
=
"开始"
)
private
Date
beginCreateTime
;
@DateTimeFormat
(
pattern
=
FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND
)
@ApiModelProperty
(
value
=
"结束"
)
private
Date
endCreateTime
;
}
yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/vo/batchConsApproval/BatchConsApprovalUpdateReqVO.java
0 → 100644
View file @
0700cd34
package
cn
.
iocoder
.
yudao
.
module
.
order
.
vo
.
batchConsApproval
;
import
lombok.*
;
import
io.swagger.annotations.*
;
import
javax.validation.constraints.*
;
@ApiModel
(
"管理后台 - 批量包裹审批关联更新 Request VO"
)
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@ToString
(
callSuper
=
true
)
public
class
BatchConsApprovalUpdateReqVO
extends
BatchConsApprovalBaseVO
{
@ApiModelProperty
(
value
=
"自增主键"
,
required
=
true
)
@NotNull
(
message
=
"自增主键不能为空"
)
private
Long
id
;
}
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