Browse Source

字母缩写查询姓名优化, 侧边栏精品实验车间优化

曹鹤洋 1 year ago
parent
commit
9b9817b667

+ 2 - 2
application/api/controller/EmployeeDailySalary.php

@@ -45,7 +45,7 @@ class EmployeeDailySalary extends Api
         $rs = db('人事_基本资料')->column('员工编号,所在部门');
         $rs = db('人事_基本资料')->column('员工编号,所在部门');
         foreach($arr as $k=>$v){
         foreach($arr as $k=>$v){
             foreach($v as $key=>$value){
             foreach($v as $key=>$value){
-                $data[$k][$key]=rtrim($rs[$value]);
+                $data[$k][$key] = str_replace(',', '', rtrim($rs[$value]));
             }
             }
             $data[$k]=array_unique($data[$k]);
             $data[$k]=array_unique($data[$k]);
             usort($data[$k], function($a, $b) {
             usort($data[$k], function($a, $b) {
@@ -242,7 +242,7 @@ class EmployeeDailySalary extends Api
             sum(异常停机工时) as 异常停机工时, sum(车头产量占用机时) as 车头产量占用机时, 日定额,
             sum(异常停机工时) as 异常停机工时, sum(车头产量占用机时) as 车头产量占用机时, 日定额,
             sum(达标定额) as 达标定额, 千件工价, 补产标准, bh, rtrim(xm) as xm, Rate')
             sum(达标定额) as 达标定额, 千件工价, 补产标准, bh, rtrim(xm) as xm, Rate')
             ->join('工单_印件资料 g','g.Yj_Gdbh = 绩效工资汇总.sczl_gdbh AND g.yj_Yjno = 绩效工资汇总.sczl_yjno','LEFT')
             ->join('工单_印件资料 g','g.Yj_Gdbh = 绩效工资汇总.sczl_gdbh AND g.yj_Yjno = 绩效工资汇总.sczl_yjno','LEFT')
-            ->group('LEFT(sczl_rq, 10),sczl_gdbh')
+            ->group('LEFT(sczl_rq, 10),sczl_gdbh,CONCAT(sczl_yjno, "-", sczl_gxh)')
             ->where(['sys_ny'=>$req['date'],'bh'=>$req['code']])
             ->where(['sys_ny'=>$req['date'],'bh'=>$req['code']])
             ->select();
             ->select();
         if(!$res){
         if(!$res){

+ 1 - 1
application/api/controller/OvertimeVerification.php

@@ -45,7 +45,7 @@ class OvertimeVerification extends Api
         $rs = db('人事_基本资料')->column('员工编号,所在部门');
         $rs = db('人事_基本资料')->column('员工编号,所在部门');
         foreach($arr as $k=>$v){
         foreach($arr as $k=>$v){
             foreach($v as $value){
             foreach($v as $value){
-                $data[$k.count($v).'人)'][rtrim($rs[$value])][]=rtrim($rs[$value]);
+                $data[$k.count($v).'人)'][str_replace(',', '', rtrim($rs[$value]))][] = str_replace(',', '', rtrim($rs[$value]));
             }
             }
             $j=0;
             $j=0;
             foreach($data[$k.count($v).'人)'] as $keys=>$values){
             foreach($data[$k.count($v).'人)'] as $keys=>$values){

+ 79 - 5
application/api/controller/PackagingCountDocument.php

@@ -3,6 +3,7 @@
 namespace app\api\controller;
 namespace app\api\controller;
 
 
 use app\common\controller\Api;
 use app\common\controller\Api;
+use Overtrue\Pinyin\Pinyin;
 use PhpOffice\PhpSpreadsheet\Spreadsheet;
 use PhpOffice\PhpSpreadsheet\Spreadsheet;
 use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
 use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
 
 
@@ -275,6 +276,58 @@ class PackagingCountDocument extends Api
         $this->success('成功',$rows);
         $this->success('成功',$rows);
     }
     }
 
 
+    /**
+     * 获取单个汉字的首字母
+     * @param string $chineseChar 单个汉字
+     * @return string|null 首字母(大写)或 null(如果不是有效的汉字)
+     */
+    function getChineseCharInitial($chineseChar) {
+        // 使用正则表达式匹配合法的汉字字符
+        if (!preg_match('/^[\x{4e00}-\x{9fa5}]$/u', $chineseChar)) {
+            return null;
+        }
+        // 将输入的汉字转换为 GBK 编码
+        $gbk = iconv('UTF-8', 'GBK', $chineseChar);
+        // 计算汉字的拼音首字母
+        $initial = '';
+        // 获取首字母的 ASCII 值
+        $asc = ord($gbk[0]) * 256 + ord($gbk[1]);
+        // 汉字范围的对应拼音首字母范围
+        $zhFirstLetterRanges = array(
+            array(45217, 45252,'A'), // A
+            array(45253, 45760,'B'), // B
+            array(45761, 46317,'C'), // C
+            array(46318, 46825,'D'), // D
+            array(46826, 47009,'E'), // E
+            array(47010, 47296,'F'), // F
+            array(47297, 47613,'G'), // G
+            array(47614, 48118,'H'), // H
+            array(48119, 49061,'J'), // J
+            array(49062, 49323,'K'), // K
+            array(49324, 49895,'L'), // L
+            array(49896, 50370,'M'), // M
+            array(50371, 50613,'N'), // N
+            array(50614, 50621,'O'), // O
+            array(50622, 50905,'P'), // P
+            array(50906, 51386,'Q'), // Q
+            array(51387, 51445,'R'), // R
+            array(51446, 52217,'S'), // S
+            array(52218, 52697,'T'), // T
+            array(52698, 52979,'W'), // W
+            array(52980, 53688,'X'), // X
+            array(53689, 54480,'Y'), // Y
+            array(54481, 55289,'Z')  // Z
+        );
+        // 判断汉字的拼音首字母范围并返回对应的字母
+        foreach ($zhFirstLetterRanges as $key => $range) {
+            if ($asc >= $range[0] && $asc <= $range[1]) {
+                $initial = $range[2];
+                break;
+            }
+        }
+    
+        return $initial;
+    }
 
 
     /**
     /**
      * 查询员工名称
      * 查询员工名称
@@ -293,12 +346,33 @@ class PackagingCountDocument extends Api
         }else{
         }else{
             $this->error('参数错误');
             $this->error('参数错误');
         }
         }
-        $rs = db()->table('人事_基本资料')->field('员工编号, rtrim(员工姓名) as ygxm')->where(['pycode'=>$sczl_bh,'在职状态'=>'在职'])->find();
-        if($rs){
-            $this->success('成功',$rs);
+        $rows = db()->table('人事_基本资料')->field('员工编号, rtrim(员工姓名) as ygxm')->where(['在职状态'=>'在职'])->select();
+        $data = [];
+        $pinyin = new Pinyin();
+        foreach ($rows as $v){
+            $sx = '';
+            for($i=0; $i<mb_strlen($v['ygxm']); $i++){
+                $str = mb_substr($v['ygxm'],$i,1);
+                $bool = $this->getChineseCharInitial($str);
+                if($bool){
+                    $sx .= $this->getChineseCharInitial($str);
+                }else{
+                    $sx .= strtoupper($pinyin->abbr($str));
+                }
+            }
+            $data[$sx][] = $v;
+        }
+        $sx = strtoupper($sczl_bh);
+        if(array_key_exists($sx,$data)){
+            $this->success('成功',$data[$sx]);
         }
         }
-        $rs = db()->table('人事_基本资料')->field('员工编号, rtrim(员工姓名) as ygxm')->where(['员工编号'=>$sczl_bh,'在职状态'=>'在职'])->find();
-        if(!$rs){
+
+        // $rs = db()->table('人事_基本资料')->field('员工编号, rtrim(员工姓名) as ygxm')->where(['pycode'=>$sczl_bh,'在职状态'=>'在职'])->find();
+        // if($rs){
+        //     $this->success('成功',$rs);
+        // }
+        $rs = db()->table('人事_基本资料')->field('员工编号, rtrim(员工姓名) as ygxm')->where(['员工编号'=>$sczl_bh,'在职状态'=>'在职'])->select();
+        if($rs===false){
             $this->error('员工编号错误');
             $this->error('员工编号错误');
         }
         }
         $this->success('成功',$rs);
         $this->success('成功',$rs);

+ 1 - 1
application/api/controller/RelatedSalaryAccounting.php

@@ -46,7 +46,7 @@ class RelatedSalaryAccounting extends Api
         $result = [];
         $result = [];
         foreach ($rows as $row) {
         foreach ($rows as $row) {
             $date = $row['日期'];
             $date = $row['日期'];
-            $department = $row['所在部门'];
+            $department = str_replace(',', '', rtrim($row['所在部门']));
         
         
             if (!isset($result[$date])) {
             if (!isset($result[$date])) {
                 $result[$date] = [
                 $result[$date] = [