FenxiaoApply.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\fenxiao\model;
  11. use app\model\BaseModel;
  12. use app\model\member\Member;
  13. /**
  14. * 分销
  15. */
  16. class FenxiaoApply extends BaseModel
  17. {
  18. public $fenxiao_status_zh = [
  19. 1 => '待审核',
  20. 2 => '已审核',
  21. -1 => '拒绝',
  22. ];
  23. /**
  24. * 判断分销商名称是否存在
  25. * @param $fenxiao_name
  26. * @param $site_id
  27. */
  28. public function existFenxiaoName($fenxiao_name, $site_id)
  29. {
  30. $res = model('fenxiao_apply')->getCount([ [ 'fenxiao_name', '=', $fenxiao_name ], [ 'site_id', '=', $site_id ] ]);
  31. if ($res > 0) {
  32. return $this->error('', '该分销商名称已存在');
  33. }
  34. return $this->success();
  35. }
  36. /**
  37. * 申请成为分销商
  38. * @param $member_id
  39. * @param $fenxiao_name
  40. * @param $mobile
  41. * @return array
  42. */
  43. public function applyFenxiao($member_id, $site_id, $fenxiao_name = '', $mobile = '')
  44. {
  45. //判断该用户是否已经申请
  46. $apply_info = model('fenxiao_apply')->getInfo([ [ 'member_id', '=', $member_id ] ], 'apply_id,status');
  47. if (!empty($apply_info) && $apply_info[ 'status' ] != -1) {
  48. return $this->error('', '已经申请过,请不要重复申请');
  49. }
  50. // 分销商基础设置
  51. $config = new Config();
  52. $basics_config = $config->getFenxiaoBasicsConfig($site_id);
  53. $basics_config = $basics_config[ 'data' ][ 'value' ];
  54. if (!$basics_config[ 'level' ]) return $this->error('', '未开启分销');
  55. //获取分销配置信息
  56. $fenxiao_config = $config->getFenxiaoConfig($site_id);
  57. $fenxiao_config = $fenxiao_config[ 'data' ][ 'value' ];
  58. //获取用户信息
  59. $member_model = new Member();
  60. $member_field = 'source_member,fenxiao_id,nickname,headimg,reg_time,order_money,order_complete_money,order_num,order_complete_num';
  61. $member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $member_id ] ], $member_field);
  62. // 判断用户是否可以成为申请分销商
  63. if ($fenxiao_config[ 'fenxiao_condition' ] == 2) {
  64. if ($fenxiao_config[ 'consume_condition' ] == 1 && $fenxiao_config[ 'consume_count' ] > $member_info[ 'data' ][ 'order_num' ]) {
  65. return $this->error('', '您的消费次数未满足申请条件');
  66. } elseif ($fenxiao_config[ 'consume_condition' ] == 2 && $fenxiao_config[ 'consume_count' ] > $member_info[ 'data' ][ 'order_complete_num' ]) {
  67. return $this->error('', '您的消费次数未满足申请条件');
  68. }
  69. } elseif ($fenxiao_config[ 'fenxiao_condition' ] == 3) {
  70. if ($fenxiao_config[ 'consume_condition' ] == 1 && $fenxiao_config[ 'consume_money' ] > $member_info[ 'data' ][ 'order_money' ]) {
  71. return $this->error('', '您的消费金额未满足申请条件');
  72. } elseif ($fenxiao_config[ 'consume_condition' ] == 2 && $fenxiao_config[ 'consume_money' ] > $member_info[ 'data' ][ 'order_complete_money' ]) {
  73. return $this->error('', '您的消费金额未满足申请条件');
  74. }
  75. } elseif ($fenxiao_config[ 'fenxiao_condition' ] == 4) { //购买指定商品
  76. //获取用户购买商品是否在成为分销商指定商品区域
  77. $alias = 'og';
  78. $condition[] = [ 'og.member_id', '=', $member_id ];
  79. $condition[] = [ 'og.site_id', '=', $site_id ];
  80. $condition[] = [ 'og.goods_id', 'in', $fenxiao_config[ 'goods_ids' ] ];
  81. $field = 'o.order_status,og.goods_id';
  82. $join = [
  83. [
  84. 'order o',
  85. 'o.order_id = og.order_id',
  86. 'inner'
  87. ],
  88. ];
  89. if ($fenxiao_config[ 'consume_condition' ] == 1) {
  90. $condition[] = [ 'o.order_status', 'in', [ '1', '2', '3', '4', '10' ] ];
  91. $order_data = model('order_goods')->getList($condition, $field, '', $alias, $join);
  92. if (empty($order_data)) {
  93. return $this->error('', '您还未满足申请条件');
  94. }
  95. } elseif ($fenxiao_config[ 'consume_condition' ] == 2) {
  96. $condition[] = [ 'o.order_status', '=', '10' ];
  97. $order_data = model('order_goods')->getList($condition, $field, '', $alias, $join);
  98. if (empty($order_data)) {
  99. return $this->error('', '您还未满足申请条件');
  100. }
  101. }
  102. }
  103. if (empty($fenxiao_name)) $fenxiao_name = $member_info[ 'data' ][ 'nickname' ];
  104. //获取分销等级信息
  105. $level_model = new FenxiaoLevel();
  106. $level_info = $level_model->getLevelInfo([ [ 'site_id', '=', $site_id ], [ 'is_default', '=', 1 ] ], 'level_id,level_name');
  107. // 成为分销商是否需要审核
  108. if ($basics_config[ 'is_examine' ]) {
  109. $apply_data = [
  110. 'site_id' => $site_id,
  111. 'fenxiao_name' => $fenxiao_name,
  112. 'parent' => $member_info[ 'data' ][ 'fenxiao_id' ],
  113. 'member_id' => $member_id,
  114. 'mobile' => $mobile,
  115. 'nickname' => $member_info[ 'data' ][ 'nickname' ],
  116. 'headimg' => $member_info[ 'data' ][ 'headimg' ],
  117. 'level_id' => $level_info[ 'data' ][ 'level_id' ],
  118. 'level_name' => $level_info[ 'data' ][ 'level_name' ],
  119. 'order_complete_money' => $member_info[ 'data' ][ 'order_complete_money' ],
  120. 'order_complete_num' => $member_info[ 'data' ][ 'order_complete_num' ],
  121. 'reg_time' => $member_info[ 'data' ][ 'reg_time' ],
  122. 'create_time' => time(),
  123. 'status' => 1
  124. ];
  125. if (!empty($apply_info)) {
  126. $res = model('fenxiao_apply')->update($apply_data, [ [ 'member_id', '=', $member_id ] ]);
  127. } else {
  128. $res = model('fenxiao_apply')->add($apply_data);
  129. }
  130. return $this->success($res);
  131. } else {
  132. $fenxiao_data = [
  133. 'site_id' => $site_id,
  134. 'fenxiao_name' => $fenxiao_name,
  135. 'mobile' => $mobile,
  136. 'member_id' => $member_id,
  137. 'parent' => $member_info[ 'data' ][ 'fenxiao_id' ],
  138. 'level_id' => $level_info[ 'data' ][ 'level_id' ],
  139. 'level_name' => $level_info[ 'data' ][ 'level_name' ]
  140. ];
  141. $fenxiao_model = new Fenxiao();
  142. $res = $fenxiao_model->addFenxiao($fenxiao_data);
  143. return $res;
  144. }
  145. }
  146. /**
  147. * 管理员添加分销商
  148. */
  149. public function addFenxiao($fenxiao_data)
  150. {
  151. if (empty($fenxiao_data[ 'fenxiao_name' ])) {
  152. return $this->error('', '分销商名称不能为空');
  153. }
  154. if (empty($fenxiao_data[ 'level_id' ])) {
  155. return $this->error('', '请选择分销商等级');
  156. }
  157. if (empty($fenxiao_data[ 'member_id' ])) {
  158. return $this->error('', '请选择关联会员');
  159. }
  160. //判断该用户是否已经申请
  161. $apply_info = model('fenxiao_apply')->getInfo([ [ 'member_id', '=', $fenxiao_data[ 'member_id' ] ] ], 'apply_id,status');
  162. if (!empty($apply_info) && $apply_info[ 'status' ] != -1) {
  163. return $this->error('', '已经申请过,请不要重复申请');
  164. }
  165. // 分销商基础设置
  166. $config = new Config();
  167. //获取分销配置信息
  168. $fenxiao_config = $config->getFenxiaoConfig($fenxiao_data[ 'site_id' ]);
  169. $fenxiao_config = $fenxiao_config[ 'data' ][ 'value' ];
  170. //获取用户信息
  171. $member_model = new Member();
  172. $member_field = 'source_member,fenxiao_id,nickname,headimg,reg_time,order_money,order_complete_money,order_num,order_complete_num';
  173. $member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $fenxiao_data[ 'member_id' ] ] ], $member_field);
  174. if (empty($member_info)) return $this->error('', '未获取到会员信息');
  175. //获取分销等级信息
  176. $level_model = new FenxiaoLevel();
  177. $level_info = $level_model->getLevelInfo([ [ 'site_id', '=', $fenxiao_data[ 'site_id' ] ], [ 'level_id', '=', $fenxiao_data[ 'level_id' ] ] ], 'level_name');
  178. $fenxiao_data[ 'level_name' ] = $level_info[ 'data' ][ 'level_name' ];
  179. $fenxiao_model = new Fenxiao();
  180. return $fenxiao_model->addFenxiao($fenxiao_data);
  181. }
  182. /**
  183. * 审核通过
  184. * @param $fenxiao_id
  185. * @return array
  186. */
  187. public function pass($apply_id, $site_id)
  188. {
  189. $info = model('fenxiao_apply')->getInfo([ [ 'apply_id', '=', $apply_id ], [ 'site_id', '=', $site_id ] ]);
  190. if ($info[ 'status' ] == 2) {
  191. return $this->success();
  192. }
  193. model('fenxiao_apply')->startTrans();
  194. try {
  195. $data = [
  196. 'status' => 2,
  197. 'update_time' => time(),
  198. ];
  199. $res = model('fenxiao_apply')->update($data, [ [ 'apply_id', '=', $apply_id ], [ 'site_id', '=', $site_id ] ]);
  200. $fenxiao_data = [
  201. 'site_id' => $info[ 'site_id' ],
  202. 'fenxiao_name' => $info[ 'fenxiao_name' ],
  203. 'mobile' => $info[ 'mobile' ],
  204. 'member_id' => $info[ 'member_id' ],
  205. 'parent' => $info[ 'parent' ],
  206. 'level_id' => $info[ 'level_id' ],
  207. 'level_name' => $info[ 'level_name' ]
  208. ];
  209. $fenxiao_model = new Fenxiao();
  210. $result = $fenxiao_model->addFenxiao($fenxiao_data);
  211. if ($result[ 'code' ] != 0) {
  212. model('fenxiao_apply')->rollback();
  213. return $result;
  214. }
  215. model('fenxiao_apply')->commit();
  216. return $this->success($res);
  217. } catch (\Exception $e) {
  218. model('fenxiao_apply')->rollback();
  219. return $this->error('', $e->getMessage());
  220. }
  221. }
  222. /**
  223. * 审核不通过
  224. * @param $fenxiao_id
  225. * @return array
  226. */
  227. public function refuse($apply_id)
  228. {
  229. $data = [
  230. 'status' => -1,
  231. 'update_time' => time()
  232. ];
  233. $res = model('fenxiao_apply')->update($data, [ [ 'apply_id', '=', $apply_id ] ]);
  234. return $this->success($res);
  235. }
  236. /**
  237. * 获取分销商申请信息
  238. * @param array $condition
  239. * @param string $field
  240. * @return array
  241. */
  242. public function getFenxiaoApplyInfo($condition = [], $field = '*')
  243. {
  244. $res = model('fenxiao_apply')->getInfo($condition, $field);
  245. return $this->success($res);
  246. }
  247. /**
  248. * 获取分销商申请分页列表
  249. * @param array $condition
  250. * @param number $page
  251. * @param string $page_size
  252. * @param string $order
  253. * @param string $field
  254. */
  255. public function getFenxiaoApplyPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = 'a', $join = [])
  256. {
  257. $list = model('fenxiao_apply')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
  258. return $this->success($list);
  259. }
  260. /**
  261. * 获取分销商申请数量
  262. * @param array $condition
  263. * @param string $field
  264. */
  265. public function getFenxiaoApplyCount($condition = [], $field = 'id')
  266. {
  267. $count = model('fenxiao_apply')->getCount($condition, $field);
  268. return $this->success($count);
  269. }
  270. }