From be9520e62bf04d6518d6a5ad3f9fd0907cb2143e Mon Sep 17 00:00:00 2001 From: Richie <280645618@qq.com> Date: Thu, 5 Jun 2025 20:03:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=87=BA=E5=BA=93bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oms/controller/StockOutController.java | 48 +++- .../goods/domain/OGoodsInventoryBatch.java | 1 + .../mapper/OGoodsInventoryBatchMapper.xml | 3 +- .../{WmsStockOut.java => ErpStockOut.java} | 9 +- ...StockOutItem.java => ErpStockOutItem.java} | 12 +- ...tion.java => ErpStockOutItemPosition.java} | 10 +- .../stock/mapper/WmsStockOutItemMapper.java | 4 +- .../mapper/WmsStockOutItemPositionMapper.java | 4 +- .../stock/mapper/WmsStockOutMapper.java | 4 +- .../stock/request/GoodsSkuInventoryVo.java | 34 +++ .../stock/request/StockOutCreateRequest.java | 15 ++ .../stock/request/StockOutItemRequest.java | 15 ++ .../WmsStockOutItemPositionService.java | 4 +- .../stock/service/WmsStockOutItemService.java | 4 +- .../stock/service/WmsStockOutService.java | 14 +- .../WmsStockOutItemPositionServiceImpl.java | 4 +- .../impl/WmsStockOutItemServiceImpl.java | 4 +- .../service/impl/WmsStockOutServiceImpl.java | 229 +++++++++++++++++- .../mapper/WmsInventoryOperationMapper.xml | 2 +- .../resources/mapper/WmsStockInItemMapper.xml | 2 +- .../resources/mapper/WmsStockInMapper.xml | 2 +- .../mapper/WmsStockOutItemMapper.xml | 4 +- .../mapper/WmsStockOutItemPositionMapper.xml | 12 +- .../resources/mapper/WmsStockOutMapper.xml | 4 +- .../resources/mapper/WmsWarehouseMapper.xml | 2 +- .../mapper/WmsWarehousePositionMapper.xml | 2 +- 26 files changed, 393 insertions(+), 55 deletions(-) rename module/stock/src/main/java/cn/qihangerp/module/stock/domain/{WmsStockOut.java => ErpStockOut.java} (88%) rename module/stock/src/main/java/cn/qihangerp/module/stock/domain/{WmsStockOutItem.java => ErpStockOutItem.java} (89%) rename module/stock/src/main/java/cn/qihangerp/module/stock/domain/{WmsStockOutItemPosition.java => ErpStockOutItemPosition.java} (82%) create mode 100644 module/stock/src/main/java/cn/qihangerp/module/stock/request/GoodsSkuInventoryVo.java create mode 100644 module/stock/src/main/java/cn/qihangerp/module/stock/request/StockOutCreateRequest.java create mode 100644 module/stock/src/main/java/cn/qihangerp/module/stock/request/StockOutItemRequest.java diff --git a/api/oms-api/src/main/java/cn/qihangerp/oms/controller/StockOutController.java b/api/oms-api/src/main/java/cn/qihangerp/oms/controller/StockOutController.java index c75b66c2..6482475d 100644 --- a/api/oms-api/src/main/java/cn/qihangerp/oms/controller/StockOutController.java +++ b/api/oms-api/src/main/java/cn/qihangerp/oms/controller/StockOutController.java @@ -1,26 +1,54 @@ package cn.qihangerp.oms.controller; - +import cn.qihangerp.common.AjaxResult; import cn.qihangerp.common.PageQuery; -import cn.qihangerp.common.PageResult; +import cn.qihangerp.common.ResultVo; import cn.qihangerp.common.TableDataInfo; - -import cn.qihangerp.module.goods.domain.OGoodsSku; +import cn.qihangerp.module.stock.domain.ErpStockOut; +import cn.qihangerp.module.stock.request.StockOutCreateRequest; +import cn.qihangerp.module.stock.request.StockOutItemRequest; +import cn.qihangerp.module.stock.service.WmsStockOutService; import cn.qihangerp.security.common.BaseController; import lombok.AllArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @AllArgsConstructor @RestController @RequestMapping("/stockOut") public class StockOutController extends BaseController { + private final WmsStockOutService stockOutService; @GetMapping("/list") - public TableDataInfo list(OGoodsSku bo, PageQuery pageQuery) + public TableDataInfo list(ErpStockOut bo, PageQuery pageQuery) { -// var pageList = goodsService.querySkuPageList(bo,pageQuery); - return getDataTable(new PageResult<>()); + var pageList = stockOutService.queryPageList(bo,pageQuery); + return getDataTable(pageList); + } + + + + @PostMapping("/create") + public AjaxResult createEntry(@RequestBody StockOutCreateRequest request) + { + ResultVo resultVo = stockOutService.createEntry(getUserId(), getUsername(), request); + if(resultVo.getCode()==0) + return AjaxResult.success(); + else return AjaxResult.error(resultVo.getMsg()); + } + + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + + ErpStockOut entry = stockOutService.getDetailAndItemById(id); + return success(entry); + } + @PostMapping("/out") + public AjaxResult out(@RequestBody StockOutItemRequest request) + { + ResultVo resultVo = stockOutService.stockOut(getUserId(), getUsername(), request); + if(resultVo.getCode()==0) + return AjaxResult.success(); + else return AjaxResult.error(resultVo.getMsg()); } } diff --git a/module/goods/src/main/java/cn/qihangerp/module/goods/domain/OGoodsInventoryBatch.java b/module/goods/src/main/java/cn/qihangerp/module/goods/domain/OGoodsInventoryBatch.java index 65d35599..68456ee6 100644 --- a/module/goods/src/main/java/cn/qihangerp/module/goods/domain/OGoodsInventoryBatch.java +++ b/module/goods/src/main/java/cn/qihangerp/module/goods/domain/OGoodsInventoryBatch.java @@ -18,6 +18,7 @@ public class OGoodsInventoryBatch implements Serializable { */ @TableId(type = IdType.AUTO) private Long id; + private Long inventoryId; /** * 批次号 diff --git a/module/goods/src/main/resources/mapper/OGoodsInventoryBatchMapper.xml b/module/goods/src/main/resources/mapper/OGoodsInventoryBatchMapper.xml index 03d40eeb..d6cc3dd8 100644 --- a/module/goods/src/main/resources/mapper/OGoodsInventoryBatchMapper.xml +++ b/module/goods/src/main/resources/mapper/OGoodsInventoryBatchMapper.xml @@ -6,6 +6,7 @@ + @@ -25,7 +26,7 @@ - id,batch_num,origin_qty, + id,batch_num,origin_qty,inventory_id, current_qty,pur_price,pur_id, pur_item_id,remark,sku_id, goods_id,sku_code,warehouse_id, diff --git a/module/stock/src/main/java/cn/qihangerp/module/stock/domain/WmsStockOut.java b/module/stock/src/main/java/cn/qihangerp/module/stock/domain/ErpStockOut.java similarity index 88% rename from module/stock/src/main/java/cn/qihangerp/module/stock/domain/WmsStockOut.java rename to module/stock/src/main/java/cn/qihangerp/module/stock/domain/ErpStockOut.java index e85644b0..baeb9559 100644 --- a/module/stock/src/main/java/cn/qihangerp/module/stock/domain/WmsStockOut.java +++ b/module/stock/src/main/java/cn/qihangerp/module/stock/domain/ErpStockOut.java @@ -2,8 +2,10 @@ package cn.qihangerp.module.stock.domain; import java.io.Serializable; import java.util.Date; +import java.util.List; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; @@ -12,7 +14,7 @@ import lombok.Data; * @TableName wms_stock_out */ @Data -public class WmsStockOut implements Serializable { +public class ErpStockOut implements Serializable { /** * */ @@ -92,7 +94,7 @@ public class WmsStockOut implements Serializable { /** * 出库操作人userid */ - private Integer operatorId; + private Long operatorId; /** * 出库操作人 @@ -118,6 +120,7 @@ public class WmsStockOut implements Serializable { * 更新人 */ private String updateBy; - + @TableField(exist = false) + private List itemList; private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/module/stock/src/main/java/cn/qihangerp/module/stock/domain/WmsStockOutItem.java b/module/stock/src/main/java/cn/qihangerp/module/stock/domain/ErpStockOutItem.java similarity index 89% rename from module/stock/src/main/java/cn/qihangerp/module/stock/domain/WmsStockOutItem.java rename to module/stock/src/main/java/cn/qihangerp/module/stock/domain/ErpStockOutItem.java index cd727e3b..2b8a9a25 100644 --- a/module/stock/src/main/java/cn/qihangerp/module/stock/domain/WmsStockOutItem.java +++ b/module/stock/src/main/java/cn/qihangerp/module/stock/domain/ErpStockOutItem.java @@ -12,7 +12,7 @@ import lombok.Data; * @TableName wms_stock_out_item */ @Data -public class WmsStockOutItem implements Serializable { +public class ErpStockOutItem implements Serializable { /** * 主键ID */ @@ -47,12 +47,12 @@ public class WmsStockOutItem implements Serializable { /** * 商品id */ - private Integer goodsId; + private Long goodsId; /** * 商品规格id */ - private Integer specId; + private Long specId; /** * 规格编码 @@ -62,12 +62,12 @@ public class WmsStockOutItem implements Serializable { /** * 总数量 */ - private Long originalQuantity; + private Integer originalQuantity; /** * 已出库数量 */ - private Long outQuantity; + private Integer outQuantity; /** * 完成出库时间 @@ -94,5 +94,7 @@ public class WmsStockOutItem implements Serializable { */ private Date updateTime; + + private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/module/stock/src/main/java/cn/qihangerp/module/stock/domain/WmsStockOutItemPosition.java b/module/stock/src/main/java/cn/qihangerp/module/stock/domain/ErpStockOutItemPosition.java similarity index 82% rename from module/stock/src/main/java/cn/qihangerp/module/stock/domain/WmsStockOutItemPosition.java rename to module/stock/src/main/java/cn/qihangerp/module/stock/domain/ErpStockOutItemPosition.java index 3e8d2b37..0076c1bc 100644 --- a/module/stock/src/main/java/cn/qihangerp/module/stock/domain/WmsStockOutItemPosition.java +++ b/module/stock/src/main/java/cn/qihangerp/module/stock/domain/ErpStockOutItemPosition.java @@ -12,7 +12,7 @@ import lombok.Data; * @TableName wms_stock_out_item_position */ @Data -public class WmsStockOutItemPosition implements Serializable { +public class ErpStockOutItemPosition implements Serializable { /** * 主键ID */ @@ -42,17 +42,19 @@ public class WmsStockOutItemPosition implements Serializable { /** * 出库数量 */ - private Long quantity; + private Integer quantity; /** * 出库仓位ID */ - private Integer locationId; + private Long warehouseId; + private Long positionId; + private String positionNum; /** * 出库操作人userid */ - private Integer operatorId; + private Long operatorId; /** * 出库操作人 diff --git a/module/stock/src/main/java/cn/qihangerp/module/stock/mapper/WmsStockOutItemMapper.java b/module/stock/src/main/java/cn/qihangerp/module/stock/mapper/WmsStockOutItemMapper.java index 3d65306a..1d5ef57b 100644 --- a/module/stock/src/main/java/cn/qihangerp/module/stock/mapper/WmsStockOutItemMapper.java +++ b/module/stock/src/main/java/cn/qihangerp/module/stock/mapper/WmsStockOutItemMapper.java @@ -1,7 +1,7 @@ package cn.qihangerp.module.stock.mapper; -import cn.qihangerp.module.stock.domain.WmsStockOutItem; +import cn.qihangerp.module.stock.domain.ErpStockOutItem; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** @@ -10,7 +10,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @createDate 2024-09-22 11:13:23 * @Entity cn.qihangerp.wms.domain.WmsStockOutItem */ -public interface WmsStockOutItemMapper extends BaseMapper { +public interface WmsStockOutItemMapper extends BaseMapper { } diff --git a/module/stock/src/main/java/cn/qihangerp/module/stock/mapper/WmsStockOutItemPositionMapper.java b/module/stock/src/main/java/cn/qihangerp/module/stock/mapper/WmsStockOutItemPositionMapper.java index 910b4362..1f153faa 100644 --- a/module/stock/src/main/java/cn/qihangerp/module/stock/mapper/WmsStockOutItemPositionMapper.java +++ b/module/stock/src/main/java/cn/qihangerp/module/stock/mapper/WmsStockOutItemPositionMapper.java @@ -1,7 +1,7 @@ package cn.qihangerp.module.stock.mapper; -import cn.qihangerp.module.stock.domain.WmsStockOutItemPosition; +import cn.qihangerp.module.stock.domain.ErpStockOutItemPosition; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** @@ -10,7 +10,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @createDate 2024-09-22 11:13:23 * @Entity cn.qihangerp.wms.domain.WmsStockOutItemPosition */ -public interface WmsStockOutItemPositionMapper extends BaseMapper { +public interface WmsStockOutItemPositionMapper extends BaseMapper { } diff --git a/module/stock/src/main/java/cn/qihangerp/module/stock/mapper/WmsStockOutMapper.java b/module/stock/src/main/java/cn/qihangerp/module/stock/mapper/WmsStockOutMapper.java index 32c7f7bb..52f8ea05 100644 --- a/module/stock/src/main/java/cn/qihangerp/module/stock/mapper/WmsStockOutMapper.java +++ b/module/stock/src/main/java/cn/qihangerp/module/stock/mapper/WmsStockOutMapper.java @@ -1,7 +1,7 @@ package cn.qihangerp.module.stock.mapper; -import cn.qihangerp.module.stock.domain.WmsStockOut; +import cn.qihangerp.module.stock.domain.ErpStockOut; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** @@ -10,7 +10,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @createDate 2024-09-22 11:13:23 * @Entity cn.qihangerp.wms.domain.WmsStockOut */ -public interface WmsStockOutMapper extends BaseMapper { +public interface WmsStockOutMapper extends BaseMapper { } diff --git a/module/stock/src/main/java/cn/qihangerp/module/stock/request/GoodsSkuInventoryVo.java b/module/stock/src/main/java/cn/qihangerp/module/stock/request/GoodsSkuInventoryVo.java new file mode 100644 index 00000000..5f0d880e --- /dev/null +++ b/module/stock/src/main/java/cn/qihangerp/module/stock/request/GoodsSkuInventoryVo.java @@ -0,0 +1,34 @@ +package cn.qihangerp.module.stock.request; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class GoodsSkuInventoryVo { +// private String batchId; + private Long skuId; + private Long goodsId; + + /** 商品名称 */ + private String goodsName; + private String skuName; + private String goodsNum; + private String goodsImg; + private BigDecimal purPrice; + +// /** 商品编号 */ + private String skuCode; +// private String colorValue; +// /** 商品图片地址 */ +// private String colorImage; +// private String sizeValue; +// private String styleValue; +// +// private String batchNum; +// private Long currentQty; +// private String warehouseName; +// private String positionNum; +// private Long positionId; + private Integer quantity;//出库数量 +} diff --git a/module/stock/src/main/java/cn/qihangerp/module/stock/request/StockOutCreateRequest.java b/module/stock/src/main/java/cn/qihangerp/module/stock/request/StockOutCreateRequest.java new file mode 100644 index 00000000..c9479504 --- /dev/null +++ b/module/stock/src/main/java/cn/qihangerp/module/stock/request/StockOutCreateRequest.java @@ -0,0 +1,15 @@ +package cn.qihangerp.module.stock.request; + +import lombok.Data; + +import java.util.List; + +@Data +public class StockOutCreateRequest { + private String outNum; + private Integer type; + private String sourceNo; + private String operator; + private String remark; + private List itemList; +} diff --git a/module/stock/src/main/java/cn/qihangerp/module/stock/request/StockOutItemRequest.java b/module/stock/src/main/java/cn/qihangerp/module/stock/request/StockOutItemRequest.java new file mode 100644 index 00000000..dccdd01f --- /dev/null +++ b/module/stock/src/main/java/cn/qihangerp/module/stock/request/StockOutItemRequest.java @@ -0,0 +1,15 @@ +package cn.qihangerp.module.stock.request; + +import lombok.Data; + +@Data +public class StockOutItemRequest { + private Long entryItemId; + private Long entryId; + private Long skuId; + private Long inventoryBatchId; + private Integer outQty; +// private Integer originalQuantity; +// private Integer outQuantity; + +} diff --git a/module/stock/src/main/java/cn/qihangerp/module/stock/service/WmsStockOutItemPositionService.java b/module/stock/src/main/java/cn/qihangerp/module/stock/service/WmsStockOutItemPositionService.java index dcef11e7..c9410a8d 100644 --- a/module/stock/src/main/java/cn/qihangerp/module/stock/service/WmsStockOutItemPositionService.java +++ b/module/stock/src/main/java/cn/qihangerp/module/stock/service/WmsStockOutItemPositionService.java @@ -1,7 +1,7 @@ package cn.qihangerp.module.stock.service; -import cn.qihangerp.module.stock.domain.WmsStockOutItemPosition; +import cn.qihangerp.module.stock.domain.ErpStockOutItemPosition; import com.baomidou.mybatisplus.extension.service.IService; /** @@ -9,6 +9,6 @@ import com.baomidou.mybatisplus.extension.service.IService; * @description 针对表【wms_stock_out_item_position(出库仓位详情)】的数据库操作Service * @createDate 2024-09-22 11:13:23 */ -public interface WmsStockOutItemPositionService extends IService { +public interface WmsStockOutItemPositionService extends IService { } diff --git a/module/stock/src/main/java/cn/qihangerp/module/stock/service/WmsStockOutItemService.java b/module/stock/src/main/java/cn/qihangerp/module/stock/service/WmsStockOutItemService.java index 8fca86d5..c3d4a543 100644 --- a/module/stock/src/main/java/cn/qihangerp/module/stock/service/WmsStockOutItemService.java +++ b/module/stock/src/main/java/cn/qihangerp/module/stock/service/WmsStockOutItemService.java @@ -1,7 +1,7 @@ package cn.qihangerp.module.stock.service; -import cn.qihangerp.module.stock.domain.WmsStockOutItem; +import cn.qihangerp.module.stock.domain.ErpStockOutItem; import com.baomidou.mybatisplus.extension.service.IService; /** @@ -9,6 +9,6 @@ import com.baomidou.mybatisplus.extension.service.IService; * @description 针对表【wms_stock_out_item(出库单明细)】的数据库操作Service * @createDate 2024-09-22 11:13:23 */ -public interface WmsStockOutItemService extends IService { +public interface WmsStockOutItemService extends IService { } diff --git a/module/stock/src/main/java/cn/qihangerp/module/stock/service/WmsStockOutService.java b/module/stock/src/main/java/cn/qihangerp/module/stock/service/WmsStockOutService.java index bf92e48b..25bc1cce 100644 --- a/module/stock/src/main/java/cn/qihangerp/module/stock/service/WmsStockOutService.java +++ b/module/stock/src/main/java/cn/qihangerp/module/stock/service/WmsStockOutService.java @@ -1,7 +1,12 @@ package cn.qihangerp.module.stock.service; -import cn.qihangerp.module.stock.domain.WmsStockOut; +import cn.qihangerp.common.PageQuery; +import cn.qihangerp.common.PageResult; +import cn.qihangerp.common.ResultVo; +import cn.qihangerp.module.stock.domain.ErpStockOut; +import cn.qihangerp.module.stock.request.StockOutCreateRequest; +import cn.qihangerp.module.stock.request.StockOutItemRequest; import com.baomidou.mybatisplus.extension.service.IService; /** @@ -9,6 +14,11 @@ import com.baomidou.mybatisplus.extension.service.IService; * @description 针对表【wms_stock_out(出库单)】的数据库操作Service * @createDate 2024-09-22 11:13:23 */ -public interface WmsStockOutService extends IService { +public interface WmsStockOutService extends IService { + PageResult queryPageList(ErpStockOut bo, PageQuery pageQuery); + ResultVo createEntry(Long userId, String userName, StockOutCreateRequest request); + ErpStockOut getDetailAndItemById(Long id); + + ResultVo stockOut(Long userId, String userName, StockOutItemRequest request); } diff --git a/module/stock/src/main/java/cn/qihangerp/module/stock/service/impl/WmsStockOutItemPositionServiceImpl.java b/module/stock/src/main/java/cn/qihangerp/module/stock/service/impl/WmsStockOutItemPositionServiceImpl.java index f573a11b..fb523011 100644 --- a/module/stock/src/main/java/cn/qihangerp/module/stock/service/impl/WmsStockOutItemPositionServiceImpl.java +++ b/module/stock/src/main/java/cn/qihangerp/module/stock/service/impl/WmsStockOutItemPositionServiceImpl.java @@ -1,6 +1,6 @@ package cn.qihangerp.module.stock.service.impl; -import cn.qihangerp.module.stock.domain.WmsStockOutItemPosition; +import cn.qihangerp.module.stock.domain.ErpStockOutItemPosition; import cn.qihangerp.module.stock.mapper.WmsStockOutItemPositionMapper; import cn.qihangerp.module.stock.service.WmsStockOutItemPositionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -13,7 +13,7 @@ import org.springframework.stereotype.Service; * @createDate 2024-09-22 11:13:23 */ @Service -public class WmsStockOutItemPositionServiceImpl extends ServiceImpl +public class WmsStockOutItemPositionServiceImpl extends ServiceImpl implements WmsStockOutItemPositionService { } diff --git a/module/stock/src/main/java/cn/qihangerp/module/stock/service/impl/WmsStockOutItemServiceImpl.java b/module/stock/src/main/java/cn/qihangerp/module/stock/service/impl/WmsStockOutItemServiceImpl.java index 2fa7ef1b..4baa273c 100644 --- a/module/stock/src/main/java/cn/qihangerp/module/stock/service/impl/WmsStockOutItemServiceImpl.java +++ b/module/stock/src/main/java/cn/qihangerp/module/stock/service/impl/WmsStockOutItemServiceImpl.java @@ -1,6 +1,6 @@ package cn.qihangerp.module.stock.service.impl; -import cn.qihangerp.module.stock.domain.WmsStockOutItem; +import cn.qihangerp.module.stock.domain.ErpStockOutItem; import cn.qihangerp.module.stock.mapper.WmsStockOutItemMapper; import cn.qihangerp.module.stock.service.WmsStockOutItemService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -13,7 +13,7 @@ import org.springframework.stereotype.Service; * @createDate 2024-09-22 11:13:23 */ @Service -public class WmsStockOutItemServiceImpl extends ServiceImpl +public class WmsStockOutItemServiceImpl extends ServiceImpl implements WmsStockOutItemService { } diff --git a/module/stock/src/main/java/cn/qihangerp/module/stock/service/impl/WmsStockOutServiceImpl.java b/module/stock/src/main/java/cn/qihangerp/module/stock/service/impl/WmsStockOutServiceImpl.java index 6ebdce77..86b5e4b9 100644 --- a/module/stock/src/main/java/cn/qihangerp/module/stock/service/impl/WmsStockOutServiceImpl.java +++ b/module/stock/src/main/java/cn/qihangerp/module/stock/service/impl/WmsStockOutServiceImpl.java @@ -1,21 +1,246 @@ package cn.qihangerp.module.stock.service.impl; -import cn.qihangerp.module.stock.domain.WmsStockOut; +import cn.qihangerp.common.PageQuery; +import cn.qihangerp.common.PageResult; +import cn.qihangerp.common.ResultVo; +import cn.qihangerp.common.ResultVoEnum; +import cn.qihangerp.common.utils.DateUtils; +import cn.qihangerp.module.goods.domain.OGoodsInventory; +import cn.qihangerp.module.goods.domain.OGoodsInventoryBatch; +import cn.qihangerp.module.goods.service.OGoodsInventoryBatchService; +import cn.qihangerp.module.goods.service.OGoodsInventoryService; +import cn.qihangerp.module.stock.domain.ErpStockOut; +import cn.qihangerp.module.stock.domain.ErpStockOutItem; +import cn.qihangerp.module.stock.domain.ErpStockOutItemPosition; +import cn.qihangerp.module.stock.mapper.WmsStockOutItemPositionMapper; import cn.qihangerp.module.stock.mapper.WmsStockOutMapper; +import cn.qihangerp.module.stock.request.GoodsSkuInventoryVo; +import cn.qihangerp.module.stock.request.StockOutCreateRequest; +import cn.qihangerp.module.stock.request.StockOutItemRequest; +import cn.qihangerp.module.stock.service.WmsStockOutItemService; import cn.qihangerp.module.stock.service.WmsStockOutService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @author qilip * @description 针对表【wms_stock_out(出库单)】的数据库操作Service实现 * @createDate 2024-09-22 11:13:23 */ +@AllArgsConstructor @Service -public class WmsStockOutServiceImpl extends ServiceImpl +public class WmsStockOutServiceImpl extends ServiceImpl implements WmsStockOutService { + private final WmsStockOutMapper outMapper; + private final WmsStockOutItemService outItemService; + private final WmsStockOutItemPositionMapper outItemPositionMapper; + private final OGoodsInventoryBatchService goodsInventoryBatchService; + private final OGoodsInventoryService goodsInventoryService; + @Override + public PageResult queryPageList(ErpStockOut bo, PageQuery pageQuery) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + + .eq( bo.getStatus()!=null, ErpStockOut::getStatus, bo.getStatus()) + .eq( bo.getStockOutType()!=null, ErpStockOut::getStockOutType, bo.getStockOutType()) + .eq(StringUtils.isNotBlank(bo.getStockOutNum()), ErpStockOut::getStockOutNum, bo.getStockOutNum()) + .eq(StringUtils.isNotBlank(bo.getSourceNum()), ErpStockOut::getSourceNum, bo.getSourceNum()) + .eq(bo.getSourceId()!=null, ErpStockOut::getSourceId, bo.getSourceId()) + ; + + Page pages = outMapper.selectPage(pageQuery.build(), queryWrapper); + return PageResult.build(pages); + } + + + @Transactional + @Override + public ResultVo createEntry(Long userId, String userName, StockOutCreateRequest request) { + if(request.getType() == null ) return ResultVo.error(ResultVoEnum.ParamsError,"缺少参数type"); + if(request.getItemList().isEmpty()) return ResultVo.error(ResultVoEnum.ParamsError,"缺少参数itemList"); + if(StringUtils.isBlank(request.getOutNum())){ + request.setOutNum(DateUtils.parseDateToStr("yyyyMMddHHmmss",new Date())); + } + if(StringUtils.isBlank(request.getOperator())){ + request.setOperator(userName); + } + + Map> goodsGroup = request.getItemList().stream().collect(Collectors.groupingBy(x -> x.getGoodsId())); + Long total = request.getItemList().stream().mapToLong(GoodsSkuInventoryVo::getQuantity).sum(); + + //添加主表信息 + ErpStockOut insert = new ErpStockOut(); + + insert.setStockOutNum(request.getOutNum()); + insert.setStockOutType(request.getType()); + insert.setSourceNum(request.getSourceNo()); + insert.setSourceId(0L); + insert.setRemark(request.getRemark()); + insert.setCreateBy(userName); + insert.setCreateTime(new Date()); + insert.setGoodsUnit(goodsGroup.size()); + insert.setSpecUnit(request.getItemList().size()); + insert.setSpecUnitTotal(total.intValue()); + insert.setOutTotal(0); + insert.setOperatorId(userId); + insert.setOperatorName(StringUtils.isEmpty(request.getOperator())?userName:request.getOperator()); + insert.setPrintStatus(0); + insert.setRemark(request.getRemark()); + insert.setStatus(0);//状态(0待入库1部分入库2全部入库) + outMapper.insert(insert); + + //添加子表信息 + List itemList = new ArrayList<>(); + for(GoodsSkuInventoryVo item: request.getItemList()) { + + ErpStockOutItem outItem = new ErpStockOutItem(); + + outItem.setEntryId(insert.getId()); + outItem.setStockOutType(request.getType()); + outItem.setSourceOrderId(0L); + outItem.setSourceOrderItemId(0l); + outItem.setSourceOrderNum(""); + outItem.setGoodsId(item.getGoodsId()); + outItem.setSpecId(item.getSkuId()); + outItem.setSpecNum(item.getSkuCode()); +// inItem.setPurPrice(item.getPurPrice()); +// inItem.setSkuId(item.getSkuId()); +// inItem.setSkuCode(item.getSkuCode()); +// inItem.setGoodsName(item.getGoodsName()); +// inItem.setGoodsNum(item.getGoodsNum()); +// inItem.setSkuName(item.getSkuName()); +// inItem.setGoodsImage(item.getGoodsImg()); + outItem.setOriginalQuantity(item.getQuantity()); + outItem.setOutQuantity(0); + outItem.setStatus(0); + outItem.setCreateTime(new Date()); + itemList.add(outItem); + + + } + outItemService.saveBatch(itemList); + return ResultVo.success(); + } + + @Override + public ErpStockOut getDetailAndItemById(Long id) { + ErpStockOut erpStockOut = outMapper.selectById(id); + if(erpStockOut !=null){ + List outItemList = outItemService.list(new LambdaQueryWrapper().eq(ErpStockOutItem::getEntryId, id)); + if(outItemList!=null && outItemList.size()>0){ + // 查找outItem skuid相对应的库存批次list + for(ErpStockOutItem item: outItemList){ + item.setOutQuantity(item.getOriginalQuantity()-item.getOutQuantity()); +// List erpGoodsInventoryBatches = goodsInventoryBatchService.querySkuBatchList(item.getSkuId()); +// item.setInventoryBatchList(erpGoodsInventoryBatches); + } + + } + erpStockOut.setItemList(outItemList); + } + return erpStockOut; + } + + @Transactional + @Override + public ResultVo stockOut(Long userId, String userName, StockOutItemRequest request) { + if(request.getEntryItemId() == null) return ResultVo.error(1500,"缺少参数:outItemId"); + if(request.getOutQty()==null || request.getOutQty().longValue()<=0) return ResultVo.error(1500,"缺少参数:出库数量"); + + ErpStockOutItem outItem = outItemService.getById(request.getEntryItemId()); + if(outItem == null) return ResultVo.error(1500,"出库数据错误"); + // 判断库存够不够扣减的 + OGoodsInventoryBatch batch = goodsInventoryBatchService.getById(request.getInventoryBatchId()); + if(batch == null) return ResultVo.error(1500,"库存数据不存在"); + if(batch.getCurrentQty().longValue()< request.getOutQty().longValue()) + return ResultVo.error(1500,"库存不足"); + if(StringUtils.isEmpty(batch.getRemark())) batch.setRemark(""); + // 扣减库存 + // 1扣减批次库存 + OGoodsInventoryBatch updateBatch = new OGoodsInventoryBatch(); + updateBatch.setCurrentQty(batch.getCurrentQty() - request.getOutQty()); + updateBatch.setUpdateBy(userName); + updateBatch.setUpdateTime(new Date()); + updateBatch.setRemark(batch.getRemark()+"出库扣减库存;"); + updateBatch.setId(batch.getId()); + goodsInventoryBatchService.updateById(updateBatch); + // 2扣减总库存 + OGoodsInventory goodsInventory = goodsInventoryService.getById(batch.getInventoryId()); + OGoodsInventory updateInventory = new OGoodsInventory(); + updateInventory.setId(goodsInventory.getId()); + updateInventory.setQuantity(goodsInventory.getQuantity() - request.getOutQty()); + updateInventory.setUpdateBy(userName); + updateInventory.setUpdateTime(new Date()); + goodsInventoryService.updateById(updateInventory); + + + // 添加item + ErpStockOutItemPosition outItemPosition = new ErpStockOutItemPosition(); + + outItemPosition.setEntryId(outItem.getEntryId()); + outItemPosition.setEntryItemId(outItem.getId()); + outItemPosition.setGoodsInventoryId(batch.getInventoryId()); + outItemPosition.setGoodsInventoryDetailId(batch.getId()); + outItemPosition.setQuantity(request.getOutQty()); + outItemPosition.setOperatorId(userId); + outItemPosition.setOperatorName(userName); + outItemPosition.setOutTime(new Date()); + outItemPosition.setWarehouseId(batch.getWarehouseId()); + outItemPosition.setPositionId(batch.getPositionId()); + outItemPosition.setPositionNum(""); + outItemPositionMapper.insert(outItemPosition); + + + + // 更新自己的状态 + ErpStockOutItem outItemUpdate = new ErpStockOutItem(); + outItemUpdate.setId(outItem.getId()); + outItemUpdate.setStatus(2); + outItemUpdate.setCompleteTime(new Date()); + outItemUpdate.setOutQuantity(outItem.getOutQuantity()+ request.getOutQty()); + outItemUpdate.setUpdateTime(new Date()); + outItemService.updateById(outItemUpdate); + + // 更新主表单数据 + ErpStockOut erpStockOut = outMapper.selectById(outItem.getEntryId()); + if(erpStockOut.getOutTotal()==null) erpStockOut.setOutTotal(0); + // 查询入库表单是否入库完成 + List itemList = outItemService.list(new LambdaQueryWrapper() + .eq(ErpStockOutItem::getEntryId,outItem.getEntryId()) + .ne(ErpStockOutItem::getStatus, 2)); + ErpStockOut sUpdate = new ErpStockOut(); + if (itemList.isEmpty()) { + // 全部入库完成了 + sUpdate.setStatus(2); + sUpdate.setCompleteTime(new Date()); + } else { + // 部分入库 + sUpdate.setStatus(1); + } + + sUpdate.setId(outItem.getEntryId()); + sUpdate.setOperatorId(userId); + sUpdate.setOperatorName(userName); + sUpdate.setOutTime(new Date()); + sUpdate.setOutTotal(erpStockOut.getOutTotal()+request.getOutQty().intValue()); + sUpdate.setUpdateBy(userName); + sUpdate.setUpdateTime(new Date()); + outMapper.updateById(sUpdate); + + return ResultVo.success(); + } } diff --git a/module/stock/src/main/resources/mapper/WmsInventoryOperationMapper.xml b/module/stock/src/main/resources/mapper/WmsInventoryOperationMapper.xml index 192e89c0..eaf15de9 100644 --- a/module/stock/src/main/resources/mapper/WmsInventoryOperationMapper.xml +++ b/module/stock/src/main/resources/mapper/WmsInventoryOperationMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/module/stock/src/main/resources/mapper/WmsStockInItemMapper.xml b/module/stock/src/main/resources/mapper/WmsStockInItemMapper.xml index d2a65e0e..743812b0 100644 --- a/module/stock/src/main/resources/mapper/WmsStockInItemMapper.xml +++ b/module/stock/src/main/resources/mapper/WmsStockInItemMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/module/stock/src/main/resources/mapper/WmsStockInMapper.xml b/module/stock/src/main/resources/mapper/WmsStockInMapper.xml index 72baa859..a9b6e363 100644 --- a/module/stock/src/main/resources/mapper/WmsStockInMapper.xml +++ b/module/stock/src/main/resources/mapper/WmsStockInMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/module/stock/src/main/resources/mapper/WmsStockOutItemMapper.xml b/module/stock/src/main/resources/mapper/WmsStockOutItemMapper.xml index 81ae79c9..64ae313b 100644 --- a/module/stock/src/main/resources/mapper/WmsStockOutItemMapper.xml +++ b/module/stock/src/main/resources/mapper/WmsStockOutItemMapper.xml @@ -2,9 +2,9 @@ - + - + diff --git a/module/stock/src/main/resources/mapper/WmsStockOutItemPositionMapper.xml b/module/stock/src/main/resources/mapper/WmsStockOutItemPositionMapper.xml index 0c13b229..61b651bc 100644 --- a/module/stock/src/main/resources/mapper/WmsStockOutItemPositionMapper.xml +++ b/module/stock/src/main/resources/mapper/WmsStockOutItemPositionMapper.xml @@ -2,17 +2,19 @@ - + - + - - - + + + + + diff --git a/module/stock/src/main/resources/mapper/WmsStockOutMapper.xml b/module/stock/src/main/resources/mapper/WmsStockOutMapper.xml index a2dbe821..064b029b 100644 --- a/module/stock/src/main/resources/mapper/WmsStockOutMapper.xml +++ b/module/stock/src/main/resources/mapper/WmsStockOutMapper.xml @@ -2,9 +2,9 @@ - + - + diff --git a/module/stock/src/main/resources/mapper/WmsWarehouseMapper.xml b/module/stock/src/main/resources/mapper/WmsWarehouseMapper.xml index 18740049..905f64cc 100644 --- a/module/stock/src/main/resources/mapper/WmsWarehouseMapper.xml +++ b/module/stock/src/main/resources/mapper/WmsWarehouseMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/module/stock/src/main/resources/mapper/WmsWarehousePositionMapper.xml b/module/stock/src/main/resources/mapper/WmsWarehousePositionMapper.xml index f7d51644..3ecb68db 100644 --- a/module/stock/src/main/resources/mapper/WmsWarehousePositionMapper.xml +++ b/module/stock/src/main/resources/mapper/WmsWarehousePositionMapper.xml @@ -2,7 +2,7 @@ - +