【项目】实现对接京东财务余额管理页面

news2024/10/2 3:14:44

目录

    • 需求
    • 实现
      • 后端
        • 京东财务余额Controller
        • 京东财务余额Service
      • 前端
        • index.vue
        • jdbalance.js
        • api/jdbalance.js
      • 效果

需求

通过调京东财务余额接口,在项目中开发相应管理页面。

实现

后端

因为京东的接口返回值里面已经有分页的参数了,因此会和平常自己写分页的逻辑有点区别。

京东财务余额Controller

/**
 * @Description:   京东财务余额Controller
 */
@RestController
@Slf4j
@AllArgsConstructor
@RequestMapping("/jdbalance")
@Api(value = "jdbalance", tags = "京东财务余额API")
public class JDBalanceController {

	@Autowired
	private JDBalanceService jinDongBalanceService;

	@GetMapping("/page")
	public R callbackBalanceDetail(Page page, JinDongBalanceVO jinDongBalanceVO) {
		return  R.ok(jinDongBalanceService.handleCallbackBalanceDetail(page,jinDongBalanceVO));
	}

}

京东财务余额Service

/**
 * @Description:  京东财务余额Service
 */
public interface JDBalanceService {

	/**
	 * @Description: 触发查询余额变动明细回调
	 */
	Page handleCallbackBalanceDetail(Page page, JinDongBalanceVO jinDongBalanceVO);

}

/**
 * @Description: 京东财务余额ServiceImpl
 */
@Service
@Slf4j
@AllArgsConstructor
public class JDBalanceServiceImpl implements JDBalanceService {

	@Autowired
	private JDConfigProperties jDConfigProperties;
	
	@Override
	public Page handleCallbackBalanceDetail(Page page, JinDongBalanceVO jinDongBalanceVO){

		Map<String, String> params = new HashMap<>();
		params.put("token", "");
		params.put("pageNum", Long.toString(page.getCurrent()));
		params.put("pageSize",Long.toString(page.getSize()));
		params.put("orderId", jinDongBalanceVO.getOrderId());
//		params.put("startDate", "");
//		params.put("endDate", "");
		String callbackBalanceDetailPath= jDConfigProperties.getQueryBalanceDetail();
		JSONObject jsResult =handle(callbackBalanceDetailPath, params);
		JSONArray resultArray = jsResult.getJSONArray(JDConstants.DATA);
		if(resultArray != null && resultArray.size() > 0){
			//将json转成需要的对象
			List<JinDongBalanceVO> jdBalanceList = com.alibaba.fastjson.JSONObject.parseArray(JSON.toJSONString(resultArray), JinDongBalanceVO.class);
			page.setRecords(jdBalanceList);
			page.setTotal(jsResult.getInt("total"));
		}
		return page;
	}

	private JSONObject handle(String path, Map<String, String> params) {
		String url = jDConfigProperties.getUrl() + path;
		log.info("请求url={}, params={}", url, params);
		// 执行请求
		String respStr = JDHttpUtils.httpPost(url, params);
		JSONObject js = new JSONObject(respStr);
		if (!JSONUtil.isJson(respStr)) {
			log.warn("查询余额明细返回的信息不是JSON格式,实际为[{}]", respStr);
			return js;
		}
		JSONObject jsResult = null;
		if (js.getStr(JDConstants.RESULTCODE).equals(JDResponseCode.SUCCESS)) {
			jsResult = js.getJSONObject(JDConstants.RESULT);
		}
		return jsResult;
	}

}

前端

index.vue

<template>
  <div class="execution">
    <basic-container>
      <el-row :span="24" :gutter="10">
        <el-col :xs="24" :sm="24" :md="3">
          <el-card shadow="never">
            <div >
              <span>账号余额:</span>
              <span :style="{color:'#F56C6C'}">{{ balance }}14</span>
            </div>      
          </el-card>
        </el-col>
        <el-col :xs="24" :sm="24" :md="21">
          <avue-crud
            ref="crud"
            :page.sync="page"
            :data="tableData"
            :table-loading="tableLoading"
            :option="tableOption"
            v-model="form"
            @on-load="getPage"
            @refresh-change="refreshChange"
            @sort-change="sortChange"
            @search-change="searchChange"
            @date-change="dateChange"
          >
          </avue-crud>
        </el-col>
      </el-row>
    </basic-container>
  </div>
</template>
  
  <script>
import { getPage, getUnionBalance } from "@/api/cebBill/jdbalance";
import { tableOption } from "@/const/crud/cebBill/jdbalance";

export default {
  name: "jdbalance",
  data() {
    return {
      form: {},
      tableData: [],
      page: {
        total: 0, // 总页数
        currentPage: 1, // 当前页数
        pageSize: 20, // 每页显示多少条
        ascs: [], //升序字段
        descs: [], //降序字段
      },
      paramsSearch: {},
      tableLoading: false,
      tableOption: tableOption,
      date: [],
      balance:"",
    };
  },
  created() {this.getBalance();},
  mounted: function () {},
  computed: {
  },
  methods: {
    dateChange(date) {
      if (date) {
        this.date = date;
      } else {
        this.date = [];
      }
      this.getPage(this.page);
    },
    searchChange(params, done) {
      params = this.filterForm(params);
      this.paramsSearch = params;
      this.page.currentPage = 1;
      this.getPage(this.page, params);
      done();
    },
    sortChange(val) {
      let prop = val.prop
        ? val.prop.replace(/([A-Z])/g, "_$1").toLowerCase()
        : "";
      if (val.order == "ascending") {
        this.page.descs = [];
        this.page.ascs = prop;
      } else if (val.order == "descending") {
        this.page.ascs = [];
        this.page.descs = prop;
      } else {
        this.page.ascs = [];
        this.page.descs = [];
      }
      this.getPage(this.page);
    },
    getPage(page, params) {
      this.tableLoading = true;
      getPage(
        Object.assign(
          {
            current: page.currentPage,
            size: page.pageSize,
            descs: this.page.descs,
            ascs: this.page.ascs,
            beginTime: this.date[0],
            endTime: this.date[1],
          },
          params,
          this.paramsSearch
        )
      )
        .then((response) => {
          this.tableData = response.data.data.records;
          this.page.total = response.data.data.total;
          this.page.currentPage = page.currentPage;
          this.page.pageSize = page.pageSize;
          this.tableLoading = false;
        })
        .catch(() => {
          this.tableLoading = false;
        });
    },
    /**
     * 刷新回调
     */
    refreshChange(page) {
      this.getPage(this.page);
    },
    /** 导出按钮操作 */
    handleExport() {
      this.download(
        "mall/jdbalance/export",
        {
          ...this.paramsSearch,
        },
        `jdbalance_${new Date().getTime()}.xlsx`
      );
    },
    // 显示余额
    getBalance(){
      getUnionBalance().then((response) => {
        this.balance=response.data.data.balance.remainLimit;
        console.log(this.balance);
      });
    }
  },
};
</script>
  
  <style lang="scss" scoped>
</style>
  

jdbalance.js

export const tableOption = {
    dialogDrag: true,
    border: true,
    indexLabel: '序号',
    stripe: true,
    menuAlign: 'center',
    align: 'center',
    menuType: 'text',
    searchShow: false,
    excelBtn: false,
    printBtn: false,
    viewBtn: true,
   // dateBtn: true,
    searchMenuSpan: 6,
    addBtn: false,
    column: [
        {
            label: '余额明细ID',
            prop: 'id',
            sortable: true,
            rules: [
            ]
        },
        {
            label: '账户类型',
            prop: 'accountType',
            sortable: true,
            rules: [
            ],
            type: 'select',
            dicData: [{
                label: '可用余额',
                value: '1'
            }, {
                label: '锁定余额',
                value: '2'
            }]
        },
        {
            label: '金额',
            prop: 'amount',
            sortable: true,
            rules: [
            ]
        },
        {
            label: '京东Pin',
            prop: 'pin',
            sortable: true,
            rules: [
            ],
            hide: true
        },
        {
            label: '订单号',
            prop: 'orderId',
            sortable: true,
            search: true,
            rules: [
            ]
        },
        {
            label: '业务类型',
            prop: 'tradeType',
            sortable: true,
            rules: [
            ]
        },
        {
            label: '业务类型名称',
            prop: 'tradeTypeName',
            sortable: true,
            rules: [
            ]
        },
        {
            label: '余额变动日期',
            prop: 'createdDate',
            sortable: true,
            rules: [
            ]
        },
       
        {
            label: '备注信息',
            prop: 'notePub',
            sortable: true,
            rules: [
            ]
        },
        {
            label: '业务号',
            prop: 'tradeNo',
            sortable: true,
            rules: [
            ]
        },
    ]
}

api/jdbalance.js


import request from '@/router/axios'

export function getPage(query) {
    return request({
        url: '/mall/jdbalance/page',
        method: 'get',
        params: query
    })
}


export function getUnionBalance() {
    return request({
        url: '/mall/jdbalance/callbackUnionBalance',
        method: 'get'
    })
}

效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/380455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【竞赛/TPU】算能TPU编程竞赛总结

如果觉得我的分享有一定帮助&#xff0c;欢迎关注我的微信公众号 “码农的科研笔记”&#xff0c;了解更多我的算法和代码学习总结记录。或者点击链接扫码关注【竞赛/TPU】算能TPU编程竞赛总结 1 基础知识 1.1【Ubuntu】 Ubuntu操作系统中有很多不同的文件夹&#xff0c;每个…

论文阅读——FECANet:应用特征增强的上下文感知小样本语义分割网络

代码&#xff1a;NUST-Machine-Intelligence-Laboratory/FECANET (github.com) 文章地址&#xff1a;地址 文章名称&#xff1a;FECANet: Boosting Few-Shot Semantic Segmentation with Feature-Enhanced Context-Aware Network 摘要 Few-shot semantic segmentation 是学习…

4年经验之谈,什么是接口测试?怎样做接口测试?

一、什么是接口&#xff1f;【文末学习资源分享】赶紧嫖&#xff01;冲&#xff01;&#xff01;&#xff01;&#xff01; 接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点&#xff0c;定义特定的交互点&#xff0c;然后通过这些交互点来&#xff0c;通过…

Nydus 在约苗平台的容器镜像加速实践

文 | 向申 约苗平台运维工程师 关注云原生领域 本文字数 9574阅读时间24分钟 本文是来自向申同学的分享&#xff0c;介绍了其在 K8s 生产环境集群部署 Nydus 的相关实践。 Nydus 是蚂蚁集团&#xff0c;阿里云和字节等共建的开源容器镜像加速项目&#xff0c;是 CNCF Dragon…

Spring Boot 3.0系列【3】基础篇之使用Spring Initializr快速创建项目

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Spring Boot版本3.0.3 源码地址&#xff1a;https://gitee.com/pearl-organization/study-spring-boot3 文章目录前言安装JDK 17创建Spring Boot 项目方式1&#xff1a;网页在线生成方式2&#…

PyQGIS开发--自动化地图布局案例

前言创建地图布局是 GIS 作业结束时的一项常见任务。 它用于呈现最终结果的输出&#xff0c;作为与用户交流的一种方式&#xff0c;以便从地图中获取信息、知识或见解。 在包括 QGIS 在内的任何 GIS 软件中制作地图布局都非常容易。 但另一方面&#xff0c;当我们必须生成如此大…

centos7上安装mysql8.0

1、检查一下自己电脑上安装了哪些mysql [rootlocalhost ~]# find / -name mysql 2、把安装的mysql全部删掉 [rootlocalhost ~]# rm -rf /usr/lib64/mysql/ [rootlocalhost ~]# rm -rf /usr/local/mysql/ [rootlocalhost ~]# rm -rf /etc/selinux/targeted/active/modules/100…

《Roller: Fast and Efficient Tensor Compilation for Deep Learning》

《Roller: Fast and Efficient Tensor Compilation for Deep Learning》 用于深度学习 快速高效的张量编译器 作者 微软亚洲研究院以及多伦多大学等多所高校 摘要 当前编译为了产生高效的kernel时&#xff0c;搜索空间大&#xff0c;通常使用机器学习的方法 找到最优的方案…

管理逻辑备数据库(Logical Standby Database)

1. SQL Apply架构概述 SQL Apply使用一组后台进程来应用来自主数据库的更改到逻辑备数据库。 在日志挖掘和应用处理中涉及到的不同的进程和它们的功能如下&#xff1a; 在日志挖掘过程中&#xff1a; 1&#xff09;READER进程从归档redo日志文件或备redo日志文件中读取redo记…

Apache Airflow Provider Sqoop 模块远程代码执行漏洞

漏洞描述 Apache Airflow 是一个以编程方式管理 workflow 的平台&#xff0c;Sqoop 模块用于在 Hadoop 和结构化数据存储&#xff08;例如关系数据库&#xff09;之间高效传输大量数据。 apache-airflow-providers-apache-sqoop 3.1.1 之前版本中&#xff0c;由于 SqoopHook …

【ONE·C || 自定义类型:结构体、段位、枚举、联合】

总言 C语言&#xff1a;自定义类型介绍。 文章目录总言1、结构体1.1、结构体声明1.1.1、基本声明方式1.1.2、特殊的声明&#xff1a;不完全声明1.2、结构体自引用1.2.1、结构体自引用说明1.2.2、typdef对结构体重命名1.3、结构体变量的定义和初始化1.4、结构体变量大小计算&…

VMware虚拟机安装Ubuntu(超详细图文教程)

VMware虚拟机安装Ubuntu&#xff08;超详细图文教程&#xff09; 1、Ubuntu下载 Ubuntu下载地址&#xff1a;点这里 注&#xff1a;但官网下载比较慢 也可关注公众号Time木回复&#xff1a; ubuntu22 获取 2、打开VMware VMware安装过程&#xff1a;待更新 2.1 创建新的虚…

5个面向开发人员的顶级报表工具

报表工具对有处理大量数据需求的公司至关重要。实际上&#xff0c;报表可以帮助公司实时访问公司资源&#xff0c;同时能够以可读和调整的格式分析和显示数据。本文为大家推荐五种成熟且强大的报表工具&#xff0c;重点介绍它们的功能和优势。 Stimulsoft Stimulsoft主要用于…

【安装教程】SSH远程连接工具-FinalShell的安装

&#x1f449;&#x1f449;&#x1f449;&#x1f449;&#x1f449;&#x1f449; 【目录在右侧哦~】省时间可以直接跳转到【安装步骤】 &#x1f449;&#x1f449;&#x1f449;&#x1f449;&#x1f449;&#x1f449;&#x1f449;一、软件介绍&#xff08;点我查看该软…

【python学习笔记】:环境搭建

Python 环境搭建 本章学习如何在本地搭建Python开发环境。 Python可应用于多平台包括 Linux 和 Mac OS X。 你可以通过终端窗口输入 "python" 命令来查看本地是否已经安装Python以及Python的安装版本。 Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX,…

「TCG 规范解读」PC 平台相关规范(3)

可信计算组织&#xff08;Ttrusted Computing Group,TCG&#xff09;是一个非盈利的工业标准组织&#xff0c;它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立&#xff0c;并采纳了由可信计算平台联盟&#xff08;the Trusted Computing Platform Alli…

消息队列原理与实战-学习笔记

消息队列&#xff1a;保存消息的一个容器&#xff0c;本质是个队列&#xff0c;但是需要支持高吞吐、高并发、高可用。 1 前世今生 1.1 业界消息队列对比 Kafka:分布式的、分区的、多副本的日志提交服务&#xff0c;在高吞吐场景下发挥较为出色RocketMQ:低延迟、强一致、高性…

概率论与数理统计期末小题狂练 11-12两套,12-13-1

11-12第一学期A1 略。2 X服从正态分布N&#xff08;0&#xff0c;1&#xff09;&#xff0c;X^2服从卡方分布。又考查了卡方分布均值和方差公式。一开始如果对本题无从下手&#xff0c;大概是没看出来是什么分布。3 第二小空本身也可以作为一个结论。4 考查切比雪夫不等式&…

王道操作系统课代表 - 考研计算机 第三章 内存管理 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记&#xff0c;以及一整年里对 操作系统 知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 “内存管理” 章节知识点总结的十分全面&#xff0c;涵括了《操作系统》课程里的全部…

装修的正确顺序是什么?

装修的正确顺序可以概括为以下几个步骤&#xff1a;1.设计阶段&#xff1a;根据你的需求和预算&#xff0c;设计师会提供多个方案供你选择&#xff0c;确定最终的设计方案。2.拆除阶段&#xff1a;清除室内所有旧的装修材料&#xff0c;包括地板、瓷砖、灯具、门窗等&#xff0…