| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583 |
- <?php
- /**
- * 商品分类列表
- */
- namespace app\admin\controller;
- use cmf\controller\AdminBaseController;
- use think\facade\Db;
- class GoodsclassController extends AdminbaseController {
-
-
-
- function index(){
-
- $lists = Db::name("shop_goods_class")
- ->where("gc_parentid=0")
- ->order("gc_sort,gc_id")
- ->paginate(5);
-
- $lists->each(function($v,$k){
-
- //获取二级分类
- $two_list=Db::name("shop_goods_class")->field("gc_id,gc_name,gc_name_en,gc_isshow,gc_sort,gc_icon,gc_addtime,gc_edittime")->where("gc_parentid={$v['gc_id']}")->order("gc_sort")->select()->toArray();
-
- if($two_list){
- foreach ($two_list as $k1 => $v1) {
- //查询三级分类
- $three_list=Db::name("shop_goods_class")->field("gc_id,gc_name,gc_name_en,gc_isshow,gc_sort,gc_icon,gc_addtime,gc_edittime")->where("gc_parentid={$v1['gc_id']}")->order("gc_sort")->select()->toArray();
- if(!$three_list){
- $three_list=[];
- }
- $two_list[$k1]['gc_icon']=get_upload_path($v1['gc_icon']);
- $two_list[$k1]['three_list']=$three_list;
- }
- }
- $v['gc_icon']= $v['gc_icon']?get_upload_path( $v['gc_icon']):'';
- $v['two_list']=$two_list;
- return $v;
- });
- /*var_dump($lists);
- die;*/
- $page = $lists->render();
- $this->assign('lists', $lists);
- $this->assign("page", $page);
- return $this->fetch();
- }
- /*
- * 商品分类添加
- *@return lists 商品分类列表
- *@return lists['two_list'] 商品二级分类列表
- */
- function add(){
- //获取后台要用的缓存列表
- $lists=getcaches("adminGoodsClass");
- $one_nums=getcaches("adminGC_oneNums");
- $lists=false;
- if(!$lists){
- $info=$this->getAdminClassList();
- $lists=$info['lists'];
- $one_nums=$info['one_nums'];
- $this->resetAdminCache($lists,$one_nums);
- }
-
-
- $this->assign('lists',$lists);
- $this->assign('one_nums',$one_nums);
- return $this->fetch();
- }
- /*
- * 商品分类添加保存
- *@request gc_parentid 上一级商品分类,作为一级是为0
- *@request gc_name 商品分类名称,30字符以内
- */
- function addPost(){
- $data=$this->request->param();
- $gc_name=$data['gc_name'];
- $gc_parentid=$data['gc_parentid'];
- $gc_sort=$data['gc_sort'];
- if(!$gc_name){
- $this->error("请填写分类名称");
- }
- if(mb_strlen($gc_name)>30){
- $this->error("分类名称在30字符以内");
- }
- //判断分类名称是否重复 lic
- // $isexist=Db::name("shop_goods_class")->where("gc_name='{$gc_name}'")->find();
- // if($isexist){
- // $this->error("分类名称已经存在");
- // }
- if($gc_sort==''){
- $this->error("请填写分类排序号");
- }
- if($gc_sort<0){
- $this->error("分类排序号必须是整数");
- }
- if($gc_sort>999999){
- $this->error("分类排序号应是0-999999之间的整数");
- }
- if(floor($gc_sort)!=$gc_sort){
- $this->error("分类排序号应是0-999999之间的整数");
- }
- $data['gc_one_id']=0;
- $data['gc_grade']=1;
- //判断用户选择的上级分类是否是一级
- if($gc_parentid){
- //获取该分类的一级分类
- $two_info=Db::name("shop_goods_class")->where("gc_id={$gc_parentid}")->find();
- if(!$two_info['gc_parentid']){ //添加的为二级分类
-
- //判断有没有上传图标
- /*$gc_icon=$data['gc_icon'];
- if(empty($gc_icon)){
- $this->error("请填写上传分类图片");
- }*/
- $data['gc_one_id']=$two_info['gc_id'];
- $data['gc_grade']=2;
- }else{
- $data['gc_one_id']=$two_info['gc_one_id'];
- $data['gc_grade']=3;
- }
-
- }
- $data['gc_addtime']=time();
- $result=Db::name("shop_goods_class")->insert($data);
- if(!$result){
- $this->error("分类添加失败");
- }
- $action="添加商品分类:{$result}";
- setAdminLog($action);
- $this->resetAdminCache();
- $this->resetCache();
- $this->resetOneCache();
- $this->resetTwoCache();
- $this->success("分类添加成功");
- }
- /*
- * 商品分类编辑
- *@request 上一级商品分类,作为一级是为0
- */
- function edit(){
- $id = $this->request->param('id', 0, 'intval');
- //获取后台要用的缓存列表
- $lists=getcaches("adminGoodsClass");
- $one_nums=getcaches("adminGC_oneNums");
- if(!$lists){
- $info=$this->getAdminClassList();
- $lists=$info['lists'];
- $one_nums=$info['one_nums'];
- $this->resetAdminCache($lists,$one_nums);
- }
- //获取该分类的信息
- $info=Db::name("shop_goods_class")->where("gc_id={$id}")->find();
- $gc_grade=$info['gc_grade'];
- if($gc_grade==1){
- foreach ($lists as $k => $v) {
- if($v['gc_id']==$id){
- unset($lists[$k]);
- break;
- }
- }
- }
- if($gc_grade==2){
- $gc_parentid=$info['gc_parentid'];
- foreach ($lists as $k => $v) {
- if($v['gc_id']==$gc_parentid){
- foreach ($v['two_list'] as $k1 => $v1) {
- if($v1['gc_id']==$id){
- unset($lists[$k]['two_list'][$k1]);
- break;
- }
- }
- }
- }
- }
- $this->assign("lists",$lists);
- $this->assign("one_nums",$one_nums);
- $this->assign("info",$info);
- return $this->fetch();
- }
- /*
- * 商品分类编辑保存
- *@request gc_id 分类id
- *@request gc_parentid 上级分类id
- *@request gc_name 分类名称
- *@request gc_isshow 分类是否显示
- *@request gc_sort 分类排序号
- */
- function editPost(){
- $data = $this->request->param();
- $gc_id=$data['gc_id'];
- $gc_parentid=$data['gc_parentid'];
- $gc_isshow=$data['gc_isshow'];
- $gc_sort=$data['gc_sort'];
-
- //根据id获取信息
- $info=Db::name("shop_goods_class")->where("gc_id={$gc_id}")->find();
- $gc_grade=$info['gc_grade'];
- //选择上级作为一级分类
- if($gc_parentid==0){
- if($gc_grade==2){ //当前分类是二级分类
- //将该分类下的三级分类的一级分类id修改为当前分类id
- Db::name("shop_goods_class")->where("gc_parentid={$gc_id}")->update(array("gc_one_id"=>$gc_id,"gc_grade"=>2,"gc_edittime"=>time()));
- }
- $data['gc_one_id']=0;
- $data['gc_grade']=1;
- }else{
- //判断选择的上级分类信息
- $parent_info=Db::name("shop_goods_class")->where("gc_id={$gc_parentid}")->find();
- $parent_grade=$parent_info['gc_grade'];
- //判断选择的上级
- switch ($parent_grade) {
- case 1: //上级为一级分类【当前分类设置为二级分类】
- if($gc_grade==1){ //当前分类为一级
- //判断该分类下是否有三级
- $three_info=Db::name("shop_goods_class")->where("gc_grade=3 and gc_one_id={$gc_id}")->find();
- if($three_info){
- $this->error("该分类的下级分类超过两级,不可重新指定上级分类");
- }
- //将该分类下的二级分类更改为三级分类信息
- Db::name("shop_goods_class")->where("gc_parentid={$gc_id}")->update(array("gc_grade"=>3,"gc_one_id"=>$gc_parentid,"gc_edittime"=>time()));
- }else if($gc_grade==2){ //当前分类为二级
- //将该分类下的三级分类信息变更信息
- Db::name("shop_goods_class")->where("gc_parentid={$gc_id}")->update(array("gc_one_id"=>$gc_parentid,"gc_edittime"=>time()));
- }
-
-
- $data['gc_grade']=2;
- $data['gc_one_id']=$gc_parentid;
- break;
- case 2://上级为二级分类【当前分类设置为三级分类】
- if($gc_grade==1 || $gc_grade==2){ //当前分类为一级或二级
- //判断当前分类下是否有分类
- $info=Db::name("shop_goods_class")->where("gc_parentid={$gc_id}")->find();
- if($info){
- $this->error("该分类下有分类,不可重新指定上级分类");
- }
- }
- $data['gc_grade']=3;
- $data['gc_one_id']=$parent_info['gc_one_id'];
- break;
-
-
- }
- }
-
- /*if($data['gc_grade']==2){
- //当是二级分类时,判断有没有上传图标
- $gc_icon=$data['gc_icon'];
- if(empty($gc_icon)){
- $this->error("请填写上传分类图片");
- }
- }*/
- if($gc_sort==''){
- $this->error("请填写分类排序号");
- }
- if($gc_sort<0){
- $this->error("分类排序号必须是整数");
- }
- if($gc_sort>999999){
- $this->error("分类排序号应是0-999999之间的整数");
- }
- if(floor($gc_sort)!=$gc_sort){
- $this->error("分类排序号应是0-999999之间的整数");
- }
-
- //更新当前分类信息
- $data['gc_edittime']=time();
- unset($data['gc_icon_old']);
- $result=Db::name("shop_goods_class")->update($data);
-
- if(!$result){
- $this->error("更新失败");
- }
- //将用户经营类目状态更改为不显示
- $status_data=array("status"=>0);
- if($gc_isshow){
- $status_data=array("status"=>1);
- }
- Db::name("seller_goods_class")->where("goods_classid={$gc_id}")->update($status_data);
- $this->resetAdminCache();
- $this->resetCache();
- $this->resetOneCache();
- $this->resetTwoCache();
-
-
- $action="编辑商品分类:{$gc_id}";
- setAdminLog($action);
- $this->success("商品分类更新成功");
-
- }
-
- /*
- * 商品分类排序
- *@request list_orders 排序号
- */
- function listOrder(){
- $ids = $this->request->post("list_orders/a");
- if(!empty($ids)){
- foreach ($ids as $k => $v) {
- $data['gc_sort'] = $v;
- Db::name("shop_goods_class")->where(array("gc_id"=>$k))->update($data);
- }
-
- }
- $action="更新商品分类排序";
- setAdminLog($action);
- $this->resetAdminCache();
- $this->resetCache();
- $this->resetOneCache();
- $this->resetTwoCache();
- $this->success("排序更新成功!");
- }
- /*
- * 商品分类删除
- *@request id 商品分类id
- */
-
- function del(){
- $id = $this->request->param('id', 0, 'intval');
- //判断是否有下级分类
- $info=Db::name("shop_goods_class")->where("gc_parentid={$id}")->find();
- if($info){
- $this->error("请先删除下级分类或将下级分类移至其他分类下再删除");
- }
-
- $rs = DB::name('shop_goods_class')->where("gc_id={$id}")->delete();
- if(!$rs){
- $this->error("删除失败!");
- }
- //删除用户经营类目
- Db::name("seller_goods_class")->where("goods_classid={$id}")->delete();
-
- $action="删除商品分类:{$id}";
- setAdminLog($action);
- $this->resetAdminCache();
- $this->resetCache();
- $this->resetOneCache();
- $this->resetTwoCache();
-
- $this->success("删除成功!");
-
- }
- /*
- * 商品分类获取
- */
- protected function getAdminClassList(){
- //获取一级分类
- $lists=Db::name("shop_goods_class")->field("gc_id,gc_name,gc_grade")->where("gc_parentid=0")->order("gc_sort")->select()->toArray();
- $one_nums=0;
- foreach ($lists as $k => $v) {
- //获取二级分类
- $two_list=Db::name("shop_goods_class")->field("gc_id,gc_name,gc_grade")->where("gc_parentid={$v['gc_id']}")->order("gc_sort")->select()->toArray();
- if(!$two_list){
- $two_list=[];
-
- }
- $lists[$k]['two_list']=$two_list;
- $one_nums++;
- }
- return array(
- "lists"=>$lists,
- "one_nums"=>$one_nums
- );
- }
- /*
- * 将后台的商品分类缓存列表存入redis
- */
- protected function resetAdminCache($lists=array(),$one_nums=''){
-
- if((!$lists) || (!$one_nums)){
- $data=$this->getAdminClassList();
- $lists=$data['lists'];
- $one_nums=$data['one_nums'];
- }
- setcaches("adminGoodsClass",$lists);
- setcaches("adminGC_oneNums",$one_nums);
- }
- /*
- * 将商品分类缓存列表存入redis【只查询显示的分类】
- */
- protected function resetCache(){
- //获取一级分类
- $lists=Db::name("shop_goods_class")->field("gc_id,gc_name,gc_name_en")->where("gc_parentid=0 and gc_isshow=1")->order("gc_sort")->select()->toArray();
- foreach ($lists as $k => $v) {
- //获取二级分类
- $two_list=Db::name("shop_goods_class")->field("gc_id,gc_name,gc_name_en")->where("gc_parentid={$v['gc_id']} and gc_isshow=1")->order("gc_sort")->select()->toArray();
- if($two_list){
- foreach ($two_list as $k1 => $v1) {
- //查询三级分类
- $three_list=Db::name("shop_goods_class")->field("gc_id,gc_name,gc_name_en")->where("gc_parentid={$v1['gc_id']} and gc_isshow=1")->order("gc_sort")->select()->toArray();
- if(!$three_list){
- $three_list=[];
- }
- $two_list[$k1]['three_list']=$three_list;
- }
- }
-
- $lists[$k]['two_list']=$two_list;
- }
- setcaches("goodsClass",$lists);
- }
- /*
- * 将商品一级分类缓存列表存入redis【只查询有三级分类 且状态为显示的分类】
- */
- public function resetOneCache(){
- $list1=Db::name("shop_goods_class")->field("gc_one_id")->where("gc_grade=3")->select()->toArray();
- if(!$list1){
- return !1;
- }
- $gc_one_ids=array_column($list1,"gc_one_id");
- $ids=array_unique($gc_one_ids);
- $map['gc_isshow']=1;
- $list=Db::name("shop_goods_class")->field("gc_id,gc_name,gc_name_en,gc_isshow")->where($map)->where('gc_id','in',$ids)->order("gc_sort")->select()->toArray();
- setcaches("oneGoodsClass",$list);
- }
-
-
- //商品二级分类缓存列表存入redis--用于app商城模块展示
- public function resetTwoCache(){
-
- $map['gc_isshow']=1;
- $map['gc_grade']=2;
- $list=Db::name("shop_goods_class")
- ->field("gc_id,gc_name,gc_name_en,gc_icon")
- ->where($map)
- ->order("gc_sort")
- ->select()
- ->toArray();
- foreach($list as $k=>$v){
- $key2="threeGoodsClass_".$v['gc_id'];
- $list2=Db::name("shop_goods_class")
- ->field("gc_id,gc_name,gc_name_en")
- ->where("gc_isshow=1 and gc_grade=3 and gc_parentid={$v['gc_id']}")
- ->order("gc_sort")
- ->select()
- ->toArray();
- if($list2){
- setcaches($key2,$list2);
- }
- }
- setcaches("twoGoodsClass",$list);
-
- }
-
- }
|