diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizInquiryRequestController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizInquiryRequestController.java index e8890e0..cdd26c9 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizInquiryRequestController.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizInquiryRequestController.java @@ -50,7 +50,8 @@ public class BizInquiryRequestController extends BaseController { /** * 根据目的地仓库和渠道查询物流询价单 */ - @SaCheckPermission("amz:inquiryRequest:list") +// @SaCheckPermission("amz:inquiryRequest:list") + @SaCheckPermission("amz:shipmentPlan:edit") @GetMapping("/query/{destination}/{channelId}/{date}") public TableDataInfo queryWithDesAndChannel(@PathVariable("destination") @NotNull(message = "目的地不能为空") String destination, @PathVariable("channelId") @NotNull(message = "渠道不能为空") String channelId, @@ -62,7 +63,8 @@ public class BizInquiryRequestController extends BaseController { /** * 根据目的地仓库和渠道创建物流询价单 */ - @SaCheckPermission("amz:inquiryRequest:list") +// @SaCheckPermission("amz:inquiryRequest:list") + @SaCheckPermission("amz:shipmentPlan:edit") @GetMapping("/create/{destination}/{channelId}/{date}") public R createWithDesAndChannel(@PathVariable("destination") @NotNull(message = "目的地不能为空") String destination, @PathVariable("channelId") @NotNull(message = "渠道不能为空") String channelId, diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsOrderController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsOrderController.java index 74e5448..0beb10e 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsOrderController.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsOrderController.java @@ -85,7 +85,7 @@ public class BizLogisticsOrderController extends BaseController { /** * 新增物流订单 */ - @SaCheckPermission("amz:logisticsOrder:add") + @SaCheckPermission("amz:shipmentPlan:add") @Log(title = "物流订单", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping("/createOrder") diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsQuoteController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsQuoteController.java index 99a34d1..399a94a 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsQuoteController.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsQuoteController.java @@ -53,7 +53,8 @@ public class BizLogisticsQuoteController extends BaseController { /** * 根据目的地仓库和渠道查询物流报价列表 */ - @SaCheckPermission("amz:logisticsQuote:list") +// @SaCheckPermission("amz:logisticsQuote:list") + @SaCheckPermission("amz:shipmentPlan:edit") @GetMapping("/query/{destination}/{channelId}/{date}") public TableDataInfo queryWithDesAndChannel(@PathVariable("destination") @NotNull(message = "目的地不能为空") String destination, @PathVariable("channelId") @NotNull(message = "渠道不能为空") String channelId, diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipmentPlanController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipmentPlanController.java index e007fd8..9afd6ea 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipmentPlanController.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipmentPlanController.java @@ -7,6 +7,7 @@ import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; import org.asinkj.amz.domain.vo.BizLogisticsQuoteVo; +import org.asinkj.amz.domain.vo.BizShipmentPlanOrderVo; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.asinkj.common.idempotent.annotation.RepeatSubmit; @@ -47,6 +48,13 @@ public class BizShipmentPlanController extends BaseController { return bizShipmentPlanService.queryPageList(bo, pageQuery); } + + @SaCheckPermission("amz:shipmentPlan:list") + @GetMapping("/list/order") + public TableDataInfo listOrder(BizShipmentPlanBo bo, PageQuery pageQuery) { + return bizShipmentPlanService.queryPageListOrder(bo, pageQuery); + } + /** * 导出货件计划列表 */ diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsOrder.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsOrder.java index 0d605fe..d97cb7d 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsOrder.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsOrder.java @@ -78,6 +78,12 @@ public class BizLogisticsOrder extends TenantEntity { */ private Long shelfTimeliness; + + /** + * 根据哪个报价单生成的报价单 + */ + private Long quoteOrderId; + /** * 删除标记(0=正常,1=删除) */ diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentItem.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentItem.java index a2bd8d6..4439b04 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentItem.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentItem.java @@ -68,6 +68,13 @@ public class BizShipmentItem extends TenantEntity { */ private String sku; + /** + * 品名 + */ + private String productName; + + private String asin; + /** * 有效期 */ diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentPlan.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentPlan.java index 925ca8e..4631265 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentPlan.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentPlan.java @@ -134,21 +134,40 @@ public class BizShipmentPlan extends TenantEntity { private String isSta; /** - * box_quantity - * box_size - * logistics_weight - * set_total + * 运营操作货件状态 */ + private String fbaStatus; - + /** + * 总箱子数量 + */ private Long boxQuantity; + /** + * 箱子尺寸 + */ private String boxSize; - private BigDecimal logisticsWeight; + /** + * 供应商称重 + */ + private Long vendorWeight; + /** + * 套数(系统中的申报量) + */ private Long setTotal; + /** + * 渠道ID + */ + private Long channelId; + + /** + * 物流渠道 + */ + private String channelName; + /** * 删除标记 */ diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipmentPlanBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipmentPlanBo.java index 6420762..a82045f 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipmentPlanBo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipmentPlanBo.java @@ -35,128 +35,157 @@ public class BizShipmentPlanBo extends BaseEntity { /** * 关联系统ID */ - @NotNull(message = "关联系统ID不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "关联系统ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long sid; /** * 货件编号 */ - @NotBlank(message = "货件编号不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "货件编号不能为空", groups = { AddGroup.class, EditGroup.class }) private String shipmentId; /** * 货件名称 */ - @NotBlank(message = "货件名称不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "货件名称不能为空", groups = { AddGroup.class, EditGroup.class }) private String shipmentName; /** * 是否关闭 */ - @NotBlank(message = "是否关闭不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "是否关闭不能为空", groups = { AddGroup.class, EditGroup.class }) private String isClosed; /** * 货件状态 */ - @NotBlank(message = "货件状态不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "货件状态不能为空", groups = { AddGroup.class, EditGroup.class }) private String shipmentStatus; /** * 物流中心编码 */ - @NotBlank(message = "物流中心编码不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "物流中心编码不能为空", groups = { AddGroup.class, EditGroup.class }) private String destination; /** * 运输模式 */ - @NotBlank(message = "运输模式不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "运输模式不能为空", groups = { AddGroup.class, EditGroup.class }) private String shippingMode; /** * 运输方案 */ - @NotBlank(message = "运输方案不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "运输方案不能为空", groups = { AddGroup.class, EditGroup.class }) private String shippingSolution; /** * 最后更新时间 */ - @NotNull(message = "最后更新时间不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "最后更新时间不能为空", groups = { AddGroup.class, EditGroup.class }) private Date gmtModified; /** * 创建时间 */ - @NotNull(message = "创建时间不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "创建时间不能为空", groups = { AddGroup.class, EditGroup.class }) private Date gmtCreate; /** * 同步时间 */ - @NotNull(message = "同步时间不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "同步时间不能为空", groups = { AddGroup.class, EditGroup.class }) private Date receivingTime; /** * 计划发货日期 */ - @NotNull(message = "计划发货日期不能为空", groups = { AddGroup.class, EditGroup.class }) + // @NotNull(message = "计划发货日期不能为空", groups = { AddGroup.class, EditGroup.class }) private Date staShipmentDate; /** * 预计到货开始日 */ - @NotNull(message = "预计到货开始日不能为空", groups = { AddGroup.class, EditGroup.class }) + // @NotNull(message = "预计到货开始日不能为空", groups = { AddGroup.class, EditGroup.class }) private Date staDeliveryStartDate; /** * 预计到货截止日 */ - @NotNull(message = "预计到货截止日不能为空", groups = { AddGroup.class, EditGroup.class }) + // @NotNull(message = "预计到货截止日不能为空", groups = { AddGroup.class, EditGroup.class }) private Date staDeliveryEndDate; /** * 发货地址 */ - @NotBlank(message = "发货地址不能为空", groups = { AddGroup.class, EditGroup.class }) + // @NotBlank(message = "发货地址不能为空", groups = { AddGroup.class, EditGroup.class }) private FbaShipmentApiResponse.Address shipFromAddress; /** * 收货地址 */ - @NotBlank(message = "收货地址不能为空", groups = { AddGroup.class, EditGroup.class }) + // @NotBlank(message = "收货地址不能为空", groups = { AddGroup.class, EditGroup.class }) private FbaShipmentApiResponse.Address shipToAddress; /** * 参考编号 */ - @NotBlank(message = "参考编号不能为空", groups = { AddGroup.class, EditGroup.class }) + // @NotBlank(message = "参考编号不能为空", groups = { AddGroup.class, EditGroup.class }) private String referenceId; /** * 入库计划ID */ - @NotBlank(message = "入库计划ID不能为空", groups = { AddGroup.class, EditGroup.class }) + // @NotBlank(message = "入库计划ID不能为空", groups = { AddGroup.class, EditGroup.class }) private String staInboundPlanId; /** * 是否STA计划 */ - @NotBlank(message = "是否STA计划不能为空", groups = { AddGroup.class, EditGroup.class }) + // @NotBlank(message = "是否STA计划不能为空", groups = { AddGroup.class, EditGroup.class }) private String isSta; + /** + * 运营操作货件状态 + */ + // @NotBlank(message = "运营操作货件状态不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fbaStatus; - @ExcelProperty(value = "箱子数量") + /** + * 总箱子数量 + */ + // @NotNull(message = "总箱子数量不能为空", groups = { AddGroup.class, EditGroup.class }) private Long boxQuantity; - @ExcelProperty(value = "箱子尺寸") + /** + * 箱子尺寸 + */ + // @NotBlank(message = "箱子尺寸不能为空", groups = { AddGroup.class, EditGroup.class }) private String boxSize; - @ExcelProperty(value = "总的物流商计重") - private BigDecimal logisticsWeight; + /** + * 总的物流商计重(单位:KG,物流商实际测量值) + */ + // @NotNull(message = "总的物流商计重(单位:KG,物流商实际测量值)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long vendorWeight; - @ExcelProperty(value = "套数(系统中的申报量)") + /** + * 套数(系统中的申报量) + */ + // @NotNull(message = "套数(系统中的申报量)不能为空", groups = { AddGroup.class, EditGroup.class }) private Long setTotal; + /** + * 渠道ID + */ + // @NotNull(message = "渠道ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long channelId; + + /** + * 物流渠道 + */ + // @NotBlank(message = "物流渠道不能为空", groups = { AddGroup.class, EditGroup.class }) + private String channelName; + } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentItemVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentItemVo.java index be055c8..1c2cb24 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentItemVo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentItemVo.java @@ -91,4 +91,7 @@ public class BizShipmentItemVo implements Serializable { private Date expiration; + private String productName; + + } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentPlanOrderVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentPlanOrderVo.java new file mode 100644 index 0000000..f9a70e5 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentPlanOrderVo.java @@ -0,0 +1,232 @@ +package org.asinkj.amz.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.asinkj.amz.domain.*; +import org.asinkj.amz.hanlder.AddressTypeHandler; +import org.asinkj.asinking.entity.FbaShipmentApiResponse; +import org.asinkj.common.excel.annotation.ExcelDictFormat; +import org.asinkj.common.excel.convert.ExcelDictConvert; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * 货件计划视图对象 biz_shipment_plan + * + * @author shuo hu + * @date 2025-03-19 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BizShipmentPlan.class) +public class BizShipmentPlanOrderVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 关联系统ID + */ + @ExcelProperty(value = "关联系统ID") + private Long sid; + + /** + * 货件编号 + */ + @ExcelProperty(value = "货件编号") + private String shipmentId; + + /** + * 货件名称 + */ + @ExcelProperty(value = "货件名称") + private String shipmentName; + + @ExcelProperty(value = "店铺名称") + private String sellerName; + + /** + * 是否关闭 + */ + @ExcelProperty(value = "是否关闭") + private String isClosed; + + /** + * 货件状态 + */ + @ExcelProperty(value = "货件状态") + private String shipmentStatus; + + /** + * 物流中心编码 + */ + @ExcelProperty(value = "物流中心编码") + private String destination; + + /** + * 运输模式 + */ + @ExcelProperty(value = "运输模式") + private String shippingMode; + + /** + * 运输方案 + */ + @ExcelProperty(value = "运输方案") + private String shippingSolution; + + /** + * 最后更新时间 + */ + @ExcelProperty(value = "最后更新时间") + private Date gmtModified; + + /** + * 创建时间 + */ + @ExcelProperty(value = "创建时间") + private Date gmtCreate; + + /** + * 同步时间 + */ + @ExcelProperty(value = "同步时间") + private Date receivingTime; + + /** + * 计划发货日期 + */ + @ExcelProperty(value = "计划发货日期") + private Date staShipmentDate; + + /** + * 预计到货开始日 + */ + @ExcelProperty(value = "预计到货开始日") + private Date staDeliveryStartDate; + + /** + * 预计到货截止日 + */ + @ExcelProperty(value = "预计到货截止日") + private Date staDeliveryEndDate; + + /** + * 发货地址 + */ + @ExcelProperty(value = "发货地址") + @TableField(value = "ship_from_address", typeHandler = AddressTypeHandler.class) + private FbaShipmentApiResponse.Address shipFromAddress; + + /** + * 收货地址 + */ + @ExcelProperty(value = "收货地址") + @TableField(value = "ship_to_address", typeHandler = AddressTypeHandler.class) + private FbaShipmentApiResponse.Address shipToAddress; + + /** + * 参考编号 + */ + @ExcelProperty(value = "参考编号") + private String referenceId; + + /** + * 入库计划ID + */ + @ExcelProperty(value = "入库计划ID") + private String staInboundPlanId; + + /** + * 是否STA计划 + */ + @ExcelProperty(value = "是否STA计划") + private String isSta; + + + /** + * 运营操作货件状态 + */ + @ExcelProperty(value = "运营操作货件状态") + private String fbaStatus; + + /** + * 总箱子数量 + */ + @ExcelProperty(value = "总箱子数量") + private Long boxQuantity; + + /** + * 箱子尺寸 + */ + @ExcelProperty(value = "箱子尺寸") + private String boxSize; + + /** + * 供应商称重(单位:KG,物流商实际测量值) + */ + @ExcelProperty(value = "供应商称重") + private Long vendorWeight; + + + @ExcelProperty(value = "物流商称重") + private Long logisticWeight; + + + /** + * 称重差异(应用层计算:物流商计重 - 供应商称重) + */ + private Long weightDiff; + + /** + * 套数(系统中的申报量) + */ + @ExcelProperty(value = "套数") + private Long setTotal; + + /** + * 渠道ID + */ + @ExcelProperty(value = "渠道ID") + private Long channelId; + + /** + * 物流渠道 + */ + @ExcelProperty(value = "物流渠道") + private String channelName; + + + private String trackingNumber; + + /** + * 订单明细 + */ + private List detailList; + + /** + * 产品明细 + */ + private List itemVoList; + + + private BizLogisticsOrder order; + + + private BizLogisticsQuote quote; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentPlanVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentPlanVo.java index 713f859..8b73a5b 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentPlanVo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipmentPlanVo.java @@ -6,9 +6,12 @@ import java.util.Date; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; +import io.github.linpeilie.annotations.AutoMappers; +import org.asinkj.amz.domain.BizShipmentItem; import org.asinkj.amz.domain.BizShipmentPlan; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import org.asinkj.amz.domain.BizShipmentTracking; import org.asinkj.amz.hanlder.AddressTypeHandler; import org.asinkj.asinking.entity.FbaShipmentApiResponse; import org.asinkj.common.excel.annotation.ExcelDictFormat; @@ -19,6 +22,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; +import java.util.List; /** @@ -29,7 +33,10 @@ import java.util.Date; */ @Data @ExcelIgnoreUnannotated -@AutoMapper(target = BizShipmentPlan.class) +@AutoMappers({ + @AutoMapper(target = BizShipmentPlan.class), + @AutoMapper(target = BizShipmentPlanOrderVo.class) +}) public class BizShipmentPlanVo implements Serializable { @Serial @@ -47,6 +54,9 @@ public class BizShipmentPlanVo implements Serializable { @ExcelProperty(value = "关联系统ID") private Long sid; + @ExcelProperty(value = "店铺名称") + private String sellerName; + /** * 货件编号 */ @@ -158,22 +168,55 @@ public class BizShipmentPlanVo implements Serializable { private String isSta; - @ExcelProperty(value = "箱子数量") - private Long boxNum; + /** + * 运营操作货件状态 + */ + @ExcelProperty(value = "运营操作货件状态") + private String fbaStatus; - - @ExcelProperty(value = "箱子数量") + /** + * 总箱子数量 + */ + @ExcelProperty(value = "总箱子数量") private Long boxQuantity; + /** + * 箱子尺寸 + */ @ExcelProperty(value = "箱子尺寸") private String boxSize; - @ExcelProperty(value = "总的物流商计重") - private BigDecimal logisticsWeight; + /** + * 总的物流商计重(单位:KG,物流商实际测量值) + */ + @ExcelProperty(value = "总的物流商计重", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "单=位:KG,物流商实际测量值") + private Long vendorWeight; - @ExcelProperty(value = "套数(系统中的申报量)") + /** + * 套数(系统中的申报量) + */ + @ExcelProperty(value = "套数", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "系=统中的申报量") private Long setTotal; + /** + * 渠道ID + */ + @ExcelProperty(value = "渠道ID") + private Long channelId; + + /** + * 物流渠道 + */ + @ExcelProperty(value = "物流渠道") + private String channelName; + + + private List itemVoList; + + + // 显式添加 Setter(即使使用 @Data) public void setShipFromAddress(FbaShipmentApiResponse.Address shipFromAddress) { diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizLogisticsQuoteService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizLogisticsQuoteService.java index 19e0479..319af43 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizLogisticsQuoteService.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizLogisticsQuoteService.java @@ -1,6 +1,8 @@ package org.asinkj.amz.service; +import cn.hutool.core.lang.Opt; import jakarta.validation.constraints.NotNull; +import org.asinkj.amz.domain.BizLogisticsQuote; import org.asinkj.amz.domain.bo.BizLogisticsQuoteMostBo; import org.asinkj.amz.domain.vo.BizLogisticsQuoteVo; import org.asinkj.amz.domain.bo.BizLogisticsQuoteBo; @@ -12,6 +14,7 @@ import java.math.BigDecimal; import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Set; /** * 物流报价Service接口 @@ -83,4 +86,6 @@ public interface IBizLogisticsQuoteService { Boolean checkPriceQuoteByBo(BizLogisticsQuoteMostBo bo); List getTodayQuoteStatus(); + + List queryQuoteWithQuoteId(Set quoteIds); } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentPlanService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentPlanService.java index 9b90e85..8107869 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentPlanService.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentPlanService.java @@ -3,6 +3,7 @@ package org.asinkj.amz.service; import jakarta.validation.constraints.NotNull; import org.asinkj.amz.domain.BizShipmentPlan; import org.asinkj.amz.domain.vo.BizLogisticsQuoteVo; +import org.asinkj.amz.domain.vo.BizShipmentPlanOrderVo; import org.asinkj.amz.domain.vo.BizShipmentPlanVo; import org.asinkj.amz.domain.bo.BizShipmentPlanBo; import org.asinkj.common.mybatis.core.page.TableDataInfo; @@ -74,4 +75,6 @@ public interface IBizShipmentPlanService { BizShipmentPlanVo queryByfbaShipmentId(String fbaShipmentId); void takeTodayAmzPlanData(); + + TableDataInfo queryPageListOrder(BizShipmentPlanBo bo, PageQuery pageQuery); } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/ISysAmazonStoreService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/ISysAmazonStoreService.java index e3bd93a..b152c86 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/ISysAmazonStoreService.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/ISysAmazonStoreService.java @@ -9,6 +9,7 @@ import org.asinkj.common.mybatis.core.page.PageQuery; import java.util.Collection; import java.util.List; +import java.util.Set; /** * 亚马逊店铺信息Service接口 @@ -87,5 +88,7 @@ public interface ISysAmazonStoreService { void testAmazonData2() throws Exception; + List queryBySidList(Set sids); + // void pullAmzStaData(String startDate, String endDate); } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsOrderServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsOrderServiceImpl.java index 83828a3..1808111 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsOrderServiceImpl.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsOrderServiceImpl.java @@ -215,7 +215,7 @@ public class BizLogisticsOrderServiceImpl implements IBizLogisticsOrderService { List trackingList = bizShipmentTrackingService.queryByPlanId(planVo.getShipmentId()); List itemList = bizShipmentItemService.queryByPlanId(planVo.getShipmentId()); - long sum = itemList.stream().mapToLong(BizShipmentItem::getQuantityShipped).sum(); + long sum = itemList.stream().filter(item -> item.getQuantityShipped() != null).mapToLong(BizShipmentItem::getQuantityShipped).sum(); BizLogisticsOrder bizLogisticsOrder = new BizLogisticsOrder(); @@ -228,6 +228,8 @@ public class BizLogisticsOrderServiceImpl implements IBizLogisticsOrderService { String nickName = remoteUserService.selectNicknameById(quoteVo.getUserId()); bizLogisticsOrder.setLogisticsProviderName(nickName); + bizLogisticsOrder.setQuoteOrderId(Long.valueOf(bo.getLogicQuoteId())); + bizLogisticsOrder.setChannelName(quoteVo.getChannelName()); // 目的地 bizLogisticsOrder.setDestination(quoteVo.getDestination()); diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsQuoteServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsQuoteServiceImpl.java index 31c3585..389c005 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsQuoteServiceImpl.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsQuoteServiceImpl.java @@ -3,6 +3,7 @@ package org.asinkj.amz.service.impl; import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Opt; import cn.hutool.core.util.NumberUtil; import lombok.extern.slf4j.Slf4j; import org.asinkj.amz.domain.BizInquiryRequest; @@ -318,6 +319,17 @@ public class BizLogisticsQuoteServiceImpl implements IBizLogisticsQuoteService { return result; } + @Override + public List queryQuoteWithQuoteId(Set quoteIds) { + if (quoteIds != null && !quoteIds.isEmpty()) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(BizLogisticsQuote::getId, quoteIds); + return baseMapper.selectList(queryWrapper); + } + return List.of(); + } + + // 解析 target_providers 字符串为物流商ID列表 private List parseTargetProviders(String targetProviders) { if (StringUtils.isBlank(targetProviders)) { diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentPlanServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentPlanServiceImpl.java index 63ae290..e84f232 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentPlanServiceImpl.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentPlanServiceImpl.java @@ -5,11 +5,12 @@ import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import lombok.extern.slf4j.Slf4j; -import org.asinkj.amz.domain.BizShipmentTracking; +import org.asinkj.amz.domain.*; import org.asinkj.amz.domain.bo.SysAmazonStoreBo; import org.asinkj.amz.domain.vo.BizLogisticsQuoteVo; +import org.asinkj.amz.domain.vo.BizShipmentPlanOrderVo; import org.asinkj.amz.domain.vo.SysAmazonStoreVo; -import org.asinkj.amz.mapper.BizShipmentTrackingMapper; +import org.asinkj.amz.mapper.*; import org.asinkj.amz.service.IBizLogisticsQuoteService; import org.asinkj.amz.service.ISysAmazonStoreService; import org.asinkj.amz.service.LingxinCallback; @@ -26,15 +27,11 @@ import org.asinkj.resource.api.RemoteMessageService; import org.springframework.stereotype.Service; import org.asinkj.amz.domain.bo.BizShipmentPlanBo; import org.asinkj.amz.domain.vo.BizShipmentPlanVo; -import org.asinkj.amz.domain.BizShipmentPlan; -import org.asinkj.amz.mapper.BizShipmentPlanMapper; import org.asinkj.amz.service.IBizShipmentPlanService; import javax.annotation.Resource; -import java.util.List; -import java.util.Map; -import java.util.Collection; -import java.util.Set; +import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -60,9 +57,19 @@ public class BizShipmentPlanServiceImpl implements IBizShipmentPlanService { @Resource private BizShipmentTrackingMapper bizShipmentTrackingMapper; + @Resource + private BizShipmentItemMapper bizShipmentItemMapper; + @Resource private RemoteMessageService remoteMessageService; + + @Resource + private BizLogisticsOrderMapper bizLogisticsOrderMapper; + + @Resource + private BizLogisticsOrderDetailMapper bizLogisticsOrderDetailMapper; + /** * 查询货件计划 * @@ -87,20 +94,42 @@ public class BizShipmentPlanServiceImpl implements IBizShipmentPlanService { Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); Set shipmentIds = result.getRecords().stream().map(BizShipmentPlanVo::getShipmentId).collect(Collectors.toSet()); - if (CollectionUtil.isNotEmpty(shipmentIds)) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(BizShipmentTracking::getShipmentId, shipmentIds); - List bizShipmentTrackings = bizShipmentTrackingMapper.selectList(queryWrapper); - Map collect = bizShipmentTrackings.stream() - .collect(Collectors.groupingBy( - BizShipmentTracking::getShipmentId, - Collectors.counting() - )); - for (BizShipmentPlanVo bizShipmentPlanVo : result.getRecords()) { - Long count = collect.get(bizShipmentPlanVo.getShipmentId()); - bizShipmentPlanVo.setBoxNum(count); - } - } + + + Set sids = result.getRecords().stream().map(BizShipmentPlanVo::getSid).collect(Collectors.toSet()); + Map storeNameMap = new HashMap<>(); + if (CollectionUtil.isNotEmpty(sids)) { + storeNameMap = iSysAmazonStoreService.queryBySidList(sids).stream().collect(Collectors.toMap(SysAmazonStore::getSid, SysAmazonStore::getStoreName)); + } + if (CollectionUtil.isNotEmpty(shipmentIds)) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(BizShipmentTracking::getShipmentId, shipmentIds); + List bizShipmentTrackings = bizShipmentTrackingMapper.selectList(queryWrapper); + Map collect = bizShipmentTrackings.stream() + .collect(Collectors.groupingBy( + BizShipmentTracking::getShipmentId, + Collectors.counting() + )); + + LambdaQueryWrapper bizShipmentItemLambdaQueryWrapper = new LambdaQueryWrapper<>(); + bizShipmentItemLambdaQueryWrapper.in(BizShipmentItem::getShipmentId, shipmentIds); + List bizShipmentItems = bizShipmentItemMapper.selectList(bizShipmentItemLambdaQueryWrapper); + Map> collect1 = bizShipmentItems.stream().collect(Collectors.groupingBy(BizShipmentItem::getShipmentId, Collectors.toList())); + + for (BizShipmentPlanVo bizShipmentPlanVo : result.getRecords()) { + Long count = collect.get(bizShipmentPlanVo.getShipmentId()); + bizShipmentPlanVo.setBoxQuantity(count); + bizShipmentPlanVo.setItemVoList(collect1.get(bizShipmentPlanVo.getShipmentId())); + if (CollectionUtil.isNotEmpty(sids)) { + String storeName = storeNameMap.get(bizShipmentPlanVo.getSid()); + bizShipmentPlanVo.setSellerName(storeName); + } + } + + + } + + return TableDataInfo.build(result); } @@ -125,7 +154,7 @@ public class BizShipmentPlanServiceImpl implements IBizShipmentPlanService { )); for (BizShipmentPlanVo bizShipmentPlanVo : bizShipmentPlanVos) { Long count = collect.get(bizShipmentPlanVo.getShipmentId()); - bizShipmentPlanVo.setBoxNum(count); + bizShipmentPlanVo.setBoxQuantity(count); } return bizShipmentPlanVos; } @@ -153,6 +182,14 @@ public class BizShipmentPlanServiceImpl implements IBizShipmentPlanService { lqw.eq(StringUtils.isNotBlank(bo.getStaInboundPlanId()), BizShipmentPlan::getStaInboundPlanId, bo.getStaInboundPlanId()); lqw.eq(StringUtils.isNotBlank(bo.getIsSta()), BizShipmentPlan::getIsSta, bo.getIsSta()); + lqw.eq(StringUtils.isNotBlank(bo.getFbaStatus()), BizShipmentPlan::getFbaStatus, bo.getFbaStatus()); + lqw.eq(bo.getBoxQuantity() != null, BizShipmentPlan::getBoxQuantity, bo.getBoxQuantity()); + lqw.eq(StringUtils.isNotBlank(bo.getBoxSize()), BizShipmentPlan::getBoxSize, bo.getBoxSize()); + lqw.eq(bo.getVendorWeight() != null, BizShipmentPlan::getVendorWeight, bo.getVendorWeight()); + lqw.eq(bo.getSetTotal() != null, BizShipmentPlan::getSetTotal, bo.getSetTotal()); + lqw.eq(bo.getChannelId() != null, BizShipmentPlan::getChannelId, bo.getChannelId()); + lqw.like(StringUtils.isNotBlank(bo.getChannelName()), BizShipmentPlan::getChannelName, bo.getChannelName()); + SysAmazonStoreBo sysAmazonStoreBo = new SysAmazonStoreBo(); sysAmazonStoreBo.setUserId(LoginHelper.getUserId()); List sysAmazonStoreVos = iSysAmazonStoreService.queryList(sysAmazonStoreBo); @@ -232,7 +269,6 @@ public class BizShipmentPlanServiceImpl implements IBizShipmentPlanService { } - @Override public void takeTodayAmzPlanData() { @@ -252,4 +288,87 @@ public class BizShipmentPlanServiceImpl implements IBizShipmentPlanService { } }); } + + @Override + public TableDataInfo queryPageListOrder(BizShipmentPlanBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + + Set shipmentIds = result.getRecords().stream().map(BizShipmentPlanVo::getShipmentId).collect(Collectors.toSet()); + + + List convert = MapstructUtils.convert(result.getRecords(), BizShipmentPlanOrderVo.class); + + Page bizShipmentPlanOrderVoPage = new Page<>(result.getCurrent(), result.getSize(), result.getTotal()); + bizShipmentPlanOrderVoPage.setRecords(convert); + + + Set sids = result.getRecords().stream().map(BizShipmentPlanVo::getSid).collect(Collectors.toSet()); + Map storeNameMap = new HashMap<>(); + if (CollectionUtil.isNotEmpty(sids)) { + storeNameMap = iSysAmazonStoreService.queryBySidList(sids).stream().collect(Collectors.toMap(SysAmazonStore::getSid, SysAmazonStore::getStoreName)); + } + + if (CollectionUtil.isNotEmpty(shipmentIds)) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(BizShipmentTracking::getShipmentId, shipmentIds); + List bizShipmentTrackings = bizShipmentTrackingMapper.selectList(queryWrapper); + Map collect = bizShipmentTrackings.stream() + .collect(Collectors.groupingBy( + BizShipmentTracking::getShipmentId, + Collectors.counting() + )); + + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(BizLogisticsOrder::getFbaShipmentId, shipmentIds); + List bizLogisticsOrders = bizLogisticsOrderMapper.selectList(lambdaQueryWrapper); + Set quoteIds = bizLogisticsOrders.stream().map(BizLogisticsOrder::getQuoteOrderId).collect(Collectors.toSet()); + List quotes = iLogisticsQuoteService.queryQuoteWithQuoteId(quoteIds); + Map quoteMap = quotes.stream().collect(Collectors.toMap(BizLogisticsQuote::getId, Function.identity())); + + + Map orderMap = bizLogisticsOrders.stream().collect(Collectors.toMap(BizLogisticsOrder::getFbaShipmentId, Function.identity(), + (existing, replacement) -> existing)); + + + LambdaQueryWrapper orderDetailLambdaQueryWrapper = new LambdaQueryWrapper<>(); + orderDetailLambdaQueryWrapper.in(BizLogisticsOrderDetail::getFbaShipmentId, shipmentIds); + List bizLogisticsOrderDetails = bizLogisticsOrderDetailMapper.selectList(orderDetailLambdaQueryWrapper); + Map> detailMap = bizLogisticsOrderDetails.stream().collect(Collectors.groupingBy(BizLogisticsOrderDetail::getFbaShipmentId)); + + + LambdaQueryWrapper bizShipmentItemLambdaQueryWrapper = new LambdaQueryWrapper<>(); + bizShipmentItemLambdaQueryWrapper.in(BizShipmentItem::getShipmentId, shipmentIds); + List bizShipmentItems = bizShipmentItemMapper.selectList(bizShipmentItemLambdaQueryWrapper); + Map> collect1 = bizShipmentItems.stream().collect(Collectors.groupingBy(BizShipmentItem::getShipmentId, Collectors.toList())); + + + for (BizShipmentPlanOrderVo bizShipmentPlanVo : bizShipmentPlanOrderVoPage.getRecords()) { + Long count = collect.get(bizShipmentPlanVo.getShipmentId()); + BizLogisticsOrder bizLogisticsOrder = orderMap.get(bizShipmentPlanVo.getShipmentId()); + List bizLogisticsOrderDetails1 = detailMap.get(bizShipmentPlanVo.getShipmentId()); + bizShipmentPlanVo.setItemVoList(collect1.get(bizShipmentPlanVo.getShipmentId())); + + bizShipmentPlanVo.setDetailList(bizLogisticsOrderDetails1); + if (CollectionUtil.isNotEmpty(bizLogisticsOrderDetails1)) { + BizLogisticsOrderDetail bizLogisticsOrderDetail = bizLogisticsOrderDetails1.get(0); + bizShipmentPlanVo.setTrackingNumber(bizLogisticsOrderDetail.getTrackingNumber()); + long sum = bizLogisticsOrderDetails1.stream().filter(item -> item.getLogisticsWeight() != null).mapToLong(BizLogisticsOrderDetail::getLogisticsWeight).sum(); + bizShipmentPlanVo.setLogisticWeight(sum); + + long l = bizShipmentPlanVo.getLogisticWeight() - bizShipmentPlanVo.getVendorWeight(); + bizShipmentPlanVo.setWeightDiff(l); + } + bizShipmentPlanVo.setBoxQuantity(count); + bizShipmentPlanVo.setOrder(bizLogisticsOrder); + BizLogisticsQuote bizLogisticsQuote = quoteMap.get(bizLogisticsOrder.getQuoteOrderId()); + bizShipmentPlanVo.setQuote(bizLogisticsQuote); + if (CollectionUtil.isNotEmpty(sids)) { + String storeName = storeNameMap.get(bizShipmentPlanVo.getSid()); + bizShipmentPlanVo.setSellerName(storeName); + } + } + } + return TableDataInfo.build(bizShipmentPlanOrderVoPage); + } } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/SysAmazonStoreServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/SysAmazonStoreServiceImpl.java index 02bff81..6e1880f 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/SysAmazonStoreServiceImpl.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/SysAmazonStoreServiceImpl.java @@ -147,6 +147,9 @@ public class SysAmazonStoreServiceImpl implements ISysAmazonStoreService { lqw.eq(bo.getHasAdsSetting() != null, SysAmazonStore::getHasAdsSetting, bo.getHasAdsSetting()); lqw.eq(bo.getStatus() != null, SysAmazonStore::getStatus, bo.getStatus()); lqw.orderByDesc(SysAmazonStore::getSid); + if (!LoginHelper.isSuperAdmin()&&!LoginHelper.isManagerAdmin()){ + lqw.eq(SysAmazonStore::getUserId, LoginHelper.getUserId()); + } return lqw; } @@ -629,6 +632,8 @@ public class SysAmazonStoreServiceImpl implements ISysAmazonStoreService { bizShipmentItem.setMsku(item.getMsku()); bizShipmentItem.setFnsku(item.getFnsku()); bizShipmentItem.setSku(item.getSku()); + bizShipmentItem.setProductName(item.getProductName()); + bizShipmentItem.setAsin(item.getAsin()); // bizShipmentItem.setQuantityShipped(item.getQuantity()); bizShipmentItems.add(bizShipmentItem); } @@ -761,5 +766,15 @@ public class SysAmazonStoreServiceImpl implements ISysAmazonStoreService { } + @Override + public List queryBySidList(Set sids) { + if (CollectionUtil.isNotEmpty(sids)) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(SysAmazonStore::getSid, sids); + return baseMapper.selectList(queryWrapper); + } + return List.of(); + } + } diff --git a/asinkj-common/asinkj-common-core/src/main/java/org/asinkj/common/core/constant/TenantConstants.java b/asinkj-common/asinkj-common-core/src/main/java/org/asinkj/common/core/constant/TenantConstants.java index 96f63f3..3b9dcc1 100644 --- a/asinkj-common/asinkj-common-core/src/main/java/org/asinkj/common/core/constant/TenantConstants.java +++ b/asinkj-common/asinkj-common-core/src/main/java/org/asinkj/common/core/constant/TenantConstants.java @@ -32,6 +32,12 @@ public interface TenantConstants { */ String TENANT_ADMIN_ROLE_KEY = "admin"; + + String TENANT_MANAGER_ROLE_KEY = "manager"; + + + String YUNYING_ADMIN_ROLE_KEY = "yunying"; + /** * 租户管理员角色名称 */ diff --git a/asinkj-common/asinkj-common-satoken/src/main/java/org/asinkj/common/satoken/utils/LoginHelper.java b/asinkj-common/asinkj-common-satoken/src/main/java/org/asinkj/common/satoken/utils/LoginHelper.java index 346757a..76cba33 100644 --- a/asinkj-common/asinkj-common-satoken/src/main/java/org/asinkj/common/satoken/utils/LoginHelper.java +++ b/asinkj-common/asinkj-common-satoken/src/main/java/org/asinkj/common/satoken/utils/LoginHelper.java @@ -178,6 +178,14 @@ public class LoginHelper { return rolePermission.contains(TenantConstants.TENANT_ADMIN_ROLE_KEY); } + + public static boolean isManagerAdmin(Set rolePermission) { + if (CollUtil.isEmpty(rolePermission)) { + return false; + } + return rolePermission.contains(TenantConstants.TENANT_MANAGER_ROLE_KEY); + } + /** * 是否为租户管理员 * @@ -187,6 +195,10 @@ public class LoginHelper { return Convert.toBool(isTenantAdmin(getLoginUser().getRolePermission())); } + public static boolean isManagerAdmin() { + return Convert.toBool(isManagerAdmin(getLoginUser().getRolePermission())); + } + /** * 检查当前用户是否已登录 *