OrderSubmitPreviewForm.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. /*
  8. * @Author: kai
  9. * @Date: 2021-03-02 09:50:20
  10. * @LastEditTime: 2021-04-23 13:39:19
  11. * @LastEditors: Please set LastEditors
  12. * @Description: In User Settings Edit
  13. * @FilePath: \admin_php\modules\alliance\models\purchase\order\OrderSubmitPreviewForm.php
  14. */
  15. namespace app\modules\alliance\models\purchase\order;
  16. use app\models\Admin;
  17. use app\models\Option;
  18. use app\utils\Notice\NoticeAction;
  19. use app\utils\OrderNo;
  20. use app\modules\alliance\models\purchase\order\OrderForm;
  21. use app\modules\alliance\models\purchase\CartForm;
  22. use app\modules\alliance\models\purchase\PostageRules;
  23. use app\modules\admin\models\MerchantForm;
  24. class OrderSubmitPreviewForm extends OrderForm
  25. {
  26. public $cart_id_list;
  27. public $attr_list;
  28. public $goods_id;
  29. public $is_pay;
  30. public function rules()
  31. {
  32. $rules = [
  33. [['is_pay', 'address_id'], 'integer'],
  34. ['is_pay', 'default', 'value' => 1],
  35. [['cart_id_list', 'attr_list', 'goods_id'], 'safe'],
  36. ];
  37. return $rules;
  38. }
  39. public function afterValidate() {
  40. $this->address = $this->getAddressData();
  41. }
  42. public function search()
  43. {
  44. if (!$this->validate()){
  45. return [
  46. 'code' => 1,
  47. 'msg' => $this->getErrorSummary(false)[0],
  48. ];
  49. }
  50. try {
  51. // 预生成订单号
  52. $order_no = OrderNo::getOrderNo(OrderNo::ORDER_ALLIANCE_PURCHASE);
  53. cache()->set('delivery_order_no_' . get_user_id(), $order_no);
  54. } catch(\Exception $e) {
  55. return [
  56. 'code' => 1,
  57. 'line' => $e->getLine(),
  58. 'msg' => $e->getMessage(),
  59. 'file' => $e->getFile(),
  60. ];
  61. }
  62. $cartForm = new CartForm();
  63. $cartForm->cart_id_list = $this->cart_id_list;
  64. $cartForm->attr_list = $this->attr_list;
  65. $cartForm->goods_id = $this->goods_id;
  66. $cartForm->saas_id = get_saas_user_id();
  67. // $cartForm->store_id = get_store_id();
  68. $cartList = $cartForm->search();
  69. $express_price_total = 0;
  70. $goods_price_total = 0;
  71. $all_price_total = 0;
  72. $cloud_order_id = 0;
  73. foreach ($cartList['data'] as $_i => $_v){
  74. $cartList['data'][$_i]['supplier_express_price_total'] = 0;
  75. foreach($_v['goods_list'] as $i => $v){
  76. $supplier_id = $v['goods']['supplier_id'];
  77. foreach ($v['cart'] as $_c) {
  78. $in_rule = 0;
  79. $cartList['data'][$_i]['in_rule'] = $in_rule;
  80. }
  81. }
  82. if($this->address){
  83. $form = new MerchantForm();
  84. $form->setSaasStoreCloudId();
  85. $form->order_id = 0;
  86. $form->type = 0;
  87. $form->is_pay = $this->is_pay;
  88. try{
  89. $pre = $form->purchasePrePurchaseOrder($_v, $this->address);
  90. // var_dump($pre);die;
  91. if ((int)$pre['code'] !== 0) {
  92. throw new \Exception($pre['msg']);
  93. }
  94. } catch (\Exception $e){
  95. return [
  96. 'code' => 1,
  97. 'msg' => $e->getMessage(),
  98. ];
  99. }
  100. if($pre && $pre['code'] == 0){
  101. foreach ($pre['data'] as $gi => $gv) {
  102. $cloud_order_id = $gv['cloud_order_id'];
  103. foreach ($gv['goods_info'] as $goods_) {
  104. foreach ($goods_['attr'] as $attr_) {
  105. $attr_id = array_column($attr_['attr'], 'attr_id');
  106. sort($attr_id);
  107. foreach ($cartList['data'] as $_i => &$_v){
  108. foreach($_v['goods_list'] as $i => &$v){
  109. foreach ($v['cart'] as $cartI => &$_c) {
  110. $cart_attr = json_decode($_c['attr'], true);
  111. sort($cart_attr);
  112. if (!array_diff($cart_attr, $attr_id)) {
  113. $_c['cart_price'] = sprintf("%.2f", ($attr_['price'] / $attr_['num']));
  114. $_c['price'] = $attr_['price'];
  115. }
  116. }
  117. }
  118. }
  119. //
  120. }
  121. }
  122. $express_price_total += $gv['express_price'];
  123. $goods_price_total += $gv['goods_price'];
  124. $all_price_total += $gv['all_price'];
  125. $cartList['data'][$_i]['supplier_express_price_total'] += $gv['express_price'];
  126. }
  127. }
  128. }
  129. $cartList['data'][$_i]['pre'] = $pre;
  130. }
  131. return [
  132. 'code' => 0,
  133. 'msg' => 'OOKK',
  134. 'data' => [
  135. 'address' => $this->address,
  136. 'goods_list' => $cartList['data'],
  137. 'express_price_total' => sprintf('%.2f', $express_price_total),
  138. 'price_total' => $goods_price_total,
  139. 'pay_price' => $all_price_total,
  140. 'cloud_order_id' => $cloud_order_id
  141. ],
  142. ];
  143. }
  144. }