diff --git a/DB/README.md b/DB/README.md
new file mode 100644
index 00000000..d65fbd1c
--- /dev/null
+++ b/DB/README.md
@@ -0,0 +1,3 @@
+## PS:数据库位置
+
+点击跳转 https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql 这里有与tag版本一致的sql,根据tag获取sql,如果使用master代码,则需要在lilishop项目根目录的update-sql目录中,获取对应的升级sql。
diff --git a/update-sql/li_notice_message.sql b/DB/li_notice_message.sql
similarity index 100%
rename from update-sql/li_notice_message.sql
rename to DB/li_notice_message.sql
diff --git a/update-sql/version4.0to4.1.sql b/DB/version4.0to4.1.sql
similarity index 100%
rename from update-sql/version4.0to4.1.sql
rename to DB/version4.0to4.1.sql
diff --git a/update-sql/version4.1to4.2.sql b/DB/version4.1to4.2.sql
similarity index 100%
rename from update-sql/version4.1to4.2.sql
rename to DB/version4.1to4.2.sql
diff --git a/update-sql/version4.2to4.3.sql b/DB/version4.2to4.3.sql
similarity index 100%
rename from update-sql/version4.2to4.3.sql
rename to DB/version4.2to4.3.sql
diff --git a/README.md b/README.md
index 2b388639..4022a630 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,18 @@
-## 🔥Lilishop B2B2C商城系统
+## 🔥 Lilishop B2B2C商城系统
-##### 🌹官方公众号 & 开源不易,如有帮助请点Star
+##### 🌹 开源不易,如有帮助请点Star
-##### 官方qq 1群 961316482(已满)
-##### 官方qq 2群 875294241
-##### 官方公众号/小程序体验,扫描二维码
+
+#### 欢迎交流需求,交流业务,交流技术
+
+##### 交流 qq 1群 961316482(已满)
+
+##### 交流 qq 2群 875294241
+
+
+
+##### 商城 公众号/小程序体验,扫描二维码

@@ -13,28 +20,28 @@

-### 🔥介绍
+### 🔥 商城介绍
**官网**:https://pickmall.cn
-Lilishop 基于SpringBoot研发的B2B2C多用户商城系统,前端使用 Vue、uniapp开发 **系统全端全部代码开源**
+Lilishop 商城系统 基于SpringBoot 研发,B2B2C多用户商城系统,前端使用 Vue、uniapp开发 **系统全端全部代码开源**
业务兼容O2O商城/B2B商城/B2B2C商城/F2B2C商城/S2B2C商城。支持小程序商城、H5商城、APP商城、 PC商城。
-产品前后端分离、支持分布式部署。
+商城前后端分离、支持分布式部署。
商城包含 会员模块、**第三方登录模块**、**第三方支付模块**、**楼层装修模块**、订单模块、分销模块、文章模块、系统设置模块、流量分析模块
-系统包含各种中间件、搜索引擎、多级缓存、分布式事务、分布式任务调度等,支持Docker,支持k8s。是一款高性能,支持高并发等商城系统。
+商城包含各种中间件、搜索引擎、多级缓存、分布式事务、分布式任务调度等,支持Docker,支持k8s。是一款高性能,支持高并发的商城系统。
-### ☃️文档
+### ☃️ 帮助文档
-**产品文档**:https://docs.pickmall.cn
+https://docs.pickmall.cn
-### 💧项目链接(gitee)
+### 💧 项目链接(gitee)
**Java后台**:https://gitee.com/beijing_hongye_huicheng/lilishop.git
@@ -44,7 +51,7 @@ Lilishop 基于SpringBoot研发的B2B2C多用户商城系统,前端使用 Vue
**docker一键部署**:https://gitee.com/beijing_hongye_huicheng/docker.git
-### 💧项目链接(github)
+### 💧 项目链接(github)
**Java后台**:https://github.com/hongyehuicheng/lilishop.git
@@ -54,7 +61,7 @@ Lilishop 基于SpringBoot研发的B2B2C多用户商城系统,前端使用 Vue
**docker一键部署**:https://github.com/hongyehuicheng/docker.git
-### 💧演示地址(手机验证码为 ‘111111’)
+### 💧 演示地址(手机验证码为 ‘111111’)
**运营后台**:https://admin-b2b2c.pickmall.cn 账号:admin/123456
@@ -68,7 +75,7 @@ Lilishop 基于SpringBoot研发的B2B2C多用户商城系统,前端使用 Vue

-### 🚙3行命令搭建本地环境
+### 🚙 3行命令搭建本地运行环境
温馨提示:由于服务中间件较多,如果笔记本环境启动内存没有32g可能无法启动成功(macbookpro 2020 16g内存启动无法成功),台式机在16g内存、AMD 3700x 的ubuntu系统成功运行。
@@ -91,7 +98,7 @@ Lilishop 基于SpringBoot研发的B2B2C多用户商城系统,前端使用 Vue
PS:单独部署的话,点击跳转 https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql 这里有与tag版本一致的sql,根据tag获取sql,如果使用master代码,则需要在lilishop项目根目录的update-sql目录中,获取对应的升级sql。
-##### 商城部署后 API/UI 地址
+##### 商城 API/UI 地址
| API | 地址 |
| -------------- | --------------- |
@@ -111,17 +118,17 @@ PS:单独部署的话,点击跳转 https://gitee.com/beijing_hongye_huicheng/d
-### ⚾️功能列表
+### ⚾️ 功能列表
-#### 🥎商城平台功能
+#### 🥎 商城平台功能

-#### 🥎商城卖家功能
+#### 🥎 商城卖家功能

@@ -129,28 +136,28 @@ PS:单独部署的话,点击跳转 https://gitee.com/beijing_hongye_huicheng/d
-### 🧩商城前端功能展示
+### 🧩 商城前端功能展示
-#### ⚽️商城移动端
+#### ⚽️ 商城移动端
-#### ⚽️商城管理端
+#### ⚽️ 商城管理端

### 商城技术选型
-#### 🥅架构图
+#### 🥅 架构图

-##### 🕹后台技术选型
+##### 🕹 后台技术选型
| 说明 | 框架 | 说明 | |
| -------------- | --------------- | -------------- | ------------- |
@@ -164,7 +171,7 @@ PS:单独部署的话,点击跳转 https://gitee.com/beijing_hongye_huicheng/d
| 短信 | 阿里云短信 | 认证 | JWT |
| 日志处理 | Log4j | 接口规范 | RESTful |
-##### 🖥前端-运营后台、店铺后台
+##### 🖥 前端-运营后台、店铺后台
| 说明 | 框架 | 说明 | 框架 |
| ---------- | ---------- | ---------- | ------- |
@@ -181,7 +188,7 @@ PS:单独部署的话,点击跳转 https://gitee.com/beijing_hongye_huicheng/d
| 基础UI库 | uViewui | 基础框架 | uni-app |
| CSS预处理 | scss | 地图引擎 | amap |
-### 🌟版本升级
+### 🌟 版本升级
```
商城后续会持续版本升级,修复bug,完善功能,覆盖更多业务场景 o2o/b2b/s2b2b2c/跨境电商
@@ -190,7 +197,7 @@ PS:单独部署的话,点击跳转 https://gitee.com/beijing_hongye_huicheng/d
```
-### ⚠️开源须知
+### ⚠️ 开源须知
1.仅允许用于个人学习研究使用.
2.禁止将本开源的代码和资源进行任何形式任何名义的出售.
@@ -200,7 +207,7 @@ PS:单独部署的话,点击跳转 https://gitee.com/beijing_hongye_huicheng/d
4.限制商用,如果需要商业使用请联系我们。QQ3409056806.
-### 🐧交流群
+### 🐧 交流群
##### 官方qq 1群 961316482(已满)
##### 官方qq 2群 875294241
diff --git a/buyer-api/src/main/java/cn/lili/controller/promotion/KanjiaGoodsActivityBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/promotion/KanjiaGoodsActivityBuyerController.java
index 7383582f..e1c70780 100644
--- a/buyer-api/src/main/java/cn/lili/controller/promotion/KanjiaGoodsActivityBuyerController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/promotion/KanjiaGoodsActivityBuyerController.java
@@ -53,6 +53,8 @@ public class KanjiaGoodsActivityBuyerController {
public ResultMessage> kanjiaActivityGoodsPage(KanjiaActivityGoodsParams kanjiaActivityGoodsParams, PageVO page) {
// 会员端查询到的肯定是已经开始的活动商品
kanjiaActivityGoodsParams.setPromotionStatus(PromotionStatusEnum.START.name());
+ kanjiaActivityGoodsParams.setStartTime(System.currentTimeMillis());
+ kanjiaActivityGoodsParams.setEndTime(System.currentTimeMillis());
return ResultUtil.data(kanJiaActivityGoodsService.kanjiaGoodsVOPage(kanjiaActivityGoodsParams, page));
}
diff --git a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java
index 5d3a7d33..4cf13704 100644
--- a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java
+++ b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java
@@ -102,7 +102,9 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp
} else if (orderMessage.getNewStatus().equals(OrderStatusEnum.CANCELLED)) {
//根据订单编号获取订单数据,如果为积分订单则跳回
Order order = orderService.getBySn(orderMessage.getOrderSn());
- if (order.getOrderPromotionType().equals(OrderPromotionTypeEnum.POINTS.name()) && order.getPriceDetailDTO().getPayPoint() != null) {
+ //增加对积分订单的判定,如果积分支付,取消订单则退还用户积分
+ if (StringUtils.isNotEmpty(order.getOrderPromotionType()) &&
+ order.getOrderPromotionType().equals(OrderPromotionTypeEnum.POINTS.name()) && order.getPriceDetailDTO().getPayPoint() != null) {
memberService.updateMemberPoint(Convert.toLong(order.getPriceDetailDTO().getPayPoint()), PointTypeEnum.INCREASE.name(), order.getMemberId(), "订单取消,恢复积分:" + order.getPriceDetailDTO().getPayPoint() + "分");
}
}
diff --git a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java
index 25bc98a6..d3ab14b4 100644
--- a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java
+++ b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java
@@ -275,6 +275,7 @@ public class StockUpdateExecute implements OrderStatusChangeEvent {
//循环订单
for (OrderItem orderItem : order.getOrderItems()) {
skuKeys.add(GoodsSkuService.getStockCacheKey(orderItem.getSkuId()));
+
GoodsSku goodsSku = new GoodsSku();
goodsSku.setId(orderItem.getSkuId());
goodsSku.setGoodsId(orderItem.getGoodsId());
@@ -282,18 +283,22 @@ public class StockUpdateExecute implements OrderStatusChangeEvent {
if (null != orderItem.getPromotionType() && null != orderItem.getPromotionId() && PromotionTypeEnum.haveStock(orderItem.getPromotionType())) {
//如果促销有库存信息
PromotionTypeEnum promotionTypeEnum = PromotionTypeEnum.valueOf(orderItem.getPromotionType());
- List promotionStocks = cache.multiGet(promotionKey);
+
//修改砍价商品库存
if (promotionTypeEnum.equals(PromotionTypeEnum.KANJIA)) {
KanjiaActivity kanjiaActivity = kanjiaActivityService.getById(orderItem.getPromotionId());
KanjiaActivityGoodsDTO kanjiaActivityGoodsDTO = kanjiaActivityGoodsService.getKanjiaGoodsDetail(kanjiaActivity.getKanjiaActivityGoodsId());
- kanjiaActivityGoodsDTO.setStock(Convert.toInt(promotionStocks.get(0).toString()));
+
+ Integer stock = Integer.parseInt(cache.get(PromotionGoodsService.getPromotionGoodsStockCacheKey(promotionTypeEnum, orderItem.getPromotionId(), orderItem.getSkuId())).toString());
+ kanjiaActivityGoodsDTO.setStock(stock);
+
kanjiaActivityGoodsService.updateById(kanjiaActivityGoodsDTO);
this.mongoTemplate.save(kanjiaActivityGoodsDTO);
//修改积分商品库存
} else if (promotionTypeEnum.equals(PromotionTypeEnum.POINTS_GOODS)) {
PointsGoodsVO pointsGoodsVO = pointsGoodsService.getPointsGoodsDetail(orderItem.getPromotionId());
- pointsGoodsVO.setActiveStock(Convert.toLong(promotionStocks.get(0).toString()));
+ Integer stock = Integer.parseInt(cache.get(PromotionGoodsService.getPromotionGoodsStockCacheKey(promotionTypeEnum, orderItem.getPromotionId(), orderItem.getSkuId())).toString());
+ pointsGoodsVO.setActiveStock(stock);
pointsGoodsService.updateById(pointsGoodsVO);
this.mongoTemplate.save(pointsGoodsVO);
} else {
diff --git a/framework/src/main/java/cn/lili/common/enums/ResultCode.java b/framework/src/main/java/cn/lili/common/enums/ResultCode.java
index c7384ecd..e92f93de 100644
--- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java
+++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java
@@ -119,7 +119,6 @@ public enum ResultCode {
USER_OLD_PASSWORD_ERROR(20016, "旧密码不正确"),
USER_COLLECTION_EXIST(20017, "无法重复收藏"),
USER_GRADE_IS_DEFAULT(20018, "会员等级为默认会员等级"),
- DELETE_EXIST(20019, "无法重复收藏"),
USER_NOT_BINDING(20020, "未绑定用户"),
USER_AUTO_REGISTER_ERROR(20021, "自动注册失败,请稍后重试"),
USER_OVERDUE_CONNECT_ERROR(20022, "授权信息已过期,请重新授权/登录"),
diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/PointsGoods.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/PointsGoods.java
index 87916a77..bf622f95 100644
--- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/PointsGoods.java
+++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/PointsGoods.java
@@ -37,7 +37,7 @@ public class PointsGoods extends BasePromotion {
private String pointsGoodsCategoryName;
@ApiModelProperty(value = "活动库存数量")
- private Long activeStock;
+ private Integer activeStock;
@ApiModelProperty(value = "兑换积分")
private Long points;
diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityGoodsParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityGoodsParams.java
index 82900494..bb817150 100644
--- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityGoodsParams.java
+++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityGoodsParams.java
@@ -2,6 +2,8 @@ package cn.lili.modules.promotion.entity.vos.kanjia;
import cn.hutool.core.text.CharSequenceUtil;
+import cn.lili.common.security.context.UserContext;
+import cn.lili.common.security.enums.UserEnums;
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.ApiModelProperty;
@@ -53,10 +55,14 @@ public class KanjiaActivityGoodsParams implements Serializable {
queryWrapper.eq("promotion_status", promotionStatus);
}
if (startTime != null) {
- queryWrapper.ge("start_time", new Date(startTime));
+ queryWrapper.le("start_time", new Date(startTime));
}
if (endTime != null) {
- queryWrapper.le("end_time", new Date(endTime));
+ queryWrapper.ge("end_time", new Date(endTime));
+ }
+ if (UserContext.getCurrentUser() != null && UserContext.getCurrentUser().getRole().equals(UserEnums.MEMBER)) {
+
+ queryWrapper.gt("stock", 0);
}
queryWrapper.eq("delete_flag", false);
return queryWrapper;
diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java
index 38b3e81d..7533bf3b 100644
--- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java
@@ -281,7 +281,7 @@ public class CouponServiceImpl extends ServiceImpl impleme
*/
@Override
public void usedCoupon(String couponId, Integer usedNum) {
- CouponVO couponVO = checkStatus(couponId);
+ CouponVO couponVO = this.mongoTemplate.findById(couponId, CouponVO.class);
couponVO.setUsedNum(couponVO.getUsedNum() + usedNum);
LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(Coupon::getId, couponId);
diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/MemberAddressServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/MemberAddressServiceImpl.java
index ca80e933..1272fc18 100644
--- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/MemberAddressServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/MemberAddressServiceImpl.java
@@ -1,11 +1,11 @@
package cn.lili.modules.promotion.serviceimpl;
import cn.lili.common.security.context.UserContext;
-import cn.lili.mybatis.util.PageUtil;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.member.entity.dos.MemberAddress;
import cn.lili.modules.member.mapper.MemberAddressMapper;
import cn.lili.modules.promotion.service.MemberAddressService;
+import cn.lili.mybatis.util.PageUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -14,8 +14,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.List;
-
/**
* 收货地址业务层实现
*
@@ -27,7 +25,7 @@ import java.util.List;
public class MemberAddressServiceImpl extends ServiceImpl implements MemberAddressService {
@Override
- public IPage getAddressByMember(PageVO page,String memberId) {
+ public IPage getAddressByMember(PageVO page, String memberId) {
return this.page(PageUtil.initPage(page),
new QueryWrapper()
.eq("member_id", memberId));
@@ -69,10 +67,6 @@ public class MemberAddressServiceImpl extends ServiceImpl()
- .eq("id", memberAddress.getId()));
return memberAddress;
}
@@ -85,21 +79,21 @@ public class MemberAddressServiceImpl extends ServiceImpl list = this.baseMapper.selectList(new QueryWrapper().eq("member_id", shippingAddress.getMemberId()));
- if (list.size() == 1) {
- shippingAddress.setIsDefault(true);
- }
+ private void updateDefaultShippingAddress(MemberAddress memberAddress) {
//如果不是默认地址不需要处理
- if (shippingAddress.getIsDefault()) {
+ if (memberAddress.getIsDefault()) {
//将会员的地址修改为非默认地址
LambdaUpdateWrapper lambdaUpdateWrapper = Wrappers.lambdaUpdate();
lambdaUpdateWrapper.set(MemberAddress::getIsDefault, false);
- lambdaUpdateWrapper.eq(MemberAddress::getMemberId, shippingAddress.getMemberId());
+ lambdaUpdateWrapper.eq(MemberAddress::getMemberId, memberAddress.getMemberId());
this.update(lambdaUpdateWrapper);
+
+ //修改会员地址
+ this.update(memberAddress,
+ new QueryWrapper()
+ .eq("id", memberAddress.getId()));
}
}
diff --git a/pom.xml b/pom.xml
index af3b627f..e88664e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -75,6 +75,11 @@
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 3.1.0
+
com.spotify
docker-maven-plugin