Browse Source

成品库方法

24282 1 year ago
parent
commit
a37e09a5fc
26 changed files with 882 additions and 0 deletions
  1. 37 0
      sd-business/src/main/java/com/sd/business/controller/inventory/InventoryFinishedController.java
  2. 17 0
      sd-business/src/main/java/com/sd/business/entity/inventory/dto/InventoryFinishedDto.java
  3. 17 0
      sd-business/src/main/java/com/sd/business/entity/inventory/dto/InventoryFinishedOrderDetailDto.java
  4. 17 0
      sd-business/src/main/java/com/sd/business/entity/inventory/dto/InventoryFinishedOrderDetailSelectDto.java
  5. 17 0
      sd-business/src/main/java/com/sd/business/entity/inventory/dto/InventoryFinishedOrderDto.java
  6. 17 0
      sd-business/src/main/java/com/sd/business/entity/inventory/dto/InventoryFinishedOrderSelectDto.java
  7. 17 0
      sd-business/src/main/java/com/sd/business/entity/inventory/dto/InventoryFinishedSelectDto.java
  8. 17 0
      sd-business/src/main/java/com/sd/business/entity/inventory/enums/FinishedOperationTypeEnum.java
  9. 33 0
      sd-business/src/main/java/com/sd/business/entity/inventory/po/InventoryFinished.java
  10. 53 0
      sd-business/src/main/java/com/sd/business/entity/inventory/po/InventoryFinishedOrder.java
  11. 58 0
      sd-business/src/main/java/com/sd/business/entity/inventory/po/InventoryFinishedOrderDetail.java
  12. 17 0
      sd-business/src/main/java/com/sd/business/entity/inventory/vo/InventoryFinishedOrderDetailVo.java
  13. 17 0
      sd-business/src/main/java/com/sd/business/entity/inventory/vo/InventoryFinishedOrderVo.java
  14. 27 0
      sd-business/src/main/java/com/sd/business/entity/inventory/vo/InventoryFinishedVo.java
  15. 26 0
      sd-business/src/main/java/com/sd/business/mapper/inventory/InventoryFinishedMapper.java
  16. 17 0
      sd-business/src/main/java/com/sd/business/mapper/inventory/InventoryFinishedOrderDetailMapper.java
  17. 17 0
      sd-business/src/main/java/com/sd/business/mapper/inventory/InventoryFinishedOrderMapper.java
  18. 28 0
      sd-business/src/main/java/com/sd/business/service/inventory/InventoryFinishedOrderDetailService.java
  19. 41 0
      sd-business/src/main/java/com/sd/business/service/inventory/InventoryFinishedOrderService.java
  20. 48 0
      sd-business/src/main/java/com/sd/business/service/inventory/InventoryFinishedService.java
  21. 44 0
      sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryFinishedOrderDetailServiceImpl.java
  22. 91 0
      sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryFinishedOrderServiceImpl.java
  23. 185 0
      sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryFinishedServiceImpl.java
  24. 16 0
      sd-business/src/main/resources/mapper/inventory/InventoryFinishedMapper.xml
  25. 4 0
      sd-business/src/main/resources/mapper/inventory/InventoryFinishedOrderDetailMapper.xml
  26. 4 0
      sd-business/src/main/resources/mapper/inventory/InventoryFinishedOrderMapper.xml

+ 37 - 0
sd-business/src/main/java/com/sd/business/controller/inventory/InventoryFinishedController.java

@@ -0,0 +1,37 @@
+package com.sd.business.controller.inventory;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sd.business.entity.inventory.dto.InventoryFinishedSelectDto;
+import com.sd.business.entity.inventory.vo.InventoryFinishedVo;
+import com.sd.business.service.inventory.InventoryFinishedService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * <p>
+ * 成品仓库 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-10-10
+ */
+@RestController
+@RequestMapping("/inventoryFinished")
+public class InventoryFinishedController {
+
+    @Autowired
+    private InventoryFinishedService inventoryFinishedService;
+
+    /**
+     * 成品仓库分页
+     */
+    @PostMapping("/page")
+    public Page<InventoryFinishedVo> page(@RequestBody InventoryFinishedSelectDto dto) {
+        return inventoryFinishedService.getPage(dto);
+    }
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/inventory/dto/InventoryFinishedDto.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.inventory.dto;
+
+import com.sd.business.entity.inventory.po.InventoryFinished;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 成品仓库新增编辑入参实体
+ *
+ * @author
+ * @since 2023-10-10
+ */
+@Getter
+@Setter
+public class InventoryFinishedDto extends InventoryFinished {
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/inventory/dto/InventoryFinishedOrderDetailDto.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.inventory.dto;
+
+import com.sd.business.entity.inventory.po.InventoryFinishedOrderDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 成品仓库订单操作记录id新增编辑入参实体
+ *
+ * @author
+ * @since 2023-10-10
+ */
+@Getter
+@Setter
+public class InventoryFinishedOrderDetailDto extends InventoryFinishedOrderDetail {
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/inventory/dto/InventoryFinishedOrderDetailSelectDto.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.inventory.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 成品仓库订单操作记录id列表查询入参实体
+ *
+ * @author
+ * @since 2023-10-10
+ */
+@Getter
+@Setter
+public class InventoryFinishedOrderDetailSelectDto extends BaseSelectDto {
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/inventory/dto/InventoryFinishedOrderDto.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.inventory.dto;
+
+import com.sd.business.entity.inventory.po.InventoryFinishedOrder;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 成品仓库订单新增编辑入参实体
+ *
+ * @author
+ * @since 2023-10-10
+ */
+@Getter
+@Setter
+public class InventoryFinishedOrderDto extends InventoryFinishedOrder {
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/inventory/dto/InventoryFinishedOrderSelectDto.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.inventory.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 成品仓库订单列表查询入参实体
+ *
+ * @author
+ * @since 2023-10-10
+ */
+@Getter
+@Setter
+public class InventoryFinishedOrderSelectDto extends BaseSelectDto {
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/inventory/dto/InventoryFinishedSelectDto.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.inventory.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 成品仓库列表查询入参实体
+ *
+ * @author
+ * @since 2023-10-10
+ */
+@Getter
+@Setter
+public class InventoryFinishedSelectDto extends BaseSelectDto {
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/inventory/enums/FinishedOperationTypeEnum.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.inventory.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum FinishedOperationTypeEnum {
+
+    PRODUCTION_WAREHOUSING(1, "生产完成入库"),
+    SALE_OUT_OF_WAREHOUSE(2, "销售出库"),
+    ;
+
+    private final Integer type;
+    private final String explain;
+
+}

+ 33 - 0
sd-business/src/main/java/com/sd/business/entity/inventory/po/InventoryFinished.java

@@ -0,0 +1,33 @@
+package com.sd.business.entity.inventory.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 成品仓库
+ * </p>
+ *
+ * @author
+ * @since 2023-10-10
+ */
+@Getter
+@Setter
+@TableName("inventory_finished")
+public class InventoryFinished extends BasePo {
+
+    /**
+     * sku规格id
+     */
+    private Long skuSpecId;
+
+    /**
+     * 数量
+     */
+    private BigDecimal quantity;
+
+}

+ 53 - 0
sd-business/src/main/java/com/sd/business/entity/inventory/po/InventoryFinishedOrder.java

@@ -0,0 +1,53 @@
+package com.sd.business.entity.inventory.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 成品仓库订单
+ * </p>
+ *
+ * @author
+ * @since 2023-10-10
+ */
+@Getter
+@Setter
+@TableName("inventory_finished_order")
+public class InventoryFinishedOrder extends BasePo {
+
+    /**
+     * 事业部id
+     */
+    private Long departmentId;
+
+    /**
+     * 订单id
+     */
+    private Long orderInfoId;
+
+    /**
+     * 订单sku id
+     */
+    private Long orderSkuId;
+
+    /**
+     * sku规格id
+     */
+    private Long skuSpecId;
+
+    /**
+     * 数量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 状态 1在库 0不在库
+     */
+    private Integer status;
+
+}

+ 58 - 0
sd-business/src/main/java/com/sd/business/entity/inventory/po/InventoryFinishedOrderDetail.java

@@ -0,0 +1,58 @@
+package com.sd.business.entity.inventory.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 成品仓库订单操作记录id
+ * </p>
+ *
+ * @author
+ * @since 2023-10-10
+ */
+@Getter
+@Setter
+@TableName("inventory_finished_order_detail")
+public class InventoryFinishedOrderDetail extends BasePo {
+
+    /**
+     * 成品仓库订单id
+     */
+    private Long inventoryFinishedOrderId;
+
+    /**
+     * 事业部id
+     */
+    private Long departmentId;
+
+    /**
+     * 订单id
+     */
+    private Long orderInfoId;
+
+    /**
+     * 订单sku id
+     */
+    private Long orderSkuId;
+
+    /**
+     * sku规格id
+     */
+    private Long skuSpecId;
+
+    /**
+     * 数量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 操作类型 1生产完成入库 2销售出库
+     */
+    private Integer operationType;
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/inventory/vo/InventoryFinishedOrderDetailVo.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.inventory.vo;
+
+import com.sd.business.entity.inventory.po.InventoryFinishedOrderDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 成品仓库订单操作记录id列表查询返回值实体
+ *
+ * @author
+ * @since 2023-10-10
+ */
+@Getter
+@Setter
+public class InventoryFinishedOrderDetailVo extends InventoryFinishedOrderDetail {
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/inventory/vo/InventoryFinishedOrderVo.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.inventory.vo;
+
+import com.sd.business.entity.inventory.po.InventoryFinishedOrder;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 成品仓库订单列表查询返回值实体
+ *
+ * @author
+ * @since 2023-10-10
+ */
+@Getter
+@Setter
+public class InventoryFinishedOrderVo extends InventoryFinishedOrder {
+
+}

+ 27 - 0
sd-business/src/main/java/com/sd/business/entity/inventory/vo/InventoryFinishedVo.java

@@ -0,0 +1,27 @@
+package com.sd.business.entity.inventory.vo;
+
+import com.sd.business.entity.inventory.po.InventoryFinished;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 成品仓库列表查询返回值实体
+ *
+ * @author
+ * @since 2023-10-10
+ */
+@Getter
+@Setter
+public class InventoryFinishedVo extends InventoryFinished {
+
+    /**
+     * sku规格品号
+     */
+    private String skuSpecCode;
+
+    /**
+     * sku规格品名
+     */
+    private String skuSpecName;
+
+}

+ 26 - 0
sd-business/src/main/java/com/sd/business/mapper/inventory/InventoryFinishedMapper.java

@@ -0,0 +1,26 @@
+package com.sd.business.mapper.inventory;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.sd.business.entity.inventory.po.InventoryFinished;
+import com.sd.business.entity.inventory.vo.InventoryFinishedVo;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 成品仓库 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-10-10
+ */
+public interface InventoryFinishedMapper extends BaseMapper<InventoryFinished> {
+
+    /**
+     * 成品仓库分页
+     */
+    Page<InventoryFinishedVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<InventoryFinished> wrapper);
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/mapper/inventory/InventoryFinishedOrderDetailMapper.java

@@ -0,0 +1,17 @@
+package com.sd.business.mapper.inventory;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sd.business.entity.inventory.po.InventoryFinishedOrderDetail;
+
+
+/**
+ * <p>
+ * 成品仓库订单操作记录id Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-10-10
+ */
+public interface InventoryFinishedOrderDetailMapper extends BaseMapper<InventoryFinishedOrderDetail> {
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/mapper/inventory/InventoryFinishedOrderMapper.java

@@ -0,0 +1,17 @@
+package com.sd.business.mapper.inventory;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sd.business.entity.inventory.po.InventoryFinishedOrder;
+
+
+/**
+ * <p>
+ * 成品仓库订单 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-10-10
+ */
+public interface InventoryFinishedOrderMapper extends BaseMapper<InventoryFinishedOrder> {
+
+}

+ 28 - 0
sd-business/src/main/java/com/sd/business/service/inventory/InventoryFinishedOrderDetailService.java

@@ -0,0 +1,28 @@
+package com.sd.business.service.inventory;
+
+import com.ruoyi.common.core.service.BaseService;
+import com.sd.business.entity.inventory.enums.FinishedOperationTypeEnum;
+import com.sd.business.entity.inventory.po.InventoryFinishedOrder;
+import com.sd.business.entity.inventory.po.InventoryFinishedOrderDetail;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 成品仓库订单操作记录id 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-10-10
+ */
+public interface InventoryFinishedOrderDetailService extends BaseService<InventoryFinishedOrderDetail> {
+
+    /**
+     * 添加生产入库流水记录
+     *
+     * @param list 成品仓库订单信息
+     */
+    void add(List<InventoryFinishedOrder> list, FinishedOperationTypeEnum typeEnum);
+
+}

+ 41 - 0
sd-business/src/main/java/com/sd/business/service/inventory/InventoryFinishedOrderService.java

@@ -0,0 +1,41 @@
+package com.sd.business.service.inventory;
+
+import com.ruoyi.common.core.service.BaseService;
+import com.sd.business.entity.inventory.po.InventoryFinishedOrder;
+import com.sd.business.entity.order.po.OrderSku;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 成品仓库订单 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-10-10
+ */
+public interface InventoryFinishedOrderService extends BaseService<InventoryFinishedOrder> {
+
+    /**
+     * 生产入库
+     *
+     * @param orderSkuList 订单明细列表
+     */
+    void productionWarehousing(List<OrderSku> orderSkuList);
+
+    /**
+     * 根据订单id删除记录
+     *
+     * @param orderId 订单id
+     */
+    void removeByOrderId(Long orderId);
+
+    /**
+     * 销售出库
+     *
+     * @param inventoryFinishedOrderList 成品仓库订单明细
+     */
+    void saleOutOfWarehouse(List<InventoryFinishedOrder> inventoryFinishedOrderList);
+
+}

+ 48 - 0
sd-business/src/main/java/com/sd/business/service/inventory/InventoryFinishedService.java

@@ -0,0 +1,48 @@
+package com.sd.business.service.inventory;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.service.BaseService;
+import com.sd.business.entity.inventory.dto.InventoryFinishedSelectDto;
+import com.sd.business.entity.inventory.po.InventoryFinished;
+import com.sd.business.entity.inventory.vo.InventoryFinishedVo;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 成品仓库 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-10-10
+ */
+public interface InventoryFinishedService extends BaseService<InventoryFinished> {
+
+    /**
+     * 成品仓库分页
+     */
+    Page<InventoryFinishedVo> getPage(InventoryFinishedSelectDto dto);
+
+    /**
+     * 生产入库
+     *
+     * @param orderIdList 订单id列表
+     */
+    void productionWarehousing(List<Long> orderIdList);
+
+    /**
+     * 删除订单回滚库存
+     *
+     * @param orderId 订单id
+     */
+    void removeOrder(Long orderId);
+
+    /**
+     * 销售出库
+     *
+     * @param orderIdList 订单id列表
+     */
+    void saleOutOfWarehouse(List<Long> orderIdList);
+
+}

+ 44 - 0
sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryFinishedOrderDetailServiceImpl.java

@@ -0,0 +1,44 @@
+package com.sd.business.service.inventory.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sd.business.entity.inventory.enums.FinishedOperationTypeEnum;
+import com.sd.business.entity.inventory.po.InventoryFinishedOrder;
+import com.sd.business.entity.inventory.po.InventoryFinishedOrderDetail;
+import com.sd.business.mapper.inventory.InventoryFinishedOrderDetailMapper;
+import com.sd.business.service.inventory.InventoryFinishedOrderDetailService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 成品仓库订单操作记录id 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-10-10
+ */
+@Service
+public class InventoryFinishedOrderDetailServiceImpl extends ServiceImpl<InventoryFinishedOrderDetailMapper, InventoryFinishedOrderDetail> implements InventoryFinishedOrderDetailService {
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(List<InventoryFinishedOrder> list, FinishedOperationTypeEnum typeEnum) {
+        List<InventoryFinishedOrderDetail> inventoryFinishedOrderDetailList = list.stream().map(item -> {
+            InventoryFinishedOrderDetail inventoryFinishedOrderDetail = new InventoryFinishedOrderDetail();
+            inventoryFinishedOrderDetail.setInventoryFinishedOrderId(item.getId());
+            inventoryFinishedOrderDetail.setDepartmentId(item.getDepartmentId());
+            inventoryFinishedOrderDetail.setOrderInfoId(item.getOrderInfoId());
+            inventoryFinishedOrderDetail.setOrderSkuId(item.getOrderSkuId());
+            inventoryFinishedOrderDetail.setSkuSpecId(item.getSkuSpecId());
+            inventoryFinishedOrderDetail.setQuantity(item.getQuantity());
+            inventoryFinishedOrderDetail.setOperationType(typeEnum.getType());
+            return inventoryFinishedOrderDetail;
+        }).collect(Collectors.toList());
+        saveBatch(inventoryFinishedOrderDetailList);
+    }
+
+}

+ 91 - 0
sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryFinishedOrderServiceImpl.java

@@ -0,0 +1,91 @@
+package com.sd.business.service.inventory.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.constant.StatusConstant;
+import com.ruoyi.common.core.domain.BaseIdPo;
+import com.sd.business.entity.department.constant.DepartmentConstant;
+import com.sd.business.entity.inventory.enums.FinishedOperationTypeEnum;
+import com.sd.business.entity.inventory.po.InventoryFinishedOrder;
+import com.sd.business.entity.inventory.po.InventoryFinishedOrderDetail;
+import com.sd.business.entity.order.po.OrderInfo;
+import com.sd.business.entity.order.po.OrderSku;
+import com.sd.business.mapper.inventory.InventoryFinishedOrderMapper;
+import com.sd.business.service.inventory.InventoryFinishedOrderDetailService;
+import com.sd.business.service.inventory.InventoryFinishedOrderService;
+import com.sd.business.service.order.OrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 成品仓库订单 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-10-10
+ */
+@Service
+public class InventoryFinishedOrderServiceImpl extends ServiceImpl<InventoryFinishedOrderMapper, InventoryFinishedOrder> implements InventoryFinishedOrderService {
+
+    @Autowired
+    private InventoryFinishedOrderDetailService inventoryFinishedOrderDetailService;
+
+    @Autowired
+    private OrderService orderService;
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void productionWarehousing(List<OrderSku> orderSkuList) {
+        // 保存成品订单信息
+        List<InventoryFinishedOrder> list = orderSkuList.stream().map(item -> {
+            InventoryFinishedOrder inventoryFinishedOrder = new InventoryFinishedOrder();
+            inventoryFinishedOrder.setDepartmentId(DepartmentConstant.SD_SPORTS);
+            inventoryFinishedOrder.setOrderInfoId(item.getOrderId());
+            inventoryFinishedOrder.setOrderSkuId(item.getId());
+            inventoryFinishedOrder.setSkuSpecId(item.getSkuSpecId());
+            inventoryFinishedOrder.setQuantity(item.getQuantity());
+            inventoryFinishedOrder.setStatus(StatusConstant.YES);
+            return inventoryFinishedOrder;
+        }).collect(Collectors.toList());
+        saveBatch(list);
+
+        // 添加流水记录
+        inventoryFinishedOrderDetailService.add(list, FinishedOperationTypeEnum.PRODUCTION_WAREHOUSING);
+    }
+
+    @Override
+    public void removeByOrderId(Long orderId) {
+        remove(q -> q.eq(InventoryFinishedOrder::getOrderInfoId, orderId));
+        inventoryFinishedOrderDetailService.remove(q -> q.eq(InventoryFinishedOrderDetail::getOrderInfoId, orderId));
+    }
+
+    @Override
+    public void saleOutOfWarehouse(List<InventoryFinishedOrder> list) {
+
+        List<Long> orderIdList = list.stream()
+                .map(InventoryFinishedOrder::getOrderInfoId)
+                .distinct()
+                .collect(Collectors.toList());
+
+        Map<Long, OrderInfo> orderMap = orderService.mapKEntity(BaseIdPo::getId, q -> q.in(BaseIdPo::getId, orderIdList));
+
+        for (InventoryFinishedOrder item : list) {
+            item.setStatus(StatusConstant.NO);
+            OrderInfo orderInfo = orderMap.get(item.getOrderInfoId());
+            if (Objects.equals(orderInfo.getType(), 2)) {
+                item.setDepartmentId(orderInfo.getDepartmentId());
+            }
+        }
+
+        // 添加流水记录
+        inventoryFinishedOrderDetailService.add(list, FinishedOperationTypeEnum.SALE_OUT_OF_WAREHOUSE);
+    }
+
+}

+ 185 - 0
sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryFinishedServiceImpl.java

@@ -0,0 +1,185 @@
+package com.sd.business.service.inventory.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.constant.StatusConstant;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.sd.business.entity.inventory.dto.InventoryFinishedSelectDto;
+import com.sd.business.entity.inventory.po.InventoryFinished;
+import com.sd.business.entity.inventory.po.InventoryFinishedOrder;
+import com.sd.business.entity.inventory.vo.InventoryFinishedVo;
+import com.sd.business.entity.order.po.OrderSku;
+import com.sd.business.mapper.inventory.InventoryFinishedMapper;
+import com.sd.business.service.inventory.InventoryFinishedOrderService;
+import com.sd.business.service.inventory.InventoryFinishedService;
+import com.sd.business.service.order.OrderService;
+import com.sd.business.service.order.OrderSkuService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 成品仓库 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-10-10
+ */
+@Service
+public class InventoryFinishedServiceImpl extends ServiceImpl<InventoryFinishedMapper, InventoryFinished> implements InventoryFinishedService {
+
+    @Autowired
+    private OrderService orderService;
+
+    @Autowired
+    private OrderSkuService orderSkuService;
+
+    @Autowired
+    private InventoryFinishedOrderService inventoryFinishedOrderService;
+
+    @Override
+    public Page<InventoryFinishedVo> getPage(InventoryFinishedSelectDto dto) {
+        IWrapper<InventoryFinished> wrapper = getWrapper();
+        wrapper.orderByDesc("if", InventoryFinished::getId);
+        Page<InventoryFinishedVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void productionWarehousing(List<Long> orderIdList) {
+        if (orderIdList.isEmpty()) {
+            return;
+        }
+
+        // 查询订单sku明细
+        List<OrderSku> orderSkuList = orderSkuService.list(q -> q.in(OrderSku::getOrderId, orderIdList));
+        if (orderSkuList.isEmpty()) {
+            return;
+        }
+
+        // 添加成品仓库存
+        List<InventoryFinished> inventoryFinishedList = orderSkuList.stream().map(item -> {
+            InventoryFinished inventoryFinished = new InventoryFinished();
+            inventoryFinished.setSkuSpecId(item.getSkuSpecId());
+            inventoryFinished.setQuantity(item.getQuantity());
+            return inventoryFinished;
+        }).collect(Collectors.toList());
+        inOut(inventoryFinishedList, true);
+        inventoryFinishedOrderService.productionWarehousing(orderSkuList);
+    }
+
+    @Override
+    public void removeOrder(Long orderId) {
+
+        // 查询成品仓库
+        List<InventoryFinishedOrder> list = inventoryFinishedOrderService.list(q -> q
+                .eq(InventoryFinishedOrder::getOrderInfoId, orderId)
+                .eq(InventoryFinishedOrder::getStatus, StatusConstant.YES));
+
+        if (list.isEmpty()) {
+            return;
+        }
+
+        // 成品库存出库
+        outByFinishedOrder(list);
+
+        // 删除成品仓库订单以及明细
+        inventoryFinishedOrderService.removeByOrderId(orderId);
+    }
+
+    @Override
+    public void saleOutOfWarehouse(List<Long> orderIdList) {
+        if (orderIdList.isEmpty()) {
+            return;
+        }
+
+        // 查询成品仓库
+        List<InventoryFinishedOrder> list = inventoryFinishedOrderService.list(q -> q
+                .in(InventoryFinishedOrder::getOrderInfoId, orderIdList)
+                .eq(InventoryFinishedOrder::getStatus, StatusConstant.YES));
+
+        if (list.isEmpty()) {
+            return;
+        }
+
+        // 成品库存出库
+        outByFinishedOrder(list);
+
+        // 产品库订单出库
+        inventoryFinishedOrderService.saleOutOfWarehouse(list);
+    }
+
+    /**
+     * 成品仓sku规格出入库
+     */
+    private void inOut(List<InventoryFinished> list, boolean isIn) {
+
+        if (list.isEmpty()) {
+            return;
+        }
+
+        // 相同sku合并
+        Map<Long, InventoryFinished> map = list.stream().collect(Collectors.toMap(
+                InventoryFinished::getSkuSpecId,
+                Function.identity(),
+                (v1, v2) -> {
+                    v1.setQuantity(v1.getQuantity().add(v2.getQuantity()));
+                    return v1;
+                }));
+
+        synchronized (this) {
+
+            // 获取原库存数据
+            Map<Long, InventoryFinished> oldStorageMap = mapKEntity(InventoryFinished::getSkuSpecId,
+                    q -> q.in(InventoryFinished::getSkuSpecId, map.keySet()));
+
+            // 计算入库后库存数量
+            for (InventoryFinished item : map.values()) {
+                InventoryFinished inventoryFinished = oldStorageMap.get(item.getSkuSpecId());
+                if (inventoryFinished == null) {
+                    continue;
+                }
+                BigDecimal quantity;
+                if (isIn) {
+                    quantity = inventoryFinished.getQuantity().add(item.getQuantity());
+                } else {
+                    quantity = inventoryFinished.getQuantity().subtract(item.getQuantity());
+                }
+                item.setId(inventoryFinished.getId());
+                item.setQuantity(quantity);
+            }
+
+            // 更新数据库
+            saveOrUpdateBatch(map.values());
+        }
+
+    }
+
+    /**
+     * 成品库存出库
+     *
+     * @param list 成品仓库
+     */
+    private void outByFinishedOrder(List<InventoryFinishedOrder> list) {
+
+        List<InventoryFinished> inventoryFinishedList = list.stream().map(item -> {
+            InventoryFinished inventoryFinished = new InventoryFinished();
+            inventoryFinished.setQuantity(item.getQuantity());
+            inventoryFinished.setSkuSpecId(item.getSkuSpecId());
+            return inventoryFinished;
+        }).collect(Collectors.toList());
+
+        inOut(inventoryFinishedList, false);
+
+    }
+
+}

+ 16 - 0
sd-business/src/main/resources/mapper/inventory/InventoryFinishedMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sd.business.mapper.inventory.InventoryFinishedMapper">
+
+    <select id="getPage" resultType="com.sd.business.entity.inventory.vo.InventoryFinishedVo">
+        select i.id,
+               i.sku_spec_id,
+               i.quantity,
+               ss.name skuSpecName,
+               ss.code skuSpecCode
+        from inventory_finished i
+                 left join sku_spec ss on ss.id = i.sku_spec_id
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 4 - 0
sd-business/src/main/resources/mapper/inventory/InventoryFinishedOrderDetailMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sd.business.mapper.inventory.InventoryFinishedOrderDetailMapper">
+</mapper>

+ 4 - 0
sd-business/src/main/resources/mapper/inventory/InventoryFinishedOrderMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sd.business.mapper.inventory.InventoryFinishedOrderMapper">
+</mapper>