用mysql生成工资条_薪酬模块生成工资条

2023-10-28 12:30

本文主要是介绍用mysql生成工资条_薪酬模块生成工资条,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

主要运用easyUI 、 Hibernate 、Servlet 。

1.动态生成标签页,

$(function(){

//创建打开新标签页

$(".easyui-linkbutton").click(function(){

$("#img").panel('close');

//获取组件的属性或内容

var tab_title = $(this).text();//关键在this选择当前事件

var tab_href = $(this).attr("title");

var dd = $(this).attr("id");

//alert(tab_href);

if($("#tt").tabs("exists",tab_title))

{

$("#tt").tabs("select",tab_title)

}

else if(dd=="dd")

{

$("#gz").dialog('open');

}

else

{

$("#tt").tabs('add',{

title:tab_title,

closable:true,

//href:tab_href

content:""

});

}

});

})

这里主要是用inframe来获取href,避免多个标签页同时打开产生冲突。

28946720935ebded2b52f9cae7ef0a4d.png

2.然后就是生成工资条的弹窗,

这里是根据考勤表里的状态来获取月份的,(0表示未生成工资条)

注意下拉框是通过URL、valueFeild、textFeild 把value的值传递的,参考:省市区三级联动

165730dee488e9586c1277b33131a1cd.png

3.点击生成按钮后,需要加载数据,需要一段时间,所以加了个进度条

title="生成工资条"

data-options="{

closed:true,

modal:true,

buttons:[{

text:'生成',

iconCls:'icon-ok',

handler:function(){

$('#form1').form('submit',{

url:'PayDateServlet',//把定义的默认值是add的添加的方法传给Servlet然后判断

onSubmit:function(){

var isValid = $(this).form('validate');

if(!isValid)

{

$.messager.show({

title:'消息',

msg:'数据验证未通过'

});

}

else

{

//进度对话框

$.messager.progress(

{

title:'进度条',

msg:'工资加载中。。。',

text:'请稍后。。。',

interval:1000

}

);

}

return isValid;//

},

success:function(data){

var msg = eval('('+ data +')');//eval是js的方法

if(!msg.success)

{

alert(msg.message);

}

else

{

$.messager.progress('close');

$.messager.show({

title:'消息',

msg:'数据验证通过,保存成功'

});

$('#gz').dialog('close');

}

}

});

}

},

{

text:'取消',

iconCls:'icon-cancel',

handler:function(){$('#gz').dialog('close')},

}]

}"

>

页面层

Insert title here

.caidan

{

width:120px;

height:40px;

position:relative;

float: left;

margin-left: 40px;

margin-top: 5px;

color:white;

text-align: center;

line-height: 40px;

font-size: 1.2em;

}

.caidan:hover

{

background-color:#595959;

border-radius: 3px;

}

function getDate(date)

{

//得到日期对象

var d = new Date(date);

//得到年 月 日

var year = d.getFullYear();

var month = (d.getMonth()+1);

var day = d.getDate();

//拼装

var rtn = year+"-"+(month<10 ? "0"+month : month) + "-"+(day<10 ? "0"+day : day);

return rtn;

}

$(function(){

//创建打开新标签页

$(".easyui-linkbutton").click(function(){

$("#img").panel('close');

//获取组件的属性或内容

var tab_title = $(this).text();//关键在this选择当前事件

var tab_href = $(this).attr("title");

var dd = $(this).attr("id");

//alert(tab_href);

if($("#tt").tabs("exists",tab_title))

{

$("#tt").tabs("select",tab_title)

}

else if(dd=="dd")

{

$("#gz").dialog('open');

}

else

{

$("#tt").tabs('add',{

title:tab_title,

closable:true,

//href:tab_href

content:""

});

}

});

})

人事管理模块

考勤管理模块

招聘管理模块

培训管理模块

薪酬管理模块

style="width:100%"data-options="iconCls:'icon-search'">查询工资

style="width:100%"data-options="iconCls:'icon-search'">设置工资

style="width:100%"data-options="iconCls:'icon-search'">查询税率

data-options="iconCls:'icon-shezhi'">设置税率

data-options="iconCls:'icon-shezhi'" >奖惩设置

data-options="iconCls:'icon-search'" >奖惩查询

data-options="iconCls:'icon-shezhi'" >工资标准设置

data-options="iconCls:'icon-search'">查询工资标准

title="生成工资条"

data-options="{

closed:true,

modal:true,

buttons:[{

text:'生成',

iconCls:'icon-ok',

handler:function(){

$('#form1').form('submit',{

url:'PayDateServlet',//把定义的默认值是add的添加的方法传给Servlet然后判断

onSubmit:function(){

var isValid = $(this).form('validate');

if(!isValid)

{

$.messager.show({

title:'消息',

msg:'数据验证未通过'

});

}

else

{

//进度对话框

$.messager.progress(

{

title:'进度条',

msg:'工资加载中。。。',

text:'请稍后。。。',

interval:1000

}

);

}

return isValid;//

},

success:function(data){

var msg = eval('('+ data +')');//eval是js的方法

if(!msg.success)

{

alert(msg.message);

}

else

{

$.messager.progress('close');

$.messager.show({

title:'消息',

msg:'数据验证通过,保存成功'

});

$('#gz').dialog('close');

}

}

});

}

},

{

text:'取消',

iconCls:'icon-cancel',

handler:function(){$('#gz').dialog('close')},

}]

}"

>

生成工资条:

name="date"

data-options="

url:'PayServlet',

valueField:'payID',

textField:'payMonth',

onSelect:function(r){$('#date').combobox('setValue',r.payMonth.toString());}">

8066201d36d68f1273dda98f00241702.png

获取下拉框月份的Servlet层

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//转码

request.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("UTF-8");

response.setContentType("text/html");

//调用底层查询表月份的集合

SPayDAO sp = new SPayDAO();

List lss = sp.getMonth();

//System.out.println(lss);

List ls = new ArrayList();

for(int i=0;i

{

Month m = new Month();

m.setPayID(i);

m.setPayMonth(lss.get(i).toString());

ls.add(m);

}

String json = JSONArray.toJSONString(ls);

response.getWriter().println(json);

}

提交from表单的select层

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//转码

request.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("UTF-8");

response.setContentType("text/html");

//接受月份

String date = request.getParameter("date");

System.out.println("date="+date);

String msg = "{'success':true,'message':'保存成功'}";

if(date != null)

{

try

{

SPayDAO sp = new SPayDAO();

sp.unite(date);

}

catch(Exception e)

{

msg = "{'success':false,'message':'访问失败'}";

}

response.getWriter().print(msg);

}

else

{

msg = "{'success':false,'message':'没有要生成的工资'}";

response.getWriter().print(msg);

}

}

DAO层

package com.hanqi.dao;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

import org.hibernate.cfg.Configuration;

import org.hibernate.service.ServiceRegistry;

import com.hanqi.entity.Basic;

import com.hanqi.entity.Deal;

import com.hanqi.entity.KqMonthkaoqin;

import com.hanqi.entity.Rank;

import com.hanqi.entity.Rate;

import com.hanqi.entity.SPay;

public class SPayDAO {

Configuration cfg = null;

ServiceRegistry sr = null;

SessionFactory sf = null;

Session se =null;

Transaction tr = null;

public SPayDAO()//注册服务

{

//1.加载配置文件

cfg = new Configuration().configure();

//2.注册服务

sr = new StandardServiceRegistryBuilder()

.applySettings(cfg.getProperties()).build();

}

//初始化

private void init()

{

try

{

sf= cfg.buildSessionFactory(sr);

}

catch(Exception e)

{

//1.加载配置文件

cfg = new Configuration().configure();

//2.注册服务

sr = new StandardServiceRegistryBuilder()

.applySettings(cfg.getProperties()).build();

sf= cfg.buildSessionFactory(sr);

}

se = sf.openSession();

tr = se.beginTransaction();//启动事物

}

//提交和释放

private void destroy()

{

try

{

tr.commit();//提交事务

}

catch(Exception e)

{

//1.加载配置文件

cfg = new Configuration().configure();

//2.注册服务

sr = new StandardServiceRegistryBuilder()

.applySettings(cfg.getProperties()).build();

sf= cfg.buildSessionFactory(sr);

se = sf.openSession();

tr = se.beginTransaction();

tr.commit();//提交事务

}

se.close();

sf.close();

}

//联合查询

public void unite(String date)

{

double zhengchang = getZhengchangJiaban();

double zhoumo = getzhoumo();

double jiaqi = getJiaqi();

double chidao = getChidao ();

double zaotui = getZaotui();

double kuanggong = getKuanggong();

List rate = getRate();

init();

System.out.println("uwef="+date);

List lb = se.createQuery("from KqMonthkaoqin where zhuangtai= 0 and to_char(kaoqinmonth,'yyyy-MM')=?")

.setString(0, date).list() ;

System.out.println(lb);

SPay sp = new SPay();

for(KqMonthkaoqin k : lb)

{

sp.setPayid(date+k.getStaffid());//获取并写入工资表的薪资编号

sp.setYuangongid(k.getStaffid());//获取员工id

sp.setEmployeename(getName(k.getStaffid()));;//员工姓名

//基本工资

double jb = getSalary(Integer.parseInt(getLevels(k.getStaffid())));

sp.setJibengongzi( jb);

//加班总金额

double zc = zhengchang*k.getJiaban();

double zm = zhoumo*k.getZhoumojiaban();

double jq = jiaqi*(k.getJiejiarijiaban());

double z = zc+zm+jq ;

sp.setJiaban(z);

//请假

sp.setQingjia(k.getQingjia());

//迟到

sp.setChidao(chidao*(k.getChidao()));

//早退

sp.setZaotui(zaotui*(k.getZaotui()));

//旷工

sp.setKuanggong(kuanggong*k.getKuanggong());

//五险

sp.setWuxian(jb*0.1);

//公积金

sp.setGongjijin(jb*0.08);

//全勤

if(k.getChidao()!=0 || k.getZaotui() != 0 || k.getQingjia() != 0 ||k.getKuanggong() !=0)

{

sp.setQuanqin(getquanqin());

}

else

{

sp.setQuanqin(0);

}

//应发工资

double yingfa = jb+z-(jb*0.1+jb*0.08);

sp.setYingfa(yingfa);

//纳税

double nashui = 0;

//判断是否纳税

if(yingfa-rate.get(0).getStartpay()<=0)

{

}

else

{

for(int i=0; i

{

double qzd = rate.get(i).getStartpay();

double money = rate.get(i).getMoney();

double tax = rate.get(i).getTax();

double kouchu = rate.get(i).getKouchu();

if(yingfa-qzd

{

nashui=((yingfa-qzd)*tax-kouchu);

System.out.println("起征点="+qzd);

System.out.println("应纳税所得额="+money);

System.out.println("税率="+tax);

System.out.println("扣除数="+kouchu);

break;

}

}

sp.setNashui(nashui);

}

//实发工资

sp.setShifa((jb+z-(jb*0.1+jb*0.08))-nashui);

sp.setZhuangtai('0');

sp.setHedui('0');

getSave(sp);

getzhuangtai(k.getId());//调用更改考勤表状态的方法

}

destroy();

}

//提交保存SPay

public void getSave(SPay spay)

{

init();

se.save(spay);

destroy();

}

//改变考勤表的状态

public void getzhuangtai(String id)

{

init();

KqMonthkaoqin kaoqin = (KqMonthkaoqin)se.get(KqMonthkaoqin.class, id);

kaoqin.setZhuangtai(1);

destroy();

}

//查询Rate税率表

public List getRate()

{

init();

List rtn = new ArrayList();

rtn=se.createQuery("from Rate order by money asc").list();

destroy();

return rtn;

}

//查询考勤表里状态是0 的月份

public List getMonth()

{

init();

List li = new ArrayList();

li = se.createQuery("select distinct to_char(kaoqinmonth,'yyyy-MM') from KqMonthkaoqin where zhuangtai='0' ").list();

destroy();

return li;

}

//根据考勤表的员工id查询员工表的姓名

public String getName(String yuangongid)

{

init();

String rtn = "";

List li = new ArrayList();

li = se.createQuery("select name from Basic where yuangongid = ? ")

.setString(0, yuangongid)

.list() ;

if(li.size()>0)

{

rtn = li.get(0).toString();

}

destroy();

destroy();

return rtn;

}

//根据员工编号查询员工等级

public String getLevels(String yuangongid)

{

init();

String rtn = "";

List li = new ArrayList();

li = se.createQuery("select jibie from Basic where yuangongid = ? and zhuangtai = '在职'")

.setString(0, yuangongid)

.list() ;

if(li.size()>0)

{

rtn = li.get(0).toString();

}

destroy();

return rtn;

}

//根据等级查询员工基本工资

public int getSalary(int levels)

{

init();

int rtn =0;

List li = new ArrayList();

li = se.createQuery("select salary from Rank where levels = ?")

.setLong(0, levels).list();

if(li.size()>0)

{

rtn = Integer.parseInt(li.get(0).toString());

}

destroy();

return rtn;

}

//查询全勤奖励

public int getquanqin()

{

int rtn =0;

init();

List li = new ArrayList();

li = se.createQuery("select quanqin from Deal where state='1'")

.list();

System.out.println("list.size = " + li.size());

if(li.size()>0)

{

rtn = (Integer.parseInt(li.get(0).toString()));

}

destroy();

return rtn;

}

//获取Deal表的正常加班单价

public int getZhengchangJiaban()

{

int rtn =0;

init();

List li = new ArrayList();

//查询启用状态下正常加班的金额

li = se.createQuery("select zhengban from Deal where state='1'")

.list();

if(li.size()>0)

{

rtn = (Integer.parseInt(li.get(0).toString()));

}

destroy();

return rtn;

}

//获取周末加班单价

public int getzhoumo()

{

int rtn =0;

init();

List li = new ArrayList();

//查询启用状态下周末加班的金额

li = se.createQuery("select zhouban from Deal where state='1'")

.list();

if(li.size()>0)

{

rtn = (Integer.parseInt(li.get(0).toString()));

}

destroy();

return rtn;

}

//获取节假日加班

public int getJiaqi()

{

int rtn =0;

init();

List li = new ArrayList();

//查询启用状态下节假日加班的金额

li = se.createQuery("select jieban from Deal where state='1'")

.list();

if(li.size()>0)

{

rtn = (Integer.parseInt(li.get(0).toString()));

}

destroy();

return rtn;

}

//获取迟到金额

public int getChidao ()

{

int rtn =0;

init();

List li = new ArrayList();

//查询启用状态下迟到一次的金额

li = se.createQuery("select chidao from Deal where state='1'")

.list();

if(li.size()>0)

{

rtn = (Integer.parseInt(li.get(0).toString()));

}

destroy();

return rtn;

}

//获取早退

public int getZaotui()

{

int rtn =0;

init();

List li = new ArrayList();

//查询启用状态下迟到一次的金额

li = se.createQuery("select zaotui from Deal where state='1'")

.list();

if(li.size()>0)

{

rtn = (Integer.parseInt(li.get(0).toString()));

}

destroy();

return rtn;

}

//获取旷工

public int getKuanggong()

{

int rtn =0;

init();

List li = new ArrayList();

//查询启用状态下旷工一次的金额

li = se.createQuery("select kuanggong from Deal where state='1'")

.list();

if(li.size()>0)

{

rtn = (Integer.parseInt(li.get(0).toString()));

}

destroy();

return rtn;

}

//获取分页数据集合列表

public List getPageList(int page , int rows,String sort,Map where)

{

init();

//创建基础HQL语句

String sql = "from SPay where 1=1";

//判断传递的的参数

String yuangongid = where.get("yuangongid_s");

if(yuangongid != null && !yuangongid.equals(""))

{

sql += " and yuangongid ";

}

//排序

if(sort != null && !sort.equals(""))

{

sql += " order by " + sort;

}

//得到HQL

//并判断查询条件

Query q = se.createQuery(sql);

if(yuangongid != null && !yuangongid.equals("") )

{

q.setString("yuangongid", yuangongid);//引号的内容必须跟上面引号后的别名一致

}

System.out.println("yuangongid="+yuangongid);

List rtn = new ArrayList();

rtn = q.setMaxResults(rows)//每页行数

.setFirstResult((page-1)*rows).list();//其实页码

destroy();

return rtn;

}

//获取数据条数

public int getTotal(Map where)

{

int rtn= 0;

init();

//创建基础HQL语句

String sql = "select count(1) from SPay where 1=1";

//判断传递的的参数

String yuangongid_s = where.get("yuangongid_s");

if(yuangongid_s != null && !yuangongid_s.equals(""))

{

sql += " and yuangongid )";//and前面加空格

}

//得到HQL

//并判断查询条件

Query q = se.createQuery(sql);

if(yuangongid_s != null && !yuangongid_s.equals("") )

{

q.setString("yuangongid", yuangongid_s);

//引号的内容必须跟上面引号后的别名一致

}

//获取Query对对象,定义集合并实例化

List lo = q.list();

if(lo != null && lo.size() > 0)

{

rtn = Integer.parseInt(lo.get(0).toString());//转换成int并赋值

}

destroy();

return rtn;

}

}

DAO层主要是围绕着联合查询这个方法来的,通过给中小方法,获取其他表的数据,生成工资表SPay中的各个字段,然后添加,也就是一个添加的过程。

这个项目所遇到的一些问题:代码优化,逻辑还不够严谨。

这篇关于用mysql生成工资条_薪酬模块生成工资条的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/293206

相关文章

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n