激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Java仿淘寶首頁(yè)分類列表功能的示例代碼

Java仿淘寶首頁(yè)分類列表功能的示例代碼

2021-04-27 11:54Steafan_ Java教程

這篇文章主要介紹了仿淘寶分類管理功能的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,也給大家做個(gè)參考

在之前的博文中,我們已經(jīng)完成了用戶模塊的所有的功能,那么在接下來(lái)的幾篇博文中,我們來(lái)完成分類管理功能模塊。

先來(lái)看一下后臺(tái)的分類管理都有哪些功能點(diǎn)

Java仿淘寶首頁(yè)分類列表功能的示例代碼

后臺(tái)品類管理其實(shí)就是對(duì)商品的一個(gè)管理,主要分為增加品類、更新品類名稱、獲取同級(jí)品類結(jié)點(diǎn)和獲取品類id及子節(jié)點(diǎn)品類

一、分類管理模塊-增加品類功能的實(shí)現(xiàn)

先來(lái)看service層

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 添加品類
 public serverresponse addcategory(string categoryname, integer parentid){
  if(parentid == null || stringutils.isblank(categoryname)){
   return serverresponse.createbyerrormessage("參數(shù)錯(cuò)誤");
  }
 
  category category = new category();
  category.setname(categoryname);
  category.setparentid(parentid);
  category.setstatus(true);
 
  int rowcount = categorymapper.insert(category);
  if(rowcount > 0){
   return serverresponse.createbysuceessmessage("添加品類成功");
  }
  return serverresponse.createbyerrormessage("添加品類失敗");
 }

添加品類相對(duì)來(lái)說(shuō)還是比較簡(jiǎn)單的。和之前的注冊(cè)邏輯有點(diǎn)相似。首先校驗(yàn)前端傳過(guò)來(lái)的categoryname和parentid是否存在,如果不存在則提示參數(shù)錯(cuò)誤,否則就繼續(xù)使用javabean的實(shí)例來(lái)增加品類。同樣的,在用javabean增加完之后,將結(jié)果插入到數(shù)據(jù)庫(kù)中,如果返回的生效行數(shù)大于0,則添加品類成功,否則添加品類失敗。

再來(lái)看controller層

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
  * 管理品類-增加品類
  * @param categoryname
  * @param parentid
  * @param session
  * @return
  */
 @requestmapping(value = "add_category.do")
 @responsebody
 public serverresponse addcategory(string categoryname, @requestparam(value = "parentid", defaultvalue = "0") int parentid, httpsession session) {
  user user = (user) session.getattribute(const.current_user);
  if (user == null) {
   return serverresponse.createbyerrorcodemessage(responsecode.need_login.getcode(), "用戶未登錄,請(qǐng)登錄");
  }
//  校驗(yàn)是否是管理員
  if (iuserservice.checkadmin(user).issuccess()) {
   return icategoryservice.addcategory(categoryname, parentid);
  } else {
   return serverresponse.createbyerrormessage("無(wú)權(quán)限操作,請(qǐng)登錄管理員");
  }
 }

首先有一個(gè)不同的地方在與requestmapping的value值,只有一個(gè)接口名稱,而沒(méi)有規(guī)定接口請(qǐng)求的方法,是因?yàn)槠奉惞芾砟K是網(wǎng)站管理員進(jìn)行后臺(tái)管理,屬于后臺(tái)模塊。針對(duì)于后臺(tái)模塊,其是公司內(nèi)部員工使用,不需要對(duì)外界進(jìn)行公開(kāi),所以使用默認(rèn)的get方式請(qǐng)求就可以。

后臺(tái)功能管理的通用邏輯就是首先驗(yàn)證用戶是否處于登錄狀態(tài),如果用戶處于登錄狀態(tài),再來(lái)驗(yàn)證當(dāng)前登錄的是不是網(wǎng)站管理員,如果不是管理員,則無(wú)權(quán)進(jìn)行相關(guān)的管理操作,如果是管理員,就可以進(jìn)行后臺(tái)的管理。在進(jìn)行后臺(tái)功能管理的邏輯中,一般的直接返回在service層中方法處理結(jié)果就可以了。

  在上述方法中,需要判斷用戶的登錄狀態(tài),所以需要引入用戶服務(wù),然后直接調(diào)用相應(yīng)的方法即可。

二、分類管理模塊-更新品類名稱功能的實(shí)現(xiàn)

先來(lái)看service層

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 更新品類名稱
 public serverresponse updatecategoryname(string categoryname, integer categoryid){
  if(categoryid == null || stringutils.isblank(categoryname)){
   return serverresponse.createbyerrormessage("更新品類參數(shù)錯(cuò)誤");
  }
  category category = new category();
  category.setid(categoryid);
  category.setname(categoryname);
 
  int rowcount = categorymapper.updatebyprimarykeyselective(category);
  if(rowcount > 0){
   return serverresponse.createbysuceessmessage("更新品類名稱成功");
  }
  return serverresponse.createbyerrormessage("更新品類名稱失敗");
 }

和之前的處理邏輯完全一樣,這里不再一一贅述。

再來(lái)看controller層

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
  * 管理品類-更新品類名稱
  * @param categoryname
  * @param categoryid
  * @param session
  * @return
  */
 @requestmapping(value = "update_category_name")
 @responsebody
 public serverresponse updatecategoryname(string categoryname, integer categoryid, httpsession session){
  user user = (user)session.getattribute(const.current_user);
  if(user == null){
   return serverresponse.createbyerrorcodemessage(responsecode.need_login.getcode(), "用戶未登錄,請(qǐng)登錄");
  }
  if(iuserservice.checkadmin(user).issuccess()){
   return icategoryservice.updatecategoryname(categoryname, categoryid);
  }else{
   return serverresponse.createbyerrormessage("無(wú)權(quán)限操作,請(qǐng)登錄管理員");
  }
 }

和之前的處理邏輯完全一樣,這里不再一一贅述。

三、分類管理模塊-獲取平級(jí)品類結(jié)點(diǎn)(后臺(tái)商品搜索)功能的實(shí)現(xiàn)

service層

?
1
2
3
4
5
6
7
8
// 平級(jí)查詢品類結(jié)點(diǎn)
 public serverresponse<list<category>> getchildrenparallecategory(integer categoryid){
  list<category> categorylist = categorymapper.selectcategorychildrenbyparentid(categoryid);
  if(collectionutils.isempty(categorylist)){
   logger.info("未找到當(dāng)前分類的子分類");
  }
  return serverresponse.createbysuccess(categorylist);
 }

處理一組商品信息,往往使用集合的方式,根據(jù)集合不同種類,其適用長(zhǎng)青也不一樣。這里,我用的是list集合,一是考慮到list集合方便遍歷操作,也方便管理。因?yàn)槭枪芾砩唐罚灾付╨ist集合的泛型為category,通過(guò)categorymapper的selectcategorychildrenbyparentid方法來(lái)進(jìn)行商品id的查詢。在邏輯判斷上,使用java中封裝好的collectionutils工具類,來(lái)判斷集合的返回結(jié)果是否為空,如果為空就打印一行日志,否則將執(zhí)行成功的categorylist結(jié)果返回即可。這里的logger是餓哦們自己封裝的日志打印工具類,關(guān)于他的用法,簡(jiǎn)單提一下

private org.slf4j.logger logger = loggerfactory.getlogger(categoryserviceimpl.class);

注意,這個(gè)logger使用的是slf4j包下的,不要導(dǎo)錯(cuò)包了,然后loggerfactory.getlogger(classs),需要傳遞一個(gè)參數(shù),就是當(dāng)前需要打印日志的類,例如這里的categoryserviceimpl.class。即可在控制臺(tái)看到日志的打印結(jié)果。

controller層

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
  * 管理品類-獲取同級(jí)品類的結(jié)點(diǎn)
  * @param categoryid
  * @param session
  * @return
  */
 @requestmapping(value = "get_category.do")
 @responsebody
 public serverresponse getchildrenparallecategory(@requestparam(value = "categoryid", defaultvalue = "0") integer categoryid, httpsession session){
  user user = (user)session.getattribute(const.current_user);
  if(user == null){
   return serverresponse.createbyerrorcodemessage(responsecode.need_login.getcode(), "用戶未登錄,請(qǐng)登錄");
  }
  if(iuserservice.checkadmin(user).issuccess()){
   return icategoryservice.getchildrenparallecategory(categoryid);
  }else {
   return serverresponse.createbyerrormessage("無(wú)權(quán)限操作,請(qǐng)登錄管理員");
  }
 }

出于實(shí)際情況的考慮,當(dāng)商品數(shù)量為0時(shí),不需要對(duì)商品品類進(jìn)行管理,所以使用requestparam注解的defaultvalue="0"來(lái)規(guī)定一個(gè)參數(shù)的默認(rèn)值。其余的邏輯處理和之前的完全一樣。

四、分類管理模塊-獲取品類id及子結(jié)點(diǎn)功能的實(shí)現(xiàn)

看service層

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public serverresponse<list<integer>> selectcategoryandchildrenbyid(integer categoryid){
  set<category> categoryset = sets.newhashset();
  findchildcategory(categoryid, categoryset);
  list<integer> categoryidlist = lists.newarraylist();
  if(categoryid != null){
   for(category categoryitem : categoryset){
    categoryidlist.add(categoryitem.getid());
   }
  }
  return serverresponse.createbysuccess(categoryidlist);
 }
 
// 遞歸算法,算出子節(jié)點(diǎn)
 private set<category> findchildcategory(integer categoryid, set<category> categoryset){
  category category = categorymapper.selectbyprimarykey(categoryid);
  if(category != null){
   categoryset.add(category);
  }
//  查找子節(jié)點(diǎn)
  list<category> categorylist = categorymapper.selectcategorychildrenbyparentid(categoryid);
  for(category categoryitem : categorylist){
   findchildcategory(categoryitem.getid(), categoryset);
  }
  return categoryset;
 }

主方法是selectcategoryandchildrenbyid,輔助方法為findchildcategory,通過(guò)遞歸算出子節(jié)點(diǎn)。在輔助方法中,通過(guò)categoryid來(lái)查詢出商品的id信息,并且加入到set集合中,再通過(guò)foreach循環(huán)來(lái)遍歷出商品的子節(jié)點(diǎn),最后返回categoryset。在主方法中通過(guò)調(diào)用輔助方法,將商品的id及子節(jié)點(diǎn)全部查出,然后放到list集合中,再通過(guò)foreach循環(huán)遍歷出我們想要的結(jié)果,最后直接返回categoryidlist即可。

controller層

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
  * 管理品類-獲取id及子節(jié)點(diǎn)品類
  * @param categoryid
  * @param session
  * @return
  */
 @requestmapping(value = "get_deep_category.do")
 @responsebody
 public serverresponse getcategoryanddeepchildrencategory(@requestparam(value = "categoryid", defaultvalue = "0") integer categoryid, httpsession session){
  user user = (user)session.getattribute(const.current_user);
  if(user == null){
   return serverresponse.createbyerrorcodemessage(responsecode.need_login.getcode(), "用戶未登錄,請(qǐng)登錄");
  }
  if(iuserservice.checkadmin(user).issuccess()){
   return icategoryservice.selectcategoryandchildrenbyid(categoryid);
  }else{
   return serverresponse.createbyerrormessage("無(wú)權(quán)限操作,請(qǐng)登錄管理員");
  }
 }

和之前的獲取品類同級(jí)結(jié)點(diǎn)的邏輯處理完全一樣,這里就不一一贅述了。

五、補(bǔ)充用戶模塊

在后臺(tái)品類管理模塊中,用到了校驗(yàn)當(dāng)前登錄的用戶是否是管理員的方法,這個(gè)是在用戶模塊中寫到的,之前我忘記寫了,所以,在這里做一個(gè)補(bǔ)充。

用戶模塊的service層

?
1
2
3
4
5
6
7
// 用戶后臺(tái)-校驗(yàn)是否是管理員
 public serverresponse checkadmin(user user){
  if(user != null && user.getrole().intvalue() == const.role.role_admin){
   return serverresponse.createbysuccess();
  }
  return serverresponse.createbyerror();
 }

因?yàn)槭枪芾韱T相關(guān),所以只需要在service層中進(jìn)行邏輯處理,不需要再在controller中聲明。該方法傳入一個(gè)user對(duì)象,通過(guò)封裝好的role接口進(jìn)行權(quán)限判定,如果返回值為admin,則視為管理員,直接返回成功,否則返回失敗。

寫到這里,后臺(tái)的品類管理模塊就寫完了。因?yàn)樵撃K的功能接口比較少,所以用了較長(zhǎng)的篇幅全部寫在一篇博文中,這樣也方便大家一次性就學(xué)完后臺(tái)的品類管理模塊。

在接下來(lái)的博文中,繼續(xù)推進(jìn)項(xiàng)目進(jìn)度,將為大家?guī)?lái)后臺(tái)商品模塊的開(kāi)發(fā),希望大家跟上進(jìn)度。

如果在之前的博文中你遇到了什么問(wèn)題,歡迎留言反饋,我會(huì)盡可能為大家解決問(wèn)題。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/qq_36314960/article/details/79314608

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品久久999 | 亚洲va在线 | 91看片成人 | 羞羞视频免费观看网站 | 久久成人免费网站 | 国产免费一级淫片a级中文 99国产精品自拍 | 国产午夜精品一区二区三区不卡 | 欧美激情性色生活片在线观看 | 免费男女视频 | 在线免费日本 | 日韩视频精品一区 | 成人毛片av在线 | 欧美一区二区三区成人 | 最近免费观看高清韩国日本大全 | 天天看逼| 成年免费网站 | 国产一区二区在线观看视频 | 欧洲精品久久 | 国产成人精品一区二区仙踪林 | 国产欧美精品一区二区三区四区 | 黄色片在线播放 | 免费国产精品视频 | 色视频在线观看 | 99re久久最新地址获取 | 在线观看国产免费视频 | 中文字幕激情视频 | 国色天香综合网 | 中文字幕网址 | 毛片三区| 在线观看免费av网 | 免费观看一级黄色片 | 国产在线精品一区二区三区不卡 | 欧美高清另类自拍视频在线看 | 美国黄色小视频 | 免费亚洲视频在线观看 | 天天夜碰日日摸日日澡性色av | 欧美一区黄色 | 久久成人激情视频 | 欧美男女爱爱视频 | 精品国产一区二区三区久久久狼牙 | 久久欧美亚洲另类专区91大神 |