he2802 2 жил өмнө
parent
commit
2becd0e8af

+ 17 - 7
zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java

@@ -16,6 +16,7 @@ import com.zhongzheng.common.core.page.TableDataInfo;
 import com.zhongzheng.common.enums.BusinessType;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.type.EncryptHandler;
+import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.common.utils.file.FileUploadUtils;
@@ -66,6 +67,7 @@ import com.zhongzheng.modules.order.service.IOrderGoodsRefundService;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.order.service.IOrderService;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
+import com.zhongzheng.modules.sdk.service.IZsBankService;
 import com.zhongzheng.modules.system.bo.SysTenantAdminBo;
 import com.zhongzheng.modules.system.bo.SysTenantAdminOldBo;
 import com.zhongzheng.modules.system.bo.SysTenantQueryBo;
@@ -157,15 +159,13 @@ public class CommonController extends BaseController {
     @Autowired
     private IClassGradeUserService iClassGradeUserService;
 
-    @Autowired
-    private IExamService iExamService;
 
-    @Autowired
-    private IQuestionOtherService iQuestionOtherService;
-    @Autowired
-    private OssService ossService;
     @Autowired
     private ICertificateTpService iCertificateTpService;
+
+
+    @Autowired
+    private IZsBankService iZsBankService;
     /**
      * 通用下载请求
      *
@@ -780,7 +780,7 @@ public class CommonController extends BaseController {
         return AjaxResult.success(iClassGradeUserService.pushOfficialPeriodMore(list));
     }
 
-   
+
 
     @ApiOperation("测试获取山东题库")
     @PreAuthorize("@ss.hasPermi('system:withdrawal:add')")
@@ -791,6 +791,16 @@ public class CommonController extends BaseController {
         return AjaxResult.success();
     }
 
+    @ApiOperation("测试网银")
+    @PreAuthorize("@ss.hasPermi('system:withdrawal:add')")
+    @Log(title = "测试网银", businessType = BusinessType.INSERT)
+    @GetMapping("/common/free/zsBank")
+    public AjaxResult zsBank() {
+        String date = DateUtils.dateTimeNow("yyyyMMdd");
+        System.out.println(iZsBankService.searchBreakPoint(null,"755915680210507",date,date));
+        return AjaxResult.success();
+    }
+
 
 
     @ApiOperation("旧系统post请求")

+ 73 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/bo/TopBankBillAddBo.java

@@ -0,0 +1,73 @@
+package com.zhongzheng.modules.sdk.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+import java.math.BigDecimal;
+
+/**
+ * 银行账单添加对象 top_bank_bill
+ *
+ * @author ruoyi
+ * @date 2023-11-15
+ */
+@Data
+@ApiModel("银行账单添加对象")
+public class TopBankBillAddBo {
+
+    /** 余额 */
+    @ApiModelProperty("余额")
+    private BigDecimal acctOnlineBal;
+    /** 添加时间 */
+    @ApiModelProperty("添加时间")
+    private Long createTime;
+    /** 修改时间 */
+    @ApiModelProperty("修改时间")
+    private Long updateTime;
+    /** 状态 1正常 0关闭 */
+    @ApiModelProperty("状态 1正常 0关闭")
+    private Integer status;
+    /** 收付方名称 */
+    @ApiModelProperty("收付方名称")
+    private String ctpAcctName;
+    /** 收付方帐号 */
+    @ApiModelProperty("收付方帐号")
+    private String ctpAcctNbr;
+    /** 收付方开户行地址 */
+    @ApiModelProperty("收付方开户行地址")
+    private String ctpBankAddress;
+    /** 收付方开户行行名 */
+    @ApiModelProperty("收付方开户行行名")
+    private String ctpBankName;
+    /** 扩展摘要 */
+    @ApiModelProperty("扩展摘要")
+    private String extendedRemark;
+
+    @ApiModelProperty("")
+    private String infoFlag;
+    /** 你方摘要 */
+    @ApiModelProperty("你方摘要")
+    private String remarkTextClt;
+    /** 交易金额 */
+    @ApiModelProperty("交易金额")
+    private BigDecimal transAmount;
+    /** 交易日 */
+    @ApiModelProperty("交易日")
+    private String transDate;
+    /** 流水号 */
+    @ApiModelProperty("流水号")
+    private String transSequenceIdn;
+    /** 交易时间 */
+    @ApiModelProperty("交易时间")
+    private String transTime;
+    /** 起息日 */
+    @ApiModelProperty("起息日")
+    private String valueDate;
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private String result;
+}

+ 88 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/bo/TopBankBillEditBo.java

@@ -0,0 +1,88 @@
+package com.zhongzheng.modules.sdk.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+import java.math.BigDecimal;
+
+/**
+ * 银行账单编辑对象 top_bank_bill
+ *
+ * @author ruoyi
+ * @date 2023-11-15
+ */
+@Data
+@ApiModel("银行账单编辑对象")
+public class TopBankBillEditBo {
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long id;
+
+    /** 余额 */
+    @ApiModelProperty("余额")
+    private BigDecimal acctOnlineBal;
+
+    /** 修改时间 */
+    @ApiModelProperty("修改时间")
+    private Long updateTime;
+
+    /** 状态 1正常 0关闭 */
+    @ApiModelProperty("状态 1正常 0关闭")
+    private Integer status;
+
+    /** 收付方名称 */
+    @ApiModelProperty("收付方名称")
+    private String ctpAcctName;
+
+    /** 收付方帐号 */
+    @ApiModelProperty("收付方帐号")
+    private String ctpAcctNbr;
+
+    /** 收付方开户行地址 */
+    @ApiModelProperty("收付方开户行地址")
+    private String ctpBankAddress;
+
+    /** 收付方开户行行名 */
+    @ApiModelProperty("收付方开户行行名")
+    private String ctpBankName;
+
+    /** 扩展摘要 */
+    @ApiModelProperty("扩展摘要")
+    private String extendedRemark;
+
+    @ApiModelProperty("")
+    private String infoFlag;
+
+    /** 你方摘要 */
+    @ApiModelProperty("你方摘要")
+    private String remarkTextClt;
+
+    /** 交易金额 */
+    @ApiModelProperty("交易金额")
+    private BigDecimal transAmount;
+
+    /** 交易日 */
+    @ApiModelProperty("交易日")
+    private String transDate;
+
+    /** 流水号 */
+    @ApiModelProperty("流水号")
+    private String transSequenceIdn;
+
+    /** 交易时间 */
+    @ApiModelProperty("交易时间")
+    private String transTime;
+
+    /** 起息日 */
+    @ApiModelProperty("起息日")
+    private String valueDate;
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private String result;
+
+}

+ 85 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/bo/TopBankBillQueryBo.java

@@ -0,0 +1,85 @@
+package com.zhongzheng.modules.sdk.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.HashMap;
+
+import java.math.BigDecimal;
+import com.zhongzheng.common.core.domain.BaseEntity;
+
+/**
+ * 银行账单分页查询对象 top_bank_bill
+ *
+ * @author ruoyi
+ * @date 2023-11-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("银行账单分页查询对象")
+public class TopBankBillQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** 余额 */
+	@ApiModelProperty("余额")
+	private BigDecimal acctOnlineBal;
+	/** 状态 1正常 0关闭 */
+	@ApiModelProperty("状态 1正常 0关闭")
+	private Integer status;
+	/** 收付方名称 */
+	@ApiModelProperty("收付方名称")
+	private String ctpAcctName;
+	/** 收付方帐号 */
+	@ApiModelProperty("收付方帐号")
+	private String ctpAcctNbr;
+	/** 收付方开户行地址 */
+	@ApiModelProperty("收付方开户行地址")
+	private String ctpBankAddress;
+	/** 收付方开户行行名 */
+	@ApiModelProperty("收付方开户行行名")
+	private String ctpBankName;
+	/** 扩展摘要 */
+	@ApiModelProperty("扩展摘要")
+	private String extendedRemark;
+
+	@ApiModelProperty("")
+	private String infoFlag;
+	/** 你方摘要 */
+	@ApiModelProperty("你方摘要")
+	private String remarkTextClt;
+	/** 交易金额 */
+	@ApiModelProperty("交易金额")
+	private BigDecimal transAmount;
+	/** 交易日 */
+	@ApiModelProperty("交易日")
+	private String transDate;
+	/** 流水号 */
+	@ApiModelProperty("流水号")
+	private String transSequenceIdn;
+	/** 交易时间 */
+	@ApiModelProperty("交易时间")
+	private String transTime;
+	/** 起息日 */
+	@ApiModelProperty("起息日")
+	private String valueDate;
+	/** $column.columnComment */
+	@ApiModelProperty("$column.columnComment")
+	private String result;
+}

+ 73 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/domain/TopBankBill.java

@@ -0,0 +1,73 @@
+package com.zhongzheng.modules.sdk.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.zhongzheng.common.annotation.Excel;
+
+/**
+ * 银行账单对象 top_bank_bill
+ *
+ * @author ruoyi
+ * @date 2023-11-15
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("top_bank_bill")
+public class TopBankBill implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    /** $column.columnComment */
+    @TableId(value = "id")
+    private Long id;
+    /** 余额 */
+    private BigDecimal acctOnlineBal;
+    /** 添加时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 修改时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** 状态 1正常 0关闭 */
+    private Integer status;
+    /** 收付方名称 */
+    private String ctpAcctName;
+    /** 收付方帐号 */
+    private String ctpAcctNbr;
+    /** 收付方开户行地址 */
+    private String ctpBankAddress;
+    /** 收付方开户行行名 */
+    private String ctpBankName;
+    /** 扩展摘要 */
+    private String extendedRemark;
+    /** 用于标识收/付方帐号和母/子公司的信息。
+
+为空表示付方帐号和子公司;
+
+为“1”表示收方帐号和子公司;
+
+为“2”表示收方帐号和母公司;
+
+为“3”表示原收方帐号和子公司; */
+    private String infoFlag;
+    /** 你方摘要 */
+    private String remarkTextClt;
+    /** 交易金额 */
+    private BigDecimal transAmount;
+    /** 交易日 */
+    private String transDate;
+    /** 流水号 */
+    private String transSequenceIdn;
+    /** 交易时间 */
+    private String transTime;
+    /** 起息日 */
+    private String valueDate;
+    /** $column.columnComment */
+    private String result;
+}

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/mapper/TopBankBillMapper.java

@@ -0,0 +1,14 @@
+package com.zhongzheng.modules.sdk.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.sdk.domain.TopBankBill;
+
+/**
+ * 银行账单Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-11-15
+ */
+public interface TopBankBillMapper extends BaseMapper<TopBankBill> {
+
+}

+ 53 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/ITopBankBillService.java

@@ -0,0 +1,53 @@
+package com.zhongzheng.modules.sdk.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.sdk.bo.TopBankBillAddBo;
+import com.zhongzheng.modules.sdk.bo.TopBankBillEditBo;
+import com.zhongzheng.modules.sdk.bo.TopBankBillQueryBo;
+import com.zhongzheng.modules.sdk.domain.TopBankBill;
+import com.zhongzheng.modules.sdk.vo.TopBankBillVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 银行账单Service接口
+ *
+ * @author ruoyi
+ * @date 2023-11-15
+ */
+public interface ITopBankBillService extends IService<TopBankBill> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	TopBankBillVo queryById(Long id);
+
+	/**
+	 * 查询列表
+	 */
+	List<TopBankBillVo> queryList(TopBankBillQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入银行账单
+	 * @param bo 银行账单新增业务对象
+	 * @return
+	 */
+	Boolean insertByAddBo(TopBankBillAddBo bo);
+
+	/**
+	 * 根据编辑业务对象修改银行账单
+	 * @param bo 银行账单编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(TopBankBillEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/IZsBankService.java

@@ -4,6 +4,6 @@ package com.zhongzheng.modules.sdk.service;
 
 public interface IZsBankService {
 
-    Boolean testSearch();
+    Boolean searchBreakPoint(String queryAcctNbr,String cardNbr,String beginDate,String endDate);
 
 }

+ 112 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/impl/TopBankBillServiceImpl.java

@@ -0,0 +1,112 @@
+package com.zhongzheng.modules.sdk.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.sdk.bo.TopBankBillAddBo;
+import com.zhongzheng.modules.sdk.bo.TopBankBillEditBo;
+import com.zhongzheng.modules.sdk.bo.TopBankBillQueryBo;
+import com.zhongzheng.modules.sdk.domain.TopBankBill;
+import com.zhongzheng.modules.sdk.mapper.TopBankBillMapper;
+import com.zhongzheng.modules.sdk.service.ITopBankBillService;
+import com.zhongzheng.modules.sdk.vo.TopBankBillVo;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.pagehelper.Page;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 银行账单Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-11-15
+ */
+@Service
+public class TopBankBillServiceImpl extends ServiceImpl<TopBankBillMapper, TopBankBill> implements ITopBankBillService {
+
+    @Override
+    public TopBankBillVo queryById(Long id){
+        TopBankBill db = this.baseMapper.selectById(id);
+        return BeanUtil.toBean(db, TopBankBillVo.class);
+    }
+
+    @Override
+    public List<TopBankBillVo> queryList(TopBankBillQueryBo bo) {
+        LambdaQueryWrapper<TopBankBill> lqw = Wrappers.lambdaQuery();
+        lqw.eq(bo.getAcctOnlineBal() != null, TopBankBill::getAcctOnlineBal, bo.getAcctOnlineBal());
+        lqw.eq(bo.getStatus() != null, TopBankBill::getStatus, bo.getStatus());
+        lqw.like(StrUtil.isNotBlank(bo.getCtpAcctName()), TopBankBill::getCtpAcctName, bo.getCtpAcctName());
+        lqw.eq(StrUtil.isNotBlank(bo.getCtpAcctNbr()), TopBankBill::getCtpAcctNbr, bo.getCtpAcctNbr());
+        lqw.eq(StrUtil.isNotBlank(bo.getCtpBankAddress()), TopBankBill::getCtpBankAddress, bo.getCtpBankAddress());
+        lqw.like(StrUtil.isNotBlank(bo.getCtpBankName()), TopBankBill::getCtpBankName, bo.getCtpBankName());
+        lqw.eq(StrUtil.isNotBlank(bo.getExtendedRemark()), TopBankBill::getExtendedRemark, bo.getExtendedRemark());
+        lqw.eq(StrUtil.isNotBlank(bo.getInfoFlag()), TopBankBill::getInfoFlag, bo.getInfoFlag());
+        lqw.eq(StrUtil.isNotBlank(bo.getRemarkTextClt()), TopBankBill::getRemarkTextClt, bo.getRemarkTextClt());
+        lqw.eq(bo.getTransAmount() != null, TopBankBill::getTransAmount, bo.getTransAmount());
+        lqw.eq(StrUtil.isNotBlank(bo.getTransDate()), TopBankBill::getTransDate, bo.getTransDate());
+        lqw.eq(StrUtil.isNotBlank(bo.getTransSequenceIdn()), TopBankBill::getTransSequenceIdn, bo.getTransSequenceIdn());
+        lqw.eq(StrUtil.isNotBlank(bo.getTransTime()), TopBankBill::getTransTime, bo.getTransTime());
+        lqw.eq(StrUtil.isNotBlank(bo.getValueDate()), TopBankBill::getValueDate, bo.getValueDate());
+        lqw.eq(StrUtil.isNotBlank(bo.getResult()), TopBankBill::getResult, bo.getResult());
+        return entity2Vo(this.list(lqw));
+    }
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<TopBankBillVo> entity2Vo(Collection<TopBankBill> collection) {
+        List<TopBankBillVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, TopBankBillVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<TopBankBill> page = (Page<TopBankBill>)collection;
+            Page<TopBankBillVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    public Boolean insertByAddBo(TopBankBillAddBo bo) {
+        TopBankBill add = BeanUtil.toBean(bo, TopBankBill.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        return this.save(add);
+    }
+
+    @Override
+    public Boolean updateByEditBo(TopBankBillEditBo bo) {
+        TopBankBill update = BeanUtil.toBean(bo, TopBankBill.class);
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(TopBankBill entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+}

+ 68 - 55
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/impl/ZsBankServiceImpl.java

@@ -1,14 +1,19 @@
 package com.zhongzheng.modules.sdk.service.impl;
 
 import cn.hutool.core.lang.Validator;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.google.gson.GsonBuilder;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.bank.DCCryptor;
 import com.zhongzheng.common.utils.bank.DCHelper;
+import com.zhongzheng.modules.exam.bo.ExamApplySiteTimeTwoAddBo;
+import com.zhongzheng.modules.sdk.bo.TopBankBillAddBo;
+import com.zhongzheng.modules.sdk.service.ITopBankBillService;
 import com.zhongzheng.modules.sdk.service.IZsBankService;
 import com.zhongzheng.modules.sdk.service.NuonuoService;
 import nuonuo.open.sdk.NNOpenSDK;
@@ -25,85 +30,88 @@ import java.net.URLEncoder;
 @Service
 public class ZsBankServiceImpl implements IZsBankService {
     private static final Logger LOGGER = LoggerFactory.getLogger(ZsBankServiceImpl.class);
-    @Value("${ZsBank.publickey}")
+ /*   @Value("${ZsBank.publickey}")
     private String publickey;
     @Value("${ZsBank.privatekey}")
-    private String privatekey;
+    private String privatekey;*/
 
     private static Base64.Encoder encoder = Base64.getEncoder();
     private static Base64.Decoder decoder = Base64.getDecoder();
 
     private static final String ALG_SM = "SM"; // 采用国密算法
 
-    private static String UID = "N002463262"; // 测试的用户编号
+    private static String UID = "N002463271"; // 测试的用户编号
 
     private static String URL = "http://cdctest.cmburl.cn:80/cdcserver/api/v2"; // 银行服务地址(测试)
-    private static String bankpubkey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5Ec7viMyQC5SShRz1jP0IQRLLVGDQ4f1rgZwtxT4ZOgnWxUoAHquj2yIrgFjNpWVnt/1dJGtXWkpp2UN3jMI5ubjVQkL0OFD+8r0IFXYAARsCLAwVLF0LE487KvVRaQC7A7rPlFfBtE/v++KajzMuDauNlIASYobcFKYdZ89vIfE/xMg/44QJqQ2XBkoMnJ7ul0kMdh4YWOQnO0qqvXD2eK3KPaXMRtxieGsVBgsvtETprw98bTl9tPUBUrneyirrccS8/Z6raV6nioyx2RzrMld8YnjlnV2YTJpNAlG+y/wLoKY55Rkjcvg9wSe8qbI/VtYVQfQz8gfeUzFQTKKCwIDAQAB"; // 银行公钥
-
-    private static String privkey = "MIIEowIBAAKCAQEAwN7xTseqQs1pNA/+gTgXRqcxCYfkxDTsckfqf3O2ndsvJS5T\n" +
-            "8Fb0oHTyjy0HjrKLASWWUKfhQGXPHbo1FQd+0TyHxSza55+HtXquUq7QsAITHCu3\n" +
-            "U7aslvC7xe6/2E7nhu1TausF1nSyB1o4xVEjZyjrdQpTID0JvG8BtA5Yem9YDBCM\n" +
-            "ZHBxvarQHVqdBsqo2G3M09qeUDbY3DuBgdiVAw0ApIM8mKGj4jsWmRSnypuxl40B\n" +
-            "jWAr6Xgk44MpSGHndhiFXGvfMRRYEd8Z30w32QlB+Gjk8rQwXnvxG8YCBPYqXVkq\n" +
-            "wld81bHFFz5zHQ0qekPhD8RrFimPn+RaD9VNfwIDAQABAoIBAQCxUUZQw0hJOkgq\n" +
-            "UToO2t6rWjK/LGyp5m4rcuqoWl3eKxDhAgKxx4AHtPz7nM6B5qvdVg0oAfAZIICW\n" +
-            "OAdtWgLBowC/yklHAWfm9O8nnQjHiGDBWX+mOx/ZdWFsy98cow5BAhfbCE/Jpme2\n" +
-            "UsA2yC3gPcKbS+64iOVWlEfgnf/CLte/dE0eAMfsp5wXpwv3ygA4wtyd2X2P+y6s\n" +
-            "+WYBKSvNMS08W4dsxwU9Q3AG3hS0Uab09qIPNS8tEMZ2L1tl0/VvkrAYjayM1CcK\n" +
-            "CrSnwtH6eJVi4WQxL1K3QxyxDKucsOlqSHg++4VMpGZNpvstn3IsY3PyCgfsODvH\n" +
-            "aoygvDBhAoGBAPxxdcI9stK9bIGSms0FqbVXYj8WmAjE/M9B7ECToWRQg65Gf8MY\n" +
-            "PyUSkY2mbDHwf+yPsUb5Oli+a2GW8BwmJWeXEIy0lQxa1TS2b7CN6XJtZVnjEgiZ\n" +
-            "d7bXy/j69r/C4CMlfbrRWnUGftKr/U7ynaGs10/bISeW12E7WdLV5+kDAoGBAMOW\n" +
-            "nEzAFMPFzG9p/GtYpWU5jMNSiakzfm6n9Nwr7dFGnLhVGtO6act1bm/WB26NAgIE\n" +
-            "ArhcitoKrI346nfkoZLXBpzzyJgFx4r31d1RN9Vsrt6AEywlwnLwHk2HXtCwmqre\n" +
-            "hZ4I741S2rHlaT8ifNwLyjW2sbw9QnpC3RL7R3rVAoGAOI/Dbs4cLxO6KB4NCTrn\n" +
-            "l3YI0VHiprRcYKPIp39sfel8V6P8JF5eZ5QNgMt1GotkXkCj298jr5aawLbs/aGe\n" +
-            "Z+N1FdGwQ6BmfPUTeV+SmszgFI/IDp00MYeQcCzq9HRZfAZ+cUlPF0FpURKwIuxB\n" +
-            "XWQ4qe/TMeeeQm7l5VOALrkCgYAljLa5LW9PHpxfD3P8j+pBAsl5flEbgN1XFTu3\n" +
-            "QV/I+8t+wCgEWheRjhwDsI2AteWayXZUOsAVmFMEdrNdDTHP5SRJ4auzM/jZPzd5\n" +
-            "4+vaN6Fi6ifEJAOu2VaX/9M+MYmgIFR6wLBs62k9GhQYoOBjxoetxENfJkuq+UdE\n" +
-            "K6XPeQKBgFvf+SUrg7hFpRRyCq+DehdMQk1TJnEPTNLOalfrA/319KA8LGa0Q+ay\n" +
-            "5c2mDc9F//yAJEAT1WTEqHnvKBQvjofFAGRntoCT8anAnskSytwwpltKqDcpoKx/\n" +
-            "hVK+eVL47wuFroCBLGj0Zm3I7S+saGGmVllEky4jceE7IMTN7i6W";
+    private static String bankpubkey = "BNsIe9U0x8IeSe4h/dxUzVEz9pie0hDSfMRINRXc7s1UIXfkExnYECF4QqJ2SnHxLv3z/99gsfDQrQ6dzN5lZj0="; // 银行公钥
+
+    private static String privkey = "NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E=";
     private static String sm4key = "VuAzSWQhsoNqzn0K";//"1234567890123456"; // 用户的对称密钥
 
+    private static String FunCode = "trsQryByBreakPoint"; // 测试的用户编号
+
     @Autowired
-    private RedisCache redisCache;
+    private ITopBankBillService iTopBankBillService;
 
 
     @Override
-    public Boolean testSearch() {
+    public Boolean searchBreakPoint(String queryAcctNbr,String cardNbr,String beginDate,String endDate) {
         // 组织发送报文
         JsonObject obj = new JsonObject();
         JsonObject req = new JsonObject();
         JsonObject body = new JsonObject();
         JsonObject head = new JsonObject();
-        head.addProperty("funcode", "DCTRSINF"); //DCLISMOD
+        head.addProperty("funcode", FunCode); //DCLISMOD
         head.addProperty("userid", UID);
         head.addProperty("reqid", DCHelper.getTime() + "0000001");
-        body.addProperty("buscod", "N02030");
-        body.addProperty("TEST", "中文");
-        body.addProperty("TEST2", "!@#$%^&*()\\\\///");
-        body.addProperty("TEST3", 12345);
+        Integer transactionSequence = 1;
+
         JsonArray array = new JsonArray();
         JsonObject item = new JsonObject();
-        item.addProperty("arrItem1", "qaz");
-        item.addProperty("arrItem2", 123);
-        item.addProperty("arrItem3", true);
-        item.addProperty("arrItem4", "中文");
+        item.addProperty("cardNbr", cardNbr);
+        item.addProperty("beginDate", beginDate);
+        item.addProperty("endDate", endDate);
+   //     item.addProperty("transactionSequence", transactionSequence);
+        if(Validator.isNotEmpty(queryAcctNbr)){
+            item.addProperty("queryAcctNbr", queryAcctNbr);
+        }
+
 
         array.add(item);
-        body.add("TEST4", array);
+        body.add("TRANSQUERYBYBREAKPOINT_X1", array);
+
         req.add("head", head);
         req.add("body", body);
         obj.add("request", req);
 
         // 请求发送接收
-        doProcess(obj);
+        String result = doProcess(obj,FunCode);
+        JSONObject jsonObject = (JSONObject) JSONObject.parse(result);
+        JSONObject resultObject = jsonObject.getJSONObject("response").getJSONObject("body");
+        JSONArray z1 = resultObject.getJSONArray("TRANSQUERYBYBREAKPOINT_Z1");
+        if(resultObject.containsKey("TRANSQUERYBYBREAKPOINT_Z2")){
+            JSONArray z2 = resultObject.getJSONArray("TRANSQUERYBYBREAKPOINT_Z2");
+            List<TopBankBillAddBo> list = JSONArray.parseArray(z2.toJSONString(), TopBankBillAddBo.class);
+            int i = 0;
+            for(TopBankBillAddBo addBo : list){
+                addBo.setResult(z2.getJSONObject(i).toJSONString());
+                iTopBankBillService.insertByAddBo(addBo);
+            }
+            System.out.println(list);
+        }
+        if(z1.size()>0){
+            JSONObject fObject = z1.getJSONObject(0);
+            String ctnFlag =(String) fObject.get("ctnFlag");
+            if("Y".equals(ctnFlag)){
+                String queryAcctNbrNext =(String) fObject.get("queryAcctNbr");
+                searchBreakPoint(queryAcctNbrNext,cardNbr,beginDate,endDate);
+            }
+
+        }
         return null;
     }
 
-    private static void doProcess(JsonObject jObject)  {
+    private static String doProcess(JsonObject jObject,String funCode)  {
         try {
             JsonObject object = new JsonObject();
             // 签名
@@ -111,38 +119,39 @@ public class ZsBankServiceImpl implements IZsBankService {
             object.addProperty("sigtim", DCHelper.getTime());
             jObject.add("signature", object);
             String source = DCHelper.serialJsonOrdered(jObject);
-            System.out.println("签名原文: " + source);
+    //        System.out.println("签名原文: " + source);
+    //        System.out.println("签名原文A: " + decoder.decode(privkey));
             byte[] signature1 = DCCryptor.CMBSM2SignWithSM3(getID_IV(), decoder.decode(privkey), source.getBytes(StandardCharsets.UTF_8));
             String sigdat1 = new String(encoder.encode(signature1));
-            System.out.println("签名结果: " + sigdat1);
+    //        System.out.println("签名结果: " + sigdat1);
             object.addProperty("sigdat", sigdat1);
 
             // SM4-CBC加密
             String plaintxt = jObject.toString();
-            System.out.println("加密前req:  " + plaintxt);
+   //         System.out.println("加密前req:  " + plaintxt);
             byte[] enInput = DCCryptor.CMBSM4EncryptWithCBC(sm4key.getBytes(), getID_IV(), plaintxt.getBytes(StandardCharsets.UTF_8));
 
             String req = new String(encoder.encode(enInput));
-            System.out.println("加密后req:  " + req);
+    //        System.out.println("加密后req:  " + req);
 
             // 发送请求
             HashMap<String, String> map = new HashMap<>();
             map.put("UID", UID);
             map.put("ALG", ALG_SM);
             map.put("DATA", URLEncoder.encode(req, "utf-8"));
-            map.put("FUNCODE", "DCLISMOD");
+            map.put("FUNCODE", funCode);
             String res = DCHelper.doPostForm(URL, map);
-            System.out.println("res:  " + res);
+    //        System.out.println("res:  " + res);
             try {
                 decoder.decode(res);
             } catch (Exception e) {
                 System.err.println("访问返回错误.");
-                return;
+                throw new CustomException("网银解码错误");
             }
 
             // 解密请求
             String resplain = new String(DCCryptor.CMBSM4DecryptWithCBC(sm4key.getBytes(), getID_IV(), decoder.decode(res)), StandardCharsets.UTF_8);
-            System.out.println("res decrypt: " + resplain);
+    //        System.out.println("res decrypt: " + resplain);
 
             // 验签
             JsonObject object2 = new GsonBuilder().create().fromJson(resplain, JsonObject.class);
@@ -152,11 +161,15 @@ public class ZsBankServiceImpl implements IZsBankService {
             object2.add("signature", object3);
             String resSignSource = DCHelper.serialJsonOrdered(object2);
             System.out.println("验签原文: " + resSignSource);
-            System.out.println("验签签名值: " + resSign);
             boolean verify = DCCryptor.CMBSM2VerifyWithSM3(getID_IV(), decoder.decode(bankpubkey), resSignSource.getBytes(StandardCharsets.UTF_8), decoder.decode(resSign));
-            System.out.println("验签结果: " + verify);
+    //        System.out.println("验签结果: " + verify);
+            if(verify){
+                return resSignSource;
+            }else{
+                throw new CustomException("网银验签错误");
+            }
         }catch (Exception e){
-
+            throw new CustomException("网银错误"+e.getMessage());
         }
 
     }

+ 87 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/vo/TopBankBillVo.java

@@ -0,0 +1,87 @@
+package com.zhongzheng.modules.sdk.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.math.BigDecimal;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 银行账单视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2023-11-15
+ */
+@Data
+@ApiModel("银行账单视图对象")
+public class TopBankBillVo {
+	private static final long serialVersionUID = 1L;
+
+	/** $pkColumn.columnComment */
+	@ApiModelProperty("$pkColumn.columnComment")
+	private Long id;
+
+	/** 余额 */
+	@Excel(name = "余额")
+	@ApiModelProperty("余额")
+	private BigDecimal acctOnlineBal;
+	/** 状态 1正常 0关闭 */
+	@Excel(name = "状态 1正常 0关闭")
+	@ApiModelProperty("状态 1正常 0关闭")
+	private Integer status;
+	/** 收付方名称 */
+	@Excel(name = "收付方名称")
+	@ApiModelProperty("收付方名称")
+	private String ctpAcctName;
+	/** 收付方帐号 */
+	@Excel(name = "收付方帐号")
+	@ApiModelProperty("收付方帐号")
+	private String ctpAcctNbr;
+	/** 收付方开户行地址 */
+	@Excel(name = "收付方开户行地址")
+	@ApiModelProperty("收付方开户行地址")
+	private String ctpBankAddress;
+	/** 收付方开户行行名 */
+	@Excel(name = "收付方开户行行名")
+	@ApiModelProperty("收付方开户行行名")
+	private String ctpBankName;
+	/** 扩展摘要 */
+	@Excel(name = "扩展摘要")
+	@ApiModelProperty("扩展摘要")
+	private String extendedRemark;
+	/** */
+	@Excel(name = "")
+	private String infoFlag;
+	/** 你方摘要 */
+	@Excel(name = "你方摘要")
+	@ApiModelProperty("你方摘要")
+	private String remarkTextClt;
+	/** 交易金额 */
+	@Excel(name = "交易金额")
+	@ApiModelProperty("交易金额")
+	private BigDecimal transAmount;
+	/** 交易日 */
+	@Excel(name = "交易日")
+	@ApiModelProperty("交易日")
+	private String transDate;
+	/** 流水号 */
+	@Excel(name = "流水号")
+	@ApiModelProperty("流水号")
+	private String transSequenceIdn;
+	/** 交易时间 */
+	@Excel(name = "交易时间")
+	@ApiModelProperty("交易时间")
+	private String transTime;
+	/** 起息日 */
+	@Excel(name = "起息日")
+	@ApiModelProperty("起息日")
+	private String valueDate;
+	/** $column.columnComment */
+	@Excel(name = "起息日")
+	@ApiModelProperty("$column.columnComment")
+	private String result;
+}