package com.dy.pmsPlatform.station; 
 | 
  
 | 
import cn.hutool.core.codec.Base64; 
 | 
import com.alibaba.excel.util.StringUtils; 
 | 
import com.dy.common.webUtil.QueryResultVo; 
 | 
import com.dy.pmsGlobal.daoPlt.PltStationMapper; 
 | 
import com.dy.pmsGlobal.pojoPlt.PltProduct; 
 | 
import com.dy.pmsGlobal.pojoPlt.PltStation; 
 | 
import com.dy.pmsGlobal.util.QrCodeUtil; 
 | 
import com.google.zxing.WriterException; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.dubbo.common.utils.PojoUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.dao.DuplicateKeyException; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
  
 | 
import java.io.IOException; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
  
 | 
@Slf4j 
 | 
@Service 
 | 
public class StationSv { 
 | 
  
 | 
    private PltStationMapper dao; 
 | 
    private static final String stationPrefix = "103" ; 
 | 
    private static final String DEFAULT_CODE = "0001"; 
 | 
    private static final String CODE_FORMAT = "%04d"; 
 | 
  
 | 
    @Autowired 
 | 
    public void setDao(PltStationMapper dao) { 
 | 
        this.dao = dao; 
 | 
    } 
 | 
  
 | 
    @Transactional 
 | 
    public int save(PltStation station) throws RuntimeException { 
 | 
  
 | 
//        if(dao.selectByCodeId(station.id,station.code)>0){ 
 | 
//            throw new RuntimeException("工站编号已存在"); 
 | 
//        } 
 | 
        int count = 0; 
 | 
        int flag=0; 
 | 
        do { 
 | 
            station.code = getNextCode(); 
 | 
            try { 
 | 
                count = dao.insertSelective(station); 
 | 
                return count; 
 | 
            } catch (DuplicateKeyException e) { 
 | 
                // 如果出现唯一约束违反异常,尝试获取新的code并重试 
 | 
                log.warn("插入工站时遇到唯一约束异常,尝试获取新的code", e); 
 | 
            } 
 | 
            flag++; 
 | 
        } while (flag<5); 
 | 
  
 | 
        return count; 
 | 
    } 
 | 
  
 | 
    private String getNextCode(){ 
 | 
        log.info("获取工站编号"); 
 | 
        String maxCode = dao.selectMaxCode(); 
 | 
        if (StringUtils.isBlank(maxCode)) { 
 | 
            return DEFAULT_CODE; 
 | 
        } else { 
 | 
            int nextCode = Integer.parseInt(maxCode) + 1; 
 | 
            // 检查溢出 
 | 
            if (nextCode > 9999) { 
 | 
                throw new RuntimeException("工站编号溢出"); 
 | 
            } 
 | 
            return String.format(CODE_FORMAT, nextCode); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 逻辑删除实体 
 | 
     * @param id 实体ID 
 | 
     * @return 影响记录数量 
 | 
     */ 
 | 
    @Transactional 
 | 
    public int delete(Long id) { 
 | 
        return this.dao.deleteLogicById(id); 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    @Transactional 
 | 
    public int update(PltStation station) throws RuntimeException { 
 | 
//        if(dao.selectByCodeId(station.id,station.code)>0){ 
 | 
//            throw new RuntimeException("工站编号已存在"); 
 | 
//        } 
 | 
        int count = dao.updateByPrimaryKeySelective(station); 
 | 
        return count; 
 | 
    } 
 | 
  
 | 
  
 | 
    public PltStation selectById(String stationId) { 
 | 
        return dao.selectByPrimaryKey(Long.valueOf(stationId)); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取列表 
 | 
     */ 
 | 
    public QueryResultVo<List<PltStation>> selectSome(QueryVo queryVo) { 
 | 
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo); 
 | 
  
 | 
        //查询符合条件的记录总数 
 | 
        Long itemTotal = this.dao.selectSomeCount(params); 
 | 
  
 | 
        QueryResultVo<List<PltStation>> rsVo = new QueryResultVo<>(queryVo.pageSize, queryVo.pageCurr) ; 
 | 
        //计算分页等信息 
 | 
        rsVo.calculateAndSet(itemTotal, params); 
 | 
  
 | 
        //查询符合条件的记录 
 | 
        rsVo.obj = this.dao.selectSome(params) ; 
 | 
        rsVo.obj.parallelStream().forEach(item->{ 
 | 
            item.qrCode = QrCodeUtil.genQrCodeString(stationPrefix+item.id); 
 | 
        }); 
 | 
        return rsVo ; 
 | 
    } 
 | 
  
 | 
    @Transactional 
 | 
    public int disabled(Long id, Boolean disabled) { 
 | 
        PltStation station = new PltStation(); 
 | 
        station.setId(id); 
 | 
        station.setDisabled(disabled); 
 | 
        return dao.updateByPrimaryKeySelective(station); 
 | 
    } 
 | 
  
 | 
    public List<PltStation> selectAll() { 
 | 
        return dao.selectAll(); 
 | 
    } 
 | 
} 
 |