Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
聂康
ivccs
Commits
07602a7b
Commit
07602a7b
authored
Apr 18, 2023
by
kang.nie@inzymeits.com
Browse files
提交代码
parent
e0c7be76
Changes
479
Hide whitespace changes
Inline
Side-by-side
ivccs-vmm-backservice/src/main/java/com/ssi/service/VmsTerminalService.java
0 → 100644
View file @
07602a7b
package
com.ssi.service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.ssi.entity.VmsTerminal
;
import
com.ssi.response.SSIPage
;
import
com.ssi.response.SSIResponse
;
import
java.util.Map
;
/**
* 终端表
*
* @author zhang liyao
* @email
* @date 2020-07-16 09:32:59
*/
public
interface
VmsTerminalService
extends
IService
<
VmsTerminal
>
{
SSIPage
queryPage
(
Map
<
String
,
Object
>
params
);
SSIResponse
saveTerminal
(
VmsTerminal
vmsTerminal
);
SSIResponse
videoMonitor
(
String
vin
);
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/VmsTerminalVersionService.java
0 → 100644
View file @
07602a7b
package
com.ssi.service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.ssi.entity.VmsTerminalVersion
;
import
com.ssi.response.SSIPage
;
import
java.util.Map
;
/**
* 终端版本表
*
* @author zhang liyao
* @email
* @date 2020-07-16 13:36:49
*/
public
interface
VmsTerminalVersionService
extends
IService
<
VmsTerminalVersion
>
{
SSIPage
queryPage
(
Map
<
String
,
Object
>
params
);
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/VmsTosOrderDailyKpiService.java
0 → 100644
View file @
07602a7b
package
com.ssi.service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.ssi.entity.VmsTosOrderDailyKpi
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author dt
* @description:
* @create 2022-10-28 16:44
*/
public
interface
VmsTosOrderDailyKpiService
extends
IService
<
VmsTosOrderDailyKpi
>
{
/**
* 预处理任务
* @param vins
* @return
*/
Boolean
analysisTosOrderDailyKpi
(
String
vins
);
/**
* 查询
* @param day
* @param vehicleNum
* @return
*/
List
<
Map
<
String
,
String
>>
getOrderDailyKpi
(
String
day
,
String
vehicleNum
);
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/VmsTosOrdersAnalysisService.java
0 → 100644
View file @
07602a7b
package
com.ssi.service
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.ssi.entity.VmsTosOrdersAnalysis
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
/**
* 任务分析表
*
* @author hli
* @email
* @date 2021-01-11 14:00:36
*/
public
interface
VmsTosOrdersAnalysisService
extends
IService
<
VmsTosOrdersAnalysis
>
{
IPage
<
VmsTosOrdersAnalysis
>
queryPage
(
int
current
,
int
size
,
VmsTosOrdersAnalysis
vmsTosOrdersAnalysis
);
void
runTosAnalysisTask
(
LocalDateTime
startTime
,
LocalDateTime
endTime
);
void
reAnalysis
(
LocalDate
date
);
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/VmsTosOrdersOeeService.java
0 → 100644
View file @
07602a7b
package
com.ssi.service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.ssi.entity.VmsTosOrdersOee
;
import
com.ssi.entity.vo.VmsTosOrdersKPIVo
;
import
java.time.LocalDateTime
;
import
java.util.List
;
/**
*
* @author hli
* @email
* @date 2021-02-04 11:00:44
*/
public
interface
VmsTosOrdersOeeService
extends
IService
<
VmsTosOrdersOee
>
{
void
runTosOeeTask
(
LocalDateTime
startTime
,
LocalDateTime
endTime
);
List
taskOee
(
VmsTosOrdersKPIVo
vmsTosOrders
);
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/VmsTosOrdersService.java
0 → 100644
View file @
07602a7b
package
com.ssi.service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.ssi.entity.VmsTosOrders
;
import
com.ssi.entity.vo.TaskKPIVo
;
import
com.ssi.entity.vo.VmsTosOrdersKPIVo
;
import
com.ssi.entity.vo.VmsTosOrdersVo
;
import
com.ssi.response.SSIPage
;
import
com.ssi.response.SSIResponse
;
import
javax.servlet.http.HttpServletResponse
;
import
java.text.ParseException
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author zhang liyao
* @email
* @date 2020-07-11 13:12:01
*/
public
interface
VmsTosOrdersService
extends
IService
<
VmsTosOrders
>
{
Map
<
String
,
VmsTosOrders
>
getAllVehicleLatestWork
();
Map
<
String
,
Object
>
getOrdersByVin
(
String
vin
);
SSIResponse
getVehicleTrip
(
String
vin
,
Long
startTime
,
Long
endTime
,
String
troubleTypeId
);
SSIResponse
getMileTimeByTime
(
String
vin
,
Long
startTime
,
Long
stopTime
);
SSIPage
queryPage
(
VmsTosOrdersVo
vmsTosOrdersVo
);
SSIPage
queryPageByAllStatus
(
VmsTosOrdersVo
vmsTosOrdersVo
);
void
export
(
VmsTosOrdersVo
vmsTosOrdersVo
,
HttpServletResponse
response
);
SSIResponse
getTripByAlert
(
String
vin
,
String
alertId
);
SSIResponse
queryContainerNumOneDay
(
LocalDateTime
startTime
,
LocalDateTime
endTime
);
SSIResponse
queryContainerNum
();
SSIResponse
queryContainerNumByDay
(
LocalDateTime
startTime
,
LocalDateTime
endTime
)
throws
Exception
;
SSIResponse
queryContainerAvgTimeOneDay
(
LocalDateTime
startTime
,
LocalDateTime
endTime
);
SSIResponse
queryContainerAvgTime
();
SSIResponse
getNumByVin
(
String
vin
);
SSIResponse
getVehicleByPadMac
(
String
padMac
,
String
taskNo
);
SSIResponse
getTaskHistory
(
String
taskNo
);
SSIPage
listInProcess
(
VmsTosOrdersVo
vmsTosOrdersVo
);
SSIPage
realTimeTasks
(
VmsTosOrdersVo
vmsTosOrdersVo
);
List
getDailyKpi
(
LocalDateTime
startTime
,
LocalDateTime
endTime
,
String
vehicleNum
);
//任务KPI-效率OEE分析
List
taskKPI
(
VmsTosOrdersKPIVo
vmsTosOrders
)
throws
Exception
;
SSIResponse
forceCancel
(
String
taskNo
);
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/VmsTosOriginalOrdersService.java
0 → 100644
View file @
07602a7b
package
com.ssi.service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.ssi.entity.VmsTosOriginalOrders
;
import
com.ssi.entity.vo.VmsTosOrdersVo
;
import
com.ssi.response.SSIPage
;
/**
*
*/
public
interface
VmsTosOriginalOrdersService
extends
IService
<
VmsTosOriginalOrders
>
{
SSIPage
queryPageByCondition
(
VmsTosOrdersVo
vmsTosOrdersVo
);
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/VmsTrafficLightInfoService.java
0 → 100644
View file @
07602a7b
package
com.ssi.service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.google.gson.JsonObject
;
import
com.ssi.entity.VmsTrafficLightInfo
;
import
com.ssi.response.SSIPage
;
/**
*
*/
public
interface
VmsTrafficLightInfoService
extends
IService
<
VmsTrafficLightInfo
>
{
SSIPage
queryPage
(
VmsTrafficLightInfo
req
);
String
manual
(
VmsTrafficLightInfo
req
);
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/VmsVehicleAlertProcessService.java
0 → 100644
View file @
07602a7b
package
com.ssi.service
;
import
com.ssi.entity.VmsVehicleAlertProcess
;
import
com.baomidou.mybatisplus.extension.service.IService
;
/**
*
*/
public
interface
VmsVehicleAlertProcessService
extends
IService
<
VmsVehicleAlertProcess
>
{
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/VmsVehicleFreeTimeService.java
0 → 100644
View file @
07602a7b
package
com.ssi.service
;
import
com.ssi.entity.dto.VmsVehicleVinFreeTimeDto
;
/**
* @author dt
* @description: 车辆空闲时间 service
* @create 2022-11-09 18:28
*/
public
interface
VmsVehicleFreeTimeService
{
/**
* 查询车辆时间范围内的空闲时间
* @param vmsVehicleVinFreeTimeDto
* @return
*/
VmsVehicleVinFreeTimeDto
getVehicleFreeTime
(
VmsVehicleVinFreeTimeDto
vmsVehicleVinFreeTimeDto
);
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/VmsVehicleService.java
0 → 100644
View file @
07602a7b
package
com.ssi.service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.ssi.entity.VmsVehicle
;
import
com.ssi.entity.vo.VehicleControlStatusVo
;
import
com.ssi.entity.vo.VehicleStatusVo
;
import
com.ssi.response.SSIPage
;
import
com.ssi.response.SSIResponse
;
import
java.util.List
;
import
java.util.Map
;
/**
* 车辆表
*
* @author zhang liyao
* @email
* @date 2020-07-08 15:38:37
*/
public
interface
VmsVehicleService
extends
IService
<
VmsVehicle
>
{
SSIPage
queryPage
(
Map
<
String
,
Object
>
params
);
List
<
VmsVehicle
>
getNormalVehicle
();
List
<
VmsVehicle
>
getNormalVehicleByVehicleNum
(
String
vehicleNum
,
Integer
vehicleType
);
List
<
VmsVehicle
>
listAndCache
();
SSIResponse
listForMonitor
(
List
<
VmsVehicle
>
vehicleList
);
SSIResponse
vehicleStatusForMonitor
(
List
<
VmsVehicle
>
vehicleList
);
VehicleStatusVo
vehicleStatusDist
(
List
<
VmsVehicle
>
vehicleList
);
SSIResponse
saveVehicle
(
VmsVehicle
vehicle
);
SSIResponse
transportCapacity
();
List
<
VehicleControlStatusVo
>
getVehicleByLocation
(
String
location
,
Integer
distance
);
Map
getVmsCranePosMapInfo
(
String
name
);
List
<
Map
>
getVmsVehicle
();
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/WebSocketDataBackService.java
0 → 100644
View file @
07602a7b
package
com.ssi.service
;
import
java.util.Set
;
/**
* Description:
*
* @author LiXiaoCong
* @version 2019/9/20 11:45
*/
public
interface
WebSocketDataBackService
{
int
playBack
(
String
sessionId
,
String
backorId
,
String
scenesId
,
Set
<
String
>
vins
,
Long
startTime
,
Long
stopTime
);
void
close
(
String
sessionId
,
String
playBackId
);
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/impl/BigScreenServiceImpl.java
0 → 100644
View file @
07602a7b
package
com.ssi.service.impl
;
import
com.alibaba.fastjson.JSON
;
import
com.alicp.jetcache.anno.CacheRefresh
;
import
com.alicp.jetcache.anno.Cached
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
com.ssi.constant.enums.VehicleTaskLabelEnum
;
import
com.ssi.entity.VmsVehicle
;
import
com.ssi.entity.VmsVehicleOperateTask
;
import
com.ssi.entity.VmsChargingTotal
;
import
com.ssi.entity.VmsTosOrders
;
import
com.ssi.entity.vo.OperateDataVo
;
import
com.ssi.entity.vo.VehicleStatusVo
;
import
com.ssi.mapper.VmsCarryCapacityAnalysisMapper
;
import
com.ssi.mapper.VmsVehicleOperateTaskMapper
;
import
com.ssi.mapper.VmsChargingTotalMapper
;
import
com.ssi.model.RedisDataModel
;
import
com.ssi.response.SSIResponse
;
import
com.ssi.service.BigScreenService
;
import
com.ssi.service.VmsVehicleService
;
import
com.ssi.service.VmsTosOrdersService
;
import
com.ssi.task.TaskOperateExecutor
;
import
com.ssi.utils.ToolUtils
;
import
com.ssi.utils.VehicleUtil
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.util.*
;
import
java.util.concurrent.TimeUnit
;
import
java.util.stream.Collectors
;
/**
* 大屏接口服务层实现类
* @author ZhangLiYao
* @version 1.0
* @date 2020/8/10 9:51
*/
@Service
(
"screenService"
)
public
class
BigScreenServiceImpl
implements
BigScreenService
{
@Autowired
private
TaskOperateExecutor
taskOperateExecutor
;
@Autowired
private
VmsVehicleOperateTaskMapper
vmsVehicleOperateTaskMapper
;
@Autowired
private
VmsChargingTotalMapper
vmsChargingTotalMapper
;
@Autowired
private
VmsVehicleService
vmsVehicleService
;
@Autowired
private
VmsTosOrdersService
vmsTosOrdersService
;
@Autowired
private
RedisDataModel
redisDataModel
;
@Autowired
private
BigScreenService
bigScreenService
;
@Autowired
private
VmsCarryCapacityAnalysisMapper
vmsCarryCapacityAnalysisMapper
;
@Value
(
"${order.latestOrderKeyPrefix:harbor:command:status}"
)
private
String
latestOrderKeyPrefix
;
@Value
(
"${ivccs.vehicle.latestData.redis.prefix:ivccs:vms:vehicle:latest}"
)
private
String
latestRedisKeyPrefix
;
@Value
(
"${vehicle.latestData.redis.postfix:harbor_D00A}"
)
private
String
realPostfix
;
/**
* 大屏获取运营数据
*/
@Override
@Cached
(
name
=
"bigScreenServiceImpl:getOperateData"
,
expire
=
60
,
timeUnit
=
TimeUnit
.
SECONDS
)
@CacheRefresh
(
refresh
=
20
,
stopRefreshAfterLastAccess
=
1440
,
timeUnit
=
TimeUnit
.
SECONDS
)
public
SSIResponse
getOperateData
(
List
<
String
>
vins
,
Date
startDate
,
Date
endDate
)
{
/*OperateDataVo operateDataVo = new OperateDataVo(BigDecimal.valueOf(0), BigDecimal.valueOf(0));
List<VmsVehicleOperateTask> vmsVehicleOperateTasks = vmsVehicleOperateTaskMapper.selectList(new LambdaQueryWrapper<VmsVehicleOperateTask>()
.eq(StringUtils.isNotBlank(vin), VmsVehicleOperateTask::getVin, vin));
vmsVehicleOperateTasks.stream().forEach(vmsVehicleOperateTask -> {
operateDataVo.setTravelmile(operateDataVo.getTravelmile()
.add(vmsVehicleOperateTask.getOperateMile().divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP)));
operateDataVo.setTravelTime(operateDataVo.getTravelTime()
.add(vmsVehicleOperateTask.getOperateTime().divide(new BigDecimal(60 * 60 * 1000), 2, BigDecimal.ROUND_HALF_UP)));
});
long[] today = getToday();
List<String> vins = Lists.newArrayList();
if (StringUtils.isNotBlank(vin)) {
vins = Arrays.asList(vin.split(","));
} else {
vins = vmsVehicleService.list().stream().map(VmsVehicle::getVin).collect(Collectors.toList());
}
for (String curVin : vins) {
addData(operateDataVo, curVin, today[0], System.currentTimeMillis());
}*/
OperateDataVo
operateDataVo
=
vmsCarryCapacityAnalysisMapper
.
getOverallOperateData
(
vins
,
startDate
,
endDate
);
return
SSIResponse
.
ok
(
operateDataVo
);
}
/**
* 车辆状态分布
*/
@Override
public
SSIResponse
getVehicleStatusDist
()
{
List
<
VmsVehicle
>
vehicleList
=
vmsVehicleService
.
getNormalVehicle
();
VehicleStatusVo
vehicleStatusVo
=
vmsVehicleService
.
vehicleStatusDist
(
vehicleList
);
return
SSIResponse
.
ok
(
vehicleStatusVo
);
}
/**
* 大屏查询单车信息
*/
@Override
public
SSIResponse
getVehicleInfo
(
String
vin
)
{
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
//车辆信息添加
VmsVehicle
vehicle
=
vmsVehicleService
.
getOne
(
new
LambdaQueryWrapper
<
VmsVehicle
>().
eq
(
VmsVehicle:
:
getVin
,
vin
));
resultMap
.
put
(
"vehicleNum"
,
vehicle
.
getVehicleNum
());
resultMap
.
put
(
"vin"
,
vehicle
.
getVin
());
Map
<
String
,
Object
>
realMap
=
redisDataModel
.
getJson2Map
(
String
.
format
(
"%s:%s-%s"
,
latestRedisKeyPrefix
,
vehicle
.
getVin
(),
realPostfix
));
if
(
realMap
==
null
)
{
realMap
=
Maps
.
newHashMap
();
}
resultMap
.
put
(
"soc"
,
realMap
.
get
(
"soc"
));
//运营信息添加
SSIResponse
operateResponse
=
bigScreenService
.
getOperateData
(
Arrays
.
asList
(
vin
),
null
,
null
);
OperateDataVo
operateDataVo
=
(
OperateDataVo
)
operateResponse
.
getData
();
resultMap
.
put
(
"travelMile"
,
operateDataVo
.
getTravelmile
());
resultMap
.
put
(
"travelTime"
,
operateDataVo
.
getTravelTime
());
//任务箱数添加
SSIResponse
ordersNumResponse
=
vmsTosOrdersService
.
getNumByVin
(
vin
);
Map
<
String
,
Integer
>
ordersNum
=
(
Map
<
String
,
Integer
>)
ordersNumResponse
.
getData
();
resultMap
.
putAll
(
ordersNum
);
//任务状态添加
Map
<
String
,
Object
>
orderMap
=
redisDataModel
.
getJson2Map
(
String
.
format
(
"%s:%s"
,
latestOrderKeyPrefix
,
vehicle
.
getVin
()));
VmsTosOrders
vmsTosOrders
=
JSON
.
parseObject
(
JSON
.
toJSONString
(
orderMap
),
VmsTosOrders
.
class
);
if
(
vmsTosOrders
!=
null
&&
!
VehicleUtil
.
isTaskOver
(
vmsTosOrders
.
getStatus
()))
{
resultMap
.
put
(
"taskType"
,
vmsTosOrders
.
getVehicleTaskLabel
());
}
else
{
resultMap
.
put
(
"taskType"
,
VehicleTaskLabelEnum
.
PARK
.
getCode
());
}
Integer
chargeNum
=
vmsChargingTotalMapper
.
selectCount
(
new
LambdaQueryWrapper
<
VmsChargingTotal
>().
eq
(
VmsChargingTotal:
:
getVin
,
vin
));
resultMap
.
put
(
"chargeNum"
,
chargeNum
);
resultMap
.
put
(
"mileage"
,
realMap
.
get
(
"mileage"
));
return
SSIResponse
.
ok
(
resultMap
);
}
private
long
[]
getToday
()
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
calendar
.
get
(
Calendar
.
YEAR
),
calendar
.
get
(
Calendar
.
MONTH
),
calendar
.
get
(
Calendar
.
DAY_OF_MONTH
),
0
,
0
,
0
);
long
start
=
calendar
.
getTime
().
getTime
();
Calendar
calendar2
=
Calendar
.
getInstance
();
calendar2
.
set
(
calendar
.
get
(
Calendar
.
YEAR
),
calendar
.
get
(
Calendar
.
MONTH
),
calendar
.
get
(
Calendar
.
DAY_OF_MONTH
),
23
,
59
,
59
);
long
end
=
calendar2
.
getTime
().
getTime
();
long
[]
result
=
new
long
[]{
start
,
end
};
return
result
;
}
private
void
addData
(
OperateDataVo
operateDataVo
,
String
vin
,
long
start
,
long
end
)
{
VmsVehicleOperateTask
vehicleOpreateToday
=
taskOperateExecutor
.
getVehicleOpreateByTime
(
vin
,
start
,
end
);
if
(
vehicleOpreateToday
!=
null
)
{
operateDataVo
.
setTravelmile
(
operateDataVo
.
getTravelmile
().
add
(
vehicleOpreateToday
.
getOperateMile
()));
operateDataVo
.
setTravelTime
(
operateDataVo
.
getTravelTime
().
add
(
vehicleOpreateToday
.
getOperateTime
()));
}
}
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/impl/CargoShipConfigInfoServiceImpl.java
0 → 100644
View file @
07602a7b
package
com.ssi.service.impl
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.ssi.constant.URL
;
import
com.ssi.entity.CargoShipConfigInfo
;
import
com.ssi.entity.VmsAreaBusinessInfo
;
import
com.ssi.entity.VmsShipInfo
;
import
com.ssi.entity.map.MapDataDto
;
import
com.ssi.entity.vo.CargoShipConfigDto
;
import
com.ssi.entity.vo.LocationVo
;
import
com.ssi.response.SSIPage
;
import
com.ssi.service.CargoShipConfigInfoService
;
import
com.ssi.mapper.CargoShipConfigInfoMapper
;
import
com.ssi.service.VmsAreaBusinessInfoService
;
import
com.ssi.service.VmsCranePadBindService
;
import
com.ssi.service.VmsShipsDrawingService
;
import
com.ssi.utils.RestTemplateUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.elasticsearch.common.recycler.Recycler
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.mapping.PreferredConstructor
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.swing.tree.TreeNode
;
import
java.awt.geom.Path2D
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
*
*/
@Service
@DS
(
"mysql"
)
@Slf4j
public
class
CargoShipConfigInfoServiceImpl
extends
ServiceImpl
<
CargoShipConfigInfoMapper
,
CargoShipConfigInfo
>
implements
CargoShipConfigInfoService
{
@Value
(
"${map-edit-url}"
)
private
String
mapUrl
;
@Autowired
private
VmsCranePadBindService
vmsCranePadBindService
;
@Autowired
private
VmsAreaBusinessInfoService
vmsAreaBusinessInfoService
;
@Autowired
private
VmsShipsDrawingService
vmsShipsDrawingService
;
@Override
public
List
<
CargoShipConfigDto
>
queryOnWorkingList
()
{
List
<
CargoShipConfigDto
>
dtos
=
this
.
baseMapper
.
queryOnWorkingList
(
new
CargoShipConfigDto
());
dtos
.
parallelStream
().
forEach
(
cargoShipConfigDto
->
{
if
(
StringUtils
.
isNotBlank
(
cargoShipConfigDto
.
getPassArea
())){
cargoShipConfigDto
.
setPassAreaObj
(
JSONObject
.
parseObject
(
cargoShipConfigDto
.
getPassArea
()));
}
cargoShipConfigDto
.
setYardBayObj
(
JSONObject
.
parseObject
(
cargoShipConfigDto
.
getYardBay
()));
});
return
dtos
;
}
@Override
@Transactional
(
rollbackFor
=
Throwable
.
class
)
public
void
enableConfig
(
List
<
CargoShipConfigDto
>
cargoShipConfigDtos
)
{
clearShipInfo
(
cargoShipConfigDtos
);
for
(
CargoShipConfigDto
cargoShipConfigDto:
cargoShipConfigDtos
)
{
if
(
cargoShipConfigDto
.
getIsActive
().
compareTo
((
byte
)
1
)==
0
){
//激活或更新配置需先取消其它配置
// this.baseMapper.updateByIsActive();
//桥吊配置确认
if
(
checkBridgeStatus
(
cargoShipConfigDto
)){
continue
;
}
//调用路径规划端接口,设置桥吊缓冲区、桥吊扭锁站对应
if
(
StringUtils
.
isNotBlank
(
cargoShipConfigDto
.
getPassArea
())){
JSONObject
passAreaObj
=
JSONObject
.
parseObject
(
cargoShipConfigDto
.
getPassArea
());
String
upArea
=
passAreaObj
.
getString
(
"upArea"
);
String
downArea
=
passAreaObj
.
getString
(
"downArea"
);
String
upAreaId
=
passAreaObj
.
getString
(
"upAreaId"
);
String
downAreaId
=
passAreaObj
.
getString
(
"downAreaId"
);
//激活当前配置删除其它配置
vmsAreaBusinessInfoService
.
remove
(
new
QueryWrapper
<
VmsAreaBusinessInfo
>().
eq
(
"area_type"
,
5
));
updatePassArea
(
cargoShipConfigDto
.
getBridgeNo
(),
upArea
,
upAreaId
,
"1"
);
updatePassArea
(
cargoShipConfigDto
.
getBridgeNo
(),
downArea
,
downAreaId
,
"2"
);
}
if
(
StringUtils
.
isNotBlank
(
cargoShipConfigDto
.
getLockArea
())){
log
.
info
(
"激活扭锁信息"
);
String
[]
lockAreas
=
cargoShipConfigDto
.
getLockArea
().
split
(
","
);
Arrays
.
stream
(
lockAreas
).
forEach
(
lockArea
->{
vmsCranePadBindService
.
updateCraneBind
(
null
,
null
,
lockArea
,
cargoShipConfigDto
.
getBridgeNo
());
});
}
}
else
{
//配置移除
}
//保存当前配置
this
.
save
(
cargoShipConfigDto
);
}
}
@Override
public
JSONObject
listByCondition
(
CargoShipConfigDto
cargoShipConfigDto
)
{
JSONObject
result
=
new
JSONObject
();
List
<
CargoShipConfigDto
>
dtos
=
this
.
baseMapper
.
queryOnWorkingList
(
cargoShipConfigDto
);
List
<
String
>
workBridge
=
new
ArrayList
<>();
dtos
.
parallelStream
().
forEach
(
dto
->
{
if
(
StringUtils
.
isNotBlank
(
dto
.
getPassArea
())){
dto
.
setPassAreaObj
(
JSONObject
.
parseObject
(
dto
.
getPassArea
()));
}
dto
.
setYardBayObj
(
JSONObject
.
parseObject
(
dto
.
getYardBay
()));
workBridge
.
add
(
dto
.
getBridgeNo
());
});
result
.
put
(
"workBridge"
,
workBridge
);
result
.
put
(
"result"
,
dtos
);
return
result
;
}
private
void
clearShipInfo
(
List
<
CargoShipConfigDto
>
cargoShipConfigDtos
)
{
/* CargoShipConfigInfo delEntity = new CargoShipConfigInfo();
//delEntity.setCode(cargoShipConfigDtos.get(0).getCode());
delEntity.setName(cargoShipConfigDtos.get(0).getName());*/
this
.
baseMapper
.
delete
(
new
LambdaQueryWrapper
<
CargoShipConfigInfo
>().
eq
(
CargoShipConfigInfo:
:
getName
,
cargoShipConfigDtos
.
get
(
0
).
getName
()));
}
private
Boolean
checkBridgeStatus
(
CargoShipConfigDto
cargoShipConfigDto
)
{
assert
cargoShipConfigDto
.
getBridgeNo
()
!=
null
:
"bridgeNo不能为null"
;
// SSIPage ssiPage = vmsShipsDrawingService.queryPage(new HashMap<String, Object>() {{
// put("pageSize", 999);
// put("pageIndex", 1);
// }});
// List<VmsShipInfo> shipCodes = (List<VmsShipInfo>)ssiPage.getList();
// List<String> voyageNo = shipCodes.stream().map(VmsShipInfo::getVoyageNo).collect(Collectors.toList());
List
<
CargoShipConfigInfo
>
list
=
this
.
lambdaQuery
().
eq
(
CargoShipConfigInfo:
:
getBridgeNo
,
cargoShipConfigDto
.
getBridgeNo
())
.
ne
(
CargoShipConfigInfo:
:
getCode
,
cargoShipConfigDto
.
getCode
())
.
list
();
for
(
CargoShipConfigInfo
oldCargo:
list
)
{
// if(oldCargo.getIsActive().compareTo((byte)1) == 0&&voyageNo.contains(oldCargo.getCode())){
// return true;
// }
this
.
baseMapper
.
deleteById
(
oldCargo
.
getId
());
}
return
false
;
}
@Override
public
List
<
JSONObject
>
qryEnableCacheArea
(
String
beginLocation
,
String
endLocation
)
{
//计算坐标点
List
<
LocationVo
>
orderLocations
=
getOrderLocation
(
beginLocation
,
endLocation
);
//绘制区域
Path2D
.
Double
ruleArea
=
drawRuleArea
(
orderLocations
);
//获取所有缓冲区
List
<
JSONObject
>
bufferArray
=
qryCacheArea
();
Iterator
<
JSONObject
>
iterator
=
bufferArray
.
iterator
();
while
(
iterator
.
hasNext
()){
JSONObject
buffeArea
=
iterator
.
next
();
boolean
contains
=
ruleArea
.
contains
(
buffeArea
.
getDouble
(
"centerlng"
),
buffeArea
.
getDouble
(
"centerlat"
));
if
(
contains
){
iterator
.
remove
();
continue
;
}
boolean
locateCheck1
=
ruleArea
.
contains
(
buffeArea
.
getDouble
(
"lng1"
),
buffeArea
.
getDouble
(
"lat1"
));
boolean
locateCheck2
=
ruleArea
.
contains
(
buffeArea
.
getDouble
(
"lng2"
),
buffeArea
.
getDouble
(
"lat2"
));
boolean
locateCheck3
=
ruleArea
.
contains
(
buffeArea
.
getDouble
(
"lng3"
),
buffeArea
.
getDouble
(
"lat3"
));
boolean
locateCheck4
=
ruleArea
.
contains
(
buffeArea
.
getDouble
(
"lng4"
),
buffeArea
.
getDouble
(
"lat4"
));
if
(
locateCheck1
||
locateCheck2
||
locateCheck3
||
locateCheck4
){
iterator
.
remove
();
}
}
return
bufferArray
;
}
private
List
<
JSONObject
>
qryCacheArea
(){
JSONObject
param
=
new
JSONObject
();
param
.
put
(
"state"
,
"0"
);
// 可正常使用
log
.
debug
(
String
.
format
(
"绘制地图区域请求发送:----%s"
,
param
.
toJSONString
()));
String
result
=
RestTemplateUtil
.
post
(
String
.
format
(
"%s%s"
,
mapUrl
,
URL
.
MAP_QUERY_URL
),
param
.
toJSONString
(),
null
);
log
.
debug
(
String
.
format
(
"绘制地图区域请求返回结果:----%s"
,
result
));
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
result
);
if
(
Objects
.
nonNull
(
jsonObject
)&&
jsonObject
.
getInteger
(
"code"
)==
1
){
JSONArray
data
=
jsonObject
.
getJSONArray
(
"data"
);
List
<
JSONObject
>
results
=
data
.
toJavaList
(
JSONObject
.
class
).
stream
().
filter
((
obj
)
->
{
if
(!
"1,5"
.
contains
(
obj
.
getString
(
"type"
)))
{
return
false
;
}
return
true
;
}).
sorted
((
a
,
b
)
->
{
String
oa
=
a
.
getString
(
"name"
).
replaceAll
(
"^\\w"
,
""
);
String
ob
=
b
.
getString
(
"name"
).
replaceAll
(
"^\\w"
,
""
);
return
Integer
.
valueOf
(
oa
).
compareTo
(
Integer
.
valueOf
(
ob
));
}).
collect
(
Collectors
.
toList
());
return
results
;
}
return
Collections
.
emptyList
();
}
public
Path2D
.
Double
drawRuleArea
(
List
<
LocationVo
>
orderLocations
)
{
Path2D
.
Double
generalPath
=
new
Path2D
.
Double
();
Double
startLng
=
null
;
Double
startLat
=
null
;
for
(
LocationVo
entity:
orderLocations
){
if
(
startLng
==
null
||
startLat
==
null
){
startLng
=
entity
.
getLon
();
startLat
=
entity
.
getLat
();
generalPath
.
moveTo
(
startLng
,
startLat
);
}
else
{
generalPath
.
lineTo
(
entity
.
getLon
(),
entity
.
getLat
());
}
}
generalPath
.
lineTo
(
startLng
,
startLat
);
generalPath
.
closePath
();
return
generalPath
;
}
private
List
<
LocationVo
>
getOrderLocation
(
String
beginLocation
,
String
endLocation
)
{
String
[]
startLocation
=
beginLocation
.
replaceAll
(
";"
,
""
).
split
(
","
);
String
[]
lastLocation
=
endLocation
.
replaceAll
(
";"
,
""
).
split
(
","
);
if
(
startLocation
.
length
!=
2
||
lastLocation
.
length
!=
2
){
return
null
;
}
List
<
LocationVo
>
locationVos
=
new
ArrayList
<>();
Double
startLongitude
=
Double
.
valueOf
(
startLocation
[
0
]);
Double
startLatitude
=
Double
.
valueOf
(
startLocation
[
1
]);
Double
lastLongitude
=
Double
.
valueOf
(
lastLocation
[
0
]);
Double
lastLatitude
=
Double
.
valueOf
(
lastLocation
[
1
]);
if
(
startLongitude
>
lastLongitude
){
startLongitude
=
startLongitude
-
0.000175
;
lastLongitude
=
lastLongitude
+
0.000175
;
}
else
{
startLongitude
=
startLongitude
+
0.000175
;
lastLongitude
=
lastLongitude
-
0.000175
;
}
locationVos
.
add
(
new
LocationVo
(
startLongitude
,
startLatitude
,
null
));
locationVos
.
add
(
new
LocationVo
(
startLongitude
+
0.000189
,
startLatitude
+
0.000720
,
null
));
locationVos
.
add
(
new
LocationVo
(
lastLongitude
+
0.000189
,
lastLatitude
+
0.000720
,
null
));
locationVos
.
add
(
new
LocationVo
(
lastLongitude
,
lastLatitude
,
null
));
return
locationVos
;
}
private
String
updatePassArea
(
String
bridgeNos
,
String
passArea
,
String
passAreaId
,
String
placeType
){
if
(
StringUtils
.
isBlank
(
passArea
)){
return
null
;
}
MapDataDto
mapdata
=
new
MapDataDto
();
mapdata
.
setId
(
passAreaId
);
mapdata
.
setNumber
(
passArea
);
mapdata
.
setTaskType
(
Integer
.
valueOf
(
placeType
));
mapdata
.
setBridge
(
bridgeNos
);
mapdata
.
setBridgeNo
(
bridgeNos
);
mapdata
.
setPlacetype
(
placeType
);
mapdata
.
setType
(
"5"
);
mapdata
.
setState
(
"0"
);
mapdata
.
setField
(
"F"
);
mapdata
.
setName
(
passArea
);
String
paramData
=
JSONObject
.
toJSONString
(
mapdata
);
log
.
info
(
String
.
format
(
"绘制地图区域update请求发送:----%s"
,
paramData
));
String
result
=
RestTemplateUtil
.
post
(
String
.
format
(
"%s%s"
,
mapUrl
,
URL
.
MAP_EDIT_URL
),
paramData
,
null
);
log
.
info
(
String
.
format
(
"绘制地图区域update返回结果:----%s"
,
result
));
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
result
);
if
(
Objects
.
nonNull
(
jsonObject
)&&
jsonObject
.
getInteger
(
"code"
)==
1
){
//成功则更新
vmsAreaBusinessInfoService
.
updatePassArea
(
mapdata
);
}
return
result
;
}
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/impl/CraneInfoServiceImpl.java
0 → 100644
View file @
07602a7b
package
com.ssi.service.impl
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.ssi.constant.RedisKey
;
import
com.ssi.entity.CraneInfo
;
import
com.ssi.entity.VmsIndividuationConfig
;
import
com.ssi.model.CraneInfoRedis
;
import
com.ssi.model.RedisDataModel
;
import
com.ssi.response.SSIResponse
;
import
com.ssi.service.CraneInfoService
;
import
java.util.HashMap
;
import
com.ssi.service.VmsAreaBusinessInfoService
;
import
com.ssi.service.VmsCranePadBindService
;
import
com.ssi.service.VmsIndividuationConfigService
;
import
lombok.val
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
/**
* 吊具信息服务层实现类
*/
@Service
public
class
CraneInfoServiceImpl
implements
CraneInfoService
{
@Autowired
private
RedisDataModel
redisDataModel
;
@Autowired
private
VmsIndividuationConfigService
individuationConfigService
;
@Value
(
"${harbor.crane.realTimeInfoKeyPrefix}"
)
private
String
craneRealTimeInfoKeyPrefix
;
@Value
(
"${harbor.crane.confirm}"
)
private
String
craneConfirmKeyPrefix
;
@Autowired
private
VmsAreaBusinessInfoService
vmsAreaBusinessInfoService
;
/**
* 获取桥吊、场吊信息列表
*/
@Override
public
SSIResponse
queryCraneList
(
CraneInfo
craneInfo
)
{
List
<
Object
>
resList
=
queryCraneListFromRedis
(
craneInfo
);
if
(
resList
!=
null
)
{
for
(
Object
object:
resList
){
JSONObject
object1
=
(
JSONObject
)
object
;
int
portType
=
object1
.
getIntValue
(
"portType"
);
if
(
1
==
portType
){
List
<
String
>
portCode
=
vmsAreaBusinessInfoService
.
getByCrane
(
object1
.
getString
(
"portCode"
),
craneInfo
.
getTaskType
(),
craneInfo
.
getTaskTypes
());
object1
.
put
(
"passArea"
,
portCode
);
object1
.
put
(
"taskType"
,
craneInfo
.
getTaskType
());
}
}
return
SSIResponse
.
ok
(
resList
);
}
return
SSIResponse
.
no
(
"未查询到数据"
);
}
@Override
public
Map
<
String
,
CraneInfoRedis
>
queryCraneListFromRedis
()
{
if
(
redisDataModel
.
keys
(
RedisKey
.
CRANE_INFO
.
getKeyPrefix
()
+
"*"
).
size
()
==
0
){
return
null
;
}
val
d
=
redisDataModel
.
mgetForMap
(
redisDataModel
.
keys
(
RedisKey
.
CRANE_INFO
.
getKeyPrefix
()
+
"*"
));
Map
<
String
,
CraneInfoRedis
>
map
=
new
HashMap
<>();
d
.
forEach
((
key
,
value
)
->
{
if
(
value
!=
null
)
{
map
.
put
(
StringUtils
.
removeStart
(
key
,
RedisKey
.
CRANE_INFO
.
getKeyPrefix
()),
JSON
.
parseObject
((
String
)
value
,
CraneInfoRedis
.
class
));
}
});
return
map
;
}
@Override
public
List
<
Object
>
queryCraneListFromRedis
(
CraneInfo
craneInfo
)
{
Set
<
String
>
keys
=
redisDataModel
.
keys
(
craneRealTimeInfoKeyPrefix
+
"*"
);
if
(
CollectionUtils
.
isNotEmpty
(
keys
))
{
List
<
String
>
list
=
redisDataModel
.
mget
(
keys
.
toArray
(
new
String
[
keys
.
size
()]));
Integer
craneType
=
craneInfo
!=
null
?
craneInfo
.
getCraneType
()
:
null
;
String
craneNo
=
craneInfo
!=
null
?
craneInfo
.
getCraneNo
()
:
null
;
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
List
<
Object
>
res
=
list
.
stream
().
map
(
s
->
JSON
.
parseObject
(
s
)).
filter
(
obj
->
{
if
(
craneType
!=
null
)
{
Integer
type
=
(
Integer
)
obj
.
get
(
"portType"
);
if
(!
craneType
.
equals
(
type
))
{
return
false
;
}
}
if
(
craneNo
!=
null
)
{
String
code
=
String
.
valueOf
(
obj
.
get
(
"portCode"
));
if
(!
code
.
startsWith
(
craneNo
))
{
return
false
;
}
}
return
true
;
}).
collect
(
Collectors
.
toList
());
return
res
;
}
}
return
null
;
}
/**
* 获取桥吊、场吊、龙锁装卸区信息列表
*/
@Override
public
SSIResponse
queryCraneLockAreaList
(
CraneInfo
craneInfo
)
{
List
<
Object
>
resList
=
queryCraneListFromRedis
(
craneInfo
);
//暂时不用先注释掉
/*String craneNo = craneInfo != null ? craneInfo.getCraneNo() : null;
if(craneNo == null || "扭锁装卸区".startsWith(craneNo)){
JSONObject object = new JSONObject();
object.put("portCode", "扭锁装卸区");
object.put("portType",3);
resList.add(object);
}*/
if
(
resList
!=
null
)
{
return
SSIResponse
.
ok
(
resList
);
}
return
SSIResponse
.
no
(
"未查询到数据"
);
}
@Override
public
Map
queryCraneConfirmInfo
(
String
craneNo
)
{
return
redisDataModel
.
getJson2Map
(
craneConfirmKeyPrefix
+
":"
+
craneNo
);
}
@Override
public
SSIResponse
queryCraneColor
(
String
craneNo
)
{
VmsIndividuationConfig
vmsIndividuationConfig
=
individuationConfigService
.
lambdaQuery
().
eq
(
VmsIndividuationConfig:
:
getConfigKey
,
"crane_color_config"
).
one
();
String
configValue
=
vmsIndividuationConfig
.
getConfigValue
();
JSONObject
jsonObject
=
JSON
.
parseObject
(
configValue
);
if
(
jsonObject
!=
null
)
{
return
SSIResponse
.
ok
(
StringUtils
.
isNotBlank
(
craneNo
)?
jsonObject
.
getString
(
craneNo
):
jsonObject
);
}
return
SSIResponse
.
no
(
"未查询到数据"
);
}
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/impl/OperationAnalysisServiceImpl.java
0 → 100644
View file @
07602a7b
package
com.ssi.service.impl
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.ssi.controller.OperationAnalysisController
;
import
com.ssi.entity.VmsChargingTotal
;
import
com.ssi.entity.VmsKpiAnalysis
;
import
com.ssi.entity.VmsVehicle
;
import
com.ssi.entity.dto.AnalyseTaskOrderResp
;
import
com.ssi.entity.dto.VehicleTaskOrderReq
;
import
com.ssi.entity.vo.*
;
import
com.ssi.mapper.VmsCarryCapacityAnalysisMapper
;
import
com.ssi.mapper.VmsChargingTotalMapper
;
import
com.ssi.mapper.VmsTosOrdersAnalysisMapper
;
import
com.ssi.mapper.VmsTosOrdersMapper
;
import
com.ssi.response.SSIResponse
;
import
com.ssi.service.*
;
import
com.ssi.utils.ChargeDailyTimeUtil
;
import
com.ssi.utils.DateUtils
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.time.LocalTime
;
import
java.time.ZoneId
;
import
java.time.ZoneOffset
;
import
java.time.temporal.ChronoUnit
;
import
java.util.*
;
/**
* 运营分析服务实现类
*/
@Service
public
class
OperationAnalysisServiceImpl
implements
OperationAnalysisService
{
@Autowired
private
VmsVehicleService
vmsVehicleService
;
@Autowired
private
VmsChargingPileService
vmsChargingPileService
;
@Autowired
private
VmsTosOrdersMapper
vmsTosOrdersMapper
;
@Autowired
private
BigScreenService
bigScreenService
;
@Autowired
private
VmsCarryCapacityAnalysisMapper
vmsCarryCapacityAnalysisMapper
;
@Autowired
private
VmsChargingTotalMapper
vmsChargingTotalMapper
;
@Autowired
private
VmsTosOrdersAnalysisMapper
vmsTosOrdersAnalysisMapper
;
@Autowired
private
VmsKpiAnalysisService
vmsKpiAnalysisService
;
/**
* 各项总体数据
* @param vins
* @param interval
*/
@Override
public
SSIResponse
overallData
(
List
<
String
>
vins
,
List
<
Date
>
interval
)
{
Map
<
String
,
Object
>
res
=
new
HashMap
();
//车辆总数
//int totalVehicle = vmsVehicleService.lambdaQuery().eq(VmsVehicle::getStatus, 0).count();
int
totalVehicle
=
vmsVehicleService
.
lambdaQuery
().
eq
(
VmsVehicle:
:
getStatus
,
0
)
.
in
(
VmsVehicle:
:
getVehicleType
,
2
).
count
();
res
.
put
(
"totalVehicle"
,
totalVehicle
);
Date
startDate
=
new
Date
();
Date
endDate
=
new
Date
();
if
(
CollectionUtils
.
isNotEmpty
(
interval
)){
startDate
=
interval
.
get
(
0
);
startDate
.
setHours
(
0
);
endDate
=
org
.
apache
.
commons
.
lang3
.
time
.
DateUtils
.
addDays
(
interval
.
get
(
1
),
1
);
endDate
.
setHours
(
0
);
}
else
{
startDate
=
org
.
apache
.
commons
.
lang3
.
time
.
DateUtils
.
addDays
(
startDate
,
-
1
);
startDate
.
setHours
(
0
);
endDate
.
setHours
(
0
);
}
//车辆有效使用率
double
vehicleEffectiveUseRate
=
vmsCarryCapacityAnalysisMapper
.
getVehicleEffectiveUseRate
(
vins
,
startDate
,
endDate
);
res
.
put
(
"vehicleEffectiveUseRate"
,
vehicleEffectiveUseRate
);
//充电桩总数
int
totalChargingPile
=
vmsChargingPileService
.
count
();
res
.
put
(
"totalChargingPile"
,
totalChargingPile
);
//充电桩利用率
double
chargingPileUseRate
=
vmsChargingTotalMapper
.
getChargingPileUseRate
(
vins
,
startDate
,
endDate
);
res
.
put
(
"chargingPileUseRate"
,
chargingPileUseRate
);
//充电次数
res
.
put
(
"chargingNum"
,
vmsChargingTotalMapper
.
queryChargingTimes
(
vins
,
startDate
,
endDate
));
/* //行驶时长(小时)
SSIResponse operateData = bigScreenService.getOperateData(vins,startDate,endDate);
OperateDataVo operateDataVo = (OperateDataVo) operateData.getData();
BigDecimal travelTime = operateDataVo.getTravelTime();
res.put("travelTime", travelTime);
//行驶里程(公里)
BigDecimal travelMile = operateDataVo.getTravelmile();
res.put("travelMile", travelMile);
//装船箱数
TaskAnalysisVo numVo = vmsTosOrdersMapper.queryContainerNum(vins,startDate,endDate);
res.put("loadContainerNum", numVo.getLoadContainerNum());
//卸船箱数
res.put("unloadContainerNum", numVo.getUnloadContainerNum());
//理货箱数
res.put("handleContainerNum", numVo.getHandleContainerNum());
//平均每箱装船时间
TaskAnalysisVo timeVo = vmsTosOrdersMapper.queryContainerAvgTime(vins,startDate,endDate);
res.put("loadContainerAvgTime", timeVo.getLoadContainerAvgTime());
//平均每箱卸船时间
res.put("unloadContainerAvgTime", timeVo.getUnloadContainerAvgTime());
//平均每箱理货时间
res.put("handleContainerAvgTime", timeVo.getHandleContainerAvgTime());
TaskAnalysisVo orderNum = vmsTosOrdersMapper.queryOrderNum(vins,startDate,endDate);
//装船任务数
res.put("loadOrderNum", orderNum.getLoadContainerNum());
//卸船任务数
res.put("unloadOrderNum", orderNum.getUnloadContainerNum());
//理货任务数
res.put("handleOrderNum", orderNum.getHandleContainerNum());
//总任务数
res.put("totalOrderNum", orderNum.getHandleContainerNum()+ orderNum.getUnloadContainerNum()+orderNum.getLoadContainerNum());
*/
KpiCostTimeVo
qryKpi
=
new
KpiCostTimeVo
();
qryKpi
.
setStartTime
(
startDate
);
qryKpi
.
setEndTime
(
endDate
);
qryKpi
.
setVins
(
vins
);
VmsKpiAnalysis
vmsKpiAnalysis
=
vmsKpiAnalysisService
.
staticsSpeciParam
(
qryKpi
);
//总耗电量
res
.
put
(
"consume_total"
,
Objects
.
nonNull
(
vmsKpiAnalysis
)?
vmsKpiAnalysis
.
getEnergyConsumption
():
0
);
//行驶时长(小时)
res
.
put
(
"travelTime"
,
Objects
.
nonNull
(
vmsKpiAnalysis
)?
vmsKpiAnalysis
.
getWorkTime
():
0
);
//行驶里程(公里)
res
.
put
(
"travelMile"
,
Objects
.
nonNull
(
vmsKpiAnalysis
)?
vmsKpiAnalysis
.
getMileage
():
0
);
JSONObject
jsonObject
=
vmsKpiAnalysisService
.
taskIndexAnalysis
(
qryKpi
);
//总任务数
//装船任务数
//装船箱数(标准)
//装船箱数(自然)
//平均装箱时间
//卸箱任务数
//卸箱箱数(标准)
//卸箱箱数(自然)
//平均卸船时间
//理货任务数
//理货箱数(标准)
//理货箱数(自然)
//平均理货时间
res
.
putAll
(
jsonObject
);
return
SSIResponse
.
ok
(
res
);
}
/**
* 运输效率趋势图
*/
@Override
public
SSIResponse
getTaskTrend
(
Integer
timeType
)
throws
Exception
{
switch
(
timeType
)
{
//日
case
1
:
LocalDateTime
startTime
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
minus
(
1
,
ChronoUnit
.
DAYS
).
toLocalDate
(),
LocalTime
.
MIN
);
LocalDateTime
endTime
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
minus
(
1
,
ChronoUnit
.
DAYS
).
toLocalDate
(),
LocalTime
.
MAX
);
Long
startTimeStamp
=
startTime
.
toInstant
(
ZoneOffset
.
of
(
"+8"
)).
toEpochMilli
();
List
<
TaskAnalysisVo
>
taskTrendByHour
=
vmsTosOrdersMapper
.
getTaskTrendByHour
(
startTime
,
endTime
,
startTimeStamp
);
return
SSIResponse
.
ok
(
TaskAnalysisVo
.
fillBlankHour
(
taskTrendByHour
,
TaskAnalysisVo
.
class
));
//周
case
2
:
startTime
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
minus
(
7
,
ChronoUnit
.
DAYS
).
toLocalDate
(),
LocalTime
.
MIN
);
endTime
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
minus
(
1
,
ChronoUnit
.
DAYS
).
toLocalDate
(),
LocalTime
.
MAX
);
List
<
TaskAnalysisVo
>
taskTrendByDay
=
vmsTosOrdersAnalysisMapper
.
getTaskTrendByDay
(
startTime
,
endTime
);
return
SSIResponse
.
ok
(
TaskAnalysisVo
.
fillBlankDay
(
taskTrendByDay
,
TaskAnalysisVo
.
class
,
startTime
,
endTime
));
//月
case
3
:
startTime
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
minus
(
30
,
ChronoUnit
.
DAYS
).
toLocalDate
(),
LocalTime
.
MIN
);
endTime
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
minus
(
1
,
ChronoUnit
.
DAYS
).
toLocalDate
(),
LocalTime
.
MAX
);
taskTrendByDay
=
vmsTosOrdersAnalysisMapper
.
getTaskTrendByDay
(
startTime
,
endTime
);
return
SSIResponse
.
ok
(
TaskAnalysisVo
.
fillBlankDay
(
taskTrendByDay
,
TaskAnalysisVo
.
class
,
startTime
,
endTime
));
}
return
null
;
}
/**
* 停车等待时长分析
*/
@Override
public
SSIResponse
getStopWaitTimeRate
(
Long
startTime
)
{
Map
stopWaitTimeRate
=
vmsCarryCapacityAnalysisMapper
.
getStopWaitTimeRate
(
startTime
);
return
SSIResponse
.
ok
(
stopWaitTimeRate
);
}
/**
* 运载力趋势图(空载里程、满载里程)
*/
@Override
public
SSIResponse
getTaskMileTrend
(
Integer
timeType
)
throws
Exception
{
LocalDateTime
startTime
=
null
;
LocalDateTime
endTime
=
null
;
switch
(
timeType
)
{
case
2
:
startTime
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
minus
(
7
,
ChronoUnit
.
DAYS
).
toLocalDate
(),
LocalTime
.
MIN
);
endTime
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
minus
(
1
,
ChronoUnit
.
DAYS
).
toLocalDate
(),
LocalTime
.
MAX
);
break
;
case
3
:
startTime
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
minus
(
30
,
ChronoUnit
.
DAYS
).
toLocalDate
(),
LocalTime
.
MIN
);
endTime
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
minus
(
1
,
ChronoUnit
.
DAYS
).
toLocalDate
(),
LocalTime
.
MAX
);
break
;
}
List
<
TaskMileTrendByDayVo
>
taskMileTrendByDay
=
vmsCarryCapacityAnalysisMapper
.
getTaskMileTrendByDay
(
startTime
,
endTime
);
return
SSIResponse
.
ok
(
TaskMileTrendByDayVo
.
fillBlankDay
(
taskMileTrendByDay
,
TaskMileTrendByDayVo
.
class
,
startTime
,
endTime
));
}
/**
* 充电桩利用率、充电时长趋势图
*/
@Override
public
SSIResponse
getChargingPileUseTrend
(
Integer
timeType
)
throws
Exception
{
switch
(
timeType
)
{
case
1
:
LocalDateTime
startTime
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
minus
(
1
,
ChronoUnit
.
DAYS
).
toLocalDate
(),
LocalTime
.
MIN
);
LocalDateTime
endTime
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
minus
(
1
,
ChronoUnit
.
DAYS
).
toLocalDate
(),
LocalTime
.
MAX
);
List
<
VmsChargingTotal
>
startList
=
vmsChargingTotalMapper
.
selectList
(
new
LambdaQueryWrapper
<
VmsChargingTotal
>()
.
or
(
vmsChargingTotalLambdaQueryWrapper
->
{
vmsChargingTotalLambdaQueryWrapper
.
gt
(
VmsChargingTotal:
:
getStartTime
,
startTime
.
atZone
(
ZoneId
.
systemDefault
()).
toInstant
().
toEpochMilli
())
.
lt
(
VmsChargingTotal:
:
getStartTime
,
endTime
.
atZone
(
ZoneId
.
systemDefault
()).
toInstant
().
toEpochMilli
());
})
.
or
(
vmsChargingTotalLambdaQueryWrapper
->
{
vmsChargingTotalLambdaQueryWrapper
.
gt
(
VmsChargingTotal:
:
getEndTime
,
startTime
.
atZone
(
ZoneId
.
systemDefault
()).
toInstant
().
toEpochMilli
())
.
lt
(
VmsChargingTotal:
:
getEndTime
,
endTime
.
atZone
(
ZoneId
.
systemDefault
()).
toInstant
().
toEpochMilli
());
})
);
ChargeDailyTimeUtil
chargeDailyTimeUtil
=
new
ChargeDailyTimeUtil
(
Date
.
from
(
startTime
.
atZone
(
ZoneId
.
systemDefault
()).
toInstant
()));
startList
.
stream
().
forEach
(
vmsChargingTotal
->
{
Long
startTime1
=
vmsChargingTotal
.
getStartTime
();
Long
endTime1
=
vmsChargingTotal
.
getEndTime
();
chargeDailyTimeUtil
.
add
(
startTime1
,
endTime1
,
vmsChargingTotal
.
getChargingEnergy
().
doubleValue
());
});
chargeDailyTimeUtil
.
finish
(
2
);
return
SSIResponse
.
ok
(
chargeDailyTimeUtil
.
getDailyTimeBeanList
());
case
2
:
startTime
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
minus
(
7
,
ChronoUnit
.
DAYS
).
toLocalDate
(),
LocalTime
.
MIN
);
endTime
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
minus
(
1
,
ChronoUnit
.
DAYS
).
toLocalDate
(),
LocalTime
.
MAX
);
List
<
ChargingPileUseRateTrendByDayVo
>
chargingPileUseRateTrendByDay
=
vmsChargingTotalMapper
.
getChargingPileUseRateTrendByDay
(
startTime
,
endTime
);
return
SSIResponse
.
ok
(
ChargingPileUseRateTrendByDayVo
.
fillBlankDay
(
chargingPileUseRateTrendByDay
,
ChargingPileUseRateTrendByDayVo
.
class
,
startTime
,
endTime
));
case
3
:
startTime
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
minus
(
30
,
ChronoUnit
.
DAYS
).
toLocalDate
(),
LocalTime
.
MIN
);
endTime
=
LocalDateTime
.
of
(
LocalDateTime
.
now
().
minus
(
1
,
ChronoUnit
.
DAYS
).
toLocalDate
(),
LocalTime
.
MAX
);
chargingPileUseRateTrendByDay
=
vmsChargingTotalMapper
.
getChargingPileUseRateTrendByDay
(
startTime
,
endTime
);
return
SSIResponse
.
ok
(
ChargingPileUseRateTrendByDayVo
.
fillBlankDay
(
chargingPileUseRateTrendByDay
,
ChargingPileUseRateTrendByDayVo
.
class
,
startTime
,
endTime
));
}
return
SSIResponse
.
ok
();
}
/**
* 平均一周充电频次分析
*/
@Override
public
SSIResponse
getChargingFrequencyByVehicle
()
{
List
<
Map
>
chargingFrequencyByVehicle
=
vmsChargingTotalMapper
.
getChargingFrequencyByVehicle
();
return
SSIResponse
.
ok
(
chargingFrequencyByVehicle
);
}
/**
* 平均一周充电频次平均值
*/
@Override
public
SSIResponse
getOverallChargingFrequency
()
{
double
overallChargingFrequency
=
vmsChargingTotalMapper
.
getOverallChargingFrequency
();
return
SSIResponse
.
ok
(
overallChargingFrequency
);
}
/**
* 车辆使用率/里程/时长/能耗分析
*/
@Override
public
SSIResponse
getUseInfoByVehicle
()
{
List
<
UseInfoByVehicleVo
>
useInfoByVehicle
=
vmsCarryCapacityAnalysisMapper
.
getUseInfoByVehicle
();
double
useRateTotal
=
0
;
for
(
UseInfoByVehicleVo
vehicleVo
:
useInfoByVehicle
)
{
useRateTotal
+=
vehicleVo
.
getUseRate
();
}
double
useRateLeft
=
0
;
for
(
UseInfoByVehicleVo
vehicleVo
:
useInfoByVehicle
)
{
vehicleVo
.
setUseRate
(
new
BigDecimal
(
vehicleVo
.
getUseRate
()
/
useRateTotal
)
.
setScale
(
4
,
BigDecimal
.
ROUND_HALF_UP
).
doubleValue
());
useRateLeft
+=
vehicleVo
.
getUseRate
();
}
if
(
useInfoByVehicle
.
size
()>
0
){
//判断对象不为空
useInfoByVehicle
.
get
(
0
).
setUseRate
(
useInfoByVehicle
.
get
(
0
).
getUseRate
()
-
(
useRateLeft
-
1
));
}
return
SSIResponse
.
ok
(
useInfoByVehicle
);
}
@Override
public
SSIResponse
getVehicleTaskOrder
(
VehicleTaskOrderReq
req
)
{
Date
startDate
;
Date
endDate
;
if
(
Objects
.
nonNull
(
req
.
getStartDate
())&&
Objects
.
nonNull
(
req
.
getEndDate
())){
startDate
=
req
.
getStartDate
();
endDate
=
req
.
getEndDate
();
if
(
startDate
.
compareTo
(
endDate
)==
0
){
startDate
.
setHours
(
0
);
endDate
.
setHours
(
23
);
}
}
else
{
startDate
=
new
Date
();
startDate
.
setHours
(
1
);
endDate
=
new
Date
();
}
Date
indexDate
=
startDate
;
List
<
AnalyseTaskOrderResp
>
result
=
new
ArrayList
<>();
do
{
AnalyseTaskOrderResp
analyseTaskOrderResp
=
new
AnalyseTaskOrderResp
();
String
dateStr
=
""
;
Integer
flag
=
0
;
if
(
startDate
.
getDay
()!=
endDate
.
getDay
()){
dateStr
=
DateUtils
.
format
(
indexDate
,
DateUtils
.
DATE_PATTERN
);
analyseTaskOrderResp
.
setDate
(
DateUtils
.
format
(
indexDate
,
"MM.dd"
));
}
else
{
flag
=
1
;
dateStr
=
DateUtils
.
format
(
indexDate
,
"yyyyMMddHH"
);
analyseTaskOrderResp
.
setHour
(
indexDate
.
getHours
());
}
analyseTaskOrderResp
.
setDateStr
(
dateStr
);
result
.
add
(
analyseTaskOrderResp
);
//获取任务总数
analyseTaskOrderResp
.
setTotalTask
(
calculateTotalList
(
req
.
getTotalType
(),
dateStr
,
req
.
getVins
(),
flag
));
//装船任务数据
analyseTaskOrderResp
.
setLoadTask
(
calculateLoadList
(
req
.
getLoadType
(),
dateStr
,
req
.
getVins
(),
flag
));
//卸船任务数据
analyseTaskOrderResp
.
setUnloadTask
(
calculateUnloadList
(
req
.
getUnloadType
(),
dateStr
,
req
.
getVins
(),
flag
));
//搬移任务数据
analyseTaskOrderResp
.
setMoveTask
(
calculateMoveList
(
req
.
getMoveType
(),
dateStr
,
req
.
getVins
(),
flag
));
//指令数据
analyseTaskOrderResp
.
setTotalOrder
(
calculateOrderList
(
req
.
getOrderType
(),
dateStr
,
req
.
getVins
(),
flag
));
//修改时间戳
if
(
startDate
.
getDay
()==
endDate
.
getDay
()){
indexDate
=
org
.
apache
.
commons
.
lang3
.
time
.
DateUtils
.
addHours
(
indexDate
,
1
);
}
else
{
indexDate
=
org
.
apache
.
commons
.
lang3
.
time
.
DateUtils
.
addDays
(
indexDate
,
1
);
}
}
while
(
indexDate
.
compareTo
(
endDate
)<=
0
);
return
SSIResponse
.
ok
(
result
);
}
private
Integer
calculateOrderList
(
Integer
orderType
,
String
indexDate
,
List
<
String
>
vin
,
Integer
flag
)
{
Integer
result
=
0
;
orderType
=
Objects
.
isNull
(
orderType
)
?
0
:
orderType
;
switch
(
orderType
){
case
1
:
result
=
vmsTosOrdersMapper
.
queryOrdersByDate
(
vin
,
indexDate
,
1
,
flag
);
break
;
case
2
:
result
=
vmsTosOrdersMapper
.
queryOrdersByDate
(
vin
,
indexDate
,
2
,
flag
);
break
;
case
3
:
result
=
vmsTosOrdersMapper
.
queryOrdersByDate
(
vin
,
indexDate
,
3
,
flag
);
break
;
case
4
:
result
=
vmsTosOrdersMapper
.
queryOrdersByDate
(
vin
,
indexDate
,
4
,
flag
);
break
;
default
:
result
=
vmsTosOrdersMapper
.
queryOrdersByDate
(
vin
,
indexDate
,
1
,
flag
);
break
;
}
return
result
;
}
private
Integer
calculateMoveList
(
Integer
moveType
,
String
indexDate
,
List
<
String
>
vin
,
Integer
flag
)
{
Integer
result
=
0
;
moveType
=
Objects
.
isNull
(
moveType
)
?
0
:
moveType
;
switch
(
moveType
){
case
1
:
result
=
vmsTosOrdersMapper
.
queryOrderNumByDate
(
vin
,
indexDate
,
4
,
flag
);
break
;
case
2
:
result
=
vmsTosOrdersMapper
.
queryTosOrderByDate
(
vin
,
indexDate
,
4
,
flag
);
break
;
case
3
:
result
=
vmsTosOrdersMapper
.
staticsAppCaveOrdersByDate
(
vin
,
indexDate
,
4
,
flag
);
break
;
case
4
:
result
=
vmsTosOrdersMapper
.
staticsContainerNumsByDate
(
vin
,
indexDate
,
4
,
flag
);
break
;
default
:
result
=
vmsTosOrdersMapper
.
queryOrderNumByDate
(
vin
,
indexDate
,
4
,
flag
);
break
;
}
return
result
;
}
private
Integer
calculateUnloadList
(
Integer
unloadType
,
String
indexDate
,
List
<
String
>
vin
,
Integer
flag
)
{
Integer
result
=
0
;
unloadType
=
Objects
.
isNull
(
unloadType
)
?
0
:
unloadType
;
switch
(
unloadType
){
case
1
:
result
=
vmsTosOrdersMapper
.
queryOrderNumByDate
(
vin
,
indexDate
,
3
,
flag
);
break
;
case
2
:
result
=
vmsTosOrdersMapper
.
queryTosOrderByDate
(
vin
,
indexDate
,
3
,
flag
);
break
;
case
3
:
result
=
vmsTosOrdersMapper
.
staticsAppCaveOrdersByDate
(
vin
,
indexDate
,
3
,
flag
);
break
;
case
4
:
result
=
vmsTosOrdersMapper
.
staticsContainerNumsByDate
(
vin
,
indexDate
,
3
,
flag
);
break
;
default
:
result
=
vmsTosOrdersMapper
.
queryOrderNumByDate
(
vin
,
indexDate
,
3
,
flag
);
break
;
}
return
result
;
}
private
Integer
calculateLoadList
(
Integer
loadType
,
String
indexDate
,
List
<
String
>
vin
,
Integer
flag
)
{
Integer
result
=
0
;
loadType
=
Objects
.
isNull
(
loadType
)
?
0
:
loadType
;
switch
(
loadType
){
case
1
:
result
=
vmsTosOrdersMapper
.
queryOrderNumByDate
(
vin
,
indexDate
,
2
,
flag
);
break
;
case
2
:
result
=
vmsTosOrdersMapper
.
queryTosOrderByDate
(
vin
,
indexDate
,
2
,
flag
);
break
;
case
3
:
result
=
vmsTosOrdersMapper
.
staticsAppCaveOrdersByDate
(
vin
,
indexDate
,
2
,
flag
);
break
;
case
4
:
result
=
vmsTosOrdersMapper
.
staticsContainerNumsByDate
(
vin
,
indexDate
,
2
,
flag
);
break
;
default
:
result
=
vmsTosOrdersMapper
.
queryOrderNumByDate
(
vin
,
indexDate
,
2
,
flag
);
break
;
}
return
result
;
}
private
Integer
calculateTotalList
(
Integer
totalType
,
String
indexDate
,
List
<
String
>
vin
,
Integer
flag
)
{
Integer
result
=
0
;
totalType
=
Objects
.
isNull
(
totalType
)
?
0
:
totalType
;
switch
(
totalType
){
case
1
:
result
=
vmsTosOrdersMapper
.
queryOrderNumByDate
(
vin
,
indexDate
,
1
,
flag
);
break
;
case
2
:
result
=
vmsTosOrdersMapper
.
queryTosOrderByDate
(
vin
,
indexDate
,
1
,
flag
);
break
;
case
3
:
result
=
vmsTosOrdersMapper
.
staticsAppCaveOrdersByDate
(
vin
,
indexDate
,
1
,
flag
);
break
;
case
4
:
result
=
vmsTosOrdersMapper
.
staticsContainerNumsByDate
(
vin
,
indexDate
,
1
,
flag
);
break
;
default
:
result
=
vmsTosOrdersMapper
.
queryOrderNumByDate
(
vin
,
indexDate
,
1
,
flag
);
break
;
}
return
result
;
}
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/impl/V2xEventServiceImpl.java
0 → 100644
View file @
07602a7b
package
com.ssi.service.impl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.ssi.entity.V2xEvent
;
import
com.ssi.mapper.V2xEventMapper
;
import
com.ssi.service.V2xEventService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
/**
* 车路协调
*/
@Service
(
"V2xEventService"
)
@Slf4j
public
class
V2xEventServiceImpl
extends
ServiceImpl
<
V2xEventMapper
,
V2xEvent
>
implements
V2xEventService
{
@Autowired
private
V2xEventMapper
v2xEventMapper
;
@Override
public
List
<
V2xEvent
>
selectHistory
()
{
return
v2xEventMapper
.
selectHistory
();
}
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/impl/VehicleCommandServiceImpl.java
0 → 100644
View file @
07602a7b
package
com.ssi.service.impl
;
import
cn.afterturn.easypoi.handler.impl.ExcelDataHandlerDefaultImpl
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.ssi.entity.vo.VehicleCommandVo
;
import
com.ssi.mapper.VehicleCommandMapper
;
import
com.ssi.model.VehicleElasticSearchModel
;
import
com.ssi.service.VehicleCommandService
;
import
com.ssi.utils.PoiUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.elasticsearch.client.transport.TransportClient
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* 无人集卡作业明细
* @author yinjiangqiao
* @version 1.0
* @date 2022/7/4 9:51
*/
@Service
(
"VehicleCommandService"
)
@DS
(
"oracle"
)
public
class
VehicleCommandServiceImpl
implements
VehicleCommandService
{
@Autowired
private
VehicleCommandMapper
vehicleCommandMapper
;
@Autowired
protected
TransportClient
transportClient
;
@Autowired
private
VehicleElasticSearchModel
vehicleElasticSearchModel
;
@Override
public
IPage
<
VehicleCommandVo
>
vehicleTypeCommandList
(
String
queryStartTime
,
String
queryEndTime
,
String
truckNo
,
Integer
pageNum
,
Integer
pageSize
)
{
Map
params
=
new
HashMap
();
params
.
put
(
"queryStartTime"
,
queryStartTime
);
params
.
put
(
"queryEndTime"
,
queryEndTime
);
params
.
put
(
"truckNo"
,
truckNo
);
IPage
<
VehicleCommandVo
>
page
=
new
Page
<>(
pageNum
,
pageSize
);
page
=
vehicleCommandMapper
.
vehicleTypeCommandList
(
page
,
params
);
// List<VehicleCommandVo> list = new ArrayList<>();
// VehicleCommandVo vehicleCommandVo = new VehicleCommandVo();
// vehicleCommandVo.setArriveTime("");
// vehicleCommandVo.setCntr("NAKU5187743");
// vehicleCommandVo.setCntrSizCod("40");
// vehicleCommandVo.setCyWorkTime("");
// vehicleCommandVo.setQueueType("卸船");
// vehicleCommandVo.setShipName("A ASO");
// vehicleCommandVo.setShipNo("42707");
// vehicleCommandVo.setShipWorkTime("2022-07-13 10:55:02");
// vehicleCommandVo.setTruckNo("911");
// vehicleCommandVo.setVoyage("voyage");
// vehicleCommandVo.setTaskNo("AE221706DE843714E0540017A4771C09");
// list.add(vehicleCommandVo);
// page.setRecords(list);
// String year = DateUtils.format(new Date(), "yyyy");
// page.getRecords().stream().forEach(vehicleCommand -> {
// String taskNo = vehicleCommand.getTaskNo();
// List<TaskStatusHistory> lists = vehicleElasticSearchModel.searchTaskHistory(taskNo, year);
// if(lists.size()==0){
// return;
// }
// for(TaskStatusHistory askStatusHistory:lists){
// if(askStatusHistory.getStatus()==42){
// vehicleCommand.setTosTime(DateUtils.format(new Date(askStatusHistory.getCollectTime()), "yyyy-MM-dd yyyy-MM-dd HH:mm:ss"));
// }
// }
// });
return
page
;
}
@Override
public
List
<
VehicleCommandVo
>
exportCommandList
(
String
queryStartTime
,
String
queryEndTime
,
String
truckNo
,
Integer
pageNum
,
Integer
pageSize
)
{
Map
params
=
new
HashMap
();
params
.
put
(
"queryStartTime"
,
queryStartTime
);
params
.
put
(
"queryEndTime"
,
queryEndTime
);
params
.
put
(
"truckNo"
,
truckNo
);
params
.
put
(
"pageSize"
,
pageSize
);
params
.
put
(
"pageNum"
,
pageNum
);
return
vehicleCommandMapper
.
exportCommandList
(
params
);
}
@Override
public
void
export
(
String
queryStartTime
,
String
queryEndTime
,
String
truckNo
,
Integer
pageIndex
,
Integer
pageSize
,
String
exportType
,
HttpServletResponse
response
)
{
if
(
StringUtils
.
equals
(
exportType
,
"1"
)){
pageSize
=
100000
;
}
List
<
VehicleCommandVo
>
list
=
exportCommandList
(
queryStartTime
,
queryEndTime
,
truckNo
,
pageIndex
,
pageSize
);
ExcelDataHandlerDefaultImpl
<
Object
>
excelDataHandler
=
new
ExcelDataHandlerDefaultImpl
<
Object
>()
{
@Override
public
String
[]
getNeedHandlerFields
()
{
return
new
String
[]{
"航次"
,
"车号"
,
"船号"
,
"作业类型"
,
"尺码"
,
"箱位置"
,
"箱号"
,
"收到TOS指令时间"
,
"单车到桥下时间"
,
"桥边确认"
,
"堆场确认"
,
"作业时长"
};
}
@Override
public
Object
exportHandler
(
Object
obj
,
String
name
,
Object
value
)
{
if
(
"航次"
.
equals
(
name
))
{
VehicleCommandVo
order
=
(
VehicleCommandVo
)
obj
;
return
order
.
getVoyage
();
}
if
(
"车号"
.
equals
(
name
))
{
VehicleCommandVo
order
=
(
VehicleCommandVo
)
obj
;
return
order
.
getTruckNo
();
}
if
(
"船号"
.
equals
(
name
))
{
VehicleCommandVo
order
=
(
VehicleCommandVo
)
obj
;
return
order
.
getShipNo
();
}
if
(
"作业类型"
.
equals
(
name
))
{
VehicleCommandVo
order
=
(
VehicleCommandVo
)
obj
;
return
order
.
getQueueType
();
}
if
(
"尺码"
.
equals
(
name
))
{
VehicleCommandVo
order
=
(
VehicleCommandVo
)
obj
;
return
order
.
getCntrSizCod
();
}
if
(
"箱位置"
.
equals
(
name
))
{
VehicleCommandVo
order
=
(
VehicleCommandVo
)
obj
;
return
order
.
getTruckPosition
();
}
if
(
"箱号"
.
equals
(
name
))
{
VehicleCommandVo
order
=
(
VehicleCommandVo
)
obj
;
return
order
.
getCntr
();
}
if
(
"收到TOS指令时间"
.
equals
(
name
))
{
VehicleCommandVo
order
=
(
VehicleCommandVo
)
obj
;
return
order
.
getTosTime
();
}
if
(
"单车到桥下时间"
.
equals
(
name
))
{
VehicleCommandVo
order
=
(
VehicleCommandVo
)
obj
;
return
order
.
getArriveTime
();
}
if
(
"桥边确认"
.
equals
(
name
))
{
VehicleCommandVo
order
=
(
VehicleCommandVo
)
obj
;
return
order
.
getShipWorkTime
();
}
if
(
"堆场确认"
.
equals
(
name
))
{
VehicleCommandVo
order
=
(
VehicleCommandVo
)
obj
;
return
order
.
getCyWorkTime
();
}
if
(
"作业时长"
.
equals
(
name
))
{
VehicleCommandVo
order
=
(
VehicleCommandVo
)
obj
;
return
order
.
getTime
();
}
return
super
.
exportHandler
(
obj
,
name
,
value
);
}
};
PoiUtils
.
exportExcel
(
excelDataHandler
,
list
,
"无人集卡明细清单"
,
"无人集卡明细清单"
,
VehicleCommandVo
.
class
,
"无人集卡明细清单"
+
".xls"
,
true
,
response
);
}
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/impl/VehicleEmergencyServiceImpl.java
0 → 100644
View file @
07602a7b
package
com.ssi.service.impl
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.ssi.entity.VmsVehicleEmergencyStop
;
import
com.ssi.entity.vo.VmsVehicleEmergencyVo
;
import
com.ssi.mapper.VehicleEmergencyMapper
;
import
com.ssi.mapper.VmsVehicleMapper
;
import
com.ssi.model.RedisDataModel
;
import
com.ssi.response.AccessResponse
;
import
com.ssi.response.SSIPage
;
import
com.ssi.response.SSIResponse
;
import
com.ssi.service.VehicleEmergencyService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.client.RestTemplate
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* 故障历史服务实现类
*/
@Service
(
"vehicleEmergencyService"
)
@Slf4j
public
class
VehicleEmergencyServiceImpl
extends
ServiceImpl
<
VehicleEmergencyMapper
,
VmsVehicleEmergencyStop
>
implements
VehicleEmergencyService
{
@Autowired
private
RestTemplate
restTemplate
;
@Autowired
private
VmsVehicleMapper
vmsVehicleMapper
;
@Autowired
private
RedisDataModel
redisDataModel
;
@Value
(
"${harbor.remote.emergencyParking}"
)
private
String
emergencyParkingKeyPrefix
;
@Value
(
"${command-url}"
)
private
String
commandUrl
;
/**
* 故障列表分页
*/
@Override
public
SSIPage
queryPage
(
Map
<
String
,
Object
>
params
)
{
Integer
pageSize
=
params
.
get
(
"pageSize"
)
==
null
?
0
:
(
Integer
)
params
.
get
(
"pageSize"
);
Integer
pageIndex
=
params
.
get
(
"pageIndex"
)
==
null
?
10
:
(
Integer
)
params
.
get
(
"pageIndex"
);
Long
startTime
=
(
Long
)
params
.
get
(
"startTime"
);
Long
stopTime
=
(
Long
)
params
.
get
(
"stopTime"
);
Date
startDate
=
startTime
==
null
?
null
:
new
Date
(
startTime
);
Date
stopDate
=
stopTime
==
null
?
null
:
new
Date
(
stopTime
);
params
.
put
(
"startTime"
,
startDate
);
params
.
put
(
"stopTime"
,
stopDate
);
IPage
<
VmsVehicleEmergencyVo
>
page
=
new
Page
<>(
pageIndex
,
pageSize
);
page
=
this
.
getBaseMapper
().
getEmergencyRecordList
(
page
,
params
);
return
new
SSIPage
(
page
);
}
/**
* 紧急停车
* @param vin 车辆vin
* @param emergencyType 紧停类型
*/
@Override
public
SSIResponse
emergency
(
String
vin
,
Integer
emergencyType
)
{
// preCheck
log
.
info
(
String
.
format
(
"调用紧停接口,vin:%s,emergencyType:%s"
,
vin
,
emergencyType
));
Map
<
String
,
Object
>
emergencyMap
=
redisDataModel
.
getJson2Map
(
emergencyParkingKeyPrefix
+
":"
+
vin
);
if
(
emergencyMap
!=
null
)
{
Integer
emergencyStatus
=
(
Integer
)
emergencyMap
.
get
(
"emergencyStatus"
);
if
(
emergencyStatus
==
1
&&
emergencyType
==
1
)
{
return
SSIResponse
.
no
(
"车辆已处于非紧停状态中"
);
}
if
(
emergencyStatus
==
2
&&
emergencyType
==
2
)
{
return
SSIResponse
.
no
(
"车辆已处于紧停状态中"
);
}
}
// execute
String
url
=
commandUrl
+
"/remote/app/emergency"
;
Map
param
=
new
HashMap
();
param
.
put
(
"vin"
,
vin
);
//遥控类型 1-紧急停车;2-取消紧停
param
.
put
(
"emergencyType"
,
emergencyType
);
AccessResponse
accessResponse
=
restTemplate
.
postForObject
(
url
,
param
,
AccessResponse
.
class
);
if
(
accessResponse
.
isSuccess
())
{
log
.
info
(
String
.
format
(
"调用紧停接口成功,vin:%s,emergencyType:%s"
,
vin
,
emergencyType
));
return
SSIResponse
.
ok
();
}
else
{
String
msg
=
accessResponse
.
getStatus
().
getDetails
();
log
.
info
(
String
.
format
(
"调用紧停接口失败,vin:%s,emergencyType:%s,msg:%s"
,
vin
,
emergencyType
,
msg
));
return
SSIResponse
.
no
(
msg
);
}
}
}
ivccs-vmm-backservice/src/main/java/com/ssi/service/impl/VehicleRemoteInstructionServiceImpl.java
0 → 100644
View file @
07602a7b
package
com.ssi.service.impl
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.ssi.entity.VmsVehicleEmergencyStop
;
import
com.ssi.entity.VmsVehicleRemoteInstruction
;
import
com.ssi.entity.vo.VmsVehicleEmergencyVo
;
import
com.ssi.entity.vo.VmsVehicleRemoteInstructionVo
;
import
com.ssi.mapper.VehicleEmergencyMapper
;
import
com.ssi.mapper.VehicleRemoteInstructionMapper
;
import
com.ssi.mapper.VmsVehicleMapper
;
import
com.ssi.model.RedisDataModel
;
import
com.ssi.response.AccessResponse
;
import
com.ssi.response.SSIPage
;
import
com.ssi.response.SSIResponse
;
import
com.ssi.service.VehicleEmergencyService
;
import
com.ssi.service.VehicleRemoteInstructionService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.client.RestTemplate
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* 故障历史服务实现类
*/
@Service
(
"VehicleRemoteInstructionService"
)
@Slf4j
public
class
VehicleRemoteInstructionServiceImpl
extends
ServiceImpl
<
VehicleRemoteInstructionMapper
,
VmsVehicleRemoteInstruction
>
implements
VehicleRemoteInstructionService
{
/**
* 故障列表分页
*/
@Override
public
SSIPage
queryPage
(
Map
<
String
,
Object
>
params
)
{
Integer
pageSize
=
params
.
get
(
"pageSize"
)
==
null
?
0
:
(
Integer
)
params
.
get
(
"pageSize"
);
Integer
pageIndex
=
params
.
get
(
"pageIndex"
)
==
null
?
10
:
(
Integer
)
params
.
get
(
"pageIndex"
);
Long
startTime
=
(
Long
)
params
.
get
(
"startTime"
);
Long
stopTime
=
(
Long
)
params
.
get
(
"stopTime"
);
Date
startDate
=
startTime
==
null
?
null
:
new
Date
(
startTime
);
Date
stopDate
=
stopTime
==
null
?
null
:
new
Date
(
stopTime
);
params
.
put
(
"startTime"
,
startDate
);
params
.
put
(
"stopTime"
,
stopDate
);
IPage
<
VmsVehicleRemoteInstructionVo
>
page
=
new
Page
<>(
pageIndex
,
pageSize
);
page
=
this
.
getBaseMapper
().
getRemoteInstructionList
(
page
,
params
);
return
new
SSIPage
(
page
);
}
}
Prev
1
…
12
13
14
15
16
17
18
19
20
…
24
Next
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