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('员工编号,所在部门');
         foreach($arr as $k=>$v){
             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]);
             usort($data[$k], function($a, $b) {
@@ -242,7 +242,7 @@ class EmployeeDailySalary extends Api
             sum(异常停机工时) as 异常停机工时, sum(车头产量占用机时) as 车头产量占用机时, 日定额,
             sum(达标定额) as 达标定额, 千件工价, 补产标准, bh, rtrim(xm) as xm, Rate')
             ->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']])
             ->select();
         if(!$res){

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

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

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

@@ -3,6 +3,7 @@
 namespace app\api\controller;
 
 use app\common\controller\Api;
+use Overtrue\Pinyin\Pinyin;
 use PhpOffice\PhpSpreadsheet\Spreadsheet;
 use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
 
@@ -275,6 +276,58 @@ class PackagingCountDocument extends Api
         $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{
             $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->success('成功',$rs);

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

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