package com.goafanti.achievement.service.impl; import java.text.ParseException; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.goafanti.achievement.bo.AchievementListBo; import com.goafanti.achievement.service.AchievementService; import com.goafanti.common.constant.AFTConstants; import com.goafanti.common.dao.AchievementMapper; import com.goafanti.common.enums.AchievementReleaseStatus; import com.goafanti.common.enums.AchievementStatus; import com.goafanti.common.enums.DeleteStatus; import com.goafanti.common.enums.DemandReleaseStatus; import com.goafanti.common.enums.DemandStatus; import com.goafanti.common.model.Achievement; import com.goafanti.common.utils.DateUtils; import com.goafanti.core.mybatis.BaseMybatisDao; import com.goafanti.core.mybatis.page.Pagination; import com.goafanti.core.shiro.token.TokenManager; @Service public class AchievementServiceImpl extends BaseMybatisDao implements AchievementService { @Autowired private AchievementMapper achievementMapper; @SuppressWarnings("unchecked") @Override public Pagination listAchievement(Integer serialNumber, String name, String keyword, Integer category, Integer ownerType, Integer status, String releaseDateStartDate, String releaseDateEndDate, Integer releaseStatus, Integer pNo, Integer pSize) { if (pNo == null || pNo < 0) { pNo = 1; } if (pSize == null || pSize < 0) { pSize = 10; } return (Pagination) findPage( "findManageAchievementListByPage", "findManageAchievementCount", disposeParams(serialNumber, name, keyword, category, ownerType, status, releaseDateStartDate, releaseDateEndDate, releaseStatus), pNo, pSize); } @Override public void saveAchievement(Achievement a) { a.setId(UUID.randomUUID().toString()); a.setDeletedSign(DeleteStatus.UNDELETE.getCode()); Calendar now = Calendar.getInstance(); now.set(Calendar.MILLISECOND, 0); a.setStatus(AchievementStatus.CREATE.getCode()); if (AchievementReleaseStatus.RELEASED.getCode().equals(a.getReleaseStatus())) { a.setReleaseDate(now.getTime()); a.setStatus(AchievementStatus.ONGOING.getCode()); } a.setCreateTime(now.getTime()); achievementMapper.insert(a); } @Override public int updateAchievement(Achievement a) { Achievement aa = achievementMapper.selectByPrimaryKey(a.getId()); if (AchievementReleaseStatus.RELEASED.getCode().equals(a.getReleaseStatus()) && DemandReleaseStatus.UNRELEASE.getCode().equals(aa.getReleaseStatus())) { Calendar now = Calendar.getInstance(); now.set(Calendar.MILLISECOND, 0); a.setReleaseDate(now.getTime()); a.setStatus(AchievementStatus.ONGOING.getCode()); } if (DemandReleaseStatus.UNRELEASE.getCode().equals(a.getReleaseStatus()) && DemandReleaseStatus.RELEASED.getCode().equals(aa.getReleaseStatus())) { a.setStatus(DemandStatus.CREATE.getCode()); achievementMapper.updateReleaseDate(aa.getId()); } return achievementMapper.updateByPrimaryKeySelective(a); } @Override public Achievement selectByPrimaryKey(String id) { return achievementMapper.selectByPrimaryKey(id); } @Override public int deleteByPrimaryKey(List id) { return achievementMapper.batchDeleteByPrimaryKey(id); } @SuppressWarnings("unchecked") @Override public Pagination listUserAchievement(Integer serialNumber, String name, String keyword, Integer category, Integer ownerType, Integer status, String releaseDateStartDate, String releaseDateEndDate, Integer releaseStatus, Integer pNo, Integer pSize) { Map params = disposeParams(serialNumber, name, keyword, category, ownerType, status, releaseDateStartDate, releaseDateEndDate, releaseStatus); params.put("ownerId", TokenManager.getUserId()); if (pNo == null || pNo < 0) { pNo = 1; } if (pSize == null || pSize < 0) { pSize = 10; } return (Pagination) findPage( "findAchievementListByPage", "findAchievementCount", disposeParams(serialNumber, name, keyword, category, ownerType, status, releaseDateStartDate, releaseDateEndDate, releaseStatus), pNo, pSize); } private Map disposeParams(Integer serialNumber, String name, String keyword, Integer category, Integer ownerType, Integer status, String releaseDateStartDate, String releaseDateEndDate, Integer releaseStatus) { Map params = new HashMap<>(); Date rStart = null; Date rEnd = null; if (!StringUtils.isBlank(releaseDateStartDate)) { try { rStart = DateUtils.parseDate(releaseDateStartDate, AFTConstants.YYYYMMDD); } catch (ParseException e) { } } if (!StringUtils.isBlank(releaseDateEndDate)) { try { rEnd = DateUtils.parseDate(releaseDateEndDate, AFTConstants.YYYYMMDD); } catch (ParseException e) { } } if (null != rStart) { params.put("rStart", rStart); } if (null != rEnd) { params.put("rEnd", rEnd); } if (null != serialNumber) { params.put("serialNumber", serialNumber); } if (!StringUtils.isBlank(name)) { params.put("name", name); } if (!StringUtils.isBlank(keyword)) { params.put("keyword", keyword); } if (null != category) { params.put("category", category); } if (null != ownerType) { params.put("ownerType", ownerType); } if (null != status) { params.put("status", status); } if (null != releaseStatus) { params.put("releaseStatus", releaseStatus); } return params; } }