Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-biz
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
项目统一框架
amos-boot-biz
Commits
2f4ed3f9
Commit
2f4ed3f9
authored
Oct 14, 2023
by
tianyiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
两员配备- 气瓶基本信息,气瓶充装信息存入es优化
parent
b22267d2
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
196 additions
and
121 deletions
+196
-121
ESCylinderFillingRecordDto.java
...odule/cylinder/api/entity/ESCylinderFillingRecordDto.java
+11
-0
ESCylinderInfoDto.java
...os/boot/module/cylinder/api/entity/ESCylinderInfoDto.java
+4
-0
CylinderFillingRecordMapper.java
.../cylinder/flc/api/mapper/CylinderFillingRecordMapper.java
+5
-2
ICylinderFillingRecordService.java
...linder/flc/api/service/ICylinderFillingRecordService.java
+2
-1
CylinderFillingRecordMapper.xml
...src/main/resources/mapper/CylinderFillingRecordMapper.xml
+43
-32
CylinderInfoController.java
...e/cylinder/flc/biz/controller/CylinderInfoController.java
+7
-33
CylinderFillingRecordServiceImpl.java
...lc/biz/service/impl/CylinderFillingRecordServiceImpl.java
+118
-52
CylinderInfoServiceImpl.java
...ylinder/flc/biz/service/impl/CylinderInfoServiceImpl.java
+6
-1
No files found.
amos-boot-system-tzs/amos-boot-module-cylinder/amos-boot-module-cylinder-api/src/main/java/com/yeejoin/amos/boot/module/cylinder/api/entity/ESCylinderFillingRecordDto.java
View file @
2f4ed3f9
...
@@ -93,6 +93,10 @@ public class ESCylinderFillingRecordDto {
...
@@ -93,6 +93,10 @@ public class ESCylinderFillingRecordDto {
@Field
(
type
=
FieldType
.
Text
)
@Field
(
type
=
FieldType
.
Text
)
private
String
inspectionDate
;
private
String
inspectionDate
;
//充装前检查时间毫秒值
@Field
(
type
=
FieldType
.
Long
)
private
Long
inspectionDateMs
;
//充装前检查结果
//充装前检查结果
@Field
(
type
=
FieldType
.
Text
)
@Field
(
type
=
FieldType
.
Text
)
private
String
fillingResult
;
private
String
fillingResult
;
...
@@ -106,6 +110,10 @@ public class ESCylinderFillingRecordDto {
...
@@ -106,6 +110,10 @@ public class ESCylinderFillingRecordDto {
@Field
(
type
=
FieldType
.
Text
)
@Field
(
type
=
FieldType
.
Text
)
private
String
inspectionDateAfter
;
private
String
inspectionDateAfter
;
//充装前检查结果毫秒值
@Field
(
type
=
FieldType
.
Long
)
private
Long
inspectionDateAfterMS
;
//重装后检查结果
//重装后检查结果
@Field
(
type
=
FieldType
.
Text
)
@Field
(
type
=
FieldType
.
Text
)
private
String
checkResult
;
private
String
checkResult
;
...
@@ -122,4 +130,7 @@ public class ESCylinderFillingRecordDto {
...
@@ -122,4 +130,7 @@ public class ESCylinderFillingRecordDto {
@Field
(
type
=
FieldType
.
Text
)
@Field
(
type
=
FieldType
.
Text
)
private
String
regionCode
;
private
String
regionCode
;
//appid+气瓶唯一标识
private
String
appIdAndSequenceCode
;
}
}
amos-boot-system-tzs/amos-boot-module-cylinder/amos-boot-module-cylinder-api/src/main/java/com/yeejoin/amos/boot/module/cylinder/api/entity/ESCylinderInfoDto.java
View file @
2f4ed3f9
...
@@ -72,6 +72,10 @@ public class ESCylinderInfoDto {
...
@@ -72,6 +72,10 @@ public class ESCylinderInfoDto {
@Field
(
type
=
FieldType
.
Text
)
@Field
(
type
=
FieldType
.
Text
)
private
String
inspectionDate
;
private
String
inspectionDate
;
//检验日期
@Field
(
type
=
FieldType
.
Long
)
private
Long
inspectionDateMs
;
//气瓶唯一标识
//气瓶唯一标识
@Field
(
type
=
FieldType
.
Text
)
@Field
(
type
=
FieldType
.
Text
)
private
String
sequenceCode
;
private
String
sequenceCode
;
...
...
amos-boot-system-tzs/amos-boot-module-cylinder/amos-boot-module-cylinder-api/src/main/java/com/yeejoin/amos/boot/module/cylinder/flc/api/mapper/CylinderFillingRecordMapper.java
View file @
2f4ed3f9
...
@@ -2,6 +2,7 @@ package com.yeejoin.amos.boot.module.cylinder.flc.api.mapper;
...
@@ -2,6 +2,7 @@ package com.yeejoin.amos.boot.module.cylinder.flc.api.mapper;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.yeejoin.amos.boot.module.cylinder.api.dto.CylinderFillingRecordDtoEs
;
import
com.yeejoin.amos.boot.module.cylinder.api.entity.ESCylinderFillingRecordDto
;
import
com.yeejoin.amos.boot.module.cylinder.api.entity.ESCylinderFillingRecordDto
;
import
com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderFillingRecordDto
;
import
com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderFillingRecordDto
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
...
@@ -47,7 +48,7 @@ public interface CylinderFillingRecordMapper extends BaseMapper<CylinderFillingR
...
@@ -47,7 +48,7 @@ public interface CylinderFillingRecordMapper extends BaseMapper<CylinderFillingR
);
);
Page
<
ESCylinderFillingRecordDto
>
getCyinderFillingRecord
(
Page
<
ESCylinderFillingRecordDto
>
cylinderFillingRecordDto
);
List
<
ESCylinderFillingRecordDto
>
getCylinderFillingRecord
(
);
Double
getFillingSumByMonth
(
@Param
(
"appId"
)
String
appId
,
@Param
(
"time"
)
Date
time
);
Double
getFillingSumByMonth
(
@Param
(
"appId"
)
String
appId
,
@Param
(
"time"
)
Date
time
);
...
@@ -55,7 +56,9 @@ public interface CylinderFillingRecordMapper extends BaseMapper<CylinderFillingR
...
@@ -55,7 +56,9 @@ public interface CylinderFillingRecordMapper extends BaseMapper<CylinderFillingR
Double
getFillingSumByDate
(
@Param
(
"appId"
)
String
appId
,
@Param
(
"time"
)
Date
time
);
Double
getFillingSumByDate
(
@Param
(
"appId"
)
String
appId
,
@Param
(
"time"
)
Date
time
);
ESCylinderFillingRecordDto
getCyinderFillingRecordInfo
(
String
appId
,
String
sequenceCode
);
List
<
ESCylinderFillingRecordDto
>
getCylinderFillingRecordInfo
(
@Param
(
"appIds"
)
List
<
String
>
appIds
,
@Param
(
"sequenceCodeS"
)
List
<
String
>
sequenceCodeS
);
Integer
getCylinderFillingRecordTotal
();
Integer
getCylinderFillingRecordTotal
();
void
updateCylinderFillingToEsStatus
(
@Param
(
"ids"
)
List
<
String
>
ids
);
}
}
amos-boot-system-tzs/amos-boot-module-cylinder/amos-boot-module-cylinder-api/src/main/java/com/yeejoin/amos/boot/module/cylinder/flc/api/service/ICylinderFillingRecordService.java
View file @
2f4ed3f9
...
@@ -16,7 +16,8 @@ public interface ICylinderFillingRecordService {
...
@@ -16,7 +16,8 @@ public interface ICylinderFillingRecordService {
ESCylinderFillingRecordDto
saveCylinderFillingRecordToES
(
ESCylinderFillingRecordDto
ci
);
ESCylinderFillingRecordDto
saveCylinderFillingRecordToES
(
ESCylinderFillingRecordDto
ci
);
Page
<
ESCylinderFillingRecordDto
>
getCyinderFillingRecord
(
Page
<
ESCylinderFillingRecordDto
>
cylinderFillingRecordDto
);
List
<
ESCylinderFillingRecordDto
>
getCylinderFillingRecordAll
();
List
<
ESCylinderFillingRecordDto
>
getCylinderFillingRecordTest
();
Page
<
ESCylinderFillingRecordDto
>
queryByKeys
(
ESCylinderFillingRecordDto
esCylinderFillingRecordDto
,
int
pageNum
,
int
pageSize
);
Page
<
ESCylinderFillingRecordDto
>
queryByKeys
(
ESCylinderFillingRecordDto
esCylinderFillingRecordDto
,
int
pageNum
,
int
pageSize
);
...
...
amos-boot-system-tzs/amos-boot-module-cylinder/amos-boot-module-cylinder-api/src/main/resources/mapper/CylinderFillingRecordMapper.xml
View file @
2f4ed3f9
...
@@ -146,9 +146,8 @@
...
@@ -146,9 +146,8 @@
select count(1) from tz_cylinder_filling_record r where date_format(r.filling_endTime,'%Y-%m') = date_format(#{time},'%Y-%m') and app_id = #{appId}
select count(1) from tz_cylinder_filling_record r where date_format(r.filling_endTime,'%Y-%m') = date_format(#{time},'%Y-%m') and app_id = #{appId}
</select>
</select>
<select
id=
"getCyinderFillingRecord"
resultType=
"com.yeejoin.amos.boot.module.cylinder.api.entity.ESCylinderFillingRecordDto"
>
<select
id=
"getCylinderFillingRecord"
resultType=
"com.yeejoin.amos.boot.module.cylinder.api.entity.ESCylinderFillingRecordDto"
>
SELECT
SELECT DISTINCT(r.filling_record_id),
DISTINCT( r.filling_record_id),
r.sequence_nbr AS sequenceNbr,
r.sequence_nbr AS sequenceNbr,
r.filling_startTime AS fillingStarttime,
r.filling_startTime AS fillingStarttime,
r.filling_endTime AS fillingEndtime,
r.filling_endTime AS fillingEndtime,
...
@@ -160,32 +159,48 @@
...
@@ -160,32 +159,48 @@
WHEN 3139 THEN
WHEN 3139 THEN
'有异常'
'有异常'
WHEN 3140 THEN
WHEN 3140 THEN
'正常' ELSE''
'正常'
ELSE ''
END AS abnormalStr,
END AS abnormalStr,
b.inspector_user AS inspectorUser,
b.inspector_user AS inspectorUser,
b.inspection_date AS inspectionDate,
b.inspection_date AS inspectionDate,
b.check_results AS fillingResult,
b.check_results AS fillingResult,
b.sequence_code AS sequenceCode,
b.sequence_code AS sequenceCode,
b.app_id AS appId,
b.app_id AS appId,
concat(b.app_id, b.sequence_code) AS appIdAndSequenceCode,
b.filling_unit_name AS fillingUnitName,
b.filling_unit_name AS fillingUnitName,
af.inspector AS inspector,
af.inspector AS inspector,
af.inspection_date AS inspectionDateAfter,
af.inspection_date AS inspectionDateAfter,
af.check_results AS checkResult
af.check_results AS checkResult
FROM
FROM
tz_cylinder_filling_record
r
( SELECT * FROM tz_cylinder_filling_record WHERE is_not_es IS NULL LIMIT 5000 )
r
LEFT JOIN tz_cylinder_filling b ON b.filling_before_id = r.filling_before_id
LEFT JOIN tz_cylinder_filling b ON b.filling_before_id = r.filling_before_id
AND r.filling_before_id
is NOT null
AND r.filling_before_id
IS NOT NULL and b.inspection_date NOT LIKE'16%'
AND date_format (
b.inspection_date, '%Y-%m-%d'
) = date_format ( r.filling_startTime, '%Y-%m-%d' )
AND date_format (
b.inspection_date, '%Y-%m-%d'
) = date_format ( r.filling_startTime, '%Y-%m-%d' )
LEFT JOIN tz_cylinder_filling_check af ON af.filling_check_id = r.filling_check_id
LEFT JOIN tz_cylinder_filling_check af ON af.filling_check_id = r.filling_check_id
AND date_format (af.inspection_date,'%Y-%m-%d') = date_format ( r.filling_startTime, '%Y-%m-%d' )
AND date_format ( af.inspection_date, '%Y-%m-%d' ) = date_format ( r.filling_startTime, '%Y-%m-%d' )
LEFT JOIN tz_cylinder_info i ON b.sequence_code = i.sequence_code
WHERE b.sequence_code is not null AND b.app_id is not null
</select>
<select
id=
"getCylinderFillingRecordTotal"
resultType=
"java.lang.Integer"
>
SELECT
COUNT(1)
FROM
tz_cylinder_filling_record r
WHERE
WHERE
r.is_not_es IS NULL
r.is_not_es IS NULL
AND
b.inspection_date not like '16%'
AND
r.filling_before_id IS NOT NULL
ORDER BY r.filling_record_id
AND r.filling_check_id IS NOT NULL
</select>
</select>
<select
id=
"getCyinderFillingRecordInfo"
<update
id=
"updateCylinderFillingToEsStatus"
>
UPDATE tz_cylinder_filling_record SET "is_not_es" = 1 WHERE "sequence_nbr" IN
<foreach
collection=
"ids"
separator=
","
item=
"id"
open=
"("
close=
")"
>
#{id}
</foreach>
</update>
<select
id=
"getCylinderFillingRecordInfo"
resultType=
"com.yeejoin.amos.boot.module.cylinder.api.entity.ESCylinderFillingRecordDto"
>
resultType=
"com.yeejoin.amos.boot.module.cylinder.api.entity.ESCylinderFillingRecordDto"
>
SELECT
SELECT
ci.unit_name AS unit_name,
ci.unit_name AS unit_name,
...
@@ -198,31 +213,27 @@
...
@@ -198,31 +213,27 @@
ct.electronic_label_code,
ct.electronic_label_code,
ci.app_id,
ci.app_id,
ci.credit_code,
ci.credit_code,
tn.region_code
tn.region_code,
concat(ci.app_id, ci.sequence_code) AS appIdAndSequenceCode
FROM
FROM
tz_cylinder_info AS ci
tz_cylinder_info AS ci
LEFT JOIN cb_data_dictionary AS d1 ON d1.TYPE = 'CZJZMC' AND d1.code = ci.filling_media
LEFT JOIN cb_data_dictionary AS d1 ON d1.TYPE = 'CZJZMC' AND d1.code = ci.filling_media
LEFT JOIN cb_data_dictionary AS d2 ON d2.sequence_nbr = ci.cylinder_variety
LEFT JOIN cb_data_dictionary AS d2 ON d2.sequence_nbr = ci.cylinder_variety
LEFT JOIN tz_cylinder_tags AS ct ON ct.sequence_code = ci.sequence_code and ct.app_id = ci.app_id
LEFT JOIN tz_cylinder_tags AS ct ON ct.sequence_code = ci.sequence_code and ct.app_id = ci.app_id
LEFT JOIN tz_cylinder_unit AS tn ON ci.app_id = tn.app_id
LEFT JOIN tz_cylinder_unit AS tn ON ci.app_id = tn.app_id
where
<where>
ci.sequence_code = #{sequenceCode}
<if
test=
"appIds != null and appIds.size() > 0"
>
and ci.app_id = #{appId}
ci.app_id in
</select>
<foreach
item=
"appId"
collection=
"appIds"
separator=
","
open=
"("
close=
")"
index=
""
>
#{appId}
<select
id=
"getCylinderFillingRecordTotal"
resultType=
"java.lang.Integer"
>
</foreach>
SELECT
</if>
COUNT(1)
<if
test=
"sequenceCodeS != null and sequenceCodeS.size() > 0"
>
FROM
and ci.sequence_code in
tz_cylinder_filling_record r
<foreach
item=
"sequenceCode"
collection=
"sequenceCodeS"
separator=
","
open=
"("
close=
")"
index=
""
>
LEFT JOIN tz_cylinder_filling b ON b.filling_before_id = r.filling_before_id
#{sequenceCode}
AND r.filling_before_id IS NOT NULL
</foreach>
AND date_format ( b.inspection_date, '%Y-%m-%d' ) = date_format ( r.filling_startTime, '%Y-%m-%d' )
</if>
LEFT JOIN tz_cylinder_filling_check af ON af.filling_check_id = r.filling_check_id
</where>
AND date_format ( af.inspection_date, '%Y-%m-%d' ) = date_format ( r.filling_startTime, '%Y-%m-%d' )
LEFT JOIN tz_cylinder_info i ON b.sequence_code = i.sequence_code
WHERE
r.is_not_es IS NULL
AND b.inspection_date NOT LIKE'16%'
</select>
</select>
</mapper>
</mapper>
amos-boot-system-tzs/amos-boot-module-cylinder/amos-boot-module-cylinder-biz/src/main/java/com/yeejoin/amos/boot/module/cylinder/flc/biz/controller/CylinderInfoController.java
View file @
2f4ed3f9
...
@@ -601,7 +601,7 @@ public class CylinderInfoController extends BaseController {
...
@@ -601,7 +601,7 @@ public class CylinderInfoController extends BaseController {
cylinderInfoPage
.
setCurrent
(
1
);
cylinderInfoPage
.
setCurrent
(
1
);
cylinderInfoPage
.
setSize
(
1000
);
cylinderInfoPage
.
setSize
(
1000
);
cylinderInfoPage
=
cylinderInfoServiceImpl
.
getCyinderInfoList
(
cylinderInfoPage
);
cylinderInfoPage
=
cylinderInfoServiceImpl
.
getCyinderInfoList
(
cylinderInfoPage
);
if
(!
ObjectUtils
.
isEmpty
(
cylinderInfoPage
))
{
if
(!
ObjectUtils
.
isEmpty
(
cylinderInfoPage
)
&&
cylinderInfoPage
.
getRecords
().
size
()
>
0
)
{
cylinderInfoServiceImpl
.
saveCylinderInfo2ES
(
cylinderInfoPage
.
getRecords
());
cylinderInfoServiceImpl
.
saveCylinderInfo2ES
(
cylinderInfoPage
.
getRecords
());
}
}
return
ResponseHelper
.
buildResponse
(
true
);
return
ResponseHelper
.
buildResponse
(
true
);
...
@@ -639,45 +639,19 @@ public class CylinderInfoController extends BaseController {
...
@@ -639,45 +639,19 @@ public class CylinderInfoController extends BaseController {
return
ResponseHelper
.
buildResponse
(
pageResult
);
return
ResponseHelper
.
buildResponse
(
pageResult
);
}
}
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
,
needAuth
=
false
)
@GetMapping
(
value
=
"/saveCyinderFillingRecord"
)
@GetMapping
(
value
=
"/saveCyinderFillingRecord"
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"气瓶充装信息存入es"
,
notes
=
"气瓶充装信息存入es"
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"气瓶充装信息存入es"
,
notes
=
"气瓶充装信息存入es"
)
public
void
saveCyinderFillingRecord
()
{
public
ResponseModel
<
Object
>
saveCyinderFillingRecord
()
{
Page
<
ESCylinderFillingRecordDto
>
recordDtoPage
=
new
Page
<>();
return
ResponseHelper
.
buildResponse
(
cylinderFillingRecordServiceImpl
.
getCylinderFillingRecordAll
());
Integer
count
=
cylinderFillingRecordServiceImpl
.
getCylinderFillingRecordTotal
();
Integer
times
=
0
;
if
(
count
!=
0
)
{
times
=
count
/
1000
;
int
last
=
count
%
1000
;
if
(
last
>
0
)
{
times
++;
}
}
else
{
return
;
}
for
(
int
i
=
0
;
i
<=
times
;
i
++)
{
recordDtoPage
.
setCurrent
(
1
);
recordDtoPage
.
setSize
(
1000
);
Page
<
ESCylinderFillingRecordDto
>
cyinderFillingRecord
=
cylinderFillingRecordServiceImpl
.
getCyinderFillingRecord
(
recordDtoPage
);
if
(!
ObjectUtils
.
isEmpty
(
cyinderFillingRecord
))
{
cylinderFillingRecordServiceImpl
.
saveCylinderFillingRecord2ES
(
cyinderFillingRecord
.
getRecords
());
}
}
}
}
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
,
needAuth
=
false
)
@GetMapping
(
value
=
"/getCyinderFillingRecord"
)
@GetMapping
(
value
=
"/getCyinderFillingRecord"
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"气瓶充装信息存入es入口"
,
notes
=
"气瓶充装信息存入es入口"
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"气瓶充装信息存入es入口"
,
notes
=
"气瓶充装信息存入es入口"
)
public
Page
<
ESCylinderFillingRecordDto
>
getCyinderFillingRecord
()
{
public
ResponseModel
<
Object
>
getCyinderFillingRecord
()
{
Page
<
ESCylinderFillingRecordDto
>
cylinderInfoPage
=
new
Page
<>();
return
ResponseHelper
.
buildResponse
(
cylinderFillingRecordServiceImpl
.
getCylinderFillingRecordTest
());
cylinderInfoPage
.
setCurrent
(
1
);
cylinderInfoPage
.
setSize
(
10
);
Page
<
ESCylinderFillingRecordDto
>
cyinderFillingRecord
=
cylinderFillingRecordServiceImpl
.
getCyinderFillingRecord
(
cylinderInfoPage
);
for
(
ESCylinderFillingRecordDto
ci
:
cyinderFillingRecord
.
getRecords
())
{
cylinderFillingRecordServiceImpl
.
saveCylinderFillingRecordToES
(
ci
);
}
return
cyinderFillingRecord
;
}
}
...
...
amos-boot-system-tzs/amos-boot-module-cylinder/amos-boot-module-cylinder-biz/src/main/java/com/yeejoin/amos/boot/module/cylinder/flc/biz/service/impl/CylinderFillingRecordServiceImpl.java
View file @
2f4ed3f9
package
com
.
yeejoin
.
amos
.
boot
.
module
.
cylinder
.
flc
.
biz
.
service
.
impl
;
package
com
.
yeejoin
.
amos
.
boot
.
module
.
cylinder
.
flc
.
biz
.
service
.
impl
;
import
cn.hutool.json.ObjectMapper
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.yeejoin.amos.boot.biz.common.utils.DateUtils
;
import
com.yeejoin.amos.boot.module.cylinder.api.dto.CylinderFillingRecordDtoEs
;
import
com.yeejoin.amos.boot.module.cylinder.api.entity.ESCylinderFillingRecordDto
;
import
com.yeejoin.amos.boot.module.cylinder.api.entity.ESCylinderFillingRecordDto
;
import
com.yeejoin.amos.boot.module.cylinder.biz.dao.ESCylinderFillingRecordRepository
;
import
com.yeejoin.amos.boot.module.cylinder.biz.dao.ESCylinderFillingRecordRepository
;
import
com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderFillingRecordDto
;
import
com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderFillingRecordDto
;
import
com.yeejoin.amos.boot.module.cylinder.flc.api.entity.CylinderFillingRecord
;
import
com.yeejoin.amos.boot.module.cylinder.flc.api.entity.CylinderFillingRecord
;
import
com.yeejoin.amos.boot.module.cylinder.flc.api.mapper.CylinderFillingRecordMapper
;
import
com.yeejoin.amos.boot.module.cylinder.flc.api.mapper.CylinderFillingRecordMapper
;
import
com.yeejoin.amos.boot.module.cylinder.flc.api.service.ICylinderFillingRecordService
;
import
com.yeejoin.amos.boot.module.cylinder.flc.api.service.ICylinderFillingRecordService
;
import
lombok.extern.slf4j.Slf4j
;
import
net.javacrumbs.shedlock.spring.annotation.SchedulerLock
;
import
net.javacrumbs.shedlock.spring.annotation.SchedulerLock
;
import
org.elasticsearch.action.search.SearchRequest
;
import
org.elasticsearch.action.search.SearchRequest
;
import
org.elasticsearch.action.search.SearchResponse
;
import
org.elasticsearch.action.search.SearchResponse
;
...
@@ -23,6 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired;
...
@@ -23,6 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.util.StopWatch
;
import
org.typroject.tyboot.core.rdbms.service.BaseService
;
import
org.typroject.tyboot.core.rdbms.service.BaseService
;
import
java.io.IOException
;
import
java.io.IOException
;
...
@@ -32,6 +37,7 @@ import java.util.ArrayList;
...
@@ -32,6 +37,7 @@ import java.util.ArrayList;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.LinkedList
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.List
;
import
java.util.logging.Logger
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
/**
/**
...
@@ -41,6 +47,7 @@ import java.util.stream.Collectors;
...
@@ -41,6 +47,7 @@ import java.util.stream.Collectors;
* @date 2022-03-04
* @date 2022-03-04
*/
*/
@Service
@Service
@Slf4j
public
class
CylinderFillingRecordServiceImpl
extends
BaseService
<
CylinderFillingRecordDto
,
CylinderFillingRecord
,
CylinderFillingRecordMapper
>
implements
ICylinderFillingRecordService
{
public
class
CylinderFillingRecordServiceImpl
extends
BaseService
<
CylinderFillingRecordDto
,
CylinderFillingRecord
,
CylinderFillingRecordMapper
>
implements
ICylinderFillingRecordService
{
@Autowired
@Autowired
...
@@ -114,74 +121,135 @@ public class CylinderFillingRecordServiceImpl extends BaseService<CylinderFillin
...
@@ -114,74 +121,135 @@ public class CylinderFillingRecordServiceImpl extends BaseService<CylinderFillin
@Scheduled
(
cron
=
"${tzs.cylinder.fill.cron}"
)
@Scheduled
(
cron
=
"${tzs.cylinder.fill.cron}"
)
@SchedulerLock
(
name
=
"cylinderFillingRecord2ESTask"
,
lockAtMostFor
=
"PT6H"
)
@SchedulerLock
(
name
=
"cylinderFillingRecord2ESTask"
,
lockAtMostFor
=
"PT6H"
)
public
void
setTimeSaveCylinderInfoToES
()
{
public
void
setTimeSaveCylinderInfoToES
()
{
Page
<
ESCylinderFillingRecordDto
>
cylinderFillingRecordPage
=
new
Page
<>();
Integer
count
=
cylinderFillingRecordMapper
.
getCylinderFillingRecordTotal
();
Page
<
ESCylinderFillingRecordDto
>
cyinderInfoList
=
cylinderFillingRecordMapper
.
getCyinderFillingRecord
(
cylinderFillingRecordPage
);
Integer
times
=
0
;
Long
count
=
cyinderInfoList
.
getCurrent
();
Long
times
=
0L
;
if
(
count
!=
0
)
{
if
(
count
!=
0
)
{
times
=
count
/
1
000
;
times
=
count
/
5
000
;
Long
last
=
count
%
1
000
;
int
last
=
count
%
5
000
;
if
(
last
>
0
)
{
if
(
last
>
0
)
{
times
++;
times
++;
}
}
}
else
{
return
;
}
}
for
(
int
i
=
0
;
i
<=
times
;
i
++)
{
for
(
int
i
=
0
;
i
<=
times
;
i
++)
{
cylinderFillingRecordPage
.
setCurrent
(
i
);
List
<
ESCylinderFillingRecordDto
>
cylinderFillingRecord
=
cylinderFillingRecordMapper
.
getCylinderFillingRecord
();
cylinderFillingRecordPage
.
setSize
(
1000
);
if
(!
ObjectUtils
.
isEmpty
(
cylinderFillingRecord
))
{
cylinderFillingRecordPage
=
cylinderFillingRecordMapper
.
getCyinderFillingRecord
(
cylinderFillingRecordPage
);
List
<
String
>
appIds
=
cylinderFillingRecord
.
stream
().
map
(
ESCylinderFillingRecordDto:
:
getAppId
).
collect
(
Collectors
.
toList
());
if
(!
ObjectUtils
.
isEmpty
(
cylinderFillingRecordPage
))
{
List
<
String
>
sequenceCodeS
=
cylinderFillingRecord
.
stream
().
map
(
ESCylinderFillingRecordDto:
:
getSequenceCode
).
collect
(
Collectors
.
toList
());
cylinderFillingRecordPage
.
getRecords
().
stream
().
map
(
item
->
{
List
<
ESCylinderFillingRecordDto
>
cylinderFillingRecordInfo
=
cylinderFillingRecordMapper
.
getCylinderFillingRecordInfo
(
appIds
,
sequenceCodeS
);
if
(!
ObjectUtils
.
isEmpty
(
item
.
getSequenceCode
()))
{
cylinderFillingRecord
.
stream
().
map
(
item
->
{
ESCylinderFillingRecordDto
cyinderFillingRecordInfo
=
cylinderFillingRecordMapper
.
getCyinderFillingRecordInfo
(
item
.
getAppId
(),
item
.
getSequenceCode
());
List
<
ESCylinderFillingRecordDto
>
collect
=
cylinderFillingRecordInfo
.
stream
().
filter
(
e
->
item
.
getAppIdAndSequenceCode
().
equals
(
e
.
getAppIdAndSequenceCode
())).
collect
(
Collectors
.
toList
());
item
.
setUnitName
(
cyinderFillingRecordInfo
.
getUnitName
());
if
(!
ObjectUtils
.
isEmpty
(
collect
))
{
item
.
setFactoryNum
(
cyinderFillingRecordInfo
.
getFactoryNum
());
item
.
setUnitName
(
collect
.
get
(
0
).
getUnitName
());
item
.
setCylinderVariety
(
cyinderFillingRecordInfo
.
getCylinderVariety
());
item
.
setFactoryNum
(
collect
.
get
(
0
).
getFactoryNum
());
item
.
setCylinderVarietyName
(
cyinderFillingRecordInfo
.
getCylinderVarietyName
());
item
.
setCylinderVariety
(
collect
.
get
(
0
).
getCylinderVariety
());
item
.
setUnitInnerCode
(
cyinderFillingRecordInfo
.
getUnitInnerCode
());
item
.
setCylinderVarietyName
(
collect
.
get
(
0
).
getCylinderVarietyName
());
item
.
setSequenceCode
(
cyinderFillingRecordInfo
.
getSequenceCode
());
item
.
setUnitInnerCode
(
collect
.
get
(
0
).
getUnitInnerCode
());
item
.
setQrCode
(
cyinderFillingRecordInfo
.
getQrCode
());
item
.
setSequenceCode
(
collect
.
get
(
0
).
getSequenceCode
());
item
.
setElectronicLabelCode
(
cyinderFillingRecordInfo
.
getElectronicLabelCode
());
item
.
setQrCode
(
collect
.
get
(
0
).
getQrCode
());
item
.
setAppId
(
cyinderFillingRecordInfo
.
getAppId
());
item
.
setElectronicLabelCode
(
collect
.
get
(
0
).
getElectronicLabelCode
());
item
.
setCreditCode
(
cyinderFillingRecordInfo
.
getCreditCode
());
item
.
setAppId
(
collect
.
get
(
0
).
getAppId
());
item
.
setCreditCode
(
collect
.
get
(
0
).
getCreditCode
());
item
.
setRegionCode
(
collect
.
get
(
0
).
getRegionCode
());
try
{
item
.
setInspectionDateMs
(
ObjectUtils
.
isEmpty
(
item
.
getInspectionDate
())
?
0L
:
DateUtils
.
dateParse
(
item
.
getInspectionDate
(),
DateUtils
.
DATE_TIME_PATTERN
).
getTime
());
item
.
setInspectionDateAfterMS
(
ObjectUtils
.
isEmpty
(
item
.
getInspectionDateAfter
())
?
0L
:
DateUtils
.
dateParse
(
item
.
getInspectionDateAfter
(),
DateUtils
.
DATE_TIME_PATTERN
).
getTime
());
}
catch
(
ParseException
e
)
{
throw
new
RuntimeException
(
e
);
}
}
}
return
item
;
return
item
;
}).
collect
(
Collectors
.
toList
());
}).
collect
(
Collectors
.
toList
());
saveCylinderFillingRecord2ES
(
cylinderFillingRecord
);
}
}
// for (ESCylinderFillingRecordDto ci : cylinderFillingRecordPage.getRecords()) {
// saveCylinderFillingRecordToES(ci);
// }
if
(!
ObjectUtils
.
isEmpty
(
cylinderFillingRecordPage
))
{
saveCylinderFillingRecord2ES
(
cylinderFillingRecordPage
.
getRecords
());
}
}
}
}
@Override
public
List
<
ESCylinderFillingRecordDto
>
getCylinderFillingRecordTest
()
{
List
<
ESCylinderFillingRecordDto
>
cylinderFillingRecord
=
cylinderFillingRecordMapper
.
getCylinderFillingRecord
();
if
(!
ObjectUtils
.
isEmpty
(
cylinderFillingRecord
))
{
List
<
String
>
appIds
=
cylinderFillingRecord
.
stream
().
map
(
ESCylinderFillingRecordDto:
:
getAppId
).
collect
(
Collectors
.
toList
());
List
<
String
>
sequenceCodeS
=
cylinderFillingRecord
.
stream
().
map
(
ESCylinderFillingRecordDto:
:
getSequenceCode
).
collect
(
Collectors
.
toList
());
List
<
ESCylinderFillingRecordDto
>
cylinderFillingRecordInfo
=
cylinderFillingRecordMapper
.
getCylinderFillingRecordInfo
(
appIds
,
sequenceCodeS
);
// List<ESCylinderFillingRecordDto> cylinderFillingRecordInfo = cylinderFillingRecordMapper.getCylinderFillingRecordInfo(appIdAndSequenceCodes);
cylinderFillingRecord
.
stream
().
map
(
item
->
{
List
<
ESCylinderFillingRecordDto
>
collect
=
cylinderFillingRecordInfo
.
stream
().
filter
(
e
->
item
.
getAppIdAndSequenceCode
().
equals
(
e
.
getAppIdAndSequenceCode
())).
collect
(
Collectors
.
toList
());
if
(!
ObjectUtils
.
isEmpty
(
collect
))
{
item
.
setUnitName
(
collect
.
get
(
0
).
getUnitName
());
item
.
setFactoryNum
(
collect
.
get
(
0
).
getFactoryNum
());
item
.
setCylinderVariety
(
collect
.
get
(
0
).
getCylinderVariety
());
item
.
setCylinderVarietyName
(
collect
.
get
(
0
).
getCylinderVarietyName
());
item
.
setUnitInnerCode
(
collect
.
get
(
0
).
getUnitInnerCode
());
item
.
setSequenceCode
(
collect
.
get
(
0
).
getSequenceCode
());
item
.
setQrCode
(
collect
.
get
(
0
).
getQrCode
());
item
.
setElectronicLabelCode
(
collect
.
get
(
0
).
getElectronicLabelCode
());
item
.
setAppId
(
collect
.
get
(
0
).
getAppId
());
item
.
setCreditCode
(
collect
.
get
(
0
).
getCreditCode
());
item
.
setRegionCode
(
collect
.
get
(
0
).
getRegionCode
());
try
{
item
.
setInspectionDateMs
(
ObjectUtils
.
isEmpty
(
item
.
getInspectionDate
())
?
0L
:
DateUtils
.
dateParse
(
item
.
getInspectionDate
(),
DateUtils
.
DATE_TIME_PATTERN
).
getTime
());
item
.
setInspectionDateAfterMS
(
ObjectUtils
.
isEmpty
(
item
.
getInspectionDateAfter
())
?
0L
:
DateUtils
.
dateParse
(
item
.
getInspectionDateAfter
(),
DateUtils
.
DATE_TIME_PATTERN
).
getTime
());
}
catch
(
ParseException
e
)
{
throw
new
RuntimeException
(
e
);
}
}
return
item
;
}).
collect
(
Collectors
.
toList
());
saveCylinderFillingRecord2ES
(
cylinderFillingRecord
);
}
return
cylinderFillingRecord
;
}
}
@Override
@Override
public
Page
<
ESCylinderFillingRecordDto
>
getCyinderFillingRecord
(
Page
<
ESCylinderFillingRecordDto
>
cylinderFillingRecordDto
)
{
public
List
<
ESCylinderFillingRecordDto
>
getCylinderFillingRecordAll
()
{
Page
<
ESCylinderFillingRecordDto
>
cyinderFillingRecord
=
cylinderFillingRecordMapper
.
getCyinderFillingRecord
(
cylinderFillingRecordDto
);
List
<
ESCylinderFillingRecordDto
>
cylinderFillingRecord
=
new
ArrayList
<>();
if
(!
ObjectUtils
.
isEmpty
(
cyinderFillingRecord
))
{
Integer
count
=
cylinderFillingRecordMapper
.
getCylinderFillingRecordTotal
();
cyinderFillingRecord
.
getRecords
().
stream
().
map
(
item
->
{
Integer
times
=
0
;
if
(!
ObjectUtils
.
isEmpty
(
item
.
getSequenceCode
()))
{
if
(
count
!=
0
)
{
ESCylinderFillingRecordDto
cyinderFillingRecordInfo
=
cylinderFillingRecordMapper
.
getCyinderFillingRecordInfo
(
item
.
getAppId
(),
item
.
getSequenceCode
());
times
=
count
/
5000
;
if
(!
ObjectUtils
.
isEmpty
(
cyinderFillingRecordInfo
))
{
int
last
=
count
%
5000
;
item
.
setUnitName
(
cyinderFillingRecordInfo
.
getUnitName
());
if
(
last
>
0
)
{
item
.
setFactoryNum
(
cyinderFillingRecordInfo
.
getFactoryNum
());
times
++;
item
.
setCylinderVariety
(
cyinderFillingRecordInfo
.
getCylinderVariety
());
}
item
.
setCylinderVarietyName
(
cyinderFillingRecordInfo
.
getCylinderVarietyName
());
}
else
{
item
.
setUnitInnerCode
(
cyinderFillingRecordInfo
.
getUnitInnerCode
());
return
cylinderFillingRecord
;
item
.
setSequenceCode
(
cyinderFillingRecordInfo
.
getSequenceCode
());
}
item
.
setQrCode
(
cyinderFillingRecordInfo
.
getQrCode
());
for
(
int
i
=
0
;
i
<=
times
;
i
++)
{
item
.
setElectronicLabelCode
(
cyinderFillingRecordInfo
.
getElectronicLabelCode
());
cylinderFillingRecord
=
cylinderFillingRecordMapper
.
getCylinderFillingRecord
();
item
.
setAppId
(
cyinderFillingRecordInfo
.
getAppId
());
if
(!
ObjectUtils
.
isEmpty
(
cylinderFillingRecord
))
{
item
.
setCreditCode
(
cyinderFillingRecordInfo
.
getCreditCode
());
List
<
String
>
appIds
=
cylinderFillingRecord
.
stream
().
map
(
ESCylinderFillingRecordDto:
:
getAppId
).
collect
(
Collectors
.
toList
());
item
.
setRegionCode
(
cyinderFillingRecordInfo
.
getRegionCode
());
List
<
String
>
sequenceCodeS
=
cylinderFillingRecord
.
stream
().
map
(
ESCylinderFillingRecordDto:
:
getSequenceCode
).
collect
(
Collectors
.
toList
());
List
<
ESCylinderFillingRecordDto
>
cylinderFillingRecordInfo
=
cylinderFillingRecordMapper
.
getCylinderFillingRecordInfo
(
appIds
,
sequenceCodeS
);
cylinderFillingRecord
.
stream
().
map
(
item
->
{
List
<
ESCylinderFillingRecordDto
>
collect
=
cylinderFillingRecordInfo
.
stream
().
filter
(
e
->
item
.
getAppIdAndSequenceCode
().
equals
(
e
.
getAppIdAndSequenceCode
())).
collect
(
Collectors
.
toList
());
if
(!
ObjectUtils
.
isEmpty
(
collect
))
{
item
.
setUnitName
(
collect
.
get
(
0
).
getUnitName
());
item
.
setFactoryNum
(
collect
.
get
(
0
).
getFactoryNum
());
item
.
setCylinderVariety
(
collect
.
get
(
0
).
getCylinderVariety
());
item
.
setCylinderVarietyName
(
collect
.
get
(
0
).
getCylinderVarietyName
());
item
.
setUnitInnerCode
(
collect
.
get
(
0
).
getUnitInnerCode
());
item
.
setSequenceCode
(
collect
.
get
(
0
).
getSequenceCode
());
item
.
setQrCode
(
collect
.
get
(
0
).
getQrCode
());
item
.
setElectronicLabelCode
(
collect
.
get
(
0
).
getElectronicLabelCode
());
item
.
setAppId
(
collect
.
get
(
0
).
getAppId
());
item
.
setCreditCode
(
collect
.
get
(
0
).
getCreditCode
());
item
.
setRegionCode
(
collect
.
get
(
0
).
getRegionCode
());
try
{
item
.
setInspectionDateMs
(
ObjectUtils
.
isEmpty
(
item
.
getInspectionDate
())
?
0L
:
DateUtils
.
dateParse
(
item
.
getInspectionDate
(),
DateUtils
.
DATE_TIME_PATTERN
).
getTime
());
item
.
setInspectionDateAfterMS
(
ObjectUtils
.
isEmpty
(
item
.
getInspectionDateAfter
())
?
0L
:
DateUtils
.
dateParse
(
item
.
getInspectionDateAfter
(),
DateUtils
.
DATE_TIME_PATTERN
).
getTime
());
}
catch
(
ParseException
e
)
{
throw
new
RuntimeException
(
e
);
}
}
}
}
return
item
;
return
item
;
}).
collect
(
Collectors
.
toList
());
}).
collect
(
Collectors
.
toList
());
saveCylinderFillingRecord2ES
(
cylinderFillingRecord
);
}
}
}
return
cyinderFillingRecord
;
return
cy
l
inderFillingRecord
;
}
}
@Override
@Override
...
@@ -334,16 +402,14 @@ public class CylinderFillingRecordServiceImpl extends BaseService<CylinderFillin
...
@@ -334,16 +402,14 @@ public class CylinderFillingRecordServiceImpl extends BaseService<CylinderFillin
@Override
@Override
public
void
saveCylinderFillingRecord2ES
(
List
<
ESCylinderFillingRecordDto
>
records
)
{
public
void
saveCylinderFillingRecord2ES
(
List
<
ESCylinderFillingRecordDto
>
records
)
{
List
<
CylinderFillingRecord
>
cylinderFillingRecordList
=
new
ArrayList
<>();
List
<
String
>
ids
=
new
ArrayList
<>();
for
(
ESCylinderFillingRecordDto
record
:
records
)
{
for
(
ESCylinderFillingRecordDto
record
:
records
)
{
CylinderFillingRecord
cylinderFillingRecord
=
new
CylinderFillingRecord
();
CylinderFillingRecord
cylinderFillingRecord
=
new
CylinderFillingRecord
();
BeanUtils
.
copyProperties
(
record
,
cylinderFillingRecord
);
BeanUtils
.
copyProperties
(
record
,
cylinderFillingRecord
);
cylinderFillingRecord
.
setIsNotEs
(
"1"
);
ids
.
add
(
String
.
valueOf
(
record
.
getSequenceNbr
()));
cylinderFillingRecord
.
setSequenceNbr
(
record
.
getSequenceNbr
());
cylinderFillingRecordList
.
add
(
cylinderFillingRecord
);
}
}
esCylinderFillingRecordRepository
.
saveAll
(
records
);
esCylinderFillingRecordRepository
.
saveAll
(
records
);
this
.
updateBatchById
(
cylinderFillingRecordList
);
cylinderFillingRecordMapper
.
updateCylinderFillingToEsStatus
(
ids
);
}
}
@Override
@Override
...
...
amos-boot-system-tzs/amos-boot-module-cylinder/amos-boot-module-cylinder-biz/src/main/java/com/yeejoin/amos/boot/module/cylinder/flc/biz/service/impl/CylinderInfoServiceImpl.java
View file @
2f4ed3f9
...
@@ -744,7 +744,7 @@ public class CylinderInfoServiceImpl extends BaseService<CylinderInfoDto, Cylind
...
@@ -744,7 +744,7 @@ public class CylinderInfoServiceImpl extends BaseService<CylinderInfoDto, Cylind
});
});
}
}
//
@Scheduled(cron = "${tzs.cylinder.info.cron}")
@Scheduled
(
cron
=
"${tzs.cylinder.info.cron}"
)
@SchedulerLock
(
name
=
"cylinderInfoToESTask"
,
lockAtMostFor
=
"PT6H"
)
@SchedulerLock
(
name
=
"cylinderInfoToESTask"
,
lockAtMostFor
=
"PT6H"
)
public
void
setTimeSaveCylinderInfoToES
()
{
public
void
setTimeSaveCylinderInfoToES
()
{
Page
<
CylinderInfoDto
>
cylinderInfoPage
=
new
Page
<>();
Page
<
CylinderInfoDto
>
cylinderInfoPage
=
new
Page
<>();
...
@@ -778,6 +778,11 @@ public class CylinderInfoServiceImpl extends BaseService<CylinderInfoDto, Cylind
...
@@ -778,6 +778,11 @@ public class CylinderInfoServiceImpl extends BaseService<CylinderInfoDto, Cylind
ESCylinderInfoDto
esCylinderInfo
=
new
ESCylinderInfoDto
();
ESCylinderInfoDto
esCylinderInfo
=
new
ESCylinderInfoDto
();
BeanUtils
.
copyProperties
(
record
,
esCylinderInfo
);
BeanUtils
.
copyProperties
(
record
,
esCylinderInfo
);
esCylinderInfoDto
.
add
(
esCylinderInfo
);
esCylinderInfoDto
.
add
(
esCylinderInfo
);
try
{
esCylinderInfo
.
setInspectionDateMs
(
ObjectUtils
.
isEmpty
(
esCylinderInfo
.
getInspectionDate
())
?
0L
:
DateUtils
.
dateParse
(
esCylinderInfo
.
getInspectionDate
(),
DateUtils
.
DATE_TIME_PATTERN
).
getTime
());
}
catch
(
ParseException
e
)
{
throw
new
RuntimeException
(
e
);
}
ids
.
add
(
String
.
valueOf
(
record
.
getSequenceNbr
()));
ids
.
add
(
String
.
valueOf
(
record
.
getSequenceNbr
()));
}
}
StopWatch
stopWatch
=
new
StopWatch
();
StopWatch
stopWatch
=
new
StopWatch
();
...
...
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