package com.zy.acs.manager.manager.service.impl; 
 | 
  
 | 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 
 | 
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 
 | 
import com.zy.acs.common.utils.CodeUtils; 
 | 
import com.zy.acs.manager.common.domain.CodeExcel; 
 | 
import com.zy.acs.manager.common.exception.BusinessException; 
 | 
import com.zy.acs.manager.manager.entity.Code; 
 | 
import com.zy.acs.manager.manager.entity.CodeGap; 
 | 
import com.zy.acs.manager.manager.mapper.CodeMapper; 
 | 
import com.zy.acs.manager.manager.service.CodeGapService; 
 | 
import com.zy.acs.manager.manager.service.CodeService; 
 | 
import com.zy.acs.manager.manager.service.RouteService; 
 | 
import com.zy.acs.framework.common.Cools; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
  
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
  
 | 
@Service("codeService") 
 | 
public class CodeServiceImpl extends ServiceImpl<CodeMapper, Code> implements CodeService { 
 | 
  
 | 
    @Autowired 
 | 
    private CodeGapService codeGapService; 
 | 
    @Autowired 
 | 
    private RouteService routeService; 
 | 
  
 | 
    @Override 
 | 
    public Code selectByData(String data) { 
 | 
        return this.getOne(new LambdaQueryWrapper<Code>().eq(Code::getData, data)); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void importExecute(List<CodeExcel> excelList) { 
 | 
        for (CodeExcel excel : excelList) { 
 | 
            Code code = this.selectByData(excel.getCode()); 
 | 
            if (null == code) { 
 | 
                code = new Code(); 
 | 
                code.setUuid("code" + excel.getCode()); 
 | 
                code.setData(excel.getCode()); 
 | 
                code.setX(excel.getX()); 
 | 
                code.setY(excel.getY()); 
 | 
                code.setScale(CodeUtils.DEFAULT_SCALE); 
 | 
                code.setMemo(excel.getMemo()); 
 | 
                if (!save(code)) { 
 | 
                    throw new BusinessException(excel.getCode() + "保存失败"); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        for (CodeExcel excel : excelList) { 
 | 
            Code code = selectByData(excel.getCode()); 
 | 
            if (!Cools.isEmpty(excel.getNearCode1())) { 
 | 
                Code nearCode = selectByData(excel.getNearCode1()); 
 | 
                if (null == nearCode) { 
 | 
                    throw new BusinessException(excel.getNearCode1() + "不存在"); 
 | 
                } 
 | 
                CodeGap codeGap = codeGapService.findByCodeOfBoth(code.getId(), nearCode.getId()); 
 | 
                if (null == codeGap) { 
 | 
                    codeGap = new CodeGap(); 
 | 
                    codeGap.setCode0(code.getId()); 
 | 
                    codeGap.setCode1(nearCode.getId()); 
 | 
                    codeGap.setDistance(excel.getNearCodeDistance1()); 
 | 
                    if (!codeGapService.save(codeGap)) { 
 | 
                        throw new BusinessException(code.getData() + " - " + nearCode.getData() + "间距保存失败"); 
 | 
                    } else { 
 | 
                        routeService.createRouteByCode(code, nearCode); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
            if (!Cools.isEmpty(excel.getNearCode2())) { 
 | 
                Code nearCode = selectByData(excel.getNearCode2()); 
 | 
                if (null == nearCode) { 
 | 
                    throw new BusinessException(excel.getNearCode2() + "不存在"); 
 | 
                } 
 | 
                CodeGap codeGap = codeGapService.findByCodeOfBoth(code.getId(), nearCode.getId()); 
 | 
                if (null == codeGap) { 
 | 
                    codeGap = new CodeGap(); 
 | 
                    codeGap.setCode0(code.getId()); 
 | 
                    codeGap.setCode1(nearCode.getId()); 
 | 
                    codeGap.setDistance(excel.getNearCodeDistance2()); 
 | 
                    if (!codeGapService.save(codeGap)) { 
 | 
                        throw new BusinessException(code.getData() + " - " + nearCode.getData() + "间距保存失败"); 
 | 
                    } else { 
 | 
                        routeService.createRouteByCode(code, nearCode); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
            if (!Cools.isEmpty(excel.getNearCode3())) { 
 | 
                Code nearCode = selectByData(excel.getNearCode3()); 
 | 
                if (null == nearCode) { 
 | 
                    throw new BusinessException(excel.getNearCode3() + "不存在"); 
 | 
                } 
 | 
                CodeGap codeGap = codeGapService.findByCodeOfBoth(code.getId(), nearCode.getId()); 
 | 
                if (null == codeGap) { 
 | 
                    codeGap = new CodeGap(); 
 | 
                    codeGap.setCode0(code.getId()); 
 | 
                    codeGap.setCode1(nearCode.getId()); 
 | 
                    codeGap.setDistance(excel.getNearCodeDistance3()); 
 | 
                    if (!codeGapService.save(codeGap)) { 
 | 
                        throw new BusinessException(code.getData() + " - " + nearCode.getData() + "间距保存失败"); 
 | 
                    } else { 
 | 
                        routeService.createRouteByCode(code, nearCode); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
            if (!Cools.isEmpty(excel.getNearCode4())) { 
 | 
                Code nearCode = selectByData(excel.getNearCode4()); 
 | 
                if (null == nearCode) { 
 | 
                    throw new BusinessException(excel.getNearCode4() + "不存在"); 
 | 
                } 
 | 
                CodeGap codeGap = codeGapService.findByCodeOfBoth(code.getId(), nearCode.getId()); 
 | 
                if (null == codeGap) { 
 | 
                    codeGap = new CodeGap(); 
 | 
                    codeGap.setCode0(code.getId()); 
 | 
                    codeGap.setCode1(nearCode.getId()); 
 | 
                    codeGap.setDistance(excel.getNearCodeDistance4()); 
 | 
                    if (!codeGapService.save(codeGap)) { 
 | 
                        throw new BusinessException(code.getData() + " - " + nearCode.getData() + "间距保存失败"); 
 | 
                    } else { 
 | 
                        routeService.createRouteByCode(code, nearCode); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    @Transactional 
 | 
    public void adaptation(Double width, Double height) { 
 | 
        width = width - CodeUtils.ADAPTATION_OFFSET_X;  // 菜单栏 
 | 
  
 | 
        Map<String, Object> map = this.baseMapper.selectMinAndMaxByPoint(); 
 | 
        Double minX = Double.parseDouble(String.valueOf(map.get("min_x"))); 
 | 
        Double minY = Double.parseDouble(String.valueOf(map.get("min_y"))); 
 | 
        Double maxX = Double.parseDouble(String.valueOf(map.get("max_x"))); 
 | 
        Double maxY = Double.parseDouble(String.valueOf(map.get("max_y"))); 
 | 
  
 | 
        // 缩放后需要的偏移量 
 | 
        double scaleOffsetX = width *  (1 -CodeUtils.ADAPTATION_SCALE) / 2; 
 | 
        double scaleOffsetY = height *  (1 -CodeUtils.ADAPTATION_SCALE) / 2; 
 | 
  
 | 
        List<Code> codeList = this.list(); 
 | 
        for (Code code : codeList) { 
 | 
            double adaptedX = ((code.getX() - minX) / (maxX - minX)) * width * CodeUtils.ADAPTATION_SCALE + scaleOffsetX; 
 | 
            double adaptedY = ((code.getY() - minY) / (maxY - minY)) * height * CodeUtils.ADAPTATION_SCALE + scaleOffsetY; 
 | 
  
 | 
            adaptedX = adaptedX + CodeUtils.ADAPTATION_OFFSET_X;  // 菜单栏 
 | 
  
 | 
            code.setX(adaptedX); 
 | 
            code.setY(adaptedY); 
 | 
  
 | 
            if (!updateById(code)) { 
 | 
                throw new BusinessException(code.getData() + "条码调整坐标失败"); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public int selectDistinctCountFromX() { 
 | 
        return this.baseMapper.selectDistinctCountFromX(); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public int selectDistinctCountFromY() { 
 | 
        return this.baseMapper.selectDistinctCountFromY(); 
 | 
    } 
 | 
  
 | 
} 
 |