PointPositionServiceImpl.java 6.46 KB
package com.huaheng.pc.config.pointPosition.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.Wrappers;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.config.pointPosition.domain.PointPosition;
import com.huaheng.pc.config.pointPosition.mapper.PointPositionMapper;

import com.huaheng.pc.task.agvTask.domain.Shelf;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;


/**
 * 【请填写功能名称】 服务层实现
 * 
 * @author huaheng
 * @date 2022-08-29
 */
@Service
public class PointPositionServiceImpl extends ServiceImpl<PointPositionMapper, PointPosition> implements IPointPositionService {

    @Override
    public PointPosition getPositionByPositionName(String code, String warehouseCode) {
        PointPosition one = this.getOne(new LambdaQueryWrapper<PointPosition>()
                .eq(PointPosition::getPositionName,code)
                .last("LIMIT 1"));
        return one;
    }

    @Override
    public void updateStatus(String point, String status, String warehouseCode) {
        if (StringUtils.isNotEmpty(point)) {
            this.update(new LambdaUpdateWrapper<PointPosition>()
                    .eq(PointPosition::getPositionName, point)
                    .eq(PointPosition::getWarehouseCode, QuantityConstant.WAREHOUSE_CS)
                    .set(PointPosition::getStatus, status));
        }
    }

    @Override
    public void setContainerCode(String positionName, String containerCode, String warehouseCode) {
        if(StringUtils.isNotEmpty(positionName)){
            this.update(new LambdaUpdateWrapper<PointPosition>()
                    .eq(PointPosition::getPositionName, positionName)
                    .eq(PointPosition::getWarehouseCode, QuantityConstant.WAREHOUSE_CS)
                    .set(PointPosition::getContainerCode, containerCode));
        }
    }

    @Override
    public AjaxResult<List<PointPosition>> insertPointPosition(String pointPositionType, Integer quantity) {
        List<PointPosition>  containerList = new ArrayList<>();
        List<PointPosition> containers =new ArrayList<>();
        Integer number = getNumber(pointPositionType);
        for(int i=0; i<quantity; i++) {
            number++;
            PointPosition container = new PointPosition();
            if(pointPositionType.equals("A")){
                container.setPositionName(String.format("%s%01d", pointPositionType, number));
            }
            if(pointPositionType.equals("P")){
                container.setPositionName(String.format("%s%04d", pointPositionType, number));
            }
            if(pointPositionType.equals("H")){
                container.setPositionName(String.format("%s%04d", pointPositionType, number));
            }
            container.setStatus(QuantityConstant.STATUS_CONTAINER_EMPTY);
            container.setCreated(new Date());
            container.setUpdated(new Date());
            container.setEnable("1");
            container.setWarehouseCode(ShiroUtils.getWarehouseCode());
            containers.add(container);
            if( i>0 && (i%1000==0 || i == quantity-1)){
                this.saveBatch(containers);
                containers = new ArrayList<>();
            }
        }
        return AjaxResult.success(containers);
    }

    @Override
    public boolean clearShelfByPositionName(String positionName) {
        LambdaUpdateWrapper<PointPosition> updateWrapper = Wrappers.lambdaUpdate();
        updateWrapper.eq(PointPosition::getPositionName,positionName)
            .set(PointPosition::getStatus,QuantityConstant.STATUS_CONTAINER_EMPTY)
            .set(PointPosition::getShelfNo,null);
        return this.update(updateWrapper);
    }

    @Override
    public boolean fillShelfByPositionName(String positionName,String shelfNo) {
        LambdaUpdateWrapper<PointPosition> updateWrapper = Wrappers.lambdaUpdate();
        updateWrapper.eq(PointPosition::getPositionName,positionName)
                .set(PointPosition::getStatus,QuantityConstant.STATUS_CONTAINER_SOME)
                .set(PointPosition::getShelfNo,shelfNo);
        return this.update(updateWrapper);
    }

    private Integer getNumber(String type) {
        if(type.equals("A")){
            PointPosition pointPosition=getPointPositionByPositionName(type);
            //如果指定类型的最后的code存在,那么 code = 容器类型 + (排序号 + 1)
            if (pointPosition != null && pointPosition.getPositionName() != null) {
                Integer number = Integer.valueOf(pointPosition.getPositionName().substring(1, pointPosition.getPositionName().length()));
                return  number;
            } else {
                return  0;
            }
        }
        if(type.equals("P")){
            PointPosition pointPosition=getPointPositionByPositionName(type);
            //如果指定类型的最后的code存在,那么 code = 容器类型 + (排序号 + 1)
            if (pointPosition != null && pointPosition.getPositionName() != null) {
                Integer number = Integer.valueOf(pointPosition.getPositionName().substring( pointPosition.getPositionName().length()-4, pointPosition.getPositionName().length()));
                return  number;
            } else {
                return  0;
            }
        }
        if(type.equals("H")){
            PointPosition pointPosition=getPointPositionByPositionName(type);
            //如果指定类型的最后的code存在,那么 code = 容器类型 + (排序号 + 1)
            if (pointPosition != null && pointPosition.getPositionName() != null) {
                Integer number = Integer.valueOf(pointPosition.getPositionName().substring( pointPosition.getPositionName().length()-4, pointPosition.getPositionName().length()));
                return  number;
            } else {
                return  0;
            }
        }
        return 0;
    }

    public PointPosition getPointPositionByPositionName(String positionName) {
        PointPosition one = this.getOne(new LambdaQueryWrapper<PointPosition>()
                .eq(PointPosition::getPositionName, positionName)
                .last("LIMIT 1"));
        return one;
    }
}