ylb-接口5产品详情

总览:
在这里插入图片描述

1、service处理(根据产品id ,查询产品信息)

在api模块下service包,ProductService接口添加新方法(根据产品id ,查询产品信息queryById(Integer id)):

package com.bjpowernode.api.service;import com.bjpowernode.api.model.ProductInfo;
import com.bjpowernode.api.pojo.MultiProduct;import java.util.List;/*** 产品接口*/
public interface ProductService {/*根据产品类型,查询产品,支持分页*/List<ProductInfo> queryByTypeLimit(Integer pType,Integer pageNo,Integer pageSize);/*某个产品类型的记录总数*/Integer queryRecordNumsByType(Integer pType);/*首页的多个产品数据*/MultiProduct queryIndexPageProducts();/** 根据产品id ,查询产品信息 */ProductInfo queryById(Integer id);}

2、serviceImpl处理(根据产品id ,查询产品信息)

在dataservice模块service包,实现ProductService接口,ProductServiceImpl添加实现方法(queryById(Integer id)):

package com.bjpowernode.dataservice.service;import com.bjpowernode.api.model.ProductInfo;
import com.bjpowernode.api.pojo.MultiProduct;
import com.bjpowernode.api.service.ProductService;
import com.bjpowernode.common.constants.YLBConstant;
import com.bjpowernode.common.util.CommonUtil;
import com.bjpowernode.dataservice.mapper.ProductInfoMapper;
import org.apache.dubbo.config.annotation.DubboService;import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;@DubboService(interfaceClass = ProductService.class,version = "1.0")
public class ProductServiceImpl implements ProductService {@Resourceprivate ProductInfoMapper productInfoMapper;/*按类型分页查询产品*/@Overridepublic List<ProductInfo> queryByTypeLimit(Integer pType, Integer pageNo, Integer pageSize) {List<ProductInfo> productInfos = new ArrayList<>();if( pType == 0 || pType == 1 || pType == 2){pageNo = CommonUtil.defaultPageNo(pageNo);pageSize = CommonUtil.defaultPageSize(pageSize);int offset  = (pageNo - 1) * pageSize;productInfos = productInfoMapper.selectByTypeLimit(pType, offset, pageSize);}return productInfos;}/*某个产品类型的记录总数*/@Overridepublic Integer queryRecordNumsByType(Integer pType) {Integer counts = 0;if( pType == 0 || pType == 1 || pType == 2){counts  = productInfoMapper.selectCountByType(pType);}return counts;}/*首页的多个产品数据*/@Overridepublic MultiProduct queryIndexPageProducts() {MultiProduct result = new MultiProduct();//查询新手宝List<ProductInfo> xinShouBaoList  = productInfoMapper.selectByTypeLimit(YLBConstant.PRODUCT_TYPE_XINSHOUBAO,0,1);//查询优选List<ProductInfo> youXuanList = productInfoMapper.selectByTypeLimit(YLBConstant.PRODUCT_TYPE_YOUXUAN,0,3 );//散标List<ProductInfo> sanBiaoList = productInfoMapper.selectByTypeLimit(YLBConstant.PRODUCT_TYPE_SANBIAO,0,3 );result.setXinShouBao(xinShouBaoList);result.setYouXuan(youXuanList);result.setSanBiao(sanBiaoList);return result;}/** 根据产品id ,查询产品信息 */@Overridepublic ProductInfo queryById(Integer id) {ProductInfo productInfo = null;if( id != null && id > 0 ){productInfo = productInfoMapper.selectByPrimaryKey(id);}return productInfo;}}

3、pojo类处理

在api模块下pojo包,创建一个产品金额信息BidInfoProduct类:

package com.bjpowernode.api.pojo;import java.io.Serializable;
import java.math.BigDecimal;/*** 产品金额信息*/
public class BidInfoProduct implements Serializable {private Integer id;private String phone;private String bidTime;private BigDecimal bidMoney;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getBidTime() {return bidTime;}public void setBidTime(String bidTime) {this.bidTime = bidTime;}public BigDecimal getBidMoney() {return bidMoney;}public void setBidMoney(BigDecimal bidMoney) {this.bidMoney = bidMoney;}
}

4、service处理(查询某个产品的投资记录)

在api模块下service包,创建一个InvestService接口:(查询某个产品的投资记录queryBidListByProductId(Integer productId, Integer pageNo, Integer pageSize);)

package com.bjpowernode.api.service;import com.bjpowernode.api.pojo.BidInfoProduct;import java.math.BigDecimal;
import java.util.List;public interface InvestService {/** 查询某个产品的投资记录 */List<BidInfoProduct> queryBidListByProductId(Integer productId,Integer pageNo,Integer pageSize);/** 投资理财产品, int 是投资的结果 , 1 投资成功*/int investProduct(Integer uid, Integer productId, BigDecimal money);
}

5、serviceImpl处理(查询某个产品的投资记录)

在dataservice模块service包,实现InvestService接口,创建InvestServiceImpl实现类:(查询某个产品的投资记录queryBidListByProductId(Integer productId, Integer pageNo, Integer pageSize);)

package com.bjpowernode.dataservice.service;import com.bjpowernode.api.model.BidInfo;
import com.bjpowernode.api.model.FinanceAccount;
import com.bjpowernode.api.model.ProductInfo;
import com.bjpowernode.api.pojo.BidInfoProduct;
import com.bjpowernode.api.service.InvestService;
import com.bjpowernode.common.constants.YLBConstant;
import com.bjpowernode.common.util.CommonUtil;
import com.bjpowernode.dataservice.mapper.BidInfoMapper;
import com.bjpowernode.dataservice.mapper.FinanceAccountMapper;
import com.bjpowernode.dataservice.mapper.ProductInfoMapper;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;@DubboService(interfaceClass = InvestService.class, version = "1.0")
public class InvestServiceImpl implements InvestService {@Resourceprivate BidInfoMapper bidInfoMapper;@Resourceprivate FinanceAccountMapper accountMapper;@Resourceprivate ProductInfoMapper productInfoMapper;/*** 查询某个产品的投资记录*/@Overridepublic List<BidInfoProduct> queryBidListByProductId(Integer productId,Integer pageNo,Integer pageSize) {List<BidInfoProduct> bidList = new ArrayList<>();if (productId != null && productId > 0) {pageNo = CommonUtil.defaultPageNo(pageNo);pageSize = CommonUtil.defaultPageSize(pageSize);int offset = (pageNo - 1) * pageSize;bidList = bidInfoMapper.selectByProductId(productId, offset, pageSize);}return bidList;}/*投资理财产品, int 是投资的结果 , 1 投资成功*/@Transactional(rollbackFor = Exception.class)@Overridepublic int investProduct(Integer uid, Integer productId, BigDecimal money) {int result = 0;//默认,参数不正确int rows = 0;//1参数检查if ((uid != null && uid > 0) && (productId != null && productId > 0)&& (money != null && money.intValue() % 100 == 0 && money.intValue() >= 100)) {//2.查询账号金额FinanceAccount account = accountMapper.selectByUidForUpdate(uid);if (account != null) {if (CommonUtil.ge(account.getAvailableMoney(), money)) {//资金满足购买要求//3.检查产品是否可以购买ProductInfo productInfo = productInfoMapper.selectByPrimaryKey(productId);if (productInfo != null&& productInfo.getProductStatus() == YLBConstant.PRODUCT_STATUS_SELLING) {if (CommonUtil.ge(productInfo.getLeftProductMoney(), money) &&CommonUtil.ge(money, productInfo.getBidMinLimit()) &&CommonUtil.ge(productInfo.getBidMaxLimit(), money)) {//可以购买了 4. 扣除账号资金rows = accountMapper.updateAvailableMoneyByInvest(uid, money);if (rows < 1) {throw new RuntimeException("投资更新账号资金失败");}//5.扣除产品剩余可投资金额rows = productInfoMapper.updateLeftProductMoney(productId, money);if (rows < 1) {throw new RuntimeException("投资更新产品剩余金额失败");}//6.创建投资记录BidInfo bidInfo = new BidInfo();bidInfo.setBidMoney(money);bidInfo.setBidStatus(YLBConstant.INVEST_STATUS_SUCC);bidInfo.setBidTime(new Date());bidInfo.setProdId(productId);bidInfo.setUid(uid);bidInfoMapper.insertSelective(bidInfo);//7.判断产品是否卖完,更新产品是满标状态ProductInfo dbProductInfo = productInfoMapper.selectByPrimaryKey(productId);if( dbProductInfo.getLeftProductMoney().compareTo(new BigDecimal("0")) == 0 ){rows  = productInfoMapper.updateSelled(productId);if( rows < 1 ){throw new RuntimeException("投资更新产品满标失败");}}//8.最后这是投资成功result = 1;}} else {result = 4;//理财产品不存在}} else {result = 3;//资金不足}} else {result = 2;//资金账号不存在}}return result;}
}

其中:
1、某个产品的投资记录:(需要在dataservice模块mapper包下的BidInfoMapper接口添加方法,并在resources/mappers/BidInfoMapper.xml编写SQL语句):

    /*某个产品的投资记录*/List<BidInfoProduct> selectByProductId(@Param("productId") Integer productId,@Param("offset") int offset,@Param("rows") Integer rows);
  <!--某个产品的投资记录--><select id="selectByProductId" resultType="com.bjpowernode.api.pojo.BidInfoProduct">SELECTbid.id,CONCAT( SUBSTRING( u.phone FROM 1 FOR 3 ), "******", SUBSTRING( u.phone FROM 10 FOR 2 ) ) AS phone,DATE_FORMAT( bid.bid_time, "%Y-%m-%d %H:%i:%s" ) AS bidTime,bid.bid_money AS bidMoneyFROMb_bid_info bidJOIN u_user u ON bid.uid = u.idWHEREbid.prod_id = #{productId}ORDER BYbid.bid_time DESCLIMIT #{offset},#{rows}</select>

6、controller处理

在web模块下controller包,公用类BaseController添加对象(投资服务):

package com.bjpowernode.front.controller;import com.bjpowernode.api.service.*;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.data.redis.core.StringRedisTemplate;import javax.annotation.Resource;/*** 公用controller类*/
public class BaseController {//声明公共的方法,属性的等@Resourceprotected StringRedisTemplate stringRedisTemplate;//平台信息服务@DubboReference(interfaceClass = PlatBaseInfoService.class,version = "1.0")protected PlatBaseInfoService platBaseInfoService;//产品服务@DubboReference(interfaceClass = ProductService.class,version = "1.0")protected ProductService productService;//投资服务@DubboReference(interfaceClass = InvestService.class,version = "1.0")protected InvestService investService;//用户服务@DubboReference(interfaceClass = UserService.class,version = "1.0")protected UserService userService;//充值服务@DubboReference(interfaceClass = RechargeService.class,version = "1.0")protected RechargeService rechargeService;
}

在web模块下controller包,ProductController类添加方法:(查询某个产品的详情和投资记录queryProductDetail(@RequestParam(“productId”) Integer id))

package com.bjpowernode.front.controller;import com.bjpowernode.api.model.ProductInfo;
import com.bjpowernode.api.pojo.BidInfoProduct;
import com.bjpowernode.api.pojo.MultiProduct;
import com.bjpowernode.common.enums.RCode;
import com.bjpowernode.common.util.CommonUtil;
import com.bjpowernode.front.view.PageInfo;
import com.bjpowernode.front.view.RespResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;import java.util.List;@Api(tags = "理财产品功能")
@RestController
@RequestMapping("/v1")
public class ProductController extends BaseController {/*首页三类产品列表*/@ApiOperation(value = "首页三类产品列表",notes = "一个新手宝,三个优选,三个散标产品")@GetMapping("/product/index")public RespResult queryProductIndex(){RespResult result = RespResult.ok();MultiProduct multiProduct = productService.queryIndexPageProducts();result.setData(multiProduct);return result;}/*按产品类型分页查询*/@ApiOperation(value = "产品分页查询",notes = "按产品类型分页查询")@GetMapping("/product/list")public RespResult queryProductByType(@RequestParam("ptype") Integer pType,@RequestParam(value = "pageNo",required = false,defaultValue = "1") Integer pageNo,@RequestParam(value = "pageSize",required = false,defaultValue = "9") Integer pageSize){RespResult result = RespResult.fail();if(pType != null && (pType == 0 || pType == 1 || pType == 2)){pageNo = CommonUtil.defaultPageNo(pageNo);pageSize = CommonUtil.defaultPageSize(pageSize);//分页处理,记录总数Integer recordNums = productService.queryRecordNumsByType(pType);if( recordNums > 0 ){//产品集合List<ProductInfo> productInfos = productService.queryByTypeLimit(pType,pageNo,pageSize);//构建PageInfoPageInfo page = new PageInfo(pageNo,pageSize,recordNums);result = RespResult.ok();result.setList(productInfos);result.setPage(page);}} else {//请求参数有误result.setRCode(RCode.REQUEST_PRODUCT_TYPE_ERR);}return result;}/*查询某个产品的详情和投资记录*/@ApiOperation(value = "产品详情",notes = "查询某个产品的详细信息和投资5条记录")@GetMapping("/product/info")public RespResult queryProductDetail(@RequestParam("productId") Integer id){RespResult result = RespResult.fail();if( id != null && id > 0 ){//调用产品查询ProductInfo productInfo = productService.queryById(id);if( productInfo != null){//查询投资记录List<BidInfoProduct> bidInfoList = investService.queryBidListByProductId(id,1,5);//查询成功result = RespResult.ok();result.setData(productInfo);result.setList(bidInfoList);} else {result.setRCode(RCode.PRODUCT_OFFLINE);}}return result;}}

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

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

相关文章

Python venv 和 virtualenv 虚拟环境的基本使用

1.前言 venv 和 virtualenv 都是搭建虚拟环境的工具&#xff0c;virtualenv 是第三方开源的&#xff0c;而 venv 作为 virtualenv 的一个子集自 Python3.3 开始集成到标准库中&#xff0c;在 virtualenv 的文档中可以看到他们的区别&#xff1a; 没有 app-data 种子方法&#…

Python爬虫——urllib_post请求百度翻译

post请求&#xff1a; post的请求参数&#xff0c;是不会拼接在url后面的&#xff0c;而是需要放在请求对象定制的参数中 post请求的参数需要进行两次编码&#xff0c;第一次urlencode&#xff1a;对字典参数进行Unicode编码转成字符串&#xff0c;第二次encode&#xff1a;将字…

isaac sim添加孔网格

isaac sim仿真和其它仿真实际上一样&#xff0c;对于孔的仿真&#xff0c;是没那么简单的 在此记录一下踩过的坑 1&#xff0c;首先&#xff0c;你需要在soildworks中将你的孔画出来&#xff0c;并导出stl 2&#xff0c;你可以在win10中使用3D画图查看孔的网格&#xff0c;看…

【css】用css样式快速写右上角badge徽标,颜色设置为渐变色

先看效果展示&#xff0c;已公开显示在图片卡片的右上角。 首先是dom代码&#xff1a;需要两个view或者div&#xff0c;public-badge是“已公开”那个矩形&#xff0c;show-signal是右边那个下三角&#xff0c;也就是阴影部分&#xff0c;这样看起来比较有立体感。 <view…

虚拟化技术及实时虚拟化概述

版权声明&#xff1a;本文为本文为博主原创文章&#xff0c;未经本人同意&#xff0c;禁止转载。如有问题&#xff0c;欢迎指正。博客地址&#xff1a;https://www.cnblogs.com/wsg1100/ 文章目录 一、前言二、分时系统三、虚拟化介绍四、虚拟化实现方式及分类模拟器Type2虚拟化…

欧姆龙PLC联网

一、设备信息确认 左上角的为PLC型号,如图该PLC型号为CP1H,不同型号的欧姆龙PLC通讯方面有什么差别呢? 通讯能力和方式不同: 有些型号PLC自带网口,有些则需要扩展(上图中右侧的两个红框内为后扩展的通讯口,扩展模块可以随意组合双网口,双232串口,双485串口都可以)…

JDBC编程连接MySQL数据库遇到的两个错误

在进行java与MySQL数据库进行连接的时候我遇到了两个报错&#xff0c;在一开始的时候遇到的报错是Access denied for user yulinlocalhost (using password: YES)&#xff0c;此时我在网络上搜索发现是密码出现错误的问题&#xff08;出现该问题确实是密码错误&#xff09;&…

【DevOps】Atlassian插件开发指南

本文以Bamboo插件开发为例&#xff0c;记录一下插件开发过程。 一、简介 Atlassian Bamboo 6.9.1 是一款持续集成和持续交付&#xff08;CI/CD&#xff09;工具&#xff0c;支持使用插件扩展其功能。如果需要开发自己的 Bamboo 插件并添加到 Bamboo 中&#xff0c;则可以参考…

设计模式——享元模式

享元模式 定义 享元模式&#xff08;Flyweight Pattern&#xff09;是池技术的重要实现方式。 使用共享对象可以有效地支持大量的细粒度对象。 优缺点、应用场景 优点 可以大大减少应用程序创建对象的数量&#xff0c;降低程序内存占用。 缺点 提高了系统的复杂度&…

spring-IOC

IOC容器 简介 IoC(Inversion of Control)控制反转&#xff0c;是一种基于面向对象编程法则的设计思想&#xff0c;它设计出的程序具有松耦合、更优良的特点。 IoC容器是Spring框架中重要的核心组件之一&#xff0c;贯穿了Spring从出生到成长的整个过程&#xff0c;Spring通过I…

零基础学习,轻松打造物业服务小程序

现如今&#xff0c;物业服务已经成为了人们生活中不可或缺的一部分。为了更好地满足人们对物业服务的需求&#xff0c;许多企业和个人开始开发物业服务小程序&#xff0c;以便提供更加便捷和高效的服务。然而&#xff0c;对于大多数人来说&#xff0c;搭建一个小程序可能需要一…

智能ai绘画软件帮你用科技点亮创意火花

李明&#xff1a;嘿&#xff0c;你听说过ai绘画软件吗&#xff1f;我最近对数字艺术产生了浓厚的兴趣 王磊&#xff1a;当然&#xff01;ai绘画软件真是太神奇了&#xff01;它可以将抽象的文字描述转换成惊人的艺术作品。 李明&#xff1a;是吗&#xff1f;它们绘制的效果怎…

数据库及数据表的相关操作(一)

目录 概念知识一、管理逻辑库与数据表二、常用数据类型和约束2.1 数字数据类型2.2 字符串数据类型2.3 日期数据类型2.4 字段约束 三、索引运行机制和使用原则3.1 创建索引3.2 添加与删除索引3.3 索引的使用原则 概念知识 关系型数据库&#xff1a; 使用了关系模型的数据库系统&…

深度学习——CNN卷积神经网络

基本概念 概述 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种深度学习中常用于处理具有网格结构数据的神经网络模型。它在计算机视觉领域广泛应用于图像分类、目标检测、图像生成等任务。 核心思想 CNN 的核心思想是通过利用局部…

Linux内核源代码的目录结构包括部分:

内核核心代码&#xff1a;这部分代码包括内核的各个子系统和模块&#xff0c;如进程管理、内存管理、文件系统、网络协议栈等。这些代码构成了Linux内核的核心功能。 非核心代码&#xff1a;除了核心代码之外&#xff0c;还包括一些非核心的代码和文件&#xff0c;如库文件、固…

和chatgpt学架构03-引入UI框架(elment-plus)

目录 1 项目目录及文件的具体作用1.1 App.vue1.2 main.js的作用1.3 main.js什么时候被调用1.4 npm run serve干了什么事情1.5 package.json的作用 2 安装UI框架2.1 安装命令2.2 全局引入 3 启动工程总结 我们已经安装好了我们的vue脚手架&#xff0c;用vscode打开工程目录 要自…

【FPGA】基于C5的第一个SoC工程

文章目录 前言SoC的Linux系统搭建 前言 本文是在毕业实习期间学习FPGA的SoC开发板运行全连接神经网络实例手写体的总结。 声明&#xff1a;本文仅作记录和操作指南&#xff0c;涉及到的操作会尽量细致&#xff0c;但是由于文件过大不会分享文件&#xff0c;具体软件可以自行搜…

Leetcode-每日一题【109.有序链表转换二叉搜索树】

题目 给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为高度平衡的二叉搜索树。 本题中&#xff0c;一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差不超过 1。 示例 1: 输入: head [-10,-3,0,5,9]输出: [0,-3,9,-…

VS报错E1696 无法打开类似于stdio.h等头文件的解决办法

VS报错E1696 无法打开类似于stdio.h等头文件的解决办法 我的VS版本是2022的&#xff0c;然后我今天把同事在VS2017上的code&#xff08;一个完整的解决方案&#xff09;从svn上拿过来。结果发现&#xff0c;一大堆E1696的错误。主要表现就是项目中include的一些常用的c语言基础…

算法竞赛字符串常用操作大全

算法竞赛字符串常用操作总结来啦~ &#x1f44a; 大家好 我是寸铁&#x1f4aa; 考前需要刷大量真题,大家一起相互监督&#xff0c;每日做N题&#xff0c;一起上岸吧✌️ ~ 冲刺蓝桥杯省一模板大全来啦 &#x1f4a5; ~ 蓝桥杯4月8号就要开始了 &#x1f64f; ~ 还没背熟模…