提交 cdbc04e1 authored 作者: zhoushaopan's avatar zhoushaopan

feat(维修,入库模块): 新增业务数据模块进行上链

新增业务数据模块进行上链
上级 57c22074
......@@ -48,6 +48,11 @@
<groupId>com.tykj</groupId>
<artifactId>dev-file</artifactId>
</dependency>
<dependency>
<groupId>com.tykj</groupId>
<artifactId>dev-block</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.tykj.dev.device.repair.controller;
import com.tykj.dev.config.swagger.AutoDocument;
import com.tykj.dev.device.repair.service.HistoryPepairService;
import com.tykj.dev.device.repair.service.RepairBackBillService;
import com.tykj.dev.device.repair.service.RepairSendBillService;
import com.tykj.dev.device.repair.subject.vo.HistorySelectVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* @author zjm
* @version 1.0.0
* @ClassName HistoryPepairContriller.java
* @Description TODO
* @createTime 2021年09月17日 10:21:00
*/
@RestController
@RequestMapping(value = "/repairBlock")
@AutoDocument
@Api(tags = "维修上链模块", description = "维修上链模块")
public class RepairBlockController {
@Resource
private RepairSendBillService repairSendBillService;
@Resource
private RepairBackBillService repairBackBillService;
@GetMapping(value ="send/checkTrueData/{billId}")
@ApiOperation(value = "根据送修ID进行对应业务的验证", notes = "根据送修ID进行对应业务的验证")
public ResponseEntity sendCheckTrueData(@PathVariable Integer billId){
return ResponseEntity.ok(repairSendBillService.checkTrueData(billId));
}
@GetMapping(value ="send/traceabilityParsing/{billId}")
@ApiOperation(value = "根据送修ID进行对应业务的溯源", notes = "根据送修ID进行对应业务的溯源")
public ResponseEntity sendTraceabilityParsing(@PathVariable Integer billId){
return ResponseEntity.ok(repairSendBillService.traceabilityParsing(billId));
}
@GetMapping(value ="back/checkTrueData/{billId}")
@ApiOperation(value = "根据维修退回ID进行对应业务的验证", notes = "根据维修退回ID进行对应业务的验证")
public ResponseEntity backCheckTrueData(@PathVariable Integer billId){
return ResponseEntity.ok(repairBackBillService.checkTrueData(billId));
}
@GetMapping(value ="back/traceabilityParsing/{billId}")
@ApiOperation(value = "根据维修退回ID进行对应业务的溯源", notes = "根据维修退回ID进行对应业务的溯源")
public ResponseEntity backTraceabilityParsing(@PathVariable Integer billId){
return ResponseEntity.ok(repairBackBillService.traceabilityParsing(billId));
}
}
package com.tykj.dev.device.repair.service;
import com.tykj.dev.device.block.entity.vo.BlockTraceabilityParsing;
import com.tykj.dev.device.file.entity.FileRet;
import com.tykj.dev.device.repair.subject.domin.RepairBackBill;
import com.tykj.dev.device.repair.subject.vo.RepairBillSelectVo;
......@@ -27,4 +28,18 @@ public interface RepairBackBillService extends RepairPublicService<RepairBackBil
* @return
*/
Map<String,List<FileRet>> getFileList(Integer taskId);
/**
* 验证接口
* @param billId 业务id
* @return 正确与否
*/
boolean checkTrueData(Integer billId);
/**
* 溯源接口
* @param billId 业务id
* @return 溯源信息实体
*/
BlockTraceabilityParsing traceabilityParsing(Integer billId);
}
package com.tykj.dev.device.repair.service;
import com.tykj.dev.device.block.entity.vo.BlockTraceabilityParsing;
import com.tykj.dev.device.file.entity.FileRet;
import com.tykj.dev.device.repair.subject.domin.RepairSendBill;
import com.tykj.dev.device.repair.subject.vo.RepairBillSelectVo;
......@@ -43,8 +44,18 @@ public interface RepairSendBillService {
RepairSendBill findByRepairdId(Integer repairId);
/**
*
* 验证接口
* @param billId 业务id
* @return 正确与否
*/
boolean checkTrueData(Integer billId);
/**
* 溯源接口
* @param billId 业务id
* @return 溯源信息实体
*/
BlockTraceabilityParsing traceabilityParsing(Integer billId);
}
package com.tykj.dev.device.repair.service.impl;
import com.alibaba.fastjson.JSON;
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.entity.BcHash;
import com.tykj.dev.blockcha.subject.service.BlockChainUtil;
import com.tykj.dev.config.TaskBeanConfig;
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.subject.vo.ScriptSaveVo;
import com.tykj.dev.device.repair.repository.RepairBackBillDao;
import com.tykj.dev.device.repair.service.RepairBackBillService;
import com.tykj.dev.device.repair.service.RepairBillService;
import com.tykj.dev.device.repair.subject.domin.RepairBackBill;
import com.tykj.dev.device.repair.subject.domin.RepairBill;
import com.tykj.dev.device.repair.subject.domin.RepairSendBill;
import com.tykj.dev.device.repair.subject.vo.RepairBillSelectVo;
import com.tykj.dev.device.task.service.TaskService;
import com.tykj.dev.device.user.util.UserUtils;
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.DateUtil;
import com.tykj.dev.misc.utils.JacksonUtil;
import com.tykj.dev.misc.utils.ResultUtil;
import com.tykj.dev.misc.utils.StringSplitUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
......@@ -24,6 +40,7 @@ import org.springframework.data.jpa.domain.Specification;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.persistence.Transient;
import java.lang.reflect.Field;
import java.util.HashMap;
......@@ -31,6 +48,7 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
/**
* @author zjm
......@@ -53,20 +71,30 @@ public class RepairBackBillServiceImpl implements RepairBackBillService {
@Autowired
private TaskService taskService;
@Resource
private BlockService blockService;
@Resource
private BlockDataService blockDataService;
@Resource
private RepairBillService repairBillService;
@Override
public RepairBackBill save(RepairBackBill deviceRepairBackBillEntity) {
RepairBackBill repairBackBill = deviceRepairBackBillDao.save(deviceRepairBackBillEntity);
CompletableFuture.runAsync(()->{
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
RepairBackBill repairBackBill1 = getOne(repairBackBill.getId());
BcHash bcText = blockChainUtil.sendHash(1000, JacksonUtil.toJSon(repairBackBill1));
String recordId = bcText.getData().getRecordID();
repairBackBill1.setRecordId(recordId);
deviceRepairBackBillDao.save(repairBackBill1);
// try {
// Thread.sleep(2000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// RepairBackBill repairBackBill1 = getOne(repairBackBill.getId());
// BcHash bcText = blockChainUtil.sendHash(1000, JacksonUtil.toJSon(repairBackBill1));
// String recordId = bcText.getData().getRecordID();
// repairBackBill1.setRecordId(recordId);
// deviceRepairBackBillDao.save(repairBackBill1);
sendText(repairBackBill.getId());
});
return repairBackBill;
}
......@@ -84,7 +112,10 @@ public class RepairBackBillServiceImpl implements RepairBackBillService {
@Override
public RepairBackBill update(RepairBackBill deviceRepairBackBillEntity) {
RepairBackBill repairBackBill = deviceRepairBackBillDao.save(deviceRepairBackBillEntity);
CompletableFuture.runAsync(()->blockChainUtil.appendHash(JacksonUtil.toJSon(repairBackBill),repairBackBill.getRecordId()), TaskBeanConfig.getThreadPoolTaskScheduler());
// CompletableFuture.runAsync(()->blockChainUtil.appendHash(JacksonUtil.toJSon(repairBackBill),repairBackBill.getRecordId()), TaskBeanConfig.getThreadPoolTaskScheduler());
CompletableFuture.runAsync(()->{
sendText(repairBackBill.getId());
});
return repairBackBill;
}
......@@ -129,6 +160,89 @@ public class RepairBackBillServiceImpl implements RepairBackBillService {
return map;
}
@Override
public boolean checkTrueData(Integer billId) {
BlockTraceabilityParsing blockTraceabilityParsing = traceabilityParsing(billId);
return blockDataService.contrast(blockTraceabilityParsing);
}
@Override
public BlockTraceabilityParsing traceabilityParsing(Integer billId) {
BlockData billTypeAndBillId = blockDataService.findBillTypeAndBillId(BusinessEnum.REPAIR_BACK.id, billId);
BcRecord bcRecord = blockService.fetchRecord(BlockBusinessEnum.REPAIR_BACK.subCode, billTypeAndBillId.getRecordID());
RepairBackBill repairBackBill = queryRepairBackBill(billId);
RepairBackBill repairBackBill1 = JSON.parseObject(bcRecord.getData().getContent(), RepairBackBill.class);
BlockTraceabilityParsing blockTraceabilityParsing = bcRecord.getData().toBlockTraceabilityParsing();
RepairBill repairBill = repairBillService.getOne(repairBackBill.getDeviceRepairBillId());
blockTraceabilityParsing.setBusinessTraceabilityParsingData(TraceabilityParsingData.builder()
.billTypeName("维修退回") //业务名称
.applyNumber(repairBackBill.getApplyNumber()) //申请文号
.replayNumber(repairBackBill.getReplayNumber()) //批复文号
// .fileMd5(deviceDecommissioningDetail.getFileMd5())
.carrierIds(StringSplitUtil.stringListToString(repairBackBill.getScripts().stream().map(ScriptSaveVo::getSeqNumber).collect(Collectors.toList())))//序列号信息
.initiateUnitName(repairBackBill.getSendUnit())//发起单位
.receiveUnitName(repairBackBill.getReceiveUnit())//接收单位
.documentNo(repairBill.getDocNum()) //单据号
.operationTime(DateUtil.getLocalDateTime(repairBackBill.getSendTime()))//发起时间
.operatorUserName(operatorName(repairBackBill)) //相关人员
.build());
RepairBill repairBill1 = repairBillService.getOne(repairBackBill1.getDeviceRepairBillId());
blockTraceabilityParsing.setBlockTraceabilityParsingData(TraceabilityParsingData.builder()
.billTypeName("维修退回")
.applyNumber(repairBackBill1.getApplyNumber())
.replayNumber(repairBackBill1.getReplayNumber())
// .fileMd5(deviceDecommissioningDetail.getFileMd5())
.carrierIds(StringSplitUtil.stringListToString(repairBackBill1.getScripts().stream().map(ScriptSaveVo::getSeqNumber).collect(Collectors.toList())))
.initiateUnitName(repairBackBill1.getSendUnit())
.receiveUnitName(repairBackBill1.getReceiveUnit())
.documentNo(repairBill1.getDocNum())
.operationTime(DateUtil.getLocalDateTime(repairBackBill1.getSendTime()))
.operatorUserName(operatorName(repairBackBill1))
.build());
blockTraceabilityParsing.setBlockData(repairBackBill1);
blockTraceabilityParsing.setCurrentData(repairBackBill);
return blockTraceabilityParsing;
}
/**
* 文本上链接口
* @param billId 业务id
*/
private void sendText(Integer billId){
RepairBackBill repairBackBill = queryRepairBackBill(billId);
// 区块业务状态码,上链json数据,业务类型,业务id,发起单位
blockService.sendText(BlockBusinessEnum.REPAIR_BACK.subCode, JacksonUtil.toJSon(repairBackBill), BusinessEnum.REPAIR_BACK.id,billId,repairBackBill.getSendUnit());
}
/**
* 拼写相关人员字符
*/
private String operatorName(RepairBackBill repairBackBill) {
StringBuffer buf = new StringBuffer();
buf.append(repairBackBill.getStartUserA())
.append(",")
.append(repairBackBill.getStartUserB())
.append(",")
.append(repairBackBill.getReceiveUserA())
.append(",")
.append(repairBackBill.getReceiveUserB());
return buf.toString();
}
private RepairBackBill queryRepairBackBill(Integer billId){
RepairBackBill repairBackBill = deviceRepairBackBillDao.findById(billId).get();
repairBackBill.setSendFileList(FilesUtil.stringFileToList(repairBackBill.getSendFiles()));
repairBackBill.setReceiveFileList(FilesUtil.stringFileToList(repairBackBill.getReceiveFiles()));
repairBackBill.setScripts(JacksonUtil.readValue(repairBackBill.getScriptJson(), new TypeReference<List<ScriptSaveVo>>() {
}));
return repairBackBill;
}
private Specification<RepairBackBill> getSelectSpecification(RepairBillSelectVo deviceRepairBillSelectVo) {
PredicateBuilder<RepairBackBill> predicateBuilder = Specifications.and();
PredicateBuilder<RepairBackBill> predicateBuilder1 = Specifications.or();
......
package com.tykj.dev.device.repair.service.impl;
import com.alibaba.fastjson.JSON;
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.entity.BcHash;
import com.tykj.dev.blockcha.subject.service.BlockChainUtil;
import com.tykj.dev.config.TaskBeanConfig;
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.subject.vo.ScriptSaveVo;
import com.tykj.dev.device.repair.repository.RepairSendBillDao;
import com.tykj.dev.device.repair.service.RepairBillService;
import com.tykj.dev.device.repair.service.RepairSendBillService;
import com.tykj.dev.device.repair.subject.domin.RepairBill;
import com.tykj.dev.device.repair.subject.domin.RepairSendBill;
import com.tykj.dev.device.repair.subject.vo.RepairBillSelectVo;
import com.tykj.dev.device.task.service.TaskService;
import com.tykj.dev.device.user.subject.service.UserPublicService;
import com.tykj.dev.misc.base.BlockBusinessEnum;
import com.tykj.dev.misc.base.BusinessEnum;
import com.tykj.dev.misc.utils.DateUtil;
import com.tykj.dev.misc.utils.JacksonUtil;
import com.tykj.dev.misc.utils.StringSplitUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
......@@ -22,6 +37,7 @@ import org.springframework.data.jpa.domain.Specification;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.persistence.Transient;
import java.lang.reflect.Field;
import java.util.HashMap;
......@@ -29,6 +45,7 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
/**
* @author dengdiyi
......@@ -48,15 +65,25 @@ public class RepairSendBillServiceImpl implements RepairSendBillService {
@Autowired
private TaskService taskService;
@Resource
private BlockService blockService;
@Resource
private BlockDataService blockDataService;
@Resource
private RepairBillService repairBillService;
@Override
public RepairSendBill addEntity(RepairSendBill deviceRepairSendBillEntity) {
RepairSendBill repairSendBill = deviceRepairSendBillDao.save(deviceRepairSendBillEntity);
CompletableFuture.runAsync(()->{
RepairSendBill repairSendBill1 = getOne(repairSendBill.getId());
BcHash bcText = blockChainUtil.sendHash(1000, JacksonUtil.toJSon(repairSendBill1));
String recordId = bcText.getData().getRecordID();
repairSendBill1.setRecordId(recordId);
deviceRepairSendBillDao.save(repairSendBill1);
// RepairSendBill repairSendBill1 = getOne(repairSendBill.getId());
// BcHash bcText = blockChainUtil.sendHash(1000, JacksonUtil.toJSon(repairSendBill1));
// String recordId = bcText.getData().getRecordID();
// repairSendBill1.setRecordId(recordId);
// deviceRepairSendBillDao.save(repairSendBill1);
sendText(repairSendBill.getId());
}, TaskBeanConfig.getThreadPoolTaskScheduler());
return repairSendBill;
}
......@@ -96,7 +123,10 @@ public class RepairSendBillServiceImpl implements RepairSendBillService {
@Override
public RepairSendBill update(RepairSendBill deviceRepairSendBillEntity) {
RepairSendBill repairSendBill = deviceRepairSendBillDao.save(deviceRepairSendBillEntity);
CompletableFuture.runAsync(()->blockChainUtil.appendHash(JacksonUtil.toJSon(repairSendBill),deviceRepairSendBillEntity.getRecordId()),TaskBeanConfig.getThreadPoolTaskScheduler());
// CompletableFuture.runAsync(()->blockChainUtil.appendHash(JacksonUtil.toJSon(repairSendBill),deviceRepairSendBillEntity.getRecordId()),TaskBeanConfig.getThreadPoolTaskScheduler());
CompletableFuture.runAsync(()->{
sendText(repairSendBill.getId());
}, TaskBeanConfig.getThreadPoolTaskScheduler());
return repairSendBill;
}
......@@ -122,6 +152,89 @@ public class RepairSendBillServiceImpl implements RepairSendBillService {
return deviceRepairSendBillDao.findByDeviceRepairBillId(repairId);
}
@Override
public boolean checkTrueData(Integer billId) {
BlockTraceabilityParsing blockTraceabilityParsing = traceabilityParsing(billId);
return blockDataService.contrast(blockTraceabilityParsing);
}
@Override
public BlockTraceabilityParsing traceabilityParsing(Integer billId) {
BlockData billTypeAndBillId = blockDataService.findBillTypeAndBillId(BusinessEnum.REPAIR.id, billId);
BcRecord bcRecord = blockService.fetchRecord(BlockBusinessEnum.ALLOT.subCode, billTypeAndBillId.getRecordID());
RepairSendBill repairSendBill = queryAllotBill(billId);
RepairSendBill repairSendBill1 = JSON.parseObject(bcRecord.getData().getContent(), RepairSendBill.class);
BlockTraceabilityParsing blockTraceabilityParsing = bcRecord.getData().toBlockTraceabilityParsing();
RepairBill repairBill = repairBillService.getOne(repairSendBill.getDeviceRepairBillId());
blockTraceabilityParsing.setBusinessTraceabilityParsingData(TraceabilityParsingData.builder()
.billTypeName("维修") //业务名称
.applyNumber(repairSendBill.getApplyNumber()) //申请文号
.replayNumber(repairSendBill.getReplayNumber()) //批复文号
// .fileMd5(deviceDecommissioningDetail.getFileMd5())
.carrierIds(StringSplitUtil.stringListToString(repairSendBill.getScripts().stream().map(ScriptSaveVo::getSeqNumber).collect(Collectors.toList())))//序列号信息
.initiateUnitName(repairSendBill.getSendUnit())//发起单位
.receiveUnitName(repairSendBill.getReceiveUnit())//接收单位
.documentNo(repairBill.getDocNum()) //单据号
.operationTime(DateUtil.getLocalDateTime(repairSendBill.getSendTime()))//发起时间
.operatorUserName(operatorName(repairSendBill)) //相关人员
.build());
RepairBill repairBill1 = repairBillService.getOne(repairSendBill1.getDeviceRepairBillId());
blockTraceabilityParsing.setBlockTraceabilityParsingData(TraceabilityParsingData.builder()
.billTypeName("维修")
.applyNumber(repairSendBill1.getApplyNumber())
.replayNumber(repairSendBill1.getReplayNumber())
// .fileMd5(deviceDecommissioningDetail.getFileMd5())
.carrierIds(StringSplitUtil.stringListToString(repairSendBill1.getScripts().stream().map(ScriptSaveVo::getSeqNumber).collect(Collectors.toList())))
.initiateUnitName(repairSendBill1.getSendUnit())
.receiveUnitName(repairSendBill1.getReceiveUnit())
.documentNo(repairBill1.getDocNum())
.operationTime(DateUtil.getLocalDateTime(repairSendBill1.getSendTime()))
.operatorUserName(operatorName(repairSendBill1))
.build());
blockTraceabilityParsing.setBlockData(repairSendBill1);
blockTraceabilityParsing.setCurrentData(repairSendBill);
return blockTraceabilityParsing;
}
/**
* 文本上链接口
* @param billId 业务id
*/
private void sendText(Integer billId){
RepairSendBill repairSendBill = queryAllotBill(billId);
// 区块业务状态码,上链json数据,业务类型,业务id,发起单位
blockService.sendText(BlockBusinessEnum.ALLOT.subCode, JacksonUtil.toJSon(repairSendBill), BusinessEnum.REPAIR.id,billId,repairSendBill.getSendUnit());
}
private RepairSendBill queryAllotBill(Integer billId){
RepairSendBill repairSendBill = deviceRepairSendBillDao.findById(billId).get();
repairSendBill.setSendFileList(FilesUtil.stringFileToList(repairSendBill.getSendFiles()));
repairSendBill.setReceiveFileList(FilesUtil.stringFileToList(repairSendBill.getReceiveFiles()));
repairSendBill.setScripts(JacksonUtil.readValue(repairSendBill.getScriptJson(), new TypeReference<List<ScriptSaveVo>>() {
}));
return repairSendBill;
}
/**
* 拼写相关人员字符
*/
private String operatorName(RepairSendBill repairSendBill) {
StringBuffer buf = new StringBuffer();
buf.append(repairSendBill.getStartUserA())
.append(",")
.append(repairSendBill.getStartUserB())
.append(",")
.append(repairSendBill.getRepairUserA())
.append(",")
.append(repairSendBill.getRepairUserB());
return buf.toString();
}
private Specification<RepairSendBill> getSelectSpecification(RepairBillSelectVo deviceRepairBillSelectVo) {
PredicateBuilder<RepairSendBill> predicateBuilder = Specifications.and();
......
......@@ -44,6 +44,11 @@
<groupId>com.tykj</groupId>
<artifactId>dev-apply</artifactId>
</dependency>
<dependency>
<groupId>com.tykj</groupId>
<artifactId>dev-block</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.tykj.dev.device.storage.controller;
import com.tykj.dev.config.swagger.AutoDocument;
import com.tykj.dev.device.storage.service.StorageBillService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* @author zhoushaopan
*/
@RestController
@RequestMapping(value = "/storageBlock")
@AutoDocument
@Api(tags = "装备入库上链模块", description = "装备入库上链模块")
@Slf4j
public class StorageBlockController {
@Resource
private StorageBillService storageBillService;
@GetMapping(value ="checkTrueData/{billId}")
@ApiOperation(value = "根据入库单ID进行对应业务的验证", notes = "根据入库单ID进行对应业务的验证")
public ResponseEntity backCheckTrueData(@PathVariable Integer billId){
return ResponseEntity.ok(storageBillService.checkTrueData(billId));
}
@GetMapping(value ="traceabilityParsing/{billId}")
@ApiOperation(value = "根据入库单ID进行对应业务的溯源", notes = "根据入库单ID进行对应业务的溯源")
public ResponseEntity backTraceabilityParsing(@PathVariable Integer billId){
return ResponseEntity.ok(storageBillService.traceabilityParsing(billId));
}
}
package com.tykj.dev.device.storage.service;
import com.tykj.dev.device.block.entity.vo.BlockTraceabilityParsing;
import com.tykj.dev.device.file.entity.FileRet;
import com.tykj.dev.device.storage.subject.domin.StorageBill;
import org.springframework.data.domain.Page;
......@@ -31,4 +32,18 @@ public interface StorageBillService {
void delete(Integer id);
Map<String,List<FileRet>> getFileList(Integer taskId);
/**
* 验证接口
* @param billId 业务id
* @return 正确与否
*/
boolean checkTrueData(Integer billId);
/**
* 溯源接口
* @param billId 业务id
* @return 溯源信息实体
*/
BlockTraceabilityParsing traceabilityParsing(Integer billId);
}
package com.tykj.dev.device.storage.service.impl;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.type.TypeReference;
import com.tykj.dev.blockcha.subject.entity.BcHash;
import com.tykj.dev.blockcha.subject.service.BlockChainUtil;
import com.tykj.dev.config.TaskBeanConfig;
import com.tykj.dev.config.base.FileName;
import com.tykj.dev.device.allot.subject.domin.AllotBill;
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.subject.vo.ScriptSaveVo;
import com.tykj.dev.device.repair.subject.domin.RepairBackBill;
import com.tykj.dev.device.repair.subject.domin.RepairBill;
import com.tykj.dev.device.storage.repository.StorageBillDao;
import com.tykj.dev.device.storage.service.StorageBillService;
import com.tykj.dev.device.storage.subject.domin.StorageBill;
import com.tykj.dev.device.storage.subject.vo.StorageBillDetail;
import com.tykj.dev.device.task.service.TaskService;
import com.tykj.dev.misc.base.BlockBusinessEnum;
import com.tykj.dev.misc.base.BusinessEnum;
import com.tykj.dev.misc.utils.DateUtil;
import com.tykj.dev.misc.utils.JacksonUtil;
import com.tykj.dev.misc.utils.StringSplitUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
/**
* @author dengdiyi
......@@ -38,21 +53,28 @@ public class StorageBillServiceImpl implements StorageBillService {
@Autowired
private TaskService taskService;
@Resource
private BlockDataService blockDataService;
@Resource
private BlockService blockService;
@Override
public StorageBill addEntity(StorageBill storageBillEntity) {
StorageBill storageBill = storageBillDao.save(storageBillEntity);
CompletableFuture.runAsync(()->{
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
StorageBill storageBill1 = getOne(storageBill.getId());
BcHash bcText = blockChainUtil.sendHash(1000, JacksonUtil.toJSon(storageBill1));
String recordId = bcText.getData().getRecordID();
storageBill1.setRecordId(recordId);
storageBillDao.save(storageBill1);
}, TaskBeanConfig.getThreadPoolTaskScheduler());
// CompletableFuture.runAsync(()->{
// try {
// Thread.sleep(2000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// StorageBill storageBill1 = getOne(storageBill.getId());
// BcHash bcText = blockChainUtil.sendHash(1000, JacksonUtil.toJSon(storageBill1));
// String recordId = bcText.getData().getRecordID();
// storageBill1.setRecordId(recordId);
// storageBillDao.save(storageBill1);
// }, TaskBeanConfig.getThreadPoolTaskScheduler());
CompletableFuture.runAsync(()->sendText(storageBill.getId()));
return storageBill;
}
......@@ -83,7 +105,8 @@ public class StorageBillServiceImpl implements StorageBillService {
@Override
public StorageBill update(StorageBill storageBillEntity) {
StorageBill storageBill = storageBillDao.save(storageBillEntity);
CompletableFuture.runAsync(()->blockChainUtil.appendHash(JacksonUtil.toJSon(storageBill),storageBill.getRecordId()),TaskBeanConfig.getThreadPoolTaskScheduler());
// CompletableFuture.runAsync(()->blockChainUtil.appendHash(JacksonUtil.toJSon(storageBill),storageBill.getRecordId()),TaskBeanConfig.getThreadPoolTaskScheduler());
CompletableFuture.runAsync(()->sendText(storageBill.getId()));
return storageBill;
}
......@@ -115,4 +138,105 @@ public class StorageBillServiceImpl implements StorageBillService {
map.put(FileName.ALLOT.name,FilesUtil.stringFileToList(storageBill.getAllotFiles()));
return map;
}
@Override
public boolean checkTrueData(Integer billId) {
BlockTraceabilityParsing blockTraceabilityParsing = traceabilityParsing(billId);
return blockDataService.contrast(blockTraceabilityParsing);
}
@Override
public BlockTraceabilityParsing traceabilityParsing(Integer billId) {
BlockData billTypeAndBillId = blockDataService.findBillTypeAndBillId(BusinessEnum.STORAGE.id, billId);
//区块链数据
BcRecord bcRecord = blockService.fetchRecord(BlockBusinessEnum.STORAGE.subCode, billTypeAndBillId.getRecordID());
BlockTraceabilityParsing blockTraceabilityParsing = bcRecord.getData().toBlockTraceabilityParsing();
StorageBill storageBill = queryStorageBill(billId);
//当前业务数据
TraceabilityParsingData traceabilityParsingData = new TraceabilityParsingData();
traceabilityParsingData.setBillTypeName("入库");
traceabilityParsingData.setApplyNumber(storageBill.getApplyNumber());
traceabilityParsingData.setReplayNumber(storageBill.getReplayNumber());
traceabilityParsingData.setCarrierIds(getSeqNumber(storageBill));
traceabilityParsingData.setInitiateUnitName(storageBill.getSendUnit());
traceabilityParsingData.setReceiveUnitName("浙江省机要局");
traceabilityParsingData.setOperationTime(DateUtil.getLocalDateTime(storageBill.getSendTime()));
traceabilityParsingData.setOperatorUserName(operatorName(storageBill));
blockTraceabilityParsing.setBusinessTraceabilityParsingData(traceabilityParsingData);
StorageBill storageBill1 = JSON.parseObject(bcRecord.getData().getContent(), StorageBill.class);
//区块链的数据
BlockTraceabilityParsing blockTraceabilityParsing1 = new BlockTraceabilityParsing();
TraceabilityParsingData traceabilityParsingData1 = new TraceabilityParsingData();
traceabilityParsingData.setBillTypeName("入库");
traceabilityParsingData.setApplyNumber(storageBill1.getApplyNumber());
traceabilityParsingData.setReplayNumber(storageBill1.getReplayNumber());
traceabilityParsingData.setCarrierIds(getSeqNumber(storageBill1));
traceabilityParsingData.setInitiateUnitName(storageBill1.getSendUnit());
traceabilityParsingData.setReceiveUnitName("浙江省机要局");
traceabilityParsingData.setOperationTime(DateUtil.getLocalDateTime(storageBill1.getSendTime()));
traceabilityParsingData.setOperatorUserName(operatorName(storageBill1));
blockTraceabilityParsing1.setBlockTraceabilityParsingData(traceabilityParsingData1);
blockTraceabilityParsing.setBlockData(storageBill1);
blockTraceabilityParsing.setCurrentData(storageBill);
return blockTraceabilityParsing;
}
/**
* 文本上链接口
* @param billId 业务id
*/
private void sendText(Integer billId){
StorageBill storageBill = queryStorageBill(billId);
// 区块业务状态码,上链json数据,业务类型,业务id,发起单位
blockService.sendText(BlockBusinessEnum.REPAIR_BACK.subCode, JacksonUtil.toJSon(storageBill), BusinessEnum.STORAGE.id,billId,storageBill.getSendUnit());
}
/**
* 拼写相关人员字符
*/
private String operatorName(StorageBill storageBill) {
StringBuffer buf = new StringBuffer();
buf.append(storageBill.getSendUserId())
.append(",")
.append(storageBill.getReceiveUserA())
.append(",")
.append(storageBill.getReceiveUserB());
return buf.toString();
}
private StorageBill queryStorageBill(Integer billId){
StorageBill storageBill = storageBillDao.findById(billId).get();
storageBill.setReplyFileList(FilesUtil.stringFileToList(storageBill.getReplyFiles()));
storageBill.setAllotFileList(FilesUtil.stringFileToList(storageBill.getAllotFiles()));
storageBill.setApplyFileList(FilesUtil.stringFileToList(storageBill.getApplyFiles()));
storageBill.setOtherFileList(FilesUtil.stringFileToList(storageBill.getOtherFiles()));
return storageBill;
}
/**
* 获取设备序列号区间 以逗号分隔
* @param storageBill
* @return
*/
private String getSeqNumber(StorageBill storageBill){
List<String> arrayList = new ArrayList<>();
String packingDetail = storageBill.getPackingDetail();
if (packingDetail != null){
List<StorageBillDetail> storageBillDetails = JacksonUtil.readValue(storageBill.getPackingDetail(), new TypeReference<List<StorageBillDetail>>() {
});
if (storageBillDetails != null && storageBillDetails.size() >0){
//取出区间号
storageBillDetails.forEach(storageBillDetail -> {
arrayList.add(storageBillDetail.getSeqInterval());
});
}
return String.join(",", arrayList);
}
return "";
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论