linwu 17 часов назад
Родитель
Сommit
fb874c6bf5

+ 219 - 0
app/admin/controller/Performance.php

@@ -0,0 +1,219 @@
+<?php
+
+namespace app\admin\controller;
+
+use app\admin\AdminBaseController;
+
+class Performance extends AdminBaseController
+{
+
+    public function index()
+    {
+        return view();
+    }
+
+    public function import()
+    {
+        return view();
+    }
+
+    public function match()
+    {
+        $old_file = input('old_file/s', "");
+        if (!file_exists($old_file)) {
+            return '绩效工资文件不存在';
+        }
+        $new_file = input('new_file/s', "");
+        if (!file_exists($new_file)) {
+            return '绩效得分文件不存在';
+        }
+
+        //初始化数据
+        $data1    = [
+            'xuhao', 'xingming', 'zhiwei', 'bumen', 'jixiaogongzijishu',
+            'yingchuqin1', 'yingchuqin2', 'yingchuqin3',
+            'shichuqin1', 'shichuqin2', 'shichuqin3',
+        ];
+        $data2    = ['xingming', 'defen1', 'defen2', 'defen3'];
+        $old_list = import_exl_jixiao($old_file, $data1, 2);
+        $new_list = import_exl_jixiao($new_file, $data2, 2);
+
+        if (empty($old_list)) {
+            return '绩效工资文件无数据';
+        }
+        if (empty($new_list)) {
+            return '绩效得分文件无数据';
+        }
+        $old_list = $this->_dealArray($old_list);
+        $new_list = $this->_dealArray($new_list);
+
+        $scoreByName = [];
+        foreach ($new_list as $v) {
+            $scoreByName[$v['xingming']] = $v;
+        }
+        $list = [];
+        foreach ($old_list as $v) {
+            if (empty($scoreByName[$v['xingming']])) {
+                return $v['xingming'] . '在绩效得分表中未找到';
+            }
+            $item                      = [];
+            $item['xuhao']             = $v['xuhao'];
+            $item['xingming']          = $v['xingming'];
+            $item['zhiwei']            = $v['zhiwei'];
+            $item['bumen']             = $v['bumen'];
+            $item['jixiaofen1']        = $scoreByName[$v['xingming']]['defen1'];
+            $item['jixiaofen2']        = $scoreByName[$v['xingming']]['defen2'];
+            $item['jixiaofen3']        = $scoreByName[$v['xingming']]['defen3'];
+            $item['jixiaoxishu1']      = $item['jixiaofen1'] > 100 ? 1 : $v['jixiaofen1'] / 100;
+            $item['jixiaoxishu2']      = $item['jixiaofen2'] > 100 ? 1 : $v['jixiaofen2'] / 100;
+            $item['jixiaoxishu3']      = $item['jixiaofen3'] > 100 ? 1 : $v['jixiaofen3'] / 100;
+            $item['jixiaogongzijishu'] = $v['jixiaogongzijishu'];
+            $chuqinlv1                 = $v['shichuqin1'] / $v['yingchuqin1'];
+            $chuqinlv2                 = $v['shichuqin2'] / $v['yingchuqin2'];
+            $chuqinlv3                 = $v['shichuqin3'] / $v['yingchuqin3'];
+            $item['jixiaogongzi1']     = round($item['jixiaogongzijishu'] * $item['jixiaoxishu1'] * $chuqinlv1, 2);
+            $item['jixiaogongzi2']     = round($item['jixiaogongzijishu'] * $item['jixiaoxishu2'] * $chuqinlv2, 2);
+            $item['jixiaogongzi3']     = round($item['jixiaogongzijishu'] * $item['jixiaoxishu3'] * $chuqinlv3, 2);
+            $item['jixiaogongziheji']  = $item['jixiaogongzi1'] + $item['jixiaogongzi2'] + $item['jixiaogongzi3'];
+            $item['yufagongzi1']       = $item['yufagongzi2'] = $item['yufagongzi3'] = $item['jixiaogongzijishu'] * 0.8;
+            $item['yufagongziheji']    = $item['yufagongzi1'] * 3;
+            $item['bufa']              = $item['jixiaogongziheji'] - $item['yufagongziheji'];
+            if ($item['bufa'] > 0) {
+                $item['gonghui'] = round($item['bufa'] * 0.005, 2);
+            } else {
+                $item['gonghui'] = 0;
+            }
+            $item['shifa'] = round($item['bufa'] - $item['gonghui'], 2);
+            $list[]        = $item;
+        }
+
+        $xlsCell = [
+            ['xuhao', '序号'],
+            ['xingming', '姓名'],
+            ['zhiwei', '职位'],
+            ['bumen', '部门'],
+            ['jixiaofen1', '绩效得分第1月'],
+            ['jixiaofen2', '绩效得分第2月'],
+            ['jixiaofen3', '绩效得分第3月'],
+            ['jixiaoxishu1', '绩效系数第1月'],
+            ['jixiaoxishu2', '绩效系数第2月'],
+            ['jixiaoxishu3', '绩效系数第3月'],
+            ['jixiaogongzijishu', '绩效工资基数'],
+            ['jixiaogongzi1', '绩效工资第1月'],
+            ['jixiaogongzi2', '绩效工资第2月'],
+            ['jixiaogongzi3', '绩效工资第3月'],
+            ['jixiaogongziheji', '绩效工资合计'],
+            ['yufagongzi1', '已预发工资第1月'],
+            ['yufagongzi2', '已预发工资第2月'],
+            ['yufagongzi3', '已预发工资第3月'],
+            ['yufagongziheji', '已预发工资合计'],
+            ['bufa', '应补发绩效工资'],
+            ['gonghui', '工会会费'],
+            ['shifa', '实际补发绩效工资'],
+        ];
+//        unlink($old_file);
+//        unlink($new_file);
+        export_exl("绩效工资", $xlsCell, $list);
+    }
+
+    public function match1()
+    {
+        $old_file = input('old_file/s', "");
+        if (!file_exists($old_file)) {
+            return '旧名单文件不存在';
+        }
+        $new_file = input('new_file/s', "");
+        if (!file_exists($new_file)) {
+            return '新名单文件不存在';
+        }
+
+        //初始化数据
+        $data1    = [
+            'xuhao', 'xingming', 'zhiwei', 'bumen', 'jixiaofen1', 'jixiaofen2', 'jixiaofen3', 'jixiaoxishu1', 'jixiaoxishu2',
+            'jixiaoxishu3', 'jixiaogongzijishu', 'jixiaogongzi1', 'jixiaogongzi2', 'jixiaogongzi3', 'jixiaogongziheji',
+            'yufagongzi1', 'yufagongzi2', 'yufagongzi3', 'yufagongziheji',
+        ];
+        $data2    = [
+            'xuhao', 'bumen', 'xingming', 'afen1', 'afen2', 'afen3', 'ziping', 'bumen', 'fenguan', 'heyue', 'defen1', 'defen2', 'defen3',
+        ];
+        $old_list = import_exl_jixiao($old_file, $data1, 4);
+        $new_list = import_exl_jixiao($new_file, $data2, 3);
+
+        if (empty($old_list)) {
+            return '旧名单文件无数据';
+        }
+        if (empty($new_list)) {
+            return '新名单文件无数据';
+        }
+        $old_list = $this->_dealArray($old_list);
+        $new_list = $this->_dealArray($new_list);
+
+        $scoreByName = [];
+        foreach ($new_list as $v) {
+            $scoreByName[$v['xingming']] = $v;
+        }
+        $list = [];
+        foreach ($old_list as $v) {
+            if (empty($scoreByName[$v['xingming']])) {
+                return $v['xingming'] . '在绩效得分表中未找到';
+            }
+            $v['jixiaofen1']       = $scoreByName[$v['xingming']]['defen1'];
+            $v['jixiaofen2']       = $scoreByName[$v['xingming']]['defen2'];
+            $v['jixiaofen3']       = $scoreByName[$v['xingming']]['defen3'];
+            $v['jixiaoxishu1']     = $scoreByName[$v['xingming']]['defen1'] > 100 ? 1 : $scoreByName[$v['xingming']]['defen1'] / 100;
+            $v['jixiaoxishu2']     = $scoreByName[$v['xingming']]['defen2'] > 100 ? 1 : $scoreByName[$v['xingming']]['defen2'] / 100;
+            $v['jixiaoxishu3']     = $scoreByName[$v['xingming']]['defen3'] > 100 ? 1 : $scoreByName[$v['xingming']]['defen3'] / 100;
+            $v['jixiaogongzi1']    = $v['jixiaogongzijishu'] * $v['jixiaoxishu1'];
+            $v['jixiaogongzi2']    = $v['jixiaogongzijishu'] * $v['jixiaoxishu2'];
+            $v['jixiaogongzi3']    = $v['jixiaogongzijishu'] * $v['jixiaoxishu3'];
+            $v['jixiaogongziheji'] = $v['jixiaogongzi1'] + $v['jixiaogongzi2'] + $v['jixiaogongzi3'];
+            $v['yufagongzi1']      = $v['jixiaogongzijishu'] * 0.8;
+            $v['yufagongzi2']      = $v['jixiaogongzijishu'] * 0.8;
+            $v['yufagongzi3']      = $v['jixiaogongzijishu'] * 0.8;
+            $v['yufagongziheji']   = $v['yufagongzi1'] + $v['yufagongzi2'] + $v['yufagongzi3'];
+            $v['bufa']             = $v['jixiaogongziheji'] - $v['yufagongziheji'];
+            $v['gonghui']          = round($v['bufa'] * 0.005, 2);
+            $v['shifa']            = round($v['bufa'] - $v['gonghui'], 2);
+            $list[]                = $v;
+        }
+
+        $xlsCell = [
+            ['xuhao', '序号'],
+            ['xingming', '姓名'],
+            ['zhiwei', '职位'],
+            ['bumen', '部门'],
+            ['jixiaofen1', '绩效得分第1月'],
+            ['jixiaofen2', '绩效得分第2月'],
+            ['jixiaofen3', '绩效得分第3月'],
+            ['jixiaoxishu1', '绩效系数第1月'],
+            ['jixiaoxishu2', '绩效系数第2月'],
+            ['jixiaoxishu3', '绩效系数第3月'],
+            ['jixiaogongzijishu', '绩效工资基数'],
+            ['jixiaogongzi1', '绩效工资第1月'],
+            ['jixiaogongzi2', '绩效工资第2月'],
+            ['jixiaogongzi3', '绩效工资第3月'],
+            ['jixiaogongziheji', '绩效工资合计'],
+            ['yufagongzi1', '已预发工资第1月'],
+            ['yufagongzi2', '已预发工资第2月'],
+            ['yufagongzi3', '已预发工资第3月'],
+            ['yufagongziheji', '已预发工资合计'],
+            ['bufa', '应补发绩效工资'],
+            ['gonghui', '工会会费'],
+            ['shifa', '实际补发绩效工资'],
+        ];
+        unlink($old_file);
+        unlink($new_file);
+        export_exl("绩效工资", $xlsCell, $list);
+    }
+
+    private function _dealArray($arr)
+    {
+        $res = [];
+        foreach ($arr as $v) {
+            if (!empty($v['xingming'])) {
+                $res[] = $v;
+            }
+        }
+        return $res;
+    }
+}

+ 89 - 0
app/admin/view/performance/import.html

@@ -0,0 +1,89 @@
+<div class="layui-fluid">
+    <div class="layui-row layui-col-space15">
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-header">导入</div>
+                <div class="layui-card-body" pad15>
+                    <div class="layui-form layui-form-pane" lay-filter="{$lay_table}">
+                        <div class="layui-form-item">
+                            <label class="layui-form-label">绩效工资</label>
+                            <div class="layui-input-block">
+                                <input type="text" id="old_file_name" autocomplete="off" readonly placeholder="请点击上传文件按钮" class="layui-input">
+                            </div>
+                        </div>
+                        <div class="layui-form-item">
+                            <label class="layui-form-label">绩效评分</label>
+                            <div class="layui-input-block">
+                                <input type="text" id="new_file_name" autocomplete="off" readonly placeholder="请点击上传文件按钮" class="layui-input">
+                            </div>
+                        </div>
+                        <input type="hidden" name="file_url" value="" id="old_file">
+                        <input type="hidden" name="file_url" value="" id="new_file">
+                        <div class="layui-form-item">
+                            <a href="/static/common/exl/jixiaogongzi.xls" target="_blank">
+                                <button type="button" class="layui-btn layui-btn-normal">下载绩效工资模板</button>
+                            </a>
+                            <a href="/static/common/exl/jixiaopingfen.xls" target="_blank">
+                                <button type="button" class="layui-btn layui-btn-normal">下载绩效评分模板</button>
+                            </a>
+                            <button type="button" class="layui-btn layui-btn-normal" id="upload1"><i class="layui-icon"></i>上传绩效工资</button>
+                            <button type="button" class="layui-btn layui-btn-normal" id="upload2"><i class="layui-icon"></i>上传绩效评分</button>
+                            <input type="button" lay-submit lay-filter="{$lay_btn}" value="开始计算" class="layui-btn">
+                        </div>
+                    </div>
+
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+
+<script>
+    layui.use(['index', 'form', 'upload'], function() {
+        const $ = layui.$;
+        const admin = layui.admin;
+        const upload = layui.upload;
+        const form = layui.form;
+        form.render();
+
+        form.on('submit({$lay_btn})', function(obj) {
+            let old_file = $('#old_file').val();
+            let new_file = $('#new_file').val();
+            if (old_file === '') {
+                layer.msg("请上传绩效工资");
+                return false;
+            }
+            if (new_file === '') {
+                layer.msg("请上传绩效评分");
+                return false;
+            }
+            $('#old_file').val('');
+            $('#old_file_name').val('');
+            $('#new_file').val('');
+            $('#new_file_name').val('');
+            let url = "{:url('performance/match')}?old_file=" + encodeURIComponent(old_file) + '&new_file=' + encodeURIComponent(new_file);
+            window.open(url);
+        });
+
+        upload.render({
+            elem: '#upload1'
+            ,url: "{:url('upload/file')}" //此处配置你自己的上传接口即可
+            ,accept: 'file' //普通文件
+            ,done: function(res){
+                $('#old_file').val(res.data.path);
+                $('#old_file_name').val(res.data.title);
+            }
+        });
+
+        upload.render({
+            elem: '#upload2'
+            ,url: "{:url('upload/file')}" //此处配置你自己的上传接口即可
+            ,accept: 'file' //普通文件
+            ,done: function(res){
+                $('#new_file').val(res.data.path);
+                $('#new_file_name').val(res.data.title);
+            }
+        });
+    });
+</script>

+ 36 - 0
app/admin/view/performance/index.html

@@ -0,0 +1,36 @@
+<style>
+
+</style>
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-form layui-card-header layuiadmin-card-header-auto">
+            <button class="layui-btn layuiadmin-btn" data-type="import">绩效工资计算</button>
+        </div>
+    </div>
+</div>
+
+<script>
+    layui.use(['index', 'admin', 'form', 'table'], function () {
+        const $ = layui.$;
+        const form = layui.form;
+        form.render();
+
+        //事件
+        const active = {
+            import: function() {
+                layer.open({
+                    type: 2,
+                    title: '绩效工资计算',
+                    content: "{:url('performance/import')}",
+                    maxmin: true,
+                    area: ['900px', '320px']
+                });
+            },
+        };
+
+        $('.layui-btn.layuiadmin-btn').on('click', function () {
+            const type = $(this).data('type');
+            active[type] ? active[type].call(this) : '';
+        });
+    });
+</script>

+ 45 - 0
app/common.php

@@ -132,4 +132,49 @@ function import_exl($file = '', $cell = [], $crop = 0, $sheet = 0)
 
     return array_values($data);
 
+}
+
+function import_exl_jixiao($file = '', $cell = [], $crop = 0, $sheet = 0)
+{
+    $file = iconv("utf-8", "gb2312", $file);   //转码
+    if (empty($file) or !file_exists($file)) {
+        die('file not exists!');
+    }
+
+    $objRead = new PHPExcel_Reader_Excel2007();   //建立reader对象
+    if (!$objRead->canRead($file)) {
+        $objRead = new PHPExcel_Reader_Excel5();
+        if (!$objRead->canRead($file)) {
+            die('No Excel!');
+        }
+    }
+
+    $cellName  = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ'];
+    $obj       = $objRead->load($file);  //建立excel对象
+    $currSheet = $obj->getSheet($sheet);   //获取指定的sheet表
+    $columnH   = $currSheet->getHighestColumn();   //取得最大的列号
+    $columnCnt = array_search($columnH, $cellName) ?: 48;
+    $rowCnt    = $currSheet->getHighestRow();   //获取总行数
+
+    $data = [];
+    for ($_row = 1; $_row <= $rowCnt; $_row++) {  //读取内容
+        if ($_row > $crop) {
+            for ($_column = 0; $_column <= $columnCnt; $_column++) {
+                $cellId    = $cellName[$_column] . $_row;
+//                $cellValue = $currSheet->getCell($cellId)->getValue();
+                $cellValue = $currSheet->getCell($cellId)->getCalculatedValue();  #获取公式计算的值
+                if ($cellValue instanceof PHPExcel_RichText) {   //富文本转换字符串
+                    $cellValue = $cellValue->__toString();
+                } else {
+                    $cellValue = (string)$cellValue;
+                }
+                if (!empty($cell[$_column])) {
+                    $data[$_row][$cell[$_column]] = $cellValue;
+                }
+            }
+        }
+    }
+
+    return array_values($data);
+
 }

BIN
public/static/common/exl/jixiaodefen.xls


BIN
public/static/common/exl/jixiaogongzi.xls