37.员工账套数据
前端#
SalSobCfg.vue
<template>
<div>
<div>
<el-table :data="emps" border stripe size="mini">
<el-table-column type="selection" align="left" width="55"></el-table-column>
<el-table-column prop="name" label="姓名" fixed width="120" align="left"></el-table-column>
<el-table-column prop="workid" label="工号" width="120" align="left"></el-table-column>
<el-table-column prop="email" label="电子邮件" width="200" align="left"></el-table-column>
<el-table-column prop="phone" label="电话号码" width="120" align="left"></el-table-column>
<el-table-column prop="department.name" label="所属部门" width="120" align="left"></el-table-column>
<el-table-column label="所属部门" align="center">
<template slot-scope="scope">
<el-tooltip placement="right" v-if="scope.row.salary">
<div slot="content">
<table>
<tr>
<td>基本工资</td>
<td>{{scope.row.salary.basicsalary}}</td>
</tr>
<tr>
<td>交通补助</td>
<td>{{scope.row.salary.trafficsalary}}</td>
</tr>
<tr>
<td>午餐补助</td>
<td>{{scope.row.salary.lunchsalary}}</td>
</tr>
<tr>
<td>奖金</td>
<td>{{scope.row.salary.bonus}}</td>
</tr>
<tr>
<td>养老金比率</td>
<td>{{scope.row.salary.pensionper}}</td>
</tr>
<tr>
<td>养老金基数</td>
<td>{{scope.row.salary.pensionbase}}</td>
</tr>
<tr>
<td>医疗保险比率</td>
<td>{{scope.row.salary.medicalper}}</td>
</tr>
<tr>
<td>医疗保险基数</td>
<td>{{scope.row.salary.medicalbase}}</td>
</tr>
<tr>
<td>公积金比率</td>
<td>{{scope.row.salary.accumulationfundper}}</td>
</tr>
<tr>
<td>公积金基数</td>
<td>{{scope.row.salary.accumulationfundbase}}</td>
</tr>
<tr>
<td>启用时间</td>
<td>{{scope.row.salary.createdate}}</td>
</tr>
</table>
</div>
<el-tag>{{scope.row.salary.name}}</el-tag>
</el-tooltip>
<el-tag v-else>暂未设置</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-popover
placement="left"
title="修改工资账套"
@show="showPop(scope.row.salary)"
@hide="hidePop(scope.row)"
width="200"
trigger="click">
<div>
<el-select v-model="currentsalary" placeholder="请选择" size="mini">
<el-option
v-for="item in salaries"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
<el-button slot="reference" type="danger">修改工资账套</el-button>
</el-popover>
</template>
</el-table-column>
</el-table>
<div style="display: flex;justify-content: flex-end">
<el-pagination
background
@size-change="sizeChange"
@current-change="currentChange"
layout="sizes, prev, pager, next, jumper, ->, total, slot"
:total="total">
</el-pagination>
</div>
</div>
</div>
</template>
<script>
export default {
name: "SalSobCfg",
data() {
return {
emps: [],
total: 0,
currentPage: 1,
currentSize: 10,
currentsalary: null,
salaries: []
}
},
mounted() {
this.initEmps();
this.initSalaries();
},
methods: {
sizeChange(size) {
this.currentSize = size;
this.initEmps();
},
currentChange(page) {
this.currentPage = page;
this.initEmps();
},
hidePop(data) {
if (this.currentsalary) {
this.putRequest('/salary/sobcfg/?eid=' + data.id + '&sid=' + this.currentsalary).then(resp => {
if (resp) {
this.initEmps()
}
});
}
},
showPop(data) {
if (data) {
this.currentsalary = data.id;
} else {
this.currentsalary = null;
}
},
initSalaries() {
this.getRequest("/salary/sobcfg/salaries").then(resp => {
if (resp) {
this.salaries = resp;
}
})
},
initEmps() {
this.getRequest("/salary/sobcfg/?page=" + this.currentPage + '&size=' + this.currentSize).then(resp => {
if (resp) {
this.emps = resp.data;
this.total = resp.total;
}
})
}
}
}
</script>
<style scoped>
</style>
后端接口#
SobConfigController#
@RestController
@RequestMapping("/salary/sobcfg")
public class SobConfigController {
@Autowired
EmployeeService employeeService;
@Autowired
SalaryService salaryService;
@GetMapping("/")
public RespPageBean GetEmployeeByPageWithSalary(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
return employeeService.getEmployeeByPageWithSalary(page, size);
}
@GetMapping("/salaries")
public List<Salary> getAllSalaries(){
return salaryService.getAllSalary();
}
@PutMapping("/")
public RespBean updateEmoSalaryById(Integer eid, Integer sid) {
Integer result =employeeService.updateEmpSalaryById(eid, sid);
if (result==1||result==2) {
return RespBean.ok("成功");
}
return RespBean.error("失败");
}
}
Service#
@Service
public class EmployeeService {
@Autowired
EmployeeMapper employeeMapper;
@Autowired
RabbitTemplate rabbitTemplate;
public final static Logger logger = LoggerFactory.getLogger(EmployeeService.class);
SimpleDateFormat YearFormat = new SimpleDateFormat("yyyy");
SimpleDateFormat monthFormat = new SimpleDateFormat("MM");
DecimalFormat decimalFormat = new DecimalFormat("##.00");
public RespPageBean getEmployeeByPage(Integer page, Integer size, Employee employee,
Date[] begainDateScope) {
if (page != null && size != null) {
page = (page - 1) * size;
}
List<Employee> data = employeeMapper.getEmployeeByPage(page, size, employee, begainDateScope);
Long total = employeeMapper.getTotal(employee, begainDateScope);
RespPageBean respPageBean = new RespPageBean();
respPageBean.setData(data);
respPageBean.setTotal(total);
return respPageBean;
}
public Integer addEmp(Employee employee) {
//自动计算合同期限
Date begincontract = employee.getBegincontract();
Date endcontract = employee.getEndcontract();
double month =
(Double.parseDouble(YearFormat.format(endcontract)) - Double.parseDouble(YearFormat.format(begincontract))) * 12 - (Double.parseDouble(monthFormat.format(endcontract)) - Double.parseDouble(monthFormat.format(begincontract)));
employee.setContractterm(Double.parseDouble(decimalFormat.format(month / 12)));
int result = employeeMapper.insertSelective(employee);
if (result == 1) {
//获取添加员工的id并将id转化为职称名称,部门名称等
Employee emp = employeeMapper.getEmployeeById(employee.getId());
//打印职工信息,确认是不是消息中间件问题
logger.info(emp.toString());
//对应模板中的监听的队列名称
rabbitTemplate.convertAndSend("com.welcome", emp);
}
return result;
}
public Integer maxWorkID() {
return employeeMapper.maxWorkID();
}
public Integer deleteEmpById(Integer id) {
return employeeMapper.deleteByPrimaryKey(id);
}
public Integer updateEmp(Employee employee) {
return employeeMapper.updateByPrimaryKeySelective(employee);
}
public Integer addEmps(List<Employee> list) {
return employeeMapper.addEmps(list);
}
public RespPageBean getEmployeeByPageWithSalary(Integer page, Integer size) {
if (page != null && size != null) {
page = (page - 1) * size;
}
List<Employee> list = employeeMapper.getEmployeeByPageWithSalary(page, size);
Long total = employeeMapper.getTotal(null, null);
RespPageBean respPageBean = new RespPageBean();
respPageBean.setTotal(total);
respPageBean.setData(list);
return respPageBean;
}
public Integer updateEmpSalaryById(Integer eid, Integer sid) {
return employeeMapper.updateEmpSalaryById(eid, sid);
}
}
mapper#
public interface EmployeeMapper {
int deleteByPrimaryKey(Integer id);
int insert(Employee record);
int insertSelective(Employee record);
Employee selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(Employee record);
int updateByPrimaryKey(Employee record);
List<Employee> getEmployeeByPage(@Param("page") Integer page, @Param("size") Integer size,
@Param("emp") Employee employee,
@Param("beginDateScope") Date[] beginDateScope);
Long getTotal(@Param("emp")Employee employee,@Param("beginDateScope")Date[] beginDateScope);
Integer maxWorkID();
Integer addEmps(List<Employee> list);
Employee getEmployeeById(Integer id);
List<Employee> getEmployeeByPageWithSalary(@Param("page") Integer page,
@Param("size") Integer size);
Integer updateEmpSalaryById(@Param("eid") Integer eid, @Param("sid") Integer sid);
}
xml#
<select id="getEmployeeByPageWithSalary" resultMap="EmployeeWithSalary">
SELECT e.*,s.`name` as sname, s.accumulationFundBase as saccumulationFundBase,
s.accumulationFundPer as saccumulationFundPer, s.allSalary as allSalary, s.basicSalary as basicSalary,
s.bonus as sbonus,s.createDate as screateDate,s.id as sid,s.lunchSalary as slunchSalary,s.medicalBase as smedicalBase,
s.medicalPer as smedicalPer,s.pensionBase as spensionBase,s.pensionPer as spensionPer,s.trafficSalary as strafficSalary
from employee as e LEFT JOIN empsalary as es on e.id = es.eid left JOIN salary as s on es.sid
= s.id LEFT JOIN department as d ON e.departmentId=d.id order by e.id
<if test="page!=null and size!=null">
limit #{page},#{size}
</if>
</select>
<insert id="updateEmpSalaryById">
replace into empsalary (eid,sid) values (#{eid},#{sid})
</insert>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术