Browse Source

feat:总码单退库、报废、校验逻辑、综合库存查询报废库存

韩帛霖 10 months ago
parent
commit
6d338cdf39

+ 16 - 1
zkqy-custom-business/src/main/java/com/zkqy/business/controller/ProductCodeListController.java

@@ -213,7 +213,6 @@ public class ProductCodeListController extends BaseController {
         return productCodeListService.deleteProductCodeListInfoByInfo(productCodeListVO);
     }
 
-
     /**
      * 得到当前总码单中所包含的码单信息
      */
@@ -222,4 +221,20 @@ public class ProductCodeListController extends BaseController {
         return AjaxResult.success(productCodeListService.selectProductCodeListByParentCode(parentCode));
     }
 
+    /**
+     * 退库码单
+     * 得到当前总码单中所包含的码单信息
+     */
+    @GetMapping("/getStockReturnProductCodeList")
+    public AjaxResult getStockReturnProductCodeList(String parentCode) {
+        return productCodeListService.getStockReturnProductCodeListByParentCode(parentCode);
+    }
+
+    /**
+     * 校验当前码单是否可以进行退库
+     */
+    @PostMapping("/checkProductCode")
+    public AjaxResult checkProductCode(@RequestBody ProductCodeListVO productCodeListVO) {
+        return productCodeListService.checkProductCode(productCodeListVO);
+    }
 }

+ 7 - 0
zkqy-custom-business/src/main/java/com/zkqy/business/controller/ProductInventoryController.java

@@ -239,6 +239,13 @@ public class ProductInventoryController extends BaseController {
         return productInventoryService.returnStorage(productCodeListVOList);
     }
 
+    /**
+     * 报废
+     */
+    @PostMapping("/invalidated")
+    public AjaxResult invalidated(@RequestBody List<ProductCodeListVO> productCodeListVOList) {
+        return productInventoryService.invalidated(productCodeListVOList);
+    }
 
     /**
      * 通知单出库接口(老库存)

+ 1 - 3
zkqy-custom-business/src/main/java/com/zkqy/business/domain/ProductCodeList.java

@@ -179,7 +179,7 @@ public class ProductCodeList extends BaseEntity {
     private String qrCodeId;
 
     /**
-     * 退库标识
+     * 退库标识 0:未退库 1:已退库 2:已报废
      */
     private String withdrawingFlag;
 
@@ -199,8 +199,6 @@ public class ProductCodeList extends BaseEntity {
     private int otherStates;
 
 
-
-
     public String getParentCode() {
         return parentCode;
     }

+ 8 - 0
zkqy-custom-business/src/main/java/com/zkqy/business/mapper/ProductInvoiceMapper.java

@@ -76,6 +76,14 @@ public interface ProductInvoiceMapper {
      */
     ProductInvoice selectProductInvoiceBySaleOrderNo(String saleOrderNo);
 
+    /**
+     * 查询产品发货单
+     *
+     * @param noticeNumber 通知单号
+     * @return 产品发货单
+     */
+    ProductInvoice selectProductInvoiceByNoticeNumber(String noticeNumber);
+
     /**
      * 根据销售单号删除产品发货单
      *

+ 16 - 0
zkqy-custom-business/src/main/java/com/zkqy/business/service/IProductCodeListService.java

@@ -38,6 +38,22 @@ public interface IProductCodeListService {
     public List<ProductCodeListVO> selectProductCodeListByParentCode(String parentCode);
 
 
+    /**
+     * 查询退库产品码单
+     *
+     * @param parentCode 总码单编码
+     * @return 产品码单
+     */
+    public AjaxResult getStockReturnProductCodeListByParentCode(String parentCode);
+
+    /**
+     * 校验当前码单是否可以进行退库
+     *
+     * @param vo 产品码单
+     * @return 产品码单集合
+     */
+    public AjaxResult checkProductCode(ProductCodeListVO vo);
+
     /**
      * 查询产品码单列表
      *

+ 8 - 0
zkqy-custom-business/src/main/java/com/zkqy/business/service/IProductInventoryService.java

@@ -126,6 +126,14 @@ public interface IProductInventoryService {
      */
     AjaxResult returnStorage(List<ProductCodeListVO> productCodeListVOList);
 
+    /**
+     * 报废
+     *
+     * @param productCodeListVOList
+     * @return
+     */
+    AjaxResult invalidated(List<ProductCodeListVO> productCodeListVOList);
+
     /**
      * 老库存出库
      *

+ 46 - 1
zkqy-custom-business/src/main/java/com/zkqy/business/service/impl/ProductCodeListServiceImpl.java

@@ -4,7 +4,6 @@ import java.text.DecimalFormat;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.ReentrantLock;
@@ -113,6 +112,52 @@ public class ProductCodeListServiceImpl implements IProductCodeListService {
         return endProductCodeListVOList;
     }
 
+    @Override
+    public AjaxResult getStockReturnProductCodeListByParentCode(String parentCode) {
+        // 得到当前总码单中的所有码单信息
+        List<ProductCodeListVO> productCodeListVOList = productCodeListMapper.selectProductCodeListByParentCode(parentCode);
+        // 只要得到当前总码单中未出库的码单
+        List<ProductCodeListVO> endProductCodeListVOList = new ArrayList<>();
+        productCodeListVOList.forEach(item -> {
+            //查看当前码单是否已入库
+            ProductWarehousingRecord productWarehousingRecord = productWarehousingRecordService.selectProductWarehousingRecordWhetherExist(item.getQrCode(), item.getQrCodeId());
+            //查看当前码单是否已出库
+            ProductOutboundRecord productOutboundRecord = productOutboundRecordService.whetherStorage(item.getQrCode(), item.getQrCodeId());
+            //查看手持机上当前码单是否已出库
+            ProductHandsetOutboundRecord productHandsetOutboundRecord = productHandsetOutboundRecordService.whetherStorage(item.getQrCode(), item.getQrCodeId());
+
+            // 只有已经入库过并且出库的码单才可以进行退库
+            if (productWarehousingRecord != null && productOutboundRecord != null && productHandsetOutboundRecord != null) {
+                endProductCodeListVOList.add(item);
+            }
+        });
+        if (endProductCodeListVOList.size() == 0) {
+            return AjaxResult.warn("不符退库条件!");
+        } else {
+            return AjaxResult.success("扫描成功!", endProductCodeListVOList);
+        }
+    }
+
+    @Override
+    public AjaxResult checkProductCode(ProductCodeListVO vo) {
+        //查看当前码单是否已入库
+        ProductWarehousingRecord productWarehousingRecord = productWarehousingRecordService.selectProductWarehousingRecordWhetherExist(vo.getQrCode(), vo.getQrCodeId());
+        //查看当前码单是否已出库
+        ProductOutboundRecord productOutboundRecord = productOutboundRecordService.whetherStorage(vo.getQrCode(), vo.getQrCodeId());
+        //查看手持机上当前码单是否已出库
+        ProductHandsetOutboundRecord productHandsetOutboundRecord = productHandsetOutboundRecordService.whetherStorage(vo.getQrCode(), vo.getQrCodeId());
+        if (productWarehousingRecord == null) {
+            return AjaxResult.warn("未入库!");
+        }
+        if (productOutboundRecord == null) {
+            return AjaxResult.warn("未出库!");
+        }
+        if (productHandsetOutboundRecord == null) {
+            return AjaxResult.warn("未出库!");
+        }
+        return AjaxResult.success("扫描成功!");
+    }
+
 
     /**
      * 查询产品码单列表

+ 140 - 18
zkqy-custom-business/src/main/java/com/zkqy/business/service/impl/ProductInventoryServiceImpl.java

@@ -11,6 +11,8 @@ import com.zkqy.business.domain.vo.ProductCodeListVO;
 import com.zkqy.business.domain.vo.ProductInvoiceVO;
 import com.zkqy.business.mapper.*;
 import com.zkqy.business.service.IOldProductOutboundRecordService;
+import com.zkqy.business.service.IProductOutboundRecordService;
+import com.zkqy.business.service.ISaleAccountsReceivableDetailService;
 import com.zkqy.common.core.domain.AjaxResult;
 import com.zkqy.common.utils.DateUtils;
 import com.zkqy.common.utils.SecurityUtils;
@@ -32,7 +34,7 @@ public class ProductInventoryServiceImpl implements IProductInventoryService {
     @Autowired
     private ProductInventoryMapper productInventoryMapper;
 
-    @Autowired
+    @Autowired // 码单
     private ProductCodeListMapper productCodeListMapper;
 
     @Autowired
@@ -56,6 +58,12 @@ public class ProductInventoryServiceImpl implements IProductInventoryService {
     @Autowired  // 出库批次
     private ProductOutboundRecordBatchMapper productOutboundRecordBatchMapper;
 
+    @Autowired // 应收账明细
+    private ISaleAccountsReceivableDetailService saleAccountsReceivableDetailService;
+
+    @Autowired
+    private IProductOutboundRecordService productOutboundRecordService;
+
     /**
      * 查询产品库存
      *
@@ -533,9 +541,14 @@ public class ProductInventoryServiceImpl implements IProductInventoryService {
 
     @Override
     public List<ProductCodeListVO> comprehensiveInventoryList(ProductCodeListVO productCodeListVO) {
+        // 查询老库存
         if (productCodeListVO.getInventoryType() != null && productCodeListVO.getInventoryType().equals("2")) {
             return productInventoryMapper.selectComprehensiveInventoryListTwo(productCodeListVO);
         }
+        // 查询报废库存
+        if (productCodeListVO.getInventoryType() != null && productCodeListVO.getInventoryType().equals("3")) {
+            return productInventoryMapper.selectComprehensiveInventoryListTwo(productCodeListVO);
+        }
         if (productCodeListVO.getIsLotNum()) {  // 是否累加批次库存
             return productInventoryMapper.selectComprehensiveInventoryListTwo(productCodeListVO);
         } else {
@@ -572,34 +585,140 @@ public class ProductInventoryServiceImpl implements IProductInventoryService {
     @Transactional
     @Override
     public AjaxResult returnStorage(List<ProductCodeListVO> productCodeListVOList) {
-        /**
-         * 如果当前产品已经登账
-         */
+        List<ProductCodeListVO> retList = new ArrayList<>();
+        // 循环处理当前退库操作
         for (ProductCodeListVO productCodeListVO : productCodeListVOList) {
-            // 判断当前货品是否已出库,出库删除出库记录
-            ProductOutboundRecord productOutboundRecord = productOutboundRecordMapper.selectProductOutboundRecordByQrCodeId(productCodeListVO.getQrCodeId());
-            if (productOutboundRecord == null) {
-                return AjaxResult.warn("当前货品未出库");
+            /**
+             * 如果当前产品已经登账->只有当前是撤销登账状态才可以进行退库
+             *
+             *
+             * 根据当前出库的码单信息定位到订单信息-》定位应收明细(如若可以定位那么不可以进行退库操作)
+             */
+
+
+//            productCodeListVO.getQrCodeId();
+//            productCodeListVO.getQrCode();
+
+            // 得到当前码单出库信息
+            ProductOutboundRecord productOutboundRecord = productOutboundRecordMapper.selectProductOutboundRecordWhetherExist(productCodeListVO.getQrCodeId(), productCodeListVO.getQrCode());
+            productOutboundRecord.getNoticeNumber(); // 通知单号
+
+            // 根据通知单号查询出库单信息
+            ProductInvoice productInvoice = productInvoiceMapper.selectProductInvoiceByNoticeNumber(productOutboundRecord.getNoticeNumber());
+            productInvoice.getSaleOrderNo(); // 订单编号
+
+            // 查询应收明细根据通知单号、销售单号
+//            SaleAccountsReceivableDetail saleAccountsReceivableDetail = new SaleAccountsReceivableDetail();
+//            saleAccountsReceivableDetail.setSaleNo(productInvoice.getSaleOrderNo());
+//            saleAccountsReceivableDetail.setNoticeNumber(productOutboundRecord.getNoticeNumber());
+//            List<SaleAccountsReceivableDetail> saleAccountsReceivableDetailList = saleAccountsReceivableDetailService.selectSaleAccountsReceivableDetailList(saleAccountsReceivableDetail);
+
+            // 查询批次表
+            ProductOutboundRecordBatch productOutboundRecordBatch = new ProductOutboundRecordBatch();
+            productOutboundRecordBatch.setSaleNo(productInvoice.getSaleOrderNo());
+            productOutboundRecordBatch.setNoticeNumber(productOutboundRecord.getNoticeNumber());
+            List<ProductOutboundRecordBatch> productOutboundRecordBatchList = productOutboundRecordBatchMapper.selectProductOutboundRecordBatchList(productOutboundRecordBatch);
+
+            ProductOutboundRecordBatch find = productOutboundRecordBatchList
+                    .stream()
+                    .filter(item -> item.getOutboundRecordId() == productOutboundRecord.getId())
+                    .findFirst()
+                    .orElse(null);
+
+            // getBatchState() 0 表示正常登账状态不可以退库 1表示撤销登账状态可以退库
+            if (find != null && find.getBatchState() == 1) {
+                retList.add(productCodeListVO);
+                continue;
             }
+
+//            // 判断当前货品是否已出库,出库删除出库记录
+//            ProductOutboundRecord productOutboundRecord = productOutboundRecordMapper.selectProductOutboundRecordByQrCodeId(productCodeListVO.getQrCodeId());
+//            if (productOutboundRecord == null) {
+//                return AjaxResult.warn("当前货品未出库");
+//            }
             // 库存累加
-            ProductInventory productInventory = productInventoryMapper.selectProductInventoryByQrCode(productCodeListVO.getQrCode());
-            ProductInventory editProductInventory = new ProductInventory();
-            editProductInventory.setId(productInventory.getId());//编号
-            editProductInventory.setTotalCanisterNum(productInventory.getTotalCanisterNum() + productOutboundRecord.getCanisterNum());//合计筒数
-            editProductInventory.setTotalBoxNum(productInventory.getTotalBoxNum() + 1);//合计箱数
-            editProductInventory.setTotalSuttle(handlingWeight(productInventory.getTotalSuttle() + productOutboundRecord.getSuttle()));//合计净重
-            editProductInventory.setTotalGrossWeight(handlingWeight(productInventory.getTotalGrossWeight() + productOutboundRecord.getGrossWeight()));//合计毛重
-            productInventoryMapper.updateProductInventory(editProductInventory);
+//            ProductInventory productInventory = productInventoryMapper.selectProductInventoryByQrCode(productCodeListVO.getQrCode());
+//            ProductInventory editProductInventory = new ProductInventory();
+//            editProductInventory.setId(productInventory.getId());//编号
+//            editProductInventory.setTotalCanisterNum(productInventory.getTotalCanisterNum() + productOutboundRecord.getCanisterNum());//合计筒数
+//            editProductInventory.setTotalBoxNum(productInventory.getTotalBoxNum() + 1);//合计箱数
+//            editProductInventory.setTotalSuttle(handlingWeight(productInventory.getTotalSuttle() + productOutboundRecord.getSuttle()));//合计净重
+//            editProductInventory.setTotalGrossWeight(handlingWeight(productInventory.getTotalGrossWeight() + productOutboundRecord.getGrossWeight()));//合计毛重
+//            productInventoryMapper.updateProductInventory(editProductInventory);
 
             // 修改码单标识为已退库
             ProductCodeList productCodeList = productCodeListMapper.selectProductCodeListById(productCodeListVO.getId());
             productCodeList.setWithdrawingFlag("1");
             productCodeListMapper.updateProductCodeList(productCodeList);
 
+            // 进行退库操作
+            productOutboundRecordService.removeErrorOutboundRecord(productInvoice.getId());
             // 删除出库记录
-            productOutboundRecordMapper.deleteProductOutboundRecordById(productOutboundRecord.getId());
+//            productOutboundRecordMapper.deleteProductOutboundRecordById(productOutboundRecord.getId());
         }
-        return AjaxResult.success();
+        if (retList.size() == 0) {
+            return AjaxResult.success();
+        } else {
+            return AjaxResult.warn("已登账!无法退库", retList);
+        }
+    }
+
+    @Override
+    public AjaxResult invalidated(List<ProductCodeListVO> productCodeListVOList) {
+
+        //返回无法报废库存
+        List<ProductCodeListVO> retList = new ArrayList<>();
+
+        // 可以进行报废处理的码单
+        List<ProductCodeListVO> invalidatedList = new ArrayList<>();
+
+        // 循环处理当前退库操作
+        for (ProductCodeListVO productCodeListVO : productCodeListVOList) {
+            // 得到当前码单出库信息
+            ProductOutboundRecord productOutboundRecord = productOutboundRecordMapper.selectProductOutboundRecordWhetherExist(productCodeListVO.getQrCodeId(), productCodeListVO.getQrCode());
+            productOutboundRecord.getNoticeNumber(); // 通知单号
+
+            // 根据通知单号查询出库单信息
+            ProductInvoice productInvoice = productInvoiceMapper.selectProductInvoiceByNoticeNumber(productOutboundRecord.getNoticeNumber());
+            productInvoice.getSaleOrderNo(); // 订单编号
+
+            // 查询批次表
+            ProductOutboundRecordBatch productOutboundRecordBatch = new ProductOutboundRecordBatch();
+            productOutboundRecordBatch.setSaleNo(productInvoice.getSaleOrderNo());
+            productOutboundRecordBatch.setNoticeNumber(productOutboundRecord.getNoticeNumber());
+            List<ProductOutboundRecordBatch> productOutboundRecordBatchList = productOutboundRecordBatchMapper.selectProductOutboundRecordBatchList(productOutboundRecordBatch);
+
+            ProductOutboundRecordBatch find = productOutboundRecordBatchList
+                    .stream()
+                    .filter(item -> item.getOutboundRecordId() == productOutboundRecord.getId())
+                    .findFirst()
+                    .orElse(null);
+
+            // getBatchState() 0 表示正常登账状态不可以退库 1表示撤销登账状态可以退库
+            if (find != null && find.getBatchState() == 1) {
+                retList.add(productCodeListVO);
+                continue;
+            }
+            // 修改码单标识为报废
+            ProductCodeList productCodeList = productCodeListMapper.selectProductCodeListById(productCodeListVO.getId());
+            // 报废状态
+            productCodeList.setWithdrawingFlag("2");
+            productCodeListMapper.updateProductCodeList(productCodeList);
+            // 进行退库操作
+            productOutboundRecordService.removeErrorOutboundRecord(productInvoice.getId());
+            // 报废状态
+            productCodeListVO.setInventoryType("3");
+            // 添加报废库存List
+            invalidatedList.add(productCodeListVO);
+        }
+        // 增加报废库存 inventory_type:3 报废类型库存
+        if (productCodeListVOList.size() != 0) this.productStorage(productCodeListVOList);
+        if (retList.size() == 0) {
+            return AjaxResult.success();
+        } else {
+            return AjaxResult.warn("已登账!无法报废", retList);
+        }
+
     }
 
     @Override
@@ -747,4 +866,7 @@ public class ProductInventoryServiceImpl implements IProductInventoryService {
         DecimalFormat df = new DecimalFormat("0.00");
         return Double.parseDouble(df.format(weight));
     }
+
+    // find
+
 }

+ 4 - 0
zkqy-custom-business/src/main/resources/mapper/business/ProductInvoiceMapper.xml

@@ -222,6 +222,10 @@
         <include refid="selectProductInvoiceVo"/>
         where sale_order_no = #{saleOrderNo} and del_flag = '0'
     </select>
+    <select id="selectProductInvoiceByNoticeNumber" resultType="com.zkqy.business.domain.ProductInvoice">
+        <include refid="selectProductInvoiceVo"/>
+        where notice_number = #{noticeNumber} and del_flag = '0'
+    </select>
 
     <update id="deleteProductInvoiceBySaleOrderNo" parameterType="String">
         update {DBNAME}.product_invoice

+ 1 - 0
zkqy-ui/src/views/orderMange/components/dialogForm/OutStockDetail.vue

@@ -383,6 +383,7 @@ export default {
       });
 
       return sums;
+      return sums;
     },
     // 事件格式化工具
     formatTime(time) {

+ 3 - 2
zkqy-ui/src/views/orderMange/comprehensiveInventory/index.vue

@@ -6,6 +6,7 @@
           <el-select v-model="queryParams.inventoryType" @keyup.enter.native.prevent @change="handleQuery">
             <el-option key="1" label="新库存" value="1"></el-option>
             <el-option key="2" label="老库存" value="2"></el-option>
+            <el-option key="3" label="报废库存" value="3"></el-option>
           </el-select>
         </div>
       </el-form-item>
@@ -33,8 +34,8 @@
             style="  flex: 1;  margin-right: 10px; ">
           </el-input>
           <el-select v-model="queryParams.isLotNum" placeholder="是否累加库存" @keyup.enter.native.prevent
-                     @change="handleQuery" style="width:40%" :disabled="queryParams.inventoryType=='2'">
-          <el-option
+                     @change="handleQuery" style="width:40%" :disabled="queryParams.inventoryType!='1'">
+            <el-option
               key="1"
               label="累加批次库存"
               value="false">