Просмотр исходного кода

Merge remote-tracking branch 'origin/dev_huangjunjie'

yz 1 неделя назад
Родитель
Сommit
9d0d9a9ccf
26 измененных файлов с 136 добавлено и 1726 удалено
  1. 3 0
      src/main/java/com/jsh/erp/constants/ExceptionConstants.java
  2. 6 27
      src/main/java/com/jsh/erp/controller/MaterialController.java
  3. 3 5
      src/main/java/com/jsh/erp/controller/materialBatch/MaterialBatchController.java
  4. 6 6
      src/main/java/com/jsh/erp/controller/pda/PdaController.java
  5. 7 0
      src/main/java/com/jsh/erp/datasource/mappers/MaterialBatchMapper.java
  6. 1 1
      src/main/java/com/jsh/erp/datasource/mappers/MaterialInitialStockMapper.java
  7. 0 2
      src/main/java/com/jsh/erp/datasource/mappers/MaterialMapperEx.java
  8. 1 1
      src/main/java/com/jsh/erp/datasource/mappers/TaskStocktakingMapper.java
  9. 3 0
      src/main/java/com/jsh/erp/datasource/pda/dto/PDAInventoryDTO.java
  10. 3 0
      src/main/java/com/jsh/erp/datasource/pda/dto/PDATaskStocktakingDTO.java
  11. 1 1
      src/main/java/com/jsh/erp/service/DepotItemService.java
  12. 9 1
      src/main/java/com/jsh/erp/service/MaterialBatchService.java
  13. 1 3
      src/main/java/com/jsh/erp/service/MaterialService.java
  14. 1 1
      src/main/java/com/jsh/erp/service/TaskStocktakingService.java
  15. 12 3
      src/main/java/com/jsh/erp/service/impl/DepotItemServiceImpl.java
  16. 14 4
      src/main/java/com/jsh/erp/service/impl/MaterialBatchServiceImpl.java
  17. 14 0
      src/main/java/com/jsh/erp/service/impl/MaterialExtendServiceImpl.java
  18. 4 15
      src/main/java/com/jsh/erp/service/impl/MaterialServiceImpl.java
  19. 2 2
      src/main/java/com/jsh/erp/service/impl/TaskStocktakingServiceImpl.java
  20. 0 1589
      src/main/java/com/jsh/erp/utils/StringHelper.java
  21. 4 27
      src/main/resources/mapper_xml/DepotItemMapper.xml
  22. 34 0
      src/main/resources/mapper_xml/MaterialBatchMapper.xml
  23. 2 2
      src/main/resources/mapper_xml/MaterialInitialStockMapper.xml
  24. 2 1
      src/main/resources/mapper_xml/MaterialMapper.xml
  25. 0 35
      src/main/resources/mapper_xml/MaterialMapperEx.xml
  26. 3 0
      src/main/resources/mapper_xml/TaskStocktakingMapper.xml

+ 3 - 0
src/main/java/com/jsh/erp/constants/ExceptionConstants.java

@@ -211,6 +211,9 @@ public class ExceptionConstants {
     //修改商品扩展信息失败
     public static final int MATERIAL_PROPERTY_EDIT_FAILED_CODE = 6000002;
     public static final String MATERIAL_PROPERTY_EDIT_FAILED_MSG = "修改商品扩展信息失败";
+    //修改商品扩展信息失败
+    public static final int MATERIAL_PROPERTY_BARCODE_EXIST_CODE = 6000003;
+    public static final String MATERIAL_PROPERTY_BARCODE_EXIST_MSG = "商品条码:%s 已存在";
     /**
      *  账户信息
      * type = 65

+ 6 - 27
src/main/java/com/jsh/erp/controller/MaterialController.java

@@ -832,33 +832,14 @@ public class MaterialController extends BaseController {
         return res;
     }
 
-    /**
-     * 根据批次号查询商品信息
-     * @return
-     * @throws Exception
-     */
+
     @GetMapping(value = "/getMaterialByBatchNumber")
     @ApiOperation(value = "根据批次号查询商品信息")
-    public BaseResponseInfo getMaterialByBatchNumber(@RequestParam("batchNumber") String batchNumber,
-                                                     @RequestParam(value = "organId", required = false) Long organId,
-                                                     @RequestParam(value = "depotId", required = false) Long depotId,
-                                                     @RequestParam("mpList") String mpList,
-                                                     @RequestParam(required = false, value = "prefixNo") String prefixNo,
-                                                     HttpServletRequest request) throws Exception {
-        BaseResponseInfo res = new BaseResponseInfo();
-        try {
-            Long userId = userService.getUserId(request);
-            String priceLimit = userService.getRoleTypeByUserId(userId).getPriceLimit();
-            String[] mpArr = mpList.split(",");
-            List<TaskStocktakingItemVO> list = materialService.getMaterialByBatchNumber(batchNumber);
-            res.code = 200;
-            res.data = list;
-        } catch(Exception e){
-            logger.error(e.getMessage(), e);
-            res.code = 500;
-            res.data = "获取数据失败";
-        }
-        return res;
+    public TableDataInfo getMaterialByBatchNumber(@RequestParam("batchNumber") String batchNumber){
+        String[] batchNumbers = batchNumber.split(",");
+        startPage();
+        List<TaskStocktakingItemVO> list = materialBatchService.getMaterialByBatchNumber(batchNumbers);
+        return getDataTable(list);
     }
 
     @GetMapping(value = "/getMaterialById")
@@ -915,8 +896,6 @@ public class MaterialController extends BaseController {
     }
 
 
-
-
     @GetMapping(value = "/getPositionByDidAndMid")
     @ApiOperation(value = "获取商品仓库库位")
     public AjaxResult getPositionByDidAndMid(@RequestParam(value = "did") Long did,

+ 3 - 5
src/main/java/com/jsh/erp/controller/materialBatch/MaterialBatchController.java

@@ -36,11 +36,10 @@ public class MaterialBatchController extends BaseController {
     private MaterialBatchService materialBatchService;
 
     @GetMapping(value = "/getDetailList")
-    @ApiOperation(value = "商品批次信息管理")
-    public TableDataInfo getDetailList(@RequestParam("materialId") Long materialId,
-                                       HttpServletRequest request)throws Exception {
+    @ApiOperation(value = "根据商品id获取批次信息")
+    public TableDataInfo getDetailList(@RequestParam("materialId") Long materialId){
         startPage();
-        List<MaterialBatch> list = materialBatchService.list(new LambdaQueryWrapperX<MaterialBatch>().eq(MaterialBatch::getMaterialId,materialId).eq(MaterialBatch::getDeleteFlag,"0"));
+        List<MaterialBatch> list = materialBatchService.list(new LambdaQueryWrapperX<MaterialBatch>().eq(MaterialBatch::getMaterialId,materialId));
         return getDataTable(list);
     }
 
@@ -50,7 +49,6 @@ public class MaterialBatchController extends BaseController {
     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());

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

@@ -137,7 +137,7 @@ public class PdaController extends BaseController {
 
     @ApiOperation("商品详情")
     @GetMapping("/materialDetail/{id}")
-    public AjaxResult materialDetail(@PathVariable("id") Long id) {
+    public AjaxResult materialDetail(@PathVariable("id") Long id) throws Exception {
         return AjaxResult.success(depotItemService.pdaDetail(id));
     }
 
@@ -158,7 +158,7 @@ public class PdaController extends BaseController {
     @PostMapping("/taskStocktakingList")
     public TableDataInfo taskStocktakingList(@RequestBody PDATaskStocktakingDTO pdaTaskStocktakingDTO) {
         startPage();
-        List<PDATaskStocktakingVO> list = taskStocktakingService.pdaList(pdaTaskStocktakingDTO.getNumber(), pdaTaskStocktakingDTO.getStatus());
+        List<PDATaskStocktakingVO> list = taskStocktakingService.pdaList(pdaTaskStocktakingDTO.getNumber(), pdaTaskStocktakingDTO.getStatus(), pdaTaskStocktakingDTO.getDepotId());
         return getDataTable(list);
     }
 
@@ -180,7 +180,7 @@ public class PdaController extends BaseController {
     /**
      * 获取商品类别树数据
      * @Param:
-     * @return com.alibaba.fastjson.JSONArray
+     * @return
      */
     @ApiOperation(value = "获取商品类别树数据")
     @GetMapping(value = "/getMaterialCategoryTree")
@@ -292,8 +292,8 @@ public class PdaController extends BaseController {
 
     @ApiOperation("存货查询-库位树查询")
     @GetMapping("/inventoryPositionTree")
-    public AjaxResult inventoryPositionTree() throws Exception {
-        return AjaxResult.success(materialService.selectPosition());
+    public AjaxResult inventoryPositionTree(@RequestParam("depotId") Long depotId) throws Exception {
+        return AjaxResult.success(materialService.selectPosition(depotId));
     }
 
     @ApiOperation("存货查询-类型树查询")
@@ -346,7 +346,7 @@ public class PdaController extends BaseController {
             }
         }
         HttpHeaders headers = new HttpHeaders();
-        headers.setContentLength(size); // 手动设置Content-Length为13字节
+        headers.setContentLength(size);
         return new ResponseEntity<>(null, headers, HttpStatus.OK);
     }
 

+ 7 - 0
src/main/java/com/jsh/erp/datasource/mappers/MaterialBatchMapper.java

@@ -2,6 +2,7 @@ package com.jsh.erp.datasource.mappers;
 
 import com.jsh.erp.datasource.entities.MaterialBatch;
 import com.jsh.erp.datasource.entities.MaterialVo4Unit;
+import com.jsh.erp.datasource.vo.TaskStocktakingItemVO;
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
@@ -36,4 +37,10 @@ public interface MaterialBatchMapper extends BaseMapperX<MaterialBatch> {
                                                   @Param("rows") Integer rows,
                                                   @Param("depotId") Long depotId);
 
+    /**
+     * 根据批次号数据查询盘点商品批次信息
+     * @param batchNumberArray 批次号数组
+     */
+    List<TaskStocktakingItemVO> getMaterialByBatchNumber(@Param("batchNumberArray") String [] batchNumberArray);
+
 }

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

@@ -32,7 +32,7 @@ public interface MaterialInitialStockMapper extends BaseMapperX<MaterialInitialS
     /**
      * 查询库位信息
      */
-    List<String> selectPosition();
+    List<String> selectPosition(@Param("depotId") Long depotId);
 
     /**
      * 根据库位获取商品id

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

@@ -164,8 +164,6 @@ public interface MaterialMapperEx {
     MaterialExtend getMaterialExtendBySerialNumber(
             @Param("serialNumber") String serialNumber);
 
-    List<TaskStocktakingItemVO> getMaterialByBatchNumber(@Param("batchNumberArray") String [] batchNumberArray);
-
     List<MaterialVo4Unit> getMaterialBySystemSku(@Param("systemSkuArray") String [] systemSkuArray);
 
     List<MaterialCurrentStock4SystemSku> getMaterialCurrentPriceByIdList(@Param("idList") List<Long> idList);

+ 1 - 1
src/main/java/com/jsh/erp/datasource/mappers/TaskStocktakingMapper.java

@@ -12,5 +12,5 @@ public interface TaskStocktakingMapper extends BaseMapperX<TaskStocktaking> {
 
     List<TaskStocktakingVO> listBy(TaskStocktakingQueryDTO taskStocktakingQueryDTO);
 
-    List<PDATaskStocktakingVO> pdaList(@Param("number") String number , @Param("taskStatus") Integer taskStatus);
+    List<PDATaskStocktakingVO> pdaList(@Param("number") String number , @Param("taskStatus") Integer taskStatus,@Param("depotId") Long depotId);
 }

+ 3 - 0
src/main/java/com/jsh/erp/datasource/pda/dto/PDAInventoryDTO.java

@@ -30,4 +30,7 @@ public class PDAInventoryDTO {
     @ApiModelProperty("商品ID集合")
     private List<Long> materialIds;
 
+    @ApiModelProperty("仓库id")
+    private Long depotId;
+
 }

+ 3 - 0
src/main/java/com/jsh/erp/datasource/pda/dto/PDATaskStocktakingDTO.java

@@ -21,4 +21,7 @@ public class PDATaskStocktakingDTO {
     @ApiModelProperty("库位")
     private String position;
 
+    @ApiModelProperty("仓库id")
+    private Long depotId;
+
 }

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

@@ -31,7 +31,7 @@ public interface DepotItemService extends IService<DepotItem> {
      * @param id 商品订单ID
      * @return
      */
-    PDADepotItemVO pdaDetail(Long id);
+    PDADepotItemVO pdaDetail(Long id) throws Exception;
 
     /**
      * 商品库存详情列表

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

@@ -5,6 +5,7 @@ import com.jsh.erp.datasource.entities.DepotItem;
 import com.jsh.erp.datasource.entities.MaterialBatch;
 import com.jsh.erp.datasource.entities.MaterialExtend;
 import com.jsh.erp.datasource.entities.MaterialVo4Unit;
+import com.jsh.erp.datasource.vo.TaskStocktakingItemVO;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -52,8 +53,15 @@ public interface MaterialBatchService extends IService<MaterialBatch> {
                                                   Integer offset, Integer rows, Long depotId) throws Exception;
 
     /**
-     * 获取批次号字符
+     * 根据商品条码获取商品批次信息
+     * @param barCodes 商品条码字符集合
      */
     List<MaterialBatch> findBySelectWithBarCode(String barCodes);
 
+    /**
+     * 根据批次号数组查询商品批次信息
+     * @param batchNumbers 批次号数组
+     */
+    List<TaskStocktakingItemVO> getMaterialByBatchNumber(String [] batchNumbers);
+
 }

+ 1 - 3
src/main/java/com/jsh/erp/service/MaterialService.java

@@ -180,8 +180,6 @@ public interface MaterialService extends IService<Material> {
 
     MaterialExtend getMaterialExtendBySerialNumber(String serialNumber);
 
-    List<TaskStocktakingItemVO> getMaterialByBatchNumber(String batchNumber);
-
     Material getMaterialById(Long id);
 
     List<MaterialVo4Unit> getMaterialBySystemSku(List<String> systemSkuList);
@@ -225,7 +223,7 @@ public interface MaterialService extends IService<Material> {
     /**
      * 查询库位树
      */
-    List<PDATypeTree> selectPosition();
+    List<PDATypeTree> selectPosition(Long depotId);
 
     /**
      * 获取仓库id、商品id获取商品库位信息

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

@@ -54,7 +54,7 @@ public interface TaskStocktakingService extends IService<TaskStocktaking> {
      * @param taskStatus 盘点任务状态
      * @return
      */
-    List<PDATaskStocktakingVO> pdaList(String number , Integer taskStatus);
+    List<PDATaskStocktakingVO> pdaList(String number , Integer taskStatus, Long depotId);
 
     /**
      * PAD-盘点任务详情

+ 12 - 3
src/main/java/com/jsh/erp/service/impl/DepotItemServiceImpl.java

@@ -114,8 +114,17 @@ public class DepotItemServiceImpl extends ServiceImpl<DepotItemMapper, DepotItem
      * @return
      */
     @Override
-    public PDADepotItemVO pdaDetail(Long id) {
-        return depotItemMapper.pdaDetail(id);
+    public PDADepotItemVO pdaDetail(Long id) throws Exception {
+        PDADepotItemVO itemVO = depotItemMapper.pdaDetail(id);
+        Unit unitInfo = materialService.findUnit(itemVO.getMaterialId()); //查询多单位信息
+        BigDecimal stock;
+        if (unitInfo != null && unitInfo.getId() != null){
+            stock = unitService.parseStockByUnit(materialService.getMaterialStockByMid(itemVO.getMaterialId()),unitInfo,itemVO.getCommodityUnit());
+        }else {
+            stock = materialService.getMaterialStockByMid(itemVO.getMaterialId());
+        }
+        itemVO.setInventory(stock.toString());
+        return itemVO;
     }
 
     /**
@@ -594,7 +603,7 @@ public class DepotItemServiceImpl extends ServiceImpl<DepotItemMapper, DepotItem
                     //入库或出库
                     if (BusinessConstants.DEPOTHEAD_TYPE_IN.equals(depotHead.getType()) ||
                             BusinessConstants.DEPOTHEAD_TYPE_OUT.equals(depotHead.getType())) {
-                        //序列号不能为空
+                        //序列号不能为空  先去掉校验
                         if (BusinessConstants.ENABLE_SERIAL_NUMBER_ENABLED.equals(material.getEnableSerialNumber())) {
                             //如果开启出入库管理,并且类型等于采购、采购退货、销售、销售退货,则跳过
                             if(systemConfigService.getInOutManageFlag() &&

+ 14 - 4
src/main/java/com/jsh/erp/service/impl/MaterialBatchServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jsh.erp.datasource.entities.*;
 import com.jsh.erp.datasource.mappers.MaterialBatchMapper;
 import com.jsh.erp.datasource.mappers.MaterialCategoryMapperEx;
+import com.jsh.erp.datasource.vo.TaskStocktakingItemVO;
 import com.jsh.erp.exception.JshException;
 import com.jsh.erp.query.LambdaQueryWrapperX;
 import com.jsh.erp.service.*;
@@ -155,9 +156,8 @@ public class MaterialBatchServiceImpl extends ServiceImpl<MaterialBatchMapper,Ma
     }
 
     /**
-     * 获取批次号字符
-     *
-     * @param barCodes
+     * 根据商品条码获取商品批次信息
+     * @param barCodes 商品条码字符集合
      */
     @Override
     public List<MaterialBatch> findBySelectWithBarCode(String barCodes) {
@@ -165,7 +165,17 @@ public class MaterialBatchServiceImpl extends ServiceImpl<MaterialBatchMapper,Ma
         if (barCodes != null && !barCodes.isEmpty()){
             barCodeList = Arrays.asList(barCodes.split(","));
         }
-        List<MaterialBatch> list = materialBatchMapper.selectList(new LambdaQueryWrapperX<MaterialBatch>().inIfPresent(MaterialBatch::getBarCode,barCodeList));
+        List<MaterialBatch> list = materialBatchMapper.selectList(new LambdaQueryWrapperX<MaterialBatch>().inIfPresent(MaterialBatch::getBarCode,barCodeList).gt(MaterialBatch::getInventory,BigDecimal.ZERO));
+        return list;
+    }
+
+    /**
+     * 根据批次号数组查询商品批次信息
+     * @param batchNumbers 批次号数组
+     */
+    @Override
+    public List<TaskStocktakingItemVO> getMaterialByBatchNumber(String[] batchNumbers) {
+        List<TaskStocktakingItemVO> list =  materialBatchMapper.getMaterialByBatchNumber(batchNumbers);
         return list;
     }
 

+ 14 - 0
src/main/java/com/jsh/erp/service/impl/MaterialExtendServiceImpl.java

@@ -5,12 +5,14 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jsh.erp.constants.BusinessConstants;
+import com.jsh.erp.constants.ExceptionConstants;
 import com.jsh.erp.datasource.dto.MaterialDto;
 import com.jsh.erp.datasource.entities.*;
 import com.jsh.erp.datasource.mappers.MaterialCurrentStockMapper;
 import com.jsh.erp.datasource.mappers.MaterialExtendMapper;
 import com.jsh.erp.datasource.mappers.MaterialExtendMapperEx;
 import com.jsh.erp.datasource.vo.MaterialExtendVo4List;
+import com.jsh.erp.exception.BusinessRunTimeException;
 import com.jsh.erp.exception.JshException;
 import com.jsh.erp.service.*;
 import com.jsh.erp.utils.DateUtils;
@@ -297,6 +299,12 @@ public class MaterialExtendServiceImpl extends ServiceImpl<MaterialExtendMapper,
         //添加条码
         if (!insertedList.isEmpty()) {
             for (MaterialExtend materialExtend : insertedList) {
+                //EXCEL中有条码在系统中已存在
+                MaterialExtend me = getInfoByBarCode(materialExtend.getBarCode());
+                if (me != null && !me.getBarCode().isEmpty()) {
+                    throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_PROPERTY_BARCODE_EXIST_CODE,
+                            String.format(ExceptionConstants.MATERIAL_PROPERTY_BARCODE_EXIST_MSG, materialExtend.getBarCode()));
+                }
                 //设置商品id
                 materialExtend.setMaterialId(materialId);
                 //添加数据
@@ -307,6 +315,12 @@ public class MaterialExtendServiceImpl extends ServiceImpl<MaterialExtendMapper,
         //修改拓展行
         if (!updatedList.isEmpty()) {
             for (MaterialExtend materialExtend : updatedList) {
+                //EXCEL中有条码在系统中已存在
+                MaterialExtend me = getInfoByBarCode(materialExtend.getBarCode());
+                if (me != null && !me.getBarCode().isEmpty()) {
+                    throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_PROPERTY_BARCODE_EXIST_CODE,
+                            String.format(ExceptionConstants.MATERIAL_PROPERTY_BARCODE_EXIST_MSG, materialExtend.getBarCode()));
+                }
                 //修改商品拓展
                 this.updateMaterialExtend(materialExtend);
             }

+ 4 - 15
src/main/java/com/jsh/erp/service/impl/MaterialServiceImpl.java

@@ -1609,17 +1609,6 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i
     }
 
     /**
-     * 根据批次号查询商品信息
-     * @param batchNumber 批次号
-     */
-    @Override
-    public List<TaskStocktakingItemVO> getMaterialByBatchNumber(String batchNumber) {
-        String [] batchNumberArray=batchNumber.split(",");
-        List<TaskStocktakingItemVO> list =  materialMapperEx.getMaterialByBatchNumber(batchNumberArray);
-        return list;
-    }
-
-    /**
      * 根据商品id查询主表及子表信息
      * @param id 商品id
      * @return
@@ -1979,16 +1968,16 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i
      * 查询库位树
      */
     @Override
-    public List<PDATypeTree> selectPosition() {
-        List<String> positions = materialInitialStockMapper.selectPosition();
+    public List<PDATypeTree> selectPosition(Long depotId) {
+        List<String> positions = materialInitialStockMapper.selectPosition(depotId);
         Map<String,List<String>> map = new HashMap<>();
         for (String s : positions) {
-            String [] str = s.split("-");
+            String [] str = s.split("-",2);
             if (map.get(str[0]) == null){
                 List<String> list = new ArrayList<>();
                 map.put(str[0],list);
             }
-            if (str.length > 2){
+            if (str.length > 1){
                 map.get(str[0]).add(str[1]);
             }
         }

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

@@ -236,8 +236,8 @@ public class TaskStocktakingServiceImpl extends ServiceImpl<TaskStocktakingMappe
      * @return
      */
     @Override
-    public List<PDATaskStocktakingVO> pdaList(String number , Integer taskStatus) {
-        return taskStocktakingMapper.pdaList(number , taskStatus);
+    public List<PDATaskStocktakingVO> pdaList(String number , Integer taskStatus, Long depotId) {
+        return taskStocktakingMapper.pdaList(number , taskStatus, depotId);
     }
 
     /**

+ 0 - 1589
src/main/java/com/jsh/erp/utils/StringHelper.java

@@ -1,1589 +0,0 @@
-package com.jsh.erp.utils;
-
-import java.io.UnsupportedEncodingException;
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.StringTokenizer;
-import java.util.UUID;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- *   
- * 
- * @Title: StringHelper.java
- * @Description:
- * @author HJJ
- * @version V1.0   字符串处理工具类。
- */
-public final class StringHelper {
-
-	/**
-	 * 描述: 构造方法
-	 */
-	private StringHelper() {
-	}
-
-	/**
-	 * 空字符串
-	 */
-	public static final String EMPTY_STRING = "";
-
-	/**
-	 * 点
-	 */
-	public static final char DOT = '.';
-
-	/**
-	 * 下划线
-	 */
-	public static final char UNDERSCORE = '_';
-
-	/**
-	 * 逗点及空格
-	 */
-	public static final String COMMA_SPACE = ", ";
-
-	/**
-	 * 逗点
-	 */
-	public static final String COMMA = ",";
-
-	/**
-	 * 开始括号
-	 */
-	public static final String OPEN_PAREN = "(";
-
-	/**
-	 * 结束括号
-	 */
-	public static final String CLOSE_PAREN = ")";
-
-	/**
-	 * 单引号
-	 */
-	public static final char SINGLE_QUOTE = '\'';
-
-	/**
-	 * 回车
-	 */
-	public static final String CRLF = "\r\n";
-
-	/**
-	 * 常量 12
-	 */
-	public static final int FIANL_TWELVE = 12;
-
-	/**
-	 * 十六进制常量 0x80
-	 */
-	public static final int HEX_80 = 0x80;
-
-	/**
-	 * 十六进制常量 0xff
-	 */
-	public static final int HEX_FF = 0xff;
-
-	/**
-	 * 把字符数组,转化为一个字符
-	 *
-	 * @param seperator
-	 *            字符分隔符
-	 * @param strings
-	 *            数组对象
-	 * @return 字符串
-	 */
-	public static String join(String seperator, String[] strings) {
-		int length = strings.length;
-		if (length == 0) {
-			return EMPTY_STRING;
-		}
-		StringBuffer buf = new StringBuffer(length * strings[0].length()).append(strings[0]);
-		for (int i = 1; i < length; i++) {
-			buf.append(seperator).append(strings[i]);
-		}
-		return buf.toString();
-	}
-
-	/**
-	 * 把迭代对象转化为一个字符串
-	 *
-	 * @param seperator
-	 *            分隔符
-	 * @param objects
-	 *            迭代器对象
-	 * @return 字符串
-	 */
-	public static String join(String seperator, Iterator<?> objects) {
-		StringBuffer buf = new StringBuffer();
-		if (objects.hasNext()) {
-			buf.append(objects.next());
-		}
-		while (objects.hasNext()) {
-			buf.append(seperator).append(objects.next());
-		}
-		return buf.toString();
-	}
-
-	/**
-	 * 把两个字符串数组的元素用分隔符连接,生成新的数组,生成的数组以第一个字符串数组为参照,与其长度相同。
-	 *
-	 * @param x
-	 *            字符串数组
-	 * @param seperator
-	 *            分隔符
-	 * @param y
-	 *            字符串数组
-	 * @return 组合后的字符串数组
-	 */
-	public static String[] add(String[] x, String seperator, String[] y) {
-		String[] result = new String[x.length];
-		for (int i = 0; i < x.length; i++) {
-			result[i] = x[i] + seperator + y[i];
-		}
-		return result;
-	}
-
-	/**
-	 * 生成一个重复的字符串,如需要重复*10次,则生成:**********。
-	 *
-	 * @param string
-	 *            重复元素
-	 * @param times
-	 *            重复次数
-	 * @return 生成后的字符串
-	 */
-	public static String repeat(String string, int times) {
-		StringBuffer buf = new StringBuffer(string.length() * times);
-		for (int i = 0; i < times; i++) {
-			buf.append(string);
-		}
-		return buf.toString();
-	}
-
-	/**
-	 * 字符串替换处理,把旧的字符串替换为新的字符串,主要是通过字符串查找进行处理
-	 *
-	 * @param source
-	 *            需要进行替换的字符串
-	 * @param old
-	 *            需要进行替换的字符串
-	 * @param replace
-	 *            替换成的字符串
-	 * @return 替换处理后的字符串
-	 */
-	public static String replace(String source, String old, String replace) {
-		StringBuffer output = new StringBuffer();
-
-		int sourceLen = source.length();
-		int oldLen = old.length();
-
-		int posStart = 0;
-		int pos;
-
-		// 通过截取字符串的方式,替换字符串
-		while ((pos = source.indexOf(old, posStart)) >= 0) {
-			output.append(source.substring(posStart, pos));
-
-			output.append(replace);
-			posStart = pos + oldLen;
-		}
-
-		// 如果还有没有处理的字符串,则都添加到新字符串后面
-		if (posStart < sourceLen) {
-			output.append(source.substring(posStart));
-		}
-
-		return output.toString();
-	}
-
-	/**
-	 * 替换字符,如果指定进行全替换,必须设wholeWords=true,否则只替换最后出现的字符。
-	 *
-	 * @param template
-	 *            字符模板
-	 * @param placeholder
-	 *            需要替换的字符
-	 * @param replacement
-	 *            新的字符
-	 * @param wholeWords
-	 *            是否需要全替换,true为需要,false为不需要。如果不需要,则只替换最后出现的字符。
-	 * @return 替换后的新字符
-	 */
-	public static String replace(String template, String placeholder, String replacement, boolean wholeWords) {
-		int loc = template.indexOf(placeholder);
-		if (loc < 0) {
-			return template;
-		} else {
-			final boolean actuallyReplace = wholeWords || loc + placeholder.length() == template.length()
-					|| !Character.isJavaIdentifierPart(template.charAt(loc + placeholder.length()));
-			String actualReplacement = actuallyReplace ? replacement : placeholder;
-			return new StringBuffer(template.substring(0, loc)).append(actualReplacement).append(
-					replace(template.substring(loc + placeholder.length()), placeholder, replacement, wholeWords))
-					.toString();
-		}
-	}
-
-	/**
-	 * 替换字符,只替换第一次出现的字符串。
-	 *
-	 * @param template
-	 *            字符模板
-	 * @param placeholder
-	 *            需要替换的字符串
-	 * @param replacement
-	 *            新字符串
-	 * @return 替换后的字符串
-	 */
-	public static String replaceOnce(String template, String placeholder, String replacement) {
-		int loc = template.indexOf(placeholder);
-		if (loc < 0) {
-			return template;
-		} else {
-			return new StringBuffer(template.substring(0, loc)).append(replacement)
-					.append(template.substring(loc + placeholder.length())).toString();
-		}
-	}
-
-	/**
-	 * 把字符串,按指字的分隔符分隔为字符串数组
-	 *
-	 * @param seperators
-	 *            分隔符
-	 * @param list
-	 *            字符串
-	 * @return 字符串数组
-	 */
-	public static String[] split(String list, String seperators) {
-		return split(list, seperators, false);
-	}
-
-	/**
-	 * 把字符串,按指字的分隔符分隔为字符串数组
-	 *
-	 * @param seperators
-	 *            分隔符
-	 * @param list
-	 *            字符串
-	 * @param include
-	 *            是否需要把分隔符也返回
-	 * @return 字符串数组
-	 */
-	public static String[] split(String list, String seperators, boolean include) {
-		StringTokenizer tokens = new StringTokenizer(list, seperators, include);
-		String[] result = new String[tokens.countTokens()];
-		int i = 0;
-		while (tokens.hasMoreTokens()) {
-			result[i++] = tokens.nextToken();
-		}
-		return result;
-	}
-
-	/**
-	 * 提取字符串中,以.为分隔符后的所有字符,如string.exe,将返回exe。
-	 *
-	 * @param qualifiedName
-	 *            字符串
-	 * @return 提取后的字符串
-	 */
-	public static String unqualify(String qualifiedName) {
-		return unqualify(qualifiedName, ".");
-	}
-
-	/**
-	 * 提取字符串中,以指定分隔符后的所有字符,如string.exe,将返回exe。
-	 *
-	 * @param qualifiedName
-	 *            字符串
-	 * @param seperator
-	 *            分隔符
-	 * @return 提取后的字符串
-	 */
-	public static String unqualify(String qualifiedName, String seperator) {
-		return qualifiedName.substring(qualifiedName.lastIndexOf(seperator) + 1);
-	}
-
-	/**
-	 * 提取字符串中,以.为分隔符以前的字符,如string.exe,则返回string
-	 *
-	 * @param qualifiedName
-	 *            字符串
-	 * @return 提取后的字符串
-	 */
-	public static String qualifier(String qualifiedName) {
-		int loc = qualifiedName.lastIndexOf(".");
-		if (loc < 0) {
-			return EMPTY_STRING;
-		} else {
-			return qualifiedName.substring(0, loc);
-		}
-	}
-
-	/**
-	 * 向字符串数组中的所有元素添加上后缀
-	 *
-	 * @param columns
-	 *            字符串数组
-	 * @param suffix
-	 *            后缀
-	 * @return 添加后缀后的数组
-	 */
-	public static String[] suffix(String[] columns, String suffix) {
-		if (suffix == null) {
-			return columns;
-		}
-		String[] qualified = new String[columns.length];
-		for (int i = 0; i < columns.length; i++) {
-			qualified[i] = suffix(columns[i], suffix);
-		}
-		return qualified;
-	}
-
-	/**
-	 * 向字符串加上后缀
-	 *
-	 * @param name
-	 *            需要添加后缀的字符串
-	 * @param suffix
-	 *            后缀
-	 * @return 添加后缀的字符串
-	 */
-	public static String suffix(String name, String suffix) {
-		return (suffix == null) ? name : name + suffix;
-	}
-
-	/**
-	 * 向字符串数组中的所有元素,添加上前缀
-	 *
-	 * @param columns
-	 *            需要添加前缀的字符串数组
-	 * @param prefix
-	 *            prefix
-	 * @return
-	 */
-	public static String[] prefix(String[] columns, String prefix) {
-		if (prefix == null) {
-			return columns;
-		}
-		String[] qualified = new String[columns.length];
-		for (int i = 0; i < columns.length; i++) {
-			qualified[i] = prefix + columns[i];
-		}
-		return qualified;
-	}
-
-	/**
-	 * 向字符串添加上前缀
-	 *
-	 * @param name
-	 *            需要添加前缀的字符串
-	 * @param prefix
-	 *            前缀
-	 * @return 添加前缀后的字符串
-	 */
-	public static String prefix(String name, String prefix) {
-		return (prefix == null) ? name : prefix + name;
-	}
-
-	/**
-	 * 判断字符串是否为"true"、"t",如果是,返回true,否则返回false
-	 *
-	 * @param tfString
-	 *            需要进行判断真/假的字符串
-	 * @return true/false
-	 */
-	public static boolean booleanValue(String tfString) {
-		String trimmed = tfString.trim().toLowerCase();
-		return trimmed.equals("true") || trimmed.equals("t");
-	}
-
-	/**
-	 * 把对象数组转化为字符串
-	 *
-	 * @param array
-	 *            对象数组
-	 * @return 字符串
-	 */
-	public static String toString(Object[] array) {
-		int len = array.length;
-		if (len == 0) {
-			return StringHelper.EMPTY_STRING;
-		}
-		StringBuffer buf = new StringBuffer(len * FIANL_TWELVE);
-		for (int i = 0; i < len - 1; i++) {
-			buf.append(array[i]).append(StringHelper.COMMA_SPACE);
-		}
-		return buf.append(array[len - 1]).toString();
-	}
-
-	/**
-	 * 描述:把数组中的所有元素出现的字符串进行替换,把旧字符串替换为新字符数组的所有元素,只替换第一次出现的字符。
-	 * 
-	 * @param string
-	 *            需要替换的数组
-	 * @param placeholders
-	 *            需要替换的字符串
-	 * @param replacements
-	 *            新字符串数组
-	 * @return 替换后的字符串数组
-	 */
-	public static String[] multiply(String string, Iterator<?> placeholders, Iterator<?> replacements) {
-		String[] result = new String[] { string };
-		while (placeholders.hasNext()) {
-			result = multiply(result, (String) placeholders.next(), (String[]) replacements.next());
-		}
-		return result;
-	}
-
-	/**
-	 * 把数组中的所有元素出现的字符串进行替换,把旧字符串替换为新字符数组的所有元素,只替换第一次出现的字符。
-	 *
-	 * @param strings
-	 *            需要替换的数组
-	 * @param placeholder
-	 *            需要替换的字符串
-	 * @param replacements
-	 *            新字符串数组
-	 * @return 替换后的字符串数组
-	 */
-	private static String[] multiply(String[] strings, String placeholder, String[] replacements) {
-		String[] results = new String[replacements.length * strings.length];
-		int n = 0;
-		for (int i = 0; i < replacements.length; i++) {
-			for (int j = 0; j < strings.length; j++) {
-				results[n++] = replaceOnce(strings[j], placeholder, replacements[i]);
-			}
-		}
-		return results;
-	}
-
-	/**
-	 * 统计Char在字符串中出现在次数,如"s"在字符串"string"中出现的次数
-	 *
-	 * @param string
-	 *            字符串
-	 * @param character
-	 *            需要进行统计的char
-	 * @return 数量
-	 */
-	public static int count(String string, char character) {
-		int n = 0;
-		for (int i = 0; i < string.length(); i++) {
-			if (string.charAt(i) == character) {
-				n++;
-			}
-		}
-		return n;
-	}
-
-	/**
-	 * 描述:计算字符串中未引用的字符
-	 * 
-	 * @param string
-	 *            字符串
-	 * @param character
-	 *            字符
-	 * @return 未引用的字符数
-	 */
-	public static int countUnquoted(String string, char character) {
-		if (SINGLE_QUOTE == character) {
-			throw new IllegalArgumentException("Unquoted count of quotes is invalid");
-		}
-
-		int count = 0;
-		int stringLength = string == null ? 0 : string.length();
-		boolean inQuote = false;
-		for (int indx = 0; indx < stringLength; indx++) {
-			if (inQuote) {
-				if (SINGLE_QUOTE == string.charAt(indx)) {
-					inQuote = false;
-				}
-			} else if (SINGLE_QUOTE == string.charAt(indx)) {
-				inQuote = true;
-			} else if (string.charAt(indx) == character) {
-				count++;
-			}
-		}
-		return count;
-	}
-
-	/**
-	 * 
-	 * 描述:描述:判断字符串是否为空,如果为true则为空。与isEmpty不同,如果字符为" "也视为空字符
-	 * 
-	 * @param str
-	 *            字符串
-	 * @return
-	 */
-	public static boolean isBlank(String str) {
-		boolean b = true;// 20140507 modify by liwei 修复对" "为false的bug
-		if (str == null) {
-			b = true;
-		} else {
-			int strLen = str.length();
-			if (strLen == 0) {
-				b = true;
-			}
-
-			for (int i = 0; i < strLen; i++) {
-				if (!Character.isWhitespace(str.charAt(i))) {
-					b = false;
-					break;
-				}
-			}
-		}
-
-		return b;
-	}
-
-	/**
-	 * 
-	 * 描述:描述:判断字符串是否为空,如果为true则不为空。与isNotEmpty不同,如果字符为" "也视为空字符
-	 * 
-	 * @param str
-	 *            字符串
-	 * @return
-	 */
-	public static boolean isNotBlank(String str) {
-		int strLen = 0;
-		if (str != null)
-			strLen = str.length();
-		if (str == null || strLen == 0) {
-			return false;
-		}
-		for (int i = 0; i < strLen; i++) {
-			if (!Character.isWhitespace(str.charAt(i))) {
-				return true;
-			}
-		}
-
-		return false;
-	}
-
-	/**
-	 * 判断字符串是否非空,如果为true则不为空
-	 *
-	 * @param string
-	 *            字符串
-	 * @return true/false
-	 */
-	public static boolean isNotEmpty(String string) {
-		return string != null && string.length() > 0;
-	}
-
-	/**
-	 * 判断字符串是否空,如果为true则为空
-	 *
-	 * @param str
-	 *            字符串
-	 * @return true/false
-	 */
-
-	public static boolean isEmpty(String str) {
-		if (str == null || str.trim().length() == 0) {
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * 向字符串添加上前缀,并以.作为分隔符
-	 *
-	 * @param name
-	 *            需要添加前缀的字符串
-	 * @param prefix
-	 *            前缀
-	 * @return 添加前缀后的字符串
-	 */
-	public static String qualify(String name, String prefix) {
-		if (name.startsWith("'")) {
-			return name;
-		}
-
-		return new StringBuffer(prefix.length() + name.length() + 1).append(prefix).append(DOT).append(name).toString();
-	}
-
-	/**
-	 * 向字符串数组中的所有字符添加上前缀,前以点作为分隔符
-	 *
-	 * @param names
-	 *            字符串数组
-	 * @param prefix
-	 *            前缀
-	 * @return 添加前缀后的字符串数组
-	 */
-	public static String[] qualify(String[] names, String prefix) {
-		if (prefix == null) {
-			return names;
-		}
-		int len = names.length;
-		String[] qualified = new String[len];
-		for (int i = 0; i < len; i++) {
-			qualified[i] = qualify(prefix, names[i]);
-		}
-		return qualified;
-	}
-
-	/**
-	 * 在字符串中,查找字符第一次出现的位置
-	 *
-	 * @param sqlString
-	 *            原字符串
-	 * @param string
-	 *            需要查找到字符串
-	 * @param startindex
-	 *            开始位置
-	 * @return 第一个出现的位置
-	 */
-	public static int firstIndexOfChar(String sqlString, String string, int startindex) {
-		int matchAt = -1;
-		for (int i = 0; i < string.length(); i++) {
-			int curMatch = sqlString.indexOf(string.charAt(i), startindex);
-			if (curMatch >= 0) {
-				if (matchAt == -1) {
-					matchAt = curMatch;
-				} else {
-					matchAt = Math.min(matchAt, curMatch);
-				}
-			}
-		}
-		return matchAt;
-	}
-
-	/**
-	 * 从字符串中提取指字长度的字符。区分中英文。<br>
-	 * 如果需要加省略号,则将在指定长度上少取3个字符宽度,末尾加上"......"。
-	 *
-	 * @param string
-	 *            字符串
-	 * @param length
-	 *            要取的字符长度,此为中文长度,英文仅当作半个字符。
-	 * @param appendSuspensionPoints
-	 *            是否需要加省略号
-	 * @return 提取后的字符串
-	 */
-	public static String truncate(String string, int length, boolean appendSuspensionPoints) {
-		if (isEmpty(string) || length < 0) {
-			return string;
-		}
-
-		if (length == 0) {
-			return "";
-		}
-
-		int strLength = string.length(); // 字符串字符个数
-		int byteLength = byteLength(string); // 字符串字节长度
-		length *= 2; // 换成字节长度
-
-		// 判断是否需要加省略号
-		boolean needSus = false;
-		if (appendSuspensionPoints && byteLength >= length) {
-			needSus = true;
-
-			// 如果需要加省略号,则要少取2个字节用来加省略号
-			length -= 2;
-		}
-
-		StringBuffer result = new StringBuffer();
-		int count = 0;
-		for (int i = 0; i < strLength; i++) {
-			if (count >= length) { // 取完了
-				break;
-			}
-
-			char c = string.charAt(i);
-
-			if (isLetter(c)) { // Ascill字符
-				result.append(c);
-				count += 1;
-			} else { // 非Ascill字符
-				if (count == length - 1) { // 如果只要取1个字节了,而后面1个是汉字,就放空格
-					result.append(" ");
-					count += 1;
-				} else {
-					result.append(c);
-					count += 2;
-				}
-			}
-		}
-
-		if (needSus) {
-			result.append("...");
-		}
-
-		return result.toString();
-	}
-
-	/**
-	 * 描述:判断一个字符是Ascill字符还是其它字符(如汉,日,韩文字符)
-	 * 
-	 * @param c
-	 *            需要判断的字符
-	 * @return
-	 */
-	public static boolean isLetter(char c) {
-		int k = HEX_80;
-		return c / k == 0 ? true : false;
-	}
-
-	/**
-	 * 得到一个字符串的长度,显示的长度,一个汉字或日韩文长度为2,英文字符长度为1
-	 *
-	 * @param s
-	 *            ,需要得到长度的字符串
-	 * @return int, 得到的字符串长度
-	 */
-	public static int byteLength(String s) {
-		char[] c = s.toCharArray();
-		int len = 0;
-		for (int i = 0; i < c.length; i++) {
-			if (isLetter(c[i])) {
-				len++;
-			} else {
-				len += 2;
-			}
-		}
-		return len;
-	}
-
-	/**
-	 * 从字符串中提取指字长度的字符
-	 *
-	 * @param string
-	 *            字符串
-	 * @param length
-	 *            字符长度
-	 * @return 提取后的字符串
-	 */
-	public static String truncate(String string, int length) {
-		if (isEmpty(string)) {
-			return string;
-		}
-
-		if (string.length() <= length) {
-			return string;
-		} else {
-			return string.substring(0, length);
-		}
-	}
-
-	/**
-	 * 去丢字符的左侧空格
-	 *
-	 * @param value
-	 *            字符串
-	 * @return 去丢左侧空格后的字符串
-	 */
-	public static String leftTrim(String value) {
-		String result = value;
-		if (result == null) {
-			return result;
-		}
-		char ch[] = result.toCharArray();
-		int index = -1;
-		for (int i = 0; i < ch.length; i++) {
-			if (!Character.isWhitespace(ch[i])) {
-				break;
-			}
-			index = i;
-		}
-
-		if (index != -1) {
-			result = result.substring(index + 1);
-		}
-		return result;
-	}
-
-	/**
-	 * 去丢字符的右侧空格
-	 *
-	 * @param value
-	 *            字符串
-	 * @return 去右侧空格后的字符串
-	 */
-	public static String rightTrim(String value) {
-		String result = value;
-		if (result == null) {
-			return result;
-		}
-		char ch[] = result.toCharArray();
-		int endIndex = -1;
-		for (int i = ch.length - 1; i > -1; i--) {
-			if (!Character.isWhitespace(ch[i])) {
-				break;
-			}
-			endIndex = i;
-		}
-
-		if (endIndex != -1) {
-			result = result.substring(0, endIndex);
-		}
-		return result;
-	}
-
-	/**
-	 * 把null字符串转化为""
-	 *
-	 * @param source
-	 *            空字符串
-	 * @return 转化后的字符串
-	 */
-	public static String n2s(String source) {
-		return source != null ? source : "";
-	}
-
-	/**
-	 * 如果字符串为空,则返回默认字符串
-	 *
-	 * @param source
-	 *            源字符串
-	 * @param defaultStr
-	 *            默认字符串
-	 * @return 转换后的字符串
-	 */
-	public static String n2s(String source, String defaultStr) {
-		return source != null ? source : defaultStr;
-	}
-
-	/**
-	 * 将字符串格式化成 HTML 以SCRIPT变量 主要是替换单,双引号,以将内容格式化输出,适合于 HTML 中的显示输出
-	 *
-	 * @param str
-	 *            要格式化的字符串
-	 * @return 格式化后的字符串
-	 */
-	public static String toScript(String str) {
-		if (str == null) {
-			return null;
-		}
-
-		String html = new String(str);
-
-		html = replace(html, "\"", "\\\"");
-		html = replace(html, "\r\n", "\n");
-		html = replace(html, "\n", "\\n");
-		html = replace(html, "\t", "    ");
-		html = replace(html, "\'", "\\\'");
-
-		html = replace(html, "  ", " &nbsp;");
-
-		html = replace(html, "</script>", "<\\/script>");
-		html = replace(html, "</SCRIPT>", "<\\/SCRIPT>");
-
-		return html;
-	}
-
-	/**
-	 * 同于String#trim(),但是检测null,如果原字符串为null,则仍然返回null
-	 *
-	 * @param s
-	 *            s
-	 * @return
-	 */
-	public static String trim(String s) {
-		return s == null ? s : s.trim();
-	}
-
-	/**
-	 * 对字符串进行空格处理,如果字符串为null呀是空字符串, 则返回默认的数字。
-	 *
-	 * @param source
-	 *            需要进行处理的字符串
-	 * @param defaultValue
-	 *            缺省值
-	 * @return 字符串的数字值
-	 */
-	public static int strTrim(String source, int defaultValue) {
-		if (isEmpty(source)) {
-			return defaultValue;
-		}
-		try {
-			source = source.trim();
-			int value = (new Integer(source)).intValue();
-			return value;
-		} catch (Exception ex) {
-			ex.printStackTrace();
-			System.err.println("数字转换出错,请检查数据来源。返回默认值");
-			return defaultValue;
-		}
-	}
-
-	/**
-	 * 对字符串进行过滤处理,如果字符串是null或为空字符串, 返回默认值。
-	 *
-	 * @param source
-	 *            需要进行处理的字符串
-	 * @param defaultValue
-	 *            缺省值
-	 * @return 过滤后的字符串
-	 */
-	public static String strTrim(String source, String defaultValue) {
-		if (StringHelper.isEmpty(source)) {
-			return defaultValue;
-		}
-		try {
-			source = source.trim();
-			return source;
-		} catch (Exception ex) {
-			ex.printStackTrace();
-			System.err.println("字符串去空格失败,返回默认值");
-			return defaultValue;
-		}
-	}
-
-	/**
-	 * 描述:为了防止跨站脚本攻击,转换<>这种尖括号。
-	 * 
-	 * @param source
-	 * @return
-	 */
-	public static String encodeURL(String source) {
-		if (source == null) {
-			return null;
-		}
-		String html = new String(source);
-		html = replace(html, "<", "&lt;");
-		html = replace(html, ">", "&gt;");
-		html = replace(html, "\"", "&quot;");
-		html = replace(html, " ", "&nbsp;");
-		html = replace(html, "\'", "&acute;");
-		html = replace(html, "\\", "&#092;");
-		html = replace(html, "&", "&amp;");
-		html = replace(html, "\r", "");
-		html = replace(html, "\n", "");
-		html = replace(html, "(", "&#40;");
-		html = replace(html, ")", "&#41;");
-		html = replace(html, "[", "&#91;");
-		html = replace(html, "]", "&#93;");
-		html = replace(html, ";", "&#59;");
-		html = replace(html, "/", "&#47;");
-
-		return html;
-	}
-
-	/**
-	 * 把字符串中一些特定的字符转换成html字符,如&、<、>、"号等
-	 *
-	 * @param source
-	 *            需要进行处理的字符串
-	 * @return 处理后的字符串
-	 */
-	public static String encodeHtml(String source) {
-		if (source == null) {
-			return null;
-		}
-
-		String html = new String(source);
-
-		html = replace(html, "&", "&amp;");
-		html = replace(html, "<", "&lt;");
-		html = replace(html, ">", "&gt;");
-		html = replace(html, "\"", "&quot;");
-		html = replace(html, " ", "&nbsp;");
-		html = replace(html, "\'", "&acute;");
-		return html;
-	}
-
-	/**
-	 * 把一些html的字符串还原
-	 *
-	 * @param source
-	 *            需要进行处理的字符串
-	 * @return 处理后的字符串
-	 */
-	public static String decodeHtml(String source) {
-		if (source == null) {
-			return null;
-		}
-
-		String html = new String(source);
-
-		html = replace(html, "&amp;", "&");
-		html = replace(html, "&lt;", "<");
-		html = replace(html, "&gt;", ">");
-		html = replace(html, "&quot;", "\"");
-		html = replace(html, " ", "&nbsp;");
-
-		html = replace(html, "\r\n", "\n");
-		html = replace(html, "\n", "<br>\n");
-		html = replace(html, "\t", "    ");
-		html = replace(html, "  ", " &nbsp;");
-
-		return html;
-	}
-
-	/**
-	 * 判断字符串是否为布尔值,如true/false等
-	 *
-	 * @param source
-	 *            需要进行判断的字符串
-	 * @return 返回字符串的布尔值
-	 */
-	public static boolean isBoolean(String source) {
-		if (source.equalsIgnoreCase("true") || source.equalsIgnoreCase("false")) {
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * 去除字符串中的最后字符
-	 *
-	 * @param str
-	 *            原字符串
-	 * @param strMove
-	 *            要去除字符 比如","
-	 * @return 去除后的字符串
-	 */
-	public static String lastCharTrim(String str, String strMove) {
-		if (isEmpty(str)) {
-			return "";
-		}
-
-		String newStr = "";
-		if (str.lastIndexOf(strMove) != -1 && str.lastIndexOf(strMove) == str.length() - 1) {
-			newStr = str.substring(0, str.lastIndexOf(strMove));
-		}
-		return newStr;
-	}
-
-	/**
-	 * 清除字符串里的html代码
-	 *
-	 * @param html
-	 *            需要进行处理的字符串
-	 * @return 清除html后的代码
-	 */
-	public static String clearHtml(String html) {
-		if (isEmpty(html)) {
-			return "";
-		}
-
-		String patternStr = "(<[^>]*>)";
-		Pattern pattern = Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);
-		Matcher matcher = null;
-		StringBuffer bf = new StringBuffer();
-		try {
-			matcher = pattern.matcher(html);
-			boolean first = true;
-			int start = 0;
-			int end = 0;
-			while (matcher.find()) {
-				start = matcher.start(1);
-				if (first) {
-					bf.append(html.substring(0, start));
-					first = false;
-				} else {
-					bf.append(html.substring(end, start));
-				}
-
-				end = matcher.end(1);
-			}
-			if (end < html.length()) {
-				bf.append(html.substring(end));
-			}
-			html = bf.toString();
-			return html;
-		} catch (Exception ex) {
-			ex.printStackTrace();
-			System.err.println("清除html标签失败");
-		} finally {
-			pattern = null;
-			matcher = null;
-		}
-		return html;
-	}
-
-	/**
-	 * 把文件格式转换为html格式
-	 *
-	 * @param content
-	 *            转换的内容
-	 * @return
-	 */
-	public static String textFmtToHtmlFmt(String content) {
-		content = StringHelper.replace(content, " ", "&nbsp;");
-		content = StringHelper.replace(content, "\r\n", "<br>");
-		content = StringHelper.replace(content, "\n", "<br>");
-
-		return content;
-	}
-
-	/**
-	 * 
-	 * 描述:大写英文字母转换成小写
-	 * 
-	 * @param strIn
-	 *            字符串参数
-	 * @return
-	 */
-	public static String toLowerStr(String strIn) {
-		String strOut = new String(); // 输出的字串
-		int len = strIn.length(); // 参数的长度
-		int i = 0; // 计数器
-		char ch; // 存放参数的字符
-
-		while (i < len) {
-			ch = strIn.charAt(i);
-
-			if (ch >= 'A' && ch <= 'Z') {
-				ch = (char) (ch - 'A' + 'a');
-			}
-
-			strOut += ch;
-			i++;
-		}
-		return strOut;
-	}
-
-	/**
-	 * 
-	 * 描述:小写英文字母转换成大写
-	 * 
-	 * @param strIn
-	 *            字符串参数
-	 * @return
-	 */
-	public static String toUpperStr(String strIn) {
-		String strOut = new String(); // 输出的字串
-		int len = strIn.length(); // 参数的长度
-		int i = 0; // 计数器
-		char ch; // 存放参数的字符
-
-		while (i < len) {
-			ch = strIn.charAt(i);
-
-			if (ch >= 'a' && ch <= 'z') {
-				ch = (char) (ch - 'a' + 'A');
-			}
-
-			strOut += ch;
-			i++;
-		}
-		return strOut;
-	}
-
-	/**
-	 * 货币缩写,提供亿和万两个单位,并精确到小数点2位 切换到新的算法:对数算法
-	 * 
-	 * @param original
-	 * @return
-	 */
-	public static String currencyShortFor(String original) {
-		if (StringHelper.isBlank(original)) {
-			return "";
-		} else {
-			String shortFor = "";
-			double shortForValue = 0;
-			DecimalFormat df = new DecimalFormat("#.00");
-
-			try {
-				double account = Double.parseDouble(original);
-				if (account / 100000000 > 1) {
-					shortForValue = account / 100000000;
-					shortFor = df.format(shortForValue) + "亿";
-				} else if (account / 10000 > 1) {
-					shortForValue = account / 10000;
-					shortFor = df.format(shortForValue) + "万";
-				} else {
-					shortFor = original;
-				}
-			} catch (NumberFormatException e) {
-				e.printStackTrace();
-				System.err.println("字符串[" + original + "]转换成数字出错");
-			}
-
-			return shortFor;
-		}
-	}
-
-	/**
-	 * 将日期格式由yyyyMMdd装换为yyyy-MM-dd
-	 * 
-	 * @param date
-	 *            Date string whose format is yyyyMMdd.
-	 * @return
-	 */
-	public static String formatDate(String date) {
-		if (isBlank(date) || date.length() < 8) {
-			return "";
-		}
-		StringBuffer dateBuf = new StringBuffer();
-		dateBuf.append(date.substring(0, 4));
-		dateBuf.append("-");
-		dateBuf.append(date.substring(4, 6));
-		dateBuf.append("-");
-		dateBuf.append(date.substring(6, 8));
-		return dateBuf.toString();
-	}
-
-	/**
-	 * 判断是否为整数
-	 * 
-	 * @param str
-	 *            传入的字符串
-	 * @return 是整数返回true,否则返回false
-	 */
-	public static boolean isInteger(String str) {
-		Pattern pattern = Pattern.compile("^\\d+(\\.0)?$", Pattern.CASE_INSENSITIVE);
-		return pattern.matcher(str).matches();
-
-	}
-
-	/**
-	 * 用于=中英文混排标题中限定字符串长度。保证显示长度最多只相差一个全角字符。
-	 * 
-	 * @param string
-	 *            需要截取的字符串
-	 * @param byteCount
-	 *            字节数(度量标准为中文为两个字节,ASCII字符为一个字节,这样子,刚好匹配ASCII为半角字符,而中文为全角字符,
-	 *            保证在网页上中英文混合的句子长度一致)
-	 * @return
-	 * @throws UnsupportedEncodingException
-	 */
-	public static String substring(String string, int byteCount) throws UnsupportedEncodingException {
-		if (isBlank(string)) {
-			return string;
-		}
-		byte[] bytes = string.getBytes("Unicode");// 使用UCS-2编码.
-		int viewBytes = 0; // 表示当前的字节数(英文为单字节,中文为双字节的表示方法)
-		int ucs2Bytes = 2; // 要截取的字节数,从第3个字节开始,前两位为位序。(UCS-2的表示方法)
-		// UCS-2每个字符使用两个字节来编码。
-		// ASCII n+=1,i+=2
-		// 中文 n+=2,i+=2
-		for (; ucs2Bytes < bytes.length && viewBytes < byteCount; ucs2Bytes++) {
-			// 奇数位置,如3、5、7等,为UCS2编码中两个字节的第二个字节
-			if (ucs2Bytes % 2 == 1) {
-				viewBytes++; // 低字节,无论中英文,都算一个字节。
-			} else {
-				// 当UCS2编码的第一个字节不等于0时,该UCS2字符为汉字,一个汉字算两个字节
-				// 高位时,仅中文的高位算一字节。
-				if (bytes[ucs2Bytes] != 0) {
-					viewBytes++;
-				}
-			}
-		}
-		// 截一半的汉字要保留
-		if (ucs2Bytes % 2 == 1) {
-			ucs2Bytes = ucs2Bytes + 1;
-		}
-		String result = new String(bytes, 0, ucs2Bytes, "Unicode");// 将字节流转换为java默认编码UTF-8的字符串
-		if (bytes.length > ucs2Bytes) {
-			result += "...";
-		}
-		return result;
-	}
-
-	/**
-	 * 描述:根据长度截断字串
-	 * 
-	 * @param str
-	 *            字串
-	 * @param length
-	 *            截取长度
-	 * @return
-	 */
-	public static String[] splite(String str, int length) {
-		if (StringHelper.isEmpty(str)) {
-			return null;
-		}
-		String[] strArr = new String[(str.length() + length - 1) / length];
-		for (int i = 0; i < strArr.length; i++) {
-			if (str.length() > i * length + length - 1) {
-				strArr[i] = str.substring(i * length, i * length + length - 1);
-			} else {
-				strArr[i] = str.substring(i * length);
-			}
-		}
-		return strArr;
-	}
-
-	/**
-	 * 描述:把某一个字符变成大写
-	 * 
-	 * @param str
-	 *            str 字串
-	 * @param index
-	 *            第几个字符
-	 * @return
-	 */
-	public static String toUpOneChar(String str, int index) {
-		return toUpOrLowOneChar(str, index, 1);
-	}
-
-	/**
-	 * 描述:把某一个字符变成小写 作者:李建 时间:Dec 17, 2010 9:42:32 PM
-	 * 
-	 * @param str
-	 *            str 字串
-	 * @param index
-	 *            第几个字符
-	 * @return
-	 */
-	public static String toLowOneChar(String str, int index) {
-		return toUpOrLowOneChar(str, index, 0);
-	}
-
-	/**
-	 * 描述:把某一个字符变成大写或小写 作者:李建 时间:Dec 17, 2010 9:39:32 PM
-	 * 
-	 * @param str
-	 *            字串
-	 * @param index
-	 *            第几个字符
-	 * @param upOrLow
-	 *            大小写 1:大写;0小写
-	 * @return
-	 */
-	public static String toUpOrLowOneChar(String str, int index, int upOrLow) {
-		if (StringHelper.isNotEmpty(str) && index > -1 && index < str.length()) {
-			char[] chars = str.toCharArray();
-			if (upOrLow == 1) {
-				chars[index] = Character.toUpperCase(chars[index]);
-			} else {
-				chars[index] = Character.toLowerCase(chars[index]);
-			}
-			return new String(chars);
-		}
-		return str;
-	}
-
-	/**
-	 * 将字符串用分隔符断裂成字符串列表
-	 * 
-	 * @param value
-	 *            原字符串
-	 * @param separator
-	 *            分隔字符
-	 * @return 结果列表
-	 */
-	public static List<String> split2List(String value, String separator) {
-		List<String> ls = new ArrayList<String>();
-		int i = 0, j = 0;
-		while ((i = value.indexOf(separator, i)) != -1) {
-			ls.add(value.substring(j, i));
-			++i;
-			j = i;
-		}
-		ls.add(value.substring(j));
-		return ls;
-	}
-
-	/**
-	 * 将数组用分隔符连接成新字符串(split的逆方法)
-	 * 
-	 * @param strs
-	 *            字符串数组
-	 * @param sep
-	 *            分隔符
-	 * @return 结果字符串
-	 */
-	public static String join(String[] strs, String sep) {
-		StringBuilder res = new StringBuilder();
-		for (int i = 0; i < strs.length; i++) {
-			res.append(strs[i] + sep);
-		}
-		return res.substring(0, res.length() - sep.length());
-	}
-
-	/**
-	 * 获得一个UUID
-	 * 
-	 * @return String UUID
-	 */
-	public static String getUUID() {
-		String str = UUID.randomUUID().toString();// 标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx(8-4-4-4-12)
-		// 去掉"-"符号,不用replaceAll的原因与split一样,replaceAll支持正则表达式,频繁使用时效率不够高(当然偶尔用一下影响也不会特别严重)
-		return join(split(str, "-"), "");
-	}
-
-	/**
-	 * <pre>
-	 * 例: String strVal="This is a dog"; String
-	 * strResult=CTools.replace(strVal,"dog","cat"); 结果: strResult equals
-	 * "This is cat"
-	 *
-	 * @param strSrc
-	 *            要进行替换操作的字符串
-	 * @param strOld
-	 *            要查找的字符串
-	 * @param strNew
-	 *            要替换的字符串
-	 * @return 替换后的字符串
-	 * 
-	 *         <pre>
-	 */
-	public static final String replaceAllStr(String strSrc, String strOld, String strNew) {
-		if (strSrc == null || strOld == null || strNew == null)
-			return "";
-
-		int i = 0;
-
-		if (strOld.equals(strNew)) // 避免新旧字符一样产生死循环
-			return strSrc;
-
-		if ((i = strSrc.indexOf(strOld, i)) >= 0) {
-			char[] arr_cSrc = strSrc.toCharArray();
-			char[] arr_cNew = strNew.toCharArray();
-
-			int intOldLen = strOld.length();
-			StringBuffer buf = new StringBuffer(arr_cSrc.length);
-			buf.append(arr_cSrc, 0, i).append(arr_cNew);
-
-			i += intOldLen;
-			int j = i;
-
-			while ((i = strSrc.indexOf(strOld, i)) > 0) {
-				buf.append(arr_cSrc, j, i - j).append(arr_cNew);
-				i += intOldLen;
-				j = i;
-			}
-
-			buf.append(arr_cSrc, j, arr_cSrc.length - j);
-
-			return buf.toString();
-		}
-
-		return strSrc;
-	}
-
-	/**
-	 * 用于将字符串中的特殊字符转换成Web页中可以安全显示的字符串 可对表单数据据进行处理对一些页面特殊字符进行处理如'
-	 * <','>','"',''','&'
-	 * 
-	 * @param strSrc
-	 *            要进行替换操作的字符串
-	 * @return 替换特殊字符后的字符串
-	 * @since 1.0
-	 */
-
-	public static String htmlEncode(String strSrc) {
-		if (strSrc == null)
-			return "";
-
-		char[] arr_cSrc = strSrc.toCharArray();
-		StringBuffer buf = new StringBuffer(arr_cSrc.length);
-		char ch;
-
-		for (int i = 0; i < arr_cSrc.length; i++) {
-			ch = arr_cSrc[i];
-
-			if (ch == '<')
-				buf.append("&lt;");
-			else if (ch == '>')
-				buf.append("&gt;");
-			else if (ch == '"')
-				buf.append("&quot;");
-			else if (ch == '\'')
-				buf.append("&#039;");
-			else if (ch == '&')
-				buf.append("&amp;");
-			else
-				buf.append(ch);
-		}
-
-		return buf.toString();
-	}
-
-	/**
-	 * 用于将字符串中的特殊字符转换成Web页中可以安全显示的字符串 可对表单数据据进行处理对一些页面特殊字符进行处理如'
-	 * <','>','"',''','&'
-	 * 
-	 * @param strSrc
-	 *            要进行替换操作的字符串
-	 * @param quotes
-	 *            为0时单引号和双引号都替换,为1时不替换单引号,为2时不替换双引号,为3时单引号和双引号都不替换
-	 * @return 替换特殊字符后的字符串
-	 * @since 1.0
-	 */
-	public static String htmlEncode(String strSrc, int quotes) {
-
-		if (strSrc == null)
-			return "";
-		if (quotes == 0) {
-			return htmlEncode(strSrc);
-		}
-
-		char[] arr_cSrc = strSrc.toCharArray();
-		StringBuffer buf = new StringBuffer(arr_cSrc.length);
-		char ch;
-
-		for (int i = 0; i < arr_cSrc.length; i++) {
-			ch = arr_cSrc[i];
-			if (ch == '<')
-				buf.append("&lt;");
-			else if (ch == '>')
-				buf.append("&gt;");
-			else if (ch == '"' && quotes == 1)
-				buf.append("&quot;");
-			else if (ch == '\'' && quotes == 2)
-				buf.append("&#039;");
-			else if (ch == '&')
-				buf.append("&amp;");
-			else
-				buf.append(ch);
-		}
-
-		return buf.toString();
-	}
-
-	/**
-	 * 和htmlEncode正好相反
-	 * 
-	 * @param strSrc
-	 *            要进行转换的字符串
-	 * @return 转换后的字符串
-	 * @since 1.0
-	 */
-	public static String htmlDecode(String strSrc) {
-		if (strSrc == null)
-			return "";
-		strSrc = strSrc.replaceAll("&lt;", "<");
-		strSrc = strSrc.replaceAll("&gt;", ">");
-		strSrc = strSrc.replaceAll("&quot;", "\"");
-		strSrc = strSrc.replaceAll("&#039;", "'");
-		strSrc = strSrc.replaceAll("&amp;", "&");
-		return strSrc;
-	}
-
-	/**
-	 * 实际处理 return toChineseNoReplace(null2Blank(str));
-	 * 
-	 * @param str
-	 *            要进行处理的字符串
-	 * @return 转换后的字符串
-	 */
-	public static String toChineseAndHtmlEncode(String str, int quotes) {
-		try {
-			if (str == null) {
-				return "";
-			} else {
-				str = str.trim();
-				str = new String(str.getBytes("ISO8859_1"), "GBK");
-				String htmlEncode = htmlEncode(str, quotes);
-				return htmlEncode;
-			}
-		} catch (Exception exp) {
-			return "";
-		}
-	}
-
-	/**
-	 * 把null值和""值转换成&nbsp; 主要应用于页面表格格的显示
-	 * 
-	 * @param str
-	 *            要进行处理的字符串
-	 * @return 转换后的字符串
-	 */
-	public static String str4Table(String str) {
-		if (str == null)
-			return "&nbsp;";
-		else if (str.equals(""))
-			return "&nbsp;";
-		else
-			return str;
-	}
-
-}

+ 4 - 27
src/main/resources/mapper_xml/DepotItemMapper.xml

@@ -626,9 +626,9 @@
       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,
+      mb.batch_number AS batch_number,
+      di.production_date AS production_date,
+      di.position AS position,
 	  me.inventory AS inventory,
 	  me.bar_code AS bar_code,
 	  di.oper_number AS oper_number,
@@ -640,6 +640,7 @@
       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
+      LEFT JOIN material_batch mb ON (SELECT id FROM jsh_depot_item WHERE link_id = di.id LIMIT 1) = mb.depot_item_id
     WHERE
       di.delete_flag = '0'
       AND di.id = #{id}
@@ -670,29 +671,5 @@
       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>

+ 34 - 0
src/main/resources/mapper_xml/MaterialBatchMapper.xml

@@ -63,5 +63,39 @@
         </if>
     </select>
 
+    <select id="getMaterialByBatchNumber" parameterType="com.jsh.erp.datasource.entities.MaterialExample" resultType="com.jsh.erp.datasource.vo.TaskStocktakingItemVO">
+        select
+        mc.`name` AS category_name,
+        m.`name` AS material_name,
+        m.standard AS standard,
+        m.model AS model,
+        m.color AS color,
+        m.brand AS brand,
+        me.position AS position,
+        me.batch_number AS batch_number,
+        m.system_sku AS system_sku,
+        me.sku AS sku,
+        me.commodity_unit AS commodity_unit,
+        me.production_date AS production_date,
+        s.supplier AS supplier_name,
+        me.bar_code AS bar_code,
+        me.inventory AS inventory,
+        me.expiry_num AS expiry_num,
+        d.`name` AS depot_name
+        from jsh_material m
+        left join material_batch 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 mc.id = m.category_id
+        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'
+        where
+        me.batch_number in (
+        <foreach collection="batchNumberArray" item="batchNumber" separator=",">
+            #{batchNumber}
+        </foreach>
+        )
+        and ifnull(m.delete_flag,'0') !='1'
+        order by m.id desc, me.default_flag desc, me.id asc
+    </select>
 
 </mapper>

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

@@ -264,8 +264,8 @@
     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 id="selectPosition" resultType="String" parameterType="java.lang.Long">
+    SELECT DISTINCT position FROM jsh_material_initial_stock WHERE depot_id = #{depotId} AND position IS NOT NULL AND position != "" AND ifnull(delete_Flag,'0') !='1'
   </select>
 
   <select id="selectMaterialIdByPosition" resultType="String">

+ 2 - 1
src/main/resources/mapper_xml/MaterialMapper.xml

@@ -494,13 +494,14 @@
     me.id materialExtendId,
     m.name materialName,
     m.standard materialStandard,
-    me.position,
+    mis.position,
     me.bar_code,
     me.commodity_unit,
     m.img_name,
     CAST(IFNULL(mi.inventory,0) / me.ratio AS DECIMAL(10,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_material_initial_stock mis ON m.id= mis.material_id AND mis.depot_id = #{depotId}
     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

+ 0 - 35
src/main/resources/mapper_xml/MaterialMapperEx.xml

@@ -791,41 +791,6 @@
         limit 0,1
     </select>
 
-    <select id="getMaterialByBatchNumber" parameterType="com.jsh.erp.datasource.entities.MaterialExample" resultType="com.jsh.erp.datasource.vo.TaskStocktakingItemVO">
-        select
-        mc.`name` AS category_name,
-        m.`name` AS material_name,
-        m.standard AS standard,
-        m.model AS model,
-        m.color AS color,
-        m.brand AS brand,
-        me.position AS position,
-        me.batch_number AS batch_number,
-        m.system_sku AS system_sku,
-        me.sku AS sku,
-        me.commodity_unit AS commodity_unit,
-        me.production_date AS production_date,
-        s.supplier AS supplier_name,
-        me.bar_code AS bar_code,
-        me.inventory AS inventory,
-        me.expiry_num AS expiry_num,
-        d.`name` AS depot_name
-        from jsh_material m
-        left join material_batch 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 mc.id = m.category_id
-        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'
-        where
-        me.batch_number in (
-        <foreach collection="batchNumberArray" item="batchNumber" separator=",">
-            #{batchNumber}
-        </foreach>
-        )
-        and ifnull(m.delete_flag,'0') !='1'
-        order by m.id desc, me.default_flag desc, me.id asc
-    </select>
-
 
     <select id="getMaterialBySystemSku" parameterType="com.jsh.erp.datasource.entities.MaterialExample" resultType="com.jsh.erp.datasource.entities.MaterialVo4Unit">
         WITH RankedExtend AS (

+ 3 - 0
src/main/resources/mapper_xml/TaskStocktakingMapper.xml

@@ -31,6 +31,9 @@
             <if test="taskStatus != null and taskStatus != 0">
                 AND ts.task_status = #{taskStatus}
             </if>
+            <if test="depotId != null and depotId != 0">
+                AND ts.depot_id = #{depotId}
+            </if>
             ORDER BY
                 ts.create_time DESC,
                 ts.id DESC