From 6f0f8106e0054931b702f8693b2a715234aa4b08 Mon Sep 17 00:00:00 2001 From: chc <1501738723@qq.com> Date: Mon, 8 Jan 2024 19:15:07 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=88=86=E5=8C=85=E8=A3=B9SQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DB/version4.3toMASTER.sql | 45 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/DB/version4.3toMASTER.sql b/DB/version4.3toMASTER.sql index 8af84132..d288b810 100644 --- a/DB/version4.3toMASTER.sql +++ b/DB/version4.3toMASTER.sql @@ -21,4 +21,47 @@ CREATE TABLE `li_file_directory` SET FOREIGN_KEY_CHECKS = 1; ALTER TABLE li_file - ADD file_directory_id varchar(255) COMMENT '文件夹ID'; \ No newline at end of file + ADD file_directory_id varchar(255) COMMENT '文件夹ID'; + +/** + 订单包裹 + */ +CREATE TABLE `li_order_package` ( + `id` bigint NOT NULL COMMENT 'ID', + `create_by` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '创建者', + `create_time` datetime(6) DEFAULT NULL COMMENT '创建时间', + `delete_flag` bit(1) DEFAULT NULL COMMENT '是否删除', + `update_by` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '修改者', + `update_time` datetime(6) DEFAULT NULL COMMENT '修改时间', + `package_no` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '包裹单号', + `order_sn` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '订单编号', + `logistics_no` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '发货单号', + `logistics_code` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '物流公司CODE', + `logistics_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '物流公司名称', + `consignee_mobile` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '收件人手机', + `status` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '状态', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin ROW_FORMAT=DYNAMIC; + +/** + 分包货物 + */ +CREATE TABLE `li_order_package_item` ( + `id` bigint NOT NULL COMMENT 'ID', + `create_by` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '创建者', + `create_time` datetime(6) DEFAULT NULL COMMENT '创建时间', + `delete_flag` bit(1) DEFAULT NULL COMMENT '是否删除', + `update_by` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '修改者', + `update_time` datetime(6) DEFAULT NULL COMMENT '修改时间', + `package_no` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '包裹单号', + `order_sn` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '订单编号', + `order_item_sn` varchar(255) COLLATE utf8mb3_bin DEFAULT NULL COMMENT '子订单编号', + `deliver_number` int DEFAULT NULL COMMENT '发货数量', + `logistics_time` datetime(6) DEFAULT NULL COMMENT '发货时间', + `goods_name` varchar(255) COLLATE utf8mb3_bin DEFAULT NULL, + `thumbnail` varchar(255) COLLATE utf8mb3_bin DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin ROW_FORMAT=DYNAMIC; + + +ALTER TABLE li_order_item ADD `deliver_number` int DEFAULT NULL COMMENT '发货数量'; \ No newline at end of file From 6cea6af59ba4bc1e9ffc7e9e0dc50b5c837bcbac Mon Sep 17 00:00:00 2001 From: chc <1501738723@qq.com> Date: Thu, 11 Jan 2024 13:33:13 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=88=86=E5=8C=85=E8=A3=B9=E5=8F=91?= =?UTF-8?q?=E8=B4=A7=EF=BC=8C=E5=BA=93=E5=AD=98=E9=A2=84=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DB/version4.3toMASTER.sql | 4 +- .../order/OrderBuyerController.java | 23 +++++ .../java/cn/lili/common/enums/ResultCode.java | 1 + .../modules/goods/entity/dos/GoodsSku.java | 4 + .../goods/entity/dto/GoodsSearchParams.java | 6 ++ .../goods/entity/dto/GoodsSkuStockDTO.java | 3 + .../goods/service/GoodsSkuService.java | 2 + .../serviceimpl/GoodsSkuServiceImpl.java | 21 +++++ .../modules/goods/sku/GoodsSkuBuilder.java | 3 +- .../order/order/entity/dos/OrderItem.java | 9 ++ .../order/order/entity/dos/OrderPackage.java | 39 +++++++++ .../order/entity/dos/OrderPackageItem.java | 47 +++++++++++ .../order/entity/dto/PartDeliveryDTO.java | 19 +++++ .../entity/dto/PartDeliveryParamsDTO.java | 30 +++++++ .../order/order/entity/vo/OrderPackageVO.java | 65 ++++++++++++++ .../order/mapper/OrderPackageItemMapper.java | 14 ++++ .../order/mapper/OrderPackageMapper.java | 14 ++++ .../service/OrderPackageItemService.java | 31 +++++++ .../order/service/OrderPackageService.java | 31 +++++++ .../order/order/service/OrderService.java | 9 ++ .../OrderPackageItemServiceImpl.java | 43 ++++++++++ .../serviceimpl/OrderPackageServiceImpl.java | 64 ++++++++++++++ .../order/serviceimpl/OrderServiceImpl.java | 84 ++++++++++++++++++- .../entity/vo/StoreIndexStatisticsVO.java | 3 + .../service/GoodsStatisticsService.java | 2 + .../GoodsStatisticsServiceImpl.java | 17 ++++ .../IndexStatisticsServiceImpl.java | 1 + .../goods/GoodsStoreController.java | 18 +++- .../order/OrderStoreController.java | 34 ++++++++ 29 files changed, 634 insertions(+), 7 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderPackage.java create mode 100644 framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderPackageItem.java create mode 100644 framework/src/main/java/cn/lili/modules/order/order/entity/dto/PartDeliveryDTO.java create mode 100644 framework/src/main/java/cn/lili/modules/order/order/entity/dto/PartDeliveryParamsDTO.java create mode 100644 framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderPackageVO.java create mode 100644 framework/src/main/java/cn/lili/modules/order/order/mapper/OrderPackageItemMapper.java create mode 100644 framework/src/main/java/cn/lili/modules/order/order/mapper/OrderPackageMapper.java create mode 100644 framework/src/main/java/cn/lili/modules/order/order/service/OrderPackageItemService.java create mode 100644 framework/src/main/java/cn/lili/modules/order/order/service/OrderPackageService.java create mode 100644 framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPackageItemServiceImpl.java create mode 100644 framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPackageServiceImpl.java diff --git a/DB/version4.3toMASTER.sql b/DB/version4.3toMASTER.sql index d288b810..60b4305b 100644 --- a/DB/version4.3toMASTER.sql +++ b/DB/version4.3toMASTER.sql @@ -64,4 +64,6 @@ CREATE TABLE `li_order_package_item` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin ROW_FORMAT=DYNAMIC; -ALTER TABLE li_order_item ADD `deliver_number` int DEFAULT NULL COMMENT '发货数量'; \ No newline at end of file +ALTER TABLE li_order_item ADD `deliver_number` int DEFAULT NULL COMMENT '发货数量'; + +ALTER TABLE li_goods_sku ADD `alert_quantity` int DEFAULT NULL COMMENT '预警库存'; \ No newline at end of file diff --git a/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java index 3e62ecc4..c192d363 100644 --- a/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java @@ -9,11 +9,14 @@ import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.order.order.entity.dos.Order; +import cn.lili.modules.order.order.entity.dos.OrderPackage; import cn.lili.modules.order.order.entity.dto.OrderSearchParams; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; +import cn.lili.modules.order.order.service.OrderPackageService; import cn.lili.modules.order.order.service.OrderService; +import cn.lili.modules.system.entity.vo.Traces; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -44,6 +47,9 @@ public class OrderBuyerController { @Autowired private OrderService orderService; + @Autowired + private OrderPackageService orderPackageService; + @ApiOperation(value = "查询会员订单列表") @GetMapping public ResultMessage> queryMineOrder(OrderSearchParams orderSearchParams) { @@ -138,4 +144,21 @@ public class OrderBuyerController { return ResultUtil.data(orderService.invoice(orderSn)); } + @ApiOperation(value = "查询物流踪迹") + @ApiImplicitParams({ + @ApiImplicitParam(name = "orderSn", value = "订单编号", required = true, dataType = "String", paramType = "path") + }) + @GetMapping(value = "/getTracesList/{orderSn}") + public ResultMessage getTracesList(@NotBlank(message = "订单编号不能为空") @PathVariable String orderSn) { + return ResultUtil.data(orderPackageService.getOrderPackageVOList(orderSn)); + } + + @ApiOperation(value = "查看包裹列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "orderSn", value = "订单编号", required = true, dataType = "String", paramType = "path") + }) + @GetMapping(value = "/getPackage/{orderSn}") + public ResultMessage getPackage(@NotBlank(message = "订单编号不能为空") @PathVariable String orderSn) { + return ResultUtil.data(orderPackageService.getOrderPackageVOList(orderSn)); + } } 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 d0935c83..e7f76805 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -205,6 +205,7 @@ public enum ResultCode { POINT_NOT_ENOUGH(31015, "当前会员积分不足购买当前积分商品!"), ORDER_LABEL_ORDER_ERROR(31016, "订单不能打印电子面单"), ORDER_PRICE_ERROR(31017,"订单金额不能小于等于0"), + ORDER_PACKAGE_NOT_EXIST(31017, "当前订单包裹不存在!"), /** diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java b/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java index 309fea1a..7379a1bd 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -163,6 +164,9 @@ public class GoodsSku extends BaseEntity { @ApiModelProperty(value = "商品类型", required = true) private String goodsType; + @ApiModelProperty(value = "预警数量") + private Integer alertQuantity; + public Double getWeight() { if (weight == null) { return 0d; diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java index 2187c484..af30b339 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java @@ -90,6 +90,9 @@ public class GoodsSearchParams extends PageVO { @ApiModelProperty(value = "销售模式", required = true) private String salesModel; + @ApiModelProperty(value = "预警库存") + private Boolean alertQuantity; + public QueryWrapper queryWrapper() { QueryWrapper queryWrapper = new QueryWrapper<>(); if (CharSequenceUtil.isNotEmpty(goodsId)) { @@ -134,6 +137,9 @@ public class GoodsSearchParams extends PageVO { if (recommend != null) { queryWrapper.le("recommend", recommend); } + if(alertQuantity != null && alertQuantity){ + queryWrapper.apply("quantity < alert_quantity"); + } if (CharSequenceUtil.isNotEmpty(goodsType)) { queryWrapper.eq("goods_type", goodsType); } diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSkuStockDTO.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSkuStockDTO.java index 97181f83..cde8789d 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSkuStockDTO.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSkuStockDTO.java @@ -21,5 +21,8 @@ public class GoodsSkuStockDTO { @ApiModelProperty(value = "库存") private Integer quantity; + @ApiModelProperty(value = "预警库存") + private Integer alertQuantity; + } diff --git a/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java b/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java index f31091ce..8e2fcfef 100644 --- a/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java +++ b/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java @@ -188,6 +188,8 @@ public interface GoodsSkuService extends IService { */ void updateStocks(List goodsSkuStockDTOS); + void updateAlertQuantity(List goodsSkuStockDTOS); + /** * 更新SKU库存 * diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java index 38c8bfae..cbd21a86 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java @@ -536,6 +536,27 @@ public class GoodsSkuServiceImpl extends ServiceImpl i } } + @Override + public void updateAlertQuantity(List goodsSkuStockDTOS) { + List goodsSkuList = new ArrayList<>(); + List skuIds = goodsSkuStockDTOS.stream().map(GoodsSkuStockDTO::getSkuId).collect(Collectors.toList()); + List goodsSkuStockList = this.baseMapper.queryStocks(GoodsSearchParams.builder().ids(skuIds).build().queryWrapper()); + List goodsIdList = goodsSkuStockList.stream().map(GoodsSkuStockDTO::getGoodsId).collect(Collectors.toList()); + HashSet uniqueSet = new HashSet<>(goodsIdList); + // 将去重后的元素转回列表 + List uniqueGoodsIdList = new ArrayList<>(uniqueSet); + for (String goodsId : uniqueGoodsIdList) { + cache.remove(CachePrefix.GOODS.getPrefix() + goodsId); + } + + for (GoodsSkuStockDTO goodsSkuStockDTO : goodsSkuStockDTOS) { + GoodsSku goodsSku = this.getById(goodsSkuStockDTO.getSkuId()); + goodsSku.setAlertQuantity(goodsSkuStockDTO.getAlertQuantity()); + goodsSkuList.add(goodsSku); + } + this.updateBatchById(goodsSkuList); + } + @Override @Transactional(rollbackFor = Exception.class) public void updateStock(String skuId, Integer quantity) { diff --git a/framework/src/main/java/cn/lili/modules/goods/sku/GoodsSkuBuilder.java b/framework/src/main/java/cn/lili/modules/goods/sku/GoodsSkuBuilder.java index f7fb9771..c3a42ba2 100644 --- a/framework/src/main/java/cn/lili/modules/goods/sku/GoodsSkuBuilder.java +++ b/framework/src/main/java/cn/lili/modules/goods/sku/GoodsSkuBuilder.java @@ -64,7 +64,7 @@ public class GoodsSkuBuilder { Map specMap = new LinkedHashMap<>(); // 原始规格项 - String[] ignoreOriginKeys = {"id", "sn", "cost", "price", "quantity", "weight"}; + String[] ignoreOriginKeys = {"id", "sn", "cost", "price", "quantity", "weight","alertQuantity"}; //获取规格信息 for (Map.Entry spec : skuInfo.entrySet()) { //保存新增规格信息 @@ -91,6 +91,7 @@ public class GoodsSkuBuilder { goodsSku.setQuantity(Convert.toInt(skuInfo.get("quantity"), 0)); goodsSku.setSpecs(JSONUtil.toJsonStr(specMap)); goodsSku.setSimpleSpecs(simpleSpecs.toString()); + goodsSku.setAlertQuantity(Convert.toInt(skuInfo.get("alertQuantity"), 0)); } diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java index ae8c270f..5a0eb4a2 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java @@ -115,6 +115,15 @@ public class OrderItem extends BaseEntity { @ApiModelProperty(value = "退货商品数量") private Integer returnGoodsNumber; + @ApiModelProperty(value = "已发货数量") + private Integer deliverNumber; + + public Integer getDeliverNumber() { + if(deliverNumber == null){ + return 0; + } + return deliverNumber; + } public OrderItem(CartSkuVO cartSkuVO, CartVO cartVO, TradeDTO tradeDTO) { String oldId = this.getId(); diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderPackage.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderPackage.java new file mode 100644 index 00000000..64050c7a --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderPackage.java @@ -0,0 +1,39 @@ +package cn.lili.modules.order.order.entity.dos; + +import cn.lili.mybatis.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@TableName("li_order_package") +@ApiModel(value = "订单包裹") +@NoArgsConstructor +@AllArgsConstructor +public class OrderPackage extends BaseEntity { + + @ApiModelProperty(value = "包裹单号") + private String packageNo; + + @ApiModelProperty(value = "订单编号") + private String orderSn; + + @ApiModelProperty(value = "发货单号") + private String logisticsNo; + + @ApiModelProperty(value = "物流公司CODE") + private String logisticsCode; + + @ApiModelProperty(value = "物流公司名称") + private String logisticsName; + + @ApiModelProperty(value = "收件人手机") + private String consigneeMobile; + + @ApiModelProperty(value = "状态") + private String status; + +} diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderPackageItem.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderPackageItem.java new file mode 100644 index 00000000..bbeee2bc --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderPackageItem.java @@ -0,0 +1,47 @@ +package cn.lili.modules.order.order.entity.dos; + +import cn.lili.mybatis.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @author chc + * @since 2022/6/2114:46 + */ +@Data +@TableName("li_order_package_item") +@ApiModel(value = "订单分包裹详情") +@NoArgsConstructor +@AllArgsConstructor +public class OrderPackageItem extends BaseEntity { + + @ApiModelProperty(value = "包裹单号") + private String packageNo; + + @ApiModelProperty(value = "订单编号") + private String orderSn; + + @ApiModelProperty(value = "子订单编号") + private String orderItemSn; + + @ApiModelProperty(value = "商品名称") + private String goodsName; + + @ApiModelProperty(value = "商品图片") + private String thumbnail; + + @ApiModelProperty(value = "已发货数量") + private Integer deliverNumber; + + @ApiModelProperty(value = "送货时间") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date logisticsTime; + +} diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/PartDeliveryDTO.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/PartDeliveryDTO.java new file mode 100644 index 00000000..6a41d00e --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/PartDeliveryDTO.java @@ -0,0 +1,19 @@ +package cn.lili.modules.order.order.entity.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 部分发货 + */ +@Data +public class PartDeliveryDTO { + + @ApiModelProperty(value = "订单货物Id") + private String orderItemId; + + @ApiModelProperty(value = "发货数量") + private Integer deliveryNum; + + +} diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/PartDeliveryParamsDTO.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/PartDeliveryParamsDTO.java new file mode 100644 index 00000000..deb2cd6a --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/PartDeliveryParamsDTO.java @@ -0,0 +1,30 @@ +package cn.lili.modules.order.order.entity.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 部分发货参数封装 + * + * @author liushuai(liushuai711 @ gmail.com) + * @version v4.0 + * @Description: + * @since 2022/10/29 17:52 + */ +@Data +public class PartDeliveryParamsDTO { + + @ApiModelProperty(value = "订单号") + private String orderSn; + + @ApiModelProperty(value = "发货单号") + private String logisticsNo; + + @ApiModelProperty(value = "发货方式") + private String logisticsId; + + @ApiModelProperty(value = "物流详细") + private List partDeliveryDTOList; +} diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderPackageVO.java b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderPackageVO.java new file mode 100644 index 00000000..197570ed --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderPackageVO.java @@ -0,0 +1,65 @@ +package cn.lili.modules.order.order.entity.vo; + +import cn.lili.common.utils.BeanUtil; +import cn.lili.modules.order.order.entity.dos.OrderPackage; +import cn.lili.modules.order.order.entity.dos.OrderPackageItem; +import cn.lili.modules.system.entity.vo.Traces; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * 分包裹详情VO + * + * @author Chopper + * @since 2020-08-17 20:28 + */ +@Data +@NoArgsConstructor +public class OrderPackageVO implements Serializable { + + private static final long serialVersionUID = 1810890757303309436L; + + @ApiModelProperty(value = "包裹单号") + private String packageNo; + + @ApiModelProperty(value = "订单编号") + private String orderSn; + + @ApiModelProperty(value = "发货单号") + private String logisticsNo; + + @ApiModelProperty(value = "物流公司CODE") + private String logisticsCode; + + @ApiModelProperty(value = "物流公司名称") + private String logisticsName; + + @ApiModelProperty(value = "收件人手机") + private String consigneeMobile; + + @ApiModelProperty(value = "状态") + private String status; + + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "子订单包裹详情列表") + private List orderPackageItemList; + + @ApiModelProperty(value = "物流信息") + private Traces traces; + + public OrderPackageVO(OrderPackage orderPackage) { + BeanUtil.copyProperties(orderPackage, this); + } + +} diff --git a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderPackageItemMapper.java b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderPackageItemMapper.java new file mode 100644 index 00000000..ade24cb4 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderPackageItemMapper.java @@ -0,0 +1,14 @@ +package cn.lili.modules.order.order.mapper; + +import cn.lili.modules.order.order.entity.dos.OrderPackageItem; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 子订单包裹数据处理层 + * + * @author Bulbasaur + * @since 2020/11/17 7:34 下午 + */ +public interface OrderPackageItemMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderPackageMapper.java b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderPackageMapper.java new file mode 100644 index 00000000..37937095 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderPackageMapper.java @@ -0,0 +1,14 @@ +package cn.lili.modules.order.order.mapper; + +import cn.lili.modules.order.order.entity.dos.OrderPackage; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 订单包裹数据处理层 + * + * @author Bulbasaur + * @since 2020/11/17 7:34 下午 + */ +public interface OrderPackageMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderPackageItemService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderPackageItemService.java new file mode 100644 index 00000000..464aadcd --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderPackageItemService.java @@ -0,0 +1,31 @@ +package cn.lili.modules.order.order.service; + +import cn.lili.modules.order.order.entity.dos.OrderPackageItem; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + * 子订单业务层 + * + * @author Chopper + * @since 2020/11/17 7:36 下午 + */ +public interface OrderPackageItemService extends IService { + + + /** + * 根据订单编号获取订单包裹列表 + * @param orderSn 订单编号 + * @return 子订单包裹列表 + */ + List getOrderPackageItemListByOrderSn(String orderSn); + + + /** + * 根据包裹编号获取子包裹列表 + * @param packageNo 包裹编号 + * @return 子包裹列表 + */ + List getOrderPackageItemListByPno(String packageNo); +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderPackageService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderPackageService.java new file mode 100644 index 00000000..2b78f56e --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderPackageService.java @@ -0,0 +1,31 @@ +package cn.lili.modules.order.order.service; + +import cn.lili.modules.order.order.entity.dos.OrderPackage; +import cn.lili.modules.order.order.entity.vo.OrderPackageVO; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + * 子订单业务层 + * + * @author Chopper + * @since 2020/11/17 7:36 下午 + */ +public interface OrderPackageService extends IService { + + + /** + * 根据订单编号获取订单包裹列表 + * @param orderSn + * @return + */ + List orderPackageList(String orderSn); + + /** + * 获取指定订单编号的所有包裹 + * @param orderSn + * @return + */ + List getOrderPackageVOList(String orderSn); +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java index 764774e6..a1884365 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java +++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java @@ -6,6 +6,7 @@ import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dto.OrderExportDTO; import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.order.entity.dto.OrderSearchParams; +import cn.lili.modules.order.order.entity.dto.PartDeliveryParamsDTO; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; import cn.lili.modules.order.order.entity.vo.PaymentLog; @@ -311,4 +312,12 @@ public interface OrderService extends IService { */ boolean checkFictitiousOrder(String pintuanId, Integer requiredNum, Boolean fictitious); + /** + * 订单部分发货 + * + * @param partDeliveryParamsDTO 参数 + * @return 订单 + */ + Order partDelivery(PartDeliveryParamsDTO partDeliveryParamsDTO); + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPackageItemServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPackageItemServiceImpl.java new file mode 100644 index 00000000..ac4440fe --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPackageItemServiceImpl.java @@ -0,0 +1,43 @@ +package cn.lili.modules.order.order.serviceimpl; + +import cn.lili.modules.order.order.entity.dos.OrderPackageItem; +import cn.lili.modules.order.order.mapper.OrderPackageItemMapper; +import cn.lili.modules.order.order.service.OrderPackageItemService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 订单包裹业务层实现 + * + * @author Chopper + * @since 2020/11/17 7:38 下午 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class OrderPackageItemServiceImpl extends ServiceImpl implements OrderPackageItemService { + + + /** + * 根据订单编号获取订单包裹列表 + * @param orderSn 订单编号 + * @return 子订单包裹列表 + */ + @Override + public List getOrderPackageItemListByOrderSn(String orderSn) { + return this.list(new LambdaQueryWrapper().eq(OrderPackageItem::getOrderSn, orderSn)); + } + + /** + * 根据包裹编号获取子包裹列表 + * @param packageNo 包裹编号 + * @return 子包裹列表 + */ + @Override + public List getOrderPackageItemListByPno(String packageNo) { + return this.list(new LambdaQueryWrapper().eq(OrderPackageItem::getPackageNo, packageNo)); + } +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPackageServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPackageServiceImpl.java new file mode 100644 index 00000000..92319c07 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPackageServiceImpl.java @@ -0,0 +1,64 @@ +package cn.lili.modules.order.order.serviceimpl; + +import cn.lili.common.enums.ResultCode; +import cn.lili.common.exception.ServiceException; +import cn.lili.modules.order.order.entity.dos.OrderPackage; +import cn.lili.modules.order.order.entity.dos.OrderPackageItem; +import cn.lili.modules.order.order.entity.vo.OrderPackageVO; +import cn.lili.modules.order.order.mapper.OrderPackageMapper; +import cn.lili.modules.order.order.service.OrderPackageItemService; +import cn.lili.modules.order.order.service.OrderPackageService; +import cn.lili.modules.system.entity.vo.Traces; +import cn.lili.modules.system.service.LogisticsService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.List; + +/** + * 订单包裹业务层实现 + * + * @author Chopper + * @since 2020/11/17 7:38 下午 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class OrderPackageServiceImpl extends ServiceImpl implements OrderPackageService { + + @Autowired + private OrderPackageItemService orderpackageItemService; + + @Autowired + private LogisticsService logisticsService; + + @Override + public List orderPackageList(String orderSn) { + return this.list(new LambdaQueryWrapper().eq(OrderPackage::getOrderSn, orderSn)); + } + + @Override + public List getOrderPackageVOList(String orderSn) { + List orderPackages = this.orderPackageList(orderSn); + if (orderPackages == null){ + throw new ServiceException(ResultCode.ORDER_PACKAGE_NOT_EXIST); + } + List orderPackageVOS = new ArrayList<>(); + orderPackages.forEach(orderPackage -> { + OrderPackageVO orderPackageVO = new OrderPackageVO(orderPackage); + // 获取子订单包裹详情 + List orderPackageItemList = orderpackageItemService.getOrderPackageItemListByPno(orderPackage.getPackageNo()); + orderPackageVO.setOrderPackageItemList(orderPackageItemList); + String str = orderPackage.getConsigneeMobile(); + str = str.substring(str.length() - 4); +// Traces traces = logisticsService.getLogisticTrack(orderPackage.getLogisticsCode(), orderPackage.getLogisticsNo(), str); +// orderPackageVO.setTraces(traces); + orderPackageVOS.add(orderPackageVO); + }); + + return orderPackageVOS; + } +} \ No newline at end of file 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 93918359..73c517fe 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 @@ -23,10 +23,7 @@ import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum; import cn.lili.modules.order.order.aop.OrderLogPoint; import cn.lili.modules.order.order.entity.dos.*; -import cn.lili.modules.order.order.entity.dto.OrderBatchDeliverDTO; -import cn.lili.modules.order.order.entity.dto.OrderExportDTO; -import cn.lili.modules.order.order.entity.dto.OrderMessage; -import cn.lili.modules.order.order.entity.dto.OrderSearchParams; +import cn.lili.modules.order.order.entity.dto.*; import cn.lili.modules.order.order.entity.enums.*; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; @@ -146,6 +143,17 @@ public class OrderServiceImpl extends ServiceImpl implements @Autowired private StoreDetailService storeDetailService; + /** + * 订单包裹 + */ + @Autowired + private OrderPackageService orderPackageService; + /** + * 订单包裹货物 + */ + @Autowired + private OrderPackageItemService orderPackageItemService; + @Override @Transactional(rollbackFor = Exception.class) public void intoDB(TradeDTO tradeDTO) { @@ -790,6 +798,74 @@ public class OrderServiceImpl extends ServiceImpl implements return false; } + @Override + public Order partDelivery(PartDeliveryParamsDTO partDeliveryParamsDTO) { + String logisticsId = partDeliveryParamsDTO.getLogisticsId(); + String orderSn = partDeliveryParamsDTO.getOrderSn(); + String invoiceNumber = partDeliveryParamsDTO.getLogisticsNo(); + + //获取对应物流 + Logistics logistics = logisticsService.getById(logisticsId); + if (logistics == null) { + throw new ServiceException(ResultCode.ORDER_LOGISTICS_ERROR); + } + Order order = OperationalJudgment.judgment(this.getBySn(orderSn)); + List orderItemList = orderItemService.getByOrderSn(orderSn); + + OrderPackage orderPackage = new OrderPackage(); + orderPackage.setPackageNo(SnowFlake.createStr("OP")); + orderPackage.setOrderSn(orderSn); + orderPackage.setLogisticsNo(invoiceNumber); + orderPackage.setLogisticsCode(logistics.getCode()); + orderPackage.setLogisticsName(logistics.getName()); + orderPackage.setStatus("1"); + orderPackage.setConsigneeMobile(order.getConsigneeMobile()); + orderPackageService.save(orderPackage); + List orderLogList = new ArrayList<>(); + for (PartDeliveryDTO partDeliveryDTO : partDeliveryParamsDTO.getPartDeliveryDTOList()) { + for (OrderItem orderItem : orderItemList) { + //寻找订单货物进行判断 + if (partDeliveryDTO.getOrderItemId().equals(orderItem.getId())) { + if ((partDeliveryDTO.getDeliveryNum() + orderItem.getDeliverNumber()) > orderItem.getNum()) { + throw new ServiceException("发货数量不正确!"); + } + orderItem.setDeliverNumber((partDeliveryDTO.getDeliveryNum() + orderItem.getDeliverNumber())); + + // 记录分包裹中每个item子单的具体发货信息 + OrderPackageItem orderPackageItem = new OrderPackageItem(); + orderPackageItem.setOrderSn(orderSn); + orderPackageItem.setPackageNo(orderPackage.getPackageNo()); + orderPackageItem.setOrderItemSn(orderItem.getSn()); + orderPackageItem.setDeliverNumber(partDeliveryDTO.getDeliveryNum()); + orderPackageItem.setLogisticsTime(new Date()); + orderPackageItem.setGoodsName(orderItem.getGoodsName()); + orderPackageItem.setThumbnail(orderItem.getImage()); + orderPackageItemService.save(orderPackageItem); + OrderLog orderLog = new OrderLog(orderSn, UserContext.getCurrentUser().getId(), UserContext.getCurrentUser().getRole().getRole(), UserContext.getCurrentUser().getUsername(), "订单 [ " + orderSn + " ]商品 [ " + orderItem.getGoodsName() + " ]发货,发货数量: [ " + partDeliveryDTO.getDeliveryNum() + " ],发货单号[ " + invoiceNumber + " ]"); + orderLogList.add(orderLog); + } + } + } + //修改订单货物 + orderItemService.updateBatchById(orderItemList); + + + orderLogService.saveBatch(orderLogList); + //判断订单货物是否全部发货完毕 + Boolean delivery = true; + for (OrderItem orderItem : orderItemList) { + if (orderItem.getDeliverNumber() < orderItem.getNum()) { + delivery = false; + break; + } + } + //是否全部发货 + if (delivery) { + return delivery(orderSn, invoiceNumber, logisticsId); + } + return order; + } + /** * 虚拟成团 * diff --git a/framework/src/main/java/cn/lili/modules/statistics/entity/vo/StoreIndexStatisticsVO.java b/framework/src/main/java/cn/lili/modules/statistics/entity/vo/StoreIndexStatisticsVO.java index 9d2da2ae..391df6c4 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/entity/vo/StoreIndexStatisticsVO.java +++ b/framework/src/main/java/cn/lili/modules/statistics/entity/vo/StoreIndexStatisticsVO.java @@ -50,5 +50,8 @@ public class StoreIndexStatisticsVO { @ApiModelProperty(value = "待自提数量") private Long selfPickNum; + @ApiModelProperty(value = "警告库存") + private Long alertQuantityNum; + } diff --git a/framework/src/main/java/cn/lili/modules/statistics/service/GoodsStatisticsService.java b/framework/src/main/java/cn/lili/modules/statistics/service/GoodsStatisticsService.java index d790047a..20e30f0b 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/service/GoodsStatisticsService.java +++ b/framework/src/main/java/cn/lili/modules/statistics/service/GoodsStatisticsService.java @@ -22,6 +22,8 @@ public interface GoodsStatisticsService extends IService { */ long goodsNum(GoodsStatusEnum goodsStatusEnum, GoodsAuthEnum goodsAuthEnum); + long alertQuantityNum(); + /** * 获取今天的已上架的商品数量 * diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsServiceImpl.java index 87b52e31..67fd67aa 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsServiceImpl.java @@ -9,11 +9,14 @@ import cn.lili.common.security.enums.UserEnums; import cn.lili.modules.goods.entity.dos.Goods; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; +import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.statistics.mapper.GoodsStatisticsMapper; import cn.lili.modules.statistics.service.GoodsStatisticsService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Objects; @@ -27,6 +30,9 @@ import java.util.Objects; @Service public class GoodsStatisticsServiceImpl extends ServiceImpl implements GoodsStatisticsService { + @Autowired + private GoodsSkuService goodsSkuService; + @Override public long goodsNum(GoodsStatusEnum goodsStatusEnum, GoodsAuthEnum goodsAuthEnum) { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); @@ -46,6 +52,17 @@ public class GoodsStatisticsServiceImpl extends ServiceImpl queryWrapper = Wrappers.lambdaQuery(); diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/IndexStatisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/IndexStatisticsServiceImpl.java index 0ce96a9b..330b39ad 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/IndexStatisticsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/IndexStatisticsServiceImpl.java @@ -182,6 +182,7 @@ public class IndexStatisticsServiceImpl implements IndexStatisticsService { //商品总数量 storeIndexStatisticsVO.setGoodsNum(goodsStatisticsService.goodsNum(GoodsStatusEnum.UPPER, null)); + storeIndexStatisticsVO.setAlertQuantityNum(goodsStatisticsService.alertQuantityNum()); //订单总数量、订单总金额 Map map = storeFlowStatisticsService.getOrderStatisticsPrice(); storeIndexStatisticsVO.setOrderNum(Convert.toInt(map.get("num").toString())); diff --git a/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java b/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java index a4037c71..be4c580b 100644 --- a/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java @@ -93,7 +93,8 @@ public class GoodsStoreController { StoreDetail storeDetail = OperationalJudgment.judgment(storeDetailService.getStoreDetail(storeId)); Integer stockWarnNum = storeDetail.getStockWarning(); goodsSearchParams.setStoreId(storeId); - goodsSearchParams.setLeQuantity(stockWarnNum); +// goodsSearchParams.setLeQuantity(stockWarnNum); + goodsSearchParams.setAlertQuantity(true); goodsSearchParams.setMarketEnable(GoodsStatusEnum.UPPER.name()); IPage goodsSku = goodsSkuService.getGoodsSkuByPage(goodsSearchParams); StockWarningVO stockWarning = new StockWarningVO(stockWarnNum, goodsSku); @@ -182,6 +183,21 @@ public class GoodsStoreController { return ResultUtil.success(); } + @ApiOperation(value = "修改商品预警库存") + @PutMapping(value = "/update/alert/stocks", consumes = "application/json") + public ResultMessage updateAlertQuantity(@RequestBody List updateStockList) { + String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); + // 获取商品skuId集合 + List goodsSkuIds = updateStockList.stream().map(GoodsSkuStockDTO::getSkuId).collect(Collectors.toList()); + // 根据skuId集合查询商品信息 + List goodsSkuList = goodsSkuService.list(new LambdaQueryWrapper().in(GoodsSku::getId, goodsSkuIds).eq(GoodsSku::getStoreId, storeId)); + // 过滤不符合当前店铺的商品 + List filterGoodsSkuIds = goodsSkuList.stream().map(GoodsSku::getId).collect(Collectors.toList()); + List collect = updateStockList.stream().filter(i -> filterGoodsSkuIds.contains(i.getSkuId())).collect(Collectors.toList()); + goodsSkuService.updateAlertQuantity(collect); + return ResultUtil.success(); + } + @ApiOperation(value = "通过id获取商品信息") @ApiImplicitParams({ @ApiImplicitParam(name = "goodsId", value = "商品ID", required = true, paramType = "path"), 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 af8893f8..a1255607 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 @@ -13,8 +13,10 @@ import cn.lili.modules.member.entity.dto.MemberAddressDTO; import cn.lili.modules.member.service.StoreLogisticsService; import cn.lili.modules.order.order.entity.dto.OrderExportDTO; import cn.lili.modules.order.order.entity.dto.OrderSearchParams; +import cn.lili.modules.order.order.entity.dto.PartDeliveryParamsDTO; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; +import cn.lili.modules.order.order.service.OrderPackageService; import cn.lili.modules.order.order.service.OrderPriceService; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.system.service.LogisticsService; @@ -70,6 +72,9 @@ public class OrderStoreController { @Autowired private LogisticsService logisticsService; + @Autowired + private OrderPackageService orderPackageService; + @ApiOperation(value = "查询订单列表") @GetMapping @@ -217,4 +222,33 @@ public class OrderStoreController { @NotNull(message = "请选择物流公司") String logisticsId) { return ResultUtil.data(logisticsService.labelOrder(orderSn, logisticsId)); } + + @ApiOperation(value = "查看包裹列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "orderSn", value = "订单编号", required = true, dataType = "String", paramType = "path") + }) + @GetMapping(value = "/getPackage/{orderSn}") + public ResultMessage getPackage(@NotBlank(message = "订单编号不能为空") @PathVariable String orderSn) { + return ResultUtil.data(orderPackageService.getOrderPackageVOList(orderSn)); + } + + @ApiOperation(value = "查询物流踪迹") + @ApiImplicitParams({ + @ApiImplicitParam(name = "orderSn", value = "订单编号", required = true, dataType = "String", paramType = "path") + }) + @GetMapping(value = "/getTracesList/{orderSn}") + public ResultMessage getTracesList(@NotBlank(message = "订单编号不能为空") @PathVariable String orderSn) { + return ResultUtil.data(orderPackageService.getOrderPackageVOList(orderSn)); + } + + @ApiOperation(value = "订单包裹发货") + @ApiImplicitParams({ + @ApiImplicitParam(name = "orderSn", value = "订单sn", required = true, dataType = "String", paramType = "path"), + @ApiImplicitParam(name = "logisticsNo", value = "发货单号", required = true, dataType = "String", paramType = "query"), + @ApiImplicitParam(name = "logisticsId", value = "物流公司", required = true, dataType = "String", paramType = "query") + }) + @PostMapping(value = "/{orderSn}/partDelivery") + public ResultMessage delivery(@RequestBody PartDeliveryParamsDTO partDeliveryParamsDTO) { + return ResultUtil.data(orderService.partDelivery(partDeliveryParamsDTO)); + } } \ No newline at end of file From 055a7fffdbf268b3b26e0f21fc0da262d61fc9c2 Mon Sep 17 00:00:00 2001 From: chc <1501738723@qq.com> Date: Thu, 11 Jan 2024 13:33:46 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E6=9A=82=E4=B8=8D?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=A2=84=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../statistics/serviceimpl/IndexStatisticsServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/IndexStatisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/IndexStatisticsServiceImpl.java index 330b39ad..a8861767 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/IndexStatisticsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/IndexStatisticsServiceImpl.java @@ -182,7 +182,7 @@ public class IndexStatisticsServiceImpl implements IndexStatisticsService { //商品总数量 storeIndexStatisticsVO.setGoodsNum(goodsStatisticsService.goodsNum(GoodsStatusEnum.UPPER, null)); - storeIndexStatisticsVO.setAlertQuantityNum(goodsStatisticsService.alertQuantityNum()); +// storeIndexStatisticsVO.setAlertQuantityNum(goodsStatisticsService.alertQuantityNum()); //订单总数量、订单总金额 Map map = storeFlowStatisticsService.getOrderStatisticsPrice(); storeIndexStatisticsVO.setOrderNum(Convert.toInt(map.get("num").toString())); From 085dad21075f92b9b92ea0318790c0d9983c7efa Mon Sep 17 00:00:00 2001 From: chc <1501738723@qq.com> Date: Tue, 16 Jan 2024 10:10:07 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=BA=93=E5=AD=98=E9=A2=84=E8=AD=A6?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=9B=9E=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/goods/entity/dos/GoodsSku.java | 3 --- .../goods/entity/dto/GoodsSearchParams.java | 6 ------ .../goods/entity/dto/GoodsSkuStockDTO.java | 3 --- .../goods/service/GoodsSkuService.java | 2 -- .../serviceimpl/GoodsSkuServiceImpl.java | 20 ------------------- .../modules/goods/sku/GoodsSkuBuilder.java | 3 +-- .../service/GoodsStatisticsService.java | 3 --- .../GoodsStatisticsServiceImpl.java | 11 ---------- .../IndexStatisticsServiceImpl.java | 1 - .../goods/GoodsStoreController.java | 19 +----------------- 10 files changed, 2 insertions(+), 69 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java b/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java index 7379a1bd..eef998a6 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java @@ -164,9 +164,6 @@ public class GoodsSku extends BaseEntity { @ApiModelProperty(value = "商品类型", required = true) private String goodsType; - @ApiModelProperty(value = "预警数量") - private Integer alertQuantity; - public Double getWeight() { if (weight == null) { return 0d; diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java index af30b339..2187c484 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java @@ -90,9 +90,6 @@ public class GoodsSearchParams extends PageVO { @ApiModelProperty(value = "销售模式", required = true) private String salesModel; - @ApiModelProperty(value = "预警库存") - private Boolean alertQuantity; - public QueryWrapper queryWrapper() { QueryWrapper queryWrapper = new QueryWrapper<>(); if (CharSequenceUtil.isNotEmpty(goodsId)) { @@ -137,9 +134,6 @@ public class GoodsSearchParams extends PageVO { if (recommend != null) { queryWrapper.le("recommend", recommend); } - if(alertQuantity != null && alertQuantity){ - queryWrapper.apply("quantity < alert_quantity"); - } if (CharSequenceUtil.isNotEmpty(goodsType)) { queryWrapper.eq("goods_type", goodsType); } diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSkuStockDTO.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSkuStockDTO.java index cde8789d..97181f83 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSkuStockDTO.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSkuStockDTO.java @@ -21,8 +21,5 @@ public class GoodsSkuStockDTO { @ApiModelProperty(value = "库存") private Integer quantity; - @ApiModelProperty(value = "预警库存") - private Integer alertQuantity; - } diff --git a/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java b/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java index 8e2fcfef..f31091ce 100644 --- a/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java +++ b/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java @@ -188,8 +188,6 @@ public interface GoodsSkuService extends IService { */ void updateStocks(List goodsSkuStockDTOS); - void updateAlertQuantity(List goodsSkuStockDTOS); - /** * 更新SKU库存 * diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java index cbd21a86..ee49c388 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java @@ -536,26 +536,6 @@ public class GoodsSkuServiceImpl extends ServiceImpl i } } - @Override - public void updateAlertQuantity(List goodsSkuStockDTOS) { - List goodsSkuList = new ArrayList<>(); - List skuIds = goodsSkuStockDTOS.stream().map(GoodsSkuStockDTO::getSkuId).collect(Collectors.toList()); - List goodsSkuStockList = this.baseMapper.queryStocks(GoodsSearchParams.builder().ids(skuIds).build().queryWrapper()); - List goodsIdList = goodsSkuStockList.stream().map(GoodsSkuStockDTO::getGoodsId).collect(Collectors.toList()); - HashSet uniqueSet = new HashSet<>(goodsIdList); - // 将去重后的元素转回列表 - List uniqueGoodsIdList = new ArrayList<>(uniqueSet); - for (String goodsId : uniqueGoodsIdList) { - cache.remove(CachePrefix.GOODS.getPrefix() + goodsId); - } - - for (GoodsSkuStockDTO goodsSkuStockDTO : goodsSkuStockDTOS) { - GoodsSku goodsSku = this.getById(goodsSkuStockDTO.getSkuId()); - goodsSku.setAlertQuantity(goodsSkuStockDTO.getAlertQuantity()); - goodsSkuList.add(goodsSku); - } - this.updateBatchById(goodsSkuList); - } @Override @Transactional(rollbackFor = Exception.class) diff --git a/framework/src/main/java/cn/lili/modules/goods/sku/GoodsSkuBuilder.java b/framework/src/main/java/cn/lili/modules/goods/sku/GoodsSkuBuilder.java index c3a42ba2..f7fb9771 100644 --- a/framework/src/main/java/cn/lili/modules/goods/sku/GoodsSkuBuilder.java +++ b/framework/src/main/java/cn/lili/modules/goods/sku/GoodsSkuBuilder.java @@ -64,7 +64,7 @@ public class GoodsSkuBuilder { Map specMap = new LinkedHashMap<>(); // 原始规格项 - String[] ignoreOriginKeys = {"id", "sn", "cost", "price", "quantity", "weight","alertQuantity"}; + String[] ignoreOriginKeys = {"id", "sn", "cost", "price", "quantity", "weight"}; //获取规格信息 for (Map.Entry spec : skuInfo.entrySet()) { //保存新增规格信息 @@ -91,7 +91,6 @@ public class GoodsSkuBuilder { goodsSku.setQuantity(Convert.toInt(skuInfo.get("quantity"), 0)); goodsSku.setSpecs(JSONUtil.toJsonStr(specMap)); goodsSku.setSimpleSpecs(simpleSpecs.toString()); - goodsSku.setAlertQuantity(Convert.toInt(skuInfo.get("alertQuantity"), 0)); } diff --git a/framework/src/main/java/cn/lili/modules/statistics/service/GoodsStatisticsService.java b/framework/src/main/java/cn/lili/modules/statistics/service/GoodsStatisticsService.java index 20e30f0b..7e2639f7 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/service/GoodsStatisticsService.java +++ b/framework/src/main/java/cn/lili/modules/statistics/service/GoodsStatisticsService.java @@ -21,9 +21,6 @@ public interface GoodsStatisticsService extends IService { * @return 所有的已上架的商品数量 */ long goodsNum(GoodsStatusEnum goodsStatusEnum, GoodsAuthEnum goodsAuthEnum); - - long alertQuantityNum(); - /** * 获取今天的已上架的商品数量 * diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsServiceImpl.java index 67fd67aa..91242c63 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsServiceImpl.java @@ -52,17 +52,6 @@ public class GoodsStatisticsServiceImpl extends ServiceImpl queryWrapper = Wrappers.lambdaQuery(); diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/IndexStatisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/IndexStatisticsServiceImpl.java index a8861767..0ce96a9b 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/IndexStatisticsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/IndexStatisticsServiceImpl.java @@ -182,7 +182,6 @@ public class IndexStatisticsServiceImpl implements IndexStatisticsService { //商品总数量 storeIndexStatisticsVO.setGoodsNum(goodsStatisticsService.goodsNum(GoodsStatusEnum.UPPER, null)); -// storeIndexStatisticsVO.setAlertQuantityNum(goodsStatisticsService.alertQuantityNum()); //订单总数量、订单总金额 Map map = storeFlowStatisticsService.getOrderStatisticsPrice(); storeIndexStatisticsVO.setOrderNum(Convert.toInt(map.get("num").toString())); diff --git a/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java b/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java index be4c580b..11d5b99a 100644 --- a/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java @@ -93,8 +93,7 @@ public class GoodsStoreController { StoreDetail storeDetail = OperationalJudgment.judgment(storeDetailService.getStoreDetail(storeId)); Integer stockWarnNum = storeDetail.getStockWarning(); goodsSearchParams.setStoreId(storeId); -// goodsSearchParams.setLeQuantity(stockWarnNum); - goodsSearchParams.setAlertQuantity(true); + goodsSearchParams.setLeQuantity(stockWarnNum); goodsSearchParams.setMarketEnable(GoodsStatusEnum.UPPER.name()); IPage goodsSku = goodsSkuService.getGoodsSkuByPage(goodsSearchParams); StockWarningVO stockWarning = new StockWarningVO(stockWarnNum, goodsSku); @@ -182,22 +181,6 @@ public class GoodsStoreController { goodsSkuService.updateStocks(collect); return ResultUtil.success(); } - - @ApiOperation(value = "修改商品预警库存") - @PutMapping(value = "/update/alert/stocks", consumes = "application/json") - public ResultMessage updateAlertQuantity(@RequestBody List updateStockList) { - String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); - // 获取商品skuId集合 - List goodsSkuIds = updateStockList.stream().map(GoodsSkuStockDTO::getSkuId).collect(Collectors.toList()); - // 根据skuId集合查询商品信息 - List goodsSkuList = goodsSkuService.list(new LambdaQueryWrapper().in(GoodsSku::getId, goodsSkuIds).eq(GoodsSku::getStoreId, storeId)); - // 过滤不符合当前店铺的商品 - List filterGoodsSkuIds = goodsSkuList.stream().map(GoodsSku::getId).collect(Collectors.toList()); - List collect = updateStockList.stream().filter(i -> filterGoodsSkuIds.contains(i.getSkuId())).collect(Collectors.toList()); - goodsSkuService.updateAlertQuantity(collect); - return ResultUtil.success(); - } - @ApiOperation(value = "通过id获取商品信息") @ApiImplicitParams({ @ApiImplicitParam(name = "goodsId", value = "商品ID", required = true, paramType = "path"),