管理后台购物车功能

pull/1/head
czc 2 years ago
parent 34af78397c
commit a4fab60443

@ -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;

@ -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<MemberCartVO> selectList(MemberCartQuery query, Pageable page) {
if (page != null) {
PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize(), SortUtil.sort2string(page.getSort(),"id desc"));
}
QueryWrapper<MemberCart> qw = new QueryWrapper<>();
if (query.getMemberId() != null){
qw.eq("member_id", query.getMemberId());
}
List<MemberCart> memberCartList = memberCartMapper.selectList(qw);
if (CollectionUtil.isEmpty(memberCartList)){
return Collections.emptyList();
}
//查sku
List<Long> skuIdList = memberCartList.stream().map(MemberCart::getSkuId).collect(Collectors.toList());
QueryWrapper<Sku> skuQw = new QueryWrapper<>();
skuQw.in("id", skuIdList);
Map<Long, Sku> skuMap = skuMapper.selectList(skuQw).stream().collect(Collectors.toMap(Sku::getId, it -> it));
List<MemberCartVO> 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<MemberCart> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("member_id",member.getId());
queryWrapper.eq("sku_id",memberCart.getSkuId());
queryWrapper.eq("product_id",memberCart.getProductId());
List<MemberCart> 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<MemberCart> 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<Long> 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<MemberCart> 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<MemberCartDTO> resList) {
List<Long> skuIds = resList.stream().map(MemberCartDTO::getSkuId).distinct().collect(Collectors.toList());
if (CollUtil.isEmpty(skuIds)) {
return;
}
List<Sku> skus = skuMapper.selectBatchIds(skuIds);
Map<Long, Sku> 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<Long> mineCartIds() {
QueryWrapper<MemberCart> qw = new QueryWrapper<>();
qw.eq("member_id", SecurityUtils.getUserId());
qw.eq("status", 1);
qw.select("id");
List<MemberCart> list = memberCartMapper.selectList(qw);
return list.stream().map(MemberCart::getId).collect(Collectors.toList());
}
}

@ -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<Page<MemberCart>> list(@RequestBody MemberCartQuery query, Pageable page) {
// List<MemberCart> list = service.selectList(query, page);
// return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
return null;
public ResponseEntity<PageImpl<MemberCartVO>> list(@RequestBody MemberCartQuery query, Pageable page) {
return ResponseEntity.ok(service.selectList(query, page));
}
@ApiOperation("导出购物车列表")

@ -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<Integer> changeStatus(@RequestBody ChangeMemberStatusDTO dto){
return ResponseEntity.ok(service.changeStatus(dto));
}
@ApiOperation("会员手机号解密")
@GetMapping("/phone/decrypt/{phoneEncrypted}")
public ResponseEntity<String> getPhoneDecrypted(@PathVariable String phoneEncrypted){
return ResponseEntity.ok(service.getPhoneDecrypted(phoneEncrypted));
}
}

@ -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<MemberCart> {
* @return
*/
List<MemberCart> selectByEntity(MemberCart memberCart);
/**
*
*/
List<MemberCartVO> selectByPage(MemberCartQuery query);
}

@ -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;
}

@ -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;
}

@ -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<MemberCartVO> selectList(MemberCartQuery query, Pageable page) {
public PageImpl<MemberCartVO> selectList(MemberCartQuery query, Pageable page) {
if (page != null) {
PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize(), SortUtil.sort2string(page.getSort(),"id desc"));
}
QueryWrapper<MemberCart> 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<MemberCart> memberCartList = memberCartMapper.selectList(qw);
List<MemberCartVO> 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<Long> skuIdList = memberCartList.stream().map(MemberCart::getSkuId).collect(Collectors.toList());
List<Long> skuIdList = memberCartList.stream().map(MemberCartVO::getSkuId).collect(Collectors.toList());
QueryWrapper<Sku> skuQw = new QueryWrapper<>();
skuQw.in("id", skuIdList);
Map<Long, Sku> skuMap = skuMapper.selectList(skuQw).stream().collect(Collectors.toMap(Sku::getId, it -> it));
List<MemberCartVO> 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<MemberCartDTO> resList) {
List<Long> skuIds = resList.stream().map(MemberCartDTO::getSkuId).distinct().collect(Collectors.toList());
if (CollUtil.isEmpty(skuIds)) {
return;
}
List<Sku> skus = skuMapper.selectBatchIds(skuIds);
Map<Long, Sku> 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<Long> mineCartIds() {
QueryWrapper<MemberCart> qw = new QueryWrapper<>();
qw.eq("member_id", SecurityUtils.getUserId());
qw.eq("status", 1);
qw.select("id");
List<MemberCart> list = memberCartMapper.selectList(qw);
return list.stream().map(MemberCart::getId).collect(Collectors.toList());
}
}

@ -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);
}
}

@ -41,4 +41,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="quantity != null "> and quantity = #{quantity}</if>
</where>
</select>
<select id="selectByPage" resultType="com.cyl.manager.ums.pojo.vo.MemberCartVO">
select
a.id,
a.member_id,
a.product_id,
a.pic,
a.sku_id,
a.product_name,
a.sp_data,
a.quantity,
a.create_time,
b.phone_hidden
from ums_member_cart a
inner join ums_member b on a.member_id=b.id
<where>
<if test="phone != null and phone != ''">
b.phone_encrypted=#{phone}
</if>
<if test="productName != null and productName != ''">
a.product_name=#{productName}
</if>
</where>
order by a.create_time desc
</select>
</mapper>

Loading…
Cancel
Save