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. //
  37. // $header = config("header.{$data['menu_id']}")[$type] ?? [];
  38. //
  39. // return [true,$header];
  40. }
  41. public function edit($data){
  42. list($status,$msg) = $this->headerRule($data,false);
  43. if(!$status) return [$status,$msg];
  44. return [true,'保存成功!'];
  45. }
  46. public function add($data){
  47. list($status,$msg) = $this->headerRule($data);
  48. if(!$status) return [$status,$msg];
  49. DB::beginTransaction();
  50. try{
  51. Header_ext::where('menu_id',$data['menu_id'])
  52. ->where('type',$data['type'])
  53. ->where('del_time',0)
  54. ->update(['del_time'=>time()]);
  55. Header_ext_sub::where('menu_id',$data['menu_id'])
  56. ->where('type',$data['type'])
  57. ->where('del_time',0)
  58. ->update(['del_time'=>time()]);
  59. $insert = [];
  60. foreach ($data['data'] as $value){
  61. $insert[] = [
  62. 'key' => $value['key'] ?? '',
  63. 'value' => $value['value'],
  64. 'type' => $value['type'],
  65. 'menu_id' => $value['menu_id'],
  66. 'position' => $value['position'],
  67. 'x_axis' => $value['x'],
  68. 'y_axis' => $value['y'],
  69. ];
  70. }Header_ext::insert($insert);
  71. Header_ext_sub::insert([
  72. 'type' => $data['type'],
  73. 'menu_id' => $data['menu_id'],
  74. 'merge_cells' => json_encode($data['mergeCells']),
  75. 'max_length' => $data['maxLength'],
  76. ]);
  77. DB::commit();
  78. }catch (\Exception $e){
  79. DB::rollBack();
  80. return [false,$e->getMessage()];
  81. }
  82. return [true,'保存成功!'];
  83. }
  84. public function del($data){
  85. if($this->isEmpty($data,'id')) return [false,'ID不能为空!'];
  86. return [true,'删除成功'];
  87. }
  88. public function detail($data){
  89. if($this->isEmpty($data,'menu_id')) return [false,'菜单ID不能为空!'];
  90. if($this->isEmpty($data,'type')) return [false,'TYPE不能为空!'];
  91. $result = Header_ext::where('del_time',0)
  92. ->select('key','value','position','x_axis as x','y_axis as y')
  93. ->where('menu_id',$data['menu_id'])
  94. ->where('type',$data['type'])
  95. ->get()->toArray();
  96. $result_sub = Header_ext_sub::where('del_time',0)
  97. ->select('merge_cells','max_length')
  98. ->where('menu_id',$data['menu_id'])
  99. ->where('type',$data['type'])
  100. ->get()->toArray();
  101. $return['data'] = $result;
  102. $return['mergeCells'] = ! empty($result_sub[0]['merge_cells']) ? json_decode($result_sub[0]['merge_cells'],true) : [];
  103. $return['maxLength'] = $result_sub[0]['max_length'] ?? 1;
  104. return [true,$return];
  105. }
  106. public function headerRule(&$data,$is_add = true){
  107. if($this->isEmpty($data,'menu_id')) return [false,'菜单ID不能为空!'];
  108. if($this->isEmpty($data,'data')) return [false,'数据不能为空!'];
  109. foreach ($data['data'] as $key => $value){
  110. if (strpos($value['position'], ',') !== false) {
  111. $tmp = explode(',',$value['position']);
  112. $str_col = $str_ros = '';
  113. foreach ($tmp as $v){
  114. $tmp_v = explode(':',$v);
  115. if($tmp_v[0] != $tmp_v[1]) {
  116. // 截取头部
  117. $head = explode(':', $tmp[0])[0];
  118. // 截取尾部
  119. $tail = explode(':', end($tmp))[1];
  120. $str_ros = $head . ":" . $tail;
  121. continue;
  122. }else{
  123. $str_col .= $tmp_v[0] . ':';
  124. }
  125. }
  126. $str_col = rtrim($str_col,':');
  127. if($str_col) $data['data'][$key]['position'] = $str_col;
  128. if($str_ros) $data['data'][$key]['position'] = $str_ros;
  129. }
  130. }
  131. return [true,''];
  132. }
  133. }