PinfanGroup.php 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\pinfan\model;
  11. use addon\coupon\model\MemberCoupon;
  12. use app\model\BaseModel;
  13. use app\model\member\MemberAccount as MemberAccountModel;
  14. use app\model\order\OrderCommon;
  15. use app\model\order\OrderRefund;
  16. use app\model\order\VirtualOrder;
  17. use app\model\system\Cron;
  18. use app\model\system\User;
  19. /**
  20. * 拼团返现组
  21. */
  22. class PinfanGroup extends BaseModel
  23. {
  24. /**
  25. * 创建拼团返现组
  26. * @param $pintuan_order_info
  27. * @return array|\multitype
  28. */
  29. public function addPinfanGroup($pintuan_order_info)
  30. {
  31. model('promotion_pinfan_group')->startTrans();
  32. //获取拼团信息
  33. $pintuan_model = new Pinfan();
  34. $pintuan_id = $pintuan_order_info[ 'pintuan_id' ];
  35. $pintuan = $pintuan_model->getPinfanInfo([ [ 'pintuan_id', '=', $pintuan_id ] ]);
  36. $pintuan_info = $pintuan[ 'data' ];
  37. try {
  38. $data = [
  39. 'site_id' => $pintuan_info[ 'site_id' ],
  40. 'goods_id' => $pintuan_info[ 'goods_id' ],
  41. 'is_virtual_goods' => $pintuan_info[ 'is_virtual_goods' ],
  42. 'pintuan_id' => $pintuan_order_info[ 'pintuan_id' ],
  43. 'head_id' => $pintuan_order_info[ 'head_id' ],
  44. 'pintuan_num' => $pintuan_info[ 'pintuan_num' ],
  45. 'pintuan_count' => 1,
  46. 'create_time' => time(),
  47. 'end_time' => time() + ( $pintuan_info[ 'pintuan_time' ] * 60 ),
  48. 'status' => 2,
  49. 'is_virtual_buy' => $pintuan_info[ 'is_virtual_buy' ],
  50. 'is_single_buy' => $pintuan_info[ 'is_single_buy' ],
  51. 'is_promotion' => $pintuan_info[ 'is_promotion' ],
  52. 'buy_num' => $pintuan_info[ 'buy_num' ],
  53. ];
  54. $res = model('promotion_pinfan_group')->add($data);
  55. //添加拼团返现组关闭事件
  56. $cron = new Cron();
  57. $cron->addCron(1, 0, "拼团返现组关闭", "ClosePinfanGroup", $data[ 'end_time' ], $res);
  58. //更新拼团开组人数及购买人数
  59. $pintua_data = [
  60. 'group_num' => $pintuan_info[ 'group_num' ] + 1,
  61. 'order_num' => $pintuan_info[ 'order_num' ] + 1,
  62. ];
  63. $pintuan_model->editPinfanNum($pintua_data, [ [ 'pintuan_id', '=', $pintuan_order_info[ 'pintuan_id' ] ] ]);
  64. model('promotion_pinfan_group')->commit();
  65. return $this->success($res);
  66. } catch (\Exception $e) {
  67. model('promotion_pinfan_group')->rollback();
  68. return $this->error('', $e->getMessage());
  69. }
  70. }
  71. /**
  72. * 编辑组信息
  73. * @param array $condition
  74. * @param array $data
  75. * @return array
  76. */
  77. public function editPinfanGroup($condition = [], $data = [])
  78. {
  79. $res = model('promotion_pinfan_group')->update($data, $condition);
  80. return $this->success($res);
  81. }
  82. /**
  83. * 加入拼团返现组
  84. * @param $pintuan_order_info
  85. * @return array|\multitype
  86. */
  87. public function joinPinfanGroup($pintuan_order_info)
  88. {
  89. model('promotion_pinfan_group')->startTrans();
  90. //获取拼团信息
  91. $pintuan_model = new Pinfan();
  92. $pintuan_id = $pintuan_order_info[ 'pintuan_id' ];
  93. $pintuan = $pintuan_model->getPinfanInfo([ [ 'pintuan_id', '=', $pintuan_id ] ]);
  94. $pintuan_info = $pintuan[ 'data' ];
  95. try {
  96. $order_num = $pintuan_info[ 'order_num' ] + 1;
  97. $success_group_num = $pintuan_info[ 'success_group_num' ];
  98. //获取拼团返现组信息
  99. $group = $this->getPinfanGroupInfo([ [ 'group_id', '=', $pintuan_order_info[ 'group_id' ] ] ]);
  100. $group_info = $group[ 'data' ];
  101. //更新拼团返现组当前数量及状态
  102. $pintuan_count = $group_info[ 'pintuan_count' ] + 1;
  103. $res = $this->editPinfanGroup([ [ 'group_id', '=', $pintuan_order_info[ 'group_id' ] ] ], [ 'pintuan_count' => $pintuan_count ]);
  104. if ($pintuan_count == $group_info[ 'pintuan_num' ]) {//已成团
  105. $success_group_num += 1;
  106. //修改拼团返现组状态
  107. model('promotion_pinfan_group')->update([ 'status' => 3 ], [ [ 'group_id', '=', $pintuan_order_info[ 'group_id' ] ] ]);
  108. //查询该组所有订单
  109. $pintuan_order_model = new PinfanOrder();
  110. $pintuan_order = $pintuan_order_model->getPinfanOrderList([ [ 'group_id', '=', $pintuan_order_info[ 'group_id' ] ] ], 'order_id,pintuan_status,member_id');
  111. $pintuan_order_list = $pintuan_order[ 'data' ];
  112. #获取拼团组中支付的订单
  113. $pintuan_bidding_arr = [];
  114. foreach ($pintuan_order_list as $key => $value) {
  115. if ($value[ 'pintuan_status' ] == 2) {
  116. $pintuan_bidding_arr[ $key ] = $value;
  117. }
  118. }
  119. $pintuan_bidding_arr = array_column($pintuan_bidding_arr, 'order_id');
  120. shuffle($pintuan_bidding_arr);
  121. #随机筛选拼中人Id组
  122. $pintuan_success_arr = array_slice($pintuan_bidding_arr, 0, $pintuan_info[ 'chengtuan_num' ]);
  123. $order_model = new OrderCommon();
  124. $user_model = new User();
  125. $member_account_model = new MemberAccountModel();
  126. $user_admin_info = $user_model->getUserInfo([ [ 'app_module', '=', 'shop' ], [ 'is_admin', '=', 1 ], [ 'site_id', '=', $pintuan_info[ 'site_id' ] ] ])[ 'data' ];
  127. if (!empty($pintuan_order_list)) {
  128. foreach ($pintuan_order_list as $v) {
  129. switch ( $v[ 'pintuan_status' ] ) {
  130. case 0:
  131. //将未支付的修改为失败
  132. model('promotion_pinfan_order')->update([ 'pintuan_status' => 1 ], [ [ 'order_id', '=', $v[ 'order_id' ] ] ]);
  133. //开放订单
  134. $order_model->orderUnlock($v[ 'order_id' ]);
  135. //关闭订单
  136. $result = $order_model->orderClose($v[ 'order_id' ], [], '拼团组人数已满,订单自动关闭');
  137. if ($result[ "code" ] < 0) {
  138. model('promotion_pinfan_group')->rollback();
  139. return $result;
  140. }
  141. //更新订单营销状态名称
  142. model('order')->update([ 'promotion_status_name' => '拼团失败' ], [ [ 'order_id', '=', $v[ 'order_id' ] ] ]);
  143. break;
  144. case 2://已支付
  145. //开放订单
  146. $order_model->orderUnlock($v[ 'order_id' ]);
  147. //更新订单营销状态名称
  148. if (in_array($v[ 'order_id' ], $pintuan_success_arr)) {
  149. //将已支付的修改为成功
  150. model('promotion_pinfan_order')->update([ 'pintuan_status' => 3 ], [ [ 'order_id', '=', $v[ 'order_id' ] ] ]);
  151. model('order')->update([ 'promotion_status_name' => '拼团成功', 'is_enable_refund' => 1 ], [ [ 'order_id', '=', $v[ 'order_id' ] ] ]);
  152. #拼中发货
  153. //针对虚拟订单执行收发货操作
  154. if ($group_info[ 'is_virtual_goods' ] == 1) {
  155. $order_model->orderCommonTakeDelivery($v[ 'order_id' ]);
  156. }
  157. } else {
  158. model('promotion_pinfan_order')->update([ 'pintuan_status' => 1 ], [ [ 'order_id', '=', $v[ 'order_id' ] ] ]);
  159. #未拼中订单
  160. //主动退款
  161. $order_refund_model = new OrderRefund();
  162. $refund_result = $order_refund_model->activeRefund($v[ 'order_id' ], "拼团订单关闭", '拼团订单关闭');
  163. if ($refund_result[ "code" ] < 0) {
  164. model('promotion_pinfan_group')->rollback();
  165. return $refund_result;
  166. }
  167. //关闭订单 todo 退款完毕后会自动关闭订单,理论上不需要在这里调用退款
  168. // $result = $order_model->orderClose($v[ 'order_id' ]);
  169. // if ($result[ "code" ] < 0) {
  170. // model('promotion_pinfan_group')->rollback();
  171. // return $result;
  172. // }
  173. //更新订单营销状态名称
  174. model('order')->update([ 'promotion_status_name' => '拼团失败' ], [ [ 'order_id', '=', $v[ 'order_id' ] ] ]);
  175. #发放奖励
  176. if ($pintuan_info[ 'reward_type' ] == 1) {
  177. #奖励储值余额
  178. $member_account_model->addMemberAccount($pintuan_info[ 'site_id' ], $v[ 'member_id' ], 'balance', $pintuan_info[ 'reward_type_num' ], 'pinfan', 0, '活动奖励发放', $v[ 'order_id' ]);
  179. $user_model->addUserLog($user_admin_info[ 'uid' ], $user_admin_info[ 'username' ], $pintuan_info[ 'site_id' ], "拼团返利:会员余额调整id:" . $v[ 'member_id' ] . "金额" . $pintuan_info[ 'reward_type_num' ]);
  180. } else if ($pintuan_info[ 'reward_type' ] == 2) {
  181. #奖励现金余额
  182. $member_account_model->addMemberAccount($pintuan_info[ 'site_id' ], $v[ 'member_id' ], 'balance_money', $pintuan_info[ 'reward_type_num' ], 'pinfan', 0, '活动奖励发放', $v[ 'order_id' ]);
  183. $user_model->addUserLog($user_admin_info[ 'uid' ], $user_admin_info[ 'username' ], $pintuan_info[ 'site_id' ], "拼团返利:会员余额调整id:" . $v[ 'member_id' ] . "金额" . $pintuan_info[ 'reward_type_num' ]);
  184. } else if ($pintuan_info[ 'reward_type' ] == 4) {
  185. #奖励积分
  186. $member_account_model->addMemberAccount($pintuan_info[ 'site_id' ], $v[ 'member_id' ], 'point', $pintuan_info[ 'reward_type_num' ], 'pinfan', 0, '活动奖励发放', $v[ 'order_id' ]);
  187. $user_model->addUserLog($user_admin_info[ 'uid' ], $user_admin_info[ 'username' ], $pintuan_info[ 'site_id' ], "拼团返利:会员积分调整id:" . $v[ 'member_id' ] . "积分数量" . $pintuan_info[ 'reward_type_num' ]);
  188. } else if ($pintuan_info[ 'reward_type' ] == 3) {
  189. #发放优惠券
  190. $member_cpupon_model = new MemberCoupon();
  191. $member_cpupon_model->sendCoupon(explode(',', $pintuan_info[ 'reward_type_num' ]), $pintuan_info[ 'site_id' ], $v[ 'member_id' ], 3, '', '', $v[ 'order_id' ]);
  192. }
  193. }
  194. break;
  195. }
  196. }
  197. }
  198. }
  199. //更新拼团 购买人数
  200. $pintuan_model->editPinfanNum([ 'order_num' => $order_num, 'success_group_num' => $success_group_num ], [ [ 'pintuan_id', '=', $pintuan_order_info[ 'pintuan_id' ] ] ]);
  201. model('promotion_pinfan_group')->commit();
  202. return $this->success($res);
  203. } catch (\Exception $e) {
  204. model('promotion_pinfan_group')->rollback();
  205. return $this->error('', $e->getMessage());
  206. }
  207. }
  208. /**
  209. * 查询拼团返现组信息
  210. * @param array $condition
  211. * @param string $field
  212. * @return array
  213. */
  214. public function getPinfanGroupInfo($condition = [], $field = '*')
  215. {
  216. $group_info = model('promotion_pinfan_group')->getInfo($condition, $field);
  217. return $this->success($group_info);
  218. }
  219. /**
  220. * 获取拼团返现组详情
  221. * @param $condition
  222. * @return array
  223. */
  224. public function getPinfanGroupDetail($condition)
  225. {
  226. $field = 'pg.*,m.nickname,m.headimg,og.sku_name,og.sku_image,pp.pintuan_price';
  227. $alias = 'pg';
  228. $join = [
  229. [ 'promotion_pinfan_order ppo', 'ppo.group_id = pg.group_id and ppo.member_id = pg.head_id', 'inner' ],
  230. [ 'promotion_pinfan pp', 'pp.pintuan_id = pg.pintuan_id', 'inner' ],
  231. [ 'order_goods og', 'og.order_id = ppo.order_id', 'inner' ],
  232. [ 'member m', 'm.member_id = pg.head_id', 'inner' ]
  233. ];
  234. $info = model('promotion_pinfan_group')->getInfo($condition, $field, $alias, $join);
  235. //查询参与拼单的会员
  236. if (!empty($info)) {
  237. $member_list = model('promotion_pinfan_order')->getList([ [ "group_id", "=", $info[ "group_id" ] ] ], "member_img,nickname,member_id");
  238. $info[ "member_list" ] = $member_list;
  239. }
  240. return $this->success($info);
  241. }
  242. /**
  243. * 获取组列表
  244. * @param array $condition
  245. * @param string $field
  246. * @return array
  247. */
  248. public function getPinfanGroupList($condition = [], $field = '*')
  249. {
  250. $list = model('promotion_pinfan_group')->getList($condition, $field);
  251. return $this->success($list);
  252. }
  253. /**
  254. * 获取拼团返现组商品列表
  255. * @param array $condition
  256. * @return array
  257. */
  258. public function getPinfanGoodsGroupList($condition = [])
  259. {
  260. $field = 'ppg.group_id,ppg.goods_id,ppg.pintuan_id,ppg.head_id,ppg.pintuan_num,ppg.pintuan_count,ppg.create_time,ppg.end_time,ppg.status,ppg.is_single_buy,ppg.is_promotion,ppg.buy_num,m.member_id,m.nickname,m.headimg';
  261. $alias = 'ppg';
  262. $join = [
  263. [
  264. 'member m',
  265. 'ppg.head_id = m.member_id',
  266. 'inner'
  267. ]
  268. ];
  269. $list = model('promotion_pinfan_group')->getList($condition, $field, 'ppg.create_time desc', $alias, $join);
  270. return $this->success($list);
  271. }
  272. /**
  273. * 获取拼团返现组分页列表
  274. * @param array $condition
  275. * @param number $page
  276. * @param string $page_size
  277. * @param string $order
  278. */
  279. public function getPinfanGroupPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '')
  280. {
  281. $field = 'pg.*,g.goods_name,g.goods_image,m.nickname,m.headimg';
  282. $alias = 'pg';
  283. $join = [
  284. [
  285. 'goods g',
  286. 'pg.goods_id = g.goods_id',
  287. 'inner'
  288. ],
  289. [
  290. 'member m',
  291. 'm.member_id = pg.head_id',
  292. 'inner'
  293. ]
  294. ];
  295. $list = model('promotion_pinfan_group')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
  296. return $this->success($list);
  297. }
  298. /**
  299. * 关闭拼团返现组
  300. * @param $group_id
  301. * @return array|\multitype
  302. */
  303. public function cronClosePinfanGroup($group_id)
  304. {
  305. model('promotion_pinfan_group')->startTrans();
  306. try {
  307. //获取拼团返现组信息
  308. $pintuan_group = model('promotion_pinfan_group')->getInfo([ [ 'group_id', '=', $group_id ] ], 'status,is_virtual_buy,is_virtual_goods');
  309. if (!empty($pintuan_group)) {
  310. if ($pintuan_group[ 'status' ] == 2) {
  311. //关闭所有已支付的订单
  312. $res = $this->closePaidGroupOrder($group_id, $pintuan_group[ 'is_virtual_buy' ], $pintuan_group[ 'is_virtual_goods' ]);
  313. if ($res[ 'code' ] < 0) {
  314. model('promotion_pinfan_group')->rollback();
  315. return $res;
  316. }
  317. }
  318. }
  319. model('promotion_pinfan_group')->commit();
  320. return $this->success();
  321. } catch (\Exception $e) {
  322. model('promotion_pinfan_group')->rollback();
  323. return $this->error('', $e->getMessage());
  324. }
  325. }
  326. /**
  327. * 关闭拼团返现组已支付订单
  328. * @param $group_id
  329. * @param $is_virtual_buy
  330. * @param $is_virtual_goods
  331. * @return array|\multitype
  332. */
  333. public function closePaidGroupOrder($group_id, $is_virtual_buy, $is_virtual_goods)
  334. {
  335. //获取所有该组的订单
  336. $pintuan_order_model = new PinfanOrder();
  337. $paid_order = $pintuan_order_model->getPinfanOrderList([ [ 'group_id', '=', $group_id ] ], 'order_id,pintuan_status,member_id,pintuan_id');
  338. $paid_order_list = $paid_order[ 'data' ];
  339. if (!empty($paid_order_list)) {
  340. #获取拼团组中支付的订单
  341. $pintuan_bidding_arr = [];
  342. foreach ($paid_order_list as $key => $value) {
  343. if ($value[ 'pintuan_status' ] == 2) {
  344. $pintuan_bidding_arr[ $key ] = $value;
  345. }
  346. }
  347. $pintuan_bidding_arr = array_column($pintuan_bidding_arr, 'order_id');
  348. shuffle($pintuan_bidding_arr);
  349. $pinfan_model = new Pinfan();
  350. $pintuan_info = $pinfan_model->getPinfanInfo([ [ 'pintuan_id', '=', $paid_order_list[ 0 ][ 'pintuan_id' ] ] ])[ 'data' ];
  351. if ($pintuan_info[ 'chengtuan_num' ] >= count($pintuan_bidding_arr)) {
  352. $pintuan_success_arr = $pintuan_bidding_arr;
  353. } else {
  354. #随机筛选拼中人Id组
  355. $pintuan_success_arr = array_slice($pintuan_bidding_arr, 0, $pintuan_info[ 'chengtuan_num' ]);
  356. }
  357. }
  358. $order_model = new OrderCommon();
  359. model('promotion_pinfan_group')->startTrans();
  360. try {
  361. if ($is_virtual_buy == 1) {//虚拟成团
  362. //修改拼团返现组状态(成功)
  363. $res = model('promotion_pinfan_group')->update([ 'status' => 3 ], [ [ 'group_id', '=', $group_id ] ]);
  364. //获取拼团返现组信息
  365. $pintuan_id = model('promotion_pinfan_group')->getValue([ [ 'group_id', '=', $group_id ] ], 'pintuan_id');
  366. //更新拼团 成团组数
  367. model('promotion_pinfan')->setInc([ [ 'pintuan_id', '=', $pintuan_id ] ], 'success_group_num');
  368. $user_model = new User();
  369. $member_account_model = new MemberAccountModel();
  370. $user_admin_info = $user_model->getUserInfo([ [ 'app_module', '=', 'shop' ], [ 'is_admin', '=', 1 ], [ 'site_id', '=', $pintuan_info[ 'site_id' ] ] ])[ 'data' ];
  371. if (!empty($paid_order_list)) {
  372. foreach ($paid_order_list as $v) {
  373. switch ( $v[ 'pintuan_status' ] ) {
  374. case 0:
  375. //将未支付的修改为失败
  376. model('promotion_pinfan_order')->update([ 'pintuan_status' => 1 ], [ [ 'order_id', '=', $v[ 'order_id' ] ] ]);
  377. //解除锁定
  378. $order_model->orderUnlock($v[ 'order_id' ]);
  379. //关闭订单
  380. $result = $order_model->orderClose($v[ 'order_id' ], [], '拼团组关闭,订单自动关闭');
  381. if ($result[ "code" ] < 0) {
  382. model('promotion_pinfan_group')->rollback();
  383. return $result;
  384. }
  385. //更新订单营销状态名称
  386. model('order')->update([ 'promotion_status_name' => '拼团失败' ], [ [ 'order_id', '=', $v[ 'order_id' ] ] ]);
  387. break;
  388. case 2://已支付
  389. //解除锁定
  390. $order_model->orderUnlock($v[ 'order_id' ]);
  391. //更新订单营销状态名称
  392. if (in_array($v[ 'order_id' ], $pintuan_success_arr)) {
  393. //将已支付的修改为成功
  394. model('promotion_pinfan_order')->update([ 'pintuan_status' => 3 ], [ [ 'order_id', '=', $v[ 'order_id' ] ] ]);
  395. //更新订单营销状态名称
  396. model('order')->update([ 'promotion_status_name' => '拼团成功', 'is_enable_refund' => 1 ], [ [ 'order_id', '=', $v[ 'order_id' ] ] ]);
  397. #拼中发货
  398. //针对虚拟订单执行收发货操作
  399. if ($is_virtual_goods == 1) {
  400. $Virtual_model = new VirtualOrder();
  401. $Virtual_model->orderTakeDelivery($v[ 'order_id' ]);
  402. }
  403. } else {
  404. #未拼中订单
  405. //主动退款
  406. $order_refund_model = new OrderRefund();
  407. $refund_result = $order_refund_model->activeRefund($v[ 'order_id' ], "拼团订单关闭", '拼团订单关闭');
  408. if ($refund_result[ "code" ] < 0) {
  409. model('promotion_pinfan_group')->rollback();
  410. return $refund_result;
  411. }
  412. //关闭订单 todo 主动退款后应该不需要再退款了
  413. // $result = $order_model->orderClose($v[ 'order_id' ]);
  414. // if ($result[ "code" ] < 0) {
  415. // model('promotion_pinfan_group')->rollback();
  416. // return $result;
  417. // }
  418. model('promotion_pinfan_order')->update([ 'pintuan_status' => 1 ], [ [ 'order_id', '=', $v[ 'order_id' ] ] ]);
  419. //更新订单营销状态名称
  420. model('order')->update([ 'promotion_status_name' => '拼团失败' ], [ [ 'order_id', '=', $v[ 'order_id' ] ] ]);
  421. #发放奖励
  422. if ($pintuan_info[ 'reward_type' ] == 1) {
  423. #奖励储值余额
  424. $member_account_model->addMemberAccount($pintuan_info[ 'site_id' ], $v[ 'member_id' ], 'balance', $pintuan_info[ 'reward_type_num' ], 'pinfan', 0, '活动奖励发放', $v[ 'order_id' ]);
  425. $user_model->addUserLog($user_admin_info[ 'uid' ], $user_admin_info[ 'username' ], $pintuan_info[ 'site_id' ], "拼团返利:会员余额调整id:" . $v[ 'member_id' ] . "金额" . $pintuan_info[ 'reward_type_num' ]);
  426. } else if ($pintuan_info[ 'reward_type' ] == 2) {
  427. #奖励现金余额
  428. $member_account_model->addMemberAccount($pintuan_info[ 'site_id' ], $v[ 'member_id' ], 'balance_money', $pintuan_info[ 'reward_type_num' ], 'pinfan', 0, '活动奖励发放', $v[ 'order_id' ]);
  429. $user_model->addUserLog($user_admin_info[ 'uid' ], $user_admin_info[ 'username' ], $pintuan_info[ 'site_id' ], "拼团返利:会员余额调整id:" . $v[ 'member_id' ] . "金额" . $pintuan_info[ 'reward_type_num' ]);
  430. } else if ($pintuan_info[ 'reward_type' ] == 4) {
  431. #奖励积分
  432. $member_account_model->addMemberAccount($pintuan_info[ 'site_id' ], $v[ 'member_id' ], 'point', $pintuan_info[ 'reward_type_num' ], 'pinfan', 0, '活动奖励发放', $v[ 'order_id' ]);
  433. $user_model->addUserLog($user_admin_info[ 'uid' ], $user_admin_info[ 'username' ], $pintuan_info[ 'site_id' ], "拼团返利:会员积分调整id:" . $v[ 'member_id' ] . "积分数量" . $pintuan_info[ 'reward_type_num' ]);
  434. } else if ($pintuan_info[ 'reward_type' ] == 3) {
  435. #发放优惠券
  436. $member_cpupon_model = new MemberCoupon();
  437. $member_cpupon_model->sendCoupon(explode(',', $pintuan_info[ 'reward_type_num' ]), $pintuan_info[ 'site_id' ], $v[ 'member_id' ], 3, '', '', $v[ 'order_id' ]);
  438. }
  439. }
  440. break;
  441. }
  442. }
  443. }
  444. } else {//未开启虚拟成团
  445. //修改拼团返现组状态为失败
  446. $res = model('promotion_pinfan_group')->update([ 'status' => 1 ], [ [ 'group_id', '=', $group_id ] ]);
  447. if (!empty($paid_order_list)) {
  448. foreach ($paid_order_list as $v) {
  449. switch ( $v[ 'pintuan_status' ] ) {
  450. case 0:
  451. //将未支付的修改为失败
  452. model('promotion_pinfan_order')->update([ 'pintuan_status' => 1 ], [ [ 'order_id', '=', $v[ 'order_id' ] ] ]);
  453. //解除锁定
  454. $order_model->orderUnlock($v[ 'order_id' ]);
  455. //关闭订单
  456. $result = $order_model->orderClose($v[ 'order_id' ], [] , '拼团组关闭,订单自动关闭');
  457. if ($result[ 'code' ] < 0) {
  458. model('promotion_pinfan_group')->rollback();
  459. return $result;
  460. }
  461. //更新订单营销状态名称
  462. model('order')->update([ 'promotion_status_name' => '拼团失败' ], [ [ 'order_id', '=', $v[ 'order_id' ] ] ]);
  463. break;
  464. case 2:
  465. //解除锁定
  466. $order_model->orderUnlock($v[ 'order_id' ]);
  467. //关闭拼团订单
  468. model('promotion_pinfan_order')->update([ 'pintuan_status' => 1 ], [ [ 'order_id', '=', $v[ 'order_id' ] ] ]);
  469. //主动退款
  470. $order_refund_model = new OrderRefund();
  471. $refund_result = $order_refund_model->activeRefund($v[ 'order_id' ], '拼团订单关闭,订单自动退款', '拼团订单关闭,订单自动退款');
  472. if ($refund_result[ 'code' ] < 0) {
  473. model('promotion_pinfan_group')->rollback();
  474. return $refund_result;
  475. }
  476. //关闭订单 todo 其实可以删掉
  477. // $result = $order_model->orderClose($v[ 'order_id' ]);
  478. // if ($result[ "code" ] < 0) {
  479. // model('promotion_pinfan_group')->rollback();
  480. // return $result;
  481. // }
  482. //更新订单营销状态名称
  483. model('order')->update([ 'promotion_status_name' => '拼团失败' ], [ [ 'order_id', '=', $v[ 'order_id' ] ] ]);
  484. break;
  485. }
  486. }
  487. }
  488. }
  489. model('promotion_pinfan_group')->commit();
  490. return $this->success($res);
  491. } catch (\Exception $e) {
  492. model('promotion_pinfan_group')->rollback();
  493. return $this->error('', $e->getMessage());
  494. }
  495. }
  496. }