HeaderWordHookService.php 4.7 KB

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