Browse Source

in方法完成
out方法(bug维修中)

xiaomi 1 year ago
parent
commit
d2c8b94e69

+ 3 - 0
sd-business/src/main/java/com/sd/business/mapper/in/InOutStorageDetailsMapper.java

@@ -5,8 +5,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.sd.business.entity.in.vo.InOutStorageDetailsVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.sd.business.entity.inventory.po.BalancePriceNum;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 
 /**
  * <p>

+ 1 - 6
sd-business/src/main/java/com/sd/business/mapper/inventory/InventoryMapper.java

@@ -43,15 +43,10 @@ public interface InventoryMapper extends BaseMapper<Inventory> {
     List<QuantityByDepartmentVo> getQuantityByDepartment();
 
     /**
-     * 根据规格id获取结存金额和结存数量
-     */
-    BalancePriceNum getPriceAndNum(@Param("bomSpecId") Long bomSpecId,
-                                   @Param("warehouseId") Long warehouseId);
-
-    /**
      * 获取出入库详情表的数据
      */
     List<InOutStorageDetails> getInOutDetails(@Param("warehouseId") Long warehouseId,
                                               @Param("departmentId") Long departmentId,
                                               @Param("bomSpecId") Long bomSpecId);
+
 }

+ 16 - 13
sd-business/src/main/java/com/sd/business/service/in/impl/InOutStorageServiceImpl.java

@@ -99,19 +99,22 @@ public class InOutStorageServiceImpl extends ServiceImpl<InOutStorageMapper, InO
         List<InOutStorageDetails> detailsList = new ArrayList<>();
         //进行for循环
         for (InOutStorageBom bom : inOutStorageBomList) {
-            //创建InOutStorageDetails对象
-            InOutStorageDetails details = new InOutStorageDetails();
-            //将数据进行填充
-            details.setInOutStorageId(bom.getInOutStorageId());
-            details.setInUnitPrice(UNITPRICE);
-            details.setQuantity(bom.getQuantity());
-            details.setWarehouseId(inOutStorageDto.getWarehouseId());
-            details.setBomSpecId(bom.getBomSpecId());
-            details.setDepartmentId(inOutStorageDto.getDepartmentId());
-            //计算入库金额
-            BigDecimal sumPrice = UNITPRICE.multiply(bom.getQuantity());
-            details.setInSumPrice(sumPrice);
-            detailsList.add(details);
+            if (inOutStorageDto.getType().equals(1)){
+                //创建InOutStorageDetails对象
+                InOutStorageDetails details = new InOutStorageDetails();
+                //将数据进行填充
+                details.setInOutStorageId(bom.getInOutStorageId());
+                details.setInUnitPrice(UNITPRICE);
+                details.setQuantity(bom.getQuantity());
+                details.setWarehouseId(inOutStorageDto.getWarehouseId());
+                details.setBomSpecId(bom.getBomSpecId());
+                details.setDepartmentId(inOutStorageDto.getDepartmentId());
+
+                //计算入库金额
+                BigDecimal sumPrice = UNITPRICE.multiply(bom.getQuantity());
+                details.setInSumPrice(sumPrice);
+                detailsList.add(details);
+            }
         }
         //进行数据的添加
         detailsService.saveBatch(detailsList);

+ 39 - 22
sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryServiceImpl.java

@@ -114,20 +114,22 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
                     map.put(bomSpecId, inventory);
                 }
 
-                // 根据bom规格id和仓库id获取结存金额和结存数量
-                BalancePriceNum priceAndNum = baseMapper.getPriceAndNum(bomSpecId, warehouseId);
-                if (priceAndNum == null){
-                    throw new ServiceException("没有该数据");
+                List<InOutStorageDetails> detailsList = getDetailsList(warehouseId, bomSpecIdList);
+                if (CollUtil.isEmpty(detailsList)){
+                    for (InOutStorageDetails details : detailsList) {
+                        details.setInSumPrice(BigDecimal.ZERO);
+                        details.setQuantity(BigDecimal.ZERO);
+                    }
                 }
-                BigDecimal balanceNum = priceAndNum.getBalanceNum();
-                BigDecimal balancePrice = priceAndNum.getBalancePrice();
-
+                BigDecimal sumPrice = detailsList.stream().map(InOutStorageDetails::getInSumPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+                BigDecimal sumQuantity = detailsList.stream().map(InOutStorageDetails::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
 
                 // 计算最新的结存数量和结存金额
-                balanceNum = balanceNum.add(quantity);
+                sumQuantity = sumQuantity.add(quantity);
+
                 BigDecimal balancep = quantity.multiply(unitPrice);
-                balancePrice = balancePrice.add(balancep);
-                BigDecimal balanceUnitPrice = balancePrice.divide(balanceNum, 2, BigDecimal.ROUND_HALF_UP);
+                sumPrice = sumPrice.add(balancep);
+                BigDecimal balanceUnitPrice = sumPrice.divide(sumQuantity, 2, BigDecimal.ROUND_HALF_UP);
                 inventory.setBalanceUnitPrice(balanceUnitPrice);
             }
 
@@ -159,7 +161,7 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
             //根据仓库id和规格id获取出入详细表数据
             List<InOutStorageDetails> detailsList = getDetailsList(warehouseId, bomSpecIdList);
             if (CollUtil.isEmpty(detailsList)){
-                throw new ServiceException("");
+                throw new ServiceException("数据不存在");
             }
             //存储需要修改的入库记录
             List<InOutStorageDetails> updateList = new ArrayList<>();
@@ -167,20 +169,30 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
             Map<Long, BigDecimal> outPriceMap = new HashMap<>();
 
             int j = 0;
+            BigDecimal num;
             BigDecimal quantity;
             do {
+                //获取这条记录剩余的数量
                 InOutStorageDetails details = detailsList.get(j);
-                BigDecimal num = map.get(details.getBomSpecId());
-                quantity = details.getQuantity().subtract(num);
-                if (quantity.compareTo(BigDecimal.ZERO) < 0){
-                    throw new ServiceException("出库失败,库存不足");
+
+                //获取这次一种规格的出库的数量
+                quantity = map.get(details.getBomSpecId());
+
+                //获取两次数量直接的差价
+                num = details.getQuantity().subtract(quantity);
+
+                //如果这条记录库存不足,则计算下一条记录
+                if (num.compareTo(BigDecimal.ZERO) < 0){
+                    details.setQuantity(BigDecimal.ZERO);
+                    j++;
+                    continue;
                 }
                 //对数量进行减扣
-                BigDecimal detailsNum = details.getQuantity().subtract(num);
-                details.setQuantity(detailsNum);
+                //BigDecimal detailsNum = details.getQuantity().subtract(num);
+                details.setQuantity(num.abs());
 
                 //数量减少了,那金额也得减少
-                details.setInSumPrice(detailsNum.multiply(details.getInUnitPrice()));
+                details.setInSumPrice(num.abs().multiply(details.getInUnitPrice()));
 
                 //将这次出库的金额存储到map里面
                 BigDecimal outPrice = details.getInUnitPrice().multiply(num);
@@ -189,17 +201,21 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
                 updateList.add(details);
                 j++;
 
-            }while (quantity.compareTo(BigDecimal.ZERO) > 0);
-
+            }while (num.compareTo(BigDecimal.ZERO) < 0 && j < detailsList.size() );
 
                 inOutStorageDetailsService.updateBatchById(updateList);
-                /*inOutStorageDetailsService.saveBatch(outDetailsList);*/
+
 
                 for (Inventory inventory : inventoryList) {
                     // 获取之前的结存金额
                     BigDecimal balancePrice = inventory.getQuantity().multiply(inventory.getBalanceUnitPrice());
                     // 减去出库金额后的结存金额
-                    BigDecimal newBalancePrice = balancePrice.subtract(outPriceMap.get(inventory.getBomSpecId()));
+                    BigDecimal newBalancePrice;
+                    if (outPriceMap.get(inventory.getBomSpecId()) == null){
+                        newBalancePrice = balancePrice.subtract(BigDecimal.ZERO);
+                    }else {
+                        newBalancePrice = balancePrice.subtract(outPriceMap.get(inventory.getBomSpecId()));
+                    }
                     // 减去出库数量后的结存数量
                     inventory.setQuantity(inventory.getQuantity().subtract(map.get(inventory.getBomSpecId())));
                     // 获取最后的结存单价
@@ -224,6 +240,7 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
                     .eq(InOutStorageDetails::getWarehouseId, warehouseId)
                     .in(InOutStorageDetails::getBomSpecId, bomSpecIdList)
                     .isNotNull(InOutStorageDetails::getQuantity)
+
             );
         }
 

+ 1 - 0
sd-business/src/main/resources/mapper/in/InOutStorageDetailsMapper.xml

@@ -21,4 +21,5 @@
 
 
 
+
 </mapper>

+ 3 - 17
sd-business/src/main/resources/mapper/inventory/InventoryMapper.xml

@@ -46,24 +46,10 @@
         order by d.id
     </select>
 
-    <select id="getPriceAndNum" resultType="com.sd.business.entity.in.po.InOutStorageDetails">
-        select sum(in_sum_price) balancePrice,
-               sum(quantity) balanceNum
-        from in_out_storage_details iosd
-        <where>
-            <if test="bomSpecId != null">
-                and  bom_spec_id = #{bomSpecId}
-            </if>
-            <if test="warehouseId != null">
-                and warehouse_id = #{warehouseId}
-            </if>
-        </where>
-    </select>
-
     <select id="getInOutDetails" resultType="com.sd.business.entity.in.po.InOutStorageDetails">
         select i.quantity,
-               i.in_unit_price,
-               i.in_sum_price
+        i.in_unit_price,
+        i.in_sum_price
         from in_out_storage_details i
         <where>
             <if test="bomSpecId != null">
@@ -75,9 +61,9 @@
             <if test="departmentId != null">
                 and department_id = #{departmentId}
             </if>
-            and i.quantity > 0
         </where>
         order by i.create_time
     </select>
 
+
 </mapper>