package org.superboot.service.impl; import com.querydsl.core.types.Predicate; import com.querydsl.core.types.Projections; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.superboot.base.*; import org.superboot.common.pub.Pub_Tools; import org.superboot.dao.jpa.GroupDAO; import org.superboot.dao.jpa.OrgDAO; import org.superboot.entity.jpa.*; import org.superboot.entity.request.ReqGroup; import org.superboot.entity.request.ReqOrg; import org.superboot.entity.response.ResCount; import org.superboot.entity.response.ResGroup; import org.superboot.service.GroupService; import org.superboot.service.OrgService; import java.util.List; /** * <b> 提供基于组织的相关操作 </b> * <p> * 功能描述: * </p> */ @Service public class GroupServiceImpl extends BaseService implements GroupService { @Autowired private GroupDAO groupDAO; @Autowired private OrgDAO orgDAO; @Autowired private Pub_Tools pubTools; @Autowired private OrgService orgService; @Override public BaseResponse addGroup(ReqGroup group) throws BaseException { if (null != groupDAO.findByGroupCodeAndDr(group.getGroupCode(), BaseConstants.DATA_STATUS_OK)) { throw new BaseException(StatusCode.ADD_ERROR_EXISTS); } SuperbootGroup impGroup = new SuperbootGroup(); BeanUtils.copyProperties(group, impGroup); impGroup = groupDAO.save(impGroup); //生成组织初始的机构节点档案 ReqOrg org = new ReqOrg(); org.setOrgCode(impGroup.getGroupCode()); org.setOrgName(impGroup.getGroupName()); org.setNodetype(0); org.setPkFOrg(-1L); org.setOrgLev(0); org.setOrderCode("" + pubTools.genUUID()); org.setPlatform("Web"); org.setVersion("v01"); BaseResponse response = orgService.addOrg(org, impGroup.getPkGroup()); if (BaseStatus.OK.getCode() == response.getStatus()) { if (StatusCode.ADD_SUCCESS.getCode() == response.getCode()) { ResGroup resGroup = new ResGroup(); BeanUtils.copyProperties(impGroup, resGroup); return new BaseResponse(StatusCode.ADD_SUCCESS, resGroup); } } //如果机构生成失败,则删除已经添加的机构档案,客户端重新提交创建 groupDAO.delete(impGroup.getPkGroup()); return new BaseResponse(StatusCode.ADD_ERROR); } @Override public BaseResponse setGroup(Long pkGroup, ReqGroup reqGroup) throws BaseException { if (-1 != getPkGroup()) { checkGroupIsMy(pkGroup); } SuperbootGroup group = groupDAO.findOne(pkGroup); if (null == group) { throw new BaseException(StatusCode.DATA_NOT_FNID); } if (-1 != getPkGroup()) { QSuperbootOrg qSuperbootOrg = QSuperbootOrg.superbootOrg; SuperbootOrg org = orgDAO.findOne(qSuperbootOrg.pkGroup.eq(pkGroup).and(qSuperbootOrg.pkFOrg.eq(-1L))); if (null != org) { org.setOrgCode(reqGroup.getGroupCode()); org.setOrgName(reqGroup.getGroupName()); orgDAO.save(org); } } BeanUtils.copyProperties(reqGroup, group); group = groupDAO.save(group); //更新组织对应的机构 SuperbootOrg org = orgDAO.findByPkOrgAndDr(group.getPkGroup(), BaseConstants.DATA_STATUS_OK); org.setOrgCode(group.getGroupCode()); org.setOrgName(group.getGroupName()); orgService.setOrg(org); ResGroup resGroup = new ResGroup(); BeanUtils.copyProperties(group, resGroup); return new BaseResponse(StatusCode.UPDATE_SUCCESS, resGroup); } @Override public BaseResponse delGroup(Long pkGroup) throws BaseException { if (-1 != getPkGroup()) { throw new BaseException(StatusCode.UNAUTHORIZED_OPERATION); } SuperbootGroup group = groupDAO.findOne(pkGroup); if (null == group) { throw new BaseException(StatusCode.DATA_NOT_FNID); } //如果系统已经有管理员则 不允许删除 QSuperbootUser qSuperbootUser = QSuperbootUser.superbootUser; if (0 < getQueryFactory() .select(qSuperbootUser.pkUser.count()) .from(qSuperbootUser) .where(qSuperbootUser.pkGroup.eq(pkGroup) .and(qSuperbootUser.dr.eq(BaseConstants.DATA_STATUS_OK))) .fetchOne()) { throw new BaseException(StatusCode.DATA_QUOTE, "组织下已存在组织管理员"); } //易电务组织下没有机构 if (-1 != group.getPkGroup()) { orgService.delRootOrg(group.getPkGroup()); } group.setDr(BaseConstants.DATA_STATUS_DEL); groupDAO.save(group); return new BaseResponse(StatusCode.DELETE_SUCCESS); } @Override public BaseResponse getGroupList(Pageable pageable, Predicate predicate) throws BaseException { QSuperbootGroup qSuperbootGroup = QSuperbootGroup.superbootGroup; List<ResGroup> list = getQueryFactory().select(Projections.bean( ResGroup.class, qSuperbootGroup.pkGroup, qSuperbootGroup.groupCode, qSuperbootGroup.groupName, qSuperbootGroup.groupType )).from(qSuperbootGroup) .where(qSuperbootGroup.dr.eq(BaseConstants.DATA_STATUS_OK).and(predicate)) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); return new BaseResponse(list); } @Override public BaseResponse getGroupCount(Predicate predicate) throws BaseException { QSuperbootGroup qSuperbootGroup = QSuperbootGroup.superbootGroup; long countNum = getQueryFactory().select(qSuperbootGroup.pkGroup.count()).from(qSuperbootGroup) .where(qSuperbootGroup.dr.eq(BaseConstants.DATA_STATUS_OK).and(predicate)) .fetchOne(); return new BaseResponse(new ResCount(countNum)); } @Override public BaseResponse<List<ResGroup>> getGroupCombobox() { QSuperbootGroup qSuperbootGroup = QSuperbootGroup.superbootGroup; List<ResGroup> res; if (-1 == getPkGroup()) { res = getQueryFactory().select(Projections.bean( ResGroup.class, qSuperbootGroup.pkGroup, qSuperbootGroup.groupCode, qSuperbootGroup.groupName, qSuperbootGroup.groupType )).from(qSuperbootGroup) .where( qSuperbootGroup.dr.eq(BaseConstants.DATA_STATUS_OK) ) .fetch(); } else { //普华讯光组织 long PHXG_GROUP = 400670264993513472L; res = getQueryFactory().select(Projections.bean( ResGroup.class, qSuperbootGroup.pkGroup, qSuperbootGroup.groupCode, qSuperbootGroup.groupName, qSuperbootGroup.groupType )).from(qSuperbootGroup) .where( qSuperbootGroup.dr.eq(BaseConstants.DATA_STATUS_OK) .and(qSuperbootGroup.pkGroup.in(getPkGroup(), PHXG_GROUP)) ) .fetch(); } return new BaseResponse<>(res); } }