| | |
| | | package com.zy.asrs.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | 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<WrkLastnoMapper, WrkLastno> 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<WrkMast>().eq("wrk_no", candidate), false); |
| | | if (exists == null) { |
| | | wrkLastno.setWrkNo(candidate); |
| | | this.updateById(wrkLastno); |
| | | return candidate; |
| | | } |
| | | } |
| | | |
| | | throw new CoolException("当前工作号号段已满,无法分配可用工作号"); |
| | | } |
| | | } |