request->isPost()) { $repo = BusinessRepository::getInstance(); $keyword = $this->request->param('keyword/s', ''); $page = $this->request->param('page/d', 1); $size = $this->request->param('size/d', 30); $whereMap = [ ["a.state", "=", BusinessModel::state_on], ["b.type", "=", Account::type_business] ]; $orders = ['a.id' => 'desc']; if (!empty($keyword)) { $whereMap[] = ['b.nick_name|a.business_name|a.business_subtitle', 'like', "%$keyword%"]; } //如果是渠道商或者工作人员 只查看自己的下级商家 if(Member::is_agency($this->auth['roles'])){ $whereMap[] = ['a.agency_code', '=', $this->auth['business_code']]; } $list = $repo->businessList($whereMap, $page, $size, $orders); $list["list"]->each(function ($item) { //得到当前商家的所有签到券 $date = date("Y-m-d H:i:s"); //签到券总数 $item->coupon_total_count = CouponMain::where(["business_code" => $item->business_code])->sum("count"); //进行中签到券总数 $item->coupon_doing_count = CouponMain::where(["business_code" => $item->business_code]) ->whereTime("start_time", "<", $date) ->whereTime("end_time", ">", $date) ->where("status", CouponMain::status_on) ->where("on_shelf", CouponMain::on_shelf_on) ->sum("count"); //进行中签到券总数 $item->coupon_receive_count = CouponMain::where(["business_code" => $item->business_code])->sum("received_count"); //过期未使用签到券总数 $item->coupon_be_overdue_count = Coupon::where(["business_code" => $item->business_code]) ->where("is_verificated", "=", Coupon::is_verificated_off) ->whereTime("end_time", "<", $date) ->count(); //已使用签到券总数 $item->coupon_used_count = Coupon::where(["business_code" => $item->business_code]) ->where("is_verificated", "=", Coupon::is_verificated_on) ->count(); //产生的总收益数 $item->coupon_profit_count = BusinessRepository::getInstance()->businessProfitTotal( $item->business_code); //商家充值总额 $item->recharge_total_money = $item->total_recharge; }); return $this->json(0, 'success', $list); } //商家不能指派代理商 $roles = explode(",", $this->auth['roles']); $this->data["isAdmin"] = in_array(Member::MANAGER_ROLE_ID, $roles); return $this->view(); } /** * 商家签到券列表 * * @return Json|View * @throws Exception */ public function businessCouponList() { $businessCode = input("business_code/s", ""); if ($this->request->isPost()) { event('CouponStatusCheck'); $repo = BusinessRepository::getInstance(); $keyword = $this->request->param('keyword/s', ''); $page = $this->request->param('page/d', 1); $size = $this->request->param('size/d', 30); $whereMap = ["business_code" => $businessCode]; if (!empty($keyword)) { $whereMap[] = ['name', 'like', "%$keyword%"]; } $list = $repo->businessCouponList($whereMap, $page, $size, ["create_time" => "desc", "id" => "desc"]); return $this->json(0, 'success', $list); } $this->data["businessCode"] = $businessCode; return $this->view(); } /** * 商家扣费记录列表 * * @return Json|View * @throws Exception */ public function businessDeductionList() { $businessCode = input("business_code/s", ""); if ($this->request->isPost()) { $repo = BusinessRepository::getInstance(); $keyword = $this->request->param('keyword/s', ''); $page = $this->request->param('page/d', 1); $size = $this->request->param('size/d', 30); $whereMap = ["business_code" => $businessCode]; if (!empty($keyword)) { $whereMap[] = ['reason', 'like', "%$keyword%"]; } $list = $repo->businessDeductionList($whereMap, $page, $size, ["create_time" => "desc", "id" => "desc"]); return $this->json(0, 'success', $list); } $this->data["businessCode"] = $businessCode; return $this->view(); } /** * 商家充值记录列表 * * @return Json|View * @throws Exception */ public function businessRechargeList() { $businessCode = input("business_code/s", ""); if ($this->request->isPost()) { $repo = BusinessRepository::getInstance(); $keyword = $this->request->param('keyword/s', ''); $page = $this->request->param('page/d', 1); $size = $this->request->param('size/d', 30); $whereMap = ["business_code" => $businessCode]; if (!empty($keyword)) { $whereMap[] = ['order_num', 'like', "%$keyword%"]; } $list = $repo->businessRechargeList($whereMap, $page, $size, ["create_time" => "desc", "id" => "desc"]); return $this->json(0, 'success', $list); } $this->data["businessCode"] = $businessCode; return $this->view(); } /** * 商家详情 * * @return Json|View * @throws Exception */ public function businessDetail() { $businessCode = input("business_code/s", ""); $business = BusinessRepository::getInstance()->findOneByWhere(['code' => $businessCode]); if ($this->request->isPost()) { if(empty($business)){ return $this->json(4001,"商家不存在"); } $item = input('post.'); $validate = $this->validateByApi($item, [ 'business_name|商家名称' => 'require|max:100', 'business_subtitle|商家简称' => 'max:100', 'lat|纬度' => 'require', 'lng|经度' => 'require', 'province|省市区' => 'require', 'city|省市区' => 'require', 'county|省市区' => 'require', 'business_address|地址' => 'require|min:3', 'contact_name|联系人' => 'require|min:1', 'contact_phone|联系电话' => 'require|mobile', 'state|审核状态' => 'require|in:0,1,2', 'enable|启用状态' => 'require|in:0,1', 'type|分类' => 'require|number', //'characteristic|特色' => 'max:100', // 'intro|介绍' => 'require', 'business_circle_id|商圈' => 'require', 'background|背景图' => 'require', 'model|商家模式' => 'require', //'score|评分' => 'require|in:1,2,3,4,5', 'reason|驳回原因' => 'max:100', ]); if ($validate !== true) { return $validate; } if($item["model"] == BusinessModel::model_time_limit){ $validateModel = $this->validateByApi($item, [ 'time_limit_start|时限商家模式【开始时间】' => 'require|date', 'time_limit_end|时限商家模式【结束时间】' => 'require|date|after:'.date("Y-m-d",strtotime("+1 day")), 'time_limit_release_count|时限商家模式可发布签到券个数' => 'require|>:0', ]); if ($validateModel !== true) { return $validateModel; } } Db::startTrans(); try { $business->save($item); //修改所属的签到券 CouponRepository::getInstance()->updateCouponMainByBusinessCode($business["code"],[ "business_circle_id"=>$item["business_circle_id"], "business_type"=>$item["type"], ]); Db::commit(); return $this->json(); } catch (ValidateException $e) { Db::rollback(); return $this->json(4001, $e->getError()); } } if (empty($business)) { return $this->error("商家不存在"); } $this->data["item"] = $business; $this->data["type"] = CategoryModel::getByGroup(); $this->data["businessCircle"] = BusinessCircleModel::getList(); $this->data["model"] = BusinessModel::allModel(); $this->data["model_ordinary"] = BusinessModel::model_ordinary; $this->data["model_time_limit"] = BusinessModel::model_time_limit; return $this->view(); } /** * 商家认证列表 * * @return Json|View * @throws Exception */ public function businessWaitList() { if ($this->request->isPost()) { $repo = BusinessRepository::getInstance(); $keyword = $this->request->param('keyword/s', ''); $page = $this->request->param('page/d', 1); $size = $this->request->param('size/d', 30); $whereMap = [ ["a.state", "in", [BusinessModel::state_reviewing, BusinessModel::state_off]], ["b.type", "=", Account::type_consumer] ]; //如果是渠道商或者工作人员 只查看自己的下级商家 if(Member::is_agency($this->auth['roles'])){ $whereMap[] = ['a.agency_code', '=', $this->auth['business_code']]; } $orders = ['a.id' => 'desc']; if (!empty($keyword)) { $whereMap[] = ['b.nick_name|a.business_name', 'like', "%$keyword%"]; } $list = $repo->businessList($whereMap, $page, $size, $orders); return $this->json(0, 'success', $list); } return $this->view(); } /** * 执行商家认证 * * @return Json|View * @throws Exception */ public function businessWait() { if ($this->request->isPost()) { $businessCode = input("business_code/s", ""); $state = input("state/d", 0); $reason = input("reason/s", ''); if (!in_array($state, [BusinessModel::state_off, BusinessModel::state_on])) { return $this->json(4001, "错误的审核状态"); } $business = BusinessRepository::getInstance()->findOneByWhere(["code" => $businessCode]); if (empty($business)) { return $this->json(4001, "商家不存在"); } if ($business['state'] != BusinessModel::state_reviewing) { return $this->json(4001, "商家当前状态不可审核"); } $account = AccountRepository::getInstance()->findOneByWhere(["business_code" => $businessCode]); if (empty($account)) { return $this->json(4001, "关联用户不存在"); } Db::startTrans(); try { $business->save(["state" => $state, "reason" => $reason]); //通过 就改变用户为商家 if($state == BusinessModel::state_on){ $account->save(["type" => Account::type_business]); } Db::commit(); return $this->json(); } catch (RepositoryException $e) { Db::rollback(); return $this->json("5001", "审核失败"); } catch (\think\Exception $e) { Db::rollback(); return $this->json("5002", "审核失败"); } } } /** * 给商家指派代理商 * * @return Json|View * @throws Exception */ public function assign() { $businessCode = input("business_code/s", ""); $business = BusinessRepository::getInstance()->findOneByWhere(["code" => $businessCode]); if ($this->request->isPost()) { $anentCode = input("agency_code/s", ""); if (empty($business)) { return $this->json(4001, "商家不存在"); } Db::startTrans(); try { $business->save([ "agency_code" => $anentCode, "is_assign" => empty($anentCode) ? BusinessModel::COMMON_OFF : BusinessModel::COMMON_ON ]); Db::commit(); return $this->json(); } catch (RepositoryException $e) { Db::rollback(); return $this->json("5001", "指派失败"); } catch (\think\Exception $e) { Db::rollback(); return $this->json("5002", "指派失败"); } } if (empty($business)) { return $this->error("商家不存在"); } $this->data["agent"] = Member::getAgentAll(); $this->data["businessCode"] = $businessCode; $this->data["business"] = $business; return $this->view(); } /** * 代为充值 * * @throws Exception */ public function rechargeBehalf() { $businessCode = input("business_code/s", ""); $business = BusinessRepository::getInstance()->findOneByWhere(["code" => $businessCode]); if ($this->request->isPost()) { $money = input("money/f", 0, "abs"); if ($money <= 0) { return $this->json(4001, "金额错误"); } $money = floor($money * 100) / 100; if (empty($business)) { return $this->json(4001, "商家不存在"); } Db::startTrans(); try { //创建充值订单 if (!$order = RechargeRepository::getInstance()->adminCreateOrder($businessCode, $money)) { throw new RepositoryException('订单创建失败,请稍后重试'); } //生成支付 $res = WechatPay::getInstance()->order->unify([ 'body' => '商家充值', 'out_trade_no' => $order->order_num, 'total_fee' => $money * 100, 'trade_type' => 'NATIVE', 'product_id' => $order->id, 'notify_url' => $this->request->domain() . "/api/recharge/notify.html", ]); if (!isset($res['code_url'])) { throw new RepositoryException('订单创建失败,请稍后重试'); } Db::commit(); return $this->json(0, "success", ["order_num" => $order->order_num, "code_url" => $res['code_url']]); } catch (RepositoryException $e) { Db::rollback(); return $this->json("5001", $e->getMessage()); } catch (Exception $e) { Db::rollback(); return $this->json("5002", $e->getMessage()); } } if (empty($business)) { return $this->error("商家不存在"); } $this->data["businessCode"] = $businessCode; return $this->view(); } /** * 下载商家核销二维码 * */ public function downloadWriteOffCode() { $businessCode = input("business_code/s"); if(empty($businessCode)){ return $this->error("商家信息错误"); } $qrData = $this->request->domain() . "/business_code_to_coupon_list?business_code=" . $businessCode; $w = 3000;//尺寸 $logoImg = app()->getRootPath().'public/static/images/icon-logo.jpg'; $result = Builder::create() ->writer(new PngWriter()) ->writerOptions([]) ->data($qrData) ->encoding(new Encoding('UTF-8')) ->errorCorrectionLevel(new ErrorCorrectionLevelHigh()) ->size($w) ->margin(10) ->roundBlockSizeMode(new RoundBlockSizeModeMargin()) ->logoPath($logoImg) ->logoResizeToHeight(ceil($w/6)) ->logoResizeToWidth(ceil($w/6)) ->logoPunchoutBackground(true) ->build(); header( "Content-type: image/jpg" ); $path = "/storage/business/" . $businessCode . ".jpg"; $result->saveToFile( public_path() . $path); return download(public_path() . $path,$businessCode); } }