瀏覽代碼

维多利亚

home 2 年之前
父節點
當前提交
8cf988c2a1

+ 12 - 2
hx-service-api/victoriatourist-api/src/main/java/com/fjhx/entity/logistics/LogisticsInfo.java

@@ -23,9 +23,19 @@ import java.util.List;
 public class LogisticsInfo extends BaseEntity {
 
     /**
-     * 采购单id
+     * 业务id
      */
-    private Long purchaseId;
+    private Long businessId;
+
+    /**
+     * 业务类型(1采购出货 2京东订单出货)
+     */
+    private Integer businessType;
+
+    /**
+     * 仓库id
+     */
+    private Long warehouseId;
 
     /**
      * 物流单号

+ 3 - 2
hx-service-api/victoriatourist-api/src/main/java/com/fjhx/enums/stock/OutTypeEnum.java

@@ -12,8 +12,9 @@ import java.util.Map;
  */
 @Getter
 public enum OutTypeEnum {
-    PURCHASE(1, "采购出库"),
-    MANUAL(2, "手动出库"),
+    PURCHASE(1, "采购订单出库"),
+    JD(2, "京东订单出库"),
+    MANUAL(3, "手动出库"),
     ;
 
     private final int key;

+ 39 - 1
hx-service-api/victoriatourist-api/src/main/java/com/fjhx/params/order/IssueVo.java

@@ -1,7 +1,12 @@
 package com.fjhx.params.order;
 
+import com.fjhx.enums.stock.OutTypeEnum;
+import com.fjhx.params.stock.StockChangeVo;
 import lombok.Data;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 @Data
 public class IssueVo {
 
@@ -16,8 +21,41 @@ public class IssueVo {
     private Long warehouseId;
 
     /**
+     * 快递单号
+     */
+    private String logisticsCode;
+
+    /**
+     * 快递公司编码
+     */
+    private String logisticsCompanyCode;
+
+    /**
      * 类型:1、京东订单出库 2、销售订单出库
      */
-    private Integer type;
+    private OutTypeEnum outTypeEnum;
+
+    /**
+     * 出库明细
+     */
+    private List<IssueDetails> orderDetailsList;
+
+    @Data
+    public static class IssueDetails implements StockChangeVo.ChangeDetails {
+
+        private Long orderDetailsId;
+        private Long productId;
+        private BigDecimal changeQuantity;
+
+        @Override
+        public Long getGoodsId() {
+            return this.productId;
+        }
+
+        @Override
+        public BigDecimal getChangeQuantity() {
+            return this.changeQuantity;
+        }
 
+    }
 }

+ 21 - 15
hx-service-api/victoriatourist-api/src/main/java/com/fjhx/params/stock/StockChangeVo.java

@@ -9,6 +9,12 @@ import java.util.List;
 public class StockChangeVo {
 
     /**
+     * 默认业务ID
+     * 未指定业务ID时,会使用此业务ID
+     */
+    private Long defaultBusinessId;
+
+    /**
      * 默认出库或入库的仓库id
      * 未指定仓库id时,会使用此仓库id
      */
@@ -21,12 +27,6 @@ public class StockChangeVo {
     private String defaultRemarks;
 
     /**
-     * 默认业务ID
-     * 未指定业务ID时,会使用此业务ID
-     */
-    private Long defaultBusinessId;
-
-    /**
      * InTypeEnum or OutTypeEnum
      */
     private Enum<?> typeEnum;
@@ -39,29 +39,35 @@ public class StockChangeVo {
     public interface ChangeDetails {
 
         /**
-         * 业务id
+         * 物品id
          */
-        Long getBusinessId();
+        Long getGoodsId();
 
         /**
-         * 物品id
+         * 变更数量
          */
-        Long getGoodsId();
+        BigDecimal getChangeQuantity();
 
         /**
-         * 仓库id
+         * 业务id
          */
-        Long getWarehouseId();
+        default Long getBusinessId() {
+            return null;
+        }
 
         /**
-         * 变更数量
+         * 仓库id
          */
-        BigDecimal getChangeQuantity();
+        default Long getWarehouseId() {
+            return null;
+        }
 
         /**
          * 备注
          */
-        String getRemarks();
+        default String getRemarks() {
+            return null;
+        }
 
     }
 

+ 0 - 6
hx-service/victoriatourist/src/main/java/com/fjhx/controller/order/OrderDetailsController.java

@@ -34,11 +34,5 @@ public class OrderDetailsController {
         return R.success(result);
     }
 
-    @PostMapping("/issue")
-    public R issue(@RequestBody IssueVo issueVo) {
-        orderDetailsService.issue(issueVo);
-        return R.success();
-    }
-
 }
 

+ 13 - 0
hx-service/victoriatourist/src/main/java/com/fjhx/controller/order/OrderSalesController.java

@@ -1,8 +1,11 @@
 package com.fjhx.controller.order;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.enums.stock.OutTypeEnum;
+import com.fjhx.params.order.IssueVo;
 import com.fjhx.params.order.OrderInfoEx;
 import com.fjhx.params.order.OrderInfoVo;
+import com.fjhx.service.order.OrderDetailsService;
 import com.fjhx.service.order.OrderInfoService;
 import org.springblade.core.tool.api.R;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,6 +31,9 @@ public class OrderSalesController {
     @Autowired
     private OrderInfoService orderInfoService;
 
+    @Autowired
+    private OrderDetailsService orderDetailsService;
+
     @PostMapping("/page")
     public R page(@RequestBody Map<String, Object> condition) {
         Page<OrderInfoEx> result = orderInfoService.getPage(condition);
@@ -53,5 +59,12 @@ public class OrderSalesController {
         return R.success();
     }
 
+    @PostMapping("/issue")
+    public R issue(@RequestBody IssueVo issueVo) {
+        issueVo.setOutTypeEnum(OutTypeEnum.PURCHASE);
+        orderDetailsService.issue(issueVo);
+        return R.success();
+    }
+
 }
 

+ 2 - 2
hx-service/victoriatourist/src/main/java/com/fjhx/service/logistics/impl/LogisticsInfoServiceImpl.java

@@ -99,7 +99,7 @@ public class LogisticsInfoServiceImpl extends ServiceImpl<LogisticsInfoMapper, L
         if (Func.isEmpty(purchaseIds)) {
             return new ArrayList<>();
         }
-        return lambdaQuery().in(LogisticsInfo::getPurchaseId, purchaseIds).list();
+        return lambdaQuery().in(LogisticsInfo::getBusinessId, purchaseIds).list();
     }
 
     /**
@@ -114,7 +114,7 @@ public class LogisticsInfoServiceImpl extends ServiceImpl<LogisticsInfoMapper, L
         if (Func.isEmpty(list)) {
             return new HashMap<>();
         }
-        return list.stream().collect(Collectors.groupingBy(LogisticsInfo::getPurchaseId));
+        return list.stream().collect(Collectors.groupingBy(LogisticsInfo::getBusinessId));
     }
 
     /**

+ 87 - 0
hx-service/victoriatourist/src/main/java/com/fjhx/service/order/impl/OrderDetailsServiceImpl.java

@@ -2,18 +2,30 @@ package com.fjhx.service.order.impl;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.entity.logistics.LogisticsInfo;
 import com.fjhx.entity.order.OrderDetails;
+import com.fjhx.entity.order.OrderInfo;
 import com.fjhx.mapper.order.OrderDetailsMapper;
 import com.fjhx.params.order.IssueVo;
 import com.fjhx.params.order.OrderDetailsEx;
 import com.fjhx.params.order.OrderDetailsVo;
+import com.fjhx.params.stock.StockChangeVo;
+import com.fjhx.service.logistics.LogisticsInfoService;
 import com.fjhx.service.order.OrderDetailsService;
+import com.fjhx.service.order.OrderInfoService;
+import com.fjhx.service.stock.StockService;
 import com.fjhx.utils.Assert;
 import com.fjhx.utils.wrapperUtil.IWrapper;
+import org.springblade.core.log.exception.ServiceException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 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.stream.Collectors;
 
 /**
  * <p>
@@ -26,6 +38,16 @@ import java.util.Map;
 @Service
 public class OrderDetailsServiceImpl extends ServiceImpl<OrderDetailsMapper, OrderDetails> implements OrderDetailsService {
 
+    @Lazy
+    @Autowired
+    private OrderInfoService orderInfoService;
+
+    @Autowired
+    private LogisticsInfoService logisticsInfoService;
+
+    @Autowired
+    private StockService stockService;
+
     @Override
     public Page<OrderDetails> getPage(Map<String, Object> condition) {
 
@@ -59,9 +81,74 @@ public class OrderDetailsServiceImpl extends ServiceImpl<OrderDetailsMapper, Ord
         return baseMapper.listByOrderSalesId(wrapper);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void issue(IssueVo issueVo) {
+        Long orderId = issueVo.getOrderId();
+        Assert.notEmpty(orderId, "订单id不能为空");
+
+        List<IssueVo.IssueDetails> orderDetailsList = issueVo.getOrderDetailsList();
+
+        Map<Long, BigDecimal> map = orderDetailsList.stream().collect(Collectors.toMap(
+                IssueVo.IssueDetails::getOrderDetailsId,
+                IssueVo.IssueDetails::getChangeQuantity
+        ));
+
+        // 变更订单明细未出库数量
+        synchronized (this) {
+            List<OrderDetails> list = list(q -> q.eq(OrderDetails::getOrderId, orderId));
+
+            for (OrderDetails orderDetails : list) {
+                Long id = orderDetails.getId();
+                BigDecimal changeQuantity = map.get(id);
+                if (changeQuantity == null || changeQuantity.compareTo(BigDecimal.ZERO) == 0) {
+                    continue;
+                }
+
+                BigDecimal notIssuedQuantity = orderDetails.getNotIssuedQuantity();
+
+                if (notIssuedQuantity.compareTo(changeQuantity) < 0) {
+                    throw new ServiceException("出库数量超过待出库数量,操作失败");
+                }
+
+                // 重新赋值未出库数量
+                orderDetails.setNotIssuedQuantity(notIssuedQuantity.subtract(changeQuantity));
+            }
+            updateBatchById(list);
+
+            // 如果未出库数量全为0,修改订单完成状态
+            long count = list.stream().filter(item -> item.getNotIssuedQuantity().compareTo(BigDecimal.ZERO) > 0).count();
+            OrderInfo orderInfo = new OrderInfo();
+            orderInfo.setId(orderId);
+            if (count == 0) {
+                orderInfo.setStatus(2);
+                orderInfo.setIssueStatus(3);
+            } else {
+                orderInfo.setIssueStatus(2);
+            }
+            orderInfoService.updateById(orderInfo);
+        }
+
+        // 保存物流消息
+        LogisticsInfo logisticsInfo = new LogisticsInfo();
+        logisticsInfo.setBusinessId(orderId);
+        logisticsInfo.setBusinessType(2);
+        logisticsInfo.setCode(issueVo.getLogisticsCode());
+        logisticsInfo.setLogisticsCompanyCode(issueVo.getLogisticsCompanyCode());
+        logisticsInfo.setWarehouseId(issueVo.getWarehouseId());
+        // TODO 添加快递100的状态
+        // logisticsInfo.setLogisticsStatus();
+        logisticsInfo.setStatus(0);
+        logisticsInfoService.save(logisticsInfo);
+
+        // 变更库存添加流水记录
+        StockChangeVo stockChangeVo = new StockChangeVo();
+        stockChangeVo.setDefaultBusinessId(orderId);
+        stockChangeVo.setDefaultWarehouseId(issueVo.getWarehouseId());
+        stockChangeVo.setTypeEnum(issueVo.getOutTypeEnum());
+        stockChangeVo.setChangeDetailsList(orderDetailsList);
 
+        stockService.changeQuantity(stockChangeVo);
     }
 
 }