| 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; | 
|   | 
| 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.selectByName(station.getName()).size() > 0){ | 
|             throw new RuntimeException("工站名称("+station.getName()+")已存在,名称不允许重复添加,请变更"); | 
|         } | 
|         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("工站编号已存在"); | 
| //        } | 
|         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; | 
|     } | 
|   | 
|   | 
|     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(); | 
|     } | 
| } |