这是一个 (原金额 - 优惠券 = 实付金额) 的一个接口

原代码:

     BigDecimal amount = new BigDecimal(computeAmtCardParam.getAmount());BigDecimal vou = null;boolean existed = amount.doubleValue() >= 0.00 && (MobileCardvouConstants.CASH_COUPON.equals(couponDef.getCouType()) || MobileCardvouConstants.DISCOUNT_COUPON.equals(couponDef.getCouType()));if(existed){if (MobileCardvouConstants.CASH_COUPON.equals(couponDef.getCouType())){//Calculate the amount of cash couponsvou = new BigDecimal(couponDef.getVouContent());result.setPaymoney(amount.subtract(vou));result.setOriginalAmt(amount);result.setConsumeAmt(vou);if(result.getPaymoney().compareTo(BigDecimal.valueOf(0.00)) < 0) {result.setPaymoney(BigDecimal.valueOf(0.00));}}else if (MobileCardvouConstants.DISCOUNT_COUPON.equals(couponDef.getCouType())){//Calculate the discount amountvou = new BigDecimal(couponDef.getVouContent());result.setPaymoney(amount.multiply(vou.multiply(BigDecimal.valueOf(0.1))));result.setOriginalAmt(amount);result.setConsumeAmt(result.getOriginalAmt().subtract(result.getPaymoney()));if(result.getPaymoney().compareTo(BigDecimal.valueOf(0.00)) < 0) {result.setPaymoney(BigDecimal.valueOf(0.00));}}}else{result.setPaymoney(amount);result.setOriginalAmt(amount);result.setConsumeAmt(BigDecimal.valueOf(0.00));}//Coupon calculationresult.setResultCode(MobileApiConstants.RESULT_CODE_SUCCESS);return result;

原来的代码思路是:先判断金额以及优惠券类型是否存在,在这个判断的基础上再嵌套一层判断优惠券类型,然后根据优惠券的类型再给金额做出处理,最后将原金额,优惠券金额,实付金额输出。这里他的思路很直接,先判断金额是否大于0且是否存在指定的优惠券类型:不存在则将优惠券金额设置成0,然后将指定字段输出;存在则再判断一次类型,根据不同类型做金额处理最后将指定字段输出。这段代码个人觉得中规中矩,但是很多代码都是多余的,比如在计算金额后得到金额小于0则用0来表示,完全是没有必要写成两段话的,因此我对这段代码进行了一些优化。

然后下面是我对这段代码的优化:

     BigDecimal amount = new BigDecimal(computeAmtCardParam.getAmount());BigDecimal originalAmount = amount.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : amount;BigDecimal vouContent =  couponDef.getVouContent() == null ? BigDecimal.ZERO : new BigDecimal(couponDef.getVouContent());  BigDecimal payMoney = null;        if(MobileCardvouConstants.CASH_COUPON.equals(couponDef.getCouType())) {payMoney = originalAmount.subtract(vouContent).compareTo(BigDecimal.valueOf(0.0)) < 0 ? BigDecimal.ZERO : originalAmount.subtract(vouContent);}else if(MobileCardvouConstants.DISCOUNT_COUPON.equals(couponDef.getCouType())) {payMoney = originalAmount.multiply(vouContent.multiply(BigDecimal.valueOf(0.1)));}else {payMoney = originalAmount;}result.setPaymoney(payMoney);result.setConsumeAmt(vouContent);result.setOriginalAmt(originalAmount);result.setResultCode(MobileApiConstants.RESULT_CODE_SUCCESS);return result;

这段代码中,我使用了两个三目运算,第一个三目运算就可以确定实际收款金额小于0后使用0代替,第二个三目运算符可以确定优惠的类型,并根据优惠类型来做出计算。这样的做法可以避免在判断中做出进一步的判断0的计算,然后通过不同的优惠券类型进行相应计算,这里只需要得到计算的结果后直接将数值传给结果Bean即可。

关于计算优惠券金额的部分优化相关推荐

  1. 智源青年科学家梁云:异构系统中张量计算的自动调度和优化框架

    与6位图灵奖得主和100多位专家 共同探讨人工智能的下一个十年 长按图片,内行盛会,首次免费注册 北京智源大会倒计时:9天  计算机体系结构领域国际顶级会议每次往往仅录用几十篇论文,录用率在20%左右 ...

  2. COUNT(*)计算行数有哪些优化手段

    COUNT(*)计算行数有哪些优化手段 --无索引 DROP TABLE T_20170704_COUNT_LHR_01 PURGE; CREATE TABLE T_20170704_COUNT_LH ...

  3. Java 实现循环输入商品编号和购买数量,当输入n时结账,结账时计算应付金额并且找零

    问题描述 循环输入商品编号和购买数量,当输入n时结账,结账时计算应付金额并且找零. 目录 问题描述 (一)定义初始变量 (二)问题分析 (1)循环语句的选择 1. for语句 2. while语句 3 ...

  4. 【DB笔试面试622】在Oracle中,说说COUNT(*)计算行数有哪些优化手段?

    ♣ 题目部分 在Oracle中,说说COUNT(*)计算行数有哪些优化手段? ♣ 答案部分 手段 命令 执行计划 主要原理 详细说明 性能情况 全表扫描 TABLE ACCESS FULL 全表扫描 ...

  5. 单代号网络图计算例题_还在熬夜计算工期?不会优化工期?学会双代号网络图效率提高80%,升职加薪其实不难...

    还在熬夜计算工期?不会优化工期?学会双代号网络图效率提高80% 最近有同学私信小哥说:有没有学习双代号网络图绘制的资料,他在建筑工地上干施工员,项目经理让他出一份工期规划图,需要用到网络图的知识,这可 ...

  6. js计算贷款金额怎么算

    js实现贷款能力计算方法有哪些,js计算贷款金额怎么算代码教程如下: 1.自定义现持有资金 2.自定义现家庭月收入 3.自定义家庭月固定支出 4.自定义您期望贷款年限 5.自定义计划购买房屋面积 计算 ...

  7. 「Python条件结构」根据输入数量对应的折扣率计算应付金额

    功能要求 编写一个控制台应用程序,实现商场打折促销商品.购买某种商品根据购买数量(x)的不同给予不同的折扣.从键盘中输入用户购买商品的数量和商品的单价,根据用户输入的购买商品的数量及该商品的单价,输出 ...

  8. html中购物车总金怎么算额,计算购物车金额总和( jquery )

    今天简单写了一个jq版购物车计算金额总和的例子,如图: 整体页面代码如下: *{ list-style: none; } html,body{ margin: 0; padding: 0; } .al ...

  9. sql 占比计算_数据库索引的优化及SQL处理过程(建议收藏)

    想要设计出好的索引,首先必须了解SQL语句在数据库服务器中的处理过程,本文介绍 数据库索引设计与优化 中几个对索引优化非常重要的概念. 谓词 谓词就是条件表达式. SQL语句的where子句由一个或者 ...

最新文章

  1. Java分布式 RPC 框架性能大比拼,Dubbo真的最差吗?
  2. BCH链上交易量翻5倍的背后隐藏着哪些秘密?
  3. pythonexcel汇总_用python汇总excel表格数据-怎样用python遍历表格中的内容
  4. 新网站如何推广 新建设的网站如何宣传
  5. Servlet/jsp和Action/jsp传值
  6. 戴尔全面进军一体机市场【我眼中的戴尔转型】
  7. java 无法注入service_SpringBoot集成shiro,MyRealm中无法@Autowired注入Service的问题
  8. SonarQube搭建和使用教程
  9. lombok之@NoArgsConstructor、@AllArgsConstructor和@Data注解
  10. 拦截游戏窗口被移动_家中最值得购入的17款儿童游戏,教你如何从IPAD中夺回小朋友的注意力...
  11. 计算器与计算机小键盘的使用,会计神器!用上Cherry轴的计算器还能当小键盘用...
  12. 数据结构:堆栈的区别
  13. 目标跟踪 SiamRPN++(SiamRPN++:Evolution of Siamese Visual Tracking with Very Deep Networks)
  14. 隔离变压器不触电原因
  15. EMCP  物联网云平台萤石云密钥功能使用手册
  16. IE代理服务器没有响应 浏览器无法打开网页解决方法(浏览器无法打开网页但是可以使用其他软件)
  17. 2015-华为招聘公开测试题目-单词迷宫
  18. godot mysql_Go 每日一库之 godotenv
  19. 企业发放的奖金根据利润提成问题
  20. 技能干货:产品经理该如何入门数据分析?

热门文章

  1. 大数据投资人必读:中国大数据发展与投资分析报告
  2. 2022年湖南省中医执业医师考试第二单元中医诊断学(四)
  3. dof景深matlab,CG制作景深(DOF)的方法
  4. [2018-03-06] 基于Django的轻量级CMS Mezzanine搭建笔记
  5. 《 降伏其心(一)》
  6. android adb 控制手机
  7. 数字图像处理与Python实现-图像信号处理-图像坏点修复
  8. 声源定位matlab模拟,毕业论文-基于MATLAB的声源定位系统.doc
  9. 《ClickHouse企业级应用:入门、进阶与实战》1 全面了解ClickHouse
  10. 从零开始学习信号完整性--7-SI分析仿真