天天看點

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>