Selaa lähdekoodia

Merge remote-tracking branch 'origin/dev_huangjunjie'

13660505945 3 viikkoa sitten
vanhempi
commit
0d82a42fca
21 muutettua tiedostoa jossa 231 lisäystä ja 80 poistoa
  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 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中有副条码在系统中已存在(除自身商品之外)
     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";
@@ -373,6 +373,11 @@ public class ExceptionConstants {
     public static final int MATERIAL_ERP_SKU_NOT_DECIMAL_CODE = 8000032;
     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

+ 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.JSONObject;
+import com.jsh.erp.base.AjaxResult;
 import com.jsh.erp.base.BaseController;
 import com.jsh.erp.base.TableDataInfo;
 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.query.LambdaQueryWrapperX;
 import com.jsh.erp.query.QueryWrapperX;
@@ -42,4 +44,19 @@ public class MaterialBatchController extends BaseController {
         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.PDATaskStocktakingDTO;
 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.TaskStocktakingVO;
 import com.jsh.erp.datasource.vo.TreeNode;
@@ -81,6 +78,9 @@ public class PdaController extends BaseController {
     @Resource
     private DepotService depotService;
 
+    @Resource
+    private MaterialBatchService materialBatchService;
+
     /**
      * 采购入库
      * @return
@@ -121,7 +121,7 @@ public class PdaController extends BaseController {
 
     @GetMapping("/orderDetail/{id}")
     @ApiOperation("订单明细")
-    public TableDataInfo orderDetail(@PathVariable("id") Long id) {
+    public TableDataInfo orderDetail(@PathVariable("id") Long id) throws Exception {
         startPage();
         List<PDADepotItemVO> list = depotItemService.pdaList(id);
         return getDataTable(list);
@@ -220,8 +220,8 @@ public class PdaController extends BaseController {
     @PostMapping("/stocktaking")
     public AjaxResult stocktaking(@RequestBody TaskStocktakingItem taskStocktakingItem) throws Exception{
         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("商品信息不存在");
         }
         UpdateWrapper<TaskStocktakingItem> updateWrapper = new UpdateWrapper<>();
@@ -230,7 +230,7 @@ public class PdaController extends BaseController {
                 .set("oper_time", new Date());
         if (ObjectUtil.isNotEmpty(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);
             //差异数量,设置盘点状态为1.未盘,2.盘盈,3.盘亏 4.无差异
             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 com.jsh.erp.datasource.pda.vo.PDADepotItemVO;
+import com.jsh.erp.datasource.pda.vo.PDAPrintVo;
 import org.apache.ibatis.annotations.Param;
 
 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);
 
+    /**
+     * 根据单据子表id查询商品打印信息
+     * @param id
+     * @return
+     */
+    PDAPrintVo pdaPrintMaterial(@Param("id")Long id) ;
+
     long countByExample(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,
                                             @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 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("关键字")
     private String keyword;
 
-    @ApiModelProperty("商品种类ID数组")
+    @ApiModelProperty("商品种类ID集合")
     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")
     private Long id;
 
+    @ApiModelProperty("订单主表ID")
+    private Long headerId;
+
     @ApiModelProperty("商品ID")
     private Long materialId;
 
+    @ApiModelProperty("商品条码ID")
+    private Long materialExtendId;
+
     @ApiModelProperty("商品名称")
     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.jsh.erp.datasource.entities.*;
 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.DepotItemStockWarningCount;
 import com.jsh.erp.datasource.vo.DepotItemVoBatchNumberList;
@@ -23,7 +24,7 @@ public interface DepotItemService extends IService<DepotItem> {
      * pda根据订单信息查询商品列表
      * @return
      */
-    List<PDADepotItemVO> pdaList(Long id);
+    List<PDADepotItemVO> pdaList(Long id) throws Exception;
 
     /**
      * pda根据商品订单ID查询商品详情
@@ -39,6 +40,13 @@ public interface DepotItemService extends IService<DepotItem> {
      */
     List<PDADepotItemVO> materialDepotDetail(String type, Long materialId);
 
+    /**
+     * pda 获取商品打印条码信息
+     * @param depotItemId 单据子表id
+     * @return
+     */
+    PDAPrintVo pdaPrintMaterial(Long depotItemId);
+
     DepotItem getDepotItem(long id)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,
                                                   String brand, String mfrs, String enableSerialNumber, String enableBatchNumber,
                                                   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())) {
                 //获取子表单商品单位
                 String unit =depotItem.getMaterialUnit();
-                BigDecimal oNumber = depotItem.getActualQuantityInStorage();
+                BigDecimal oNumber = depotItem.getOperNumber();
                 //设置基础数量
                 if (StringUtil.isNotEmpty(unitInfo.getName())) {
                     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()));
-
         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.mappers.*;
 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.DepotItemStockWarningCount;
 import com.jsh.erp.datasource.vo.DepotItemVo4Stock;
@@ -83,14 +84,19 @@ public class DepotItemServiceImpl extends ServiceImpl<DepotItemMapper, DepotItem
     @Resource
     private MaterialBatchService materialBatchService;
 
+    @Resource
+    private DepotItemService depotItemService;
+
     /**
      * pda根据订单信息查询商品列表
      * @return
      */
     @Override
-    public List<PDADepotItemVO> pdaList(Long id) {
+    public List<PDADepotItemVO> pdaList(Long id) throws Exception {
         List<PDADepotItemVO> list = depotItemMapper.pdaList(id);
         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());
         }
         return list;
@@ -116,6 +122,16 @@ public class DepotItemServiceImpl extends ServiceImpl<DepotItemMapper, DepotItem
         return depotItemMapper.materialDepotDetail(type, materialId);
     }
 
+    /**
+     * pda 获取商品打印条码信息
+     * @param depotItemId 单据子表id
+     * @return
+     */
+    @Override
+    public PDAPrintVo pdaPrintMaterial(Long depotItemId) {
+        return null;
+    }
+
     @Override
     public DepotItem getDepotItem(long id)throws Exception {
         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.MaterialCategoryMapperEx;
 import com.jsh.erp.exception.JshException;
+import com.jsh.erp.query.LambdaQueryWrapperX;
 import com.jsh.erp.service.*;
 import com.jsh.erp.utils.DateUtils;
 import com.jsh.erp.utils.RandomHelper;
@@ -17,6 +18,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -75,6 +77,8 @@ public class MaterialBatchServiceImpl extends ServiceImpl<MaterialBatchMapper,Ma
         materialBatch.setDepotId(depotItem.getDepotId());
         //仓位货架
         materialBatch.setPosition(depotItem.getPosition());
+        //条码
+        materialBatch.setBarCode(materialExtend.getBarCode());
         materialBatchMapper.insert(materialBatch);
     }
 
@@ -155,4 +159,19 @@ public class MaterialBatchServiceImpl extends ServiceImpl<MaterialBatchMapper,Ma
         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));
             }
         }
+        //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){
             JSONObject materialExObj = material.getMaterialExObj();
             String basicBarCode = "";
@@ -1807,6 +1813,18 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i
                     throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_ENABLED_ERROR_CODE,
                             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;
                 if(StringUtil.isNotEmpty(depotName)) {
                     //根据仓库名查询仓库id
@@ -1850,7 +1868,7 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i
                 //设置商品拓展属性
                 JSONObject materialExObj = new JSONObject();
                 JSONObject basicObj = new JSONObject();
-                basicObj.put("commodityUnit", unit);    //商品单位
+                basicObj.put("commodityUnit", manyUnit.isEmpty() ? unit : manyUnit);    //商品单位
                 //basicObj.put("sku", sku);   //商品属性
 //                basicObj.put("purchaseDecimal", purchaseDecimal);   //采购价格
 //                basicObj.put("commodityDecimal", commodityDecimal); //零售价格
@@ -1924,6 +1942,8 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i
 
     @Override
     public List<PDADepotItemVO> inventoryInquiry(PDAInventoryDTO pdaInventoryDTO) throws Exception {
+
+        pdaInventoryDTO.setMaterialIds(materialInitialStockMapper.selectMaterialIdByPosition(pdaInventoryDTO.getPosition()));
         //查询类型id的子类型
         pdaInventoryDTO.setCategoryIds(selectCategoryIds(pdaInventoryDTO.getCategoryId()));
         return materialMapperEx.inventoryInquiry(pdaInventoryDTO);
@@ -1934,7 +1954,7 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i
      */
     @Override
     public List<PDATypeTree> selectPosition() {
-        List<String> positions = materialExtendMapper.selectPosition();
+        List<String> positions = materialInitialStockMapper.selectPosition();
         Map<String,List<String>> map = new HashMap<>();
         for (String s : positions) {
             String [] str = s.split("-");
@@ -2009,8 +2029,7 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i
                     + "-" + m.getStandard()
                     + "-" + m.getBrand()
                     + "-" + m.getColor()
-                    + "-" + m.getUnit()
-                    + "-" + materialSku;
+                    + "-" + m.getUnit();
             if (materialMap.get(str) == null) {
                 //商品主表不存在,创建商品主表
                 Material material = new Material();
@@ -2055,34 +2074,12 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i
             //添加子表信息
             MaterialExtend materialExtend = new MaterialExtend();
             //商品单位
-            materialExtend.setCommodityUnit(m.getUnit());
+            materialExtend.setCommodityUnit(basicObj.getString("commodityUnit"));
             //商品属性
             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"));
-            //设置批次号
-            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.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.TaskStocktakingVO;
 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.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
@@ -53,6 +50,8 @@ public class TaskStocktakingServiceImpl extends ServiceImpl<TaskStocktakingMappe
 
     private final SequenceService sequenceService;
 
+    private final MaterialBatchMapper materialBatchMapper;
+
     @Override
     public List<TaskStocktakingVO> listBy(TaskStocktakingQueryDTO taskStocktakingQueryDTO) {
         return taskStocktakingMapper.listBy(taskStocktakingQueryDTO);
@@ -68,23 +67,23 @@ public class TaskStocktakingServiceImpl extends ServiceImpl<TaskStocktakingMappe
     public boolean add(TaskStocktakingDTO taskStocktakingDTO) {
         try {
             List<String> collect;
-            List<MaterialExtend> materialExtendList;
+            List<MaterialBatch> materialExtendList;
             //全盘,抽盘,处理任务明细
             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
                         .stream()
-                        .map(MaterialExtend::getPosition)
+                        .map(MaterialBatch::getPosition)
                         .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<Long> categoryIdList = materialList.stream().map(Material::getCategoryId).distinct().collect(Collectors.toList());
                 taskStocktakingDTO.setCategoryCount(categoryIdList.size());
                 taskStocktakingDTO.setMaterialCount(materialExtendList.size());
             } 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<Long> categoryIdList = materialList.stream().map(Material::getCategoryId).distinct().collect(Collectors.toList());
                 taskStocktakingDTO.setCategoryCount(categoryIdList.size());
@@ -298,23 +297,22 @@ public class TaskStocktakingServiceImpl extends ServiceImpl<TaskStocktakingMappe
         List<String> rangeParts = new ArrayList<>();
 
         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()) {
             return "";
         }
-
         // 找到最小和最大范围
         String minRange = Collections.min(rangeParts); // 字典序最小
         String maxRange = Collections.max(rangeParts); // 字典序最大
-
         // 返回范围对
         return minRange + "——" + maxRange;
     }

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

@@ -609,7 +609,9 @@
       di.material_unit AS material_unit,
       di.actual_quantity_in_storage AS actual_quantity_in_storage,
       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
       jsh_depot_item di
     LEFT JOIN jsh_material m ON di.material_id = m.id
@@ -650,7 +652,7 @@
       m.`name` AS material_name,
       d.name AS depot_name,
       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,
       me.commodity_unit AS commodity_unit,
       m.img_name AS img_name
@@ -668,5 +670,29 @@
       AND di.material_id = #{materialId}
   </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>

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

@@ -490,8 +490,4 @@
     AND ifnull(me.delete_Flag,'0') !='1'
   </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>

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

@@ -263,4 +263,13 @@
       delete_flag = #{deleteFlag,jdbcType=VARCHAR}
     where id = #{id,jdbcType=BIGINT}
   </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>

+ 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 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
         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_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_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
         and me.id is not null
         <if test="keyword != null and 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 test="categoryId != null">
             and m.category_id IN (
@@ -875,11 +871,18 @@
             </foreach>
             )
         </if>
+        <if test="materialIds != null">
+            and m.id IN (
+            <foreach collection="materialIds" item="item" separator=",">
+                #{item}
+            </foreach>
+            )
+        </if>
         <if test="type == 'have'">
-            and me.inventory > 0
+            and mi.inventory > 0
         </if>
         <if test="type == 'none'">
-            and me.inventory &lt;= 0
+            and ifnull(mi.inventory,0) &lt;= 0
         </if>
         and ifnull(me.delete_flag,'0') !='1'
     </select>

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

@@ -20,7 +20,7 @@
         tsi.status AS status
         FROM
         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_category mc ON m.category_id = mc.id
         LEFT JOIN jsh_user u ON u.id = tsi.creator
@@ -92,7 +92,7 @@
             tsi.difference_reason AS difference_reason
         FROM
             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_category mc ON mc.id = m.category_id
                 LEFT JOIN jsh_supplier s ON me.supplier_id = s.id