需求:通过销售合同主表销售回款记录表关联查询出来剩余应收金额,也叫结存金额

先写后台代码:

SalesContract.xml代码如下:通过用销售合同的销售合同金额-销售回款记录的已收合同金额总和 = 销售合同结存金额

fs.money - nvl((select SUM(fe.ACCEPT_MONEY) from FINANCIAL_SALES_DETALL fe where fe.ACCEPT_ID = fs.ID),'0') as unAcceptMoney
<select id="queryFinancialSalesContractList" parameterType="map"resultType="com.yhzn.model.finance.SalesContract">SELECTnvl((select SUM(fd.ACCEPT_MONEY) from FINANCIAL_SALES_DETALL fd where fd.ACCEPT_ID = fs.ID),'0') as sumAcceptMoney,fs.money - nvl((select SUM(fe.ACCEPT_MONEY) from FINANCIAL_SALES_DETALL fe where fe.ACCEPT_ID = fs.ID),'0') as unAcceptMoney,nvl((select SUM(fi.INVOICED_AMOUNT) from FINANCLAL_SALES_INVOICING fi where fi.CONTRACT_ID = fs.ID),'0') as invoicedAmount,(select co.UNIT_NAME from CUSTOMER_INFO co where co.ID = fs.CUSTOMER_ID) as unitName,(select co.TYPE from CUSTOMER_INFO co where co.ID = fs.CUSTOMER_ID) as customerCategory,(SELECT count( id ) FROM FINANCIAL_SALES_DETALL where ACCEPT_ID=fs.ID) as detallCount,(SELECT count( id ) FROM CERTIFICATE where CONTRACT_ID=fs.ID) as certificateCount,(SELECT count( id ) FROM FINANCLAL_SALES_INVOICING where CONTRACT_ID=fs.ID) as salesInvoicingCount,fs.ID,fs.CUSTOMER_ID,fs.ACCEPT_MONEY,fs.REMARK,fs.CREATE_NAME,fs.CREATE_DATE,fs.MODIFY_NAME,fs.MODIFY_DATE,fs.DELETE_FLAG,fs.REV1,fs.REV2,fs.REV3,fs.CONTRACT_NAME,fs.CONTRACT_NO,fs.SIGN_DATE,fs.PROVINCE_OR_OUTSIDE,fs.CITY,fs.INVOICED_AMOUNT,fs.MONEY,fs.RESPONSIBLE_PERSONFROMFINANCIAL_SALES_CONTRACT fswhere 1=1<if test="customerId!=null and customerId!=''">and fs.CUSTOMER_ID like '%${customerId}%'</if><if test="city!=null and city!=''">and fs.CITY like '%${city}%'</if><if test="contractName!=null and contractName!=''">and fs.CONTRACT_NAME like '%${contractName}%'</if><if test="responsiblePerson!=null and responsiblePerson!=''">and fs.RESPONSIBLE_PERSON like '%${responsiblePerson}%'</if><if test="customerCategory!=null and customerCategory!=''">and EXISTS(SELECT co.TYPE FROM CUSTOMER_INFO co WHERE co.ID = fs.CUSTOMER_ID and co.TYPE = #{customerCategory,jdbcType=VARCHAR})</if><if test="beginDate != null and beginDate != ''">and fs.SIGN_DATE<![CDATA[>=]]>to_date(#{beginDate},'yyyy-mm-dd')</if><if test="endDate != null and endDate != ''">and fs.SIGN_DATE <![CDATA[<]]>to_date(#{endDate},'yyyy-mm-dd')</if><if test='jcMoney=="0"'>and fs.money - nvl((select SUM(fe.ACCEPT_MONEY) from FINANCIAL_SALES_DETALL fe where fe.ACCEPT_ID = fs.ID),'0') &gt; 0</if><if test='jcMoney=="1"'>and fs.money - nvl((select SUM(fe.ACCEPT_MONEY) from FINANCIAL_SALES_DETALL fe where fe.ACCEPT_ID = fs.ID),'0') &lt; 60000</if><if test='jcMoney=="2"'>and fs.money - nvl((select SUM(fe.ACCEPT_MONEY) from FINANCIAL_SALES_DETALL fe where fe.ACCEPT_ID = fs.ID),'0') &gt; 60000</if>order by fs.CREATE_DATE desc</select>

前端SalesContract.jsp代码:前台显示后台查询的虚拟字段即可

{field : 'unAcceptMoney',title : '结存',width : '5%',align : 'center',
}

效果如下:

接下来要给计算出来的结存设置查询条件

首先在前端写如下代码,jsp页面的搜索条件里面写个select下拉框,里面有四个option标签,还有value值

select下拉框设置默认值只需要在需要设置成默认值的地方加个selected

结存条件<select id="jcMoney" name="jcMoney" class="easyui-combobox" style="width:150px;"> <option value="0">结存大于0</option>  <option value="1">结存小于60000</option> <option value="2">结存大于60000</option><option value="3" selected>所有</option> </select>

如下是查询结存条件的js方法,根据结存条件查询queryParameter.jcMoney = $("#jcMoney").combobox("getValue");

下拉框里面获取到的是$("#jcMoney").combobox("getValue")

//查询条件
function queryFun() {var queryParameter = $('#dg').datagrid("options").queryParams;/* 根据合同名称查询 */queryParameter.contractName = $("#contractNameId").val();/* 根据城市查询 */queryParameter.city = $("#searchCity").combobox("getText");/* 根据负责人查询 */queryParameter.responsiblePerson = $("#searchResponsiblePerson").combobox("getText");/* 根据客户单位名称查询 */queryParameter.customerId = $("#searchCustomerId").combobox("getValue");/* 根据客户类别查询 */queryParameter.customerCategory = $("#searchCustomerCategory").combobox("getText");/* 根据结存条件查询 */queryParameter.jcMoney = $("#jcMoney").combobox("getValue");/* 根据签订时间查询 */queryParameter.beginDate = $("#f_beginDate").datebox("getValue");/* 根据签订时间查询 */queryParameter.endDate = $("#f_endDate").datebox("getValue");$("#dg").datagrid("reload");
}

后台的SalesContractController类的方法如下:

String jcMoney = request.getParameter("jcMoney");//结存parameter.put("jcMoney",jcMoney);
/**
* 查询销售合同列表* @param request* @return
*/
@RequestMapping(value="/queryFinancialSalesContractList", method = RequestMethod.POST)
@ResponseBody
public PageUtil queryFinancialSalesContractList(HttpServletRequest request){//获取登录人信息 User user= (User) request.getSession().getAttribute("user");//日志类型,操作人,操作内容,操作人IP,操作方法sysLogService.insertSysLog("查询",user.getTrueName(),"查询人员信息列表 ",user.getLoginIp(),"/financialSalesContract/queryFinancialSalesContractList");int page = Integer.parseInt(request.getParameter("page"));int rows = Integer.parseInt(request.getParameter("rows"));String city = request.getParameter("city");//城市    模糊查询的时候需要用到String contractName = request.getParameter("contractName");//合同名称String responsiblePerson = request.getParameter("responsiblePerson");//创建人String customerId = request.getParameter("customerId");//客户单位名称String customerCategory = request.getParameter("customerCategory");//客户单位名称String jcMoney = request.getParameter("jcMoney");//结存String beginDate = request.getParameter("beginDate");//签订开始时间String endDate = request.getParameter("endDate");//签订结束时间Map<String,Object> parameter = new HashMap<String,Object>();parameter.put("city", city);parameter.put("contractName",contractName);parameter.put("responsiblePerson",responsiblePerson);parameter.put("customerCategory",customerCategory);parameter.put("jcMoney",jcMoney);parameter.put("beginDate",beginDate);parameter.put("endDate",endDate);parameter.put("customerId",customerId);PageBounds bounds = new PageBounds(page , rows );List<SalesContract> list = salesContractService.queryFinancialSalesContractList(bounds, parameter);// 获得结果集条总数int total = ((PageList<SalesContract>) list).getPaginator().getTotalCount();// 页面列表展示PageUtil result = new PageUtil();result.setRows(list);result.setTotal(total);return result;
}

SalesContract.xml文件代码如下:test里面是从前端传过来的,0是结存条件option的value

SELECTfs.money - nvl((select SUM(fe.ACCEPT_MONEY) from FINANCIAL_SALES_DETALL fe where fe.ACCEPT_ID = fs.ID),'0') as unAcceptMoney
FROMFINANCIAL_SALES_CONTRACT fs
where 1=1<if test="customerCategory!=null and customerCategory!=''">and EXISTS(SELECT co.TYPE FROM CUSTOMER_INFO co WHERE co.ID = fs.CUSTOMER_ID and co.TYPE = #{customerCategory,jdbcType=VARCHAR})</if><if test='jcMoney=="0"'>and fs.money - nvl((select SUM(fe.ACCEPT_MONEY) from FINANCIAL_SALES_DETALL fe where fe.ACCEPT_ID = fs.ID),'0') &gt; 0</if>
order by fs.CREATE_DATE desc

实现的效果如下:

这个采购合同计算显示为0的原因是因为我新增了一条销售合同,但是我没有加采购回款记录和采购开票记录,所以它这计算的时候没有默认值,计算出来就为0,所以我可以在PurchaseContractMapper.xml的queryFinancePurchaseContractList方法里面用oracle设置默认值的方法给子查询出来的已收合同金额总和 和 开票金额总和  nvl(" " , " ");

nvl((select SUM(fd.PAY_MONEY) from FINANCE_PURCHASE_DETAIL fd where fd.PAY_ID = f.ID),'0') as sumPayMoney,
f.MONEY-nvl((select SUM(fd.PAY_MONEY) from FINANCE_PURCHASE_DETAIL fd WHERE fd.PAY_ID = f.ID),'0') as unPayMoney,
nvl((select SUM(fp.INVOICED_AMOUNT) from FINANCLAL_PURCHASE_INVOICING fp where fp.CONTRACT_ID = f.ID),'0') as invoicedAmount,

改完之后效果如下

给合同金额,已收合同金额,结存和已开票金额计算出来的总和写一个显示合计多少

代码如下:

$('#dg').datagrid({onLoadSuccess: function(data) {var rows = $('#dg').datagrid('getRows') //获取当前的数据行var ptotal = 0 //计算采购开票金额的总和var invo = 0 //计算采购已收合同金额的总和var sumMoney = 0;//计算采购合同金额总和var un =0 //计算采购结存总和for(var i = 0; i < rows.length; i++) {ptotal += parseFloat(rows[i]['invoicedAmount']);invo += parseFloat(rows[i]['sumPayMoney']);sumMoney += parseFloat(rows[i]['money']);un += parseFloat(rows[i]['unPayMoney']);}if(isNaN(ptotal)){ptotal='0'}if(isNaN(invo)){invo='0'}if(isNaN(sumMoney)){sumMoney='0'}if(isNaN(un)){un='0'}//新增一行显示统计信息$('#dg').datagrid('appendRow', {id:'unPayMoneyy',city: '<b>合计:</b>',invoicedAmount:ptotal,sumPayMoney:invo,money:sumMoney,unPayMoney:un});},rowStyler: function(index, row) {if(row.city == '<b>合计:</b>') {return 'background-color:#EAEAEA;color:blue';}}});

显示效果如下图:

实现销售合同结存条件相关推荐

  1. 使用SSM+easyui做个简单的增删改查

    先把后台的代码展示出来,有注释的,业务就是销售合同列表的增删改查 财务销售合同实体类 /*** 财务销售合同实体类* @author Liany*/ public class SalesContrac ...

  2. rust自动售卖机英文_中英文设备销售合同.doc

    中英文设备销售合同 中英文设备销售合同 篇一:设备买卖合约书(中英文) 立合约书人:买方:超能国际有限公司(以下简称甲方)卖方:万金科技股份有限公司(以下简称乙方). This agreement i ...

  3. 高新技术企业申请条件是什么?

    高新技术企业申请条件具体如下: 1.企业申请认定时须注册成立一年以上.有明确的企业章程和严格的技术.财务管理制度,企业的经营期在十年以上. 2.从事经认定的一种或者多种高新技术以及其产品的研究.开发. ...

  4. 2022年深圳市国家高新技术企业认定条件、时间、流程

    一.申请内容 高新技术企业认定. 高新技术企业培育入库. 二.设定依据 (一)<高新技术企业认定管理办法>(国科发火[2016]32号) (二)<高新技术企业认定管理工作指引> ...

  5. 首版次高端软件申报条件和好处

    详情请咨询颜经理:13370553015 申报条件 1.申报主体应是山东省境内注册的独立法人,管理规范.依法纳税.信誉良好.无偷漏税等不良记录,财务状况良好.汇算清缴年度未发生重大安全事故.重大质量事 ...

  6. 2022年成都市双流区33条电子信息产业政策申报条件、材料及政策咨询汇编

    今天小编为您带来2022年四川省成都市双流区33条电子信息产业政策申报条件.材料及政策咨询汇编,希望我的文章能给您带来帮助,如有需要,速联系小编.成都市各区县包括锦江区.青羊区.金牛区.武侯区.成华区 ...

  7. 名额不多!2022年安徽省商标品牌示范企业申报时间条件及奖励补助

    2022年安徽省商标品牌示范企业申报指南,关于商标品牌示范企业各地市申报时间,文章中都有,那么如果你有申报安徽省商标品牌示范企业意向的话,不妨联系小编这边咨询合作. 一.安徽省商标品牌示范企业申请范围 ...

  8. C++ 笔记(32)— 预处理、文件包含include、宏替换define、条件包含ifndef、define

    C/C++预处理器在源代码编译之前对其进行一些文本性质的操作. 它的主要任务包括删除注释 . 插入 #include 指令包含的文件的内容 . 定义和替换由 #defme 指令定义的符号以及确定代码的 ...

  9. Go 知识点(11) — goroutine 泄露、设置子协程退出条件

    1. 问题现象 如果在开发过程中不考虑 goroutine 在什么时候能退出和控制 goroutine 生命期,就会造成 goroutine 失控或者泄露的情况 ,看示例代码: func consum ...

  10. NLP --- 条件随机场CRF详解 重点 特征函数 转移矩阵

    20210517 http://www.tensorinfinity.com/paper_170.html 上一节我们介绍了CRF的背景,本节开始进入CRF的正式的定义,简单来说条件随机场就是定义在隐 ...

最新文章

  1. python怎么安装matplotlib-[Python]一步步安装numpy,matplotlib
  2. 程序员之路──如何学习C语言并精通C语言
  3. python输出word内容_Django输出word文件(.doc),只在内容中显示原始html
  4. Python基础概念_7_数据结构
  5. JVM--类加载机制
  6. oracle opaque_transform,oracle databse link
  7. RuoYi-Cloud 进阶篇_04( Seata 高可用集群 AT模式 需求实战)
  8. 一个空间配置多个虚拟主机
  9. Visual Studio-运行库的设置
  10. 库表操作 - 存储引擎
  11. Neural Networks and Deep Learing笔记:一个简单的识别手写数字的神经网络
  12. 2020大学计算机答案,超星2020大学计算机基础答案 全
  13. C# 网上收集的一些所谓的开源项目
  14. OpenStack入门到实战视频教程全集下载(罗勇老师经典教程系列)
  15. SpringCloudConfig分布式配置中心介绍与搭建使用以及ConfigClient实现动态刷新配置
  16. 百家号素材审核规范说明
  17. Android 手机红外遥控器实现(转)
  18. Python调用使用自颁发证书的https接口
  19. 使用 Coinbase 在 Polygon 网络上获取 MATIC
  20. 单元覆盖测试排除某些类烧苗_智慧树人体生理学第一单元章节测试网课答案选修课慕课答案...

热门文章

  1. PhotoShop中蒙版介绍
  2. 0xc0000225无法进系统_win10系统出现0xc0000225无法进入系统的恢复方法
  3. android最好的画图笔记app,盘点:好用的笔记类APP有哪些?
  4. 【Python 实战基础】如何绘制关系网格图展示8个节点间的关系
  5. 谷歌(gmail)邮箱开启SMTP服务
  6. 全国青少年软件编程等级考试标准Python(1-6级)
  7. Linux 网络通讯 : smbd 命令详解
  8. 30件 鸟logo - 企业logo设计 - logo免费
  9. 阿里Leader都干些啥
  10. 计算机程序设计c++ 10-2:析构函数