diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizPackingSpecsItemController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizPackingSpecsItemController.java new file mode 100644 index 0000000..d79ee97 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizPackingSpecsItemController.java @@ -0,0 +1,106 @@ +package org.asinkj.amz.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.asinkj.common.idempotent.annotation.RepeatSubmit; +import org.asinkj.common.log.annotation.Log; +import org.asinkj.common.web.core.BaseController; +import org.asinkj.common.mybatis.core.page.PageQuery; +import org.asinkj.common.core.domain.R; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import org.asinkj.common.log.enums.BusinessType; +import org.asinkj.common.excel.utils.ExcelUtil; +import org.asinkj.amz.domain.vo.BizPackingSpecsItemVo; +import org.asinkj.amz.domain.bo.BizPackingSpecsItemBo; +import org.asinkj.amz.service.IBizPackingSpecsItemService; +import org.asinkj.common.mybatis.core.page.TableDataInfo; + +/** + * 产品装箱规格明细 + * 前端访问路由地址为:/amz/packingSpecsItem + * + * @author shuo hu + * @date 2025-09-09 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/packingSpecsItem") +public class BizPackingSpecsItemController extends BaseController { + + private final IBizPackingSpecsItemService bizPackingSpecsItemService; + + /** + * 查询产品装箱规格明细列表 + */ + @SaCheckPermission("amz:packingSpecsItem:list") + @GetMapping("/list") + public TableDataInfo list(BizPackingSpecsItemBo bo, PageQuery pageQuery) { + return bizPackingSpecsItemService.queryPageList(bo, pageQuery); + } + + /** + * 导出产品装箱规格明细列表 + */ + @SaCheckPermission("amz:packingSpecsItem:export") + @Log(title = "产品装箱规格明细", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(BizPackingSpecsItemBo bo, HttpServletResponse response) { + List list = bizPackingSpecsItemService.queryList(bo); + ExcelUtil.exportExcel(list, "产品装箱规格明细", BizPackingSpecsItemVo.class, response); + } + + /** + * 获取产品装箱规格明细详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("amz:packingSpecsItem:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(bizPackingSpecsItemService.queryById(id)); + } + + /** + * 新增产品装箱规格明细 + */ + @SaCheckPermission("amz:packingSpecsItem:add") + @Log(title = "产品装箱规格明细", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody BizPackingSpecsItemBo bo) { + return toAjax(bizPackingSpecsItemService.insertByBo(bo)); + } + + /** + * 修改产品装箱规格明细 + */ + @SaCheckPermission("amz:packingSpecsItem:edit") + @Log(title = "产品装箱规格明细", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody BizPackingSpecsItemBo bo) { + return toAjax(bizPackingSpecsItemService.updateByBo(bo)); + } + + /** + * 删除产品装箱规格明细 + * + * @param ids 主键串 + */ + @SaCheckPermission("amz:packingSpecsItem:remove") + @Log(title = "产品装箱规格明细", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(bizPackingSpecsItemService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizSendOrderController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizSendOrderController.java index 03564cd..7a47bdd 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizSendOrderController.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizSendOrderController.java @@ -9,6 +9,10 @@ import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; import org.asinkj.amz.domain.BizShipmentPlan; +import org.asinkj.amz.domain.bo.BizSendOrderMixBo; +import org.asinkj.amz.domain.bo.BizSendOrderMixPackSpecsBo; +import org.asinkj.amz.domain.vo.BizPackingSpecsVo; +import org.asinkj.amz.domain.vo.BizSendOrderPackVo; import org.asinkj.amz.domain.vo.BizShipmentPlanVo; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; @@ -57,6 +61,18 @@ public class BizSendOrderController extends BaseController { return bizSendOrderService.coverSendOrder(bo, pageQuery); } + @SaCheckRole(value = {"gongying", "gengdan", "superadmin", "yunying"}, mode = SaMode.OR) + @PostMapping("/link/list") + public TableDataInfo linkSendOrderList(@RequestBody BizSendOrderBo bo, PageQuery pageQuery) { + return bizSendOrderService.linkSendOrderList(bo, pageQuery); + } + + @SaCheckRole(value = {"gongying", "gengdan", "superadmin", "yunying"}, mode = SaMode.OR) + @PostMapping("/link/mix/list") + public R> linkMixSendOrderList(@RequestBody BizSendOrderBo bo, PageQuery pageQuery) { + return R.ok(bizSendOrderService.linkMixSendOrderList(bo, pageQuery)); + } + /** * 导出供应商创建的发货单列表 */ @@ -143,4 +159,24 @@ public class BizSendOrderController extends BaseController { bizSendOrderService.transfer(bo); return R.ok(); } + + + @SaCheckRole(value = {"gongying", "gengdan", "superadmin", "yunying"}, mode = SaMode.OR) + @Log(title = "供应商创建的发货单", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PostMapping("/create-mix-order") + public R createMixedOrder(@RequestBody BizSendOrderMixBo bo) { + bizSendOrderService.createMixedOrder(bo); + return R.ok(); + } + + + @SaCheckRole(value = {"gongying", "gengdan", "superadmin", "yunying"}, mode = SaMode.OR) + @Log(title = "供应商创建的发货单", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PostMapping("/create-order-pack") + public R createMixedOrderPackSpecs(@RequestBody BizSendOrderMixPackSpecsBo bo) { + bizSendOrderService.createMixedOrderPackSpecs(bo); + return R.ok(); + } } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizSendShipmentPlanRelController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizSendShipmentPlanRelController.java new file mode 100644 index 0000000..ff2997d --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizSendShipmentPlanRelController.java @@ -0,0 +1,126 @@ +package org.asinkj.amz.controller; + +import java.util.List; + +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.asinkj.amz.domain.bo.BatchRelDTO; +import org.asinkj.amz.domain.bo.BatchSendOrderPlanRelDTO; +import org.asinkj.amz.domain.vo.BizSendPlanRelVo; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.asinkj.common.idempotent.annotation.RepeatSubmit; +import org.asinkj.common.log.annotation.Log; +import org.asinkj.common.web.core.BaseController; +import org.asinkj.common.mybatis.core.page.PageQuery; +import org.asinkj.common.core.domain.R; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import org.asinkj.common.log.enums.BusinessType; +import org.asinkj.common.excel.utils.ExcelUtil; +import org.asinkj.amz.domain.vo.BizSendShipmentPlanRelVo; +import org.asinkj.amz.domain.bo.BizSendShipmentPlanRelBo; +import org.asinkj.amz.service.IBizSendShipmentPlanRelService; +import org.asinkj.common.mybatis.core.page.TableDataInfo; + +/** + * 发货单与货运计划多对多关联 + * 前端访问路由地址为:/amz/sendShipmentPlanRel + * + * @author shuo hu + * @date 2025-08-30 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/sendShipmentPlanRel") +public class BizSendShipmentPlanRelController extends BaseController { + + private final IBizSendShipmentPlanRelService bizSendShipmentPlanRelService; + + /** + * 查询发货单与货运计划多对多关联列表 + */ + @SaCheckPermission("amz:sendShipmentPlanRel:list") + @GetMapping("/list") + public TableDataInfo list(BizSendShipmentPlanRelBo bo, PageQuery pageQuery) { + return bizSendShipmentPlanRelService.queryPageList(bo, pageQuery); + } + + /** + * 导出发货单与货运计划多对多关联列表 + */ + @SaCheckPermission("amz:sendShipmentPlanRel:export") + @Log(title = "发货单与货运计划多对多关联", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(BizSendShipmentPlanRelBo bo, HttpServletResponse response) { + List list = bizSendShipmentPlanRelService.queryList(bo); + ExcelUtil.exportExcel(list, "发货单与货运计划多对多关联", BizSendShipmentPlanRelVo.class, response); + } + + /** + * 获取发货单与货运计划多对多关联详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("amz:sendShipmentPlanRel:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(bizSendShipmentPlanRelService.queryById(id)); + } + + /** + * 新增发货单与货运计划多对多关联 + */ + @SaCheckPermission("amz:sendShipmentPlanRel:add") + @Log(title = "发货单与货运计划多对多关联", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody BizSendShipmentPlanRelBo bo) { + return toAjax(bizSendShipmentPlanRelService.insertByBo(bo)); + } + + /** + * 修改发货单与货运计划多对多关联 + */ + @SaCheckPermission("amz:sendShipmentPlanRel:edit") + @Log(title = "发货单与货运计划多对多关联", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody BizSendShipmentPlanRelBo bo) { + return toAjax(bizSendShipmentPlanRelService.updateByBo(bo)); + } + + /** + * 删除发货单与货运计划多对多关联 + * + * @param ids 主键串 + */ + @SaCheckPermission("amz:sendShipmentPlanRel:remove") + @Log(title = "发货单与货运计划多对多关联", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(bizSendShipmentPlanRelService.deleteWithValidByIds(List.of(ids), true)); + } + + @PostMapping("/createBatchRelations") + public R createBatchRelations( + @Valid @RequestBody BatchSendOrderPlanRelDTO dto) { + bizSendShipmentPlanRelService.batchCreateRelations(dto); + return R.ok(); + } + + + @PostMapping("/createMixBatchRelations") + public R createMixBatchRelations( + @Valid @RequestBody BatchSendOrderPlanRelDTO dto) { + bizSendShipmentPlanRelService.createMixBatchRelations(dto); + return R.ok(); + } + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizStoreUserRelController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizStoreUserRelController.java new file mode 100644 index 0000000..d66d56f --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizStoreUserRelController.java @@ -0,0 +1,118 @@ +package org.asinkj.amz.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.asinkj.amz.domain.bo.BizStoreUserRelListBo; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.asinkj.common.idempotent.annotation.RepeatSubmit; +import org.asinkj.common.log.annotation.Log; +import org.asinkj.common.web.core.BaseController; +import org.asinkj.common.mybatis.core.page.PageQuery; +import org.asinkj.common.core.domain.R; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import org.asinkj.common.log.enums.BusinessType; +import org.asinkj.common.excel.utils.ExcelUtil; +import org.asinkj.amz.domain.vo.BizStoreUserRelVo; +import org.asinkj.amz.domain.bo.BizStoreUserRelBo; +import org.asinkj.amz.service.IBizStoreUserRelService; +import org.asinkj.common.mybatis.core.page.TableDataInfo; + +/** + * 用户店铺关联 + * 前端访问路由地址为:/amz/storeUserRel + * + * @author shuo hu + * @date 2025-09-26 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/storeUserRel") +public class BizStoreUserRelController extends BaseController { + + private final IBizStoreUserRelService bizStoreUserRelService; + + /** + * 查询用户店铺关联列表 + */ + @SaCheckPermission("amz:storeUserRel:list") + @GetMapping("/list") + public TableDataInfo list(BizStoreUserRelBo bo, PageQuery pageQuery) { + return bizStoreUserRelService.queryPageList(bo, pageQuery); + } + + /** + * 导出用户店铺关联列表 + */ + @SaCheckPermission("amz:storeUserRel:export") + @Log(title = "用户店铺关联", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(BizStoreUserRelBo bo, HttpServletResponse response) { + List list = bizStoreUserRelService.queryList(bo); + ExcelUtil.exportExcel(list, "用户店铺关联", BizStoreUserRelVo.class, response); + } + + /** + * 获取用户店铺关联详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("amz:storeUserRel:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(bizStoreUserRelService.queryById(id)); + } + + /** + * 新增用户店铺关联 + */ + @SaCheckPermission("amz:storeUserRel:add") + @Log(title = "用户店铺关联", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody BizStoreUserRelBo bo) { + return toAjax(bizStoreUserRelService.insertByBo(bo)); + } + + + @SaCheckPermission("amz:storeUserRel:add") + @Log(title = "用户店铺关联", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/updateUsers") + public R updateUsers(@Validated(AddGroup.class) @RequestBody BizStoreUserRelListBo bo) { + + bizStoreUserRelService.updateUsers(bo); + return R.ok(); + } + + /** + * 修改用户店铺关联 + */ + @SaCheckPermission("amz:storeUserRel:edit") + @Log(title = "用户店铺关联", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody BizStoreUserRelBo bo) { + return toAjax(bizStoreUserRelService.updateByBo(bo)); + } + + /** + * 删除用户店铺关联 + * + * @param ids 主键串 + */ + @SaCheckPermission("amz:storeUserRel:remove") + @Log(title = "用户店铺关联", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(bizStoreUserRelService.deleteWithValidByIds(List.of(ids), true)); + } +} 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 bed70e1..2d98962 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 @@ -104,4 +104,8 @@ public class BizLogisticsOrder extends TenantEntity { @TableField(exist = false) private List details; + + private BigDecimal logisticsPrice; + + } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizPackingSpecs.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizPackingSpecs.java index 4db3235..e959eb8 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizPackingSpecs.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizPackingSpecs.java @@ -6,6 +6,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serial; +import java.math.BigDecimal; /** * 产品装箱规格对象 biz_packing_specs @@ -24,6 +25,7 @@ public class BizPackingSpecs extends TenantEntity { /** * 规格ID(主键) */ + @TableId(value = "id", type = IdType.ASSIGN_ID) private Long id; /** @@ -39,7 +41,7 @@ public class BizPackingSpecs extends TenantEntity { /** * 箱数(单位:箱) */ - private Long cartonCount; + private BigDecimal cartonCount; /** * 每箱件数(单位:件) @@ -49,22 +51,22 @@ public class BizPackingSpecs extends TenantEntity { /** * 箱子长度(单位:厘米) */ - private Long length; + private BigDecimal length; /** * 箱子宽度(单位:厘米) */ - private Long width; + private BigDecimal width; /** * 箱子高度(单位:厘米) */ - private Long height; + private BigDecimal height; /** * 单箱重量(单位:千克) */ - private Long weight; + private BigDecimal weight; /** * 删除标志(0正常 2删除) diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizPackingSpecsItem.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizPackingSpecsItem.java new file mode 100644 index 0000000..0ca37ce --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizPackingSpecsItem.java @@ -0,0 +1,57 @@ +package org.asinkj.amz.domain; + +import org.asinkj.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.math.BigDecimal; + +/** + * 产品装箱规格明细对象 biz_packing_specs_item + * + * @author shuo hu + * @date 2025-09-09 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("biz_packing_specs_item") +public class BizPackingSpecsItem extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 规格ID(主键) + */ + private Long id; + + /** + * 关联箱规明细项ID + */ + private Long packingSpecsId; + + /** + * sku + */ + private String sku; + + /** + * 产品名称 + */ + private String productName; + + /** + * 每箱件数(单位:件) + */ + private BigDecimal piecesPerCarton; + + /** + * 删除标志(0正常 2删除) + */ + @TableLogic + private String delFlag; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizSendOrder.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizSendOrder.java index bc39e7a..9699f14 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizSendOrder.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizSendOrder.java @@ -38,6 +38,10 @@ public class BizSendOrder extends TenantEntity { @TableLogic private String delFlag; + + private String completeFlag; + + /** * 采购单号 */ @@ -87,6 +91,14 @@ public class BizSendOrder extends TenantEntity { */ private BigDecimal weightPerBox; + + @TableField(exist = false) + private BigDecimal piecesPerCarton; + + @TableField(exist = false) + private BigDecimal quantityRelated; + + private String sku; /** diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizSendOrderItem.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizSendOrderItem.java index 913161e..6cbeec3 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizSendOrderItem.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizSendOrderItem.java @@ -65,7 +65,6 @@ public class BizSendOrderItem extends TenantEntity { private Long mainOrderSn; - @TableField(exist = false) private BigDecimal ratio; private Long transferFromId; diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizSendShipmentPlanRel.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizSendShipmentPlanRel.java new file mode 100644 index 0000000..3068436 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizSendShipmentPlanRel.java @@ -0,0 +1,62 @@ +package org.asinkj.amz.domain; + +import org.asinkj.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.math.BigDecimal; + +/** + * 发货单与货运计划多对多关联对象 biz_send_shipment_plan_rel + * + * @author shuo hu + * @date 2025-08-30 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("biz_send_shipment_plan_rel") +public class BizSendShipmentPlanRel extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * $column.columnComment + */ + private Long id; + + /** + * 发货单ID + */ + private Long sendOrderId; + + /** + * 货运计划ID + */ + private Long shipmentPlanId; + + /** + * sku + */ + private String sku; + + /** + * 规格表id + */ + private Long packId; + + /** + * 箱数(单位:箱) + */ + private BigDecimal cartonCount; + + /** + * 删除标志(0正常 2删除) + */ + @TableLogic + private String delFlag; + + +} 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 23a480b..c12629f 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 @@ -141,7 +141,7 @@ public class BizShipmentPlan extends TenantEntity { /** * 总箱子数量 */ - private Long boxQuantity; + private BigDecimal boxQuantity; /** * 箱子尺寸 diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizStoreUserRel.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizStoreUserRel.java new file mode 100644 index 0000000..0c54060 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizStoreUserRel.java @@ -0,0 +1,42 @@ +package org.asinkj.amz.domain; + +import org.asinkj.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 用户店铺关联对象 biz_store_user_rel + * + * @author shuo hu + * @date 2025-09-26 + */ +@Data +@TableName("biz_store_user_rel") +public class BizStoreUserRel { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * $column.columnComment + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 店铺id + */ + private Long storeId; + + /** + * 用户id + */ + private Long userId; + + private String storeName; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/SysStatusHistory.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/SysStatusHistory.java index 063f16e..dda6962 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/SysStatusHistory.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/SysStatusHistory.java @@ -26,6 +26,7 @@ public class SysStatusHistory extends TenantEntity { /** * $column.columnComment */ + @TableId(value = "history_id", type = IdType.AUTO) private Long historyId; /** diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BatchSendOrderPlanRelDTO.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BatchSendOrderPlanRelDTO.java new file mode 100644 index 0000000..4550db8 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BatchSendOrderPlanRelDTO.java @@ -0,0 +1,21 @@ +package org.asinkj.amz.domain.bo; + +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; +import org.asinkj.amz.domain.vo.BizPackingSpecsVo; +import org.asinkj.amz.domain.vo.BizSendOrderPackVo; + +import java.util.List; + +@Data +public class BatchSendOrderPlanRelDTO { + // @NotNull(message = "关联关系不能为空") +// private Long sendOrderId23; +// @NotEmpty(message = "发货单列表不能为空") + private List sendOrderIds; + + private List packingSpecs; + + @NotEmpty(message = "货运计划ID列表不能为空") + private List shipmentIds; +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsOrderBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsOrderBo.java index 61b6fc4..18adefc 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsOrderBo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsOrderBo.java @@ -9,6 +9,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; +import java.math.BigDecimal; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; @@ -96,5 +97,7 @@ public class BizLogisticsOrderBo extends BaseEntity { private String storeName; + private BigDecimal logisticsPrice; + } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizPackingSpecsBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizPackingSpecsBo.java index 4f12e2f..a3f56d4 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizPackingSpecsBo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizPackingSpecsBo.java @@ -1,6 +1,7 @@ package org.asinkj.amz.domain.bo; import org.asinkj.amz.domain.BizPackingSpecs; +import org.asinkj.amz.domain.BizPackingSpecsItem; import org.asinkj.common.mybatis.core.domain.BaseEntity; import org.asinkj.common.core.validate.AddGroup; import org.asinkj.common.core.validate.EditGroup; @@ -9,6 +10,9 @@ import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; +import java.math.BigDecimal; +import java.util.List; + /** * 产品装箱规格业务对象 biz_packing_specs * @@ -23,26 +27,26 @@ public class BizPackingSpecsBo extends BaseEntity { /** * 规格ID(主键) */ - @NotNull(message = "规格ID(主键)不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "规格ID(主键)不能为空", groups = { AddGroup.class, EditGroup.class }) private Long id; /** * 关联采购单明细项ID */ - @NotNull(message = "关联采购单明细项ID不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "关联采购单明细项ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long sendOrderId; /** * 规格名称(如规格A) */ - @NotBlank(message = "规格名称(如规格A)不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "规格名称(如规格A)不能为空", groups = { AddGroup.class, EditGroup.class }) private String specName; /** * 箱数(单位:箱) */ @NotNull(message = "箱数(单位:箱)不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long cartonCount; + private BigDecimal cartonCount; /** * 每箱件数(单位:件) @@ -54,25 +58,28 @@ public class BizPackingSpecsBo extends BaseEntity { * 箱子长度(单位:厘米) */ @NotNull(message = "箱子长度(单位:厘米)不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long length; + private BigDecimal length; /** * 箱子宽度(单位:厘米) */ @NotNull(message = "箱子宽度(单位:厘米)不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long width; + private BigDecimal width; /** * 箱子高度(单位:厘米) */ @NotNull(message = "箱子高度(单位:厘米)不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long height; + private BigDecimal height; /** * 单箱重量(单位:千克) */ @NotNull(message = "单箱重量(单位:千克)不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long weight; + private BigDecimal weight; + + + private List children; } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizPackingSpecsItemBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizPackingSpecsItemBo.java new file mode 100644 index 0000000..976c67d --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizPackingSpecsItemBo.java @@ -0,0 +1,56 @@ +package org.asinkj.amz.domain.bo; + +import org.asinkj.amz.domain.BizPackingSpecsItem; +import org.asinkj.common.mybatis.core.domain.BaseEntity; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +import java.math.BigDecimal; + +/** + * 产品装箱规格明细业务对象 biz_packing_specs_item + * + * @author shuo hu + * @date 2025-09-09 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BizPackingSpecsItem.class, reverseConvertGenerate = false) +public class BizPackingSpecsItemBo extends BaseEntity { + + /** + * 规格ID(主键) + */ +// @NotNull(message = "规格ID(主键)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long id; + + /** + * 关联箱规明细项ID + */ +// @NotNull(message = "关联箱规明细项ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long packingSpecsId; + + /** + * sku + */ + @NotBlank(message = "sku不能为空", groups = { AddGroup.class, EditGroup.class }) + private String sku; + + /** + * 产品名称 + */ + @NotBlank(message = "产品名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String productName; + + /** + * 每箱件数(单位:件) + */ + @NotNull(message = "每箱件数(单位:件)不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal piecesPerCarton; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizSendOrderBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizSendOrderBo.java index 007ee2d..4ec9322 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizSendOrderBo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizSendOrderBo.java @@ -56,7 +56,7 @@ public class BizSendOrderBo extends BaseEntity { /** * 产品名称 */ - @NotBlank(message = "产品名称不能为空", groups = {AddGroup.class, EditGroup.class}) +// @NotBlank(message = "产品名称不能为空", groups = {AddGroup.class, EditGroup.class}) private String productName; // @NotBlank(message = "sku不能为空", groups = {AddGroup.class, EditGroup.class}) @@ -108,6 +108,8 @@ public class BizSendOrderBo extends BaseEntity { private String sendDetail; + private String completeFlag; + private Long sendId; diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizSendOrderMixBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizSendOrderMixBo.java new file mode 100644 index 0000000..9e23ca6 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizSendOrderMixBo.java @@ -0,0 +1,32 @@ +package org.asinkj.amz.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.asinkj.amz.domain.BizSendOrder; +import org.asinkj.amz.domain.vo.BizPurchaseOutOrderVo; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import org.asinkj.common.mybatis.core.domain.BaseEntity; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 供应商创建的发货单业务对象 biz_send_order + * + * @author shuo hu + * @date 2025-05-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BizSendOrder.class, reverseConvertGenerate = false) +public class BizSendOrderMixBo extends BaseEntity { + + + private String storeName; + private List items; + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizSendOrderMixPackSpecsBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizSendOrderMixPackSpecsBo.java new file mode 100644 index 0000000..4033eb6 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizSendOrderMixPackSpecsBo.java @@ -0,0 +1,28 @@ +package org.asinkj.amz.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.asinkj.amz.domain.BizSendOrder; +import org.asinkj.amz.domain.vo.BizPurchaseOutOrderVo; +import org.asinkj.amz.domain.vo.BizSendOrderVo; +import org.asinkj.common.mybatis.core.domain.BaseEntity; + +import java.util.List; + +/** + * 供应商创建的发货单业务对象 biz_send_order + * + * @author shuo hu + * @date 2025-05-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BizSendOrder.class, reverseConvertGenerate = false) +public class BizSendOrderMixPackSpecsBo extends BaseEntity { + + BizSendOrderBo sendOrder; + + List items; + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizSendShipmentPlanRelBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizSendShipmentPlanRelBo.java new file mode 100644 index 0000000..b10fa6f --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizSendShipmentPlanRelBo.java @@ -0,0 +1,60 @@ +package org.asinkj.amz.domain.bo; + +import org.asinkj.amz.domain.BizSendShipmentPlanRel; +import org.asinkj.common.mybatis.core.domain.BaseEntity; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 发货单与货运计划多对多关联业务对象 biz_send_shipment_plan_rel + * + * @author shuo hu + * @date 2025-08-30 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BizSendShipmentPlanRel.class, reverseConvertGenerate = false) +public class BizSendShipmentPlanRelBo extends BaseEntity { + + /** + * $column.columnComment + */ + @NotNull(message = "$column.columnComment不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long id; + + /** + * 发货单ID + */ + @NotNull(message = "发货单ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long sendOrderId; + + /** + * 货运计划ID + */ + @NotNull(message = "货运计划ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long shipmentPlanId; + + /** + * sku + */ + @NotBlank(message = "sku不能为空", groups = { AddGroup.class, EditGroup.class }) + private String sku; + + /** + * 规格表id + */ + @NotNull(message = "规格表id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long packId; + + /** + * 箱数(单位:箱) + */ + @NotNull(message = "箱数(单位:箱)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long cartonCount; + + +} 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 098b066..4d1faa1 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 @@ -163,7 +163,7 @@ public class BizShipmentPlanBo extends BaseEntity { * 总箱子数量 */ // @NotNull(message = "总箱子数量不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long boxQuantity; + private BigDecimal boxQuantity; /** * 箱子尺寸 @@ -175,7 +175,7 @@ public class BizShipmentPlanBo extends BaseEntity { * 总的物流商计重(单位:KG,物流商实际测量值) */ // @NotNull(message = "总的物流商计重(单位:KG,物流商实际测量值)不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long vendorWeight; + private BigDecimal vendorWeight; /** * 套数(系统中的申报量) diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizStoreUserRelBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizStoreUserRelBo.java new file mode 100644 index 0000000..3aa4ecf --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizStoreUserRelBo.java @@ -0,0 +1,46 @@ +package org.asinkj.amz.domain.bo; + +import org.asinkj.amz.domain.BizStoreUserRel; +import org.asinkj.common.mybatis.core.domain.BaseEntity; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 用户店铺关联业务对象 biz_store_user_rel + * + * @author shuo hu + * @date 2025-09-26 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BizStoreUserRel.class, reverseConvertGenerate = false) +public class BizStoreUserRelBo extends BaseEntity { + + /** + * $column.columnComment + */ + @NotNull(message = "$column.columnComment不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long id; + + /** + * 店铺id + */ + @NotNull(message = "店铺id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long storeId; + + /** + * 用户id + */ + @NotNull(message = "用户id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long userId; + + + private String storeName; + + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizStoreUserRelListBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizStoreUserRelListBo.java new file mode 100644 index 0000000..6eab314 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizStoreUserRelListBo.java @@ -0,0 +1,40 @@ +package org.asinkj.amz.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.asinkj.amz.domain.BizStoreUserRel; +import org.asinkj.common.core.validate.AddGroup; +import org.asinkj.common.core.validate.EditGroup; +import org.asinkj.common.mybatis.core.domain.BaseEntity; + +import java.util.List; + +/** + * 用户店铺关联业务对象 biz_store_user_rel + * + * @author shuo hu + * @date 2025-09-26 + */ +@Data +public class BizStoreUserRelListBo { + + /** + * 店铺id + */ + @NotNull(message = "店铺id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long storeId; + + + private String storeName; + + + /** + * 用户id + */ + @NotNull(message = "用户id不能为空", groups = { AddGroup.class, EditGroup.class }) + private List userId; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizInquiryRequestVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizInquiryRequestVo.java index 579ca1d..de752ba 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizInquiryRequestVo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizInquiryRequestVo.java @@ -131,7 +131,7 @@ public class BizInquiryRequestVo implements Serializable { private String shipmentId; - private List sendOrders; + private List sendOrders; diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsOrderDetailVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsOrderDetailVo.java index a5c2464..51f47f4 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsOrderDetailVo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsOrderDetailVo.java @@ -105,7 +105,7 @@ public class BizLogisticsOrderDetailVo implements Serializable { /** * 实际货件数量(该箱子实际装载的商品数量) */ - @ExcelProperty(value = "数量") +// @ExcelProperty(value = "数量") // @ExcelDictFormat(readConverterExp = "该=箱子实际装载的商品数量") private Long shipmentQuantity; @@ -144,11 +144,11 @@ public class BizLogisticsOrderDetailVo implements Serializable { // @ExcelDictFormat(readConverterExp = "单=位:元/KG,由合同或报价确定") private Long pricePerKg; - + @ExcelProperty(value = "宽度") private BigDecimal length; - + @ExcelProperty(value = "长度") private BigDecimal width; - + @ExcelProperty(value = "高度") private BigDecimal height; private BigDecimal totalVolume; diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsOrderVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsOrderVo.java index d20c328..dad57c3 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsOrderVo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsOrderVo.java @@ -137,6 +137,9 @@ public class BizLogisticsOrderVo implements Serializable { private BigDecimal volumeWeight; + private BigDecimal logisticsPrice; + + diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizOrderOutItemVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizOrderOutItemVo.java index bc5ed13..7dca2b1 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizOrderOutItemVo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizOrderOutItemVo.java @@ -118,6 +118,10 @@ public class BizOrderOutItemVo implements Serializable { @ExcelProperty(value = "可转发数量") private BigDecimal quantityCanForward = BigDecimal.ZERO; + + private BigDecimal quantityForwardLeft = BigDecimal.ZERO; + + /** * 已入库数量 */ diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizPackingSpecsItemVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizPackingSpecsItemVo.java new file mode 100644 index 0000000..dce8356 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizPackingSpecsItemVo.java @@ -0,0 +1,65 @@ +package org.asinkj.amz.domain.vo; + +import org.asinkj.amz.domain.BizPackingSpecsItem; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.asinkj.common.excel.annotation.ExcelDictFormat; +import org.asinkj.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + + + +/** + * 产品装箱规格明细视图对象 biz_packing_specs_item + * + * @author shuo hu + * @date 2025-09-09 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BizPackingSpecsItem.class) +public class BizPackingSpecsItemVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 规格ID(主键) + */ + @ExcelProperty(value = "规格ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "主=键") + private Long id; + + /** + * 关联箱规明细项ID + */ + @ExcelProperty(value = "关联箱规明细项ID") + private Long packingSpecsId; + + /** + * sku + */ + @ExcelProperty(value = "sku") + private String sku; + + /** + * 产品名称 + */ + @ExcelProperty(value = "产品名称") + private String productName; + + /** + * 每箱件数(单位:件) + */ + @ExcelProperty(value = "每箱件数", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "单=位:件") + private BigDecimal piecesPerCarton; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizPackingSpecsVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizPackingSpecsVo.java index 33af8a9..83adc71 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizPackingSpecsVo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizPackingSpecsVo.java @@ -3,6 +3,7 @@ package org.asinkj.amz.domain.vo; import org.asinkj.amz.domain.BizPackingSpecs; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import org.asinkj.amz.domain.BizPackingSpecsItem; import org.asinkj.common.excel.annotation.ExcelDictFormat; import org.asinkj.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; @@ -10,8 +11,9 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; - +import java.util.List; /** @@ -53,7 +55,7 @@ public class BizPackingSpecsVo implements Serializable { */ @ExcelProperty(value = "箱数", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "单=位:箱") - private Long cartonCount; + private BigDecimal cartonCount; /** * 每箱件数(单位:件) @@ -67,28 +69,40 @@ public class BizPackingSpecsVo implements Serializable { */ @ExcelProperty(value = "箱子长度", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "单=位:厘米") - private Long length; + private BigDecimal length; /** * 箱子宽度(单位:厘米) */ @ExcelProperty(value = "箱子宽度", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "单=位:厘米") - private Long width; + private BigDecimal width; /** * 箱子高度(单位:厘米) */ @ExcelProperty(value = "箱子高度", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "单=位:厘米") - private Long height; + private BigDecimal height; /** * 单箱重量(单位:千克) */ @ExcelProperty(value = "单箱重量", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "单=位:千克") - private Long weight; + private BigDecimal weight; + + private BizSendOrderVo sendOrder; + + + private List items; + + + private BigDecimal linkCount = BigDecimal.ZERO; + + private BigDecimal linkCartonCount = BigDecimal.ZERO; + + private BigDecimal leftLinkCount = BigDecimal.ZERO; } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizPurchaseOutOrderVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizPurchaseOutOrderVo.java index 0e25eb6..928f7a4 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizPurchaseOutOrderVo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizPurchaseOutOrderVo.java @@ -112,6 +112,10 @@ public class BizPurchaseOutOrderVo implements Serializable { @ExcelProperty(value = "剩余数量") private BigDecimal quantityLeft; + private BigDecimal canSendLeft; + + + /** * 实收数量 */ diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendOrderItemVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendOrderItemVo.java index c33bb70..730fd16 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendOrderItemVo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendOrderItemVo.java @@ -1,5 +1,6 @@ package org.asinkj.amz.domain.vo; +import java.math.BigDecimal; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import org.asinkj.amz.domain.BizSendOrderItem; @@ -13,7 +14,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -64,10 +65,14 @@ public class BizSendOrderItemVo implements Serializable { * 发货日期 */ @ExcelProperty(value = "发货日期") - private Long quantitySend; + private BigDecimal quantitySend; private String sku; + private BigDecimal ratio; + + private List items; + } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendOrderPackVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendOrderPackVo.java new file mode 100644 index 0000000..7d9ec98 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendOrderPackVo.java @@ -0,0 +1,207 @@ +package org.asinkj.amz.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.asinkj.amz.domain.BizLogisticsOrder; +import org.asinkj.amz.domain.BizSendOrder; +import org.asinkj.amz.domain.BizSendOrderItem; +import org.asinkj.amz.domain.BizShipmentPlan; +import org.asinkj.common.excel.annotation.ExcelDictFormat; +import org.asinkj.common.excel.convert.ExcelDictConvert; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + + +/** + * 供应商创建的发货单视图对象 biz_send_order + * + * @author shuo hu + * @date 2025-05-14 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BizSendOrder.class) +public class BizSendOrderPackVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long pkid; + + private Long id; + + /** + * 采购单号 + */ + @ExcelProperty(value = "采购单号") + private String orderSn; + + private Long orderDetailId; + + + /** + * 发货日期 + */ + @ExcelProperty(value = "发货日期") + private Date sendDate; + + @ExcelProperty(value = "创建时间") + private Date createTime; + + /** + * 采购店铺 + */ + @ExcelProperty(value = "采购店铺") + private String storeName; + + /** + * 产品名称 + */ + @ExcelProperty(value = "产品名称") + private String productName; + + /** + * 发货数量 + */ + @ExcelProperty(value = "发货数量") + private BigDecimal quantitySend; + + /** + * 单箱产品数量 + */ + @ExcelProperty(value = "单箱产品数量") + private Long quantityPerBox; + + /** + * 箱数 + */ + @ExcelProperty(value = "箱数") + private Long boxCount; + + /** + * 箱子尺寸 + */ + @ExcelProperty(value = "箱子尺寸") + private String boxDimensions; + + /** + * 单箱重量 + */ + @ExcelProperty(value = "单箱重量") + private BigDecimal weightPerBox; + + /** + * 实际采购店铺 + */ + @ExcelProperty(value = "实际采购店铺") + private String realStoreName; + + private String sku; + + /** + * 发货状态(pending=未发货,confirm=确认发货, processing=发货中,completed=发货完成) + */ + @ExcelProperty(value = "发货状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "send_status") + private String sendStatus; + + + private String sendDetail; + + private Long sendId; + + private String sendName; + + + private String logisticsProviderName; + + private Long logisticsProviderId; + + private String address; + + private String shipmentId; + + private BizLogisticsOrder bizLogisticsOrder; + + private List bizShipmentPlans; + + private List items; + + private String type; + + private String createName; + + private Long transferFromId; + + + @ExcelProperty(value = "规格名称", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "如=规格A") + private String specName; + + /** + * 箱数(单位:箱) + */ + @ExcelProperty(value = "箱数", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "单=位:箱") + private BigDecimal cartonCount; + + /** + * 每箱件数(单位:件) + */ + @ExcelProperty(value = "每箱件数", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "单=位:件") + private BigDecimal piecesPerCarton; + + /** + * 箱子长度(单位:厘米) + */ + @ExcelProperty(value = "箱子长度", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "单=位:厘米") + private BigDecimal length; + + /** + * 箱子宽度(单位:厘米) + */ + @ExcelProperty(value = "箱子宽度", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "单=位:厘米") + private BigDecimal width; + + /** + * 箱子高度(单位:厘米) + */ + @ExcelProperty(value = "箱子高度", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "单=位:厘米") + private BigDecimal height; + + /** + * 单箱重量(单位:千克) + */ + @ExcelProperty(value = "单箱重量", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "单=位:千克") + private BigDecimal weight; + + // 关联的箱数 + private BigDecimal linkCartonCount = BigDecimal.ZERO; + + private BigDecimal leftLinkCount = BigDecimal.ZERO; + + private BigDecimal linkCount = BigDecimal.ZERO; + + + + + + + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendOrderPlanVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendOrderPlanVo.java new file mode 100644 index 0000000..9c544fa --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendOrderPlanVo.java @@ -0,0 +1,131 @@ +package org.asinkj.amz.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.asinkj.common.tenant.core.TenantEntity; + +import java.io.Serial; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 供应商创建的发货单对象 biz_send_order + * + * @author shuo hu + * @date 2025-05-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("biz_send_order") +public class BizSendOrderPlanVo extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + private Long id; + + /** + * 删除标志(0正常 2删除) + */ + @TableLogic + private String delFlag; + + + private String completeFlag; + + + /** + * 采购单号 + */ + private String orderSn; + + + private Long orderDetailId; + + + /** + * 发货日期 + */ + private Date sendDate; + + /** + * 采购店铺 + */ + private String storeName; + + /** + * 产品名称 + */ + private String productName; + + /** + * 发货数量 + */ + private BigDecimal quantitySend; + + /** + * 单箱产品数量 + */ + private Long quantityPerBox; + + /** + * 箱数 + */ + private Long boxCount; + + /** + * 箱子尺寸 + */ + private String boxDimensions; + + /** + * 单箱重量 + */ + private BigDecimal weightPerBox; + + + private String sku; + + /** + * 实际采购店铺 + */ + private String realStoreName; + + /** + * 发货状态(pending=未发货,confirm=确认发货, processing=发货中,completed=发货完成) + */ + private String sendStatus; + + private Long sendId; + + private String sendName; + + + private String sendDetail; + + private String logisticsProviderName; + + private Long logisticsProviderId; + + private String shipmentId; + + @TableField(exist = false) + private String shipmentIdKey; + + private String type; + + private String createName; + + private Long transferFromId; + + private BigDecimal piecesPerCarton; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendOrderVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendOrderVo.java index 4616610..29e9e3c 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendOrderVo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendOrderVo.java @@ -3,12 +3,9 @@ package org.asinkj.amz.domain.vo; import java.math.BigDecimal; import java.util.Date; -import org.asinkj.amz.domain.BizLogisticsOrder; -import org.asinkj.amz.domain.BizSendOrder; +import org.asinkj.amz.domain.*; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import org.asinkj.amz.domain.BizSendOrderItem; -import org.asinkj.amz.domain.BizShipmentPlan; import org.asinkj.common.excel.annotation.ExcelDictFormat; import org.asinkj.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; @@ -63,6 +60,9 @@ public class BizSendOrderVo implements Serializable { @ExcelProperty(value = "采购店铺") private String storeName; + private String completeFlag; + + /** * 产品名称 */ @@ -73,7 +73,13 @@ public class BizSendOrderVo implements Serializable { * 发货数量 */ @ExcelProperty(value = "发货数量") - private BigDecimal quantitySend; + private BigDecimal quantitySend = BigDecimal.ZERO; + + @ExcelProperty(value = "关联数量") + private BigDecimal quantityLink = BigDecimal.ZERO; + + @ExcelProperty(value = "剩余数量") + private BigDecimal quantityLeft = BigDecimal.ZERO; /** * 单箱产品数量 @@ -134,7 +140,10 @@ public class BizSendOrderVo implements Serializable { private List bizShipmentPlans; - private List items; + private List items; + + + private List sendPlansRelVos; private String type; @@ -143,5 +152,7 @@ public class BizSendOrderVo implements Serializable { private Long transferFromId; + private List packingSpecs; + } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendPlanRelVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendPlanRelVo.java new file mode 100644 index 0000000..3e2dba9 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendPlanRelVo.java @@ -0,0 +1,110 @@ +package org.asinkj.amz.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.asinkj.amz.domain.BizPackingSpecsItem; +import org.asinkj.amz.domain.BizSendShipmentPlanRel; +import org.asinkj.common.excel.annotation.ExcelDictFormat; +import org.asinkj.common.excel.convert.ExcelDictConvert; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + + +/** + * 发货单与货运计划多对多关联视图对象 biz_send_shipment_plan_rel + * + * @author shuo hu + * @date 2025-08-30 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BizSendShipmentPlanRel.class) +public class BizSendPlanRelVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * bso.order_sn, + * bso.product_name, + * bsspr.sku, + * bps.length, + * bps.width, + * bps.height, + * bps.weight, + * bsspr.carton_count + */ +// @ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class) +// @ExcelDictFormat(readConverterExp = "$column.readConverterExp()") +// private Long id; + /** + * 发货单ID + */ + private Long sendOrderId; + private Long shipmentPlanId; + + private Long packId; + + + private String logisticsProviderName; + + private String address; + + + @ExcelProperty(value = "订单号") + private String orderSn; + + @ExcelProperty(value = "FBA货件号") + private String shipmentId; + + /** + * 货运计划ID + */ + @ExcelProperty(value = "产品名称") + private String productName; + + /** + * sku + */ + @ExcelProperty(value = "sku") + private String sku; + + /** + * 规格表id + */ + @ExcelProperty(value = "长") + private BigDecimal length; + + /** + * 箱数(单位:箱) + */ + @ExcelProperty(value = "宽") + private BigDecimal width; + + @ExcelProperty(value = "高") + private BigDecimal height; + + @ExcelProperty(value = "单箱重量") + private BigDecimal weight; + + + @ExcelProperty(value = "箱数") + private BigDecimal cartonCount = BigDecimal.ZERO; + + @ExcelProperty(value = "单箱数量") + private BigDecimal piecesPerCarton = BigDecimal.ZERO; + + + @ExcelProperty(value = "时间") + private Date createTime; + + private List items; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendShipmentPlanRelVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendShipmentPlanRelVo.java new file mode 100644 index 0000000..ba622e6 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendShipmentPlanRelVo.java @@ -0,0 +1,70 @@ +package org.asinkj.amz.domain.vo; + +import org.asinkj.amz.domain.BizSendShipmentPlanRel; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.asinkj.common.excel.annotation.ExcelDictFormat; +import org.asinkj.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 发货单与货运计划多对多关联视图对象 biz_send_shipment_plan_rel + * + * @author shuo hu + * @date 2025-08-30 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BizSendShipmentPlanRel.class) +public class BizSendShipmentPlanRelVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * $column.columnComment + */ + @ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "$column.readConverterExp()") + private Long id; + + /** + * 发货单ID + */ + @ExcelProperty(value = "发货单ID") + private Long sendOrderId; + + /** + * 货运计划ID + */ + @ExcelProperty(value = "货运计划ID") + private Long shipmentPlanId; + + /** + * sku + */ + @ExcelProperty(value = "sku") + private String sku; + + /** + * 规格表id + */ + @ExcelProperty(value = "规格表id") + private Long packId; + + /** + * 箱数(单位:箱) + */ + @ExcelProperty(value = "箱数", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "单=位:箱") + private Long cartonCount; + + +} 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 6a576da..ca7222e 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 @@ -176,13 +176,28 @@ public class BizShipmentPlanVo implements Serializable { * 总箱子数量 */ @ExcelProperty(value = "总箱子数量") - private Long boxQuantity; + private BigDecimal boxQuantity = BigDecimal.ZERO; + + + @ExcelProperty(value = "关联箱子数量") + private BigDecimal boxQuantityLink = BigDecimal.ZERO; + + + @ExcelProperty(value = "剩余箱子数量") + private BigDecimal boxQuantityLeft = BigDecimal.ZERO; + /** * 发货数量 */ @ExcelProperty(value = "发货数量") - private BigDecimal quantityShipped; + private BigDecimal quantityShipped = BigDecimal.ZERO; + + @ExcelProperty(value = "关联数量") + private BigDecimal quantityLink = BigDecimal.ZERO; + + @ExcelProperty(value = "剩余数量") + private BigDecimal quantityLeft = BigDecimal.ZERO; /** * 箱子尺寸 @@ -226,13 +241,15 @@ public class BizShipmentPlanVo implements Serializable { private Long sendOrderId; private BizSendOrder sendOrder; - private List sendOrders; + private List sendOrders; private BizLogisticsQuote quote; private List itemVoList; + private List sendPlansRelVos; + // 显式添加 Setter(即使使用 @Data) public void setShipFromAddress(FbaShipmentApiResponse.Address shipFromAddress) { diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizStoreUserRelVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizStoreUserRelVo.java new file mode 100644 index 0000000..9322ef1 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizStoreUserRelVo.java @@ -0,0 +1,59 @@ +package org.asinkj.amz.domain.vo; + +import org.asinkj.amz.domain.BizStoreUserRel; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.asinkj.amz.domain.SysUser; +import org.asinkj.common.excel.annotation.ExcelDictFormat; +import org.asinkj.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 用户店铺关联视图对象 biz_store_user_rel + * + * @author shuo hu + * @date 2025-09-26 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BizStoreUserRel.class) +public class BizStoreUserRelVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * $column.columnComment + */ + @ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "$column.readConverterExp()") + private Long id; + + /** + * 店铺id + */ + @ExcelProperty(value = "店铺id") + private Long storeId; + + /** + * 用户id + */ + @ExcelProperty(value = "用户id") + private Long userId; + + + private String storeName; + + + private SysUser user; + + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/SysAmazonStoreVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/SysAmazonStoreVo.java index d197f31..398b45c 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/SysAmazonStoreVo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/SysAmazonStoreVo.java @@ -3,6 +3,7 @@ package org.asinkj.amz.domain.vo; import org.asinkj.amz.domain.SysAmazonStore; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import org.asinkj.amz.domain.SysUser; import org.asinkj.common.excel.annotation.ExcelDictFormat; import org.asinkj.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; @@ -11,7 +12,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -113,5 +114,9 @@ public class SysAmazonStoreVo implements Serializable { private String nickName; + private List users; + + + } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizPackingSpecsItemMapper.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizPackingSpecsItemMapper.java new file mode 100644 index 0000000..d33bcb0 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizPackingSpecsItemMapper.java @@ -0,0 +1,16 @@ +package org.asinkj.amz.mapper; + +import org.asinkj.amz.domain.BizPackingSpecsItem; +import org.asinkj.amz.domain.vo.BizPackingSpecsItemVo; +import org.asinkj.common.mybatis.core.mapper.BaseMapperPlus; +import org.apache.ibatis.annotations.Mapper; +/** + * 产品装箱规格明细Mapper接口 + * + * @author shuo hu + * @date 2025-09-09 + */ +@Mapper +public interface BizPackingSpecsItemMapper extends BaseMapperPlus { + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizPurchaseOrderMapper.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizPurchaseOrderMapper.java index 93ea8b3..b2c71de 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizPurchaseOrderMapper.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizPurchaseOrderMapper.java @@ -1,7 +1,13 @@ package org.asinkj.amz.mapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; import org.asinkj.amz.domain.BizPurchaseOrder; +import org.asinkj.amz.domain.BizPurchaseOutOrder; import org.asinkj.amz.domain.vo.BizPurchaseOrderVo; +import org.asinkj.amz.domain.vo.BizPurchaseOutOrderVo; import org.asinkj.common.mybatis.core.mapper.BaseMapperPlus; import org.springframework.stereotype.Component; @@ -14,4 +20,8 @@ import org.springframework.stereotype.Component; @Component public interface BizPurchaseOrderMapper extends BaseMapperPlus { + Page selectCustomPage( + @Param("page") Page page, + @Param(Constants.WRAPPER) Wrapper wrapper + ); } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizSendOrderMapper.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizSendOrderMapper.java index 024c7fb..d2c3b5e 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizSendOrderMapper.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizSendOrderMapper.java @@ -9,6 +9,7 @@ import org.asinkj.amz.domain.BizInquiryRequest; import org.asinkj.amz.domain.BizSendOrder; import org.asinkj.amz.domain.OrderWithShipment; import org.asinkj.amz.domain.vo.BizInquiryRequestVo; +import org.asinkj.amz.domain.vo.BizSendOrderPackVo; import org.asinkj.amz.domain.vo.BizSendOrderVo; import org.asinkj.common.mybatis.core.mapper.BaseMapperPlus; @@ -29,7 +30,15 @@ public interface BizSendOrderMapper extends BaseMapperPlus selectCustomPage( + @Param("page") Page page, + @Param(Constants.WRAPPER) Wrapper wrapper, + @Param("finish") Boolean finish + ); + + Page selectCustomPackPage( @Param("page") Page page, @Param(Constants.WRAPPER) Wrapper wrapper ); + + List selectLinkMixSendOrderList(List skus, List storeNames); } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizSendShipmentPlanRelMapper.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizSendShipmentPlanRelMapper.java new file mode 100644 index 0000000..39c577b --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizSendShipmentPlanRelMapper.java @@ -0,0 +1,39 @@ +package org.asinkj.amz.mapper; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.asinkj.amz.domain.BizSendOrder; +import org.asinkj.amz.domain.BizSendShipmentPlanRel; +import org.asinkj.amz.domain.vo.BizInquiryRequestVo; +import org.asinkj.amz.domain.vo.BizSendOrderVo; +import org.asinkj.amz.domain.vo.BizSendPlanRelVo; +import org.asinkj.amz.domain.vo.BizSendShipmentPlanRelVo; +import org.asinkj.common.mybatis.core.mapper.BaseMapperPlus; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; +import java.util.Set; + +/** + * 发货单与货运计划多对多关联Mapper接口 + * + * @author shuo hu + * @date 2025-08-30 + */ +@Mapper +public interface BizSendShipmentPlanRelMapper extends BaseMapperPlus { + + + + Page selectCustomPage( + @Param("page") Page page, + @Param(Constants.WRAPPER) Wrapper wrapper + ); + + List querySendPlanRelVo(@Param("sendIds")Set sendIds); + + List querySendOrderPlanRelVo(@Param("planIds")Set planIds); +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizStoreUserRelMapper.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizStoreUserRelMapper.java new file mode 100644 index 0000000..a0a8d3b --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizStoreUserRelMapper.java @@ -0,0 +1,21 @@ +package org.asinkj.amz.mapper; + +import org.apache.ibatis.annotations.Param; +import org.asinkj.amz.domain.BizStoreUserRel; +import org.asinkj.amz.domain.vo.BizStoreUserRelVo; +import org.asinkj.common.mybatis.core.mapper.BaseMapperPlus; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 用户店铺关联Mapper接口 + * + * @author shuo hu + * @date 2025-09-26 + */ +@Mapper +public interface BizStoreUserRelMapper extends BaseMapperPlus { + + List selectCustom(@Param("storeIds") List storeIds); +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizPackingSpecsItemService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizPackingSpecsItemService.java new file mode 100644 index 0000000..d460614 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizPackingSpecsItemService.java @@ -0,0 +1,69 @@ +package org.asinkj.amz.service; + +import org.asinkj.amz.domain.BizPackingSpecsItem; +import org.asinkj.amz.domain.vo.BizPackingSpecsItemVo; +import org.asinkj.amz.domain.bo.BizPackingSpecsItemBo; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 产品装箱规格明细Service接口 + * + * @author shuo hu + * @date 2025-09-09 + */ +public interface IBizPackingSpecsItemService { + + /** + * 查询产品装箱规格明细 + * + * @param id 主键 + * @return 产品装箱规格明细 + */ + BizPackingSpecsItemVo queryById(Long id); + + /** + * 分页查询产品装箱规格明细列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 产品装箱规格明细分页列表 + */ + TableDataInfo queryPageList(BizPackingSpecsItemBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的产品装箱规格明细列表 + * + * @param bo 查询条件 + * @return 产品装箱规格明细列表 + */ + List queryList(BizPackingSpecsItemBo bo); + + /** + * 新增产品装箱规格明细 + * + * @param bo 产品装箱规格明细 + * @return 是否新增成功 + */ + Boolean insertByBo(BizPackingSpecsItemBo bo); + + /** + * 修改产品装箱规格明细 + * + * @param bo 产品装箱规格明细 + * @return 是否修改成功 + */ + Boolean updateByBo(BizPackingSpecsItemBo bo); + + /** + * 校验并批量删除产品装箱规格明细信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizSendOrderService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizSendOrderService.java index dfd94a0..dfe4e95 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizSendOrderService.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizSendOrderService.java @@ -1,6 +1,10 @@ package org.asinkj.amz.service; import org.asinkj.amz.domain.BizSendOrder; +import org.asinkj.amz.domain.bo.BizSendOrderMixBo; +import org.asinkj.amz.domain.bo.BizSendOrderMixPackSpecsBo; +import org.asinkj.amz.domain.vo.BizPackingSpecsVo; +import org.asinkj.amz.domain.vo.BizSendOrderPackVo; import org.asinkj.amz.domain.vo.BizSendOrderVo; import org.asinkj.amz.domain.bo.BizSendOrderBo; import org.asinkj.common.mybatis.core.page.TableDataInfo; @@ -79,4 +83,12 @@ public interface IBizSendOrderService { TableDataInfo coverSendOrder(BizSendOrderBo bo, PageQuery pageQuery); void transfer(BizSendOrderVo bo); + + TableDataInfo linkSendOrderList(BizSendOrderBo bo, PageQuery pageQuery); + + void createMixedOrder(BizSendOrderMixBo bo); + + void createMixedOrderPackSpecs(BizSendOrderMixPackSpecsBo bo); + + List linkMixSendOrderList(BizSendOrderBo bo, PageQuery pageQuery); } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizSendShipmentPlanRelService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizSendShipmentPlanRelService.java new file mode 100644 index 0000000..753011e --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizSendShipmentPlanRelService.java @@ -0,0 +1,75 @@ +package org.asinkj.amz.service; + +import org.asinkj.amz.domain.BizSendShipmentPlanRel; +import org.asinkj.amz.domain.bo.BatchSendOrderPlanRelDTO; +import org.asinkj.amz.domain.vo.BizSendPlanRelVo; +import org.asinkj.amz.domain.vo.BizSendShipmentPlanRelVo; +import org.asinkj.amz.domain.bo.BizSendShipmentPlanRelBo; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 发货单与货运计划多对多关联Service接口 + * + * @author shuo hu + * @date 2025-08-30 + */ +public interface IBizSendShipmentPlanRelService { + + /** + * 查询发货单与货运计划多对多关联 + * + * @param id 主键 + * @return 发货单与货运计划多对多关联 + */ + BizSendShipmentPlanRelVo queryById(Long id); + + /** + * 分页查询发货单与货运计划多对多关联列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 发货单与货运计划多对多关联分页列表 + */ + TableDataInfo queryPageList(BizSendShipmentPlanRelBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的发货单与货运计划多对多关联列表 + * + * @param bo 查询条件 + * @return 发货单与货运计划多对多关联列表 + */ + List queryList(BizSendShipmentPlanRelBo bo); + + /** + * 新增发货单与货运计划多对多关联 + * + * @param bo 发货单与货运计划多对多关联 + * @return 是否新增成功 + */ + Boolean insertByBo(BizSendShipmentPlanRelBo bo); + + /** + * 修改发货单与货运计划多对多关联 + * + * @param bo 发货单与货运计划多对多关联 + * @return 是否修改成功 + */ + Boolean updateByBo(BizSendShipmentPlanRelBo bo); + + /** + * 校验并批量删除发货单与货运计划多对多关联信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + void batchCreateRelations(BatchSendOrderPlanRelDTO dto); + + void createMixBatchRelations(BatchSendOrderPlanRelDTO dto); +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizStoreUserRelService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizStoreUserRelService.java new file mode 100644 index 0000000..3eac564 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizStoreUserRelService.java @@ -0,0 +1,75 @@ +package org.asinkj.amz.service; + +import org.asinkj.amz.domain.BizStoreUserRel; +import org.asinkj.amz.domain.bo.BizStoreUserRelListBo; +import org.asinkj.amz.domain.vo.BizStoreUserRelVo; +import org.asinkj.amz.domain.bo.BizStoreUserRelBo; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; +import java.util.Set; + +/** + * 用户店铺关联Service接口 + * + * @author shuo hu + * @date 2025-09-26 + */ +public interface IBizStoreUserRelService { + + /** + * 查询用户店铺关联 + * + * @param id 主键 + * @return 用户店铺关联 + */ + BizStoreUserRelVo queryById(Long id); + + /** + * 分页查询用户店铺关联列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 用户店铺关联分页列表 + */ + TableDataInfo queryPageList(BizStoreUserRelBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的用户店铺关联列表 + * + * @param bo 查询条件 + * @return 用户店铺关联列表 + */ + List queryList(BizStoreUserRelBo bo); + + /** + * 新增用户店铺关联 + * + * @param bo 用户店铺关联 + * @return 是否新增成功 + */ + Boolean insertByBo(BizStoreUserRelBo bo); + + /** + * 修改用户店铺关联 + * + * @param bo 用户店铺关联 + * @return 是否修改成功 + */ + Boolean updateByBo(BizStoreUserRelBo bo); + + /** + * 校验并批量删除用户店铺关联信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + void updateUsers(BizStoreUserRelListBo bo); + + Set queryStoreName(Long userId); +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizInquiryRequestServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizInquiryRequestServiceImpl.java index fb2be23..b455605 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizInquiryRequestServiceImpl.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizInquiryRequestServiceImpl.java @@ -8,11 +8,11 @@ import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; -import org.asinkj.amz.domain.BizLogisticsQuote; -import org.asinkj.amz.domain.BizSendOrder; -import org.asinkj.amz.domain.vo.BizLogisticsChannelVo; -import org.asinkj.amz.domain.vo.InquiryRequestItemVo; +import org.asinkj.amz.domain.*; +import org.asinkj.amz.domain.vo.*; import org.asinkj.amz.mapper.BizLogisticsQuoteMapper; +import org.asinkj.amz.mapper.BizPackingSpecsItemMapper; +import org.asinkj.amz.mapper.BizPackingSpecsMapper; import org.asinkj.amz.service.IBizInquiryBlacklistService; import org.asinkj.amz.service.IBizLogisticsChannelService; import org.asinkj.amz.service.IBizShipmentPlanService; @@ -34,8 +34,6 @@ import org.asinkj.utils.SerialNoGenerator; import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.asinkj.amz.domain.bo.BizInquiryRequestBo; -import org.asinkj.amz.domain.vo.BizInquiryRequestVo; -import org.asinkj.amz.domain.BizInquiryRequest; import org.asinkj.amz.mapper.BizInquiryRequestMapper; import org.asinkj.amz.service.IBizInquiryRequestService; @@ -92,6 +90,12 @@ public class BizInquiryRequestServiceImpl implements IBizInquiryRequestService { @Resource private IBizShipmentPlanService shipmentPlanService; + @Resource + private BizPackingSpecsMapper bizPackingSpecsMapper; + + @Resource + private BizPackingSpecsItemMapper bizPackingSpecsItemMapper; + /** * 查询物流询价 @@ -120,7 +124,9 @@ public class BizInquiryRequestServiceImpl implements IBizInquiryRequestService { String sqlSegment = lqw.getSqlSegment(); log.info("sqlSegment: {}", sqlSegment); Page result = baseMapper.selectCustomPage(pageQuery.build(), lqw); - + if (CollectionUtil.isEmpty(result.getRecords())) { + return TableDataInfo.build(); + } List shipmentIds = result.getRecords().stream() .map(BizInquiryRequestVo::getShipmentId) .filter(Objects::nonNull) @@ -129,13 +135,48 @@ public class BizInquiryRequestServiceImpl implements IBizInquiryRequestService { // 3. 单个查询获取所有发货单数据(按 shipmentId 分组) List bizSendOrders = shipmentPlanService.batchGetSendOrdersByShipmentIds(shipmentIds); + Set mixIds = bizSendOrders.stream().filter(c -> "mix".equals(c.getType())).map(BizSendOrder::getId).collect(Collectors.toSet()); + + Map> bizPackingSpecsMap = new HashMap<>(); + Map> bizPackingSpecsItemMap = new HashMap<>(); + if (CollectionUtil.isNotEmpty(mixIds)) { + List bizPackingSpecs = bizPackingSpecsMapper.selectList(new LambdaQueryWrapper().in(BizPackingSpecs::getSendOrderId, mixIds)); + bizPackingSpecsMap = bizPackingSpecs.stream().collect(Collectors.groupingBy(BizPackingSpecs::getSendOrderId)); + Set packSpecsIds = bizPackingSpecs.stream().map(BizPackingSpecs::getId).collect(Collectors.toSet()); + if (CollectionUtil.isNotEmpty(packSpecsIds)) { + List bizPackingSpecsItems = bizPackingSpecsItemMapper.selectList(new LambdaQueryWrapper().in(BizPackingSpecsItem::getPackingSpecsId, packSpecsIds)); + + bizPackingSpecsItemMap = bizPackingSpecsItems.stream().collect(Collectors.groupingBy(BizPackingSpecsItem::getPackingSpecsId)); + } + } if (CollectionUtil.isNotEmpty(bizSendOrders)) { Map> ordersMap = bizSendOrders.stream().collect(Collectors.groupingBy(BizSendOrder::getShipmentIdKey)); // 4. 组装发货单数据到结果对象 for (BizInquiryRequestVo record : result.getRecords()) { // if ("weight".equals(record.getType())) { - record.setSendOrders(ordersMap.getOrDefault(record.getShipmentId(), Collections.emptyList())); + List orDefault = ordersMap.getOrDefault(record.getShipmentId(), Collections.emptyList()); + if (CollectionUtil.isNotEmpty(orDefault)) { + List convert = MapstructUtils.convert(orDefault, BizSendOrderVo.class); + for (BizSendOrderVo bizSendOrderVo : convert) { + + if ("mix".equals(bizSendOrderVo.getType())) { + List bizPackingSpecs1 = bizPackingSpecsMap.get(bizSendOrderVo.getId()); + if (CollectionUtil.isNotEmpty(bizPackingSpecs1)) { + List convertPackList = MapstructUtils.convert(bizPackingSpecs1, BizPackingSpecsVo.class); + bizSendOrderVo.setPackingSpecs(convertPackList); + assert convertPackList != null; + for (BizPackingSpecsVo bizPackingSpecsVo : convertPackList) { + List bizPackingSpecsItems1 = bizPackingSpecsItemMap.get(bizPackingSpecsVo.getId()); + if (CollectionUtil.isNotEmpty(bizPackingSpecsItems1)) { + bizPackingSpecsVo.setItems(MapstructUtils.convert(bizPackingSpecsItems1, BizPackingSpecsItemVo.class)); + } + } + } + } + } + record.setSendOrders(convert); + } // } } } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsOrderDetailServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsOrderDetailServiceImpl.java index f2db14d..7a9b16a 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsOrderDetailServiceImpl.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsOrderDetailServiceImpl.java @@ -214,6 +214,28 @@ public class BizLogisticsOrderDetailServiceImpl implements IBizLogisticsOrderDet checkData(bizLogisticsOrderDetailVos); log.info("导入数据条数:{}", JSONObject.toJSONString(bizLogisticsOrderDetailVos)); + for (BizLogisticsOrderDetailVo item : bizLogisticsOrderDetailVos) { + item.setTotalVolume(item.getLength().multiply(item.getWidth()).multiply(item.getHeight())); + if ("BOOKED".equals(item.getLogisticsStatus())){ +// item.setCarrierConfirmTime(DateUtil.date()); + }else if ("PICKED_UP".equals(item.getLogisticsStatus())){ + item.setGoodsReceiptTime(DateUtil.date()); + }else if ("IN_TRANSIT".equals(item.getLogisticsStatus())){ + item.setTransferStartTime(DateUtil.date()); + }else if ("DELIVERED".equals(item.getLogisticsStatus())){ + item.setSignedTime(DateUtil.date()); + }else if ("SCHEDULING".equals(item.getLogisticsStatus())){ + item.setScheduleTime(DateUtil.date()); + }else if ("VESSEL_DEPARTED".equals(item.getLogisticsStatus())){ + item.setVesselDepartTime(DateUtil.date()); + }else if ("PORT_ARRIVED".equals(item.getLogisticsStatus())){ + item.setPortArrivalTime(DateUtil.date()); + }else if ("CUSTOMS_CLEARANCE".equals(item.getLogisticsStatus())){ + item.setInspectionTime(DateUtil.date()); + }else if ("CARGO_RELEASED".equals(item.getLogisticsStatus())){ + item.setDeliveryPickupTime(DateUtil.date()); + } + } baseMapper.updateByBoxId(bizLogisticsOrderDetailVos); } 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 9a48741..4e7544c 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 @@ -1,5 +1,6 @@ package org.asinkj.amz.service.impl; +import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; @@ -146,7 +147,7 @@ public class BizLogisticsOrderServiceImpl implements IBizLogisticsOrderService { BigDecimal totalVolume = bizLogisticsOrderDetails1.stream().filter(item -> item.getTotalVolume() != null).map(BizLogisticsOrderDetail::getTotalVolume).reduce(BigDecimal.ZERO, BigDecimal::add); record.setTotalVolume(totalVolume); - BigDecimal divide = record.getTotalVolume().divide(record.getQuote().getVolumeRatio(),3, RoundingMode.HALF_UP); + BigDecimal divide = record.getTotalVolume().divide(record.getQuote().getVolumeRatio(), 3, RoundingMode.HALF_UP); record.setVolumeWeight(divide); if ("weight".equals(record.getQuote().getType())) { record.setSettlementPrice(record.getQuote().getPrice().multiply(divide.max(record.getLogisticsWeight())).add(record.getQuote().getSurcharge()).add(record.getQuote().getCustomsDeclarationFee())); @@ -185,7 +186,7 @@ public class BizLogisticsOrderServiceImpl implements IBizLogisticsOrderService { lqw.eq(bo.getShipmentQuantity() != null, BizLogisticsOrder::getShipmentQuantity, bo.getShipmentQuantity()); lqw.eq(bo.getAmazonShelfDate() != null, BizLogisticsOrder::getAmazonShelfDate, bo.getAmazonShelfDate()); lqw.eq(bo.getShelfTimeliness() != null, BizLogisticsOrder::getShelfTimeliness, bo.getShelfTimeliness()); - if (!LoginHelper.isSuperAdmin() && !LoginHelper.isManagerAdmin()) { + if (!LoginHelper.isSuperAdmin() && !LoginHelper.isManagerAdmin() && !StpUtil.hasRole("gengdan")) { lqw.and(wrapper -> wrapper.eq(BizLogisticsOrder::getCreateBy, LoginHelper.getUserId()).or().eq(BizLogisticsOrder::getLogisticsProviderId, LoginHelper.getUserId())); } // Set roleIdSet = LoginHelper.getLoginUser().getRoles().stream().map(RoleDTO::getRoleId).collect(Collectors.toSet()); diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizPackingSpecsItemServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizPackingSpecsItemServiceImpl.java new file mode 100644 index 0000000..ced8e07 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizPackingSpecsItemServiceImpl.java @@ -0,0 +1,132 @@ +package org.asinkj.amz.service.impl; + +import org.asinkj.common.core.utils.MapstructUtils; +import org.asinkj.common.core.utils.StringUtils; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.asinkj.amz.domain.bo.BizPackingSpecsItemBo; +import org.asinkj.amz.domain.vo.BizPackingSpecsItemVo; +import org.asinkj.amz.domain.BizPackingSpecsItem; +import org.asinkj.amz.mapper.BizPackingSpecsItemMapper; +import org.asinkj.amz.service.IBizPackingSpecsItemService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 产品装箱规格明细Service业务层处理 + * + * @author shuo hu + * @date 2025-09-09 + */ +@RequiredArgsConstructor +@Service +public class BizPackingSpecsItemServiceImpl implements IBizPackingSpecsItemService { + + private final BizPackingSpecsItemMapper baseMapper; + + /** + * 查询产品装箱规格明细 + * + * @param id 主键 + * @return 产品装箱规格明细 + */ + @Override + public BizPackingSpecsItemVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询产品装箱规格明细列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 产品装箱规格明细分页列表 + */ + @Override + public TableDataInfo queryPageList(BizPackingSpecsItemBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的产品装箱规格明细列表 + * + * @param bo 查询条件 + * @return 产品装箱规格明细列表 + */ + @Override + public List queryList(BizPackingSpecsItemBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(BizPackingSpecsItemBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getPackingSpecsId() != null, BizPackingSpecsItem::getPackingSpecsId, bo.getPackingSpecsId()); + lqw.eq(StringUtils.isNotBlank(bo.getSku()), BizPackingSpecsItem::getSku, bo.getSku()); + lqw.like(StringUtils.isNotBlank(bo.getProductName()), BizPackingSpecsItem::getProductName, bo.getProductName()); + lqw.eq(bo.getPiecesPerCarton() != null, BizPackingSpecsItem::getPiecesPerCarton, bo.getPiecesPerCarton()); + return lqw; + } + + /** + * 新增产品装箱规格明细 + * + * @param bo 产品装箱规格明细 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(BizPackingSpecsItemBo bo) { + BizPackingSpecsItem add = MapstructUtils.convert(bo, BizPackingSpecsItem.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改产品装箱规格明细 + * + * @param bo 产品装箱规格明细 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BizPackingSpecsItemBo bo) { + BizPackingSpecsItem update = MapstructUtils.convert(bo, BizPackingSpecsItem.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BizPackingSpecsItem entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除产品装箱规格明细信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizPurchaseOrderServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizPurchaseOrderServiceImpl.java index 822544d..8fc8323 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizPurchaseOrderServiceImpl.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizPurchaseOrderServiceImpl.java @@ -15,6 +15,7 @@ import org.asinkj.amz.domain.vo.BizPurchaseOrderItemVo; import org.asinkj.amz.domain.vo.SysAmazonStoreVo; import org.asinkj.amz.mapper.*; import org.asinkj.amz.service.IBizPurchaseOrderItemService; +import org.asinkj.amz.service.IBizStoreUserRelService; import org.asinkj.amz.service.ISysAmazonStoreService; import org.asinkj.common.core.utils.MapstructUtils; import org.asinkj.common.core.utils.StringUtils; @@ -77,6 +78,9 @@ public class BizPurchaseOrderServiceImpl implements IBizPurchaseOrderService { @Resource private ISysAmazonStoreService iSysAmazonStoreService; + @Resource + private IBizStoreUserRelService iBizStoreUserRelService; + /** * 查询采购单主 @@ -99,7 +103,7 @@ public class BizPurchaseOrderServiceImpl implements IBizPurchaseOrderService { @Override public TableDataInfo queryPageList(BizPurchaseOrderBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + Page result = baseMapper.selectCustomPage(pageQuery.build(), lqw); List records = result.getRecords(); if (result.getTotal() == 0) { @@ -290,13 +294,17 @@ public class BizPurchaseOrderServiceImpl implements IBizPurchaseOrderService { } if (StpUtil.hasRole("yunying")) { - SysAmazonStoreBo sysAmazonStoreBo = new SysAmazonStoreBo(); - sysAmazonStoreBo.setUserId(LoginHelper.getUserId()); - List sysAmazonStoreVos = iSysAmazonStoreService.queryList(sysAmazonStoreBo); - Set storeNameCollect = sysAmazonStoreVos.stream().map(SysAmazonStoreVo::getStoreName).collect(Collectors.toSet()); + Set storeNameCollect = iBizStoreUserRelService.queryStoreName(LoginHelper.getUserId()); + +// SysAmazonStoreBo sysAmazonStoreBo = new SysAmazonStoreBo(); +// sysAmazonStoreBo.setUserId(LoginHelper.getUserId()); +// List sysAmazonStoreVos = iSysAmazonStoreService.queryList(sysAmazonStoreBo); +// Set storeNameCollect = sysAmazonStoreVos.stream().map(SysAmazonStoreVo::getStoreName).collect(Collectors.toSet()); if (CollectionUtil.isNotEmpty(storeNameCollect)) { lqw.in(BizPurchaseOrder::getStoreName, storeNameCollect); // lqw.and(queryWrapper -> queryWrapper.in(BizPurchaseOrder::getStoreName, storeNameCollect).or().in(BizPurchaseOrder::getRealStoreName, storeNameCollect)); + } else { + lqw.apply("1 = 0"); } } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizPurchaseOutOrderServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizPurchaseOutOrderServiceImpl.java index a30a27c..3ad764f 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizPurchaseOutOrderServiceImpl.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizPurchaseOutOrderServiceImpl.java @@ -1,10 +1,12 @@ package org.asinkj.amz.service.impl; +import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.asinkj.amz.domain.*; import org.asinkj.amz.domain.vo.BizOrderOutItemVo; import org.asinkj.amz.mapper.*; +import org.asinkj.amz.service.IBizStoreUserRelService; import org.asinkj.common.core.utils.MapstructUtils; import org.asinkj.common.core.utils.StringUtils; import org.asinkj.common.mybatis.core.page.TableDataInfo; @@ -64,6 +66,9 @@ public class BizPurchaseOutOrderServiceImpl implements IBizPurchaseOutOrderServi @Resource private SysUserMapper sysUserMapper; + @Resource + private IBizStoreUserRelService iBizStoreUserRelService; + /** * 查询组合订单 @@ -119,6 +124,11 @@ public class BizPurchaseOutOrderServiceImpl implements IBizPurchaseOutOrderServi List bizSendOrderItems = bizSendOrderItemMapper.selectList(sendOrderItemWrapper); + LambdaQueryWrapper sendOrderItemQueryWrapper = new LambdaQueryWrapper<>(); + sendOrderItemQueryWrapper.in(BizSendOrderItem::getOrderSn, collect); + List bizSendOrderItemOrderItems = bizSendOrderItemMapper.selectList(sendOrderItemQueryWrapper); + Map> collect4 = bizSendOrderItemOrderItems.stream().collect(Collectors.groupingBy(BizSendOrderItem::getOrderSn)); + LambdaQueryWrapper sendOrderWrapper = new LambdaQueryWrapper<>(); sendOrderWrapper.in(BizSendOrder::getOrderSn, collect); List bizSendOrders = bizSendOrderMapper.selectList(sendOrderWrapper); @@ -147,12 +157,22 @@ public class BizPurchaseOutOrderServiceImpl implements IBizPurchaseOutOrderServi for (BizPurchaseOutOrderVo record : records) { List bizOrderOutItems1 = itemMap.get(record.getOrderSn()); List convert = MapstructUtils.convert(bizOrderOutItems1, BizOrderOutItemVo.class); - record.setQuantityShipped(Optional.ofNullable(collect3.get(record.getOrderSn())).orElse(BigDecimal.ZERO)); + BigDecimal orderQuantity = collect3.get(record.getOrderSn()); - record.setQuantityLeft(record.getOutsourceQuantity().subtract(Optional.ofNullable(collect3.get(record.getOrderSn())).orElse(BigDecimal.ZERO))); if (CollectionUtil.isEmpty(convert)) { continue; } + List bizSendOrderItems1 = collect4.get(record.getOrderSn()); + BigDecimal reduce1 = BigDecimal.ZERO; + if (CollectionUtil.isNotEmpty(bizSendOrderItems1)) { + reduce1 = bizSendOrderItems1.stream().map(BizSendOrderItem::getQuantitySend).reduce(BigDecimal.ZERO, BigDecimal::add); + } + + BigDecimal quantityShipped = Optional.ofNullable(collect3.get(record.getOrderSn())).orElse(BigDecimal.ZERO).add(reduce1); + record.setQuantityShipped(quantityShipped); + record.setQuantityLeft(record.getOutsourceQuantity().subtract(record.getQuantityShipped())); + + BigDecimal canSendLeft = record.getQuantityLeft(); for (BizOrderOutItemVo item : convert) { BizPurchaseOrder bizPurchaseOrder = purchaseOrderMap.get(item.getPurchaseOrderSn()); item.setOrder(bizPurchaseOrder); @@ -181,11 +201,20 @@ public class BizPurchaseOutOrderServiceImpl implements IBizPurchaseOutOrderServi // if (CollectionUtil.isNotEmpty(bizShipForwards)) { // item.setForwards(bizShipForwards); // } - item.setQuantityShipped(Optional.ofNullable(collect2.get(item.getPurchaseOrderSn() + "_" + item.getSku())).orElse(BigDecimal.ZERO)); - item.setQuantityLeft(item.getQuantityReal().subtract(Optional.ofNullable(item.getQuantityShipped()).orElse(BigDecimal.ZERO))); BigDecimal ratio = item.getQuantityReal().divide(record.getOutsourceQuantity(), 2, RoundingMode.HALF_UP); item.setRatio(ratio); + + item.setQuantityShipped(Optional.ofNullable(collect2.get(item.getPurchaseOrderSn() + "_" + item.getSku())).orElse(BigDecimal.ZERO).add(reduce1.multiply(ratio))); + item.setQuantityLeft(item.getQuantityReal().subtract(Optional.ofNullable(item.getQuantityShipped()).orElse(BigDecimal.ZERO))); + + if (item.getForwardType().equals("other")) { + BigDecimal divide = item.getQuantityForward().divide(ratio, 0, RoundingMode.DOWN); + if (divide.compareTo(canSendLeft) < 0) { + canSendLeft = divide; + } + } } + record.setCanSendLeft(canSendLeft); record.setItems(convert); } return TableDataInfo.build(result); @@ -223,8 +252,20 @@ public class BizPurchaseOutOrderServiceImpl implements IBizPurchaseOutOrderServi lqw.eq(StringUtils.isNotBlank(bo.getExpectArriveTime()), BizPurchaseOutOrder::getExpectArriveTime, bo.getExpectArriveTime()); lqw.eq(StringUtils.isNotBlank(bo.getMsku()), BizPurchaseOutOrder::getMsku, bo.getMsku()); lqw.eq(StringUtils.isNotBlank(bo.getPlanSn()), BizPurchaseOutOrder::getPlanSn, bo.getPlanSn()); +// lqw.eq(BizPurchaseOutOrder::getDelFlag, '0'); lqw.like(StringUtils.isNotBlank(bo.getSellerName()), BizPurchaseOutOrder::getSellerName, bo.getSellerName()); + + + if (StpUtil.hasRole("yunying")) { + Set storeNameCollect = iBizStoreUserRelService.queryStoreName(LoginHelper.getUserId()); + if (CollectionUtil.isNotEmpty(storeNameCollect)) { + lqw.in(BizPurchaseOutOrder::getSellerName, storeNameCollect); + } else { + lqw.apply("1 = 0"); + } + } lqw.orderByDesc(BizPurchaseOutOrder::getBizCreateTime); + return lqw; } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizSendOrderServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizSendOrderServiceImpl.java index 6989eec..be113a3 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizSendOrderServiceImpl.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizSendOrderServiceImpl.java @@ -1,16 +1,20 @@ package org.asinkj.amz.service.impl; import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.lang.generator.SnowflakeGenerator; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; import org.apache.dubbo.config.annotation.DubboReference; import org.asinkj.amz.domain.*; -import org.asinkj.amz.domain.bo.BizPackingSpecsBo; -import org.asinkj.amz.domain.bo.SysAmazonStoreBo; -import org.asinkj.amz.domain.vo.SysAmazonStoreVo; +import org.asinkj.amz.domain.bo.*; +import org.asinkj.amz.domain.vo.*; import org.asinkj.amz.mapper.*; import org.asinkj.amz.service.IBizShipmentPlanService; +import org.asinkj.amz.service.IBizStoreUserRelService; import org.asinkj.amz.service.ISysAmazonStoreService; import org.asinkj.common.core.utils.MapstructUtils; import org.asinkj.common.core.utils.StringUtils; @@ -23,10 +27,11 @@ import lombok.RequiredArgsConstructor; import org.asinkj.common.satoken.utils.LoginHelper; import org.asinkj.system.api.RemoteUserService; import org.asinkj.system.api.domain.vo.RemoteUserVo; +import org.asinkj.utils.SerialNoGenerator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.asinkj.amz.domain.bo.BizSendOrderBo; -import org.asinkj.amz.domain.vo.BizSendOrderVo; import org.asinkj.amz.service.IBizSendOrderService; import javax.annotation.Resource; @@ -35,6 +40,7 @@ import java.math.RoundingMode; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.LongStream; /** * 供应商创建的发货单Service业务层处理 @@ -46,6 +52,7 @@ import java.util.stream.Collectors; @Service public class BizSendOrderServiceImpl implements IBizSendOrderService { + private static final Logger log = LoggerFactory.getLogger(BizSendOrderServiceImpl.class); private final BizSendOrderMapper baseMapper; @Resource @@ -65,12 +72,33 @@ public class BizSendOrderServiceImpl implements IBizSendOrderService { @Resource private BizShipmentPlanMapper bizShipmentPlanMapper; + @Resource + private BizSendShipmentPlanRelMapper bizSendShipmentPlanRelMapper; + @Resource private BizShipmentItemMapper bizShipmentItemMapper; @Resource private BizSendOrderItemMapper bizSendOrderItemMapper; + @Resource + private BizPackingSpecsMapper bizPackingSpecsMapper; + + @Resource + private BizPackingSpecsItemMapper bizPackingSpecsItemMapper; + @Autowired + private BizSendShipmentRelMapper bizSendShipmentRelMapper; + @Autowired + private BizPurchaseOrderMapper bizPurchaseOrderMapper; + @Autowired + private BizPurchaseOutOrderMapper bizPurchaseOutOrderMapper; + @Autowired + private BizOrderOutItemMapper bizOrderOutItemMapper; + + @Resource + private IBizStoreUserRelService iBizStoreUserRelService; + + /** * 查询供应商创建的发货单 * @@ -92,18 +120,43 @@ public class BizSendOrderServiceImpl implements IBizSendOrderService { @Override public TableDataInfo queryPageList(BizSendOrderBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectCustomPage(pageQuery.build(), lqw); + Page result = baseMapper.selectCustomPage(pageQuery.build(), lqw, null); List records = result.getRecords(); // Set shipmentIds = records.stream().map(BizSendOrderVo::getShipmentId).collect(Collectors.toSet()); Set ids = records.stream().map(BizSendOrderVo::getId).collect(Collectors.toSet()); Set transferIds = records.stream().map(BizSendOrderVo::getTransferFromId).collect(Collectors.toSet()); + Set mixIds = records.stream().filter(c -> "mix".equals(c.getType())).map(BizSendOrderVo::getId).collect(Collectors.toSet()); + Map> bizPackingSpecsMap = new HashMap<>(); + Map> bizPackingSpecsItemMap = new HashMap<>(); + Map> bizOrderOutOrdersMap = new HashMap<>(); + if (CollectionUtil.isNotEmpty(mixIds)) { + List bizPackingSpecs = bizPackingSpecsMapper.selectList(new LambdaQueryWrapper().in(BizPackingSpecs::getSendOrderId, mixIds)); + bizPackingSpecsMap = bizPackingSpecs.stream().collect(Collectors.groupingBy(BizPackingSpecs::getSendOrderId)); + Set packSpecsIds = bizPackingSpecs.stream().map(BizPackingSpecs::getId).collect(Collectors.toSet()); + if (CollectionUtil.isNotEmpty(packSpecsIds)) { + List bizPackingSpecsItems = bizPackingSpecsItemMapper.selectList(new LambdaQueryWrapper().in(BizPackingSpecsItem::getPackingSpecsId, packSpecsIds)); + + bizPackingSpecsItemMap = bizPackingSpecsItems.stream().collect(Collectors.groupingBy(BizPackingSpecsItem::getPackingSpecsId)); + } + LambdaQueryWrapper sendOrderItemWrapper = new LambdaQueryWrapper<>(); + sendOrderItemWrapper.in(BizSendOrderItem::getMainOrderSn, mixIds); + List bizSendOrderItems = bizSendOrderItemMapper.selectList(sendOrderItemWrapper); + Set itemOrderSns = bizSendOrderItems.stream().map(BizSendOrderItem::getOrderSn).collect(Collectors.toSet()); + + + LambdaQueryWrapper purchaseOutOrderWrapper = new LambdaQueryWrapper<>(); + purchaseOutOrderWrapper.in(BizOrderOutItem::getOutOrderSn, itemOrderSns); + List bizPurchaseOutOrders = bizOrderOutItemMapper.selectList(purchaseOutOrderWrapper); + bizOrderOutOrdersMap = bizPurchaseOutOrders.stream().collect(Collectors.groupingBy(BizOrderOutItem::getOutOrderSn)); + + } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(CollectionUtil.isNotEmpty(transferIds), BizSendOrder::getTransferFromId, transferIds); List bizSendOrders = baseMapper.selectList(queryWrapper); - Map> transferMap = bizSendOrders.stream().collect(Collectors.groupingBy(BizSendOrder::getTransferFromId)); + Map> transferMap = bizSendOrders.stream().filter(c -> ObjectUtil.isNotEmpty(c.getTransferFromId())).collect(Collectors.groupingBy(BizSendOrder::getTransferFromId)); Map> transferItemMap = new HashMap<>(); Set transferDataIds = bizSendOrders.stream().map(BizSendOrder::getId).collect(Collectors.toSet()); if (CollectionUtil.isNotEmpty(transferDataIds)) { @@ -138,6 +191,9 @@ public class BizSendOrderServiceImpl implements IBizSendOrderService { Map> shipmentsByOrderIdsMap = getShipmentsByOrderIds(ids); + Map> sendPlanRelationIdsMap = getSendPlanRel(ids); + + List collect = shipmentsByOrderIdsMap.values().stream().flatMap(Collection::stream).toList(); Set shipmentIds = collect.stream().map(BizShipmentPlan::getShipmentId).collect(Collectors.toSet()); Map> shipmentItemsMap = new HashMap<>(); @@ -152,12 +208,15 @@ public class BizSendOrderServiceImpl implements IBizSendOrderService { Map remoteUserVoMap = remoteUserService.selectListByIds(logicIds).stream().collect(Collectors.toMap(RemoteUserVo::getUserId, Function.identity())); Set recordIds = records.stream().map(BizSendOrderVo::getId).collect(Collectors.toSet()); Map> sendOrderItemMap = new HashMap<>(); + if (CollectionUtil.isNotEmpty(recordIds)) { LambdaQueryWrapper sendOrderItemWrapper = new LambdaQueryWrapper<>(); sendOrderItemWrapper.in(BizSendOrderItem::getMainOrderSn, recordIds); List bizSendOrderItems = bizSendOrderItemMapper.selectList(sendOrderItemWrapper); sendOrderItemMap = bizSendOrderItems.stream().collect(Collectors.groupingBy(BizSendOrderItem::getMainOrderSn)); + + } for (BizSendOrderVo record : records) { RemoteUserVo remoteUserVo = remoteUserVoMap.get(record.getLogisticsProviderId()); @@ -176,6 +235,20 @@ public class BizSendOrderServiceImpl implements IBizSendOrderService { // if (bizLogisticsOrder != null) { // record.setBizLogisticsOrder(bizLogisticsOrder); // } + if ("mix".equals(record.getType())) { + List bizPackingSpecs1 = bizPackingSpecsMap.get(record.getId()); + if (CollectionUtil.isNotEmpty(bizPackingSpecs1)) { + List convertPackList = MapstructUtils.convert(bizPackingSpecs1, BizPackingSpecsVo.class); + record.setPackingSpecs(convertPackList); + assert convertPackList != null; + for (BizPackingSpecsVo bizPackingSpecsVo : convertPackList) { + List bizPackingSpecsItems1 = bizPackingSpecsItemMap.get(bizPackingSpecsVo.getId()); + if (CollectionUtil.isNotEmpty(bizPackingSpecsItems1)) { + bizPackingSpecsVo.setItems(MapstructUtils.convert(bizPackingSpecsItems1, BizPackingSpecsItemVo.class)); + } + } + } + } List bizShipmentPlans = shipmentsByOrderIdsMap.get(record.getId()); record.setBizShipmentPlans(bizShipmentPlans); @@ -191,29 +264,57 @@ public class BizSendOrderServiceImpl implements IBizSendOrderService { } } + List relVos = sendPlanRelationIdsMap.get(record.getId()); + record.setSendPlansRelVos(relVos); + if (CollectionUtil.isNotEmpty(relVos)) { + BigDecimal quantityLink = relVos.stream().map(c -> c.getPiecesPerCarton().multiply(c.getCartonCount())).reduce(BigDecimal.ZERO, BigDecimal::add); + record.setQuantityLink(quantityLink); + } + record.setQuantityLeft(record.getQuantitySend().subtract(record.getQuantityLink())); + + List bizSendOrderItems1 = sendOrderItemMap.get(record.getId()); if (CollectionUtil.isNotEmpty(bizSendOrderItems1)) { - for (BizSendOrderItem item : bizSendOrderItems1) { - BigDecimal ratio = item.getQuantitySend().divide(record.getQuantitySend(), 2, RoundingMode.HALF_UP); - item.setRatio(ratio); - + List convertBizSendOrderItems1 = MapstructUtils.convert(bizSendOrderItems1, BizSendOrderItemVo.class); + assert convertBizSendOrderItems1 != null; + for (BizSendOrderItemVo item : convertBizSendOrderItems1) { List bizSendOrderItems2 = transferItemMap.get(item.getId() + "_" + item.getSku()); if (CollectionUtil.isNotEmpty(bizSendOrderItems2)) { BigDecimal reduce = bizSendOrderItems2.stream().map(BizSendOrderItem::getQuantitySend).reduce(BigDecimal.ZERO, BigDecimal::add); item.setQuantitySend(item.getQuantitySend().subtract(reduce)); } + + try { + BigDecimal ratio = item.getQuantitySend().divide(record.getQuantitySend(), 2, RoundingMode.HALF_UP); + item.setRatio(ratio); + } catch (Exception e) { + item.setRatio(BigDecimal.ONE); + } + if (record.getType().equals("mix")) { + List bizOrderOutItems = bizOrderOutOrdersMap.get(item.getOrderSn()); + List convert = MapstructUtils.convert(bizOrderOutItems, BizOrderOutItemVo.class); + item.setItems(convert); + } + } + record.setItems(convertBizSendOrderItems1); } - record.setItems(bizSendOrderItems1); - } return TableDataInfo.build(result); } + private Map> getSendPlanRel(Set ids) { + if (CollectionUtil.isEmpty(ids)) { + return Collections.emptyMap(); + } + List relVos = bizSendShipmentPlanRelMapper.querySendPlanRelVo(ids); + return relVos.stream().collect(Collectors.groupingBy(BizSendPlanRelVo::getSendOrderId)); + } + public Map> getShipmentsByOrderIds(Collection sendOrderIds) { if (CollectionUtil.isEmpty(sendOrderIds)) { @@ -266,17 +367,26 @@ public class BizSendOrderServiceImpl implements IBizSendOrderService { lqw.eq(bo.getQuantitySend() != null, BizSendOrder::getQuantitySend, bo.getQuantitySend()); lqw.eq(bo.getQuantityPerBox() != null, BizSendOrder::getQuantityPerBox, bo.getQuantityPerBox()); lqw.eq(bo.getBoxCount() != null, BizSendOrder::getBoxCount, bo.getBoxCount()); + lqw.eq(StringUtils.isNotBlank(bo.getCompleteFlag()), BizSendOrder::getCompleteFlag, bo.getCompleteFlag()); + lqw.eq(StringUtils.isNotBlank(bo.getBoxDimensions()), BizSendOrder::getBoxDimensions, bo.getBoxDimensions()); +// lqw.eq(BizSendOrder::getDelFlag, '0'); lqw.eq(bo.getWeightPerBox() != null, BizSendOrder::getWeightPerBox, bo.getWeightPerBox()); lqw.like(StringUtils.isNotBlank(bo.getRealStoreName()), BizSendOrder::getRealStoreName, bo.getRealStoreName()); + lqw.in(StringUtils.isNotBlank(bo.getSendStatus()), BizSendOrder::getSendStatus, StrUtil.split(bo.getSendStatus(), ",")); + + if (StpUtil.hasRole("yunying")) { - SysAmazonStoreBo sysAmazonStoreBo = new SysAmazonStoreBo(); - sysAmazonStoreBo.setUserId(LoginHelper.getUserId()); - List sysAmazonStoreVos = iSysAmazonStoreService.queryList(sysAmazonStoreBo); - Set storeNameCollect = sysAmazonStoreVos.stream().map(SysAmazonStoreVo::getStoreName).collect(Collectors.toSet()); + Set storeNameCollect = iBizStoreUserRelService.queryStoreName(LoginHelper.getUserId()); +// SysAmazonStoreBo sysAmazonStoreBo = new SysAmazonStoreBo(); +// sysAmazonStoreBo.setUserId(LoginHelper.getUserId()); +// List sysAmazonStoreVos = iSysAmazonStoreService.queryList(sysAmazonStoreBo); +// Set storeNameCollect = sysAmazonStoreVos.stream().map(SysAmazonStoreVo::getStoreName).collect(Collectors.toSet()); if (CollectionUtil.isNotEmpty(storeNameCollect)) { - lqw.and(queryWrapper -> queryWrapper.in(BizSendOrder::getStoreName, storeNameCollect).or().in(BizSendOrder::getRealStoreName, storeNameCollect)); + lqw.in(BizSendOrder::getStoreName, storeNameCollect); + }else { + lqw.apply("1 = 0"); } } else if (StpUtil.hasRole("gongying")) { lqw.eq(BizSendOrder::getSendId, LoginHelper.getUserId()); @@ -296,8 +406,6 @@ public class BizSendOrderServiceImpl implements IBizSendOrderService { * @return 是否新增成功 */ - @Resource - private BizPackingSpecsMapper bizPackingSpecsMapper; @Resource private SysUserMapper sysUserMapper; @@ -374,7 +482,12 @@ public class BizSendOrderServiceImpl implements IBizSendOrderService { if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } - return baseMapper.deleteByIds(ids) > 0; + + boolean b = baseMapper.deleteByIds(ids) > 0; + LambdaQueryWrapper itemLambdaQueryWrapper = new LambdaQueryWrapper().in(BizSendOrderItem::getMainOrderSn, ids); + bizSendOrderItemMapper.delete(itemLambdaQueryWrapper); + + return b; } @Override @@ -403,13 +516,27 @@ public class BizSendOrderServiceImpl implements IBizSendOrderService { public int updateDataByBo(BizSendOrderBo bo) { BizSendOrder update = MapstructUtils.convert(bo, BizSendOrder.class); validEntityBeforeSave(update); - return baseMapper.updateById(update); + int result = baseMapper.updateById(update); + +// BizPackingSpecs bizPackingSpecs = new BizPackingSpecs(); +// bizPackingSpecs.setSendOrderId(update.getId()); + if (CollectionUtil.isNotEmpty(bo.getPackingSpecsList())) { + List packingSpecsList = bo.getPackingSpecsList(); + List bizPackingSpecsList = MapstructUtils.convert(packingSpecsList, BizPackingSpecs.class); + for (BizPackingSpecs bizPackingSpecs : bizPackingSpecsList) { + bizPackingSpecs.setSendOrderId(update.getId()); + } + bizPackingSpecsMapper.insertBatch(bizPackingSpecsList); + } + + return result; + } @Override public TableDataInfo coverSendOrder(BizSendOrderBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectCustomPage(pageQuery.build(), lqw); + Page result = baseMapper.selectCustomPage(pageQuery.build(), lqw, null); List records = result.getRecords(); Set shipmentIds = records.stream().map(BizSendOrderVo::getShipmentId).collect(Collectors.toSet()); Set ids = records.stream().map(BizSendOrderVo::getId).collect(Collectors.toSet()); @@ -456,7 +583,8 @@ public class BizSendOrderServiceImpl implements IBizSendOrderService { record.setBizShipmentPlans(bizShipmentPlans); // if (record.getType().equals("com")) { List bizSendOrderItems1 = sendOrderItemMap.get(record.getId()); - record.setItems(bizSendOrderItems1); + List convert = MapstructUtils.convert(bizSendOrderItems1, BizSendOrderItemVo.class); + record.setItems(convert); // } } @@ -469,6 +597,9 @@ public class BizSendOrderServiceImpl implements IBizSendOrderService { //调拨 // BizSendOrder add = MapstructUtils.convert(bo, BizSendOrder.class); // validEntityBeforeSave(add); + if (bo.getType().equals("mix")) { + throw new RuntimeException("混合订单无法进行调拨"); + } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(BizSendOrder::getId, bo.getId()); @@ -489,15 +620,17 @@ public class BizSendOrderServiceImpl implements IBizSendOrderService { add.setProductName(bo.getProductName()); add.setQuantitySend(bo.getQuantitySend()); add.setQuantityPerBox(bo.getQuantityPerBox()); - add.setBoxCount(bo.getBoxCount()); +// add.setBoxCount(bo.getBoxCount()); add.setBoxDimensions(bo.getBoxDimensions()); add.setWeightPerBox(bo.getWeightPerBox()); add.setRealStoreName(bo.getRealStoreName()); add.setSendStatus("unconfirm"); - add.setSendDetail(bo.getSendDetail()); +// add.setSendDetail(bo.getSendDetail()); add.setLogisticsProviderName(bo.getLogisticsProviderName()); add.setLogisticsProviderId(bo.getLogisticsProviderId()); add.setTransferFromId(bo.getId()); + add.setSendId(bo.getSendId()); + add.setSendName(bo.getSendName()); add.setType("tra"); // LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); @@ -520,7 +653,7 @@ public class BizSendOrderServiceImpl implements IBizSendOrderService { List bizSendOrderItems = new ArrayList<>(); if (CollectionUtil.isNotEmpty(bo.getItems())) { - for (BizSendOrderItem item : bo.getItems()) { + for (BizSendOrderItemVo item : bo.getItems()) { BizSendOrderItem bizSendOrderItem = new BizSendOrderItem(); bizSendOrderItem.setQuantitySend(item.getQuantitySend()); bizSendOrderItem.setOrderSn(item.getOrderSn()); @@ -536,5 +669,193 @@ public class BizSendOrderServiceImpl implements IBizSendOrderService { } + @Override + public TableDataInfo linkSendOrderList(BizSendOrderBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.apply("1 = 1"); + lqw.in(BizSendOrder::getSendStatus, Arrays.asList("confirm", "completed", "set_store")); + lqw.in(BizSendOrder::getSku, bo.getSkus()); + Set storeNameCollect = iBizStoreUserRelService.queryStoreName(LoginHelper.getUserId()); +// SysAmazonStoreBo sysAmazonStoreBo = new SysAmazonStoreBo(); +// sysAmazonStoreBo.setUserId(LoginHelper.getUserId()); +// List sysAmazonStoreVos = iSysAmazonStoreService.queryList(sysAmazonStoreBo); +// Set storeNameCollect = sysAmazonStoreVos.stream().map(SysAmazonStoreVo::getStoreName).collect(Collectors.toSet()); + if (CollectionUtil.isNotEmpty(storeNameCollect) && !StpUtil.hasRole("superadmin")) { + lqw.in(BizSendOrder::getStoreName, storeNameCollect); + }else { + lqw.apply("1 = 0"); + } + Page page = baseMapper.selectCustomPackPage(pageQuery.build(), lqw); + List records = page.getRecords(); + Set pakIds = records.stream().map(BizSendOrderPackVo::getPkid).collect(Collectors.toSet()); + if (CollectionUtil.isEmpty(pakIds)) { + return TableDataInfo.build(page); + } + List bizSendShipmentPlanRels = bizSendShipmentPlanRelMapper.selectList(new LambdaQueryWrapper().in(BizSendShipmentPlanRel::getPackId, pakIds)); + Map> bizSendShipmentPlanRelMap = bizSendShipmentPlanRels.stream().collect(Collectors.groupingBy(BizSendShipmentPlanRel::getPackId)); + for (BizSendOrderPackVo record : records) { + List bizSendShipmentPlanRels1 = bizSendShipmentPlanRelMap.get(record.getPkid()); + if (CollectionUtil.isNotEmpty(bizSendShipmentPlanRels1)) { + BigDecimal collect = bizSendShipmentPlanRels1.stream().map(BizSendShipmentPlanRel::getCartonCount).reduce(BigDecimal.ZERO, BigDecimal::add); + record.setLinkCartonCount(collect); + } + + record.setLeftLinkCount(record.getCartonCount().subtract(record.getLinkCartonCount())); + } + records.removeIf(record -> record.getLeftLinkCount().compareTo(BigDecimal.ZERO) <= 0); + return TableDataInfo.build(page); + } + + @Override + public List linkMixSendOrderList(BizSendOrderBo bo, PageQuery pageQuery) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(BizSendOrder::getSendStatus, "confirmed", "set_store", "confirm"); + queryWrapper.eq(BizSendOrder::getType, "mix"); + Set storeNameCollect = iBizStoreUserRelService.queryStoreName(LoginHelper.getUserId()); +// SysAmazonStoreBo sysAmazonStoreBo = new SysAmazonStoreBo(); +// sysAmazonStoreBo.setUserId(LoginHelper.getUserId()); +// List sysAmazonStoreVos = iSysAmazonStoreService.queryList(sysAmazonStoreBo); +// Set storeNameCollect = sysAmazonStoreVos.stream().map(SysAmazonStoreVo::getStoreName).collect(Collectors.toSet()); + if (CollectionUtil.isNotEmpty(storeNameCollect) && !StpUtil.hasRole("superadmin")) { + queryWrapper.in(BizSendOrder::getStoreName, storeNameCollect); + }else { + queryWrapper.apply("1 = 0"); + } + List bizSendOrders = baseMapper.selectList(queryWrapper); + if (CollectionUtil.isEmpty(bizSendOrders)) { + return null; + } + + Set sendOrderIds = bizSendOrders.stream().map(BizSendOrder::getId).collect(Collectors.toSet()); + + Map sendOrderMap = bizSendOrders.stream().collect(Collectors.toMap(BizSendOrder::getId, Function.identity())); + + LambdaQueryWrapper packWrapper = new LambdaQueryWrapper<>(); + packWrapper.in(BizPackingSpecs::getSendOrderId, sendOrderIds); + List bizPackingSpecses = bizPackingSpecsMapper.selectList(packWrapper); + Set packIds = bizPackingSpecses.stream().map(BizPackingSpecs::getId).collect(Collectors.toSet()); + + List bizSendShipmentPlanRels = bizSendShipmentPlanRelMapper.selectList(new LambdaQueryWrapper().in(BizSendShipmentPlanRel::getPackId, packIds)); + Map> bizSendShipmentPlanRelMap = bizSendShipmentPlanRels.stream().collect(Collectors.groupingBy(BizSendShipmentPlanRel::getPackId)); + + + LambdaQueryWrapper packItemWrapper = new LambdaQueryWrapper<>(); + packItemWrapper.in(BizPackingSpecsItem::getPackingSpecsId, packIds); + List bizPackingSpecsItems = bizPackingSpecsItemMapper.selectList(packItemWrapper); + Map> packItemsMap = bizPackingSpecsItems.stream().collect(Collectors.groupingBy(BizPackingSpecsItem::getPackingSpecsId)); + ArrayList returnDatas = new ArrayList<>(); + for (BizPackingSpecs bizPackingSpecs : bizPackingSpecses) { + List bizPackingSpecsItems1 = packItemsMap.get(bizPackingSpecs.getId()); + if (CollectionUtil.isEmpty(bizPackingSpecsItems1)) { + continue; + } + Set skus = bizPackingSpecsItems1.stream().map(BizPackingSpecsItem::getSku).collect(Collectors.toSet()); + if (CollectionUtil.isNotEmpty(skus) && CollUtil.containsAll(bo.getSkus(), skus)) { + BizPackingSpecsVo convert = MapstructUtils.convert(bizPackingSpecs, BizPackingSpecsVo.class); + convert.setSendOrder(MapstructUtils.convert(sendOrderMap.get(bizPackingSpecs.getSendOrderId()), BizSendOrderVo.class)); + convert.setItems(MapstructUtils.convert(bizPackingSpecsItems1, BizPackingSpecsItemVo.class)); + + List bizSendShipmentPlanRels1 = bizSendShipmentPlanRelMap.get(convert.getId()); + if (CollectionUtil.isNotEmpty(bizSendShipmentPlanRels1)) { + BigDecimal collect = bizSendShipmentPlanRels1.stream().map(BizSendShipmentPlanRel::getCartonCount).reduce(BigDecimal.ZERO, BigDecimal::add); + convert.setLinkCartonCount(collect); + } + convert.setLeftLinkCount(convert.getCartonCount().subtract(convert.getLinkCartonCount())); + if (convert.getLeftLinkCount().compareTo(BigDecimal.ZERO) <= 0) { + continue; + } + returnDatas.add(convert); + } + } + return returnDatas; + } + + @Override + public void createMixedOrder(BizSendOrderMixBo bo) { + System.out.println(bo); +// String s = SerialNoGenerator.generateMixOrderNo(); +// System.out.println(s); + + if (CollectionUtil.isEmpty(bo.getItems())) { + throw new RuntimeException("请选择要合并的订单"); + } + BizPurchaseOutOrderVo outOrderVo = bo.getItems().get(0); + BizSendOrder add = new BizSendOrder(); + add.setOrderSn(SerialNoGenerator.generateMixOrderNo()); + add.setType("mix"); + add.setStoreName(bo.getStoreName()); + add.setCreateName(LoginHelper.getLoginUser().getNickname()); + add.setSku(bo.getItems().stream().map(BizPurchaseOutOrderVo::getSku).collect(Collectors.joining(","))); + BigDecimal reduce = bo.getItems().stream().map(BizPurchaseOutOrderVo::getQuantityShipped).reduce(BigDecimal.ZERO, BigDecimal::add); + for (BizPurchaseOutOrderVo item : bo.getItems()) { + if (item.getQuantityShipped().compareTo(BigDecimal.ZERO) <= 0) { + throw new RuntimeException("数量不能为0"); + } + } + add.setQuantitySend(reduce); +// add.setStoreName(bizPurchaseOutOrderVo.getStoreName()); +// add.setProductName(bizPurchaseOutOrderVo.getProductName()); +// add.setQuantitySend(bizPurchaseOutOrderVo.getQuantityLeft()); +// add.setQuantityPerBox(bizPurchaseOutOrderVo.getQuantityPerBox()); +// add.setBoxCount(bizPurchaseOutOrderVo.getBoxCount()); +// add.setBoxDimensions(bizPurchaseOutOrderVo.getBoxDimensions()); +// add.setWeightPerBox(bizPurchaseOutOrderVo.getWeightPerBox()); +// add.setRealStoreName(bizPurchaseOutOrderVo.getRealStoreName()); + add.setSendStatus("unconfirm"); + add.setSendName(outOrderVo.getSupplierName()); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysUser::getNickName, outOrderVo.getSupplierName()); + List sysUsers = sysUserMapper.selectList(queryWrapper); + if (CollectionUtil.isNotEmpty(sysUsers)) { + add.setSendId(sysUsers.get(0).getUserId()); + } + + baseMapper.insert(add); + ArrayList items = new ArrayList<>(); + for (BizPurchaseOutOrderVo item : bo.getItems()) { + BizSendOrderItem bizSendOrderItem = new BizSendOrderItem(); + bizSendOrderItem.setOrderSn(item.getOrderSn()); + bizSendOrderItem.setMainOrderSn(add.getId()); + bizSendOrderItem.setProductName(item.getProductName()); + bizSendOrderItem.setSku(item.getSku()); + bizSendOrderItem.setQuantitySend(item.getQuantityShipped()); + items.add(bizSendOrderItem); + } + bizSendOrderItemMapper.insertBatch(items); + } + + @Resource + private IdentifierGenerator identifierGenerator; + + + @Override + public void createMixedOrderPackSpecs(BizSendOrderMixPackSpecsBo bo) { + System.out.println(bo); + ArrayList packList = new ArrayList<>(); + ArrayList packItemList = new ArrayList<>(); + + for (BizPackingSpecsBo item : bo.getItems()) { + long packId = identifierGenerator.nextId(null).longValue(); + item.setId(packId); + item.setSendOrderId(bo.getSendOrder().getId()); + packList.add(item); + for (BizPackingSpecsItemBo child : item.getChildren()) { + child.setPackingSpecsId(packId); + packItemList.add(child); + } + } + BigDecimal sum = bo.getItems().stream().map(BizPackingSpecsBo::getCartonCount).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal reduce = bo.getItems().stream().map(c -> c.getCartonCount().multiply(c.getWeight())).reduce(BigDecimal.ZERO, BigDecimal::add); + LambdaUpdateWrapper queryWrapper = new LambdaUpdateWrapper<>(); + queryWrapper.eq(BizSendOrder::getId, bo.getSendOrder().getId()); + queryWrapper.set(BizSendOrder::getSendStatus, "confirmed"); + queryWrapper.set(BizSendOrder::getBoxCount, sum); + queryWrapper.set(BizSendOrder::getWeightPerBox, reduce); + baseMapper.update(queryWrapper); + + bizPackingSpecsMapper.insertBatch(MapstructUtils.convert(packList, BizPackingSpecs.class)); + bizPackingSpecsItemMapper.insertBatch(MapstructUtils.convert(packItemList, BizPackingSpecsItem.class)); + } + } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizSendShipmentPlanRelServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizSendShipmentPlanRelServiceImpl.java new file mode 100644 index 0000000..2d621a8 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizSendShipmentPlanRelServiceImpl.java @@ -0,0 +1,179 @@ +package org.asinkj.amz.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import org.asinkj.amz.domain.bo.BatchSendOrderPlanRelDTO; +import org.asinkj.amz.domain.vo.BizPackingSpecsVo; +import org.asinkj.amz.domain.vo.BizSendOrderPackVo; +import org.asinkj.amz.domain.vo.BizSendPlanRelVo; +import org.asinkj.common.core.utils.MapstructUtils; +import org.asinkj.common.core.utils.StringUtils; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.asinkj.amz.domain.bo.BizSendShipmentPlanRelBo; +import org.asinkj.amz.domain.vo.BizSendShipmentPlanRelVo; +import org.asinkj.amz.domain.BizSendShipmentPlanRel; +import org.asinkj.amz.mapper.BizSendShipmentPlanRelMapper; +import org.asinkj.amz.service.IBizSendShipmentPlanRelService; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 发货单与货运计划多对多关联Service业务层处理 + * + * @author shuo hu + * @date 2025-08-30 + */ +@RequiredArgsConstructor +@Service +public class BizSendShipmentPlanRelServiceImpl implements IBizSendShipmentPlanRelService { + + private final BizSendShipmentPlanRelMapper baseMapper; + + /** + * 查询发货单与货运计划多对多关联 + * + * @param id 主键 + * @return 发货单与货运计划多对多关联 + */ + @Override + public BizSendShipmentPlanRelVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询发货单与货运计划多对多关联列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 发货单与货运计划多对多关联分页列表 + */ + @Override + public TableDataInfo queryPageList(BizSendShipmentPlanRelBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectCustomPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的发货单与货运计划多对多关联列表 + * + * @param bo 查询条件 + * @return 发货单与货运计划多对多关联列表 + */ + @Override + public List queryList(BizSendShipmentPlanRelBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(BizSendShipmentPlanRelBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getSendOrderId() != null, BizSendShipmentPlanRel::getSendOrderId, bo.getSendOrderId()); + lqw.eq(bo.getShipmentPlanId() != null, BizSendShipmentPlanRel::getShipmentPlanId, bo.getShipmentPlanId()); + lqw.eq(StringUtils.isNotBlank(bo.getSku()), BizSendShipmentPlanRel::getSku, bo.getSku()); + lqw.eq(bo.getPackId() != null, BizSendShipmentPlanRel::getPackId, bo.getPackId()); + lqw.eq(bo.getCartonCount() != null, BizSendShipmentPlanRel::getCartonCount, bo.getCartonCount()); + return lqw; + } + + /** + * 新增发货单与货运计划多对多关联 + * + * @param bo 发货单与货运计划多对多关联 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(BizSendShipmentPlanRelBo bo) { + BizSendShipmentPlanRel add = MapstructUtils.convert(bo, BizSendShipmentPlanRel.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改发货单与货运计划多对多关联 + * + * @param bo 发货单与货运计划多对多关联 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BizSendShipmentPlanRelBo bo) { + BizSendShipmentPlanRel update = MapstructUtils.convert(bo, BizSendShipmentPlanRel.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BizSendShipmentPlanRel entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除发货单与货运计划多对多关联信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public void batchCreateRelations(BatchSendOrderPlanRelDTO dto) { + if (CollectionUtil.isEmpty(dto.getShipmentIds())) { + return; + } + List sendOrderIds = dto.getSendOrderIds(); + Long shipmentId = dto.getShipmentIds().get(0); + List relations = new ArrayList<>(); + for (BizSendOrderPackVo item : sendOrderIds) { + BizSendShipmentPlanRel bizSendShipmentPlanRel = new BizSendShipmentPlanRel(); + bizSendShipmentPlanRel.setSendOrderId(item.getId()); + bizSendShipmentPlanRel.setShipmentPlanId(shipmentId); + bizSendShipmentPlanRel.setPackId(item.getPkid()); + bizSendShipmentPlanRel.setCartonCount(item.getLinkCount()); + bizSendShipmentPlanRel.setSku(item.getSku()); + relations.add(bizSendShipmentPlanRel); + } + baseMapper.insertBatch(relations); + } + + @Override + public void createMixBatchRelations(BatchSendOrderPlanRelDTO dto) { + if (CollectionUtil.isEmpty(dto.getShipmentIds())) { + return; + } + List sendOrderIds = dto.getPackingSpecs(); + Long shipmentId = dto.getShipmentIds().get(0); + List relations = new ArrayList<>(); + for (BizPackingSpecsVo item : sendOrderIds) { + BizSendShipmentPlanRel bizSendShipmentPlanRel = new BizSendShipmentPlanRel(); + bizSendShipmentPlanRel.setSendOrderId(item.getSendOrderId()); + bizSendShipmentPlanRel.setShipmentPlanId(shipmentId); + bizSendShipmentPlanRel.setPackId(item.getId()); + bizSendShipmentPlanRel.setCartonCount(item.getLinkCount()); +// bizSendShipmentPlanRel.setSku(item.getSku()); + relations.add(bizSendShipmentPlanRel); + } + baseMapper.insertBatch(relations); + } +} 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 a45b329..d5d6bf1 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 @@ -76,6 +76,9 @@ public class BizShipmentPlanServiceImpl implements IBizShipmentPlanService { @Resource private BizShipmentItemMapper bizShipmentItemMapper; + @Resource + private BizSendShipmentPlanRelMapper bizSendShipmentPlanRelMapper; + @DubboReference(stub = "true") private RemoteMessageService remoteMessageService; @@ -88,6 +91,8 @@ public class BizShipmentPlanServiceImpl implements IBizShipmentPlanService { @Resource private BizLogisticsQuoteMapper bizLogisticsQuoteMapper; + @Autowired + private BizPackingSpecsItemMapper bizPackingSpecsItemMapper; /** * 查询货件计划 @@ -134,6 +139,10 @@ public class BizShipmentPlanServiceImpl implements IBizShipmentPlanService { Map> resultOrderMap = getOrdersGroupedByShipmentId(ids); + + Map> sendPlanRelationIdsMap = getSendPlanRel(ids); + + Set sids = result.getRecords().stream().map(BizShipmentPlanVo::getSid).collect(Collectors.toSet()); Map storeNameMap = new HashMap<>(); if (CollectionUtil.isNotEmpty(sids)) { @@ -173,11 +182,13 @@ public class BizShipmentPlanServiceImpl implements IBizShipmentPlanService { // bizShipmentPlanVo.setSendOrder(sendOrderMap.get(bizShipmentPlanVo.getSendOrderId())); // } List bizSendOrders = resultOrderMap.get(bizShipmentPlanVo.getId()); - bizShipmentPlanVo.setSendOrders(bizSendOrders); + List convert = MapstructUtils.convert(bizSendOrders, BizSendOrderVo.class); + + bizShipmentPlanVo.setSendOrders(convert); Long count = collect.get(bizShipmentPlanVo.getShipmentId()); // bizShipmentPlanVo.setBoxQuantity(count); List bizShipmentItems1 = collect1.get(bizShipmentPlanVo.getShipmentId()); - BigDecimal sum = bizShipmentItems1.stream().map(BizShipmentItem::getQuantityShipped).reduce(BigDecimal.ZERO,BigDecimal::add); + BigDecimal sum = bizShipmentItems1.stream().map(BizShipmentItem::getQuantityShipped).reduce(BigDecimal.ZERO, BigDecimal::add); bizShipmentPlanVo.setQuantityShipped(sum); bizShipmentPlanVo.setItemVoList(bizShipmentItems1); @@ -190,6 +201,26 @@ public class BizShipmentPlanServiceImpl implements IBizShipmentPlanService { if (bizLogisticsQuote != null) { bizShipmentPlanVo.setQuote(bizLogisticsQuote); } + + List relVos = sendPlanRelationIdsMap.get(bizShipmentPlanVo.getId()); + bizShipmentPlanVo.setSendPlansRelVos(relVos); + + if (CollectionUtil.isNotEmpty(relVos)) { + BigDecimal quantityLink = relVos.stream().map(c -> c.getPiecesPerCarton().multiply(c.getCartonCount())).reduce(BigDecimal.ZERO, BigDecimal::add); + bizShipmentPlanVo.setQuantityLink(quantityLink); + + BigDecimal boxQuantityLink = relVos.stream().map(BizSendPlanRelVo::getCartonCount).reduce(BigDecimal.ZERO, BigDecimal::add); + bizShipmentPlanVo.setBoxQuantityLink(boxQuantityLink); + + } + + +// if (CollectionUtil.isNotEmpty(bizSendOrders)) { +// bizShipmentPlanVo.setQuantityLink(bizSendOrders.stream().map(BizSendOrder::getQuantitySend).reduce(BigDecimal.ZERO, BigDecimal::add)); +// } + bizShipmentPlanVo.setBoxQuantityLeft(bizShipmentPlanVo.getBoxQuantity().subtract(bizShipmentPlanVo.getBoxQuantityLink())); + bizShipmentPlanVo.setQuantityLeft(bizShipmentPlanVo.getQuantityShipped().subtract(bizShipmentPlanVo.getQuantityLink())); + } } @@ -197,6 +228,162 @@ public class BizShipmentPlanServiceImpl implements IBizShipmentPlanService { return TableDataInfo.build(result); } + + @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)); + } + + +// Set senOrderIds = result.getRecords().stream().map(BizShipmentPlanVo::getSendOrderId).collect(Collectors.toSet()); +// Map sendOrderMap = new HashMap<>(); +// if (CollectionUtil.isNotEmpty(senOrderIds)) { +// sendOrderMap = iSendOrderService.queryBySidList(senOrderIds).stream().collect(Collectors.toMap(BizSendOrder::getId, Function.identity())); +// } + Set ids = result.getRecords().stream().map(BizShipmentPlanVo::getId).collect(Collectors.toSet()); + + Map> resultOrderMap = getOrdersGroupedByShipmentId(ids); + + + Map> sendPlanRelationIdsMap = getSendPlanRel(ids); + + + 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()); + + List bizShipmentItems1 = collect1.get(bizShipmentPlanVo.getShipmentId()); + bizShipmentPlanVo.setItemVoList(bizShipmentItems1); + BigDecimal sum = bizShipmentItems1.stream().map(BizShipmentItem::getQuantityShipped).reduce(BigDecimal.ZERO, BigDecimal::add); + bizShipmentPlanVo.setQuantityShipped(sum); + + +// BizSendOrder bizSendOrder = sendOrderMap.get(bizShipmentPlanVo.getSendOrderId()); +// if (bizSendOrder != null) { +// bizShipmentPlanVo.setSendOrder(sendOrderMap.get(bizShipmentPlanVo.getSendOrderId())); +// } + + List bizSendOrders = resultOrderMap.get(bizShipmentPlanVo.getId()); + if (CollectionUtil.isNotEmpty(bizSendOrders)) { + bizShipmentPlanVo.setSendOrders(bizSendOrders); + BigDecimal reduce = bizSendOrders.stream().filter(bizSendOrder -> ObjectUtil.isNotEmpty(bizSendOrder.getWeightPerBox())).map(BizSendOrder::getWeightPerBox).reduce(BigDecimal.ZERO, BigDecimal::add); + bizShipmentPlanVo.setVendorWeight(reduce); + + BigDecimal quantityRelated = bizSendOrders.stream().filter(bizSendOrder -> ObjectUtil.isNotEmpty(bizSendOrder.getQuantityRelated())).map(BizSendOrder::getQuantityRelated).reduce(BigDecimal.ZERO, BigDecimal::add); + bizShipmentPlanVo.setQuantityRelated(quantityRelated); + bizShipmentPlanVo.setQuantityRemain(bizShipmentPlanVo.getQuantityShipped().subtract(quantityRelated)); + } + bizShipmentPlanVo.setDetailList(bizLogisticsOrderDetails1); + if (CollectionUtil.isNotEmpty(bizLogisticsOrderDetails1)) { + BizLogisticsOrderDetail bizLogisticsOrderDetail = bizLogisticsOrderDetails1.get(0); + bizShipmentPlanVo.setTrackingNumber(bizLogisticsOrderDetail.getTrackingNumber()); + BigDecimal collect2 = bizLogisticsOrderDetails1.stream().filter(item -> item.getLogisticsWeight() != null).map(BizLogisticsOrderDetail::getLogisticsWeight).reduce(BigDecimal.ZERO, BigDecimal::add); + + + bizShipmentPlanVo.setLogisticWeight(collect2); + + BigDecimal totalVolume = bizLogisticsOrderDetails1.stream().filter(item -> item.getTotalVolume() != null).map(BizLogisticsOrderDetail::getTotalVolume).reduce(BigDecimal.ZERO, BigDecimal::add); + bizShipmentPlanVo.setTotalVolume(totalVolume); + + + BigDecimal l = Optional.ofNullable(bizShipmentPlanVo.getLogisticWeight()).orElse(BigDecimal.ZERO).subtract(Optional.ofNullable(bizShipmentPlanVo.getVendorWeight()).orElse(BigDecimal.ZERO)); + bizShipmentPlanVo.setWeightDiff(l); + } + bizShipmentPlanVo.setBoxQuantity(count); + bizShipmentPlanVo.setOrder(bizLogisticsOrder); + if (bizLogisticsOrder != null) { + BizLogisticsQuote bizLogisticsQuote = quoteMap.get(bizLogisticsOrder.getQuoteOrderId()); + bizShipmentPlanVo.setQuote(bizLogisticsQuote); + + if ("weight".equals(bizShipmentPlanVo.getQuote().getType())) { + bizShipmentPlanVo.setAmountPrice(bizLogisticsQuote.getPrice().multiply(bizShipmentPlanVo.getLogisticWeight()).add(bizLogisticsQuote.getSurcharge()).add(bizLogisticsQuote.getCustomsDeclarationFee())); + } else if ("total".equals(bizLogisticsQuote.getType())) { + bizShipmentPlanVo.setAmountPrice(bizLogisticsQuote.getPrice().add(bizLogisticsQuote.getSurcharge()).add(bizLogisticsQuote.getCustomsDeclarationFee())); + + } else if ("volume".equals(bizLogisticsQuote.getType())) { + bizShipmentPlanVo.setAmountPrice(bizShipmentPlanVo.getQuote().getPrice().multiply(bizShipmentPlanVo.getTotalVolume()).multiply(new BigDecimal("0.000001")).add(bizLogisticsQuote.getSurcharge()).add(bizLogisticsQuote.getCustomsDeclarationFee())); + } +// bizShipmentPlanVo.setAmountPrice(bizLogisticsQuote.getPrice().multiply(bizShipmentPlanVo.getLogisticWeight()).add(bizLogisticsQuote.getSurcharge())); + } + + if (CollectionUtil.isNotEmpty(sids)) { + String storeName = storeNameMap.get(bizShipmentPlanVo.getSid()); + bizShipmentPlanVo.setSellerName(storeName); + } + } + } + return TableDataInfo.build(bizShipmentPlanOrderVoPage); + } + + + private Map> getSendPlanRel(Set ids) { + if (CollectionUtil.isEmpty(ids)) { + return Collections.emptyMap(); + } + List relVos = bizSendShipmentPlanRelMapper.querySendOrderPlanRelVo(ids); + Set packIds = relVos.stream().map(BizSendPlanRelVo::getPackId).collect(Collectors.toSet()); + if (CollectionUtil.isNotEmpty(packIds)) { + List bizPackingSpecsItems = bizPackingSpecsItemMapper.selectList(new LambdaQueryWrapper().in(BizPackingSpecsItem::getPackingSpecsId, packIds)); + if (CollectionUtil.isNotEmpty(bizPackingSpecsItems)) { + Map> collect = bizPackingSpecsItems.stream().collect(Collectors.groupingBy(BizPackingSpecsItem::getPackingSpecsId)); + for (BizSendPlanRelVo relVo : relVos) { + relVo.setItems(MapstructUtils.convert(collect.get(relVo.getPackId()), BizPackingSpecsItemVo.class)); + } + } + } + return relVos.stream().collect(Collectors.groupingBy(BizSendPlanRelVo::getShipmentPlanId)); + } + @Resource private BizSendOrderMapper orderMapper; @@ -230,16 +417,16 @@ public class BizShipmentPlanServiceImpl implements IBizShipmentPlanService { Set shipmentIds = bizShipmentPlanVos.stream().map(BizShipmentPlanVo::getShipmentId).collect(Collectors.toSet()); 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 : bizShipmentPlanVos) { - Long count = collect.get(bizShipmentPlanVo.getShipmentId()); - bizShipmentPlanVo.setBoxQuantity(count); - } +// List bizShipmentTrackings = bizShipmentTrackingMapper.selectList(queryWrapper); +// Map collect = bizShipmentTrackings.stream() +// .collect(Collectors.groupingBy( +// BizShipmentTracking::getShipmentId, +// Collectors.counting() +// )); +// for (BizShipmentPlanVo bizShipmentPlanVo : bizShipmentPlanVos) { +// Long count = collect.get(bizShipmentPlanVo.getShipmentId()); +// bizShipmentPlanVo.setBoxQuantity(BigDecimal.valueOf(count)); +// } return bizShipmentPlanVos; } @@ -385,137 +572,6 @@ 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)); - } - - -// Set senOrderIds = result.getRecords().stream().map(BizShipmentPlanVo::getSendOrderId).collect(Collectors.toSet()); -// Map sendOrderMap = new HashMap<>(); -// if (CollectionUtil.isNotEmpty(senOrderIds)) { -// sendOrderMap = iSendOrderService.queryBySidList(senOrderIds).stream().collect(Collectors.toMap(BizSendOrder::getId, Function.identity())); -// } - Set ids = result.getRecords().stream().map(BizShipmentPlanVo::getId).collect(Collectors.toSet()); - - Map> resultOrderMap = getOrdersGroupedByShipmentId(ids); - - - 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()); - - List bizShipmentItems1 = collect1.get(bizShipmentPlanVo.getShipmentId()); - bizShipmentPlanVo.setItemVoList(bizShipmentItems1); - BigDecimal sum = bizShipmentItems1.stream().map(BizShipmentItem::getQuantityShipped).reduce(BigDecimal.ZERO,BigDecimal::add); - bizShipmentPlanVo.setQuantityShipped(sum); - - -// BizSendOrder bizSendOrder = sendOrderMap.get(bizShipmentPlanVo.getSendOrderId()); -// if (bizSendOrder != null) { -// bizShipmentPlanVo.setSendOrder(sendOrderMap.get(bizShipmentPlanVo.getSendOrderId())); -// } - - List bizSendOrders = resultOrderMap.get(bizShipmentPlanVo.getId()); - bizShipmentPlanVo.setSendOrders(bizSendOrders); - BigDecimal reduce = bizSendOrders.stream().filter(bizSendOrder -> ObjectUtil.isNotEmpty(bizSendOrder.getWeightPerBox())).map(BizSendOrder::getWeightPerBox).reduce(BigDecimal.ZERO, BigDecimal::add); - bizShipmentPlanVo.setVendorWeight(reduce); - - BigDecimal quantityRelated = bizSendOrders.stream().filter(bizSendOrder -> ObjectUtil.isNotEmpty(bizSendOrder.getQuantitySend())).map(BizSendOrder::getQuantitySend).reduce(BigDecimal.ZERO, BigDecimal::add); - bizShipmentPlanVo.setQuantityRelated(quantityRelated); - bizShipmentPlanVo.setQuantityRemain(bizShipmentPlanVo.getQuantityShipped().subtract(quantityRelated)); - - bizShipmentPlanVo.setDetailList(bizLogisticsOrderDetails1); - if (CollectionUtil.isNotEmpty(bizLogisticsOrderDetails1)) { - BizLogisticsOrderDetail bizLogisticsOrderDetail = bizLogisticsOrderDetails1.get(0); - bizShipmentPlanVo.setTrackingNumber(bizLogisticsOrderDetail.getTrackingNumber()); - BigDecimal collect2 = bizLogisticsOrderDetails1.stream().filter(item -> item.getLogisticsWeight() != null).map(BizLogisticsOrderDetail::getLogisticsWeight).reduce(BigDecimal.ZERO, BigDecimal::add); - - - bizShipmentPlanVo.setLogisticWeight(collect2); - - BigDecimal totalVolume = bizLogisticsOrderDetails1.stream().filter(item -> item.getTotalVolume() != null).map(BizLogisticsOrderDetail::getTotalVolume).reduce(BigDecimal.ZERO, BigDecimal::add); - bizShipmentPlanVo.setTotalVolume(totalVolume); - - - BigDecimal l = Optional.ofNullable(bizShipmentPlanVo.getLogisticWeight()).orElse(BigDecimal.ZERO).subtract(Optional.ofNullable(bizShipmentPlanVo.getVendorWeight()).orElse(BigDecimal.ZERO)); - bizShipmentPlanVo.setWeightDiff(l); - } - bizShipmentPlanVo.setBoxQuantity(count); - bizShipmentPlanVo.setOrder(bizLogisticsOrder); - if (bizLogisticsOrder != null) { - BizLogisticsQuote bizLogisticsQuote = quoteMap.get(bizLogisticsOrder.getQuoteOrderId()); - bizShipmentPlanVo.setQuote(bizLogisticsQuote); - - if ("weight".equals(bizShipmentPlanVo.getQuote().getType())) { - bizShipmentPlanVo.setAmountPrice(bizLogisticsQuote.getPrice().multiply(bizShipmentPlanVo.getLogisticWeight()).add(bizLogisticsQuote.getSurcharge()).add(bizLogisticsQuote.getCustomsDeclarationFee())); - } else if ("total".equals(bizLogisticsQuote.getType())) { - bizShipmentPlanVo.setAmountPrice(bizLogisticsQuote.getPrice().add(bizLogisticsQuote.getSurcharge()).add(bizLogisticsQuote.getCustomsDeclarationFee())); - - } else if ("volume".equals(bizLogisticsQuote.getType())) { - bizShipmentPlanVo.setAmountPrice(bizShipmentPlanVo.getQuote().getPrice().multiply(bizShipmentPlanVo.getTotalVolume()).multiply(new BigDecimal("0.000001")).add(bizLogisticsQuote.getSurcharge()).add(bizLogisticsQuote.getCustomsDeclarationFee())); - } -// bizShipmentPlanVo.setAmountPrice(bizLogisticsQuote.getPrice().multiply(bizShipmentPlanVo.getLogisticWeight()).add(bizLogisticsQuote.getSurcharge())); - } - - if (CollectionUtil.isNotEmpty(sids)) { - String storeName = storeNameMap.get(bizShipmentPlanVo.getSid()); - bizShipmentPlanVo.setSellerName(storeName); - } - } - } - return TableDataInfo.build(bizShipmentPlanOrderVoPage); - } @Override public void updateStatusbyFbaShipmentIds(List fbaShipmentids) { diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizStoreUserRelServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizStoreUserRelServiceImpl.java new file mode 100644 index 0000000..66957fd --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizStoreUserRelServiceImpl.java @@ -0,0 +1,156 @@ +package org.asinkj.amz.service.impl; + +import org.asinkj.amz.domain.bo.BizStoreUserRelListBo; +import org.asinkj.common.core.utils.MapstructUtils; +import org.asinkj.common.core.utils.StringUtils; +import org.asinkj.common.mybatis.core.page.TableDataInfo; +import org.asinkj.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.asinkj.amz.domain.bo.BizStoreUserRelBo; +import org.asinkj.amz.domain.vo.BizStoreUserRelVo; +import org.asinkj.amz.domain.BizStoreUserRel; +import org.asinkj.amz.mapper.BizStoreUserRelMapper; +import org.asinkj.amz.service.IBizStoreUserRelService; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 用户店铺关联Service业务层处理 + * + * @author shuo hu + * @date 2025-09-26 + */ +@RequiredArgsConstructor +@Service +public class BizStoreUserRelServiceImpl implements IBizStoreUserRelService { + + private final BizStoreUserRelMapper baseMapper; + + /** + * 查询用户店铺关联 + * + * @param id 主键 + * @return 用户店铺关联 + */ + @Override + public BizStoreUserRelVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询用户店铺关联列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 用户店铺关联分页列表 + */ + @Override + public TableDataInfo queryPageList(BizStoreUserRelBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的用户店铺关联列表 + * + * @param bo 查询条件 + * @return 用户店铺关联列表 + */ + @Override + public List queryList(BizStoreUserRelBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(BizStoreUserRelBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getStoreId() != null, BizStoreUserRel::getStoreId, bo.getStoreId()); + lqw.eq(bo.getUserId() != null, BizStoreUserRel::getUserId, bo.getUserId()); + return lqw; + } + + /** + * 新增用户店铺关联 + * + * @param bo 用户店铺关联 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(BizStoreUserRelBo bo) { + BizStoreUserRel add = MapstructUtils.convert(bo, BizStoreUserRel.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改用户店铺关联 + * + * @param bo 用户店铺关联 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BizStoreUserRelBo bo) { + BizStoreUserRel update = MapstructUtils.convert(bo, BizStoreUserRel.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BizStoreUserRel entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除用户店铺关联信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateUsers(BizStoreUserRelListBo bo) { + + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(BizStoreUserRel::getStoreId, bo.getStoreId()); + baseMapper.delete(wrapper); + ArrayList bizStoreUserRels = new ArrayList<>(); + for (Long l : bo.getUserId()) { + BizStoreUserRel bizStoreUserRel = new BizStoreUserRel(); + bizStoreUserRel.setStoreId(bo.getStoreId()); + bizStoreUserRel.setStoreName(bo.getStoreName()); + bizStoreUserRel.setUserId(l); + bizStoreUserRels.add(bizStoreUserRel); + } + baseMapper.insertBatch(bizStoreUserRels); + + } + + @Override + public Set queryStoreName(Long userId) { + List list = baseMapper.selectList(new LambdaQueryWrapper().eq(BizStoreUserRel::getUserId, userId)); + return list.stream().map(BizStoreUserRel::getStoreName).collect(Collectors.toSet()); + } +} 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 a63754b..12cbab1 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 @@ -18,6 +18,7 @@ import okhttp3.Callback; import okhttp3.Response; import org.apache.dubbo.config.annotation.DubboReference; import org.asinkj.amz.domain.*; +import org.asinkj.amz.domain.vo.BizStoreUserRelVo; import org.asinkj.amz.mapper.*; import org.asinkj.amz.service.LingxinCallback; import org.asinkj.asinking.entity.*; @@ -94,6 +95,12 @@ public class SysAmazonStoreServiceImpl implements ISysAmazonStoreService { @Resource private BizOrderOutItemMapper bizOrderOutItemMapper; + @Resource + private BizStoreUserRelMapper bizStoreUserRelMapper; + + @Resource + private SysUserMapper sysUserMapper; + @Value("${lingxing.appId}") private String appId; @@ -126,6 +133,31 @@ public class SysAmazonStoreServiceImpl implements ISysAmazonStoreService { public TableDataInfo queryPageList(SysAmazonStoreBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectCustomPage(pageQuery.build(), lqw); + List records = result.getRecords(); + List collect = records.stream().map(SysAmazonStoreVo::getId).collect(Collectors.toList()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(BizStoreUserRel::getStoreId, collect); + List list = bizStoreUserRelMapper.selectList(wrapper); + Set userIds = list.stream().map(BizStoreUserRel::getUserId).collect(Collectors.toSet()); + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(SysUser::getUserId, userIds); + List sysUsers = sysUserMapper.selectList(queryWrapper); + Map userMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity())); + List convert = MapstructUtils.convert(list, BizStoreUserRelVo.class); + for (BizStoreUserRelVo bizStoreUserRelVo : convert) { + bizStoreUserRelVo.setUser(userMap.get(bizStoreUserRelVo.getUserId())); + } + + Map> collect1 = convert.stream().collect(Collectors.groupingBy(BizStoreUserRelVo::getStoreId)); + records.forEach(item -> { + List bizStoreUserRelVos = collect1.get(item.getId()); + if (CollectionUtil.isNotEmpty(bizStoreUserRelVos)) { + List list1 = bizStoreUserRelVos.stream().map(BizStoreUserRelVo::getUser).toList(); + item.setUsers(list1); + } + }); + return TableDataInfo.build(result); } @@ -998,7 +1030,7 @@ public class SysAmazonStoreServiceImpl implements ISysAmazonStoreService { Map collect = bizTrackingList.stream().collect(Collectors.groupingBy(BizShipmentTracking::getShipmentId, Collectors.counting())); for (BizShipmentPlan bizShipmentPlan : readyToShip) { - bizShipmentPlan.setBoxQuantity(collect.get(bizShipmentPlan.getShipmentId())); + bizShipmentPlan.setBoxQuantity(BigDecimal.valueOf(collect.get(bizShipmentPlan.getShipmentId()))); } bizShipmentPlanMapper.insertBatch(readyToShip); diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/utils/SerialNoGenerator.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/utils/SerialNoGenerator.java index 4b1545c..81fa990 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/utils/SerialNoGenerator.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/utils/SerialNoGenerator.java @@ -12,6 +12,7 @@ public class SerialNoGenerator { /** * 生成询价单号(格式:INQ+年月日+6位序列) + * * @return 示例:INQ20231023000001 */ public static String generateInquiryNo() { @@ -75,4 +76,37 @@ public class SerialNoGenerator { // 6. 格式化输出 return String.format("ORDER%s%06d", datePart, sequence); } + + public static String generateMixOrderNo() { + // 1. 生成日期部分 + String datePart = LocalDate.now(ZoneId.of("Asia/Shanghai")) + .format(DateTimeFormatter.ofPattern("yyMMdd")); + + // 2. 构建Redis键 + String redisKey = "order:hp:" + datePart; + + // 3. 原子递增序列号 + long sequence = RedisUtils.incrAtomicValue(redisKey); + + // 4. 首次生成时设置过期时间(次日凌晨过期) + if (sequence == 1L) { + LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Shanghai")); + LocalDateTime expirationTime = now.toLocalDate() + .plusDays(1) + .atStartOfDay(); + + Duration ttl = Duration.between(now, expirationTime); + RedisUtils.expire(redisKey, ttl); + } + + // 5. 校验序列号范围(根据业务需求可选) + if (sequence > 9_999L) { + throw new IllegalStateException("当日序列号已用尽"); + } + + // 6. 格式化输出 + return String.format("HP%s%04d", datePart, sequence); + } + + } diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizLogisticsOrderDetailMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizLogisticsOrderDetailMapper.xml index f134f71..6361321 100644 --- a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizLogisticsOrderDetailMapper.xml +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizLogisticsOrderDetailMapper.xml @@ -11,18 +11,51 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" logistics_status = #{item.logisticsStatus}, - - logistics_provider_name = #{item.logisticsProviderName}, - tracking_number = #{item.trackingNumber}, logistics_weight = #{item.logisticsWeight}, + + length = #{item.length}, + + + width = #{item.width}, + + + height = #{item.height}, + actual_delivery_date = #{item.actualDeliveryDate}, + + goods_receipt_time = #{item.goodsReceiptTime}, + + + transfer_start_time = #{item.transferStartTime}, + + + signed_time = #{item.signedTime}, + + + schedule_time = #{item.scheduleTime}, + + + vessel_depart_time = #{item.vesselDepartTime}, + + + port_arrival_time = #{item.portArrivalTime}, + + + inspection_time = #{item.inspectionTime}, + + + delivery_pickup_time = #{item.deliveryPickupTime}, + + + total_volume = #{item.totalVolume}, + WHERE fba_box_number = #{item.fbaBoxNumber} diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizPackingSpecsItemMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizPackingSpecsItemMapper.xml new file mode 100644 index 0000000..bdf6604 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizPackingSpecsItemMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizPurchaseOrderMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizPurchaseOrderMapper.xml index 0985e80..0ca6e1a 100644 --- a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizPurchaseOrderMapper.xml +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizPurchaseOrderMapper.xml @@ -4,4 +4,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizSendOrderMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizSendOrderMapper.xml index b0cc403..ab8b727 100644 --- a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizSendOrderMapper.xml +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizSendOrderMapper.xml @@ -21,7 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" o.product_name AS "order.productName", o.quantity_send AS "order.quantitySend", o.quantity_per_box AS "order.quantityPerBox", - o.box_count AS "order.boxCount", + rel.carton_count AS "order.boxCount", o.box_dimensions AS "order.boxDimensions", o.weight_per_box AS "order.weightPerBox", o.real_store_name AS "order.realStoreName", @@ -32,9 +32,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" o.send_detail AS "order.sendDetail", o.logistics_provider_name AS "order.logisticsProviderName", o.order_detail_id AS "order.orderDetailId", - o.shipment_id AS "order.shipmentId" + o.shipment_id AS "order.shipmentId", + bps.pieces_per_carton AS "order.piecesPerCarton" , + bps.pieces_per_carton * rel.carton_count AS "order.quantityRelated" FROM biz_send_order o - INNER JOIN biz_send_shipment_rel rel ON o.id = rel.send_order_id + INNER JOIN biz_send_shipment_plan_rel rel ON o.id = rel.send_order_id + left join biz_packing_specs bps ON bps.id = rel.pack_id WHERE rel.shipment_plan_id IN #{id} @@ -44,9 +47,48 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" SELECT req.* FROM biz_send_order req +-- LEFT JOIN biz_send_shipment_plan_rel det ON req.id = det.send_order_id ${ew.sqlSegment} + + + + + + + + + + + + + ORDER BY req.create_time DESC + + + diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizSendShipmentPlanRelMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizSendShipmentPlanRelMapper.xml new file mode 100644 index 0000000..71fd42b --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizSendShipmentPlanRelMapper.xml @@ -0,0 +1,92 @@ + + + + + + + + diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentPlanMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentPlanMapper.xml index d55b20f..cc48fb0 100644 --- a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentPlanMapper.xml +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentPlanMapper.xml @@ -93,7 +93,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" SELECT send_order_id, shipment_plan_id - FROM biz_send_shipment_rel + FROM biz_send_shipment_plan_rel WHERE send_order_id IN #{id} @@ -192,7 +192,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" FROM biz_send_order o - INNER JOIN biz_send_shipment_rel rel ON o.id = rel.send_order_id + INNER JOIN biz_send_shipment_plan_rel rel ON o.id = rel.send_order_id INNER JOIN biz_shipment_plan plan ON plan.id = rel.shipment_plan_id INNER JOIN biz_inquiry_request req ON req.shipment_id = plan.shipment_id diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizStoreUserRelMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizStoreUserRelMapper.xml new file mode 100644 index 0000000..53c95d8 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizStoreUserRelMapper.xml @@ -0,0 +1,20 @@ + + + + + +