|
@@ -1,27 +1,30 @@
|
|
package com.jsh.erp.service.impl;
|
|
package com.jsh.erp.service.impl;
|
|
|
|
|
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.jsh.erp.datasource.dto.TaskStocktakingDTO;
|
|
import com.jsh.erp.datasource.dto.TaskStocktakingDTO;
|
|
import com.jsh.erp.datasource.entities.*;
|
|
import com.jsh.erp.datasource.entities.*;
|
|
-import com.jsh.erp.datasource.mappers.MaterialExtendMapper;
|
|
|
|
-import com.jsh.erp.datasource.mappers.TaskStocktakingItemMapper;
|
|
|
|
-import com.jsh.erp.datasource.mappers.TaskStocktakingMapper;
|
|
|
|
-import com.jsh.erp.datasource.mappers.UserMapper;
|
|
|
|
|
|
+import com.jsh.erp.datasource.mappers.*;
|
|
|
|
+import com.jsh.erp.datasource.pda.vo.PDATaskStocktakingVO;
|
|
import com.jsh.erp.datasource.vo.TaskStocktakingItemVO;
|
|
import com.jsh.erp.datasource.vo.TaskStocktakingItemVO;
|
|
import com.jsh.erp.datasource.vo.TaskStocktakingVO;
|
|
import com.jsh.erp.datasource.vo.TaskStocktakingVO;
|
|
import com.jsh.erp.query.LambdaQueryWrapperX;
|
|
import com.jsh.erp.query.LambdaQueryWrapperX;
|
|
import com.jsh.erp.service.DepotService;
|
|
import com.jsh.erp.service.DepotService;
|
|
import com.jsh.erp.service.TaskStocktakingService;
|
|
import com.jsh.erp.service.TaskStocktakingService;
|
|
|
|
+import com.jsh.erp.service.UserService;
|
|
|
|
+import com.jsh.erp.utils.DateUtils;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.Collections;
|
|
|
|
+import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -39,22 +42,70 @@ public class TaskStocktakingServiceImpl extends ServiceImpl<TaskStocktakingMappe
|
|
|
|
|
|
private final TaskStocktakingItemMapper taskStocktakingItemMapper;
|
|
private final TaskStocktakingItemMapper taskStocktakingItemMapper;
|
|
|
|
|
|
|
|
+ private final TaskStocktakingMapper taskStocktakingMapper;
|
|
|
|
+
|
|
|
|
+ private final MaterialMapper materialMapper;
|
|
|
|
+
|
|
|
|
+ private final UserService userService;
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public List<TaskStocktakingVO> listBy() {
|
|
|
|
+ return taskStocktakingMapper.listBy();
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 创建盘点任务
|
|
* 创建盘点任务
|
|
* @param taskStocktakingDTO
|
|
* @param taskStocktakingDTO
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
|
|
+ @Transactional(value = "transactionManager", rollbackFor = Exception.class)
|
|
public boolean add(TaskStocktakingDTO taskStocktakingDTO) {
|
|
public boolean add(TaskStocktakingDTO taskStocktakingDTO) {
|
|
- //商品库位范围处理
|
|
|
|
- List<String> collect;
|
|
|
|
- if (taskStocktakingDTO.getTaskType() == 1) {
|
|
|
|
- collect = materialExtendMapper.selectList(new LambdaQueryWrapper<MaterialExtend>().ne(MaterialExtend::getInventory, BigDecimal.ZERO)).stream().map(MaterialExtend::getPosition).collect(Collectors.toList());
|
|
|
|
- } else {
|
|
|
|
- collect = materialExtendMapper.selectList(new LambdaQueryWrapper<MaterialExtend>().in(MaterialExtend::getId, taskStocktakingDTO.getMaterialExtendIdList())).stream().map(MaterialExtend::getPosition).collect(Collectors.toList());
|
|
|
|
|
|
+ try {
|
|
|
|
+ List<String> collect;
|
|
|
|
+ List<MaterialExtend> materialExtendList;
|
|
|
|
+ //全盘,抽盘,处理任务明细
|
|
|
|
+ if (taskStocktakingDTO.getTaskType() == 1) {
|
|
|
|
+ materialExtendList = materialExtendMapper.selectList(new LambdaQueryWrapper<MaterialExtend>().ne(MaterialExtend::getInventory, BigDecimal.ZERO).isNotNull(MaterialExtend::getInventory));
|
|
|
|
+ collect = materialExtendList
|
|
|
|
+ .stream()
|
|
|
|
+ .map(MaterialExtend::getPosition)
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+ List<Long> materialIdList = materialExtendList.stream().map(MaterialExtend::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::getId, taskStocktakingDTO.getMaterialExtendIdList()));
|
|
|
|
+ collect = materialExtendList.stream().map(MaterialExtend::getPosition).collect(Collectors.toList());
|
|
|
|
+ List<Material> materialList = materialMapper.selectList(new LambdaQueryWrapperX<Material>().eq(Material::getId, materialExtendList.stream().map(MaterialExtend::getMaterialId)));
|
|
|
|
+ List<Long> categoryIdList = materialList.stream().map(Material::getCategoryId).distinct().collect(Collectors.toList());
|
|
|
|
+ taskStocktakingDTO.setCategoryCount(categoryIdList.size());
|
|
|
|
+ taskStocktakingDTO.setMaterialCount(materialExtendList.size());
|
|
|
|
+ }
|
|
|
|
+ //处理商品库位范围处理
|
|
|
|
+ String positionRange = extractRangePair(collect);
|
|
|
|
+ taskStocktakingDTO.setPositionRange(positionRange);
|
|
|
|
+ User currentUser = userService.getCurrentUser();
|
|
|
|
+ taskStocktakingDTO.setCreateBy(currentUser.getId());
|
|
|
|
+ taskStocktakingDTO.setCreateTime(new Date());
|
|
|
|
+ taskStocktakingDTO.setTaskStatus(0);
|
|
|
|
+ //生成任务
|
|
|
|
+ this.save(taskStocktakingDTO);
|
|
|
|
+ //生成任务明细
|
|
|
|
+ List<TaskStocktakingItem> taskStocktakingItemList = new ArrayList<>();
|
|
|
|
+ taskStocktakingDTO.getMaterialExtendIdList().forEach(materialExtendId -> {
|
|
|
|
+ TaskStocktakingItem taskStocktakingItem = new TaskStocktakingItem();
|
|
|
|
+ taskStocktakingItem.setTaskStocktakingId(taskStocktakingDTO.getId());
|
|
|
|
+ taskStocktakingItem.setMaterialItemId(materialExtendId);
|
|
|
|
+ taskStocktakingItemList.add(taskStocktakingItem);
|
|
|
|
+ });
|
|
|
|
+ taskStocktakingItemMapper.insertBatch(taskStocktakingItemList);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("创建盘点任务失败", e);
|
|
|
|
+ return false;
|
|
}
|
|
}
|
|
- String positionRange = extractRangePair(collect);
|
|
|
|
- this.save(taskStocktakingDTO);
|
|
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -93,6 +144,17 @@ public class TaskStocktakingServiceImpl extends ServiceImpl<TaskStocktakingMappe
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
|
|
+ * PDA-盘点任务列表
|
|
|
|
+ * @param number 盘点单号或者任务名称
|
|
|
|
+ * @param taskStatus 盘点任务状态
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public List<PDATaskStocktakingVO> pdaList(String number , Integer taskStatus) {
|
|
|
|
+ return taskStocktakingMapper.pdaList(number , taskStatus);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
* 计算库位范围
|
|
* 计算库位范围
|
|
* @param data 库位集合
|
|
* @param data 库位集合
|
|
* @return
|
|
* @return
|