| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319 |
- <?php
- /**
- * Niushop商城系统 - 团队十年电商经验汇集巨献!
- * =========================================================
- * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
- * ----------------------------------------------
- * 官方网址: https://www.niushop.com
- * =========================================================
- */
- namespace addon\bargain\model;
- use addon\weapp\model\Message as WeappMessage;
- use addon\wechat\model\Message as WechatMessage;
- use app\model\BaseModel;
- use app\model\goods\Goods;
- use app\model\member\Member;
- use app\model\message\Message;
- use app\model\message\Sms;
- use app\model\system\Cron;
- use app\model\order\Order;
- use think\facade\Cache;
- use think\facade\Db;
- use think\facade\Log;
- /**
- * 砍价活动
- */
- class Bargain extends BaseModel
- {
- private $status = [
- 0 => '未开始',
- 1 => '进行中',
- 2 => '已结束',
- 3 => '已关闭'
- ];
- /**
- * 获取砍价活动状态
- * @return array
- */
- public function getBargainStatus()
- {
- return $this->success($this->status);
- }
- /**
- * 添加砍价
- * @param $common_data
- * @param $goods
- * @param $sku_list
- * @return array
- */
- public function addBargain($common_data, $goods, $sku_list)
- {
- if (empty($goods[ 'sku_ids' ])) {
- return $this->error('', '该活动至少需要一个商品参与');
- }
- //时间段检测
- $bargain_count = model('promotion_bargain_goods')->getCount([
- [ 'goods_id', 'in', $goods[ 'goods_ids' ] ],
- [ 'status', 'in', '0,1,3,4' ],
- [ 'site_id', '=', $common_data[ 'site_id' ] ],
- [ '', 'exp', Db::raw('not ( (`start_time` > ' . $common_data[ 'end_time' ] . ' and `start_time` > ' . $common_data[ 'start_time' ] . ' ) or (`end_time` < ' . $common_data[ 'start_time' ] . ' and `end_time` < ' . $common_data[ 'end_time' ] . '))') ]//todo 修正 所有的优惠都要一样
- ]);
- if ($bargain_count > 0) {
- return $this->error('', '有商品已设置砍价活动,请不要重复设置');
- }
- $time = time();
- // 当前时间
- if ($time > $common_data[ 'end_time' ]) {
- return $this->error('', '当前时间不能大于结束时间');
- }
- if ($time > $common_data[ 'start_time' ] && $time < $common_data[ 'end_time' ]) {
- $common_data[ 'status' ] = 1;
- $common_data[ 'status_name' ] = $this->status[ 1 ];
- } else {
- $common_data[ 'status' ] = 0;
- $common_data[ 'status_name' ] = $this->status[ 0 ];
- }
- model('promotion_bargain')->startTrans();
- try {
- foreach ($goods[ 'goods_ids' ] as $goods_id) {
- //添加砍价活动
- $bargain_data = [
- 'goods_id' => $goods_id,
- 'create_time' => $time
- ];
- $bargain_id = model('promotion_bargain')->add(array_merge($bargain_data, $common_data));
- $bargain_goods_list = [];
- $bargain_stock = 0;
- //添加砍价活动商品
- foreach ($sku_list as $sku) {
- if ($sku[ 'goods_id' ] == $goods_id) {
- $bargain_stock += $sku[ 'bargain_stock' ];
- $sku[ 'bargain_id' ] = $bargain_id;
- $bargain_goods_list[] = array_merge($sku, $common_data);
- }
- }
- array_multisort(array_column($bargain_goods_list, 'floor_price'), SORT_ASC, $bargain_goods_list);
- model('promotion_bargain')->update(
- [
- 'sku_id' => $bargain_goods_list[ 0 ][ 'sku_id' ],
- 'floor_price' => $bargain_goods_list[ 0 ][ 'floor_price' ],
- 'bargain_stock' => $bargain_stock
- ],
- [ [ 'bargain_id', '=', $bargain_id ] ]
- );
- model('promotion_bargain_goods')->addList($bargain_goods_list);
- $cron = new Cron();
- if ($common_data[ 'status' ] == 1) {
- $this->modifyPromotionAddon($bargain_id);
- $cron->addCron(1, 0, "砍价活动关闭", "CloseBargain", $common_data[ 'end_time' ], $bargain_id);
- } else {
- $cron->addCron(1, 0, "砍价活动开启", "OpenBargain", $common_data[ 'start_time' ], $bargain_id);
- $cron->addCron(1, 0, "砍价活动关闭", "CloseBargain", $common_data[ 'end_time' ], $bargain_id);
- }
- }
- model('promotion_bargain')->commit();
- return $this->success();
- } catch (\Exception $e) {
- model('promotion_bargain')->rollback();
- return $this->error('', $e->getMessage());
- }
- }
- /**
- * 编辑砍价
- * @param $common_data
- * @param $goods
- * @param $sku_list
- * @return array
- */
- public function editBargain($common_data, $goods, $sku_list)
- {
- if (empty($goods[ 'sku_ids' ])) {
- return $this->error('', '该活动至少需要一个商品参与');
- }
- $bargain_count = model('promotion_bargain')->getCount(
- [ [ 'bargain_id', '=', $common_data[ 'bargain_id' ] ], [ 'site_id', '=', $common_data[ 'site_id' ] ] ]
- );
- if ($bargain_count == 0) {
- return $this->error('', '数据有误');
- }
- //时间段检测
- $count = model('promotion_bargain_goods')->getCount([
- [ 'sku_id', 'in', $goods[ 'sku_ids' ] ],
- [ 'status', 'in', '0,1,3,4' ],
- [ 'bargain_id', '<>', $common_data[ 'bargain_id' ] ],
- [ 'site_id', '=', $common_data[ 'site_id' ] ],
- [ '', 'exp', Db::raw('not ( (`start_time` > ' . $common_data[ 'end_time' ] . ' and `start_time` > ' . $common_data[ 'start_time' ] . ' ) or (`end_time` < ' . $common_data[ 'start_time' ] . ' and `end_time` < ' . $common_data[ 'end_time' ] . '))') ]//todo 修正 所有的优惠都要一样
- ]);
- if ($count > 0) {
- return $this->error('', '有商品已设置砍价活动,请不要重复设置');
- }
- $time = time();
- if ($time > $common_data[ 'end_time' ]) {
- return $this->error('', '当前时间不能大于结束时间');
- }
- // 当前时间
- if ($time > $common_data[ 'start_time' ] && $time < $common_data[ 'end_time' ]) {
- $common_data[ 'status' ] = 1;
- $common_data[ 'status_name' ] = $this->status[ 1 ];
- } else {
- $common_data[ 'status' ] = 0;
- $common_data[ 'status_name' ] = $this->status[ 0 ];
- }
- model('promotion_bargain')->startTrans();
- try {
- $bargain_goods_list = [];
- $bargain_stock = 0;
- //添加砍价活动商品
- foreach ($sku_list as $v) {
- $count = model('promotion_bargain_goods')->getCount([ [ 'sku_id', '=', $v[ 'sku_id' ] ], [ 'bargain_id', '=', $common_data[ 'bargain_id' ] ] ]);
- $is_delete = $v[ 'is_delete' ];
- unset($v[ 'is_delete' ]);
- if ($is_delete == 2) {//是否参与 1参与 2不参与
- if ($count > 0) {
- model('promotion_bargain_goods')->delete([ [ 'sku_id', '=', $v[ 'sku_id' ] ], [ 'bargain_id', '=', $common_data[ 'bargain_id' ] ] ]);
- }
- } else {
- $bargain_stock += $v[ 'bargain_stock' ];
- $bargain_data = array_merge($v, $common_data);
- if ($count > 0) {
- model('promotion_bargain_goods')->update(
- $bargain_data,
- [ [ 'sku_id', '=', $v[ 'sku_id' ] ], [ 'bargain_id', '=', $common_data[ 'bargain_id' ] ] ]
- );
- } else {
- model('promotion_bargain_goods')->add($bargain_data);
- }
- $bargain_goods_list[] = $bargain_data;
- }
- }
- array_multisort(array_column($bargain_goods_list, 'floor_price'), SORT_ASC, $bargain_goods_list);
- //修改砍价活动
- model('promotion_bargain')->update(
- array_merge([
- 'sku_id' => $bargain_goods_list[ 0 ][ 'sku_id' ],
- 'floor_price' => $bargain_goods_list[ 0 ][ 'floor_price' ],
- 'bargain_stock' => $bargain_stock,
- 'modify_time' => $time
- ], $common_data),
- [ [ 'bargain_id', '=', $common_data[ 'bargain_id' ] ] ]
- );
- $cron = new Cron();
- if ($common_data[ 'status' ] == 1) {
- $this->modifyPromotionAddon($common_data[ 'bargain_id' ]);
- $cron->deleteCron([ [ 'event', '=', 'OpenBargain' ], [ 'relate_id', '=', $common_data[ 'bargain_id' ] ] ]);
- $cron->deleteCron([ [ 'event', '=', 'CloseBargain' ], [ 'relate_id', '=', $common_data[ 'bargain_id' ] ] ]);
- $cron->addCron(1, 0, "砍价活动关闭", "CloseBargain", $common_data[ 'end_time' ], $common_data[ 'bargain_id' ]);
- } else {
- $cron->deleteCron([ [ 'event', '=', 'OpenBargain' ], [ 'relate_id', '=', $common_data[ 'bargain_id' ] ] ]);
- $cron->deleteCron([ [ 'event', '=', 'CloseBargain' ], [ 'relate_id', '=', $common_data[ 'bargain_id' ] ] ]);
- $cron->addCron(1, 0, "砍价活动开启", "OpenBargain", $common_data[ 'start_time' ], $common_data[ 'bargain_id' ]);
- $cron->addCron(1, 0, "砍价活动关闭", "CloseBargain", $common_data[ 'end_time' ], $common_data[ 'bargain_id' ]);
- }
- // 清除活动分享图片
- ( new Poster() )->clearShareImg($common_data[ 'bargain_id' ]);
- model('promotion_bargain')->commit();
- return $this->success();
- } catch (\Exception $e) {
- model('promotion_bargain')->rollback();
- return $this->error('', $e->getMessage());
- }
- }
- /**
- * 删除砍价活动
- * @param $bargain_id
- * @param $site_id
- * @return array|\multitype
- */
- public function deleteBargain($bargain_id, $site_id)
- {
- //砍价信息
- $bargain_info = model('promotion_bargain')->getInfo([ [ 'bargain_id', '=', $bargain_id ], [ 'site_id', '=', $site_id ] ], 'status');
- if ($bargain_info) {
- if ($bargain_info[ 'status' ] != 1) {
- $res = model('promotion_bargain')->delete([ [ 'bargain_id', '=', $bargain_id ], [ 'site_id', '=', $site_id ] ]);
- if ($res) {
- //删除商品
- model('promotion_bargain_goods')->delete([ [ 'bargain_id', '=', $bargain_id ], [ 'site_id', '=', $site_id ] ]);
- //删除砍价记录
- model('promotion_bargain_launch')->delete([ [ 'bargain_id', '=', $bargain_id ], [ 'site_id', '=', $site_id ] ]);
- $cron = new Cron();
- $cron->deleteCron([ [ 'event', '=', 'OpenBargain' ], [ 'relate_id', '=', $bargain_id ] ]);
- $cron->deleteCron([ [ 'event', '=', 'CloseBargain' ], [ 'relate_id', '=', $bargain_id ] ]);
- }
- return $this->success($res);
- } else {
- return $this->error('', '砍价活动进行中,请先关闭该活动');
- }
- } else {
- return $this->error('', '砍价活动不存在');
- }
- }
- /**
- * 关闭砍价活动
- * @param $bargain_id
- * @param $site_id
- * @return array
- */
- public function finishBargain($bargain_id, $site_id)
- {
- //砍价信息
- $bargain_info = model('promotion_bargain')->getInfo([ [ 'bargain_id', '=', $bargain_id ], [ 'site_id', '=', $site_id ] ], 'status');
- if (!empty($bargain_info)) {
- if ($bargain_info[ 'status' ] != 3) {
- $res = model('promotion_bargain')->update([ 'status' => 3, 'status_name' => $this->status[ 3 ] ], [ [ 'bargain_id', '=', $bargain_id ], [ 'site_id', '=', $site_id ] ]);
- if ($res) {
- model('promotion_bargain_goods')->update(
- [ 'status' => 3, 'status_name' => $this->status[ 3 ] ],
- [ [ 'bargain_id', '=', $bargain_id ], [ 'site_id', '=', $site_id ] ]
- );
- model('promotion_bargain_launch')->update([ 'status' => 2 ], [ [ 'bargain_id', '=', $bargain_id ], [ 'status', '=', 0 ] ]);
- $cron = new Cron();
- $cron->deleteCron([ [ 'event', '=', 'OpenBargain' ], [ 'relate_id', '=', $bargain_id ] ]);
- $cron->deleteCron([ [ 'event', '=', 'CloseBargain' ], [ 'relate_id', '=', $bargain_id ] ]);
- $this->modifyPromotionAddon($bargain_id, true);
- }
- return $this->success($res);
- } else {
- $this->error('', '该砍价活动已关闭');
- }
- } else {
- $this->error('', '该砍价活动不存在');
- }
- }
- /**
- * 获取砍价信息
- * @param array $condition
- * @param string $field
- * @return array
- */
- public function getBargainInfo($condition = [])
- {
- $field = 'pb.*,g.goods_name,g.goods_image';
- $alias = 'pb';
- $join = [
- [
- 'goods g',
- 'g.goods_id = pb.goods_id',
- 'inner'
- ]
- ];
- $bargain_info = model("promotion_bargain")->getInfo($condition, $field, $alias, $join);
- if (!empty($bargain_info)) {
- $goods_list = model('goods_sku')->getList(
- [ [ 'goods_id', '=', $bargain_info[ 'goods_id' ] ] ],
- 'goods_id,sku_id,sku_name,price,sku_image,stock'
- );
- foreach ($goods_list as $k => $v) {
- $v[ 'stock' ] = numberFormat($v[ 'stock' ]);
- $bargain_goods = model('promotion_bargain_goods')->getInfo(
- [ [ 'sku_id', '=', $v[ 'sku_id' ] ], [ 'bargain_id', '=', $bargain_info[ 'bargain_id' ] ] ],
- 'first_bargain_price,bargain_stock,floor_price'
- );
- if (empty($bargain_goods)) {
- $bargain_goods = [
- 'first_bargain_price' => 0,
- 'bargain_stock' => 0,
- 'floor_price' => 0
- ];
- }
- $goods_list[ $k ] = array_merge($v, $bargain_goods);
- }
- array_multisort(array_column($goods_list, 'bargain_stock'), SORT_DESC, $goods_list);
- $bargain_info[ 'goods_list' ] = $goods_list;
- }
- return $this->success($bargain_info);
- }
- /**
- * 获取砍价信息
- * @param array $condition
- * @param string $field
- * @return array
- */
- public function getBargainJoinGoodsList($condition = [])
- {
- $field = 'pb.*,g.goods_name,g.goods_image';
- $alias = 'pb';
- $join = [
- [
- 'goods g',
- 'g.goods_id = pb.goods_id',
- 'inner'
- ]
- ];
- $bargain_info = model("promotion_bargain")->getInfo($condition, $field, $alias, $join);
- if (!empty($bargain_info)) {
- $goods_list = model('promotion_bargain_goods')->getList(
- [ [ 'pbg.bargain_id', '=', $bargain_info[ 'bargain_id' ] ] ],
- 'pbg.first_bargain_price,pbg.bargain_stock,pbg.floor_price,sku.goods_id,sku.sku_id,sku.sku_name,sku.price,sku.sku_image,sku.stock',
- '', 'pbg', [ [ 'goods_sku sku', 'sku.sku_id = pbg.sku_id', 'inner' ] ]
- );
- foreach ($goods_list as $k => $v) {
- $goods_list[ $k ][ 'stock' ] = numberFormat($goods_list[ $k ][ 'stock' ]);
- }
- $bargain_info[ 'goods_list' ] = $goods_list;
- }
- return $this->success($bargain_info);
- }
- /**
- * 获取砍价商品信息
- * @param array $condition
- * @param string $field
- * @return array
- */
- public function getBargainGoodsDetail($condition = [], $field = '')
- {
- if (empty($field)) $field = 'pb.join_num,pb.browse_num,pb.share_num,pbg.id,pbg.bargain_id,pbg.goods_id,pbg.sku_id,pbg.floor_price,pbg.bargain_stock,pbg.bargain_name,pbg.start_time,pbg.end_time,pbg.buy_type,pbg.remark,sku.site_id,sku.sku_name,sku.sku_spec_format,sku.price,sku.promotion_type,sku.stock,sku.click_num,
- (pb.sale_num + g.virtual_sale) as sale_num,sku.collect_num,sku.sku_image,sku.sku_images,sku.goods_content,sku.goods_state,sku.is_virtual,sku.is_free_shipping,sku.goods_spec_format,sku.goods_attr_format,sku.introduction,sku.unit,sku.video_url,g.evaluate,sku.goods_service_ids, g.goods_image,g.goods_stock,g.goods_name,sku.qr_id,g.stock_show,g.sale_show,g.label_name,pb.status as bargain_status,pb.is_own';
- $join = [
- [ 'goods_sku sku', 'pbg.sku_id = sku.sku_id', 'inner' ],
- [ 'goods g', 'g.goods_id = sku.goods_id', 'inner' ],
- [ 'promotion_bargain pb', 'pb.bargain_id = pbg.bargain_id', 'inner' ],
- ];
- $bargain_goods_info = model('promotion_bargain_goods')->getInfo($condition, $field, 'pbg', $join);
- if (!empty($bargain_goods_info)) {
- if (isset($bargain_goods_info[ 'stock' ])) {
- $bargain_goods_info[ 'stock' ] = numberFormat($bargain_goods_info[ 'stock' ]);
- }
- if (isset($bargain_goods_info[ 'goods_stock' ])) {
- $bargain_goods_info[ 'goods_stock' ] = numberFormat($bargain_goods_info[ 'goods_stock' ]);
- }
- }
- return $this->success($bargain_goods_info);
- }
- /**
- * 获取砍价商品信息
- * @param array $condition
- * @param string $field
- * @return array
- */
- public function getBargainGoodsSkuList($condition = [])
- {
- $field = 'pb.join_num,pb.browse_num,pb.share_num,pbg.id,pbg.bargain_id,pbg.goods_id,pbg.sku_id,pbg.floor_price
- ,pbg.bargain_stock,pbg.bargain_name,pbg.start_time,pbg.end_time,pbg.buy_type,sku.sku_name
- ,sku.sku_spec_format,sku.price,sku.stock,sku.sku_image
- ,sku.sku_images,g.goods_spec_format,g.goods_image,pb.status as bargain_status,pb.is_own';
- $join = [
- [ 'goods_sku sku', 'pbg.sku_id = sku.sku_id', 'inner' ],
- [ 'goods g', 'g.goods_id = sku.goods_id', 'inner' ],
- [ 'promotion_bargain pb', 'pb.bargain_id = pbg.bargain_id', 'inner' ],
- ];
- $list = model('promotion_bargain_goods')->getList($condition, $field, 'pbg.id asc', 'pbg', $join);
- foreach ($list as $k => $v) {
- if (isset($v[ 'stock' ])) {
- $list[ $k ][ 'stock' ] = numberFormat($list[ $k ][ 'stock' ]);
- }
- }
- return $this->success($list);
- }
- /**
- * 获取砍价列表
- * @param array $condition
- * @param string $field
- * @param string $order
- * @param null $limit
- * @return array
- */
- public function getBargainList($condition = [], $field = '*', $order = '', $limit = null)
- {
- $alias = 'pb';
- if (empty($field)) {
- $field = 'pb.*,g.goods_name,g.goods_image,g.price,g.recommend_way,sku.sku_id,sku.price,sku.sku_name,sku.sku_image,sku.stock as goods_stock,g.label_name,g.goods_class_name,g.stock_show,g.sale_show';
- }
- $join = [
- [ 'goods g', 'g.goods_id = pb.goods_id', 'inner' ],
- [ 'goods_sku sku', 'g.sku_id = sku.sku_id', 'inner' ],
- ];
- $list = model('promotion_bargain')->getList($condition, $field, $order, $alias, $join, '', $limit);
- foreach ($list as $k => $v) {
- if (isset($v[ 'stock' ])) {
- $list[ $k ][ 'stock' ] = numberFormat($list[ $k ][ 'stock' ]);
- }
- if (isset($v[ 'goods_stock' ])) {
- $list[ $k ][ 'goods_stock' ] = numberFormat($list[ $k ][ 'goods_stock' ]);
- }
- }
- return $this->success($list);
- }
- /**
- * 获取砍价分页列表
- * @param array $condition
- * @param int $page
- * @param int $page_size
- * @param string $order
- * @return array
- */
- public function getBargainPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'pb.bargain_id desc', $field = '')
- {
- $alias = 'pb';
- if (empty($field)) {
- $field = 'pb.*,g.goods_name,g.goods_image,g.price,g.recommend_way,sku.sku_id,sku.price,sku.sku_name,sku.sku_image,sku.stock as goods_stock,g.label_name,g.goods_class_name,g.stock_show,g.sale_show';
- }
- $join = [
- [ 'goods g', 'g.goods_id = pb.goods_id', 'inner' ],
- [ 'goods_sku sku', 'g.sku_id = sku.sku_id', 'inner' ],
- ];
- $res = model('promotion_bargain')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
- foreach ($res[ 'list' ] as $k => $v) {
- if (isset($v[ 'stock' ])) {
- $res[ 'list' ][ $k ][ 'stock' ] = numberFormat($res[ 'list' ][ $k ][ 'stock' ]);
- }
- if (isset($v[ 'goods_stock' ])) {
- $res[ 'list' ][ $k ][ 'goods_stock' ] = numberFormat($res[ 'list' ][ $k ][ 'goods_stock' ]);
- }
- }
- return $this->success($res);
- }
- /**
- * 获取砍价商品列表
- * @param $bargain_id
- * @param $site_id
- * @return array
- */
- public function getBargainGoodsList($bargain_id, $site_id)
- {
- $field = 'pbg.*,sku.sku_name,sku.price,sku.sku_image,sku.stock';
- $alias = 'pbg';
- $join = [
- [
- 'goods g',
- 'g.goods_id = pbg.goods_id',
- 'inner'
- ],
- [
- 'goods_sku sku',
- 'sku.sku_id = pbg.sku_id',
- 'inner'
- ]
- ];
- $condition = [
- [ 'pbg.bargain_id', '=', $bargain_id ], [ 'pbg.site_id', '=', $site_id ],
- [ 'g.is_delete', '=', 0 ], [ 'g.goods_state', '=', 1 ]
- ];
- $list = model('promotion_bargain_goods')->getList($condition, $field, '', $alias, $join);
- foreach ($list as $k => $v) {
- if (isset($v[ 'stock' ])) {
- $list[ $k ][ 'stock' ] = numberFormat($list[ $k ][ 'stock' ]);
- }
- }
- return $this->success($list);
- }
- /**
- * 获取砍价商品分页列表
- * @param array $condition
- * @param bool $field
- * @param string $order
- * @param int $page
- * @param int $list_rows
- * @param string $alias
- * @param array $join
- * @return array
- */
- public function getBargainGoodsPageList($condition = [], $field = true, $order = '', $page = 1, $list_rows = PAGE_LIST_ROWS, $alias = 'a', $join = [])
- {
- $list = model('promotion_bargain_goods')->pageList($condition, $field, $order, $page, $list_rows, $alias, $join);
- return $this->success($list);
- }
- /**
- * 开启砍价活动
- * @param $bargain_id
- * @return array
- */
- public function cronOpenBargain($bargain_id)
- {
- $bargain_info = model('promotion_bargain')->getInfo([ [ 'bargain_id', '=', $bargain_id ] ], 'status');
- if (!empty($bargain_info)) {
- if ($bargain_info[ 'status' ] == 0) {
- $res = model('promotion_bargain')->update([ 'status' => 1, 'status_name' => $this->status[ 1 ] ], [ [ 'bargain_id', '=', $bargain_id ] ]);
- if ($res) {
- model('promotion_bargain_goods')->update(
- [ 'status' => 1, 'status_name' => $this->status[ 1 ] ],
- [ [ 'bargain_id', '=', $bargain_id ] ]
- );
- $this->modifyPromotionAddon($bargain_id);
- }
- return $this->success($res);
- } else {
- return $this->error("", "砍价活动已开启或者关闭");
- }
- } else {
- return $this->error("", "砍价活动不存在");
- }
- }
- /**
- * 关闭砍价活动
- * @param $bargain_id
- * @return array|\multitype
- */
- public function cronCloseBargain($bargain_id)
- {
- $bargain_info = model('promotion_bargain')->getInfo([ [ 'bargain_id', '=', $bargain_id ] ], 'status');
- if (!empty($bargain_info)) {
- if ($bargain_info[ 'status' ] != 2) {
- $res = model('promotion_bargain')->update([ 'status' => 2, 'status_name' => $this->status[ 2 ] ], [ [ 'bargain_id', '=', $bargain_id ] ]);
- if ($res) {
- model('promotion_bargain_goods')->update(
- [ 'status' => 2, 'status_name' => $this->status[ 2 ] ],
- [ [ 'bargain_id', '=', $bargain_id ] ]
- );
- $data = [ 'status' => 2 ];
- model('promotion_bargain_launch')->update($data, [ [ 'bargain_id', '=', $bargain_id ], [ 'status', '=', 0 ] ]);
- $this->modifyPromotionAddon($bargain_id, true);
- }
- return $this->success($res);
- } else {
- return $this->error("", "该活动已结束");
- }
- } else {
- return $this->error("", "砍价活动不存在");
- }
- }
- /**
- * 获取砍价发起信息
- * @param array $condition
- * @param string $field
- */
- public function getBargainLaunchDetail($condition = [], $field = '*', $alias = '', $join = '')
- {
- $data = model('promotion_bargain_launch')->getInfo($condition, $field, $alias, $join);
- if (!empty($data)) {
- return $this->success($data);
- } else {
- return $this->error();
- }
- }
- /**
- * 获取砍价发起分页列表
- * @param array $condition
- * @param bool $field
- * @param string $order
- * @param int $page
- * @param int $list_rows
- * @param string $alias
- * @param array $join
- * @return array
- */
- public function getBargainLaunchPageList($condition = [], $field = true, $order = '', $page = 1, $list_rows = PAGE_LIST_ROWS, $alias = 'a', $join = [])
- {
- $data = model('promotion_bargain_launch')->pageList($condition, $field, $order, $page, $list_rows, $alias, $join);
- if (!empty($data[ 'list' ])) {
- foreach ($data[ 'list' ] as $k => $item) {
- $record_data = model('promotion_bargain_record')->pageList([ [ 'launch_id', '=', $item[ 'launch_id' ] ] ], 'headimg', 'id asc', 1, 6);
- $data[ 'list' ][ $k ][ 'bargain_record' ] = $record_data[ 'list' ];
- }
- }
- return $this->success($data);
- }
- /**
- * 获取砍价发起列表
- * @param array $condition
- * @param bool $field
- * @param string $order
- * @param string $alias
- * @param array $join
- * @param string $group
- * @param null $limit
- * @return mixed
- */
- public function getBargainLaunchList($condition = [], $field = true, $order = '', $alias = 'a', $join = [], $group = '', $limit = null)
- {
- $list = model('promotion_bargain_launch')->getList($condition, $field, $order, $alias, $join, $group, $limit);
- return $list;
- }
- /**
- * 查询数据
- * @param array $condition
- */
- public function getBargainLaunchCount($condition = [])
- {
- $count = model('promotion_bargain_launch')->getCount($condition, 'launch_id');
- return $this->success($count);
- }
- /**
- * 获取砍价记录
- * @param array $condition
- * @param bool $field
- * @param string $order
- * @param int $page
- * @param int $list_rows
- * @param string $alias
- * @param array $join
- * @return array
- */
- public function getBargainRecordPageList($condition = [], $field = true, $order = '', $page = 1, $list_rows = PAGE_LIST_ROWS, $alias = 'a', $join = [])
- {
- $data = model('promotion_bargain_record')->pageList($condition, $field, $order, $page, $list_rows, $alias, $join);
- return $this->success($data);
- }
- /**
- * 获取砍价记录信息
- * @param array $condition
- * @param string $field
- */
- public function getBargainRecordInfo($condition = [], $field = '*')
- {
- $data = model('promotion_bargain_record')->getInfo($condition, $field);
- return $this->success($data);
- }
- /**
- * 发起砍价
- * @param $id
- * @param $member_id
- */
- public function launch($id, $member_id, $site_id, $store_id)
- {
- $condition = [
- [ 'pbg.id', '=', $id ],
- [ 'pbg.site_id', '=', $site_id ],
- [ 'pbg.status', '=', 1 ],
- [ 'g.goods_state', '=', 1 ],
- [ 'g.is_delete', '=', 0 ]
- ];
- $field = 'pbg.*, sku.sku_image,sku.sku_name,sku.price,sku.stock';
- $join = [
- [ 'goods_sku sku', 'pbg.sku_id = sku.sku_id', 'inner' ],
- [ 'goods g', 'g.goods_id = pbg.goods_id', 'inner' ]
- ];
- $bargain_info = model('promotion_bargain_goods')->getInfo($condition, $field, 'pbg', $join);
- if (empty($bargain_info)) return $this->error('', '砍价活动已结束');
- if ($bargain_info[ 'bargain_stock' ] <= 0) return $this->error('', '库存不足');
- if ($bargain_info[ 'stock' ] <= 0) return $this->error('', '库存不足');
- $bargain_info[ 'stock' ] = numberFormat($bargain_info[ 'stock' ]);
- $launch_info = model('promotion_bargain_launch')->getInfo([ [ 'bargain_id', '=', $bargain_info[ 'bargain_id' ] ], [ 'member_id', '=', $member_id ] ]);
- if ($launch_info && empty($launch_info[ 'status' ])) return $this->error('', '该商品正在砍价中');
- if ($launch_info && $launch_info[ 'status' ] == 1) return $this->error('', '该商品已砍价成功,不能再次发起');
- $launch_info = model('promotion_bargain_launch')->getInfo([ [ 'bargain_id', '=', $bargain_info[ 'bargain_id' ] ], [ 'member_id', '=', $member_id ], [ 'order_id', '>', 0 ] ]);
- if ($launch_info && !empty($launch_info[ 'order_id' ])) return $this->error('', '您已发起过砍价,不能再次发起');
- $member_info = model('member')->getInfo([ [ 'site_id', '=', $site_id ], [ 'member_id', '=', $member_id ] ], 'nickname,headimg');
- if (empty($member_info)) return $this->error('', '未获取到会员信息');
- try {
- $data = [
- 'bargain_id' => $bargain_info[ 'bargain_id' ],
- 'sku_id' => $bargain_info[ 'sku_id' ],
- 'goods_id' => $bargain_info[ 'goods_id' ],
- 'site_id' => $bargain_info[ 'site_id' ],
- 'sku_name' => $bargain_info[ 'sku_name' ],
- 'sku_image' => $bargain_info[ 'sku_image' ],
- 'price' => $bargain_info[ 'price' ],
- 'floor_price' => $bargain_info[ 'floor_price' ],
- 'buy_type' => $bargain_info[ 'buy_type' ],
- 'bargain_type' => $bargain_info[ 'bargain_type' ],
- 'need_num' => $bargain_info[ 'bargain_num' ],
- 'start_time' => time(),
- 'end_time' => ( time() + ( $bargain_info[ 'bargain_time' ] * 3600 ) ),
- 'member_id' => $member_id,
- 'nickname' => $member_info[ 'nickname' ],
- 'headimg' => $member_info[ 'headimg' ],
- 'is_fenxiao' => $bargain_info[ 'is_fenxiao' ],
- 'first_bargain_price' => $bargain_info[ 'first_bargain_price' ],
- 'curr_price' => $bargain_info[ 'price' ],
- 'is_own' => $bargain_info[ 'is_own' ],
- 'is_differ_new_user' => $bargain_info[ 'is_differ_new_user' ],
- 'distinguish' => $bargain_info[ 'distinguish' ],
- 'new_low' => $bargain_info[ 'new_low' ],
- 'aged_tall' => $bargain_info[ 'aged_tall' ],
- 'aged_fixation' => $bargain_info[ 'aged_fixation' ],
- 'store_id' => $store_id
- ];
- $launch_id = model('promotion_bargain_launch')->add($data);
- if ($launch_id) {
- //修改砍价商品信息
- // model('promotion_bargain_goods')->update(
- // [
- // 'bargain_stock' => $bargain_info[ 'bargain_stock' ] - 1,
- // 'join_num' => $bargain_info[ 'join_num' ] + 1,
- // ]
- // , [ [ 'id', '=', $id ] ]
- // );
- //增加参与人数
- model('promotion_bargain')->setInc([ [ 'bargain_id', '=', $bargain_info[ 'bargain_id' ] ] ], 'join_num');
- if ($bargain_info[ 'is_own' ]) {
- $this->bargain($launch_id, $member_id, $site_id);
- }
- $cron = new Cron();
- $cron->addCron(1, 0, '砍价发起自动关闭', 'BargainLaunchClose', $data[ 'end_time' ], $launch_id);
- return $this->success($launch_id);
- } else {
- return $this->error();
- }
- } catch (\Exception $e) {
- return $this->error($e->getMessage());
- }
- }
- /**
- * 砍价
- * @param $launch_id
- * @param $member_id
- * @param $site_id
- */
- public function bargain($launch_id, $member_id, $site_id)
- {
- model('promotion_bargain_launch')->startTrans();
- try {
- $launch_info = Db::name('promotion_bargain_launch')->where([ [ 'launch_id', '=', $launch_id ], [ 'site_id', '=', $site_id ] ])->lock(true)->find();
- if (empty($launch_info)) {
- model('promotion_bargain_launch')->rollback();
- return $this->error('', '未获取到砍价信息');
- }
- if ($launch_info[ 'status' ] != 0) {
- model('promotion_bargain_launch')->rollback();
- return $this->error('', '砍价已结束');
- }
- if ($launch_info[ 'is_own' ] == 0 && $launch_info[ 'member_id' ] == $member_id) {
- model('promotion_bargain_launch')->rollback();
- return $this->error('', '不支持给自己砍价');
- }
- $member_bargain_count = model('promotion_bargain_record')->getCount([
- [ 'bl.bargain_id', '=', $launch_info[ 'bargain_id' ] ],
- [ 'br.member_id', '=', $member_id ],
- ], 'br.id', 'br', [
- [ 'promotion_bargain_launch bl', 'bl.launch_id = br.launch_id', 'left' ]
- ]);
- $bargain_info = model('promotion_bargain')->getInfo([ [ 'bargain_id', '=', $launch_info[ 'bargain_id' ] ] ], 'help_bargain_num,bargain_max_num');
- if ($bargain_info && !empty($bargain_info[ 'help_bargain_num' ]) && $member_bargain_count >= $bargain_info[ 'help_bargain_num' ]) {
- return $this->error('', '您的帮砍次数已达上限');
- }
- $launch_info = array_merge($launch_info, $bargain_info);
- //判断商品库存
- $goods_model = new Goods();
- $goods_sku_stock = $goods_model->getGoodsSkuInfo([ [ 'sku_id', '=', $launch_info[ 'sku_id' ] ] ], 'stock');
- $stock = $goods_sku_stock[ 'data' ][ 'stock' ];
- if ($stock <= 0) {
- model('promotion_bargain_launch')->rollback();
- return $this->error('', '库存不足');
- }
- $member_info = model('member')->getInfo([ [ 'site_id', '=', $site_id ], [ 'member_id', '=', $member_id ] ], 'nickname,headimg');
- if (empty($member_info)) {
- model('promotion_bargain_launch')->rollback();
- return $this->error('', '未获取到会员信息');
- }
- //区分新老用户
- $start_time = time();
- $end_time = date('Y-m-d H:i:s', strtotime('-' . $launch_info[ 'distinguish' ] . ' day'));
- $member_info_data = model('member')->getInfo([ [ 'site_id', '=', $launch_info[ 'site_id' ] ], [ 'member_id', '=', $member_id ], [ 'reg_time', 'between', [ date_to_time($end_time), $start_time ] ] ], 'member_id');
- $is_first = model('promotion_bargain_record')->getCount([ [ 'launch_id', '=', $launch_id ] ], 'id');
- $is_first_member = model('promotion_bargain_record')->getCount([ [ 'member_id', '=', $member_id ] ], 'id');
- if (!$is_first) {
- // 如果是首刀
- $bargain_money = $launch_info[ 'first_bargain_price' ] > 0 ? $launch_info[ 'first_bargain_price' ] : $this->bargainMoneyCalculate($launch_info, $member_info_data, $is_first_member);
- } else {
- $is_exist = model('promotion_bargain_record')->getCount([ [ 'launch_id', '=', $launch_id ], [ 'member_id', '=', $member_id ] ], 'id');
- if ($is_exist) {
- model('promotion_bargain_launch')->rollback();
- return $this->error('', '您已帮好友砍过价了!');
- }
- $bargain_money = $this->bargainMoneyCalculate($launch_info, $member_info_data, $is_first_member);
- }
- if (( $launch_info[ 'curr_price' ] - $bargain_money ) < $launch_info[ 'floor_price' ]) {
- $bargain_money = $launch_info[ 'curr_price' ] - $launch_info[ 'floor_price' ];
- }
- if ($bargain_money <= 0) {
- model('promotion_bargain_launch')->rollback();
- return $this->error();
- }
- $data = [
- 'launch_id' => $launch_id,
- 'member_id' => $member_id,
- 'nickname' => $member_info[ 'nickname' ],
- 'headimg' => $member_info[ 'headimg' ],
- 'money' => $bargain_money,
- 'bargain_time' => time()
- ];
- model('promotion_bargain_record')->add($data);
- // 砍价人数自增
- model('promotion_bargain_launch')->setInc([ [ 'launch_id', '=', $launch_id ] ], 'curr_num');
- // 当前砍价金额自减
- model('promotion_bargain_launch')->setDec([ [ 'launch_id', '=', $launch_id ] ], 'curr_price', $bargain_money);
- // 砍价状态
- $status = 0;
- if (( (float) $launch_info[ 'curr_price' ] - (float) $bargain_money ) <= ( (float) $launch_info[ 'floor_price' ] )) {
- model('promotion_bargain_launch')->update([ 'status' => 1, 'end_time' => time() ], [ [ 'launch_id', '=', $launch_id ] ]);
- $status = 1;
- $message_model = new Message();
- // 发送消息
- $param = [ 'keywords' => 'BARGAIN_COMPLETE', 'launch_id' => $launch_id, 'site_id' => $launch_info[ 'site_id' ] ];
- $message_model->sendMessage($param);
- }
- model('promotion_bargain_launch')->commit();
- return $this->success([ 'bargain_money' => sprintf("%.2f", $bargain_money), 'status' => $status ]);
- } catch (\Exception $e) {
- model('promotion_bargain_launch')->rollback();
- return $this->error('', $e->getMessage());
- }
- }
- /**
- * 砍价金额计算
- * @param $data
- */
- private function bargainMoneyCalculate($data, $member_info, $is_first_member)
- {
- $bargain_money = 0;
- $bargain_num = $data[ 'first_bargain_price' ] > 0 ? $data[ 'need_num' ] - 1 : $data[ 'need_num' ];
- $bargain_max_num = $data[ 'bargain_max_num' ] ? ( $data[ 'first_bargain_price' ] > 0 ? $data[ 'bargain_max_num' ] - 1 : $data[ 'bargain_max_num' ] ) : 0;
- //平均砍价金额
- $average_bargain_money = ( $data[ 'price' ] - $data[ 'floor_price' ] - $data[ 'first_bargain_price' ] ) / $bargain_num;
- $need_money = $data[ 'curr_price' ] - $data[ 'floor_price' ]; // 剩余需砍金额
- if ($need_money <= 0.01) return 0.01;
- $rate = 0.5;
- if (!empty($bargain_max_num)) $rate = ( $bargain_max_num - $bargain_num ) / $bargain_max_num;
- if (!$data[ 'buy_type' ] && $data[ 'bargain_type' ] == 1) {
- if ($bargain_max_num && ( $data[ 'curr_num' ] + 1 ) >= $data[ 'bargain_max_num' ]) return $need_money;
- //帮砍随机金额,任意金额可购买
- $bargain_money = round(mt_rand(( $average_bargain_money * 100 ) - ( $average_bargain_money * $rate * 100 ), $average_bargain_money * 100), 2);
- $bargain_money /= 100;
- } else if ($data[ 'buy_type' ] && $data[ 'bargain_type' ] == 1) {
- //随机绑砍,指定金额购买
- $need_num = $data[ 'need_num' ] - $data[ 'curr_num' ]; // 剩余需帮砍人数
- if ($need_num > 0) {
- if ($data[ 'is_differ_new_user' ] && $member_info && empty($is_first_member)) {
- $bargain_money = mt_rand($data[ 'new_low' ], ( round(( $need_money / $need_num ), 2) * 100 ));
- } else {
- if ($data[ 'is_differ_new_user' ]) {
- $bargain_money = mt_rand(1, ( $data[ 'aged_tall' ] * 100 ));
- } else {
- $bargain_money = mt_rand(1, ( round(( $need_money / $need_num ), 2) * 100 ));
- }
- }
- } else {
- if ($bargain_max_num && ( $data[ 'curr_num' ] + 1 ) >= $data[ 'bargain_max_num' ]) {
- $bargain_money = $need_money * 100;
- } else {
- if ($data[ 'is_differ_new_user' ] && $member_info && empty($is_first_member)) {
- $bargain_money = mt_rand(1, ( $data[ 'aged_tall' ] * 100 ));
- } else {
- $bargain_money = mt_rand(1, ( $need_money * 100 ));
- }
- }
- }
- $bargain_money = $bargain_money / 100;
- } else {
- if (( $data[ 'curr_num' ] + 1 ) >= $data[ 'need_num' ]) return $need_money;
- $bargain_money = round(mt_rand(( $average_bargain_money - $average_bargain_money * ( 1 - $rate ) ) * 100, ( $average_bargain_money + $average_bargain_money * ( 1 - $rate ) ) * 100), 2);
- $bargain_money /= 100;
- }
- return $bargain_money;
- }
- /**
- * 关闭到了时间的砍价
- * @param $launch_id
- */
- public function cronCloseBargainLaunch($launch_id)
- {
- $launch_info = model('promotion_bargain_launch')->getInfo([ [ 'launch_id', '=', $launch_id ], [ 'status', '=', 0 ] ]);
- if (!empty($launch_info)) {
- if ($launch_info[ 'curr_price' ] == $launch_info[ 'floor_price' ]) {
- $data = [ 'status' => 1 ];
- } else {
- // 未砍到低价都算失败
- $data = [ 'status' => 2 ];
- }
- model('promotion_bargain_launch')->update($data, [ [ 'launch_id', '=', $launch_id ], [ 'status', '=', 0 ] ]);
- }
- }
- /**
- * 商品营销活动标识
- * @param $discount_id
- * @param int $sku_id
- */
- private function modifyPromotionAddon($bargain_id, $is_delete = false)
- {
- $goods = new Goods();
- $condition = [
- [ 'bargain_id', '=', $bargain_id ]
- ];
- $goods_id = model('promotion_bargain')->getValue($condition, 'goods_id');
- $goods->modifyPromotionAddon($goods_id, [ 'bargain' => $bargain_id ], $is_delete);
- }
- /**
- * 判断规格值是否禁用
- * @param $bargain_id
- * @param $site_id
- * @param $goods
- * @return false|string
- */
- public function getGoodsSpecFormat($bargain_id, $site_id, $goods_spec_format = '', $sku_id = 0)
- {
- //获取活动参与的商品sku_ids
- $sku_ids = model('promotion_bargain_goods')->getColumn([ [ 'bargain_id', '=', $bargain_id ], [ 'site_id', '=', $site_id ] ], 'sku_id');
- $goods_model = new Goods();
- if ($sku_id == 0) {
- $res = $goods_model->getGoodsSpecFormat($sku_ids, $goods_spec_format);
- } else {
- $res = $goods_model->getEmptyGoodsSpecFormat($sku_ids, $sku_id);
- }
- return $res;
- }
- public function orderPay($param)
- {
- //获取砍价id
- $bargain_id = model('promotion_bargain_launch')->getValue([ [ 'order_id', '=', $param[ 'order_id' ] ] ], 'bargain_id');
- if ($bargain_id != 0) {
- //更新砍价销量
- model('promotion_bargain')->setInc([ [ 'bargain_id', '=', $bargain_id ] ], 'sale_num');
- //获取sku_id
- $sku_id = model('order_goods')->getValue([ [ 'order_id', '=', $param[ 'order_id' ] ] ], 'sku_id');
- if ($sku_id != 0) {
- model('promotion_bargain_goods')->setInc([ [ 'bargain_id', '=', $bargain_id ], [ 'sku_id', '=', $sku_id ] ], 'sale_num');
- }
- }
- return $this->success();
- }
- /**
- * 订单关闭
- * @param $param
- * @return array
- */
- public function orderClose($param)
- {
- //获取砍价id
- $bargain_info = model('promotion_bargain_launch')->getInfo([ [ 'order_id', '=', $param[ 'order_id' ] ] ], 'bargain_id,sku_id');
- if (!empty($bargain_info)) {
- $num = model('order_goods')->getValue([ [ 'order_id', '=', $param[ 'order_id' ] ], [ 'sku_id', '=', $bargain_info[ 'sku_id' ] ] ], 'num');
- $param = [
- 'bargain_id' => $bargain_info[ 'bargain_id' ],
- 'sku_id' => $bargain_info[ 'sku_id' ],
- 'num' => $num
- ];
- $this->incStock($param);
- }
- return $this->success();
- }
- /**
- * 订单退款
- * @param $param
- * @return array
- */
- public function orderGoodsRefund($param)
- {
- if ($param[ 'delivery_status' ] == Order::DELIVERY_WAIT) {
- $order_info = model('order')->getInfo([ [ 'order_id', '=', $param[ 'order_id' ] ] ], 'promotion_type');
- if (!empty($order_info) && $order_info[ 'promotion_type' ] == 'bargain') {
- $bargain_info = model('promotion_bargain_launch')->getInfo([ [ 'order_id', '=', $param[ 'order_id' ] ] ], 'bargain_id,sku_id');
- if (!empty($bargain_info)) {
- $param = [
- 'bargain_id' => $bargain_info[ 'bargain_id' ],
- 'sku_id' => $bargain_info[ 'sku_id' ],
- 'num' => $param[ "num" ]
- ];
- $this->incStock($param);
- model('promotion_bargain')->setDec([ [ 'bargain_id', '=', $bargain_info[ 'bargain_id' ] ] ], 'sale_num');
- model('promotion_bargain_goods')->setDec([ [ 'bargain_id', '=', $bargain_info[ 'bargain_id' ] ], [ 'sku_id', '=', $bargain_info[ 'sku_id' ] ] ], 'sale_num');
- }
- }
- }
- return $this->success();
- }
- /**
- * 获取用户正在砍价中的商品
- * @param $member_id
- * @return array
- */
- public function getBargainingGoodsId($member_id)
- {
- $list = model('promotion_bargain_launch')->getList([ [ 'member_id', '=', $member_id ], [ 'status', '=', 0 ] ], 'goods_id', '', 'a', [], 'goods_id');
- $goods_id = [];
- if (!empty($list)) $goods_id = array_column($list, 'goods_id');
- return $goods_id;
- }
- /**
- * 增加库存
- * @param $param
- */
- public function incStock($param)
- {
- $condition = array (
- [ "sku_id", "=", $param[ "sku_id" ] ],
- [ "bargain_id", "=", $param[ "bargain_id" ] ],
- );
- $num = $param[ "num" ];
- $sku_info = model("promotion_bargain_goods")->getInfo($condition, "goods_id,bargain_stock");
- if (empty($sku_info))
- return $this->error(-1, "");
- //编辑sku库存
- $result = model("promotion_bargain_goods")->setInc($condition, "bargain_stock", $num);
- return $this->success($result);
- }
- /**
- * 减少库存
- * @param $param
- */
- public function decStock($param)
- {
- $num = $param[ "num" ];
- $condition = array (
- [ "sku_id", "=", $param[ "sku_id" ] ],
- [ "bargain_id", "=", $param[ "bargain_id" ] ],
- );
- $sku_info = Db::name("promotion_bargain_goods")->where($condition)->field("goods_id,bargain_stock,bargain_name")->lock(true)->find();
- if (empty($sku_info)) {
- return $this->error();
- }
- if ($sku_info[ "bargain_stock" ] < $num) {
- return $this->error('', $sku_info[ "bargain_name" ] . "库存不足!");
- }
- //编辑sku库存
- $result = model("promotion_bargain_goods")->setDec($condition, "bargain_stock", $num);
- if ($result === false) {
- return $this->error();
- }
- return $this->success($result);
- }
- /**
- * 商品用到的分类
- * @param $condition
- * @return array
- */
- public function getGoodsCategoryIds($condition)
- {
- $cache_name = "shop_bargain_goods_category_" . md5(json_encode($condition));
- $cache_time = 60;
- $cache_res = Cache::get($cache_name);
- if (empty($cache_res) || time() - $cache_res[ 'time' ] > $cache_time) {
- $list = Db::name('promotion_bargain')
- ->alias('pb')
- ->join('goods g', 'pb.goods_id = g.goods_id', 'inner')
- ->where($condition)
- ->group('g.category_id')
- ->column('g.category_id');
- $category_ids = trim(join('0', $list), ',');
- $category_id_arr = array_unique(explode(',', $category_ids));
- Cache::set($cache_name, [ 'time' => time(), 'data' => $category_id_arr ]);
- } else {
- $category_id_arr = $cache_res[ 'data' ];
- }
- return $this->success($category_id_arr);
- }
- public function urlQrcode($page, $qrcode_param, $promotion_type, $site_id)
- {
- $params = [
- 'site_id' => $site_id,
- 'data' => $qrcode_param,
- 'page' => $page,
- 'promotion_type' => $promotion_type,
- 'h5_path' => $page . '?b_id=' . $qrcode_param[ 'b_id' ],
- 'qrcode_path' => 'upload/qrcode/bargain',
- 'qrcode_name' => 'bargain_qrcode_' . $promotion_type . '_' . $qrcode_param[ 'b_id' ] . '_' . $site_id
- ];
- $solitaire = event('ExtensionInformation', $params, true);
- return $this->success($solitaire);
- }
- /**
- * 浏览量增加
- * @param $condition
- * @return array
- * @throws \think\db\exception\DbException
- */
- public function bargainBrowseInc($condition)
- {
- $res = model('promotion_bargain')->setInc($condition, 'browse_num');
- return $this->success($res);
- }
- /**
- * 分享量增加
- * @param $condition
- * @return array
- * @throws \think\db\exception\DbException
- */
- public function bargainShareInc($condition)
- {
- $res = model('promotion_bargain')->setInc($condition, 'share_num');
- return $this->success($res);
- }
- /**
- * 砍价成功
- * @param $data
- */
- public function bargainCompleteMessage($data)
- {
- //发送短信
- $sms_model = new Sms();
- $launch_id = $data[ "launch_id" ];
- $launch_info = model("promotion_bargain_launch")->getInfo([ [ "launch_id", "=", $launch_id ] ]);
- $member_model = new Member();
- $member_info_result = $member_model->getMemberInfo([ [ "member_id", "=", $launch_info[ "member_id" ] ] ]);
- $member_info = $member_info_result[ "data" ];
- $var_parse = array (
- "sku_name" => $launch_info[ "sku_name" ],//商品名称
- );
- $data[ "sms_account" ] = $member_info[ "mobile" ];//手机号
- $data[ "var_parse" ] = $var_parse;
- // Log::write('bargainCompleteMessage-sms-' . json_encode($data));
- $sms_model->sendMessage($data);
- if (!empty($member_info) && !empty($member_info[ "wx_openid" ])) {
- $wechat_model = new WechatMessage();
- $data[ "openid" ] = $member_info[ "wx_openid" ];
- $data[ "template_data" ] = [
- 'keyword1' => str_sub($launch_info[ 'sku_name' ]),
- 'keyword2' => $launch_info[ 'price' ],
- 'keyword3' => $launch_info[ 'floor_price' ],
- 'keyword4' => time_to_date($launch_info[ 'end_time' ]),
- ];
- $data[ "page" ] = 'pages_promotion/bargain/detail?l_id=' . $launch_info[ 'launch_id' ] . '&b_id=' . $launch_info[ 'bargain_id' ];
- // Log::write('bargainCompleteMessage-wechat-' . json_encode($data));
- $wechat_model->sendMessage($data);
- }
- //发送订阅消息
- if (!empty($member_info) && !empty($member_info[ "weapp_openid" ])) {
- $weapp_model = new WeappMessage();
- $data[ "openid" ] = $member_info[ "weapp_openid" ];
- $data[ "template_data" ] = [
- 'thing1' => [
- 'value' => str_sub($launch_info[ 'sku_name' ])
- ],
- 'amount2' => [
- 'value' => $launch_info[ 'price' ]
- ],
- 'amount8' => [
- 'value' => $launch_info[ 'floor_price' ]
- ],
- 'time3' => [
- 'value' => time_to_date($launch_info[ 'end_time' ])
- ],
- ];
- $data[ "page" ] = 'pages_promotion/bargain/detail?l_id=' . $launch_info[ 'launch_id' ] . '&b_id=' . $launch_info[ 'bargain_id' ];
- // Log::write('bargainCompleteMessage-wechat-' . json_encode($data));
- $weapp_model->sendMessage($data);
- }
- }
- }
|