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<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("当前工作号号段已满,无法分配可用工作号");
|
}
|
}
|