// +---------------------------------------------------------------------- declare (strict_types = 1); namespace app\store\controller; use app\common\model\kjactivity\KjActivity as KjActivityModel; use app\common\model\kjactivity\KjActivityJoin as KjActivityJoinModel; use app\common\model\kjactivity\KjActivityGood as KjActivityGoodModel; use app\common\model\kjactivity\KjActivityHelp as KjActivityHelpModel; use app\common\service\Export as ExportService; use think\facade\Validate; use app\common\model\Goods; use app\common\model\GoodsSku; use app\common\library\helper; use think\facade\Db; /** * 活动中心 ▸ 砍价管理 * Class Files * @package app\store\controller */ class KjActivity extends Controller { /** * 添加 * @return array|string */ public function add() { // 新增记录 $model = new KjActivityModel; $post = $this->postForm(); $post['code'] = rand(10000000,99999999); $c = $this->checkTimeRange($post); if($c){ return $this->renderError("已存在同一时间活动id:".$c->id??0); } if (isset($post['role']) && $post['role'] == 1){ $post['audit_status_zg'] = 10; $post['is_up'] = 1; }else{ $post['audit_status_zg'] = 0; } $arr = array_column($post['goods'],'limit_stock','goods_id'); $goods_id = helper::getArrayColumn($post['goods'],'goods_id'); $goods = \app\store\model\Goods::whereIn('goods_id',$goods_id)->select(); foreach ($goods as $good){ if(isset($arr[$good['goods_id']]) && $arr[$good['goods_id']]<=0){ return $this->renderError('商品 '.$good['goods_name'].' 库存不能设置为0'); } if(isset($arr[$good['goods_id']]) && $good['stock_total']<$arr[$good['goods_id']]){ return $this->renderError('商品 '.$good['goods_name'].' 库存不足'); } } if ($model->addOne($post)&&$model->getError()=='') { return $this->renderSuccess('添加成功'); } return $this->renderError($model->getError() ?: '添加失败'); } /** * 时间和现有活动是否重叠 * @param $data * @return FullSendActivity|array|\think\Model|null * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function checkTimeRange($data){ $id = $data['id']??0; return KjActivityModel::where('is_up',1)->where('id',"<>",$id)->where(function ($s) use ($data){ $s->whereOr(function($query) use ($data){ $query->whereBetweenTime('start_time', $data['start_time'], $data['end_time']); })->whereOr(function ($query) use ($data){ $query->whereBetweenTime('end_time',$data['start_time'],$data['end_time']); })->whereOr(function ($query) use ($data){ $query->where('start_time','<',$data['start_time'])->where('end_time','>',$data['end_time']); }); })->find(); } public function edit(){ // 新增记录 $model = new KjActivityModel; $post = $this->postForm(); if (isset($post['role']) && $post['role'] == 1){ $post['audit_status_zg'] = 10; $post['is_up'] = 1; }else{ $post['audit_status_zg'] = 0; } $c = $this->checkTimeRange($post); if($c){ return $this->renderError("已存在同一时间活动id:".$c->id); } $model = KjActivityModel::where('id',$post['id'])->find(); $arr = array_column($post['goods'],'limit_stock','goods_id'); $goods_id = helper::getArrayColumn($post['goods'],'goods_id'); $goods = \app\store\model\Goods::whereIn('goods_id',$goods_id)->select(); foreach ($goods as $good){ if(isset($arr[$good['goods_id']]) && $arr[$good['goods_id']]<=0){ return $this->renderError('商品 '.$good['goods_name'].' 库存不能设置为0'); } $fullSendGoods = KjActivityGoodModel::where(['activity_id'=>$post['id'],'goods_id'=>$good['goods_id']])->find(); if(isset($arr[$good['goods_id']]) && $good['stock_total']<($arr[$good['goods_id']]-$fullSendGoods['purchase_stock'])){ return $this->renderError('商品 '.$good['goods_name'].' 库存不足'); } } if ($model->edit($post)&&$model->getError()=='') { return $this->renderSuccess('修改成功'); } return $this->renderError($model->getError() ?: '添加失败'); } /** * 审核 * @param int $coupon_id * @return array|bool */ public function audit() { // 确认审核 $postData = $this->postForm(); $model = KjActivityModel::where('id',$postData['id'])->find(); if(empty($model)){ return $this->renderError('找不到数据'); } unset($postData['id']); $res ='操作成功'; $audit_status = $postData['audit_status_zg']; if($audit_status==10){ $res = '已审核通过'; } if($audit_status==20){ $res = '已审核不通过'; } $postData['audit_time'] = Date("Y-m-d H:i:s",time()); $postData['audit_user'] = $this->store['user']['real_name']; if ($model->audit($postData)) { return $this->renderSuccess($postData,$res); } return $this->renderError($model->getError() ?: '操作失败'); } //活动详情 public function detail(int $id){ $detail = KjActivityModel::detail($id,['goods','his']); $newarr = []; $goods_ids = helper::getArrayColumn($detail['goods'],'goods_id'); $arr = \app\store\model\Goods::whereIn('goods_id',$goods_ids)->column('stock_total','goods_id'); foreach($detail['goods'] as &$item){ // 商品信息 $goods = Goods::detail($item['goods_id'], ['images' => ['file'], 'skuList' => ['image']]); if (empty($goods)) { $this->error = "商品信息错误"; continue; // return false; } if(isset($arr[$item['goods_id']])){ $item['stock_total'] = $arr[$item['goods_id']]; } $goodsInfo['goods_id'] = $item['goods_id']; $goodsInfo['limit_stock'] = $item['limit_stock']; $goodsInfo['residue_stock'] = $item['residue_stock']; $goodsInfo['goods_sku_id'] = $item['goods_sku_id']; $goodsInfo['goods_no'] = $goods['goods_no']; $goodsInfo['goods_images'] = helper::getArrayColumn($goods['images'], 'file'); // 商品主图 $goodsInfo['goods_image'] = current($goodsInfo['goods_images'])['preview_url']; $goodsInfo['image_id'] = current($goodsInfo['goods_images'])['file_id']; $goodsSku = GoodsSku::detail($item['goods_id'], $item['goods_sku_id']); // if(empty($goodsSku)) { // $this->error = "商品信息错误"; // continue; // return false; // } $goodsInfo['goods_price_min'] = $goods['goods_price_min']; // $goodsInfo['goods_price'] = $goodsSku['goods_price']; $goodsInfo['status'] = $goods['status']; $goodsInfo['goods_name'] = $goods['goods_name']; $goodsInfo['low_price'] = $item['low_price']; $goodsInfo['help_kj_up_cnt'] = $item['help_kj_up_cnt']; unset($goodsInfo['goods_images']); $newarr[] = $goodsInfo; } $detail['goods_list'] = $newarr; return $this->renderSuccess(compact('detail')); } /** * 启用 禁用 * @param int $coupon_id * @return array|bool */ public function down(int $id){ // 确认审核 // $postData = $this->postForm(); $model = KjActivityModel::where('id',$id)->find(); if(empty($model)){ return $this->renderError('找不到数据'); } if($model['is_up']==0){ return $this->renderError('已经作废了,不要重复操作'); } $postData['is_up'] = 0; $postData['end_time'] = Date("Y-m-d H:i:s",time()-1); if ($model->down($postData)) { return $this->renderSuccess($postData,'作废成功,活动已失效'); } return $this->renderError($model->getError() ?: '操作失败'); } //活动信息 public function activityinfo(int $activity_id){ $this->tj(); $activity = KjActivityModel::where('id',$activity_id)->find(); if(empty($activity)){ return $this->renderError("找不到信息"); } $kjgoods = KjActivityGoodModel::where('activity_id',$activity_id)->find(); $goods = Goods::detail($kjgoods['goods_id'],[]); $kjgoods['goods_name'] = $goods['goods_name']; $kjgoods['goods_price_min'] = $goods['goods_price_min']; $data['activity'] = $activity; $data['goods'] = $kjgoods; $join_cnt = KjActivityJoinModel::where('activity_id',$activity_id)->count(); $help_cnt = KjActivityHelpModel::where('activity_id',$activity_id)->count(); $submit_order_cnt = KjActivityJoinModel::where('activity_id',$activity_id)->where('is_submit_order',1)->count(); $is_pay_cnt = KjActivityJoinModel::where('activity_id',$activity_id)->where('is_pay',1)->count(); $kj_price_sum = KjActivityJoinModel::where('activity_id',$activity_id)->where('is_pay',1)->sum('order_price'); $tj['help_cnt'] = $help_cnt; $tj['join_cnt'] = $join_cnt; $tj['submit_order_cnt'] = $submit_order_cnt; $tj['is_pay_cnt'] = $is_pay_cnt; $tj['kj_price_sum'] = $kj_price_sum; $data['tj'] = $tj; return $this->renderSuccess(compact("data")); } // public function cancelForbidden($join_id){ KjActivityJoinModel::where("id",$join_id)->where('forbidden',1)->update(['forbidden'=>2]); return $this->renderSuccess(); } public function tj(){ $sql = 'select order_id from yoshop_order where order_id in (SELECT order_id FROM yoshop_kj_activity_join) and pay_status=20'; $result = Db::query($sql); $order_id_arr = []; foreach($result as $row){ $order_id_arr[] = $row['order_id']; } $orderstr = implode(',', $order_id_arr); if(!empty($order_id_arr)){ $sqlup = 'update yoshop_kj_activity_join set is_pay=1 where order_id in ('.$orderstr.')'; Db::query($sqlup); } } // public function joinlist(int $activity_id){ $model = new KjActivityJoinModel; $param = $this->request->param(); $param = array_merge($param,['activity_id'=>$activity_id]); $list = $model->getList($param); return $this->renderSuccess(compact('list')); } /** * 列表 * @return array * @throws \think\db\exception\DbException */ public function list() { $model = new KjActivityModel; $list = $model->getList($this->request->param()); return $this->renderSuccess(compact('list')); } }