From 25582e2958c6b0200475a3ee94d8974625a1daae Mon Sep 17 00:00:00 2001 From: chc <1501738723@qq.com> Date: Tue, 19 Sep 2023 15:04:14 +0800 Subject: [PATCH 1/6] =?UTF-8?q?QQ=E7=8A=B6=E6=80=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5052027eb..156efcc8c 100644 --- a/README.md +++ b/README.md @@ -6,11 +6,11 @@ #### PS: **演示站点所有环境均部署master分支。如果有演示站点问题,可以反馈,如果演示站点没问题本地运行有问题,需自行处理** -##### 交流 qq 1群 961316482(已满) +##### 交流 qq 1群 961316482 ##### 交流 qq 2群 875294241(已满) ##### 交流 qq 3群 263785057(已满) ##### 交流 qq 4群 674617534 (已满) -##### 交流 qq 5群 594675235 +##### 交流 qq 5群 594675235 (已满) ##### 体验 公众号/小程序/APP 体验,扫描二维码 @@ -188,7 +188,7 @@ PS:手机验证码为 ‘111111’ ##### 交流 qq 2群 875294241(已满) ##### 交流 qq 3群 263785057(已满) ##### 交流 qq 4群 674617534(已满) -##### 交流 qq 5群 594675235 +##### 交流 qq 5群 594675235(已满) ### 附录 有人有自己的学习视频、学习记录文档、希望宣传关联开源项目等均可以私聊仓库所有者。 From 39e22f55612c2e6116695570c09b1fe3383a9600 Mon Sep 17 00:00:00 2001 From: "pikachu1995@126.com" Date: Thu, 21 Sep 2023 18:46:32 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=80=80=E6=AC=BE?= =?UTF-8?q?=EF=BC=8C=E5=8D=B3=E5=88=BB=E6=89=A3=E5=87=8F=E5=88=86=E9=94=80?= =?UTF-8?q?=E5=91=98=E5=86=BB=E7=BB=93=E4=BD=A3=E9=87=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/impl/DistributionOrderExecute.java | 9 ++---- .../service/DistributionOrderService.java | 3 +- .../DistributionOrderServiceImpl.java | 31 ++++++++++--------- .../order/entity/dto/StoreFlowQueryDTO.java | 5 ++- .../serviceimpl/StoreFlowServiceImpl.java | 5 ++- 5 files changed, 28 insertions(+), 25 deletions(-) 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 9c09c6382..10c050bae 100644 --- a/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java @@ -5,9 +5,7 @@ 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; import cn.lili.modules.distribution.entity.enums.DistributionOrderStatusEnum; -import cn.lili.modules.distribution.mapper.DistributionOrderMapper; 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; @@ -17,13 +15,10 @@ 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; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import javax.annotation.Resource; - /** * 分销订单入库 * @@ -78,14 +73,14 @@ public class DistributionOrderExecute implements OrderStatusChangeEvent, EveryDa //当前时间-结算天数=最终结算时间 dateTime = dateTime.offsetNew(DateField.DAY_OF_MONTH, -distributionSetting.getCashDay()); //分销人员订单结算 - distributionOrderService.updateRebate(dateTime,DistributionOrderStatusEnum.WAIT_BILL.name()); + distributionOrderService.updateRebate(dateTime, DistributionOrderStatusEnum.WAIT_BILL.name()); } @Override public void afterSaleStatusChange(AfterSale afterSale) { if (afterSale.getServiceStatus().equals(AfterSaleStatusEnum.COMPLETE.name())) { - distributionOrderService.refundOrder(afterSale.getSn()); + distributionOrderService.refundOrder(afterSale); } } 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 7b52cf369..8063afda8 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 @@ -3,6 +3,7 @@ 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.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.dos.OrderItem; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; @@ -47,7 +48,7 @@ public interface DistributionOrderService extends IService { * * @param afterSaleSn 售后单号 */ - void refundOrder(String afterSaleSn); + void refundOrder(AfterSale afterSale); /** * 分销订单状态修改 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 c44efde82..429010efd 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 @@ -16,6 +16,7 @@ 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.aftersale.entity.dos.AfterSale; 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; @@ -189,28 +190,27 @@ public class DistributionOrderServiceImpl extends ServiceImpl() - .eq(DistributionOrder::getOrderItemSn, storeFlow.getOrderItemSn())); + .eq(DistributionOrder::getOrderItemSn, afterSale.getOrderItemSn())); //分销订单不存在,则直接返回 if (distributionOrder == null) { return; } - if (distributionOrder.getDistributionOrderStatus().equals(DistributionOrderStatusEnum.WAIT_BILL.name())) { - this.update(new LambdaUpdateWrapper() - .eq(DistributionOrder::getOrderItemSn, storeFlow.getOrderItemSn()) - .set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.CANCEL.name())); - } - //如果已结算则创建退款分销订单 - else { - //修改分销员提成金额 - distributionService.subCanRebate(CurrencyUtil.sub(0, storeFlow.getDistributionRebate()), distributionOrder.getDistributionId()); + + distributionOrder.setSellBackRebate(CurrencyUtil.add(distributionOrder.getSellBackRebate(), refundStoreFlow.getDistributionRebate())); + distributionOrder.setRebate(CurrencyUtil.sub(distributionOrder.getSellBackRebate(), refundStoreFlow.getDistributionRebate())); + if (distributionOrder.getRebate() == 0) { + distributionOrder.setDistributionOrderStatus(DistributionOrderStatusEnum.REFUND.name()); } + this.updateById(distributionOrder); + +// 修改分销员提成金额 + distributionService.subCanRebate(CurrencyUtil.sub(0, refundStoreFlow.getDistributionRebate()), distributionOrder.getDistributionId()); } } @@ -310,7 +310,8 @@ public class DistributionOrderServiceImpl extends ServiceImpl list, List distributionList) { + 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); diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/StoreFlowQueryDTO.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/StoreFlowQueryDTO.java index 958b47ba2..9b39df286 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/StoreFlowQueryDTO.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/StoreFlowQueryDTO.java @@ -23,9 +23,12 @@ public class StoreFlowQueryDTO { @ApiModelProperty(value = "售后编号") private String refundSn; - @ApiModelProperty(value = "售后编号") + @ApiModelProperty(value = "订单编号") private String orderSn; + @ApiModelProperty(value = "订单货物编号") + private String orderItemSn; + @ApiModelProperty(value = "过滤只看分销订单") private Boolean justDistribution; diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java index 2616b74cc..f657f1c26 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java @@ -198,10 +198,13 @@ public class StoreFlowServiceImpl extends ServiceImpl Date: Fri, 22 Sep 2023 17:25:46 +0800 Subject: [PATCH 3/6] =?UTF-8?q?1.=E5=88=A4=E6=96=AD=E5=88=86=E9=94=80?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=98=AF=E5=90=A6=E5=8C=85=E5=90=AB=E9=80=80?= =?UTF-8?q?=E6=AC=BE=202.=E8=AE=A2=E5=8D=95=E8=B4=A7=E7=89=A9=E5=85=A8?= =?UTF-8?q?=E9=83=A8=E9=80=80=E6=AC=BE=E5=88=99=E8=AE=A2=E5=8D=95=E5=8F=96?= =?UTF-8?q?=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lili/event/impl/FullDiscountExecute.java | 2 +- .../event/impl/OrderStatusHandlerExecute.java | 34 ++++++++++++++++++- .../lili/event/impl/StockUpdateExecute.java | 2 +- .../impl/order/CancelOrderTaskExecute.java | 2 +- .../DistributionOrderServiceImpl.java | 8 +++-- .../order/order/service/OrderService.java | 3 +- .../order/serviceimpl/OrderServiceImpl.java | 18 +++++----- 7 files changed, 54 insertions(+), 15 deletions(-) diff --git a/consumer/src/main/java/cn/lili/event/impl/FullDiscountExecute.java b/consumer/src/main/java/cn/lili/event/impl/FullDiscountExecute.java index 86a08cbb6..7949489c7 100644 --- a/consumer/src/main/java/cn/lili/event/impl/FullDiscountExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/FullDiscountExecute.java @@ -104,7 +104,7 @@ public class FullDiscountExecute implements TradeEvent, OrderStatusChangeEvent { searchParams.setOrderPromotionType(OrderPromotionTypeEnum.GIFT.name()); List orders = orderService.queryListByParams(searchParams); if (orders != null && !orders.isEmpty()) { - orderService.systemCancel(orders.get(0).getSn(),"主订单取消,赠送订单字段自动取消"); + orderService.systemCancel(orders.get(0).getSn(),"主订单取消,赠送订单字段自动取消",true); } } } diff --git a/consumer/src/main/java/cn/lili/event/impl/OrderStatusHandlerExecute.java b/consumer/src/main/java/cn/lili/event/impl/OrderStatusHandlerExecute.java index b9a4717f9..d6bb11e44 100644 --- a/consumer/src/main/java/cn/lili/event/impl/OrderStatusHandlerExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/OrderStatusHandlerExecute.java @@ -1,12 +1,20 @@ package cn.lili.event.impl; +import cn.lili.event.AfterSaleStatusChangeEvent; import cn.lili.event.TradeEvent; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.cart.entity.dto.TradeDTO; +import cn.lili.modules.order.order.entity.dos.OrderItem; +import cn.lili.modules.order.order.service.OrderItemService; +import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.TradeService; +import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + /** * 订单状态处理类 * @@ -14,11 +22,15 @@ import org.springframework.stereotype.Service; * @since 2020-07-03 11:20 **/ @Service -public class OrderStatusHandlerExecute implements TradeEvent { +public class OrderStatusHandlerExecute implements TradeEvent, AfterSaleStatusChangeEvent { @Autowired private TradeService tradeService; + @Autowired + private OrderItemService orderItemService; + @Autowired + private OrderService orderService; @Override public void orderCreate(TradeDTO tradeDTO) { @@ -28,4 +40,24 @@ public class OrderStatusHandlerExecute implements TradeEvent { } } + + @Override + public void afterSaleStatusChange(AfterSale afterSale) { + if (afterSale.getServiceStatus().equals(AfterSaleStatusEnum.COMPLETE.name())) { + //循环订单货物,判断是否已经全部售后 + List orderItems = orderItemService.getByOrderSn(afterSale.getOrderSn()); + // 总退货数量 + int returnCount = 0; + // 总购买数量 + int deliverCount = 0; + for (OrderItem orderItem : orderItems) { + returnCount += orderItem.getReturnGoodsNumber(); + deliverCount += orderItem.getNum(); + } + if (returnCount == deliverCount) { + orderService.systemCancel(afterSale.getOrderSn(),"订单货物全部退款",false); + } + + } + } } 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 ceee4a1a0..6736cbe0d 100644 --- a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java @@ -222,7 +222,7 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { * @param orderSn 失败入库订单信息 */ private void errorOrder(String orderSn) { - orderService.systemCancel(orderSn, outOfStockMessage); + orderService.systemCancel(orderSn, outOfStockMessage,true); } diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java index 84e34132a..93b14e4f9 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java @@ -54,7 +54,7 @@ public class CancelOrderTaskExecute implements EveryMinuteExecute { List list = orderService.list(queryWrapper); List cancelSnList = list.stream().map(Order::getSn).collect(Collectors.toList()); for (String sn : cancelSnList) { - orderService.systemCancel(sn, "超时未支付自动取消"); + orderService.systemCancel(sn, "超时未支付自动取消",false); } } } 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 429010efd..c46e47b33 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 @@ -201,9 +201,13 @@ public class DistributionOrderServiceImpl extends ServiceImpl { * * @param orderSn 订单编号 * @param reason 错误原因 + * @param refundMoney 是否退款 */ - void systemCancel(String orderSn, String reason); + void systemCancel(String orderSn, String reason,Boolean refundMoney); /** * 根据sn查询 diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 19c2b2851..ee32c3685 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -318,14 +318,16 @@ public class OrderServiceImpl extends ServiceImpl implements @Override @OrderLogPoint(description = "'订单['+#orderSn+']系统取消,原因为:'+#reason", orderSn = "#orderSn") @Transactional(rollbackFor = Exception.class) - public void systemCancel(String orderSn, String reason) { + public void systemCancel(String orderSn, String reason,Boolean refundMoney) { Order order = this.getBySn(orderSn); order.setOrderStatus(OrderStatusEnum.CANCELLED.name()); order.setCancelReason(reason); this.updateById(order); - //生成店铺退款流水 - this.generatorStoreRefundFlow(order); - orderStatusMessage(order); + if(refundMoney){ + //生成店铺退款流水 + this.generatorStoreRefundFlow(order); + orderStatusMessage(order); + } } /** @@ -766,11 +768,11 @@ public class OrderServiceImpl extends ServiceImpl implements //如果未开启虚拟成团且已参团人数小于成团人数,则自动取消订单 String reason = "拼团活动结束订单未付款,系统自动取消订单"; if (CharSequenceUtil.isNotEmpty(entry.getKey())) { - this.systemCancel(entry.getKey(), reason); + this.systemCancel(entry.getKey(), reason,true); } else { for (Order order : entry.getValue()) { if (!CharSequenceUtil.equalsAny(order.getOrderStatus(), OrderStatusEnum.COMPLETED.name(), OrderStatusEnum.DELIVERED.name(), OrderStatusEnum.TAKE.name(), OrderStatusEnum.STAY_PICKED_UP.name())) { - this.systemCancel(order.getSn(), reason); + this.systemCancel(order.getSn(), reason,true); } } } @@ -795,7 +797,7 @@ public class OrderServiceImpl extends ServiceImpl implements //未付款订单自动取消 if (unpaidOrders != null && !unpaidOrders.isEmpty()) { for (Order unpaidOrder : unpaidOrders) { - this.systemCancel(unpaidOrder.getSn(), "拼团活动结束订单未付款,系统自动取消订单"); + this.systemCancel(unpaidOrder.getSn(), "拼团活动结束订单未付款,系统自动取消订单",false); } } List paidOrders = listMap.get(PayStatusEnum.PAID.name()); @@ -955,7 +957,7 @@ public class OrderServiceImpl extends ServiceImpl implements private void pintuanOrderFailed(List list) { for (Order order : list) { try { - this.systemCancel(order.getSn(), "拼团人数不足,拼团失败!"); + this.systemCancel(order.getSn(), "拼团人数不足,拼团失败!",true); } catch (Exception e) { log.error("拼团订单取消失败", e); } From 46911004db60fd0c3ebc131509cd70ffcc5173cc Mon Sep 17 00:00:00 2001 From: Chopper711 Date: Mon, 25 Sep 2023 10:54:47 +0800 Subject: [PATCH 4/6] =?UTF-8?q?refactor:=20=E8=99=9A=E6=8B=9F=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=A2=9E=E5=8A=A0=E5=8F=96=E6=B6=88=E5=88=A4=E5=AE=9A?= =?UTF-8?q?=EF=BC=8C=E8=A7=A3=E5=86=B3=E8=AE=A2=E5=8D=95=E9=80=80=E6=AC=BE?= =?UTF-8?q?=EF=BC=8C=E5=BE=85=E5=AE=A1=E6=A0=B8=E8=AE=A2=E5=8D=95=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E4=B8=8D=E5=8F=98=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/order/entity/vo/AllowOperation.java | 12 +++++--- .../order/serviceimpl/OrderServiceImpl.java | 28 ++++++++++++------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AllowOperation.java b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AllowOperation.java index 0db1700c4..ecd20b58a 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AllowOperation.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AllowOperation.java @@ -64,7 +64,8 @@ public class AllowOperation implements Serializable { } //新订单 - if (CharSequenceUtil.equalsAny(status, OrderStatusEnum.UNPAID.name(), OrderStatusEnum.PAID.name(), OrderStatusEnum.UNDELIVERED.name(), OrderStatusEnum.STAY_PICKED_UP.name())) { + if (CharSequenceUtil.equalsAny(status, OrderStatusEnum.UNPAID.name(), OrderStatusEnum.PAID.name(), OrderStatusEnum.UNDELIVERED.name(), + OrderStatusEnum.STAY_PICKED_UP.name(), OrderStatusEnum.TAKE.name())) { this.cancel = true; } //新订单,允许支付 @@ -86,7 +87,8 @@ public class AllowOperation implements Serializable { this.showLogistics = order.getDeliverStatus().equals(DeliverStatusEnum.DELIVERED.name()) && status.equals(OrderStatusEnum.DELIVERED.name()); //虚拟订单 或 自提订单可以核销 - this.take = (order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name()) && order.getOrderStatus().equals(OrderStatusEnum.TAKE.name())) || (order.getDeliveryMethod().equals(DeliveryMethodEnum.SELF_PICK_UP.name()) && order.getOrderStatus().equals(OrderStatusEnum.STAY_PICKED_UP.name())); + this.take = + (order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name()) && order.getOrderStatus().equals(OrderStatusEnum.TAKE.name())) || (order.getDeliveryMethod().equals(DeliveryMethodEnum.SELF_PICK_UP.name()) && order.getOrderStatus().equals(OrderStatusEnum.STAY_PICKED_UP.name())); } /** @@ -104,8 +106,10 @@ public class AllowOperation implements Serializable { this.editPrice = true; } - //新订单 - if (CharSequenceUtil.equalsAny(status, OrderStatusEnum.UNPAID.name(), OrderStatusEnum.PAID.name(), OrderStatusEnum.UNDELIVERED.name())) { + //取消判定 + if (CharSequenceUtil.equalsAny(status, OrderStatusEnum.UNPAID.name(), OrderStatusEnum.PAID.name(), OrderStatusEnum.UNDELIVERED.name(), + OrderStatusEnum.STAY_PICKED_UP.name(), + OrderStatusEnum.TAKE.name())) { this.cancel = true; } diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 19c2b2851..0db7e6540 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -171,7 +171,8 @@ public class OrderServiceImpl extends ServiceImpl implements orders.add(order); String message = "订单[" + item.getSn() + "]创建"; //记录日志 - orderLogs.add(new OrderLog(item.getSn(), UserContext.getCurrentUser().getId(), UserContext.getCurrentUser().getRole().getRole(), UserContext.getCurrentUser().getUsername(), message)); + orderLogs.add(new OrderLog(item.getSn(), UserContext.getCurrentUser().getId(), UserContext.getCurrentUser().getRole().getRole(), + UserContext.getCurrentUser().getUsername(), message)); item.getCheckedSkuList().forEach( sku -> { orderItems.add(new OrderItem(sku, item, tradeDTO)); @@ -260,7 +261,8 @@ public class OrderServiceImpl extends ServiceImpl implements LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Order::getOrderPromotionType, PromotionTypeEnum.PINTUAN.name()); queryWrapper.eq(Order::getPromotionId, pintuanId); - queryWrapper.nested(i -> i.eq(Order::getPayStatus, PayStatusEnum.PAID.name()).or(j -> j.eq(Order::getOrderStatus, OrderStatusEnum.PAID.name()))); + queryWrapper.nested(i -> i.eq(Order::getPayStatus, PayStatusEnum.PAID.name()).or(j -> j.eq(Order::getOrderStatus, + OrderStatusEnum.PAID.name()))); return this.list(queryWrapper); } @@ -299,7 +301,8 @@ public class OrderServiceImpl extends ServiceImpl implements OrderStatusEnum.UNDELIVERED.name(), OrderStatusEnum.UNPAID.name(), OrderStatusEnum.STAY_PICKED_UP.name(), - OrderStatusEnum.PAID.name())) { + OrderStatusEnum.PAID.name(), + OrderStatusEnum.TAKE.name())) { order.setOrderStatus(OrderStatusEnum.CANCELLED.name()); order.setCancelReason(reason); @@ -409,7 +412,8 @@ public class OrderServiceImpl extends ServiceImpl implements BeanUtil.copyProperties(memberAddressDTO, order); this.updateById(order); - OrderLog orderLog = new OrderLog(orderSn, UserContext.getCurrentUser().getId(), UserContext.getCurrentUser().getRole().getRole(), UserContext.getCurrentUser().getUsername(), message); + OrderLog orderLog = new OrderLog(orderSn, UserContext.getCurrentUser().getId(), UserContext.getCurrentUser().getRole().getRole(), + UserContext.getCurrentUser().getUsername(), message); orderLogService.save(orderLog); return order; @@ -456,8 +460,8 @@ public class OrderServiceImpl extends ServiceImpl implements public Order shunFengDelivery(String orderSn) { OrderDetailVO orderDetailVO = this.queryDetail(orderSn); String logisticsNo = logisticsService.sfCreateOrder(orderDetailVO); - Logistics logistics = logisticsService.getOne(new LambdaQueryWrapper().eq(Logistics::getCode,"SF")); - return delivery(orderSn,logisticsNo,logistics.getId()); + Logistics logistics = logisticsService.getOne(new LambdaQueryWrapper().eq(Logistics::getCode, "SF")); + return delivery(orderSn, logisticsNo, logistics.getId()); } @Override @@ -474,7 +478,8 @@ public class OrderServiceImpl extends ServiceImpl implements Order order = this.getBySn(orderSn); //获取店家信息 StoreDeliverGoodsAddressDTO storeDeliverGoodsAddressDTO = storeDetailService.getStoreDeliverGoodsAddressDto(order.getStoreId()); - String from = storeDeliverGoodsAddressDTO.getSalesConsignorAddressPath().substring(0, storeDeliverGoodsAddressDTO.getSalesConsignorAddressPath().indexOf(",") - 1); + String from = storeDeliverGoodsAddressDTO.getSalesConsignorAddressPath().substring(0, + storeDeliverGoodsAddressDTO.getSalesConsignorAddressPath().indexOf(",") - 1); String to = order.getConsigneeAddressPath().substring(0, order.getConsigneeAddressPath().indexOf(",") - 1); //获取踪迹信息 return logisticsService.getLogisticMapTrack(order.getLogisticsCode(), order.getLogisticsNo(), order.getConsigneeMobile(), from, to); @@ -582,7 +587,8 @@ public class OrderServiceImpl extends ServiceImpl implements @Override @Transactional(rollbackFor = Exception.class) public void sendUpdateStatusMessage(OrderMessage orderMessage) { - applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("发送订单变更mq消息", rocketmqCustomProperties.getOrderTopic(), OrderTagsEnum.STATUS_CHANGE.name(), JSONUtil.toJsonStr(orderMessage))); + applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("发送订单变更mq消息", rocketmqCustomProperties.getOrderTopic(), + OrderTagsEnum.STATUS_CHANGE.name(), JSONUtil.toJsonStr(orderMessage))); } @Override @@ -769,7 +775,8 @@ public class OrderServiceImpl extends ServiceImpl implements this.systemCancel(entry.getKey(), reason); } else { for (Order order : entry.getValue()) { - if (!CharSequenceUtil.equalsAny(order.getOrderStatus(), OrderStatusEnum.COMPLETED.name(), OrderStatusEnum.DELIVERED.name(), OrderStatusEnum.TAKE.name(), OrderStatusEnum.STAY_PICKED_UP.name())) { + if (!CharSequenceUtil.equalsAny(order.getOrderStatus(), OrderStatusEnum.COMPLETED.name(), OrderStatusEnum.DELIVERED.name(), + OrderStatusEnum.TAKE.name(), OrderStatusEnum.STAY_PICKED_UP.name())) { this.systemCancel(order.getSn(), reason); } } @@ -816,7 +823,8 @@ public class OrderServiceImpl extends ServiceImpl implements paidOrders.add(order); } for (Order paidOrder : paidOrders) { - if (!CharSequenceUtil.equalsAny(paidOrder.getOrderStatus(), OrderStatusEnum.COMPLETED.name(), OrderStatusEnum.DELIVERED.name(), OrderStatusEnum.TAKE.name(), OrderStatusEnum.STAY_PICKED_UP.name())) { + if (!CharSequenceUtil.equalsAny(paidOrder.getOrderStatus(), OrderStatusEnum.COMPLETED.name(), OrderStatusEnum.DELIVERED.name(), + OrderStatusEnum.TAKE.name(), OrderStatusEnum.STAY_PICKED_UP.name())) { if (OrderTypeEnum.NORMAL.name().equals(paidOrder.getOrderType())) { paidOrder.setOrderStatus(OrderStatusEnum.UNDELIVERED.name()); } else if (OrderTypeEnum.VIRTUAL.name().equals(paidOrder.getOrderType())) { From 01419cde157e99264e5c9f63e52dd171e0dfd0f3 Mon Sep 17 00:00:00 2001 From: Chopper711 Date: Mon, 25 Sep 2023 11:58:08 +0800 Subject: [PATCH 5/6] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=8A=A0=E5=BA=97?= =?UTF-8?q?=E9=93=BA=E8=8F=9C=E5=8D=95=E7=BB=B4=E6=8A=A4=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StoreMenuManagerController.java | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 manager-api/src/main/java/cn/lili/controller/permission/StoreMenuManagerController.java diff --git a/manager-api/src/main/java/cn/lili/controller/permission/StoreMenuManagerController.java b/manager-api/src/main/java/cn/lili/controller/permission/StoreMenuManagerController.java new file mode 100644 index 000000000..5f8ee523a --- /dev/null +++ b/manager-api/src/main/java/cn/lili/controller/permission/StoreMenuManagerController.java @@ -0,0 +1,78 @@ +package cn.lili.controller.permission; + +import cn.lili.common.aop.annotation.DemoSite; +import cn.lili.common.enums.ResultUtil; +import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.member.entity.dos.StoreMenu; +import cn.lili.modules.member.entity.vo.StoreMenuVO; +import cn.lili.modules.member.service.StoreMenuService; +import cn.lili.modules.permission.entity.dos.Menu; +import cn.lili.modules.permission.entity.dto.MenuSearchParams; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + + +/** + * 管理端,菜单管理接口 + * + * @author Chopper + * @since 2020/11/20 12:07 + */ +@Slf4j +@RestController +@Api(tags = "管理端,菜单管理接口") +@RequestMapping("/manager/permission/storeMenu") +public class StoreMenuManagerController { + + @Autowired + private StoreMenuService storeMenuService; + + @ApiOperation(value = "搜索菜单") + @GetMapping + public ResultMessage> searchPermissionList(MenuSearchParams searchParams) { + return ResultUtil.data(storeMenuService.searchList(searchParams)); + } + + @ApiOperation(value = "添加") + @PostMapping + @DemoSite + public ResultMessage add(StoreMenu menu) { + try { + storeMenuService.saveOrUpdateMenu(menu); + } catch (Exception e) { + log.error("添加菜单错误", e); + } + return ResultUtil.data(menu); + } + + @ApiImplicitParam(name = "id", value = "菜单ID", required = true, paramType = "path", dataType = "String") + @ApiOperation(value = "编辑") + @PutMapping(value = "/{id}") + @DemoSite + public ResultMessage edit(@PathVariable String id, StoreMenu menu) { + menu.setId(id); + storeMenuService.saveOrUpdateMenu(menu); + return ResultUtil.data(menu); + } + + @ApiOperation(value = "批量删除") + @DeleteMapping(value = "/{ids}") + @DemoSite + public ResultMessage delByIds(@PathVariable List ids) { + storeMenuService.deleteIds(ids); + return ResultUtil.success(); + } + + @ApiOperation(value = "获取所有菜单") + @GetMapping("/tree") + public ResultMessage> getAllMenuList() { + return ResultUtil.data(storeMenuService.tree()); + } + +} From 817f662cb7dcc9c20b77f5ec41de3c98a82ac1da Mon Sep 17 00:00:00 2001 From: "pikachu1995@126.com" Date: Tue, 26 Sep 2023 18:50:52 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E4=BB=B6-?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DB/version4.3toMASTER.sql | 18 +++++ .../controller/common/FileController.java | 7 +- .../common/FileDirectoryController.java | 64 +++++++++++++++++ .../controller/common/UploadController.java | 23 +++++-- .../cn/lili/modules/file/entity/File.java | 3 + .../modules/file/entity/FileDirectory.java | 33 +++++++++ .../file/entity/dto/FileDirectoryDTO.java | 22 ++++++ .../modules/file/entity/dto/FileOwnerDTO.java | 46 ++++++++++++- .../file/entity/dto/FileSearchParams.java | 18 +++++ .../file/mapper/FileDirectoryMapper.java | 14 ++++ .../file/service/FileDirectoryService.java | 33 +++++++++ .../modules/file/service/FileService.java | 21 +++--- .../serviceimpl/FileDirectoryServiceImpl.java | 68 +++++++++++++++++++ .../file/serviceimpl/FileServiceImpl.java | 49 ++++++++----- .../file/FileManagerController.java | 7 +- 15 files changed, 384 insertions(+), 42 deletions(-) create mode 100644 common-api/src/main/java/cn/lili/controller/common/FileDirectoryController.java create mode 100644 framework/src/main/java/cn/lili/modules/file/entity/FileDirectory.java create mode 100644 framework/src/main/java/cn/lili/modules/file/entity/dto/FileDirectoryDTO.java create mode 100644 framework/src/main/java/cn/lili/modules/file/entity/dto/FileSearchParams.java create mode 100644 framework/src/main/java/cn/lili/modules/file/mapper/FileDirectoryMapper.java create mode 100644 framework/src/main/java/cn/lili/modules/file/service/FileDirectoryService.java create mode 100644 framework/src/main/java/cn/lili/modules/file/serviceimpl/FileDirectoryServiceImpl.java diff --git a/DB/version4.3toMASTER.sql b/DB/version4.3toMASTER.sql index e69de29bb..35c1fc31d 100644 --- a/DB/version4.3toMASTER.sql +++ b/DB/version4.3toMASTER.sql @@ -0,0 +1,18 @@ +CREATE TABLE `li_file_directory` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '创建者', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '更新者', + `delete_flag` tinyint(1) NULL DEFAULT 0 COMMENT '删除标志 true/false 删除/未删除', + `directory_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '文件目录类型', + `directory_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '拥有者名称', + `owner_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '拥有者id', + `parent_id` bigint NULL DEFAULT NULL COMMENT '父分类ID', + `level` int NULL DEFAULT NULL COMMENT '层级', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1698937596963311619 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '文件夹' ROW_FORMAT = DYNAMIC; + +SET FOREIGN_KEY_CHECKS = 1; + +ALTER TABLE li_file ADD file_directory_id varchar(255) COMMENT '文件夹ID'; \ No newline at end of file diff --git a/common-api/src/main/java/cn/lili/controller/common/FileController.java b/common-api/src/main/java/cn/lili/controller/common/FileController.java index 01aa0045b..370ffe4a2 100644 --- a/common-api/src/main/java/cn/lili/controller/common/FileController.java +++ b/common-api/src/main/java/cn/lili/controller/common/FileController.java @@ -7,9 +7,7 @@ import cn.lili.common.exception.ServiceException; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; -import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.common.vo.SearchVO; import cn.lili.modules.file.entity.File; import cn.lili.modules.file.entity.dto.FileOwnerDTO; import cn.lili.modules.file.service.FileService; @@ -43,10 +41,9 @@ public class FileController { @ApiOperation(value = "获取自己的图片资源") @GetMapping @ApiImplicitParam(name = "title", value = "名称模糊匹配") - public ResultMessage> getFileList(@RequestHeader String accessToken, File file, SearchVO searchVO, PageVO pageVo) { + public ResultMessage> getFileList(@RequestHeader String accessToken, FileOwnerDTO fileOwnerDTO) { AuthUser authUser = UserContext.getAuthUser(cache, accessToken); - FileOwnerDTO fileOwnerDTO = new FileOwnerDTO(); //只有买家才写入自己id if (authUser.getRole().equals(UserEnums.MEMBER)) { fileOwnerDTO.setOwnerId(authUser.getId()); @@ -55,7 +52,7 @@ public class FileController { fileOwnerDTO.setOwnerId(authUser.getStoreId()); } fileOwnerDTO.setUserEnums(authUser.getRole().name()); - return ResultUtil.data(fileService.customerPageOwner(fileOwnerDTO, file, searchVO, pageVo)); + return ResultUtil.data(fileService.customerPageOwner(fileOwnerDTO)); } @ApiOperation(value = "文件重命名") diff --git a/common-api/src/main/java/cn/lili/controller/common/FileDirectoryController.java b/common-api/src/main/java/cn/lili/controller/common/FileDirectoryController.java new file mode 100644 index 000000000..0057887fe --- /dev/null +++ b/common-api/src/main/java/cn/lili/controller/common/FileDirectoryController.java @@ -0,0 +1,64 @@ +package cn.lili.controller.common; + +import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.context.UserContext; +import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.file.entity.FileDirectory; +import cn.lili.modules.file.entity.dto.FileDirectoryDTO; +import cn.lili.modules.file.service.FileDirectoryService; +import cn.lili.modules.file.service.FileService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 文件目录管理接口 + * + * @author Chopper + * @since 2020/11/26 15:41 + */ +@RestController +@Api(tags = "文件目录管理接口") +@RequestMapping("/common/resource/fileDirectory") +@RequiredArgsConstructor +public class FileDirectoryController { + + private final FileDirectoryService fileDirectoryService; + private final FileService fileService; + + @ApiOperation(value = "获取文件目录列表") + @GetMapping + public ResultMessage> getSceneFileList() { + return ResultUtil.data(fileDirectoryService.getFileDirectoryList(UserContext.getCurrentUser().getId())); + } + + @ApiOperation(value = "添加文件目录") + @PostMapping + public ResultMessage addSceneFileList(@RequestBody FileDirectory fileDirectory) { + fileDirectory.setDirectoryType(UserContext.getCurrentUser().getRole().name()); + fileDirectoryService.save(fileDirectory); + return ResultUtil.data(fileDirectory); + } + + @ApiOperation(value = "修改文件目录") + @PutMapping + public ResultMessage editSceneFileList(@RequestBody FileDirectory fileDirectory) { + fileDirectory.setDirectoryType(UserContext.getCurrentUser().getRole().name()); + fileDirectoryService.updateById(fileDirectory); + return ResultUtil.data(fileDirectory); + } + + @ApiOperation(value = "删除文件目录") + @DeleteMapping("/{id}") + public ResultMessage deleteSceneFileList(@PathVariable String id) { + //删除文件夹下面的图片 + fileService.batchDeleteByDirectory(id); + //删除目录 + fileDirectoryService.removeById(id); + return ResultUtil.success(); + } + +} diff --git a/common-api/src/main/java/cn/lili/controller/common/UploadController.java b/common-api/src/main/java/cn/lili/controller/common/UploadController.java index 027b66aed..8ba540298 100644 --- a/common-api/src/main/java/cn/lili/controller/common/UploadController.java +++ b/common-api/src/main/java/cn/lili/controller/common/UploadController.java @@ -1,6 +1,7 @@ package cn.lili.controller.common; import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.StrUtil; import cn.lili.cache.Cache; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; @@ -21,10 +22,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestHeader; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; @@ -55,7 +53,7 @@ public class UploadController { @PostMapping(value = "/file") public ResultMessage upload(MultipartFile file, String base64, - @RequestHeader String accessToken) { + @RequestHeader String accessToken, @RequestParam String directoryPath) { AuthUser authUser = UserContext.getAuthUser(cache, accessToken); @@ -89,6 +87,12 @@ public class UploadController { try { InputStream inputStream = file.getInputStream(); //上传至第三方云服务或服务器 + String scene = UserContext.getCurrentUser().getRole().name(); + if (StrUtil.equalsAny(UserContext.getCurrentUser().getRole().name(), UserEnums.MEMBER.name(), UserEnums.STORE.name(), UserEnums.SEAT.name())) { + scene = scene + "/" + authUser.getId(); + } + fileKey = scene + "/" + directoryPath + "/" + fileKey; + //上传至第三方云服务或服务器 result = filePluginFactory.filePlugin().inputStreamUpload(inputStream, fileKey); //保存数据信息至数据库 newFile.setName(file.getOriginalFilename()); @@ -104,6 +108,15 @@ public class UploadController { } else { newFile.setOwnerId(authUser.getId()); } + + //存储文件目录 + if (StrUtil.isNotEmpty(directoryPath)) { + if (directoryPath.indexOf("/") > 0) { + newFile.setFileDirectoryId(directoryPath.substring(directoryPath.lastIndexOf("/") + 1)); + } else { + newFile.setFileDirectoryId(directoryPath); + } + } fileService.save(newFile); } catch (Exception e) { log.error("文件上传失败", e); diff --git a/framework/src/main/java/cn/lili/modules/file/entity/File.java b/framework/src/main/java/cn/lili/modules/file/entity/File.java index fcb7c32f7..890f0bffc 100644 --- a/framework/src/main/java/cn/lili/modules/file/entity/File.java +++ b/framework/src/main/java/cn/lili/modules/file/entity/File.java @@ -43,4 +43,7 @@ public class File extends BaseEntity { @ApiModelProperty(value = "用户类型") private String userEnums; + + @ApiModelProperty(value = "文件夹ID") + private String fileDirectoryId; } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/file/entity/FileDirectory.java b/framework/src/main/java/cn/lili/modules/file/entity/FileDirectory.java new file mode 100644 index 000000000..807db5ce3 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/file/entity/FileDirectory.java @@ -0,0 +1,33 @@ +package cn.lili.modules.file.entity; + +import cn.lili.common.security.enums.UserEnums; +import cn.lili.mybatis.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; + +@Data +@TableName("li_file_directory") +@ApiModel(value = "文件目录") +public class FileDirectory extends BaseEntity { + + /** + * @see UserEnums + */ + @ApiModelProperty(value = "文件目录类型") + private String directoryType; + @ApiModelProperty(value = "拥有者名称") + private String directoryName; + @ApiModelProperty(value = "拥有者id") + private String ownerId; + @ApiModelProperty(value = "父分类ID") + private String parentId; + @ApiModelProperty(value = "层级") + @Min(value = 0, message = "层级最小为0") + @Max(value = 2, message = "层级最大为2") + private Integer level; +} diff --git a/framework/src/main/java/cn/lili/modules/file/entity/dto/FileDirectoryDTO.java b/framework/src/main/java/cn/lili/modules/file/entity/dto/FileDirectoryDTO.java new file mode 100644 index 000000000..ede7dfce8 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/file/entity/dto/FileDirectoryDTO.java @@ -0,0 +1,22 @@ +package cn.lili.modules.file.entity.dto; + +import cn.lili.common.utils.BeanUtil; +import cn.lili.modules.file.entity.FileDirectory; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; + +@Data +@NoArgsConstructor +public class FileDirectoryDTO extends FileDirectory{ + + @ApiModelProperty(value = "文件目录列表") + private List children= new ArrayList<>(); + + public FileDirectoryDTO(FileDirectory fileDirectory){ + BeanUtil.copyProperties(fileDirectory, this); + } +} diff --git a/framework/src/main/java/cn/lili/modules/file/entity/dto/FileOwnerDTO.java b/framework/src/main/java/cn/lili/modules/file/entity/dto/FileOwnerDTO.java index 396d28df8..291ef3501 100644 --- a/framework/src/main/java/cn/lili/modules/file/entity/dto/FileOwnerDTO.java +++ b/framework/src/main/java/cn/lili/modules/file/entity/dto/FileOwnerDTO.java @@ -1,10 +1,16 @@ package cn.lili.modules.file.entity.dto; +import cn.lili.common.utils.DateUtil; +import cn.lili.common.vo.PageVO; +import com.alipay.api.internal.util.StringUtils; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.Calendar; +import java.util.Date; + /** * 文件查询所属者参数对象 * @@ -14,7 +20,7 @@ import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor -public class FileOwnerDTO { +public class FileOwnerDTO extends PageVO { @ApiModelProperty(value = "拥有者id") private String ownerId; @@ -22,4 +28,42 @@ public class FileOwnerDTO { @ApiModelProperty(value = "用户类型") private String userEnums; + @ApiModelProperty(value = "原文件名") + private String name; + + @ApiModelProperty(value = "存储文件名") + private String fileKey; + + @ApiModelProperty(value = "文件类型") + private String fileType; + + @ApiModelProperty(value = "文件夹ID") + private String fileDirectoryId; + + @ApiModelProperty(value = "起始日期") + private String startDate; + + @ApiModelProperty(value = "结束日期") + private String endDate; + + public Date getConvertStartDate() { + if (StringUtils.isEmpty(startDate)) { + return null; + } + return DateUtil.toDate(startDate, DateUtil.STANDARD_DATE_FORMAT); + } + + public Date getConvertEndDate() { + if (StringUtils.isEmpty(endDate)) { + return null; + } + //结束时间等于结束日期+1天 -1秒, + Date date = DateUtil.toDate(endDate, DateUtil.STANDARD_DATE_FORMAT); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + 1); + calendar.set(Calendar.SECOND, -1); + return calendar.getTime(); + } + } diff --git a/framework/src/main/java/cn/lili/modules/file/entity/dto/FileSearchParams.java b/framework/src/main/java/cn/lili/modules/file/entity/dto/FileSearchParams.java new file mode 100644 index 000000000..b8a627f03 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/file/entity/dto/FileSearchParams.java @@ -0,0 +1,18 @@ +package cn.lili.modules.file.entity.dto; + +import cn.lili.common.vo.PageVO; +import cn.lili.common.vo.SearchVO; +import cn.lili.modules.file.entity.File; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class FileSearchParams extends PageVO { + + @ApiModelProperty(value = "文件") + private File file; + @ApiModelProperty(value = "搜索VO") + private SearchVO searchVO; + @ApiModelProperty(value = "文件夹ID") + private String fileDirectoryId; +} diff --git a/framework/src/main/java/cn/lili/modules/file/mapper/FileDirectoryMapper.java b/framework/src/main/java/cn/lili/modules/file/mapper/FileDirectoryMapper.java new file mode 100644 index 000000000..d7684ca57 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/file/mapper/FileDirectoryMapper.java @@ -0,0 +1,14 @@ +package cn.lili.modules.file.mapper; + +import cn.lili.modules.file.entity.FileDirectory; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 文件管理数据处理层 + * + * @author Chopper + * @since 2021-02-22 17:20 + */ +public interface FileDirectoryMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/file/service/FileDirectoryService.java b/framework/src/main/java/cn/lili/modules/file/service/FileDirectoryService.java new file mode 100644 index 000000000..9844055a8 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/file/service/FileDirectoryService.java @@ -0,0 +1,33 @@ +package cn.lili.modules.file.service; + +import cn.lili.common.security.enums.UserEnums; +import cn.lili.modules.file.entity.FileDirectory; +import cn.lili.modules.file.entity.dto.FileDirectoryDTO; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + * 文件管理业务层 + * + * @author Chopper + */ +public interface FileDirectoryService extends IService { + + /** + * 添加目录 + * + * @param userEnum + * @param id + * @param ownerName + */ + void addFileDirectory(UserEnums userEnum, String id, String ownerName); + + /** + * 获取文件目录 + * + * @param ownerId 拥有者 + * @return + */ + List getFileDirectoryList(String ownerId); +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/file/service/FileService.java b/framework/src/main/java/cn/lili/modules/file/service/FileService.java index 0760096e8..9f539f18c 100644 --- a/framework/src/main/java/cn/lili/modules/file/service/FileService.java +++ b/framework/src/main/java/cn/lili/modules/file/service/FileService.java @@ -24,6 +24,12 @@ public interface FileService extends IService { * @param ids */ void batchDelete(List ids); + /** + * 根据文件夹ID批量删除 + * + * @param directoryId 文件夹ID + */ + void batchDeleteByDirectory(String directoryId); /** * 所有者批量删除 @@ -37,22 +43,19 @@ public interface FileService extends IService { /** * 自定义搜索分页 * - * @param file - * @param searchVO - * @param pageVo + + * @param fileOwnerDTO 文件查询 + * @return */ - IPage customerPage(File file, SearchVO searchVO, PageVO pageVo); + IPage customerPage(FileOwnerDTO fileOwnerDTO); /** * 所属文件数据查询 * - * @param file - * @param searchVO - * @param pageVo - * @param ownerDTO + * @param ownerDTO 文件查询 * @return */ - IPage customerPageOwner(FileOwnerDTO ownerDTO, File file, SearchVO searchVO, PageVO pageVo); + IPage customerPageOwner(FileOwnerDTO ownerDTO); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/file/serviceimpl/FileDirectoryServiceImpl.java b/framework/src/main/java/cn/lili/modules/file/serviceimpl/FileDirectoryServiceImpl.java new file mode 100644 index 000000000..4ba07bc75 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/file/serviceimpl/FileDirectoryServiceImpl.java @@ -0,0 +1,68 @@ +package cn.lili.modules.file.serviceimpl; + +import cn.lili.common.security.enums.UserEnums; +import cn.lili.modules.file.entity.FileDirectory; +import cn.lili.modules.file.entity.dto.FileDirectoryDTO; +import cn.lili.modules.file.mapper.FileDirectoryMapper; +import cn.lili.modules.file.service.FileDirectoryService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 文件管理业务层实现 + * + * @author Chopper + * @since 2020/11/26 17:50 + */ +@Service +@RequiredArgsConstructor +public class FileDirectoryServiceImpl extends ServiceImpl implements FileDirectoryService { + + + @Override + public void addFileDirectory(UserEnums userEnum, String id, String ownerName) { + FileDirectory fileDirectory = new FileDirectory(); + fileDirectory.setOwnerId(id); + fileDirectory.setDirectoryName(ownerName); + fileDirectory.setDirectoryType(userEnum.name()); + this.save(fileDirectory); + } + + @Override + public List getFileDirectoryList(String scene) { + + List fileDirectoryList = this.list(); + List fileDirectoryDTOList = new ArrayList<>(); + + fileDirectoryList.forEach(item -> { + if (item.getLevel() == 0) { + FileDirectoryDTO fileDirectoryDTO = new FileDirectoryDTO(item); + initChild(fileDirectoryDTO, fileDirectoryList); + fileDirectoryDTOList.add(fileDirectoryDTO); + } + }); + + return fileDirectoryDTOList; + } + + + /** + * 递归初始化子树 + */ + private void initChild(FileDirectoryDTO fileDirectoryDTO, List fileDirectoryList) { + if (fileDirectoryList == null) { + return; + } + fileDirectoryList.stream() + .filter(item -> (item.getParentId().equals(fileDirectoryDTO.getId()))) + .forEach(child -> { + FileDirectoryDTO childTree = new FileDirectoryDTO(child); + initChild(childTree, fileDirectoryList); + fileDirectoryDTO.getChildren().add(childTree); + }); + } +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/file/serviceimpl/FileServiceImpl.java b/framework/src/main/java/cn/lili/modules/file/serviceimpl/FileServiceImpl.java index 11068e7dc..623f9dab8 100644 --- a/framework/src/main/java/cn/lili/modules/file/serviceimpl/FileServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/file/serviceimpl/FileServiceImpl.java @@ -4,15 +4,14 @@ import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.AuthUser; -import cn.lili.mybatis.util.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.SearchVO; import cn.lili.modules.file.entity.File; import cn.lili.modules.file.entity.dto.FileOwnerDTO; import cn.lili.modules.file.mapper.FileMapper; -import cn.lili.modules.file.plugin.FilePlugin; import cn.lili.modules.file.plugin.FilePluginFactory; import cn.lili.modules.file.service.FileService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -47,6 +46,18 @@ public class FileServiceImpl extends ServiceImpl implements Fi this.remove(queryWrapper); } + @Override + public void batchDeleteByDirectory(String directoryId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(File::getFileDirectoryId, directoryId); + + List files = this.list(queryWrapper); + List keys = new ArrayList<>(); + files.forEach(item -> keys.add(item.getFileKey())); + filePluginFactory.filePlugin().deleteFile(keys); + this.remove(queryWrapper); + } + @Override public void batchDelete(List ids, AuthUser authUser) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); @@ -74,26 +85,28 @@ public class FileServiceImpl extends ServiceImpl implements Fi } @Override - public IPage customerPage(File file, SearchVO searchVO, PageVO pageVo) { + public IPage customerPage(FileOwnerDTO fileOwnerDTO) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.like(CharSequenceUtil.isNotEmpty(file.getName()), File::getName, file.getName()) - .like(CharSequenceUtil.isNotEmpty(file.getFileKey()), File::getFileKey, file.getFileKey()) - .like(CharSequenceUtil.isNotEmpty(file.getFileType()), File::getFileType, file.getFileType()) - .between(CharSequenceUtil.isNotEmpty(searchVO.getStartDate()) && CharSequenceUtil.isNotEmpty(searchVO.getEndDate()), - File::getCreateTime, searchVO.getStartDate(), searchVO.getEndDate()); - return this.page(PageUtil.initPage(pageVo), queryWrapper); + queryWrapper.like(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getName()), File::getName, fileOwnerDTO.getName()) + .eq(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getFileDirectoryId()),File::getFileDirectoryId, fileOwnerDTO.getFileDirectoryId()) + .like(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getFileKey()), File::getFileKey, fileOwnerDTO.getFileKey()) + .like(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getFileType()), File::getFileType, fileOwnerDTO.getFileType()) + .between(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getStartDate()) && CharSequenceUtil.isNotEmpty(fileOwnerDTO.getEndDate()), + File::getCreateTime, fileOwnerDTO.getStartDate(), fileOwnerDTO.getEndDate()); + return this.page(PageUtil.initPage(fileOwnerDTO), queryWrapper); } @Override - public IPage customerPageOwner(FileOwnerDTO ownerDTO, File file, SearchVO searchVO, PageVO pageVo) { + public IPage customerPageOwner(FileOwnerDTO fileOwnerDTO) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(CharSequenceUtil.isNotEmpty(ownerDTO.getOwnerId()), File::getOwnerId, ownerDTO.getOwnerId()) - .eq(File::getUserEnums, ownerDTO.getUserEnums()) - .like(CharSequenceUtil.isNotEmpty(file.getName()), File::getName, file.getName()) - .like(CharSequenceUtil.isNotEmpty(file.getFileKey()), File::getFileKey, file.getFileKey()) - .like(CharSequenceUtil.isNotEmpty(file.getFileType()), File::getFileType, file.getFileType()) - .between(CharSequenceUtil.isNotEmpty(searchVO.getStartDate()) && CharSequenceUtil.isNotEmpty(searchVO.getEndDate()), - File::getCreateTime, searchVO.getStartDate(), searchVO.getEndDate()); - return this.page(PageUtil.initPage(pageVo), queryWrapper); + queryWrapper.eq(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getOwnerId()), File::getOwnerId, fileOwnerDTO.getOwnerId()) + .eq(File::getUserEnums, fileOwnerDTO.getUserEnums()) + .eq(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getFileDirectoryId()),File::getFileDirectoryId, fileOwnerDTO.getFileDirectoryId()) + .like(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getName()), File::getName, fileOwnerDTO.getName()) + .like(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getFileKey()), File::getFileKey, fileOwnerDTO.getFileKey()) + .like(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getFileType()), File::getFileType, fileOwnerDTO.getFileType()) + .between(CharSequenceUtil.isNotEmpty(fileOwnerDTO.getStartDate()) && CharSequenceUtil.isNotEmpty(fileOwnerDTO.getEndDate()), + File::getCreateTime, fileOwnerDTO.getStartDate(), fileOwnerDTO.getEndDate()); + return this.page(PageUtil.initPage(fileOwnerDTO), queryWrapper); } } \ No newline at end of file diff --git a/manager-api/src/main/java/cn/lili/controller/file/FileManagerController.java b/manager-api/src/main/java/cn/lili/controller/file/FileManagerController.java index 9667dc7df..0d6a0cab6 100644 --- a/manager-api/src/main/java/cn/lili/controller/file/FileManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/file/FileManagerController.java @@ -1,10 +1,9 @@ package cn.lili.controller.file; import cn.lili.common.enums.ResultUtil; -import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.common.vo.SearchVO; import cn.lili.modules.file.entity.File; +import cn.lili.modules.file.entity.dto.FileOwnerDTO; import cn.lili.modules.file.service.FileService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; @@ -34,9 +33,9 @@ public class FileManagerController { @ApiOperation(value = "管理端管理所有图片") @GetMapping @ApiImplicitParam(name = "title", value = "名称模糊匹配") - public ResultMessage> adminFiles(File file, SearchVO searchVO, PageVO pageVo) { + public ResultMessage> adminFiles(FileOwnerDTO fileOwnerDTO) { - return ResultUtil.data(fileService.customerPage(file, searchVO, pageVo)); + return ResultUtil.data(fileService.customerPage(fileOwnerDTO)); }