瀏覽代碼

Merge remote-tracking branch 'origin/master'

fgd 1 年之前
父節點
當前提交
e0f98fae41
共有 31 個文件被更改,包括 926 次插入20 次删除
  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. 5 0
      sd-business/src/main/java/com/sd/business/entity/order/po/OrderEncasement.java
  16. 26 0
      sd-business/src/main/java/com/sd/business/mapper/inventory/InventoryFinishedMapper.java
  17. 17 0
      sd-business/src/main/java/com/sd/business/mapper/inventory/InventoryFinishedOrderDetailMapper.java
  18. 17 0
      sd-business/src/main/java/com/sd/business/mapper/inventory/InventoryFinishedOrderMapper.java
  19. 28 0
      sd-business/src/main/java/com/sd/business/service/inventory/InventoryFinishedOrderDetailService.java
  20. 41 0
      sd-business/src/main/java/com/sd/business/service/inventory/InventoryFinishedOrderService.java
  21. 48 0
      sd-business/src/main/java/com/sd/business/service/inventory/InventoryFinishedService.java
  22. 44 0
      sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryFinishedOrderDetailServiceImpl.java
  23. 91 0
      sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryFinishedOrderServiceImpl.java
  24. 185 0
      sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryFinishedServiceImpl.java
  25. 16 0
      sd-business/src/main/resources/mapper/inventory/InventoryFinishedMapper.xml
  26. 4 0
      sd-business/src/main/resources/mapper/inventory/InventoryFinishedOrderDetailMapper.xml
  27. 4 0
      sd-business/src/main/resources/mapper/inventory/InventoryFinishedOrderMapper.xml
  28. 7 7
      sd-cainiao/src/main/java/com/sd/cainiao/config/BasicKeyConfig.java
  29. 2 2
      sd-cainiao/src/main/java/com/sd/cainiao/controller/CaiNiaoController.java
  30. 2 2
      sd-cainiao/src/main/java/com/sd/cainiao/service/IsticeService.java
  31. 28 9
      sd-cainiao/src/main/java/com/sd/cainiao/service/impl/IsticeServiceImpl.java

+ 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;
+
+}

+ 5 - 0
sd-business/src/main/java/com/sd/business/entity/order/po/OrderEncasement.java

@@ -38,6 +38,11 @@ public class OrderEncasement extends BasePo {
     private String trackingNumber;
 
     /**
+     * 快递打印内容
+     */
+    private String trackingContent;
+
+    /**
      * 长 cm
      */
     @NotNull(message = "长不能为空")

+ 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>

+ 7 - 7
sd-cainiao/src/main/java/com/sd/cainiao/config/BasicKeyConfig.java

@@ -13,17 +13,17 @@ public class BasicKeyConfig {
     public BasicKeyBo basicKeyBo() {
         String activeProfile = SpringUtil.getActiveProfile();
         BasicKeyBo basicKeyBo = new BasicKeyBo();
-        if (activeProfile.equals("prod")) {
+//        if (activeProfile.equals("prod")) {
             basicKeyBo.setUrl(BasicKeyConstant.PROD_URL);
             basicKeyBo.setAppKey(BasicKeyConstant.PROD_APP_KEY);
             basicKeyBo.setSecretKey(BasicKeyConstant.PROD_SECRET_KEY);
             basicKeyBo.setToken(BasicKeyConstant.PROD_TOKEN);
-        } else {
-            basicKeyBo.setUrl(BasicKeyConstant.DEV_URL);
-            basicKeyBo.setAppKey(BasicKeyConstant.DEV_APP_KEY);
-            basicKeyBo.setSecretKey(BasicKeyConstant.DEV_SECRET_KEY);
-            basicKeyBo.setToken(BasicKeyConstant.DEV_TOKEN);
-        }
+//        } else {
+//            basicKeyBo.setUrl(BasicKeyConstant.DEV_URL);
+//            basicKeyBo.setAppKey(BasicKeyConstant.DEV_APP_KEY);
+//            basicKeyBo.setSecretKey(BasicKeyConstant.DEV_SECRET_KEY);
+//            basicKeyBo.setToken(BasicKeyConstant.DEV_TOKEN);
+//        }
         return basicKeyBo;
     }
 

+ 2 - 2
sd-cainiao/src/main/java/com/sd/cainiao/controller/CaiNiaoController.java

@@ -1,8 +1,8 @@
 package com.sd.cainiao.controller;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.sd.cainiao.service.IsticeService;
-import com.taobao.pac.sdk.cp.dataobject.response.TMS_WAYBILL_GET.WaybillCloudPrintResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -29,7 +29,7 @@ public class CaiNiaoController {
      * 赋值快递面单
      */
     @PostMapping("/takeNum")
-    public WaybillCloudPrintResponse takeNum(@RequestBody BaseSelectDto dto) {
+    public JSONObject takeNum(@RequestBody BaseSelectDto dto) {
         return isticeService.takeNum(dto.getId());
     }
 

+ 2 - 2
sd-cainiao/src/main/java/com/sd/cainiao/service/IsticeService.java

@@ -1,12 +1,12 @@
 package com.sd.cainiao.service;
 
-import com.taobao.pac.sdk.cp.dataobject.response.TMS_WAYBILL_GET.WaybillCloudPrintResponse;
+import com.alibaba.fastjson2.JSONObject;
 
 public interface IsticeService {
 
     /**
      * 通过物流云获取电子面单--取号
      */
-    WaybillCloudPrintResponse takeNum(Long orderEncasementId);
+    JSONObject takeNum(Long orderEncasementId);
 
 }

+ 28 - 9
sd-cainiao/src/main/java/com/sd/cainiao/service/impl/IsticeServiceImpl.java

@@ -1,6 +1,8 @@
 package com.sd.cainiao.service.impl;
 
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.exception.ServiceException;
 import com.sd.business.entity.express.po.ExpressDelivery;
@@ -26,10 +28,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -58,10 +57,19 @@ public class IsticeServiceImpl implements IsticeService {
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public synchronized WaybillCloudPrintResponse takeNum(Long orderEncasementId) {
+    public synchronized JSONObject takeNum(Long orderEncasementId) {
         OrderEncasement orderEncasement = orderEncasementService.getById(orderEncasementId);
-        if (orderEncasement == null || StrUtil.isNotBlank(orderEncasement.getTrackingNumber())) {
-            return null;
+
+        if (orderEncasement == null) {
+            throw new ServiceException("未知装箱订单id");
+        }
+
+        if (StrUtil.isNotBlank(orderEncasement.getTrackingContent())) {
+            return JSONObject.parseObject(orderEncasement.getTrackingContent());
+        }
+
+        if (StrUtil.isNotBlank(orderEncasement.getTrackingNumber())) {
+            throw new ServiceException("手动输入快递单号无法打印订单");
         }
 
         Long orderId = orderEncasement.getOrderId();
@@ -90,10 +98,15 @@ public class IsticeServiceImpl implements IsticeService {
         takeNumParam.setReceiveDistrict(orderInfo.getCounty());
         takeNumParam.setReceiveDetail(orderInfo.getDetailedAddress());
 
+        takeNumParam.setObjectId(IdWorker.getIdStr());
+        takeNumParam.setOrderNum(IdWorker.getIdStr());
+
+        StringJoiner joiner = new StringJoiner("\n");
         List<ItemParamDto> itemParamList = orderEncasementDetailList.stream().map(item -> {
             ItemParamDto itemParam = new ItemParamDto();
-            itemParam.setItemName(skuSpecNameMap.get(item.getBomSpecId()));
+            itemParam.setItemName(skuSpecNameMap.get(item.getSkuSpecId()));
             itemParam.setItemCount(item.getQuantity().intValue());
+            joiner.add(itemParam.getItemName() + "*" + itemParam.getItemCount());
             return itemParam;
         }).collect(Collectors.toList());
         takeNumParam.setItems(itemParamList);
@@ -101,10 +114,16 @@ public class IsticeServiceImpl implements IsticeService {
         List<WaybillCloudPrintResponse> waybillCloudPrintResponses = takeNum(takeNumParam);
         WaybillCloudPrintResponse waybillCloudPrintResponse = waybillCloudPrintResponses.get(0);
 
+        //拼接模板
+        JSONObject jsonObject = JSONObject.parseObject(waybillCloudPrintResponse.getPrintData());
+        jsonObject.put("detail", joiner.toString());
+        jsonObject.put("customTemplateUrl", expressDelivery.getCustomTemplateUrl());
+
         orderEncasement.setTrackingNumber(waybillCloudPrintResponse.getWaybillCode());
+        orderEncasement.setTrackingContent(jsonObject.toString());
         orderEncasementService.updateById(orderEncasement);
 
-        return waybillCloudPrintResponse;
+        return jsonObject;
     }
 
     public List<WaybillCloudPrintResponse> takeNum(TakeNumParamDto dto) {