|  |  | 
 |  |  | package com.dy.pmsPlatform.station; | 
 |  |  |  | 
 |  |  | import com.alibaba.excel.util.StringUtils; | 
 |  |  | import com.dy.common.webUtil.QueryResultVo; | 
 |  |  | import com.dy.pmsGlobal.daoPlt.PltStationMapper; | 
 |  |  | import com.dy.pmsGlobal.pojoPlt.PltStation; | 
 |  |  | import com.dy.pmsGlobal.util.QrCodeUtil; | 
 |  |  | 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; | 
 |  |  |  | 
 |  |  | 
 |  |  | 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) { | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Transactional | 
 |  |  |     public int save(PltStation station) throws Exception { | 
 |  |  |         if(dao.selectByCodeId(station.id,station.code)>0){ | 
 |  |  |             throw new Exception("工站编号已存在"); | 
 |  |  |     public int save(PltStation station) throws RuntimeException { | 
 |  |  |  | 
 |  |  |         if(dao.selectByName(station.getName()).size() > 0){ | 
 |  |  |             throw new RuntimeException("工站名称("+station.getName()+")已存在,名称不允许重复添加,请变更"); | 
 |  |  |         } | 
 |  |  |         int count = dao.insertSelective(station); | 
 |  |  |         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); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  | 
 |  |  |         return this.dao.deleteLogicById(id); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Transactional | 
 |  |  |     public int update(PltStation station) throws Exception { | 
 |  |  |         if(dao.selectByCodeId(station.id,station.code)>0){ | 
 |  |  |             throw new Exception("工站编号已存在"); | 
 |  |  |     public int update(PltStation station) throws RuntimeException { | 
 |  |  | //        if(dao.selectByCodeId(station.id,station.code)>0){ | 
 |  |  | //            throw new RuntimeException("工站编号已存在"); | 
 |  |  | //        } | 
 |  |  |         boolean flag = false; | 
 |  |  |         List<PltStation>  stations = dao.selectByName(station.getName()); | 
 |  |  |         for (int i = 0; i < stations.size(); i++) { | 
 |  |  |             if(!stations.get(i).getId().equals(station.getId())){ | 
 |  |  |                 flag = true; | 
 |  |  |                 break; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         if(flag){ | 
 |  |  |             throw new RuntimeException("工站名称("+station.getName()+")已存在,名称不允许重复添加,请变更"); | 
 |  |  |         } | 
 |  |  |         int count = dao.updateByPrimaryKeySelective(station); | 
 |  |  |         return count; | 
 |  |  | 
 |  |  |  | 
 |  |  |         //查询符合条件的记录 | 
 |  |  |         rsVo.obj = this.dao.selectSome(params) ; | 
 |  |  |         rsVo.obj.parallelStream().forEach(item->{ | 
 |  |  |             item.qrCode = QrCodeUtil.genQrCodeString(stationPrefix+item.id); | 
 |  |  |         }); | 
 |  |  |         return rsVo ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |         station.setDisabled(disabled); | 
 |  |  |         return dao.updateByPrimaryKeySelective(station); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public List<PltStation> selectAll() { | 
 |  |  |         return dao.selectAll(); | 
 |  |  |     } | 
 |  |  | } | 
 |  |  |  |