移动商城第四篇(商品管理)添加商品续篇商品审核和上下架前台展示后台筛选@慕课网原创慕课网

第三个选项卡涉及到了我们的手机属性,因此,还是需要用到我们其他的数据库表:EB_FEATURE

继续做逆向工程:

查询出普通属性和特殊属性:

select*fromeb_featuretwheret.is_spec=0select*fromeb_featuretwheret.is_spec=1dao和service和controllerdao实现

/***继承SqlSessionDaoSupport能够得到sessionFactory的引用,非常方便!*/@RepositorypublicclassEbFeatureDaoImplextendsSqlSessionDaoSupportimplementsEbFeatureDao{StringnameSpace="com.rl.ecps.sqlMap.EbFeatureMapper.";publicListselectCommFeature(){returnthis.getSqlSession().selectList(nameSpace+"selectCommFeature");}publicListselectSpecFeature(){returnthis.getSqlSession().selectList(nameSpace+"selectSpecFeature");}}service实现

@ServicepublicclassEbFeatureServiceImplimplementsEbFeatureService{@AutowiredprivateEbFeatureDaofeatureDao;publicListselectCommFeature(){returnfeatureDao.selectCommFeature();}publicListselectSpecFeature(){returnfeatureDao.selectSpecFeature();}}controller调用service拿到对应的普通属性和特殊属性。

/***跳转到添加商品页面**@return*/@RequestMapping("/toAddItem.do")publicStringtoAddItem(Modelmodel){ListebBrands=ebBrandService.selectBrand();ListcommFeature=featureService.selectCommFeature();ListspecFeature=featureService.selectSpecFeature();model.addAttribute("ebBrands",ebBrands);model.addAttribute("commFeature",commFeature);model.addAttribute("specFeature",specFeature);return"item/addItem";}JSP显示普通属性:

想要把我们在页面上选定的基本属性进行保存的话,我们是使用另一张表来进行保存的。Featrue表仅仅保存了相对应的属性,是不做保存功能的!

因此,我们需要对EB_PARA_VALUE做逆向工程!

我们参数表的主键是不需要被其他的表用的,因此我们直接使用序列来管理进行的。并不需要主键返回

我们将JSP页面的name属性都设置为我们的featureId

由于我们该页面上的数据都是从数据库中查询出来的,数据库中的记录有多少,在页面上显示的就有多少

因此,我们可以这么干:

代码:

来到我们的最小库存单元选项卡,我们是需要把我们的特殊属性查询出来的,供用户选择。

查询出特殊属性:

当我们想点击增加规格的时候,就应该多那么一个div在页面上显示!那为什么我们需要多个规格呢??如下所示:

对该按钮添加单击事件

//实现页面规格的自动增加和删除$("#button2").click(function(){//得到想要控件div所有的内容,不包含自己的标签varhtmlDiv=$("#sp_0").html();//把自己的标签包含进去htmlDiv=""+htmlDiv+"

";//在下一个div之前插入$(".page_c").before(htmlDiv);});当我们添加了对应的内容时,问题就随之而来了:我们的按钮选项互斥了!

原因就是出在:

那么我们使用一个变量值,让每次的name属性都不一样即可!

functionclickRemove(id){vara=$(".sp_0").length;if(a==1){alert("默认规格不可删除");return;}}最小库存单元属性存放我们的最小库存单元涉及到了两张数据库表:

首先我们来做逆向工程:

设置SKU有一个集合来保存所有的特殊属性值:

privateListspecList;publicListgetSpecList(){returnspecList;}publicvoidsetSpecList(ListspecList){this.specList=specList;}sku的主键需要被SpecValue用到,因此需要返回主键

selectseqskuid.nextvalfromdualspecValue主键自动增长:

到目前为止,我们4个选项卡的数据都可以拿到了。因此,我们可以把Item所需要的对象存入数据库了..

dao层编写

publicvoidsaveItem(EbItemebItem){this.getSqlSession().insert(nameSpace+"insert",ebItem);}service层编写:

publicvoidsaveItem(EbItemebItem,EbItemClobclob,Listskus,ListebParaValues){itemDao.saveItem(ebItem);clobDao.saveItemClob(clob,ebItem.getItemId());skuDao.saveEbSku(skus,ebItem.getItemId());paraValueDao.saveParaValue(ebParaValues,ebItem.getItemId());}controller编写:

SELECT*fromEB_ITEMWHEREITEM_ID=3073SELECT*fromEB_SKUwhereITEM_ID=3073SELECT*fromEB_PARA_VALUEWHEREITEM_ID=3073SELECT*fromEB_SPEC_VALUEWHERESKU_ID=3060商品审核接下来我们做的是商品审核的功能:

我们到修改url的地址,并且给出对应controller的方法

@RequestMapping("/listAudit.do")publicStringlistAudit(QueryConditionqueryCondition,Modelmodel){//查询出所有的品牌ListebBrands=ebBrandService.selectBrand();//如果是第一次访问的话,那么默认是没有当前页号的,因此赋值为1if(queryCondition.getPageNo()==null){queryCondition.setPageNo(1);}//得到分页数据Pagepage=itemService.selectItemByCondition(queryCondition);model.addAttribute("page",page);model.addAttribute("ebBrands",ebBrands);//回显条件数据model.addAttribute("queryCondition",queryCondition);return"item/listAudit";}处理下边的url并且随着条件,样式发生改变:

通过判断隐藏域的值来改变我们的样式:

查询条件以及回显:

根据审核条件的不同,在显示商品的url中也应该是不同的。

处理审核:使用JavaScript方法来进行控制,把item的Id传递进去和审核对应的值。

functionisPass(itemId,auditStatus){//修改浮动层的标题$("#addItemNoteH2").html("商品审核");//清空内容$("#itemNote").val("");tipShow("#addItemNote");//给表单赋值$("#itemId").val(itemId);$("#myAuditStatus").val(auditStatus);}使用表单来处理我们的操作。其中notes是我们弹出框的数据。

响应事件,给表单赋值,提交表单

$("#addItemNoteConfirm").click(function(){varnotes=$("#itemNote").val();//给表单赋值$("#notes").val(notes);//提交表单$("#auditForm").submit();});我们是使用EB_CONSOLE_LOG这张数据表来保存我们后台操作的日志记录的。

表的字段如下:

既然我们要操作到表,我们就得逆向工厂...

设置主键为自动增长

insertintoEB_CONSOLE_LOG(CONSOLE_LOG_ID,ENTITY_NAME,ENTITY_ID,USER_ID,OP_TYPE,OP_TIME,NOTES,TABLE_NAME)values(seqconsolelogid.nextval,#{entityName,jdbcType=VARCHAR},#{entityId,jdbcType=DECIMAL},#{userId,jdbcType=DECIMAL},#{opType,jdbcType=VARCHAR},#{opTime,jdbcType=TIMESTAMP},#{notes,jdbcType=VARCHAR},#{tableName,jdbcType=VARCHAR})编写dao/***继承SqlSessionDaoSupport能够得到sessionFactory的引用,非常方便!*/@RepositorypublicclassEbConsoleLogDaoImplextendsSqlSessionDaoSupportimplementsEbConsoleLogDao{StringnameSpace="com.rl.ecps.sqlMap.EbConsoleLogMapper.";publicvoidsaveConsoleLog(EbConsoleLogConsoleLog){this.getSqlSession().insert(nameSpace+"insert",ConsoleLog);}}修改商品的属性,由于修改的状态个数是未知的,因此我们使用动态修改:

对于上下价和审核的逻辑基本是相同的...

根据不同的状态给出不同的超链接:

functionisShow(itemId,showStatus){tipShow("#confirm");//给表单赋值$("#itemId").val(itemId);$("#myShowStatus").val(showStatus);}在弹出框中绑定提交事件,提交表单

web.xml

org.springframework.web.context.ContextLoaderListenercontextConfigLocationclasspath:beans.xmlspringmvcorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:springmvc.xmlspringmvc*.doSpringCharacterEncodingFilterorg.springframework.web.filter.CharacterEncodingFilterencodingUTF-8SpringCharacterEncodingFilter*.dospringmvc

由于下面使用了iframe,于是就出现了404错误了。src是不能直接获取WEB-INF的JSP的。

于是乎,我们把地址修改成访问controller,controller做跳转就行了。

@RequestMapping("phoneClassification.do")publicStringphoneClassification(){return"phoneClassification";}设置完之后我们就可以能看到页面了。

我们要做的就是,通过前台给出的参数,我们后台筛选出数据在前台展示。

从参数上我们可以分为几类:

首先,我们把所有品牌先查询和对应的参数先查询出来吧。

@RequestMapping("toIndex.do")publicStringtoIndex(Modelmodel){ListebBrands=brandService.selectBrand();ListisSelect=featureService.selectIsSelect();model.addAttribute("ebBrands",ebBrands);model.addAttribute("isSelect",isSelect);return"index";}在页面上做展示

/***接收条件,查询出符合条件的商品*@parambrandId品牌id*@paramprice价钱*@paramparam被选中的参数*@return*/@RequestMapping("listItem.do")publicStringlistItem(LongbrandId,Stringprice,Stringparam){return"phoneClassification";}参数我们已经知道了,那我们怎么写这个SQL语句呢??

我的分析是这样子的:

/**根据价钱,品牌,被选中属性查询符合条件的商品涉及到的表:1.商品2.商品3.参数值4.价钱*/SELECT*FROMEB_BRANDbrand,EB_ITEMitem,EB_PARA_VALUEpara,EB_SKUskuWHEREbrand.BRAND_ID=item.BRAND_IDANDpara.ITEM_ID=item.ITEM_IDANDsku.ITEM_ID=item.ITEM_IDANDbrand.BRAND_ID=1002ANDsku.SKU_PRICEBETWEEN1AND800000ANDpara.PARA_VALUE='Android4.0';在价钱中是一个范围,因此我们用betweenand语法,而我们的参数传递过来可能是与很多的,因此只要我们使用动态SQL循环就行了。

因此,我们的mapper中的SQL是这样子的。

SELECTitem.*,sku.SKU_PRICEFROMEB_BRANDbrand,EB_ITEMitem,EB_PARA_VALUEpara,EB_SKUskubrand.BRAND_ID=item.BRAND_IDpara.ITEM_ID=item.ITEM_IDANDsku.ITEM_ID=item.ITEM_IDANDbrand.BRAND_ID=#{brandId}ANDsku.SKU_PRICEBETWEEN#{minPrice}AND#{maxPrice}ANDpara.PARA_VALUE=#{val}AND由于我们的展示数据还需要价钱,返回的basemap不够用。我们就新创建了一个Map

在实体中给予对应的属性

privateBigDecimalskuPrice;publicBigDecimalgetSkuPrice(){returnskuPrice;}publicvoidsetSkuPrice(BigDecimalskuPrice){this.skuPrice=skuPrice;}编写Dao和Servicedao实现

publicListlistItem(Mapmap){returnthis.getSqlSession().selectList(nameSpace+"listItem",map);}service实现

基于这么一个需求,当我们点击一个条件的时候,我们要把当前所有获取的条件都获取出来。然后提交给服务器端就行了!

在点击选中事件上,我们获取数据

修改iframe的请求路径,把我们的参数带过去

variframePath="${path}/item/listItem.doprice="+price+"&brandId="+brandId+"¶Str="+paraStr;$("#itemListIframe").attr("src",iframePath);controller/***接收条件,查询出符合条件的商品**@parambrandId品牌id*@paramprice价钱*@paramparaStr被选中的参数*@return*/@RequestMapping("/listItem.do")publicStringlistItem(LongbrandId,Stringprice,StringparaStr,Modelmodel){//TODO基本效果出来了,但条件查询还有问题。Listitems=itemService.listItem(brandId,price,paraStr);model.addAttribute("items",items);return"phoneClassification";}我们在查询的时候,发现很多相同价钱的手机都展示出来的。讲道理我们只要展示最低价钱那款就行了

想要展示最低价那款,还是要去修改SQL语句。需要用到分组函数了。

首先我有这么一个商品

它有两个最小销售单元,一般我们在页面上显示最便宜的那个就行了。

我们的SQL语句可以写成这样:

SELECTmin(sku.SKU_PRICE)SKU_PRICE,item.*FROMEB_ITEMitem,EB_PARA_VALUEpara,EB_SKUskuWHEREpara.ITEM_ID=item.ITEM_IDANDsku.ITEM_ID=item.ITEM_IDANDitem.BRAND_ID=3069ANDsku.SKU_PRICEBETWEEN1AND1000000ANDpara.PARA_VALUE='Android'ANDitem.ITEM_ID=3080GROUPBYitem.ITEM_ID,item.ITEM_NAME,item.ITEM_NO,item.BRAND_ID,item.CAT_ID,item.TAG_IMG_ID,item.TAG_IMG,item.IS_NEW,item.IS_GOOD,item.IS_HOT,item.PROMOTION,item.AUDIT_STATUS,item.SHOW_STATUS,item.IMGS,item.KEYWORDS,item.PAGE_DESC,item.ITEM_RECYCLE,item.ON_SALE_TIME,item.CHECK_TIME,item.UPDATE_TIME,item.UPDATE_USER_ID,item.CREATE_TIME,item.CHECKER_USER_ID,item.FULL_PATH_DEPLOY,item.FULL_PATH_DEPLOY_OFFER,item.ORIGINAL_ITEM_ID,item.LAST_STATUS,item.MERCHANT_ID,item.ITEM_SORT,item.SALES,item.CREATE_USER_ID,item.SIM_LEVEL,item.GIFT_DESC,item.GIFT_IMG,item.GIFT_SHOW_TYPE,item.IMG_SIZE1orderbyitem.item_iddesc修改一下Mapper中的SQL语句:

标准答案的SQL是使用exists关键字来进行查询的:在单表查询的情况下,看有没有符合条件的数据,如果符合,那么exists为ture

THE END
1.淘宝双SKU图设置方法解析专研各种淘宝技术并持续更新,淘宝图片技术:如淘宝双图技术,淘宝白图技术等;淘宝标题技术:如淘宝关键词过审技术,手机端标题隐藏技术等;淘宝综合技术:如淘宝转链接技术,淘宝PC端隐藏技术(电脑端隐藏),淘宝直通车过审技术,淘宝引力魔方过审技术等 淘宝双SKU图设置方法解析如下: 不同图片2张,400*400大小,png/jpg格式...https://xian052802.11467.com/m/news/3129348.asp
2.花瓶加直通车——商品资料多规格设置的话,本系统的规格设置是比较详细的。一个商品可以设置多个规格,每个规格还可以设置多个规格值。规格和规格值可以选择已有的,也可以手动输入。 只需设置商品规格和规格值,下面就会自动生成商品的SKU ,每个商品的SKU都可以设置独立的规格、规格名、图片、售价、市场价、成本价、 库存、重量、体积、一级返佣...https://www.jianshu.com/p/b9c1a91df83e
3.技术分析亚马逊平台商品主副图制作与展示指南炒股要炒强,赚钱靠头羊。先学会做空,再学会做多。https://www.55188.com/thread-27471314-1-1.html
4.拼多多两个怎么一起下单(拼多多如何两件商品一起下单)操作方法如下操作工具vivo X9 操作系统Funtouch OS 7127 软件拼多多v82 1加入购物车付款 拼多多没有购物车,一起付款需要先收藏2收藏物品 打开拼多多,收藏想要购买的物品3点击商品收藏 点击右下角个人中心,点击商品收藏4选中商品 选中想要一起购买的商品5一起付款 点击。 http://am7fqm.syrwx.com/post/17789.html
1.千牛怎么设置多个规格和价格一个链接怎么放多个商品预览商品:在设置完成后,可以通过预览功能查看商品在页面上的展示效果,确保规格和价格显示正确。 二、一个链接怎么放多个商品 在千牛平台上,一个链接可以放置多个商品,方便用户在同一页面上查看和比较不同商品,提高购物的便利性和效率。 创建商品合集:在千牛的商品管理页面,选择创建新的商品合集,将需要展示的多个商品...http://m.sbpyq.cn/74uzi.html
2.如何在抖音小店上设置商品规格(详细介绍抖音小店商品规格设置方法)在如今这个数字化时代,抖音小店已经成为了越来越多年轻人赚钱的方式之一。然而,怎么让自己的小店在众多的小店中脱颖而出呢?本文将详细介绍如何在抖音小店上设置商品规格,让你的小店商品更加吸引人。一:打开“我http://www.ynjztx.com/article/613a606993317.html
3.商品扩展属性设置为输入项可搜索效果如图: 如果设置为不可搜索,则输入的扩展属性及内容在商品列表页不显示,只在商品详细页面显示。 4、扩展属性的应用 (1)、顾客在前台对比两个或多个商品时,除基本属性外,也会对比扩展属性。 (2)、在添加虚拟分类时,也可通过商品的扩展分类来选择商品 ...https://www.u72.net/daima/n07ak.html
4.修改数字商品管理数字商品开发者指导文档数字商品修改数字商品 在商品管理新增商品后,您可以根据需要修改商品的基本信息或价格。您还可以对商品设置促销价格,以提高商品购买量。 前提条件 修改单个商品 批量修改商品 常见错误说明 欲了解更多信息欢迎访问华为HarmonyOS开发者官网https://developer.huawei.com/consumer/cn/doc/app/revise-digital-products-0000001959074889
5.拼多多怎么上架多个规格(如何为商品设置多个规格)癞蛤蟆工具箱拼多多作为一家社交电商平台,已经成为许多商家们不可或缺的销售渠道之一。面对如此庞大的用户群体,商家们需要不断优化自己的商品,满足用户的不同需求。而为商品设置多个规格则是许多商家共同面对的问题。下面...https://new.91laihama.com/taobaozx/39799.html
6.客服的话术大全如商品在使用中出现问题,可通过售后流程处理,我们有完善的售后保障,还请您放心,谢谢!...不行的话您多对比下,我也只是一个打工的小妹,这边都是给您最低的价格了。 4、亲,价格已经是最...亲,很抱歉这个宝贝已经没货了,你可以看看这个哦,两个宝贝质量都很不错,款式和价格也差不多... ...https://www.yjbys.com/edu/kehufuwu/299281.html
7.常见问题解答·统采智慧零售收银系统操作文档·看云找到电脑的ip以后,进行设置称上的ip,前三个保持一致, 最后的随便设置(除了0和255,最大不能超过255) 第二种原因,称跟电脑不在同一个局域网下面,保持称跟电脑网线连在同一个路由器下 30、Q:大华打印的条码,收银机扫码收银,提示无商品? A:出现这种情况,有两种原因,第一种,称的条码格式没有设置,请按照说明书...https://www.kancloud.cn/liuxing52013/tongcai/2078106
8.SKU和SPU是什么意思区别是什么spu和sku的定义区别一个SPU可能有不同的规格,称为“多规格商品”,由若干个规格属性共同定义。如iPhone 14的“颜色”和“存储容量”就是两个规格属性,共同定义了18个规格的商品。 当然,如果一个SPU没有规格属性,也就是只有一个规格,称为“单规格商品”。如苹果的AirPods Pro (第二代),就只有一个规格。 https://blog.csdn.net/chengjianghao/article/details/134465596
9.开店计划书范文(精选10篇)在选址之前,必须要选择一个便于经营和发展的区域,这是选址的前提,在选址时要考虑到经济发展水平、文化教育影响、市场竞争状况、规划位置特点、软硬件环境是否优越等各方面的因素。 2、火锅店选址的原则: 第一要确定服务对象。要结合火锅店的所在位置,确定相应的设施与设备,然后选定自己的经营档次,在确定火锅品种; ...https://www.fwsir.com/fanwen/html/fanwen_20160518091529_337275.html
10.淘宝发布商品怎么设置规格?怎么设置多种价格?怎么设置多种价格? 在淘宝店铺里面发布商品是必不可少的一个操作,卖家朋友们需要设置好商品的规格,接下来一起去看看淘宝发布商品怎么设置规格! 一、淘宝发布商品怎么设置规格? 淘宝卖家设置商品规格的步骤如下: 1、登录淘宝卖家中心,点击“发布宝贝”。 2、选择你要发布的商品类目,填写商品标题、价格、数量等基本...https://m.kaitao.cn/article/20230514223631.htm
11.全网最全的首单礼金玩法和解析TaoKeShow5.首单礼金目前搭配淘礼金违规程度不大,个别违规可能是因为低规格或者ab单 我们是最早一批做首单采集群的淘客之一,2020年五月份的时候最开始我们只更新券后5.1的产品,后来首单礼金红利期过了,到了12月份,强制礼金和小黑盒的玩法出现,我们第一时间更新了小黑盒的玩法,佣金淘客以及招商淘客相关的玩法,并且在圈内大佬的干...https://www.taokeshow.com/19605.html
12.营销沟通技巧(集合15篇)销售必需控制的说话技巧销售必需控制的说话技巧。如"一定能够使您称心的"。此时,此类言语就会使客户对你引见的商品产生一定的自信心。 四、学会当一个好听众 在销售过程中,尽量促使客户多讲话,本人转为一名听众,并且必需有这样的心理准备,让客户觉得是本人在选择,按本人的意志在购置,这样的办法才是高明的销售办法。https://m.jy135.com/zhichang/806788.html
13.最新Shopee虾皮新手卖家考试大全(试题+答案)D.卖家整体预售商品占比小于10% A.40马币 B.60马币 C.20马币 D.80马币 A.每个月的第一天清零上个月的惩罚分数 B.第个季度(1/4/7/10)的第一周周一,会清零上一季度的惩罚分数 C.每个月的最后一天清零本月的惩罚分数 D.不会清零,一直累积 ...https://www.yoojia.com/ask/17-11716505750805958266.html
14.服装合同模板(精选18篇)(五)乙方自服装配备起在公司超过1年的员工,离职时可不再偿还甲方垫付服装费用,服装归乙方所有。 (六)乙方离职时必须填写《离职人员服装确认单》(附件),经项目销售经理签字确认后办理离职手续。 第五条扣款规定 (一)乙方离职时,如果存在需要向甲方支付服装费用的情形,则乙方授权甲方可以在乙方的未结算工资中,直接扣...https://m.ruiwen.com/hetongfanben/5067611.html
15.在千牛平台上发布商品时,如何添加商品规格及发布流程详解?在商品类目选择好之后,接下来商家需要填写商品的基本信息,包括标题、价格、库存等。在这一过程中,确保信息的准确性与完整性是关键,接着便可以进入“规格与库存”的设置环节。 4. 设定商品规格 自定义规格设置 在设置商品规格时,商家可以添加自定义的规格,例如颜色、尺码等。点击“添加规格”按钮,依据商品的特性选择...https://www.9200.cn/136661.html