瀏覽代碼

入库码盘逻辑修改

andy 2 年之前
父節點
當前提交
c70a1cc3b6
共有 22 個文件被更改,包括 353 次插入236 次删除
  1. 8 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/pda/PdaController.java
  2. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/wms/order/WmsDocOrderHeaderController.java
  3. 5 1
      ruoyi-admin/src/test/java/com/ruoyi/admin/test/base/WarehouseTest.java
  4. 0 1
      ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/SnowflakeIdWorker.java
  5. 12 2
      ruoyi-ui/src/views/wms/docOrder/docOrderDetails-add-or-update.vue
  6. 13 1
      ruoyi-ui/src/views/wms/docOrder/docOrderHeader-add-or-update.vue
  7. 6 4
      ruoyi-ui/src/views/wms/docOrder/index.vue
  8. 6 1
      warewms-ams/src/main/java/com/ruoyi/ams/asn/form/StockForm.java
  9. 0 23
      warewms-ams/src/main/java/com/ruoyi/ams/asn/form/StockInfoForm.java
  10. 24 16
      warewms-ams/src/main/java/com/ruoyi/ams/asn/mapper/WmsDocAsnDetailsMapper.java
  11. 18 16
      warewms-ams/src/main/java/com/ruoyi/ams/asn/service/IWmsDocAsnDetailsService.java
  12. 18 24
      warewms-ams/src/main/java/com/ruoyi/ams/asn/service/impl/WmsDocAsnDetailsServiceImpl.java
  13. 156 98
      warewms-ams/src/main/java/com/ruoyi/ams/asn/service/impl/WmsDocAsnHeaderServiceImpl.java
  14. 2 1
      warewms-ams/src/main/java/com/ruoyi/ams/business/BusinessServiceImpl.java
  15. 8 1
      warewms-ams/src/main/java/com/ruoyi/ams/inv/mapper/InvLotLocIdMapper.java
  16. 10 4
      warewms-ams/src/main/java/com/ruoyi/ams/inv/service/IInvLotLocIdService.java
  17. 4 4
      warewms-ams/src/main/java/com/ruoyi/ams/inv/service/impl/InvLotLocIdServiceImpl.java
  18. 12 0
      warewms-ams/src/main/java/com/ruoyi/ams/order/dto/WmsDocOrderDTO.java
  19. 38 7
      warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/WmsDocOrderHeaderServiceImpl.java
  20. 0 30
      warewms-ams/src/main/resources/mapper/ams/InvLotLocIdMapper.xml
  21. 11 0
      warewms-ams/src/main/resources/mapper/ams/WmsDocAsnDetailsMapper.xml
  22. 1 1
      warewms-ams/src/main/resources/mapper/docOrder/WmsDocOrderDetailsMapper.xml

+ 8 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/pda/PdaController.java

@@ -1,6 +1,7 @@
 package com.ruoyi.web.controller.warewms.pda;
 
 import com.alibaba.fastjson.JSON;
+import com.ruoyi.ams.asn.domain.WmsDocAsnHeader;
 import com.ruoyi.ams.asn.form.PaForm;
 import com.ruoyi.ams.asn.form.StockForm;
 import com.ruoyi.ams.asn.form.UnlockForm;
@@ -107,6 +108,12 @@ public class PdaController {
         return AjaxResult.success(result);
     }
 
+    @GetMapping("/docAsn/info")
+    public AjaxResult docAsnInfo(@RequestParam String asnNo) {
+        WmsDocAsnHeader header = wmsDocAsnHeaderService.selectWmsDocAsnHeaderByAsnNo(asnNo);
+        return AjaxResult.success(header);
+    }
+
     /**
      * 码盘
      *
@@ -259,4 +266,5 @@ public class PdaController {
         }
         return wmsDocOrderHeaderService.doPick(pickForm.getPickInfoFormList());
     }
+
 }

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/wms/order/WmsDocOrderHeaderController.java

@@ -116,7 +116,7 @@ public class WmsDocOrderHeaderController extends BaseController {
             orderHeader.setOrderNo(orderNo);
             orderHeader.setCreateBy(loginUser.getUsername());
             orderHeader.setCreateTime(now);
-            orderHeader.setOrderType("PR");
+            orderHeader.setOrderType("OD");
             orderHeader.setOrderStatus("00");
             orderHeader.setCustomerId("");
         } else {

+ 5 - 1
ruoyi-admin/src/test/java/com/ruoyi/admin/test/base/WarehouseTest.java

@@ -220,9 +220,11 @@ public class WarehouseTest {
             details.setLotatt05("90");
             details.setLotatt12("N");
             detailsList.add(details);
+            wmsDocAsnHeaderService.insertWmsDocAsnDetails(details);
         }
         header.setWmsDocAsnDetailsList(detailsList);
         wmsDocAsnHeaderService.insertWmsDocAsnHeader(header);
+        System.out.println(asnNo);
     }
 
     @Test
@@ -232,7 +234,7 @@ public class WarehouseTest {
         header.setOrderNo(soNo);
         header.setSoReference1("12321");
         header.setOrderStatus("00");
-        header.setOrderType("PR");
+        header.setOrderType("LH");
         header.setCreateTime(new Date());
         header.setCreateBy("warewms");
         header.setCustomerId("default");
@@ -258,9 +260,11 @@ public class WarehouseTest {
             details.setCreateBy("warewms");
             details.setCreateTime(new Date());
             detailsList.add(details);
+            wmsDocOrderDetailsMapper.insertWmsDocOrderDetails(details);
         }
         header.setWmsDocOrderDetailsList(detailsList);
         wmsDocOrderHeaderService.insertWmsDocOrderHeader(header);
+        System.out.println(soNo);
     }
 
     @Test

+ 0 - 1
ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/SnowflakeIdWorker.java

@@ -2,7 +2,6 @@ package com.ruoyi.common.utils.uuid;
 
 import org.apache.commons.lang3.RandomUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.SystemUtils;
 
 import java.net.Inet4Address;
 import java.net.UnknownHostException;

+ 12 - 2
ruoyi-ui/src/views/wms/docOrder/docOrderDetails-add-or-update.vue

@@ -3,6 +3,7 @@
     :title="!dataForm.id ? '明细新增' : '明细修改'"
     :close-on-click-modal="false"
     :modal="false"
+    :width="'70%'"
     :visible.sync="visible">
     <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()"
              label-width="80px">
@@ -26,7 +27,7 @@
         </el-col>
         <el-col :span="8">
           <el-form-item label="单据状态" prop="orderStatus">
-            <el-select v-model="dataForm.orderStatus" :disabled=" id === '' ? true : false" placeholder="请选择" style="width: 100%">
+            <el-select v-model="dataForm.lineStatus" :disabled=" id === '' ? true : false" placeholder="请选择" style="width: 100%">
               <el-option
                 v-for="dict in dict.type.so_status"
                 :key="dict.value"
@@ -70,6 +71,11 @@
             </el-select>
           </el-form-item>
         </el-col>
+        <el-col :span="8">
+          <el-form-item label="订单数" prop="qtyOrdered">
+            <el-input v-model="dataForm.qtyOrdered" placeholder=""></el-input>
+          </el-form-item>
+        </el-col>
       </el-row>
       <div style="cursor: pointer;" @click="showHidden">
         <el-divider content-position="center">批次属性信息...</el-divider>
@@ -139,7 +145,11 @@
           lineStatus: '00',
           sku: '',
           pickZone: '',
-          location: ''
+          location: '',
+          qtyOrdered: 0,
+          qtyAllocated: 0,
+          qtyPicked: 0,
+          qtyShipped: 0
         },
         dataRule: {},
         tableOption: [],

+ 13 - 1
ruoyi-ui/src/views/wms/docOrder/docOrderHeader-add-or-update.vue

@@ -13,6 +13,18 @@
               <el-input v-model="dataFormHead.orderNo" placeholder="" :disabled="true"></el-input>
             </el-form-item>
           </el-col>
+          <el-col :span="6">
+            <el-form-item label="单据类型" prop="orderType">
+              <el-select v-model="dataFormHead.orderType" placeholder="请选择" style="width: 100%">
+                <el-option
+                  v-for="dict in dict.type.so_type"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
           <el-col :span="6">
             <el-form-item label="单据状态" prop="orderStatus">
               <el-select v-model="dataFormHead.orderStatus" :disabled=" id === '' ? true : false" placeholder="请选择" style="width: 100%">
@@ -88,7 +100,7 @@
         roleList: [],
         dataFormHead: {
           orderNo: '',
-          orderType: '',
+          orderType: 'OD',
           orderStatus: '',
           shipmentTime: '',
           soReference1: '',

+ 6 - 4
ruoyi-ui/src/views/wms/docOrder/index.vue

@@ -359,10 +359,12 @@ export default {
     doAllocation(row) {
       let obj = {}
       obj.orderNo = row.orderNo
-      doAllocation(obj).then(response => {
-        this.$modal.msgSuccess(response.msg);
-        this.getList();
-      });
+      this.$modal.confirm('是否确认要进行分配库存').then(function() {
+        doAllocation(obj).then(response => {
+          this.$modal.msgSuccess(response.msg);
+          this.getList();
+        });
+      }).catch(() => {});
     }
   }
 };

+ 6 - 1
warewms-ams/src/main/java/com/ruoyi/ams/asn/form/StockForm.java

@@ -12,6 +12,7 @@ import java.util.List;
  */
 @Data
 public class StockForm {
+    private List<String> asnNo;
     private String orderNo;
     //是否备货
     private String stockTag;
@@ -19,5 +20,9 @@ public class StockForm {
     private String fullTag;
     //托盘编号
     private String palletNo;
-    private List<StockInfoForm> stockInfoFormList;
+    private String skuSn;
+    private String sku;
+    private String desc;
+    private String model;
+    private String qty;
 }

+ 0 - 23
warewms-ams/src/main/java/com/ruoyi/ams/asn/form/StockInfoForm.java

@@ -1,23 +0,0 @@
-package com.ruoyi.ams.asn.form;
-
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * Created by IntelliJ IDEA.
- * User: andy.qu
- * Date: 2022/10/24
- * Description:
- */
-@Data
-public class StockInfoForm {
-    private String asnNo;
-    private Integer asnLineNo;
-    private String skuSn;
-    private String sku;
-    private String desc;
-    private String model;
-    private String qty;
-    List<LotattForm> lotattList;
-}

+ 24 - 16
warewms-ams/src/main/java/com/ruoyi/ams/asn/mapper/WmsDocAsnDetailsMapper.java

@@ -2,79 +2,87 @@ package com.ruoyi.ams.asn.mapper;
 
 import java.math.BigDecimal;
 import java.util.List;
+
 import com.ruoyi.ams.asn.domain.WmsDocAsnDetails;
 import org.apache.ibatis.annotations.Param;
 
 /**
  * 入库单明细Mapper接口
- * 
+ *
  * @author ruoyi
  * @date 2022-11-03
  */
-public interface WmsDocAsnDetailsMapper 
-{
+public interface WmsDocAsnDetailsMapper {
     /**
      * 查询入库单明细
-     * 
+     *
      * @param asnLineNo 入库单明细主键
      * @return 入库单明细
      */
-     WmsDocAsnDetails selectWmsDocAsnDetailsByAsnLineNo(Long asnLineNo);
+    WmsDocAsnDetails selectWmsDocAsnDetailsByAsnLineNo(Long asnLineNo);
 
     /**
      * 查询入库单明细列表
-     * 
+     *
      * @param wmsDocAsnDetails 入库单明细
      * @return 入库单明细集合
      */
-     List<WmsDocAsnDetails> selectWmsDocAsnDetailsList(WmsDocAsnDetails wmsDocAsnDetails);
+    List<WmsDocAsnDetails> selectWmsDocAsnDetailsList(WmsDocAsnDetails wmsDocAsnDetails);
 
     /**
      * 新增入库单明细
-     * 
+     *
      * @param wmsDocAsnDetails 入库单明细
      * @return 结果
      */
-     int insertWmsDocAsnDetails(WmsDocAsnDetails wmsDocAsnDetails);
+    int insertWmsDocAsnDetails(WmsDocAsnDetails wmsDocAsnDetails);
 
     /**
      * 修改入库单明细
-     * 
+     *
      * @param wmsDocAsnDetails 入库单明细
      * @return 结果
      */
-     int updateWmsDocAsnDetails(WmsDocAsnDetails wmsDocAsnDetails);
+    int updateWmsDocAsnDetails(WmsDocAsnDetails wmsDocAsnDetails);
 
     /**
      * 删除入库单明细
-     * 
+     *
      * @param asnLineNo 入库单明细主键
      * @return 结果
      */
-     int deleteWmsDocAsnDetailsByAsnLineNo(Long asnLineNo);
+    int deleteWmsDocAsnDetailsByAsnLineNo(Long asnLineNo);
 
     /**
      * 批量删除入库单明细
-     * 
+     *
      * @param asnLineNos 需要删除的数据主键集合
      * @return 结果
      */
-     int deleteWmsDocAsnDetailsByAsnLineNos(Long[] asnLineNos);
+    int deleteWmsDocAsnDetailsByAsnLineNos(Long[] asnLineNos);
 
     /**
      * 删除明细根据asnNo和lineNo
+     *
      * @param asnNo
      * @param asnLineNo
      * @return
      */
-    int deleteWmsDocAsnDetailsByAsnNoLineNo(@Param("asnNo") String asnNo,@Param("asnLineNo") Long asnLineNo);
+    int deleteWmsDocAsnDetailsByAsnNoLineNo(@Param("asnNo") String asnNo, @Param("asnLineNo") Long asnLineNo);
 
     /**
      * 更新接收数
+     *
      * @param asnNo
      * @param asnLineNo
      * @param qty
      * @return
      */
     int updateWmsReceivedQty(@Param("asnNo") String asnNo, @Param("asnLineNo") int asnLineNo, @Param("qty") BigDecimal qty, @Param("asnStatus") String asnStatus);
+
+    /**
+     * @param asnNos
+     * @return
+     */
+    List<WmsDocAsnDetails> selectDetailsListByAsnNos(@Param("asnNos") List<String> asnNos,@Param("sku") String sku);
 }

+ 18 - 16
warewms-ams/src/main/java/com/ruoyi/ams/asn/service/IWmsDocAsnDetailsService.java

@@ -1,31 +1,32 @@
 package com.ruoyi.ams.asn.service;
 
 import java.util.List;
+
 import com.ruoyi.ams.asn.domain.WmsDocAsnDetails;
+import com.ruoyi.ams.asn.form.StockForm;
 
 /**
  * 入库单明细Service接口
- * 
+ *
  * @author ruoyi
  * @date 2022-11-03
  */
-public interface IWmsDocAsnDetailsService 
-{
+public interface IWmsDocAsnDetailsService {
     /**
      * 查询入库单明细
-     * 
+     *
      * @param asnLineNo 入库单明细主键
      * @return 入库单明细
      */
-     WmsDocAsnDetails selectWmsDocAsnDetailsByAsnLineNo(Long asnLineNo);
+    WmsDocAsnDetails selectWmsDocAsnDetailsByAsnLineNo(Long asnLineNo);
 
     /**
      * 查询入库单明细列表
-     * 
+     *
      * @param wmsDocAsnDetails 入库单明细
      * @return 入库单明细集合
      */
-     List<WmsDocAsnDetails> selectWmsDocAsnDetailsList(WmsDocAsnDetails wmsDocAsnDetails);
+    List<WmsDocAsnDetails> selectWmsDocAsnDetailsList(WmsDocAsnDetails wmsDocAsnDetails);
 
     /**
      * 查询入库单明细
@@ -37,41 +38,42 @@ public interface IWmsDocAsnDetailsService
 
     /**
      * 新增入库单明细
-     * 
+     *
      * @param wmsDocAsnDetails 入库单明细
      * @return 结果
      */
-     int insertWmsDocAsnDetails(WmsDocAsnDetails wmsDocAsnDetails);
+    int insertWmsDocAsnDetails(WmsDocAsnDetails wmsDocAsnDetails);
 
     /**
      * 修改入库单明细
-     * 
+     *
      * @param wmsDocAsnDetails 入库单明细
      * @return 结果
      */
-     int updateWmsDocAsnDetails(WmsDocAsnDetails wmsDocAsnDetails);
+    int updateWmsDocAsnDetails(WmsDocAsnDetails wmsDocAsnDetails);
 
     /**
      * 批量删除入库单明细
-     * 
+     *
      * @param asnLineNos 需要删除的入库单明细主键集合
      * @return 结果
      */
-     int deleteWmsDocAsnDetailsByAsnLineNos(Long[] asnLineNos);
+    int deleteWmsDocAsnDetailsByAsnLineNos(Long[] asnLineNos);
 
     /**
      * 删除入库单明细信息
-     * 
+     *
      * @param asnLineNo 入库单明细主键
      * @return 结果
      */
-     int deleteWmsDocAsnDetailsByAsnLineNo(Long asnLineNo);
+    int deleteWmsDocAsnDetailsByAsnLineNo(Long asnLineNo);
 
     /**
      * 根据单号和明细删除
+     *
      * @param asnNo
      * @param asnLineNo
      * @return
      */
-     int deleteWmsDocAsnDetailsByAsnNoLineNo(String asnNo,Long asnLineNo);
+    int deleteWmsDocAsnDetailsByAsnNoLineNo(String asnNo, Long asnLineNo);
 }

+ 18 - 24
warewms-ams/src/main/java/com/ruoyi/ams/asn/service/impl/WmsDocAsnDetailsServiceImpl.java

@@ -1,6 +1,8 @@
 package com.ruoyi.ams.asn.service.impl;
 
 import java.util.List;
+
+import com.ruoyi.ams.asn.form.StockForm;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.ams.asn.mapper.WmsDocAsnDetailsMapper;
@@ -9,37 +11,34 @@ import com.ruoyi.ams.asn.service.IWmsDocAsnDetailsService;
 
 /**
  * 入库单明细Service业务层处理
- * 
+ *
  * @author ruoyi
  * @date 2022-11-03
  */
 @Service
-public class WmsDocAsnDetailsServiceImpl implements IWmsDocAsnDetailsService 
-{
+public class WmsDocAsnDetailsServiceImpl implements IWmsDocAsnDetailsService {
     @Autowired
     private WmsDocAsnDetailsMapper wmsDocAsnDetailsMapper;
 
     /**
      * 查询入库单明细
-     * 
+     *
      * @param asnLineNo 入库单明细主键
      * @return 入库单明细
      */
     @Override
-    public WmsDocAsnDetails selectWmsDocAsnDetailsByAsnLineNo(Long asnLineNo)
-    {
+    public WmsDocAsnDetails selectWmsDocAsnDetailsByAsnLineNo(Long asnLineNo) {
         return wmsDocAsnDetailsMapper.selectWmsDocAsnDetailsByAsnLineNo(asnLineNo);
     }
 
     /**
      * 查询入库单明细列表
-     * 
+     *
      * @param wmsDocAsnDetails 入库单明细
      * @return 入库单明细
      */
     @Override
-    public List<WmsDocAsnDetails> selectWmsDocAsnDetailsList(WmsDocAsnDetails wmsDocAsnDetails)
-    {
+    public List<WmsDocAsnDetails> selectWmsDocAsnDetailsList(WmsDocAsnDetails wmsDocAsnDetails) {
         return wmsDocAsnDetailsMapper.selectWmsDocAsnDetailsList(wmsDocAsnDetails);
     }
 
@@ -50,10 +49,9 @@ public class WmsDocAsnDetailsServiceImpl implements IWmsDocAsnDetailsService
      * @return 入库单明细
      */
     @Override
-    public WmsDocAsnDetails selectWmsDocAsnDetailsByModel(WmsDocAsnDetails wmsDocAsnDetails)
-    {
+    public WmsDocAsnDetails selectWmsDocAsnDetailsByModel(WmsDocAsnDetails wmsDocAsnDetails) {
         List<WmsDocAsnDetails> list = wmsDocAsnDetailsMapper.selectWmsDocAsnDetailsList(wmsDocAsnDetails);
-        if (list!=null && list.size()>0) {
+        if (list != null && list.size() > 0) {
             return list.get(0);
         } else {
             return null;
@@ -62,49 +60,45 @@ public class WmsDocAsnDetailsServiceImpl implements IWmsDocAsnDetailsService
 
     /**
      * 新增入库单明细
-     * 
+     *
      * @param wmsDocAsnDetails 入库单明细
      * @return 结果
      */
     @Override
-    public int insertWmsDocAsnDetails(WmsDocAsnDetails wmsDocAsnDetails)
-    {
+    public int insertWmsDocAsnDetails(WmsDocAsnDetails wmsDocAsnDetails) {
         return wmsDocAsnDetailsMapper.insertWmsDocAsnDetails(wmsDocAsnDetails);
     }
 
     /**
      * 修改入库单明细
-     * 
+     *
      * @param wmsDocAsnDetails 入库单明细
      * @return 结果
      */
     @Override
-    public int updateWmsDocAsnDetails(WmsDocAsnDetails wmsDocAsnDetails)
-    {
+    public int updateWmsDocAsnDetails(WmsDocAsnDetails wmsDocAsnDetails) {
         return wmsDocAsnDetailsMapper.updateWmsDocAsnDetails(wmsDocAsnDetails);
     }
 
     /**
      * 批量删除入库单明细
-     * 
+     *
      * @param asnLineNos 需要删除的入库单明细主键
      * @return 结果
      */
     @Override
-    public int deleteWmsDocAsnDetailsByAsnLineNos(Long[] asnLineNos)
-    {
+    public int deleteWmsDocAsnDetailsByAsnLineNos(Long[] asnLineNos) {
         return wmsDocAsnDetailsMapper.deleteWmsDocAsnDetailsByAsnLineNos(asnLineNos);
     }
 
     /**
      * 删除入库单明细信息
-     * 
+     *
      * @param asnLineNo 入库单明细主键
      * @return 结果
      */
     @Override
-    public int deleteWmsDocAsnDetailsByAsnLineNo(Long asnLineNo)
-    {
+    public int deleteWmsDocAsnDetailsByAsnLineNo(Long asnLineNo) {
         return wmsDocAsnDetailsMapper.deleteWmsDocAsnDetailsByAsnLineNo(asnLineNo);
     }
 

+ 156 - 98
warewms-ams/src/main/java/com/ruoyi/ams/asn/service/impl/WmsDocAsnHeaderServiceImpl.java

@@ -6,7 +6,6 @@ import java.util.List;
 
 import com.ruoyi.ams.asn.form.PaForm;
 import com.ruoyi.ams.asn.form.StockForm;
-import com.ruoyi.ams.asn.form.StockInfoForm;
 import com.ruoyi.ams.asn.form.UnlockForm;
 import com.ruoyi.ams.asn.mapper.WmsDocAsnDetailsMapper;
 import com.ruoyi.ams.box.domain.WmsBoxInfo;
@@ -16,12 +15,16 @@ import com.ruoyi.ams.inv.domain.ActTransactionLog;
 import com.ruoyi.ams.inv.domain.InvLotAtt;
 import com.ruoyi.ams.inv.domain.InvLotLocId;
 import com.ruoyi.ams.inv.domain.form.InvLotLocIdMoveForm;
+import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
 import com.ruoyi.ams.inv.service.IActTransactionLogService;
 import com.ruoyi.ams.inv.service.IInvLotAttService;
 import com.ruoyi.ams.inv.service.IInvLotLocIdService;
+import com.ruoyi.ams.order.domain.ActAllocationDetails;
 import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
 import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
+import com.ruoyi.ams.order.dto.WmsDocOrderDTO;
 import com.ruoyi.ams.order.mapper.WmsDocOrderDetailsMapper;
+import com.ruoyi.ams.order.service.IActAllocationDetailsService;
 import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
 import com.ruoyi.base.constant.Constant;
 import com.ruoyi.base.domain.BaseSku;
@@ -30,6 +33,7 @@ import com.ruoyi.base.utils.IdSequenceUtils;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.uuid.SnowflakeIdWorker;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -71,6 +75,10 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
     private IdSequenceUtils idSequenceUtils;
     @Autowired
     private IInvLotAttService invLotAttService;
+    @Autowired
+    private InvLotLocIdMapper invLotLocIdMapper;
+    @Autowired
+    private IActAllocationDetailsService actAllocationDetailsService;
 
     /**
      * 查询入库单
@@ -120,7 +128,7 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
     @Override
     public int insertWmsDocAsnHeader(WmsDocAsnHeader wmsDocAsnHeader) {
         int rows = wmsDocAsnHeaderMapper.insertWmsDocAsnHeader(wmsDocAsnHeader);
-        insertWmsDocAsnDetails(wmsDocAsnHeader);
+        //insertWmsDocAsnDetails(wmsDocAsnHeader);
         return rows;
     }
 
@@ -205,6 +213,23 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
         }
     }
 
+    /**
+     * 检查是否有相同分类的物料在同一个托盘上
+     *
+     * @param palletNo 托盘编号
+     * @param sku      物料
+     * @return true没有相同的false有
+     */
+    private boolean checkSameTypeByPalletNo(String palletNo, String sku) {
+        BaseSku baseSku = baseSkuService.selectBaseSkuByCustomerId(Constant.CUSTOMER_ID, sku);
+        List<InvLotLocId> invLotLocIdList = invLotLocIdMapper.querySameTypeByPalletNo(baseSku.getSkuType(), palletNo);
+        if (invLotLocIdList != null && invLotLocIdList.size() > 0) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+
     /**
      * 入库码盘
      *
@@ -215,9 +240,11 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
     @Override
     public AjaxResult doStock(StockForm stockForm) {
         String STAGE01 = "900";
+        BigDecimal totalQty = new BigDecimal(stockForm.getQty());
         WmsDocOrderHeader wmsDocOrderHeader;
         List<WmsDocOrderDetails> orderDetails;
-        Map<String, WmsDocOrderDetails> orderMap = new HashMap<>();
+        Map<String, List<WmsDocOrderDTO>> orderMap = new HashMap<>();
+
         //产品条码属于出入库单
         if (stockForm.getStockTag().equals("Y") && StringUtils.isEmpty(stockForm.getOrderNo())) {
             return AjaxResult.error("备货必须选择出库单号");
@@ -232,12 +259,135 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
             }
             orderDetails = wmsDocOrderHeader.getWmsDocOrderDetailsList();
         }
-
+        //匹配出库单
+        BigDecimal orderQty = BigDecimal.ZERO;
         for (WmsDocOrderDetails de : orderDetails) {
-            orderMap.put(de.getSku(), de);
+            if (!de.getSku().equals(stockForm.getSku())) {
+                continue;
+            }
+            if (de.getQtyOrdered().compareTo(de.getQtyAllocated()) == 1) {
+                BigDecimal current = de.getQtyOrdered().subtract(de.getQtyAllocated());
+                orderQty = orderQty.add(current);
+                List<WmsDocOrderDTO> list = orderMap.get(de.getSku());
+                if (list == null) {
+                    list = new ArrayList<>();
+                }
+                WmsDocOrderDTO orderDTO = new WmsDocOrderDTO();
+                orderDTO.setOrderNo(de.getOrderNo());
+                orderDTO.setOrderLineNo(de.getOrderLineNo().longValue());
+                orderDTO.setQty(current);
+                list.add(orderDTO);
+                orderMap.put(de.getSku(), list);
+                if (orderQty.compareTo(totalQty) == 0) {
+                    break;
+                }
+            }
+        }
+
+        if (stockForm.getStockTag().equals("Y")) {
+            if (orderQty.compareTo(BigDecimal.ZERO) != 1 || orderQty.compareTo(new BigDecimal(stockForm.getQty())) != 1) {
+                return AjaxResult.error("接收数超出出货单需求数量");
+            }
+        }
+
+
+        //判断成品条码
+        InvLotAtt queryAtt = new InvLotAtt();
+        queryAtt.setSku(stockForm.getSku());
+        queryAtt.setLotatt02(stockForm.getSkuSn());
+        List<InvLotLocId> invList = invLotLocIdService.queryInvByInvLotatt(queryAtt, stockForm.getPalletNo());
+        if (invList != null && invList.size() > 1) {
+            throw new ServiceException("每个成品条码只允许码一次");
+        }
+
+        if (checkSameTypeByPalletNo(stockForm.getPalletNo(), stockForm.getSku()) == false) {
+            throw new ServiceException("不同的产品分类不允许放一个托盘上");
+        }
+
+        //匹配对应的入库单,出库单
+        if (stockForm.getAsnNo() != null && stockForm.getAsnNo().size() > 0) {
+            List<WmsDocAsnDetails> list = wmsDocAsnDetailsMapper.selectDetailsListByAsnNos(stockForm.getAsnNo(), stockForm.getSku());
+            if (list == null || list.size() == 0) {
+                return AjaxResult.error("没有可以接收的入库单");
+            } else {
+                for (WmsDocAsnDetails details : list) {
+                    //如果入库单预计数量大于接收数
+                    if (details.getExpectedQty().compareTo(details.getReceivedQty()) == 1) {
+                        //当前入库单可以接收的数量
+                        BigDecimal current = details.getExpectedQty().subtract(details.getReceivedQty());
+                        if (current.compareTo(BigDecimal.ZERO) != 1) {
+                            //如果没有可以接收的数量那么直接跳过
+                            continue;
+                        }
+                        //判断提交的总数是否已经分配完了
+                        if (totalQty.compareTo(BigDecimal.ZERO) == 1) {
+                            String asnStatus;
+                            if (details.getExpectedQty().compareTo(details.getReceivedQty().add(current)) == 1) {
+                                //部分接收
+                                asnStatus = "30";
+                            } else {
+                                //接收完成
+                                asnStatus = "40";
+                            }
+                            //更新入库单接收数量及状态
+                            wmsDocAsnDetailsMapper.updateWmsReceivedQty(details.getAsnNo(), details.getAsnLineNo().intValue(), current, asnStatus);
+                            if (!StringUtils.isEmpty(stockForm.getOrderNo())) {
+                                //绑定对应入库单号
+                                WmsDocAsnDetails updateDetails = new WmsDocAsnDetails();
+                                updateDetails.setAsnNo(details.getAsnNo());
+                                updateDetails.setAsnLineNo(details.getAsnLineNo());
+                                wmsDocAsnDetailsMapper.updateWmsDocAsnDetails(updateDetails);
+                            }
+
+                            //生成库存
+                            LotattDTO lotattDTO = new LotattDTO();
+                            lotattDTO.setLotatt02(stockForm.getSkuSn());
+                            lotattDTO.setLotatt05("90");
+                            lotattDTO.setLotatt07(stockForm.getPalletNo());
+                            lotattDTO.setLotatt08(details.getAsnNo());
+                            lotattDTO.setLotatt12("N");
+                            lotattDTO.setLotatt13(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD));
+                            lotattDTO.setLotatt14(stockForm.getOrderNo());
+                            String lotnum = invLotLocIdService.initInv(STAGE01, stockForm.getSku(), Constant.CUSTOMER_ID, current.doubleValue(), lotattDTO, current);
+
+                            //更新出库单备货数量
+                            List<WmsDocOrderDTO> odList = orderMap.get(details.getSku());
+                            BigDecimal orderCurrent = current;//当前需要扣减的数量
+                            for (WmsDocOrderDTO dto : odList) {
+                                BigDecimal subQty;
+                                //如果当前订单需要的数量大于扣减数,那么就加上所有扣减数
+                                if (dto.getQty().compareTo(orderCurrent) == 1) {
+                                    subQty = orderCurrent;
+                                    wmsDocOrderHeaderService.updateOrderDetailsStock(dto.getOrderNo(), dto.getOrderLineNo().longValue(), details.getSku(), orderCurrent.doubleValue());
+                                    break;
+                                } else {
+                                    //如果当前订单需求数量小于扣减数那么循环对下一个订单继续扣减
+                                    subQty = dto.getQty();
+                                    orderCurrent = orderCurrent.subtract(dto.getQty());
+                                    wmsDocOrderHeaderService.updateOrderDetailsStock(dto.getOrderNo(), dto.getOrderLineNo().longValue(), details.getSku(), dto.getQty().doubleValue());
+                                }
+                                //记录分配明细(由于是初始化的库存所以只绑定到对应的托盘)
+                                ActAllocationDetails actAllocationDetails = new ActAllocationDetails();
+                                actAllocationDetails.setAllocationId(SnowflakeIdWorker.generateId().toString());
+                                actAllocationDetails.setLineNo(dto.getOrderLineNo());
+                                actAllocationDetails.setOrderNo(dto.getOrderNo());
+                                actAllocationDetails.setQty(subQty);
+                                actAllocationDetails.setMaterial(details.getSku());
+                                actAllocationDetails.setStatus("00");
+                                actAllocationDetails.setLotnum(lotnum);
+                                actAllocationDetails.setUserdefine1(stockForm.getPalletNo());
+                                actAllocationDetailsService.insertActAllocationDetails(actAllocationDetails);
+                            }
+                            totalQty = totalQty.subtract(current);
+                        } else {
+                            break;
+                        }
+                    }
+                }
+            }
         }
 
-        //查询托盘是否存在
+        //查询托盘是否存在,生成托盘绑定信息
         WmsBoxInfo wmsBoxInfo = new WmsBoxInfo();
         wmsBoxInfo.setBoxNo(stockForm.getPalletNo());
         wmsBoxInfo = boxInfoService.selectWmsBoxInfoByModel(wmsBoxInfo);
@@ -255,95 +405,6 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
             wmsBoxInfo.setLocationId(Long.parseLong(STAGE01));
             boxInfoService.updateWmsBoxInfo(wmsBoxInfo);
         }
-
-
-        List<StockInfoForm> stockInfoForms = stockForm.getStockInfoFormList();
-        String skuType = "";
-        for (StockInfoForm s : stockInfoForms) {
-            BaseSku baseSku = baseSkuService.selectBaseSkuByCustomerId(Constant.CUSTOMER_ID, s.getSku());
-            if (skuType.equals("")) {
-                skuType = baseSku.getSkuType();
-            } else {
-                if (!baseSku.getSkuType().equals(skuType)) {
-                    throw new ServiceException("不同的产品分类不允许放一个托盘上");
-                }
-            }
-
-            //判断成品条码
-            InvLotAtt queryAtt = new InvLotAtt();
-            queryAtt.setSku(s.getSku());
-            queryAtt.setLotatt02(s.getSkuSn());
-            List<InvLotLocId> invList = invLotLocIdService.queryInvByInvLotatt(queryAtt, stockForm.getPalletNo());
-            if (invList != null && invList.size() > 1) {
-                throw new ServiceException("每个成品条码只允许码一次");
-            }
-
-            WmsDocAsnDetails asnDetails = wmsDocAsnHeaderMapper.selectWmsDocDetailsOne(s.getAsnNo(), s.getAsnLineNo());
-            if (asnDetails == null) {
-                throw new ServiceException("入库记录不存在");
-            }
-
-            if (stockForm.getStockTag().equals("Y")) {
-                //如果是备货需要判断入库单
-                WmsDocOrderDetails od = orderMap.get(s.getSku());
-//                if (od.getQtyOrdered().subtract(new BigDecimal(s.getQty())).compareTo(BigDecimal.ZERO) != 1) {
-//                    throw new ServiceException("备货数量超出出库单需求数量");
-//                }
-                if (od.getQtyOrdered().compareTo(new BigDecimal(s.getQty()).add(od.getQtySoftAllocated())) == -1) {
-                    throw new ServiceException("备货数量超出出库单需求数量");
-                }
-                //更新出库单备货数量
-                wmsDocOrderHeaderService.updateOrderDetailsStock(od.getOrderNo(), od.getOrderLineNo().longValue(), od.getSku(), new BigDecimal(s.getQty()).doubleValue());
-            }
-            //生成库存
-            LotattDTO lotattDTO = new LotattDTO();
-            lotattDTO.setLotatt02(s.getSkuSn());
-            lotattDTO.setLotatt05("90");
-            lotattDTO.setLotatt07(stockForm.getPalletNo());
-            lotattDTO.setLotatt08(s.getAsnNo());
-            lotattDTO.setLotatt12("N");
-            lotattDTO.setLotatt13(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD_HH_MM_SS));
-            lotattDTO.setLotatt14(stockForm.getOrderNo());
-            invLotLocIdService.initInv(STAGE01, s.getSku(), Constant.CUSTOMER_ID, new BigDecimal(s.getQty()).doubleValue(), lotattDTO);
-
-            //更新数量
-            asnDetails.setReceivedQty(asnDetails.getReceivedQty().add(new BigDecimal(s.getQty())));
-            String asnStatus = "30";
-            if (asnDetails.getReceivedQty().compareTo(asnDetails.getExpectedQty()) == 0) {
-                asnStatus = "40";
-                boolean isClose = true;
-                WmsDocAsnDetails query = new WmsDocAsnDetails();
-                query.setAsnNo(s.getAsnNo());
-                List<WmsDocAsnDetails> detailsList = wmsDocAsnDetailsMapper.selectWmsDocAsnDetailsList(query);
-                if (detailsList != null && detailsList.size() > 0) {
-                    for (WmsDocAsnDetails de : detailsList) {
-                        if (de.getLineStatus().equals("30")) {
-                            isClose = false;
-                        }
-                    }
-                }
-                WmsDocAsnHeader updateStatus = new WmsDocAsnHeader();
-                if (isClose) {
-                    updateStatus.setAsnStatus("40");
-                } else {
-                    updateStatus.setAsnStatus("30");
-                }
-                wmsDocAsnHeaderMapper.updateWmsDocAsnHeader(updateStatus);
-            }
-
-            //更新入库单数量
-            wmsDocAsnDetailsMapper.updateWmsReceivedQty(asnDetails.getAsnNo(), asnDetails.getAsnLineNo().intValue(), new BigDecimal(s.getQty()), asnStatus);
-            if (!StringUtils.isEmpty(stockForm.getOrderNo())) {
-                //绑定对应入库单号
-                WmsDocAsnDetails updateDetails = new WmsDocAsnDetails();
-                updateDetails.setAsnNo(asnDetails.getAsnNo());
-                updateDetails.setAsnLineNo(asnDetails.getAsnLineNo());
-                updateDetails.setdEdi01(stockForm.getOrderNo());
-                updateDetails.setdEdi02(s.getSkuSn());//产品sn
-                wmsDocAsnDetailsMapper.updateWmsDocAsnDetails(updateDetails);
-            }
-
-        }
         return AjaxResult.success("操作成功");
     }
 
@@ -369,9 +430,6 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
         moveForm.setLocationTo(paForm.getLocationTo());
         moveForm.setIsCallCar("N");
 
-        //更新明细状态
-
-
         List<InvLotLocId> invLotLocIdList = invLotLocIdService.queryInvByInvLotatt(null, palletNo);
         InvLotAtt invLotAtt = null;
         if (invLotLocIdList != null && invLotLocIdList.size() > 0) {

+ 2 - 1
warewms-ams/src/main/java/com/ruoyi/ams/business/BusinessServiceImpl.java

@@ -30,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -95,7 +96,7 @@ public class BusinessServiceImpl implements IBusinessService {
                     locationTo = this.zoneLocationAllocation(locationToList, "locationTo", "ASN", asnSoStrategy, agvCall, token);
                     //2.初始化库存
                     for (AgvCallItemDTO call : agvCallDTO.getAgvCallItemDTOList()) {
-                        invLotLocIdService.initInv(locationFrom.getId().toString(), call.getSku(), Constant.CUSTOMER_ID, call.getQty(), call.getLotattDTO());
+                        invLotLocIdService.initInv(locationFrom.getId().toString(), call.getSku(), Constant.CUSTOMER_ID, call.getQty(), call.getLotattDTO(), BigDecimal.ZERO);
                     }
                     wcsTaskList.addAll(this.genTask(locationFrom, locationTo, flowConfigHeaderVO, token));
                 } else if (flowConfigHeaderVO.getFlowType().equals("SO")) {

+ 8 - 1
warewms-ams/src/main/java/com/ruoyi/ams/inv/mapper/InvLotLocIdMapper.java

@@ -187,7 +187,6 @@ public interface InvLotLocIdMapper {
 
     /**
      * 解绑库存
-     *
      * @param locationId
      * @param sku
      * @param customerId
@@ -217,4 +216,12 @@ public interface InvLotLocIdMapper {
      * @return
      */
     int updateQualityStatusByLotNumber(String lotNumber, String qualityStatus);
+
+    /**
+     * 根据托盘号和物料分类查询是否有相同的库存
+     * @param skuType
+     * @param palletNo
+     * @return
+     */
+    List<InvLotLocId> querySameTypeByPalletNo(@Param("skuType") String skuType, @Param("palletNo") String palletNo);
 }

+ 10 - 4
warewms-ams/src/main/java/com/ruoyi/ams/inv/service/IInvLotLocIdService.java

@@ -1,5 +1,6 @@
 package com.ruoyi.ams.inv.service;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 import com.ruoyi.ams.config.domain.dto.LotattDTO;
@@ -142,10 +143,15 @@ public interface IInvLotLocIdService {
 
     /**
      * 初始化库存
-     *
-     * @param
-     */
-    void initInv(String locationFrom, String sku, String customerId, Double qty, LotattDTO lotattDTO);
+     * @param locationFrom 库存所在库位
+     * @param sku 物料编号
+     * @param customerId 所属货主(未使用)
+     * @param qty 数量
+     * @param lotattDTO 批次属性
+     * @param qtyallocated 指定已分配数量
+     * @return 生成的lotnum
+     */
+    String initInv(String locationFrom, String sku, String customerId, Double qty, LotattDTO lotattDTO, BigDecimal qtyallocated);
 
     /**
      * 根据库位id查询库位库存包含批次属性

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

@@ -330,7 +330,7 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
 
     @Transactional
     @Override
-    public void initInv(String locationFrom, String sku, String customerId, Double qty, LotattDTO lotattDTO) {
+    public String initInv(String locationFrom, String sku, String customerId, Double qty, LotattDTO lotattDTO, BigDecimal qtyallocated) {
         InvLotAtt invLotAtt = new InvLotAtt();
         BeanUtils.copyProperties(lotattDTO, invLotAtt);
         //查询lotatt是否存在
@@ -355,8 +355,8 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         invLotLocId.setCustomerId(customerId);
         invLotLocId.setQty(new BigDecimal(qty));
         invLotLocId.setQtyEach(new BigDecimal(qty));
-        invLotLocId.setQtyallocated(BigDecimal.ZERO);
-        invLotLocId.setQtyallocatedEach(BigDecimal.ZERO);
+        invLotLocId.setQtyallocated(qtyallocated);
+        invLotLocId.setQtyallocatedEach(qtyallocated);
         invLotLocId.setQtypa(BigDecimal.ZERO);
         invLotLocId.setQtyrpin(BigDecimal.ZERO);
         invLotLocId.setCreateTime(new Date());
@@ -366,7 +366,7 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         baseLocationInfo.setId(Long.parseLong(locationFrom));
         baseLocationInfo.setIsEmpty("N");
         baseLocationInfoService.updateBaseLocationInfo(baseLocationInfo);
-
+        return lotnum;
     }
 
     @Override

+ 12 - 0
warewms-ams/src/main/java/com/ruoyi/ams/order/dto/WmsDocOrderDTO.java

@@ -0,0 +1,12 @@
+package com.ruoyi.ams.order.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class WmsDocOrderDTO {
+    private String orderNo;
+    private Long orderLineNo;
+    private BigDecimal qty;
+}

+ 38 - 7
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/WmsDocOrderHeaderServiceImpl.java

@@ -4,7 +4,9 @@ import java.math.BigDecimal;
 import java.util.List;
 
 import com.ruoyi.ams.box.mapper.WmsBoxInfoMapper;
+import com.ruoyi.ams.inv.domain.InvLotAtt;
 import com.ruoyi.ams.inv.domain.InvLotLocId;
+import com.ruoyi.ams.inv.mapper.InvLotAttMapper;
 import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
 import com.ruoyi.ams.inv.service.IInvLotLocIdService;
 import com.ruoyi.ams.order.domain.ActAllocationDetails;
@@ -44,6 +46,8 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
     private WmsBoxInfoMapper wmsBoxInfoMapper;
     @Autowired
     private InvLotLocIdMapper invLotLocIdMapper;
+    @Autowired
+    private InvLotAttMapper invLotAttMapper;
 
     /**
      * 查询出库单头
@@ -104,10 +108,10 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
     @Override
     public int insertWmsDocOrderHeader(WmsDocOrderHeader wmsDocOrderHeader) {
         int result = wmsDocOrderHeaderMapper.insertWmsDocOrderHeader(wmsDocOrderHeader);
-        List<WmsDocOrderDetails> orderDetails = wmsDocOrderHeader.getWmsDocOrderDetailsList();
+        /*List<WmsDocOrderDetails> orderDetails = wmsDocOrderHeader.getWmsDocOrderDetailsList();
         for (WmsDocOrderDetails de : orderDetails) {
             wmsDocOrderHeaderService.insertWmsDocOrderDetails(de);
-        }
+        }*/
         return result;
     }
 
@@ -157,11 +161,24 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         if (orderHeader == null) {
             return AjaxResult.error("没有查询到订单");
         }
+        boolean isbf = false;
+        boolean isAllocation = false;
         List<WmsDocOrderDetails> orderDetails = orderHeader.getWmsDocOrderDetailsList();
         for (WmsDocOrderDetails o : orderDetails) {
-            wmsDocOrderHeaderService.doAllocationDetails(orderHeader, o);
+            AjaxResult result = wmsDocOrderHeaderService.doAllocationDetails(orderHeader, o);
+            if ((int) result.get(AjaxResult.CODE_TAG) != 500) {
+                isbf = true;
+                isAllocation = true;
+            }
+        }
+        if (isbf) {
+            return AjaxResult.success("部分分配");
+        }
+        if (isAllocation) {
+            return AjaxResult.success("分配成功");
+        } else {
+            return AjaxResult.error("分配失败,没有可用的库存");
         }
-        return AjaxResult.success("分配完成");
     }
 
     @Transactional
@@ -175,10 +192,16 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
 
     @Override
     public AjaxResult doAllocationDetails(WmsDocOrderHeader header, WmsDocOrderDetails details) {
-        if (header.getOrderType().equals("")) {
+        if (header.getOrderType().equals("OD")) {
             List<InvLotLocId> invList = invLotLocIdService.queryInvByFull(header.getOrderNo(), details.getSku());
             BigDecimal totalQty = BigDecimal.ZERO;
             for (InvLotLocId inv : invList) {
+                //可以叫料且合格的库存
+                InvLotAtt lotAtt = invLotAttMapper.selectInvLotAttByLotnum(inv.getLotnum());
+                if (!lotAtt.getLotatt05().equals("90") || !lotAtt.getLotatt12().equals("Y")) {
+                    continue;
+                }
+
                 //可以分配的库存
                 inv.setQtyallocated(inv.getQty());
                 inv.setQtyallocatedEach(inv.getQtyEach());
@@ -205,6 +228,12 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
                 if (orderQty.doubleValue() == 0) {
                     return AjaxResult.success("分配完成");
                 }
+                //可以叫料且合格的库存
+                InvLotAtt lotAtt = invLotAttMapper.selectInvLotAttByLotnum(inv.getLotnum());
+                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) {
@@ -322,8 +351,10 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
 
     @Override
     public int insertWmsDocOrderDetails(WmsDocOrderDetails wmsDocOrderDetails) {
-        //long lineNo = wmsDocOrderHeaderMapper.selectLineNo(wmsDocOrderDetails.getOrderNo());
-        //wmsDocOrderDetails.setOrderLineNo(BigDecimal.valueOf(lineNo + 1));
+        if (wmsDocOrderDetails.getOrderLineNo() == null) {
+            long lineNo = wmsDocOrderHeaderMapper.selectLineNo(wmsDocOrderDetails.getOrderNo());
+            wmsDocOrderDetails.setOrderLineNo(BigDecimal.valueOf(lineNo + 1));
+        }
         return wmsDocOrderDetailsMapper.insertWmsDocOrderDetails(wmsDocOrderDetails);
     }
 }

+ 0 - 30
warewms-ams/src/main/resources/mapper/ams/InvLotLocIdMapper.xml

@@ -447,34 +447,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <delete id="unlockInv">
         delete from inv_lot_loc_id where location_id = #{locationId} and sku = #{sku} and customer_id = #{customerId}
     </delete>
-
-
-    <select id="getQualityInspectionList" resultMap="InvLotLocIdLotattResult">
-        select
-            t2.lotatt01
-        from inv_lot_loc_id t1
-        left join inv_lot_att t2 on t2.lotnum = t1.lotnum
-        where t2.lotatt05 = 'DJ'
-        group by t2.lotatt01
-        order by t2.lotatt01
-    </select>
-
-    <select id="getQualityLocationListByLotNumber" resultMap="InvLotLocIdLotattResult">
-        select
-            t3.location_no
-        from inv_lot_loc_id t1
-        left join inv_lot_att t2 on t2.lotnum = t1.lotnum
-        left join base_location_info t3 on t3.id = t1.location_id
-        where t2.lotatt01 = #{lotNumber} and t2.lotatt05 = 'DJ'
-        group by t1.location_id
-        order by t1.location_id
-    </select>
-
-    <update id="updateQualityStatusByLotNumber" parameterType="String">
-        UPDATE inv_lot_att t1
-        SET t1.lotatt05 = #{qualityStatus}
-        WHERE
-            t1.lotatt01 = #{lotNumber}
-          AND t1.lotnum IN ( SELECT lotnum FROM inv_lot_loc_id )
-    </update>
 </mapper>

+ 11 - 0
warewms-ams/src/main/resources/mapper/ams/WmsDocAsnDetailsMapper.xml

@@ -258,4 +258,15 @@
     <update id="updateWmsReceivedQty">
         update wms_doc_asn_details set received_qty = received_qty + #{qty},received_qty_each = received_qty_each + #{qty},line_status = #{asnStatus} where asn_no = #{asnNo} and asn_line_no = #{asnLineNo}
     </update>
+
+    <select id="selectDetailsListByAsnNos" resultMap="WmsDocAsnDetailsResult">
+        <include refid="selectWmsDocAsnDetailsVo"/>
+        where asn_no in
+        <foreach item="asnNos" collection="asnNos" open="(" separator="," close=")">
+            #{asnNos}
+        </foreach>
+        and sku = #{sku}
+        and <![CDATA[ expected_qty - received_qty > 0 ]]>
+    </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_soft_allocated = qty_soft_allocated + #{qty},qty_softallocated_each = qty_softallocated_each + #{qty}
+        update wms_doc_order_details set qty_allocated = qty_allocated + #{qty},qty_allocated_each = qty_allocated_each + #{qty}
         where order_no = #{orderNo} and order_line_no = #{orderLoneNo} and sku = #{sku}
     </update>