提交 d1d6a84f authored 作者: ljj's avatar ljj

fix(screen): 修改核查大屏地图的bug

上级 fec4d3f0
...@@ -11,6 +11,10 @@ ...@@ -11,6 +11,10 @@
<artifactId>dev-confirmcheck</artifactId> <artifactId>dev-confirmcheck</artifactId>
<dependencies> <dependencies>
<dependency>
<groupId>com.tykj</groupId>
<artifactId>dev-block</artifactId>
</dependency>
<dependency> <dependency>
<groupId>com.tykj</groupId> <groupId>com.tykj</groupId>
<artifactId>dev-task</artifactId> <artifactId>dev-task</artifactId>
......
package com.tykj.dev.device.confirmcheck.controller;
import com.tykj.dev.config.swagger.AutoDocument;
import com.tykj.dev.device.confirmcheck.service.CheckBlockService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @AUTHOR: cnljj1995@gmail.com
* @DATE: 2023/1/12
*/
@RestController
@RequestMapping(value = "/check/block")
@AutoDocument
@Slf4j
@Api(tags = "核查区块链模块", description = "核查区块链模块", position = 1)
public class CheckBlockController {
@Autowired
private CheckBlockService checkBlockService;
@GetMapping("/tof")
@ApiOperation(value = "根据核查详情验真")
public ResponseEntity tureOrFalse(@RequestParam Integer detailId) {
return ResponseEntity.ok(checkBlockService.comparisonData(detailId));
}
@GetMapping("/difference")
@ApiOperation(value = "根据核查详情验真")
public ResponseEntity fixEscowTaskLog(@RequestParam Integer detailId) {
return ResponseEntity.ok(checkBlockService.findADifference(detailId));
}
}
...@@ -7,6 +7,8 @@ import lombok.Data; ...@@ -7,6 +7,8 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Transient;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -155,4 +157,10 @@ public class CheckDetailVo { ...@@ -155,4 +157,10 @@ public class CheckDetailVo {
private String remark; private String remark;
private List<FileRet> checkFileList = new ArrayList<>(); private List<FileRet> checkFileList = new ArrayList<>();
@ApiModelProperty(value = "数据创建时间")
private LocalDateTime createTime;
@ApiModelProperty(value = "文件md5")
private String fileMd5;
} }
...@@ -7,6 +7,9 @@ import org.springframework.data.jpa.repository.Modifying; ...@@ -7,6 +7,9 @@ import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
/** /**
* @author dengdiyi * @author dengdiyi
*/ */
...@@ -14,6 +17,15 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -14,6 +17,15 @@ import org.springframework.transaction.annotation.Transactional;
@Transactional @Transactional
public interface DeviceCheckDetailDao extends JpaRepository<DeviceCheckDetail, Integer>, JpaSpecificationExecutor<DeviceCheckDetail> { public interface DeviceCheckDetailDao extends JpaRepository<DeviceCheckDetail, Integer>, JpaSpecificationExecutor<DeviceCheckDetail> {
/**
* 查询指定时间之后更新的数据
* @param time
* @return
*/
@Query("select o from DeviceCheckDetail o where o.updateTime >= ?1 order by o.updateTime desc")
List<DeviceCheckDetail> findAllByUpdateTimeAfter(LocalDateTime time);
/** /**
* 根据id更新checkDetail * 根据id更新checkDetail
* *
......
package com.tykj.dev.device.confirmcheck.service;
import com.tykj.dev.device.block.entity.vo.BlockTraceabilityParsing;
/**
* 核查上链服务
* @AUTHOR: cnljj1995@gmail.com
* @DATE: 2023/1/11
*/
public interface CheckBlockService {
/**
* 对详情数据进行上链
*/
void detailToChain() throws Exception;
/**
* 根据detailid 比较数据是否被篡改
* @param detailId detai id
* @return t or f
*/
BlockTraceabilityParsing findADifference(Integer detailId);
/**
* 根据detailid 比较数据是否被篡改
* @param detailId detai id
* @return t or f
*/
boolean comparisonData(Integer detailId);
}
package com.tykj.dev.device.confirmcheck.service.impl;
import com.alibaba.fastjson.JSON;
import com.tykj.dev.device.block.entity.BlockData;
import com.tykj.dev.device.block.entity.bc.BcRecord;
import com.tykj.dev.device.block.entity.bc.BcRecordData;
import com.tykj.dev.device.block.entity.vo.BlockTraceabilityParsing;
import com.tykj.dev.device.block.entity.vo.TraceabilityParsingData;
import com.tykj.dev.device.block.service.BlockDataService;
import com.tykj.dev.device.block.service.BlockService;
import com.tykj.dev.device.confirmcheck.controller.DeviceCheckController;
import com.tykj.dev.device.confirmcheck.entity.domain.DeviceCheckDetail;
import com.tykj.dev.device.confirmcheck.entity.vo.CheckDetailVo;
import com.tykj.dev.device.confirmcheck.repository.DeviceCheckDetailDao;
import com.tykj.dev.device.confirmcheck.service.CheckBlockService;
import com.tykj.dev.device.file.entity.FileRet;
import com.tykj.dev.device.file.util.FileMD5Util;
import com.tykj.dev.misc.base.BlockBusinessEnum;
import com.tykj.dev.misc.base.BusinessEnum;
import com.tykj.dev.misc.utils.JacksonUtil;
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 java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Comparator;
import java.util.List;
/**
* @AUTHOR: cnljj1995@gmail.com
* @DATE: 2023/1/11
*/
@Service
@Slf4j
public class CheckBlockServiceImpl implements CheckBlockService {
@Value("${check.time.last}")
private String checkTimeLastFile;
@Autowired
private DeviceCheckDetailDao detailDao;
@Autowired
private DeviceCheckController deviceCheckController;
@Autowired
BlockService blockService;
@Autowired
BlockDataService blockDataService;
@Override
public void detailToChain() throws Exception {
LocalDateTime lastTime = LocalDateTime.now().minusYears(2);
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS");
File file = new File(checkTimeLastFile);
if (file.exists()) {
List<String> strings = Files.readAllLines(Paths.get(checkTimeLastFile));
lastTime = LocalDateTime.parse(strings.get(0), fmt);
}
List<DeviceCheckDetail> details = detailDao.findAllByUpdateTimeAfter(lastTime);
if (details.size() == 0) {
log.warn("[check] 无上链数据库,不更新");
return;
}
log.info("[check] 本次需上链:{}条", details.size());
LocalDateTime updateTime = details.stream().max(Comparator.comparing(DeviceCheckDetail::getUpdateTime)).get().getUpdateTime();
for (DeviceCheckDetail detail : details) {
CheckDetailVo data = deviceCheckController.findDetail(detail.getId()).getBody().getData();
String localFileMd5 = "";
List<FileRet> checkFileList = data.getCheckFileList();
if (checkFileList.size() == 1) {
File files = new File(checkFileList.get(0).getFilePath());
if (files.exists()) {
localFileMd5 = FileMD5Util.getFileMD5(files);
}
}
data.setFileMd5(localFileMd5);
blockService.sendText(
BlockBusinessEnum.CONFIRM_CHECK_DETAIL.subCode,
JacksonUtil.toJSon(data),
BusinessEnum.CONFIRM_CHECK_DETAIL.id,
detail.getId(),
detail.getCheckUnit());
}
FileWriter fileWritter = new FileWriter(file.getName());
BufferedWriter bufferWritter = new BufferedWriter(fileWritter);
bufferWritter.write(updateTime.format(fmt).toString());
bufferWritter.close();
}
@Override
public BlockTraceabilityParsing findADifference(Integer detailId) {
BlockData blockData = blockDataService.findBillTypeAndBillId(BusinessEnum.CONFIRM_CHECK_DETAIL.id, detailId);
BcRecord bcRecord = blockService.fetchRecord(BlockBusinessEnum.ALLOT.subCode, blockData.getRecordID());
BcRecordData bcRecordData = bcRecord.getData();
CheckDetailVo remoteDetail = JSON.parseObject(bcRecord.getData().getContent(), CheckDetailVo.class);
CheckDetailVo localDetail = deviceCheckController.findDetail(detailId).getBody().getData();
String localFileMd5 = "";
List<FileRet> checkFileList = localDetail.getCheckFileList();
if (checkFileList.size() == 1) {
File file = new File(checkFileList.get(0).getFilePath());
if (file.exists()) {
localFileMd5 = FileMD5Util.getFileMD5(file);
}
}
BlockTraceabilityParsing blockTraceabilityParsing = bcRecord.getData().toBlockTraceabilityParsing();
blockTraceabilityParsing.setBusinessTraceabilityParsingData(TraceabilityParsingData.builder()
.billTypeName("核查") //业务名称
.fileMd5(localFileMd5)
.initiateUnitName(localDetail.getCheckUnit())//发起单位
.operationTime(detailDao.findById(detailId).get().getCreateTime())//发起时间
.build());
blockTraceabilityParsing.setBlockTraceabilityParsingData(TraceabilityParsingData.builder()
.billTypeName("核查") //业务名称
.fileMd5(remoteDetail.getFileMd5())
.initiateUnitName(remoteDetail.getCheckUnit())//发起单位
.operationTime(detailDao.findById(detailId).get().getCreateTime())//发起时间
.build());
blockTraceabilityParsing.setBlockData(localDetail);
blockTraceabilityParsing.setCurrentData(localDetail);
return blockTraceabilityParsing;
}
@Override
public boolean comparisonData(Integer detailId) {
return true;
}
}
package com.tykj.dev.device.confirmcheck.task;
import com.tykj.dev.device.confirmcheck.service.CheckBlockService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
* @AUTHOR: cnljj1995@gmail.com
* @DATE: 2023/1/11
*/
@Component
@Slf4j
public class CheckTimedTask {
@Autowired
private CheckBlockService checkBlockService;
private boolean run = false;
@Scheduled(cron = "0 * * * * ? ")
public void onChain() {
log.info("[check] 开始上链任务");
if (run) {
log.warn("[check] 上次任务未结束,终止");
return;
}
try {
checkBlockService.detailToChain();
run = false;
} catch (Exception e) {
log.error("[check] 上链是啊比:{}", e.toString());
run = false;
}
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论