package com.sobey.cmop.mvc.service.resource; import java.util.Collection; import java.util.Date; import java.util.List; import javax.annotation.Resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.sobey.cmop.mvc.comm.BaseSevcie; import com.sobey.cmop.mvc.dao.ChangeDao; import com.sobey.cmop.mvc.dao.ChangeItemDao; import com.sobey.cmop.mvc.entity.Change; import com.sobey.cmop.mvc.entity.ChangeItem; import com.sobey.cmop.mvc.entity.Resources; /** * 服务变更Change 和 变更明细 ChangeItem 相关的管理类. * * @author liukai */ @Service @Transactional(readOnly = true) public class ChangeServcie extends BaseSevcie { private static Logger logger = LoggerFactory.getLogger(ChangeServcie.class); @Resource private ChangeDao changeDao; @Resource private ChangeItemDao changeItemDao; // === 服务变更Change ===// public Change getChange(Integer id) { return changeDao.findOne(id); } /** * 获得资源下的服务变更 * * @param resourcesId * @return */ public Change findChangeByResourcesId(Integer resourcesId) { return changeDao.findByResourcesIdAndSubResourcesIdIsNull(resourcesId); } /** * 获得资源下的服务变更列表 * * @param resourcesId * @return */ public List<Change> getChangeListByResourcesId(Integer resourcesId) { return changeDao.findByResources_Id(resourcesId); } /** * 获得资源下某个服务子项的服务变更.(主要解决MDN下具体是哪个子项变更的问题.) * * @param resourcesId * 资源ID * @param subResourcesId * 资源下某个服务子项的ID * @return */ public Change findChangeBySubResourcesId(Integer resourcesId, Integer subResourcesId) { return changeDao.findByResourcesIdAndSubResourcesId(resourcesId, subResourcesId); } /** * 新增,修改 服务变更Change * * @param change * @return */ @Transactional(readOnly = false) public Change saveOrUpdateChange(Change change) { return changeDao.save(change); } @Transactional(readOnly = false) public void deleteChange(Integer id) { changeDao.delete(id); } @Transactional(readOnly = false) public void deleteChange(Collection<Change> changes) { changeDao.delete(changes); } // === 变更明细 ChangeItem ===// /** * 新增,修改 变更明细 ChangeItem * * @param change * @return */ @Transactional(readOnly = false) public ChangeItem saveOrUpdateChangeItem(ChangeItem changeItem) { return changeItemDao.save(changeItem); } public ChangeItem getChangeItem(Integer id) { return changeItemDao.findOne(id); } /** * 根据changeId和fieldName获得变更详情ChangeItem list, Order by id DESC 倒序排列 * * @param changeId * @param fieldName * @return */ public List<ChangeItem> getChangeItemListByChangeIdAndFieldName(Integer changeId, String fieldName) { return changeItemDao.findByChangeIdAndFieldNameOrderByIdDesc(changeId, fieldName); } /** * 获得指定Change下的变更详情. * * @param changeId * @return */ public List<ChangeItem> getChangeItemListByChangeId(Integer changeId) { return changeItemDao.findByChangeId(changeId); } /** * 新增或更新资源Resources的服务变更Change. * * @param resources * 资源对象 * @param description * 变更说明 * @return */ @Transactional(readOnly = false) public Change saveOrUpdateChangeByResources(Resources resources, String description) { return this.saveOrUpdateChangeByResources(resources, null, description); } /** * 新增或更新资源Resources的服务变更Change. * * <pre> * 1.查找指定资源Resources的change * 2.不存在创建一个新的Change (表示该资源之前没有变更记录,即该资源未变更过.) * 3.如果存在则更新老的Change(主要就是更新变更信息). * * 步骤1有两种情景. * 普通资源和有服务子项的资源(MDN). * * </pre> * * @param resources * 资源对象 * @param description * 变更说明 * @return */ @Transactional(readOnly = false) public Change saveOrUpdateChangeByResources(Resources resources, Integer subResourcesId, String description) { Change change = null; // step.1 查找指定资源Resources的change if (subResourcesId == null) { change = comm.changeServcie.findChangeByResourcesId(resources.getId()); } else { change = comm.changeServcie.findChangeBySubResourcesId(resources.getId(), subResourcesId); } if (change == null) { // step.2 不存在创建一个新的Change (表示该资源之前没有变更记录,即该资源未变更过.) change = new Change(resources, comm.accountService.getCurrentUser(), new Date()); change.setDescription(description); } else { // step.3 如果存在则更新老的Change(主要就是更新变更信息). change.setChangeTime(new Date()); change.setDescription(description); } change.setSubResourcesId(subResourcesId); return this.saveOrUpdateChange(change); } }