Java 后台自动生成编码

展示效果:

 

 

 

 

步骤:

1.在数据库中建张表(最大值,字符前缀)

 

 sys_assets资产表   

sys_assets_code 自动生成编码表:下图

 

 

 

2.mapper中的dao层

/**
 * 资产编码 数据层
 *
 * @author ruoyi
 */
public interface SysAssetsCodeMapper {

    /**
     * 不存在时insert
     * prefix
     * @return
     */
    public int insertAssetsCode(String prefix);

    /**
     * 根据字符前缀查询
     * @param prefix
     * @return
     */
    public SysAssetsCode selectByPrefix(String prefix);

 

 

3.mapper.xml文件SQL语句

注:第一个SQL(存在时更新,不存在是添加。具体访问:):https://www.cnblogs.com/liaojie970/p/6824773.html

  <!-- 不存在时insert -->
    <insert id="insertAssetsCode" parameterType="java.lang.String">
        INSERT INTO sys_assets_code (prefix,maxinx)
        VALUES (#{prefix},1) ON DUPLICATE KEY UPDATE prefix = #{prefix} ,maxinx = maxinx+1
    </insert>

    <!-- 根据字符前缀查询 -->
    <select id="selectByPrefix" parameterType="java.lang.String" resultMap="SysAssetsCodeResult">
        select t.prefix,t.maxinx  from sys_assets_code t where t.prefix = #{prefix}
    </select>

 

 

4.封装方法(参数拼接)

public interface ISysAssetsCodeService {
    /**
     * 自动生成编码
     * @param preFixe  字符
     * @param numCode  最大数值(几位)
     * @return
     */
    public String getCode(String preFixe,int numCode);
}

 

 

 

5.封装方法(字符拼接)

@Service
public class SysAssetsCodeService implements ISysAssetsCodeService {
private Lock lock = new ReentrantLock();
@Autowired
private SysAssetsCodeMapper codeMapper;

@Override
@Transactional
public String getCode(String preFixe,int numCode) {
try {
lock.lock();
int result = codeMapper.insertAssetsCode(preFixe);
SysAssetsCode sysAssetsCode = codeMapper.selectByPrefix(preFixe);
if(sysAssetsCode != null && result > 0 ){
//判断【字符前缀】不为空 && 添加时记录数大于0 【进行String.format 拼接】
return String.format("%s%"+numCode+"d", preFixe,sysAssetsCode.getMaxinx()).replace(" ", "0");
}else{
throw new RuntimeException("获取编码失败");
}
} finally {
lock.unlock();
}

}
}

6.Controller控制层

/**
* 根据资产编号获取详细信息
*/
@PreAuthorize("@ss.hasPermi('system:assets:query')")
@GetMapping(value ={"/", "/{id}"})
public AjaxResult getInfo(@PathVariable(value = "id", required = false) Long id)
{
AjaxResult ajax = AjaxResult.success();
SysAssets assets = null;
if(StringUtils.isNotNull(id)){
assets = assetsService.selectAssetsById(id);
}else{
assets = new SysAssets();
//setCodeId属性 “YFCX”可自定义看需求;“5” 代表5位数
assets.setCodeId(codeService.getCode("YFCX",5));
}
ajax.put(AjaxResult.DATA_TAG,assets);
return ajax;
}

 

posted @ 2021-10-19 15:18  爱学习的疯倾  阅读(1538)  评论(0编辑  收藏  举报