提交 f1ba6600 authored 作者: zjm's avatar zjm

feat(上链信息): 添加了清退、丢失、退役、报废销毁等业务等上链验证接口

添加了清退、丢失、退役、报废销毁等业务等上链验证接口
上级 338c7f77
......@@ -34,6 +34,12 @@
<artifactId>dev-apply</artifactId>
</dependency>
<dependency>
<groupId>com.tykj</groupId>
<artifactId>dev-block</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.tykj</groupId>
<artifactId>dev-file</artifactId>
......
......@@ -3,6 +3,7 @@ package com.tykj.dev.device.decommissioning.controller;
import com.tykj.dev.config.swagger.AutoDocument;
import com.tykj.dev.device.decommissioning.entity.vo.DecommissioningSelectVo;
import com.tykj.dev.device.decommissioning.entity.vo.RepelManagementVo;
import com.tykj.dev.device.decommissioning.service.DeviceDecommissioningDetailService;
import com.tykj.dev.device.decommissioning.service.DeviceDecommissioningQueryService;
import com.tykj.dev.device.library.repository.DeviceLibraryDao;
import com.tykj.dev.device.library.service.DeviceLibraryService;
......@@ -41,6 +42,9 @@ public class DecommissioningQueryController {
@Autowired
PackingLibraryService packingLibraryService;
@Autowired
DeviceDecommissioningDetailService deviceDecommissioningDetailService;
/**
* 查询退役中办任务
*/
......@@ -136,4 +140,23 @@ public class DecommissioningQueryController {
public ResponseEntity repelFileMap( @PathVariable Integer taskId){
return ResponseEntity.ok(deviceDecommissioningQueryService.findByTaskIdToFileMapList(taskId));
}
/**
* 区块验证
*/
@GetMapping(value ="/repel/checkTrueData/{billId}")
@ApiOperation(value = "根据业务id进行对应业务的验证", notes = "根据业务id进行对应业务的验证")
public ResponseEntity checkTrueData( @PathVariable Integer billId){
return ResponseEntity.ok(deviceDecommissioningDetailService.checkTrueData(billId));
}
/**
* 区块溯源
*/
@GetMapping(value ="/repel/checkTrueData/{billId}")
@ApiOperation(value = "根据业务id进行对应业务的溯源", notes = "根据业务id进行对应业务的溯源")
public ResponseEntity traceabilityParsing( @PathVariable Integer billId){
return ResponseEntity.ok(deviceDecommissioningDetailService.traceabilityParsing(billId));
}
}
package com.tykj.dev.device.decommissioning.service;
import com.tykj.dev.device.block.entity.vo.BlockTraceabilityParsing;
import com.tykj.dev.device.decommissioning.entity.DeviceDecommissioningDetail;
import com.tykj.dev.device.decommissioning.entity.vo.DecommissioningSelectVo;
import com.tykj.dev.device.file.entity.FileRet;
......@@ -45,4 +46,11 @@ public interface DeviceDecommissioningDetailService {
Map<String, List<FileRet>> findByIdToFileMapList(Integer id);
boolean checkTrueData(Integer billId);
BlockTraceabilityParsing traceabilityParsing(Integer billId);
}
package com.tykj.dev.device.decommissioning.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.core.type.TypeReference;
import com.github.wenhao.jpa.PredicateBuilder;
import com.github.wenhao.jpa.Specifications;
import com.tykj.dev.blockcha.subject.service.BlockChainUtil;
import com.tykj.dev.config.base.FileName;
import com.tykj.dev.device.block.entity.BlockData;
import com.tykj.dev.device.block.entity.bc.BcRecord;
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.decommissioning.entity.DeviceDecommissioningDetail;
import com.tykj.dev.device.decommissioning.entity.vo.DecommissioningSelectVo;
import com.tykj.dev.device.decommissioning.repository.DeviceDecommissioningDetailDao;
......@@ -14,10 +22,13 @@ import com.tykj.dev.device.file.service.FilesUtil;
import com.tykj.dev.device.library.repository.DeviceLibraryDao;
import com.tykj.dev.device.library.subject.domin.DeviceLibrary;
import com.tykj.dev.device.library.subject.vo.ScriptSaveVo;
import com.tykj.dev.misc.base.BlockBusinessEnum;
import com.tykj.dev.misc.base.BusinessEnum;
import com.tykj.dev.misc.base.StatusEnum;
import com.tykj.dev.misc.exception.ApiException;
import com.tykj.dev.misc.utils.DeviceSeqUtil;
import com.tykj.dev.misc.utils.JacksonUtil;
import com.tykj.dev.misc.utils.StringSplitUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
......@@ -46,23 +57,20 @@ public class DeviceDecommissioningDetailServiceImpl implements DeviceDecommissio
@Autowired
DeviceLibraryDao deviceLibraryDao;
@Autowired
BlockService blockService;
@Autowired
BlockChainUtil blockChainUtil;
BlockDataService blockDataService;
@Override
public DeviceDecommissioningDetail saveDeviceDecommissioningDetail(DeviceDecommissioningDetail deviceDecommissioningDetail) {
// log.info("[清退] 详情添加成功");
CompletableFuture.runAsync(()-> {
if (deviceDecommissioningDetail.getRecordId() == null || deviceDecommissioningDetail.getRecordId().equals("")) {
deviceDecommissioningDetail.setRecordId(blockChainUtil.sendText(1000, JacksonUtil.toJSon(deviceDecommissioningDetail)).getData().getRecordID());
deviceDecommissioningDetailDao.save(deviceDecommissioningDetail);
log.info("[退役]上链数据时间本次");
} else {
deviceDecommissioningDetail.setRecordId(blockChainUtil.appendText(JacksonUtil.toJSon(deviceDecommissioningDetail), deviceDecommissioningDetail.getRecordId()).getData().getRecordID());
deviceDecommissioningDetailDao.save(deviceDecommissioningDetail);
}
});
return deviceDecommissioningDetailDao.save(deviceDecommissioningDetail);
DeviceDecommissioningDetail save = deviceDecommissioningDetailDao.save(deviceDecommissioningDetail);
sendText(save.getId());
return save;
}
@Override
......@@ -175,4 +183,82 @@ public class DeviceDecommissioningDetailServiceImpl implements DeviceDecommissio
}
/**
* 验证接口
*/
@Override
public BlockTraceabilityParsing traceabilityParsing(Integer billId) {
BlockData billTypeAndBillId = blockDataService.findBillTypeAndBillId(BusinessEnum.DESTROY.id, billId);
BcRecord bcRecord = blockService.fetchRecord( BlockBusinessEnum.DESTROY.subCode, billTypeAndBillId.getRecordID());
DeviceDecommissioningDetail deviceDecommissioningDetail = queryDeviceDecommissioningDetail(billId);
DeviceDecommissioningDetail deviceDecommissioningDetail1 = JSON.parseObject(bcRecord.getData().getContent(), DeviceDecommissioningDetail.class);
BlockTraceabilityParsing blockTraceabilityParsing = bcRecord.getData().toBlockTraceabilityParsing();
blockTraceabilityParsing.setBusinessTraceabilityParsingData(TraceabilityParsingData.builder()
.billTypeName("退役")
.carrierIds(StringSplitUtil.stringListToString(deviceDecommissioningDetail.getScripts().stream().map(ScriptSaveVo::getSeqNumber).collect(Collectors.toList())))
.unitName(deviceDecommissioningDetail.getSendUnit())
.documentNo(deviceDecommissioningDetail.getNum())
.operationTime(deviceDecommissioningDetail.getSendTime())
.operatorUserName(operatorName(deviceDecommissioningDetail))
.build());
blockTraceabilityParsing.setBlockTraceabilityParsingData(TraceabilityParsingData.builder()
.billTypeName("退役")
.carrierIds(StringSplitUtil.stringListToString(deviceDecommissioningDetail1.getScripts().stream().map(ScriptSaveVo::getSeqNumber).collect(Collectors.toList())))
.unitName(deviceDecommissioningDetail1.getSendUnit())
.documentNo(deviceDecommissioningDetail1.getNum())
.operationTime(deviceDecommissioningDetail1.getSendTime())
.operatorUserName(operatorName(deviceDecommissioningDetail1))
.build());
blockTraceabilityParsing.setBlockData(deviceDecommissioningDetail1);
blockTraceabilityParsing.setCurrentData(deviceDecommissioningDetail);
return blockTraceabilityParsing;
}
private String operatorName(DeviceDecommissioningDetail deviceDecommissioningDetail) {
StringBuffer buf = new StringBuffer();
buf.append(deviceDecommissioningDetail.getSenderUserA())
.append(",")
.append(deviceDecommissioningDetail.getSenderUserB())
.append(",")
.append(deviceDecommissioningDetail.getReceiveUserA())
.append(",")
.append(deviceDecommissioningDetail.getReceiveUserB());
return buf.toString();
}
//验真
@Override
public boolean checkTrueData(Integer billId) {
BlockTraceabilityParsing blockTraceabilityParsing = traceabilityParsing(billId);
boolean contrast = blockDataService.contrast(blockTraceabilityParsing);
return contrast;
}
/**
* 上链接口
*/
public void sendText(Integer id){
DeviceDecommissioningDetail deviceDecommissioningDetail = queryDeviceDecommissioningDetail(id);
blockService.sendText(BlockBusinessEnum.DECOMMISSIONING.subCode, JSON.toJSONStringWithDateFormat(deviceDecommissioningDetail,"yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteDateUseDateFormat), BusinessEnum.DECOMMISSIONING.id,id,deviceDecommissioningDetail.getSendUnit());
}
public DeviceDecommissioningDetail queryDeviceDecommissioningDetail(Integer decommissioningId) {
Optional<DeviceDecommissioningDetail> optional = deviceDecommissioningDetailDao.findById(decommissioningId);
if (optional.isPresent()){
DeviceDecommissioningDetail deviceDecommissioningDetail=optional.get();
deviceDecommissioningDetail.setScripts(JacksonUtil.readValue(deviceDecommissioningDetail.getScriptJson(), new TypeReference<List<ScriptSaveVo>>() {
}));
deviceDecommissioningDetail.setScriptJson(null);
return deviceDecommissioningDetail;
}else {
log.info("[退役] 详情查看错误,id没有找到{}",decommissioningId);
throw new ApiException(ResponseEntity.status(500).body("退役详情id没有找到:"+decommissioningId));
}
}
}
......@@ -2,6 +2,7 @@ package com.tykj.dev.device.destroy.controller;
import com.tykj.dev.config.swagger.AutoDocument;
import com.tykj.dev.device.destroy.entity.vo.DestroySelectVo;
import com.tykj.dev.device.destroy.service.DeviceDestroyBillService;
import com.tykj.dev.device.destroy.service.DeviceDestroyQueryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -20,6 +21,9 @@ public class DeviceDestroyQueryController {
@Autowired
DeviceDestroyQueryService deviceDestroyQueryService;
@Autowired
DeviceDestroyBillService deviceDestroyBillService;
/**
* 根据任务id查询销毁业务
*/
......@@ -52,4 +56,23 @@ public class DeviceDestroyQueryController {
public ResponseEntity repelFileMap( @PathVariable Integer taskId){
return ResponseEntity.ok(deviceDestroyQueryService.findByTaskIdToFileMapList(taskId));
}
/**
* 区块验证
*/
@GetMapping(value ="/checkTrueData/{billId}")
@ApiOperation(value = "根据业务id进行对应业务的验证", notes = "根据业务id进行对应业务的验证")
public ResponseEntity checkTrueData( @PathVariable Integer billId){
return ResponseEntity.ok(deviceDestroyBillService.checkTrueData(billId));
}
/**
* 区块溯源
*/
@GetMapping(value ="/checkTrueData/{billId}")
@ApiOperation(value = "根据业务id进行对应业务的溯源", notes = "根据业务id进行对应业务的溯源")
public ResponseEntity traceabilityParsing( @PathVariable Integer billId){
return ResponseEntity.ok(deviceDestroyBillService.traceabilityParsing(billId));
}
}
......@@ -38,6 +38,12 @@
<artifactId>dev-file</artifactId>
</dependency>
<dependency>
<groupId>com.tykj</groupId>
<artifactId>dev-block</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.tykj.dev</groupId>
<artifactId>config</artifactId>
......
package com.tykj.dev.device.loss.controller;
import com.tykj.dev.config.swagger.AutoDocument;
import com.tykj.dev.device.loss.service.DeviceLossService;
import com.tykj.dev.device.loss.service.LossBillSelectService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -26,12 +27,34 @@ public class DeviceLossSelectController {
@Autowired
LossBillSelectService lossBillSelectService;
@Autowired
DeviceLossService deviceLossService;
@GetMapping(value ="/findDeviceLoss/{taskId}")
@ApiOperation(value = "上报上级单位确认接口", notes = "上报上级单位确认接口")
public ResponseEntity initiateLoss( @PathVariable Integer taskId){
return ResponseEntity.ok(lossBillSelectService.findDeviceLoss(taskId));
}
/**
* 区块验证
*/
@GetMapping(value ="/checkTrueData/{billId}")
@ApiOperation(value = "根据业务id进行对应业务的验证", notes = "根据业务id进行对应业务的验证")
public ResponseEntity checkTrueData( @PathVariable Integer billId){
return ResponseEntity.ok(deviceLossService.checkTrueData(billId));
}
/**
* 区块溯源
*/
@GetMapping(value ="/checkTrueData/{billId}")
@ApiOperation(value = "根据业务id进行对应业务的溯源", notes = "根据业务id进行对应业务的溯源")
public ResponseEntity traceabilityParsing( @PathVariable Integer billId){
return ResponseEntity.ok(deviceLossService.traceabilityParsing(billId));
}
}
......@@ -13,6 +13,7 @@ import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.Transient;
import java.util.Date;
import java.util.List;
/**
......@@ -34,6 +35,11 @@ public class DeviceLoss extends BaseEntity {
*/
@ApiModelProperty(value = "类型 1。丢失 2。找回")
private Integer type;
@ApiModelProperty
private Date lossDate;
/**
* 发起单位id
*/
......
package com.tykj.dev.device.loss.service;
import com.tykj.dev.device.block.entity.vo.BlockTraceabilityParsing;
import com.tykj.dev.device.loss.entity.domain.DeviceLoss;
import java.util.List;
......@@ -26,4 +27,7 @@ public interface DeviceLossService {
List<DeviceLoss> findByListLossUnitId(Integer unitId);
boolean checkTrueData(Integer billId);
BlockTraceabilityParsing traceabilityParsing(Integer billId);
}
package com.tykj.dev.device.loss.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.tykj.dev.blockcha.subject.service.BlockChainUtil;
import com.tykj.dev.device.block.entity.BlockData;
import com.tykj.dev.device.block.entity.bc.BcRecord;
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.library.repository.DeviceLibraryDao;
import com.tykj.dev.device.library.subject.domin.DeviceLibrary;
import com.tykj.dev.device.library.subject.vo.ScriptSaveVo;
import com.tykj.dev.device.loss.entity.domain.DeviceLoss;
import com.tykj.dev.device.loss.entity.vo.DeviceLossVo;
import com.tykj.dev.device.loss.repository.LossDao;
import com.tykj.dev.device.loss.service.DeviceLossService;
import com.tykj.dev.device.loss.util.StringUtils;
import com.tykj.dev.misc.base.BeanHelper;
import com.tykj.dev.misc.base.BlockBusinessEnum;
import com.tykj.dev.misc.base.BusinessEnum;
import com.tykj.dev.misc.utils.JacksonUtil;
import com.tykj.dev.misc.utils.StringSplitUtil;
import lombok.extern.slf4j.Slf4j;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
/**
* @author zjm
......@@ -27,19 +46,20 @@ public class DeviceLossServiceImpl implements DeviceLossService {
@Autowired
BlockChainUtil blockChainUtil;
@Autowired
DeviceLibraryDao deviceLibraryDao;
@Autowired
BlockService blockService;
@Autowired
BlockDataService blockDataService;
@Override
public DeviceLoss save(DeviceLoss deviceLoss) {
CompletableFuture.runAsync(()-> {
if (deviceLoss.getRecordId() == null || deviceLoss.getRecordId().equals("")) {
deviceLoss.setRecordId(blockChainUtil.sendText(1000, JacksonUtil.toJSon(deviceLoss)).getData().getRecordID());
lossDao.save(deviceLoss);
log.info("[丢失-找回]上链数据时间本次");
} else {
deviceLoss.setRecordId(blockChainUtil.appendText(JacksonUtil.toJSon(deviceLoss), deviceLoss.getRecordId()).getData().getRecordID());
lossDao.save(deviceLoss);
}
});
return lossDao.save(deviceLoss);
DeviceLoss save = lossDao.save(deviceLoss);
sendText(save.getId());
return save;
}
@Override
......@@ -57,4 +77,94 @@ public class DeviceLossServiceImpl implements DeviceLossService {
return lossDao.findAllByUnitId(unitId);
}
/**
* 验证接口
*/
@Override
public BlockTraceabilityParsing traceabilityParsing(Integer billId) {
BlockData billTypeAndBillId = blockDataService.findBillTypeAndBillId(BusinessEnum.LOSS.id, billId);
BcRecord bcRecord = blockService.fetchRecord( BlockBusinessEnum.LOSS.subCode, billTypeAndBillId.getRecordID());
DeviceLoss deviceLoss = queryDeviceLossId(billId);
DeviceLoss deviceLoss1 = JSON.parseObject(bcRecord.getData().getContent(), DeviceLoss.class);
BlockTraceabilityParsing blockTraceabilityParsing = bcRecord.getData().toBlockTraceabilityParsing();
blockTraceabilityParsing.setBusinessTraceabilityParsingData(TraceabilityParsingData.builder()
.billTypeName(toBillName(deviceLoss.getType()))
.carrierIds(StringSplitUtil.stringListToString(deviceLoss.getDeviceLossVoList().stream().map(DeviceLossVo::getSeqNumber).collect(Collectors.toList())))
.unitName(deviceLoss.getUnitName())
.documentNo(String.valueOf(deviceLoss.getId()))
.operationTime(deviceLoss.getLossDate())
.operatorUserName(operatorName(deviceLoss))
.build());
blockTraceabilityParsing.setBlockTraceabilityParsingData(TraceabilityParsingData.builder()
.billTypeName(toBillName(deviceLoss1.getType()))
.carrierIds(StringSplitUtil.stringListToString(deviceLoss1.getDeviceLossVoList().stream().map(DeviceLossVo::getSeqNumber).collect(Collectors.toList())))
.unitName(deviceLoss1.getUnitName())
.documentNo(String.valueOf(deviceLoss1.getId()))
.operationTime(deviceLoss1.getLossDate())
.operatorUserName(operatorName(deviceLoss1))
.build());
blockTraceabilityParsing.setBlockData(deviceLoss1);
blockTraceabilityParsing.setCurrentData(deviceLoss);
return blockTraceabilityParsing;
}
private String toBillName(Integer flag){
if (flag==1){
// 丢失
return "丢失";
}else {
return "找回";
}
}
private String operatorName(DeviceLoss deviceLoss) {
StringBuffer buf = new StringBuffer();
// buf.append(deviceLoss.())
// .append(",")
// .append(deviceDestroyBill.getLeader())
// .append(",")
// .append(deviceDestroyBill.getUndertaker())
// .append(",")
// .append(deviceDestroyBill.getAgent());
return buf.toString();
}
//验真
@Override
public boolean checkTrueData(Integer billId) {
BlockTraceabilityParsing blockTraceabilityParsing = traceabilityParsing(billId);
boolean contrast = blockDataService.contrast(blockTraceabilityParsing);
return contrast;
}
/**
* 上链接口
*/
public void sendText(Integer id){
DeviceLoss deviceDestroyBill = queryDeviceLossId(id);
blockService.sendText(BlockBusinessEnum.LOSS.subCode, JSON.toJSONStringWithDateFormat(deviceDestroyBill, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteDateUseDateFormat), BusinessEnum.LOSS.id, id, deviceDestroyBill.getUnitName());
}
private DeviceLoss queryDeviceLossId(Integer deviceLossId){
DeviceLoss byDeviceLoss = findByDeviceLoss(deviceLossId);
byDeviceLoss.setDeviceLossVoList(deviceLibraryDao.findAllById(StringUtils.stringToList(byDeviceLoss.getDevIds()))
.stream().map(this::toDeviceLossVo).collect(Collectors.toList()));
return byDeviceLoss;
}
private DeviceLossVo toDeviceLossVo(DeviceLibrary deviceLibrary){
ModelMapper mapper = BeanHelper.getUserMapper();
DeviceLossVo deviceLossVo= mapper.map(deviceLibrary, DeviceLossVo.class);
deviceLossVo.setTypeName(deviceLibrary.setConfigName().getTypeName());
return deviceLossVo;
}
}
......@@ -36,6 +36,11 @@
<groupId>com.tykj</groupId>
<artifactId>dev-task</artifactId>
</dependency>
<dependency>
<groupId>com.tykj</groupId>
<artifactId>dev-block</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.tykj</groupId>
<artifactId>dev-file</artifactId>
......
......@@ -2,6 +2,7 @@ package com.tykj.dev.device.scrap.controller;
import com.tykj.dev.config.swagger.AutoDocument;
import com.tykj.dev.device.scrap.service.ScrapQueryService;
import com.tykj.dev.device.scrap.service.ScrapService;
import com.tykj.dev.device.scrap.subject.vo.ScrapSelectVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -25,6 +26,9 @@ public class ScrapQueryController {
@Autowired
ScrapQueryService scrapQueryService;
@Autowired
ScrapService scrapService;
@GetMapping(value ="/detail/{taskId}")
@ApiOperation(value = "查询报废单据详情", notes = "查询报废单据详情")
public ResponseEntity clearedList4(@PathVariable Integer taskId){
......@@ -52,4 +56,26 @@ public class ScrapQueryController {
public ResponseEntity repelFileMap( @PathVariable Integer taskId){
return ResponseEntity.ok(scrapQueryService.findByTaskIdToFileMapList(taskId));
}
/**
* 区块验证
*/
@GetMapping(value ="/checkTrueData/{billId}")
@ApiOperation(value = "根据业务id进行对应业务的验证", notes = "根据业务id进行对应业务的验证")
public ResponseEntity checkTrueData( @PathVariable Integer billId){
return ResponseEntity.ok(scrapService.checkTrueData(billId));
}
/**
* 区块溯源
*/
@GetMapping(value ="/checkTrueData/{billId}")
@ApiOperation(value = "根据业务id进行对应业务的溯源", notes = "根据业务id进行对应业务的溯源")
public ResponseEntity traceabilityParsing( @PathVariable Integer billId){
return ResponseEntity.ok(scrapService.traceabilityParsing(billId));
}
}
package com.tykj.dev.device.scrap.service;
import com.tykj.dev.device.block.entity.vo.BlockTraceabilityParsing;
import com.tykj.dev.device.file.entity.FileRet;
import com.tykj.dev.device.scrap.subject.domin.Scrap;
import com.tykj.dev.device.scrap.subject.vo.ScrapSelectVo;
......@@ -44,4 +45,8 @@ public interface ScrapService {
Map<String, List<FileRet>> findByIdToFileMapList(Integer id);
boolean checkTrueData(Integer billId);
BlockTraceabilityParsing traceabilityParsing(Integer billId);
}
......@@ -101,4 +101,6 @@ public class ScrapBillServiceImpl implements ScrapBillService {
predicateBuilder.eq("destroyStatus", StatusEnum.END.id);
return scrapBillDao.findAll(predicateBuilder.build(), scrapSelectVo.getPageable());
}
}
package com.tykj.dev.device.scrap.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.core.type.TypeReference;
import com.github.wenhao.jpa.PredicateBuilder;
import com.github.wenhao.jpa.Specifications;
import com.tykj.dev.blockcha.subject.service.BlockChainUtil;
import com.tykj.dev.config.base.FileName;
import com.tykj.dev.device.block.entity.BlockData;
import com.tykj.dev.device.block.entity.bc.BcRecord;
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.file.entity.FileRet;
import com.tykj.dev.device.file.service.FilesUtil;
import com.tykj.dev.device.library.repository.DeviceLibraryDao;
......@@ -14,13 +22,17 @@ import com.tykj.dev.device.scrap.repository.ScrapDao;
import com.tykj.dev.device.scrap.service.ScrapService;
import com.tykj.dev.device.scrap.subject.domin.Scrap;
import com.tykj.dev.device.scrap.subject.vo.ScrapSelectVo;
import com.tykj.dev.misc.base.BlockBusinessEnum;
import com.tykj.dev.misc.base.BusinessEnum;
import com.tykj.dev.misc.base.StatusEnum;
import com.tykj.dev.misc.exception.ApiException;
import com.tykj.dev.misc.utils.DeviceSeqUtil;
import com.tykj.dev.misc.utils.JacksonUtil;
import com.tykj.dev.misc.utils.StringSplitUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
......@@ -47,6 +59,12 @@ public class ScrapServiceImpl implements ScrapService {
@Autowired
BlockChainUtil blockChainUtil;
@Autowired
BlockService blockService;
@Autowired
BlockDataService blockDataService;
@Override
public Scrap saveScrap(Scrap scrap) {
CompletableFuture.runAsync(()-> {
......@@ -151,6 +169,89 @@ public class ScrapServiceImpl implements ScrapService {
}
/**
* 验证接口
*/
@Override
public BlockTraceabilityParsing traceabilityParsing(Integer billId) {
BlockData billTypeAndBillId = blockDataService.findBillTypeAndBillId(BusinessEnum.SCRAP.id, billId);
BcRecord bcRecord = blockService.fetchRecord(BlockBusinessEnum.SCRAP.subCode, billTypeAndBillId.getRecordID());
Scrap scrap = queryScrap(billId);
Scrap scrap1 = JSON.parseObject(bcRecord.getData().getContent(), Scrap.class);
BlockTraceabilityParsing blockTraceabilityParsing = bcRecord.getData().toBlockTraceabilityParsing();
blockTraceabilityParsing.setBusinessTraceabilityParsingData(TraceabilityParsingData.builder()
.billTypeName("报废")
.carrierIds(StringSplitUtil.stringListToString(scrap.getScripts().stream().map(ScriptSaveVo::getSeqNumber).collect(Collectors.toList())))
.unitName(scrap.getSendUnit())
.documentNo(scrap.getNum())
.operationTime(scrap.getSendTime())
.operatorUserName(operatorName(scrap))
.build());
blockTraceabilityParsing.setBlockTraceabilityParsingData(TraceabilityParsingData.builder()
.billTypeName("报废")
.carrierIds(StringSplitUtil.stringListToString(scrap1.getScripts().stream().map(ScriptSaveVo::getSeqNumber).collect(Collectors.toList())))
.unitName(scrap1.getSendUnit())
.documentNo(scrap1.getNum())
.operationTime(scrap1.getSendTime())
.operatorUserName(operatorName(scrap1))
.build());
blockTraceabilityParsing.setBlockData(scrap1);
blockTraceabilityParsing.setCurrentData(scrap);
return blockTraceabilityParsing;
}
private String operatorName(Scrap scrap) {
StringBuffer buf = new StringBuffer();
buf.append(scrap.getSenderUserA())
.append(",")
.append(scrap.getSenderUserB())
.append(",")
.append(scrap.getReceiveUserA())
.append(",")
.append(scrap.getReceiveUserB());
return buf.toString();
}
//验真
@Override
public boolean checkTrueData(Integer billId) {
BlockTraceabilityParsing blockTraceabilityParsing = traceabilityParsing(billId);
boolean contrast = blockDataService.contrast(blockTraceabilityParsing);
return contrast;
}
/**
* 上链接口
*/
public void sendText(Integer id){
Scrap scrap = queryScrap(id);
blockService.sendText(BlockBusinessEnum.SCRAP.subCode, JSON.toJSONStringWithDateFormat(scrap,"yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteDateUseDateFormat), BusinessEnum.DESTROY.id,id,scrap.getSendUnit());
}
private Scrap queryScrap(Integer scrapId){
Optional<Scrap> optional = scrapDao.findById(scrapId);
if (optional.isPresent()){
Scrap scrap=optional.get();
List<ScriptSaveVo> scriptSaveVos = JacksonUtil.readValue(scrap.getScriptJson(), new TypeReference<List<ScriptSaveVo>>() {
});
scrap.setScripts(scriptSaveVos);
return scrap;
}else {
log.info("[报废] 详情查看错误,id没有找到{}",scrapId);
throw new ApiException(ResponseEntity.status(500).body("报废详情id没有找到:"+scrapId));
}
}
private List<DeviceLibrary> findInvoleDevice(String involeDevice){
if (involeDevice!=null && !involeDevice.equals(",") ) {
List<String> idStringList = Arrays.asList(involeDevice.split(","));
......@@ -162,4 +263,5 @@ public class ScrapServiceImpl implements ScrapService {
return new ArrayList<>();
}
}
}
......@@ -37,6 +37,11 @@
<groupId>com.tykj.dev</groupId>
<artifactId>config</artifactId>
</dependency>
<dependency>
<groupId>com.tykj</groupId>
<artifactId>dev-block</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.tykj.dev.device.sendback.service;
import com.tykj.dev.device.block.entity.vo.BlockTraceabilityParsing;
import com.tykj.dev.device.file.entity.FileRet;
import com.tykj.dev.device.sendback.entity.domain.DeviceRepelDetail;
import com.tykj.dev.device.sendback.entity.vo.RepelDetailSelectVo;
......@@ -53,4 +54,7 @@ public interface DeviceRepelDetailService {
List<DeviceRepelDetail> queryDeviceRepelDetailList(Integer unitId, Date startTime, Date endTime);
boolean checkTrueData(Integer billId);
BlockTraceabilityParsing traceabilityParsing(Integer billId);
}
package com.tykj.dev.device.sendback.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.core.type.TypeReference;
import com.github.wenhao.jpa.PredicateBuilder;
import com.github.wenhao.jpa.Specifications;
import com.tykj.dev.config.base.FileName;
import com.tykj.dev.device.block.entity.BlockData;
import com.tykj.dev.device.block.entity.bc.BcRecord;
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.file.entity.FileRet;
import com.tykj.dev.device.file.service.FilesUtil;
import com.tykj.dev.device.library.repository.DeviceLibraryDao;
......@@ -13,8 +21,11 @@ import com.tykj.dev.device.sendback.entity.domain.DeviceRepelDetail;
import com.tykj.dev.device.sendback.entity.vo.RepelDetailSelectVo;
import com.tykj.dev.device.sendback.repository.DeviceRepelDetailDao;
import com.tykj.dev.device.sendback.service.DeviceRepelDetailService;
import com.tykj.dev.misc.base.BlockBusinessEnum;
import com.tykj.dev.misc.base.BusinessEnum;
import com.tykj.dev.misc.exception.ApiException;
import com.tykj.dev.misc.utils.JacksonUtil;
import com.tykj.dev.misc.utils.StringSplitUtil;
import com.tykj.dev.misc.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -42,10 +53,18 @@ public class DeviceRepelDetailServiceImpl implements DeviceRepelDetailService {
@Autowired
DeviceLibraryDao deviceLibraryDao;
@Autowired
BlockService blockService;
@Autowired
BlockDataService blockDataService;
@Override
public DeviceRepelDetail saveDeviceRepelDetail(DeviceRepelDetail deviceRepelDetail) {
log.info("[清退] 详情添加成功");
return deviceRepelDetailDao.save(deviceRepelDetail);
DeviceRepelDetail save = deviceRepelDetailDao.save(deviceRepelDetail);
sendText(save.getId());
return save;
}
@Override
......@@ -184,4 +203,85 @@ public class DeviceRepelDetailServiceImpl implements DeviceRepelDetailService {
return new ArrayList<>();
}
}
/**
* 验证接口
*/
@Override
public BlockTraceabilityParsing traceabilityParsing(Integer billId) {
BlockData billTypeAndBillId = blockDataService.findBillTypeAndBillId(BusinessEnum.SEND_BACK.id, billId);
BcRecord bcRecord = blockService.fetchRecord( BlockBusinessEnum.SEND_BACK.subCode, billTypeAndBillId.getRecordID());
DeviceRepelDetail deviceRepelDetail = queryDeviceRepelDetail(billId);
DeviceRepelDetail deviceRepelDetail1 = JSON.parseObject(bcRecord.getData().getContent(), DeviceRepelDetail.class);
BlockTraceabilityParsing blockTraceabilityParsing = bcRecord.getData().toBlockTraceabilityParsing();
blockTraceabilityParsing.setBusinessTraceabilityParsingData(TraceabilityParsingData.builder()
.billTypeName("清退")
.carrierIds(StringSplitUtil.stringListToString(deviceRepelDetail.getScripts().stream().map(ScriptSaveVo::getSeqNumber).collect(Collectors.toList())))
.unitName(deviceRepelDetail.getSendUnit())
.documentNo(deviceRepelDetail.getNum())
.operationTime(deviceRepelDetail.getSendTime())
.operatorUserName(operatorName(deviceRepelDetail))
.build());
blockTraceabilityParsing.setBlockTraceabilityParsingData(TraceabilityParsingData.builder()
.billTypeName("清退")
.carrierIds(StringSplitUtil.stringListToString(deviceRepelDetail1.getScripts().stream().map(ScriptSaveVo::getSeqNumber).collect(Collectors.toList())))
.unitName(deviceRepelDetail1.getSendUnit())
.documentNo(deviceRepelDetail1.getNum())
.operationTime(deviceRepelDetail1.getSendTime())
.operatorUserName(operatorName(deviceRepelDetail1))
.build());
blockTraceabilityParsing.setBlockData(deviceRepelDetail1);
blockTraceabilityParsing.setCurrentData(deviceRepelDetail);
return blockTraceabilityParsing;
}
private String operatorName(DeviceRepelDetail deviceRepelDetail) {
StringBuffer buf = new StringBuffer();
buf.append(deviceRepelDetail.getSenderUserA())
.append(",")
.append(deviceRepelDetail.getSenderUserB())
.append(",")
.append(deviceRepelDetail.getReceiveUserA())
.append(",")
.append(deviceRepelDetail.getReceiveUserB());
return buf.toString();
}
//验真
@Override
public boolean checkTrueData(Integer billId) {
BlockTraceabilityParsing blockTraceabilityParsing = traceabilityParsing(billId);
boolean contrast = blockDataService.contrast(blockTraceabilityParsing);
return contrast;
}
/**
* 上链接口
*/
public void sendText(Integer id){
DeviceRepelDetail deviceRepelDetail = queryDeviceRepelDetail(id);
blockService.sendText(BlockBusinessEnum.SEND_BACK.subCode, JSON.toJSONStringWithDateFormat(deviceRepelDetail,"yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteDateUseDateFormat), BusinessEnum.DESTROY.id,id,deviceRepelDetail.getSendUnit());
}
private DeviceRepelDetail queryDeviceRepelDetail(Integer repelDetailId) {
Optional<DeviceRepelDetail> optional = deviceRepelDetailDao.findById(repelDetailId);
if (optional.isPresent()){
DeviceRepelDetail deviceRepelDetail=optional.get();
deviceRepelDetail.setScripts(JacksonUtil.readValue(deviceRepelDetail.getScriptJson(), new TypeReference<List<ScriptSaveVo>>() {
}));
deviceRepelDetail.setDeviceIds(null);
deviceRepelDetail.setScriptJson(null);
return deviceRepelDetail;
}else {
log.info("[清退] 详情查看错误,id没有找到{}",repelDetailId);
throw new ApiException(ResponseEntity.status(500).body("清退详情id没有找到:"+repelDetailId));
}
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论