Ver Fonte

仓库业务->添加快速入库、快速出库接口

caifc há 3 anos atrás
pai
commit
d85d36f553
14 ficheiros alterados com 559 adições e 72 exclusões
  1. 6 5
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/warehouse/warehouseBusiness/TWarehouseGoodsTransferController.java
  2. 34 14
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/warehouse/warehouseBusiness/TWarehouseInStockController.java
  3. 16 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/warehouse/warehouseBusiness/TWarehouseOutStockController.java
  4. 15 0
      ruoyi-warehouse/src/main/java/com/ruoyi/reportManagement/domain/vo/WhgenlegVO.java
  5. 19 0
      ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/component/WarehouseBillsfilterService.java
  6. 128 0
      ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/component/impl/WarehouseBillsfilterServiceImpl.java
  7. 31 0
      ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/domain/dto/WarehousebillsDTO.java
  8. 17 0
      ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/domain/enums/WarehouseTypeEnum.java
  9. 10 7
      ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/domain/vo/WarehouseBillsVO.java
  10. 13 2
      ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/mapper/TWarehouseBillsMapper.java
  11. 19 2
      ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/service/ITWarehouseBillsService.java
  12. 239 42
      ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/service/impl/TWarehouseBillsServiceImpl.java
  13. 1 0
      ruoyi-warehouse/src/main/resources/mapper/reportManagement/TWhgenlegMapper.xml
  14. 11 0
      ruoyi-warehouse/src/main/resources/mapper/warehouseBusiness/TWarehousebillsMapper.xml

+ 6 - 5
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warehouse/warehouseBusiness/TWarehouseGoodsTransferController.java

@@ -14,6 +14,7 @@ import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.warehouseBusiness.domain.TWarehouseBills;
+import com.ruoyi.warehouseBusiness.domain.dto.WarehousebillsDTO;
 import com.ruoyi.warehouseBusiness.domain.enums.WarehouseTypeEnum;
 import com.ruoyi.warehouseBusiness.excel.GoodsTransfer;
 import com.ruoyi.warehouseBusiness.service.ITWarehouseBillsService;
@@ -234,16 +235,16 @@ public class TWarehouseGoodsTransferController extends BaseController {
     }
 
     /**
-     * 货转根据提单号查询可用客户、仓库信息
+     * 货转根据条件查询可用客户、仓库信息
      */
     @DataScope(deptAlias = "d", userAlias = "u")
-    @GetMapping(value = "/corpOrWarehouseByMblno")
-    public AjaxResult corpOrWarehouseByMblno(@RequestParam("mblno") String fMblno) {
+    @PostMapping(value = "/corpOrWarehouseByMblno")
+    public AjaxResult corpOrWarehouseByMblno(@RequestBody WarehousebillsDTO warehousebillsDTO) {
         // 判断是否传入值
-        if (StringUtils.isEmpty(fMblno)) {
+        if (StringUtils.isNull(warehousebillsDTO) || StringUtils.isEmpty(warehousebillsDTO.getfMblno())) {
             return AjaxResult.error("未找到提单号");
         }
-        return itWarehouseBillsService.corpOrWarehouseByMblno(fMblno);
+        return itWarehouseBillsService.corpOrWarehouseByMblno(warehousebillsDTO);
     }
 
     /**

+ 34 - 14
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warehouse/warehouseBusiness/TWarehouseInStockController.java

@@ -15,6 +15,8 @@ import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.domain.SysCheckCode;
 import com.ruoyi.warehouseBusiness.domain.TWarehouseBills;
+import com.ruoyi.warehouseBusiness.domain.dto.WarehousebillsDTO;
+import com.ruoyi.warehouseBusiness.domain.enums.WarehouseTypeEnum;
 import com.ruoyi.warehouseBusiness.excel.InStock;
 import com.ruoyi.warehouseBusiness.service.ITWarehouseBillsService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -99,8 +101,7 @@ public class TWarehouseInStockController extends BaseController {
      */
     //@Log(title = "导入集装箱动态", businessType = BusinessType.IMPORT)
     @PostMapping(value = "/importInstock")
-    public AjaxResult importInstock(@RequestParam("file") MultipartFile file)
-    {
+    public AjaxResult importInstock(@RequestParam("file") MultipartFile file) {
         return itWarehouseBillsService.importLibraryInformation(file);
     }
 
@@ -168,11 +169,11 @@ public class TWarehouseInStockController extends BaseController {
     @PostMapping(value = "/submitWarehousingApproval")
     @RepeatSubmit
     public AjaxResult submitWarehousingApproval(@RequestParam("tWarehouseBills") String tWarehouseBills,
-                                          @RequestParam("tEnclosure") String tEnclosure,
-                                          @RequestParam("tCntr") String tCntr,
-                                          @RequestParam("tWarehousebillsfeesCr") String tWarehousebillsfeesCr,
-                                          @RequestParam("tWarehousebillsfeesDr") String tWarehousebillsfeesDr,
-                                          @RequestParam("tWarehousebillsitems") String tWarehousebillsitems) {
+                                                @RequestParam("tEnclosure") String tEnclosure,
+                                                @RequestParam("tCntr") String tCntr,
+                                                @RequestParam("tWarehousebillsfeesCr") String tWarehousebillsfeesCr,
+                                                @RequestParam("tWarehousebillsfeesDr") String tWarehousebillsfeesDr,
+                                                @RequestParam("tWarehousebillsitems") String tWarehousebillsitems) {
         String billsType = "SJRK";
         if (StringUtils.isNull(tWarehouseBills) || "{}".equals(tWarehouseBills)) {
             return AjaxResult.error("未找到仓库主表数据,请确认");
@@ -219,11 +220,11 @@ public class TWarehouseInStockController extends BaseController {
     public AjaxResult withdrawById(@PathVariable("fId") Long fId) {
         // 查询是否对账、收费、付费
         int result = itWarehouseBillsService.derecognition(fId);
-        if(result == 1){
+        if (result == 1) {
             return AjaxResult.error("撤销请核失败,财务已对账");
-        } else if (result == 2){
+        } else if (result == 2) {
             return AjaxResult.error("撤销请核失败,财务已收费");
-        } else if (result == 3){
+        } else if (result == 3) {
             return AjaxResult.error("撤销请核失败,财务已付费");
         }
         String billsType = "SJRKRevoke";
@@ -344,11 +345,11 @@ public class TWarehouseInStockController extends BaseController {
     public AjaxResult addDetails(@PathVariable("fId") Long fId) {
         String billsType = "SJRKITEM";
         LoginUser loginUser = SpringUtils.getBean(TokenService.class).getLoginUser(ServletUtils.getRequest());
-        return itWarehouseBillsService.addDetails(fId, billsType,loginUser);
+        return itWarehouseBillsService.addDetails(fId, billsType, loginUser);
     }
 
     /**
-     *   明細流水号
+     * 明細流水号
      */
     @PostMapping(value = "/serialNumber")
     public AjaxResult serialNumber() {
@@ -357,7 +358,8 @@ public class TWarehouseInStockController extends BaseController {
     }
 
     /**
-     *  根据id更新费用审核状态
+     * 根据id更新费用审核状态
+     *
      * @param id
      * @return
      */
@@ -368,7 +370,8 @@ public class TWarehouseInStockController extends BaseController {
     }
 
     /**
-     *  根据id撤销已费用审核状态
+     * 根据id撤销已费用审核状态
+     *
      * @param id
      * @return
      */
@@ -378,4 +381,21 @@ public class TWarehouseInStockController extends BaseController {
         return itWarehouseBillsService.revokefeeReview(id);
     }
 
+
+    /**
+     * 入库暂存
+     */
+    @PreAuthorize("@ss.hasPermi('warehouseBusiness:inStock:add')")
+    @Log(title = "详情主表", businessType = BusinessType.INSERT)
+    @PostMapping(value = "/quick_storage")
+    @RepeatSubmit
+    public AjaxResult quickStorage(@RequestBody WarehousebillsDTO warehousebillsDTO) {
+        // 判断有箱号 就加箱号判断、无箱号则不加箱号判断
+        warehousebillsDTO.setfBilltype(WarehouseTypeEnum.SJRK.getType());
+        // 判断是提单号是否在一天当中出现第二次或以上
+        itWarehouseBillsService.checkMblNoRepeat(warehousebillsDTO);
+        LoginUser loginUser = SpringUtils.getBean(TokenService.class).getLoginUser(ServletUtils.getRequest());
+        return itWarehouseBillsService.quickOperation(warehousebillsDTO, loginUser);
+    }
+
 }

+ 16 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warehouse/warehouseBusiness/TWarehouseOutStockController.java

@@ -14,6 +14,8 @@ import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.warehouseBusiness.domain.TWarehouseBills;
+import com.ruoyi.warehouseBusiness.domain.dto.WarehousebillsDTO;
+import com.ruoyi.warehouseBusiness.domain.enums.WarehouseTypeEnum;
 import com.ruoyi.warehouseBusiness.excel.OutStock;
 import com.ruoyi.warehouseBusiness.service.ITWarehouseBillsService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -391,4 +393,18 @@ public class TWarehouseOutStockController extends BaseController {
         return itWarehouseBillsService.revokefeeReview(id);
     }
 
+    /**
+     * 入库暂存
+     */
+    @PreAuthorize("@ss.hasPermi('warehouseBusiness:inStock:add')")
+    @Log(title = "详情主表", businessType = BusinessType.INSERT)
+    @PostMapping(value = "/quick_delivery")
+    @RepeatSubmit
+    public AjaxResult quickDelivery(@RequestBody WarehousebillsDTO warehousebillsDTO) {
+        // 判断有箱号 就加箱号判断、无箱号则不加箱号判断
+        warehousebillsDTO.setfBilltype(WarehouseTypeEnum.SJCK.getType());
+        LoginUser loginUser = SpringUtils.getBean(TokenService.class).getLoginUser(ServletUtils.getRequest());
+        return itWarehouseBillsService.quickOperation(warehousebillsDTO, loginUser);
+    }
+
 }

+ 15 - 0
ruoyi-warehouse/src/main/java/com/ruoyi/reportManagement/domain/vo/WhgenlegVO.java

@@ -0,0 +1,15 @@
+package com.ruoyi.reportManagement.domain.vo;
+
+import com.ruoyi.reportManagement.domain.TWhgenleg;
+import lombok.Data;
+
+/**
+ * @author caifc
+ * @date 2021-11-15 11:20
+ */
+@Data
+public class WhgenlegVO extends TWhgenleg {
+    private static final long serialVersionUID = 1L;
+
+
+}

+ 19 - 0
ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/component/WarehouseBillsfilterService.java

@@ -0,0 +1,19 @@
+package com.ruoyi.warehouseBusiness.component;
+
+import com.ruoyi.warehouseBusiness.domain.dto.WarehousebillsDTO;
+
+/**
+ *
+ *
+ * @author  caifc
+ * @date 2021-11-15 9:54
+*/
+public interface WarehouseBillsfilterService {
+
+    /**
+     *  校验仓库信息
+     * @param warehousebillsDTO
+     */
+    void filter(WarehousebillsDTO warehousebillsDTO);
+
+}

+ 128 - 0
ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/component/impl/WarehouseBillsfilterServiceImpl.java

@@ -0,0 +1,128 @@
+package com.ruoyi.warehouseBusiness.component.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.ruoyi.common.exception.WarehouseException;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.warehouseBusiness.component.WarehouseBillsfilterService;
+import com.ruoyi.warehouseBusiness.domain.TWarehousebillsitems;
+import com.ruoyi.warehouseBusiness.domain.dto.WarehousebillsDTO;
+import com.ruoyi.warehouseBusiness.domain.enums.WarehouseTypeEnum;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @author caifc
+ * @date 2021-11-15 9:55
+ */
+@Slf4j
+@Component
+@AllArgsConstructor
+public class WarehouseBillsfilterServiceImpl implements WarehouseBillsfilterService {
+
+
+    @Override
+    public void filter(WarehousebillsDTO warehousebillsDTO) {
+        // 校验仓储信息
+        filterWarehouseBills(warehousebillsDTO);
+        // 校验明细
+        List<TWarehousebillsitems> itemList = warehousebillsDTO.getWarehousebillsitemsList();
+        if (CollectionUtils.isNotEmpty(itemList)) {
+            filterItem(itemList);
+        }
+    }
+
+    /**
+     * 校验仓储主表信息
+     *
+     * @param warehousebillsDTO 主表信息
+     */
+    private void filterWarehouseBills(WarehousebillsDTO warehousebillsDTO) {
+        if (StringUtils.isNull(warehousebillsDTO.getfCorpid())) {
+            throw new WarehouseException("请维护客户信息");
+        }
+        if (StringUtils.isNull(warehousebillsDTO.getfBsdate())) {
+            throw new WarehouseException("请维护计划日期");
+        }
+        if (StringUtils.isNull(warehousebillsDTO.getfWarehouseid())) {
+            throw new WarehouseException("请维护仓库信息");
+        }
+        if (StringUtils.isEmpty(warehousebillsDTO.getfStorekeeper())) {
+            throw new WarehouseException("请维护仓库人");
+        }
+        if (StringUtils.isNull(warehousebillsDTO.getfTrademodeid())) {
+            throw new WarehouseException("请维护贸易方式");
+        }
+        // 入库校验
+        if (warehousebillsDTO.getfBilltype().equals(WarehouseTypeEnum.SJRK.getType())) {
+            if (StringUtils.isEmpty(warehousebillsDTO.getfChargetype())) {
+                throw new WarehouseException("请维护仓储费方式");
+            }
+            if (StringUtils.isNull(warehousebillsDTO.getfGoodsid())) {
+                throw new WarehouseException("请维护商品信息");
+            }
+            if (StringUtils.isNull(warehousebillsDTO.getfPlanqty()) ||
+                    Objects.equals(warehousebillsDTO.getfPlanqty(), 0L)) {
+                throw new WarehouseException("请维护计划件数");
+            }
+            if (StringUtils.isNull(warehousebillsDTO.getfPlangrossweight()) ||
+                    warehousebillsDTO.getfPlangrossweight().compareTo(BigDecimal.ZERO) == 0) {
+                throw new WarehouseException("请维护计划毛重");
+            }
+            if (StringUtils.isNull(warehousebillsDTO.getfPlannetweight()) ||
+                    warehousebillsDTO.getfPlannetweight().compareTo(BigDecimal.ZERO) == 0) {
+                throw new WarehouseException("请维护计划净重");
+            }
+            if (StringUtils.isEmpty(warehousebillsDTO.getfBusinessType())) {
+                throw new WarehouseException("请维护作业类型");
+            }
+        }
+        // 出库校验
+        if (warehousebillsDTO.getfBilltype().equals(WarehouseTypeEnum.SJCK.getType())) {
+            if (StringUtils.isEmpty(warehousebillsDTO.getfMblno())) {
+                throw new WarehouseException("请维护提单号");
+            }
+            if (StringUtils.isEmpty(warehousebillsDTO.getfFeetunit())) {
+                throw new WarehouseException("请维护计费单位");
+            }
+        }
+    }
+
+    /**
+     * 校验明细信息
+     *
+     * @param itemList 明细信息
+     */
+    private void filterItem(List<TWarehousebillsitems> itemList) {
+        int line = 1;
+        for (TWarehousebillsitems li : itemList) {
+            if (StringUtils.isNull(li.getfGoodsid())) {
+                throw new WarehouseException("序号" + line + "明细仓储明细未选择商品");
+            }
+            if (StringUtils.isNull(li.getfWarehouselocid())) {
+                throw new WarehouseException("序号" + line + "明细仓储明细未选择库区");
+            }
+            if (StringUtils.isNull(li.getfBsdate())) {
+                throw new WarehouseException("序号" + line + "明细仓储明细未选择业务日期");
+            }
+            if (StringUtils.isNull(li.getfBusinessType())) {
+                throw new WarehouseException("序号" + line + "明细仓储明细未选择货物属性");
+            }
+            if (StringUtils.isEmpty(li.getfMarks())) {
+                throw new WarehouseException("序号" + line + "明细仓储明细未选择货物详情");
+            }
+            if (StringUtils.isEmpty(li.getfCntrno())) {
+                throw new WarehouseException("序号" + line + "明细仓储明细未选择箱号");
+            }
+            if (StringUtils.isNull(li.getfQty()) || Objects.equals(li.getfQty(), 0L)) {
+                throw new WarehouseException("序号" + line + "明细仓储明细未选填入数量");
+            }
+            line++;
+        }
+    }
+
+}

+ 31 - 0
ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/domain/dto/WarehousebillsDTO.java

@@ -0,0 +1,31 @@
+package com.ruoyi.warehouseBusiness.domain.dto;
+
+import com.ruoyi.warehouseBusiness.domain.TWarehouseBills;
+import com.ruoyi.warehouseBusiness.domain.TWarehousebillsitems;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 仓库主(出入库)对象 t_warehousebills_modify
+ *
+ * @author ruoyi
+ * @date 2021-10-27
+ */
+@Data
+public class WarehousebillsDTO extends TWarehouseBills {
+    private static final long serialVersionUID = 1L;
+
+    // 操作类型(查询客户、仓库、商品)
+    private String type;
+
+    // 查询客户id
+    private Long corpId;
+
+    // 仓储主表id
+    private Long warehouseId;
+
+    // 仓储明细数据
+    List<TWarehousebillsitems> warehousebillsitemsList;
+
+}

+ 17 - 0
ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/domain/enums/WarehouseTypeEnum.java

@@ -49,6 +49,13 @@ public enum WarehouseTypeEnum {
     APPROVE("6", "请核完成"),
 
 
+    // 仓库主表明细状态
+    DETAILED_STATUS_PLAN("1", "计划"),
+    DETAILED_STATUS_WAITING("2", "待xx"),
+    DETAILED_STATUS_PROCESSING("3", "xx中"),
+    DETAILED_STATUS_PROCESSED("4", "已xx"),
+
+
     // 编号生成简写
 
     SJRK_NO("RK", "费用变更"),
@@ -70,6 +77,16 @@ public enum WarehouseTypeEnum {
     // 统一
     FIXED("5", "吨"),
 
+    // 是否计入库存总帐
+    INVENTORY("0", "计入库存总帐"),
+    NOT_INVENTORY("1", "计入库存总帐"),
+
+    // 根据提单号、客户、仓库查询商品信息类型
+    BY_MBLNO("mblno", "根据提单号查询"),
+    BY_CPRP("corp", "根据客户查询"),
+    BY_WAREHOUSE("warehouse", "根据仓库查询"),
+
+
     ;
 
     private final String type;

+ 10 - 7
ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/domain/vo/WarehouseBillsVO.java

@@ -2,30 +2,33 @@ package com.ruoyi.warehouseBusiness.domain.vo;
 
 import com.ruoyi.basicData.domain.TCorps;
 import com.ruoyi.common.core.domain.entity.TWarehouse;
+import com.ruoyi.reportManagement.domain.vo.WhgenlegVO;
 import com.ruoyi.warehouseBusiness.domain.TWarehouseBills;
 import lombok.Data;
 
 import java.util.List;
 
 /**
- *
- *
- * @author  caifc
+ * @author caifc
  * @date 2021-11-10 9:28
-*/
+ */
 @Data
 public class WarehouseBillsVO extends TWarehouseBills {
     private static final long serialVersionUID = 1L;
 
-
     /**
-     *  客户集合
+     * 客户集合
      */
     private List<TCorps> corpsList;
 
     /**
-     *  仓库集合
+     * 仓库集合
      */
     private List<TWarehouse> warehouseList;
 
+    /**
+     * 库存总帐查询
+     */
+    private List<WhgenlegVO> whgenlegVOList;
+
 }

+ 13 - 2
ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/mapper/TWarehouseBillsMapper.java

@@ -11,6 +11,7 @@ import com.ruoyi.shipping.excel.DeriveInventoryExcel;
 import com.ruoyi.shipping.excel.SingleVoyageByShipExcel;
 import com.ruoyi.warehouseBusiness.domain.TWareHouseExcelItems;
 import com.ruoyi.warehouseBusiness.domain.TWarehouseBills;
+import com.ruoyi.warehouseBusiness.domain.dto.WarehousebillsDTO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Date;
@@ -254,9 +255,19 @@ public interface TWarehouseBillsMapper extends BaseMapper<TWarehouseBills> {
     public List<SingleVoyageByShipExcel> singleVoyageByShip(TWarehouseBills tWarehouseBills);
 
     /**
-     *  根据明细集合 查询仓库主表信息
-     * @param itemId   明细id
+     * 根据明细集合 查询仓库主表信息
+     *
+     * @param itemId 明细id
      * @return
      */
     TWarehouseBills selectByItemId(@Param("id") Long itemId);
+
+    /**
+     * 根据提单号与箱型查询是否在业务日期重复录入了
+     *
+     * @param warehousebillsDTO 查询条件
+     * @return
+     */
+    int selectByMblnoOrCntrnoCount(@Param("dto") WarehousebillsDTO warehousebillsDTO);
+
 }

+ 19 - 2
ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/service/ITWarehouseBillsService.java

@@ -10,6 +10,7 @@ import com.ruoyi.warehouseBusiness.domain.StorageChargeInsert;
 import com.ruoyi.warehouseBusiness.domain.TWareHouseExcelItems;
 import com.ruoyi.warehouseBusiness.domain.TWarehouseBills;
 import com.ruoyi.warehouseBusiness.domain.TWarehousebillsitems;
+import com.ruoyi.warehouseBusiness.domain.dto.WarehousebillsDTO;
 import com.ruoyi.warehouseBusiness.excel.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -684,8 +685,24 @@ public interface ITWarehouseBillsService {
     /**
      * 货转根据提单号查询可用客户、仓库信息
      *
-     * @param fMblno 提单号
+     * @param warehousebillsDTO 提单号
      * @return
      */
-    AjaxResult corpOrWarehouseByMblno(String fMblno);
+    AjaxResult corpOrWarehouseByMblno(WarehousebillsDTO warehousebillsDTO);
+
+    /**
+     * 快速出、入库
+     *
+     * @param warehousebillsDTO 出库信息
+     * @param loginUser         登陆人
+     * @return
+     */
+    AjaxResult quickOperation(WarehousebillsDTO warehousebillsDTO, LoginUser loginUser);
+
+    /**
+     *  校验提单号是否在同一天出现第二次
+     * @param warehousebillsDTO 查询条件
+     */
+    void checkMblNoRepeat(WarehousebillsDTO warehousebillsDTO);
+
 }

+ 239 - 42
ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/service/impl/TWarehouseBillsServiceImpl.java

@@ -33,6 +33,7 @@ import com.ruoyi.quotation.domain.TSeaprice;
 import com.ruoyi.quotation.mapper.TSeapriceMapper;
 import com.ruoyi.reportManagement.domain.TWareHouseItemsExcel;
 import com.ruoyi.reportManagement.domain.TWhgenleg;
+import com.ruoyi.reportManagement.domain.vo.WhgenlegVO;
 import com.ruoyi.reportManagement.mapper.TWhgenlegMapper;
 import com.ruoyi.shipping.domain.*;
 import com.ruoyi.shipping.excel.DeriveInventoryExcel;
@@ -41,15 +42,23 @@ import com.ruoyi.shipping.excel.TWarehousebillsCntritemsExcel;
 import com.ruoyi.shipping.mapper.*;
 import com.ruoyi.system.domain.SysCheckCode;
 import com.ruoyi.system.domain.SysConfig;
-import com.ruoyi.system.mapper.*;
+import com.ruoyi.system.mapper.SysConfigMapper;
+import com.ruoyi.system.mapper.SysDeptMapper;
+import com.ruoyi.system.mapper.SysDictDataMapper;
+import com.ruoyi.system.mapper.SysUserMapper;
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.impl.SysConfigServiceImpl;
+import com.ruoyi.warehouseBusiness.component.WarehouseBillsfilterService;
 import com.ruoyi.warehouseBusiness.domain.*;
 import com.ruoyi.warehouseBusiness.domain.dto.CalculateStorageFeesDTO;
+import com.ruoyi.warehouseBusiness.domain.dto.WarehousebillsDTO;
 import com.ruoyi.warehouseBusiness.domain.enums.FeesTypeEnum;
 import com.ruoyi.warehouseBusiness.domain.enums.WarehouseActIdEnum;
 import com.ruoyi.warehouseBusiness.domain.enums.WarehouseTypeEnum;
-import com.ruoyi.warehouseBusiness.domain.vo.*;
+import com.ruoyi.warehouseBusiness.domain.vo.AppWarehouseInfoVO;
+import com.ruoyi.warehouseBusiness.domain.vo.CalculateStorageFeesInfoVO;
+import com.ruoyi.warehouseBusiness.domain.vo.StorageFeeCalculationResultVO;
+import com.ruoyi.warehouseBusiness.domain.vo.WarehouseBillsVO;
 import com.ruoyi.warehouseBusiness.excel.*;
 import com.ruoyi.warehouseBusiness.mapper.*;
 import com.ruoyi.warehouseBusiness.service.ITWarehouseBillsService;
@@ -111,9 +120,6 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
     private SysDeptMapper sysDeptMapper;
 
     @Autowired
-    private SysRoleMapper sysRoleMapper;
-
-    @Autowired
     private BillnoDelMapper billnoDelMapper;
 
     @Autowired
@@ -174,7 +180,7 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
     private TWarehouseAgreementServiceImpl tWarehouseAgreementService;
 
     @Autowired
-    private TWarehouseAgreementitemsMapper tWarehouseAgreementitemsMapper;
+    private WarehouseBillsfilterService warehouseBillsfilterService;
 
     @Autowired
     private TWarehousebillsCntritemsMapper tWarehousebillsCntritemsMapper;
@@ -735,7 +741,7 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
                 wbDr.setfChargedate(warehouseBills.getfChargedate());
                 wbDr.setfBillingDeadline(warehouseBills.getfChargedate());
                 wbDr.setCreateBy(loginUser.getUser().getUserName());
-                if (warehouseBills.getfBsdate() != null && !warehouseBills.getfBsdate().equals("")) {
+                if (warehouseBills.getfBsdate() != null && !"".equals(warehouseBills.getfBsdate())) {
                     wbDr.setfBsdate(warehouseBills.getfBsdate());
                 }
                 tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
@@ -830,7 +836,7 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
                     warehousebillsCntr.setfPid(warehouseBills.getfId());
                     warehousebillsCntr.setCreateTime(DateUtils.getNowDate());
                     warehousebillsCntr.setCreateBy(SecurityUtils.getUsername());
-                    int cntr = tWarehousebillsCntrMapper.insertTWarehousebillsCntr(warehousebillsCntr);
+                    tWarehousebillsCntrMapper.insertTWarehousebillsCntr(warehousebillsCntr);
                 }
             }
         }
@@ -2023,7 +2029,7 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
                             if (tCntrno == null) {
                                 tCnTrNoList.add(cell.getStringCellValue());
                             } else {
-                                if (tCntrno.getfTypeid() != null && tCntrno.getfTypeid() != tWarehousebillsCntr.getfCntrid()) {
+                                if (tCntrno.getfTypeid() != null && !Objects.equals(tCntrno.getfTypeid(), tWarehousebillsCntr.getfCntrid())) {
                                     List.add(cell.getStringCellValue());
                                 }
                             }
@@ -3290,12 +3296,9 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
             }
             if (!businessStatus) {
                 // 查询库容量  是否可入库
-                int m = calculation(tWarehouseBills.getfWarehouseid(), item.getfGrossweight());
-                if (m == 0) {
-                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-                    return AjaxResult.error("更新库存总账失败-->入库毛重大于库容");
+                if (calculation(tWarehouseBills.getfWarehouseid(), item.getfGrossweight()) <= 0) {
+                    throw new WarehouseException("更新库存总账失败-->入库毛重大于库容");
                 }
-
                 item.setfOriginalbilldate(item.getfBsdate());
                 item.setfBillingway(tWarehouseBills.getfBillingway());
                 if ("1".equals(tWarehouseBills.getfChargetype())) {
@@ -4869,10 +4872,11 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
     }
 
     /**
-     *  计算仓储费审核通过
-     * @param warehouseId   主表id
-     * @param fettle   状态
-     * @param date   审核时间
+     * 计算仓储费审核通过
+     *
+     * @param warehouseId 主表id
+     * @param fettle      状态
+     * @param date        审核时间
      */
     public void approvedStorageFee(Long warehouseId, Long fettle, Date date) {
         // 查出主表数据
@@ -6572,12 +6576,12 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
         //TCntr tCntr = tCntrMapper.selectTCntrById(fId);//查询货物信息对应的箱类型
         TCntrno cnTrNo = tCntrnoMapper.selectTCnTrNoByfNo(tWarehousebillsCntritems.getfCntrno());//查询箱号对应的箱信息
         TCntr tCntr = tCntrMapper.selectTCntrById(cnTrNo.getfTypeid());//查询箱类型
-        if (cnTrNo != null && cnTrNo.getfTypeid() == tWarehousebillsCntritems.getfCntrid()) {
-            if (tWarehousebillsCntritems.getfCntrid() != fId) {
+        if (cnTrNo != null && Objects.equals(cnTrNo.getfTypeid(), tWarehousebillsCntritems.getfCntrid())) {
+            if (!Objects.equals(tWarehousebillsCntritems.getfCntrid(), fId)) {
                 TCntr cntr = tCntrMapper.selectTCntrById(fId);
                 return AjaxResult.error("箱号" + tWarehousebillsCntritems.getfCntrno() + "跟货物信息中箱类型不一致,箱类型应为:" + cntr.getfNo());
             }
-        } else if (cnTrNo != null && cnTrNo.getfTypeid() != tWarehousebillsCntritems.getfCntrid()) {
+        } else if (cnTrNo != null && !Objects.equals(cnTrNo.getfTypeid(), tWarehousebillsCntritems.getfCntrid())) {
             return AjaxResult.error("箱号" + tWarehousebillsCntritems.getfCntrno() + "跟基础信息中箱类型不一致,箱类型应为:" + tCntr.getfNo());
         }
         return AjaxResult.success();
@@ -7126,36 +7130,229 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
     /**
      * 货转根据提单号查询可用客户、仓库信息
      *
-     * @param fMblno 提单号
+     * @param warehousebillsDTO 查询条件
      * @return
      */
     @Override
-    public AjaxResult corpOrWarehouseByMblno(String fMblno) {
+    public AjaxResult corpOrWarehouseByMblno(WarehousebillsDTO warehousebillsDTO) {
+        String fMblno = warehousebillsDTO.getfMblno();
         WarehouseBillsVO billsVO = new WarehouseBillsVO();
-        // 查询符合条件的库存总帐
-        TWhgenleg tWhgenleg = new TWhgenleg();
-        tWhgenleg.setfMblno(fMblno);
-        List<TWhgenleg> tWhgenlegs = tWhgenlegMapper.selectTWhgenlegList(tWhgenleg);
-        if (CollectionUtils.isNotEmpty(tWhgenlegs)) {
-            // 查询仓库信息
-            List<Long> warehouseIds = tWhgenlegs.stream().filter(leg -> Objects.nonNull(leg.getfWarehouseid())).map(TWhgenleg::getfWarehouseid)
-                    .distinct().collect(toList());
-            if (CollectionUtils.isNotEmpty(warehouseIds)) {
-                List<TWarehouse> warehouseList = tWarehouseMapper.selectByIds(warehouseIds);
-                billsVO.setWarehouseList(warehouseList);
-            }
-            // 查询客户
-            List<Long> corpIds = tWhgenlegs.stream().filter(leg -> Objects.nonNull(leg.getfCorpid())).map(TWhgenleg::getfCorpid)
-                    .distinct().collect(toList());
-            if (CollectionUtils.isNotEmpty(corpIds)) {
-                List<TCorps> corpsList = tCorpsMapper.selectByIds(corpIds);
-                billsVO.setCorpsList(corpsList);
+        // 查询客户
+        if (WarehouseTypeEnum.BY_MBLNO.getType().equals(warehousebillsDTO.getType())) {
+            // 查询符合条件的库存总帐
+            TWhgenleg tWhgenleg = new TWhgenleg();
+            tWhgenleg.setfMblno(fMblno);
+            List<TWhgenleg> tWhgenlegs = tWhgenlegMapper.selectTWhgenlegList(tWhgenleg);
+            if (CollectionUtils.isNotEmpty(tWhgenlegs)) {
+                // 查询客户
+                List<Long> corpIds = tWhgenlegs.stream().filter(leg -> Objects.nonNull(leg.getfCorpid())).map(TWhgenleg::getfCorpid)
+                        .distinct().collect(toList());
+                if (CollectionUtils.isNotEmpty(corpIds)) {
+                    List<TCorps> corpsList = tCorpsMapper.selectByIds(corpIds);
+                    billsVO.setCorpsList(corpsList);
+                }
+            }
+            return AjaxResult.success(billsVO);
+        } else if (WarehouseTypeEnum.BY_CPRP.getType().equals(warehousebillsDTO.getType())) {
+            if (StringUtils.isNull(warehousebillsDTO.getCorpId())) {
+                throw new WarehouseException("未找到客户查询条件");
+            }
+            // 查询符合条件的库存总帐
+            TWhgenleg tWhgenleg = new TWhgenleg();
+            tWhgenleg.setfMblno(fMblno);
+            tWhgenleg.setfCorpid(warehousebillsDTO.getCorpId());
+            List<TWhgenleg> tWhgenlegs = tWhgenlegMapper.selectTWhgenlegList(tWhgenleg);
+            if (CollectionUtils.isNotEmpty(tWhgenlegs)) {
+                // 查询仓库信息
+                List<Long> warehouseIds = tWhgenlegs.stream().filter(leg -> Objects.nonNull(leg.getfWarehouseid()))
+                        .map(TWhgenleg::getfWarehouseid).distinct().collect(toList());
+                if (CollectionUtils.isNotEmpty(warehouseIds)) {
+                    List<TWarehouse> warehouseList = tWarehouseMapper.selectByIds(warehouseIds);
+                    billsVO.setWarehouseList(warehouseList);
+                }
+            }
+            return AjaxResult.success(billsVO);
+        } else if (WarehouseTypeEnum.BY_WAREHOUSE.getType().equals(warehousebillsDTO.getType())) {
+            if (StringUtils.isNull(warehousebillsDTO.getCorpId()) ||
+                    StringUtils.isNull(warehousebillsDTO.getWarehouseId())) {
+                throw new WarehouseException("未找到客户、仓库查询条件");
+            }
+            // 查询符合条件的库存总帐
+            TWhgenleg tWhgenleg = new TWhgenleg();
+            tWhgenleg.setfMblno(fMblno);
+            tWhgenleg.setfCorpid(warehousebillsDTO.getCorpId());
+            tWhgenleg.setfWarehouseid(warehousebillsDTO.getWarehouseId());
+            List<TWhgenleg> tWhgenlegs = tWhgenlegMapper.selectTWhgenlegList(tWhgenleg);
+            if (CollectionUtils.isNotEmpty(tWhgenlegs)) {
+                List<WhgenlegVO> voList = new ArrayList<>();
+                tWhgenlegs.forEach(vo -> {
+                    WhgenlegVO whgenlegVO = new WhgenlegVO();
+                    whgenlegVO.setfMarks(vo.getfMarks());
+                    whgenlegVO.setfGoodsid(vo.getfGoodsid());
+                    whgenlegVO.setfBusinessType(vo.getfBusinessType());
+                    voList.add(whgenlegVO);
+                });
+                billsVO.setWhgenlegVOList(voList);
+                return AjaxResult.success(billsVO);
             }
         }
         return AjaxResult.success(billsVO);
     }
 
     /**
+     * 快速出库
+     *
+     * @param warehousebillsDTO 出库信息
+     * @param loginUser         登陆人
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult quickOperation(WarehousebillsDTO warehousebillsDTO, LoginUser loginUser) {
+        if (CollectionUtils.isEmpty(warehousebillsDTO.getWarehousebillsitemsList())) {
+            throw new WarehouseException("未找到仓储的明细数据");
+        }
+        // 校验必填项
+        warehouseBillsfilterService.filter(warehousebillsDTO);
+        // 生成编号
+        String billNo = billnoSerialServiceImpl.getBillNo(warehousebillsDTO.getfBilltype(), warehousebillsDTO.getfBsdate());
+        warehousebillsDTO.setfBillno(billNo);
+        warehousebillsDTO.setCreateTime(new Date());
+        warehousebillsDTO.setCreateBy(loginUser.getUsername());
+        warehousebillsDTO.setfBsdeptid(loginUser.getUser().getDeptId());
+        warehousebillsDTO.setfBillstatus(Long.parseLong(WarehouseTypeEnum.SAVE.getType()));
+        warehousebillsDTO.setfItemstatus(Long.parseLong(WarehouseTypeEnum.DETAILED_STATUS_PROCESSED.getType()));
+        tWarehouseBillsMapper.insertTWarehousebills(warehousebillsDTO);
+        // 遍历进行入库、出库确认
+        List<TWarehousebillsitems> itemList = warehousebillsDTO.getWarehousebillsitemsList();
+        int line = 1;
+        for (TWarehousebillsitems li : itemList) {
+            // 如果业务时间超出当前时间则不允许
+            if (li.getfBsdate().after(new Date())) {
+                throw new WarehouseException("业务日期不得超出当前日期");
+            }
+            li.setfPid(warehousebillsDTO.getfId());
+            li.setfBillstatus(40L);
+            li.setfBillno(warehousebillsDTO.getfBillno());
+            li.setfBilltype(warehousebillsDTO.getfBilltype());
+            if (warehousebillsDTO.getfBilltype().equals(WarehouseTypeEnum.SJRK.getType())) {
+                quickStorage(warehousebillsDTO, li, loginUser, line);
+            } else if (warehousebillsDTO.getfBilltype().equals(WarehouseTypeEnum.SJCK.getType())) {
+                quickDelivery(warehousebillsDTO, li, loginUser, line);
+                line++;
+            }
+        }
+        return AjaxResult.success();
+    }
+
+    /**
+     * 快速入库
+     *
+     * @param warehousebillsDTO 主表信息
+     * @param item              明细信息
+     * @param loginUser         用户信息
+     * @param line              序号
+     */
+    private void quickStorage(WarehousebillsDTO warehousebillsDTO, TWarehousebillsitems item, LoginUser loginUser, int line) {
+        // 查询库容量  是否可入库
+        if (calculation(warehousebillsDTO.getfWarehouseid(), item.getfGrossweight()) <= 0) {
+            throw new WarehouseException("仓储明细第" + line + "行入库毛重大于库容");
+        }
+        if (StringUtils.isNotEmpty(warehousebillsDTO.getfCustomno())) {
+            item.setfCustomno(warehousebillsDTO.getfCustomno());
+        }
+        if (StringUtils.isNotEmpty(warehousebillsDTO.getRemark())) {
+            item.setRemark(warehousebillsDTO.getRemark());
+        }
+        item.setfOriginalbilldate(item.getfBsdate());
+        item.setfBillingway(warehousebillsDTO.getfBillingway());
+        if ("1".equals(warehousebillsDTO.getfChargetype())) {
+            item.setfChargedate(item.getfBsdate());
+        } else {
+            item.setfChargedate(new Date());
+        }
+        // 校验商品是否区分箱号
+        TGoods goods = tGoodsMapper.selectTGoodsById(item.getfGoodsid());
+        if ("1".equals(goods.getIfCntrno()) && StringUtils.isNull(item.getfCntrno())) {
+            throw new WarehouseException("仓库明细第" + line + "行未找到箱号");
+        }
+        TWhgenleg tWhgenle = queryTWhgenleg(warehousebillsDTO, item, goods.getIfCntrno());
+        if (Objects.nonNull(tWhgenle)) {
+            updateTWhgenlegData(item, tWhgenle.getfId(), warehousebillsDTO.getfBilltype());
+        } else {
+            instalTWhgenleg(warehousebillsDTO, item, loginUser.getUser());
+        }
+        item.setfIsInventory(Long.parseLong(WarehouseTypeEnum.INVENTORY.getType()));
+        tWarehousebillsitemsMapper.insertTWarehousebillsitems(item);
+        // 添加状态log
+        insertTWarehousebillsLog(item, 40L, loginUser);
+    }
+
+    /**
+     * 快速出库
+     *
+     * @param warehousebillsDTO 主表信息
+     * @param item              明细信息
+     * @param loginUser         用户信息
+     * @param line              序号
+     */
+    private void quickDelivery(WarehousebillsDTO warehousebillsDTO, TWarehousebillsitems item, LoginUser loginUser, int line) {
+        // 校验商品是否区分箱号
+        TGoods goods = tGoodsMapper.selectTGoodsById(item.getfGoodsid());
+        if ("1".equals(goods.getIfCntrno()) && StringUtils.isNull(item.getfCntrno())) {
+            throw new WarehouseException("仓库明细未找到箱号");
+        }
+        // 查询总账是否存在
+        TWhgenleg tWhgenle = queryTWhgenleg(warehousebillsDTO, item, goods.getIfCntrno());
+        if (Objects.nonNull(tWhgenle) && item.getfBsdate().before(warehousebillsDTO.getfChargedate())) {
+            throw new WarehouseException("出库明细第" + line + "行业务日期不得超出库存总帐日期");
+        }
+        if (Objects.isNull(tWhgenle)) {
+            throw new WarehouseException("出库库存总帐第" + line + "行不存在");
+        }
+        //校验计费日期是等于库存总帐计费日,如果不相等则报错
+        checkWhgenleg(item, tWhgenle);
+        //  库存 <  出库件数
+        if (tWhgenle.getfQtyblc() < item.getfQty()) {
+            throw new WarehouseException("库存明细第" + line + "行库存不足");
+        }
+        // 更新库存总账
+        updateTWhgenlegData(item, tWhgenle.getfId(), warehousebillsDTO.getfBilltype());
+        DateUtils.getDateDay(warehousebillsDTO.getfBsdate(), item.getfChargedate());
+        item.setCreateTime(new Date());
+        item.setCreateBy(loginUser.getUsername());
+        tWarehousebillsitemsMapper.insertTWarehousebillsitems(item);
+        // 添加状态log
+        insertTWarehousebillsLog(item, 40L, loginUser);
+    }
+
+    /**
+     * 校验提单号是否在同一天出现第二次
+     *
+     * @param warehousebillsDTO 查询条件
+     */
+    @Override
+    public void checkMblNoRepeat(WarehousebillsDTO warehousebillsDTO) {
+        if (CollectionUtils.isNotEmpty(warehousebillsDTO.getWarehousebillsitemsList())) {
+            List<TWarehousebillsitems> items = warehousebillsDTO.getWarehousebillsitemsList();
+            int line = 1;
+            for (TWarehousebillsitems li : items) {
+                if (StringUtils.isNotEmpty(li.getfCntrno())) {
+                    warehousebillsDTO.setfCntrno(li.getfCntrno());
+                }
+                int num = tWarehouseBillsMapper.selectByMblnoOrCntrnoCount(warehousebillsDTO);
+                if (num > 0 && StringUtils.isNotEmpty(li.getfCntrno())) {
+                    throw new WarehouseException("该提单号与第" + line + "行明细箱号存在重复录入");
+                }
+                if (num > 0 && StringUtils.isEmpty(li.getfCntrno())) {
+                    throw new WarehouseException("该提单号存在重复录入");
+                }
+                line++;
+            }
+        }
+    }
+
+    /**
      * 如果是入库
      *
      * @param infoVO
@@ -7170,7 +7367,7 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
         // 计费单位
         if (StringUtils.isNotNull(infoVO.getfFeetunit())) {
             String type = "data_unitfees";
-            String dictLabel = DictUtils.getDictLabel(type, infoVO.getfFeetunit().toString());
+            String dictLabel = DictUtils.getDictLabel(type, infoVO.getfFeetunit());
             if (StringUtils.isNotEmpty(dictLabel)) {
                 infoVO.setFeetunitName(dictLabel);
             }

+ 1 - 0
ruoyi-warehouse/src/main/resources/mapper/reportManagement/TWhgenlegMapper.xml

@@ -97,6 +97,7 @@
             <if test="fGrossweightd != null ">and f_grossweightD = #{fGrossweightd}</if>
             <if test="fNetweightd != null ">and f_netweightD = #{fNetweightd}</if>
             <if test="fVolumnc != null ">and f_volumnC = #{fVolumnc}</if>
+            <if test="fCorpid != null ">and f_corpid = #{fCorpid}</if>
             <if test="fBusinessType != null "> and f_business_type = #{fBusinessType}</if>
             <if test="fQtyc != null ">and f_qtyC = #{fQtyc}</if>
             <if test="fGrossweightc != null ">and f_grossweightC = #{fGrossweightc}</if>

+ 11 - 0
ruoyi-warehouse/src/main/resources/mapper/warehouseBusiness/TWarehousebillsMapper.xml

@@ -2685,4 +2685,15 @@
         where i.f_id = #{id}
     </select>
 
+    <select id="selectByMblnoOrCntrnoCount" resultType="int">
+        SELECT COUNT(DISTINCT w.f_id) FROM
+            t_warehousebills w
+            LEFT JOIN t_warehousebillsitems item ON item.f_pid = w.f_id
+        <where>
+            w.f_mblno = #{dto.fMblno}
+            and w.f_bsdate = #{dto.fBsdate}
+            <if test="dto.fCntrno != null ">and item.f_cntrno = #{dto.fCntrno}</if>
+        </where>
+    </select>
+
 </mapper>