FormItemDetailService.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. namespace App\Form\Services;
  3. use App\Services\CommonUserBaseService;
  4. class FormItemDetailService extends CommonUserBaseService
  5. {
  6. protected $cache = true;
  7. protected $cacheBucket = 'FormItemDetail:';
  8. protected $tokenBucket = 'Token:';
  9. protected $activeBucket = "Active:";
  10. /**
  11. * 获取表单项详情数据
  12. * @param $formId
  13. * @param null $itemId
  14. * @param null $formItemDetailId
  15. * @return array
  16. */
  17. public function getData($formId, $itemId = null, $formItemDetailId = null)
  18. {
  19. $map = [];
  20. $map['form_id'] = $formId;
  21. if(isset($itemId)){
  22. $map['form_item_id'] = $itemId;
  23. }
  24. if(isset($formItemDetailId)){
  25. $formItemDetailId = is_array($formItemDetailId) ? $formItemDetailId : explode(',', $formItemDetailId);
  26. $map['id'] = array(['in', $formItemDetailId]);
  27. }
  28. $map['status'] = $this->model::STATUS_ENABLED;
  29. return $this->model->buildQuery($map)->orderBy('sort', 'desc')
  30. ->selectRaw('id,content,sort')
  31. ->get()->toArray();
  32. }
  33. /**
  34. * 添加单项数据
  35. * @param $formId
  36. * @param $formItemId
  37. * @param $item
  38. * @param null $userId
  39. * @return mixed
  40. */
  41. public function addData($formId, $formItemId, $item, $userId = null)
  42. {
  43. $userId = $userId ?? $this->getAuthUserId();
  44. $add = [];
  45. $add['form_id'] = $formId;
  46. $add['form_item_id'] = $formItemId;
  47. $add['content'] = $item['content'] ?? '';
  48. if(isset($item['sort'])){
  49. $add['sort'] = $item['sort'];
  50. }
  51. if(!empty($item['id']) && $item['id'] > 0){
  52. $id = $item['id'];
  53. $add['status'] = $this->model::STATUS_ENABLED;
  54. $this->updateBy([
  55. 'id' => $id,
  56. ], $add);
  57. } else {
  58. $add['user_id'] = $userId;
  59. $id = $this->save($add)->id;
  60. }
  61. return $id;
  62. }
  63. /**
  64. * 添加多项数据
  65. * @param $formId
  66. * @param $formItemId
  67. * @param array $items
  68. * @param null $userId
  69. * @return array
  70. */
  71. public function addList($formId, $formItemId, $items = [], $userId = null)
  72. {
  73. if(!empty($items)){
  74. $sort = 1;
  75. foreach($items as $i => $item){
  76. $item['sort'] = $sort++;
  77. $item['id'] = $this->addData($formId, $formItemId, $item, $userId);
  78. $items[$i] = $item;
  79. }
  80. $ids = array_column($items, 'id');
  81. $allIds = $this->getData($formId, $formItemId);
  82. $allIds = array_column($allIds, 'id');
  83. $delIds = array_diff($allIds, $ids);
  84. if(!empty($delIds)){
  85. //删除已取消的数据
  86. $this->delItemDetails($formId, $formItemId, $delIds);
  87. }
  88. }
  89. return $items;
  90. }
  91. /**
  92. * 排序
  93. * @param $ids
  94. * @return int
  95. */
  96. public function sortItemDetails($ids)
  97. {
  98. $sort = 1;
  99. foreach ($ids as $id){
  100. $this->updateBy([
  101. 'id' => $id,
  102. 'status' => $this->model::STATUS_ENABLED
  103. ], ['sort' => $sort++]);
  104. }
  105. return $sort;
  106. }
  107. /**
  108. * 删除表单项目
  109. * @param $formId
  110. * @param null $itemId
  111. * @param null $formItemDetailId
  112. * @return bool
  113. */
  114. public function delItemDetails($formId, $itemId = null, $formItemDetailId = null)
  115. {
  116. $map = [];
  117. $map['form_id'] = $formId;
  118. //删除整个表单项
  119. if(isset($itemId)){
  120. $itemId = is_array($itemId) ? $itemId : explode(',', $itemId);
  121. $map['form_item_id'] = array(['in', $itemId]);
  122. }
  123. //删除单个表单项
  124. if(isset($formItemDetailId)){
  125. $formItemDetailId = is_array($formItemDetailId) ? $formItemDetailId : explode(',', $formItemDetailId);
  126. $map['id'] = array(['in', $formItemDetailId]);
  127. }
  128. return $this->updateBy($map,
  129. ['status' => $this->model::STATUS_DELETED]
  130. );
  131. }
  132. }