Browse Source

盘点模块及pda接口调整

huang 3 weeks ago
parent
commit
7ec2459a33
21 changed files with 231 additions and 80 deletions
  1. 6 1
      src/main/java/com/jsh/erp/constants/ExceptionConstants.java
  2. 17 0
      src/main/java/com/jsh/erp/controller/materialBatch/MaterialBatchController.java
  3. 14 8
      src/main/java/com/jsh/erp/controller/pda/PdaController.java
  4. 8 0
      src/main/java/com/jsh/erp/datasource/mappers/DepotItemMapper.java
  5. 0 2
      src/main/java/com/jsh/erp/datasource/mappers/MaterialExtendMapper.java
  6. 10 0
      src/main/java/com/jsh/erp/datasource/mappers/MaterialInitialStockMapper.java
  7. 4 1
      src/main/java/com/jsh/erp/datasource/pda/dto/PDAInventoryDTO.java
  8. 6 0
      src/main/java/com/jsh/erp/datasource/pda/vo/PDADepotItemVO.java
  9. 21 0
      src/main/java/com/jsh/erp/datasource/pda/vo/PDAPrintVo.java
  10. 9 1
      src/main/java/com/jsh/erp/service/DepotItemService.java
  11. 6 0
      src/main/java/com/jsh/erp/service/MaterialBatchService.java
  12. 1 2
      src/main/java/com/jsh/erp/service/impl/DepotHeadServiceImpl.java
  13. 17 1
      src/main/java/com/jsh/erp/service/impl/DepotItemServiceImpl.java
  14. 19 0
      src/main/java/com/jsh/erp/service/impl/MaterialBatchServiceImpl.java
  15. 25 28
      src/main/java/com/jsh/erp/service/impl/MaterialServiceImpl.java
  16. 17 19
      src/main/java/com/jsh/erp/service/impl/TaskStocktakingServiceImpl.java
  17. 28 2
      src/main/resources/mapper_xml/DepotItemMapper.xml
  18. 0 4
      src/main/resources/mapper_xml/MaterialExtendMapper.xml
  19. 9 0
      src/main/resources/mapper_xml/MaterialInitialStockMapper.xml
  20. 12 9
      src/main/resources/mapper_xml/MaterialMapperEx.xml
  21. 2 2
      src/main/resources/mapper_xml/TaskStocktakingItemMapper.xml

+ 6 - 1
src/main/java/com/jsh/erp/constants/ExceptionConstants.java

@@ -349,7 +349,7 @@ public class ExceptionConstants {
     public static final String MATERIAL_BARCODE_IS_NOT_EXIST_MSG = "商品条码%s不存在,请重新选择";
     public static final String MATERIAL_BARCODE_IS_NOT_EXIST_MSG = "商品条码%s不存在,请重新选择";
     //基本条码为空
     //基本条码为空
     public static final int MATERIAL_BARCODE_EMPTY_CODE = 8000027;
     public static final int MATERIAL_BARCODE_EMPTY_CODE = 8000027;
-    public static final String MATERIAL_BARCODE_EMPTY_MSG = "第%s行基本条码为空";
+    public static final String MATERIAL_BARCODE_EMPTY_MSG = "第%s行商品条码为空";
     //EXCEL中有副条码在系统中已存在(除自身商品之外)
     //EXCEL中有副条码在系统中已存在(除自身商品之外)
     public static final int MATERIAL_EXCEL_IMPORT_MANY_BARCODE_EXIST_CODE = 80000028;
     public static final int MATERIAL_EXCEL_IMPORT_MANY_BARCODE_EXIST_CODE = 80000028;
     public static final String MATERIAL_EXCEL_IMPORT_MANY_BARCODE_EXIST_MSG = "抱歉,EXCEL中有副条码在系统中已存在,具体副条码为:%s";
     public static final String MATERIAL_EXCEL_IMPORT_MANY_BARCODE_EXIST_MSG = "抱歉,EXCEL中有副条码在系统中已存在,具体副条码为:%s";
@@ -373,6 +373,11 @@ public class ExceptionConstants {
     public static final int MATERIAL_ERP_SKU_NOT_DECIMAL_CODE = 8000032;
     public static final int MATERIAL_ERP_SKU_NOT_DECIMAL_CODE = 8000032;
     public static final String MATERIAL_ERP_SKU_NOT_DECIMAL_MSG = "商品erp_sku[%s]不存在";
     public static final String MATERIAL_ERP_SKU_NOT_DECIMAL_MSG = "商品erp_sku[%s]不存在";
 
 
+    //EXCEL中有条码在系统中已存在(除自身商品之外)
+    public static final int MATERIAL_EXCEL_IMPORT_BARCODE_SYSTEM_EXIST_CODE = 80000033;
+    public static final String MATERIAL_EXCEL_IMPORT_BARCODE_SYSTEM_EXIST_MSG = "抱歉,EXCEL中有条码在系统中已存在,具体条码为:%s";
+    //基本单位为空
+
     /**
     /**
      *  单据信息
      *  单据信息
      * type = 85
      * type = 85

+ 17 - 0
src/main/java/com/jsh/erp/controller/materialBatch/MaterialBatchController.java

@@ -3,9 +3,11 @@ package com.jsh.erp.controller.materialBatch;
 
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import com.jsh.erp.base.AjaxResult;
 import com.jsh.erp.base.BaseController;
 import com.jsh.erp.base.BaseController;
 import com.jsh.erp.base.TableDataInfo;
 import com.jsh.erp.base.TableDataInfo;
 import com.jsh.erp.datasource.entities.MaterialBatch;
 import com.jsh.erp.datasource.entities.MaterialBatch;
+import com.jsh.erp.datasource.entities.MaterialVo4Unit;
 import com.jsh.erp.datasource.vo.MaterialExtendVo4List;
 import com.jsh.erp.datasource.vo.MaterialExtendVo4List;
 import com.jsh.erp.query.LambdaQueryWrapperX;
 import com.jsh.erp.query.LambdaQueryWrapperX;
 import com.jsh.erp.query.QueryWrapperX;
 import com.jsh.erp.query.QueryWrapperX;
@@ -42,4 +44,19 @@ public class MaterialBatchController extends BaseController {
         return getDataTable(list);
         return getDataTable(list);
     }
     }
 
 
+
+    @GetMapping(value = "/findBatchNumbersByBarCode")
+    @ApiOperation(value = "根据条码查询批次号")
+    public AjaxResult findBatchNumbersByBarCode(@RequestParam(value = "barCodes",required = false) String barCodes){
+        List<MaterialBatch> dataList = materialBatchService.findBySelectWithBarCode(barCodes);
+        StringBuffer str = new StringBuffer();
+        //存放数据json数组
+        if (null != dataList) {
+            for (MaterialBatch material : dataList) {
+                str.append("," + material.getBatchNumber());
+            }
+        }
+        return AjaxResult.success(str.deleteCharAt(0));
+    }
+
 }
 }

+ 14 - 8
src/main/java/com/jsh/erp/controller/pda/PdaController.java

@@ -15,10 +15,7 @@ import com.jsh.erp.datasource.pda.dto.PDADepotHeadDTO;
 import com.jsh.erp.datasource.pda.dto.PDAInventoryDTO;
 import com.jsh.erp.datasource.pda.dto.PDAInventoryDTO;
 import com.jsh.erp.datasource.pda.dto.PDATaskStocktakingDTO;
 import com.jsh.erp.datasource.pda.dto.PDATaskStocktakingDTO;
 import com.jsh.erp.datasource.pda.dto.PDATaskStocktakingItemDTO;
 import com.jsh.erp.datasource.pda.dto.PDATaskStocktakingItemDTO;
-import com.jsh.erp.datasource.pda.vo.PDADepotHeadVO;
-import com.jsh.erp.datasource.pda.vo.PDADepotItemVO;
-import com.jsh.erp.datasource.pda.vo.PDATaskStocktakingItemVO;
-import com.jsh.erp.datasource.pda.vo.PDATaskStocktakingVO;
+import com.jsh.erp.datasource.pda.vo.*;
 import com.jsh.erp.datasource.vo.SpinnerVO;
 import com.jsh.erp.datasource.vo.SpinnerVO;
 import com.jsh.erp.datasource.vo.TaskStocktakingVO;
 import com.jsh.erp.datasource.vo.TaskStocktakingVO;
 import com.jsh.erp.datasource.vo.TreeNode;
 import com.jsh.erp.datasource.vo.TreeNode;
@@ -81,6 +78,9 @@ public class PdaController extends BaseController {
     @Resource
     @Resource
     private DepotService depotService;
     private DepotService depotService;
 
 
+    @Resource
+    private MaterialBatchService materialBatchService;
+
     /**
     /**
      * 采购入库
      * 采购入库
      * @return
      * @return
@@ -121,7 +121,7 @@ public class PdaController extends BaseController {
 
 
     @GetMapping("/orderDetail/{id}")
     @GetMapping("/orderDetail/{id}")
     @ApiOperation("订单明细")
     @ApiOperation("订单明细")
-    public TableDataInfo orderDetail(@PathVariable("id") Long id) {
+    public TableDataInfo orderDetail(@PathVariable("id") Long id) throws Exception {
         startPage();
         startPage();
         List<PDADepotItemVO> list = depotItemService.pdaList(id);
         List<PDADepotItemVO> list = depotItemService.pdaList(id);
         return getDataTable(list);
         return getDataTable(list);
@@ -220,8 +220,8 @@ public class PdaController extends BaseController {
     @PostMapping("/stocktaking")
     @PostMapping("/stocktaking")
     public AjaxResult stocktaking(@RequestBody TaskStocktakingItem taskStocktakingItem) throws Exception{
     public AjaxResult stocktaking(@RequestBody TaskStocktakingItem taskStocktakingItem) throws Exception{
         User currentUser = userService.getCurrentUser();
         User currentUser = userService.getCurrentUser();
-        MaterialExtend materialExtend = materialExtendService.getMaterialExtend(taskStocktakingItem.getMaterialItemId());
-        if (materialExtend == null) {
+        MaterialBatch materialBatch = materialBatchService.getById(taskStocktakingItem.getMaterialItemId());
+        if (materialBatch == null) {
             return AjaxResult.error("商品信息不存在");
             return AjaxResult.error("商品信息不存在");
         }
         }
         UpdateWrapper<TaskStocktakingItem> updateWrapper = new UpdateWrapper<>();
         UpdateWrapper<TaskStocktakingItem> updateWrapper = new UpdateWrapper<>();
@@ -230,7 +230,7 @@ public class PdaController extends BaseController {
                 .set("oper_time", new Date());
                 .set("oper_time", new Date());
         if (ObjectUtil.isNotEmpty(taskStocktakingItem.getNewInventory())) {
         if (ObjectUtil.isNotEmpty(taskStocktakingItem.getNewInventory())) {
             updateWrapper.set("new_inventory", taskStocktakingItem.getNewInventory());
             updateWrapper.set("new_inventory", taskStocktakingItem.getNewInventory());
-            BigDecimal subtract = taskStocktakingItem.getNewInventory().subtract(materialExtend.getInventory());
+            BigDecimal subtract = taskStocktakingItem.getNewInventory().subtract(materialBatch.getInventory());
             updateWrapper.set("difference_count", subtract);
             updateWrapper.set("difference_count", subtract);
             //差异数量,设置盘点状态为1.未盘,2.盘盈,3.盘亏 4.无差异
             //差异数量,设置盘点状态为1.未盘,2.盘盈,3.盘亏 4.无差异
             if (subtract.compareTo(BigDecimal.ZERO) > 0) {
             if (subtract.compareTo(BigDecimal.ZERO) > 0) {
@@ -352,5 +352,11 @@ public class PdaController extends BaseController {
     }
     }
 
 
 
 
+    @ApiOperation("查询商品打印信息")
+    @GetMapping("/printMaterial/{id}")
+    public AjaxResult printMaterial(@PathVariable("id")Long id) {
+        PDAPrintVo pdaPrintVo = depotItemService.pdaPrintMaterial(id);
+        return AjaxResult.success(pdaPrintVo);
+    }
 
 
 }
 }

+ 8 - 0
src/main/java/com/jsh/erp/datasource/mappers/DepotItemMapper.java

@@ -6,6 +6,7 @@ import com.jsh.erp.datasource.entities.DepotItemExample;
 import java.util.List;
 import java.util.List;
 
 
 import com.jsh.erp.datasource.pda.vo.PDADepotItemVO;
 import com.jsh.erp.datasource.pda.vo.PDADepotItemVO;
+import com.jsh.erp.datasource.pda.vo.PDAPrintVo;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
 public interface DepotItemMapper  extends BaseMapperX<DepotItem>{
 public interface DepotItemMapper  extends BaseMapperX<DepotItem>{
@@ -31,6 +32,13 @@ public interface DepotItemMapper  extends BaseMapperX<DepotItem>{
      */
      */
     List<PDADepotItemVO> materialDepotDetail(@Param("type")String type, @Param("materialId") Long materialId);
     List<PDADepotItemVO> materialDepotDetail(@Param("type")String type, @Param("materialId") Long materialId);
 
 
+    /**
+     * 根据单据子表id查询商品打印信息
+     * @param id
+     * @return
+     */
+    PDAPrintVo pdaPrintMaterial(@Param("id")Long id) ;
+
     long countByExample(DepotItemExample example);
     long countByExample(DepotItemExample example);
 
 
     int deleteByExample(DepotItemExample example);
     int deleteByExample(DepotItemExample example);

+ 0 - 2
src/main/java/com/jsh/erp/datasource/mappers/MaterialExtendMapper.java

@@ -52,6 +52,4 @@ public interface MaterialExtendMapper extends BaseMapperX<MaterialExtend>{
     BigDecimal getInventorySumByDepotAndMid(@Param("depotList") List<Long> depotList,
     BigDecimal getInventorySumByDepotAndMid(@Param("depotList") List<Long> depotList,
                                             @Param("mid") long mid);
                                             @Param("mid") long mid);
 
 
-    List<String> selectPosition();
-
 }
 }

+ 10 - 0
src/main/java/com/jsh/erp/datasource/mappers/MaterialInitialStockMapper.java

@@ -28,4 +28,14 @@ public interface MaterialInitialStockMapper extends BaseMapperX<MaterialInitialS
     int updateByPrimaryKeySelective(MaterialInitialStock record);
     int updateByPrimaryKeySelective(MaterialInitialStock record);
 
 
     int updateByPrimaryKey(MaterialInitialStock record);
     int updateByPrimaryKey(MaterialInitialStock record);
+
+    /**
+     * 查询库位信息
+     */
+    List<String> selectPosition();
+
+    /**
+     * 根据库位获取商品id
+     */
+    List<Long> selectMaterialIdByPosition(@Param("position") String position);
 }
 }

+ 4 - 1
src/main/java/com/jsh/erp/datasource/pda/dto/PDAInventoryDTO.java

@@ -24,7 +24,10 @@ public class PDAInventoryDTO {
     @ApiModelProperty("关键字")
     @ApiModelProperty("关键字")
     private String keyword;
     private String keyword;
 
 
-    @ApiModelProperty("商品种类ID数组")
+    @ApiModelProperty("商品种类ID集合")
     private List<Long> categoryIds;
     private List<Long> categoryIds;
 
 
+    @ApiModelProperty("商品ID集合")
+    private List<Long> materialIds;
+
 }
 }

+ 6 - 0
src/main/java/com/jsh/erp/datasource/pda/vo/PDADepotItemVO.java

@@ -15,9 +15,15 @@ public class PDADepotItemVO{
     @ApiModelProperty("商品订单ID")
     @ApiModelProperty("商品订单ID")
     private Long id;
     private Long id;
 
 
+    @ApiModelProperty("订单主表ID")
+    private Long headerId;
+
     @ApiModelProperty("商品ID")
     @ApiModelProperty("商品ID")
     private Long materialId;
     private Long materialId;
 
 
+    @ApiModelProperty("商品条码ID")
+    private Long materialExtendId;
+
     @ApiModelProperty("商品名称")
     @ApiModelProperty("商品名称")
     private String materialName;
     private String materialName;
 
 

+ 21 - 0
src/main/java/com/jsh/erp/datasource/pda/vo/PDAPrintVo.java

@@ -0,0 +1,21 @@
+package com.jsh.erp.datasource.pda.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class PDAPrintVo {
+
+    @ApiModelProperty("客户名")
+    private String customerName;
+
+    @ApiModelProperty("单据编号")
+    private String number;
+
+    @ApiModelProperty("商品条码")
+    private String barCode;
+
+    @ApiModelProperty("批次号")
+    private String batchNumber;
+
+}

+ 9 - 1
src/main/java/com/jsh/erp/service/DepotItemService.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.jsh.erp.datasource.entities.*;
 import com.jsh.erp.datasource.entities.*;
 import com.jsh.erp.datasource.pda.vo.PDADepotItemVO;
 import com.jsh.erp.datasource.pda.vo.PDADepotItemVO;
+import com.jsh.erp.datasource.pda.vo.PDAPrintVo;
 import com.jsh.erp.datasource.vo.DepotHeadXsddRequestVO;
 import com.jsh.erp.datasource.vo.DepotHeadXsddRequestVO;
 import com.jsh.erp.datasource.vo.DepotItemStockWarningCount;
 import com.jsh.erp.datasource.vo.DepotItemStockWarningCount;
 import com.jsh.erp.datasource.vo.DepotItemVoBatchNumberList;
 import com.jsh.erp.datasource.vo.DepotItemVoBatchNumberList;
@@ -23,7 +24,7 @@ public interface DepotItemService extends IService<DepotItem> {
      * pda根据订单信息查询商品列表
      * pda根据订单信息查询商品列表
      * @return
      * @return
      */
      */
-    List<PDADepotItemVO> pdaList(Long id);
+    List<PDADepotItemVO> pdaList(Long id) throws Exception;
 
 
     /**
     /**
      * pda根据商品订单ID查询商品详情
      * pda根据商品订单ID查询商品详情
@@ -39,6 +40,13 @@ public interface DepotItemService extends IService<DepotItem> {
      */
      */
     List<PDADepotItemVO> materialDepotDetail(String type, Long materialId);
     List<PDADepotItemVO> materialDepotDetail(String type, Long materialId);
 
 
+    /**
+     * pda 获取商品打印条码信息
+     * @param depotItemId 单据子表id
+     * @return
+     */
+    PDAPrintVo pdaPrintMaterial(Long depotItemId);
+
     DepotItem getDepotItem(long id)throws Exception;
     DepotItem getDepotItem(long id)throws Exception;
 
 
     List<DepotItem> getDepotItem()throws Exception;
     List<DepotItem> getDepotItem()throws Exception;

+ 6 - 0
src/main/java/com/jsh/erp/service/MaterialBatchService.java

@@ -50,4 +50,10 @@ public interface MaterialBatchService extends IService<MaterialBatch> {
     List<MaterialVo4Unit> findBySelectWithBarCode(Long categoryId, String q, String standardOrModel, String color,
     List<MaterialVo4Unit> findBySelectWithBarCode(Long categoryId, String q, String standardOrModel, String color,
                                                   String brand, String mfrs, String enableSerialNumber, String enableBatchNumber,
                                                   String brand, String mfrs, String enableSerialNumber, String enableBatchNumber,
                                                   Integer offset, Integer rows, Long depotId) throws Exception;
                                                   Integer offset, Integer rows, Long depotId) throws Exception;
+
+    /**
+     * 获取批次号字符
+     */
+    List<MaterialBatch> findBySelectWithBarCode(String barCodes);
+
 }
 }

+ 1 - 2
src/main/java/com/jsh/erp/service/impl/DepotHeadServiceImpl.java

@@ -2022,7 +2022,7 @@ public class DepotHeadServiceImpl extends ServiceImpl<DepotHeadMapper, DepotHead
             if (StringUtil.isExist(depotItem.getOperNumber())) {
             if (StringUtil.isExist(depotItem.getOperNumber())) {
                 //获取子表单商品单位
                 //获取子表单商品单位
                 String unit =depotItem.getMaterialUnit();
                 String unit =depotItem.getMaterialUnit();
-                BigDecimal oNumber = depotItem.getActualQuantityInStorage();
+                BigDecimal oNumber = depotItem.getOperNumber();
                 //设置基础数量
                 //设置基础数量
                 if (StringUtil.isNotEmpty(unitInfo.getName())) {
                 if (StringUtil.isNotEmpty(unitInfo.getName())) {
                     String basicUnit = unitInfo.getBasicUnit(); //基本单位
                     String basicUnit = unitInfo.getBasicUnit(); //基本单位
@@ -2068,7 +2068,6 @@ public class DepotHeadServiceImpl extends ServiceImpl<DepotHeadMapper, DepotHead
         }
         }
         //修改采购订单状态、操作人、操作时间
         //修改采购订单状态、操作人、操作时间
         this.update(new UpdateWrapper<DepotHead>().set("status", "2").set("oper_id",userInfo.getId()).set("submit_time",new Date()).eq("id", pdaDepotHeadDTO.getId()));
         this.update(new UpdateWrapper<DepotHead>().set("status", "2").set("oper_id",userInfo.getId()).set("submit_time",new Date()).eq("id", pdaDepotHeadDTO.getId()));
-
         return true;
         return true;
     }
     }
 
 

+ 17 - 1
src/main/java/com/jsh/erp/service/impl/DepotItemServiceImpl.java

@@ -10,6 +10,7 @@ import com.jsh.erp.constants.ExceptionConstants;
 import com.jsh.erp.datasource.entities.*;
 import com.jsh.erp.datasource.entities.*;
 import com.jsh.erp.datasource.mappers.*;
 import com.jsh.erp.datasource.mappers.*;
 import com.jsh.erp.datasource.pda.vo.PDADepotItemVO;
 import com.jsh.erp.datasource.pda.vo.PDADepotItemVO;
+import com.jsh.erp.datasource.pda.vo.PDAPrintVo;
 import com.jsh.erp.datasource.vo.DepotHeadXsddRequestVO;
 import com.jsh.erp.datasource.vo.DepotHeadXsddRequestVO;
 import com.jsh.erp.datasource.vo.DepotItemStockWarningCount;
 import com.jsh.erp.datasource.vo.DepotItemStockWarningCount;
 import com.jsh.erp.datasource.vo.DepotItemVo4Stock;
 import com.jsh.erp.datasource.vo.DepotItemVo4Stock;
@@ -83,14 +84,19 @@ public class DepotItemServiceImpl extends ServiceImpl<DepotItemMapper, DepotItem
     @Resource
     @Resource
     private MaterialBatchService materialBatchService;
     private MaterialBatchService materialBatchService;
 
 
+    @Resource
+    private DepotItemService depotItemService;
+
     /**
     /**
      * pda根据订单信息查询商品列表
      * pda根据订单信息查询商品列表
      * @return
      * @return
      */
      */
     @Override
     @Override
-    public List<PDADepotItemVO> pdaList(Long id) {
+    public List<PDADepotItemVO> pdaList(Long id) throws Exception {
         List<PDADepotItemVO> list = depotItemMapper.pdaList(id);
         List<PDADepotItemVO> list = depotItemMapper.pdaList(id);
         for (PDADepotItemVO pdaDepotItemVO : list) {
         for (PDADepotItemVO pdaDepotItemVO : list) {
+            Unit unitInfo = materialService.findUnit(pdaDepotItemVO.getMaterialId()); //查询多单位信息
+            pdaDepotItemVO.setActualQuantityInStorage(depotItemService.getFinishNumber(pdaDepotItemVO.getMaterialExtendId(), pdaDepotItemVO.getId(), pdaDepotItemVO.getHeaderId(), unitInfo, pdaDepotItemVO.getMaterialUnit(), "basic").toString());
             pdaDepotItemVO.setInventory(materialService.getMaterialStockByMid(pdaDepotItemVO.getMaterialId()).toString());
             pdaDepotItemVO.setInventory(materialService.getMaterialStockByMid(pdaDepotItemVO.getMaterialId()).toString());
         }
         }
         return list;
         return list;
@@ -116,6 +122,16 @@ public class DepotItemServiceImpl extends ServiceImpl<DepotItemMapper, DepotItem
         return depotItemMapper.materialDepotDetail(type, materialId);
         return depotItemMapper.materialDepotDetail(type, materialId);
     }
     }
 
 
+    /**
+     * pda 获取商品打印条码信息
+     * @param depotItemId 单据子表id
+     * @return
+     */
+    @Override
+    public PDAPrintVo pdaPrintMaterial(Long depotItemId) {
+        return null;
+    }
+
     @Override
     @Override
     public DepotItem getDepotItem(long id)throws Exception {
     public DepotItem getDepotItem(long id)throws Exception {
         DepotItem result=null;
         DepotItem result=null;

+ 19 - 0
src/main/java/com/jsh/erp/service/impl/MaterialBatchServiceImpl.java

@@ -6,6 +6,7 @@ import com.jsh.erp.datasource.entities.*;
 import com.jsh.erp.datasource.mappers.MaterialBatchMapper;
 import com.jsh.erp.datasource.mappers.MaterialBatchMapper;
 import com.jsh.erp.datasource.mappers.MaterialCategoryMapperEx;
 import com.jsh.erp.datasource.mappers.MaterialCategoryMapperEx;
 import com.jsh.erp.exception.JshException;
 import com.jsh.erp.exception.JshException;
+import com.jsh.erp.query.LambdaQueryWrapperX;
 import com.jsh.erp.service.*;
 import com.jsh.erp.service.*;
 import com.jsh.erp.utils.DateUtils;
 import com.jsh.erp.utils.DateUtils;
 import com.jsh.erp.utils.RandomHelper;
 import com.jsh.erp.utils.RandomHelper;
@@ -17,6 +18,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
 
 
@@ -75,6 +77,8 @@ public class MaterialBatchServiceImpl extends ServiceImpl<MaterialBatchMapper,Ma
         materialBatch.setDepotId(depotItem.getDepotId());
         materialBatch.setDepotId(depotItem.getDepotId());
         //仓位货架
         //仓位货架
         materialBatch.setPosition(depotItem.getPosition());
         materialBatch.setPosition(depotItem.getPosition());
+        //条码
+        materialBatch.setBarCode(materialExtend.getBarCode());
         materialBatchMapper.insert(materialBatch);
         materialBatchMapper.insert(materialBatch);
     }
     }
 
 
@@ -155,4 +159,19 @@ public class MaterialBatchServiceImpl extends ServiceImpl<MaterialBatchMapper,Ma
         return list;
         return list;
     }
     }
 
 
+    /**
+     * 获取批次号字符
+     *
+     * @param barCodes
+     */
+    @Override
+    public List<MaterialBatch> findBySelectWithBarCode(String barCodes) {
+        List<String> barCodeList = null;
+        if (barCodes != null && !barCodes.isEmpty()){
+            barCodeList = Arrays.asList(barCodes.split(","));
+        }
+        List<MaterialBatch> list = materialBatchMapper.selectList(new LambdaQueryWrapperX<MaterialBatch>().inIfPresent(MaterialBatch::getBarCode,barCodeList));
+        return list;
+    }
+
 }
 }

+ 25 - 28
src/main/java/com/jsh/erp/service/impl/MaterialServiceImpl.java

@@ -1069,6 +1069,12 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i
                         String.format(ExceptionConstants.MATERIAL_EXCEL_IMPORT_MANY_BARCODE_EXIST_MSG, manyBarCode));
                         String.format(ExceptionConstants.MATERIAL_EXCEL_IMPORT_MANY_BARCODE_EXIST_MSG, manyBarCode));
             }
             }
         }
         }
+        //EXCEL中有条码在系统中已存在
+        int count = materialExtendService.getCountByManyBarCodeWithoutUs(barCode, barCode);
+        if (count>0) {
+            throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_EXCEL_IMPORT_BARCODE_SYSTEM_EXIST_CODE,
+                    String.format(ExceptionConstants.MATERIAL_EXCEL_IMPORT_BARCODE_SYSTEM_EXIST_MSG, barCode));
+        }
         for(MaterialWithInitStock material: mList){
         for(MaterialWithInitStock material: mList){
             JSONObject materialExObj = material.getMaterialExObj();
             JSONObject materialExObj = material.getMaterialExObj();
             String basicBarCode = "";
             String basicBarCode = "";
@@ -1807,6 +1813,18 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i
                     throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_ENABLED_ERROR_CODE,
                     throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_ENABLED_ERROR_CODE,
                             String.format(ExceptionConstants.MATERIAL_ENABLED_ERROR_MSG, i+1));
                             String.format(ExceptionConstants.MATERIAL_ENABLED_ERROR_MSG, i+1));
                 }
                 }
+                //商品条码为空
+                if(StringUtil.isEmpty(barCode)) {
+                    throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_BARCODE_EMPTY_CODE,
+                            String.format(ExceptionConstants.MATERIAL_BARCODE_EMPTY_MSG, i+1));
+                }
+                //校验基本条码长度为4到40位
+                if(!StringUtil.checkBarCodeLength(barCode)) {
+                    throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_BARCODE_LENGTH_ERROR_CODE,
+                            String.format(ExceptionConstants.MATERIAL_BARCODE_LENGTH_ERROR_MSG, barCode));
+                }
+                //批量校验excel中有无重复条码(1-文档自身校验,2-和数据库里面的商品校验)
+                batchCheckExistBarCodeByParam(mList, barCode, null);
                 Long depotId = null;
                 Long depotId = null;
                 if(StringUtil.isNotEmpty(depotName)) {
                 if(StringUtil.isNotEmpty(depotName)) {
                     //根据仓库名查询仓库id
                     //根据仓库名查询仓库id
@@ -1850,7 +1868,7 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i
                 //设置商品拓展属性
                 //设置商品拓展属性
                 JSONObject materialExObj = new JSONObject();
                 JSONObject materialExObj = new JSONObject();
                 JSONObject basicObj = new JSONObject();
                 JSONObject basicObj = new JSONObject();
-                basicObj.put("commodityUnit", unit);    //商品单位
+                basicObj.put("commodityUnit", manyUnit.isEmpty() ? unit : manyUnit);    //商品单位
                 //basicObj.put("sku", sku);   //商品属性
                 //basicObj.put("sku", sku);   //商品属性
 //                basicObj.put("purchaseDecimal", purchaseDecimal);   //采购价格
 //                basicObj.put("purchaseDecimal", purchaseDecimal);   //采购价格
 //                basicObj.put("commodityDecimal", commodityDecimal); //零售价格
 //                basicObj.put("commodityDecimal", commodityDecimal); //零售价格
@@ -1924,6 +1942,8 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i
 
 
     @Override
     @Override
     public List<PDADepotItemVO> inventoryInquiry(PDAInventoryDTO pdaInventoryDTO) throws Exception {
     public List<PDADepotItemVO> inventoryInquiry(PDAInventoryDTO pdaInventoryDTO) throws Exception {
+
+        pdaInventoryDTO.setMaterialIds(materialInitialStockMapper.selectMaterialIdByPosition(pdaInventoryDTO.getPosition()));
         //查询类型id的子类型
         //查询类型id的子类型
         pdaInventoryDTO.setCategoryIds(selectCategoryIds(pdaInventoryDTO.getCategoryId()));
         pdaInventoryDTO.setCategoryIds(selectCategoryIds(pdaInventoryDTO.getCategoryId()));
         return materialMapperEx.inventoryInquiry(pdaInventoryDTO);
         return materialMapperEx.inventoryInquiry(pdaInventoryDTO);
@@ -1934,7 +1954,7 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i
      */
      */
     @Override
     @Override
     public List<PDATypeTree> selectPosition() {
     public List<PDATypeTree> selectPosition() {
-        List<String> positions = materialExtendMapper.selectPosition();
+        List<String> positions = materialInitialStockMapper.selectPosition();
         Map<String,List<String>> map = new HashMap<>();
         Map<String,List<String>> map = new HashMap<>();
         for (String s : positions) {
         for (String s : positions) {
             String [] str = s.split("-");
             String [] str = s.split("-");
@@ -2009,8 +2029,7 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i
                     + "-" + m.getStandard()
                     + "-" + m.getStandard()
                     + "-" + m.getBrand()
                     + "-" + m.getBrand()
                     + "-" + m.getColor()
                     + "-" + m.getColor()
-                    + "-" + m.getUnit()
-                    + "-" + materialSku;
+                    + "-" + m.getUnit();
             if (materialMap.get(str) == null) {
             if (materialMap.get(str) == null) {
                 //商品主表不存在,创建商品主表
                 //商品主表不存在,创建商品主表
                 Material material = new Material();
                 Material material = new Material();
@@ -2055,34 +2074,12 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i
             //添加子表信息
             //添加子表信息
             MaterialExtend materialExtend = new MaterialExtend();
             MaterialExtend materialExtend = new MaterialExtend();
             //商品单位
             //商品单位
-            materialExtend.setCommodityUnit(m.getUnit());
+            materialExtend.setCommodityUnit(basicObj.getString("commodityUnit"));
             //商品属性
             //商品属性
             materialExtend.setSku(materialSku);
             materialExtend.setSku(materialSku);
-            //采购价格
-            materialExtend.setPurchaseDecimal(basicObj.getBigDecimal("purchaseDecimal"));
-            //零售价格
-            materialExtend.setCommodityDecimal(basicObj.getBigDecimal("commodityDecimal"));
-            //销售价格
-            materialExtend.setWholesaleDecimal(basicObj.getBigDecimal("wholesaleDecimal"));
-            //最低售价
-            materialExtend.setLowDecimal(basicObj.getBigDecimal("lowDecimal"));
-            //生产日期
-            materialExtend.setProductionDate(basicObj.getDate("productionDate"));
-            //保质期天数
-            materialExtend.setExpiryNum(basicObj.getInteger("expiryNum"));
-            //供应商id
-            materialExtend.setSupplierId(basicObj.getLong("supplierId"));
             //商品条码
             //商品条码
             materialExtend.setBarCode(basicObj.getString("barCode"));
             materialExtend.setBarCode(basicObj.getString("barCode"));
-            //设置批次号
-            String batchNumber = DateUtils.dateTimeNow("yyyyMMdd") + RandomHelper.getRandomStr(6);
-            materialExtend.setBatchNumber(batchNumber);
-            //仓库id
-            materialExtend.setDepotId(basicObj.getLong("depotId"));
-            //仓位货架
-            materialExtend.setPosition(basicObj.getString("position"));
-            //库存
-            materialExtend.setInventory(basicObj.getBigDecimal("inventory"));
+
             materialMap.get(str).getList().add(materialExtend);
             materialMap.get(str).getList().add(materialExtend);
         }
         }
         materialMap.values().forEach(v -> materials.add(v));
         materialMap.values().forEach(v -> materials.add(v));

+ 17 - 19
src/main/java/com/jsh/erp/service/impl/TaskStocktakingServiceImpl.java

@@ -13,10 +13,7 @@ import com.jsh.erp.datasource.pda.vo.PDATaskStocktakingVO;
 import com.jsh.erp.datasource.vo.TaskStocktakingItemVO;
 import com.jsh.erp.datasource.vo.TaskStocktakingItemVO;
 import com.jsh.erp.datasource.vo.TaskStocktakingVO;
 import com.jsh.erp.datasource.vo.TaskStocktakingVO;
 import com.jsh.erp.query.LambdaQueryWrapperX;
 import com.jsh.erp.query.LambdaQueryWrapperX;
-import com.jsh.erp.service.DepotService;
-import com.jsh.erp.service.SequenceService;
-import com.jsh.erp.service.TaskStocktakingService;
-import com.jsh.erp.service.UserService;
+import com.jsh.erp.service.*;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
@@ -53,6 +50,8 @@ public class TaskStocktakingServiceImpl extends ServiceImpl<TaskStocktakingMappe
 
 
     private final SequenceService sequenceService;
     private final SequenceService sequenceService;
 
 
+    private final MaterialBatchMapper materialBatchMapper;
+
     @Override
     @Override
     public List<TaskStocktakingVO> listBy(TaskStocktakingQueryDTO taskStocktakingQueryDTO) {
     public List<TaskStocktakingVO> listBy(TaskStocktakingQueryDTO taskStocktakingQueryDTO) {
         return taskStocktakingMapper.listBy(taskStocktakingQueryDTO);
         return taskStocktakingMapper.listBy(taskStocktakingQueryDTO);
@@ -68,23 +67,23 @@ public class TaskStocktakingServiceImpl extends ServiceImpl<TaskStocktakingMappe
     public boolean add(TaskStocktakingDTO taskStocktakingDTO) {
     public boolean add(TaskStocktakingDTO taskStocktakingDTO) {
         try {
         try {
             List<String> collect;
             List<String> collect;
-            List<MaterialExtend> materialExtendList;
+            List<MaterialBatch> materialExtendList;
             //全盘,抽盘,处理任务明细
             //全盘,抽盘,处理任务明细
             if (taskStocktakingDTO.getTaskType() == 1) {
             if (taskStocktakingDTO.getTaskType() == 1) {
-                materialExtendList = materialExtendMapper.selectList(new LambdaQueryWrapper<MaterialExtend>().ne(MaterialExtend::getInventory, BigDecimal.ZERO).isNotNull(MaterialExtend::getInventory));
+                materialExtendList = materialBatchMapper.selectList(new LambdaQueryWrapper<MaterialBatch>().ne(MaterialBatch::getInventory, BigDecimal.ZERO).isNotNull(MaterialBatch::getInventory));
                 collect = materialExtendList
                 collect = materialExtendList
                         .stream()
                         .stream()
-                        .map(MaterialExtend::getPosition)
+                        .map(MaterialBatch::getPosition)
                         .collect(Collectors.toList());
                         .collect(Collectors.toList());
-                List<Long> materialIdList = materialExtendList.stream().map(MaterialExtend::getMaterialId).distinct().collect(Collectors.toList());
+                List<Long> materialIdList = materialExtendList.stream().map(MaterialBatch::getMaterialId).distinct().collect(Collectors.toList());
                 List<Material> materialList = materialMapper.selectList(new LambdaQueryWrapperX<Material>().eq(Material::getId, materialIdList));
                 List<Material> materialList = materialMapper.selectList(new LambdaQueryWrapperX<Material>().eq(Material::getId, materialIdList));
                 List<Long> categoryIdList = materialList.stream().map(Material::getCategoryId).distinct().collect(Collectors.toList());
                 List<Long> categoryIdList = materialList.stream().map(Material::getCategoryId).distinct().collect(Collectors.toList());
                 taskStocktakingDTO.setCategoryCount(categoryIdList.size());
                 taskStocktakingDTO.setCategoryCount(categoryIdList.size());
                 taskStocktakingDTO.setMaterialCount(materialExtendList.size());
                 taskStocktakingDTO.setMaterialCount(materialExtendList.size());
             } else {
             } else {
-                materialExtendList = materialExtendMapper.selectList(new LambdaQueryWrapper<MaterialExtend>().in(MaterialExtend::getBatchNumber, taskStocktakingDTO.getMaterialExtendIdList()));
-                collect = materialExtendList.stream().map(MaterialExtend::getPosition).collect(Collectors.toList());
-                List<Long> materialIdList = materialExtendList.stream().map(MaterialExtend::getMaterialId).collect(Collectors.toList());
+                materialExtendList = materialBatchMapper.selectList(new LambdaQueryWrapper<MaterialBatch>().in(MaterialBatch::getBatchNumber, taskStocktakingDTO.getMaterialExtendIdList()));
+                collect = materialExtendList.stream().map(MaterialBatch::getPosition).collect(Collectors.toList());
+                List<Long> materialIdList = materialExtendList.stream().map(MaterialBatch::getMaterialId).collect(Collectors.toList());
                 List<Material> materialList = materialMapper.selectList(new LambdaQueryWrapperX<Material>().in(Material::getId, materialIdList));
                 List<Material> materialList = materialMapper.selectList(new LambdaQueryWrapperX<Material>().in(Material::getId, materialIdList));
                 List<Long> categoryIdList = materialList.stream().map(Material::getCategoryId).distinct().collect(Collectors.toList());
                 List<Long> categoryIdList = materialList.stream().map(Material::getCategoryId).distinct().collect(Collectors.toList());
                 taskStocktakingDTO.setCategoryCount(categoryIdList.size());
                 taskStocktakingDTO.setCategoryCount(categoryIdList.size());
@@ -298,23 +297,22 @@ public class TaskStocktakingServiceImpl extends ServiceImpl<TaskStocktakingMappe
         List<String> rangeParts = new ArrayList<>();
         List<String> rangeParts = new ArrayList<>();
 
 
         for (String item : data) {
         for (String item : data) {
-            // 提取前两部分(假设格式固定,以 "-" 分割,取前两部分)
-            String[] parts = item.split("-");
-            if (parts.length >= 2) {
-                String rangePart = parts[0] + "-" + parts[1];
-                rangeParts.add(rangePart); // 添加到列表
+            if (item != null){
+                // 提取前两部分(假设格式固定,以 "-" 分割,取前两部分)
+                String[] parts = item.split("-");
+                if (parts.length >= 2) {
+                    String rangePart = parts[0] + "-" + parts[1];
+                    rangeParts.add(rangePart); // 添加到列表
+                }
             }
             }
         }
         }
-
         // 如果范围为空,直接返回空字符串
         // 如果范围为空,直接返回空字符串
         if (rangeParts.isEmpty()) {
         if (rangeParts.isEmpty()) {
             return "";
             return "";
         }
         }
-
         // 找到最小和最大范围
         // 找到最小和最大范围
         String minRange = Collections.min(rangeParts); // 字典序最小
         String minRange = Collections.min(rangeParts); // 字典序最小
         String maxRange = Collections.max(rangeParts); // 字典序最大
         String maxRange = Collections.max(rangeParts); // 字典序最大
-
         // 返回范围对
         // 返回范围对
         return minRange + "——" + maxRange;
         return minRange + "——" + maxRange;
     }
     }

+ 28 - 2
src/main/resources/mapper_xml/DepotItemMapper.xml

@@ -609,7 +609,9 @@
       di.material_unit AS material_unit,
       di.material_unit AS material_unit,
       di.actual_quantity_in_storage AS actual_quantity_in_storage,
       di.actual_quantity_in_storage AS actual_quantity_in_storage,
       di.material_id AS material_id,
       di.material_id AS material_id,
-      m.img_name AS img_name
+      m.img_name AS img_name,
+      di.header_id,
+      di.material_extend_id
     FROM
     FROM
       jsh_depot_item di
       jsh_depot_item di
     LEFT JOIN jsh_material m ON di.material_id = m.id
     LEFT JOIN jsh_material m ON di.material_id = m.id
@@ -650,7 +652,7 @@
       m.`name` AS material_name,
       m.`name` AS material_name,
       d.name AS depot_name,
       d.name AS depot_name,
       m.standard AS material_standard,
       m.standard AS material_standard,
-      di.actual_quantity_in_storage AS actual_quantity_in_storage,
+      di.oper_number AS actual_quantity_in_storage,
       dh.create_time AS warehousing_time,
       dh.create_time AS warehousing_time,
       me.commodity_unit AS commodity_unit,
       me.commodity_unit AS commodity_unit,
       m.img_name AS img_name
       m.img_name AS img_name
@@ -668,5 +670,29 @@
       AND di.material_id = #{materialId}
       AND di.material_id = #{materialId}
   </select>
   </select>
 
 
+  <select id="pdaDetail" resultType="com.jsh.erp.datasource.pda.vo.PDADepotItemVO">
+    SELECT
+    di.id AS id,
+    m.`name` AS material_name,
+    m.standard AS material_standard,
+    me.batch_number AS batch_number,
+    me.production_date AS production_date,
+    me.position AS position,
+    me.inventory AS inventory,
+    me.bar_code AS bar_code,
+    di.oper_number AS oper_number,
+    di.material_unit AS material_unit,
+    me.create_time AS create_time,
+    di.material_id AS material_id,
+    m.img_name AS img_name
+    FROM
+    jsh_depot_item di
+    LEFT JOIN jsh_material m ON di.material_id = m.id
+    LEFT JOIN jsh_material_extend me ON di.material_extend_id = me.id
+    WHERE
+    di.delete_flag = '0'
+    AND di.id = #{id}
+  </select>
+
 
 
 </mapper>
 </mapper>

+ 0 - 4
src/main/resources/mapper_xml/MaterialExtendMapper.xml

@@ -490,8 +490,4 @@
     AND ifnull(me.delete_Flag,'0') !='1'
     AND ifnull(me.delete_Flag,'0') !='1'
   </select>
   </select>
 
 
-  <select id="selectPosition"  resultType="String">
-    SELECT DISTINCT position FROM jsh_material_extend WHERE position IS NOT NULL AND position != "" AND ifnull(delete_Flag,'0') !='1'
-  </select>
-
 </mapper>
 </mapper>

+ 9 - 0
src/main/resources/mapper_xml/MaterialInitialStockMapper.xml

@@ -263,4 +263,13 @@
       delete_flag = #{deleteFlag,jdbcType=VARCHAR}
       delete_flag = #{deleteFlag,jdbcType=VARCHAR}
     where id = #{id,jdbcType=BIGINT}
     where id = #{id,jdbcType=BIGINT}
   </update>
   </update>
+
+  <select id="selectPosition" resultType="String">
+    SELECT DISTINCT position FROM jsh_material_initial_stock WHERE position IS NOT NULL AND position != "" AND ifnull(delete_Flag,'0') !='1'
+  </select>
+
+  <select id="selectMaterialIdByPosition" resultType="String">
+    SELECT DISTINCT material_id FROM jsh_material_initial_stock WHERE position LIKE CONCAT('%',#{position},'%') AND ifnull(delete_Flag,'0') !='1'
+  </select>
+
 </mapper>
 </mapper>

+ 12 - 9
src/main/resources/mapper_xml/MaterialMapperEx.xml

@@ -851,22 +851,18 @@
 
 
     <select id="inventoryInquiry" parameterType="com.jsh.erp.datasource.pda.dto.PDAInventoryDTO" resultType="com.jsh.erp.datasource.pda.vo.PDADepotItemVO">
     <select id="inventoryInquiry" parameterType="com.jsh.erp.datasource.pda.dto.PDAInventoryDTO" resultType="com.jsh.erp.datasource.pda.vo.PDADepotItemVO">
         select m.id materialId,m.name materialName,m.standard materialStandard,u.name unit_name,mc.name categoryName,me.bar_code,me.id meId,me.commodity_unit,me.sku,
         select m.id materialId,m.name materialName,m.standard materialStandard,u.name unit_name,mc.name categoryName,me.bar_code,me.id meId,me.commodity_unit,me.sku,
-        me.production_date,me.expiry_num,me.supplier_id,me.batch_number,me.depot_id,me.position,d.`name` depotName,s.supplier supplierName,m.img_name,me.inventory
+        me.production_date,me.expiry_num,me.supplier_id,me.batch_number,me.depot_id,me.position,d.`name` depotName,m.img_name,IFNULL(mi.inventory,0) inventory
         from jsh_material m
         from jsh_material m
         left join jsh_material_extend me on m.id=me.material_id and ifnull(me.delete_Flag,'0') !='1'
         left join jsh_material_extend me on m.id=me.material_id and ifnull(me.delete_Flag,'0') !='1'
         left join jsh_unit u on m.unit_id=u.id and ifnull(u.delete_Flag,'0') !='1'
         left join jsh_unit u on m.unit_id=u.id and ifnull(u.delete_Flag,'0') !='1'
         left JOIN jsh_material_category mc on m.category_id = mc.id and ifnull(mc.delete_Flag,'0') !='1'
         left JOIN jsh_material_category mc on m.category_id = mc.id and ifnull(mc.delete_Flag,'0') !='1'
         left JOIN jsh_depot d on me.depot_id = d.id and ifnull(d.delete_Flag,'0') !='1'
         left JOIN jsh_depot d on me.depot_id = d.id and ifnull(d.delete_Flag,'0') !='1'
-        left JOIN jsh_supplier s on me.supplier_id = s.id and ifnull(s.delete_Flag,'0') !='1'
+        left JOIN (SELECT material_id,SUM(current_number) AS 'inventory' FROM jsh_material_current_stock GROUP BY material_id) mi ON m.id = mi.material_id
         where m.enabled = 1
         where m.enabled = 1
         and me.id is not null
         and me.id is not null
         <if test="keyword != null and keyword !=''">
         <if test="keyword != null and keyword !=''">
             <bind name="bindKey" value="'%'+keyword+'%'"/>
             <bind name="bindKey" value="'%'+keyword+'%'"/>
-            and (me.batch_number like #{bindKey} or m.name like #{bindKey} or me.bar_code like #{bindKey})
-        </if>
-        <if test="position != null and position !=''">
-            <bind name="bindPosition" value="'%'+position+'%'"/>
-            and me.position like #{bindPosition}
+            and (m.name like #{bindKey} or me.bar_code like #{bindKey})
         </if>
         </if>
         <if test="categoryId != null">
         <if test="categoryId != null">
             and m.category_id IN (
             and m.category_id IN (
@@ -875,11 +871,18 @@
             </foreach>
             </foreach>
             )
             )
         </if>
         </if>
+        <if test="materialIds != null">
+            and m.id IN (
+            <foreach collection="materialIds" item="item" separator=",">
+                #{item}
+            </foreach>
+            )
+        </if>
         <if test="type == 'have'">
         <if test="type == 'have'">
-            and me.inventory > 0
+            and mi.inventory > 0
         </if>
         </if>
         <if test="type == 'none'">
         <if test="type == 'none'">
-            and me.inventory &lt;= 0
+            and ifnull(mi.inventory,0) &lt;= 0
         </if>
         </if>
         and ifnull(me.delete_flag,'0') !='1'
         and ifnull(me.delete_flag,'0') !='1'
     </select>
     </select>

+ 2 - 2
src/main/resources/mapper_xml/TaskStocktakingItemMapper.xml

@@ -20,7 +20,7 @@
         tsi.status AS status
         tsi.status AS status
         FROM
         FROM
         task_stocktaking_item tsi
         task_stocktaking_item tsi
-        LEFT JOIN jsh_material_extend me ON tsi.material_item_id = me.id
+        LEFT JOIN material_batch me ON tsi.material_item_id = me.id
         LEFT JOIN jsh_material m ON me.material_id = m.id
         LEFT JOIN jsh_material m ON me.material_id = m.id
         LEFT JOIN jsh_material_category mc ON m.category_id = mc.id
         LEFT JOIN jsh_material_category mc ON m.category_id = mc.id
         LEFT JOIN jsh_user u ON u.id = tsi.creator
         LEFT JOIN jsh_user u ON u.id = tsi.creator
@@ -92,7 +92,7 @@
             tsi.difference_reason AS difference_reason
             tsi.difference_reason AS difference_reason
         FROM
         FROM
             task_stocktaking_item tsi
             task_stocktaking_item tsi
-                LEFT JOIN jsh_material_extend me ON tsi.material_item_id = me.id
+                LEFT JOIN material_batch me ON tsi.material_item_id = me.id
                 LEFT JOIN jsh_material m ON me.material_id = m.id
                 LEFT JOIN jsh_material m ON me.material_id = m.id
                 LEFT JOIN jsh_material_category mc ON mc.id = m.category_id
                 LEFT JOIN jsh_material_category mc ON mc.id = m.category_id
                 LEFT JOIN jsh_supplier s ON me.supplier_id = s.id
                 LEFT JOIN jsh_supplier s ON me.supplier_id = s.id