前后端分离项目–二手交易平台小程序
SpringBoot----物品点赞功能实现
SpringBoot----评论回复功能实现(数据库设计)
SpringBoot----文件(图片)上传与显示(下载)
SpringBoot----即时聊天(webSocket)
收藏
数据库设计:使用了第三张表来存储哪个用户收藏了哪个物品
写这个的时候压根没想到怎么判断用户是否已经收藏,一开始是前端发一次请求我后台就添加数据到数据表中。这样只是用户可以在我的收藏中查看到收藏了的物品,但是点击进去无法让收藏按钮亮起来。
第一次点击以后会亮,之后第二次进来怎么判断是否收藏这是个问题。
解决:在全局js中写了一个请求,就是小程序刚进入就发请求获取当前用户收藏信息(是一个数组)。然后进入详情页时进行判断。并且当用户再次收藏或者取消收藏后更改数组信息。当用户退出详情页切换到我的界面将这个数组发送到后台更新数据库
后台代码:这个你就必须去判断前端返回的数组和你数据库当前数组有哪些区别,你是增加还是删除信息,或者既要新增又要删除
数据库原有id【1,2,3】
前端返回id【1,4,5】
这个时候你既要找出2,3去删除,又要找出4,5去新增。
@Override
public int addGoodsInCar(@RequestBody JSONObject sums) {
String openid = sums.getString("openid");
JSONArray gid = sums.getJSONArray("gid");
if (openid==null||gid==null){
return 0;
}
JSONArray gidf = (JSONArray)gid.clone();//深拷贝
ArrayList<Integer> integers = shoppingCarMapper.selectByOpenid(openid);
int a = 1;
if (integers.size()==0 ){
ShoppingCar car = new ShoppingCar();
car.setOpenid(openid);
car.setGid(gid.getInteger(0));
a = shoppingCarMapper.insert(car);
}
if (!integers.isEmpty()){
//去重
Iterator<Object> it = gid.iterator();
while(it.hasNext()){
Integer gid1 =(Integer) it.next();
integers.forEach(item -> {
if(item == gid1){
it.remove();
}
});
}
Iterator<Object> it1 = gid.iterator();
while (it1.hasNext() && a==1){
int next = (int)it1.next();
ShoppingCar car = new ShoppingCar();
car.setOpenid(openid);
car.setGid(next);
a = shoppingCarMapper.insert(car);
}
Iterator<Integer> integers0 = integers.iterator();
while(integers0.hasNext()){
Integer gid1 =integers0.next();
gidf.forEach(item -> {
if(item == gid1){
integers0.remove();
}
});
}
Iterator<Integer> iterator2 = integers.iterator();
while (iterator2.hasNext() && a==1){
int next = iterator2.next();
ShoppingCar car = new ShoppingCar();
car.setOpenid(openid);
car.setGid(next);
a = shoppingCarMapper.deleteCar(car);
}
if (a==0){
return 0;
}else {
return 1;
}
}
return 0;
}