package com.dy.pmsPlatform.station; import com.alibaba.excel.util.StringUtils; import com.dy.common.webUtil.QueryResultVo; import com.dy.pmsGlobal.daoPlt.PltProductionLineMapper; import com.dy.pmsGlobal.daoPlt.PltStationMapper; import com.dy.pmsGlobal.pojoPlt.PltProductionLine; import com.dy.pmsGlobal.pojoPlt.PltStation; import com.dy.pmsGlobal.util.QrCodeConstant; 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 PltProductionLineMapper lineDao; // 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; } @Autowired public void setLineDao(PltProductionLineMapper lineDao) { this.lineDao = lineDao; } @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 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> selectSome(QueryVo queryVo) { Map params = (Map) PojoUtils.generalize(queryVo); //查询符合条件的记录总数 Long itemTotal = this.dao.selectSomeCount(params); QueryResultVo> 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(QrCodeConstant.TypeStation+item.id); }); return rsVo ; } @Transactional public int disabled(Long id, Boolean disabled) { if(!disabled){ PltStation station1 = dao.selectByPrimaryKey(id); PltProductionLine line = lineDao.selectByPrimaryKey(station1.lineId); if(line.disabled){ throw new RuntimeException("该工站所属生产线已禁用,请先启用该生产线"); } } PltStation station = new PltStation(); station.setId(id); station.setDisabled(disabled); return dao.updateByPrimaryKeySelective(station); } public List selectAll() { return dao.selectAll(); } }