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

先写后台代码:

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. 管理数百个Kubernetes集群需要什么?
  2. 多线程编程1-NSThread
  3. golang 相互引用_golang go run undefined 同一个package中函数互相调用的问题
  4. MySQL删除数据语句
  5. 管理角色认知-新晋管理常常犯的错
  6. 在 Perl 中使用 Getopt::Long 模块来接收用户命令行参数
  7. MFC中获取各种类指针的方法 (转)
  8. nginx 服务器并发优化
  9. 大数据司法时代的立言、立功与立德
  10. 全面认识痛风:症状、风险因素、发病机理及管理
  11. 2010最有趣牛人语录100句
  12. Maven 阿里云配置 此 MAVEN 配置地表最强不接受反驳
  13. CCF201809-3 元素选择器
  14. Sam Altman专访:GPT-4没太让我惊讶,ChatGPT则让我喜出望外
  15. SQL Server 2012 下载与安装
  16. android平板电脑怎么才能连接,安卓平板电脑如何连接网线?
  17. 罗丹明RB/四甲基罗丹明标记肌醇六磷酸/植酸,Phytic Acid, Rhodamine B/TRITC labeled;Rhodamine B/TRITC-Phytic Acid
  18. 能玩java游戏oppo按键手机_游戏手机排行榜 | OPPO Reno果然不负期待
  19. Android多渠道打包配置
  20. 信息、信息技术、信息系统、软件、信息化、企业信息化

热门文章

  1. 【书影观后感 四】《围城》十年
  2. EF中的Guid主键
  3. 用DEV-C++制作狼人杀
  4. android手机误删短信恢复软件,苹果手机短信误删恢复工具_安卓手机已删除短信恢复软件-万能数据恢复大师官网...
  5. .net framework 3.5 无法验证证书签名,安装错误:0x80096004
  6. 怎样完美卸载IE8浏览器
  7. CAD2020下载AutoCAD2020下载安装详细教程
  8. c语言大象喝水,大象喝水歇后语的答案
  9. CPE/CPA/CPL/CPC/CPM/CPO/CPS/CPV/CPT/CPP广告
  10. 如何将F4V格式的视频转换成MP4格式 1