| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\modules\client\models;
- use app\constants\OptionSetting;
- use app\jobs\CreatedOrderTranJob;
- use app\models\BuyGoodsLog;
- use app\models\common\events\OrderEvent;
- use app\models\AccountLog;
- use app\models\CardSend;
- use app\models\common\Bind;
- use app\models\Coupon;
- use app\models\CouponPaySend;
- use app\models\Goods;
- use app\models\LevelOrder;
- use app\models\MdGroupActivities;
- use app\models\Option;
- use app\models\Order;
- use app\models\OrderDetail;
- use app\models\OrderMessage;
- use app\models\SaasUser;
- use app\models\Share;
- use app\models\ShareDetail;
- use app\models\ShareGroupPurchaseParentLog;
- use app\models\ShareHolder;
- use app\models\Shop;
- use app\models\ShopShare;
- use app\models\Store;
- use app\models\SuperSales;
- use app\models\User;
- use app\models\UserCoupon;
- use app\models\VerifyCard;
- use app\models\VerifyCardAccount;
- use app\models\VerifyCardSale;
- use app\modules\alliance\models\NewMerchantForm;
- use app\modules\client\models\v1\BindForm;
- use app\modules\client\models\v1\ShareMoneyForm;
- use app\plugins\adopt\models\AdoptCostOrder;
- use app\utils\BookOrderNum;
- use app\utils\Delivery\WechatNewDelivery;
- use app\utils\Notice\NoticeSend;
- use app\utils\OrderNo;
- use app\utils\PrintOrder;
- use app\utils\Share\BonusPool;
- use app\utils\Tools;
- use yii\base\Model;
- use yii\helpers\ArrayHelper;
- use yii\helpers\Json;
- use app\modules\admin\models\pospal\PospalForm;
- use app\modules\admin\models\mochat\MochatForm;
- use app\models\DeliveryInfo;
- use app\utils\Delivery\Delivery;
- use app\utils\Delivery\Alipay\ADelivery;
- use app\modules\admin\models\maiyatian\MaiyatianForm;
- use app\modules\admin\models\keloop\KeloopForm;
- use app\models\FreeQueue;
- use app\models\FreeQueueGoods;
- use app\models\QueueLog;
- use app\models\Mch;
- use app\models\VerifyCardLog;
- class OrderComplete extends Model
- {
- public $order;
- public $store_id = 1;
- public $order_id;
- public $order_type;
- public $form_id;
- public $order_refund_no;
- public $notify_res = [];
- public $is_auto_repeat = 0;
- const EVENT_ORDER_FOLLOW = 'order_follow_up';
- const EVENT_ORDER_REFUND = 'order_refund';
- // 支付完成之后,相关的操作
- public function notify(OrderEvent $event = null)
- {
- $this->store_id = $event ? $event->store_id : $this->store_id;
- $this->order_id = $event ? $event->order_id : $this->order_id;
- $this->order_type = $event ? $event->order_type : $this->order_type;
- try {
- if ($this->order_type == 6) {
- $this->scanOrderNotify($event);
- }else {
- $this->OrderNotify($event);
- }
- $is_print = 1;
- /**
- * @var Order $order
- */
- $order = $this->order;
- // try {
- // $form = new NewMerchantForm();
- // $type = 1;
- // if ($this->order_type == 6) {
- // $type = 0;
- // }
- // $form->store_id = $order->store_id;
- // $result = $form->saasGiveIntegral($order->pay_price, $order->user_id, $order->order_no, $type);
- // debug_log($result, 'orderComplete.log');
- // } catch (\Exception $e) {
- // debug_log($e->getMessage(), 'orderComplete.log');
- // }
- //处理超级卖货系统
- try {
- $result = SuperSales::getNotFinishSales($order->user_id, $order->id, $order->store_id);
- debug_log(['order_no' => $order->order_no, 'result' => $result], 'superSales.log');
- } catch (\Throwable $e) {
- debug_log($e->getMessage(), 'superSales.log');
- }
-
- \app\modules\admin\models\TeamBonusForm::afterOrderComplete($order);
- //处理免单队列
- $this->freeQueueOrder($order);
- //adapay处理
- $this->adapay();
- // $this->shareShop($order, $event);
- // 积分抵扣的话减去积分
- $this->reduceIntegral($order);
- // 余额抵扣的话减去余额
- $this->reduceBalance($order);
- // 分红处理
- BonusPool::levelShare($order->id);
- //购买指定商城成为股东
-
- BonusPool::userAuto2ShareHolder($order, 1);
- BonusPool::userSelfBuyGoods2ShareHolder($order, 1);
- // BonusPool::userAuto2ShareHolder($order->id);
- // \queue_push(new \app\jobs\UserBuyGoodsUpdateShareHolderJob(['order_id' => $order->id]));
- // 股东分红处理(区域分红)
- $this->agent_profit($order);
- //是否存在用户升级
- $this->LevelOrder($order);
- //普通商品支付完成后需要上门安装逻辑
- // $this->isNeedInstall($order->id);
- // 发放核销卡 这里不在发放核销卡和优惠券 调整至售后期之后发放
- // //发放优惠券
- // $this->sendCouponCard($order->id, $order->user_id);
- //系统设置支付后发放积分
- $store_integral_time = Option::get(OptionSetting::STORE_INTEGRAL_TIME, $order['store_id'], 'gift', 0)['value'];
- if ($store_integral_time == 1){
- $this->give_integral($order);
- }
- //系统设置支付后发放优惠券
- $store_coupon_time = Option::get(OptionSetting::STORE_COUPON_TIME, $order['store_id'], 'gift', 0)['value'];
- if ($store_coupon_time ==1){
- $this->sendCouponCard($order->id, $order->user_id);
- }
- //系统设置支付后发放核销卡
- $store_card_time = Option::get(OptionSetting::STORE_CARD_TIME, $order['store_id'], 'gift', 0)['value'];
- if ($store_card_time == 1){
- $this->sendVerifyCard($order->id, $order->user_id, $order->order_type,1);
- } else {
- if ($order->order_type == 4) {//虚拟产品直接发放
- $this->sendVerifyCard($order->id, $order->user_id, $order->order_type);
- }
- }
- // 后台订单提醒
- OrderMessage::set($order->id, $order->store_id, $this->order_type, 0);
- // 余额支付订单储值卡消费记录
- if($order->order_type == 0 && ($order->pay_type == 3 || ($order->is_combine_pay == Order::IS_COMBINE_PAY && $order->combine_money > 0) || $order->balance > 0)) {
- $this->verifyCardPayLog($order);
- }
- // 代理订单返佣逻辑
- // $this->agencyPrice($order->id);
- // 处理虚拟商品订单状态
- if (($order->order_type == 4 && $order->verify_card_id == 0)) {
- $order->confirm_time = time();
- $order->send_time = time();
- $order->trade_status = Order::ORDER_FLOW_CONFIRM;
- if (!$order->save()) {
- \Yii::warning($order->errors);
- }
- }
- // 生成点餐号码
- if ($order->order_type == 3 && $order->is_offline == 1) {
- $order->send_time = time();
- $order->trade_status = Order::ORDER_FLOW_SEND;
- }
- $order->food_code = self::getFoodCode($order->store_id, $order->md_id);
- if (!$order->save()) {
- \Yii::warning(['<============= 订单号:' . $order->order_no .'生成点餐号码', $order->errors]);
- }
-
- // //云仓转单
- // $is_auth_trans = Store::findOne($order->store_id)->is_auth_trans;
- // // 开启自动转单
- // if ($is_auth_trans) {
- // queue_push(new CreatedOrderTranJob(['order_id' => $order->id]));
- $this->MerSetPurchaseOrder($order->id);
- // }
- // 同城配送订单下单
- $orderNoHead = substr($order->order_no, 0, 2);
- if (in_array($orderNoHead, ['ML', OrderNo::ORDER_PT]) && $order->is_delivery == 1) {
- $local_type = Option::get(OptionSetting::STORE_LOCAL_TYPE, $order->store_id, 'store')['value'];
- $local_type = Option::get(OptionSetting::STORE_LOCAL_TYPE, $order->store_id, 'pay', $local_type)['value'];
- if($local_type == 'keloop' && !isset($delivery_res) && KeloopForm::isSaasOpen()){
- $delivery_res = KeloopForm::order_created($order->store_id, $order->id);
- \Yii::error('-----------keloop同城配送返回' . Json::encode($delivery_res));
- }
- if($local_type == 'maiyatian' && !isset($delivery_res) && MaiyatianForm::isopen($order->store_id)){
- $delivery_res = MaiyatianForm::order_created($order->store_id, $order->id);
- \Yii::error('-----------Maiyatian同城配送返回' . Json::encode($delivery_res));
- }
- if($local_type == 'aggregate'){
- if(!isset($delivery_res) && $order->alipay_trade_no){
- $delivery_info = DeliveryInfo::findOne(['store_id' => $order->store_id, 'order_no' => $order->order_no]);
- $detail_goods = OrderDetail::find()->where(['order_id' => $order->id])->select('goods_name as name, pic, num, total_price as price')->asArray()->all();
- $delivery_res = ADelivery::createOrder(0, $order->store_id, $delivery_info->mini_id,
- $order->user->alipay_open_id, $detail_goods, $order->order_no, $delivery_info->address_id);
- \Yii::error('-----------同城配送返回' . Json::encode($delivery_res));
- }elseif(!isset($delivery_res)){
- $detail_goods = OrderDetail::find()->alias('od')->where(['order_id' => $order->id])
- ->leftJoin(['g' => Goods::tableName()], 'od.goods_id = g.id')
- ->select('od.goods_name as name, od.pic, od.num, od.total_price as price, g.weight')->asArray()->all();
- $deliveryInfo = DeliveryInfo::findOne(['order_no' => $order->order_no]);
- if ($deliveryInfo && intval($deliveryInfo->wechat_delivery_type) === 1) {
- $goods_list = [];
- foreach ($detail_goods as $goods_index => $goods_item) {
- $goods_list[$goods_index]['weight'] = $goods_item['weight'];
- $goods_list[$goods_index]['price'] = sprintf('%.2f', ($goods_item['price'] / $goods_item['num']));
- $goods_list[$goods_index]['name'] = $goods_item['name'];
- $goods_list[$goods_index]['pic'] = $goods_item['pic'];
- $goods_list[$goods_index]['num'] = $goods_item['num'];
- }
- $user = User::findOne($order->user_id);
- $address = json_decode($order->address_data, true);
- $form = new WechatNewDelivery();
- $result = $form->addOrder([
- 'address' => array_merge($address, [
- 'name' => $order->name,
- 'mobile' => $order->mobile,
- ]),
- 'goods_list' => $goods_list,
- 'store_id' => $this->order->store_id,
- 'md_id' => $order->md_id ?: 0,
- 'order_no' => $order->order_no,
- 'store_user' => ArrayHelper::toArray($user),
- 'order_seq' => $deliveryInfo->serial_num,
- 'order_detail_path' => '/order/order-detail/order-detail?id=' . $order->id,
- ]);
- debug_log($result, 'delivery_.log');
- } else {
- $delivery_res = Delivery::addOrder($detail_goods, $order->order_no);
- \Yii::error('-----------同城配送返回' . Json::encode($delivery_res));
- }
- }
- }
- if($local_type == 'self'){
-
- }
- }
- (new PospalForm(['store_id' => $order->store_id]))->orderNotify($order);
- // 订单打印
- if ((int)$order->md_id === -1 || (int)$order->md_id === 0 || !isset($order->md_id)) {
- $order->md_id = 0;
- }
- $printer_order = new PrintOrder($order->store_id, $order->id, 'pay', 0, $order->md_id, 0, $order->mch_id);
- $printer_order->print_order();
- ShareGroupPurchaseParentLog::addOrder($order->user_id, $order->id, $this->is_auto_repeat);
- //拆单(区分供应商商品和非供应商商品)
- $this->checkOrder($order->id);
- // 如果是团购活动订单 检测本活动是否满足条件
- if ($order->md_group_activities_id > 0) {
- $this->handleGroupActivities($order);
- }
- // 下单记录
- foreach($order->goods as $goods){
- BuyGoodsLog::set($goods['id'], $order->user->nickname, $order->user->avatar_url);
- }
- } catch (\Exception $e) {
- \Yii::error('line->>>' . $e->getLine());
- \Yii::error($e->getMessage());
- \Yii::error('订单支付完成后操作异常');
- }
- }
- private function handleGroupActivities($order)
- {
- $mdGroupActivitiesModel = MdGroupActivities::find()->where(['id'=>$order->md_group_activities_id,'store_id'=>$order->store_id,'is_delete'=>0])->one();
- if (!$mdGroupActivitiesModel) {
- return true;
- }
- if($mdGroupActivitiesModel->rules == 0){
- $order->md_group_activities_status = 1;
- $order->save();
- return true;
- }
- $orderIds = [];
- // 满人 也就是满多少订单
- if($mdGroupActivitiesModel->type == 1){
- // 已支付 团购后动为完成的订单
- $orderListQuery = Order::find()->where(['store_id'=>$order->store_id,'md_group_activities_id'=>$order->md_group_activities_id,'md_group_activities_status'=>0])->andWhere(['!=','trade_status',1])->andWhere(['is_pay' => 1]);
- if($orderListQuery->count() >= $mdGroupActivitiesModel->rules){
- $orderIds = $orderListQuery->select('id')->column();
- }
- }
- // 满商品的件数量
- if($mdGroupActivitiesModel->type == 2){
- $orderDetailQuery = OrderDetail::find()->alias('od')->leftJoin(['o'=>Order::tableName()],'od.order_id=o.id')->where(['o.store_id'=>$order->store_id,'o.md_group_activities_id'=>$order->md_group_activities_id,'o.md_group_activities_status'=>0])->andWhere(['!=','o.trade_status',1])->andWhere(['o.is_pay' => 1]);
- if($orderDetailQuery->sum('od.num') >= $mdGroupActivitiesModel->rules){
- $orderIds = $orderDetailQuery->select('o.id')->column();
- // 去重复
- $orderIds = array_unique($orderIds);
- }
- }
- if(count($orderIds) > 0){
- Order::updateAll(['md_group_activities_status' => 1],['id' => $orderIds]);
- }
- return true;
- }
-
- //adapay处理
- public function adapay() {
- try{
- if(isset($this->notify_res['user_huifu_id']) && $this->order->user_id){
- $user = User::findOne($this->order->user_id);
- $user->adapay_user_huifu_id = $this->notify_res['user_huifu_id'];
- $user->save();
- }
- } catch (\Exception $ex) {
- \Yii::error($ex);
- debug_log([__METHOD__, __LINE__, $ex->getMessage()], __CLASS__ . '.log');
- }
- }
- //拆单(区分供应商商品(仓库配送和其他云仓商品)和非供应商商品)
- public function checkOrder($order_id) {
- //获取订单
- $order = Order::findOne($order_id);
- if (!$order) {
- return false;
- }
- //获取下单商品
- $orderDetail = OrderDetail::find()->where(['order_id' => $order->id, 'is_delete' => 0])->asArray()->all();
- if (!$orderDetail) {
- return false;
- }
- //根据云仓商品组成新的订单详情数组
- $new_order_detail_arr = [];
- foreach ($orderDetail as $order_detail_item) {
- $is_cloud_goods = 0;
- $goods = Goods::findOne($order_detail_item['goods_id']);
- if (!$goods) {
- continue;
- }
- if ($goods->cloud_goods_id > 0 && !intval($goods->is_wholesale)) {
- $is_cloud_goods = 1;
- //仓库自配
- if (intval($goods->is_front_delivery)) {
- $is_cloud_goods = 2;
- }
- }
- $new_order_detail_arr[$is_cloud_goods][] = $order_detail_item;
- }
- if (count($new_order_detail_arr) > 1) {
- //只计算订单表pay_price价格 先不计算total_price价格 因为包含会员价 复原容易出问题
- foreach ($new_order_detail_arr as $new_order_detail_index => $new_order_detail_item) {
- $goods_total_price = array_sum(array_column($new_order_detail_item, 'total_price'));
- if ($new_order_detail_index) {
- $old_order = ArrayHelper::toArray($order);
- unset($old_order['id']);
- $new_order = new Order();
- $new_order->attributes = $old_order;
- $new_order->order_no = OrderNo::getOrderNo(OrderNo::ORDER_MALL);
- $new_order->total_price = $new_order->pay_price = $goods_total_price;
- $new_order->transaction_id = $old_order['transaction_id'];
- $new_order->alipay_trade_no = $old_order['alipay_trade_no'];
- $new_order->first_price = 0;
- $new_order->second_price = 0;
- $new_order->third_price = 0;
- $new_order->holder_first_price = 0;
- $new_order->holder_second_price = 0;
- $new_order->holder_third_price = 0;
- $new_order->old_holder_first_price = 0;
- $new_order->old_holder_second_price = 0;
- $new_order->old_holder_third_price = 0;
- $new_order->share_order_profit = 0;
- $new_order->limit_price = 0;
- $new_order->coupon_sub_price = 0;
- $new_order->user_coupon_id = 0;
- $new_order->user_coupon_ids = '';
- $new_order->integral = 0;
- $new_order->give_integral = 0;
- $new_order->get_verify_id = 0;
- $new_order->buy_level_id = 0;
- $new_order->level_order_id = 0;
- $new_order->level_diff_price = 0;
- $new_order->get_coupon_id = 0;
- $new_order->save();
- foreach ($new_order_detail_item as $new_order_detail) {
- $new_order_detail_model = OrderDetail::findOne($new_order_detail['id']);
- $new_order_detail_model->attributes = $new_order_detail;
- $new_order_detail_model->order_id = $new_order->id;
- $new_order_detail_model->save();
- array_push($order_detail_id_arr, $new_order_detail['id']);
- }
- array_push($order_id_arr, $new_order->id);
- } else {
- $order->total_price = $order->pay_price = bcadd($goods_total_price, $order->express_price, 2);;
- $order->save();
- // foreach ($new_order_detail_item as $new_order_detail) {
- // array_push($order_detail_id_arr, $new_order_detail['id']);
- // }
- }
- }
- }
- }
- //认养订单支付完成之后,相关的操作
- public function adoptOrderCostNotify(OrderEvent $event = null) {
- $order = $this->order = AdoptCostOrder::findOne(['id' => $this->order_id]);
- $user = User::findOne($order->user_id);
- $goods = Goods::findOne(OrderDetail::findOne(['order_id' => $order->order_id])->goods_id);
- NoticeSend::OrderPay($order->user_id, $order->mobile, $order->order_no, $order->pay_price, $goods->name,2);
- NoticeSend::PlaceOrder($order->order_no, $order->md_id, $order->store_id, $order);
- }
- //购买会员卡订单
- public function LevelOrder($order) {
- if ($order->level_order_id) {
- $levelOrder = LevelOrder::findOne($order->level_order_id);
- if (!$levelOrder) {
- return;
- }
- if ($levelOrder->is_pay == 1) {
- return;
- }
- $levelOrder->is_pay = 1;
- $levelOrder->pay_time = time();
- $levelOrder->pay_type = 3;
- if ($levelOrder->save()) {
- //会员升级
- $user = User::findOne($levelOrder->user_id);
- $user->level = $levelOrder->after_level;
- $user->save();
- try {
- if ($levelOrder->is_use_platform_mch == 1) {
- $store = Store::findOne($levelOrder->store_id);
- $profit = $levelOrder->pay_price * $store->transfer_profit / 100;
- $price = $levelOrder->pay_price - $profit;
- Store::addMoney($store, $price, '用户购买会员等级', $levelOrder->id, $levelOrder->user_id);
- }
- } catch (\Exception $e) {
- // Todo
- }
- }
- }
- }
- //自动转单
- public function MerSetPurchaseOrder($order_id) {
- try {
- $order = Order::findOne($order_id);
- $order_detail = OrderDetail::find()->where(['order_id' => $order_id])->select('goods_id')->asArray()->all();
- if (!empty($order) && !empty($order_detail)) {
- $form = new \app\modules\admin\models\MerchantForm();
- $form->store_id = $order->store_id;
- $form->address = $order->address;
- $form->province_id = $order->province_id;
- $form->city_id = $order->city_id;
- $form->district_id = $order->district_id;
- $form->order_id = $order_id;
- $form->tel = $order->mobile;
- $form->name = $order->name;
- debug_log('自动转单000----'. 3);
- $result = $form->mchSetPurchaseOrder();
- debug_log('自动转单000----'. json_encode($result));
- }
- } catch (\Exception $e) {
- debug_log('自动转单----'. json_encode($e->getFile() . $e->getMessage() . $e->getLine()));
- }
- }
- // private function agencyPrice($order_id){
- // try {
- // $order = Order::findOne($order_id);
- // $option = Option::get('agency_price_config', 0, 'saas', [])['value'];
- // debug_log('agency_price_config' . $option);
- // if ($option) {
- // $option = json_decode($option, true);
- // }
- // $province_percent = $option['province_percent'] ?? 0;
- // $city_percent = $option['city_percent'] ?? 0;
- // $district_percent = $option['district_percent'] ?? 0;
- // //获取代理商ID
- // $store = Store::findOne($order->store_id);
- // $admin_list = Admin::find()->where(['province_id' => $store->province_id, 'is_delete' => 0])->andWhere(['>', 'area_level', 0])->asArray()->all();
- // $user = User::findOne($order->user_id);
- // $saasUser = SaasUser::findOne(['mobile' => $user->binding]);
- // $saas_user_name = '-';
- // if ($saasUser) {
- // $saas_user_name = $saasUser->name;
- // }
- // foreach ($admin_list as $item) {
- // $ag_rebate = 0;
- // $rate = 0;
- // $desc = '';
- // //省
- // if ((int)$item['area_level'] === 3) {
- // $ag_rebate = $order->ag_rebate * ($province_percent / 100);
- // $ag_rebate = sprintf("%.2f", $ag_rebate);
- // $rate = $province_percent;
- // $desc = '用户' . $saas_user_name . '下单,订单' . $order->order_no . ',发放 ' . $ag_rebate . '元省代佣金';
- // }
- // //市
- // if ((int)$item['area_level'] === 2 && (int)$item['city_id'] === (int)$store->city_id) {
- // $ag_rebate = $order->ag_rebate * ($city_percent / 100);
- // $ag_rebate = sprintf("%.2f", $ag_rebate);
- // $rate = $city_percent;
- // $desc = '用户' . $saas_user_name . '下单,订单' . $order->order_no . ',发放 ' . $ag_rebate . '元市代佣金';
- // }
- // //区
- // if ((int)$item['area_level'] === 1 && (int)$item['city_id'] === (int)$store->city_id && (int)$item['district_id'] === (int)$store->district_id) {
- // $ag_rebate = $order->ag_rebate * ($district_percent / 100);
- // $ag_rebate = sprintf("%.2f", $ag_rebate);
- // $rate = $district_percent;
- // $desc = '用户' . $saas_user_name . '下单,订单' . $order->order_no . ',发放 ' . $ag_rebate . '元区代佣金';
- // }
- // if (!$ag_rebate) {
- // continue;
- // }
- // //给用户增加佣金
- // $SaasUser = SaasUser::findOne($item['saas_user_id']);
- // $SaasUser->share_profit = ($SaasUser->share_profit * 1) + ($ag_rebate * 1);
- // $res = $SaasUser->save();
- // //增加记录
- // if ($res) {
- // $form = new StoreShareMoney();
- // $form->user_id = $SaasUser->id;
- // $form->store_id = $store->id;
- // $form->profit = $rate;
- // $form->total_price = $order->total_price;
- // $form->desc = $desc;
- // $form->order_id = $order_id;
- // $form->created_at = time();
- // $form->type = 1;
- // $form->status = 0;
- // $form->commission = $ag_rebate;
- // $form->is_send = 1;
- // $res = $form->save();
- // if (!$res) {
- // debug_log($form->errors);
- // }
- // }
- // }
- // } catch (\Exception $e) {
- // \Yii::error($e->getMessage());
- // }
- // }
- /**
- * @param $order Order
- */
- private function agent_profit($order) {
- // 判断是否开启奖金池
- // $setting = [
- // 'is_open_area' => Option::get('is_open_area', $order->store_id, 'bonus_pool', 0)['value'],
- // ];
- // if (!$setting['is_open_area']) {
- // \Yii::warning('---------------- 未开启代理分红 -------------------');
- // return;
- // }
- $is_multi_agent = Option::get('is_multi_agent', $order->store_id, 'bonus_pool_area_agent', 0)['value'];
- if($is_multi_agent){
- $multi_agent_type1 = Option::get('multi_agent_type1', $order->store_id, 'bonus_pool_area_agent', 0)['value'];
- $multi_agent_type2 = Option::get('multi_agent_type2', $order->store_id, 'bonus_pool_area_agent', 0)['value'];
- $multi_agent_type3 = Option::get('multi_agent_type3', $order->store_id, 'bonus_pool_area_agent', 0)['value'];
- $multi_agent_type4 = Option::get('multi_agent_type4', $order->store_id, 'bonus_pool_area_agent', 0)['value'];
- }
- $profit = $order->profit;
- $goods = OrderDetail::find()->alias('od')
- ->leftJoin(Goods::tableName() . ' g', "g.id=od.goods_id and g.is_delete=0")
- ->where(['od.order_id' => $order->id])
- ->select('g.dl_p_rate,g.dl_p_rate_type,g.dl_c_rate,g.dl_c_rate_type,g.dl_d_rate,g.dl_d_rate_type,g.dl_t_rate,g.dl_t_rate_type')
- ->asArray()->all();
- // 省代
- $province_share_holder_query = ShareHolder::find()->where(['is_delete' => 0, 'status' => 1, 'store_id' => $order->store_id, 'agent_type' => 1, 'province_id' => $order->province_id, 'agent_rate_status' => 1]);
- $province_share_holder = $province_share_holder_query->orderBy('agent_time ASC')->one();
- if (!$province_share_holder) {
- \Yii::error('-------------- 订单号:' . $order->order_no . ' 未发现省代理----------------');
- } else {
- $money = 0;
- $open = true;
- foreach ($goods as $v) {
- if ($v['dl_p_rate'] > 0) {
- $open = false;
- if ($v['dl_p_rate_type'] > 0) {
- $money += round($v['dl_p_rate'], 2);
- } else {
- $money += round($profit * $v['dl_p_rate'] / 100, 2);
- }
- }
- }
- if ($open) {
- if($is_multi_agent){
- $money += round($profit * $multi_agent_type1 / 100, 2);
- }else{
- $money += round($profit * $province_share_holder->agent_rate / 100, 2);
- }
- }
- $province_share_holder_list = [$province_share_holder];
- if($is_multi_agent){
- $province_share_holder_list = $province_share_holder_query->all();
- $count = count($province_share_holder_list);
- $money = round($money / $count, 2);
- }
- if ($money > 0) {
- foreach($province_share_holder_list as $province_share_holder){
- $detail = new ShareDetail();
- $detail->store_id = $order->store_id;
- $detail->type_id = $order->id;
- $detail->type = 3;
- $detail->user_id = $province_share_holder->user_id;
- $detail->desc = '订单号:'.$order->order_no.'代理分红';
- $detail->is_send = 0;
- $detail->money = $money;
- // $detail->money = round($order->profit * $province_share_holder->agent_rate / 100, 2);
- $detail->save();
- }
- }
- }
- // 市代
- $city_share_holder_query = ShareHolder::find()->where(['is_delete' => 0, 'status' => 1, 'store_id' => $order->store_id, 'agent_type' => 2, 'city_id' => $order->city_id, 'agent_rate_status' => 1]);
- $city_share_holder = $city_share_holder_query->orderBy('agent_time ASC')->one();
- if (!$city_share_holder) {
- \Yii::error('-------------- 订单号:' . $order->order_no . ' 未发现市代理----------------');
- } else {
- $money = 0;
- $open = true;
- foreach ($goods as $v) {
- if ($v['dl_c_rate'] > 0) {
- $open = false;
- if ($v['dl_c_rate_type'] > 0) {
- $money += round($v['dl_c_rate'], 2);
- } else {
- $money += round($profit * $v['dl_c_rate'] / 100, 2);
- }
- }
- }
- if ($open) {
- if($is_multi_agent){
- $money += round($profit * $multi_agent_type2 / 100, 2);
- }else{
- $money = round($profit * $city_share_holder->agent_rate / 100, 2);
- }
- }
- $city_share_holder_list = [$city_share_holder];
- if($is_multi_agent){
- $city_share_holder_list = $city_share_holder_query->all();
- $count = count($city_share_holder_list);
- $money = round($money / $count, 2);
- }
- if ($money > 0) {
- foreach($city_share_holder_list as $city_share_holder){
- $detail = new ShareDetail();
- $detail->store_id = $order->store_id;
- $detail->type_id = $order->id;
- $detail->type = 3;
- $detail->user_id = $city_share_holder->user_id;
- $detail->desc = '订单号:'.$order->order_no.'代理分红';
- $detail->is_send = 0;
- $detail->money = $money;
- // $detail->money = round($order->profit * $city_share_holder->agent_rate / 100, 2);
- $detail->save();
- }
- }
- }
- // 区代
- $district_share_holder_query = ShareHolder::find()->where(['is_delete' => 0, 'status' => 1, 'store_id' => $order->store_id, 'agent_type' => 3, 'district_id' => $order->district_id, 'agent_rate_status' => 1]);
- $district_share_holder = $district_share_holder_query->orderBy('agent_time ASC')->one();
- if (!$district_share_holder) {
- \Yii::error('-------------- 订单号:' . $order->order_no . ' 未发现区域代理----------------');
- } else {
- $money = 0;
- $open = true;
- foreach ($goods as $v) {
- if ($v['dl_d_rate'] > 0) {
- $open = false;
- if ($v['dl_d_rate_type'] > 0) {
- $money += round($v['dl_d_rate'], 2);
- } else {
- $money += round($profit * $v['dl_d_rate'] / 100, 2);
- }
- }
- }
- if ($open) {
- if($is_multi_agent){
- $money += round($profit * $multi_agent_type3 / 100, 2);
- }else{
- $money = round($profit * $district_share_holder->agent_rate / 100, 2);
- }
- }
- $district_share_holder_list = [$district_share_holder];
- if($is_multi_agent){
- $district_share_holder_list = $district_share_holder_query->all();
- $count = count($district_share_holder_list);
- $money = round($money / $count, 2);
- }
- if ($money > 0) {
- foreach($district_share_holder_list as $district_share_holder){
- $detail = new ShareDetail();
- $detail->store_id = $order->store_id;
- $detail->type_id = $order->id;
- $detail->type = 3;
- $detail->user_id = $district_share_holder->user_id;
- $detail->desc = '订单号:'.$order->order_no.'代理分红';
- $detail->is_send = 0;
- $detail->money = $money;
- // $detail->money = round($order->profit * $district_share_holder->agent_rate / 100, 2);
- $detail->save();
- }
- }
- }
- // 镇代
- $town_share_holder_query = ShareHolder::find()->where(['is_delete' => 0, 'status' => 1, 'store_id' => $order->store_id, 'agent_type' => 4, 'town_id' => $order->town_id, 'agent_rate_status' => 1]);
- $town_share_holder = $town_share_holder_query->orderBy('agent_time ASC')->one();
- if (!$town_share_holder) {
- \Yii::error('-------------- 订单号:' . $order->order_no . ' 未发现镇代理----------------');
- } else {
- $money = 0;
- $open = true;
- foreach ($goods as $v) {
- if ($v['dl_t_rate'] > 0) {
- $open = false;
- if ($v['dl_t_rate_type'] > 0) {
- $money += round($v['dl_t_rate'], 2);
- } else {
- $money += round($profit * $v['dl_t_rate'] / 100, 2);
- }
- }
- }
- if ($open) {
- if($is_multi_agent){
- $money += round($profit * $multi_agent_type4 / 100, 2);
- }else{
- $money = round($profit * $town_share_holder->agent_rate / 100, 2);
- }
- }
- $town_share_holder_list = [$town_share_holder];
- if($is_multi_agent){
- $town_share_holder_list = $town_share_holder_query->all();
- $count = count($town_share_holder_list);
- $money = round($money / $count, 2);
- }
- foreach($town_share_holder_list as $town_share_holder){
- $detail = new ShareDetail();
- $detail->store_id = $order->store_id;
- $detail->type_id = $order->id;
- $detail->type = 3;
- $detail->user_id = $town_share_holder->user_id;
- $detail->desc = '订单号:'.$order->order_no.'代理分红';
- $detail->is_send = 0;
- $detail->money = $money;
- // $detail->money = round($order->profit * $district_share_holder->agent_rate / 100, 2);
- $detail->save();
- }
- }
- }
- private function reduceIntegral($order) {
- $integral = Json::decode($order->integral_price);
- // 减去当前用户账户积分
- if ($integral > 0) {
- $user = User::findOne($order->user_id);
- $before = $user->integral;
- $user->integral -= $integral;
- if ($user->save()) {
- $log = new AccountLog();
- $log->store_id = $order->store_id;
- $log->user_id = $user->id;
- $log->type = AccountLog::TYPE_INTEGRAL;
- $log->log_type = AccountLog::LOG_TYPE_EXPEND;
- $log->amount = $integral;
- $log->desc = "订单积分抵扣支付,订单号为:{$order->order_no}。";
- $log->before = $before;
- $log->after = $user->integral;
- $log->operator = '';
- $log->operator_id = 0;
- $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL;
- $log->created_at = time();
- $log->order_id = $order->id;
- $log->order_type = AccountLog::TYPE_PLATFORM_ORDER;
- $log->save();
- }
- }
-
- }
- private function reduceBalance($order) {
- $balance = Json::decode($order->balance);
- // 减去当前用户账户余额
- if ($balance > 0) {
- $user = User::findOne($order->user_id);
- $before = $user->money;
- $user->money -= $balance;
- if ($user->save()) {
- $log = new AccountLog();
- $log->store_id = $order->store_id;
- $log->user_id = $user->id;
- $log->type = AccountLog::TYPE_GOODS_BALANCE;
- $log->log_type = AccountLog::LOG_TYPE_EXPEND;
- $log->amount = $balance;
- $log->desc = "订单余额抵扣支付,订单号为:{$order->order_no}。";
- $log->before = $before;
- $log->after = $user->money;
- $log->operator = '';
- $log->operator_id = 0;
- $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL;
- $log->created_at = time();
- $log->order_id = $order->id;
- $log->order_type = AccountLog::TYPE_PLATFORM_ORDER;
- $log->save();
- }
- }
-
- }
- /**
- * 发放优惠券
- */
- public function sendCouponCard($order_id, $user_id) {
- $goods_id = OrderDetail::find()->select('goods_id, num')->where(['order_id' => $order_id,'is_delete' => 0])->asArray()->all();
- $coupon_arr = [];
- foreach ($goods_id as $k => $v) {
- $coupon_card_info = Goods::find()->select('id, coupon_card_id, send_coupon_card_num')->where(['id' => $v['goods_id'], 'is_delete' => 0])->asArray()->one();
- if (empty($coupon_card_info)) {
- continue;
- }
- $coupon_card_id = $coupon_card_info['coupon_card_id'];
- $coupon_card_id_arr = explode(',', $coupon_card_id);
- $send_coupon_card_num = intval($coupon_card_info['send_coupon_card_num']);
- $coupon_list = Coupon::find()->where(['id' => $coupon_card_id_arr, 'is_delete' => 0])->select('total_count, id')->asArray()->all();
- foreach ($coupon_list as $item) {
- for ($i = 0; $i < $send_coupon_card_num; $i++) {
- $coupon_send_count = UserCoupon::find()->where([
- 'coupon_id' => $item['id'],
- 'type' => [
- UserCoupon::TYPE_STORE,
- UserCoupon::TYPE_AUTO,
- UserCoupon::TYPE_GET
- ]
- ])->select('id')->count();
- if (intval($item['total_count']) === -1 || $item['total_count'] > $coupon_send_count) {
- debug_log([
- 'user_id' => $user_id,
- 'id' => $item['id']
- ] ,'coupon.log');
- $use_coupon = coupon::userAddCoupon($user_id, $item['id']);
- if ($use_coupon) {
- array_push($coupon_arr, intval($use_coupon));
- }
- }
- }
- }
- }
- $order = Order::findOne($order_id);
- $order->get_coupon_id = implode(',', $coupon_arr);
- $order->save();
- }
- /**
- * 发放核销卡
- */
- private function sendVerifyCard($order_id, $user_id, $order_type, $card_time = 0) {
- try {
- if (($order_type != 4 && $card_time) || $order_type == 4){
- $goods_id = OrderDetail::find()->select('goods_id, num')->where(['order_id' => $order_id,'is_delete' => 0])->asArray()->all();
- foreach ($goods_id as $k => $v) {
- $verify_card_info = Goods::find()->select('id, verify_card_id, send_verify_card_num, product_type')
- ->where(['id' => $v['goods_id'], 'is_delete' => 0])->asArray()->one();
- if (empty($verify_card_info)) {
- continue;
- }
- $num = intval($verify_card_info['send_verify_card_num'] ?? 0) * intval($v['num']);
- if (in_array($verify_card_info['product_type'], [3, 4])) {
- $num = 1;
- }
- $this->startSendVerifyCard($verify_card_info['verify_card_id'], $verify_card_info['id'], $user_id, $order_type, $order_id, $num);
- }
- }
- } catch (\Exception $e) {
- debug_log(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], 'order_complete.log');
- }
- }
- /**
- * 核销卡发放
- */
- private function startSendVerifyCard($verify_card_id, $goods_id, $user_id, $order_type, $order_id, $num){
- if (!empty($verify_card_id)){
- $order = Order::findOne($order_id);
- $used_verify_card_id = '';
- if($order->verify_card_id){
- $used_verify_sale_id = $order->verify_card_id;
- $verify_sale = VerifyCardSale::findOne($used_verify_sale_id);
- $used_verify_card_id = $verify_sale['verify_card_id'];
- }
- $verify_card_id_arr = explode(',', $verify_card_id);
- $res = Tools::getVerifyList($verify_card_id_arr);
- \Yii::error($res);
- $ids = '';
- foreach($res as $value){
- if($value['id'] == $used_verify_card_id){
- \Yii::error('================== 卡券发放结果:订单消费的卡券不再赠送,卡券id为:' . $value['id']);
- continue;
- }
- for ($i = 0; $i < $num; $i++) {
- $verify_form = new VerifyCardSale();
- $verify_form->store_id = $order->store_id;
- $verify_form->user_id = $user_id;
- $verify_form->verify_card_id = $value['id'];
- //查询核销卡使用总次数
- $left_info = VerifyCard::find()->select('total_num, expire_day')->where([
- 'id' => $value['id'],
- 'is_delete' => 0
- ])->asArray()->one();
- if ($value['type'] == 1) {
- $verify_form->left_num = $left_info['total_num'];
- } else {
- $verify_form->left_num = 1;
- }
- $account = VerifyCardAccount::find()->where(['store_id' => $value['store_id'], 'card_id' => $value['id'], 'status' => 0])->limit(1)->one();
- if (!$account) {
- \Yii::error('================== 卡券发放结果:未找到数据,卡券id为:' . $value['id']);
- continue;
- }
- $verify_form->account_id = $account->id;
- $verify_form->sale_time = time();
- if ($value['date_type'] == 1) {
- $verify_form->end_time = time() + $left_info['expire_day'] * (3600*24);
- } else {
- $verify_form->end_time = $value['end_time'];
- }
- $verify_form->goods_id = $goods_id;
- $verify_form->order_type = $order_type;
- if ($verify_form->save()) {
- $ids .= $verify_form->id . ',';
- if ($value['type'] == 1) {
- //核销卡核销数量增加
- $verify_card_form = VerifyCard::findOne([
- 'id' => $value['id'],
- 'is_delete' => 0
- ]);
- $verify_card_form->use_num += 1;
- if (!$verify_card_form->save()) {
- continue;
- }
- } else {
- $card = VerifyCard::findOne(['id' => $value['id'], 'is_delete' => 0]);
- $account = VerifyCardAccount::findOne($verify_form->account_id);
- $card->send_times += 1;
- $card->save();
- }
- $account->status = 1;
- if (!$account->save()) {
- continue;
- }
- } else {
- \Yii::warning($verify_form->errors);
- }
- }
- }
- $order->get_verify_id = $ids;
- $order->save();
- }
- }
- /**
- * 积分发放
- */
- public function give_integral($id)
- {
- $order_id = $id;
- if(isset($order_id->id)){
- $give = $order_id;
- }else{
- $give = Order::findOne($order_id);
- }
- if ($give['give_integral'] != 0) {
- return;
- }
- $integral = OrderDetail::find()
- ->andWhere(['order_id' => $give['id'], 'is_delete' => 0])
- ->select([
- 'sum(integral)',
- ])->scalar();
- if (!$integral) {
- return;
- }
- $giveUser = User::findOne(['id' => $give['user_id']]);
- $before = $giveUser->integral;
- if ($giveUser) {
- $giveUser->integral += $integral;
- $giveUser->total_integral += $integral;
- $giveUser->save();
- }
- $give->give_integral = 1;
- $give->save();
- $log = new AccountLog();
- $log->store_id = $give->store_id;
- $log->user_id = $giveUser->id;
- $log->type = AccountLog::TYPE_INTEGRAL;
- $log->log_type = AccountLog::LOG_TYPE_INCOME;
- $log->amount = $integral;
- $log->desc = '订单'.$give->order_no.'赠送积分';
- $log->before = $before;
- $log->after = $giveUser->integral;
- $log->operator = '';
- $log->operator_id = 0;
- $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL;
- $log->created_at = time();
- $log->order_id = $give->id;
- $log->order_type = AccountLog::TYPE_PLATFORM_ORDER;
- $log->save();
- }
- // 自提点分销
- public function shareShop($order) {
- return false;
- if ($order->is_offline == 1) {
- $shop = Shop::findOne($order->shop_id);
- if ($shop) {
- $user = User::findOne($order->user_id);
- $info = addslashes("会员 ".$user->nickname." 下单,获得奖励");
- $orderDetail = OrderDetail::find()->select(['goods_id','total_price','num'])->where(['order_id' => $order->id])->all();
- $shop_bili = Option::get(OptionSetting::SHOP_RATIO, $order->store_id)['value'];
- $shop_bili_type = Option::get(OptionSetting::SHOP_RATIO_TYPE, $order->store_id)['value'];
- $money = 0;
- foreach ($orderDetail as $v){
- $goods_money = $v['total_price'];
- if($shop_bili_type == 2){
- $money += $v['num']*$shop_bili;
- }else{
- $money += $goods_money*$shop_bili * 0.01;
- }
- }
- if ($money > 0.01) {
- $share_form = new ShopShare();
- $share_form->store_id = $order->store_id;
- $share_form->order_id = $order->id;
- $share_form->shop_id = $shop->id;
- $share_form->amount = $money;
- $share_form->user_id = $order->user_id;
- $share_form->the_desc = $info;
- $share_form->created_at = time();
- $share_form->save();
- }
- }
- }
- }
- // 商城
- private function OrderNotify($event)
- {
- $order = $this->order = Order::findOne(['id' => $this->order_id]);
- $user = User::findOne($order->user_id);
- // 如果是余额抵扣订单,两条日志,分别是线上支付和余额支付
- $pay_price = $order->pay_price;
- if ($order->is_combine_pay == Order::IS_COMBINE_PAY && $order->combine_money > 0) {
- $money = $user->money;
- $user->money = $user->money - $order->combine_money;
- if ($user->money < 0) {
- throw new \Exception('余额不足');
- }
- if ($user->save()) {
- $log = new AccountLog();
- $log->store_id = $order->store_id;
- $log->user_id = $user->id;
- $log->type = AccountLog::TYPE_BALANCE;
- $log->log_type = AccountLog::LOG_TYPE_EXPEND;
- $log->amount = $order->combine_money;
- $log->desc = "商城订单余额支付,订单号为:{$order->order_no}。";
- $log->before = $money;
- $log->after = $user->money;
- $log->operator = '';
- $log->operator_id = 0;
- $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL;
- $log->created_at = time();
- $log->order_id = $order->id;
- $log->order_type = AccountLog::TYPE_PLATFORM_ORDER;
- $log->save();
- $pay_price = $order->pay_price - $order->combine_money;
- }
- }
- if ($pay_price > 0 && !in_array($order->pay_type,[3,7])) {
- $log = new AccountLog();
- $log->store_id = $order->store_id;
- $log->user_id = $user->id;
- $log->type = $order->pay_type == 1 ? AccountLog::TYPE_WECHAT : AccountLog::TYPE_ALIPAY;
- $log->log_type = AccountLog::LOG_TYPE_EXPEND;
- $log->amount = $pay_price;
- $log->desc = "订单线上支付,订单号为:{$order->order_no}。";
- $log->before = 0;
- $log->after = 0;
- $log->operator = '';
- $log->operator_id = 0;
- $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL;
- $log->created_at = time();
- $log->order_id = $order->id;
- $log->order_type = AccountLog::TYPE_PLATFORM_ORDER;
- $log->save();
- }
- // 首次付款,绑定上下级
- if ($user->parent_id == 0 && $user->parent_user_id > 0) {
- $form = new BindForm();
- $form->user_id = $order->user_id;
- $form->store_id = $order->store_id;
- $form->parent_id = $user->parent_user_id;
- $form->old_parent_id = $user->parent_user_id;
- $form->condition = 2;
- $bindForm = $form->save();
- if ($bindForm['code'] == 0) {
- $form = new ShareMoneyForm();
- $form->order = $this->order;
- $form->order_type = $event->order_type;
- $form->store_id = $order->store_id;
- $form->setData();
- }
- }
- // 预约商品库存操作
- BookOrderNum::bookNumReduce($order);
- // 消费满指定金额自动成为分销商
- $this->autoBecomeShare($order->user_id, $order->store_id, 'STORE');
- // 购买指定或任意商品自动成为分销商
- $this->autoBuyGood($order->user_id, $order->store_id, $order->id);
- if ($this->order->pay_type != 2) {
- // 支付成功赠送优惠券
- $this->paySendCoupon($order->store_id, $order->user_id);
- // 支付成功赠送卡券
- $this->paySendCard($order->store_id, $order->user_id, $order->id);
- }
- // 记录购买记录
- $this->setBuyData($order);
- // 消息通知
- $goods = Goods::findOne(OrderDetail::findOne(['order_id' => $this->order_id])->goods_id);
- $saas_user = SaasUser::findOne(['mobile' => $user->binding, 'is_delete' => 0]);
-
- MochatForm::sendMsg(1, $order->store_id, MochatForm::MSG_TYPE_PAY_ORDER, $saas_user->id, ['goods_id' => $goods->id]);
- $mch_name = '';
- if($order['mch_id']){
- $mch = Mch::findOne($order['mch_id']);
- $mch && $mch_name = '[' . $mch['name'] . ']';
- }
- if ($order->order_type == Order::ORDER_TYPE_Adopt) {
- NoticeSend::OrderPay($order->user_id, $order->mobile, $order->order_no, $order->pay_price, $goods->name, 1);
- } else {
- NoticeSend::OrderPay($order->user_id, $order->mobile, $order->order_no, $order->pay_price, $mch_name . $goods->name);
- }
- NoticeSend::PlaceOrder($order->order_no, $order->md_id, $order->store_id, $order);
- NoticeSend::MchOrder($order->order_no, $order->store_id, $order);
- /* begin 2025/07/11 11:06:57 如果订单是上门服务订单的话,通知符合条件的服务人员进行抢单 WPing丶 */
- if ($order->order_type == Order::ORDER_TYPE_WORKER) {
- NoticeSend::ServiceNewOrder($order->order_no, $order->store_id, $order);
- }
- /* end */
- return true;
- }
- // 当面付订单
- private function scanOrderNotify($event)
- {
- $order = $this->order = \app\plugins\scanCodePay\models\Order::findOne(['id' => $this->order_id]);
- $user = User::findOne($order->user_id);
- // 如果是余额抵扣订单,两条日志,分别是线上支付和余额支付
- $pay_price = $order->pay_price;
- if ($order->is_combine_pay == Order::IS_COMBINE_PAY && $order->combine_money > 0) {
- $money = $user->money;
- $user->money = $user->money - $order->combine_money;
- if ($user->save()) {
- $log = new AccountLog();
- $log->store_id = $order->store_id;
- $log->user_id = $user->id;
- $log->type = AccountLog::TYPE_BALANCE;
- $log->log_type = AccountLog::LOG_TYPE_EXPEND;
- $log->amount = $order->combine_money;
- $log->desc = "当面付余额支付,订单号为:{$order->order_no}。";
- $log->before = $money;
- $log->after = $user->money;
- $log->operator = '';
- $log->operator_id = 0;
- $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL;
- $log->created_at = time();
- $log->order_id = $order->id;
- $log->order_type = AccountLog::TYPE_SCAN_CODE_PAY;
- $log->save();
- $pay_price = $order->pay_price - $order->combine_money;
- }
- }
- $log = new AccountLog();
- $log->store_id = $order->store_id;
- $log->user_id = $user->id;
- $log->type = $order->pay_type == 1 ? AccountLog::TYPE_WECHAT : AccountLog::TYPE_ALIPAY;
- $log->log_type = AccountLog::LOG_TYPE_EXPEND;
- $log->amount = $pay_price;
- $log->desc = "当面付在线支付,订单号为:{$order->order_no}。";
- $log->before = 0;
- $log->after = 0;
- $log->operator = '';
- $log->operator_id = 0;
- $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL;
- $log->created_at = time();
- $log->order_id = $order->id;
- $log->order_type = AccountLog::TYPE_SCAN_CODE_PAY;
- $log->save();
- // 首次付款,绑定上下级
- if ($user->parent_id == 0) {
- $form = new Bind();
- $form->user_id = $order->user_id;
- $form->store_id = $order->store_id;
- $form->parent_id = $user->parent_user_id;
- //$form->old_parent_id = $user->parent_user_id;
- $form->condition = 2;
- $bindForm = $form->save();
- if ($bindForm['code'] == 0) {
- $form = new ShareMoneyForm();
- $form->order = $this->order;
- $form->order_type = $event->order_type;
- $form->setData();
- }
- }
- // 消费满指定金额自动成为分销商
- $this->autoBecomeShare($order->user_id, $order->store_id, 'STORE');
- // 购买指定或任意商品自动成为分销商
- $this->autoBuyGood($order->user_id, $order->store_id, $order->id);
- if (in_array($this->order->pay_type, [1, 3])) {
- // 支付成功赠送优惠券
- $this->paySendCoupon($order->store_id, $order->user_id);
- // 支付成功赠送卡券
- $this->paySendCard($order->store_id, $order->user_id, $order->id);
- }
- // 记录购买记录
- $this->setBuyData($order);
- // 消息通知
- // $goods = Goods::findOne(OrderDetail::findOne(['order_id' => $this->order_id])->goods_id);
- NoticeSend::OrderPay($order->user_id, $order->mobile, $order->order_no, $order->pay_price, '当面付');
- NoticeSend::PlaceOrder($order->order_no, $order->mch_id, $order->store_id, $order);
- return true;
- }
- // 支付宝当面付
- private function alipayScanOrderNotify($event)
- {
- $order = $this->order = \app\plugins\scanCodePay\models\Order::findOne(['id' => $this->order_id]);
- $user = User::findOne($order->user_id);
- $log = new AccountLog();
- $log->store_id = $this->store_id;
- $log->user_id = $user->id;
- $log->type = AccountLog::TYPE_ALIPAY;
- $log->log_type = AccountLog::LOG_TYPE_EXPEND;
- $log->amount = $order->pay_price;
- $log->desc = "当面付支付宝支付,订单号为:{$order->order_no}。";
- $log->before = 0;
- $log->after = 0;
- $log->operator = '';
- $log->operator_id = 0;
- $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL;
- $log->created_at = time();
- $log->order_id = $order->id;
- $log->order_type = AccountLog::TYPE_SCAN_CODE_PAY;
- $log->save();
- // 记录购买记录
- $this->setBuyData($order);
- return true;
- }
- /**
- * 支付成功送优惠券
- */
- private function paySendCoupon($store_id, $user_id)
- {
- $form = new CouponPaySend();
- $form->store_id = $store_id;
- $form->user_id = $user_id;
- $form->save();
- }
- /**
- * 消费满指定金额自动成为分销商
- * @param $user_id integer 用户id
- */
- private function autoBecomeShare($user_id, $store_id, $type = null)
- {
- $setting = Option::get('share_basic_setting', $store_id);
- $setting = $setting ? Json::decode($setting['value']) : [];
- if (intval($setting['share_condition']['value']) !== 2) {
- return;
- }
- $auto_share_val = floatval($setting['auto_share_val']['value']);
- if ($auto_share_val == 0) {
- return;
- }
- $share = Share::findOne(['user_id' => $user_id, 'is_delete' => 0, 'store_id' => $store_id]);
- if ($share && $share->status == 1) {
- return;
- }
- $consumption_sum = Order::find()->where(['user_id' => $user_id, 'is_delete' => 0, 'is_pay' => 1])->sum('pay_price');
- $consumption_sum = floatval(($consumption_sum ? $consumption_sum : 0));
- if ($consumption_sum < $auto_share_val) {
- return;
- }
- if (!$share || $share->status == 2) {
- $share = new Share();
- $share->user_id = $user_id;
- $share->mobile = '';
- $share->name = '';
- $share->is_delete = 0;
- $share->store_id = $store_id;
- }
- $share->status = 1;
- $share->created_at = time();
- $share->save();
- $user = User::findOne($user_id);
- $user->time = time();
- $user->is_distributor = 1;
- $user->save();
- }
- /**
- * 购买指定商品成为分销商
- */
- public function autoBuyGood($user_id, $store_id, $order_id, $type = 0)
- {
- $setting = Option::get('share_basic_setting', $store_id);
- $setting = $setting ? Json::decode($setting['value']) : [];
- //如果开启无需审核才能开始走下面逻辑
- if (intval($setting['share_condition']['value']) !== 2) {
- return;
- }
- // 购买商城成分销商关闭状态不执行
- if ($setting['share_goods_status']['value'] == 0) {
- return;
- }
- $share = Share::findOne(['user_id' => $user_id, 'is_delete' => 0, 'store_id' => $store_id]);
- if ($share && $share->status == 1) {
- return;
- }
- $goodIds = OrderDetail::find()->where(['order_id' => $order_id])->select('goods_id')->all();
- $sign = false;
- // 购买任意商品
- if ($setting['share_goods_status']['value'] == 1) {
- $sign = true;
- }
- // 购买指定商品自动成为分销商
- if ($setting['share_goods_status']['value'] == 2) {
- foreach ($goodIds as $item) {
- $goods_ids = \explode(',', $setting['share_goods_id']['value']);
- if (in_array($item->goods_id, $goods_ids)) {
- $sign = true;
- break;
- }
- }
- }
- if ($sign) {
- if (!$share || $share->status == 2) {
- $share = new Share();
- $share->user_id = $user_id;
- $share->mobile = '';
- $share->name = '';
- $share->is_delete = 0;
- $share->store_id = $store_id;
- }
- $share->status = 1;
- $share->created_at = time();
- $share->save();
- $user = User::findOne($user_id);
- $user->time = time();
- $user->is_distributor = 1;
- $user->save();
- }
- }
- /**
- * 支付成功送卡券
- */
- private function paySendCard($store_id, $user_id, $order_id)
- {
- $form = new CardSend();
- $form->store_id = $store_id;
- $form->user_id = $user_id;
- $form->order_id = $order_id;
- $form->save();
- }
- // 售后订单申请成功,相关操作
- public function refund(OrderEvent $event = null)
- {
- $this->store_id = $event ? $event->store_id : $this->store_id;
- $this->order_id = $event ? $event->order_id : $this->order_id;
- $this->order_type = $event ? $event->order_type : $this->order_type;
- $this->order_refund_no = $event ? $event->order_refund_no : $this->order_refund_no;
- $this->form_id = $event ? $event->form_id : $this->form_id;
- try {
- $order = Order::findOne(['id' => $this->order_id]);
- NoticeSend::MchCancel($order->order_no, $order->mch_id);
- } catch (\Exception $e) {
- }
- }
- public function setBuyData($order)
- {
- $key = "buy_data";
- // 用户
- $user = User::findOne($order->user_id);
- $goods = OrderDetail::findOne(['order_id' => $order->id]);
- $data = (object)null;
- $data->type = 0;
- $data->store_id = $order->store_id;
- $data->order_no = $order->order_no;
- $data->user = $user->nickname;
- $data->goods = $goods->goods_id;
- $data->address = $goods->goods_name;
- $data->avatar_url = $user->avatar_url;
- $data->time = time();
- $new = json_encode($data);
- $cache = cache();
- $cache->set($key, $new, 300);
- }
- /**
- * 获取点餐号码
- */
- public static function getFoodCode($store_id, $md_id = 0) {
- $start_time = strtotime(date('Y-m-d 00:00:00'));
- $end_time = strtotime(date('Y-m-d 23:59:59'));
- $result = Order::find()->where(['store_id' => $store_id, 'md_id' => $md_id])
- ->andWhere([
- 'and',
- [
- '>=',
- 'created_at',
- $start_time
- ],
- [
- '<=',
- 'created_at',
- $end_time
- ]
- ])->max('food_code');
- return str_pad((string)(intval($result) + 1), 4, "0", STR_PAD_LEFT);
- }
- public function freeQueueOrder($order)
- {
- try {
- $order_detail_all = OrderDetail::find()->select('goods_id, total_price, goods_name, num')->where(['order_id' => $order->id])->asArray()->all();
- foreach ($order_detail_all as $order_detail) {
- $free_queue_goods = FreeQueueGoods::find()->select('activity_id')->where(['goods_id' => $order_detail['goods_id'], 'is_delete' => 0])->one();
- if (!$free_queue_goods) {
- continue;
- }
- $free_queue = FreeQueue::find()->where(['is_delete' => 0, 'status' => 1, 'id' => $free_queue_goods->activity_id])->one();
- if (!$free_queue) {
- continue;
- }
- if (time() < $free_queue->start_time || time() > $free_queue->end_time) {
- continue;
- }
- if (($free_queue->cashback_type ? ($free_queue->cashback_money <= 0) : ($free_queue->cashback_bili <= 0)) || $free_queue->single_bili <= 0) {
- continue;
- }
- $order_detail_total_price = $order_detail['total_price'];
- $cashback_money = $free_queue->cashback_money;
- $money_queue = QueueLog::find()
- ->where(['user_id' => $order->user_id, 'queue_id' => $free_queue->id])
- ->andWhere('`status` != 2')
- ->andWhere(['>', 'order_detail_total_price_item', 0])
- ->orderBy('`id` ASC')->all();
- $order_detail_total_price_sum = array_sum(array_column($money_queue, 'order_detail_total_price_item'));
- $order_detail_total_price += $order_detail_total_price_sum;
- while(1){
- if($free_queue->cashback_type && $order_detail_total_price < $cashback_money){
- if($queue_log){
- $queue_log->order_detail_total_price_item = round($order_detail_total_price, 2);
- $queue_log->save();
- }
- break;
- }
- $order_detail_total_price -= $cashback_money;
- $from_queue_list = [];
- if($free_queue->cashback_type){
- foreach ($money_queue as $mqi => $mqv) {
- if($mqv->order_detail_total_price_item <= 0){
- continue;
- }
- $oneMoney = 0;
- $getMoney += $mqv->order_detail_total_price_item;
- $mqvMoney = $mqv->order_detail_total_price_item;
- if($getMoney >= $free_queue->cashback_money){
- $oneMoney = 1;
- $mqv->order_detail_total_price_item = $getMoney - $free_queue->cashback_money;
- $mqvMoney = $mqvMoney - $mqv->order_detail_total_price_item;
- }else{
- $mqv->order_detail_total_price_item = 0;
- }
- $mqvMoney > 0 && $from_queue_list[] = ['from_queue_log_id' => $mqv->id, 'order_id' => $mqv->order_id, 'money' => $mqvMoney];
- if(!$mqv->save()){
- throw new \Exception('扣减金额错误' . $mqv->id . array_shift($mqv->getFirstErrors()));
- }
- if($oneMoney){
- break;
- }
- }
- }
- $goods = Goods::findOne($order_detail['goods_id']);
- $queue_log = new QueueLog();
- $queue_log->store_id = $order->store_id;
- $queue_log->user_id = $order->user_id;
- $queue_log->order_id =$order->id;//订单id
- $queue_log->goods_id = $order_detail['goods_id'];//商品id
- $queue_log->created_at = time();
- $queue_log->returned_money = 0;//已返金额
- $queue_log->total_money = $free_queue->cashback_type ? round($free_queue->cashback_money * $free_queue->cashback_money_bili / 100, 2) : round(($order_detail['total_price'] * $free_queue->cashback_bili / 100),2);//总金额
- $queue_log->rate = ($goods && $goods->queue_rate > 0) ? $goods->queue_rate : $free_queue->single_bili;//单次返现比例
- $queue_log->is_pay = 1;
- $queue_log->cashback_bili = $free_queue->cashback_bili;//返现比例
- $queue_log->cashback_time = $free_queue->cashback_time;
- $queue_log->cashback_type = $free_queue->cashback_type;
- $queue_log->cashback_money = $free_queue->cashback_money;
- $queue_log->cashback_money_bili = $free_queue->cashback_money_bili;
- $queue_log->queue_id = $free_queue->id;//活动id
- $queue_log->goods_name = $order_detail['goods_name'];//商品名称
- $queue_log->goods_price = round(($order_detail['total_price'] / $order_detail['num']), 2);
- $queue_log->num = $order_detail['num'];
- $queue_log->self_bili = $free_queue->self_bili;
- $queue_log->share_bili = $free_queue->share_bili;
- $queue_log->order_money_pool = $order_detail['total_price'];
- if($free_queue->cashback_type){
- $queue_log->order_money_pool = $cashback_money;
- $queue_log->order_detail_total_price_list = json_encode($from_queue_list);
- }
- $queue_log->save();
- if(!$free_queue->cashback_type){
- break;
- }
- }
- }
- } catch (\Throwable $e) {
- debug_log($e->getMessage(), 'free_queue.log');
- }
- }
-
- /* begin 2024/11/19 09:42:11 id1026 保存储值卡消费记录 WPing丶 */
- public function verifyCardPayLog($order) {
- //查出当前用户名下所有的核销卡
- $card_list = VerifyCardLog::find()->alias('vcl')
- ->leftJoin(['vcs' => VerifyCardSale::tableName()], 'vcl.sale_id=vcs.id')
- ->leftJoin(['vc' => VerifyCard::tableName()], 'vcs.verify_card_id=vc.id')
- ->where([
- 'vcl.store_id' => $order->store_id,
- 'vc.type' => 3,
- 'vcl.user_id' => $order->user_id,
- 'vcl.type' => VerifyCardLog::WRITE_TYPE_EXCHANGE,
- 'vcl.is_complete' => 0,
- ])
- ->select('vc.total_price as price, vcl.*')
- ->orderBy(['vcl.use_time' => SORT_ASC])
- ->asArray()
- ->all();
- if($card_list) {
- $order_balance = 0;//上张储值卡扣完后订单剩余未扣的钱
- foreach($card_list as $card) {
- $card_balance = bcsub($card['price'],$card['use_price'],2);//卡内余额
- $order_price = $order_balance > 0 ? $order_balance : ($order->combine_money > 0 ? $order->combine_money : ($order->balance > 0 ? $order->balance : $order->pay_price));
- if($order_price <= $card_balance) {
- //储值卡内余额足以支付这笔订单
- $log = VerifyCardLog::findOne($card['id']);
- $log->use_price += $order_price;
- if($log->use_order_ids) {
- $use_order_ids = explode(',', $log->use_order_ids);
- $use_order_ids[] = $order->id;
- $log->use_order_ids = implode(',', $use_order_ids);
- } else {
- $log->use_order_ids = $order->id;
- }
- if($order_price == $card_balance) {//如果储值卡内余额刚好够支付当前订单
- $log->is_complete = 1;
- }
- if (!$log->save()) {
- debug_log('储值卡消费记录保存失败', 'VerifyCard.log');
- debug_log($log->errors, 'VerifyCard.log');
- }
- break;
- } else {
- //储值卡内余额不足支付这笔订单
- $log = VerifyCardLog::findOne($card['id']);
- $log->use_price += $card_balance;
- if($log->use_order_ids) {
- $use_order_ids = explode(',', $log->use_order_ids);
- $use_order_ids[] = $order->id;
- $log->use_order_ids = implode(',', $use_order_ids);
- } else {
- $log->use_order_ids = $order->id;
- }
- $log->is_complete = 1;
- $order_balance = bcsub($order_price, $card_balance, 2);
- if (!$log->save()) {
- debug_log('储值卡消费记录保存失败', 'VerifyCard.log');
- debug_log($log->errors, 'VerifyCard.log');
- }
- }
- }
- }
- }
- /* end */
- }
|