国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

關于程序員不寫代碼注釋這一件事

這篇具有很好參考價值的文章主要介紹了關于程序員不寫代碼注釋這一件事。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一:我對代碼注釋的觀點

博主個人寫代碼是肯定會寫注釋的,哪怕是簡單的功能,文檔注釋、多行注釋、單行注釋怎么順手怎么用,讓一個小白也能看懂自己的代碼。

二:我認為程序員不寫注釋的原因

博主認為程序員不寫注釋的原因無外乎以下幾點:

1、太懶了,就是單純不想寫

2、平時沒有養(yǎng)成寫代碼注釋的習慣

3、作為一個程序員,卻沒有程序員的基本素養(yǎng)(為什么和第1點分開寫呢,懂的都懂)

三:如何才能寫出漂亮的注釋

1、在類和方法上,使用文檔注釋

2、在方法內部,可以使用多行注釋+單行注釋的組合讓注釋有條有理

3、漂亮的注釋要配合適當的代碼縮進才能達到更好的效果,如果所有代碼之前都沒有空格和換行,那么你的代碼整體會非常亂,哪怕寫了注釋也一樣。注釋和代碼會混合在一起,可讀性非常差。

4、和代碼編寫不同的是,代碼注釋本身并沒有統一的規(guī)范,所以,其實完全可以根據自己的喜好來寫,甚至可以在service層的impl實現類的方法上面加上整個業(yè)務的核心步驟并編號,然后在代碼中也復寫一次,類似于書的目錄。

說了那么多,不如show me your code!

下面貼出的兩個類,基本上就是我的代碼注釋風格了文章來源地址http://www.zghlxwxcb.cn/news/detail-726596.html

package cn.edu.sgu.www.mhxysy.service.chongwu.impl;

import cn.edu.sgu.www.mhxysy.base.Pager;
import cn.edu.sgu.www.mhxysy.consts.IdentifierPrefixConst;
import cn.edu.sgu.www.mhxysy.dto.chongwu.ChongwuDTO;
import cn.edu.sgu.www.mhxysy.dto.chongwu.ChongwuTongyuDTO;
import cn.edu.sgu.www.mhxysy.entity.chongwu.Chongwu;
import cn.edu.sgu.www.mhxysy.entity.chongwu.ChongwuAttribute;
import cn.edu.sgu.www.mhxysy.entity.chongwu.ChongwuJiadian;
import cn.edu.sgu.www.mhxysy.entity.chongwu.ChongwuZizhi;
import cn.edu.sgu.www.mhxysy.enums.JiadianSchemas;
import cn.edu.sgu.www.mhxysy.enums.TongyuState;
import cn.edu.sgu.www.mhxysy.exception.GlobalException;
import cn.edu.sgu.www.mhxysy.mapper.chongwu.*;
import cn.edu.sgu.www.mhxysy.pager.chongwu.ChongwuPager;
import cn.edu.sgu.www.mhxysy.restful.JsonPage;
import cn.edu.sgu.www.mhxysy.restful.JsonResult;
import cn.edu.sgu.www.mhxysy.restful.ResponseCode;
import cn.edu.sgu.www.mhxysy.service.chongwu.ChongwuService;
import cn.edu.sgu.www.mhxysy.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author heyunlin
 * @version 1.0
 */
@Service
public class ChongwuServiceImpl implements ChongwuService {

	private final ChongwuAttributeMapper chongwuAttributeMapper;
	private final ChongwuJiadianMapper chongwuJiadianMapper;
	private final ChongwuSkillMapper chongwuSkillMapper;
	private final ChongwuZizhiMapper chongwuZizhiMapper;
	private final ChongwuMapper chongwuMapper;

	@Autowired
	public ChongwuServiceImpl(
			ChongwuAttributeMapper chongwuAttributeMapper,
			ChongwuJiadianMapper chongwuJiadianMapper,
			ChongwuSkillMapper chongwuSkillMapper,
			ChongwuZizhiMapper chongwuZizhiMapper,
			ChongwuMapper chongwuMapper) {
		this.chongwuAttributeMapper = chongwuAttributeMapper;
		this.chongwuJiadianMapper = chongwuJiadianMapper;
		this.chongwuSkillMapper = chongwuSkillMapper;
		this.chongwuZizhiMapper = chongwuZizhiMapper;
		this.chongwuMapper = chongwuMapper;
	}

	@Override
	public void insert(ChongwuDTO chongwuDTO) {
		// 1、添加寵物屬性
		int dkfy = (chongwuDTO.getGrade() - 10) * 20; // 抵抗封印
		ChongwuAttribute attribute = new ChongwuAttribute();

		attribute.setId(IdentifierPrefixConst.PREFIX_CHONGWU_SHUXING + StringUtils.uuid());
		attribute.setDkfy((dkfy > 0)? dkfy: 1);
		
		chongwuAttributeMapper.insert(attribute);
		
		// 2、添加寵物資質、成長信息
		ChongwuZizhi zizhi = new ChongwuZizhi();
		
		zizhi.setId(IdentifierPrefixConst.PREFIX_CHONGWU_ZIZHI + StringUtils.uuid());
		
		chongwuZizhiMapper.insert(zizhi);
		
		// 3、添加寵物
		Chongwu chongwu = new Chongwu();

		chongwu.setZizhiId(null);
		chongwu.setZizhiId(zizhi.getId());
		chongwu.setAttributeId(attribute.getId());
		chongwu.setTyStatus(TongyuState.WTY.getValue());
		chongwu.setId(IdentifierPrefixConst.PREFIX_CHONGWU + StringUtils.uuid());
		// copy value from ChongwuDTO
		chongwu.setName(chongwuDTO.getName());
		chongwu.setType(chongwuDTO.getType());
		chongwu.setScore(chongwuDTO.getScore());
		chongwu.setGrade(chongwuDTO.getGrade());
		chongwu.setRoleId(chongwuDTO.getRoleId());
		chongwu.setLifespan(chongwuDTO.getLifespan());
		chongwu.setCategoryId(chongwuDTO.getCategoryId());

		chongwuMapper.insert(chongwu);
		
		// 4、添加寵物加點
		ChongwuJiadian chongwuJiadian = new ChongwuJiadian();
		
		chongwuJiadian.setId(IdentifierPrefixConst.PREFIX_CHONGWU_JIADIAN + StringUtils.uuid());
		chongwuJiadian.setJiadianSchema(JiadianSchemas.JDFAY.getValue());
		chongwuJiadian.setAttributeId(attribute.getId());
		chongwuJiadian.setChongwuId(chongwu.getId());
		chongwuJiadian.setUnlockState(1);
		chongwuJiadian.setOpenState(1);

		chongwuJiadianMapper.insert(chongwuJiadian);
	}

	@Override
	public void deleteById(String id) {
		// 通過寵物id查詢寵物技能
		Chongwu chongwu = chongwuMapper.selectById(id);

		// 判斷寵物是否存在,若不存在,拋出異常
		if (chongwu == null) {
			throw new GlobalException(ResponseCode.NOT_FOUND, "刪除失敗,寵物不存在~");
		}

		// 1、通過id刪除寵物屬性
		chongwuAttributeMapper.deleteById(chongwu.getAttributeId());

		// 2、通過id刪除寵物資質
		chongwuZizhiMapper.deleteById(chongwu.getZizhiId());

		// 3、通過寵物id刪除寵物技能
		chongwuSkillMapper.deleteByChongwuId(id);

		// 4、通過id刪除寵物
		chongwuMapper.deleteById(id);
	}

	@Override
	public void updateById(Chongwu chongwu) {
		chongwuMapper.updateById(chongwu);
	}

	@Override
	public List<Chongwu> selectAll() {
		return chongwuMapper.selectList(null);
	}

	@Override
	public Chongwu selectById(String id) {
		return chongwuMapper.selectById(id);
	}

	@Override
	public List<Chongwu> select(Chongwu chongwu) {
		QueryWrapper<Chongwu> wrapper = new QueryWrapper<Chongwu>();

		wrapper.eq(
				chongwu.getCategoryId() != null,
				"category_id", chongwu.getCategoryId()
		);
		wrapper.eq(
				StringUtils.isNotEmpty(chongwu.getRoleId()),
				"role_id", chongwu.getRoleId()
		);
		wrapper.eq(
				StringUtils.isNotEmpty(chongwu.getZuoqiId()),
				"zuoqi_id", chongwu.getZuoqiId()
		);

		return chongwuMapper.selectList(wrapper);
	}

	@Override
	public List<Chongwu> selectByRoleId(String roleId) {
		QueryWrapper<Chongwu> wrapper = new QueryWrapper<>();

		wrapper.eq("role_id", roleId);

		return chongwuMapper.selectList(wrapper);
	}

	@Override
	public List<String> selectImagesByZuoqiId(String zuoqiId) {
		return chongwuMapper.selectImagesByZuoqiId(zuoqiId);
	}

	@Override
	public JsonResult<JsonPage<Chongwu>> selectByPage(ChongwuPager pager) {
		String skillIds = pager.getSkillIds();

		if (StringUtils.isNotEmpty(skillIds)) {
			String[] array = skillIds.split("-");
			// 得到order by語句
			String statement = Pager.getStatement(pager);

			List<Chongwu> list = chongwuMapper.selectBySkills(pager, array, array.length, statement);
			long total = chongwuMapper.selectCountBySkills(pager, array, array.length);

			return JsonResult.restPage(total, list);
		} else {
			Page<Chongwu> page = new Page<>(pager.getPage(), pager.getRows());
			QueryWrapper<Chongwu> wrapper = new QueryWrapper<>();

			wrapper.eq(
					pager.getCategoryId() != null,
					"category_id", pager.getCategoryId()
			);
			wrapper.eq(
					StringUtils.isNotEmpty(pager.getRoleId()),
					"role_id", pager.getRoleId()
			);
			wrapper.eq(
					StringUtils.isNotEmpty(pager.getZuoqiId()),
					"zuoqi_id", pager.getZuoqiId()
			);
//			wrapper.orderByAsc("role_id");

			// 得到order by語句
			String statement = Pager.getOrderByStatement(pager);
			wrapper.last(statement);

			Page<Chongwu> result = chongwuMapper.selectPage(page, wrapper);
			return JsonResult.restPage(result);
		}
	}

	@Override
	public void tongyu(Chongwu chongwu) {
		chongwu.setTyStatus(1 - chongwu.getTyStatus());

		// 【統御】操作
		if (chongwu.getTyStatus() == 1) {
			QueryWrapper<Chongwu> wrapper = new QueryWrapper<Chongwu>();

			wrapper.eq(
					StringUtils.isNotEmpty(chongwu.getRoleId()),
					"role_id", chongwu.getRoleId()
			);
			wrapper.eq(
					StringUtils.isNotEmpty(chongwu.getZuoqiId()),
					"zuoqi_id", chongwu.getZuoqiId()
			);
			wrapper.eq("ty_status", TongyuState.YTY.getValue());

			// 獲取坐騎統御的寵物總數
			long count =  chongwuMapper.selectCount(wrapper);

			// 已經統御兩只寵物,終止操作,拋出異常
			if (count >= 2) {
				throw new GlobalException(ResponseCode.BAD_REQUEST, "最多可以統御兩只寵物!");
			}

			chongwuMapper.updateById(chongwu);
		} else { // [取消統御]操作
			// 修改寵物的坐騎id為null,并設置統御狀態(tài)為:0-未統御
			UpdateWrapper<Chongwu> wrapper = new UpdateWrapper<>();

			wrapper.eq("id", chongwu.getId());
			wrapper.set("zuoqi_id", null);
			wrapper.set("ty_status", TongyuState.WTY.getValue());

			chongwuMapper.update(wrapper.getEntity(), wrapper);
		}
	}

	@Override
	public void change(ChongwuTongyuDTO tongyuDTO) {
		// 判斷寵物的統御狀態(tài),若為未統御,拋出異常
		if (TongyuState.WTY.getValue().equals(tongyuDTO.getTyStatus())) {
			throw new GlobalException(ResponseCode.BAD_REQUEST, "寵物狀態(tài)為未統御,更換統御失??!");
		}

		// 修改寵物的統御坐騎id
		Chongwu chongwu = new Chongwu();

		chongwu.setId(tongyuDTO.getId());
		chongwu.setZuoqiId(tongyuDTO.getZuoqiId());

		chongwuMapper.updateById(chongwu);
	}

}
package cn.edu.sgu.www.mhxysy.service.chongwu.impl;

import cn.edu.sgu.www.mhxysy.base.Pager;
import cn.edu.sgu.www.mhxysy.consts.IdentifierPrefixConst;
import cn.edu.sgu.www.mhxysy.dto.chongwu.ChongwuSkillDTO;
import cn.edu.sgu.www.mhxysy.entity.chongwu.Chongwu;
import cn.edu.sgu.www.mhxysy.entity.chongwu.ChongwuSkill;
import cn.edu.sgu.www.mhxysy.entity.chongwu.ChongwuSkillCategory;
import cn.edu.sgu.www.mhxysy.enums.AuthStatus;
import cn.edu.sgu.www.mhxysy.exception.GlobalException;
import cn.edu.sgu.www.mhxysy.mapper.chongwu.ChongwuMapper;
import cn.edu.sgu.www.mhxysy.mapper.chongwu.ChongwuSkillCategoryMapper;
import cn.edu.sgu.www.mhxysy.mapper.chongwu.ChongwuSkillMapper;
import cn.edu.sgu.www.mhxysy.pager.chongwu.ChongwuSkillPager;
import cn.edu.sgu.www.mhxysy.restful.ResponseCode;
import cn.edu.sgu.www.mhxysy.service.chongwu.ChongwuSkillService;
import cn.edu.sgu.www.mhxysy.util.NumberUtils;
import cn.edu.sgu.www.mhxysy.util.StringUtils;
import cn.edu.sgu.www.mhxysy.vo.chongwu.ChongwuSkillVO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author heyunlin
 * @version 1.0
 */
@Service
public class ChongwuSkillServiceImpl implements ChongwuSkillService {

	private final ChongwuMapper chongwuMapper;
	private final ChongwuSkillMapper chongwuSkillMapper;
	private final ChongwuSkillCategoryMapper chongwuSkillCategoryMapper;

	@Autowired
	public ChongwuSkillServiceImpl(
			ChongwuMapper chongwuMapper,
			ChongwuSkillMapper chongwuSkillMapper,
			ChongwuSkillCategoryMapper chongwuSkillCategoryMapper) {
		this.chongwuMapper = chongwuMapper;
		this.chongwuSkillMapper = chongwuSkillMapper;
		this.chongwuSkillCategoryMapper = chongwuSkillCategoryMapper;
	}

	@Override
	public void insert(ChongwuSkillDTO chongwuSkillDTO) {
		// 得到寵物ID和技能ID
		String chongwuId = chongwuSkillDTO.getChongwuId();
		Integer skillId = chongwuSkillDTO.getSkillId();

		// 驗證寵物技能是否重復
		int location = validate(chongwuId, skillId);

		if (location > 0) {
			// 添加寵物技能
			ChongwuSkill chongwuSkill = new ChongwuSkill();

			chongwuSkill.setSkillId(skillId);
			chongwuSkill.setLocation(location);
			chongwuSkill.setChongwuId(chongwuId);
			chongwuSkill.setAuthStatus(AuthStatus.WRZ.getValue());
			chongwuSkill.setId(IdentifierPrefixConst.PREFIX_CWJN + StringUtils.uuid());

			chongwuSkillMapper.insert(chongwuSkill);
		}
	}

	@Override
	public void updateById(ChongwuSkill chongwuskill) {
		chongwuSkillMapper.updateById(chongwuskill);
	}

	@Override
	public Page<ChongwuSkill> selectByPage(ChongwuSkillPager pager) {
		QueryWrapper<ChongwuSkill> wrapper = new QueryWrapper<>();
		Page<ChongwuSkill> page = Pager.ofPage(pager);

		wrapper.eq(
				StringUtils.isNotEmpty(pager.getChongwuId()),
				"chongwu_id", pager.getChongwuId()
		);
		wrapper.eq(
				pager.getSkillId() != null,
				"skill_id", pager.getSkillId()
		);

		return chongwuSkillMapper.selectPage(page, wrapper);
	}

	@Override
	public List<ChongwuSkillVO> getLearnedSkills(String chongwuId) {
		return chongwuSkillMapper.getLearnedSkills(chongwuId);
	}

	@Override
	public ChongwuSkill getAuthedSkill(String chongwuId) {
		QueryWrapper<ChongwuSkill> wrapper = new QueryWrapper<>();

		wrapper.eq("chongwu_id", chongwuId);
		wrapper.eq("auth_status", AuthStatus.YRZ.getValue());

		return chongwuSkillMapper.selectOne(wrapper);
	}

	@Override
	public List<ChongwuSkill> getCanAuthedSkills(String chongwuId) {
		return chongwuSkillMapper.getCanAuthedSkills(chongwuId);
	}

	/**
	 * 學習技能
	 * @param chongwuSkillDTO 寵物技能信息
	 * @return String 學習的新技能名稱
	 */
	@Override
	public String study(ChongwuSkillDTO chongwuSkillDTO) {
		Integer skillId = chongwuSkillDTO.getSkillId();
		String chongwuId = chongwuSkillDTO.getChongwuId();

		/*
		 * 1、判斷是否寵物已學習的技能
		 */
		int location = validate(chongwuId, skillId);

		/*
		 * 2、進入寵物學習技能流程
		 */
		// 查詢寵物技能
		List<ChongwuSkill> chongwuSkills = selectByChongwuId(chongwuId);
		// 刪除已認證的技能(1號位 && 認證狀態(tài)為:1-已認證)
		chongwuSkills.removeIf(chongwuSkill -> chongwuSkill.getAuthStatus() == 1 && chongwuSkill.getLocation() == 1);

		// 學習之前的技能名稱
		String name = null;

		/*
			新增技能
			1、寵物尚未學習技能
			2、寵物已學習技能數 < 3
			3、只有一個已認證的技能(理論上不存在這種可能,因為認證會生成一個新技能)
		*/
		if (chongwuSkills.isEmpty() || location <= 3) {
			ChongwuSkill chongwuSkill = new ChongwuSkill();

			chongwuSkill.setSkillId(skillId);
			chongwuSkill.setLocation(location);
			chongwuSkill.setChongwuId(chongwuId);
			chongwuSkill.setAuthStatus(AuthStatus.WRZ.getValue());
			chongwuSkill.setId(IdentifierPrefixConst.PREFIX_CWJN + StringUtils.uuid());

			chongwuSkillMapper.insert(chongwuSkill);
		} else {
			/*
				替換技能:隨機替換寵物學習的一個技能
			*/
			// 生成隨機下標
			int index = NumberUtils.random(0, chongwuSkills.size() - 1);
			// 得到指定下標的元素
			ChongwuSkill chongwuSkill = chongwuSkills.get(index);
			// 查詢學習之前當前位置的的技能名稱
			name = chongwuSkillCategoryMapper.selectById(chongwuSkill.getSkillId()).getName();

			// 修改寵物技能信息
			chongwuSkill.setSkillId(skillId);
			chongwuSkillMapper.updateById(chongwuSkill);
		}

		// 返回學習之前的技能名稱
		return name;
	}

	/**
	 * 法術認證
	 * 1、判斷技能是否存在:不存在則認證失敗,拋出異常
	 * 2、判斷技能是否可認證:不可認證則認證失敗,拋出異常
	 * 3、判斷技能的認證狀態(tài):已認證則認證失敗,拋出異常
	 * 4、判斷寵物是否已有認證的技能,每只寵物只能認證一個技能:若有,則認證失敗,拋出異常
	 * 5、判斷認證后寵物學習的技能數量是否大于13:大于13則認證失敗,拋出異常
	 * 6、在其前面的技能整體后移1位
	 * 7、修改認證的技能位置及認證狀態(tài)為1
	 * 8、為寵物隨機添加一個未學習的低級技能
	 */
	@Override
	public void authenticate(ChongwuSkill chongwuSkill) {
		/*
		 * 1、判斷技能是否存在:不存在則認證失敗,拋出異常
		 */
		Integer location = chongwuSkill.getLocation();
		String chongwuId = chongwuSkill.getChongwuId();

		// 獲取寵物指定位置的技能信息
		QueryWrapper<ChongwuSkill> wrapper = new QueryWrapper<>();
		wrapper.eq("chongwu_id", chongwuId);
		wrapper.eq("location", location);
		List<ChongwuSkill> list = chongwuSkillMapper.selectList(wrapper);

		// 查詢結果大于1,數據異常
		int count = list.size();
		ChongwuSkill dbResult;

		if (count == 0){
			throw new GlobalException(ResponseCode.NOT_FOUND, "技能不存在,認證失敗");
		} else if (count > 1) {
			String msg = "數據錯誤,查詢到寵物" + chongwuId + "在" + location + "號位的技能超過1個,請聯系管理員處理";

			throw new GlobalException(ResponseCode.BAD_REQUEST, msg);
		} else {
			dbResult = list.get(0);
		}
		/*
		 * 2、判斷技能是否可認證,不可認證則認證失敗,拋出異常
		 */
		ChongwuSkillCategory category = chongwuSkillCategoryMapper.selectById(dbResult.getSkillId());
		String name = category.getName();

		// 技能無法認證
		if (category.getCanAuthed() == 0) {
			throw new GlobalException(ResponseCode.FORBIDDEN,
					"技能<span class='blue'>" + name + "</span>無法認證,選擇其他技能試試吧o_o");
		}

		/*
		 * 3、判斷技能的認證狀態(tài),已認證則認證失敗,拋出異常
		 */
		// 技能已認證
		if (AuthStatus.YRZ.getValue().equals(dbResult.getAuthStatus())) {
			throw new GlobalException(ResponseCode.FORBIDDEN,
					"技能<span style='color:blue;'>" + name + "</span>已經認證,少俠不要戲弄我了");
		}

		/*
		 * 4、判斷寵物是否已有認證的技能,每只寵物只能認證一個技能:若有,則認證失敗,拋出異常
		 */
		// 查詢寵物已認證的技能
		wrapper = new QueryWrapper<>();

		wrapper.eq("chongwu_id", chongwuId);
		wrapper.eq("auth_status", AuthStatus.YRZ.getValue());

		long size = chongwuSkillMapper.selectCount(wrapper);

		if (size > 0) {
			throw new GlobalException(ResponseCode.CONFLICT, "已經有一個已認證的技能了");
		}

		/*
		 * 5、判斷認證后寵物學習的技能數量是否大于13:大于13則認證失敗,拋出異常
		 */
		// 查詢寵物學習的技能總數
		int total = chongwuSkillMapper.selectCountByChongwuId(chongwuId);

		// 判斷count + 1 > 13
		if (total > 12) {
			throw new GlobalException(ResponseCode.BAD_REQUEST, "寵物技能數量已達上限");
		}

		/*
		 * 6、在其前面的技能整體后移1位
		 */
		// 如果位置大于1,則其前面還有技能,修改其前面的技能位置+1
		if (location > 1) {
			chongwuSkillMapper.increaseLocations(chongwuId, location);
		}

		/*
		 * 7、修改認證的技能位置及認證狀態(tài)為1
		 */
		UpdateWrapper<ChongwuSkill> updateWrapper = new UpdateWrapper<>();

		updateWrapper.eq("id", dbResult.getId());
		updateWrapper.set("location", 1);
		updateWrapper.set("auth_status", AuthStatus.YRZ.getValue());

		chongwuSkillMapper.update(updateWrapper.getEntity(), updateWrapper);

		/*
		 * 8、為寵物隨機添加一個寵物未學習的低級技能
		 */
		// 查詢寵物已學習的技能的ID
		List<Integer> skillIds = chongwuSkillMapper.selectLearnedSkillIds(chongwuId);

		// 查詢寵物未學習的低級技能
		QueryWrapper<ChongwuSkillCategory> queryWrapper = new QueryWrapper<>();

		queryWrapper.notIn("id", skillIds);
		queryWrapper.eq("type", 0);
		queryWrapper.eq("can_authed", 0);

		List<ChongwuSkillCategory> categories = chongwuSkillCategoryMapper.selectList(queryWrapper);

		// 得到隨機下標
		int index = NumberUtils.random(0, categories.size() - 1);

		// 添加一個新的寵物技能
		ChongwuSkill skill = new ChongwuSkill();

		skill.setLocation(total + 1);
		skill.setChongwuId(chongwuId);
		skill.setAuthStatus(AuthStatus.WRZ.getValue());
		skill.setSkillId(categories.get(index).getId());
		skill.setId(IdentifierPrefixConst.PREFIX_CWJN + StringUtils.uuid());

		chongwuSkillMapper.insert(skill);
	}

	/**
	 * 取消法術認證
	 * 1、查詢寵物已認證的技能:若查詢結果為空,則拋出異常
	 * 2、刪除已認證的技能
	 * 3、其他技能的位置向前推進1格
	 * @param chongwuId 寵物id
	 * @return String
	 */
	@Override
	public String cancelAuth(String chongwuId) {
		/*
		 * 1、查詢寵物已認證的技能:若查詢結果為空,則拋出異常
		 */
		ChongwuSkill chongwuSkill = beforAuth(chongwuId);

		/*
		 * 2、刪除已認證的技能
		 */
		chongwuSkillMapper.deleteById(chongwuSkill.getId());

		/*
		 * 3、其他技能的位置向前推進1格
		 */
		chongwuSkillMapper.decreaseLocations(chongwuId);


		// 返回寵物名稱和等級拼接的字符串
		Chongwu chongwu = chongwuMapper.selectById(chongwuId);

		return chongwu.getName() + "(" + chongwu.getGrade() + "級)";
	}

	/**
	 * 認證替換
	 * 1、查詢寵物已認證的技能:若查詢結果為空,拋出異常
	 * 2、修改已認證技能的寵物技能類型id
	 * @param chongwuSkillDTO 認證信息
	 */
	@Override
	public void replaceAuth(ChongwuSkillDTO chongwuSkillDTO) {
		/*
		 * 1、查詢寵物已認證的技能:若查詢結果為空,則拋出異常
		 */
		ChongwuSkill chongwuSkill = beforAuth(chongwuSkillDTO.getChongwuId());

		/*
		 * 2、修改已認證技能的寵物技能類型id
		 */
		UpdateWrapper<ChongwuSkill> updateWrapper = new UpdateWrapper<>();
		updateWrapper.set("skill_id", chongwuSkillDTO.getSkillId());
		updateWrapper.eq("id", chongwuSkill.getId());

		chongwuSkillMapper.update(updateWrapper.getEntity(), updateWrapper);
	}

	@Override
	public boolean hasAuthedSkills(String chongwuId) {
		QueryWrapper<ChongwuSkill> wrapper = new QueryWrapper<>();

		wrapper.eq("chongwu_id", chongwuId);
		wrapper.eq("auth_status", AuthStatus.YRZ.getValue());

		return chongwuSkillMapper.exists(wrapper);
	}

	/**
	 * 驗證寵物技能上限及是否重復
	 * @param chongwuId 寵物ID
	 * @param skillId 技能ID
	 * @return int 寵物技能的下一個位置
	 */
	private int validate(String chongwuId, Integer skillId) {
		// 通過寵物ID查詢寵物技能
		List<ChongwuSkill> chongwuSkills = selectByChongwuId(chongwuId);

		// 寵物技能不為空
		if (!chongwuSkills.isEmpty()) {
			// 檢查寵物已學習的技能數量
			if (chongwuSkills.size() > 12) {
				throw new GlobalException(ResponseCode.BAD_REQUEST, "該寵物的技能數量已經上限!");
			}

			// 判斷技能是否重復,當前的技能ID是否在技能列表
			for (ChongwuSkill chongwuSkill : chongwuSkills) {
				if (skillId.equals(chongwuSkill.getSkillId())) {
					throw new GlobalException(ResponseCode.BAD_REQUEST, "已經學習了相同的技能,別浪費了~");
				}
			}
		}

		return chongwuSkills.size() + 1;
	}

	/**
	 * 通過寵物id查詢寵物技能
	 * @param chongwuId 寵物id
	 * @return List<ChongwuSkill>
	 */
	private List<ChongwuSkill> selectByChongwuId(String chongwuId) {
		QueryWrapper<ChongwuSkill> wrapper = new QueryWrapper<>();

		wrapper.eq("chongwu_id", chongwuId);

		return chongwuSkillMapper.selectList(wrapper);
	}

	/**
	 * 認證/取消認證前的檢查
	 * @param chongwuId 寵物id
	 */
	private ChongwuSkill beforAuth(String chongwuId) {
		// 查詢寵物已認證的技能
		QueryWrapper<ChongwuSkill> wrapper = new QueryWrapper<>();
		wrapper.eq("chongwu_id", chongwuId);
		wrapper.eq("auth_status", AuthStatus.YRZ.getValue());
		List<ChongwuSkill> chongwuSkills = chongwuSkillMapper.selectList(wrapper);

		// 查詢結果數
		int count = chongwuSkills.size();

		if (count == 0) { // 查詢結果為空
			throw new GlobalException(ResponseCode.NOT_FOUND, "當前寵物沒有已認證的技能");
		} else if (count > 1) { // 查詢結果數大于1
			throw new GlobalException(ResponseCode.CONFLICT, "數據異常,寵物已認證的技能數大于1");
		} else {
			return chongwuSkills.get(0);
		}
	}

}

到了這里,關于關于程序員不寫代碼注釋這一件事的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 《程序員的炫技代碼》

    《程序員的炫技代碼》

    ? 程序員,這個職業(yè)總是讓人感到神秘而又充滿魅力。他們手中的代碼常常充滿了令人驚嘆的炫技操作,讓人不禁感嘆他們的技術能力之高。在這篇文章中,我想和大家分享一些我所知道的程序員的炫技代碼。 一行代碼實現斐波那契數列 斐波那契數列是一組數列,其中每個

    2024年02月06日
    瀏覽(28)
  • 無代碼時代來了,程序員會失業(yè)嗎?不,程序員又不夠用了!

    無代碼時代來了,程序員會失業(yè)嗎?不,程序員又不夠用了!

    有人問我無代碼時代來了,程序員會失業(yè)嗎?太難了,禿了頭就算了,連工作也保不住了? 先說觀點: 并不會 因為,無代碼不是真正意義上的 無代碼 。 “無代碼”開發(fā)平臺可以說是為“編程小白”量身打造的,使用者無需編程語言基礎,通過簡單拖拽、連接應用程序模塊

    2024年02月03日
    瀏覽(99)
  • 程序員的炫技代碼寫法

    程序員的炫技代碼寫法

    程序員,這個職業(yè)總是讓人感到神秘而又充滿魅力。他們手中的代碼常常充滿了令人驚嘆的炫技操作,讓人不禁感嘆他們的技術能力之高。在這篇博客中,我想和大家分享一些我所知道的程序員的炫技代碼寫法。 一、代碼美感——靈動轉換 美感是良好的編碼風格的基礎,也

    2024年02月08日
    瀏覽(36)
  • 程序員如何提高代碼能力?

    程序員如何提高代碼能力?

    作為一名程序員,自己的本質工作就是做程序開發(fā),那么程序開發(fā)的時候最直接的體現就是代碼,檢驗一個程序員技術水平的一個核心環(huán)節(jié)就是開發(fā)時候的代碼能力。眾所周知,程序開發(fā)的水平提升是一個循序漸進的過程,每一位程序員都是從“菜鳥”變成“大神”的,所以

    2024年02月01日
    瀏覽(22)
  • 程序員如何提高代碼能力

    程序員如何提高代碼能力

    C++ 是一種功能強大的編程語言,廣泛應用于操作系統、數據庫、游戲開發(fā)等領域。而要成為一名優(yōu)秀的 C++ 程序員,不僅需要掌握 C++ 的基本語法和特性,還需要不斷提高自己的代碼能力。 以下是一些具體的方法和建議,幫助你提高 C++ 代碼能力: 閱讀優(yōu)秀的代碼 閱讀優(yōu)秀代

    2023年04月25日
    瀏覽(22)
  • 程序員如何高質量重構代碼?

    程序員如何高質量重構代碼?

    有道無術,術尚可求也,有術無道止于術。你好,我是程序員雪球,今天和你聊聊程序員重構代碼那些事。 ? 程序員重構代碼的重要性不言而喻,但如何進行有效的重構呢?下面是一些建議和指導。 為什么要重構? 重構是提高代碼質量和可維護性的重要手段,旨在在不改變

    2024年02月15日
    瀏覽(43)
  • 〖程序員的自我修養(yǎng) - 認知剖析篇④〗- 關于前端方向與后端方向的一些個人見解

    人之所以會覺得迷茫,本質上是欠缺對自己的一個控制力、識別龐雜信息、去偽存真的獨立思考與認知能力。 說明:該文屬于 程序員的自我修養(yǎng) 專欄, 購買任意白寶書體系化專欄可加入 易編程社區(qū), 早鳥價訂閱模式除外 。 福利:加入社區(qū)的小伙伴們,除了可以獲取博主

    2024年02月14日
    瀏覽(21)
  • 程序員應用開發(fā)的神器——低代碼

    程序員應用開發(fā)的神器——低代碼

    低代碼的熱潮至今未消停,從阿里釘釘跨平臺協作方式,再到飛書上的審批流程,以及目前我們接觸到的表單審批、投票的模板,這些都是關于低代碼的實現方式。 據Gartner最新報告顯示,到2023年,超過70%的企業(yè)將采用低代碼作為他們發(fā)展戰(zhàn)略的關鍵目標之一;到2025年,整體

    2024年02月02日
    瀏覽(20)
  • 程序員必備之——代碼托管工具 git

    程序員必備之——代碼托管工具 git

    目錄 一、git的安裝及本地配置 1.1、git介紹 1.2、git本地安裝及配置 1.3、git遠程倉庫 二、git的命令及使用 2.1、基礎命令 三、git的分支 3.1、常用命令 3.2、執(zhí)行效果圖 3.3、合并時有沖突該怎么辦? 3.4、解決沖突 3.5、git分支圖解 四、連接遠程倉庫 4.1、在gitee新建遠程倉庫 4.2、

    2024年02月08日
    瀏覽(40)
  • 低代碼時代來臨,程序員如何保住飯碗?

    隨著低代碼/無代碼時代的到來,程序員需要適應這一變化來保住他們的飯碗。雖然低代碼/無代碼平臺能夠簡化應用程序開發(fā)過程,但仍然存在許多機會和挑戰(zhàn)供程序員利用。 以下是一些程序員可以采取的策略來適應低代碼時代并保住飯碗的建議: 深入了解低代碼/無代碼技

    2024年02月11日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包