日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Drools实战-个人所得税计算器

發(fā)布時(shí)間:2023/12/18 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Drools实战-个人所得税计算器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

1、個(gè)人所得稅計(jì)算器

1.1、名詞解釋

1.2、計(jì)算規(guī)則

1.3、實(shí)現(xiàn)步驟


1、個(gè)人所得稅計(jì)算器

1.1、名詞解釋

稅前月收入:即稅前工資,指交納個(gè)人所得稅之前的總工資

應(yīng)納稅所得額:指按照稅法規(guī)定確定納稅人在一定期間所獲得的所有應(yīng)稅收入減除在該納稅期間依法允許減除的各種支出后的余額

稅率:是對(duì)征稅對(duì)象的征收比例或征收額度

速算扣除數(shù):指為解決超額累進(jìn)稅率分級(jí)計(jì)算稅額的復(fù)雜技術(shù)問(wèn)題,而預(yù)先計(jì)算出的一個(gè)數(shù)據(jù),可以簡(jiǎn)化計(jì)算過(guò)程

扣稅額:是指實(shí)際繳納的稅額

稅后工資:是指扣完稅后實(shí)際到手的工資收入

1.2、計(jì)算規(guī)則

要實(shí)現(xiàn)個(gè)人所得稅計(jì)算器,需要了解如下計(jì)算規(guī)則:

規(guī)則編號(hào)名稱描述
1計(jì)算應(yīng)納稅所得額應(yīng)納稅所得額為稅前工資減去3500
2設(shè)置稅率,應(yīng)納稅所得額<=1500稅率為0.03,速算扣除數(shù)為0
3設(shè)置稅率,應(yīng)納稅所得額在1500至4500之間稅率為0.1,速算扣除數(shù)為105
4設(shè)置稅率,應(yīng)納稅所得額在4500志9000之間稅率為0.2,速算扣除數(shù)為555
5設(shè)置稅率,應(yīng)納稅所得額在9000志35000之間稅率為0.25,速算扣除數(shù)為1005
6設(shè)置稅率,應(yīng)納稅所得額在35000至55000之間稅率為0.3,速算扣除數(shù)為2755
7設(shè)置稅率,應(yīng)納稅所得額在55000至80000之間稅率為0.35,速算扣除數(shù)為5505
8設(shè)置稅率,應(yīng)納稅所得額在80000以上稅率為0.45,速算扣除數(shù)為13505
9計(jì)算稅后工資扣稅額=應(yīng)納稅所得額*稅率-速算扣除數(shù) 稅后工資=稅前工資-扣稅額

例子:

稅前工資:10000

應(yīng)繳納所得額:10000-3500 = 6500

稅率:0.2

速算扣除數(shù):555

扣稅額:6500 * 0.2 - 555 = 745

稅后工資:10000 - 745 = 9255

1.3、實(shí)現(xiàn)步驟

基于Spring Boot整合Drools的方式來(lái)實(shí)現(xiàn)。

第一步:創(chuàng)建maven工程calculation并配置pom.xml文件

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starters</artifactId><version>2.0.6.RELEASE</version></parent><groupId>org.example</groupId><artifactId>calculation</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency><!--drools規(guī)則引擎--><dependency><groupId>org.drools</groupId><artifactId>drools-core</artifactId><version>7.6.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>7.6.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-templates</artifactId><version>7.6.0.Final</version></dependency><dependency><groupId>org.kie</groupId><artifactId>kie-api</artifactId><version>7.6.0.Final</version></dependency><dependency><groupId>org.kie</groupId><artifactId>kie-spring</artifactId><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></exclusion></exclusions><version>7.6.0.Final</version></dependency></dependencies><build><finalName>${project.artifactId}</finalName><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.*</include></includes><filtering>false</filtering></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build></project>

第二步:創(chuàng)建/resources/application.yml文件

server:port: 8080 spring:application:name: calculation

第三步:編寫配置類DroolsConfig

package com.itheima.drools.config; import org.kie.api.KieBase; import org.kie.api.KieServices; import org.kie.api.builder.KieBuilder; import org.kie.api.builder.KieFileSystem; import org.kie.api.builder.KieRepository; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession; import org.kie.internal.io.ResourceFactory; import org.kie.spring.KModuleBeanFactoryPostProcessor; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import org.springframework.core.io.Resource; import java.io.IOException; /*** 規(guī)則引擎配置類*/ @Configuration public class DroolsConfig {//指定規(guī)則文件存放的目錄private static final String RULES_PATH = "rules/";private final KieServices kieServices = KieServices.Factory.get();@Bean@ConditionalOnMissingBeanpublic KieFileSystem kieFileSystem() throws IOException {System.setProperty("drools.dateformat","yyyy-MM-dd");KieFileSystem kieFileSystem = kieServices.newKieFileSystem();ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();Resource[] files = resourcePatternResolver.getResources("classpath*:" + RULES_PATH + "*.*");String path = null;for (Resource file : files) {path = RULES_PATH + file.getFilename();kieFileSystem.write(ResourceFactory.newClassPathResource(path, "UTF-8"));}return kieFileSystem;}@Bean@ConditionalOnMissingBeanpublic KieContainer kieContainer() throws IOException {KieRepository kieRepository = kieServices.getRepository();kieRepository.addKieModule(kieRepository::getDefaultReleaseId);KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem());kieBuilder.buildAll();return kieServices.newKieContainer(kieRepository.getDefaultReleaseId());}@Bean@ConditionalOnMissingBeanpublic KieBase kieBase() throws IOException {return kieContainer().getKieBase();}@Bean@ConditionalOnMissingBeanpublic KModuleBeanFactoryPostProcessor kiePostProcessor() {return new KModuleBeanFactoryPostProcessor();} }

第四步:編寫實(shí)體類Calculation

package com.itheima.drools.entity;public class Calculation {private double wage;//稅前工資private double wagemore;//應(yīng)納稅所得額private double cess;//稅率private double preminus;//速算扣除數(shù)private double wageminus;//扣稅額private double actualwage;//稅后工資public double getWage(){return wage;}public void setWage(double wage){this.wage = wage;}public double getActualwage(){return actualwage;}public void setActualwage(double actualwage){this.actualwage = actualwage;}public double getWagemore(){return wagemore;}public void setWagemore(double wagemore){this.wagemore = wagemore;}public double getCess(){return cess;}public void setCess(double cess){this.cess = cess;}public double getPreminus(){return preminus;}public void setPreminus(double preminus){this.preminus = preminus;}public double getWageminus(){return wageminus;}public void setWageminus(double wageminus){this.wageminus = wageminus;}@Overridepublic String toString(){return "Calculation{" +"wage=" + wage +", actualwage=" + actualwage +", wagemore=" + wagemore +", cess=" + cess +", preminus=" + preminus +", wageminus=" + wageminus +'}';} }

第五步:在resources/rules下創(chuàng)建規(guī)則文件calculation.drl文件

//當(dāng)前規(guī)則文件用于計(jì)算個(gè)人所得稅 package calculation import com.itheima.drools.entity.Calculation/**當(dāng)前規(guī)則文件中的規(guī)劃主要分為三類1、計(jì)算應(yīng)納稅所得額2、設(shè)置稅率、速算扣除數(shù)3、計(jì)算稅后工資 *///計(jì)算應(yīng)繳稅所得額 rule "計(jì)算應(yīng)繳納所得額"salience 100date-effective "2011-09-01"no-loop truewhen$cal:Calculation(wage > 0)thendouble wagemore = $cal.getWage() - 3500;$cal.setWagemore(wagemore);update($cal) end//設(shè)置稅率、速算扣除數(shù) rule "設(shè)置稅率,應(yīng)納稅所得額<=1500"salience 3no-loop truewhen$cal:Calculation(wagemore <= 1500)then$cal.setCess(0.03); //稅率$cal.setPreminus(0); //速算扣除數(shù)update($cal)end//設(shè)置稅率、速算扣除數(shù)rule "設(shè)置稅率,應(yīng)納稅所得額在1500至4500之間"salience 2no-loop trueactivation-group "SETCess_Group"when$cal:Calculation(wagemore > 1500 && wagemore <= 4500 )then$cal.setCess(0.1); //稅率$cal.setPreminus(105); //速算扣除數(shù)update($cal)endrule "個(gè)人所得稅:設(shè)置稅率-->>應(yīng)納稅所得額在4500志9000之間"salience 2no-loop trueactivation-group "SETCess_Group"when$cal : Calculation(wagemore > 4500 && wagemore <= 9000)then$cal.setCess(0.2);$cal.setPreminus(555);update($cal);endrule "個(gè)人所得稅:設(shè)置稅率-->>應(yīng)納稅所得額在9000志35000之間"salience 2no-loop trueactivation-group "SETCess_Group"when$cal : Calculation(wagemore > 9000 && wagemore <= 35000)then$cal.setCess(0.25);$cal.setPreminus(1005);update($cal);endrule "個(gè)人所得稅:設(shè)置稅率-->>應(yīng)納稅所得額在35000至55000之間"salience 2no-loop trueactivation-group "SETCess_Group"when$cal : Calculation(wagemore > 35000 && wagemore <= 55000)then$cal.setCess(0.3);$cal.setPreminus(2755);update($cal);endrule "個(gè)人所得稅:設(shè)置稅率-->>應(yīng)納稅所得額在55000至80000之間"salience 2no-loop trueactivation-group "SETCess_Group"when$cal : Calculation(wagemore > 55000 && wagemore <= 80000)then$cal.setCess(0.35);$cal.setPreminus(5505);update($cal);endrule "個(gè)人所得稅:設(shè)置稅率-->>應(yīng)納稅所得額在80000以上"salience 2no-loop trueactivation-group "SETCess_Group"when$cal : Calculation(wagemore > 80000)then$cal.setCess(0.45);$cal.setPreminus(13505);update($cal);endrule "個(gè)人所得稅:計(jì)算稅后工資"salience 1when$cal : Calculation(wage > 0 && wagemore > 0 && wagemore > 0 && cess > 0)then$cal.setWageminus($cal.getWagemore()*$cal.getCess()-$cal.getPreminus());$cal.setActualwage($cal.getWage()-$cal.getWageminus());System.out.println("-----稅前工資:"+$cal.getWage());System.out.println("-----應(yīng)納稅所得額:"+$cal.getWagemore());System.out.println("-----稅率:" + $cal.getCess());System.out.println("-----速算扣除數(shù):" + $cal.getPreminus());System.out.println("-----扣稅額:" + $cal.getWageminus());System.out.println("-----稅后工資:" + $cal.getActualwage());end

第六步:創(chuàng)建RuleService

package com.itheima.drools.service;import com.itheima.drools.entity.Calculation; import org.kie.api.KieBase; import org.kie.api.runtime.KieSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;@Service public class RuleService {@Autowiredprivate KieBase kieBase;//調(diào)用Drools規(guī)則引擎實(shí)現(xiàn)個(gè)人所得稅計(jì)算public Calculation calculation(Calculation calculation){KieSession session = kieBase.newKieSession(); //獲得sessionsession.insert(calculation); //加入到規(guī)則內(nèi)存session.fireAllRules(); //啟動(dòng)所有規(guī)則session.dispose(); //銷毀sessionreturn calculation; //返回經(jīng)歷過(guò)規(guī)則的calculation} }

第七步:創(chuàng)建RuleController

package com.itheima.drools.controller;import com.itheima.drools.entity.Calculation; import com.itheima.drools.service.RuleService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;@RestController @RequestMapping("/rule") public class RuleController {@Autowiredprivate RuleService ruleService;@RequestMapping("/calculate")public Calculation calculation(double wage){Calculation calculation = new Calculation();calculation.setWage(wage);calculation = ruleService.calculate(calculation);System.out.println(calculation);return calculation;} }

第八步:創(chuàng)建啟動(dòng)類DroolsApplication

package com.itheima.drools;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;/*** 啟動(dòng)類*/@SpringBootApplication public class DroolsApplication {public static void main(String[] args){SpringApplication.run(DroolsApplication.class);} }

第九步:導(dǎo)入靜態(tài)資源文件到resources/static目錄下

calculation.html

<!DOCTYPE html> <html> <head><!-- 頁(yè)面meta --><meta charset="utf-8"><title>個(gè)人所得稅計(jì)算</title><meta name="description" content="個(gè)人所得稅計(jì)算"><meta name="keywords" content="個(gè)人所得稅計(jì)算"><meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" name="viewport"> </head> <body class="mainBg"> <div id="app"><h3 align="center">個(gè)人所得稅計(jì)算器(2011版)</h3><table align="center" width="25%" border="0"><tr><td>稅前月收入</td><td><input type="text" v-model="cal.wage"></td></tr><tr><td colspan="2"><input type="button" value="計(jì) 算" @click="calculate()"></td></tr><tr><td colspan="2" align="center"></td></tr><tr><td>應(yīng)納稅所得額</td><td><input type="text" v-model="cal.wagemore"></td></tr><tr><td>稅率</td><td><input type="text" v-model="cal.cess"></td></tr><tr><td>速算扣除數(shù)</td><td><input type="text" v-model="cal.preminus"></td></tr><tr><td>扣稅額</td><td><input type="text" v-model="cal.wageminus"></td></tr><tr><td>稅后工資</td><td><input type="text" v-model="cal.actualwage"></td></tr></table> </div> </body> <!-- 引入組件庫(kù) --> <script src="js/vue.js"></script> <script src="js/axios.js"></script> <script>new Vue({el: '#app',data:{cal:{}},methods: {calculate(){if(this.cal.wage <= 3500){alert("稅前月收入需要大于3500!");return;}axios.get("/rule/calculate?wage=" + this.cal.wage).then((res) => {console.log(res);this.cal = res.data;});}}}); </script> </html>

@@@@@@@@@@@@@@@@@@@@@@

測(cè)試:http://127.0.0.1:8080/calculation.html

大功告成 / 主要內(nèi)容就在規(guī)則文件中

總結(jié)

以上是生活随笔為你收集整理的Drools实战-个人所得税计算器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。