OrderSendForm.php 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\admin\models;
  8. use app\constants\OptionSetting;
  9. use app\models\CloudGoodsBind;
  10. use app\models\Express;
  11. use app\models\Goods;
  12. use app\models\Mch;
  13. use app\models\Order;
  14. use app\models\OrderDetail;
  15. use app\models\OrderTransit;
  16. use app\models\Shop;
  17. use app\models\StoreCloud;
  18. use app\models\User;
  19. use app\models\VideoShopOrderExt;
  20. use app\plugins\adopt\models\AdoptCostOrder;
  21. use app\utils\Notice\NoticeSend;
  22. use app\utils\Wechat\WechatMini;
  23. use yii\base\Model;
  24. class OrderSendForm extends Model
  25. {
  26. public $is_express;
  27. public $store_id;
  28. public $order_id;
  29. public $express;
  30. public $express_no;
  31. public $words;
  32. const EXPRESS_TYPE_EXPRESS = 1;
  33. const EXPRESS_TYPE_DADA = 2;
  34. const EXPRESS_TYPE_UU = 3;
  35. const EXPRESS_TYPE_PEISONG = 4;
  36. public function rules()
  37. {
  38. return [
  39. [['express', 'express_no', 'words'], 'trim'],
  40. [['express', 'express_no',], 'required', 'on' => 'EXPRESS'],
  41. [['order_id', 'store_id',], 'required', 'on' => 'DADA'],
  42. [['order_id', 'store_id',], 'required', 'on' => 'UU'],
  43. [['order_id', 'store_id',], 'required', 'on' => 'PEISONG'],
  44. [['order_id'], 'required'],
  45. [['express', 'express_no',], 'string',],
  46. [['express', 'express_no',], 'default', 'value' => ''],
  47. [['is_express'], 'safe'],
  48. ];
  49. }
  50. public function attributeLabels()
  51. {
  52. return [
  53. 'express' => '快递公司',
  54. 'express_no' => '快递单号',
  55. 'words' => '商家留言',
  56. ];
  57. }
  58. public function save()
  59. {
  60. if (!$this->validate()) {
  61. return [
  62. 'code' => 1,
  63. 'msg' => $this->getErrorSummary(false)[0],
  64. ];
  65. }
  66. $order = Order::findOne([
  67. 'is_delete' => 0,
  68. // 'store_id' => $this->store_id, //先注释掉,代理发货不验证此参数
  69. 'id' => $this->order_id,
  70. ]);
  71. if (!$order) {
  72. return [
  73. 'code' => 1,
  74. 'msg' => '订单不存在或已删除',
  75. ];
  76. }
  77. if ($order->is_pay == 0 && $order->pay_type != 2) {
  78. return [
  79. 'code' => 1,
  80. 'msg' => '订单未支付'
  81. ];
  82. }
  83. if ($order->apply_delete == Order::ORDER_APPLY_DELETE) {
  84. return [
  85. 'code' => 1,
  86. 'msg' => '该订单正在申请取消操作,请先处理'
  87. ];
  88. }
  89. if ($order->order_type == Order::ORDER_TYPE_GIVING_GIFTS && !$order->giving_gifts_received_user_id) {
  90. return [
  91. 'code' => 1,
  92. 'msg' => '操作失败,没有收礼人'
  93. ];
  94. }
  95. //视频号小店订单调用接口发货
  96. $form = new VideoShopOrderForm();
  97. $videoShopOrder = VideoShopOrderExt::findOne(['order_id' => $this->order_id, 'is_delete' => 0]);
  98. if ($videoShopOrder) {
  99. $base_ = new WechatMini();
  100. $miniProgram = $base_::getWechatConfig($order->store_id, $videoShopOrder->mini_id, 1);
  101. $form->miniProgram = $miniProgram;
  102. $result = $form->orderSend($this->order_id, $this->express_no, $msg);
  103. if ($result) {
  104. if (intval($msg['code']) !== 0) {
  105. return $msg;
  106. }
  107. }
  108. }
  109. //判断是否转单 转单后不可取消 (新版逻辑 转单后的订单与商家无关 ,商家与用户关联 ,转单与配送单有关)
  110. // $result = $this->checkIsCancel($order);
  111. // if ($result['code'] !== 0) {
  112. // return $result;
  113. // }
  114. //判断是否转单 转单后不可取消(新版逻辑 转单后的订单与商家无关 ,商家与用户关联 ,转单与配送单有关)
  115. // if ($result['status'] === false) {
  116. // return [
  117. // 'code' => 1,
  118. // 'msg' => "此订单已经转单商家不可发货"
  119. // ];
  120. // }
  121. // 订单类型判断提示
  122. $all_goods = OrderDetail::find()->where(['order_id' => $order->id])->asArray()->all();
  123. $is_have_express = false;
  124. foreach ($all_goods as $_goods) {
  125. if ($_goods['delivery_type'] == OrderDetail::GOODS_DELIVERY_EXPRESS) {
  126. $is_have_express = true;
  127. break;
  128. }
  129. }
  130. if ($order->is_offline == Order::IS_OFFLINE_TRUE && !$is_have_express && $this->is_express) {
  131. return [
  132. 'code' => 1,
  133. 'msg' => '此订单商品皆为自提,请选择无需物流发货'
  134. ];
  135. }
  136. if ($order->is_offline == Order::IS_OFFLINE_TRUE && $is_have_express && !$this->is_express) {
  137. return [
  138. 'code' => 1,
  139. 'msg' => '此订单包含普通快递配送,请选择快递方式发货'
  140. ];
  141. }
  142. // $expressList = Express::getExpressList();
  143. // $ok = false;
  144. // foreach ($expressList as $value) {
  145. // if ($value['name'] == $this->express) {
  146. // $ok = true;
  147. // break;
  148. // }
  149. // }
  150. // if (!$ok && $this->scenario == "EXPRESS") {
  151. // return [
  152. // 'code' => 1,
  153. // 'msg' => '快递公司不正确'
  154. // ];
  155. // }
  156. $order->express = $this->express;
  157. $order->express_no = $this->express_no;
  158. $order->words = $this->words;
  159. $order->trade_status = ORDER::ORDER_FLOW_SEND;
  160. $order->send_time = time();
  161. if ($order->save()) {
  162. \app\models\OrderAdminHandleLog::addHandleLog($order->id, \app\models\OrderAdminHandleLog::HANDLE_TYPE_SEND);
  163. $goods = Goods::findOne(OrderDetail::findOne(['order_id' => $order->id])->goods_id);
  164. if($order->giving_gifts_received_user_id){
  165. NoticeSend::OrderSend($order->giving_gifts_received_user_id, $order->mobile, $order->order_no, $goods->name, $this->express, $this->express_no, $order->order_type);
  166. }else{
  167. NoticeSend::OrderSend($order->user_id, $order->mobile, $order->order_no, $goods->name, $this->express, $this->express_no);
  168. }
  169. return [
  170. 'code' => 0,
  171. 'msg' => '发货成功',
  172. ];
  173. } else {
  174. return [
  175. 'code' => 1,
  176. 'msg' => '操作失败',
  177. ];
  178. }
  179. }
  180. public function cost_order_save()
  181. {
  182. if (!$this->validate()) {
  183. return [
  184. 'code' => 1,
  185. 'msg' => $this->getErrorSummary(false)[0],
  186. ];
  187. }
  188. $order = AdoptCostOrder::findOne([
  189. 'is_delete' => 0,
  190. 'store_id' => $this->store_id,
  191. 'id' => $this->order_id,
  192. ]);
  193. if (!$order) {
  194. return [
  195. 'code' => 1,
  196. 'msg' => '订单不存在或已删除',
  197. ];
  198. }
  199. if ($order->is_pay == 0 && $order->pay_type != 2) {
  200. return [
  201. 'code' => 1,
  202. 'msg' => '订单未支付'
  203. ];
  204. }
  205. if ($order->apply_delete == Order::ORDER_APPLY_DELETE) {
  206. return [
  207. 'code' => 1,
  208. 'msg' => '该订单正在申请取消操作,请先处理'
  209. ];
  210. }
  211. // 订单类型判断提示
  212. $all_goods = OrderDetail::find()->where(['order_id' => $order->id])->asArray()->all();
  213. $is_have_express = false;
  214. foreach ($all_goods as $_goods) {
  215. if ($_goods['delivery_type'] == OrderDetail::GOODS_DELIVERY_EXPRESS) {
  216. $is_have_express = true;
  217. break;
  218. }
  219. }
  220. if ($order->is_offline == Order::IS_OFFLINE_TRUE && !$is_have_express && post_params('is_express')) {
  221. return [
  222. 'code' => 1,
  223. 'msg' => '此订单商品皆为自提,请选择无需物流发货'
  224. ];
  225. }
  226. if ($order->is_offline == Order::IS_OFFLINE_TRUE && $is_have_express && !post_params('is_express')) {
  227. return [
  228. 'code' => 1,
  229. 'msg' => '此订单包含普通快递配送,请选择快递方式发货'
  230. ];
  231. }
  232. $expressList = Express::getExpressList();
  233. $ok = false;
  234. foreach ($expressList as $value) {
  235. if ($value['name'] == $this->express) {
  236. $ok = true;
  237. break;
  238. }
  239. }
  240. if (!$ok && $this->scenario == "EXPRESS") {
  241. return [
  242. 'code' => 1,
  243. 'msg' => '快递公司不正确'
  244. ];
  245. }
  246. $order->express = $this->express;
  247. $order->express_no = $this->express_no;
  248. $order->words = $this->words;
  249. $order->trade_status = ORDER::ORDER_FLOW_SEND;
  250. $order->send_time = time();
  251. if ($order->save()) {
  252. $goods = Goods::findOne(OrderDetail::findOne(['order_id' => $order->order_id])->goods_id);
  253. NoticeSend::OrderSend($order->user_id, $order->mobile, $order->order_no, $goods->name, $this->express, $this->express_no, 1);
  254. return [
  255. 'code' => 0,
  256. 'msg' => '发货成功',
  257. ];
  258. } else {
  259. return [
  260. 'code' => 1,
  261. 'msg' => '操作失败',
  262. ];
  263. }
  264. }
  265. }