郑永安
2023-06-19 2fcd97552d16718cc7997629fd637a73a5a4483f
src/main/java/com/gk/firework/Service/ServiceImpl/ProductLocusServiceImpl.java
对比新文件
@@ -0,0 +1,130 @@
package com.gk.firework.Service.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gk.firework.Config.DataSource.MybatisPlusConfig;
import com.gk.firework.Domain.Exception.BusinessException;
import com.gk.firework.Domain.ProductLocusInfo;
import com.gk.firework.Domain.Utils.StringUtils;
import com.gk.firework.Domain.Vo.DirectionDetail;
import com.gk.firework.Domain.Vo.FireworkDeal;
import com.gk.firework.Domain.Vo.ProductLocusVo;
import com.gk.firework.Domain.Vo.ProductVo;
import com.gk.firework.Mapper.ProductLocusInfoMapper;
import com.gk.firework.Service.ProductLocusService;
import com.gk.firework.Service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
 * @author : jingjy
 * @date : 2021/3/24 14:34
 */
@Service("ProductLocusService")
public class ProductLocusServiceImpl extends ServiceImpl<ProductLocusInfoMapper, ProductLocusInfo> implements ProductLocusService {
    @Autowired
    private ProductService productService;
    @Autowired
    private ProductLocusInfoMapper productLocusInfoMapper;
    @Override
    public int insertProductLocus(ProductLocusInfo productLocusInfo) {
        int i = 0;
        if (productLocusInfo == null){
            return i;
        }
        String slice = productService.getSlice(productLocusInfo.getDirectioncode());
        i = productLocusInfoMapper.insertProductLocus(productLocusInfo, slice);
        return i;
    }
    @Override
    public int insertBatch(List<ProductLocusInfo> productLocusInfos) {
        int i = 0;
        if (productLocusInfos == null || productLocusInfos.size() == 0){
            return i;
        }
        for (ProductLocusInfo productLocusInfo : productLocusInfos){
            i = insertProductLocus(productLocusInfo);
        }
        return i;
    }
    /**
    * @Description: 条码流向查询
    * @date 2021/4/14 16:01
    */
    @Override
    public List<ProductLocusVo> getFlow(String directionCode) {
        ArrayList<ProductLocusVo> result = new ArrayList<>();
        //判空和长度判断
        if (StringUtils.isBlank(directionCode)) throw new BusinessException("流向码不能为空");
        if (FireworkDeal.isNotDirectionCode(directionCode)) throw new BusinessException("流向码非法");
        //根据创建时间倒叙排序
        DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
        List<ProductVo> productVos = new ArrayList<>();
        ProductVo productVo = productService.selectVoByDirection(directionCode);
        if (productVo == null)  throw new BusinessException("产品不存在");
        String slice = productService.getSlice(directionCode);
        //22位码
        if (FireworkDeal.is22Characters(directionCode)){
            FireworkDeal.getProductVos(directionCode,directionDetail,directionDetail,productVos,productVo);
            if (productVos.size() < 1) throw new BusinessException("产品流向码出现问题");
            List<String>  codes= new ArrayList<>();
            for (ProductVo product : productVos) {
                codes.add(product.getDirectionCode());
            }
            //22位查询
            List<ProductLocusVo> flow_22 = productLocusInfoMapper.selectLists(directionCode, slice);
            if (flow_22.size() < 1) throw new BusinessException("查询结果不存在");
            result.addAll(flow_22);
            //19位查询
            List<ProductLocusVo> flow_19 = productLocusInfoMapper.selectFlowByCodes(codes, slice);
            assert flow_19.size() > 0;
            result.addAll(flow_19);
        }else{
            //19位查询
            List<ProductLocusVo> flow_19 =  productLocusInfoMapper.selectLists(directionCode,slice);
            //19找22位箱
            Integer boxNumber = productVo.getBoxNumber();
            String serialNo = directionDetail.getSerialNo();
            Integer serial = Integer.parseInt(serialNo);
            int left_open_interval = serial - boxNumber;
            int right_close_interval = serial;
            List<String> codes = new ArrayList<>();
            for (int i = left_open_interval + 1; i <= right_close_interval; i++) {
                int abs = Math.abs(i);
                String itemCode = directionDetail.getItemCode();
                String dateCode = directionDetail.getDateCode();
                String serials = String.format("%05d", abs);
                String boxNumberCode = String.format("%03d", boxNumber);
                String code = String.format("%s%s%s%s", itemCode, dateCode, serials, boxNumberCode);
                codes.add(code);
            }
            List<ProductLocusVo> flow_22 =  productLocusInfoMapper.selectFlowByCodes(codes,slice);
            assert flow_22.size() > 0;
            result.addAll(flow_22);
            result.addAll(flow_19);
        }
        if (result.size() >0 )
            return result.stream().sorted(Comparator.comparing(ProductLocusVo::getCreateddate).reversed()).collect(Collectors.toList());
        return result;
    }
    @Override
    public int saveBatchLocus(List<ProductLocusInfo> productLocuses) {
        if (productLocuses == null || productLocuses.size() == 0) {
            throw new BusinessException("系统入参为空");
        }
        return productLocusInfoMapper.insertBatch(productLocuses);
    }
}