OrderLimitLogic.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <?php
  2. namespace addons\QiShangTong\common\logic;
  3. use addons\QiShangTong\common\expand\sdk\qishangtong\src\model\OrderConfirmGoodsItemModel;
  4. use addons\QiShangTong\common\expand\sdk\qishangtong\src\model\OrderConfirmModel;
  5. use addons\QiShangTong\common\expand\sdk\qishangtong\src\request\OrderConfirmRequest;
  6. use addons\QiShangTong\common\helper\RequestHelper;
  7. use addons\QiShangTong\common\models\QiShangTongGoods;
  8. use addons\QiShangTong\common\models\QiShangTongGoodsAttr;
  9. use addons\QiShangTong\common\models\QiShangTongRegion;
  10. use common\logic\order\marketing\BaseMarketing;
  11. use common\models\user\UserAddress;
  12. class OrderLimitLogic extends BaseMarketing
  13. {
  14. public function execute($form)
  15. {
  16. // TODO: Implement execute() method.
  17. }
  18. /**
  19. * 当前方法不在使用
  20. * @param $form
  21. * @return void
  22. * @throws \Exception
  23. */
  24. public static function compute($form)
  25. {
  26. foreach ($form->group_order_goods as $item) {
  27. // 判断这件商品是否为企叮咚的商品
  28. $attr = QiShangTongGoodsAttr::findOne(['goods_attr_id' => $form['data']['attr_id']]);
  29. if (!empty($attr)) {
  30. // 判断件数
  31. $qGoods = QiShangTongGoods::findOne(['goods_id' => $attr->goods_id]);
  32. $specs = array_column($qGoods->content['goods']['spec'], 'qidingliang', 'spec_id');
  33. if ($specs[$attr->third_spec_id] > $form['data']['num']) throw new \Exception("起订量 {$specs[$attr->third_spec_id]} 件起");
  34. }
  35. }
  36. }
  37. /**
  38. * @param $params
  39. * @return array|void
  40. * @throws \Exception
  41. */
  42. public function validBuyNum($params)
  43. {
  44. $return = [
  45. 'status' => true,
  46. 'msg' => 'success'
  47. ];
  48. $attrs = $params['attrs'] ?? [];
  49. if(empty($attrs)) return $return;
  50. try {
  51. $goods = [];
  52. foreach ($attrs as $attr_id => $num) {
  53. $attr = QiShangTongGoodsAttr::findOne(['goods_attr_id' => $attr_id]);
  54. if (!empty($attr)) {
  55. // 判断件数
  56. $qGoods = QiShangTongGoods::findOne(['goods_id' => $attr->goods_id]);
  57. if (!empty($qGoods)) {
  58. if (empty($qGoods->can_sale) ||
  59. (!empty($qGoods->content['goods']['can_sale']) && $qGoods->content['goods']['can_sale'] != 1))
  60. throw new \Exception("当前商品不可售");
  61. $specs = array_column($qGoods->content['goods']['spec'], 'qidingliang', 'spec_id');
  62. if ($specs[$attr->third_spec_id] > $num) throw new \Exception("起订量 {$specs[$attr->third_spec_id]} 件起");
  63. $tGoods = new OrderConfirmGoodsItemModel();
  64. $tGoods->goods_id = $attr->third_goods_id;
  65. $tGoods->spec_id = $attr->third_spec_id;
  66. $tGoods->num = $num;
  67. $goods[] = $tGoods;
  68. }
  69. }
  70. }
  71. if (!empty($goods)) {
  72. // 企商通预览订单
  73. $addr = UserAddress::getUserAddress($params['user_id'], $params['address_id'] ?? 0);
  74. if (!empty($addr)) {
  75. $is_d = true;
  76. $region = QiShangTongRegion::findOne(['local_id' => $addr['district_id']]);
  77. if (empty($region)) {
  78. $is_d = false;
  79. $region = QiShangTongRegion::findOne(['local_id' => $addr['city_id']]);
  80. }
  81. $contentModel = new OrderConfirmModel();
  82. $contentModel->phone_mob = $addr['mobile'];
  83. $contentModel->region_name = "{$addr['province']}{$addr['city']}{$addr['district']}";
  84. $contentModel->address = $addr['detail'];
  85. $contentModel->province = $region->province_id; // ID要相通
  86. $contentModel->city = $region->city_id; // 直辖市可以传0,但是 区县/省市不能传0
  87. $contentModel->area = $is_d ? $region->id : $region->district_id;
  88. $contentModel->consignee = $addr['name'];
  89. $contentModel->details = $goods;
  90. // 商品信息
  91. $res = RequestHelper::send(new OrderConfirmRequest(), $contentModel, $params['mall_id']);
  92. if (is_string($res)) throw new \Exception($res);
  93. $return['extra'][$attr->goods_id]['shipping_fee'] = $res['shipping_fee'];
  94. }
  95. }
  96. } catch (\Exception $e) {
  97. $return = [
  98. 'status' => false,
  99. 'msg' => $e->getMessage()
  100. ];
  101. }
  102. return $return;
  103. }
  104. }