123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- package com.jsh.erp.service.impl;
- import cn.hutool.core.util.ObjectUtil;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.jsh.erp.datasource.dto.TaskStocktakingDTO;
- 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.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.TaskStocktakingService;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.BeanUtils;
- import org.springframework.stereotype.Service;
- import java.math.BigDecimal;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.List;
- import java.util.stream.Collectors;
- @Service
- @RequiredArgsConstructor
- @Slf4j
- public class TaskStocktakingServiceImpl extends ServiceImpl<TaskStocktakingMapper, TaskStocktaking> implements TaskStocktakingService {
- private final MaterialExtendMapper materialExtendMapper;
- private final UserMapper userMapper;
- private final DepotService depotService;
- private final TaskStocktakingItemMapper taskStocktakingItemMapper;
- /**
- * 创建盘点任务
- * @param taskStocktakingDTO
- * @return
- */
- @Override
- 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());
- }
- String positionRange = extractRangePair(collect);
- this.save(taskStocktakingDTO);
- return true;
- }
- /**
- * 任务-详情
- * @param id 任务ID
- * @return
- * @throws Exception
- */
- @Override
- public TaskStocktakingVO detail(Long id) throws Exception{
- TaskStocktaking one = getOne(new LambdaQueryWrapperX<TaskStocktaking>().eq(TaskStocktaking::getId, id));
- TaskStocktakingVO taskStocktakingVO = new TaskStocktakingVO();
- BeanUtils.copyProperties(one, taskStocktakingVO);
- //获取负责人名称
- User user = userMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getId, one.getCreator()));
- taskStocktakingVO.setCreatorName(user.getLoginName());
- //获取创建人名称
- User user1 = userMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getId, one.getCreateBy()));
- taskStocktakingVO.setCreateByName(user1.getLoginName());
- //获取仓库名称
- Depot depot = depotService.getDepot(one.getDepotId());
- taskStocktakingVO.setDepotName(depot.getName());
- //当任务类型是抽盘时,返回商品盘点信息
- return taskStocktakingVO;
- }
- /**
- * 任务详情-商品明细
- * @param taskStocktakingId 盘点任务ID
- * @return
- */
- @Override
- public List<TaskStocktakingItemVO> listByTaskStocktakingId(Long taskStocktakingId) {
- return taskStocktakingItemMapper.listByTaskStocktakingId(taskStocktakingId);
- }
- /**
- * 计算库位范围
- * @param data 库位集合
- * @return
- */
- public static String extractRangePair(List<String> data) {
- // 用于存储提取的前两部分
- 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 (rangeParts.isEmpty()) {
- return "";
- }
- // 找到最小和最大范围
- String minRange = Collections.min(rangeParts); // 字典序最小
- String maxRange = Collections.max(rangeParts); // 字典序最大
- // 返回范围对
- return minRange + "——" + maxRange;
- }
- }
|