From 2d48aabf61611991c0d21f144ccc9449e7effa8b Mon Sep 17 00:00:00 2001 From: dev <182542500@qq.com> Date: Thu, 15 May 2025 11:24:28 +0800 Subject: [PATCH] =?UTF-8?q?5.9=E6=96=B0=E9=9C=80=E6=B1=82=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../asinkj/system/api/RemoteUserService.java | 4 + .../BizPurchaseOrderController.java | 6 + .../controller/BizSendOrderController.java | 108 +++++++++++ .../controller/BizShipForwardController.java | 109 +++++++++++ .../controller/SysAmazonStoreController.java | 15 ++ .../asinkj/amz/domain/BizPurchaseOrder.java | 9 + .../amz/domain/BizPurchaseOrderItem.java | 4 +- .../org/asinkj/amz/domain/BizSendOrder.java | 93 +++++++++ .../org/asinkj/amz/domain/BizShipForward.java | 118 ++++++++++++ .../amz/domain/bo/BizPurchaseOrderBo.java | 102 +++++----- .../asinkj/amz/domain/bo/BizSendOrderBo.java | 99 ++++++++++ .../amz/domain/bo/BizShipForwardBo.java | 138 ++++++++++++++ .../amz/domain/vo/BizPurchaseOrderVo.java | 14 +- .../asinkj/amz/domain/vo/BizSendOrderVo.java | 107 +++++++++++ .../amz/domain/vo/BizShipForwardVo.java | 138 ++++++++++++++ .../org/asinkj/amz/mapStruct/DateConvert.java | 25 +++ .../asinkj/amz/mapper/BizSendOrderMapper.java | 15 ++ .../amz/mapper/BizShipForwardMapper.java | 15 ++ .../amz/service/IBizSendOrderService.java | 69 +++++++ .../amz/service/IBizShipForwardService.java | 69 +++++++ .../amz/service/ISysAmazonStoreService.java | 2 + .../impl/BizPurchaseOrderServiceImpl.java | 49 ++++- .../service/impl/BizSendOrderServiceImpl.java | 139 ++++++++++++++ .../impl/BizShipForwardServiceImpl.java | 169 +++++++++++++++++ .../impl/SysAmazonStoreServiceImpl.java | 178 ++++++++++++++++-- .../entity/PurchaseOrderResponse.java | 17 +- .../entity/PurchaseOutsourceResponse.java | 131 +++++++++++++ .../mapper/amz/BizSendOrderMapper.xml | 7 + .../mapper/amz/BizShipForwardMapper.xml | 7 + .../org/asinkj/gen/domain/GenTableColumn.java | 15 +- .../mapper/amz/BizShipForwardMapper.xml | 7 + .../controller/system/SysUserController.java | 28 +++ .../system/dubbo/RemoteUserServiceImpl.java | 30 ++- .../asinkj/system/mapper/SysUserMapper.java | 3 + .../system/service/ISysUserService.java | 2 + .../service/impl/SysUserServiceImpl.java | 5 + .../resources/mapper/system/SysUserMapper.xml | 10 + 37 files changed, 1973 insertions(+), 83 deletions(-) create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizSendOrderController.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipForwardController.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizSendOrder.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipForward.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizSendOrderBo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipForwardBo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendOrderVo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipForwardVo.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapStruct/DateConvert.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizSendOrderMapper.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipForwardMapper.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizSendOrderService.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipForwardService.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizSendOrderServiceImpl.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipForwardServiceImpl.java create mode 100644 asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/PurchaseOutsourceResponse.java create mode 100644 asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizSendOrderMapper.xml create mode 100644 asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipForwardMapper.xml create mode 100644 asinkj-modules/asinkj-gen/src/main/resources/mapper/amz/BizShipForwardMapper.xml diff --git a/asinkj-api/asinkj-api-system/src/main/java/org/asinkj/system/api/RemoteUserService.java b/asinkj-api/asinkj-api-system/src/main/java/org/asinkj/system/api/RemoteUserService.java index 4509da4..64e4072 100644 --- a/asinkj-api/asinkj-api-system/src/main/java/org/asinkj/system/api/RemoteUserService.java +++ b/asinkj-api/asinkj-api-system/src/main/java/org/asinkj/system/api/RemoteUserService.java @@ -25,6 +25,8 @@ public interface RemoteUserService { */ LoginUser getUserInfo(String username, String tenantId) throws UserException; + LoginUser getUserInfoWithNickName(String nickName) throws UserException; + /** * 通过用户id查询用户信息 * @@ -149,4 +151,6 @@ public interface RemoteUserService { * @return 用户ids */ List selectUserOpenIdsByRoleIds(List roleIds); + + List selectUserByRoleIds(List roleIds); } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizPurchaseOrderController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizPurchaseOrderController.java index f3c3ecd..36cad86 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizPurchaseOrderController.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizPurchaseOrderController.java @@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.asinkj.amz.service.IBizPurchaseOrderItemService; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.asinkj.common.idempotent.annotation.RepeatSubmit; @@ -22,6 +23,8 @@ import org.asinkj.amz.domain.bo.BizPurchaseOrderBo; import org.asinkj.amz.service.IBizPurchaseOrderService; import org.asinkj.common.mybatis.core.page.TableDataInfo; +import javax.annotation.Resource; + /** * 采购单主 * 前端访问路由地址为:/amz/purchaseOrder @@ -37,6 +40,9 @@ public class BizPurchaseOrderController extends BaseController { private final IBizPurchaseOrderService bizPurchaseOrderService; + + + /** * 查询采购单主列表 */ 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 new file mode 100644 index 0000000..25a73b7 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizSendOrderController.java @@ -0,0 +1,108 @@ +package org.asinkj.amz.controller; + +import java.util.List; + +import cn.dev33.satoken.annotation.SaCheckRole; +import cn.dev33.satoken.annotation.SaMode; +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.BizSendOrderVo; +import org.asinkj.amz.domain.bo.BizSendOrderBo; +import org.asinkj.amz.service.IBizSendOrderService; +import org.asinkj.common.mybatis.core.page.TableDataInfo; + +/** + * 供应商创建的发货单 + * 前端访问路由地址为:/amz/sendOrder + * + * @author shuo hu + * @date 2025-05-14 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/sendOrder") +public class BizSendOrderController extends BaseController { + + private final IBizSendOrderService bizSendOrderService; + + /** + * 查询供应商创建的发货单列表 + */ + @SaCheckRole(value = {"gongying","gengdan", "superadmin"}, mode = SaMode.OR) + @GetMapping("/list") + public TableDataInfo list(BizSendOrderBo bo, PageQuery pageQuery) { + return bizSendOrderService.queryPageList(bo, pageQuery); + } + + /** + * 导出供应商创建的发货单列表 + */ + @SaCheckRole(value = {"gongying","gengdan", "superadmin"}, mode = SaMode.OR) + @Log(title = "供应商创建的发货单", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(BizSendOrderBo bo, HttpServletResponse response) { + List list = bizSendOrderService.queryList(bo); + ExcelUtil.exportExcel(list, "供应商创建的发货单", BizSendOrderVo.class, response); + } + + /** + * 获取供应商创建的发货单详细信息 + * + * @param id 主键 + */ + @SaCheckRole(value = {"gongying","gengdan", "superadmin"}, mode = SaMode.OR) + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(bizSendOrderService.queryById(id)); + } + + /** + * 新增供应商创建的发货单 + */ + @SaCheckRole(value = {"gongying", "superadmin"}, mode = SaMode.OR) + @Log(title = "供应商创建的发货单", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody BizSendOrderBo bo) { + return toAjax(bizSendOrderService.insertByBo(bo)); + } + + /** + * 修改供应商创建的发货单 + */ + @SaCheckRole(value = {"gongying","gengdan", "superadmin"}, mode = SaMode.OR) + @Log(title = "供应商创建的发货单", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody BizSendOrderBo bo) { + return toAjax(bizSendOrderService.updateByBo(bo)); + } + + /** + * 删除供应商创建的发货单 + * + * @param ids 主键串 + */ + @SaCheckPermission("amz:sendOrder:remove") + @Log(title = "供应商创建的发货单", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(bizSendOrderService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipForwardController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipForwardController.java new file mode 100644 index 0000000..e9fb1a2 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizShipForwardController.java @@ -0,0 +1,109 @@ +package org.asinkj.amz.controller; + +import java.util.List; + +import cn.dev33.satoken.annotation.SaCheckRole; +import cn.dev33.satoken.annotation.SaMode; +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.BizShipForwardVo; +import org.asinkj.amz.domain.bo.BizShipForwardBo; +import org.asinkj.amz.service.IBizShipForwardService; +import org.asinkj.common.mybatis.core.page.TableDataInfo; + +/** + * 货件转发 + * 前端访问路由地址为:/amz/shipForward + * + * @author shuo hu + * @date 2025-05-13 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/shipForward") +public class BizShipForwardController extends BaseController { + + private final IBizShipForwardService bizShipForwardService; + + /** + * 查询货件转发列表 + */ + @SaCheckPermission("amz:shipForward:list") + @GetMapping("/list") + public TableDataInfo list(BizShipForwardBo bo, PageQuery pageQuery) { + return bizShipForwardService.queryPageList(bo, pageQuery); + } + + /** + * 导出货件转发列表 + */ + @SaCheckPermission("amz:shipForward:export") + @Log(title = "货件转发", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(BizShipForwardBo bo, HttpServletResponse response) { + List list = bizShipForwardService.queryList(bo); + ExcelUtil.exportExcel(list, "货件转发", BizShipForwardVo.class, response); + } + + /** + * 获取货件转发详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("amz:shipForward:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(bizShipForwardService.queryById(id)); + } + + /** + * 新增货件转发 + */ + @SaCheckPermission("amz:shipForward:add") + @SaCheckRole(value = {"gengdan", "superadmin"}, mode = SaMode.OR) + @Log(title = "货件转发", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody BizShipForwardBo bo) { + return toAjax(bizShipForwardService.insertByBo(bo)); + } + + /** + * 修改货件转发 + */ + @SaCheckPermission("amz:shipForward:edit") + @Log(title = "货件转发", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody BizShipForwardBo bo) { + return toAjax(bizShipForwardService.updateByBo(bo)); + } + + /** + * 删除货件转发 + * + * @param ids 主键串 + */ + @SaCheckPermission("amz:shipForward:remove") + @Log(title = "货件转发", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(bizShipForwardService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/SysAmazonStoreController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/SysAmazonStoreController.java index a25a746..0d02de2 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/SysAmazonStoreController.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/SysAmazonStoreController.java @@ -168,6 +168,21 @@ public class SysAmazonStoreController extends BaseController { return R.ok(); } + @GetMapping("/purchaseOut/{startDate}/{endDate}") + public R updatePurchaseOrderSeller(@PathVariable String startDate, @PathVariable String endDate) { + try { + sysAmazonStoreService.updatePurchaseOrderSeller(startDate, endDate, new LingxinCallback() { + @Override + public void onFinished(String result, int status) { + + } + }); + } catch (Exception e) { + throw new RuntimeException(e); + } + return R.ok(); + } + @SaCheckPermission("amz:amazonStore:remove") @Log(title = "亚马逊FBAtest", businessType = BusinessType.OTHER) @GetMapping("/test") diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizPurchaseOrder.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizPurchaseOrder.java index 3e2db58..f7f9f76 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizPurchaseOrder.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizPurchaseOrder.java @@ -1,5 +1,6 @@ package org.asinkj.amz.domain; +import io.github.linpeilie.annotations.AutoMapping; import org.asinkj.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; @@ -26,6 +27,7 @@ public class BizPurchaseOrder extends TenantEntity { /** * 采购单号 */ + @TableId private String orderSn; /** @@ -66,6 +68,7 @@ public class BizPurchaseOrder extends TenantEntity { /** * 下单时间 */ + @AutoMapping(dateFormat = "yyyy-MM-dd HH:mm:ss") private Date orderTime; /** @@ -81,6 +84,7 @@ public class BizPurchaseOrder extends TenantEntity { /** * 审核时间 */ + @AutoMapping(dateFormat = "yyyy-MM-dd HH:mm:ss") private Date auditorTime; /** @@ -91,6 +95,7 @@ public class BizPurchaseOrder extends TenantEntity { /** * 最后操作时间 */ + @AutoMapping(dateFormat = "yyyy-MM-dd HH:mm:ss") private Date lastTime; /** @@ -272,6 +277,7 @@ public class BizPurchaseOrder extends TenantEntity { /** * 交货时间 */ + @AutoMapping(dateFormat = "yyyy-MM-dd HH:mm:ss") private Date deliveryTime; /** @@ -280,4 +286,7 @@ public class BizPurchaseOrder extends TenantEntity { private Long dlvTimeVar; + private String storeName; + + } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizPurchaseOrderItem.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizPurchaseOrderItem.java index 6af665c..d571776 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizPurchaseOrderItem.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizPurchaseOrderItem.java @@ -1,5 +1,6 @@ package org.asinkj.amz.domain; +import io.github.linpeilie.annotations.AutoMapping; import org.asinkj.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; @@ -71,7 +72,7 @@ public class BizPurchaseOrderItem extends TenantEntity { /** * 店铺ID */ - private String sid; + private Long sid; /** * 型号 @@ -131,6 +132,7 @@ public class BizPurchaseOrderItem extends TenantEntity { /** * 期待到货时间 */ + @AutoMapping(dateFormat = "yyyy-MM-dd HH:mm:ss") private Date expectArriveTime; /** 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 new file mode 100644 index 0000000..189457f --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizSendOrder.java @@ -0,0 +1,93 @@ +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.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 供应商创建的发货单对象 biz_send_order + * + * @author shuo hu + * @date 2025-05-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("biz_send_order") +public class BizSendOrder extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + private Long id; + + /** + * 删除标志(0正常 2删除) + */ + @TableLogic + private String delFlag; + + /** + * 采购单号 + */ + private String orderSn; + + /** + * 发货日期 + */ + private Date sendDate; + + /** + * 采购店铺 + */ + private String storeName; + + /** + * 产品名称 + */ + private String productName; + + /** + * 发货数量 + */ + private Long quantitySend; + + /** + * 单箱产品数量 + */ + private Long quantityPerBox; + + /** + * 箱数 + */ + private Long boxCount; + + /** + * 箱子尺寸 + */ + private String boxDimensions; + + /** + * 单箱重量 + */ + private Long weightPerBox; + + /** + * 实际采购店铺 + */ + private String realStoreName; + + /** + * 发货状态(pending=未发货,confirm=确认发货, processing=发货中,completed=发货完成) + */ + private String sendStatus; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipForward.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipForward.java new file mode 100644 index 0000000..7fba98b --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipForward.java @@ -0,0 +1,118 @@ +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.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 货件转发对象 biz_ship_forward + * + * @author shuo hu + * @date 2025-05-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("biz_ship_forward") +public class BizShipForward extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * $column.columnComment + */ + private Long id; + + /** + * 采购单号 + */ + private String orderSn; + + /** + * 采购店铺名称 + */ + private String storeName; + + /** + * 产品唯一标识码 + */ + private String sku; + + /** + * 产品全称 + */ + private String productName; + + /** + * 实际发货数量 + */ + private Long quantitySend; + + /** + * 发货供应商名称 + */ + private String outSupplierName; + + /** + * 发货供应商系统ID + */ + private Long outSupplierId; + + /** + * 收货供应商名称 + */ + private String inSupplierName; + + /** + * 收货供应商系统ID + */ + private Long inSupplierId; + + /** + * 计划发货起始时间 + */ + private Date shipmentStart; + + /** + * 计划发货截止时间 + */ + private Date shipmentEnd; + + /** + * 订单跟进人姓名 + */ + private String trackerName; + + /** + * 订单跟进人系统ID + */ + private Long trackerId; + + /** + * 软删除标记(0-正常,2-删除) + */ + @TableLogic + private String delFlag; + + /** + * 转发状态(pending=未转发,processing=转发中,completed=转发完成) + */ + private String fwdStatus; + + /** + * 发货时间 + */ + private Date sendTime; + + /** + * 采购单子项ID + */ + private Long orderDetailId; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizPurchaseOrderBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizPurchaseOrderBo.java index 723303a..e20a239 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizPurchaseOrderBo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizPurchaseOrderBo.java @@ -8,7 +8,9 @@ import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; + import java.util.Date; + import com.fasterxml.jackson.annotation.JsonFormat; /** @@ -25,301 +27,301 @@ public class BizPurchaseOrderBo extends BaseEntity { /** * 采购单号 */ - @NotBlank(message = "采购单号不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotBlank(message = "采购单号不能为空", groups = {AddGroup.class, EditGroup.class}) private String orderSn; /** * 自定义单号 */ - @NotBlank(message = "自定义单号不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "自定义单号不能为空", groups = { AddGroup.class, EditGroup.class }) private String customOrderSn; /** * 供应商ID */ - @NotNull(message = "供应商ID不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "供应商ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long supplierId; /** * 供应商名称 */ - @NotBlank(message = "供应商名称不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "供应商名称不能为空", groups = { AddGroup.class, EditGroup.class }) private String supplierName; /** * 采购员ID */ - @NotNull(message = "采购员ID不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "采购员ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long optUid; /** * 审核人姓名 */ - @NotBlank(message = "审核人姓名不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "审核人姓名不能为空", groups = { AddGroup.class, EditGroup.class }) private String auditorRealname; /** * 操作人姓名 */ - @NotBlank(message = "操作人姓名不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "操作人姓名不能为空", groups = { AddGroup.class, EditGroup.class }) private String optRealname; /** * 最后操作人姓名 */ - @NotBlank(message = "最后操作人姓名不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "最后操作人姓名不能为空", groups = { AddGroup.class, EditGroup.class }) private String lastRealname; /** * 下单时间 */ - @NotNull(message = "下单时间不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "下单时间不能为空", groups = { AddGroup.class, EditGroup.class }) private Date orderTime; /** * 应付货款(手工) */ - @NotBlank(message = "应付货款(手工)不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "应付货款(手工)不能为空", groups = { AddGroup.class, EditGroup.class }) private String payment; /** * 审核人员ID */ - @NotNull(message = "审核人员ID不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "审核人员ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long auditorUid; /** * 审核时间 */ - @NotNull(message = "审核时间不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "审核时间不能为空", groups = { AddGroup.class, EditGroup.class }) private Date auditorTime; /** * 最后操作人员ID */ - @NotNull(message = "最后操作人员ID不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "最后操作人员ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long lastUid; /** * 最后操作时间 */ - @NotNull(message = "最后操作时间不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "最后操作时间不能为空", groups = { AddGroup.class, EditGroup.class }) private Date lastTime; /** * 作废原因 */ - @NotBlank(message = "作废原因不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "作废原因不能为空", groups = { AddGroup.class, EditGroup.class }) private String reason; /** * 是否含税:0 否,1 是 */ - @NotNull(message = "是否含税:0 否,1 是不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "是否含税:0 否,1 是不能为空", groups = { AddGroup.class, EditGroup.class }) private Long isTax; /** * 采购单状态:-1 作废, 3 待提交, 1 待下单, 2 待签收, 9 完成, 121 待审核, 122 驳回, 124 作废 */ - @NotNull(message = "采购单状态:-1 作废, 3 待提交, 1 待下单, 2 待签收, 9 完成, 121 待审核, 122 驳回, 124 作废不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "采购单状态:-1 作废, 3 待提交, 1 待下单, 2 待签收, 9 完成, 121 待审核, 122 驳回, 124 作废不能为空", groups = { AddGroup.class, EditGroup.class }) private Long status; /** * 状态说明 */ - @NotBlank(message = "状态说明不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "状态说明不能为空", groups = { AddGroup.class, EditGroup.class }) private String statusText; /** * 支付状态说明 */ - @NotBlank(message = "支付状态说明不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "支付状态说明不能为空", groups = { AddGroup.class, EditGroup.class }) private String payStatusText; /** * 到货状态:1 未到货, 2 部分到货, 3 全部到货 */ - @NotNull(message = "到货状态:1 未到货, 2 部分到货, 3 全部到货不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "到货状态:1 未到货, 2 部分到货, 3 全部到货不能为空", groups = { AddGroup.class, EditGroup.class }) private Long statusShipped; /** * 到货状态说明 */ - @NotBlank(message = "到货状态说明不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "到货状态说明不能为空", groups = { AddGroup.class, EditGroup.class }) private String statusShippedText; /** * 货物总价 */ - @NotNull(message = "货物总价不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "货物总价不能为空", groups = { AddGroup.class, EditGroup.class }) private Long amountTotal; /** * 总金额 */ - @NotNull(message = "总金额不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "总金额不能为空", groups = { AddGroup.class, EditGroup.class }) private Long totalPrice; /** * 币种符号 */ - @NotBlank(message = "币种符号不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "币种符号不能为空", groups = { AddGroup.class, EditGroup.class }) private String icon; /** * 付款状态:0 未申请, 1 已申请, 2 部分付款, 3 已付款 */ - @NotNull(message = "付款状态:0 未申请, 1 已申请, 2 部分付款, 3 已付款不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "付款状态:0 未申请, 1 已申请, 2 部分付款, 3 已付款不能为空", groups = { AddGroup.class, EditGroup.class }) private Long payStatus; /** * 备注 */ - @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) private String remark; /** * 其他费用 */ - @NotNull(message = "其他费用不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "其他费用不能为空", groups = { AddGroup.class, EditGroup.class }) private Long otherFee; /** * 其他费用币种 */ - @NotBlank(message = "其他费用币种不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "其他费用币种不能为空", groups = { AddGroup.class, EditGroup.class }) private String otherCurrency; /** * 费用分摊方式:0 不分摊, 1 按金额, 2 按数量 */ - @NotNull(message = "费用分摊方式:0 不分摊, 1 按金额, 2 按数量不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "费用分摊方式:0 不分摊, 1 按金额, 2 按数量不能为空", groups = { AddGroup.class, EditGroup.class }) private Long feePartType; /** * 运费 */ - @NotNull(message = "运费不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "运费不能为空", groups = { AddGroup.class, EditGroup.class }) private Long shippingPrice; /** * 运费币种 */ - @NotBlank(message = "运费币种不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "运费币种不能为空", groups = { AddGroup.class, EditGroup.class }) private String shippingCurrency; /** * 采购币种 */ - @NotBlank(message = "采购币种不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "采购币种不能为空", groups = { AddGroup.class, EditGroup.class }) private String purchaseCurrency; /** * 采购汇率 */ - @NotNull(message = "采购汇率不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "采购汇率不能为空", groups = { AddGroup.class, EditGroup.class }) private Long purchaseRate; /** * 采购总量 */ - @NotNull(message = "采购总量不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "采购总量不能为空", groups = { AddGroup.class, EditGroup.class }) private Long quantityTotal; /** * 仓库ID */ - @NotNull(message = "仓库ID不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "仓库ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long wid; /** * 仓库名称 */ - @NotBlank(message = "仓库名称不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "仓库名称不能为空", groups = { AddGroup.class, EditGroup.class }) private String wareHouseName; /** * 仓库名(备份) */ - @NotBlank(message = "仓库名(备份)不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "仓库名(备份)不能为空", groups = { AddGroup.class, EditGroup.class }) private String wareHouseBakName; /** * 入库量 */ - @NotNull(message = "入库量不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "入库量不能为空", groups = { AddGroup.class, EditGroup.class }) private Long quantityEntry; /** * 实际采购量 */ - @NotNull(message = "实际采购量不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "实际采购量不能为空", groups = { AddGroup.class, EditGroup.class }) private Long quantityReal; /** * 待到货量 */ - @NotNull(message = "待到货量不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "待到货量不能为空", groups = { AddGroup.class, EditGroup.class }) private Long quantityReceive; /** * 采购方ID */ - @NotNull(message = "采购方ID不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "采购方ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long purchaserId; /** * 联系人 */ - @NotBlank(message = "联系人不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "联系人不能为空", groups = { AddGroup.class, EditGroup.class }) private String contactPerson; /** * 联系方式 */ - @NotBlank(message = "联系方式不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "联系方式不能为空", groups = { AddGroup.class, EditGroup.class }) private String contactNumber; /** * 结算方式:7 现结, 8 月结 */ - @NotNull(message = "结算方式:7 现结, 8 月结不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "结算方式:7 现结, 8 月结不能为空", groups = { AddGroup.class, EditGroup.class }) private Long settlementMethod; /** * 结算描述 */ - @NotBlank(message = "结算描述不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "结算描述不能为空", groups = { AddGroup.class, EditGroup.class }) private String settlementDescription; /** * 支付方式 */ - @NotNull(message = "支付方式不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "支付方式不能为空", groups = { AddGroup.class, EditGroup.class }) private Long paymentMethod; /** * 交货天数 */ - @NotNull(message = "交货天数不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotNull(message = "交货天数不能为空", groups = {AddGroup.class, EditGroup.class}) private Long estDlvDays; /** * 订单状态 */ - @NotBlank(message = "订单状态不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotBlank(message = "订单状态不能为空", groups = {AddGroup.class, EditGroup.class}) private String orderStatus; /** * 交货时间 */ - @NotNull(message = "交货时间不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotNull(message = "交货时间不能为空", groups = {AddGroup.class, EditGroup.class}) private Date deliveryTime; /** * 订单交付变动天数 */ - @NotNull(message = "订单交付变动天数不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "订单交付变动天数不能为空", groups = { AddGroup.class, EditGroup.class }) private Long dlvTimeVar; 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 new file mode 100644 index 0000000..ec7bcb2 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizSendOrderBo.java @@ -0,0 +1,99 @@ +package org.asinkj.amz.domain.bo; + +import org.asinkj.amz.domain.BizSendOrder; +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.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 供应商创建的发货单业务对象 biz_send_order + * + * @author shuo hu + * @date 2025-05-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BizSendOrder.class, reverseConvertGenerate = false) +public class BizSendOrderBo extends BaseEntity { + + /** + * 主键ID + */ + private Long id; + + /** + * 采购单号 + */ + @NotBlank(message = "采购单号不能为空", groups = {AddGroup.class, EditGroup.class}) + private String orderSn; + + /** + * 发货日期 + */ + @NotNull(message = "发货日期不能为空", groups = {AddGroup.class, EditGroup.class}) + private Date sendDate; + + /** + * 采购店铺 + */ +// @NotBlank(message = "采购店铺不能为空", groups = { AddGroup.class, EditGroup.class }) + private String storeName; + + /** + * 产品名称 + */ + @NotBlank(message = "产品名称不能为空", groups = {AddGroup.class, EditGroup.class}) + private String productName; + + /** + * 发货数量 + */ + @NotNull(message = "发货数量不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long quantitySend; + + /** + * 单箱产品数量 + */ + @NotNull(message = "单箱产品数量不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long quantityPerBox; + + /** + * 箱数 + */ + @NotNull(message = "箱数不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long boxCount; + + /** + * 箱子尺寸 + */ + @NotBlank(message = "箱子尺寸不能为空", groups = {AddGroup.class, EditGroup.class}) + private String boxDimensions; + + /** + * 单箱重量 + */ + @NotNull(message = "单箱重量不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long weightPerBox; + + /** + * 实际采购店铺 + */ +// @NotBlank(message = "实际采购店铺不能为空", groups = { AddGroup.class, EditGroup.class }) + private String realStoreName; + + /** + * 发货状态(pending=未发货,confirm=确认发货, processing=发货中,completed=发货完成) + */ +// @NotBlank(message = "发货状态(pending=未发货,confirm=确认发货, processing=发货中,completed=发货完成)不能为空", groups = {AddGroup.class, EditGroup.class}) + private String sendStatus; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipForwardBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipForwardBo.java new file mode 100644 index 0000000..6787308 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipForwardBo.java @@ -0,0 +1,138 @@ +package org.asinkj.amz.domain.bo; + +import org.asinkj.amz.domain.BizShipForward; +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.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * 货件转发业务对象 biz_ship_forward + * + * @author shuo hu + * @date 2025-05-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BizShipForward.class, reverseConvertGenerate = false) +public class BizShipForwardBo extends BaseEntity { + + /** + * $column.columnComment + */ +// @NotNull(message = "$column.columnComment不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long id; + + /** + * 采购单号 + */ + @NotBlank(message = "采购单号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String orderSn; + + /** + * 采购店铺名称 + */ + @NotBlank(message = "采购店铺名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String storeName; + + /** + * 产品唯一标识码 + */ +// @NotBlank(message = "产品唯一标识码不能为空", 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 Long quantitySend; + + /** + * 发货供应商名称 + */ + @NotBlank(message = "发货供应商名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String outSupplierName; + + /** + * 发货供应商系统ID + */ + @NotNull(message = "发货供应商系统ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long outSupplierId; + + /** + * 收货供应商名称 + */ + @NotBlank(message = "收货供应商名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String inSupplierName; + + /** + * 收货供应商系统ID + */ + @NotNull(message = "收货供应商系统ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long inSupplierId; + + /** + * 计划发货起始时间 + */ + @NotNull(message = "计划发货起始时间不能为空", groups = { AddGroup.class, EditGroup.class }) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date shipmentStart; + + /** + * 计划发货截止时间 + */ + @NotNull(message = "计划发货截止时间不能为空", groups = { AddGroup.class, EditGroup.class }) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date shipmentEnd; + + /** + * 订单跟进人姓名 + */ +// @NotBlank(message = "订单跟进人姓名不能为空", groups = { AddGroup.class, EditGroup.class }) + private String trackerName; + + /** + * 订单跟进人系统ID + */ +// @NotNull(message = "订单跟进人系统ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long trackerId; + + /** + * 转发状态(pending=未转发,processing=转发中,completed=转发完成) + */ +// @NotBlank(message = "转发状态(pending=未转发,processing=转发中,completed=转发完成)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fwdStatus; + + /** + * 发货时间 + */ +// @NotNull(message = "发货时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date sendTime; + + + /** + * 采购单子项ID + */ + @NotNull(message = "采购单子项ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long orderDetailId; + + + @NotNull(message = "请求类型") + private String type; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizPurchaseOrderVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizPurchaseOrderVo.java index 04f4534..a58dff2 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizPurchaseOrderVo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizPurchaseOrderVo.java @@ -5,6 +5,8 @@ import com.fasterxml.jackson.annotation.JsonFormat; import org.asinkj.amz.domain.BizPurchaseOrder; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import org.asinkj.amz.domain.BizPurchaseOrderItem; +import org.asinkj.amz.domain.BizShipForward; import org.asinkj.common.excel.annotation.ExcelDictFormat; import org.asinkj.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; @@ -13,7 +15,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -54,6 +56,9 @@ public class BizPurchaseOrderVo implements Serializable { @ExcelProperty(value = "供应商名称") private String supplierName; + @ExcelProperty(value = "店铺名称") + private String storeName; + /** * 采购员ID */ @@ -333,4 +338,11 @@ public class BizPurchaseOrderVo implements Serializable { private Long dlvTimeVar; + + + private List items; + + private List forwardList; + + } 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 new file mode 100644 index 0000000..ea2d2d4 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizSendOrderVo.java @@ -0,0 +1,107 @@ +package org.asinkj.amz.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.asinkj.amz.domain.BizSendOrder; +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_order + * + * @author shuo hu + * @date 2025-05-14 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BizSendOrder.class) +public class BizSendOrderVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 采购单号 + */ + @ExcelProperty(value = "采购单号") + private String orderSn; + + /** + * 发货日期 + */ + @ExcelProperty(value = "发货日期") + private Date sendDate; + + /** + * 采购店铺 + */ + @ExcelProperty(value = "采购店铺") + private String storeName; + + /** + * 产品名称 + */ + @ExcelProperty(value = "产品名称") + private String productName; + + /** + * 发货数量 + */ + @ExcelProperty(value = "发货数量") + private Long quantitySend; + + /** + * 单箱产品数量 + */ + @ExcelProperty(value = "单箱产品数量") + private Long quantityPerBox; + + /** + * 箱数 + */ + @ExcelProperty(value = "箱数") + private Long boxCount; + + /** + * 箱子尺寸 + */ + @ExcelProperty(value = "箱子尺寸") + private String boxDimensions; + + /** + * 单箱重量 + */ + @ExcelProperty(value = "单箱重量") + private Long weightPerBox; + + /** + * 实际采购店铺 + */ + @ExcelProperty(value = "实际采购店铺") + private String realStoreName; + + /** + * 发货状态(pending=未发货,confirm=确认发货, processing=发货中,completed=发货完成) + */ + @ExcelProperty(value = "发货状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "send_status") + private String sendStatus; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipForwardVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipForwardVo.java new file mode 100644 index 0000000..471a4fd --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizShipForwardVo.java @@ -0,0 +1,138 @@ +package org.asinkj.amz.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.asinkj.amz.domain.BizShipForward; +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_ship_forward + * + * @author shuo hu + * @date 2025-05-13 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BizShipForward.class) +public class BizShipForwardVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * $column.columnComment + */ + @ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "$column.readConverterExp()") + private Long id; + + /** + * 采购单号 + */ + @ExcelProperty(value = "采购单号") + private String orderSn; + + /** + * 采购店铺名称 + */ + @ExcelProperty(value = "采购店铺名称") + private String storeName; + + /** + * 产品唯一标识码 + */ + @ExcelProperty(value = "产品唯一标识码") + private String sku; + + /** + * 产品全称 + */ + @ExcelProperty(value = "产品全称") + private String productName; + + /** + * 实际发货数量 + */ + @ExcelProperty(value = "实际发货数量") + private Long quantitySend; + + /** + * 发货供应商名称 + */ + @ExcelProperty(value = "发货供应商名称") + private String outSupplierName; + + /** + * 发货供应商系统ID + */ + @ExcelProperty(value = "发货供应商系统ID") + private Long outSupplierId; + + /** + * 收货供应商名称 + */ + @ExcelProperty(value = "收货供应商名称") + private String inSupplierName; + + /** + * 收货供应商系统ID + */ + @ExcelProperty(value = "收货供应商系统ID") + private Long inSupplierId; + + /** + * 计划发货起始时间 + */ + @ExcelProperty(value = "计划发货起始时间") + private Date shipmentStart; + + /** + * 计划发货截止时间 + */ + @ExcelProperty(value = "计划发货截止时间") + private Date shipmentEnd; + + /** + * 订单跟进人姓名 + */ + @ExcelProperty(value = "订单跟进人姓名") + private String trackerName; + + /** + * 订单跟进人系统ID + */ + @ExcelProperty(value = "订单跟进人系统ID") + private Long trackerId; + + /** + * 转发状态(pending=未转发,processing=转发中,completed=转发完成) + */ + @ExcelProperty(value = "转发状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "pending=未转发,processing=转发中,completed=转发完成") + private String fwdStatus; + + /** + * 发货时间 + */ + @ExcelProperty(value = "发货时间") + private Date sendTime; + + /** + * 采购单子项ID + */ + @ExcelProperty(value = "采购单子项ID") + private Long orderDetailId; + + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapStruct/DateConvert.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapStruct/DateConvert.java new file mode 100644 index 0000000..353e140 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapStruct/DateConvert.java @@ -0,0 +1,25 @@ +package org.asinkj.amz.mapStruct; + +import cn.hutool.core.date.DateUtil; +import org.mapstruct.Named; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Component +@Named("DateConvert") +public class DateConvert { + + + @Named("stringToDate") + public Date stringToDate(String dateStr) { + try { + System.out.printf("dateStr:"+dateStr); + return DateUtil.parse(dateStr, "yyyy-MM-dd HH:mm:ss"); + } catch (Exception e) { + return null; // 或抛出自定义异常 + } + } + + +} 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 new file mode 100644 index 0000000..6114e14 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizSendOrderMapper.java @@ -0,0 +1,15 @@ +package org.asinkj.amz.mapper; + +import org.asinkj.amz.domain.BizSendOrder; +import org.asinkj.amz.domain.vo.BizSendOrderVo; +import org.asinkj.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 供应商创建的发货单Mapper接口 + * + * @author shuo hu + * @date 2025-05-14 + */ +public interface BizSendOrderMapper extends BaseMapperPlus { + +} diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipForwardMapper.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipForwardMapper.java new file mode 100644 index 0000000..d8bfeb3 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipForwardMapper.java @@ -0,0 +1,15 @@ +package org.asinkj.amz.mapper; + +import org.asinkj.amz.domain.BizShipForward; +import org.asinkj.amz.domain.vo.BizShipForwardVo; +import org.asinkj.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 货件转发Mapper接口 + * + * @author shuo hu + * @date 2025-05-13 + */ +public interface BizShipForwardMapper extends BaseMapperPlus { + +} 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 new file mode 100644 index 0000000..064a386 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizSendOrderService.java @@ -0,0 +1,69 @@ +package org.asinkj.amz.service; + +import org.asinkj.amz.domain.BizSendOrder; +import org.asinkj.amz.domain.vo.BizSendOrderVo; +import org.asinkj.amz.domain.bo.BizSendOrderBo; +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-05-14 + */ +public interface IBizSendOrderService { + + /** + * 查询供应商创建的发货单 + * + * @param id 主键 + * @return 供应商创建的发货单 + */ + BizSendOrderVo queryById(Long id); + + /** + * 分页查询供应商创建的发货单列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 供应商创建的发货单分页列表 + */ + TableDataInfo queryPageList(BizSendOrderBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的供应商创建的发货单列表 + * + * @param bo 查询条件 + * @return 供应商创建的发货单列表 + */ + List queryList(BizSendOrderBo bo); + + /** + * 新增供应商创建的发货单 + * + * @param bo 供应商创建的发货单 + * @return 是否新增成功 + */ + Boolean insertByBo(BizSendOrderBo bo); + + /** + * 修改供应商创建的发货单 + * + * @param bo 供应商创建的发货单 + * @return 是否修改成功 + */ + Boolean updateByBo(BizSendOrderBo 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/IBizShipForwardService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipForwardService.java new file mode 100644 index 0000000..e38791e --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipForwardService.java @@ -0,0 +1,69 @@ +package org.asinkj.amz.service; + +import org.asinkj.amz.domain.BizShipForward; +import org.asinkj.amz.domain.vo.BizShipForwardVo; +import org.asinkj.amz.domain.bo.BizShipForwardBo; +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-05-13 + */ +public interface IBizShipForwardService { + + /** + * 查询货件转发 + * + * @param id 主键 + * @return 货件转发 + */ + BizShipForwardVo queryById(Long id); + + /** + * 分页查询货件转发列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 货件转发分页列表 + */ + TableDataInfo queryPageList(BizShipForwardBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的货件转发列表 + * + * @param bo 查询条件 + * @return 货件转发列表 + */ + List queryList(BizShipForwardBo bo); + + /** + * 新增货件转发 + * + * @param bo 货件转发 + * @return 是否新增成功 + */ + Boolean insertByBo(BizShipForwardBo bo); + + /** + * 修改货件转发 + * + * @param bo 货件转发 + * @return 是否修改成功 + */ + Boolean updateByBo(BizShipForwardBo 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/ISysAmazonStoreService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/ISysAmazonStoreService.java index 8550c47..85de7ca 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/ISysAmazonStoreService.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/ISysAmazonStoreService.java @@ -80,6 +80,8 @@ public interface ISysAmazonStoreService { void pullPurchaseOrderData(String startDate, String endDate, LingxinCallback lingxinCallback); + void updatePurchaseOrderSeller(String startDate, String endDate, LingxinCallback lingxinCallback); + void pullAmzStaData(String startDate, String endDate, LingxinCallback lingxinCallback); void pullAmzBoxData() throws Exception; 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 1bc641b..d1e6e57 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 @@ -1,5 +1,12 @@ package org.asinkj.amz.service.impl; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.collection.CollectionUtil; +import org.asinkj.amz.domain.BizPurchaseOrderItem; +import org.asinkj.amz.domain.BizShipForward; +import org.asinkj.amz.mapper.BizPurchaseOrderItemMapper; +import org.asinkj.amz.mapper.BizShipForwardMapper; +import org.asinkj.amz.service.IBizPurchaseOrderItemService; import org.asinkj.common.core.utils.MapstructUtils; import org.asinkj.common.core.utils.StringUtils; import org.asinkj.common.mybatis.core.page.TableDataInfo; @@ -8,6 +15,7 @@ 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.asinkj.common.satoken.utils.LoginHelper; import org.springframework.stereotype.Service; import org.asinkj.amz.domain.bo.BizPurchaseOrderBo; import org.asinkj.amz.domain.vo.BizPurchaseOrderVo; @@ -16,10 +24,7 @@ import org.asinkj.amz.mapper.BizPurchaseOrderMapper; import org.asinkj.amz.service.IBizPurchaseOrderService; import javax.annotation.Resource; -import java.util.List; -import java.util.Map; -import java.util.Collection; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; /** @@ -34,8 +39,12 @@ public class BizPurchaseOrderServiceImpl implements IBizPurchaseOrderService { private final BizPurchaseOrderMapper baseMapper; -// @Resource -// private MapstructUtils mapstructUtils; + @Resource + private BizPurchaseOrderItemMapper purchaseOrderItemMapper; + + @Resource + private BizShipForwardMapper bizForwardMapper; + ; /** * 查询采购单主 @@ -44,7 +53,7 @@ public class BizPurchaseOrderServiceImpl implements IBizPurchaseOrderService { * @return 采购单主 */ @Override - public BizPurchaseOrderVo queryById(String orderSn){ + public BizPurchaseOrderVo queryById(String orderSn) { return baseMapper.selectVoById(orderSn); } @@ -62,7 +71,24 @@ public class BizPurchaseOrderServiceImpl implements IBizPurchaseOrderService { List records = result.getRecords(); Set orderSnSet = records.stream().map(BizPurchaseOrderVo::getOrderSn).collect(Collectors.toSet()); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(CollectionUtil.isNotEmpty(orderSnSet), BizPurchaseOrderItem::getOrderSn, orderSnSet); + Map> itemMaps = purchaseOrderItemMapper.selectList(lambdaQueryWrapper).stream().collect(Collectors.groupingBy(BizPurchaseOrderItem::getOrderSn)); + + LambdaQueryWrapper bizShipForwardWrapper = new LambdaQueryWrapper<>(); + bizShipForwardWrapper.in(CollectionUtil.isNotEmpty(orderSnSet), BizShipForward::getOrderSn, orderSnSet); + Map> bizShipForwardMap = bizForwardMapper.selectList(bizShipForwardWrapper).stream().collect(Collectors.groupingBy(BizShipForward::getOrderSn)); + + for (BizPurchaseOrderVo record : records) { + List bizPurchaseOrderItems = itemMaps.get(record.getOrderSn()); + if (CollectionUtil.isNotEmpty(bizPurchaseOrderItems)) { + record.setItems(bizPurchaseOrderItems); + } + List bizShipForwards = bizShipForwardMap.get(record.getOrderSn()); + if (CollectionUtil.isNotEmpty(bizShipForwards)) { + record.setForwardList(bizShipForwards); + } } return TableDataInfo.build(result); @@ -132,6 +158,11 @@ public class BizPurchaseOrderServiceImpl implements IBizPurchaseOrderService { lqw.eq(StringUtils.isNotBlank(bo.getOrderStatus()), BizPurchaseOrder::getOrderStatus, bo.getOrderStatus()); lqw.eq(bo.getDeliveryTime() != null, BizPurchaseOrder::getDeliveryTime, bo.getDeliveryTime()); lqw.eq(bo.getDlvTimeVar() != null, BizPurchaseOrder::getDlvTimeVar, bo.getDlvTimeVar()); + if (StpUtil.hasRole("gongying")) { + + lqw.eq(BizPurchaseOrder::getSupplierName, Objects.requireNonNull(LoginHelper.getLoginUser()).getNickname()); + + } return lqw; } @@ -168,7 +199,7 @@ public class BizPurchaseOrderServiceImpl implements IBizPurchaseOrderService { /** * 保存前的数据校验 */ - private void validEntityBeforeSave(BizPurchaseOrder entity){ + private void validEntityBeforeSave(BizPurchaseOrder entity) { //TODO 做一些数据校验,如唯一约束 } @@ -181,7 +212,7 @@ public class BizPurchaseOrderServiceImpl implements IBizPurchaseOrderService { */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; 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 new file mode 100644 index 0000000..935ec63 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizSendOrderServiceImpl.java @@ -0,0 +1,139 @@ +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.BizSendOrderBo; +import org.asinkj.amz.domain.vo.BizSendOrderVo; +import org.asinkj.amz.domain.BizSendOrder; +import org.asinkj.amz.mapper.BizSendOrderMapper; +import org.asinkj.amz.service.IBizSendOrderService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 供应商创建的发货单Service业务层处理 + * + * @author shuo hu + * @date 2025-05-14 + */ +@RequiredArgsConstructor +@Service +public class BizSendOrderServiceImpl implements IBizSendOrderService { + + private final BizSendOrderMapper baseMapper; + + /** + * 查询供应商创建的发货单 + * + * @param id 主键 + * @return 供应商创建的发货单 + */ + @Override + public BizSendOrderVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询供应商创建的发货单列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 供应商创建的发货单分页列表 + */ + @Override + public TableDataInfo queryPageList(BizSendOrderBo 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(BizSendOrderBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(BizSendOrderBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getOrderSn()), BizSendOrder::getOrderSn, bo.getOrderSn()); + lqw.eq(bo.getSendDate() != null, BizSendOrder::getSendDate, bo.getSendDate()); + lqw.like(StringUtils.isNotBlank(bo.getStoreName()), BizSendOrder::getStoreName, bo.getStoreName()); + lqw.like(StringUtils.isNotBlank(bo.getProductName()), BizSendOrder::getProductName, bo.getProductName()); + 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.getBoxDimensions()), BizSendOrder::getBoxDimensions, bo.getBoxDimensions()); + lqw.eq(bo.getWeightPerBox() != null, BizSendOrder::getWeightPerBox, bo.getWeightPerBox()); + lqw.like(StringUtils.isNotBlank(bo.getRealStoreName()), BizSendOrder::getRealStoreName, bo.getRealStoreName()); + lqw.eq(StringUtils.isNotBlank(bo.getSendStatus()), BizSendOrder::getSendStatus, bo.getSendStatus()); + return lqw; + } + + /** + * 新增供应商创建的发货单 + * + * @param bo 供应商创建的发货单 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(BizSendOrderBo bo) { + BizSendOrder add = MapstructUtils.convert(bo, BizSendOrder.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改供应商创建的发货单 + * + * @param bo 供应商创建的发货单 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BizSendOrderBo bo) { + BizSendOrder update = MapstructUtils.convert(bo, BizSendOrder.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BizSendOrder 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/BizShipForwardServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipForwardServiceImpl.java new file mode 100644 index 0000000..378f17b --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipForwardServiceImpl.java @@ -0,0 +1,169 @@ +package org.asinkj.amz.service.impl; + +import org.apache.dubbo.config.annotation.DubboReference; +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.asinkj.common.satoken.utils.LoginHelper; +import org.asinkj.system.api.RemoteUserService; +import org.asinkj.system.api.model.LoginUser; +import org.springframework.stereotype.Service; +import org.asinkj.amz.domain.bo.BizShipForwardBo; +import org.asinkj.amz.domain.vo.BizShipForwardVo; +import org.asinkj.amz.domain.BizShipForward; +import org.asinkj.amz.mapper.BizShipForwardMapper; +import org.asinkj.amz.service.IBizShipForwardService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 货件转发Service业务层处理 + * + * @author shuo hu + * @date 2025-05-13 + */ +@RequiredArgsConstructor +@Service +public class BizShipForwardServiceImpl implements IBizShipForwardService { + + private final BizShipForwardMapper baseMapper; + + + @DubboReference + private RemoteUserService remoteUserService; + + /** + * 查询货件转发 + * + * @param id 主键 + * @return 货件转发 + */ + @Override + public BizShipForwardVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询货件转发列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 货件转发分页列表 + */ + @Override + public TableDataInfo queryPageList(BizShipForwardBo 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(BizShipForwardBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(BizShipForwardBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getOrderSn()), BizShipForward::getOrderSn, bo.getOrderSn()); + lqw.like(StringUtils.isNotBlank(bo.getStoreName()), BizShipForward::getStoreName, bo.getStoreName()); + lqw.eq(StringUtils.isNotBlank(bo.getSku()), BizShipForward::getSku, bo.getSku()); + lqw.like(StringUtils.isNotBlank(bo.getProductName()), BizShipForward::getProductName, bo.getProductName()); + lqw.eq(bo.getQuantitySend() != null, BizShipForward::getQuantitySend, bo.getQuantitySend()); + lqw.like(StringUtils.isNotBlank(bo.getOutSupplierName()), BizShipForward::getOutSupplierName, bo.getOutSupplierName()); + lqw.eq(bo.getOutSupplierId() != null, BizShipForward::getOutSupplierId, bo.getOutSupplierId()); + lqw.like(StringUtils.isNotBlank(bo.getInSupplierName()), BizShipForward::getInSupplierName, bo.getInSupplierName()); + lqw.eq(bo.getInSupplierId() != null, BizShipForward::getInSupplierId, bo.getInSupplierId()); + lqw.eq(bo.getShipmentStart() != null, BizShipForward::getShipmentStart, bo.getShipmentStart()); + lqw.eq(bo.getShipmentEnd() != null, BizShipForward::getShipmentEnd, bo.getShipmentEnd()); + lqw.like(StringUtils.isNotBlank(bo.getTrackerName()), BizShipForward::getTrackerName, bo.getTrackerName()); + lqw.eq(bo.getTrackerId() != null, BizShipForward::getTrackerId, bo.getTrackerId()); + lqw.eq(StringUtils.isNotBlank(bo.getFwdStatus()), BizShipForward::getFwdStatus, bo.getFwdStatus()); + lqw.eq(bo.getSendTime() != null, BizShipForward::getSendTime, bo.getSendTime()); + if (!LoginHelper.isSuperAdmin()) { + if ("shipForwardOut".equals(bo.getType())) { + lqw.eq(BizShipForward::getOutSupplierId, LoginHelper.getUserId()) + .eq(BizShipForward::getFwdStatus, "pending"); + } else if ("shipForwardIn".equals(bo.getType())) { + lqw.eq(BizShipForward::getInSupplierId, LoginHelper.getUserId()) + .eq(BizShipForward::getFwdStatus, "processing"); + } else if ("shipForward".equals(bo.getType())) { + lqw.eq(BizShipForward::getTrackerId, LoginHelper.getUserId()); + } + } + + return lqw; + } + + /** + * 新增货件转发 + * + * @param bo 货件转发 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(BizShipForwardBo bo) { + BizShipForward add = MapstructUtils.convert(bo, BizShipForward.class); + add.setTrackerId(LoginHelper.getUserId()); + add.setTrackerName(LoginHelper.getLoginUser().getNickname()); + + LoginUser userInfoWithNickName = remoteUserService.getUserInfoWithNickName(bo.getOutSupplierName()); + add.setOutSupplierId(userInfoWithNickName.getUserId()); + + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改货件转发 + * + * @param bo 货件转发 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BizShipForwardBo bo) { + BizShipForward update = MapstructUtils.convert(bo, BizShipForward.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BizShipForward 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/SysAmazonStoreServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/SysAmazonStoreServiceImpl.java index 2bce17d..57e8f4e 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 @@ -16,12 +16,8 @@ import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; import org.apache.dubbo.config.annotation.DubboReference; -import org.asinkj.amz.domain.BizShipmentItem; -import org.asinkj.amz.domain.BizShipmentPlan; -import org.asinkj.amz.domain.BizShipmentTracking; -import org.asinkj.amz.mapper.BizShipmentItemMapper; -import org.asinkj.amz.mapper.BizShipmentPlanMapper; -import org.asinkj.amz.mapper.BizShipmentTrackingMapper; +import org.asinkj.amz.domain.*; +import org.asinkj.amz.mapper.*; import org.asinkj.amz.service.LingxinCallback; import org.asinkj.asinking.entity.*; import org.asinkj.asinking.okhttp.AKRestClientBuild; @@ -42,8 +38,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.asinkj.amz.domain.bo.SysAmazonStoreBo; import org.asinkj.amz.domain.vo.SysAmazonStoreVo; -import org.asinkj.amz.domain.SysAmazonStore; -import org.asinkj.amz.mapper.SysAmazonStoreMapper; import org.asinkj.amz.service.ISysAmazonStoreService; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestAttributes; @@ -86,6 +80,12 @@ public class SysAmazonStoreServiceImpl implements ISysAmazonStoreService { @Resource private BizShipmentTrackingMapper bizShipmentTrackingMapper; + @Resource + private BizPurchaseOrderMapper bizPurchaseOrderMapper; + + @Resource + private BizPurchaseOrderItemMapper bizPurchaseOrderItemMapper; + @Value("${lingxing.appId}") private String appId; @@ -517,7 +517,7 @@ public class SysAmazonStoreServiceImpl implements ISysAmazonStoreService { queryParam.put("start_date", startDate); queryParam.put("end_date", endDate); - + RequestAttributes ra = RequestContextHolder.getRequestAttributes(); HttpUtil.postWithParams("/erp/sc/routing/data/local_inventory/purchaseOrderList", queryParam, new Callback() { @Override public void onFailure(@NotNull Call call, @NotNull IOException e) { @@ -526,16 +526,164 @@ public class SysAmazonStoreServiceImpl implements ISysAmazonStoreService { @Override public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - String string = response.body().string(); - log.info("onResponse+{}", string); + RequestContextHolder.setRequestAttributes(ra); - JSONObject jsonObject = JSONObject.parse(string); - JSONArray data = jsonObject.getJSONArray("data"); + try { + String string = response.body().string(); + log.info("onResponse+{}", string); + + JSONObject jsonObject = JSONObject.parse(string); + JSONArray data = jsonObject.getJSONArray("data"); - List list = data.toList(PurchaseOrderResponse.OrderData.class); - log.info("list:{}", list); + List list = data.toList(PurchaseOrderResponse.OrderData.class); + log.info("list:{}", list); + if (CollectionUtil.isEmpty(list)) { + log.info("未获取到采购订单"); + return; + } + list = list.stream().filter(c -> !"外采".equals(c.getSupplierName())).collect(Collectors.toList()); + Set orderSns = list.stream().map(PurchaseOrderResponse.OrderData::getOrderSn).collect(Collectors.toSet()); + Set storeList = new HashSet<>(); + for (PurchaseOrderResponse.OrderData orderData : list) { + + PurchaseOrderResponse.OrderData.ItemListItem itemListItem = orderData.getItemList().get(0); + storeList.add(itemListItem.getSid()); + + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(SysAmazonStore::getSid, storeList); + + Map collect = baseMapper.selectList(queryWrapper).stream().collect(Collectors.toMap(SysAmazonStore::getSid, Function.identity())); + + + List orders = new ArrayList<>(); +// List orders = MapstructUtils.convert(list, BizPurchaseOrder.class); + List bizPurchaseOrderItems = new ArrayList<>(); + for (PurchaseOrderResponse.OrderData orderData : list) { + BizPurchaseOrder order = MapstructUtils.convert(orderData, BizPurchaseOrder.class); + List convert1 = MapstructUtils.convert(orderData.getItemList(), BizPurchaseOrderItem.class); + convert1.forEach(item -> item.setOrderSn(orderData.getOrderSn())); + BizPurchaseOrderItem bizPurchaseOrderItem = convert1.get(0); + storeList.add(bizPurchaseOrderItem.getSid()); + bizPurchaseOrderItems.addAll(convert1); + orders.add(order); + SysAmazonStore sysAmazonStore = collect.get(bizPurchaseOrderItem.getSid()); + if (ObjectUtil.isNotEmpty(sysAmazonStore)) { + order.setStoreName(sysAmazonStore.getStoreName()); + } + } + + + if (CollectionUtil.isNotEmpty(orders)) { + bizPurchaseOrderMapper.insertOrUpdateBatch(orders); + } + if (CollectionUtil.isNotEmpty(bizPurchaseOrderItems)) { + bizPurchaseOrderItemMapper.insertOrUpdateBatch(bizPurchaseOrderItems); + } + + } finally { + RequestContextHolder.resetRequestAttributes(); + } + } + }); + } + + + @Override + public void updatePurchaseOrderSeller(String startDate, String endDate, LingxinCallback lingxinCallback) { + + Map queryParam = new HashMap<>(); + queryParam.put("offset", 0); + queryParam.put("length", 500); + queryParam.put("search_field_time", "create_time"); + + queryParam.put("start_date", startDate); + queryParam.put("end_date", endDate); + + RequestAttributes ra = RequestContextHolder.getRequestAttributes(); + HttpUtil.postWithParams("/erp/sc/routing/purchase/purchaseOutsourceOrder/getOrders", queryParam, new Callback() { + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + + } + + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + RequestContextHolder.setRequestAttributes(ra); + + try { + String string = response.body().string(); + log.info("string:{}", string); + JSONObject jsonObject = JSONObject.parse(string); + JSONObject data = jsonObject.getJSONObject("data"); + if (ObjectUtil.isEmpty(data)) { + log.info("未获取到库存"); + return; + } + + JSONArray list = data.getJSONArray("list"); + if (CollectionUtil.isEmpty(list)) { + log.info("未获取到库存"); + return; + } + log.info("data:{}", list); + List listData = list.toList(PurchaseOutsourceResponse.ListElement.class); + log.info("list:{}", listData); + listData = listData.stream().filter(c -> !"外采".equals(c.getSupplierName())).collect(Collectors.toList()); + List orderSns = new ArrayList<>(); + for (PurchaseOutsourceResponse.ListElement listDatum : listData) { + List item = listDatum.getItem(); + Set order = item.stream().map(PurchaseOutsourceResponse.Item::getPurchaseOrderSn).collect(Collectors.toSet()); + orderSns.addAll(order); + } + Map resultMap = listData.stream() + .flatMap(listElement -> + listElement.getItem().stream() // 遍历每个 ListElement 的 item 列表 + .filter(item -> item.getPurchaseOrderSn() != null) // 过滤掉 purchaseOrderSn 为 null 的项 + .map(item -> new java.util.AbstractMap.SimpleEntry<>( + item.getPurchaseOrderSn(), + listElement + )) + ) + .collect(Collectors.toMap( + Map.Entry::getKey, + Map.Entry::getValue, + (existingValue, newValue) -> existingValue + )); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(BizPurchaseOrder::getOrderSn, orderSns); + List purchaseOrders = bizPurchaseOrderMapper.selectList(queryWrapper); + purchaseOrders = purchaseOrders.stream().filter(c -> StrUtil.isBlank(c.getStoreName())).collect(Collectors.toList()); + for (BizPurchaseOrder purchaseOrder : purchaseOrders) { + PurchaseOutsourceResponse.ListElement listElement = resultMap.get(purchaseOrder.getOrderSn()); + if (ObjectUtil.isNotEmpty(listElement)) { + purchaseOrder.setStoreName(listElement.getSellerName()); + } + } + bizPurchaseOrderMapper.updateById(purchaseOrders); +// +// Set orderSns = list.stream().map(PurchaseOrderResponse.OrderData::getOrderSn).collect(Collectors.toSet()); +// +// +// List orders = MapstructUtils.convert(list, BizPurchaseOrder.class); +// List bizPurchaseOrderItems = new ArrayList<>(); +// for (PurchaseOrderResponse.OrderData orderData : list) { +// List convert1 = MapstructUtils.convert(orderData.getItemList(), BizPurchaseOrderItem.class); +// convert1.forEach(item -> item.setOrderSn(orderData.getOrderSn())); +// bizPurchaseOrderItems.addAll(convert1); +// } +// if (CollectionUtil.isNotEmpty(orders)) { +// bizPurchaseOrderMapper.insertOrUpdateBatch(orders); +// } +// if (CollectionUtil.isNotEmpty(bizPurchaseOrderItems)) { +// bizPurchaseOrderItemMapper.insertOrUpdateBatch(bizPurchaseOrderItems); +// } + + } finally { + RequestContextHolder.resetRequestAttributes(); + } } }); } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/PurchaseOrderResponse.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/PurchaseOrderResponse.java index 6df64b9..4a8e8f8 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/PurchaseOrderResponse.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/PurchaseOrderResponse.java @@ -1,7 +1,14 @@ package org.asinkj.asinking.entity; +import io.github.linpeilie.annotations.AutoMapper; +import io.github.linpeilie.annotations.AutoMapping; import lombok.Data; import com.fasterxml.jackson.annotation.JsonProperty; +import org.asinkj.amz.domain.BizLogisticsChannel; +import org.asinkj.amz.domain.BizPurchaseOrder; +import org.asinkj.amz.domain.BizPurchaseOrderItem; +import org.asinkj.amz.mapStruct.DateConvert; + import java.math.BigDecimal; import java.util.List; @@ -22,6 +29,7 @@ public class PurchaseOrderResponse { private List data; @Data + @AutoMapper(target = BizPurchaseOrder.class, uses = DateConvert.class) public static class OrderData { @JsonProperty("order_sn") private String orderSn; @@ -49,9 +57,11 @@ public class PurchaseOrderResponse { private String lastRealname; @JsonProperty("create_time") + @AutoMapping(qualifiedByName = "stringToDate") private String createTime; @JsonProperty("order_time") + @AutoMapping(qualifiedByName = "stringToDate") private String orderTime; @JsonProperty("payment") @@ -61,12 +71,14 @@ public class PurchaseOrderResponse { private Integer auditorUid; @JsonProperty("auditor_time") + @AutoMapping(qualifiedByName = "stringToDate") private String auditorTime; @JsonProperty("last_uid") private Integer lastUid; @JsonProperty("last_time") + @AutoMapping(qualifiedByName = "stringToDate") private String lastTime; @JsonProperty("reason") @@ -148,6 +160,7 @@ public class PurchaseOrderResponse { private Integer quantityReceive; @JsonProperty("update_time") + @AutoMapping(qualifiedByName = "stringToDate") private String updateTime; @JsonProperty("purchaser_id") @@ -188,6 +201,7 @@ public class PurchaseOrderResponse { } @Data + @AutoMapper(target = BizPurchaseOrderItem.class, uses = DateConvert.class) public static class ItemListItem { @JsonProperty("id") private Integer id; @@ -214,7 +228,7 @@ public class PurchaseOrderResponse { private String fnsku; @JsonProperty("sid") - private String sid; + private Long sid; @JsonProperty("model") private String model; @@ -250,6 +264,7 @@ public class PurchaseOrderResponse { private Integer quantityQcPrepare; @JsonProperty("expect_arrive_time") + @AutoMapping(qualifiedByName = "stringToDate") private String expectArriveTime; @JsonProperty("remark") diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/PurchaseOutsourceResponse.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/PurchaseOutsourceResponse.java new file mode 100644 index 0000000..ccf43ac --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/asinking/entity/PurchaseOutsourceResponse.java @@ -0,0 +1,131 @@ +package org.asinkj.asinking.entity; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import java.util.List; + +@Data +public class PurchaseOutsourceResponse { + @JsonProperty("code") + private Integer code; + + @JsonProperty("message") + private String message; + + @JsonProperty("error_details") + private List errorDetails; + + @JsonProperty("request_id") + private String requestId; + + @JsonProperty("response_time") + private String responseTime; + + @JsonProperty("data") + private ResData data; + + @JsonProperty("total") + private Integer total; + + @Data + public static class ResData { + @JsonProperty("list") + private List list; + + @JsonProperty("total") + private Integer total; + } + + @Data + public static class ListElement { + @JsonProperty("order_sn") + private String orderSn; + + @JsonProperty("warehouse_name") + private String warehouseName; + + @JsonProperty("outsource_warehouse_name") + private String outsourceWarehouseName; + + @JsonProperty("supplier_name") + private String supplierName; + + @JsonProperty("create_time") + private String createTime; + + @JsonProperty("status_text") + private String statusText; + + @JsonProperty("create_realname") + private String createRealname; + + @JsonProperty("ptp_sn") + private String ptpSn; + + @JsonProperty("product_name") + private String productName; + + @JsonProperty("sku") + private String sku; + + @JsonProperty("fnsku") + private String fnsku; + + @JsonProperty("outsource_quantity") + private Integer outsourceQuantity; + + @JsonProperty("receive_quantity") + private Integer receiveQuantity; + + @JsonProperty("expect_arrive_time") + private String expectArriveTime; + + @JsonProperty("msku") + private List msku; + + @JsonProperty("plan_sn") + private List planSn; + + @JsonProperty("seller_name") + private String sellerName; + + @JsonProperty("item") + private List item; + } + + @Data + public static class Item { + @JsonProperty("purchase_order_sn") + private String purchaseOrderSn; + + @JsonProperty("product_name") + private String productName; + + @JsonProperty("sku") + private String sku; + + @JsonProperty("quantity_require") + private Integer quantityRequire; + + @JsonProperty("create_time") + private String createTime; + + @JsonProperty("create_realname") + private String createRealname; + + @JsonProperty("expect_arrive_time") + private String expectArriveTime; + + @JsonProperty("warehouse_name") + private String warehouseName; + + @JsonProperty("supplier_name") + private String supplierName; + + @JsonProperty("quantity_real") + private Integer quantityReal; + + @JsonProperty("quantity_entry") + private Integer quantityEntry; + } +} 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 new file mode 100644 index 0000000..69f108a --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizSendOrderMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipForwardMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipForwardMapper.xml new file mode 100644 index 0000000..7850a89 --- /dev/null +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipForwardMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/asinkj-modules/asinkj-gen/src/main/java/org/asinkj/gen/domain/GenTableColumn.java b/asinkj-modules/asinkj-gen/src/main/java/org/asinkj/gen/domain/GenTableColumn.java index 6c74c3e..7664de6 100644 --- a/asinkj-modules/asinkj-gen/src/main/java/org/asinkj/gen/domain/GenTableColumn.java +++ b/asinkj-modules/asinkj-gen/src/main/java/org/asinkj/gen/domain/GenTableColumn.java @@ -203,19 +203,32 @@ public class GenTableColumn extends BaseEntity { } public String readConverterExp() { + // 从列注释中提取括号内的内容(例如:"(0=男 1=女)") String remarks = StringUtils.substringBetween(this.columnComment, "(", ")"); StringBuffer sb = new StringBuffer(); + + // 如果括号内有内容 if (StringUtils.isNotEmpty(remarks)) { + // 按空格分割各个键值对 for (String value : remarks.split(" ")) { if (StringUtils.isNotEmpty(value)) { + // 提取第一个字符作为键(如'0') Object startStr = value.subSequence(0, 1); + // 剩余部分作为值(如'=男') String endStr = value.substring(1); - sb.append(StringUtils.EMPTY).append(startStr).append("=").append(endStr).append(StringUtils.SEPARATOR); + + // 拼接成 key=value 格式并添加分隔符 + sb.append(StringUtils.EMPTY).append(startStr) + .append("=").append(endStr) + .append(StringUtils.SEPARATOR); } } + // 删除最后一个多余的分隔符后返回 return sb.deleteCharAt(sb.length() - 1).toString(); } else { + // 如果没有括号内容则直接返回原始注释 return this.columnComment; } } + } diff --git a/asinkj-modules/asinkj-gen/src/main/resources/mapper/amz/BizShipForwardMapper.xml b/asinkj-modules/asinkj-gen/src/main/resources/mapper/amz/BizShipForwardMapper.xml new file mode 100644 index 0000000..7850a89 --- /dev/null +++ b/asinkj-modules/asinkj-gen/src/main/resources/mapper/amz/BizShipForwardMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/controller/system/SysUserController.java b/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/controller/system/SysUserController.java index ca03063..074deb6 100644 --- a/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/controller/system/SysUserController.java +++ b/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/controller/system/SysUserController.java @@ -1,6 +1,8 @@ package org.asinkj.system.controller.system; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaCheckRole; +import cn.dev33.satoken.annotation.SaMode; import cn.dev33.satoken.secure.BCrypt; import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.util.ArrayUtil; @@ -30,6 +32,8 @@ import org.asinkj.system.domain.bo.SysUserBo; import org.asinkj.system.domain.vo.*; import org.asinkj.system.listener.SysUserImportListener; import org.asinkj.system.service.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -37,6 +41,8 @@ import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 用户信息 @@ -49,6 +55,7 @@ import java.util.List; @RequestMapping("/user") public class SysUserController extends BaseController { + private static final Logger log = LoggerFactory.getLogger(SysUserController.class); private final ISysUserService userService; private final ISysRoleService roleService; private final ISysPostService postService; @@ -298,4 +305,25 @@ public class SysUserController extends BaseController { return R.ok(userService.selectUserListByDept(deptId)); } + + /** + * 根据角色串批量获取用户基础信息 + * + * @param requestBody 用户角色串 + */ +// @SaCheckPermission("system:user:query") + @SaCheckRole(value = {"gengdan", "superadmin"}, mode = SaMode.OR) + @PostMapping("/roleSelect") // 改为 PostMapping + public R> selectUserByRoleIds( + @RequestBody Map requestBody // 使用 @RequestBody 接收 JSON + ) { + // 提取数组并转换类型 + List roleIds = ((List) requestBody.get("roleIds")).stream() + .map(obj -> Long.parseLong(obj.toString())) + .collect(Collectors.toList()); + + log.info("接收到的 roleIds: {}", roleIds); + return R.ok(userService.selectUserByRoleIds(roleIds)); + } + } diff --git a/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/dubbo/RemoteUserServiceImpl.java b/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/dubbo/RemoteUserServiceImpl.java index 472d233..9954d3b 100644 --- a/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/dubbo/RemoteUserServiceImpl.java +++ b/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/dubbo/RemoteUserServiceImpl.java @@ -1,7 +1,6 @@ package org.asinkj.system.dubbo; import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Opt; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -12,7 +11,6 @@ import org.asinkj.common.core.exception.ServiceException; import org.asinkj.common.core.exception.user.UserException; import org.asinkj.common.core.utils.DateUtils; import org.asinkj.common.core.utils.MapstructUtils; -import org.asinkj.common.core.utils.StreamUtils; import org.asinkj.common.core.utils.StringUtils; import org.asinkj.common.mybatis.helper.DataPermissionHelper; import org.asinkj.common.tenant.helper.TenantHelper; @@ -73,6 +71,22 @@ public class RemoteUserServiceImpl implements RemoteUserService { }); } + @Override + public LoginUser getUserInfoWithNickName(String nickName) throws UserException { + + SysUserVo sysUser = userMapper.selectVoOne(new LambdaQueryWrapper().eq(SysUser::getNickName, nickName)); + if (ObjectUtil.isNull(sysUser)) { + throw new UserException("user.not.exists", nickName); + } + if (UserStatus.DISABLE.getCode().equals(sysUser.getStatus())) { + throw new UserException("user.blocked", nickName); + } + // 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可 + // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了 + return buildLoginUser(sysUser); + + } + /** * 通过用户id查询用户信息 * @@ -288,10 +302,8 @@ public class RemoteUserServiceImpl implements RemoteUserService { } - - @Override - public void recordOpenId(Long userId, String openId){ + public void recordOpenId(Long userId, String openId) { SysUser sysUser = new SysUser(); sysUser.setUserId(userId); sysUser.setOpenId(openId); @@ -329,4 +341,12 @@ public class RemoteUserServiceImpl implements RemoteUserService { } + @Override + public List selectUserByRoleIds(List roleIds) { + List sysUserVos = userService.selectUserByRoleIds(roleIds); + + return MapstructUtils.convert(sysUserVos, RemoteUserVo.class); + } + + } diff --git a/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/mapper/SysUserMapper.java b/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/mapper/SysUserMapper.java index 1fe075a..0cfda69 100644 --- a/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/mapper/SysUserMapper.java +++ b/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/mapper/SysUserMapper.java @@ -89,4 +89,7 @@ public interface SysUserMapper extends BaseMapperPlus { int updateById(@Param(Constants.ENTITY) SysUser user); List selectUserOpenIdsByRoleIds(@Param("roleIds") List roleIds); + + List selectUserByRoleIds(@Param("roleIds") List roleIds); + } diff --git a/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/service/ISysUserService.java b/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/service/ISysUserService.java index 3e75d9a..edbb254 100644 --- a/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/service/ISysUserService.java +++ b/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/service/ISysUserService.java @@ -212,6 +212,8 @@ public interface ISysUserService { */ int deleteUserByIds(Long[] userIds); + List selectUserByRoleIds(List roleIds); + /** * 通过用户ID查询用户账户 * diff --git a/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/service/impl/SysUserServiceImpl.java b/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/service/impl/SysUserServiceImpl.java index d76613b..e3b3572 100644 --- a/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/service/impl/SysUserServiceImpl.java +++ b/asinkj-modules/asinkj-system/src/main/java/org/asinkj/system/service/impl/SysUserServiceImpl.java @@ -564,6 +564,11 @@ public class SysUserServiceImpl implements ISysUserService { return baseMapper.selectUserOpenIdsByRoleIds(roleIds); } + @Override + public List selectUserByRoleIds(List roleIds) { + return baseMapper.selectUserByRoleIds(roleIds); + } + /** * 通过用户ID查询用户账户 * diff --git a/asinkj-modules/asinkj-system/src/main/resources/mapper/system/SysUserMapper.xml b/asinkj-modules/asinkj-system/src/main/resources/mapper/system/SysUserMapper.xml index 7b59066..0284c4b 100644 --- a/asinkj-modules/asinkj-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/asinkj-modules/asinkj-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -78,6 +78,16 @@ ) +