diff --git a/config/application.yml b/config/application.yml index 4e5c9dac..ff9ed60e 100644 --- a/config/application.yml +++ b/config/application.yml @@ -24,13 +24,13 @@ spring: boot: admin: client: - url: http://192.168.0.108:8000 + url: http://127.0.0.1:8000 cache: type: redis # Redis redis: - host: 192.168.0.108 - port: 30379 + host: 127.0.0.1 + port: 6379 password: lilishop lettuce: pool: @@ -60,7 +60,7 @@ spring: default-datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.0.108:30306/kuaidi100?useUnicode=true&characterEncoding=utf-8&useSSL=false&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + url: jdbc:mysql://127.0.0.1:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai username: root password: lilishop maxActive: 50 @@ -241,16 +241,16 @@ lili: sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6 #域名 domain: - pc: http://192.168.0.108:8888 - wap: http://192.168.0.108:8888 - seller: http://192.168.0.108:8888 - admin: http://192.168.0.108:8888 + pc: http://127.0.0.1:8888 + wap: http://127.0.0.1:8888 + seller: http://127.0.0.1:8888 + admin: http://127.0.0.1:8888 #api地址 api: buyer: https://z171l91606.51mypc.cn - base: http://192.168.0.108:8888 - manager: http://192.168.0.108:8888 - seller: http://192.168.0.108:8888 + base: http://127.0.0.1:8888 + manager: http://127.0.0.1:8888 + seller: http://127.0.0.1:8888 # jwt 细节设定 jwt-setting: @@ -269,7 +269,7 @@ lili: data: elasticsearch: cluster-name: elasticsearch - cluster-nodes: 192.168.0.108:30920 + cluster-nodes: 127.0.0.1:9200 index: number-of-replicas: 0 number-of-shards: 3 @@ -301,7 +301,7 @@ lili: after-sale-topic: lili_after_sale_topic after-sale-group: lili_after_sale_group rocketmq: - name-server: 192.168.0.108:30876 + name-server: 127.0.0.1:9876 isVIPChannel: false producer: group: lili_group @@ -310,7 +310,7 @@ rocketmq: xxl: job: admin: - addresses: http://192.168.0.108:9001/xxl-job-admin + addresses: http://127.0.0.1:9001/xxl-job-admin executor: appname: xxl-job-executor-lilishop address: diff --git a/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java b/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java index 4edd7f41..53812919 100644 --- a/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java @@ -1,6 +1,8 @@ package cn.lili.event.impl; +import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateTime; +import cn.hutool.json.JSONUtil; import cn.lili.event.AfterSaleStatusChangeEvent; import cn.lili.event.OrderStatusChangeEvent; import cn.lili.modules.distribution.entity.dos.DistributionOrder; @@ -10,6 +12,10 @@ import cn.lili.modules.distribution.service.DistributionOrderService; import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; +import cn.lili.modules.system.entity.dos.Setting; +import cn.lili.modules.system.entity.dto.DistributionSetting; +import cn.lili.modules.system.entity.enums.SettingEnum; +import cn.lili.modules.system.service.SettingService; import cn.lili.timetask.handler.EveryDayExecute; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; @@ -39,6 +45,9 @@ public class DistributionOrderExecute implements OrderStatusChangeEvent, EveryDa @Resource private DistributionOrderMapper distributionOrderMapper; + @Autowired + private SettingService settingService; + @Override public void orderChange(OrderMessage orderMessage) { @@ -65,14 +74,16 @@ public class DistributionOrderExecute implements OrderStatusChangeEvent, EveryDa @Override public void execute() { - //计算分销提佣 - distributionOrderMapper.rebate(DistributionOrderStatusEnum.WAIT_BILL.name(), new DateTime()); - - //修改分销订单状态 - distributionOrderService.update(new LambdaUpdateWrapper() - .eq(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_BILL.name()) - .le(DistributionOrder::getSettleCycle, new DateTime()) - .set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_CASH.name())); + log.info("分销订单定时开始执行"); + //设置结算天数(解冻日期) + Setting setting = settingService.get(SettingEnum.DISTRIBUTION_SETTING.name()); + DistributionSetting distributionSetting = JSONUtil.toBean(setting.getSettingValue(), DistributionSetting.class); + //解冻时间 + DateTime dateTime = new DateTime(); + //当前时间-结算天数=最终结算时间 + dateTime = dateTime.offsetNew(DateField.DAY_OF_MONTH, -distributionSetting.getCashDay()); + //分销人员订单结算 + distributionOrderService.updateRebate(dateTime,DistributionOrderStatusEnum.WAIT_BILL.name()); } diff --git a/consumer/src/main/java/cn/lili/event/impl/GoodsSkuExecute.java b/consumer/src/main/java/cn/lili/event/impl/GoodsSkuExecute.java index 6d91e9e7..47b77d6f 100644 --- a/consumer/src/main/java/cn/lili/event/impl/GoodsSkuExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/GoodsSkuExecute.java @@ -1,12 +1,21 @@ package cn.lili.event.impl; +import cn.lili.cache.Cache; +import cn.lili.cache.CachePrefix; import cn.lili.event.GoodsCommentCompleteEvent; +import cn.lili.event.StoreSettingChangeEvent; +import cn.lili.modules.goods.entity.dos.GoodsSku; +import cn.lili.modules.goods.entity.dto.GoodsSearchParams; import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.member.entity.dos.MemberEvaluation; +import cn.lili.modules.store.entity.dos.Store; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + /** * 商品SKU变化 * @@ -14,7 +23,7 @@ import org.springframework.stereotype.Service; * @since 2020-07-03 11:20 */ @Service -public class GoodsSkuExecute implements GoodsCommentCompleteEvent { +public class GoodsSkuExecute implements GoodsCommentCompleteEvent, StoreSettingChangeEvent { /** * 商品 @@ -22,9 +31,23 @@ public class GoodsSkuExecute implements GoodsCommentCompleteEvent { @Autowired private GoodsSkuService goodsSkuService; + @Autowired + private Cache cache; @Override public void goodsComment(MemberEvaluation memberEvaluation) { goodsSkuService.updateGoodsSkuCommentNum(memberEvaluation.getSkuId()); } + + @Override + public void storeSettingChange(Store store) { + //修改数据后,清除商品索引 + GoodsSearchParams goodsSearchParams = new GoodsSearchParams(); + goodsSearchParams.setStoreId(store.getId()); + List goodsSkuKeys = new ArrayList<>(); + for (GoodsSku goodsSku : goodsSkuService.getGoodsSkuByList(goodsSearchParams)) { + goodsSkuKeys.add(CachePrefix.GOODS_SKU.getPrefix()+goodsSku.getId()); + } + cache.multiDel(goodsSkuKeys); + } } diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java index ade5ea90..6370b260 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java @@ -2,9 +2,12 @@ package cn.lili.timetask.handler.impl.order; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; +import cn.lili.modules.distribution.service.DistributionOrderService; import cn.lili.modules.member.entity.dto.MemberEvaluationDTO; import cn.lili.modules.member.entity.enums.EvaluationGradeEnum; import cn.lili.modules.member.service.MemberEvaluationService; @@ -69,6 +72,9 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { @Autowired private AfterSaleService afterSaleService; + @Autowired + private DistributionOrderService distributionOrderService; + /** * 执行每日任务 */ @@ -179,6 +185,15 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { .set(OrderItem::getAfterSaleStatus, OrderItemAfterSaleStatusEnum.EXPIRED.name()) .in(OrderItem::getId, orderItemIdList); orderItemService.update(lambdaUpdateWrapper); + //修改订售后状态 + List orderItemsList = orderItems.stream() + .map((orderItem)->{ + orderItem.setAfterSaleStatus(OrderItemAfterSaleStatusEnum.EXPIRED.name()); + return orderItem; + }) + .collect(Collectors.toList()); + //修改对应分销订单状态 + distributionOrderService.updateDistributionOrderStatus(orderItemsList); } } 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 d04690f5..e2b702d2 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -202,8 +202,8 @@ public enum ResultCode { ORDER_BATCH_DELIVER_ERROR(31013, "批量发货,文件读取失败"), ORDER_ITEM_NOT_EXIST(31014, "当前订单项不存在!"), POINT_NOT_ENOUGH(31015, "当前会员积分不足购买当前积分商品!"), - ORDER_LABEL_ORDER_ERROR(31016, "订单不能打印电子面单"), + ORDER_PRICE_ERROR(31017,"订单金额不能小于等于0"), /** diff --git a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java index fc760ac4..f29b9987 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java +++ b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java @@ -81,7 +81,7 @@ public class DistributionOrder extends BaseIdEntity { private Integer num; public DistributionOrder(StoreFlow storeFlow) { - distributionOrderStatus = DistributionOrderStatusEnum.WAIT_BILL.name(); + distributionOrderStatus = DistributionOrderStatusEnum.NO_COMPLETED.name(); memberId = storeFlow.getMemberId(); memberName = storeFlow.getMemberName(); rebate = storeFlow.getDistributionRebate(); diff --git a/framework/src/main/java/cn/lili/modules/distribution/entity/enums/DistributionOrderStatusEnum.java b/framework/src/main/java/cn/lili/modules/distribution/entity/enums/DistributionOrderStatusEnum.java index 16c6fdc0..240b9752 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/entity/enums/DistributionOrderStatusEnum.java +++ b/framework/src/main/java/cn/lili/modules/distribution/entity/enums/DistributionOrderStatusEnum.java @@ -6,6 +6,8 @@ package cn.lili.modules.distribution.entity.enums; * @author pikachu */ public enum DistributionOrderStatusEnum { + //未完成 + NO_COMPLETED("未完成"), //待结算(冻结) WAIT_BILL("待结算"), //待提现 diff --git a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionOrderService.java b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionOrderService.java index 122ba134..7b52cf36 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionOrderService.java +++ b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionOrderService.java @@ -1,10 +1,14 @@ package cn.lili.modules.distribution.service; +import cn.hutool.core.date.DateTime; import cn.lili.modules.distribution.entity.dos.DistributionOrder; import cn.lili.modules.distribution.entity.vos.DistributionOrderSearchParams; +import cn.lili.modules.order.order.entity.dos.OrderItem; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * 分销订单业务层 @@ -45,4 +49,17 @@ public interface DistributionOrderService extends IService { */ void refundOrder(String afterSaleSn); + /** + * 分销订单状态修改 + * + * @param orderItems + */ + void updateDistributionOrderStatus(List orderItems); + + /** + * 分销订单结算 + * @param dateTime + * @param distributionOrderStatus + */ + void updateRebate(DateTime dateTime, String distributionOrderStatus); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java index 6fb74ad7..c44efde8 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java @@ -1,19 +1,26 @@ package cn.lili.modules.distribution.serviceimpl; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateTime; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import cn.lili.common.utils.CurrencyUtil; +import cn.lili.common.utils.SpringContextUtil; import cn.lili.modules.distribution.entity.dos.Distribution; import cn.lili.modules.distribution.entity.dos.DistributionOrder; import cn.lili.modules.distribution.entity.enums.DistributionOrderStatusEnum; +import cn.lili.modules.distribution.entity.enums.DistributionStatusEnum; import cn.lili.modules.distribution.entity.vos.DistributionOrderSearchParams; import cn.lili.modules.distribution.mapper.DistributionOrderMapper; import cn.lili.modules.distribution.service.DistributionOrderService; import cn.lili.modules.distribution.service.DistributionService; import cn.lili.modules.order.order.entity.dos.Order; +import cn.lili.modules.order.order.entity.dos.OrderItem; import cn.lili.modules.order.order.entity.dos.StoreFlow; import cn.lili.modules.order.order.entity.dto.StoreFlowQueryDTO; +import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.StoreFlowService; @@ -31,7 +38,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** @@ -107,14 +118,7 @@ public class DistributionOrderServiceImpl extends ServiceImpl() - .eq(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_BILL.name()) - .le(DistributionOrder::getSettleCycle, dateTime) - .set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_CASH.name())); + dateTime = dateTime.offsetNew(DateField.DAY_OF_MONTH, -distributionSetting.getCashDay()); + //防止事务失效,采用上下文获取bean + DistributionOrderService bean = SpringContextUtil.getBean(DistributionOrderService.class); + //分销订单结算 + bean.updateRebate(dateTime, DistributionOrderStatusEnum.WAIT_BILL.name()); } } @@ -214,4 +214,128 @@ public class DistributionOrderServiceImpl extends ServiceImpl orderItems) { + if (orderItems.isEmpty()) { + return; + } + + //获取未完成分销订单 + List distributionOrderList = this.list(new LambdaQueryWrapper() + .eq(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.NO_COMPLETED.name())); + + if (distributionOrderList.isEmpty()) { + return; + } + + List list = ListUtil.list(false); + + orderItems.stream().forEach(orderItem -> { + //订单售后状态为已失效并且投诉状态为已失效 + if (StrUtil.equals(OrderItemAfterSaleStatusEnum.EXPIRED.name(), orderItem.getAfterSaleStatus())) { + + + List collect = distributionOrderList.stream() + .filter(distributionOrder -> StrUtil.equals(distributionOrder.getOrderItemSn(), orderItem.getSn())) + .map((distributionOrder) -> { + distributionOrder.setDistributionOrderStatus(DistributionOrderStatusEnum.WAIT_BILL.name()); + distributionOrder.setSettleCycle(new Date()); + return distributionOrder; + }) + .collect(Collectors.toList()); + + list.addAll(collect); + } + + }); + + if (!list.isEmpty()) { + //批量修改分销订单结算状态 + this.updateBatchById(list); + } + } + + @Override + public void updateRebate(DateTime dateTime, String distributionOrderStatus) { + //结算时间延后五分钟 + dateTime = dateTime.offsetNew(DateField.MINUTE, 5); + //获取待结算订单 + List distributionOrderList = this.list(new LambdaQueryWrapper() + .eq(DistributionOrder::getDistributionOrderStatus, distributionOrderStatus) + .isNotNull(DistributionOrder::getSettleCycle) + .le(DistributionOrder::getSettleCycle, dateTime)); + //校验待结算订单 + if (ObjectUtil.isNotNull(distributionOrderList) && distributionOrderList.size() > 0) { + //结算分销人员信息列表 + List distributionUpdateList = new ArrayList<>(); + //获取分销员信息 + List distributionList = distributionService.list(new LambdaQueryWrapper() + .eq(Distribution::getDistributionStatus, DistributionStatusEnum.PASS.name())); + //根据销人员获取对应分销订单 + Map> distributionOrderList1 = distributionOrderList.stream() + .collect(Collectors.groupingBy(DistributionOrder::getDistributionId)); + + //校验分销订单不为空 + if (ObjectUtil.isNotNull(distributionOrderList1) && distributionOrderList1.size() > 0) { + //遍历分销订单map + distributionOrderList1.forEach((key, value) -> { + //计算分销结算金额 + distributionUpdateList.add(checkDistribution(key, value, distributionList)); + }); + } + + //校验分销信息列表不为空 + if (ObjectUtil.isNotNull(distributionUpdateList) && !distributionUpdateList.isEmpty()) { + //修改分销员收益 + distributionService.updateBatchById(distributionUpdateList); + distributionOrderList.stream().forEach(distributionOrder -> { + //修改分销订单状态为待提现 + distributionOrder.setDistributionOrderStatus(DistributionOrderStatusEnum.WAIT_CASH.name()); + }); + } + + //修改分销订单状态 + this.updateBatchById(distributionOrderList); + } + + + } + + + /** + * 计算分销结算金额 + * + * @param distributionId 分销ID + * @param list 分销订单 + * @param distributionList 分销列表 + * @return + */ + public Distribution checkDistribution(String distributionId, List list, List distributionList) { + //获取所有待结算订单分销人员信息 + Distribution distribution = distributionList.parallelStream().filter(a -> StrUtil.equals(a.getId(), distributionId)).collect(Collectors.toList()).get(0); + + //获取分销订单总金额 + double rebate = list.stream().mapToDouble(DistributionOrder::getRebate).sum(); + + //检验单分销人员冻结金额为负数时.扣除负数冻结金额后再结算 + if (distribution.getCommissionFrozen() < 0) { + rebate = CurrencyUtil.add(distribution.getCommissionFrozen() == null ? 0.0 : distribution.getCommissionFrozen(), rebate); + } + //结算订单总金额+分销可提现金额 + Double canRebate = CurrencyUtil.add(rebate, distribution.getCanRebate() == null ? 0.0 : distribution.getCanRebate()); + //结算金额小于0 + if (canRebate < 0) { + //结算订单总金额+分销可提现金额 + distribution.setCanRebate(0.0); + //冻结金额 + distribution.setCommissionFrozen(canRebate); + } else { + //结算订单总金额+分销可提现金额 + distribution.setCanRebate(canRebate); + //冻结金额 + distribution.setCommissionFrozen(0.0); + } + + return distribution; + } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java b/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java index f05087fa..1cef92e1 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java @@ -1,5 +1,6 @@ package cn.lili.modules.order.cart.entity.vo; +import cn.lili.common.utils.CurrencyUtil; import cn.lili.modules.distribution.entity.dos.DistributionGoods; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; @@ -123,6 +124,18 @@ public class CartSkuVO extends CartBase implements Serializable { } } + public void rebuildBySku(GoodsSku goodsSku) { + this.goodsSku = goodsSku; + this.purchasePrice = goodsSku.getPromotionFlag() != null && goodsSku.getPromotionFlag() ? goodsSku.getPromotionPrice() : goodsSku.getPrice(); + this.utilPrice = goodsSku.getPromotionFlag() != null && goodsSku.getPromotionFlag() ? goodsSku.getPromotionPrice() : goodsSku.getPrice(); + + + //计算购物车小计 + this.subTotal = CurrencyUtil.mul(this.getPurchasePrice(), this.getNum()); + this.setStoreId(goodsSku.getStoreId()); + this.setStoreName(goodsSku.getStoreName()); + } + public Map getPromotionMap() { return PromotionTools.filterInvalidPromotionsMap(this.promotionMap); } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java index c0d5823d..a39e99ae 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java @@ -36,7 +36,10 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -74,13 +77,17 @@ public class CheckDataRender implements CartRenderStep { @Override public void render(TradeDTO tradeDTO) { - //预校验 - preCalibration(tradeDTO); + //校验商品有效性 checkData(tradeDTO); + //预校验 + preCalibration(tradeDTO); + + //批量销售预处理 preSaleModel(tradeDTO); + //店铺分组数据初始化 groupStore(tradeDTO); @@ -106,15 +113,12 @@ public class CheckDataRender implements CartRenderStep { //缓存中的商品信息 GoodsSku dataSku = goodsSkuService.getGoodsSkuByIdFromCache(cartSkuVO.getGoodsSku().getId()); - - //商品上架状态判定 + //商品上架状态判定 sku为空、sku非上架状态、sku审核不通过 boolean checkGoodsStatus = dataSku == null || !GoodsAuthEnum.PASS.name().equals(dataSku.getAuthFlag()) || !GoodsStatusEnum.UPPER.name().equals(dataSku.getMarketEnable()); - //商品有效性判定 + //商品有效性判定 sku不为空且sku的更新时间不为空且sku的更新时间在购物车sku的更新时间之后 boolean checkGoodsValid = dataSku != null && dataSku.getUpdateTime() != null && dataSku.getUpdateTime().after(cartSkuVO.getGoodsSku().getUpdateTime()); - Map promotionMap = dataSku != null ? promotionGoodsService.getCurrentGoodsPromotion(dataSku, tradeDTO.getCartTypeEnum().name()) : null; - log.info("dataSku: {}, goodsSku: {}", dataSku, cartSkuVO.getGoodsSku()); if (checkGoodsStatus || checkGoodsValid) { if (checkGoodsStatus) { //设置购物车未选中 @@ -125,14 +129,8 @@ public class CheckDataRender implements CartRenderStep { cartSkuVO.setErrorMessage("商品已下架"); } if (checkGoodsValid) { - CartSkuVO newCartSkuVO = new CartSkuVO(dataSku,promotionMap); - newCartSkuVO.setCartType(tradeDTO.getCartTypeEnum()); - newCartSkuVO.setNum(cartSkuVO.getNum()); - newCartSkuVO.setSubTotal(CurrencyUtil.mul(newCartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); - cartSkuVO = newCartSkuVO; - log.info("商品信息已更新,更新后的商品信息为:{}", cartSkuVO); + cartSkuVO.rebuildBySku(dataSku); } - continue; } //商品库存判定 @@ -164,7 +162,7 @@ public class CheckDataRender implements CartRenderStep { private void groupStore(TradeDTO tradeDTO) { //渲染的购物车 List cartList = new ArrayList<>(); - if(tradeDTO.getCartList() == null || tradeDTO.getCartList().size() == 0){ + if (tradeDTO.getCartList() == null || tradeDTO.getCartList().size() == 0) { //根据店铺分组 Map> storeCollect = tradeDTO.getSkuList().stream().collect(Collectors.groupingBy(CartSkuVO::getStoreId)); for (Map.Entry> storeCart : storeCollect.entrySet()) { diff --git a/framework/src/main/java/cn/lili/modules/permission/entity/vo/SystemLogVO.java b/framework/src/main/java/cn/lili/modules/permission/entity/vo/SystemLogVO.java index 6c5a813e..5087b0fc 100644 --- a/framework/src/main/java/cn/lili/modules/permission/entity/vo/SystemLogVO.java +++ b/framework/src/main/java/cn/lili/modules/permission/entity/vo/SystemLogVO.java @@ -2,7 +2,6 @@ package cn.lili.modules.permission.entity.vo; import cn.lili.common.utils.ObjectUtil; import cn.lili.elasticsearch.EsSuffix; -import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -40,9 +39,8 @@ public class SystemLogVO implements Serializable { @ApiModelProperty(value = "日志记录时间") - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - @Field(type = FieldType.Date, fielddata = true) - private Date createTime = new Date(); + @Field(type = FieldType.Long) + private Long createTime = new Date().getTime(); @ApiModelProperty(value = "请求用户") @Field(type = FieldType.Text) diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java index 6b0cb37a..669e6241 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java @@ -98,7 +98,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { @Override public EsGoodsRelatedInfo getSelector(EsGoodsSearchDTO goodsSearch, PageVO pageVo) { - NativeSearchQueryBuilder builder = createSearchQueryBuilder(goodsSearch, null); + NativeSearchQueryBuilder builder = createSearchQueryBuilder(goodsSearch, pageVo); //分类 AggregationBuilder categoryNameBuilder = AggregationBuilders.terms("categoryNameAgg").field("categoryNamePath.keyword"); builder.addAggregation(AggregationBuilders.terms("categoryAgg").field("categoryPath").subAggregation(categoryNameBuilder)); diff --git a/framework/src/main/java/cn/lili/modules/store/entity/dos/Store.java b/framework/src/main/java/cn/lili/modules/store/entity/dos/Store.java index 0c478eca..ba05c5dc 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/dos/Store.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/dos/Store.java @@ -82,7 +82,7 @@ public class Store extends BaseEntity { @ApiModelProperty(value = "服务评分") private Double serviceScore; - @ApiModelProperty(value = "物流描述") + @ApiModelProperty(value = "物流评分") private Double deliveryScore; @ApiModelProperty(value = "商品数量") diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java index e7928cf4..a45ef8a6 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java @@ -189,7 +189,7 @@ public class StoreServiceImpl extends ServiceImpl implements } /** - * 修改店铺详细细腻 + * 修改店铺详细信息 * * @param storeEditDTO 修改店铺信息 */ @@ -304,7 +304,7 @@ public class StoreServiceImpl extends ServiceImpl implements //获取当前操作的店铺 Store store = getStoreByMember(); - //校验迪纳普状态 + //校验店铺状态 checkStoreStatus(store); StoreDetail storeDetail = storeDetailService.getStoreDetail(store.getId()); //设置店铺的银行信息 @@ -317,10 +317,9 @@ public class StoreServiceImpl extends ServiceImpl implements //获取当前操作的店铺 Store store = getStoreByMember(); - //校验迪纳普状态 + //校验店铺状态 checkStoreStatus(store); BeanUtil.copyProperties(storeOtherInfoDTO, store); - this.updateById(store); StoreDetail storeDetail = storeDetailService.getStoreDetail(store.getId()); //设置店铺的其他信息 @@ -332,11 +331,7 @@ public class StoreServiceImpl extends ServiceImpl implements //修改店铺详细信息 storeDetailService.updateById(storeDetail); //设置店铺名称,修改店铺信息 - store.setStoreName(storeOtherInfoDTO.getStoreName()); store.setStoreDisable(StoreStatusEnum.APPLYING.name()); - store.setStoreCenter(storeOtherInfoDTO.getStoreCenter()); - store.setStoreDesc(storeOtherInfoDTO.getStoreDesc()); - store.setStoreLogo(storeOtherInfoDTO.getStoreLogo()); return this.updateById(store); } @@ -347,10 +342,11 @@ public class StoreServiceImpl extends ServiceImpl implements */ private void checkStoreStatus(Store store) { - //如果店铺状态为申请中或者已申请,则正常走流程,否则抛出异常 - if (store.getStoreDisable().equals(StoreStatusEnum.APPLY.name()) || store.getStoreDisable().equals(StoreStatusEnum.APPLYING.name())) { - return; - } else { + //如果店铺状态为已开启、已关闭、申请中,则抛出异常 + if (store.getStoreDisable().equals(StoreStatusEnum.OPEN.name()) + || store.getStoreDisable().equals(StoreStatusEnum.CLOSED.name()) + || store.getStoreDisable().equals(StoreStatusEnum.APPLYING.name()) + ) { throw new ServiceException(ResultCode.STORE_STATUS_ERROR); } @@ -386,7 +382,7 @@ public class StoreServiceImpl extends ServiceImpl implements AuthUser currentUser = UserContext.getCurrentUser(); List skuIdList = new ArrayList<>(); for (FootPrint footPrint : footprintService.list(new LambdaUpdateWrapper().eq(FootPrint::getStoreId, currentUser.getStoreId()).eq(FootPrint::getMemberId, memberId))) { - if(footPrint.getSkuId() != null){ + if (footPrint.getSkuId() != null) { skuIdList.add(footPrint.getSkuId()); } } diff --git a/manager-api/src/main/java/cn/lili/controller/order/OrderManagerController.java b/manager-api/src/main/java/cn/lili/controller/order/OrderManagerController.java index 00fc6bf8..07ef50e2 100644 --- a/manager-api/src/main/java/cn/lili/controller/order/OrderManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/order/OrderManagerController.java @@ -1,6 +1,9 @@ package cn.lili.controller.order; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.NumberUtil; import cn.lili.common.aop.annotation.PreventDuplicateSubmissions; +import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dto.MemberAddressDTO; @@ -96,7 +99,11 @@ public class OrderManagerController { @PutMapping(value = "/update/{orderSn}/price") public ResultMessage updateOrderPrice(@PathVariable String orderSn, @NotNull(message = "订单价格不能为空") @RequestParam Double price) { - return ResultUtil.data(orderPriceService.updatePrice(orderSn, price)); + if (NumberUtil.isGreater(Convert.toBigDecimal(price), Convert.toBigDecimal(0))) { + return ResultUtil.data(orderPriceService.updatePrice(orderSn, price)); + } else { + return ResultUtil.error(ResultCode.ORDER_PRICE_ERROR); + } } diff --git a/seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java b/seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java index d1345a1b..af8893f8 100644 --- a/seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java @@ -1,5 +1,7 @@ package cn.lili.controller.order; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.NumberUtil; import cn.lili.common.aop.annotation.PreventDuplicateSubmissions; import cn.lili.common.context.ThreadContextHolder; import cn.lili.common.enums.ResultCode; @@ -103,7 +105,11 @@ public class OrderStoreController { @PutMapping(value = "/update/{orderSn}/price") public ResultMessage updateOrderPrice(@PathVariable String orderSn, @NotNull(message = "订单价格不能为空") @RequestParam Double orderPrice) { - return ResultUtil.data(orderPriceService.updatePrice(orderSn, orderPrice)); + if (NumberUtil.isGreater(Convert.toBigDecimal(orderPrice), Convert.toBigDecimal(0))) { + return ResultUtil.data(orderPriceService.updatePrice(orderSn, orderPrice)); + } else { + return ResultUtil.error(ResultCode.ORDER_PRICE_ERROR); + } } @PreventDuplicateSubmissions diff --git a/seller-api/src/main/java/cn/lili/controller/other/LogisticsStoreController.java b/seller-api/src/main/java/cn/lili/controller/other/LogisticsStoreController.java index 40c0f783..3219474f 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/LogisticsStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/other/LogisticsStoreController.java @@ -82,7 +82,7 @@ public class LogisticsStoreController { @DeleteMapping(value = "/{id}") public ResultMessage cancel(@PathVariable String id) { String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); - boolean remove = storeLogisticsService.remove(new LambdaQueryWrapper().eq(StoreLogistics::getId, id).eq(StoreLogistics::getStoreId, storeId)); + boolean remove = storeLogisticsService.remove(new LambdaQueryWrapper().eq(StoreLogistics::getLogisticsId, id).eq(StoreLogistics::getStoreId, storeId)); return ResultUtil.data(remove); }