电商项目8:平台属性

  • 1、后端
    • 1.1、属性分组模糊查询
    • 1.2、商品属性新增功能:保存关联关系
    • 1.3、查询规格参数列表
    • 1.4、编辑规格参数
    • 1.5、销售属性维护
    • 1.6、查询分组关联属性
    • 1.7、属性分组关联关系移除
    • 1.8、查询分组未关联的属性
    • 1.9、新增分组关联关系

1、后端

1.1、属性分组模糊查询

需要改造。当前端传0时候。模糊查询功能有点问题

AttrGroupServiceImpl

 @Overridepublic PageUtils queryPage(Map<String, Object> params, Long catelogId) {QueryWrapper<AttrGroupEntity> wrapper = new QueryWrapper<AttrGroupEntity>();// 当前端传了keyString key = (String)params.get("key");if (!StringUtils.isEmpty(key)){// select * from pms_attr_group where catelog_id = ? and (attr_gruop_id = ? or attr_group_name like %%)wrapper.and((obj)->{obj.eq("attr_group_id",key).or().like("attr_group_name",key);});}// 当前端的catelogId为0,没传的时候,查询所有if (catelogId == 0){return new PageUtils(this.page(new Query<AttrGroupEntity>().getPage(params),wrapper));}// 当前端cateLogId不为0,则wrapper.eq("catelog_id",catelogId);IPage<AttrGroupEntity> page = this.page(new Query<AttrGroupEntity>().getPage(params),wrapper);return new PageUtils(page);}

1.2、商品属性新增功能:保存关联关系


没有插入关联关系,需重写方法

1、创建vo文件夹。
接收页面传递来的数据,封装对象
将业务处理完成的对象,封装成页面要用的数据

AttrVo

package com.ljs.gulimall.product.vo;import lombok.Data;@Data
public class AttrVo {private Long attrId;/*** 属性名*/private String attrName;/*** 是否需要检索[0-不需要,1-需要]*/private Integer searchType;/*** 值类型[0-为单个值,1-可以选择多个值]*/private Integer valueType;/*** 属性图标*/private String icon;/*** 可选值列表[用逗号分隔]*/private String valueSelect;/*** 属性类型[0-销售属性,1-基本属性,2-既是销售属性又是基本属性]*/private Integer attrType;/*** 启用状态[0 - 禁用,1 - 启用]*/private Long enable;/*** 所属分类*/private Long catelogId;/*** 快速展示【是否展示在介绍上;0-否 1-是】,在sku中仍然可以调整*/private Integer showDesc;/*** 属性分组id*/private Long attrGroupId;
}

AttrController

 /*** 保存*/@RequestMapping("/save")// @RequiresPermissions("product:attr:save")public R save(@RequestBody AttrVo attr){attrService.saveDetail(attr);return R.ok();}

AttrService

void saveDetail(AttrVo attr);

AttrServiceImpl

##@Transactional生效的前提是

@EnableTransactionManagement注解在配置类上。并且扫描到指定的dao层

@Transactional一般用于一次多个写操作

    @Transactional@Overridepublic void saveDetail(AttrVo attr) {// 1、保存分组信息AttrEntity attrEntity = new AttrEntity();BeanUtils.copyProperties(attr,attrEntity);this.save(attrEntity);// 2、保存关联关系AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();relationEntity.setAttrGroupId(attr.getAttrGroupId());relationEntity.setAttrId(attrEntity.getAttrId());relationService.save(relationEntity);}


1.3、查询规格参数列表


AttrController

@GetMapping("/base/list/{cateLogId}")public R list(@RequestParam Map<String,Object> params,@PathVariable("cateLogId") Long cateLogId){PageUtils page = attrService.queryBaseAttrPage(params,cateLogId);return R.ok().put("page",page);}

AttrService

PageUtils queryBaseAttrPage(Map<String, Object> params, Long cateLogId);

AttrServiceImpl

 @Overridepublic PageUtils queryBaseAttrPage(Map<String, Object> params, Long cateLogId) {QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<AttrEntity>();if (cateLogId != 0){queryWrapper.eq("catelog_id",cateLogId);}String key = (String) params.get("key");if (!StringUtils.isEmpty(key)){// attr_id attr_namequeryWrapper.and((wrapper) -> {wrapper.eq("attr_id",key).or().like("attr_name",key);});}IPage<AttrEntity> page = this.page(new Query<AttrEntity>().getPage(params),queryWrapper);return new PageUtils(page);}


这时候所属分类和所属分组没有展示出来

实现类需要改造

    @Overridepublic PageUtils queryBaseAttrPage(Map<String, Object> params, Long cateLogId) {QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<AttrEntity>();if (cateLogId != 0){queryWrapper.eq("catelog_id",cateLogId);}String key = (String) params.get("key");if (!StringUtils.isEmpty(key)){// attr_id attr_namequeryWrapper.and((wrapper) -> {wrapper.eq("attr_id",key).or().like("attr_name",key);});}IPage<AttrEntity> page = this.page(new Query<AttrEntity>().getPage(params),queryWrapper);List<AttrEntity> records = page.getRecords();List<AttrRespVo> attrRespVos = records.stream().map(attrEntity -> {AttrRespVo attrRespVo = new AttrRespVo();BeanUtils.copyProperties(attrEntity,attrRespVo);// 根据关联关系表获取所属分组信息AttrAttrgroupRelationEntity relationEntity = relationService.getOne(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attrEntity.getAttrId()));if (relationEntity != null){Long attrGroupId = relationEntity.getAttrGroupId();AttrGroupEntity attrGroupEntity = attrGroupService.getOne(new QueryWrapper<AttrGroupEntity>().eq("attr_group_id", attrGroupId));if (attrGroupEntity != null){attrRespVo.setGroupName(attrGroupEntity.getAttrGroupName());}}// 获取所属分类信息CategoryEntity categoryEntity = categoryService.getOne(new QueryWrapper<CategoryEntity>().eq("cat_id", attrEntity.getCatelogId()));if (categoryEntity != null){attrRespVo.setCatelogName(categoryEntity.getName());}return attrRespVo;}).collect(Collectors.toList());PageUtils pageUtils = new PageUtils(page);pageUtils.setList(attrRespVos);return pageUtils;}

1.4、编辑规格参数

AttrController

/*** 信息*/@RequestMapping("/info/{attrId}")// @RequiresPermissions("product:attr:info")public R info(@PathVariable("attrId") Long attrId){AttrRespVo attrRespVo = attrService.getInfoById(attrId);return R.ok().put("attr", attrRespVo);}

AttrService

AttrRespVo getInfoById(Long attrId);

AttrServiceImpl

 @Overridepublic AttrRespVo getInfoById(Long attrId) {AttrRespVo attrRespVo = new AttrRespVo();AttrEntity attrVO = this.getById(attrId);if (attrVO != null){BeanUtils.copyProperties(attrVO,attrRespVo);}// 1、获取分组信息并设值AttrAttrgroupRelationEntity relationEntity = relationService.getOne(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attrId));if (relationEntity != null){Long groupId = relationEntity.getAttrGroupId();attrRespVo.setAttrGroupId(groupId);AttrGroupEntity attrGroupEntity = attrGroupService.getById(groupId);if (attrGroupEntity != null){String attrGroupName = attrGroupEntity.getAttrGroupName();attrRespVo.setGroupName(attrGroupName);}}// 2、获取分类信息并设值Long catelogId = attrRespVo.getCatelogId();Map<Integer,Long> categoryMap = new HashMap<>();Long[] catelogPath = categoryService.findCatelogPath(catelogId,categoryMap);attrRespVo.setCatelogPath(catelogPath);return attrRespVo;}

CategoryServiceImpl

  /*** findCatelogPath** @param catelogId catelogId* @return Long[]*/public Long[] findCatelogPath(Long catelogId,Map<Integer,Long> categoryEntities) {CategoryEntity categoryEntity = categoryDao.findCatelogPath(catelogId);if (categoryEntity != null){Long parentCid = categoryEntity.getParentCid();Integer catLevel = categoryEntity.getCatLevel();if (catLevel != null){categoryEntities.put(catLevel,catelogId);if (catLevel != 0){this.findCatelogPath(parentCid,categoryEntities);}if (categoryEntities.size() != 0){List<Long> catelogIdList = new ArrayList<>();for (int i = 0; i < categoryEntities.size(); i++) {catelogIdList.add(categoryEntities.get(i+1));}return catelogIdList.toArray(new Long[0]);}}}return new Long[0];}

CategoryDao

   /*** findCatelogPath** @param catelogId catelogId* @return CategoryEntity*/CategoryEntity findCatelogPath(@Param("catelogId") Long catelogId);

CategoryDao.xml

<select id="findCatelogPath" resultMap="categoryMap">SELECT parent_cid,cat_level FROM `pms_category`where cat_id = #{catelogId}</select>

编辑回显就可以出现三级分类了

但是所属分组这里修改有问题

需要编写修改接口

AttrController

 /*** 修改*/@RequestMapping("/update")// @RequiresPermissions("product:attr:update")public R update(@RequestBody AttrVo attr){attrService.updateDetail(attr);return R.ok();}

AttrServiceImpl

 @Overridepublic void updateDetail(AttrVo attr) {// 1、修改分组信息AttrEntity attrEntity = new AttrEntity();BeanUtils.copyProperties(attr,attrEntity);this.updateById(attrEntity);// 2、修改关联关系AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();relationEntity.setAttrGroupId(attr.getAttrGroupId());Long attrId = attrEntity.getAttrId();relationEntity.setAttrId(attrId);// 3、本身无关联关系。则新增关联关系。如果有关联关系则修改关联关系int count = relationService.count(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attrId));if (count > 0){relationService.updateByAttrId(relationEntity);}else{relationService.save(relationEntity);}}

AttrAttrgroupRelationServiceImpl

/*** updateByAttrId** @param relationEntity relationEntity* @return int*/public int updateByAttrId(AttrAttrgroupRelationEntity relationEntity) {return this.baseMapper.updateByAttrId(relationEntity);}

AttrAttrgroupRelationDao

/*** updateByAttrId** @param relationEntity relationEntity* @return int*/int updateByAttrId(AttrAttrgroupRelationEntity relationEntity);

AttrAttrgroupRelationDao.xml

  <update id="updateByAttrId">update pms_attr_attrgroup_relationset attr_group_id = #{attrGroupId}where attr_id = #{attrId}</update>

1.5、销售属性维护

1、销售属性分页查询(实现同一个接口,两种路径查询规格规格参数或销售属性)
AttrController

 @GetMapping("/{attrType}/list/{cateLogId}")public R list(@RequestParam Map<String,Object> params,@PathVariable("cateLogId") Long cateLogId,@PathVariable("attrType") String attrType){PageUtils page = attrService.queryBaseAttrPage(params,cateLogId,attrType);return R.ok().put("page",page);}

AttrService

PageUtils queryBaseAttrPage(Map<String, Object> params, Long cateLogId, String attrType);

AttrServiceImpl

queryBaseAttrPageQueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<AttrEntity>().eq("attr_type","base".equalsIgnoreCase(attrType) ? 1 : 0);

2、修改、新增、删除兼容规格参数

ProductEnum.java

package com.ljs.gulimall.common.Enum;public enum ProductEnum {SPECIFICATION_PARAMETERS(1,"规格参数"),SALES_ATTRIBUTES(0,"销售属性");private final Integer code;private final String msg;ProductEnum(Integer code , String msg){this.code = code;this.msg = msg;}public Integer getCode() {return code;}public String getMsg() {return msg;}
}

AttrController.java

 /*** 删除*/@RequestMapping("/delete")// @RequiresPermissions("product:attr:delete")public R delete(@RequestBody Long[] attrIds){List<Long> attrIdList = (List<Long>) Arrays.asList(attrIds);attrService.removeByIds(attrIdList);// 删除时同时删除关联关系relationService.removeByAttrIds(attrIdList);return R.ok();}

AttrAttrgroupRelationDao.java

 /*** removeByAttrIds** @param attrIdList attrIdList* @return int*/int removeByAttrIds(@Param("list") List<Long> attrIdList);

AttrAttrgroupRelationServiceImpl.java

@Overridepublic int removeByAttrIds(List<Long> attrIdList) {return relationDao.removeByAttrIds(attrIdList);}

AttrServiceImpl

saveDetail@Transactional@Overridepublic void saveDetail(AttrVo attr) {// 1、保存分组信息AttrEntity attrEntity = new AttrEntity();BeanUtils.copyProperties(attr,attrEntity);this.save(attrEntity);if (ProductEnum.SPECIFICATION_PARAMETERS.getCode().equals(attrEntity.getAttrType())){// 2、保存关联关系AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();relationEntity.setAttrGroupId(attr.getAttrGroupId());relationEntity.setAttrId(attrEntity.getAttrId());relationService.save(relationEntity);}}
updateDetail@Transactional@Overridepublic void updateDetail(AttrVo attr) {// 1、修改分组信息AttrEntity attrEntity = new AttrEntity();BeanUtils.copyProperties(attr,attrEntity);this.updateById(attrEntity);if (ProductEnum.SPECIFICATION_PARAMETERS.getCode().equals(attrEntity.getAttrType())){// 2、修改关联关系AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();relationEntity.setAttrGroupId(attr.getAttrGroupId());Long attrId = attrEntity.getAttrId();relationEntity.setAttrId(attrId);// 3、本身无关联关系。则新增关联关系。如果有关联关系则修改关联关系int count = relationService.count(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attrId));if (count > 0){relationService.updateByAttrId(relationEntity);}else{relationService.save(relationEntity);}}}
queryBaseAttrPage@Overridepublic PageUtils queryBaseAttrPage(Map<String, Object> params, Long cateLogId, String attrType) {QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<AttrEntity>().eq("attr_type","base".equalsIgnoreCase(attrType) ? 1 : 0);if (cateLogId != 0){queryWrapper.eq("catelog_id",cateLogId);}String key = (String) params.get("key");if (!StringUtils.isEmpty(key)){// attr_id attr_namequeryWrapper.and((wrapper) -> {wrapper.eq("attr_id",key).or().like("attr_name",key);});}IPage<AttrEntity> page = this.page(new Query<AttrEntity>().getPage(params),queryWrapper);List<AttrEntity> records = page.getRecords();List<AttrRespVo> attrRespVos = records.stream().map(attrEntity -> {AttrRespVo attrRespVo = new AttrRespVo();BeanUtils.copyProperties(attrEntity,attrRespVo);if (ProductEnum.SPECIFICATION_PARAMETERS.getCode().equals(attrRespVo.getAttrType())){// 根据关联关系表获取所属分组信息AttrAttrgroupRelationEntity relationEntity = relationService.getOne(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attrEntity.getAttrId()));if (relationEntity != null){Long attrGroupId = relationEntity.getAttrGroupId();AttrGroupEntity attrGroupEntity = attrGroupService.getOne(new QueryWrapper<AttrGroupEntity>().eq("attr_group_id", attrGroupId));if (attrGroupEntity != null){attrRespVo.setGroupName(attrGroupEntity.getAttrGroupName());}}}// 获取所属分类信息CategoryEntity categoryEntity = categoryService.getOne(new QueryWrapper<CategoryEntity>().eq("cat_id", attrEntity.getCatelogId()));if (categoryEntity != null){attrRespVo.setCatelogName(categoryEntity.getName());}return attrRespVo;}).collect(Collectors.toList());PageUtils pageUtils = new PageUtils(page);pageUtils.setList(attrRespVos);return pageUtils;}
getInfoById@Overridepublic AttrRespVo getInfoById(Long attrId) {AttrRespVo attrRespVo = new AttrRespVo();AttrEntity attrVO = this.getById(attrId);if (attrVO != null){BeanUtils.copyProperties(attrVO,attrRespVo);}if (ProductEnum.SPECIFICATION_PARAMETERS.getCode().equals(attrRespVo.getAttrType())){// 1、获取分组信息并设值AttrAttrgroupRelationEntity relationEntity = relationService.getOne(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attrId));if (relationEntity != null){Long groupId = relationEntity.getAttrGroupId();attrRespVo.setAttrGroupId(groupId);AttrGroupEntity attrGroupEntity = attrGroupService.getById(groupId);if (attrGroupEntity != null){String attrGroupName = attrGroupEntity.getAttrGroupName();attrRespVo.setGroupName(attrGroupName);}}}// 2、获取分类信息并设值Long catelogId = attrRespVo.getCatelogId();Map<Integer,Long> categoryMap = new HashMap<>();Long[] catelogPath = categoryService.findCatelogPath(catelogId,categoryMap);attrRespVo.setCatelogPath(catelogPath);return attrRespVo;}

AttrAttrgroupRelationService.java

int removeByAttrIds(List<Long> attrIdList);

AttrAttrgroupRelationDao

   /*** removeByAttrIds** @param attrIdList attrIdList* @return int*/int removeByAttrIds(@Param("list") List<Long> attrIdList);

AttrAttrgroupRelationDao.xml

 <delete id="removeByAttrIds">delete frompms_attr_attrgroup_relationwhere attr_idin<foreach collection="list" item="item" separator="," open="(" close=")">#{item}</foreach></delete>

1.6、查询分组关联属性


AttrGroupController.java

 @Autowiredprivate AttrService attrService;// /product/attrgroup/{attrgroupId}/attr/relation@GetMapping("/{attrgroupId}/attr/relation")public R getRelation(@PathVariable Long attrgroupId){List<AttrEntity> list = attrService.getRelationByAttrGroupId(attrgroupId);return R.ok().put("data",list);}

AttrServiceImpl.java

 @Overridepublic List<AttrEntity> getRelationByAttrGroupId(Long attrgroupId) {// 根据attrgroupId获取关联关系表attrId集合List<AttrAttrgroupRelationEntity> relationEntityList = relationService.list(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_group_id", attrgroupId));List<Long> attrIdList = relationEntityList.stream().filter(Objects::nonNull).map(AttrAttrgroupRelationEntity::getAttrId).collect(Collectors.toList());// 根据attrId集合查询所有attr信息Collection<AttrEntity> attrEntities = attrService.listByIds(attrIdList);if (attrEntities != null && !attrEntities.isEmpty()){return (List<AttrEntity>) attrEntities;}return new ArrayList<AttrEntity>();}

AttrService.java

List<AttrEntity> getRelationByAttrGroupId(Long attrgroupId);

1.7、属性分组关联关系移除


AttrGroupController

@PostMapping("/attr/relation/delete")public R deleteRelation(@RequestBody AttrRelationDeleteVo [] vos){attrGroupService.deleteRelation(vos);return R.ok();}

AttrGroupService

void deleteRelation(AttrRelationDeleteVo[] vos);

AttrGroupServiceImpl

@Overridepublic void deleteRelation(AttrRelationDeleteVo[] vos) {if (vos == null || vos.length == 0) {return;}List<AttrAttrgroupRelationEntity> relationList = new ArrayList<>();for (AttrRelationDeleteVo vo : vos) {AttrAttrgroupRelationEntity entity = new AttrAttrgroupRelationEntity();entity.setAttrId(vo.getAttrId());entity.setAttrGroupId(vo.getAttrGroupId());relationList.add(entity);}if (relationList.size() > 0){attrAttrgroupRelationDao.deleteRelation(relationList);}}

AttrAttrgroupRelationDao

 /*** deleteRelation** @param relationList relationList*/int deleteRelation(@Param("list") List<AttrAttrgroupRelationEntity> relationList);

AttrAttrgroupRelationDao.xml

  <delete id="deleteRelation">delete frompms_attr_attrgroup_relation where<foreach collection="list" item="item" separator=" or ">(attr_id = #{item.attrId} and attr_group_id = #{item.attrGroupId})</foreach></delete>

1.8、查询分组未关联的属性

查询关联关系和新增关联关系。应该是未关联属性才可以被操作

AttrGroupController

 /*** 获取属性分组没有关联的其他属性** @param attrgroupId attrgroupId* @param params params* @return R*/// /product/attrgroup/{attrgroupId}/attr/relation@GetMapping("/{attrgroupId}/noattr/relation")public R getNoRelation(@PathVariable Long attrgroupId,@RequestParam Map<String, Object> params){PageUtils page = attrService.getNoRelation(attrgroupId,params);return R.ok().put("page",page);}

AttrService

PageUtils getNoRelation(Long attrgroupId, Map<String, Object> params);

AttrServiceImpl

 @Overridepublic PageUtils getNoRelation(Long attrgroupId, Map<String, Object> params) {// 1、根据分组id查询到所有的分类idList<AttrGroupEntity> attrGroupEntities = attrGroupService.getBaseMapper().selectList(new QueryWrapper<AttrGroupEntity>().eq("attr_group_id", attrgroupId));if (attrGroupEntities == null || attrGroupEntities.size() == 0){return null;}List<Long> cateLogIds = attrGroupEntities.stream().map(AttrGroupEntity::getCatelogId).collect(Collectors.toList());// 2、查询当前分类的所有分组List<AttrGroupEntity> attrGroupEntityList = attrGroupService.getBaseMapper().selectList(new QueryWrapper<AttrGroupEntity>().in("catelog_id", cateLogIds));if (attrGroupEntityList == null || attrGroupEntityList.size() == 0){return null;}// 3、查询所有分组的关联属性List<Long> groupIdList = attrGroupEntityList.stream().map(AttrGroupEntity::getAttrGroupId).collect(Collectors.toList());if (groupIdList.size() == 0){return null;}List<AttrAttrgroupRelationEntity> relationEntities = relationService.getBaseMapper().selectList(new QueryWrapper<AttrAttrgroupRelationEntity>().in("attr_group_id", groupIdList));// 4、剔除掉已经存在关联关系的关联属性if (relationEntities == null || relationEntities.size() == 0){return null;}List<Long> attrIds = relationEntities.stream().map(AttrAttrgroupRelationEntity::getAttrId).collect(Collectors.toList());QueryWrapper<AttrEntity> wrapper = new QueryWrapper<AttrEntity>().in("catelog_id", cateLogIds).notIn("attr_id", attrIds).eq("attr_type",ProductEnum.SPECIFICATION_PARAMETERS.getCode());String key = (String)params.get("key");if (!StringUtils.isEmpty(key)){wrapper.and(item -> {item.eq("attr_id",key).or().like("attr_name",key);});}IPage<AttrEntity> page = this.page(new Query<AttrEntity>().getPage(params), wrapper);return new PageUtils(page);}

1.9、新增分组关联关系


AttrGroupController

  ///attr/relation@PostMapping("/attr/relation")public R addRelation(@RequestBody AttrRelationVo[] vos){if (vos != null && vos.length != 0){List<AttrRelationVo> collect = Arrays.stream(vos).collect(Collectors.toList());List<AttrAttrgroupRelationEntity> entityList = collect.stream().map(item -> {AttrAttrgroupRelationEntity entity = new AttrAttrgroupRelationEntity();BeanUtils.copyProperties(item,entity);return entity;}).collect(Collectors.toList());relationService.saveBatch(entityList);return R.ok();}return R.error();}

新增关联关系可以使用了。
至此新增,编辑时需要判断分组id是否存在。再保存关联关系。避免空指针异常

电商项目8:平台属性相关推荐

  1. 电商大数据分析平台项目(一)项目框架

    一.项目简介 这段时间自己从网上找了一个项目课程,学着做了一个电商大数据分析平台,不过较为简陋,知识作学习用. 项目环境:windows10+hadoop2.7.7+hbase2.1.0+flume1 ...

  2. 面试专题-电商项目面试篇

    找工作面试的过程中,项目将会是整个流程的核心灵魂,也是能在面试中能让面试官尽快认同你的一个强有力的依据,所以在面试中把电商项目清晰的表述出来是极为关键的. 1.说说你最近做的这个项目的背景,简单的介绍 ...

  3. 超详细测试项目——Web电商项目测试点整理.....

    虽然说近些年来,软件测试找工作的时候,简历中如果写着电商项目被认为是烂大街的项目,甚至受到根本不了解行情的HR或者部分公司的技术人员的刁难,但是:电商这么流行普遍的项目和应用,这不是很正常么! 毕竟全 ...

  4. K8S 部署电商项目

    Ingress 和 Ingress Controller 概述 在 k8s 中为什么会有 service 这个概念? Pod 漂移问题 Kubernetes 具有强大的副本控制能力,能保证在任意副本( ...

  5. 微服务电商项目技术全解析

    一.项目介绍 7d-mall-microservice 是一套微服务电商,其是在开源电商项目 mall-swarm 上进行了改造,采用了 Spring Cloud Hoxton & Aliba ...

  6. 《高楼的性能工程实战课》微服务电商项目技术全解析

    文章目录 一.项目介绍 二.整体结构 三.预备知识 1.什么是 SpringCloud ? 2.Spring .SpringBoot 和 Spring Cloud 的关系 3.Spring Cloud ...

  7. 电商项目相关面试问题及答案

    请描述一下这个系统? [回答技巧] 从3个方面来回答这个问题: |–系统背景及系统概述 |–系统包括的业务模块及主业务流程 |–责任模块 [回答示例] 第一个方面:系统背景及系统概述 优购时尚商城是香 ...

  8. 电商项目的数据库表设计(MySQL版)

    简介: 目的: 电商常用功能模块的数据库设计 常见问题的数据库解决方案 环境: MySQL5.7 图形客户端,SQLyog Linux 模块: 用户:注册.登陆 商品:浏览.管理 订单:生成.管理 仓 ...

  9. 电商项目中的经典问题

    转载自:https://blog.csdn.net/A_BlackMoon/article/details/80094814 请描述一下这个系统? [回答技巧] 从3个方面来回答这个问题: |--系统 ...

最新文章

  1. java通过代理访问网络
  2. angular reactive form
  3. BZOJ 5330 Luogu P4607 [SDOI2018]反回文串 (莫比乌斯反演、Pollard Rho算法)
  4. python脚本自动化盲注_三、基于报错型注入和sql盲注的自动化实现
  5. linux 权限之所有者所属组
  6. PixelFormat 枚举
  7. sql server运算符_SQL Server执行计划中SELECT运算符的主要概念
  8. How to live?
  9. 苹果怎么使用计算机,苹果系统电脑怎么用_超详细mac新手教程-win7之家
  10. bootstrap案例解析
  11. memcached(十三)注意事项
  12. H3C光模块相关命令和检测方法
  13. Moss 自定义Featur
  14. You Only Look One-level Feature
  15. 《大长今》分集剧情介绍(上)
  16. 2019年的反弹牛市总结
  17. Html5中的input标签之多少
  18. springboot实现网上宠物医院管理系统毕业设计
  19. c客户端http post chunked协议上传到服务器demo源码
  20. 12月思考随笔和资料记录

热门文章

  1. 博导给各位博士和准博士一点建议
  2. Windows文件删不掉:无法设置新所有者
  3. [初学HTML5日记]又是元气满满的第二天
  4. Avro的java实现
  5. 2023年新三板产品及服务研究报告
  6. (转)一个睡五分钟等于六个钟头的方法
  7. 基于Springboot+Vue的MOBA类游戏攻略分享平台
  8. 华为苏州实习面试--机器学习算法岗
  9. java st_st.java · cwj/java201621123070 - Gitee.com
  10. smartgit破解