Kaynağa Gözat

入库码盘修改

andy 2 yıl önce
ebeveyn
işleme
959e66dfb9

+ 9 - 0
ruoyi-admin/src/test/java/com/ruoyi/admin/test/base/WarehouseTest.java

@@ -15,6 +15,7 @@ import com.ruoyi.ams.config.domain.dto.OutWarehouseDTO;
 import com.ruoyi.ams.config.mapper.AsnSoStrategyMapper;
 import com.ruoyi.ams.config.service.IFlowConfigHeaderService;
 import com.ruoyi.ams.config.service.LocationAllocationStrategy;
+import com.ruoyi.ams.inv.domain.InvLotLocId;
 import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
 import com.ruoyi.ams.locationView.domain.form.LocationViewForm;
 import com.ruoyi.ams.locationView.domain.vo.LocationViewVO;
@@ -34,6 +35,7 @@ import com.ruoyi.base.service.IBaseIdsequenceService;
 import com.ruoyi.base.service.IBaseLocationInfoService;
 import com.ruoyi.base.service.IBaseWarehouseService;
 import com.ruoyi.base.utils.IdSequenceUtils;
+import com.ruoyi.framework.web.domain.server.Sys;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -267,9 +269,16 @@ public class WarehouseTest {
         System.out.println(soNo);
     }
 
+    @Test
+    public void querySameTypeByPalletNo() {
+        List<InvLotLocId> invLotLocIdList = invLotLocIdMapper.querySameTypeByPalletNo("2","B1001");
+        System.out.println(JSON.toJSONString(invLotLocIdList));
+    }
+
     @Test
     public void testInitData() {
         initDocAsnData();
         initDocOrderData();
     }
+
 }

+ 5 - 0
warewms-ams/src/main/java/com/ruoyi/ams/asn/mapper/WmsDocAsnHeaderMapper.java

@@ -87,6 +87,11 @@ public interface WmsDocAsnHeaderMapper {
      */
     int deleteWmsDocAsnDetailsByAsnNo(String asnNo);
 
+    /**
+     * 查询当前明细
+     * @param asnNo
+     * @return
+     */
     long selectLineNo(String asnNo);
 
     /**

+ 31 - 6
warewms-ams/src/main/java/com/ruoyi/ams/asn/service/impl/WmsDocAsnHeaderServiceImpl.java

@@ -285,12 +285,11 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
         }
 
         if (stockForm.getStockTag().equals("Y")) {
-            if (orderQty.compareTo(BigDecimal.ZERO) != 1 || orderQty.compareTo(new BigDecimal(stockForm.getQty())) != 1) {
+            if (orderQty.compareTo(BigDecimal.ZERO) != 1 || orderQty.compareTo(new BigDecimal(stockForm.getQty())) == -1) {
                 return AjaxResult.error("接收数超出出货单需求数量");
             }
         }
 
-
         //判断成品条码
         InvLotAtt queryAtt = new InvLotAtt();
         queryAtt.setSku(stockForm.getSku());
@@ -315,10 +314,14 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
                     if (details.getExpectedQty().compareTo(details.getReceivedQty()) == 1) {
                         //当前入库单可以接收的数量
                         BigDecimal current = details.getExpectedQty().subtract(details.getReceivedQty());
+                        BigDecimal asnCurrent = current;//当前需要扣减的数量
                         if (current.compareTo(BigDecimal.ZERO) != 1) {
                             //如果没有可以接收的数量那么直接跳过
                             continue;
                         }
+                        if (totalQty.compareTo(current) != 1) { //如果入库数量<=订单数量
+                            current = totalQty;
+                        }
                         //判断提交的总数是否已经分配完了
                         if (totalQty.compareTo(BigDecimal.ZERO) == 1) {
                             String asnStatus;
@@ -339,6 +342,18 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
                                 wmsDocAsnDetailsMapper.updateWmsDocAsnDetails(updateDetails);
                             }
 
+                            //TODO 检查头单状态
+                            /*WmsDocAsnDetails detailsQuery = new WmsDocAsnDetails();
+                            detailsQuery.setAsnNo(details.getAsnNo());
+                            List<WmsDocAsnDetails> detailsCheckList = wmsDocAsnDetailsMapper.selectWmsDocAsnDetailsList(detailsQuery);
+                            for (WmsDocAsnDetails d : detailsCheckList) {
+
+                            }*/
+                            WmsDocAsnHeader headerUpdate = new WmsDocAsnHeader();
+                            headerUpdate.setAsnNo(details.getAsnNo());
+                            headerUpdate.setAsnStatus(asnStatus);
+                            wmsDocAsnHeaderMapper.updateWmsDocAsnHeader(headerUpdate);
+
                             //生成库存
                             LotattDTO lotattDTO = new LotattDTO();
                             lotattDTO.setLotatt02(stockForm.getSkuSn());
@@ -355,19 +370,29 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
                             BigDecimal orderCurrent = current;//当前需要扣减的数量
                             for (WmsDocOrderDTO dto : odList) {
                                 BigDecimal subQty;
+                                String soStatus;
                                 //如果当前订单需要的数量大于扣减数,那么就加上所有扣减数
                                 if (dto.getQty().compareTo(orderCurrent) == 1) {
+                                    soStatus = "10";
                                     subQty = orderCurrent;
-                                    wmsDocOrderHeaderService.updateOrderDetailsStock(dto.getOrderNo(), dto.getOrderLineNo().longValue(), details.getSku(), orderCurrent.doubleValue());
+                                    wmsDocOrderHeaderService.updateOrderDetailsStock(dto.getOrderNo(), dto.getOrderLineNo().longValue(), details.getSku(), orderCurrent.doubleValue(), soStatus);
                                     break;
                                 } else {
                                     //如果当前订单需求数量小于扣减数那么循环对下一个订单继续扣减
+                                    soStatus = "20";
                                     subQty = dto.getQty();
                                     orderCurrent = orderCurrent.subtract(dto.getQty());
-                                    wmsDocOrderHeaderService.updateOrderDetailsStock(dto.getOrderNo(), dto.getOrderLineNo().longValue(), details.getSku(), dto.getQty().doubleValue());
+                                    wmsDocOrderHeaderService.updateOrderDetailsStock(dto.getOrderNo(), dto.getOrderLineNo().longValue(), details.getSku(), dto.getQty().doubleValue(), soStatus);
                                 }
+
+                                //TODO 修改头单状态
+                                WmsDocOrderHeader odHeaderUpdate = new WmsDocOrderHeader();
+                                odHeaderUpdate.setOrderNo(dto.getOrderNo());
+                                odHeaderUpdate.setOrderStatus(soStatus);
+                                wmsDocOrderHeaderService.updateWmsDocOrderHeader(odHeaderUpdate);
+
                                 //记录分配明细(由于是初始化的库存所以只绑定到对应的托盘)
-                                ActAllocationDetails actAllocationDetails = new ActAllocationDetails();
+                                /*ActAllocationDetails actAllocationDetails = new ActAllocationDetails();
                                 actAllocationDetails.setAllocationId(SnowflakeIdWorker.generateId().toString());
                                 actAllocationDetails.setLineNo(dto.getOrderLineNo());
                                 actAllocationDetails.setOrderNo(dto.getOrderNo());
@@ -376,7 +401,7 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
                                 actAllocationDetails.setStatus("00");
                                 actAllocationDetails.setLotnum(lotnum);
                                 actAllocationDetails.setUserdefine1(stockForm.getPalletNo());
-                                actAllocationDetailsService.insertActAllocationDetails(actAllocationDetails);
+                                actAllocationDetailsService.insertActAllocationDetails(actAllocationDetails);*/
                             }
                             totalQty = totalQty.subtract(current);
                         } else {

+ 27 - 19
warewms-ams/src/main/java/com/ruoyi/ams/inv/service/impl/InvLotLocIdServiceImpl.java

@@ -339,6 +339,14 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         if (queryList != null && queryList.size() > 0) {
             invLotAtt = queryList.get(0);
             lotnum = invLotAtt.getLotnum();
+
+            InvLotLocId invLotLocId = invLotLocIdMapper.selectInvLotLocIdByLotnum(lotnum);
+            invLotLocId.setQty(invLotLocId.getQty().add(BigDecimal.valueOf(qty)));
+            invLotLocId.setQtyEach(invLotLocId.getQtyEach().add(BigDecimal.valueOf(qty)));
+            invLotLocId.setQtyallocated(invLotLocId.getQtyallocated().add(BigDecimal.valueOf(qty)));
+            invLotLocId.setQtyallocatedEach(invLotLocId.getQtyallocatedEach().add(BigDecimal.valueOf(qty)));
+            invLotLocIdMapper.updateInvLotLocId(invLotLocId);
+
         } else {
             lotnum = idSequenceUtils.generateId("LOTNUMBER");
             invLotAtt.setLotnum(lotnum);
@@ -346,26 +354,26 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
             invLotAtt.setCustomerId(customerId);
             invLotAtt.setCreateTime(DateUtils.getNowDate());
             invLotAttMapper.insertInvLotAtt(invLotAtt);
-        }
 
-        InvLotLocId invLotLocId = new InvLotLocId();
-        invLotLocId.setLotnum(lotnum);
-        invLotLocId.setLocationId(locationFrom);
-        invLotLocId.setSku(sku);
-        invLotLocId.setCustomerId(customerId);
-        invLotLocId.setQty(new BigDecimal(qty));
-        invLotLocId.setQtyEach(new BigDecimal(qty));
-        invLotLocId.setQtyallocated(qtyallocated);
-        invLotLocId.setQtyallocatedEach(qtyallocated);
-        invLotLocId.setQtypa(BigDecimal.ZERO);
-        invLotLocId.setQtyrpin(BigDecimal.ZERO);
-        invLotLocId.setCreateTime(new Date());
-        invLotLocIdMapper.insertInvLotLocId(invLotLocId);
-
-        BaseLocationInfo baseLocationInfo = new BaseLocationInfo();
-        baseLocationInfo.setId(Long.parseLong(locationFrom));
-        baseLocationInfo.setIsEmpty("N");
-        baseLocationInfoService.updateBaseLocationInfo(baseLocationInfo);
+            InvLotLocId invLotLocId = new InvLotLocId();
+            invLotLocId.setLotnum(lotnum);
+            invLotLocId.setLocationId(locationFrom);
+            invLotLocId.setSku(sku);
+            invLotLocId.setCustomerId(customerId);
+            invLotLocId.setQty(new BigDecimal(qty));
+            invLotLocId.setQtyEach(new BigDecimal(qty));
+            invLotLocId.setQtyallocated(qtyallocated);
+            invLotLocId.setQtyallocatedEach(qtyallocated);
+            invLotLocId.setQtypa(BigDecimal.ZERO);
+            invLotLocId.setQtyrpin(BigDecimal.ZERO);
+            invLotLocId.setCreateTime(new Date());
+            invLotLocIdMapper.insertInvLotLocId(invLotLocId);
+
+            BaseLocationInfo baseLocationInfo = new BaseLocationInfo();
+            baseLocationInfo.setId(Long.parseLong(locationFrom));
+            baseLocationInfo.setIsEmpty("N");
+            baseLocationInfoService.updateBaseLocationInfo(baseLocationInfo);
+        }
         return lotnum;
     }
 

+ 19 - 16
warewms-ams/src/main/java/com/ruoyi/ams/order/mapper/WmsDocOrderDetailsMapper.java

@@ -1,78 +1,80 @@
 package com.ruoyi.ams.order.mapper;
 
 import java.util.List;
+
 import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
 import com.ruoyi.ams.order.vo.StockOrderVO;
 import org.apache.ibatis.annotations.Param;
 
 /**
  * 出库单Mapper接口
- * 
+ *
  * @author ruoyi
  * @date 2022-10-28
  */
-public interface WmsDocOrderDetailsMapper 
-{
+public interface WmsDocOrderDetailsMapper {
     /**
      * 查询出库单
-     * 
+     *
      * @param orderNo 出库单主键
      * @return 出库单
      */
-     List<WmsDocOrderDetails> selectWmsDocOrderDetailsByOrderNo(String orderNo);
+    List<WmsDocOrderDetails> selectWmsDocOrderDetailsByOrderNo(String orderNo);
 
     /**
      * 查询出库单列表
-     * 
+     *
      * @param wmsDocOrderDetails 出库单
      * @return 出库单集合
      */
-     List<WmsDocOrderDetails> selectWmsDocOrderDetailsList(WmsDocOrderDetails wmsDocOrderDetails);
+    List<WmsDocOrderDetails> selectWmsDocOrderDetailsList(WmsDocOrderDetails wmsDocOrderDetails);
 
     /**
      * 新增出库单
-     * 
+     *
      * @param wmsDocOrderDetails 出库单
      * @return 结果
      */
-     int insertWmsDocOrderDetails(WmsDocOrderDetails wmsDocOrderDetails);
+    int insertWmsDocOrderDetails(WmsDocOrderDetails wmsDocOrderDetails);
 
     /**
      * 修改出库单
-     * 
+     *
      * @param wmsDocOrderDetails 出库单
      * @return 结果
      */
-     int updateWmsDocOrderDetails(WmsDocOrderDetails wmsDocOrderDetails);
+    int updateWmsDocOrderDetails(WmsDocOrderDetails wmsDocOrderDetails);
 
     /**
      * 删除出库单
-     * 
+     *
      * @param orderNo 出库单主键
      * @return 结果
      */
-     int deleteWmsDocOrderDetailsByOrderNo(String orderNo);
+    int deleteWmsDocOrderDetailsByOrderNo(String orderNo);
 
     /**
      * 批量删除出库单
-     * 
+     *
      * @param orderNos 需要删除的数据主键集合
      * @return 结果
      */
-     int deleteWmsDocOrderDetailsByOrderNos(String[] orderNos);
+    int deleteWmsDocOrderDetailsByOrderNos(String[] orderNos);
 
     /**
      * 更新备货数量
+     *
      * @param orderNo
      * @param orderLoneNo
      * @param sku
      * @param qty
      * @return
      */
-    int updateOrderDetailsStock(@Param("orderNo") String orderNo, @Param("orderLoneNo") Long orderLoneNo, @Param("sku") String sku, @Param("qty") Double qty);
+    int updateOrderDetailsStock(@Param("orderNo") String orderNo, @Param("orderLoneNo") Long orderLoneNo, @Param("sku") String sku, @Param("qty") Double qty, @Param("status") String status);
 
     /**
      * 查询待出库记录
+     *
      * @param palletNo 托盘编号
      * @return
      */
@@ -80,6 +82,7 @@ public interface WmsDocOrderDetailsMapper
 
     /**
      * 根据单号行号查询明细
+     *
      * @param orderNo
      * @param orderLoneNo
      * @return

+ 9 - 1
warewms-ams/src/main/java/com/ruoyi/ams/order/service/IWmsDocOrderHeaderService.java

@@ -89,7 +89,7 @@ public interface IWmsDocOrderHeaderService {
      * @param qty         数量
      * @return
      */
-    int updateOrderDetailsStock(String orderNo, Long orderLoneNo, String sku, Double qty);
+    int updateOrderDetailsStock(String orderNo, Long orderLoneNo, String sku, Double qty, String status);
 
     /**
      * 拣货分配
@@ -148,8 +148,16 @@ public interface IWmsDocOrderHeaderService {
 
     /**
      * 新增出库单明细
+     *
      * @param wmsDocOrderDetails
      * @return
      */
     int insertWmsDocOrderDetails(WmsDocOrderDetails wmsDocOrderDetails);
+
+    /**
+     * 检查关单
+     * @param asnNo
+     *
+     */
+    void checkStatusClose(String asnNo, String status);
 }

+ 11 - 3
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/WmsDocOrderHeaderServiceImpl.java

@@ -78,8 +78,8 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
     }
 
     @Override
-    public int updateOrderDetailsStock(String orderNo, Long orderLoneNo, String sku, Double qty) {
-        return wmsDocOrderDetailsMapper.updateOrderDetailsStock(orderNo, orderLoneNo, sku, qty);
+    public int updateOrderDetailsStock(String orderNo, Long orderLoneNo, String sku, Double qty, String status) {
+        return wmsDocOrderDetailsMapper.updateOrderDetailsStock(orderNo, orderLoneNo, sku, qty, status);
     }
 
     /**
@@ -233,7 +233,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
                 if (!lotAtt.getLotatt05().equals("90") || !lotAtt.getLotatt12().equals("Y")) {
                     continue;
                 }
-                
+
                 BigDecimal canallocatedQty = inv.getQty().subtract(inv.getQtyallocated());
                 if (canallocatedQty.doubleValue() > 0) {
                     if (inv.getQty().intValue() > 0) {
@@ -357,4 +357,12 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         }
         return wmsDocOrderDetailsMapper.insertWmsDocOrderDetails(wmsDocOrderDetails);
     }
+
+    @Override
+    public void checkStatusClose(String asnNo, String status) {
+        List<WmsDocOrderDetails> details = wmsDocOrderDetailsMapper.selectWmsDocOrderDetailsByOrderNo(asnNo);
+        for (WmsDocOrderDetails d : details) {
+
+        }
+    }
 }

+ 5 - 3
warewms-ams/src/main/resources/mapper/ams/InvLotLocIdMapper.xml

@@ -480,8 +480,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="querySameTypeByPalletNo" resultMap="InvLotLocIdResult">
         select inv.*
         from inv_lot_loc_id inv
-                 left join inv_lot_att att on inv.lotnum = att.lotnum
-                 left join wms_box_info b on b.location_id = inv.location_id
-                 left join base_sku sk on inv.sku = sk.sku
+         left join inv_lot_att att on inv.lotnum = att.lotnum
+         left join wms_box_info b on b.location_id = inv.location_id
+         left join base_sku sk on inv.sku = sk.sku
+        where sk.sku_type <![CDATA[ <> ]]> #{skuType}
+        and b.box_no = #{palletNo}
     </select>
 </mapper>

+ 1 - 1
warewms-ams/src/main/resources/mapper/docOrder/WmsDocOrderDetailsMapper.xml

@@ -361,7 +361,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <update id="updateOrderDetailsStock">
-        update wms_doc_order_details set qty_allocated = qty_allocated + #{qty},qty_allocated_each = qty_allocated_each + #{qty}
+        update wms_doc_order_details set qty_allocated = qty_allocated + #{qty},qty_allocated_each = qty_allocated_each + #{qty},line_status = #{status}
         where order_no = #{orderNo} and order_line_no = #{orderLoneNo} and sku = #{sku}
     </update>