ExcelOrderStandardForm.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?php
  2. namespace common\models\forms;
  3. use common\helpers\Date;
  4. use common\helpers\snowflake\SnowFake;
  5. use common\models\ExcelOrderShop;
  6. use common\models\OrderGoodsShop;
  7. use common\models\OrderShop;
  8. use common\models\OrderStandard;
  9. use common\models\OrderStandardGoods;
  10. use common\models\Period;
  11. use common\models\User;
  12. use common\models\UserInfo;
  13. use Yii;
  14. use yii\base\Exception;
  15. class ExcelOrderStandardForm extends \common\components\ActiveRecord
  16. {
  17. CONST EXCEL_ORDER_SHOP_FIELD = [
  18. '会员编号' => 'USER_NAME',
  19. // '报单中心' => 'DEC_USER_NAME',
  20. // '订单号' => 'ORDER_SN',
  21. '订单状态' => 'STATUS',
  22. '收货人' => 'CONSIGNEE',
  23. '联系方式1' => 'MOBILE',
  24. '省' => 'PROVINCE',
  25. '市' => 'CITY',
  26. '区' => 'COUNTY',
  27. '详细地址' => 'ADDRESS',
  28. '期数' => 'PERIOD_NUM',
  29. '订单类型' => 'ORDER_TYPE',
  30. '创建时间' => 'CREATED_AT',
  31. '支付时间' => 'PAY_AT',
  32. '发货时间' => 'DELIVERY_AT',
  33. '运费' => 'FREIGHT',
  34. '快递公司' => 'EXPRESS_COMPANY',
  35. '快递单号' => 'ORDER_TRACK_NO',
  36. '发货方式' => 'EXPRESS_TYPE',
  37. '会员备注' => 'FRONT_REMARK',
  38. '发货仓' => 'WAREHOUSE',
  39. '发货状态' => 'DELIVERY_STATUS',
  40. ];
  41. CONST EXCEL_ORDER_SHOP_GOODS_FIELD = [
  42. '订单号' => 'ORDER_SN',
  43. // '订单状态' => 'STATUS',
  44. '存货编码' => 'SKU_CODE',
  45. '存货名称' => 'GOODS_TITLE',
  46. '数量' => 'BUY_NUMS',
  47. '商品单价' => 'PRICE',
  48. '商品金额' => 'REAL_PRICE',
  49. '商品PV' => 'PV',
  50. 'PV合计' => 'REAL_PV',
  51. '期数' => 'PERIOD_NUM',
  52. ];
  53. /**
  54. * 导入excel数据
  55. * @param $excelData
  56. * @param $orderMonth
  57. * @param $payType
  58. * @return bool
  59. * @throws \yii\db\Exception
  60. */
  61. public function run($excelData,$orderMonth,$payType) {
  62. if( !$excelData ) return false;
  63. foreach ($excelData as $everyData) {
  64. if( !$everyData ) continue;
  65. $formatOrderData = [];
  66. $formatOrderGoodsData = [];
  67. foreach ($everyData as $key => $value) {
  68. if(isset(self::EXCEL_ORDER_SHOP_FIELD[$key])) {
  69. $formatOrderData[self::EXCEL_ORDER_SHOP_FIELD[$key]] = $value;
  70. }
  71. if(isset(self::EXCEL_ORDER_SHOP_GOODS_FIELD[$key])) {
  72. $formatOrderGoodsData[self::EXCEL_ORDER_SHOP_GOODS_FIELD[$key]] = $value;
  73. }
  74. }
  75. if( !isset($formatOrderGoodsData['ORDER_SN']) ) continue;
  76. //判断商城订单是表中是否已经存在该订单
  77. $one = OrderStandard::find()->select(["USER_ID", "SN", "ORDER_AMOUNT", "PV", "PAY_AMOUNT", "PAY_PV"])->where('SN=:SN', ['SN' => $formatOrderGoodsData['ORDER_SN']])->asArray()->one();
  78. if ($one) {
  79. OrderStandard::updateAllCounters([
  80. 'ORDER_AMOUNT' => $formatOrderGoodsData['REAL_PRICE'],
  81. 'PV' => $formatOrderGoodsData['REAL_PV'],
  82. 'PAY_AMOUNT' => $formatOrderGoodsData['REAL_PRICE'],
  83. 'PAY_PV' => $formatOrderGoodsData['REAL_PV'],
  84. ], 'SN=:SN', [
  85. 'SN' => $formatOrderGoodsData['ORDER_SN']
  86. ]);
  87. } else {
  88. $userInfoArr = UserInfo::findOneAsArray('USER_NAME=:USER_NAME', [':USER_NAME' => $formatOrderData['USER_NAME']], 'USER_ID');
  89. if (!isset($userInfoArr['USER_ID']) || !$userInfoArr['USER_ID']) {
  90. // echo $formatOrderData['USER_NAME'] . PHP_EOL;
  91. continue;
  92. }
  93. //insertOrderShop
  94. $orderShopInsertData = array_merge($formatOrderData, [
  95. 'ID' => SnowFake::instance()->generateId(),
  96. 'SN' => $formatOrderGoodsData['ORDER_SN'],
  97. 'USER_ID' => $userInfoArr['USER_ID'],
  98. 'ORDER_TYPE' => 'FX',
  99. 'ORDER_AMOUNT' => $formatOrderGoodsData['REAL_PRICE'],
  100. 'PV' => $formatOrderGoodsData['REAL_PV'],
  101. 'PAY_AMOUNT' => $formatOrderGoodsData['REAL_PRICE'],
  102. 'PAY_PV' => $formatOrderGoodsData['REAL_PV'],
  103. 'PAY_AT' => strtotime(self::excelTime($formatOrderData['PAY_AT'])),
  104. 'DELIVERY_AT' => strtotime(self::excelTime($formatOrderData['DELIVERY_AT'])),
  105. 'CREATED_AT' => strtotime(self::excelTime($formatOrderData['CREATED_AT'])),
  106. 'CREATE_USER' => $formatOrderData['USER_NAME'],
  107. 'PAY_TYPE' => $payType,//@todo
  108. 'STATUS' => 1,
  109. 'DELIVERY_STATUS' => $formatOrderData['DELIVERY_STATUS'] === '已发货' ? 1 : 0,
  110. 'CALC_MONTH' => $this->_getCalcMonth($orderMonth),
  111. ]);
  112. OrderStandard::insertOne($orderShopInsertData);
  113. }
  114. $goodsInsertData[] = array_merge($formatOrderGoodsData, [
  115. 'CALC_MONTH' => $this->_getCalcMonth($orderMonth),
  116. 'PAY_TYPE' => $payType,
  117. ]);
  118. unset($formatOrderData, $formatOrderGoodsData, $everyData);
  119. }
  120. if( isset($goodsInsertData) && $goodsInsertData ) OrderStandardGoods::batchInsert($goodsInsertData);
  121. unset($newStartRow, $goodsInsertData,$decGoodsInsertData);
  122. return true;
  123. }
  124. /**
  125. * 检测导入状态
  126. * @param $orderMonth
  127. */
  128. public function checkStatus($orderMonth) {
  129. //清空已经导入的数据
  130. $this->_clearPeriodOrder($orderMonth);
  131. }
  132. protected function _clearPeriodOrder($orderMonth) {
  133. OrderStandard::pageDeleteAll("CALC_MONTH=".$this->_getCalcMonth($orderMonth));
  134. OrderStandardGoods::pageDeleteAll("CALC_MONTH=".$this->_getCalcMonth($orderMonth));
  135. }
  136. protected function _getCalcMonth($orderMonth) {
  137. return date('Ym', strtotime($orderMonth.'-01'));
  138. }
  139. public function excelTime($orderDay,$format='Y-m-d H:i:s') {
  140. if(is_numeric($orderDay)){
  141. $t1 = intval(($orderDay - 25569) * 3600 * 24);
  142. $orderDay=gmdate($format,$t1);
  143. }
  144. return $orderDay;
  145. }
  146. public function finished($orderMonth) {
  147. return true;
  148. }
  149. }