NoAfterSalesOrderJob.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619
  1. <?php
  2. namespace app\jobs\order;
  3. use app\constants\OptionSetting;
  4. use app\models\Coupon;
  5. use app\models\CouponAutoSend;
  6. use app\models\Goods;
  7. use app\models\IntegralAppreciationPoolSub;
  8. use app\models\Option;
  9. use app\models\OrderDetail;
  10. use app\models\PondUserNum;
  11. use app\models\OrderTransit;
  12. use app\models\PtActivityOrder;
  13. use app\models\ShareGroupMoney;
  14. use app\models\StoreDividendsCycle;
  15. use app\models\SuperSales;
  16. use app\models\Supplier;
  17. use app\models\TeamGradesPoolDetail;
  18. use app\models\UserCoupon;
  19. use app\models\VerifyCard;
  20. use app\models\VerifyCardAccount;
  21. use app\models\VerifyCardSale;
  22. use app\modules\alliance\models\NewMerchantForm;
  23. use app\utils\AutoSendCoupon;
  24. use app\utils\Tools;
  25. use app\utils\Wechat\WechatMini;
  26. use yii\base\BaseObject;
  27. use yii\queue\JobInterface;
  28. use app\utils\OrderUtil;
  29. use app\models\Order;
  30. use app\models\OrderRefund;
  31. use app\models\VideoShopOrderExt;
  32. use app\utils\Wechat\Wechat;
  33. use app\modules\admin\models\WechatThirdForm;
  34. use app\models\SharingReceiver;
  35. use app\utils\Wechat\WechatShare;
  36. use app\utils\Share\BonusPool;
  37. use app\models\Store;
  38. // 过售后期且未售后订单
  39. class NoAfterSalesOrderJob extends BaseObject implements JobInterface
  40. {
  41. public $order_id;
  42. public $store_id;
  43. public $retry = 30;
  44. public $is_scan = 0;//是否是当面付订单
  45. public function execute($queue)
  46. {
  47. $needOrderComplete = 0;
  48. if ($this->is_scan) {
  49. $order = \app\plugins\scanCodePay\models\Order::findOne(['id' => $this->order_id, 'is_delete' => 0, 'is_pay' => 1]);
  50. if (!$order) {
  51. return;
  52. }
  53. } else {
  54. $order = Order::findOne(['id' => $this->order_id, 'is_delete' => 0, 'is_pay' => 1, 'trade_status' => Order::ORDER_FLOW_CONFIRM]);
  55. if (!$order) {
  56. return;
  57. }
  58. $field_order_id = VideoShopOrderExt::find()->where(['order_id' => $this->order_id])->select('order_id')->column();
  59. if ($field_order_id) {
  60. $needOrderComplete = 1;
  61. //不处理视频号小店订单
  62. // return;
  63. }
  64. }
  65. if ($needOrderComplete) {
  66. try {
  67. $ShareMoneyForm = new \app\modules\client\models\v1\ShareMoneyForm();
  68. $ShareMoneyForm->store_id = $order->store_id;
  69. $ShareMoneyForm->order = $order;
  70. $ShareMoneyForm->setData();
  71. $form = new \app\modules\client\models\OrderComplete();
  72. $form->order_id = $order->id;
  73. $form->order_type = 0;
  74. $form->store_id = $order->store_id;
  75. $form->notify();
  76. } catch (\Exception $e) {
  77. \Yii::error($e);
  78. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], __CLASS__);
  79. }
  80. }
  81. if (OrderUtil::isCancel($order)) {
  82. // 已取消,不处理
  83. return;
  84. }
  85. if (OrderUtil::isAfterSale($order)) {
  86. // 已售后,不处理
  87. return;
  88. }
  89. if (!$this->is_scan) {
  90. $orderRefund = OrderRefund::findOne(['order_id' => $this->order_id, 'is_delete' => 0, 'is_user_cancel' => 0]);
  91. if ($orderRefund && !\in_array($orderRefund->status, [2, 3])) {
  92. // 如果售后类型不是换货或拒绝退换货,不处理
  93. return;
  94. }
  95. try {
  96. $form = new NewMerchantForm();
  97. $type = 1;
  98. $form->store_id = $order->store_id;
  99. $result = $form->saasGiveIntegral($order->pay_price, $order->user_id, $order->order_no, $type);
  100. debug_log($result, 'orderComplete.log');
  101. } catch (\Exception $e) {
  102. debug_log($e->getMessage(), 'orderComplete.log');
  103. }
  104. }
  105. try {
  106. if($order->transaction_id){
  107. //检测微信是否收货
  108. Wechat::init($this->store_id);
  109. $app = WechatMini::getWechatConfig($this->store_id);
  110. $form = new WechatThirdForm(['store_id' => $this->store_id]);
  111. $is_trade_managed = $form->is_trade_managed($app);
  112. $open = true;
  113. if($is_trade_managed){
  114. // \Yii::error(['--------$is_trade_managed=false---- ', $store_id]);
  115. $result = $form->wxOrderStateIsConfirm($app, $order);
  116. debug_log('检测是否收货', 'yunst.log');
  117. debug_log($result, 'yunst.log');
  118. if(!$result){
  119. $open = false;
  120. }
  121. }
  122. if($open){
  123. //如果没有添加成功分账接收人就完结分账
  124. $share_receiver = SharingReceiver::findOne(['store_id' => $this->store_id, 'order_no' => $order['order_no']]);
  125. if (!$share_receiver) {
  126. $res = WechatShare::complete($order['transaction_id'], $order['id'], false, '分账完结', $this->store_id, $order['is_platform'] );
  127. debug_log('分账完结_', 'yunst.log');
  128. debug_log($res, 'yunst.log');
  129. }
  130. }
  131. }
  132. } catch (\Exception $e) {
  133. debug_log($e->getMessage(), 'yunst.log');
  134. }
  135. $orderUtil = new OrderUtil();
  136. try {
  137. $order_id_arr = $orderUtil->profitSharing($order, $this->store_id);
  138. } catch (\Exception $e) {
  139. \Yii::warning('---- profitSharing END分账失败 ----' . $e->getMessage());
  140. }
  141. $this->retry--;
  142. if(!empty($order_id_arr) && $this->retry){
  143. //延时重试
  144. \queue_push(new NoAfterSalesOrderJob(['order_id' => $this->order_id, 'store_id' => $this->store_id, 'retry' => $this->retry, 'is_scan' => $this->is_scan ?? 0]), 86400);
  145. return;
  146. }
  147. if (!$this->is_scan) {
  148. //如果转单等供货商售后期过再执行逻辑 否则加延时重试
  149. $orderTransit = OrderTransit::findOne(['order_id' => $order->id, 'is_sale' => 0, 'is_delete' => 0]);
  150. if ($orderTransit) {
  151. $supplier = Supplier::findOne(['cloud_supplier_id' => $orderTransit->cloud_supplier_id, 'is_delete' => 0]);
  152. if ($supplier) {
  153. $confirm_time = $orderTransit->confirm_time;
  154. $sale_time = bcadd($confirm_time, $supplier->sale_day * 86400);
  155. if ($confirm_time <= 0 || $sale_time > time()) {
  156. $sale_day = 86400;
  157. if ($confirm_time > 0) {
  158. $sale_day = bcsub($sale_time, time());
  159. }
  160. \queue_push(new NoAfterSalesOrderJob(['order_id' => $this->order_id, 'store_id' => $this->store_id, 'retry' => $this->retry, 'is_scan' => $this->is_scan ?? 0]), $sale_day);
  161. return;
  162. }
  163. }
  164. }
  165. Order::updateAll(['is_sale' => 1, 'updated_at' => time()], ['id' => $order['id']]);
  166. try {
  167. //返回团长免单金额
  168. PtActivityOrder::handleHeadOrder($order['pt_order_id']);
  169. } catch (\Exception $e) {
  170. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'pt_handleHeadOrder.log');
  171. }
  172. //处理超级卖货系统
  173. try {
  174. $result = SuperSales::getNotFinishSales($order->user_id, $order->id, $order->store_id);
  175. debug_log(['order_no' => $order->order_no, 'result' => $result], 'superSales.log');
  176. $result = \app\models\SuperSalesMoney::sendMoney($order);
  177. debug_log(['order_no' => $order->order_no, 'result' => $result], 'superSalesMoney.log');
  178. } catch (\Exception $e) {
  179. debug_log(['order_no' => $order['order_no'], 'message' => $e->getMessage()], 'superSales.log');
  180. }
  181. try {
  182. // 如果是复购订单,就释放冻结佣金
  183. if ((int)$order['is_fugou'] === 1) {
  184. \app\utils\FuGou::sendFrostPrice($order['user_id']);
  185. }
  186. } catch (\Exception $e) {
  187. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'guGou.log');
  188. }
  189. try {
  190. \app\modules\admin\models\TeamBonusForm::afterOrderSales($order);
  191. } catch (\Exception $e) {
  192. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'teamBonusPool.log');
  193. }
  194. try {
  195. BonusPool::sendRange($order['id']);
  196. // 奖金池补充奖金
  197. BonusPool::poolPush($order);
  198. BonusPool::generalUserConsume($order['user_id'], $order['store_id']);
  199. BonusPool::sendTwoPlusOneTeamLevelShare($order['id']);
  200. BonusPool::sendArea($order['id']);
  201. if(!$order['share_hold_pay_up']){
  202. BonusPool::userAuto2ShareHolder($order);
  203. BonusPool::userSelfBuyGoods2ShareHolder($order);
  204. }
  205. //处理滑落 单独拿出来 放sendRange里面会操作失败 因为处理滑落会先查询下级是否是股东 但是成为股东逻辑还没执行到
  206. BonusPool::userSlide($order);
  207. } catch (\Exception $e) {
  208. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'share_holder_bonus.log');
  209. }
  210. try {
  211. \app\modules\admin\models\ActivityOrderRebateSelfForm::afterOrderSales($order);
  212. \app\models\ActivityRebateOrderNLog::priceInfoOrderId($order);
  213. } catch (\Exception $e) {
  214. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'activityOrder.log');
  215. }
  216. try {
  217. TeamGradesPoolDetail::setPoolDetail($order);
  218. } catch (\Exception $e) {
  219. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'teamGradesPoolDetail.log');
  220. }
  221. try {
  222. // 免单队列
  223. $orderUtil->orderQueueSeceiver($order);
  224. } catch (\Exception $e) {
  225. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'orderQueue.log');
  226. }
  227. try {
  228. $orderUtil->share_money($order);
  229. } catch (\Exception $e) {
  230. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'share_money.log');
  231. }
  232. try {
  233. $orderUtil->video_shop_order_share_money($order['id']);
  234. } catch (\Exception $e) {
  235. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'video_shop_order_share_money.log');
  236. }
  237. try {
  238. $orderUtil->share_holder_money($order);
  239. } catch (\Exception $e) {
  240. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'share_holder_money.log');
  241. }
  242. try {
  243. $store_integral_time = Option::get(OptionSetting::STORE_INTEGRAL_TIME, $order['store_id'], 'gift', 0)['value'];
  244. if ($store_integral_time == 2 || !$store_integral_time){
  245. $orderUtil->give_integral($order);
  246. }
  247. } catch (\Exception $e) {
  248. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'give_integral.log');
  249. }
  250. // 消费获赠成长值
  251. try {
  252. $orderUtil->sendGrowthValue($order);
  253. } catch (\Exception $e) {
  254. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'send_growth_value.log');
  255. }
  256. try {
  257. $orderUtil->shop_share($order['id']);
  258. } catch (\Exception $e) {
  259. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'shop_share.log');
  260. }
  261. try {
  262. $orderUtil->league_price($order);
  263. } catch (\Exception $e) {
  264. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'league_price.log');
  265. }
  266. // 门店收益
  267. if ($order['md_id'] > 0) {
  268. try {
  269. $orderUtil->handleMdProfit($order['id']);
  270. } catch (\Exception $e) {
  271. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'handleMdProfit.log');
  272. }
  273. }
  274. try {
  275. $orderUtil->sendVideoGoodsProfit($order['id']);
  276. } catch (\Exception $e) {
  277. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'sendVideoGoodsProfit.log');
  278. }
  279. try {
  280. //代理发放佣金
  281. $orderUtil->agencyPrice($order);
  282. } catch (\Exception $e) {
  283. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'agencyPrice.log');
  284. }
  285. //代理发放佣金(二级佣金)
  286. $orderUtil->agencyPriceTwo($order);
  287. try {
  288. //产品代理发放佣金
  289. $orderUtil->sendGoodsAgentMoney($order);
  290. } catch (\Exception $e) {
  291. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'sendGoodsAgentMoney.log');
  292. }
  293. try {
  294. //给上级发放大转盘抽奖次数
  295. (new PondUserNum())->sendNum($order['user_id']);
  296. } catch (\Exception $e) {
  297. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'pondSendNum.log');
  298. }
  299. try {
  300. // 处理供应链平台商户号收款店铺结算
  301. $store_info = Store::findOne($order->store_id);
  302. if ($order->is_use_platform_mch == 1) {
  303. $profit = bcmul($order->pay_price, ($store_info->transfer_profit / 100), 3);
  304. $price = bcsub($order->pay_price, $profit, 3);
  305. //判断是否转单,
  306. $order_transit = OrderTransit::find()->where(['order_id' => $order->id, 'is_delete' => 0, 'is_use_platform_mch' => 1])
  307. ->select('order_price')->sum('order_price') ?: 0;
  308. if ($order_transit > 0) {
  309. $price = bcsub($price, $order_transit, 3);
  310. }
  311. Store::addMoney($store_info, $price, '用户下单', $order->id, $order->user_id);
  312. }
  313. } catch (\Exception $e) {
  314. // Todo
  315. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'store_order_transit.log');
  316. }
  317. try {
  318. //服务人员分佣
  319. $workerProfitSend = \app\modules\admin\models\worker\WorkerForm::workerProfitSend($order['id']);
  320. debug_log(['服务人员分佣', $order['id'], $workerProfitSend], 'worker_order_sales.log');
  321. } catch (\Exception $e) {
  322. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'worker_order_sales.log');
  323. }
  324. try {
  325. //入驻商分佣
  326. $mchAccountMoney = \app\modules\admin\models\MchForm::accountMoneyAdd($order);
  327. debug_log(['入驻商分佣', $order['id'], $mchAccountMoney], 'mch_account_add.log');
  328. } catch (\Exception $e) {
  329. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'mch_account_add.log');
  330. }
  331. try {
  332. //达人
  333. $PublicRanking = \app\modules\admin\models\publicRanking\PublicRankingForm::afterOrderSave($order);
  334. debug_log(['达人', $order['id'], $PublicRanking], 'PublicRankingForm.log');
  335. } catch (\Exception $e) {
  336. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'PublicRankingForm.log');
  337. }
  338. try {
  339. $orderUtil->workerLevel($order);
  340. } catch (\Exception $e) {
  341. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'workerLevel.log');
  342. }
  343. try {
  344. $orderUtil->level($order);
  345. } catch (\Exception $e) {
  346. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'userLevel.log');
  347. }
  348. try {
  349. $result = ShareGroupMoney::sendMoney($order);
  350. if ($result['code']) {
  351. debug_log(['result' => $result, 'order_id' => $order['id']], 'share_group_money.log');
  352. }
  353. } catch (\Exception $e) {
  354. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'share_group_money.log');
  355. }
  356. // 在这里执行发放核销卡逻辑
  357. try {
  358. $store_card_time = Option::get(OptionSetting::STORE_CARD_TIME, $order['store_id'], 'gift', 0)['value'];
  359. if ($store_card_time == 2 || !$store_card_time){
  360. $this->sendVerifyCard($order['id'],$order['user_id'],$order['order_type']);
  361. }
  362. }catch (\Exception $e){
  363. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'sendVerifyCardErr.log');
  364. }
  365. // 在这里执行发放优惠券逻辑
  366. try {
  367. $store_coupon_time = Option::get(OptionSetting::STORE_COUPON_TIME, $order['store_id'], 'gift', 0)['value'];
  368. if ($store_coupon_time == 2 || !$store_coupon_time){
  369. $this->sendCouponCard($order['id'],$order['user_id']);
  370. }
  371. }catch (\Exception $e){
  372. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'sendCouponErr.log');
  373. }
  374. // 下单自动发放优惠券修改到这里
  375. AutoSendCoupon::send($order['user_id'], CouponAutoSend::EVENT_ORDER, $this->store_id);
  376. try {
  377. $result = IntegralAppreciationPoolSub::setPool($order['id'], $order['store_id']);
  378. } catch (\Exception $e) {
  379. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'integralAppreciation.log');
  380. }
  381. try {
  382. $result = StoreDividendsCycle::setDividendsCycle($order);
  383. debug_log(['result' => $result], 'storeDividendsCycle.log');
  384. } catch (\Exception $e) {
  385. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'storeDividendsCycle.log');
  386. }
  387. } else {
  388. \app\plugins\scanCodePay\models\Order::updateAll(['is_sale' => 1, 'updated_at' => time()], ['id' => $order['id']]);
  389. try {
  390. //入驻商分佣
  391. $mchAccountMoney = \app\modules\admin\models\MchForm::accountMoneyAdd($order);
  392. debug_log(['入驻商分佣', $order['id'], $mchAccountMoney], 'mch_account_add.log');
  393. } catch (\Exception $e) {
  394. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'mch_account_add.log');
  395. }
  396. try {
  397. $result = StoreDividendsCycle::setDividendsCycle($order);
  398. debug_log(['result' => $result], 'storeDividendsCycle.log');
  399. } catch (\Exception $e) {
  400. debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'storeDividendsCycle.log');
  401. }
  402. }
  403. }
  404. private function sendVerifyCard($order_id, $user_id, $order_type) {
  405. try {
  406. if ($order_type != 4) {
  407. $goods_id = OrderDetail::find()->select('goods_id, num')->where(['order_id' => $order_id, 'is_delete' => 0])->asArray()->all();
  408. foreach ($goods_id as $k => $v) {
  409. $verify_card_info = Goods::find()->select('id, verify_card_id, send_verify_card_num, product_type')
  410. ->where(['id' => $v['goods_id'], 'is_delete' => 0])->asArray()->one();
  411. if (empty($verify_card_info)) {
  412. continue;
  413. }
  414. $num = intval($verify_card_info['send_verify_card_num'] ?? 0) * intval($v['num']);
  415. if (in_array($verify_card_info['product_type'], [4])) {
  416. $num = 1;
  417. }
  418. $this->startSendVerifyCard($verify_card_info['verify_card_id'], $verify_card_info['id'], $user_id, $order_type, $order_id, $num);
  419. }
  420. }
  421. } catch (\Exception $e) {
  422. debug_log(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], 'order_complete.log');
  423. }
  424. }
  425. private function startSendVerifyCard($verify_card_id, $goods_id, $user_id, $order_type, $order_id, $num){
  426. if (!empty($verify_card_id)){
  427. $order = Order::findOne($order_id);
  428. $used_verify_card_id = '';
  429. if($order->verify_card_id){
  430. $used_verify_sale_id = $order->verify_card_id;
  431. $verify_sale = VerifyCardSale::findOne($used_verify_sale_id);
  432. $used_verify_card_id = $verify_sale['verify_card_id'];
  433. }
  434. $verify_card_id_arr = explode(',', $verify_card_id);
  435. $res = Tools::getVerifyList($verify_card_id_arr);
  436. \Yii::error($res);
  437. $ids = '';
  438. foreach($res as $value){
  439. if($value['id'] == $used_verify_card_id){
  440. \Yii::error('================== 卡券发放结果:订单消费的卡券不再赠送,卡券id为:' . $value['id']);
  441. continue;
  442. }
  443. for ($i = 0; $i < $num; $i++) {
  444. $verify_form = new VerifyCardSale();
  445. $verify_form->store_id = $order->store_id;
  446. $verify_form->user_id = $user_id;
  447. $verify_form->verify_card_id = $value['id'];
  448. //查询核销卡使用总次数
  449. $left_info = VerifyCard::find()->select('total_num, expire_day')->where([
  450. 'id' => $value['id'],
  451. 'is_delete' => 0
  452. ])->asArray()->one();
  453. if ($value['type'] == 1) {
  454. $verify_form->left_num = $left_info['total_num'];
  455. } else {
  456. $verify_form->left_num = 1;
  457. }
  458. $account = VerifyCardAccount::find()->where(['store_id' => $value['store_id'], 'card_id' => $value['id'], 'status' => 0])->limit(1)->one();
  459. if (!$account) {
  460. \Yii::error('================== 卡券发放结果:未找到数据,卡券id为:' . $value['id']);
  461. continue;
  462. }
  463. $verify_form->account_id = $account->id;
  464. $verify_form->sale_time = time();
  465. if ($value['date_type'] == 1) {
  466. $verify_form->end_time = time() + $left_info['expire_day'] * (3600*24);
  467. } else {
  468. $verify_form->end_time = $value['end_time'];
  469. }
  470. $verify_form->goods_id = $goods_id;
  471. $verify_form->order_type = $order_type;
  472. if ($verify_form->save()) {
  473. $ids .= $verify_form->id . ',';
  474. if ($value['type'] == 1) {
  475. //核销卡核销数量增加
  476. $verify_card_form = VerifyCard::findOne([
  477. 'id' => $value['id'],
  478. 'is_delete' => 0
  479. ]);
  480. $verify_card_form->use_num += 1;
  481. if (!$verify_card_form->save()) {
  482. continue;
  483. }
  484. } else {
  485. $card = VerifyCard::findOne(['id' => $value['id'], 'is_delete' => 0]);
  486. $account = VerifyCardAccount::findOne($verify_form->account_id);
  487. $card->send_times += 1;
  488. $card->save();
  489. }
  490. $account->status = 1;
  491. if (!$account->save()) {
  492. continue;
  493. }
  494. } else {
  495. \Yii::warning($verify_form->errors);
  496. }
  497. }
  498. }
  499. $order->get_verify_id = $ids;
  500. $order->save();
  501. }
  502. }
  503. private function sendCouponCard($order_id, $user_id) {
  504. $goods_id = OrderDetail::find()->select('goods_id, num')->where(['order_id' => $order_id,'is_delete' => 0])->asArray()->all();
  505. $coupon_arr = [];
  506. foreach ($goods_id as $k => $v) {
  507. $coupon_card_info = Goods::find()->select('id, coupon_card_id, send_coupon_card_num')->where(['id' => $v['goods_id'], 'is_delete' => 0])->asArray()->one();
  508. if (empty($coupon_card_info)) {
  509. continue;
  510. }
  511. $coupon_card_id = $coupon_card_info['coupon_card_id'];
  512. $coupon_card_id_arr = explode(',', $coupon_card_id);
  513. $send_coupon_card_num = intval($coupon_card_info['send_coupon_card_num']);
  514. $coupon_list = Coupon::find()->where(['id' => $coupon_card_id_arr, 'is_delete' => 0])->select('total_count, id')->asArray()->all();
  515. foreach ($coupon_list as $item) {
  516. for ($i = 0; $i < $send_coupon_card_num; $i++) {
  517. $coupon_send_count = UserCoupon::find()->where([
  518. 'coupon_id' => $item['id'],
  519. 'type' => [
  520. UserCoupon::TYPE_STORE,
  521. UserCoupon::TYPE_AUTO,
  522. UserCoupon::TYPE_GET
  523. ]
  524. ])->select('id')->count();
  525. if (intval($item['total_count']) === -1 || $item['total_count'] > $coupon_send_count) {
  526. debug_log([
  527. 'user_id' => $user_id,
  528. 'id' => $item['id']
  529. ] ,'coupon.log');
  530. $use_coupon = coupon::userAddCoupon($user_id, $item['id']);
  531. if ($use_coupon) {
  532. array_push($coupon_arr, intval($use_coupon));
  533. }
  534. }
  535. }
  536. }
  537. }
  538. $order = Order::findOne($order_id);
  539. $order->get_coupon_id = implode(',', $coupon_arr);
  540. $order->save();
  541. }
  542. }