|
|
@@ -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);
|