Bläddra i källkod

打单 装箱明细

24282 1 år sedan
förälder
incheckning
49f2b75f79

+ 26 - 0
sd-business/src/main/java/com/sd/business/controller/order/IssueBillController.java

@@ -3,7 +3,9 @@ package com.sd.business.controller.order;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.sd.business.entity.order.dto.IssueBillSelectDto;
+import com.sd.business.entity.order.dto.OrderEncasementDto;
 import com.sd.business.entity.order.dto.OrderInfoDto;
+import com.sd.business.entity.order.po.OrderEncasement;
 import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.order.vo.AssemblyDetailVo;
 import com.sd.business.entity.order.vo.IssueBillVo;
@@ -87,4 +89,28 @@ public class IssueBillController {
         return issueBillService.assemblyDetail(dto.getId());
     }
 
+    /**
+     * 删除包裹
+     */
+    @PostMapping("/deleteAllowance")
+    public void deleteAllowance(@RequestBody BaseSelectDto dto) {
+        issueBillService.deleteAllowance(dto.getId());
+    }
+
+    /**
+     * 复制包裹
+     */
+    @PostMapping("/copyAllowance")
+    public AssemblyDetailVo copyAllowance(@RequestBody OrderEncasement dto) {
+        return issueBillService.copyAllowance(dto);
+    }
+
+    /**
+     * 添加包裹
+     */
+    @PostMapping("/addAllowance")
+    public AssemblyDetailVo addAllowance(@Validated @RequestBody OrderEncasementDto dto) {
+        return issueBillService.addAllowance(dto);
+    }
+
 }

+ 12 - 0
sd-business/src/main/java/com/sd/business/entity/order/dto/OrderEncasementDto.java

@@ -1,9 +1,14 @@
 package com.sd.business.entity.order.dto;
 
 import com.sd.business.entity.order.po.OrderEncasement;
+import com.sd.business.entity.order.po.OrderEncasementDetail;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
 /**
  * 订单装箱新增编辑入参实体
  *
@@ -14,4 +19,11 @@ import lombok.Setter;
 @Setter
 public class OrderEncasementDto extends OrderEncasement {
 
+    /**
+     * 明细
+     */
+    @Valid
+    @NotEmpty(message = "产品明细不能为空")
+    private List<OrderEncasementDetail> orderEncasementDetailList;
+
 }

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

@@ -5,6 +5,7 @@ import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 
 /**
@@ -23,21 +24,25 @@ public class OrderEncasement extends BasePo {
     /**
      * 订单id
      */
+    @NotNull(message = "订单id不能为空")
     private Long orderId;
 
     /**
      * 长 cm
      */
+    @NotNull(message = "长不能为空")
     private BigDecimal length;
 
     /**
      * 宽 cm
      */
+    @NotNull(message = "宽不能为空")
     private BigDecimal width;
 
     /**
      * 高 cm
      */
+    @NotNull(message = "高不能为空")
     private BigDecimal height;
 
     /**
@@ -48,6 +53,7 @@ public class OrderEncasement extends BasePo {
     /**
      * 包裹总数
      */
+    @NotNull(message = "包裹总数不能为空")
     private Integer total;
 
 }

+ 10 - 0
sd-business/src/main/java/com/sd/business/entity/order/po/OrderEncasementDetail.java

@@ -5,6 +5,7 @@ import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 
 /**
@@ -28,16 +29,25 @@ public class OrderEncasementDetail extends BasePo {
     /**
      * 订单产品id
      */
+    @NotNull(message = "订单sku id不能为空")
     private Long orderSkuId;
 
     /**
      * sku规格id
      */
+    @NotNull(message = "sku规格id不能为空")
     private Long skuSpecId;
 
     /**
+     * bom规格id
+     */
+    @NotNull(message = "bom规格id不能为空")
+    private Long bomSpecId;
+
+    /**
      * 数量
      */
+    @NotNull(message = "数量不能为空")
     private BigDecimal quantity;
 
 }

+ 5 - 0
sd-business/src/main/java/com/sd/business/entity/order/vo/AssemblyDetailVo.java

@@ -30,6 +30,11 @@ public class AssemblyDetailVo {
         private Long orderSkuId;
 
         /**
+         * bom规格id
+         */
+        private Long bomSpecId;
+
+        /**
          * sku规格id
          */
         private Long skuSpecId;

+ 17 - 0
sd-business/src/main/java/com/sd/business/service/order/IssueBillService.java

@@ -2,7 +2,9 @@ package com.sd.business.service.order;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.sd.business.entity.order.dto.IssueBillSelectDto;
+import com.sd.business.entity.order.dto.OrderEncasementDto;
 import com.sd.business.entity.order.dto.OrderInfoDto;
+import com.sd.business.entity.order.po.OrderEncasement;
 import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.order.vo.AssemblyDetailVo;
 import com.sd.business.entity.order.vo.IssueBillVo;
@@ -50,4 +52,19 @@ public interface IssueBillService {
      */
     AssemblyDetailVo assemblyDetail(Long id);
 
+    /**
+     * 删除包裹
+     */
+    void deleteAllowance(Long id);
+
+    /**
+     * 复制包裹
+     */
+    AssemblyDetailVo copyAllowance(OrderEncasement dto);
+
+    /**
+     * 添加包裹
+     */
+    AssemblyDetailVo addAllowance(OrderEncasementDto dto);
+
 }

+ 6 - 1
sd-business/src/main/java/com/sd/business/service/order/OrderEncasementService.java

@@ -41,6 +41,11 @@ public interface OrderEncasementService extends BaseService<OrderEncasement> {
     /**
      * 订单装箱删除
      */
-    void delete(Long orderId);
+    void deleteByOrderId(Long orderId);
+
+    /**
+     * 订单装箱删除
+     */
+    void delete(Long id);
 
 }

+ 62 - 2
sd-business/src/main/java/com/sd/business/service/order/impl/IssueBillServiceImpl.java

@@ -1,13 +1,17 @@
 package com.sd.business.service.order.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.file.utils.ObsFileUtil;
 import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.core.domain.BasePo;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.sd.business.entity.bom.po.BomSpec;
 import com.sd.business.entity.order.dto.IssueBillSelectDto;
+import com.sd.business.entity.order.dto.OrderEncasementDto;
 import com.sd.business.entity.order.dto.OrderInfoDto;
 import com.sd.business.entity.order.enums.OrderStatusEnum;
 import com.sd.business.entity.order.po.OrderEncasement;
@@ -20,10 +24,12 @@ import com.sd.business.entity.order.vo.OrderEncasementDetailVo;
 import com.sd.business.entity.order.vo.OrderEncasementVo;
 import com.sd.business.entity.production.dto.MergeOrderDto;
 import com.sd.business.mapper.order.IssueBillMapper;
+import com.sd.business.service.bom.BomSpecService;
 import com.sd.business.service.order.*;
 import com.sd.business.service.sku.SkuSpecService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -52,6 +58,9 @@ public class IssueBillServiceImpl implements IssueBillService {
     @Autowired
     private SkuSpecService skuSpecService;
 
+    @Autowired
+    private BomSpecService bomSpecService;
+
     @Override
     public Page<IssueBillVo> getPage(IssueBillSelectDto dto) {
         IWrapper<Object> wrapper = IWrapper.getWrapper();
@@ -134,18 +143,20 @@ public class IssueBillServiceImpl implements IssueBillService {
         ObsFileUtil.editFile(dto.getPackagePictureList(), dto.getId(), 2);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void merge(MergeOrderDto dto) {
         orderService.update(q -> q.eq(OrderInfo::getId, dto.getId()).set(OrderInfo::getMasterOrderId, 0));
         orderService.update(q -> q.in(OrderInfo::getId, dto.getMergeIdList()).set(OrderInfo::getMasterOrderId, dto.getId()));
-        orderEncasementService.delete(dto.getId());
+        orderEncasementService.deleteByOrderId(dto.getId());
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void unmerge(Long id) {
         orderService.update(q -> q.eq(OrderInfo::getId, id).set(OrderInfo::getMasterOrderId, null));
         orderService.update(q -> q.eq(OrderInfo::getMasterOrderId, id).set(OrderInfo::getMasterOrderId, null));
-        orderEncasementService.delete(id);
+        orderEncasementService.deleteByOrderId(id);
     }
 
     @Override
@@ -165,6 +176,7 @@ public class IssueBillServiceImpl implements IssueBillService {
             AssemblyDetailVo.SkuInfo skuInfo = new AssemblyDetailVo.SkuInfo();
             skuInfo.setOrderSkuId(item.getId());
             skuInfo.setSkuSpecId(item.getSkuSpecId());
+            skuInfo.setBomSpecId(item.getBomSpecId());
             skuInfo.setTotalQuantity(item.getQuantity());
             skuInfo.setSurplusQuantity(item.getQuantity());
             return skuInfo;
@@ -219,4 +231,52 @@ public class IssueBillServiceImpl implements IssueBillService {
         return result;
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void deleteAllowance(Long id) {
+        orderEncasementService.delete(id);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public AssemblyDetailVo copyAllowance(OrderEncasement dto) {
+        OrderEncasement orderEncasement = orderEncasementService.getById(dto.getId());
+        orderEncasement.setTotal(orderEncasement.getTotal() + dto.getTotal());
+        orderEncasementService.updateById(dto);
+        return verifiedQuantity(orderEncasement.getOrderId());
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public AssemblyDetailVo addAllowance(OrderEncasementDto dto) {
+        dto.setNetWeight(BigDecimal.ZERO);
+        orderEncasementService.save(dto);
+        List<OrderEncasementDetail> orderEncasementDetailList = dto.getOrderEncasementDetailList();
+        List<Long> bomSpecIdList = orderEncasementDetailList.stream().map(OrderEncasementDetail::getBomSpecId).collect(Collectors.toList());
+        List<BomSpec> bomSpecList = bomSpecService.listByIds(bomSpecIdList);
+        Map<Long, BomSpec> bomSpecMap = bomSpecList.stream().collect(Collectors.toMap(BaseIdPo::getId, Function.identity()));
+
+        orderEncasementDetailList.forEach(item -> {
+            item.setOrderEncasementId(dto.getId());
+
+            BigDecimal netWeight = ObjectUtil.defaultIfNull(bomSpecMap.get(item.getBomSpecId()).getNetWeight(), BigDecimal.ZERO);
+            dto.setNetWeight(dto.getNetWeight().add(netWeight));
+        });
+        return verifiedQuantity(dto.getOrderId());
+    }
+
+    /**
+     * 验证数量
+     */
+    private AssemblyDetailVo verifiedQuantity(Long orderId) {
+        AssemblyDetailVo assemblyDetailVo = assemblyDetail(orderId);
+        List<AssemblyDetailVo.SkuInfo> skuInfoList = assemblyDetailVo.getSkuInfoList();
+        for (AssemblyDetailVo.SkuInfo skuInfo : skuInfoList) {
+            if (skuInfo.getSurplusQuantity().compareTo(BigDecimal.ZERO) < 0) {
+                throw new ServiceException("数量不足:装箱数量大于被装箱数量");
+            }
+        }
+        return assemblyDetailVo;
+    }
+
 }

+ 8 - 1
sd-business/src/main/java/com/sd/business/service/order/impl/OrderEncasementServiceImpl.java

@@ -62,7 +62,7 @@ public class OrderEncasementServiceImpl extends ServiceImpl<OrderEncasementMappe
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void delete(Long orderId) {
+    public void deleteByOrderId(Long orderId) {
         List<OrderEncasement> list = list(q -> q.eq(OrderEncasement::getOrderId, orderId));
         if (list.size() == 0) {
             return;
@@ -73,4 +73,11 @@ public class OrderEncasementServiceImpl extends ServiceImpl<OrderEncasementMappe
         orderEncasementDetailService.remove(q -> q.in(OrderEncasementDetail::getOrderEncasementId, idList));
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(Long id) {
+        removeById(id);
+        orderEncasementDetailService.remove(q -> q.eq(OrderEncasementDetail::getOrderEncasementId, id));
+    }
+
 }

+ 1 - 1
sd-business/src/main/java/com/sd/business/service/order/impl/OrderServiceImpl.java

@@ -396,7 +396,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
         OrderInfo order = getById(dto.getId());
 
         if (ObjectUtil.notEqual(order.getStatus(), OrderStatusEnum.DRAFT.getKey())
-                || ObjectUtil.notEqual(order.getStatus(), OrderStatusEnum.UNDER_REVIEW.getKey())) {
+                && ObjectUtil.notEqual(order.getStatus(), OrderStatusEnum.UNDER_REVIEW.getKey())) {
             throw new ServiceException("订单不在草稿或待确认状态");
         }