【springmvc+mybatis项目实战】杰信商贸-21.合同总金额SQL

简介:
我们上一次解决了合同的货物以及附件显示功能,接下来我们要完成我们的另一项功能,也即是我们的购销合同的总金额。

我们的购销合同的总金额由以下金额构成:货物的总金额,而货物的总金额由货物本身的金额+附件金额构成,也就是说,我们想要获取购销合同的总金额,就要获取合同下的所有货物的总金额(货物总金额要获取所有货物的金额,以及这个货物下的所有附件的总金额)。

听起来有点绕,但是我们把它写成sql语句,分好层次,我们就能够清晰的理解购销合同的总金额是如何来的了:

1)可以通过货物的新增时,同步计算货物的总金额和和合同的总金额;在附件新增时,同步计算附件的总金额和合同的总金额;(程序来完成)(修改、删除时重新计算)
2)SQL查询实现
货物的总金额
select sum(cnumber*price) as cptotal from contract_product_c
where contract_id ='471e562b-bfa5-4ba7-a2b5-17e9b0d40179'

附件的总金额
select sum(cnumber*price) as exttotal from ext_cproduct_c
       where contract_product_id in (select contract_product_id from contract_product_c where contract_id=c.contract_id)

最终
select 
  (select count(*) from contract_product_c
  where contract_id=c.contract_id)  as cpnum,
  (select count(*) from ext_cproduct_c
          where contract_product_id in (select contract_product_id from contract_product_c where contract_id=c.contract_id)
      ) as extnum,
  ( 
      nvl((select sum(cnumber*price) as cptotal from contract_product_c
      where contract_id =c.contract_id),0)
      +
      nvl(
      (select sum(cnumber*price) as exttotal from ext_cproduct_c
       where contract_product_id in (select contract_product_id from contract_product_c where contract_id=c.contract_id))
       ,0)
  ) as total_amount,
c.CONTRACT_ID,c.OFFEROR,c.CONTRACT_NO,c.SIGNING_DATE,c.INPUT_BY,c.CHECK_BY,c.INSPECTOR,c.IMPORT_NUM,c.CREQUEST,c.CUSTOM_NAME,c.DELIVERY_PERIOD,c.SHIP_TIME,c.TRADE_TERMS,c.REMARK,c.PRINT_STYLE,c.OLD_STATE,c.STATE,c.OUT_STATE

from contract_c c
注:nvl(a,b),nvl函数是Oracle的一个函数(其他数据库要进行修改),参数a是取出的值,参数b是当a值为空null的时候值默认为b值。

我们修改ContractMapper的find配置语句块:
<!-- 查询多个 -->
	<!-- 如果支持异构数据,必须针对每个数据库写一个SQL语句,因为使用了底层数据函数nvl -->
	<select id="find" parameterType="map" resultMap="contractRM">
		select 
  		(select count(*) from contract_product_c
 		 where contract_id=c.contract_id)  as cpnum,
  		(select count(*) from ext_cproduct_c
          where contract_product_id in (select contract_product_id from 
          contract_product_c where contract_id=c.contract_id)
         ) as extnum,
  		( nvl((select sum(cnumber*price) as cptotal from contract_product_c
      	  where contract_id =c.contract_id),0)
      		+
      	  nvl((select sum(cnumber*price) as exttotal from ext_cproduct_c
          where contract_product_id in (select contract_product_id from 
          contract_product_c where contract_id=c.contract_id)),0)
          ) as total_amount,
		c.CONTRACT_ID,c.OFFEROR,c.CONTRACT_NO,c.SIGNING_DATE,c.INPUT_BY,c.CHECK_BY,
		c.INSPECTOR,c.IMPORT_NUM,c.CREQUEST,c.CUSTOM_NAME,c.DELIVERY_PERIOD,c.SHIP_TIME,c.
		TRADE_TERMS,c.REMARK,c.PRINT_STYLE,c.OLD_STATE,c.STATE,c.OUT_STATE
		from contract_c c
	</select>

接下来我们重启服务器来测试:
我们可以看到,这个购销合同的总结是1600

我们来检验一下是不是1600。

首先,它有两个货物

总金额为:200+1200=1400。然后看一下附件,只有一件附件


附件总金额为200,所以最终总金额为1400+200=1600,和我们程序计算的一模一样。我们的总金额计算方法成功!


但是,我们要在增加、删除以及修改的时候对总金额进行更新,所以要修改一部分代码,这里我们就不在赘述

转载请注明出处:http://blog.csdn.net/acmman/article/details/48627709

相关文章
|
1天前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
13 3
|
1天前
|
SQL Java 数据库连接
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
8 2
|
1天前
|
安全 前端开发 Java
挑战5分钟内基于Springboot+SpringMVC+Mybatis-plus快速构建web后端三层架构
挑战5分钟内基于Springboot+SpringMVC+Mybatis-plus快速构建web后端三层架构
7 1
|
4天前
|
设计模式 前端开发 Java
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
9 1
|
4天前
|
前端开发 Dubbo Java
spring面试题_spring mvc面试题_springboot面试题库
spring面试题_spring mvc面试题_springboot面试题库
|
6天前
|
JSON 前端开发 Java
【JavaEE进阶】 关于Spring MVC 响应
【JavaEE进阶】 关于Spring MVC 响应
14 3
|
7天前
|
缓存 NoSQL Java
在 SSM 架构(Spring + SpringMVC + MyBatis)中,可以通过 Spring 的注解式缓存来实现 Redis 缓存功能
【6月更文挑战第18天】在SSM(Spring+SpringMVC+MyBatis)中集成Redis缓存,涉及以下步骤:添加Spring Boot的`spring-boot-starter-data-redis`依赖;配置Redis连接池(如JedisPoolConfig)和连接工厂;在Service层使用`@Cacheable`注解标记缓存方法,指定缓存名和键生成策略;最后,在主配置类启用缓存注解。通过这些步骤,可以利用Spring的注解实现Redis缓存。
25 2
|
12小时前
|
JSON 前端开发 Java
spring mvc 请求与响应
spring mvc 请求与响应
6 0
|
12小时前
|
JSON 前端开发 Java
spring mvc Rest风格
spring mvc Rest风格
7 0
|
14小时前
|
SQL Java 数据库连接
Mybatis日志SQL解析
Mybatis日志SQL解析
4 0