diff --git a/app/controller/api/User.php b/app/controller/api/User.php index b743d18..7d77d31 100644 --- a/app/controller/api/User.php +++ b/app/controller/api/User.php @@ -74,7 +74,6 @@ class User extends Base 'create_time' => $nowDate, 'login_time' => $nowDate, 'type' => Account::type_consumer, // 默认为普通消费者 - 'state' => Account::state_default, 'nick_name' => $params['nick_name'] ?: generateDefaultNickName(), 'avatar_url' => $params['avatar_url'] ?: Account::DEFAULT_AVATAR, 'gender' => $params['gender'], diff --git a/app/controller/manager/Agency.php b/app/controller/manager/Agency.php index 4cdd530..7e85170 100644 --- a/app/controller/manager/Agency.php +++ b/app/controller/manager/Agency.php @@ -4,7 +4,6 @@ namespace app\controller\manager; use app\model\Business as BusinessModel; use app\model\Log; -use app\model\Member; use app\model\Member as MemberModel; use app\repository\BusinessRepository; use Exception; @@ -49,29 +48,71 @@ class Agency extends Base return $this->json(4002, '请输入正确的手机号码'); } - $item['roles'] = [Member::ANENT_ROLE_ID]; - $item['status'] = Member::COMMON_ON; + $item['roles'] = MemberModel::STAFF_ROLE_ID; + $item['status'] = MemberModel::COMMON_ON; + $item['pid'] = $this->auth["user_id"]; + $item['business_code'] = $this->auth["business_code"]; - $roles = []; - if ($item['roles']) { - $roles = $item['roles']; - $item['roles'] = implode(',', $item['roles']); - } + $roles = [MemberModel::STAFF_ROLE_ID]; Db::startTrans(); try { - - //如果关联商家 - if (!empty($item['business_code'])) { - $Business = BusinessRepository::getInstance()->findOneByWhere(["code" => $item['business_code']]); - if (empty($Business)) { - Db::rollback(); - return $this->json(4001, "指定商家不存在"); - } - $Business->save(["is_agency" => BusinessModel::COMMON_ON]); + $item['password'] = md5($item['password'] . $item['username']); + $member = MemberModel::create($item); + foreach ($roles as $role) { + Enforcer::addRoleForUser($member['id'], $role); } + Db::commit(); + return $this->json(); + } catch (ValidateException $e) { + Db::rollback(); + return $this->json(4001, $e->getError()); + } + } + + $this->data['roleJson'] = $this->roleJson(); + $this->data['business'] = BusinessRepository::getInstance()->getBusinessAll(); + + return $this->view(); + } + + /** + * 添加平台商 + * + * @return Json|View + * @throws Exception + */ + public function addChannel() + { + if ($this->request->isPost()) { + $item = input('post.'); + + $validate = $this->validateByApi($item, [ + 'username|用户名' => 'require|alphaDash|min:4|max:16|unique:member', + 'mobile|手机号' => 'require|unique:member', + 'nickname|昵称' => 'require|chsAlphaNum|min:2|max:10', + 'password|密码' => 'require|min:4|max:16', + 'remark|备注信息' => 'max:255', + ]); + + if ($validate !== true) { + return $validate; + } + + if (!checkMobile($item['mobile'])) { + return $this->json(4002, '请输入正确的手机号码'); + } + + $item['roles'] = MemberModel::ANENT_ROLE_ID; + $item['status'] = MemberModel::COMMON_ON; + $item['pid'] = 0; + $roles = [MemberModel::ANENT_ROLE_ID]; + + + Db::startTrans(); + try { $item['password'] = md5($item['password'] . $item['username']); $member = MemberModel::create($item); foreach ($roles as $role) { @@ -124,42 +165,11 @@ class Agency extends Base if (!checkMobile($item['mobile'])) { return $this->json(4002, '请输入正确的手机号码'); } - $item['roles'] = [Member::ANENT_ROLE_ID]; - $roles = []; - if ($item['roles']) { - $roles = $item['roles']; - $item['roles'] = implode(',', $item['roles']); - } - Db::startTrans(); try { - //之前关联的商家不为空 并且已经改变 吧之前的商家 从代理商变成普通商家 - if ($info['business_code'] != $item['business_code']) { - if (!empty($info['business_code'])) { - $oldBusiness = BusinessRepository::getInstance()->findOneByWhere(["code" => $info['business_code']]); - if (!empty($oldBusiness)) { - $oldBusiness->save(["is_agency" => BusinessModel::COMMON_OFF]); - } - } - //如果改变了关联商家 - if (!empty($item['business_code'])) { - $Business = BusinessRepository::getInstance()->findOneByWhere(["code" => $item['business_code']]); - if (empty($Business)) { - Db::rollback(); - return $this->json(4001, "指定商家不存在"); - } - $Business->save(["is_agency" => BusinessModel::COMMON_ON]); - } - } $info->save($item); - //删除所有角色 - Enforcer::deleteRolesForUser($id); - //新增角色 - foreach ($roles as $role) { - Enforcer::addRoleForUser($id, $role); - } Db::commit(); return $this->json(); } catch (ValidateException $e) { @@ -169,16 +179,85 @@ class Agency extends Base } $this->data['item'] = $info; - $this->data['roleJson'] = $this->roleJson(explode(',', $info['roles'])); + return $this->view(); + } + + /** + * 编辑 + * + * @return Json|View + * @throws DataNotFoundException + * @throws DbException + * @throws ModelNotFoundException + * @throws Exception + */ + public function editChannel() + { + $id = input('id/d', 0); + + if (!$info = MemberModel::findById($id)) { + return $this->json(4001, '记录不存在'); + } + + if ($this->request->isPost()) { + $item = input('post.'); + + $validate = $this->validateByApi($item, [ + 'mobile|手机号' => 'require|unique:member,mobile,' . $id, + 'nickname|昵称' => 'require|chsAlphaNum|min:2|max:10', + 'remark|备注信息' => 'max:255', + ]); + + if ($validate !== true) { + return $validate; + } + + if (!checkMobile($item['mobile'])) { + return $this->json(4002, '请输入正确的手机号码'); + } + + Db::startTrans(); + try { + //之前关联的商家不为空 并且已经改变 吧之前的商家 从代理商变成普通商家 + if ($info['business_code'] != $item['business_code']) { + if($info['business_code']!="_" ){ + $oldBusiness = BusinessRepository::getInstance()->findOneByWhere(["code" => $info['business_code']]); + if (!empty($oldBusiness)) { + $oldBusiness->save(["is_agency" => BusinessModel::COMMON_OFF]); + } + } + //如果改变了关联商家 + if($item['business_code']!="_"){ + $Business = BusinessRepository::getInstance()->findOneByWhere(["code" => $item['business_code']]); + if (empty($Business)) { + Db::rollback(); + return $this->json(4001, "指定商家不存在"); + } + $Business->save(["is_agency" => BusinessModel::COMMON_ON]); + } + + //修改下级工作人员的平台商号 + BusinessModel::where("pid",$info['id'])->update(["business_code"=>$item['business_code']]); + } + + $info->save($item); + Db::commit(); + return $this->json(); + } catch (ValidateException $e) { + Db::rollback(); + return $this->json(4001, $e->getError()); + } + } + + $this->data['item'] = $info; $this->data['business'] = BusinessRepository::getInstance()->getBusinessAll(); return $this->view(); } - /** - * 轮播图列表 + * 工作人员列表 * * @return Json|View * @throws Exception @@ -189,18 +268,86 @@ class Agency extends Base if ($this->request->isPost()) { $page = $this->request->param('page/d', 1); $size = $this->request->param('size/d', 30); - //只查询拥有渠道商的账号 - $whereMap = [['roles', "=", Member::ANENT_ROLE_ID], ['id', "<>", 1]]; + $whereMap = [['roles', "=", MemberModel::STAFF_ROLE_ID], ['id', "<>", 1]]; $orders = ['id' => 'asc']; - - $list = Member::findList($whereMap, [], $page, $size, null, $orders); - + //如果是渠道商或者工作人员 只查看自己的商家 + if (MemberModel::is_agency($this->auth['roles'])) { + $whereMap[] = ["pid", "=", $this->auth['user_id']]; + } + $list = MemberModel::findList($whereMap, [], $page, $size, null, $orders); return $this->json(0, 'success', $list); } return $this->view(); } + /** + * 渠道商列表 + * + * @return Json|View + * @throws Exception + */ + public function channelList() + { + if ($this->request->isPost()) { + $page = $this->request->param('page/d', 1); + $size = $this->request->param('size/d', 30); + //只查询拥有渠道商的账号 + $whereMap = [['roles', "=", MemberModel::ANENT_ROLE_ID], ['id', "<>", 1]]; + $orders = ['id' => 'asc']; + + $list = MemberModel::findList($whereMap, [], $page, $size, null, $orders); + + $list["list"]->each(function ($item) { + //管理的商家数 + $item->business_count = BusinessRepository::getInstance()->agencyHasBusinessCount($item['business_code']); + //管理的商家的优惠券数 + $item->coupon_count = BusinessRepository::getInstance()->agencyHasCouponCount($item['business_code']); + }); + return $this->json(0, 'success', $list); + } + return $this->view(); + } + + + /** + * 单个字段编辑 + * + * @return Json + * @throws DataNotFoundException + * @throws DbException + * @throws ModelNotFoundException + * @throws Exception + */ + public function modify(): Json + { + if ($this->request->isPost()) { + $item = input('post.'); + $validate = $this->validateByApi($item, [ + 'field' => 'require', + 'value' => 'require', + ]); + + if ($validate !== true) { + return $validate; + } + + if (!$info = MemberModel::findById($item['id'])) { + return $this->json(4001, '记录不存在'); + } + + $update = [$item['field'] => $item['value']]; + + + try { + $info->save($update); + return $this->json(); + } catch (ValidateException $e) { + return $this->json(4001, $e->getError()); + } + } + return $this->json(4000, '非法请求'); + } /** * 删除 @@ -214,6 +361,11 @@ class Agency extends Base if (empty($ids)) { $ids[] = input('post.id/d'); } + foreach ($ids as $id) { + if ($id == 1) { + return $this->json(5000, "错误的删除操作"); + } + } MemberModel::deleteByIds($ids); foreach ($ids as $id) { Enforcer::deleteRolesForUser($id); @@ -225,6 +377,36 @@ class Agency extends Base } + /** + * 删除 + * + * @return Json + */ + public function delChannel(): Json + { + if ($this->request->isPost()) { + $ids = input('post.ids/a', []); + if (empty($ids)) { + $ids[] = input('post.id/d'); + } + foreach ($ids as $id) { + if ($id == 1) { + return $this->json(5000, "错误的删除操作"); + } + if(MemberModel::hasStaff($id)){ + return $this->json(5000, "还存在员工,不能删除"); + } + } + MemberModel::deleteByIds($ids); + foreach ($ids as $id) { + Enforcer::deleteRolesForUser($id); + } + Log::write(get_class() . 'Del', 'del', '涉及到的ID为:' . implode(',', $ids)); + return $this->json(); + } + return $this->json(4001, '非法请求!'); + } + /** * 修改密码 * diff --git a/app/controller/manager/Area.php b/app/controller/manager/Area.php index ab6ca8c..932d13e 100644 --- a/app/controller/manager/Area.php +++ b/app/controller/manager/Area.php @@ -6,6 +6,7 @@ use app\repository\CmsRepository; use app\model\Area as AreaModel; +use think\exception\ValidateException; use think\response\Json; use think\response\View; @@ -36,4 +37,43 @@ class Area extends Base } return $this->view(); } + + /** + * 单个字段编辑 + * + * @return Json + * @throws DataNotFoundException + * @throws DbException + * @throws ModelNotFoundException + * @throws Exception + */ + public function modify(): Json + { + if ($this->request->isPost()) { + $item = input('post.'); + $validate = $this->validateByApi($item, [ + 'field' => 'require', + 'value' => 'require', + ]); + + if ($validate !== true) { + return $validate; + } + + if (!$info = AreaModel::findById($item['id'])) { + return $this->json(4001, '记录不存在'); + } + + $update = [$item['field'] => $item['value']]; + + try { + $info->save($update); + return $this->json(); + } catch (ValidateException $e) { + return $this->json(4001, $e->getError()); + } + } + return $this->json(4000, '非法请求'); + } + } \ No newline at end of file diff --git a/app/controller/manager/Business.php b/app/controller/manager/Business.php index bcb8c7d..94f7970 100644 --- a/app/controller/manager/Business.php +++ b/app/controller/manager/Business.php @@ -3,13 +3,14 @@ namespace app\controller\manager; use app\exception\RepositoryException; -use app\model\BusinessFlow; +use app\model\Account; use app\model\Coupon; use app\model\CouponMain; use app\model\Category as CategoryModel; use app\model\Business as BusinessModel; use app\model\Member; use app\model\BusinessCircle as BusinessCircleModel ; +use app\repository\AccountRepository; use app\repository\BusinessRepository; use app\repository\RechargeRepository; use app\service\wx\WechatPay; @@ -33,18 +34,20 @@ class Business extends Base public function index() { if ($this->request->isPost()) { - $model = new BusinessFlow(); - $repo = BusinessRepository::getInstance($model); + $repo = BusinessRepository::getInstance(); $keyword = $this->request->param('keyword/s', ''); $page = $this->request->param('page/d', 1); $size = $this->request->param('size/d', 30); - $whereMap = [["c.state", "=", BusinessModel::state_on]]; + $whereMap = [["a.state", "=", BusinessModel::state_on]]; $orders = ['a.id' => 'desc']; if (!empty($keyword)) { - $whereMap[] = ['b.nick_name|c.business_name', 'like', "%$keyword%"]; + $whereMap[] = ['b.nick_name|a.business_name', '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) { //得到当前商家的所有优惠券 @@ -74,6 +77,9 @@ class Business extends Base ->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; }); @@ -185,7 +191,7 @@ class Business extends Base public function businessDetail() { $businessCode = input("business_code/s", ""); - $business = $repo = BusinessRepository::getInstance()->findOneByWhere(['code' => $businessCode]); + $business = BusinessRepository::getInstance()->findOneByWhere(['code' => $businessCode]); if ($this->request->isPost()) { if(empty($business)){ return $this->json(4001,"商家不存在"); @@ -248,16 +254,22 @@ class Business extends Base public function businessWaitList() { if ($this->request->isPost()) { - $model = new BusinessFlow(); - $repo = BusinessRepository::getInstance($model); + + $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.state", "in", [BusinessModel::state_reviewing, BusinessModel::state_off]]]; - $orders = ['business.id' => 'desc']; + + + $whereMap = [["a.state", "in", [BusinessModel::state_reviewing, BusinessModel::state_off]]]; + //如果是渠道商或者工作人员 只查看自己的下级商家 + if(Member::is_agency($this->auth['roles'])){ + $whereMap[] = ['a.agency_code', '=', $this->auth['business_code']]; + } + $orders = ['a.id' => 'desc']; if (!empty($keyword)) { - $whereMap[] = ['account.nick_name|business.business_name', 'like', "%$keyword%"]; + $whereMap[] = ['b.nick_name|a.business_name', 'like', "%$keyword%"]; } $list = $repo->businessList($whereMap, $page, $size, $orders); @@ -280,6 +292,10 @@ class Business extends Base $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, "商家不存在"); @@ -287,12 +303,15 @@ class Business extends Base if ($business['state'] != BusinessModel::state_reviewing) { return $this->json(4001, "商家当前状态不可审核"); } - if (!in_array($state, [BusinessModel::state_off, BusinessModel::state_on])) { - 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]); + $account->save(["type" => Account::type_business]); Db::commit(); return $this->json(); } catch (RepositoryException $e) { diff --git a/app/controller/manager/BusinessCircle.php b/app/controller/manager/BusinessCircle.php index 2ca16dd..9b37231 100644 --- a/app/controller/manager/BusinessCircle.php +++ b/app/controller/manager/BusinessCircle.php @@ -4,6 +4,7 @@ namespace app\controller\manager; use app\model\BusinessCircle as BusinessCircleModel; +use app\repository\BusinessRepository; use Exception; use think\facade\Db; use think\db\exception\DataNotFoundException; @@ -41,8 +42,14 @@ class BusinessCircle extends Base if ($this->request->isPost()) { $item = input('post.'); $validate = $this->validateByApi($item, [ - 'sort|标题' => 'require|number', + 'sort|排序' => 'require|number', 'name|标题' => 'require|max:100', + 'province|省市区' => 'require', + 'city|省市区' => 'require', + 'county|省市区' => 'require', + 'business_address|详细地址' => 'require', + 'lng|经度' => 'require', + 'lat|纬度' => 'require', ]); if ($validate !== true) { @@ -82,6 +89,7 @@ class BusinessCircle extends Base if ($validate !== true) { return $validate; } + $item['create_time'] = date("Y-m-d H:i:s"); try { BusinessCircleModel::create($item); return $this->json(); @@ -104,6 +112,11 @@ class BusinessCircle extends Base return $this->json(4000, '非法请求'); } $ids = $this->request->param('ids/a', []); + foreach ($ids as $item){ + if(count(BusinessRepository::getInstance()->getByCircleId($item)->toArray())){ + return $this->json("4002","该商圈存在绑定商家 不能删除"); + } + } BusinessCircleModel::destroy($ids); return $this->json(); } diff --git a/app/controller/manager/Comment.php b/app/controller/manager/Comment.php index ac25a15..7760310 100644 --- a/app/controller/manager/Comment.php +++ b/app/controller/manager/Comment.php @@ -180,7 +180,7 @@ class Comment extends Base $whereMap = [["comment.is_delete", "=", CommentModel::COMMON_OFF]]; $orders = ['comment.id' => 'desc']; if (!empty($keyword)) { - $whereMap[] = ['account.nick_name', 'like', "%$keyword%"]; + $whereMap[] = ['account.nick_name|comment.comment', 'like', "%$keyword%"]; } if ($type >= 0) { $whereMap[] = ['comment.type', '=', $type]; @@ -217,7 +217,7 @@ class Comment extends Base $size = $this->request->param('size/d', 30); $whereMap = [["comment.is_delete", "=", CommentModel::COMMON_ON]]; if (!empty($keyword)) { - $whereMap[] = ['account.nick_name', 'like', "%$keyword%"]; + $whereMap[] = ['account.nick_name|comment.comment', 'like', "%$keyword%"]; } $orders = ['comment.id' => 'desc']; $list = CommentModel::findList($whereMap, [], $page, $size, function ($q) { diff --git a/app/controller/manager/Consumer.php b/app/controller/manager/Consumer.php index 2bb3ef7..5390443 100644 --- a/app/controller/manager/Consumer.php +++ b/app/controller/manager/Consumer.php @@ -2,23 +2,11 @@ namespace app\controller\manager; -use app\exception\RepositoryException; use app\model\Account; -use app\model\BusinessFlow; use app\model\Coupon; -use app\model\CouponMain; -use app\model\Recharge; -use app\model\Business as BusinessModel; -use app\model\Member; -use app\model\Tag; use app\repository\AccountRepository; -use app\repository\BusinessRepository; -use app\repository\CouponRepository; -use app\repository\RechargeRepository; -use app\service\wx\WechatPay; use Exception; -use think\facade\Db; use think\response\Json; use think\response\View; @@ -36,11 +24,9 @@ class Consumer extends Base */ public function index() { - $stateArray = Account::allState(); if ($this->request->isPost()) { $repo = AccountRepository::getInstance(); $keyword = $this->request->param('keyword/s', ''); - $state = $this->request->param('state/d', "-1"); $page = $this->request->param('page/d', 1); $size = $this->request->param('size/d', 30); @@ -49,9 +35,6 @@ class Consumer extends Base if (!empty($keyword)) { $whereMap[] = ['nick_name', 'like', "%$keyword%"]; } - if (isset($stateArray[$state])) { - $whereMap[] = ['state', '=', $state]; - } $list = $repo->findList($whereMap, [], $page, $size, function ($q) { return $q->with("tag"); }, $orders); @@ -71,7 +54,6 @@ class Consumer extends Base return $this->json(0, 'success', $list); } - $this->data["state"] = $stateArray; return $this->view(); } @@ -141,11 +123,11 @@ class Consumer extends Base */ public function blankList() { - $stateArray = Account::allState(); + if ($this->request->isPost()) { $repo = AccountRepository::getInstance(); $keyword = $this->request->param('keyword/s', ''); - $state = $this->request->param('state/d', "-1"); + $page = $this->request->param('page/d', 1); $size = $this->request->param('size/d', 30); @@ -157,9 +139,7 @@ class Consumer extends Base if (!empty($keyword)) { $whereMap[] = ['nick_name', 'like', "%$keyword%"]; } - if (isset($stateArray[$state])) { - $whereMap[] = ['state', '=', $state]; - } + $list = $repo->findList($whereMap, [], $page, $size, null, $orders); $time = time(); $list["list"]->each(function ($item) use ($time) { @@ -183,7 +163,6 @@ class Consumer extends Base return $this->json(0, 'success', $list); } - $this->data["state"] = $stateArray; return $this->view(); } diff --git a/app/controller/manager/Coupon.php b/app/controller/manager/Coupon.php index c253fe7..e7e8ca8 100644 --- a/app/controller/manager/Coupon.php +++ b/app/controller/manager/Coupon.php @@ -5,6 +5,7 @@ namespace app\controller\manager; use app\exception\RepositoryException; use app\model\CouponMain; +use app\model\Member; use app\repository\BusinessRepository; use app\repository\CouponRepository; use app\validate\CouponRelease; @@ -47,7 +48,7 @@ class Coupon extends Base $size = $this->request->param('size/d', 30); $whereMap = []; - $orders = ['id' => 'desc']; + $orders = ['sort' => 'desc',"id"=>"desc"]; if (!empty($on_shelf) && in_array($on_shelf, [CouponMain::COMMON_ON, CouponMain::COMMON_OFF])) { $whereMap[] = ['on_shelf', '=', $on_shelf]; } @@ -60,18 +61,35 @@ class Coupon extends Base if (!empty($keyword)) { $whereMap[] = ['name', 'like', "%" . $keyword . "%"]; } + $list = $repo->findList($whereMap, [], $page, $size, function ($q) { if (!empty($keyword)) { return $q::hasWhere('business', function ($q) use ($keyword) { - $q->where('business_name', 'like', "%" . $keyword . "%")->field("code,business_name,business_subtitle,type") + $q->where('business_name', 'like', "%" . $keyword . "%") + //如果是渠道商或者工作人员 只查看自己的下级商家 + ->when(Member::is_agency($this->auth['roles']),function ($q){ + $q->where( 'agency_code', '=', $this->auth['business_code']); + }) + ->field("code,business_name,business_subtitle,type") ->with('category'); }); } - return $q->with(["business" => function ($query) { - $query->field("code,business_name,business_subtitle,type") - ->with('category'); - }]); + + if(Member::is_agency($this->auth['roles'])){ + return $q::hasWhere('business', function ($q) { + $q//如果是渠道商或者工作人员 只查看自己的下级商家 + ->where( 'agency_code', '=', $this->auth['business_code']) + ->field("code,business_name,business_subtitle,type") + ->with('category'); + }); + }else{ + return $q->with(["business" => function ($query) { + $query->field("code,business_name,business_subtitle,type") + ->with('category'); + }]); + } + }, $orders); $time = time(); $list['list']->each(function ($item) use ($time) { @@ -88,6 +106,9 @@ class Coupon extends Base return $this->view(); } + /** + * 上架状态 0上架 1下架 + * */ public function shelf() { $id = input("id/d", 0); diff --git a/app/controller/manager/Index.php b/app/controller/manager/Index.php index 77a74a2..bb6b670 100644 --- a/app/controller/manager/Index.php +++ b/app/controller/manager/Index.php @@ -65,7 +65,9 @@ class Index extends Base $menus[$k]['icon'] = !empty($m['icon']) ? 'fa '.$m['icon'] : ''; $menus[$k]['href'] = ltrim($m['href'], '/'); } - $menus = CmsRepository::getInstance()->buildMenuChild(0, $menus, 'child'); + + $menus = CmsRepository::getInstance()->buildMenuChild(0, $menus, 'child',); + $res['menuInfo'] = $menus; return json($res); diff --git a/app/controller/manager/Login.php b/app/controller/manager/Login.php index 7525433..af743f4 100644 --- a/app/controller/manager/Login.php +++ b/app/controller/manager/Login.php @@ -6,6 +6,7 @@ use app\service\Jwt; use Exception; use app\model\{Member, AuthRule, LoginLog}; use app\controller\BaseController; +use tauthz\facade\Enforcer; use think\response\Json; use think\response\View; @@ -41,12 +42,25 @@ class Login extends BaseController if ($member['status'] != Member::STATUS_NORMAL) { return $this->json(4004, '账号已被禁用'); } + if($member['pid']){ + $parentNumber = Member::getById($member['pid']); + if(empty($parentNumber)){ + return $this->json(4004, '平台商账号不存在'); + } + if ($parentNumber['status'] != Member::STATUS_NORMAL) { + return $this->json(4004, '所属平台商账号已被禁用'); + } + + } + + $userInfo = [ 'user_id' => $member['id'], 'username' => $member['username'], 'nickname' => $member['nickname'], 'business_code' => $member['business_code'], + 'roles' => $member['roles'], ]; $jwtToken = Jwt::generate($userInfo, env('app.expire', 7200)); diff --git a/app/controller/manager/Member.php b/app/controller/manager/Member.php index 11b3c00..80c8670 100644 --- a/app/controller/manager/Member.php +++ b/app/controller/manager/Member.php @@ -143,14 +143,14 @@ class Member extends Base try { //之前关联的商家不为空 并且已经改变 吧之前的商家 从代理商变成普通商家 if ($info['business_code'] != $item['business_code']) { - if(!empty($info['business_code']) ){ + if($info['business_code']!="_" ){ $oldBusiness = BusinessRepository::getInstance()->findOneByWhere(["code" => $info['business_code']]); if (!empty($oldBusiness)) { $oldBusiness->save(["is_agency" => BusinessModel::COMMON_OFF]); } } //如果改变了关联商家 - if(!empty($item['business_code'])){ + if($item['business_code']!="_"){ $Business = BusinessRepository::getInstance()->findOneByWhere(["code" => $item['business_code']]); if (empty($Business)) { Db::rollback(); diff --git a/app/model/Account.php b/app/model/Account.php index b1f494c..8650038 100644 --- a/app/model/Account.php +++ b/app/model/Account.php @@ -13,22 +13,11 @@ class Account extends Base public const type_business = 1;//商家 public const type_staff = 2;//员工 - public const state_default = 0;// 未提交 - public const state_examineing = 1 ;// 1审核中 - public const state_fail = 2;// 2拒绝 - public const state_success = 3;// 3审核通过 // 默认头像 public const DEFAULT_AVATAR = '/static/images/default-avatar.png'; - public static function allState(){ - return [ - self::state_default=>"未提交", - self::state_examineing=>"审核中", - self::state_fail=>"拒绝", - self::state_success=>"审核通过", - ]; - } + public static function accountTypeDescList(): array { diff --git a/app/model/Business.php b/app/model/Business.php index 861b03f..10195a3 100644 --- a/app/model/Business.php +++ b/app/model/Business.php @@ -26,6 +26,11 @@ class Business extends Base */ public function agency(): HasOne { - return $this->hasOne(Business::class, 'agency_code',"code"); + return $this->hasOne(Business::class, 'agency_code', "code"); + } + + public function account() + { + return $this->hasOne(Account::class, 'business_code',"code"); } } diff --git a/app/model/BusinessFlow.php b/app/model/BusinessFlow.php index 433450b..126769b 100644 --- a/app/model/BusinessFlow.php +++ b/app/model/BusinessFlow.php @@ -2,7 +2,7 @@ namespace app\model; -//商家和用户的链接表 +//用户关注的商家 class BusinessFlow extends Base { public function account() diff --git a/app/model/CouponMain.php b/app/model/CouponMain.php index 9333cd2..f5a07a9 100644 --- a/app/model/CouponMain.php +++ b/app/model/CouponMain.php @@ -6,6 +6,7 @@ use think\Collection; use think\db\exception\DataNotFoundException; use think\db\exception\DbException; use think\db\exception\ModelNotFoundException; +use think\Model; /** * 优惠券主表 @@ -27,4 +28,10 @@ class CouponMain extends Base { return $this->hasOne(CouponType::class, 'id',"type_id"); } + + public static function onAfterInsert( $obj) + { + $obj->sort = $obj->id; + $obj->save(); + } } \ No newline at end of file diff --git a/app/model/Deduction.php b/app/model/Deduction.php index fbcdad1..fd8d776 100644 --- a/app/model/Deduction.php +++ b/app/model/Deduction.php @@ -15,4 +15,8 @@ use think\db\exception\ModelNotFoundException; class Deduction extends Base { + public function couponMain() + { + return $this->hasOne(CouponMain::class,"id","coupon_main_id"); + } } \ No newline at end of file diff --git a/app/model/Member.php b/app/model/Member.php index a626080..9eabf77 100644 --- a/app/model/Member.php +++ b/app/model/Member.php @@ -3,14 +3,16 @@ namespace app\model; use think\facade\Db; +use think\Model; class Member extends Base { - public const STATUS_NORMAL = 1;//正常 + public const STATUS_NORMAL = 1;//正常 public const STATUS_DISABLE = 0;//禁用 + public const MANAGER_ROLE_ID = 1;//角色id 2 为管理员 public const ANENT_ROLE_ID = 2;//角色id 2 为代理商 - + public const STAFF_ROLE_ID = 3;//角色id 2 为工作人员 public static function getList($limit = 40) @@ -25,23 +27,25 @@ class Member extends Base /** * 获取所有代理商 * */ - public static function getAgentAll(){ + public static function getAgentAll() + { $subQuery = Db::name('member') ->field('id,business_code,nickname') - ->whereRaw('(find_in_set("'.Member::ANENT_ROLE_ID .'", roles))') + ->whereRaw('(find_in_set("' . Member::ANENT_ROLE_ID . '", roles))') ->buildSql(); - return Db::table($subQuery . ' a') - ->join("business b" ,"a.business_code = b.code") - ->field("a.*") + return Db::table($subQuery . ' a') + ->join("business b", "a.business_code = b.code") + ->field("a.*") ->order('a.id', 'desc') ->select(); } + /** * 根据角色分组返回用户 - * @param int $groupId 角色分组ID - * @param int $limit 每页数量 + * @param int $groupId 角色分组ID + * @param int $limit 每页数量 */ public static function getListByGroup($groupId, $limit = 40) { @@ -75,7 +79,41 @@ class Member extends Base public static function updateCates($id, $cates) { $cates = implode(',', $cates); - $data = ['cates' => $cates]; + $data = ['cates' => $cates]; self::updateById($id, $data); } + + /** + * 验证当前用户是否是渠道商 + * @param string $roles + */ + public static function is_agency(string $roles) + { + if (empty($roles)) { + return true; + } + + $roles = explode(",", $roles); + + //包含管理员就返回false + if (in_array(self::MANAGER_ROLE_ID, $roles)) { + return false; + } + + if (in_array(self::STAFF_ROLE_ID, $roles) || in_array(self::ANENT_ROLE_ID, $roles)) { + return true; + } + return false; + } + + public static function onAfterInsert ($obj) + { + $obj->create_time = date("Y-m-d H:i:s"); + $obj->save(); + } + + public static function hasStaff($id) + { + return self::where("pid",$id)->count(); + } } \ No newline at end of file diff --git a/app/repository/BillRepository.php b/app/repository/BillRepository.php index c319c98..450ea62 100644 --- a/app/repository/BillRepository.php +++ b/app/repository/BillRepository.php @@ -2,13 +2,8 @@ namespace app\repository; -use app\exception\RepositoryException; -use app\model\Business; -use app\model\BusinessFlow; use app\model\CouponBill; -use app\model\CouponMain; -use app\model\Deduction; -use app\model\Recharge; +use app\model\Member as MemberModel; use app\service\Repository; use think\Collection; use think\Model; @@ -44,25 +39,28 @@ class BillRepository extends Repository 'size' => $size, 'list' => new Collection(), ]; - $rep = CouponBill::with([ - "business" => function ($query) use ($keyword) { - $query->field(["code", "business_name"])->when(empty($keyword), function ($q) use ($keyword) { - $q->where("business_name", "like", "%$keyword%"); - }); - }, - "account" => function ($q) { - $q->field(["user_code", "nick_name"]); - }, - "couponMain" => function ($q) { - $q->field(["id", "name"]); - }, - ]) + $rep = CouponBill::alias("a") + ->join("business b","a.business_code = b.code") + ->join("account c","a.user_code = c.user_code") + ->join("coupon_main d","a.coupon_main_id = d.id") + + ->when(!empty($keyword),function ($q) use($keyword){ + $q->where("b.business_name|c.nick_name|d.name", "like", "%$keyword%"); + }) + ->when(MemberModel::is_agency(session("auth")['roles']),function ($q) { + $q->where("b.agency_code", "=", session("auth")['business_code']); + }) ->when(!empty($startTime), function ($q) use ($startTime) { - $q->whereTime("create_time", ">=", $startTime); + $q->whereTime("a.create_time", ">=", $startTime); }) ->when(!empty($endTime), function ($q) use ($endTime) { - $q->whereTime("create_time", "<=", $endTime); - }); + $q->whereTime("a.create_time", "<=", $endTime); + }) + ->field("a.*,b.business_name,c.nick_name,c.avatar_url,d.name as coupon_main_name") + ; + + + $failData ['total'] = $rep->count(); $failData ['list'] = $rep @@ -84,9 +82,13 @@ class BillRepository extends Repository { return CouponBill::when(!empty($start_time), function ($q) use ($start_time) { $q->whereTime("create_time", ">=", $start_time); - })->when(!empty($end_time), function ($q) use ($end_time) { + }) + ->when(!empty($end_time), function ($q) use ($end_time) { $q->whereTime("create_time", "<=", $end_time); - }) + }) + ->when(MemberModel::is_agency(session("auth")['roles']),function ($q) { + $q->where("agency_code", "=", session("auth")['business_code']); + }) ->sum($field); } diff --git a/app/repository/BusinessRepository.php b/app/repository/BusinessRepository.php index 9414cae..6d424e5 100644 --- a/app/repository/BusinessRepository.php +++ b/app/repository/BusinessRepository.php @@ -1,14 +1,14 @@ model->alias("a") - ->join("account b","a.user_code = b.user_code") - ->join("business c","a.business_code = c.code") - ->field(["c.code as business_code","b.avatar_url", "b.nick_name as account_nick_name","c.business_name","c.total_recharge","c.id as basiness_id","c.balance"]); + ->join("account b", "a.code = b.business_code") + ->field(["a.code as business_code", + "b.avatar_url", + "b.nick_name as account_nick_name", + "a.business_name", + "a.total_recharge", + "a.id as basiness_id", + "a.balance"]) + ->group("a.id"); $data = [ 'total' => 0, 'current' => $page, @@ -93,7 +101,9 @@ class BusinessRepository extends Repository */ public function businessDeductionList($where, int $page = 1, int $limit = 0, array $order = ["create_time" => "desc", "id" => "desc"]) { - return Deduction::findList($where, [], $page, $limit, null, $order); + return Deduction::findList($where, [], $page, $limit, function ($q) { + return $q->with("couponMain"); + }, $order); } /** @@ -116,26 +126,26 @@ class BusinessRepository extends Repository /* 获取所有的商家*/ public function getBusinessAll() { - return BusinessFlow::alias("a") - ->join("account b","a.user_code = b.user_code") - ->join("business c","a.business_code = c.code") - ->field("c.code , c.business_name ") - ->order("a.id desc") - ->select(); + return Business::alias("a") + ->join("account b", "a.code = b.business_code") + ->field("a.code , a.business_name ") + ->order("a.id desc") + ->group("a.id") + ->select(); } /** * 获取单个商家详情 * @param $businessCode * @param bool $lock - * @return BusinessFlow|array|Model|null + * @return array|Model|null * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ - public function getBusinessAccount($businessCode,bool $lock = false) + public function getBusinessAccount($businessCode, bool $lock = false) { - $Flow = BusinessFlow::with(["account", "business"])->where("business_code", $businessCode)->when($lock,function ($q){ + $Flow = Business::with(["account"])->where("code", $businessCode)->when($lock, function ($q) { $q->lock(true); })->find(); if (empty($Flow) || empty($Flow->account) || empty($Flow->business)) { @@ -171,4 +181,39 @@ class BusinessRepository extends Repository return arrayKeysFilter($data, $fields); } + /** + * 查看指定商圈下的商家 + * @param $businessCircleId + * @return Business[]|array|Collection + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + */ + public function getByCircleId($businessCircleId) + { + return Business::where("business_circle_id", $businessCircleId)->select(); + } + + /** + * 平台商下有多少商家 + * @param $agencyCode + * @return int + */ + public function agencyHasBusinessCount($agencyCode) + { + return Business::where("agency_code", $agencyCode)->count(); + } + + /** + * 平台商下商家 所持有的优惠券数量 + * @param $agencyCode + * @return int + */ + public function agencyHasCouponCount($agencyCode) + { + return Business::alias("a") + ->join("coupon_main b", "a.code =b.business_code") + ->where("a.agency_code", $agencyCode) + ->sum("b.count"); + } } \ No newline at end of file diff --git a/app/traits/CouponBillTrait.php b/app/traits/CouponBillTrait.php index 1b3432f..caeacb8 100644 --- a/app/traits/CouponBillTrait.php +++ b/app/traits/CouponBillTrait.php @@ -14,5 +14,10 @@ trait CouponBillTrait return CouponBill::where("user_code",$userCode)->sum("consumer_money"); } + //商家 提供的总收益数 + public function businessProfitTotal($businessCode) + { + return CouponBill::where("business_code",$businessCode)->sum("admin_money"); + } } \ No newline at end of file diff --git a/app/traits/cms/MenuTrait.php b/app/traits/cms/MenuTrait.php index e52b5db..7a0acb0 100644 --- a/app/traits/cms/MenuTrait.php +++ b/app/traits/cms/MenuTrait.php @@ -3,6 +3,7 @@ namespace app\traits\cms; use app\model\Menu; +use tauthz\facade\Enforcer; use think\Collection; trait MenuTrait @@ -36,7 +37,9 @@ trait MenuTrait $node[$childName] = $child; $node['has_children'] = true; } + // todo 后续此处加上用户的权限判断 + $treeList[] = $node; } } diff --git a/public/static/manager/js/agency.js b/public/static/manager/js/agency.js index a8eac18..6eb2a5f 100644 --- a/public/static/manager/js/agency.js +++ b/public/static/manager/js/agency.js @@ -5,6 +5,7 @@ layui.use(['laytpl', 'table', 'jquery', 'form', 'miniTab', 'xmSelect'], function layer = layui.layer, xmSelect = layui.xmSelect, miniTab = layui.miniTab; + let modifyUrl = $('#row-modify').data('url'); /**** index begin ***/ //index页面 @@ -60,6 +61,18 @@ layui.use(['laytpl', 'table', 'jquery', 'form', 'miniTab', 'xmSelect'], function return false; }); + //监听状态改变 + form.on('switch(changeStatus)', function(obj){ + let val = obj.elem.checked ? 1 : 0; + $.post(modifyUrl, {id: this.value, field: this.name, value: val}, function (res) { + layer.msg(res.msg) + if (res.code === 0) { + setTimeout(function () { + insTb.reload(); + }, 1000) + } + }) + }); /** td edit **/ table.on('edit(table-container)', function (obj) { diff --git a/public/static/manager/js/area.js b/public/static/manager/js/area.js index baa0c99..6d2d4d9 100644 --- a/public/static/manager/js/area.js +++ b/public/static/manager/js/area.js @@ -32,17 +32,27 @@ layui.use(['laytpl', 'treeTable', 'jquery', 'iconPickerFa', 'form', 'miniTab', ' }, cols: [[ {type: 'checkbox'}, - {field: 'title', title: '菜单名称', minWidth: 150, singleLine: true}, - {title: '图标', width: 50, templet: '