M241016065452CreateCloudStockAgentOrderDetailsTable.php 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace addons\CloudStock\console\migrations;
  3. use addons\CloudStock\common\models\CloudStockAgentOrder;
  4. use addons\CloudStock\common\models\CloudStockAgentOrderDetails;
  5. use common\helpers\FormatHelper;
  6. use yii\db\Migration;
  7. /**
  8. * Handles the creation of table `{{%cloud_stock_agent_order_details}}`.
  9. */
  10. class M241016065452CreateCloudStockAgentOrderDetailsTable extends Migration
  11. {
  12. /**
  13. * {@inheritdoc}
  14. */
  15. public function safeUp()
  16. {
  17. $sql = <<<SQL
  18. CREATE TABLE `qimall_addons_cloud_stock_agent_order_details` (
  19. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  20. `user_id` int(10) unsigned NOT NULL DEFAULT '0',
  21. `mall_id` int(10) unsigned NOT NULL DEFAULT '0',
  22. `goods_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '商品id',
  23. `order_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '订单id',
  24. `num` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '提货数量',
  25. `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态[-1:删除;0:禁用;1启用]',
  26. `created_at` int(10) unsigned NOT NULL DEFAULT '0',
  27. `updated_at` int(10) unsigned NOT NULL DEFAULT '0',
  28. PRIMARY KEY (`id`),
  29. KEY `order_id` (`order_id`)
  30. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='提货详情表(支持批量提货)';
  31. SQL;
  32. $this->execute($sql);
  33. // 迁移qimall_addons_cloud_stock_agent_order到qimall_addons_cloud_stock_agent_order_details
  34. $select = 'id, mall_id, user_id, goods_id, num, status, created_at, updated_at';
  35. foreach (CloudStockAgentOrder::find()->select($select)->asArray()->batch(1000) as $batchItem) {
  36. $orderIds = array_column($batchItem, 'id');
  37. $findOrderIds = CloudStockAgentOrderDetails::find()
  38. ->where(['order_id' => $orderIds])
  39. ->select('order_id')
  40. ->column();
  41. $insertOrderIds = array_diff($orderIds, $findOrderIds);
  42. $batchItem = array_column($batchItem, null, 'id');
  43. $insertData = [];
  44. foreach ($insertOrderIds as $insertOrderId) {
  45. $order = $batchItem[$insertOrderId] ?? [];
  46. if (empty($order)) {
  47. continue;
  48. }
  49. $insertData[] = [
  50. 'user_id' => $order['user_id'],
  51. 'mall_id' => $order['mall_id'],
  52. 'goods_id' => $order['goods_id'],
  53. 'order_id' => $order['id'],
  54. 'num' => $order['num'],
  55. 'status' => $order['status'],
  56. 'created_at' => $order['created_at'],
  57. 'updated_at' => $order['updated_at'],
  58. ];
  59. }
  60. if ($insertData) {
  61. try {
  62. \Yii::$app->db->createCommand()->batchInsert(
  63. CloudStockAgentOrderDetails::tableName(),
  64. array_keys($insertData[0]),
  65. $insertData
  66. )->execute();
  67. }catch (\Exception $e) {
  68. \Yii::$app->custom->logs(FormatHelper::exception($e, '云库存自提订单迁移到details表失败'), $insertData);
  69. }
  70. }
  71. }
  72. }
  73. /**
  74. * {@inheritdoc}
  75. */
  76. public function safeDown()
  77. {
  78. return false;
  79. }
  80. }