diff --git a/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/controller/StuDebtTransferStartController.java b/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/controller/StuDebtTransferStartController.java index 8c69e87..655bafb 100644 --- a/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/controller/StuDebtTransferStartController.java +++ b/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/controller/StuDebtTransferStartController.java @@ -10,10 +10,12 @@ import com.sztzjy.block_finance.util.ResultEntity; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; +import org.checkerframework.checker.units.qual.A; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.List; /** @@ -35,14 +37,6 @@ public class StuDebtTransferStartController { return new ResultEntity<>(HttpStatus.OK,"成功",stuDebtTransferDTOList); } - @PostMapping("/operate") - @AnonymousAccess - @ApiOperation("操作:下载、上传、读取") - public ResultEntity operate(@ApiParam("文件ID") Integer id, - @ApiParam("操作类型") String operateType){ - int result=stuDebtTransferStartService.operate(id,operateType); - return new ResultEntity<>(HttpStatus.OK,operateType+"成功"); - } @PostMapping("/applicationForDebtTransfer") @AnonymousAccess @@ -106,4 +100,65 @@ public class StuDebtTransferStartController { stuDebtTransferStartService.digitalCredentialUpdate(userId,ciphertext,category); return new ResultEntity<>(HttpStatus.OK,"成功"); } + + + @PostMapping("/exchangeTokensConfirm") + @AnonymousAccess + @ApiOperation("兑换代币") + public ResultEntity exchangeTokensConfirm(@ApiParam("用户ID") String userId){ +// stuDebtTransferStartService.exchangeTokens(userId); + return new ResultEntity<>(HttpStatus.OK, "成功"); + } + + @PostMapping("/receiveTokens") + @AnonymousAccess + @ApiOperation("接收代币") + public ResultEntity receiveTokens(@RequestParam @ApiParam("用户ID") String userId){ + stuDebtTransferStartService.receiveTokens(userId); + return new ResultEntity<>(HttpStatus.OK, "成功"); + } + + @PostMapping("/contracts") + @AnonymousAccess + @ApiOperation("再贴现--签订采购合作") + public ResultEntity contracts(@ApiParam("用户ID") String userId, + @ApiParam("需方") String demandSide, + @ApiParam("供方") String supplier, + @ApiParam("物料名称") String materialName, + @ApiParam("总金额") BigDecimal totalAmount){ + stuDebtTransferStartService.redisCountContracts(userId,demandSide,supplier,materialName,totalAmount); + return new ResultEntity<>(HttpStatus.OK, "签订合同成功"); + } + + @PostMapping("/paymentTokens") + @AnonymousAccess + @ApiOperation("再贴现--支付代币") + public ResultEntity paymentTokens(@ApiParam("用户ID") String userId, + @ApiParam("支付代币金额") BigDecimal money, + @ApiParam("代币转入地址") String nodeAddress){ + stuDebtTransferStartService.paymentTokens(userId,money,nodeAddress); + return new ResultEntity<>(HttpStatus.OK, "支付成功"); + } + + @PostMapping("/matureRepayment") + @AnonymousAccess + @ApiOperation("到期还款") + public ResultEntity matureRepayment(@ApiParam("用户ID") String userId, + @ApiParam("还款方") String repaymentParty, + @ApiParam("还款账户") String repaymentAccount, + @ApiParam("支付对象") String paymentRecipient, + @ApiParam("开户行") String openingBank, + @ApiParam("银行账号") String bankAccountNumber, + @ApiParam("支付金额") BigDecimal paymentAmount){ + stuDebtTransferStartService.matureRepayment(userId,repaymentParty,repaymentAccount,paymentRecipient,openingBank,bankAccountNumber,paymentAmount); + return new ResultEntity<>(HttpStatus.OK, "成功"); + } + + @PostMapping("/smartContracts") + @AnonymousAccess + @ApiOperation("智能合约执行") + public ResultEntity smartContracts(@RequestParam @ApiParam("用户ID") String userId){ + stuDebtTransferStartService.smartContracts(userId); + return new ResultEntity<>(HttpStatus.OK, "成功"); + } } diff --git a/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/controller/StuOperationController.java b/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/controller/StuOperationController.java new file mode 100644 index 0000000..1c7c87e --- /dev/null +++ b/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/controller/StuOperationController.java @@ -0,0 +1,176 @@ +package com.sztzjy.block_finance.controller; + +import cn.hutool.core.util.IdUtil; +import com.sztzjy.block_finance.annotation.AnonymousAccess; +import com.sztzjy.block_finance.config.Constant; +import com.sztzjy.block_finance.config.exception.handler.InvoceTException; +import com.sztzjy.block_finance.config.exception.handler.ServiceException; +import com.sztzjy.block_finance.entity.StuTransactionDocumentsInfo; +import com.sztzjy.block_finance.entity.StuTransactionDocumentsInfoExample; +import com.sztzjy.block_finance.mappers.StuTransactionDocumentsInfoMapper; +import com.sztzjy.block_finance.service.StuDebtTransferStartService; +import com.sztzjy.block_finance.util.ResultEntity; +import com.sztzjy.block_finance.util.file.IFileUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.http.HttpStatus; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.NotBlank; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +/** + * @author tz + * @date 2024/4/2 10:30 + */ +@RestController +@RequestMapping("api/stu/supplyChainFinance/operation") +@Api(tags = "文件操作统一接口:下载、上传、读取、预览") +public class StuOperationController { + @Resource + StuTransactionDocumentsInfoMapper stuTransactionDocumentsInfoMapper; + @Resource + StuDebtTransferStartService stuDebtTransferStartService; + @Resource + IFileUtil iFileUtil; + @PostMapping("/download") + @AnonymousAccess + @ApiOperation("操作:下载") + public void download(@ApiParam("文件名称") String docName, + @ApiParam("用户ID") String userId, + @RequestParam(required = false)@ApiParam("企业类别") String category, + HttpServletResponse response){ + + + HashMap map = new HashMap<>(); + map.put("连带责任保证担保合同","/supply/部分18 连带责任保证担保合同.pdf"); + map.put("应收账款反转让承诺书","/supply/部分14 应收账款反转让承诺书.pdf"); + map.put("应收账款转让明细表","/supply/部分1 应收账款转让明细表.pdf"); + map.put("应收账款转让通知书","/supply/部分12 应收账款转让通知书1.pdf"); + map.put("应收账款转让通知书 回执","/supply/部分13 应收账款转让通知书2 回执.pdf"); + + String docPath = map.get(docName); + + iFileUtil.download(response,docPath); + //更新下载状态 + StuTransactionDocumentsInfoExample example=new StuTransactionDocumentsInfoExample(); + example.createCriteria().andUserIdEqualTo(userId).andFileNameEqualTo(docName); + List stuTransactionDocumentsInfos = stuTransactionDocumentsInfoMapper.selectByExample(example); + if(!stuTransactionDocumentsInfos.isEmpty()){ + if(category.isEmpty()){ + stuTransactionDocumentsInfos.get(0).setDownloadStatus(1); + } + if(category.equals(Constant.CORE_ENTERPRISES)){ + stuTransactionDocumentsInfos.get(0).setCoreEnterpriseDownloadStatus(1); + } + if(category.equals(Constant.IMPORT_FACTOR)){ + stuTransactionDocumentsInfos.get(0).setFactoringDownloadStatus(1); + } + stuTransactionDocumentsInfos.get(0).setDownloadStatus(1); + stuTransactionDocumentsInfoMapper.updateByPrimaryKey(stuTransactionDocumentsInfos.get(0)); + } + } + + + @PostMapping("/upload") + @AnonymousAccess + @ApiOperation("操作:上传") + public ResultEntity upload(@RequestParam @RequestPart MultipartFile file, + @RequestParam String userId, + @RequestParam(required = false)@ApiParam("企业类别") String category, + @ApiParam("文件名")@RequestParam @NotBlank String fileName){ + + //判断用户是否已下载 + StuTransactionDocumentsInfoExample stuTransactionDocumentsInfoExample=new StuTransactionDocumentsInfoExample(); + stuTransactionDocumentsInfoExample.createCriteria().andUserIdEqualTo(userId).andFileNameEqualTo(fileName); + List stuTransactionDocumentsInfos = stuTransactionDocumentsInfoMapper.selectByExample(stuTransactionDocumentsInfoExample); + if(!stuTransactionDocumentsInfos.isEmpty()){ + Integer downloadStatus = stuTransactionDocumentsInfos.get(0).getDownloadStatus(); + if(downloadStatus!=1){ + throw new ServiceException(HttpStatus.ACCEPTED,"文件未下载"); + } + } + + //TODO 上传名字做校验防止出现胡乱上传问题待补充 + HashMap map = new HashMap<>(); + map.put("应收账款转让通知书 回执","部分13 应收账款转让通知书2 回执"); + + //用于判断文件名是否为对应的文件名 + String name = map.get(fileName); + + + + + + + if (file.isEmpty()) { + throw new InvoceTException(HttpStatus.ACCEPTED, "请勿上传空文件!"); + } + + // 获取文件名 + String originalFilename = file.getOriginalFilename(); + + if (!name.equals(originalFilename)) + { + throw new InvoceTException(HttpStatus.ACCEPTED, "请上传正确的文件!"); + } + + + // 判断文件扩展名是否为图片格式 + + if (!StringUtils.hasLength(originalFilename) || (!originalFilename.toLowerCase().endsWith(".pdf"))) + { + throw new InvoceTException(HttpStatus.ACCEPTED, "请上传正确的文件!"); + } + + + StuTransactionDocumentsInfoExample example = new StuTransactionDocumentsInfoExample(); + example.createCriteria().andUserIdEqualTo(userId).andFileNameEqualTo(fileName); + + + List documentsInfoList = stuTransactionDocumentsInfoMapper.selectByExample(example); + + + String uploadPath = iFileUtil.upload(file); + + + if (!documentsInfoList.isEmpty()){ + + StuTransactionDocumentsInfo documentsInfo = documentsInfoList.get(0); + documentsInfo.setUrl(uploadPath); + documentsInfo.setUpdateTime(new Date()); + if(category.isEmpty()){ + documentsInfo.setUploadStatus(1); + } + if(category.equals(Constant.CORE_ENTERPRISES)){ + documentsInfo.setCoreEnterpriseUploadStatus(1); + } + if(category.equals(Constant.IMPORT_FACTOR)){ + documentsInfo.setFactoringUploadStatus(1); + } + + stuTransactionDocumentsInfoMapper.updateByPrimaryKeySelective(documentsInfo); + + } + return new ResultEntity<>(HttpStatus.OK, "上传成功",uploadPath); + } + + @PostMapping("/read") + @AnonymousAccess + @ApiOperation("操作:读取") + public ResultEntity read(@RequestParam @ApiParam("文件ID") Integer id){ + int result=stuDebtTransferStartService.operate(id); + if(result>0){ + return new ResultEntity<>(HttpStatus.OK,"读取成功"); + }else { + return new ResultEntity<>(HttpStatus.OK,"读取失败"); + } + } +} diff --git a/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/entity/StuDigitalDebtVoucher.java b/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/entity/StuDigitalDebtVoucher.java index 53311ea..c5a55d4 100644 --- a/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/entity/StuDigitalDebtVoucher.java +++ b/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/entity/StuDigitalDebtVoucher.java @@ -1,5 +1,6 @@ package com.sztzjy.block_finance.entity; +import java.math.BigDecimal; import java.util.Date; public class StuDigitalDebtVoucher { @@ -47,6 +48,12 @@ public class StuDigitalDebtVoucher { private String coreEnterprisesDigitalSignature; + private BigDecimal factoringFinancingAmount; + + private BigDecimal exchangeTokenAmount; + + private BigDecimal remainingAmount; + public String getId() { return id; } @@ -222,4 +229,28 @@ public class StuDigitalDebtVoucher { public void setCoreEnterprisesDigitalSignature(String coreEnterprisesDigitalSignature) { this.coreEnterprisesDigitalSignature = coreEnterprisesDigitalSignature == null ? null : coreEnterprisesDigitalSignature.trim(); } + + public BigDecimal getFactoringFinancingAmount() { + return factoringFinancingAmount; + } + + public void setFactoringFinancingAmount(BigDecimal factoringFinancingAmount) { + this.factoringFinancingAmount = factoringFinancingAmount; + } + + public BigDecimal getExchangeTokenAmount() { + return exchangeTokenAmount; + } + + public void setExchangeTokenAmount(BigDecimal exchangeTokenAmount) { + this.exchangeTokenAmount = exchangeTokenAmount; + } + + public BigDecimal getRemainingAmount() { + return remainingAmount; + } + + public void setRemainingAmount(BigDecimal remainingAmount) { + this.remainingAmount = remainingAmount; + } } \ No newline at end of file diff --git a/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/entity/StuDigitalDebtVoucherExample.java b/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/entity/StuDigitalDebtVoucherExample.java index 078b9f4..951b9bc 100644 --- a/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/entity/StuDigitalDebtVoucherExample.java +++ b/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/entity/StuDigitalDebtVoucherExample.java @@ -1,5 +1,6 @@ package com.sztzjy.block_finance.entity; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -1594,6 +1595,186 @@ public class StuDigitalDebtVoucherExample { addCriterion("core_enterprises_digital_signature not between", value1, value2, "coreEnterprisesDigitalSignature"); return (Criteria) this; } + + public Criteria andFactoringFinancingAmountIsNull() { + addCriterion("factoring_financing_amount is null"); + return (Criteria) this; + } + + public Criteria andFactoringFinancingAmountIsNotNull() { + addCriterion("factoring_financing_amount is not null"); + return (Criteria) this; + } + + public Criteria andFactoringFinancingAmountEqualTo(BigDecimal value) { + addCriterion("factoring_financing_amount =", value, "factoringFinancingAmount"); + return (Criteria) this; + } + + public Criteria andFactoringFinancingAmountNotEqualTo(BigDecimal value) { + addCriterion("factoring_financing_amount <>", value, "factoringFinancingAmount"); + return (Criteria) this; + } + + public Criteria andFactoringFinancingAmountGreaterThan(BigDecimal value) { + addCriterion("factoring_financing_amount >", value, "factoringFinancingAmount"); + return (Criteria) this; + } + + public Criteria andFactoringFinancingAmountGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("factoring_financing_amount >=", value, "factoringFinancingAmount"); + return (Criteria) this; + } + + public Criteria andFactoringFinancingAmountLessThan(BigDecimal value) { + addCriterion("factoring_financing_amount <", value, "factoringFinancingAmount"); + return (Criteria) this; + } + + public Criteria andFactoringFinancingAmountLessThanOrEqualTo(BigDecimal value) { + addCriterion("factoring_financing_amount <=", value, "factoringFinancingAmount"); + return (Criteria) this; + } + + public Criteria andFactoringFinancingAmountIn(List values) { + addCriterion("factoring_financing_amount in", values, "factoringFinancingAmount"); + return (Criteria) this; + } + + public Criteria andFactoringFinancingAmountNotIn(List values) { + addCriterion("factoring_financing_amount not in", values, "factoringFinancingAmount"); + return (Criteria) this; + } + + public Criteria andFactoringFinancingAmountBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("factoring_financing_amount between", value1, value2, "factoringFinancingAmount"); + return (Criteria) this; + } + + public Criteria andFactoringFinancingAmountNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("factoring_financing_amount not between", value1, value2, "factoringFinancingAmount"); + return (Criteria) this; + } + + public Criteria andExchangeTokenAmountIsNull() { + addCriterion("exchange_token_amount is null"); + return (Criteria) this; + } + + public Criteria andExchangeTokenAmountIsNotNull() { + addCriterion("exchange_token_amount is not null"); + return (Criteria) this; + } + + public Criteria andExchangeTokenAmountEqualTo(BigDecimal value) { + addCriterion("exchange_token_amount =", value, "exchangeTokenAmount"); + return (Criteria) this; + } + + public Criteria andExchangeTokenAmountNotEqualTo(BigDecimal value) { + addCriterion("exchange_token_amount <>", value, "exchangeTokenAmount"); + return (Criteria) this; + } + + public Criteria andExchangeTokenAmountGreaterThan(BigDecimal value) { + addCriterion("exchange_token_amount >", value, "exchangeTokenAmount"); + return (Criteria) this; + } + + public Criteria andExchangeTokenAmountGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("exchange_token_amount >=", value, "exchangeTokenAmount"); + return (Criteria) this; + } + + public Criteria andExchangeTokenAmountLessThan(BigDecimal value) { + addCriterion("exchange_token_amount <", value, "exchangeTokenAmount"); + return (Criteria) this; + } + + public Criteria andExchangeTokenAmountLessThanOrEqualTo(BigDecimal value) { + addCriterion("exchange_token_amount <=", value, "exchangeTokenAmount"); + return (Criteria) this; + } + + public Criteria andExchangeTokenAmountIn(List values) { + addCriterion("exchange_token_amount in", values, "exchangeTokenAmount"); + return (Criteria) this; + } + + public Criteria andExchangeTokenAmountNotIn(List values) { + addCriterion("exchange_token_amount not in", values, "exchangeTokenAmount"); + return (Criteria) this; + } + + public Criteria andExchangeTokenAmountBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("exchange_token_amount between", value1, value2, "exchangeTokenAmount"); + return (Criteria) this; + } + + public Criteria andExchangeTokenAmountNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("exchange_token_amount not between", value1, value2, "exchangeTokenAmount"); + return (Criteria) this; + } + + public Criteria andRemainingAmountIsNull() { + addCriterion("remaining_amount is null"); + return (Criteria) this; + } + + public Criteria andRemainingAmountIsNotNull() { + addCriterion("remaining_amount is not null"); + return (Criteria) this; + } + + public Criteria andRemainingAmountEqualTo(BigDecimal value) { + addCriterion("remaining_amount =", value, "remainingAmount"); + return (Criteria) this; + } + + public Criteria andRemainingAmountNotEqualTo(BigDecimal value) { + addCriterion("remaining_amount <>", value, "remainingAmount"); + return (Criteria) this; + } + + public Criteria andRemainingAmountGreaterThan(BigDecimal value) { + addCriterion("remaining_amount >", value, "remainingAmount"); + return (Criteria) this; + } + + public Criteria andRemainingAmountGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("remaining_amount >=", value, "remainingAmount"); + return (Criteria) this; + } + + public Criteria andRemainingAmountLessThan(BigDecimal value) { + addCriterion("remaining_amount <", value, "remainingAmount"); + return (Criteria) this; + } + + public Criteria andRemainingAmountLessThanOrEqualTo(BigDecimal value) { + addCriterion("remaining_amount <=", value, "remainingAmount"); + return (Criteria) this; + } + + public Criteria andRemainingAmountIn(List values) { + addCriterion("remaining_amount in", values, "remainingAmount"); + return (Criteria) this; + } + + public Criteria andRemainingAmountNotIn(List values) { + addCriterion("remaining_amount not in", values, "remainingAmount"); + return (Criteria) this; + } + + public Criteria andRemainingAmountBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("remaining_amount between", value1, value2, "remainingAmount"); + return (Criteria) this; + } + + public Criteria andRemainingAmountNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("remaining_amount not between", value1, value2, "remainingAmount"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/entity/StuTransactionDocumentsInfo.java b/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/entity/StuTransactionDocumentsInfo.java index fc7c3d2..3e3f4ae 100644 --- a/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/entity/StuTransactionDocumentsInfo.java +++ b/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/entity/StuTransactionDocumentsInfo.java @@ -27,12 +27,20 @@ public class StuTransactionDocumentsInfo { private Integer coreEnterpriseDisplay; + private Integer coreEnterpriseDownloadStatus; + + private Integer coreEnterpriseUploadStatus; + private Integer coreEnterpriseReceiveStatus; private Integer factoringCompanyDisplay; private Integer factoringCompaniesReceiveStatus; + private Integer factoringDownloadStatus; + + private Integer factoringUploadStatus; + private Integer readStatus; private Integer downloadStatus; @@ -143,6 +151,22 @@ public class StuTransactionDocumentsInfo { this.coreEnterpriseDisplay = coreEnterpriseDisplay; } + public Integer getCoreEnterpriseDownloadStatus() { + return coreEnterpriseDownloadStatus; + } + + public void setCoreEnterpriseDownloadStatus(Integer coreEnterpriseDownloadStatus) { + this.coreEnterpriseDownloadStatus = coreEnterpriseDownloadStatus; + } + + public Integer getCoreEnterpriseUploadStatus() { + return coreEnterpriseUploadStatus; + } + + public void setCoreEnterpriseUploadStatus(Integer coreEnterpriseUploadStatus) { + this.coreEnterpriseUploadStatus = coreEnterpriseUploadStatus; + } + public Integer getCoreEnterpriseReceiveStatus() { return coreEnterpriseReceiveStatus; } @@ -167,6 +191,22 @@ public class StuTransactionDocumentsInfo { this.factoringCompaniesReceiveStatus = factoringCompaniesReceiveStatus; } + public Integer getFactoringDownloadStatus() { + return factoringDownloadStatus; + } + + public void setFactoringDownloadStatus(Integer factoringDownloadStatus) { + this.factoringDownloadStatus = factoringDownloadStatus; + } + + public Integer getFactoringUploadStatus() { + return factoringUploadStatus; + } + + public void setFactoringUploadStatus(Integer factoringUploadStatus) { + this.factoringUploadStatus = factoringUploadStatus; + } + public Integer getReadStatus() { return readStatus; } diff --git a/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/entity/StuTransactionDocumentsInfoExample.java b/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/entity/StuTransactionDocumentsInfoExample.java index c99f767..0243377 100644 --- a/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/entity/StuTransactionDocumentsInfoExample.java +++ b/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/entity/StuTransactionDocumentsInfoExample.java @@ -855,6 +855,126 @@ public class StuTransactionDocumentsInfoExample { return (Criteria) this; } + public Criteria andCoreEnterpriseDownloadStatusIsNull() { + addCriterion("core_enterprise_download_status is null"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseDownloadStatusIsNotNull() { + addCriterion("core_enterprise_download_status is not null"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseDownloadStatusEqualTo(Integer value) { + addCriterion("core_enterprise_download_status =", value, "coreEnterpriseDownloadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseDownloadStatusNotEqualTo(Integer value) { + addCriterion("core_enterprise_download_status <>", value, "coreEnterpriseDownloadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseDownloadStatusGreaterThan(Integer value) { + addCriterion("core_enterprise_download_status >", value, "coreEnterpriseDownloadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseDownloadStatusGreaterThanOrEqualTo(Integer value) { + addCriterion("core_enterprise_download_status >=", value, "coreEnterpriseDownloadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseDownloadStatusLessThan(Integer value) { + addCriterion("core_enterprise_download_status <", value, "coreEnterpriseDownloadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseDownloadStatusLessThanOrEqualTo(Integer value) { + addCriterion("core_enterprise_download_status <=", value, "coreEnterpriseDownloadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseDownloadStatusIn(List values) { + addCriterion("core_enterprise_download_status in", values, "coreEnterpriseDownloadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseDownloadStatusNotIn(List values) { + addCriterion("core_enterprise_download_status not in", values, "coreEnterpriseDownloadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseDownloadStatusBetween(Integer value1, Integer value2) { + addCriterion("core_enterprise_download_status between", value1, value2, "coreEnterpriseDownloadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseDownloadStatusNotBetween(Integer value1, Integer value2) { + addCriterion("core_enterprise_download_status not between", value1, value2, "coreEnterpriseDownloadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseUploadStatusIsNull() { + addCriterion("core_enterprise_upload_status is null"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseUploadStatusIsNotNull() { + addCriterion("core_enterprise_upload_status is not null"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseUploadStatusEqualTo(Integer value) { + addCriterion("core_enterprise_upload_status =", value, "coreEnterpriseUploadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseUploadStatusNotEqualTo(Integer value) { + addCriterion("core_enterprise_upload_status <>", value, "coreEnterpriseUploadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseUploadStatusGreaterThan(Integer value) { + addCriterion("core_enterprise_upload_status >", value, "coreEnterpriseUploadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseUploadStatusGreaterThanOrEqualTo(Integer value) { + addCriterion("core_enterprise_upload_status >=", value, "coreEnterpriseUploadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseUploadStatusLessThan(Integer value) { + addCriterion("core_enterprise_upload_status <", value, "coreEnterpriseUploadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseUploadStatusLessThanOrEqualTo(Integer value) { + addCriterion("core_enterprise_upload_status <=", value, "coreEnterpriseUploadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseUploadStatusIn(List values) { + addCriterion("core_enterprise_upload_status in", values, "coreEnterpriseUploadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseUploadStatusNotIn(List values) { + addCriterion("core_enterprise_upload_status not in", values, "coreEnterpriseUploadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseUploadStatusBetween(Integer value1, Integer value2) { + addCriterion("core_enterprise_upload_status between", value1, value2, "coreEnterpriseUploadStatus"); + return (Criteria) this; + } + + public Criteria andCoreEnterpriseUploadStatusNotBetween(Integer value1, Integer value2) { + addCriterion("core_enterprise_upload_status not between", value1, value2, "coreEnterpriseUploadStatus"); + return (Criteria) this; + } + public Criteria andCoreEnterpriseReceiveStatusIsNull() { addCriterion("core_enterprise_receive_status is null"); return (Criteria) this; @@ -1035,6 +1155,126 @@ public class StuTransactionDocumentsInfoExample { return (Criteria) this; } + public Criteria andFactoringDownloadStatusIsNull() { + addCriterion("factoring_download_status is null"); + return (Criteria) this; + } + + public Criteria andFactoringDownloadStatusIsNotNull() { + addCriterion("factoring_download_status is not null"); + return (Criteria) this; + } + + public Criteria andFactoringDownloadStatusEqualTo(Integer value) { + addCriterion("factoring_download_status =", value, "factoringDownloadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringDownloadStatusNotEqualTo(Integer value) { + addCriterion("factoring_download_status <>", value, "factoringDownloadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringDownloadStatusGreaterThan(Integer value) { + addCriterion("factoring_download_status >", value, "factoringDownloadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringDownloadStatusGreaterThanOrEqualTo(Integer value) { + addCriterion("factoring_download_status >=", value, "factoringDownloadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringDownloadStatusLessThan(Integer value) { + addCriterion("factoring_download_status <", value, "factoringDownloadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringDownloadStatusLessThanOrEqualTo(Integer value) { + addCriterion("factoring_download_status <=", value, "factoringDownloadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringDownloadStatusIn(List values) { + addCriterion("factoring_download_status in", values, "factoringDownloadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringDownloadStatusNotIn(List values) { + addCriterion("factoring_download_status not in", values, "factoringDownloadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringDownloadStatusBetween(Integer value1, Integer value2) { + addCriterion("factoring_download_status between", value1, value2, "factoringDownloadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringDownloadStatusNotBetween(Integer value1, Integer value2) { + addCriterion("factoring_download_status not between", value1, value2, "factoringDownloadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringUploadStatusIsNull() { + addCriterion("factoring_upload_status is null"); + return (Criteria) this; + } + + public Criteria andFactoringUploadStatusIsNotNull() { + addCriterion("factoring_upload_status is not null"); + return (Criteria) this; + } + + public Criteria andFactoringUploadStatusEqualTo(Integer value) { + addCriterion("factoring_upload_status =", value, "factoringUploadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringUploadStatusNotEqualTo(Integer value) { + addCriterion("factoring_upload_status <>", value, "factoringUploadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringUploadStatusGreaterThan(Integer value) { + addCriterion("factoring_upload_status >", value, "factoringUploadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringUploadStatusGreaterThanOrEqualTo(Integer value) { + addCriterion("factoring_upload_status >=", value, "factoringUploadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringUploadStatusLessThan(Integer value) { + addCriterion("factoring_upload_status <", value, "factoringUploadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringUploadStatusLessThanOrEqualTo(Integer value) { + addCriterion("factoring_upload_status <=", value, "factoringUploadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringUploadStatusIn(List values) { + addCriterion("factoring_upload_status in", values, "factoringUploadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringUploadStatusNotIn(List values) { + addCriterion("factoring_upload_status not in", values, "factoringUploadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringUploadStatusBetween(Integer value1, Integer value2) { + addCriterion("factoring_upload_status between", value1, value2, "factoringUploadStatus"); + return (Criteria) this; + } + + public Criteria andFactoringUploadStatusNotBetween(Integer value1, Integer value2) { + addCriterion("factoring_upload_status not between", value1, value2, "factoringUploadStatus"); + return (Criteria) this; + } + public Criteria andReadStatusIsNull() { addCriterion("read_status is null"); return (Criteria) this; diff --git a/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/service/StuDebtTransferStartService.java b/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/service/StuDebtTransferStartService.java index 3c2ae3b..ec3c740 100644 --- a/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/service/StuDebtTransferStartService.java +++ b/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/service/StuDebtTransferStartService.java @@ -1,8 +1,10 @@ package com.sztzjy.block_finance.service; import com.sztzjy.block_finance.entity.StuDebtInvestigationInfo; +import com.sztzjy.block_finance.entity.StuTransactionDocumentsInfo; import com.sztzjy.block_finance.entity.dto.StuDebtTransferDTO; +import java.math.BigDecimal; import java.util.List; /** @@ -12,7 +14,7 @@ import java.util.List; public interface StuDebtTransferStartService { List debtTransferFileDisplay(String userId); - int operate(Integer id, String operateType); + int operate(Integer id); void applicationForDebtTransfer(String userId); @@ -27,4 +29,16 @@ public interface StuDebtTransferStartService { String digitalSignatureConfirmation(String userId,String privateKey, String fileName,String category); void digitalCredentialUpdate(String userId, String ciphertext, String category); + + List defaultDataSettings(String userId); + + void receiveTokens(String userId); + + void redisCountContracts(String userId, String demandSide, String supplier, String materialName, BigDecimal totalAmount); + + void paymentTokens(String userId, BigDecimal money, String nodeAddress); + + void matureRepayment(String userId, String repaymentParty, String repaymentAccount, String paymentRecipient, String openingBank, String bankAccountNumber, BigDecimal paymentAmount); + + void smartContracts(String userId); } diff --git a/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/service/impl/StuDebtTransferStartServiceImpl.java b/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/service/impl/StuDebtTransferStartServiceImpl.java index 3049f13..9a40eb6 100644 --- a/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/service/impl/StuDebtTransferStartServiceImpl.java +++ b/BlockFinanceCentral/src/main/java/com/sztzjy/block_finance/service/impl/StuDebtTransferStartServiceImpl.java @@ -4,11 +4,9 @@ import com.sztzjy.block_finance.config.Constant; import com.sztzjy.block_finance.config.exception.handler.ServiceException; import com.sztzjy.block_finance.entity.*; import com.sztzjy.block_finance.entity.dto.StuDebtTransferDTO; -import com.sztzjy.block_finance.mappers.StuDebtInvestigationInfoMapper; -import com.sztzjy.block_finance.mappers.StuDigitalDebtVoucherMapper; -import com.sztzjy.block_finance.mappers.StuDigitalSignatureInfoMapper; -import com.sztzjy.block_finance.mappers.StuTransactionDocumentsInfoMapper; +import com.sztzjy.block_finance.mappers.*; import com.sztzjy.block_finance.service.StuDebtTransferStartService; +import com.sztzjy.block_finance.util.BigDecimalUtils; import com.sztzjy.block_finance.util.ConvertUtil; import com.sztzjy.block_finance.util.RsaUtil; import org.checkerframework.checker.units.qual.C; @@ -16,6 +14,9 @@ import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.UUID; @@ -35,6 +36,8 @@ public class StuDebtTransferStartServiceImpl implements StuDebtTransferStartServ StuDigitalSignatureInfoMapper stuDigitalSignatureInfoMapper; @Resource StuDigitalDebtVoucherMapper stuDigitalDebtVoucherMapper; + @Resource + stuJoinNodeMapper stuJoinNodeMapper; @Override public List debtTransferFileDisplay(String userId) { @@ -44,44 +47,22 @@ public class StuDebtTransferStartServiceImpl implements StuDebtTransferStartServ if(stuTransactionDocumentsInfoList.isEmpty()){ //查询默认数据 - StuTransactionDocumentsInfoExample example = new StuTransactionDocumentsInfoExample(); - example.createCriteria().andUserIdIsNull(); - List stuTransactionDocumentsInfos = stuTransactionDocumentsInfoMapper.selectByExample(example); - - for (int i = 0; i < stuTransactionDocumentsInfos.size(); i++) { - StuTransactionDocumentsInfo stuTransactionDocumentsInfo = stuTransactionDocumentsInfos.get(i); - Integer uuid = UUID.randomUUID().toString().replaceAll("-", "").hashCode(); - uuid = uuid < 0 ? -uuid : uuid;//String.hashCode() 值会为空 - stuTransactionDocumentsInfo.setId(uuid); - stuTransactionDocumentsInfo.setUserId(userId); - stuTransactionDocumentsInfoMapper.insert(stuTransactionDocumentsInfo); - if(stuTransactionDocumentsInfo.getDiscountDisplay()==1){ - stuTransactionDocumentsInfoList.add(stuTransactionDocumentsInfo); - } - } + List stuTransactionDocumentsInfos = this.defaultDataSettings(userId); + List stuDebtTransferDTOList = convertUtil.entityToDTOList(stuTransactionDocumentsInfos, StuDebtTransferDTO.class); + return stuDebtTransferDTOList; + }else { + List stuDebtTransferDTOList = convertUtil.entityToDTOList(stuTransactionDocumentsInfoList, StuDebtTransferDTO.class); + return stuDebtTransferDTOList; } - List stuDebtTransferDTOList = convertUtil.entityToDTOList(stuTransactionDocumentsInfoList, StuDebtTransferDTO.class); - return stuDebtTransferDTOList; } @Override - public int operate(Integer id, String operateType) { + public int operate(Integer id) { StuTransactionDocumentsInfo stuTransactionDocumentsInfo = stuTransactionDocumentsInfoMapper.selectByPrimaryKey(id); - if(operateType.equals("下载")){ - stuTransactionDocumentsInfo.setDownloadStatus(1); - } - if(operateType.equals("上传")){ - if(stuTransactionDocumentsInfo.getDownloadStatus()!=1){ - throw new ServiceException(HttpStatus.ACCEPTED,"未下载文件,无法上传"); - } - stuTransactionDocumentsInfo.setUploadStatus(1); - } - if(operateType.equals("读取")){ if(stuTransactionDocumentsInfo.getUploadStatus()!=1){ throw new ServiceException(HttpStatus.ACCEPTED,"未上传文件,无法读取"); } stuTransactionDocumentsInfo.setReadStatus(1); - } int update = stuTransactionDocumentsInfoMapper.updateByPrimaryKey(stuTransactionDocumentsInfo); return update; } @@ -139,18 +120,11 @@ public class StuDebtTransferStartServiceImpl implements StuDebtTransferStartServ List stuTransactionDocumentsInfoList = stuTransactionDocumentsInfoMapper.selectByExample(stuTransactionDocumentsInfoExample); if(stuTransactionDocumentsInfoList.isEmpty()){ - //查询默认数据 - StuTransactionDocumentsInfoExample example = new StuTransactionDocumentsInfoExample(); - example.createCriteria().andUserIdIsNull(); - List stuTransactionDocumentsInfos = stuTransactionDocumentsInfoMapper.selectByExample(example); + //设置默认数据 + List stuTransactionDocumentsInfos = this.defaultDataSettings(userId); for (int i = 0; i < stuTransactionDocumentsInfos.size(); i++) { StuTransactionDocumentsInfo stuTransactionDocumentsInfo = stuTransactionDocumentsInfos.get(i); - Integer uuid = UUID.randomUUID().toString().replaceAll("-", "").hashCode(); - uuid = uuid < 0 ? -uuid : uuid;//String.hashCode() 值会为空 - stuTransactionDocumentsInfo.setId(uuid); - stuTransactionDocumentsInfo.setUserId(userId); - stuTransactionDocumentsInfoMapper.insert(stuTransactionDocumentsInfo); if(category.equals(Constant.SUPPLIER)){ //查询供应商文件信息 if(stuTransactionDocumentsInfo.getSupplierDisplay()==1){ stuTransactionDocumentsInfoList.add(stuTransactionDocumentsInfo); @@ -268,4 +242,269 @@ public class StuDebtTransferStartServiceImpl implements StuDebtTransferStartServ stuDigitalDebtVoucherMapper.updateByPrimaryKey(stuDigitalDebtVoucher); } } + + /** + * 默认数据设置 + * @param userId 用户ID + */ + @Override + public List defaultDataSettings(String userId) { + List list=new ArrayList<>(); + String[] strings={"采购订单","开具发票","邮件确认订单","交货对账单","确认开增值税发票","信丰世嘉融资事项股东会决议", + "数字债权凭证","连带责任保证担保合同","应收账款反转让承诺书","应收账款转让明细表","应收账款转让通知书","应收账款转让通知书 回执","签署智能合约","中登网转让登记"}; + for (int i = 0; i < 14; i++) { + StuTransactionDocumentsInfo stuTransactionDocumentsInfo=new StuTransactionDocumentsInfo(); + Integer uuid = UUID.randomUUID().toString().replaceAll("-", "").hashCode(); + uuid = uuid < 0 ? -uuid : uuid;//String.hashCode() 值会为空 + + stuTransactionDocumentsInfo.setId(uuid); + stuTransactionDocumentsInfo.setFileName(strings[i]); + stuTransactionDocumentsInfo.setUserId(userId); + + if(strings[i].equals("数字资产债权凭证") || strings[i].equals("应收账款转让通知书") || strings[i].equals("签署智能合约")){ //全部展示 + stuTransactionDocumentsInfo.setDiscountDisplay(1); + stuTransactionDocumentsInfo.setSupplierDisplay(1); + stuTransactionDocumentsInfo.setFactoringCompanyDisplay(1); + } + if(i<10){ //仅发起债权转让贴现展示 + stuTransactionDocumentsInfo.setDiscountDisplay(1); + if(i<5){ + stuTransactionDocumentsInfo.setSequence(i); + } + } + if(strings[i].equals("应收账款转让通知书 回执")){ //核心企业和保理公司展示 + stuTransactionDocumentsInfo.setFactoringCompanyDisplay(1); + stuTransactionDocumentsInfo.setCoreEnterpriseDisplay(1); + } + if(strings[i].equals("中登网转让登记")){ //仅保理公司展示 + stuTransactionDocumentsInfo.setFactoringCompanyDisplay(1); + } + stuTransactionDocumentsInfo.setCreateTime(new Date()); + + list.add(stuTransactionDocumentsInfo); + stuTransactionDocumentsInfoMapper.insert(stuTransactionDocumentsInfo); + } + return list; + } + + /** + * 接收代币 + * @param userId 用户ID + */ + @Override + public void receiveTokens(String userId) { + StuDigitalDebtVoucherExample debtVoucherExample=new StuDigitalDebtVoucherExample(); + debtVoucherExample.createCriteria().andUserIdEqualTo(userId); + List stuDigitalDebtVouchers = stuDigitalDebtVoucherMapper.selectByExample(debtVoucherExample); + if(stuDigitalDebtVouchers.isEmpty()){ + throw new ServiceException(HttpStatus.ACCEPTED,"未生成数字债权凭证"); + } + StuDigitalDebtVoucher stuDigitalDebtVoucher = stuDigitalDebtVouchers.get(0); + //取出兑换代币额 + BigDecimal exchangeTokenAmount = stuDigitalDebtVoucher.getExchangeTokenAmount(); + + //查询一级供应商账户,并将兑换代币额加入资产中 + stuJoinNodeExample example=new stuJoinNodeExample(); + example.createCriteria().andUserIdEqualTo(userId).andModuleEqualTo(2); + List stuJoinNodes = stuJoinNodeMapper.selectByExample(example); + if(stuJoinNodes.isEmpty()){ + throw new ServiceException(HttpStatus.ACCEPTED,"供应商未加入节点"); + } + stuJoinNode stuJoinNode = stuJoinNodes.get(0); + stuJoinNode.setTokenAsset(exchangeTokenAmount.toString()); + //将应收账款变为0 + stuJoinNode.setAccountReceive(String.valueOf(0)); + + stuJoinNodeMapper.updateByPrimaryKey(stuJoinNode); + } + + /** + * 再贴现--签订合同 + * @param userId + * @param demandSide + * @param supplier + * @param materialName + * @param totalAmount + */ + @Override + public void redisCountContracts(String userId, String demandSide, String supplier, String materialName, BigDecimal totalAmount) { + if(!demandSide.equals(Constant.XINFENG)){ + throw new ServiceException(HttpStatus.ACCEPTED,"需方填写信息错误"); + } + if(!supplier.equals(Constant.YINBANG)){ + throw new ServiceException(HttpStatus.ACCEPTED,"供方填写信息错误"); + } + if(!materialName.equals("磁性器件")){ + throw new ServiceException(HttpStatus.ACCEPTED,"需方填写信息错误"); + } + String plainString = totalAmount.stripTrailingZeros().toPlainString(); + if(!plainString.equals("100000")){ + throw new ServiceException(HttpStatus.ACCEPTED,"需方填写信息错误"); + } + } + + /** + * 再贴现--支付代币 + * @param userId + * @param money + * @param nodeAddress + */ + @Override + public void paymentTokens(String userId, BigDecimal money, String nodeAddress) { + if(!money.equals("100000")){ + throw new ServiceException(HttpStatus.ACCEPTED,"金额填写信息错误"); + } + BigDecimalUtils bigDecimalUtils=new BigDecimalUtils(); + // TODO: 2024/4/3 1、将代币加入保理商对应账户 + stuJoinNodeExample joinNodeExample=new stuJoinNodeExample(); + joinNodeExample.createCriteria().andUserIdEqualTo(userId).andModuleEqualTo(3); + List stuJoinNodes = stuJoinNodeMapper.selectByExample(joinNodeExample); + if(stuJoinNodes.isEmpty()){ + throw new ServiceException(HttpStatus.ACCEPTED,"二级供应商未加入节点"); + } + + stuJoinNode stuJoinNode = stuJoinNodes.get(0); + + if(!nodeAddress.equals(stuJoinNode.getNodeAddress())){ + throw new ServiceException(HttpStatus.ACCEPTED,"节点地址填写信息错误"); + } + + //取出代币资产并相加 + String tokenAsset = stuJoinNode.getTokenAsset(); + BigDecimal add = bigDecimalUtils.add(tokenAsset, money.toString()); + + stuJoinNode.setTokenAsset(add.toString()); + stuJoinNodeMapper.updateByPrimaryKey(stuJoinNode); + + StuDigitalDebtVoucherExample example=new StuDigitalDebtVoucherExample(); + example.createCriteria().andUserIdEqualTo(userId); + List stuDigitalDebtVouchers = stuDigitalDebtVoucherMapper.selectByExample(example); + + + // TODO: 2024/4/3 2、将数字债权凭证剩余代币减少 + if(stuDigitalDebtVouchers.isEmpty()){ + throw new ServiceException(HttpStatus.ACCEPTED,"未生成数字债权凭证"); + } + StuDigitalDebtVoucher stuDigitalDebtVoucher = stuDigitalDebtVouchers.get(0); + //取出剩余代币 + BigDecimal remainingAmount = stuDigitalDebtVoucher.getRemainingAmount(); + //运算结果赋值到剩余代币中 + BigDecimal sub = bigDecimalUtils.sub(remainingAmount.toString(), money.toString()); + + stuDigitalDebtVoucher.setRemainingAmount(sub); + stuDigitalDebtVoucherMapper.updateByPrimaryKey(stuDigitalDebtVoucher); + + + } + + @Override + public void matureRepayment(String userId, String repaymentParty, String repaymentAccount, String paymentRecipient, String openingBank, String bankAccountNumber, BigDecimal paymentAmount) { + //查询保理公司信息 + stuJoinNodeExample joinNodeExample=new stuJoinNodeExample(); + joinNodeExample.createCriteria().andUserIdEqualTo(userId).andModuleEqualTo(4); + List stuJoinNodes = stuJoinNodeMapper.selectByExample(joinNodeExample); + if(stuJoinNodes.isEmpty()){ + throw new ServiceException(HttpStatus.ACCEPTED,"保理商未加入节点"); + } + //查询核心企业信息 + stuJoinNodeExample example=new stuJoinNodeExample(); + example.createCriteria().andUserIdEqualTo(userId).andModuleEqualTo(1); + List stuJoinNodeList = stuJoinNodeMapper.selectByExample(example); + if(stuJoinNodeList.isEmpty()){ + throw new ServiceException(HttpStatus.ACCEPTED,"核心企业未加入节点"); + } + stuJoinNode stuJoinNode = stuJoinNodes.get(0); + stuJoinNode stuJoinNode1 = stuJoinNodeList.get(0); + //判断用户是否输入正确 + if(!repaymentParty.equals(Constant.KUNMING)){ + throw new ServiceException(HttpStatus.ACCEPTED,"还款方信息填写错误"); + } + if(!repaymentAccount.equals(stuJoinNode1.getBaseAccount())){ + throw new ServiceException(HttpStatus.ACCEPTED,"还款账户信息填写错误"); + } + if(!paymentRecipient.equals(Constant.SHENZHEN)){ + throw new ServiceException(HttpStatus.ACCEPTED,"支付对象信息填写错误"); + } + if(!openingBank.equals(stuJoinNode.getBankOfDeposit())){ + throw new ServiceException(HttpStatus.ACCEPTED,"开户行信息填写错误"); + } + if(!bankAccountNumber.equals(stuJoinNode.getBaseAccount())){ + throw new ServiceException(HttpStatus.ACCEPTED,"还款方信息填写错误"); + } + String plainString = paymentAmount.stripTrailingZeros().toPlainString(); + if(!plainString.equals("406262.72")){ + throw new ServiceException(HttpStatus.ACCEPTED,"还款方信息填写错误"); + } + + //案例数据相应资金账户更新,数字债权凭证保理融资额变为0 + // TODO: 2024/4/7 1、核心企业应付账款变为0 + stuJoinNode1.setAccountPay(String.valueOf(0)); + stuJoinNodeMapper.updateByPrimaryKey(stuJoinNode1); + + // TODO: 2024/4/7 2、数字债权凭证保理融资额变为0 + StuDigitalDebtVoucherExample debtVoucherExample=new StuDigitalDebtVoucherExample(); + debtVoucherExample.createCriteria().andUserIdEqualTo(userId); + List stuDigitalDebtVouchers = stuDigitalDebtVoucherMapper.selectByExample(debtVoucherExample); + if(stuDigitalDebtVouchers.isEmpty()){ + throw new ServiceException(HttpStatus.ACCEPTED,"用户未生成债权凭证"); + } + StuDigitalDebtVoucher stuDigitalDebtVoucher = stuDigitalDebtVouchers.get(0); + stuDigitalDebtVoucher.setFactoringFinancingAmount(new BigDecimal(0)); + stuDigitalDebtVoucherMapper.updateByPrimaryKey(stuDigitalDebtVoucher); + } + + @Override + public void smartContracts(String userId) { + //智能合约执行,兑换代币额、可用代币额,数字变为0 一级供应商、二级供应商的,所有相关账户数字都是0,保理商代币资产是0 + // TODO: 2024/4/7 1、兑换代币额、可用代币额,数字变为0 + StuDigitalDebtVoucherExample debtVoucherExample=new StuDigitalDebtVoucherExample(); + debtVoucherExample.createCriteria().andUserIdEqualTo(userId); + List stuDigitalDebtVouchers = stuDigitalDebtVoucherMapper.selectByExample(debtVoucherExample); + if(stuDigitalDebtVouchers.isEmpty()){ + throw new ServiceException(HttpStatus.ACCEPTED,"用户未生成债权凭证"); + } + StuDigitalDebtVoucher stuDigitalDebtVoucher = stuDigitalDebtVouchers.get(0); + stuDigitalDebtVoucher.setExchangeTokenAmount(new BigDecimal(0)); + stuDigitalDebtVoucher.setRemainingAmount(new BigDecimal(0)); + stuDigitalDebtVoucherMapper.updateByPrimaryKey(stuDigitalDebtVoucher); + + // TODO: 2024/4/7 2、一级供应商、二级供应商的,所有相关账户数字都是0 + //查询一级供应商 + stuJoinNodeExample joinNodeExample1=new stuJoinNodeExample(); + joinNodeExample1.createCriteria().andUserIdEqualTo(userId).andModuleEqualTo(2); + List stuJoinNodes1 = stuJoinNodeMapper.selectByExample(joinNodeExample1); + if(stuJoinNodes1.isEmpty()){ + throw new ServiceException(HttpStatus.ACCEPTED,"一级供应商未加入节点"); + } + stuJoinNode stuJoinNode1 = stuJoinNodes1.get(0); + stuJoinNode1.setAccountReceive(String.valueOf(0)); + stuJoinNode1.setAccountPay(String.valueOf(0)); + stuJoinNode1.setTokenAsset(String.valueOf(0)); + stuJoinNodeMapper.updateByPrimaryKey(stuJoinNode1); + + //查询二级供应商 + stuJoinNodeExample joinNodeExample2=new stuJoinNodeExample(); + joinNodeExample2.createCriteria().andUserIdEqualTo(userId).andModuleEqualTo(3); + List stuJoinNodes2 = stuJoinNodeMapper.selectByExample(joinNodeExample2); + if(stuJoinNodes2.isEmpty()){ + throw new ServiceException(HttpStatus.ACCEPTED,"二级供应商未加入节点"); + } + stuJoinNode stuJoinNode2 = stuJoinNodes2.get(0); + stuJoinNode2.setAccountReceive(String.valueOf(0)); + stuJoinNode2.setAccountPay(String.valueOf(0)); + stuJoinNode2.setTokenAsset(String.valueOf(0)); + stuJoinNodeMapper.updateByPrimaryKey(stuJoinNode2); + + // TODO: 2024/4/7 3、保理商代币资产是0 + //查询保理商 + stuJoinNodeExample joinNodeExample=new stuJoinNodeExample(); + joinNodeExample.createCriteria().andUserIdEqualTo(userId).andModuleEqualTo(4); + List stuJoinNodes = stuJoinNodeMapper.selectByExample(joinNodeExample); + if(stuJoinNodes.isEmpty()){ + throw new ServiceException(HttpStatus.ACCEPTED,"保理商未加入节点"); + } + stuJoinNode stuJoinNode = stuJoinNodes.get(0); + stuJoinNode.setTokenAsset(String.valueOf(0)); + stuJoinNodeMapper.updateByPrimaryKey(stuJoinNode); + } } diff --git a/BlockFinanceCentral/src/main/resources/mappers/StuDigitalDebtVoucherMapper.xml b/BlockFinanceCentral/src/main/resources/mappers/StuDigitalDebtVoucherMapper.xml new file mode 100644 index 0000000..d3a4468 --- /dev/null +++ b/BlockFinanceCentral/src/main/resources/mappers/StuDigitalDebtVoucherMapper.xml @@ -0,0 +1,529 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, hash_code, issuing_part, issuing_public_key, certificate_part, certificate_part_public_key, + acceptor_part, acceptor_part_public_key, bond_amount, bond_amount_up, note, date_confirm, + signature_confirm, create_time, update_time, excessive, user_id, encry_state, decry_state, + supplier_digital_signature, import_factor_digital_signature, core_enterprises_digital_signature, + factoring_financing_amount, exchange_token_amount, remaining_amount + + + + + delete from stu_digital_debt_voucher + where id = #{id,jdbcType=VARCHAR} + + + delete from stu_digital_debt_voucher + + + + + + insert into stu_digital_debt_voucher (id, hash_code, issuing_part, + issuing_public_key, certificate_part, certificate_part_public_key, + acceptor_part, acceptor_part_public_key, bond_amount, + bond_amount_up, note, date_confirm, + signature_confirm, create_time, update_time, + excessive, user_id, encry_state, + decry_state, supplier_digital_signature, import_factor_digital_signature, + core_enterprises_digital_signature, factoring_financing_amount, + exchange_token_amount, remaining_amount) + values (#{id,jdbcType=VARCHAR}, #{hashCode,jdbcType=VARCHAR}, #{issuingPart,jdbcType=VARCHAR}, + #{issuingPublicKey,jdbcType=VARCHAR}, #{certificatePart,jdbcType=VARCHAR}, #{certificatePartPublicKey,jdbcType=VARCHAR}, + #{acceptorPart,jdbcType=VARCHAR}, #{acceptorPartPublicKey,jdbcType=VARCHAR}, #{bondAmount,jdbcType=VARCHAR}, + #{bondAmountUp,jdbcType=VARCHAR}, #{note,jdbcType=VARCHAR}, #{dateConfirm,jdbcType=TIMESTAMP}, + #{signatureConfirm,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}, + #{excessive,jdbcType=VARCHAR}, #{userId,jdbcType=VARCHAR}, #{encryState,jdbcType=INTEGER}, + #{decryState,jdbcType=INTEGER}, #{supplierDigitalSignature,jdbcType=VARCHAR}, #{importFactorDigitalSignature,jdbcType=VARCHAR}, + #{coreEnterprisesDigitalSignature,jdbcType=VARCHAR}, #{factoringFinancingAmount,jdbcType=DECIMAL}, + #{exchangeTokenAmount,jdbcType=DECIMAL}, #{remainingAmount,jdbcType=DECIMAL}) + + + insert into stu_digital_debt_voucher + + + id, + + + hash_code, + + + issuing_part, + + + issuing_public_key, + + + certificate_part, + + + certificate_part_public_key, + + + acceptor_part, + + + acceptor_part_public_key, + + + bond_amount, + + + bond_amount_up, + + + note, + + + date_confirm, + + + signature_confirm, + + + create_time, + + + update_time, + + + excessive, + + + user_id, + + + encry_state, + + + decry_state, + + + supplier_digital_signature, + + + import_factor_digital_signature, + + + core_enterprises_digital_signature, + + + factoring_financing_amount, + + + exchange_token_amount, + + + remaining_amount, + + + + + #{id,jdbcType=VARCHAR}, + + + #{hashCode,jdbcType=VARCHAR}, + + + #{issuingPart,jdbcType=VARCHAR}, + + + #{issuingPublicKey,jdbcType=VARCHAR}, + + + #{certificatePart,jdbcType=VARCHAR}, + + + #{certificatePartPublicKey,jdbcType=VARCHAR}, + + + #{acceptorPart,jdbcType=VARCHAR}, + + + #{acceptorPartPublicKey,jdbcType=VARCHAR}, + + + #{bondAmount,jdbcType=VARCHAR}, + + + #{bondAmountUp,jdbcType=VARCHAR}, + + + #{note,jdbcType=VARCHAR}, + + + #{dateConfirm,jdbcType=TIMESTAMP}, + + + #{signatureConfirm,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{updateTime,jdbcType=TIMESTAMP}, + + + #{excessive,jdbcType=VARCHAR}, + + + #{userId,jdbcType=VARCHAR}, + + + #{encryState,jdbcType=INTEGER}, + + + #{decryState,jdbcType=INTEGER}, + + + #{supplierDigitalSignature,jdbcType=VARCHAR}, + + + #{importFactorDigitalSignature,jdbcType=VARCHAR}, + + + #{coreEnterprisesDigitalSignature,jdbcType=VARCHAR}, + + + #{factoringFinancingAmount,jdbcType=DECIMAL}, + + + #{exchangeTokenAmount,jdbcType=DECIMAL}, + + + #{remainingAmount,jdbcType=DECIMAL}, + + + + + + update stu_digital_debt_voucher + + + id = #{record.id,jdbcType=VARCHAR}, + + + hash_code = #{record.hashCode,jdbcType=VARCHAR}, + + + issuing_part = #{record.issuingPart,jdbcType=VARCHAR}, + + + issuing_public_key = #{record.issuingPublicKey,jdbcType=VARCHAR}, + + + certificate_part = #{record.certificatePart,jdbcType=VARCHAR}, + + + certificate_part_public_key = #{record.certificatePartPublicKey,jdbcType=VARCHAR}, + + + acceptor_part = #{record.acceptorPart,jdbcType=VARCHAR}, + + + acceptor_part_public_key = #{record.acceptorPartPublicKey,jdbcType=VARCHAR}, + + + bond_amount = #{record.bondAmount,jdbcType=VARCHAR}, + + + bond_amount_up = #{record.bondAmountUp,jdbcType=VARCHAR}, + + + note = #{record.note,jdbcType=VARCHAR}, + + + date_confirm = #{record.dateConfirm,jdbcType=TIMESTAMP}, + + + signature_confirm = #{record.signatureConfirm,jdbcType=VARCHAR}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + update_time = #{record.updateTime,jdbcType=TIMESTAMP}, + + + excessive = #{record.excessive,jdbcType=VARCHAR}, + + + user_id = #{record.userId,jdbcType=VARCHAR}, + + + encry_state = #{record.encryState,jdbcType=INTEGER}, + + + decry_state = #{record.decryState,jdbcType=INTEGER}, + + + supplier_digital_signature = #{record.supplierDigitalSignature,jdbcType=VARCHAR}, + + + import_factor_digital_signature = #{record.importFactorDigitalSignature,jdbcType=VARCHAR}, + + + core_enterprises_digital_signature = #{record.coreEnterprisesDigitalSignature,jdbcType=VARCHAR}, + + + factoring_financing_amount = #{record.factoringFinancingAmount,jdbcType=DECIMAL}, + + + exchange_token_amount = #{record.exchangeTokenAmount,jdbcType=DECIMAL}, + + + remaining_amount = #{record.remainingAmount,jdbcType=DECIMAL}, + + + + + + + + update stu_digital_debt_voucher + set id = #{record.id,jdbcType=VARCHAR}, + hash_code = #{record.hashCode,jdbcType=VARCHAR}, + issuing_part = #{record.issuingPart,jdbcType=VARCHAR}, + issuing_public_key = #{record.issuingPublicKey,jdbcType=VARCHAR}, + certificate_part = #{record.certificatePart,jdbcType=VARCHAR}, + certificate_part_public_key = #{record.certificatePartPublicKey,jdbcType=VARCHAR}, + acceptor_part = #{record.acceptorPart,jdbcType=VARCHAR}, + acceptor_part_public_key = #{record.acceptorPartPublicKey,jdbcType=VARCHAR}, + bond_amount = #{record.bondAmount,jdbcType=VARCHAR}, + bond_amount_up = #{record.bondAmountUp,jdbcType=VARCHAR}, + note = #{record.note,jdbcType=VARCHAR}, + date_confirm = #{record.dateConfirm,jdbcType=TIMESTAMP}, + signature_confirm = #{record.signatureConfirm,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + update_time = #{record.updateTime,jdbcType=TIMESTAMP}, + excessive = #{record.excessive,jdbcType=VARCHAR}, + user_id = #{record.userId,jdbcType=VARCHAR}, + encry_state = #{record.encryState,jdbcType=INTEGER}, + decry_state = #{record.decryState,jdbcType=INTEGER}, + supplier_digital_signature = #{record.supplierDigitalSignature,jdbcType=VARCHAR}, + import_factor_digital_signature = #{record.importFactorDigitalSignature,jdbcType=VARCHAR}, + core_enterprises_digital_signature = #{record.coreEnterprisesDigitalSignature,jdbcType=VARCHAR}, + factoring_financing_amount = #{record.factoringFinancingAmount,jdbcType=DECIMAL}, + exchange_token_amount = #{record.exchangeTokenAmount,jdbcType=DECIMAL}, + remaining_amount = #{record.remainingAmount,jdbcType=DECIMAL} + + + + + + update stu_digital_debt_voucher + + + hash_code = #{hashCode,jdbcType=VARCHAR}, + + + issuing_part = #{issuingPart,jdbcType=VARCHAR}, + + + issuing_public_key = #{issuingPublicKey,jdbcType=VARCHAR}, + + + certificate_part = #{certificatePart,jdbcType=VARCHAR}, + + + certificate_part_public_key = #{certificatePartPublicKey,jdbcType=VARCHAR}, + + + acceptor_part = #{acceptorPart,jdbcType=VARCHAR}, + + + acceptor_part_public_key = #{acceptorPartPublicKey,jdbcType=VARCHAR}, + + + bond_amount = #{bondAmount,jdbcType=VARCHAR}, + + + bond_amount_up = #{bondAmountUp,jdbcType=VARCHAR}, + + + note = #{note,jdbcType=VARCHAR}, + + + date_confirm = #{dateConfirm,jdbcType=TIMESTAMP}, + + + signature_confirm = #{signatureConfirm,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + excessive = #{excessive,jdbcType=VARCHAR}, + + + user_id = #{userId,jdbcType=VARCHAR}, + + + encry_state = #{encryState,jdbcType=INTEGER}, + + + decry_state = #{decryState,jdbcType=INTEGER}, + + + supplier_digital_signature = #{supplierDigitalSignature,jdbcType=VARCHAR}, + + + import_factor_digital_signature = #{importFactorDigitalSignature,jdbcType=VARCHAR}, + + + core_enterprises_digital_signature = #{coreEnterprisesDigitalSignature,jdbcType=VARCHAR}, + + + factoring_financing_amount = #{factoringFinancingAmount,jdbcType=DECIMAL}, + + + exchange_token_amount = #{exchangeTokenAmount,jdbcType=DECIMAL}, + + + remaining_amount = #{remainingAmount,jdbcType=DECIMAL}, + + + where id = #{id,jdbcType=VARCHAR} + + + update stu_digital_debt_voucher + set hash_code = #{hashCode,jdbcType=VARCHAR}, + issuing_part = #{issuingPart,jdbcType=VARCHAR}, + issuing_public_key = #{issuingPublicKey,jdbcType=VARCHAR}, + certificate_part = #{certificatePart,jdbcType=VARCHAR}, + certificate_part_public_key = #{certificatePartPublicKey,jdbcType=VARCHAR}, + acceptor_part = #{acceptorPart,jdbcType=VARCHAR}, + acceptor_part_public_key = #{acceptorPartPublicKey,jdbcType=VARCHAR}, + bond_amount = #{bondAmount,jdbcType=VARCHAR}, + bond_amount_up = #{bondAmountUp,jdbcType=VARCHAR}, + note = #{note,jdbcType=VARCHAR}, + date_confirm = #{dateConfirm,jdbcType=TIMESTAMP}, + signature_confirm = #{signatureConfirm,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + update_time = #{updateTime,jdbcType=TIMESTAMP}, + excessive = #{excessive,jdbcType=VARCHAR}, + user_id = #{userId,jdbcType=VARCHAR}, + encry_state = #{encryState,jdbcType=INTEGER}, + decry_state = #{decryState,jdbcType=INTEGER}, + supplier_digital_signature = #{supplierDigitalSignature,jdbcType=VARCHAR}, + import_factor_digital_signature = #{importFactorDigitalSignature,jdbcType=VARCHAR}, + core_enterprises_digital_signature = #{coreEnterprisesDigitalSignature,jdbcType=VARCHAR}, + factoring_financing_amount = #{factoringFinancingAmount,jdbcType=DECIMAL}, + exchange_token_amount = #{exchangeTokenAmount,jdbcType=DECIMAL}, + remaining_amount = #{remainingAmount,jdbcType=DECIMAL} + where id = #{id,jdbcType=VARCHAR} + + \ No newline at end of file diff --git a/BlockFinanceCentral/src/main/resources/mappers/StuTransactionDocumentsInfoMapper.xml b/BlockFinanceCentral/src/main/resources/mappers/StuTransactionDocumentsInfoMapper.xml index 37a03f5..82b198d 100644 --- a/BlockFinanceCentral/src/main/resources/mappers/StuTransactionDocumentsInfoMapper.xml +++ b/BlockFinanceCentral/src/main/resources/mappers/StuTransactionDocumentsInfoMapper.xml @@ -14,9 +14,13 @@ + + + + @@ -86,9 +90,10 @@ id, file_name, url, upload_status, information_status, information_status_encry, signature_verification_status_encry, signature_verification_status, user_id, discount_display, - supplier_display, core_enterprise_display, core_enterprise_receive_status, factoring_company_display, - factoring_companies_receive_status, read_status, download_status, create_time, update_time, - cryp_digest, information_ciphertext, sequence + supplier_display, core_enterprise_display, core_enterprise_download_status, core_enterprise_upload_status, + core_enterprise_receive_status, factoring_company_display, factoring_companies_receive_status, + factoring_download_status, factoring_upload_status, read_status, download_status, + create_time, update_time, cryp_digest, information_ciphertext, sequence