/app/common/models/member/ChildrenOfMember.php

https://github.com/sulianapp-com/sulianapp · PHP · 260 lines · 170 code · 39 blank · 51 comment · 9 complexity · 91196a2a6560dfbb3d7457f95f9c0453 MD5 · raw file

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: dingran
  5. * Date: 2018/10/22
  6. * Time: 下午5:29
  7. */
  8. namespace app\common\models\member;
  9. use app\common\models\BaseModel;
  10. use Illuminate\Support\Facades\DB;
  11. class ChildrenOfMember extends BaseModel
  12. {
  13. public $table = 'yz_member_children';
  14. protected $guarded = [];
  15. private $uniacid = 0;
  16. private $childrens = [];
  17. public function __construct(array $attributes = [])
  18. {
  19. $this->uniacid = \YunShop::app()->uniacid;
  20. parent::__construct($attributes);
  21. }
  22. public function CreateData($data)
  23. {
  24. \Log::debug('----------insert data-----');
  25. $rs = DB::table($this->getTable())->insert($data);
  26. return $rs;
  27. }
  28. public function DeletedData($uniacid = 0)
  29. {
  30. \Log::debug('----------DeletedData Children-----');
  31. return DB::table($this->getTable())->where('uniacid', $uniacid)->delete();
  32. }
  33. public function getMemberByDepth($uid, $depth)
  34. {
  35. return self::uniacid()
  36. ->where('member_id', $uid)
  37. ->where('level', $depth)
  38. ->orderBy('level')
  39. ->get();
  40. }
  41. public function hasRelationOfChild($uid)
  42. {
  43. return $this->getChildOfMember($uid);
  44. }
  45. public function getChildOfMember($uid)
  46. {
  47. return self::uniacid()
  48. ->where('member_id', $uid)
  49. ->orderBy('level')
  50. ->get();
  51. }
  52. public function addNewChildData(ParentOfMember $parentObj, $uid, $parent_id)
  53. {
  54. $parents = $parentObj->getParentOfMember($parent_id);
  55. $parents_ids = [];
  56. $attr = [];
  57. $parents_ids[] = $parent_id;
  58. if (!empty($parents)) {
  59. foreach ($parents as $val) {
  60. $parents_ids[$val['level']] = $val['parent_id'];
  61. }
  62. }
  63. $parent_total = count($parents_ids);
  64. foreach ($parents_ids as $key => $ids) {
  65. $level = ++$key;
  66. $child_exists = $this->hasChildOfMember($ids, $uid, $level);
  67. if (!$child_exists) {
  68. \Log::debug('------children level------', [$level]);
  69. $attr[] = [
  70. 'uniacid' => $this->uniacid,
  71. 'child_id' => $uid,
  72. 'level' => $level,
  73. 'member_id' => $ids,
  74. 'created_at' => time()
  75. ];
  76. }
  77. // dd($attr);
  78. }
  79. /*$item = $this->countSubChildOfMember($parents_ids);
  80. //$parents_ids = array_flip($parents_ids);
  81. //统计不为0的子级
  82. if (!empty($item)) {
  83. $parent_total = count($parents_ids);
  84. foreach ($item as $key => $rows) {
  85. if (in_array($rows['member_id'], $parents_ids)) {
  86. $exists[] = $rows['member_id'];
  87. $attr[] = [
  88. 'uniacid' => $this->uniacid,
  89. 'child_id' => $uid,
  90. 'level' => $parent_total - $key,
  91. 'member_id' => $rows['member_id'],
  92. 'created_at' => time()
  93. ];
  94. }
  95. }
  96. }
  97. //统计为空的子级
  98. foreach ($parents_ids as $key => $ids) {
  99. if (!in_array($ids, $exists)) {
  100. $attr[] = [
  101. 'uniacid' => $this->uniacid,
  102. 'child_id' => $uid,
  103. 'level' => 1,
  104. 'member_id' => $ids,
  105. 'created_at' => time()
  106. ];
  107. }
  108. }*/
  109. //ksort($attr);
  110. $this->CreateData($attr);
  111. }
  112. public function countSubChildOfMember(array $uid)
  113. {
  114. return self::uniacid()
  115. ->select(DB::raw('count(1) as user_count, member_id'))
  116. ->whereIn('member_id', $uid)
  117. ->groupBy('member_id')
  118. ->get();
  119. }
  120. public function delRelationOfChildByMemberId($parent_id, $uid)
  121. {
  122. return self::uniacid()
  123. ->where('member_id', $parent_id)
  124. ->where('child_id', $uid)
  125. ->delete();
  126. }
  127. public function delRelation($uid)
  128. {
  129. return self::uniacid()
  130. ->where('member_id', $uid)
  131. ->delete();
  132. }
  133. public function delMemberOfRelation(ParentOfMember $parentObj, $uid, $n_parent_id)
  134. {
  135. $parents = $parentObj->getParentOfMember($uid);
  136. $childs = $this->getChildOfMember($uid);
  137. //删除重新分配节点本身在子表中原父级的记录
  138. if (!$parents->isEmpty()) {
  139. foreach ($parents as $val) {
  140. $this->delRelationOfChildByMemberId($val['parent_id'], $val['member_id']);
  141. }
  142. }
  143. //删除重新分配节点的子级在子表中原父级的记录
  144. if (!$childs->isEmpty()) {
  145. foreach ($childs as $val) {
  146. foreach ($parents as $rows) {
  147. $this->delRelationOfChildByMemberId($rows['parent_id'], $val['child_id']);
  148. }
  149. }
  150. }
  151. //可优化
  152. if ($n_parent_id > 0) {
  153. //删除重新分配节点的所有子级
  154. if (!$childs->isEmpty()) {
  155. foreach ($childs as $val) {
  156. $this->delRelation($val['member_id']);
  157. }
  158. }
  159. }
  160. }
  161. public function getChildrensOfMember($uid)
  162. {
  163. return self::uniacid()
  164. ->where('member_id', $uid)
  165. ->get();
  166. }
  167. public function getChildrens($uid)
  168. {
  169. $childrens = $this->getChildOfMember($uid);
  170. if (!is_null($childrens)) {
  171. foreach ($childrens as $val) {
  172. $this->childrens[] = $val['child_id'];
  173. }
  174. }
  175. }
  176. public function hasChildOfMember($parent, $uid, $level)
  177. {
  178. return self::uniacid()
  179. ->where('child_id', $uid)
  180. ->where('member_id', $parent)
  181. ->where('level', $level)
  182. ->count();
  183. }
  184. public function fixChildData(ParentOfMember $parentObj, $uid, $parent_id)
  185. {
  186. $parents = $parentObj->getParentOfMember($parent_id);
  187. $parents_ids = [];
  188. $attr = [];
  189. $parents_ids[] = $parent_id;
  190. if (!empty($parents)) {
  191. foreach ($parents as $val) {
  192. $parents_ids[$val['level']] = $val['parent_id'];
  193. }
  194. }
  195. $parent_total = count($parents_ids);
  196. foreach ($parents_ids as $key => $ids) {
  197. $level = ++$key;
  198. $child_exists = $this->hasChildOfMember($ids, $uid, $level);
  199. if (!$child_exists) {
  200. echo '------children level------' . $level . '<BR>';
  201. $attr[] = [
  202. 'uniacid' => $this->uniacid,
  203. 'child_id' => $uid,
  204. 'level' => $level,
  205. 'member_id' => $ids,
  206. 'created_at' => time()
  207. ];
  208. }
  209. // dd($attr);
  210. }
  211. $this->CreateData($attr);
  212. }
  213. }