jxTMS--web端的自动计算

41 篇文章 0 订阅

web端的自动计算

自动计算就是当用户在出报价时,当输入了某产品的折扣后价格、数量后,自动计算价格小计、折扣率。由于jxTMS的架构是web服务,所以如果将此功能放到后台来实现,则反应会相当的迟缓,用户使用感受会非常难受。所以自动计算就放到web端来实现。

自动计算的实现:

  • 定义自动计算的算式

  • jxTMS会解析这些算式,将其转换为后缀表达式形式

  • web端在创建控件时,会检测本控件是否参与自动计算,如果本控件参与自动计算,则为其安装自动计算的执行器

  • 当用户在某控件输入后,如果该控件安装有自动计算的执行器,则触发该执行器,以后缀表达式计算方法执行计算,并将计算结果赋值给结果控件,如果结果控件还参与了其它自动计算,则链式触发相关算式的自动计算

  • 执行器的结果赋值等价于用户的手工输入,所以也会被pollData所收集并自动发送到后台

以常见的销售报价为例,自动计算会用到:

  • 产品明细表中小计一栏为单价×数量

  • 产品总价应该为所有各行的小计的求和

  • 运费应是产品总价×某种费率

  • 最后的报价是(产品总价+运费)× 折扣

所以自动计算共有三种:

  • pro row:就是对数据表逐行执行的行内各列参与的计算,如每行的小计=单价×数量

  • sum col:列计算,就是对某一列进行累加,如总计是所有行的小计的累加

  • ctrl:单个控件之间的计算,如总价=总计+运费-折扣

这三种自动计算的语法请参考【线上编程手册->web界面->自动计算】中的说明。例子可参考demo中order的web文件中销售订单中的定义:

/* 产品明细表每行的扣率 =  报价 / 列表价 的百分比 */
with sfApproveSalesOrderD1t2 compute pre row itemDiscount=realPrice / itemPrice * 100;
/* 产品明细表每行的列表价小计 =  列表价 × 数量 */
with sfApproveSalesOrderD1t2 compute pre row itemSum=itemPrice * itemNum;
/* 产品明细表每行的报价小计 = 报价 × 数量 */
with sfApproveSalesOrderD1t2 compute pre row realSum=realPrice * itemNum;

/* 订单的列表总价 =  产品明细表每行的列表价小计的汇总 */
with sfApproveSalesOrder compute totalPrice = sum sfApproveSalesOrderD1t2.itemSum;
/* 订单的报价汇总=  产品明细表每行的报价小计的汇总 */
with sfApproveSalesOrder compute sumPrice = sum sfApproveSalesOrderD1t2.realSum;
/* 订单的报价折扣率=  报价汇总 /  列表总价 的百分比 */
with sfApproveSalesOrder compute discoutRatio=sumPrice / totalPrice * 100;

/* 订单的成交金额=  报价汇总 - 折扣金额 */
with sfApproveSalesOrder compute realPrice=sumPrice - extDiscount;
/* 订单的实际折扣率=  成交金额 /  列表总价 的百分比 */
with sfApproveSalesOrder compute realDiscoutRatio=realPrice / totalPrice * 100;

自动计算语法中的计算表达式的语法为:

计算式 (算符 计算式)*

其中,算法包括:+、-、*、/

计算式的语法:

计算单元 (算符 计算单元)*
左圆括号 计算单元 (算符 计算单元)+ 右圆括号

计算单元则包括:

(数据表名 .)? 变量名
数值

只有列计算中的计算单元有【数据表名.】的前缀,其它两种自动计算都不需要。

列计算的时候还支持按条件汇总,即当有【when 条件表达式】时,只有当条件表达式成立时,才汇总该行。列计算的完整语法为:

with div名 compute 数据名= 表名.列名 (frequency)? (when 条件表达式 (, 条件表达式)*)?

其中,如果有frequency,则不累加该列的数值,而是累加次数。

条件表达式的语法如下:

列名 比较符 值
列名 rule=正则表达式字符串

其中,比较符和之前其它条件判断语法中的比较符一样,包括:等于【==】、不等【!=】、大于【>】、大于等于【>=】、小于【<】、小于等于【<=】、相似【like】共七种。值包括字符串、数值、bool、日期等。

目前,jxTMS已经打包为云服务器镜像,开发者开箱即用:
jxTMS-腾讯云市场​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值