HeaderWordHookService.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <?php
  2. namespace App\Service\HeaderWord;
  3. use App\Model\Header_ext;
  4. use App\Model\Header_ext_sub;
  5. use App\Service\Service;
  6. use Illuminate\Support\Facades\DB;
  7. /**
  8. * 表头相关工厂模式
  9. * @package App\Models
  10. */
  11. class HeaderWordHookService extends Service
  12. {
  13. protected static $instance;
  14. protected static $header;
  15. protected static $header_detail;
  16. public function __construct(){
  17. }
  18. public static function getInstance(): self
  19. {
  20. if (self::$instance == null) {
  21. self::$instance = new HeaderWordHookService();
  22. }
  23. return self::$instance;
  24. }
  25. public function getHeaderWord($data){
  26. if(!isset($data['type'])) return [false,'not found type'];
  27. $type = $data['type'];
  28. $list = Header_ext::where('type',$type)->orderBy('sort','asc')->select('*')->get()->toArray();
  29. // self::$header_detail = Header_ext::where('type',$type_detail)->pluck('value','key')->toArray();
  30. return [true,$list];
  31. }
  32. public function getHeaderSettings($data){
  33. if($this->isEmpty($data,'menu_id')) return [false,'菜单ID不能为空!'];
  34. $type = 1;
  35. if(! $this->isEmpty($data,'type')) $type = $data['type'];
  36. $header = config("header.{$data['menu_id']}")[$type] ?? [];
  37. return [true,$header];
  38. }
  39. public function edit($data){
  40. list($status,$msg) = $this->headerRule($data,false);
  41. if(!$status) return [$status,$msg];
  42. return [true,'保存成功!'];
  43. }
  44. public function add($data){
  45. list($status,$msg) = $this->headerRule($data);
  46. if(!$status) return [$status,$msg];
  47. DB::beginTransaction();
  48. try{
  49. Header_ext::where('menu_id',$data['menu_id'])
  50. ->where('type',$data['type'])
  51. ->where('del_time',0)
  52. ->update(['del_time'=>time()]);
  53. Header_ext_sub::where('menu_id',$data['menu_id'])
  54. ->where('type',$data['type'])
  55. ->where('del_time',0)
  56. ->update(['del_time'=>time()]);
  57. $insert = [];
  58. foreach ($data['data'] as $value){
  59. $insert[] = [
  60. 'key' => $value['key'] ?? '',
  61. 'value' => $value['value'],
  62. 'type' => $value['type'],
  63. 'menu_id' => $value['menu_id'],
  64. 'position' => $value['position'],
  65. 'x_axis' => $value['x'],
  66. 'y_axis' => $value['y'],
  67. ];
  68. }Header_ext::insert($insert);
  69. Header_ext_sub::insert([
  70. 'type' => $data['type'],
  71. 'menu_id' => $data['menu_id'],
  72. 'merge_cells' => json_encode($data['mergeCells']),
  73. 'max_length' => $data['maxLength'],
  74. ]);
  75. DB::commit();
  76. }catch (\Exception $e){
  77. DB::rollBack();
  78. return [false,$e->getMessage()];
  79. }
  80. return [true,'保存成功!'];
  81. }
  82. public function del($data){
  83. if($this->isEmpty($data,'id')) return [false,'ID不能为空!'];
  84. return [true,'删除成功'];
  85. }
  86. public function detail($data){
  87. if($this->isEmpty($data,'menu_id')) return [false,'菜单ID不能为空!'];
  88. if($this->isEmpty($data,'type')) return [false,'TYPE不能为空!'];
  89. $result = Header_ext::where('del_time',0)
  90. ->select('key','value','position','x_axis as x','y_axis as y')
  91. ->where('menu_id',$data['menu_id'])
  92. ->where('type',$data['type'])
  93. ->get()->toArray();
  94. $result_sub = Header_ext_sub::where('del_time',0)
  95. ->select('merge_cells','max_length')
  96. ->where('menu_id',$data['menu_id'])
  97. ->where('type',$data['type'])
  98. ->get()->toArray();
  99. $return['data'] = $result;
  100. $return['mergeCells'] = ! empty($result_sub[0]['merge_cells']) ? json_decode($result_sub[0]['merge_cells'],true) : [];
  101. $return['maxLength'] = $result_sub[0]['max_length'] ?? 1;
  102. return [true,$return];
  103. }
  104. public function headerRule(&$data,$is_add = true){
  105. if($this->isEmpty($data,'menu_id')) return [false,'菜单ID不能为空!'];
  106. if($this->isEmpty($data,'data')) return [false,'数据不能为空!'];
  107. foreach ($data['data'] as $key => $value){
  108. if (strpos($value['position'], ',') !== false) {
  109. $tmp = explode(',',$value['position']);
  110. $str_col = $str_ros = '';
  111. foreach ($tmp as $v){
  112. $tmp_v = explode(':',$v);
  113. if($tmp_v[0] != $tmp_v[1]) {
  114. // 截取头部
  115. $head = explode(':', $tmp[0])[0];
  116. // 截取尾部
  117. $tail = explode(':', end($tmp))[1];
  118. $str_ros = $head . ":" . $tail;
  119. continue;
  120. }else{
  121. $str_col .= $tmp_v[0] . ':';
  122. }
  123. }
  124. $str_col = rtrim($str_col,':');
  125. if($str_col) $data['data'][$key]['position'] = $str_col;
  126. if($str_ros) $data['data'][$key]['position'] = $str_ros;
  127. }
  128. }
  129. return [true,''];
  130. }
  131. }