package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.core.exception.CoolException; import com.zy.asrs.entity.WrkLastno; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.mapper.WrkLastnoMapper; import com.zy.asrs.service.WrkLastnoService; import com.zy.asrs.service.WrkMastService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service("wrkLastnoService") public class WrkLastnoServiceImpl extends ServiceImpl implements WrkLastnoService { private final WrkMastService wrkMastService; public WrkLastnoServiceImpl(WrkMastService wrkMastService) { this.wrkMastService = wrkMastService; } @Override public WrkLastno selectByWrkMkForUpdate(Integer wrkMk) { return this.baseMapper.selectByWrkMkForUpdate(wrkMk); } @Override @Transactional(rollbackFor = Exception.class) public int allocateNextWorkNo(Integer wrkMk) { WrkLastno wrkLastno = this.baseMapper.selectByWrkMkForUpdate(wrkMk); if (wrkLastno == null) { throw new CoolException("数据异常,请联系管理员"); } Integer currentWrkNo = wrkLastno.getWrkNo(); Integer sNo = wrkLastno.getsNo(); Integer eNo = wrkLastno.geteNo(); if (currentWrkNo == null || sNo == null || eNo == null || sNo > eNo) { throw new CoolException("工作号配置异常,请联系管理员"); } int rangeSize = eNo - sNo + 1; int candidate = currentWrkNo; for (int i = 0; i < rangeSize; i++) { candidate = candidate >= eNo ? sNo : candidate + 1; WrkMast exists = wrkMastService.getOne(new QueryWrapper().eq("wrk_no", candidate), false); if (exists == null) { wrkLastno.setWrkNo(candidate); this.updateById(wrkLastno); return candidate; } } throw new CoolException("当前工作号号段已满,无法分配可用工作号"); } }