add:增加agv运行时间管理功能

This commit is contained in:
zds
2025-06-18 14:08:56 +08:00
parent 7d86bc5116
commit d609ebd7f6
11 changed files with 425 additions and 2 deletions

View File

@@ -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;
}

View File

@@ -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);
}
}
}
}
}

View File

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiOperation;
import org.nl.common.base.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.logging.annotation.Log;
import org.nl.system.service.acsagv.IAcsAgvService;
import org.nl.system.service.dict.ISysDictService;
import org.nl.system.service.dict.dao.Dict;
import org.nl.system.service.dict.dto.DictQuery;
@@ -34,6 +35,9 @@ public class SysDictController {
@Autowired
private ISysDictService dictService;
@Autowired
private IAcsAgvService acsAgvService;
@Log("查询字典")
@GetMapping
@ApiOperation("查询字典")
@@ -109,6 +113,13 @@ public class SysDictController {
return new ResponseEntity<>(dictService.getDictByName(name), HttpStatus.OK);
}
@GetMapping("/showDetail3")
@Log("查询agv运行时间")
@ApiOperation("查询agv运行时间")
public ResponseEntity<Object> showDetail3(@RequestParam String name){
return new ResponseEntity<>(acsAgvService.getALLagv(name), HttpStatus.OK);
}
@Log("新增字典详情")
@ApiOperation("新增字典详情")
@PostMapping("/dictDetail")

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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>

View File

@@ -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;
}
}