Jelajahi Sumber

Merge remote-tracking branch 'origin/master'

24282 1 tahun lalu
induk
melakukan
417af92d98

+ 8 - 0
sd-business/src/main/java/com/sd/business/controller/bom/BomSpecController.java

@@ -102,4 +102,12 @@ public class BomSpecController {
         bomSpecService.editBoardSort(dto);
     }
 
+    /**
+     * bom规格编辑价格
+     */
+    @PostMapping("/editPrice")
+    public void editPrice(@RequestBody BomSpecDto bomSpecDto) {
+        bomSpecService.editPrice(bomSpecDto);
+    }
+
 }

+ 12 - 4
sd-business/src/main/java/com/sd/business/service/board/impl/DailyBoardServiceImpl.java

@@ -123,8 +123,7 @@ public class DailyBoardServiceImpl implements DailyBoardService {
         Map<Long, List<ProductionTask>> taskMap = productionTaskService.mapKGroup(ProductionTask::getOrderId, q -> q.between(ProductionTask::getCompleteTime, beginDate, endDate));
         // 查询今日出库单出库数据
         Map<String, List<OutboundOrder>> outboundOrderMap = outboundOrderService.mapKGroup(OutboundOrder::getOrderWlnCode,
-                q -> q.between(OutboundOrder::getOutboundTime, beginDate, endDate)
-                        .groupBy(Arrays.asList(OutboundOrder::getCode, OutboundOrder::getOrderWlnCode, OutboundOrder::getSkuSpecCode, OutboundOrder::getStorageCode, OutboundOrder::getQuantity)));
+                q -> q.between(OutboundOrder::getOutboundTime, beginDate, endDate));
 
         Set<String> orderWlnCodeSet = outboundOrderMap.keySet();
         // 订单id
@@ -165,7 +164,17 @@ public class DailyBoardServiceImpl implements DailyBoardService {
             if (productionTaskList.isEmpty() && outboundOrderList.isEmpty()) {
                 continue;
             }
+            List<String> skuKeyList = new ArrayList<>();
             for (OrderSku orderSku : orderSkus) {
+                // 判断是否有重复sku
+                Long skuSpecId = orderSku.getSkuSpecId();
+                Long bomSpecId = orderSku.getBomSpecId();
+                Integer printType = orderSku.getPrintType();
+                String skuKey = skuSpecId + ":" + bomSpecId + ":" + printType;
+                if (skuKeyList.contains(skuKey)) {
+                    continue;
+                }
+                skuKeyList.add(skuKey);
                 Long orderSkuId = orderSku.getSkuSpecId();
                 BomSpecBo bomSpecBo = bomSpecBoMap.get(orderSku.getBomSpecId());
                 if (bomSpecBo != null && !Objects.equals(bomSpecBo.getClassifyParentId(), 1L)) {
@@ -228,8 +237,7 @@ public class DailyBoardServiceImpl implements DailyBoardService {
 
         // 查询今日出库单出库数据
         Map<String, List<OutboundOrder>> outboundOrderMap = outboundOrderService.mapKGroup(OutboundOrder::getOrderWlnCode,
-                q -> q.between(OutboundOrder::getOutboundTime, beginDate, endDate)
-                        .groupBy(Arrays.asList(OutboundOrder::getCode, OutboundOrder::getOrderWlnCode, OutboundOrder::getSkuSpecCode, OutboundOrder::getStorageCode, OutboundOrder::getQuantity)));
+                q -> q.between(OutboundOrder::getOutboundTime, beginDate, endDate));
         if (ObjectUtil.isEmpty(outboundOrderMap)) {
             return vo;
         }

+ 7 - 0
sd-business/src/main/java/com/sd/business/service/bom/BomSpecService.java

@@ -65,4 +65,11 @@ public interface BomSpecService extends BaseService<BomSpec> {
      * @param dto
      */
     void editBoardSort(BomSpecUpdateBoardSortDto dto);
+
+    /**
+     * bom规格编辑价格
+     *
+     * @param bomSpecDto
+     */
+    void editPrice(BomSpecDto bomSpecDto);
 }

+ 34 - 4
sd-business/src/main/java/com/sd/business/service/bom/impl/BomSpecServiceImpl.java

@@ -5,6 +5,8 @@ import cn.hutool.core.util.ObjectUtil;
 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.core.domain.BaseIdPo;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.sd.business.entity.bom.dto.BomSpecDto;
 import com.sd.business.entity.bom.dto.BomSpecSelectDto;
@@ -13,16 +15,19 @@ import com.sd.business.entity.bom.dto.BomSpecUpdateBoardSortDto;
 import com.sd.business.entity.bom.po.BomSpec;
 import com.sd.business.entity.bom.vo.BomSpecBoardSelectVo;
 import com.sd.business.entity.bom.vo.BomSpecVo;
+import com.sd.business.entity.department.constant.DepartmentConstant;
 import com.sd.business.entity.inventory.po.Inventory;
+import com.sd.business.entity.warehouse.constant.WarehouseConstant;
 import com.sd.business.mapper.bom.BomSpecMapper;
 import com.sd.business.service.bom.BomSpecService;
 import com.sd.business.service.inventory.InventoryService;
-import com.sd.framework.util.StreamUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
@@ -89,11 +94,24 @@ public class BomSpecServiceImpl extends ServiceImpl<BomSpecMapper, BomSpec> impl
     @Override
     public List<BomSpecBoardSelectVo> getBoardList() {
         List<BomSpec> list = this.list(q -> q.eq(BomSpec::getIsShowBoard, StatusConstant.YES).orderByAsc(BomSpec::getSort));
+        List<Long> bomSpecIds = list.stream().map(BaseIdPo::getId).collect(Collectors.toList());
+        // 查询半成品和包材库存
+        List<Long> warehouseIds = new ArrayList<>();
+        warehouseIds.add(WarehouseConstant.SEMI_FINISHED_PRODUCT);
+        warehouseIds.add(WarehouseConstant.PACKAGING_MATERIAL);
+
+        Map<Long, Inventory> inventoryMap = inventoryService.mapKEntity(Inventory::getBomSpecId, q -> q.eq(Inventory::getDepartmentId, DepartmentConstant.SD_SPORTS)
+                .in(Inventory::getWarehouseId, warehouseIds)
+                .in(Inventory::getBomSpecId, bomSpecIds));
         List<BomSpecBoardSelectVo> boardSelectList = BeanUtil.copyToList(list, BomSpecBoardSelectVo.class);
         List<BomSpecBoardSelectVo> collect = boardSelectList.stream().peek(item -> {
-            List<Inventory> inventoryList = inventoryService.list(q -> q.eq(Inventory::getBomSpecId, item.getId()));
-            BigDecimal inventoryQuantity = ObjectUtil.isEmpty(inventoryList) ? BigDecimal.ZERO : StreamUtil.bigDecimalAdd(inventoryList, Inventory::getQuantity);
-            item.setInventoryQuantity(inventoryQuantity);
+            Inventory inventory = inventoryMap.get(item.getId());
+            if (inventory == null) {
+                item.setInventoryQuantity(BigDecimal.ZERO);
+            } else {
+                BigDecimal inventoryQuantity = inventory.getQuantity().add(inventory.getLockQuantity() == null ? BigDecimal.ZERO : inventory.getLockQuantity());
+                item.setInventoryQuantity(inventoryQuantity);
+            }
         }).collect(Collectors.toList());
         return collect;
     }
@@ -114,4 +132,16 @@ public class BomSpecServiceImpl extends ServiceImpl<BomSpecMapper, BomSpec> impl
             this.update(q -> q.set(BomSpec::getSort, currentSort).eq(BomSpec::getId, bomSpec.getId()));
         }
     }
+
+    @Override
+    public void editPrice(BomSpecDto bomSpecDto) {
+        BomSpec bomSpec = this.getById(bomSpecDto.getId());
+        if (bomSpec == null) {
+            throw new ServiceException("未知bom规格id!");
+        }
+        bomSpec.setCostPrice(bomSpecDto.getCostPrice());
+        bomSpec.setInternalSellingPrice(bomSpecDto.getInternalSellingPrice());
+        bomSpec.setExternalSellingPrice(bomSpecDto.getExternalSellingPrice());
+        this.updateById(bomSpec);
+    }
 }