PresaleController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <?php
  2. namespace addons\DepositPresale\console\controllers;;
  3. use addons\DepositPresale\common\enums\DepositPresaleEnum;
  4. use addons\DepositPresale\common\models\DepositPresaleActive;
  5. use addons\DepositPresale\common\models\DepositPresaleOrder;
  6. use common\enums\StatusEnum;
  7. use common\models\common\AddonsMarketingSetting;
  8. use common\models\mall\Mall;
  9. use Exception;
  10. use Yii;
  11. use yii\console\Controller;
  12. class PresaleController extends Controller
  13. {
  14. /**废弃
  15. * @Description: 更改预售活动状态
  16. * @Author: code farmer 3
  17. * @DateTime 2022-04-27 23:42:54
  18. * @return void
  19. */
  20. public function actionDealActivity()
  21. {
  22. $malls = Mall::getEnableMallList();
  23. $mall_ids = array_column($malls, 'id');
  24. echo ' 获取到的 mall_id => ' . implode(', ', $mall_ids) . PHP_EOL;
  25. try {
  26. foreach ($mall_ids as $mall_id) {
  27. $activities = DepositPresaleActive::find()->where([
  28. 'and',
  29. ['mall_id' => $mall_id],
  30. ['group_status' => [DepositPresaleEnum::NOT_STARTED, DepositPresaleEnum::OPEN_GROUP]],
  31. ['status' => StatusEnum::ENABLED],
  32. ]);
  33. /** @var DepositPresaleActive $activity */
  34. foreach ($activities->each() as $activity) {
  35. $is_change = 0;
  36. if ($activity->group_status == DepositPresaleEnum::NOT_STARTED) {
  37. if (time() >= $activity->deposit_start_at) {
  38. $is_change += 1;
  39. $activity->group_status = DepositPresaleEnum::OPEN_GROUP;
  40. }
  41. }
  42. if ($activity->group_status == DepositPresaleEnum::OPEN_GROUP) {
  43. if (time() > $activity->deposit_end_at) {
  44. $is_change += 1;
  45. $activity->group_status = DepositPresaleEnum::GROUP_FINISH;
  46. $result = DepositPresaleActive::delDiyGoods(['mall_id' => $mall_id, 'id' => $activity->id]);
  47. if ($result === false) throw new Exception(DepositPresaleActive::getStaticError());
  48. }
  49. }
  50. if ($is_change) {
  51. $res = $activity->save();
  52. if (!$res) throw new Exception($activity->getErrorMessage());
  53. }
  54. }
  55. }
  56. } catch (\Exception $e) {
  57. echo '执行失败的原因: ' . $e->getMessage();
  58. }
  59. }
  60. /**废弃
  61. * @Description: 处理过期的活动,已付定金的订单但是没有付尾款的退款
  62. * @Author: code farmer 3
  63. * @DateTime 2022-04-28 10:36:34
  64. * @return void
  65. */
  66. public function actionDealOrderOld()
  67. {
  68. $malls = Mall::getEnableMallList();
  69. $mall_ids = array_column($malls, 'id');
  70. echo ' 获取到的 mall_id => ' . implode(', ', $mall_ids) . PHP_EOL;
  71. foreach ($mall_ids as $mall_id) {
  72. $activities = DepositPresaleActive::find()->where([
  73. 'and',
  74. ['mall_id' => $mall_id],
  75. ['group_status' => DepositPresaleEnum::GROUP_FINISH]
  76. ]);
  77. /** @var DepositPresaleActive $activity */
  78. foreach ($activities->each() as $activity) {
  79. // 付了定金但是没有付尾款
  80. try {
  81. $presale_orders = DepositPresaleOrder::find()->where([
  82. 'and',
  83. ['mall_id' => $mall_id],
  84. ['deposit_presale_active_id' => $activity->id],
  85. ['order_status' => DepositPresaleEnum::JOINING],
  86. ['status' => StatusEnum::ENABLED],
  87. ['<=', 'final_payment_time', 0],
  88. ['>', 'pay_time', 0]
  89. ]);
  90. /** @var DepositPresaleOrder $presale_order */
  91. foreach ($presale_orders->each() as $presale_order) {
  92. $res = DepositPresaleOrder::finishDepositPresaleOrder($presale_order->mall_id, $presale_order->open_group_id);
  93. if ($res === false) {
  94. throw new Exception("预售订单ID:{$presale_order->id}, 主商城订单ID:{$presale_order->order_id}" . DepositPresaleOrder::getStaticError());
  95. }
  96. }
  97. } catch (\Exception $e) {
  98. Yii::error('退款执行失败的原因' . $e->getMessage());
  99. echo '退款执行失败的原因: ' . $e->getMessage() . PHP_EOL;
  100. }
  101. try {
  102. //未付款的
  103. $orders_query = DepositPresaleOrder::find()->where([
  104. 'and',
  105. ['mall_id' => $mall_id],
  106. ['deposit_presale_active_id' => $activity->id],
  107. ['order_status' => DepositPresaleEnum::NOT_PAY],
  108. ['status' => StatusEnum::ENABLED],
  109. ]);
  110. /** @var DepositPresaleOrder $order */
  111. foreach ($orders_query->each() as $order) {
  112. $params = ['mall_id' => $mall_id, 'id' => $order->id, 'user_id' => $order->user_id, 'operator_id' => 0, 'operator_name' => '系统'];
  113. $result = DepositPresaleOrder::close($params);
  114. if ($result === false) {
  115. throw new Exception("预售订单ID:{$order->id}, 订单ID:{$order->order_id}," . DepositPresaleOrder::getStaticError());
  116. }
  117. }
  118. } catch (\Exception $e) {
  119. Yii::error('关闭订单执行失败的原因' . $e->getMessage());
  120. echo '关闭订单执行失败的原因: ' . $e->getMessage() . PHP_EOL;
  121. }
  122. }
  123. }
  124. }
  125. /**
  126. * @Description: 更改活动状态和订单状态
  127. * @Author: observer3
  128. * @DateTime 2022-06-10 15:46:57
  129. * @return void
  130. */
  131. public function actionDealOrder()
  132. {
  133. $malls = Mall::getEnableMallList();
  134. $mall_ids = array_column($malls, 'id');
  135. echo ' 获取到的 mall_id => ' . implode(', ', $mall_ids) . PHP_EOL;
  136. foreach ($mall_ids as $mall_id) {
  137. $activities = DepositPresaleActive::find()->where([
  138. 'and',
  139. ['mall_id' => $mall_id],
  140. ['group_status' => [DepositPresaleEnum::NOT_STARTED, DepositPresaleEnum::OPEN_GROUP, DepositPresaleEnum::GROUP_FINISH]],
  141. ['status' => StatusEnum::ENABLED],
  142. ]);
  143. try {
  144. /** @var DepositPresaleActive $activity */
  145. foreach ($activities->each() as $activity) {
  146. if ($activity->group_status == DepositPresaleEnum::NOT_STARTED) {
  147. if (time() >= $activity->deposit_start_at) {
  148. $activity->group_status = DepositPresaleEnum::OPEN_GROUP;
  149. $res = $activity->save();
  150. if (!$res) throw new Exception($activity->getErrorMessage());
  151. }
  152. }
  153. if ($activity->group_status == DepositPresaleEnum::OPEN_GROUP) {
  154. if (time() > $activity->deposit_end_at) {
  155. $activity->group_status = DepositPresaleEnum::GROUP_FINISH;
  156. $res = $activity->save();
  157. if (!$res) throw new Exception($activity->getErrorMessage());
  158. $result = DepositPresaleActive::delDiyGoods(['mall_id' => $mall_id, 'id' => $activity->id]);
  159. if ($result === false) throw new Exception(DepositPresaleActive::getStaticError());
  160. $this->getUnpaidOrder($mall_id, $activity);
  161. }
  162. }
  163. if($activity->group_status == DepositPresaleEnum::GROUP_FINISH && time() > $activity->final_payment_end_at){
  164. $this->getNotPayFinalOrder($mall_id, $activity);
  165. }
  166. }
  167. } catch (Exception $e) {
  168. Yii::error('活动状态更改失败原因' . $e->getMessage());
  169. echo '活动状态更改失败原因: ' . $e->getMessage() . PHP_EOL;
  170. }
  171. }
  172. }
  173. public function getNotPayFinalOrder($mall_id, $activity)
  174. {
  175. try {
  176. $presale_orders = DepositPresaleOrder::find()->where([
  177. 'and',
  178. ['mall_id' => $mall_id],
  179. ['deposit_presale_active_id' => $activity->id],
  180. ['order_status' => DepositPresaleEnum::JOINING],
  181. ['status' => StatusEnum::ENABLED],
  182. ['<=', 'final_payment_time', 0],
  183. ['>', 'pay_time', 0]
  184. ]);
  185. /** @var DepositPresaleOrder $presale_order */
  186. foreach ($presale_orders->each() as $presale_order) {
  187. try {
  188. $res = DepositPresaleOrder::finishDepositPresaleOrder($presale_order->mall_id, $presale_order->open_group_id);
  189. if ($res === false) {
  190. throw new Exception("预售订单ID:{$presale_order->id}, 主商城订单ID:{$presale_order->order_id}" . DepositPresaleOrder::getStaticError());
  191. }
  192. } catch (\Exception $e) {
  193. Yii::error('退款执行失败的原因' . $e->getMessage());
  194. echo '退款执行失败的原因: ' . $e->getMessage() . PHP_EOL;
  195. }
  196. }
  197. } catch (\Exception $e) {
  198. Yii::error('仅支付定金未付尾款订单处理失败:' . $e->getMessage());
  199. echo '仅支付定金未付尾款订单处理失败: ' . $e->getMessage() . PHP_EOL;
  200. }
  201. }
  202. public function getUnpaidOrder($mall_id, $activity)
  203. {
  204. try {
  205. $orders_query = DepositPresaleOrder::find()->where([
  206. 'and',
  207. ['mall_id' => $mall_id],
  208. ['deposit_presale_active_id' => $activity->id],
  209. ['order_status' => DepositPresaleEnum::NOT_PAY],
  210. ['status' => StatusEnum::ENABLED],
  211. ]);
  212. /** @var DepositPresaleOrder $order */
  213. foreach ($orders_query->each() as $order) {
  214. try {
  215. $params = ['mall_id' => $mall_id, 'id' => $order->id, 'user_id' => $order->user_id, 'operator_id' => 0, 'operator_name' => '系统'];
  216. $result = DepositPresaleOrder::close($params);
  217. if ($result === false) {
  218. throw new Exception("预售订单ID:{$order->id}, 订单ID:{$order->order_id}," . DepositPresaleOrder::getStaticError());
  219. }
  220. } catch (\Exception $e) {
  221. Yii::error('关闭订单执行失败的原因:' . $e->getMessage());
  222. echo '关闭订单执行失败的原因: ' . $e->getMessage() . PHP_EOL;
  223. }
  224. }
  225. } catch (\Exception $e) {
  226. Yii::error('未付定金订单关闭订单失败:' . $e->getMessage());
  227. echo '未付定金订单关闭订单失败: ' . $e->getMessage() . PHP_EOL;
  228. }
  229. }
  230. }