From a4fab6044357ee5c8b96741a129240289185ddee Mon Sep 17 00:00:00 2001 From: czc Date: Fri, 21 Jul 2023 15:19:11 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=90=8E=E5=8F=B0=E8=B4=AD?= =?UTF-8?q?=E7=89=A9=E8=BD=A6=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...oller.java => H5MemberCartController.java} | 6 +- .../cyl/h5/service/H5MemberCartService.java | 222 ++++++++++++++++++ .../ums/controller/MemberCartController.java | 10 +- .../ums/controller/MemberController.java | 15 +- .../manager/ums/mapper/MemberCartMapper.java | 7 + .../ums/pojo/query/MemberCartQuery.java | 7 +- .../cyl/manager/ums/pojo/vo/MemberCartVO.java | 5 + .../ums/service/MemberCartService.java | 63 ++--- .../manager/ums/service/MemberService.java | 4 + .../resources/mapper/ums/MemberCartMapper.xml | 24 ++ 10 files changed, 302 insertions(+), 61 deletions(-) rename ruoyi-mall/src/main/java/com/cyl/h5/controller/{CartController.java => H5MemberCartController.java} (94%) create mode 100644 ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberCartService.java diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/controller/CartController.java b/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5MemberCartController.java similarity index 94% rename from ruoyi-mall/src/main/java/com/cyl/h5/controller/CartController.java rename to ruoyi-mall/src/main/java/com/cyl/h5/controller/H5MemberCartController.java index 5c7a144..6a83d80 100644 --- a/ruoyi-mall/src/main/java/com/cyl/h5/controller/CartController.java +++ b/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5MemberCartController.java @@ -1,11 +1,11 @@ package com.cyl.h5.controller; +import com.cyl.h5.service.H5MemberCartService; import com.cyl.manager.ums.convert.MemberCartConvert; import com.cyl.manager.ums.domain.Member; import com.cyl.manager.ums.domain.MemberCart; import com.cyl.manager.ums.pojo.query.MemberCartQuery; import com.cyl.manager.ums.pojo.vo.MemberCartVO; -import com.cyl.manager.ums.service.MemberCartService; import com.ruoyi.common.constant.Constants; import com.ruoyi.framework.config.LocalDataUtil; import org.springframework.beans.factory.annotation.Autowired; @@ -17,9 +17,9 @@ import java.util.List; @RestController @RequestMapping("/h5/cart") -public class CartController { +public class H5MemberCartController { @Autowired - private MemberCartService memberCartService; + private H5MemberCartService memberCartService; @Autowired private MemberCartConvert memberCartConvert; diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberCartService.java b/ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberCartService.java new file mode 100644 index 0000000..491d361 --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberCartService.java @@ -0,0 +1,222 @@ +package com.cyl.h5.service; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.cyl.h5.config.SecurityUtil; +import com.cyl.manager.pms.domain.Sku; +import com.cyl.manager.pms.mapper.ProductMapper; +import com.cyl.manager.pms.mapper.SkuMapper; +import com.cyl.manager.pms.pojo.dto.MemberCartDTO; +import com.cyl.manager.ums.convert.MemberCartConvert; +import com.cyl.manager.ums.domain.Member; +import com.cyl.manager.ums.domain.MemberCart; +import com.cyl.manager.ums.mapper.MemberCartMapper; +import com.cyl.manager.ums.pojo.query.MemberCartQuery; +import com.cyl.manager.ums.pojo.vo.MemberCartVO; +import com.cyl.manager.ums.pojo.vo.form.UpdateMemberCartForm; +import com.github.pagehelper.PageHelper; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.exception.base.BaseException; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.SortUtil; +import com.ruoyi.framework.config.LocalDataUtil; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 购物车Service业务层处理 + * + * @author zcc + */ +@Service +public class H5MemberCartService { + @Autowired + private MemberCartMapper memberCartMapper; + @Autowired + private SkuMapper skuMapper; + @Autowired + private ProductMapper productMapper; + @Autowired + private MemberCartConvert memberCartConvert; + + /** + * 查询购物车 + * + * @param id 购物车主键 + * @return 购物车 + */ + public MemberCart selectById(Long id) { + return memberCartMapper.selectById(id); + } + + /** + * 查询购物车列表 + * + * @param query 查询条件 + * @param page 分页条件 + * @return 购物车 + */ + public List selectList(MemberCartQuery query, Pageable page) { + if (page != null) { + PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize(), SortUtil.sort2string(page.getSort(),"id desc")); + } + QueryWrapper qw = new QueryWrapper<>(); + if (query.getMemberId() != null){ + qw.eq("member_id", query.getMemberId()); + } + List memberCartList = memberCartMapper.selectList(qw); + if (CollectionUtil.isEmpty(memberCartList)){ + return Collections.emptyList(); + } + //查sku + List skuIdList = memberCartList.stream().map(MemberCart::getSkuId).collect(Collectors.toList()); + QueryWrapper skuQw = new QueryWrapper<>(); + skuQw.in("id", skuIdList); + Map skuMap = skuMapper.selectList(skuQw).stream().collect(Collectors.toMap(Sku::getId, it -> it)); + List resList = new ArrayList<>(); + memberCartList.forEach(item -> { + MemberCartVO memberCartVO = new MemberCartVO(); + BeanUtils.copyProperties(item, memberCartVO); + if (!skuMap.containsKey(item.getSkuId())){ + memberCartVO.setStatus(0); + memberCartVO.setSkuIfExist(0); + }else { + Sku sku = skuMap.get(item.getSkuId()); + memberCartVO.setPrice(sku.getPrice()); + memberCartVO.setSkuIfExist(1); + } + resList.add(memberCartVO); + }); + return resList; + } + + /** + * 新增购物车 + * + * @param memberCart 购物车 + * @return 结果 + */ + public int insert(MemberCart memberCart) { + Member member = (Member) LocalDataUtil.getVar(Constants.MEMBER_INFO); + memberCart.setMemberId(member.getId()); + //判断cart是否存在 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("member_id",member.getId()); + queryWrapper.eq("sku_id",memberCart.getSkuId()); + queryWrapper.eq("product_id",memberCart.getProductId()); + List memberCarts = memberCartMapper.selectList(queryWrapper); + if (CollectionUtils.isEmpty(memberCarts)) { + memberCart.setStatus(1); + memberCart.setCreateTime(LocalDateTime.now()); + memberCart.setCreateBy(member.getId()); + return memberCartMapper.insert(memberCart); + } + MemberCart dbCart = memberCarts.get(0); + dbCart.setUpdateTime(LocalDateTime.now()); + dbCart.setQuantity(dbCart.getQuantity() + memberCart.getQuantity()); + return memberCartMapper.updateById(dbCart); + } + + /** + * 修改购物车 + * + * @param memberCart 购物车 + * @return 结果 + */ + public int update(MemberCart memberCart) { + MemberCart cart = memberCartMapper.selectById(memberCart.getId()); + if (cart == null){ + return 0; + } + cart.setQuantity(memberCart.getQuantity()); + cart.setUpdateTime(LocalDateTime.now()); + cart.setUpdateBy(SecurityUtil.getLocalMember().getId()); + return memberCartMapper.updateById(cart); + } + public int update(UpdateMemberCartForm form) { + if (form.getNum() == null || form.getId() == null) { + throw new BaseException("参数错误"); + } + Long userId = SecurityUtils.getUserId(); + LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); + qw.eq(MemberCart::getMemberId, userId); + qw.eq(MemberCart::getId, form.getId()); + if (form.getNum() <= 0) { + return memberCartMapper.delete(qw); + } + MemberCart e = new MemberCart(); + e.setQuantity(form.getNum()); + return memberCartMapper.update(e, qw); + } + + /** + * 删除购物车信息 + * + * @param id 购物车主键 + * @return 结果 + */ + public int deleteById(Long id) { + return memberCartMapper.deleteById(id); + } + + /** + * 删除购物车信息 + * + * @param ids 购物车主键 + * @return 结果 + */ + public int deleteByIds(String ids) { + List idList = Arrays.stream(ids.split(",")).map(it -> Long.parseLong(it)).collect(Collectors.toList()); + return memberCartMapper.deleteBatchIds(idList); + } + + public Integer mineCartNum() { + Long userId = SecurityUtils.getUserId(); + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("member_id", userId); + qw.eq("status", 1); + qw.select("count(quantity) quantity"); + MemberCart c = memberCartMapper.selectOne(qw); + if (c == null) { + return 0; + } + return c.getQuantity(); + } + + public void injectSku(List resList) { + List skuIds = resList.stream().map(MemberCartDTO::getSkuId).distinct().collect(Collectors.toList()); + if (CollUtil.isEmpty(skuIds)) { + return; + } + List skus = skuMapper.selectBatchIds(skuIds); + Map map = new HashMap<>(); + skus.forEach(it -> { + map.put(it.getId(), it); + }); + resList.forEach(it -> { + Sku s = map.get(it.getSkuId()); + if (s == null) { + return; + } + it.setPrice(s.getPrice()); + }); + } + + public List mineCartIds() { + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("member_id", SecurityUtils.getUserId()); + qw.eq("status", 1); + qw.select("id"); + List list = memberCartMapper.selectList(qw); + return list.stream().map(MemberCart::getId).collect(Collectors.toList()); + } +} diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/ums/controller/MemberCartController.java b/ruoyi-mall/src/main/java/com/cyl/manager/ums/controller/MemberCartController.java index 23ed06c..e176fde 100644 --- a/ruoyi-mall/src/main/java/com/cyl/manager/ums/controller/MemberCartController.java +++ b/ruoyi-mall/src/main/java/com/cyl/manager/ums/controller/MemberCartController.java @@ -1,7 +1,9 @@ package com.cyl.manager.ums.controller; +import com.cyl.manager.ums.pojo.vo.MemberCartVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Page; import org.springframework.http.ResponseEntity; @@ -23,6 +25,8 @@ import com.cyl.manager.ums.domain.MemberCart; import com.cyl.manager.ums.pojo.query.MemberCartQuery; import com.cyl.manager.ums.service.MemberCartService; +import java.util.List; + /** * 购物车Controller * @@ -41,10 +45,8 @@ public class MemberCartController extends BaseController { @ApiOperation("查询购物车列表") @PreAuthorize("@ss.hasPermi('ums:memberCart:list')") @PostMapping("/list") - public ResponseEntity> list(@RequestBody MemberCartQuery query, Pageable page) { -// List list = service.selectList(query, page); -// return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal())); - return null; + public ResponseEntity> list(@RequestBody MemberCartQuery query, Pageable page) { + return ResponseEntity.ok(service.selectList(query, page)); } @ApiOperation("导出购物车列表") diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/ums/controller/MemberController.java b/ruoyi-mall/src/main/java/com/cyl/manager/ums/controller/MemberController.java index fc86a75..f3b20a7 100644 --- a/ruoyi-mall/src/main/java/com/cyl/manager/ums/controller/MemberController.java +++ b/ruoyi-mall/src/main/java/com/cyl/manager/ums/controller/MemberController.java @@ -11,14 +11,7 @@ import org.springframework.data.domain.Page; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.enums.BusinessType; @@ -98,4 +91,10 @@ public class MemberController extends BaseController { public ResponseEntity changeStatus(@RequestBody ChangeMemberStatusDTO dto){ return ResponseEntity.ok(service.changeStatus(dto)); } + + @ApiOperation("会员手机号解密") + @GetMapping("/phone/decrypt/{phoneEncrypted}") + public ResponseEntity getPhoneDecrypted(@PathVariable String phoneEncrypted){ + return ResponseEntity.ok(service.getPhoneDecrypted(phoneEncrypted)); + } } diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/ums/mapper/MemberCartMapper.java b/ruoyi-mall/src/main/java/com/cyl/manager/ums/mapper/MemberCartMapper.java index 5dcec8d..bc9415b 100644 --- a/ruoyi-mall/src/main/java/com/cyl/manager/ums/mapper/MemberCartMapper.java +++ b/ruoyi-mall/src/main/java/com/cyl/manager/ums/mapper/MemberCartMapper.java @@ -3,6 +3,8 @@ package com.cyl.manager.ums.mapper; import java.util.List; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.cyl.manager.ums.domain.MemberCart; +import com.cyl.manager.ums.pojo.query.MemberCartQuery; +import com.cyl.manager.ums.pojo.vo.MemberCartVO; /** * 购物车Mapper接口 @@ -17,4 +19,9 @@ public interface MemberCartMapper extends BaseMapper { * @return 购物车集合 */ List selectByEntity(MemberCart memberCart); + + /** + * + */ + List selectByPage(MemberCartQuery query); } diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/ums/pojo/query/MemberCartQuery.java b/ruoyi-mall/src/main/java/com/cyl/manager/ums/pojo/query/MemberCartQuery.java index f1635a0..65d1832 100644 --- a/ruoyi-mall/src/main/java/com/cyl/manager/ums/pojo/query/MemberCartQuery.java +++ b/ruoyi-mall/src/main/java/com/cyl/manager/ums/pojo/query/MemberCartQuery.java @@ -27,8 +27,8 @@ public class MemberCartQuery { @ApiModelProperty("SKU ID 精确匹配") private Long skuId; - @ApiModelProperty("PRODUCT_NAME 精确匹配") - private String productNameLike; + @ApiModelProperty("商品名称 精确匹配") + private String productName; @ApiModelProperty("商品属性 精确匹配") private String spData; @@ -36,4 +36,7 @@ public class MemberCartQuery { @ApiModelProperty("商品数量 精确匹配") private Integer quantity; + @ApiModelProperty("用户手机号") + private String phone; + } diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/ums/pojo/vo/MemberCartVO.java b/ruoyi-mall/src/main/java/com/cyl/manager/ums/pojo/vo/MemberCartVO.java index fa72123..4b68891 100644 --- a/ruoyi-mall/src/main/java/com/cyl/manager/ums/pojo/vo/MemberCartVO.java +++ b/ruoyi-mall/src/main/java/com/cyl/manager/ums/pojo/vo/MemberCartVO.java @@ -5,6 +5,7 @@ import com.ruoyi.common.core.domain.BaseAudit; import lombok.Data; import java.math.BigDecimal; +import java.time.LocalDateTime; /** * 购物车 数据视图对象 @@ -39,8 +40,12 @@ public class MemberCartVO extends BaseAudit { /** 商品数量 */ @Excel(name = "商品数量") private Integer quantity; + /** 加入时间 */ + private LocalDateTime createTime; /** sku价格 */ private BigDecimal price; /** sku是否存在 */ private Integer skuIfExist; + /** 隐藏四位的手机号 */ + private String phoneHidden; } diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/ums/service/MemberCartService.java b/ruoyi-mall/src/main/java/com/cyl/manager/ums/service/MemberCartService.java index 29eeec5..f6aeadb 100644 --- a/ruoyi-mall/src/main/java/com/cyl/manager/ums/service/MemberCartService.java +++ b/ruoyi-mall/src/main/java/com/cyl/manager/ums/service/MemberCartService.java @@ -2,6 +2,7 @@ package com.cyl.manager.ums.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.cyl.h5.config.SecurityUtil; @@ -16,14 +17,18 @@ import com.cyl.manager.ums.mapper.MemberCartMapper; import com.cyl.manager.ums.pojo.query.MemberCartQuery; import com.cyl.manager.ums.pojo.vo.MemberCartVO; import com.cyl.manager.ums.pojo.vo.form.UpdateMemberCartForm; +import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.exception.base.BaseException; +import com.ruoyi.common.utils.AesCryptoUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SortUtil; import com.ruoyi.framework.config.LocalDataUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -47,6 +52,8 @@ public class MemberCartService { private ProductMapper productMapper; @Autowired private MemberCartConvert memberCartConvert; + @Value("${aes.key}") + private String aesKey; /** * 查询购物车 @@ -65,38 +72,34 @@ public class MemberCartService { * @param page 分页条件 * @return 购物车 */ - public List selectList(MemberCartQuery query, Pageable page) { + public PageImpl selectList(MemberCartQuery query, Pageable page) { if (page != null) { PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize(), SortUtil.sort2string(page.getSort(),"id desc")); } - QueryWrapper qw = new QueryWrapper<>(); - if (query.getMemberId() != null){ - qw.eq("member_id", query.getMemberId()); + if (!StrUtil.isEmpty(query.getPhone())){ + query.setPhone(AesCryptoUtils.encrypt(aesKey, query.getPhone())); } - List memberCartList = memberCartMapper.selectList(qw); + List memberCartList = memberCartMapper.selectByPage(query); + long total = ((com.github.pagehelper.Page)memberCartList).getTotal(); if (CollectionUtil.isEmpty(memberCartList)){ - return Collections.emptyList(); + return new PageImpl<>(Collections.EMPTY_LIST, page, total); } //查sku - List skuIdList = memberCartList.stream().map(MemberCart::getSkuId).collect(Collectors.toList()); + List skuIdList = memberCartList.stream().map(MemberCartVO::getSkuId).collect(Collectors.toList()); QueryWrapper skuQw = new QueryWrapper<>(); skuQw.in("id", skuIdList); Map skuMap = skuMapper.selectList(skuQw).stream().collect(Collectors.toMap(Sku::getId, it -> it)); - List resList = new ArrayList<>(); memberCartList.forEach(item -> { - MemberCartVO memberCartVO = new MemberCartVO(); - BeanUtils.copyProperties(item, memberCartVO); if (!skuMap.containsKey(item.getSkuId())){ - memberCartVO.setStatus(0); - memberCartVO.setSkuIfExist(0); + item.setStatus(0); + item.setSkuIfExist(0); }else { Sku sku = skuMap.get(item.getSkuId()); - memberCartVO.setPrice(sku.getPrice()); - memberCartVO.setSkuIfExist(1); + item.setPrice(sku.getPrice()); + item.setSkuIfExist(1); } - resList.add(memberCartVO); }); - return resList; + return new PageImpl<>(memberCartList, page, total); } /** @@ -191,32 +194,4 @@ public class MemberCartService { } return c.getQuantity(); } - - public void injectSku(List resList) { - List skuIds = resList.stream().map(MemberCartDTO::getSkuId).distinct().collect(Collectors.toList()); - if (CollUtil.isEmpty(skuIds)) { - return; - } - List skus = skuMapper.selectBatchIds(skuIds); - Map map = new HashMap<>(); - skus.forEach(it -> { - map.put(it.getId(), it); - }); - resList.forEach(it -> { - Sku s = map.get(it.getSkuId()); - if (s == null) { - return; - } - it.setPrice(s.getPrice()); - }); - } - - public List mineCartIds() { - QueryWrapper qw = new QueryWrapper<>(); - qw.eq("member_id", SecurityUtils.getUserId()); - qw.eq("status", 1); - qw.select("id"); - List list = memberCartMapper.selectList(qw); - return list.stream().map(MemberCart::getId).collect(Collectors.toList()); - } } diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/ums/service/MemberService.java b/ruoyi-mall/src/main/java/com/cyl/manager/ums/service/MemberService.java index dd262f2..60e36e5 100644 --- a/ruoyi-mall/src/main/java/com/cyl/manager/ums/service/MemberService.java +++ b/ruoyi-mall/src/main/java/com/cyl/manager/ums/service/MemberService.java @@ -107,4 +107,8 @@ public class MemberService { wrapper.set("status", dto.getStatus()); return memberMapper.update(null, wrapper); } + + public String getPhoneDecrypted(String phoneEncrypted) { + return AesCryptoUtils.decrypt(aesKey, phoneEncrypted); + } } diff --git a/ruoyi-mall/src/main/resources/mapper/ums/MemberCartMapper.xml b/ruoyi-mall/src/main/resources/mapper/ums/MemberCartMapper.xml index bffe889..1f867c3 100644 --- a/ruoyi-mall/src/main/resources/mapper/ums/MemberCartMapper.xml +++ b/ruoyi-mall/src/main/resources/mapper/ums/MemberCartMapper.xml @@ -41,4 +41,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and quantity = #{quantity} +