11 changed files with 425 additions and 2 deletions
@ -0,0 +1,26 @@ |
|||||
|
package org.nl.acs.instruction.service.dto; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.io.Serializable; |
||||
|
import java.math.BigDecimal; |
||||
|
|
||||
|
/** |
||||
|
* @author ldjun |
||||
|
* @description / |
||||
|
* @date 2021-04-01 |
||||
|
**/ |
||||
|
@Data |
||||
|
public class InstructionDto2 implements Serializable { |
||||
|
|
||||
|
/** |
||||
|
* 车号 |
||||
|
*/ |
||||
|
private String carno; |
||||
|
|
||||
|
/** |
||||
|
* 秒数 |
||||
|
*/ |
||||
|
private BigDecimal last_day_second; |
||||
|
|
||||
|
} |
@ -0,0 +1,75 @@ |
|||||
|
package org.nl.quartz.task; |
||||
|
|
||||
|
import cn.hutool.core.date.DateUtil; |
||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.nl.acs.instruction.service.dto.InstructionDto2; |
||||
|
import org.nl.system.service.acsagv.dao.AcsAgv; |
||||
|
import org.nl.system.service.acsagv.dao.mapper.AcsAgvMapper; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
/** |
||||
|
* 自动统计agv运行时间 |
||||
|
*/ |
||||
|
@Slf4j |
||||
|
@Component |
||||
|
public class AutoAgvRunTime { |
||||
|
|
||||
|
@Autowired |
||||
|
private AcsAgvMapper acsAgvMapper; |
||||
|
|
||||
|
|
||||
|
@Transactional(rollbackFor = Exception.class) |
||||
|
public void run() { |
||||
|
//查询上次更新时间
|
||||
|
List<AcsAgv> dictList = acsAgvMapper.selectList(new LambdaQueryWrapper<AcsAgv>()); |
||||
|
|
||||
|
AcsAgv anyOne = dictList.get(0); |
||||
|
//最后一次统计时间
|
||||
|
String lastDay = anyOne.getDeadline(); |
||||
|
|
||||
|
lastDay = lastDay +" 00:00:00"; |
||||
|
//当前时间
|
||||
|
String nowday = DateUtil.now(); |
||||
|
|
||||
|
nowday = nowday.substring(0,10); |
||||
|
//统计lastday至Nowday直接运行的秒数
|
||||
|
List<InstructionDto2> list = acsAgvMapper.getListByStrs(nowday+" 00:00:00",lastDay); |
||||
|
if(list.size()>0){ |
||||
|
Map<String,InstructionDto2> map = new HashMap<String,InstructionDto2>(); |
||||
|
for(int i=0;i<list.size();i++){ |
||||
|
if(list.get(i).getCarno() == null) |
||||
|
map.put("未上报车号",list.get(i)); |
||||
|
else |
||||
|
map.put(list.get(i).getCarno(),list.get(i)); |
||||
|
} |
||||
|
for(int j =0;j<dictList.size();j++){ |
||||
|
AcsAgv agv = dictList.get(j); |
||||
|
String carno = agv.getAgv_no(); |
||||
|
|
||||
|
//总运行秒数
|
||||
|
BigDecimal run_second = agv.getRun_second(); |
||||
|
if(map.containsKey(carno)){ |
||||
|
InstructionDto2 instdto = map.get(carno); |
||||
|
//本次汇总秒数
|
||||
|
BigDecimal last_day_second = instdto.getLast_day_second(); |
||||
|
//累加描述
|
||||
|
run_second = run_second.add(last_day_second); |
||||
|
//更新
|
||||
|
agv.setDeadline(nowday); |
||||
|
agv.setUpdate_time(DateUtil.now()); |
||||
|
agv.setRun_second(run_second); |
||||
|
agv.setLast_day_second(last_day_second); |
||||
|
acsAgvMapper.updateById(agv); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,30 @@ |
|||||
|
package org.nl.system.service.acsagv; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
import org.nl.common.domain.query.PageQuery; |
||||
|
import org.nl.system.service.acsagv.dao.AcsAgv; |
||||
|
import org.nl.system.service.dict.dao.Dict; |
||||
|
import org.nl.system.service.dict.dto.DictQuery; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.Set; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 字典表 服务类 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author generator |
||||
|
* @since 2022-12-14 |
||||
|
*/ |
||||
|
public interface IAcsAgvService extends IService<AcsAgv> { |
||||
|
|
||||
|
/** |
||||
|
* 修改字典数据 |
||||
|
* @param name |
||||
|
*/ |
||||
|
List<AcsAgv> getALLagv(String name); |
||||
|
|
||||
|
} |
@ -0,0 +1,57 @@ |
|||||
|
package org.nl.system.service.acsagv.dao; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
import lombok.Data; |
||||
|
import lombok.EqualsAndHashCode; |
||||
|
|
||||
|
import java.io.Serializable; |
||||
|
import java.math.BigDecimal; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 字典表 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author generator |
||||
|
* @since 2022-12-14 |
||||
|
*/ |
||||
|
@Data |
||||
|
@EqualsAndHashCode(callSuper = false) |
||||
|
@TableName("acs_agv") |
||||
|
public class AcsAgv implements Serializable { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
/** |
||||
|
* 字典标识 |
||||
|
*/ |
||||
|
@TableId(value = "agv_id") |
||||
|
private String agv_id; |
||||
|
|
||||
|
/** |
||||
|
* 编码 |
||||
|
*/ |
||||
|
private String agv_no; |
||||
|
|
||||
|
/** |
||||
|
* 排序号 |
||||
|
*/ |
||||
|
private BigDecimal run_second; |
||||
|
|
||||
|
/** |
||||
|
* 排序号 |
||||
|
*/ |
||||
|
private BigDecimal last_day_second; |
||||
|
|
||||
|
/** |
||||
|
* 截至日期 |
||||
|
*/ |
||||
|
private String deadline; |
||||
|
|
||||
|
/** |
||||
|
* 更新时间 |
||||
|
*/ |
||||
|
private String update_time; |
||||
|
|
||||
|
} |
@ -0,0 +1,29 @@ |
|||||
|
package org.nl.system.service.acsagv.dao.mapper; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import org.apache.ibatis.annotations.Param; |
||||
|
import org.nl.acs.instruction.service.dto.InstructionDto2; |
||||
|
import org.nl.system.service.acsagv.dao.AcsAgv; |
||||
|
import org.nl.system.service.dict.dao.Dict; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 字典表 Mapper 接口 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author generator |
||||
|
* @since 2022-12-14 |
||||
|
*/ |
||||
|
public interface AcsAgvMapper extends BaseMapper<AcsAgv> { |
||||
|
|
||||
|
/** |
||||
|
* 获取系统菜单 |
||||
|
* @param nowday |
||||
|
* @param lastday |
||||
|
* @return |
||||
|
*/ |
||||
|
List<InstructionDto2> getListByStrs(@Param("nowday") String nowday, @Param("lastday") String lastday); |
||||
|
|
||||
|
} |
@ -0,0 +1,25 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
|
<mapper namespace="org.nl.system.service.acsagv.dao.mapper.AcsAgvMapper"> |
||||
|
|
||||
|
<select id="getListByStrs" resultType="org.nl.acs.instruction.service.dto.InstructionDto2"> |
||||
|
SELECT |
||||
|
inst2.carno, |
||||
|
sum( inst2.last_day_second ) AS last_day_second |
||||
|
FROM |
||||
|
( |
||||
|
SELECT |
||||
|
TIMESTAMPDIFF( SECOND, inst.create_time, inst.update_time ) AS last_day_second, |
||||
|
inst.carno, |
||||
|
inst.create_time, |
||||
|
inst.update_time |
||||
|
FROM |
||||
|
acs_instruction inst |
||||
|
WHERE |
||||
|
1 = 1 |
||||
|
AND inst.update_time <![CDATA[ <= ]]> #{nowday} AND inst.update_time <![CDATA[ >= ]]> #{lastday} |
||||
|
) inst2 |
||||
|
GROUP BY |
||||
|
inst2.carno |
||||
|
</select> |
||||
|
</mapper> |
@ -0,0 +1,58 @@ |
|||||
|
package org.nl.system.service.acsagv.impl; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
|
import org.nl.system.service.acsagv.IAcsAgvService; |
||||
|
import org.nl.system.service.acsagv.dao.AcsAgv; |
||||
|
import org.nl.system.service.acsagv.dao.mapper.AcsAgvMapper; |
||||
|
import org.nl.system.service.dict.dao.Dict; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 字典表 服务实现类 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author generator |
||||
|
* @since 2022-12-14 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class AcsAgvServiceImpl extends ServiceImpl<AcsAgvMapper, AcsAgv> implements IAcsAgvService { |
||||
|
@Autowired |
||||
|
private AcsAgvMapper acsAgvMapper; |
||||
|
|
||||
|
public void updateDict(Dict dto) { |
||||
|
/* Dict dict = sysDictMapper.selectById(dto.getDict_id()); |
||||
|
if (ObjectUtil.isEmpty(dict)) { |
||||
|
throw new BadRequestException("字典不存在"); |
||||
|
} |
||||
|
List<Dict> dictList = sysDictMapper.selectList(new LambdaQueryWrapper<Dict>().eq(Dict::getCode, dto.getCode())); |
||||
|
if (ObjectUtil.isNotEmpty(dictList) && !dto.getCode().equals(dict.getCode())) |
||||
|
throw new BadRequestException("字典[" + dto.getCode() + "]已存在"); |
||||
|
String currentUserId = SecurityUtils.getCurrentUserId(); |
||||
|
String currentNickName = SecurityUtils.getCurrentNickName(); |
||||
|
// 根据code获取所有字典
|
||||
|
List<Dict> dicts = sysDictMapper.selectList(new LambdaQueryWrapper<Dict>().eq(Dict::getCode, dict.getCode())); |
||||
|
dicts.forEach(di -> { |
||||
|
di.setCode(dto.getCode()); |
||||
|
di.setName(dto.getName()); |
||||
|
di.setUpdate_id(currentUserId); |
||||
|
di.setUpdate_name(currentNickName); |
||||
|
di.setUpdate_time(DateUtil.now()); |
||||
|
sysDictMapper.updateById(di); |
||||
|
});*/ |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public List<AcsAgv> getALLagv(String name) { |
||||
|
List<AcsAgv> dictList = acsAgvMapper.selectList( |
||||
|
new LambdaQueryWrapper<AcsAgv>().ne(AcsAgv::getAgv_no,"未上报车号") |
||||
|
); |
||||
|
return dictList; |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,88 @@ |
|||||
|
<template> |
||||
|
<el-dialog |
||||
|
append-to-body |
||||
|
v-loading.fullscreen.lock="fullscreenLoading" |
||||
|
title="agv运行管理" |
||||
|
:visible.sync="dialogVisible" |
||||
|
destroy-on-close |
||||
|
width="1200px" |
||||
|
@close="close" |
||||
|
@open="open" |
||||
|
> |
||||
|
<div class="grid-container"> |
||||
|
<el-table |
||||
|
ref="table2" |
||||
|
:data="tableDtl" |
||||
|
style="width: 100%;" |
||||
|
size="mini" |
||||
|
border |
||||
|
:highlight-current-row="true" |
||||
|
:header-cell-style="{background:'#f5f7fa',color:'#606266'}" |
||||
|
> |
||||
|
<el-table-column v-if="false" prop="agv_id" label="uuid" align="center" /> |
||||
|
<el-table-column min-width="60" prop="agv_no" label="车辆编号" align="center" /> |
||||
|
<el-table-column min-width="60" prop="run_second" label="车辆运行总秒数(s)" align="center" /> |
||||
|
<el-table-column min-width="60" prop="run_hour" label="车辆运行总时长(h)" align="center" :formatter="Myduration" /> |
||||
|
<el-table-column min-width="50" prop="deadline" label="统计截至日期" align="center" /> |
||||
|
<el-table-column min-width="60" prop="last_day_second" label="上一次累加运行秒数(s)" align="center" /> |
||||
|
<el-table-column min-width="60" prop="update_time" label="更新时间" align="center" /> |
||||
|
</el-table> |
||||
|
</div> |
||||
|
</el-dialog> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import crudParam from '@/views/system/param/param' |
||||
|
import { crud } from '@crud/crud' |
||||
|
|
||||
|
export default { |
||||
|
name: 'AgvDialog', |
||||
|
components: { }, |
||||
|
mixins: [crud()], |
||||
|
props: { |
||||
|
dialogShow: { |
||||
|
type: Boolean, |
||||
|
default: false |
||||
|
} |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
dialogVisible: false, |
||||
|
fullscreenLoading: false, |
||||
|
tableDtl: [] |
||||
|
} |
||||
|
}, |
||||
|
watch: { |
||||
|
dialogShow: { |
||||
|
handler(newValue) { |
||||
|
this.dialogVisible = newValue |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
open() { |
||||
|
this.queryTableDtl() |
||||
|
}, |
||||
|
close() { |
||||
|
this.$emit('update:dialogShow', false) |
||||
|
this.tableDtl = [] |
||||
|
this.$emit('AddChanged') |
||||
|
}, |
||||
|
Myduration(row, column) { |
||||
|
let diffDays = 0 |
||||
|
if (row.run_second && row.run_second !== null) { |
||||
|
diffDays = Math.floor(row.run_second / (60 * 60)) // 转换为H |
||||
|
} |
||||
|
return diffDays |
||||
|
}, |
||||
|
queryTableDtl() { |
||||
|
crudParam.showDetail3({ 'name': 'station' }).then(res => { |
||||
|
this.tableDtl = res |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
</style> |
Loading…
Reference in new issue