From 80d74a35cc30ac2e26b4867981ce63b9f95ba511 Mon Sep 17 00:00:00 2001
From: youjie <272855983@qq.com>
Date: Tue, 31 Oct 2023 11:08:53 +0800
Subject: [PATCH] 完善入库质检功能

---
 ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue                                          |  5 +++++
 ant-design-vue-jeecg/src/views/system/receipt/ReceiveHeaderList.vue                                                   | 14 +++++++-------
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/qualityHeader/service/impl/QualityDetailServiceImpl.java | 44 ++++++++++++++++++++++++++++++++++++++++++++
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/qualityHeader/service/impl/QualityHeaderServiceImpl.java |  8 ++++++--
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiveHeader/service/impl/ReceiveDetailServiceImpl.java |  3 +--
 huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java                                         | 57 ++++++++++++++++++++++++++++++++++++++++++---------------
 6 files changed, 105 insertions(+), 26 deletions(-)

diff --git a/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue b/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue
index b93a253..3395550 100644
--- a/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue
+++ b/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue
@@ -307,6 +307,11 @@ export default {
           scopedSlots: {customRender: 'inventoryStatus_dictText'}
         },
         {
+          title: '数量',
+          align: "center",
+          dataIndex: 'qty'
+        },
+        {
           title: '入库数量',
           align: "center",
           dataIndex: 'receiptQty'
diff --git a/ant-design-vue-jeecg/src/views/system/receipt/ReceiveHeaderList.vue b/ant-design-vue-jeecg/src/views/system/receipt/ReceiveHeaderList.vue
index e755f32..e7abd50 100644
--- a/ant-design-vue-jeecg/src/views/system/receipt/ReceiveHeaderList.vue
+++ b/ant-design-vue-jeecg/src/views/system/receipt/ReceiveHeaderList.vue
@@ -163,16 +163,16 @@
         </template>
 
         <span slot="action" slot-scope="text, record">
-          <a  @click="receive(record)">
-            <a-button v-has="'receiveHeader:receive'" v-if="(record.lastStatus < 200)"  type="primary">收货</a-button><a-divider type="vertical"/>
+          <a  v-has="'receiveHeader:receive'" v-if="(record.lastStatus < 200)"  @click="receive(record)">
+            <a-button  type="primary">收货</a-button><a-divider type="vertical"/>
           </a>
-          <a  @click="receiveHeader(record.id)">
-            <a-button v-has="'receiveHeader:receive'" v-if="(record.lastStatus < 200)"  type="primary">全部收货</a-button><a-divider type="vertical"/>
+          <a v-has="'receiveHeader:receive'" v-if="(record.lastStatus < 200)" @click="receiveHeader(record.id)">
+            <a-button  type="primary">全部收货</a-button><a-divider type="vertical"/>
           </a>
-          <a  @click="receiveHeaderToQuality(record.id)">
-            <a-button v-has="'receiveHeader:quality'" v-if="(record.lastStatus == 200)"  type="primary">全部质检</a-button><a-divider type="vertical"/>
+          <a v-has="'receiveHeader:quality'" v-if="(record.lastStatus == 200)" @click="receiveHeaderToQuality(record.id)">
+            <a-button  type="primary">全部质检</a-button><a-divider type="vertical"/>
           </a>
-          <a  v-has="'receiveHeader:edit'" @click="handleEdit(record)">
+          <a  v-has="'receiveHeader:edit'" v-if="(record.firstStatus == 0)" @click="handleEdit(record)">
             <a-button  type="primary">编辑</a-button><a-divider type="vertical"/>
           </a>
           <a-popconfirm v-has="'receiveHeader:remove'" v-if="(record.firstStatus == 0)" title="确定删除吗?" @confirm="() => handleDelete(record.id)" >
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/qualityHeader/service/impl/QualityDetailServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/qualityHeader/service/impl/QualityDetailServiceImpl.java
index 9037def..feed265 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/qualityHeader/service/impl/QualityDetailServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/qualityHeader/service/impl/QualityDetailServiceImpl.java
@@ -1,12 +1,15 @@
 package org.jeecg.modules.wms.receipt.qualityHeader.service.impl;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 
 import javax.annotation.Resource;
 
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.modules.wms.inventory.inventoryTransaction.entity.InventoryTransaction;
+import org.jeecg.modules.wms.inventory.inventoryTransaction.service.IInventoryTransactionService;
 import org.jeecg.modules.wms.receipt.qualityHeader.entity.QualityDetail;
 import org.jeecg.modules.wms.receipt.qualityHeader.mapper.QualityDetailMapper;
 import org.jeecg.modules.wms.receipt.qualityHeader.service.IQualityDetailService;
@@ -33,6 +36,8 @@ public class QualityDetailServiceImpl extends ServiceImpl<QualityDetailMapper, Q
     private IQualityDetailService qualityDetailService;
     @Resource
     private IQualityHeaderService qualityHeaderService;
+    @Resource
+    private IInventoryTransactionService inventoryTransactionService;
 
     @Override
     public List<QualityDetail> selectByMainId(String mainId) {
@@ -68,6 +73,45 @@ public class QualityDetailServiceImpl extends ServiceImpl<QualityDetailMapper, Q
         if (!qualityHeaderService.updateQualityHeaderStatus(qualityDetail.getQualityId())) {
             throw new JeecgBootException("质检失败,更新质检状态失败");
         }
+
+        List<InventoryTransaction> inventoryTransactionList = new ArrayList<>();
+        if (qualityfiedQty.compareTo(BigDecimal.ZERO) > 0) {
+            InventoryTransaction inventoryTransaction = new InventoryTransaction();
+            inventoryTransaction.setType(QuantityConstant.INVENTORY_TRANSACTION_QUALITY);
+            inventoryTransaction.setWarehouseCode(qualityDetail.getWarehouseCode());
+            inventoryTransaction.setCompanyCode(qualityDetail.getCompanyCode());
+            inventoryTransaction.setReceiptCode(qualityDetail.getQualityCode());
+            inventoryTransaction.setMaterialCode(qualityDetail.getMaterialCode());
+            inventoryTransaction.setMaterialName(qualityDetail.getMaterialName());
+            inventoryTransaction.setMaterialSpec(qualityDetail.getMaterialSpec());
+            inventoryTransaction.setMaterialUnit(qualityDetail.getMaterialUnit());
+            inventoryTransaction.setBatch(qualityDetail.getBatch());
+            inventoryTransaction.setLot(qualityDetail.getLot());
+            inventoryTransaction.setProject(qualityDetail.getProject());
+            inventoryTransaction.setInventoryStatus(QuantityConstant.QUALITY_GOOD);
+            inventoryTransaction.setQty(qualityfiedQty);
+            inventoryTransactionList.add(inventoryTransaction);
+        }
+        if (unqualityfiedQty.compareTo(BigDecimal.ZERO) > 0) {
+            InventoryTransaction inventoryTransaction = new InventoryTransaction();
+            inventoryTransaction.setType(QuantityConstant.INVENTORY_TRANSACTION_QUALITY);
+            inventoryTransaction.setWarehouseCode(qualityDetail.getWarehouseCode());
+            inventoryTransaction.setCompanyCode(qualityDetail.getCompanyCode());
+            inventoryTransaction.setReceiptCode(qualityDetail.getQualityCode());
+            inventoryTransaction.setMaterialCode(qualityDetail.getMaterialCode());
+            inventoryTransaction.setMaterialName(qualityDetail.getMaterialName());
+            inventoryTransaction.setMaterialSpec(qualityDetail.getMaterialSpec());
+            inventoryTransaction.setMaterialUnit(qualityDetail.getMaterialUnit());
+            inventoryTransaction.setBatch(qualityDetail.getBatch());
+            inventoryTransaction.setLot(qualityDetail.getLot());
+            inventoryTransaction.setProject(qualityDetail.getProject());
+            inventoryTransaction.setInventoryStatus(QuantityConstant.QUALITY_DEFECTIVE);
+            inventoryTransaction.setQty(unqualityfiedQty);
+            inventoryTransactionList.add(inventoryTransaction);
+        }
+        if (!inventoryTransactionService.saveBatch(inventoryTransactionList)) {
+            throw new JeecgBootException("质检失败,增加库存交易记录失败");
+        }
         return Result.ok("质检成功");
     }
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/qualityHeader/service/impl/QualityHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/qualityHeader/service/impl/QualityHeaderServiceImpl.java
index e2865c5..9f93442 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/qualityHeader/service/impl/QualityHeaderServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/qualityHeader/service/impl/QualityHeaderServiceImpl.java
@@ -80,8 +80,12 @@ public class QualityHeaderServiceImpl extends ServiceImpl<QualityHeaderMapper, Q
         }
         if (maxCode != null) {
             String day = maxCode.substring(maxCode.length() - 13, maxCode.length() - 5);
-            Integer Count = Integer.valueOf(maxCode.substring(maxCode.length() - 5, maxCode.length()));
-            code = qualityType + df.format(now) + String.format("%05d", Count + 1);
+            if (day.equals(df.format(now))) {
+                Integer Count = Integer.valueOf(maxCode.substring(maxCode.length() - 5, maxCode.length()));
+                code = qualityType + df.format(now) + String.format("%05d", Count + 1);
+            } else {
+                code = qualityType + df.format(now) + String.format("%05d", 0000 + 1);
+            }
         } else {
             code = qualityType + df.format(now) + String.format("%05d", 0000 + 1);
         }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiveHeader/service/impl/ReceiveDetailServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiveHeader/service/impl/ReceiveDetailServiceImpl.java
index 8ffbbee..54e3f7c 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiveHeader/service/impl/ReceiveDetailServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiveHeader/service/impl/ReceiveDetailServiceImpl.java
@@ -199,8 +199,7 @@ public class ReceiveDetailServiceImpl extends ServiceImpl<ReceiveDetailMapper, R
             inventoryTransaction.setLot(receiveDetail.getLot());
             inventoryTransaction.setProject(receiveDetail.getProject());
             inventoryTransaction.setInventoryStatus(receiveDetail.getInventoryStatus());
-            inventoryTransaction.setQty(receiveQty);
-            inventoryTransaction.setReceiptQty(receiveQty);
+            inventoryTransaction.setQty(taskQty);
             inventoryTransactionList.add(inventoryTransaction);
         }
         if (CollectionUtils.isEmpty(receiveDetailList)) {
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java
index c24f4ab..aa49a40 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java
@@ -12,7 +12,7 @@ package org.jeecg.utils.constant;
  * 8、波次状态
  * 9、质检状态
  * 10、盘点状态
- * 11、INVENTORY_TRANSACTION_RECEIPT
+ * 11、库存交易记录
  * 12、调整单状态
  * 13、任务内部类型
  * 14、质检单类型
@@ -307,6 +307,12 @@ public class QuantityConstant {
     /** 移库 */
     public static final Integer INVENTORY_TRANSACTION_TRANSFER = 50;
 
+    /** 收货 */
+    public static final Integer INVENTORY_TRANSACTION_RECEIVE = 60;
+
+    /** 质检 */
+    public static final Integer INVENTORY_TRANSACTION_QUALITY = 70;
+
     // 12、调整单状态
 
     // 未批准
@@ -402,7 +408,22 @@ public class QuantityConstant {
     public static final Integer RECEIVE_HEADER_HALF = 100;
     // 收货单完成收货状态
     public static final Integer RECEIVE_HEADER_COMPLETE = 200;
-    
+    // 生成质检单
+    public static final Integer RECEIVE_HEADER_QUALITY = 300;
+
+    // 新建
+    public static final Integer QUALITY_HEADER_BUILD = 0;
+    // 部分质检
+    public static final Integer QUALITY_HEADER_HALF = 100;
+    // 质检完成
+    public static final Integer QUALITY_HEADER_COMPLETE = 200;
+
+    /** 来料质检 */
+    public static final String QUALITY_TYPE_INCOMING = "QI";
+    /** 库内全检 */
+    public static final String QUALITY_TYPE_INHOUSE_FULL = "QIF";
+    /** 库内抽检 */
+    public static final String QUALITY_TYPE_INHOUSE_PART = "QIP";
 
     /** 对接WCS可用巷道API */
     public static final String ADDRESS_WCS_AVAILABLE_ROWDWAY = "WCS_AVAILABLE_ROWDWAY";
@@ -451,8 +472,14 @@ public class QuantityConstant {
     public static final String PLATFORM_CODING = "赋码系统";
     public static final String PLATFORM_ERP = "ERP";
     public static final String PLATFORM_WMS = "WMS";
-    // good
+    // 良品
     public static final String QUALITY_GOOD = "good";
+    // 次品
+    public static final String QUALITY_DEFECTIVE = "defective";
+    // 报废品
+    public static final String QUALITY_SCRAP = "scrap";
+    // 待确认
+    public static final String QUALITY_DISUSSED = "discussed";
 
     // 发送AGV任务成功
     public static final int AGV_NEED_SEND = 0;
@@ -515,25 +542,25 @@ public class QuantityConstant {
      * 出库依赖库区
      */
     public static final int SHIPMENT_BY_ZONE = 1;
-    
-    /** 对接WCS可用巷道API:关闭  */
+
+    /** 对接WCS可用巷道API:关闭 */
     public static final String AVAILABLE_ROWDWAY_CLOSE = "0";
-    
+
     /** 对接WCS可用巷道API:开启 */
     public static final String AVAILABLE_ROWDWAY_OPEN = "1";
-    
+
     /** 启用获取可用巷道API */
     public static final String RULE_AVAILABLE_ROWDWAY_STATUS = "availableRowdwayStatus";
-    
-    /** 接口异常响应通知配置  */
-    
-    /** 定时任务异常响应通知配置  */
+
+    /** 接口异常响应通知配置 */
+
+    /** 定时任务异常响应通知配置 */
     public static final String RULE_JOB_EXCEPTION_NOTICE_ROLE_OR_NAME = "jobExceptionNoticeRoleOrName";
-    
-    /** 接口异常响应通知配置  */
+
+    /** 接口异常响应通知配置 */
     public static final String RULE_API_EXCEPTION_NOTICE_ROLE_OR_NAME = "apiExceptionNoticeRoleOrName";
-    
-    /** 定时任务执行消息通知配置  */
+
+    /** 定时任务执行消息通知配置 */
     public static final String RULE_TASK_RUN_NOTICE_CLASS_NAME = "taskRunNoticeClassName";
 
     public static final int RULE_TASK_NOT_CLEAR = 0;
--
libgit2 0.22.2