Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
mes
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
ximai
mes
Commits
3de93391
Commit
3de93391
authored
Oct 12, 2025
by
chicheng
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev' into dev
parents
50606a71
3e703a3a
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
145 additions
and
9 deletions
+145
-9
ProFeedbackController.java
...a/com/ximai/mes/pro/controller/ProFeedbackController.java
+68
-0
ProTaskWorkunitController.java
...ai/mes/pro/controller/task/ProTaskWorkunitController.java
+23
-1
ProTaskWorkunit.java
...n/java/com/ximai/mes/pro/domain/task/ProTaskWorkunit.java
+16
-0
ProFeedbackVo.java
.../main/java/com/ximai/mes/pro/domain/vo/ProFeedbackVo.java
+8
-2
ProTaskWorkunitServiceImpl.java
...mes/pro/service/impl/task/ProTaskWorkunitServiceImpl.java
+2
-1
FeedbackRequest.java
...in/java/com/ximai/mes/report/request/FeedbackRequest.java
+2
-2
WorkOrderProgressRequest.java
...om/ximai/mes/report/request/WorkOrderProgressRequest.java
+4
-1
FeedbackResponse.java
.../java/com/ximai/mes/report/response/FeedbackResponse.java
+6
-0
WorkOrderProgressListResponse.java
...ai/mes/report/response/WorkOrderProgressListResponse.java
+7
-0
ProFeedbackMapper.xml
mes/src/main/resources/mapper/pro/ProFeedbackMapper.xml
+5
-2
ProWorkorderMapper.xml
.../resources/mapper/pro/proWorkOrder/ProWorkorderMapper.xml
+4
-0
No files found.
mes/src/main/java/com/ximai/mes/pro/controller/ProFeedbackController.java
View file @
3de93391
...
...
@@ -10,6 +10,7 @@ import com.ximai.common.enums.BusinessType;
import
com.ximai.common.utils.SecurityUtils
;
import
com.ximai.common.utils.data.ExceptionUtil
;
import
com.ximai.common.utils.data.StringUtils
;
import
com.ximai.common.utils.poi.ExcelUtil
;
import
com.ximai.mes.constant.TaskWorkunitStatusEnum
;
import
com.ximai.mes.md.domain.MdWorkunit
;
import
com.ximai.mes.md.domain.MdWorkunitWorker
;
...
...
@@ -25,6 +26,9 @@ import com.ximai.mes.pro.mapper.ProFeedbackMapper;
import
com.ximai.mes.pro.mapper.task.ProTaskAssistProcessMapper
;
import
com.ximai.mes.pro.service.IProFeedbackService
;
import
com.ximai.mes.pro.service.proWorkOrder.IProWorkOrderSoSizeItemService
;
import
com.ximai.mes.report.response.FeedbackResponseExportByList
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.access.prepost.PreAuthorize
;
...
...
@@ -42,6 +46,7 @@ import java.util.stream.Collectors;
* @date 2022-07-10
*/
@RestController
@Api
(
tags
=
"生产报工记录"
)
@RequestMapping
(
"/mes/pro/feedback"
)
public
class
ProFeedbackController
extends
BaseController
{
@Autowired
...
...
@@ -114,7 +119,70 @@ public class ProFeedbackController extends BaseController {
return
getDataTable
(
proFeedbackVoList
);
}
/**
* 查询生产报工记录列表
*/
@PostMapping
(
"/list/export"
)
@ApiOperation
(
"查询生产报工记录列表导出"
)
public
void
listExport
(
HttpServletResponse
response
,
@RequestBody
ProFeedbackCheckListDto
proFeedbackCheckListDto
)
{
ProFeedback
proFeedback
=
new
ProFeedback
();
BeanUtils
.
copyProperties
(
proFeedbackCheckListDto
,
proFeedback
);
QueryWrapper
<
ProFeedback
>
query
=
new
QueryWrapper
<>();
query
.
eq
(
StringUtils
.
isNotEmpty
(
proFeedback
.
getFeedbackType
()),
"f.feedback_type"
,
proFeedback
.
getFeedbackType
());
query
.
eq
(
StringUtils
.
isNotEmpty
(
proFeedback
.
getStatus
()),
"f.status"
,
proFeedback
.
getStatus
());
query
.
eq
(
StringUtils
.
isNotEmpty
(
proFeedback
.
getAssistProcessCode
()),
"ap.assist_process_code"
,
proFeedback
.
getAssistProcessCode
());
query
.
eq
(
StringUtils
.
isNotEmpty
(
proFeedback
.
getWorkstationName
()),
"f.workstation_name"
,
proFeedback
.
getWorkstationName
());
query
.
eq
(
StringUtils
.
isNotEmpty
(
proFeedback
.
getItemName
()),
"it.item_name"
,
proFeedback
.
getItemName
());
query
.
eq
(
StringUtils
.
isNotEmpty
(
proFeedback
.
getWorkorderCode
()),
"f.workorder_code"
,
proFeedback
.
getWorkorderCode
());
query
.
eq
(
StringUtils
.
isNotEmpty
(
proFeedback
.
getSapItemCode
()),
"it.sap_item_code"
,
proFeedback
.
getSapItemCode
());
query
.
like
(
StringUtils
.
isNotEmpty
(
proFeedback
.
getOrderCode
()),
"workorder.order_code"
,
proFeedback
.
getOrderCode
());
query
.
like
(
StringUtils
.
isNotEmpty
(
proFeedback
.
getOrderSerial
()),
"workorder.order_serial"
,
proFeedback
.
getOrderSerial
());
query
.
like
(
StringUtils
.
isNotEmpty
(
proFeedback
.
getCustomerDrawingNo
()),
"workorder.Customer_Drawing_No"
,
proFeedback
.
getCustomerDrawingNo
());
query
.
eq
(
proFeedback
.
getLastFeedback
()
!=
null
,
"f.Last_Feedback"
,
proFeedback
.
getLastFeedback
());
// query.eq(StringUtils.isNotEmpty(proFeedback.getUserId()), "pww.user_id", proFeedback.getUserId());
query
.
eq
(
StringUtils
.
isNotEmpty
(
proFeedback
.
getWorkunitId
()),
"tw.workunit_id"
,
proFeedback
.
getWorkunitId
());
if
(
proFeedbackCheckListDto
.
getIsCheckUser
()
&&
StringUtils
.
isEmpty
(
proFeedback
.
getWorkunitId
())){
List
<
MdWorkunitVo
>
mdWorkunitVolist
=
mdWorkunitService
.
selectMdWorkunitListByUser
(
new
QueryWrapper
<
MdWorkunit
>().
eq
(
"user_name"
,
SecurityUtils
.
getUsername
()));
if
(
mdWorkunitVolist
.
size
()
<
1
){
ExcelUtil
<
ProFeedbackVo
>
util
=
new
ExcelUtil
<>(
ProFeedbackVo
.
class
);
util
.
exportExcel
(
response
,
new
ArrayList
<>(),
"生产报工记录列表"
,
"生产报工记录列表"
);
}
query
.
in
(
mdWorkunitVolist
.
size
()
>
0
,
"tw.workunit_id"
,
mdWorkunitVolist
.
stream
().
map
(
mdWorkunitVo
->
mdWorkunitVo
.
getWorkunitId
()).
collect
(
Collectors
.
toList
()));
}
query
.
eq
(
StringUtils
.
isNotEmpty
(
proFeedback
.
getTaskWorkunitId
()),
"tw.task_workunit_id"
,
proFeedback
.
getTaskWorkunitId
());
query
.
between
(
StringUtils
.
isNotEmpty
(
proFeedback
.
getCreateStartTime
())
&&
StringUtils
.
isNotEmpty
(
proFeedback
.
getCreateEndTime
()),
"f.update_time"
,
proFeedback
.
getCreateStartTime
(),
proFeedback
.
getCreateEndTime
());
query
.
like
(
StringUtils
.
isNotEmpty
(
proFeedback
.
getNickName
()),
"f.nick_name"
,
proFeedback
.
getNickName
());
query
.
notIn
(
"tw.status"
,
TaskWorkunitStatusEnum
.
CLOSE
.
getStatus
());
query
.
orderByAsc
(
"f.feedback_time"
);
List
<
ProFeedbackVo
>
list
=
proFeedbackService
.
queryProFeedbackListJoinTaskWorkUnit
(
query
);
List
<
ProFeedbackVo
>
proFeedbackVoList
=
new
ArrayList
<>();
if
(
proFeedback
.
getUserId
()
!=
null
)
{
List
<
MdWorkunitWorker
>
mdWorkunitWorkers
=
mdWorkunitWorkerMapper
.
selectListByQw
(
new
QueryWrapper
<
MdWorkunitWorker
>().
eq
(
"user_id"
,
proFeedback
.
getUserId
()));
Set
<
Long
>
collect
=
mdWorkunitWorkers
.
stream
().
map
(
MdWorkunitWorker:
:
getWorkunitId
).
collect
(
Collectors
.
toSet
());
// objects = list.stream().filter(x -> !collect.add(x.getWorkunitId())).sorted(Comparator.comparing(ProFeedbackVo::getFeedbackTime).reversed()).collect(Collectors.toList());
proFeedbackVoList
=
list
.
stream
().
filter
(
x
->
!
collect
.
add
(
x
.
getWorkunitId
())).
sorted
(
Comparator
.
comparing
(
ProFeedbackVo:
:
getUpdateTime
).
reversed
()).
collect
(
Collectors
.
toList
());
}
proFeedbackVoList
=
proFeedbackVoList
.
isEmpty
()
?
list
:
proFeedbackVoList
;
proFeedbackVoList
.
forEach
(
s
->{
if
(
IMdWorkstationService
.
OUTSOURCE_WORKSTATION_ID
.
equals
(
s
.
getWorkstationId
())){
s
.
setAssistProcessCode
(
s
.
getTaskCode
());
}
if
(
s
.
getFeedbackType
().
equals
(
"SELF"
)){
s
.
setFeedbackType
(
"自行报工"
);
}
else
{
s
.
setFeedbackType
(
"外协报工"
);
}
});
ExcelUtil
<
ProFeedbackVo
>
util
=
new
ExcelUtil
<>(
ProFeedbackVo
.
class
);
util
.
exportExcel
(
response
,
list
,
"生产报工记录列表"
,
"生产报工记录列表"
);
}
/**
* 查询生产报工记录列表
*/
...
...
mes/src/main/java/com/ximai/mes/pro/controller/task/ProTaskWorkunitController.java
View file @
3de93391
...
...
@@ -9,14 +9,17 @@ import com.ximai.common.enums.BusinessType;
import
com.ximai.common.utils.SecurityUtils
;
import
com.ximai.common.utils.data.ExceptionUtil
;
import
com.ximai.common.utils.data.StringUtils
;
import
com.ximai.common.utils.poi.ExcelUtil
;
import
com.ximai.mes.pro.domain.proWorkOrder.ProWorkorder
;
import
com.ximai.mes.pro.domain.task.ProTaskWorkunit
;
import
com.ximai.mes.pro.domain.vo.ProFeedbackVo
;
import
com.ximai.mes.pro.domain.vo.ProTaskVo
;
import
com.ximai.mes.pro.domain.vo.task.ProTaskWorkunitQuery
;
import
com.ximai.mes.pro.domain.vo.task.TaskWorkunitOutsourceSplitParam
;
import
com.ximai.mes.pro.domain.vo.task.TaskWorkunitToOutsourceParam
;
import
com.ximai.mes.pro.domain.vo.task.TaskWorkunitToSelfMadeParam
;
import
com.ximai.mes.pro.service.task.IProTaskWorkunitService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiParam
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -38,6 +41,7 @@ import java.util.Objects;
*/
@RestController
@RequestMapping
(
"/mes/pro/taskWorkunit"
)
@Api
(
tags
=
"任务工作单元"
)
public
class
ProTaskWorkunitController
extends
BaseController
{
@Autowired
private
IProTaskWorkunitService
proTaskWorkunitService
;
...
...
@@ -53,7 +57,25 @@ public class ProTaskWorkunitController extends BaseController {
List
<
ProTaskWorkunit
>
lists
=
proTaskWorkunitService
.
schedulingList
(
proTaskWorkunit
);
return
getDataTable
(
lists
);
}
/**
* 任务工作单元列表
*/
@PreAuthorize
(
"@ss.hasPermi('mes:pro:taskWorkunit:list')"
)
@PostMapping
(
"/list/export"
)
@ApiOperation
(
"任务工作单元列表导出"
)
public
void
listExport
(
HttpServletResponse
response
,
@RequestBody
ProTaskWorkunitQuery
proTaskWorkunit
)
{
List
<
ProTaskWorkunit
>
lists
=
proTaskWorkunitService
.
schedulingList
(
proTaskWorkunit
);
lists
.
stream
().
forEach
(
proTaskWorkunit1
->
{
if
(
StringUtils
.
isNotEmpty
(
proTaskWorkunit1
.
getTaskBatch
())){
String
[]
spli
=
proTaskWorkunit1
.
getTaskBatch
().
split
(
"-"
);
if
(
spli
.
length
>
1
){
proTaskWorkunit1
.
setTaskBatch
(
spli
[
1
]);
}
}
});
ExcelUtil
<
ProTaskWorkunit
>
util
=
new
ExcelUtil
<>(
ProTaskWorkunit
.
class
);
util
.
exportExcel
(
response
,
lists
,
"任务工作单元列表"
,
"任务工作单元列表"
);
}
@ApiOperation
(
"查询任务工作单元列表"
)
@PostMapping
(
"/workorderList"
)
public
List
<
ProWorkorder
>
listWorkorder
(
@RequestBody
ProTaskWorkunitQuery
proTaskWorkunit
)
{
...
...
mes/src/main/java/com/ximai/mes/pro/domain/task/ProTaskWorkunit.java
View file @
3de93391
...
...
@@ -110,12 +110,16 @@ public class ProTaskWorkunit extends BaseEntity {
*/
@ApiModelProperty
(
"计划开始时间"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
@Excel
(
name
=
"计划开始时间"
)
private
Date
scheduleStartDate
;
/**
* 预计结束时间
*/
@ApiModelProperty
(
"计划结束时间"
)
@Excel
(
name
=
"计划结束时间"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
scheduleEndDate
;
...
...
@@ -135,18 +139,24 @@ public class ProTaskWorkunit extends BaseEntity {
@ApiModelProperty
(
"工序名"
)
@TableField
(
exist
=
false
)
@Excel
(
name
=
"工序名"
)
private
String
processName
;
@TableField
(
exist
=
false
)
@ApiModelProperty
(
"作业单元编码"
)
@Excel
(
name
=
"作业单元编码"
)
private
String
workunitCode
;
@TableField
(
exist
=
false
)
@ApiModelProperty
(
"作业单元名称"
)
@Excel
(
name
=
"作业单元名称"
)
private
String
workunitName
;
@TableField
(
exist
=
false
)
@ApiModelProperty
(
"任务编码"
)
@Excel
(
name
=
"任务编码"
)
private
String
taskCode
;
//
// @TableField(exist = false)
...
...
@@ -198,23 +208,29 @@ public class ProTaskWorkunit extends BaseEntity {
@TableField
(
exist
=
false
)
@ApiModelProperty
(
"工单编号"
)
@Excel
(
name
=
"工单编号"
)
private
String
workorderCode
;
@TableField
(
exist
=
false
)
@ApiModelProperty
(
"待生产数量"
)
@Excel
(
name
=
"可加工数量"
)
private
BigDecimal
quantityWait
;
private
int
percent
;
@ApiModelProperty
(
"客户图号"
)
@TableField
(
exist
=
false
)
@Excel
(
name
=
"产品图号"
)
private
String
customerDrawingNo
;
@ApiModelProperty
(
"订单单号"
)
@Excel
(
name
=
"订单单号"
)
private
String
orderCode
;
@ApiModelProperty
(
"项目号"
)
@Excel
(
name
=
"项目号"
)
private
String
customerProjectNo
;
@ApiModelProperty
(
"任务批号"
)
@Excel
(
name
=
"排产次数"
)
private
String
taskBatch
;
@ApiModelProperty
(
"标准工时"
)
...
...
mes/src/main/java/com/ximai/mes/pro/domain/vo/ProFeedbackVo.java
View file @
3de93391
...
...
@@ -26,12 +26,14 @@ public class ProFeedbackVo {
/**
* 报工单编号
*/
private
String
feedbackCode
;
private
String
assistProcessCode
;
/**
* 报工类型
*/
@Excel
(
name
=
"报工类型"
)
private
String
feedbackType
;
/**
...
...
@@ -151,7 +153,7 @@ public class ProFeedbackVo {
/**
* 本次报工数量
*/
@Excel
(
name
=
"
本次
报工数量"
)
@Excel
(
name
=
"报工数量"
)
private
BigDecimal
quantityFeedback
;
/**
...
...
@@ -266,6 +268,7 @@ public class ProFeedbackVo {
@ApiModelProperty
(
"作业单元id"
)
private
Long
workunitId
;
@ApiModelProperty
(
"作业单元名称"
)
@Excel
(
name
=
"作业单元名称"
)
private
String
workunitName
;
@ApiModelProperty
(
"创建人"
)
...
...
@@ -294,13 +297,16 @@ public class ProFeedbackVo {
@ApiModelProperty
(
"产品图号"
)
@TableField
(
exist
=
false
)
@Excel
(
name
=
"产品图号"
)
private
String
customerDrawingNo
;
/** 异常类型 */
/** 销售订单号 */
@Excel
(
name
=
"销售订单号"
)
private
String
orderCode
;
/** 异常类型 */
@Excel
(
name
=
"销售序号"
)
private
String
orderSerial
;
}
mes/src/main/java/com/ximai/mes/pro/service/impl/task/ProTaskWorkunitServiceImpl.java
View file @
3de93391
...
...
@@ -699,7 +699,8 @@ public class ProTaskWorkunitServiceImpl implements IProTaskWorkunitService {
}
taskProWorkorderPrintData
.
setSize
(
i
++);
taskProWorkorderPrintData
.
setDate
(
simpleDateFormat1
.
format
(
new
Date
()));
taskProWorkorderPrintData
.
setQuantity
(
taskBatchTasks
.
get
(
0
).
getQuantity
());
BigDecimal
quantity
=
taskBatchTasks
.
stream
().
filter
(
proTask
->
proTask
.
getIdx
().
equals
(
"0010"
)).
map
(
proTask
->
proTask
.
getQuantity
()).
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
);
taskProWorkorderPrintData
.
setQuantity
(
quantity
);
//}
}
return
printData
;
...
...
mes/src/main/java/com/ximai/mes/report/request/FeedbackRequest.java
View file @
3de93391
...
...
@@ -112,11 +112,11 @@ public class FeedbackRequest {
private
String
nickName
;
@ApiModelProperty
(
"报工开始"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd
HH:mm:ss
"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
)
private
Date
startDate
;
@ApiModelProperty
(
"报工结束"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd
HH:mm:ss
"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
)
private
Date
endDate
;
@ApiModelProperty
(
"是否筛查不良"
)
...
...
mes/src/main/java/com/ximai/mes/report/request/WorkOrderProgressRequest.java
View file @
3de93391
...
...
@@ -48,5 +48,8 @@ public class WorkOrderProgressRequest {
@ApiModelProperty
(
"产线"
)
private
String
lineName
;
@ApiModelProperty
(
"订单序号"
)
private
String
orderSerial
;
@ApiModelProperty
(
"排产次数"
)
private
String
taskBatch
;
}
mes/src/main/java/com/ximai/mes/report/response/FeedbackResponse.java
View file @
3de93391
...
...
@@ -195,4 +195,10 @@ public class FeedbackResponse extends ProFeedback {
@ApiModelProperty
(
"车间名称"
)
@Excel
(
name
=
"车间名称"
)
private
String
workshopName
;
@ApiModelProperty
(
"订单序号"
)
@Excel
(
name
=
"订单序号"
)
private
String
orderSerial
;
@ApiModelProperty
(
"排产次数"
)
@Excel
(
name
=
"排产次数"
)
private
String
taskBatch
;
}
mes/src/main/java/com/ximai/mes/report/response/WorkOrderProgressListResponse.java
View file @
3de93391
...
...
@@ -76,5 +76,12 @@ public class WorkOrderProgressListResponse {
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
@Excel
(
name
=
"需求时间"
,
dateFormat
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
requestDate
;
@ApiModelProperty
(
"订单序号"
)
@Excel
(
name
=
"订单序号"
)
private
String
orderSerial
;
@ApiModelProperty
(
"排产次数"
)
@Excel
(
name
=
"排产次数"
)
private
String
taskBatch
;
}
mes/src/main/resources/mapper/pro/ProFeedbackMapper.xml
View file @
3de93391
...
...
@@ -173,6 +173,7 @@
workorder.workorder_Type,
workorder.customer_Project_No,
workorder.order_Code,
workorder.order_serial,
workorder.workorder_Code,
workorder.product_Code,
workorder.product_Name,
...
...
@@ -193,7 +194,9 @@
f.machine_time,
f.feedback_time,
workunit.std_working_time,
workunit.schedule_end_date
workunit.schedule_end_date,
SUBSTRING_INDEX(pt.task_batch, '-', -1) task_batch
from pro_feedback f
left join pro_task_workunit workunit on workunit.task_id = f.task_id
left join pro_task pt on f.task_id = pt.task_id
...
...
@@ -542,7 +545,7 @@
workunit.std_working_time ,
pro_task.task_batch
order by
pro_task.
idx
pro_task.
task_batch
</select>
<select
id=
"getListByDefect"
resultType=
"com.ximai.mes.report.response.FeedbackResponse"
>
select
...
...
mes/src/main/resources/mapper/pro/proWorkOrder/ProWorkorderMapper.xml
View file @
3de93391
...
...
@@ -266,6 +266,7 @@
pw.erp_create_time,
pw.erp_update_time ,
item.line_name,
SUBSTRING_INDEX(task.task_batch, '-', -1) task_batch,
sum(case task.is_last_process when 0 THEN 0 ELSE fe.quantity_qualify + fe.quantity_unqualify END) as quantity_produced
FROM
pro_workorder pw
...
...
@@ -286,6 +287,8 @@
</if>
<if
test=
"lineName != null and lineName !=''"
>
and item.line_name = #{lineName}
</if>
<if
test=
"orderSerial != null and orderSerial !=''"
>
and pw.order_serial = #{orderSerial}
</if>
<if
test=
"taskBatch != null and taskBatch !=''"
>
and SUBSTRING_INDEX(task.task_batch, '-', -1) = #{taskBatch}
</if>
</where>
GROUP BY
pw.workorder_id,
...
...
@@ -363,6 +366,7 @@
pw.in_drawing_no,
pw.erp_create_time,
pw.erp_update_time,
SUBSTRING_INDEX(task.task_batch, '-', -1) ,
item.line_name
</select>
...
...
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