M231016072501UpdateStoreOrder.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace addons\Store\console\migrations;
  3. use addons\Store\common\models\StoreOrder;
  4. use addons\Store\common\models\StoreOrderDetail;
  5. use addons\Store\common\models\StoreOrderMarketing;
  6. use yii\db\Migration;
  7. /**
  8. * Class M231016072501UpdateStoreOrder
  9. */
  10. class M231016072501UpdateStoreOrder extends Migration
  11. {
  12. /**
  13. * {@inheritdoc}
  14. */
  15. public function safeUp()
  16. {
  17. $i = 1;
  18. $page_size = 1000;
  19. while ($order_list = StoreOrder::find()->where(['>', 'id', 0])
  20. ->with(['detail'])
  21. ->orderBy('id asc')
  22. ->offset(($i - 1) * $page_size)->limit($page_size)->all()) {
  23. $order_detail_ids = [];
  24. foreach ($order_list as $item){
  25. $temp = array_column($item['detail'],'id');
  26. $order_detail_ids = array_merge($order_detail_ids,$temp);
  27. }
  28. $store_order_marketing_list = StoreOrderMarketing::lists(['where'=>[['order_detail_id'=>$order_detail_ids]],'index'=>'order_detail_id']);
  29. foreach ($order_list as $order){
  30. $score = 0;
  31. $score_money = 0;
  32. foreach ($order['detail'] as $order_detail){
  33. if(isset($store_order_marketing_list[$order_detail['id']])){
  34. $score+=$store_order_marketing_list[$order_detail['id']]['deduct_score'];
  35. $deduct_currency = json_decode($store_order_marketing_list[$order_detail['id']]['deduct_currency'],true);
  36. if(!empty($deduct_currency)&&is_array($deduct_currency)){
  37. $score_money+=$deduct_currency['score']['money'];
  38. }
  39. }
  40. }
  41. if($score>0 && $score_money>0){
  42. $order->score = $score;
  43. $order->score_money = $score_money;
  44. $res = $order->save();
  45. var_dump($res);
  46. }
  47. }
  48. $i++;
  49. }
  50. }
  51. /**
  52. * {@inheritdoc}
  53. */
  54. public function safeDown()
  55. {
  56. echo "M231016072501UpdateStoreOrder cannot be reverted.\n";
  57. return false;
  58. }
  59. /*
  60. // Use up()/down() to run migration code without a transaction.
  61. public function up()
  62. {
  63. }
  64. public function down()
  65. {
  66. echo "M231016072501UpdateStoreOrder cannot be reverted.\n";
  67. return false;
  68. }
  69. */
  70. }