package com.objecteye.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.objecteye.entity.PageResult; import com.objecteye.pojo.UserDetailsMsg; import com.objecteye.pojo.UserGroup; import com.objecteye.service.IUserGroupService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Component; import java.util.List; import java.util.Map; @Component public class UserGroupServiceImpl implements IUserGroupService { @Autowired private MongoTemplate mongoTemplate; /** * 分页查询 * * @param requestMap 请求参数 * @return 结果集 */ @Override public PageResult findByPage(Map requestMap) { Integer pagevolume = (Integer) requestMap.get("pagevolume"); Integer currentpage = (Integer) requestMap.get("currentpage"); List userGroups = mongoTemplate.find(Query.query(new Criteria()) .limit(pagevolume).skip((currentpage - 1) * pagevolume), UserGroup.class); long total = mongoTemplate.count(new Query(), UserGroup.class); total = (long) Math.ceil((double) total / pagevolume); return new PageResult<>(total, userGroups); } /** * 检查用户组是否存在 * * @param requestMap 请求参数 * @return 结果集 */ @Override public JSONObject checkGroup(Map requestMap) { String groupName = (String) requestMap.get("groupName"); long count = mongoTemplate.count(Query.query(Criteria.where("groupName").is(groupName)), UserGroup.class); JSONObject resultObj = new JSONObject(); if (count > 0) { resultObj.put("count", count); } return resultObj; } /** * 添加用户组 * * @param requestMap 请求参数 * @return 结果集 */ @Override public JSONObject addGroup(Map requestMap) { UserGroup userGroup = JSON.parseObject(JSON.toJSONString(requestMap), UserGroup.class); // 默认是根组织 String parentCode = "-1"; if (userGroup.getParentCode() != null && !"".equals(userGroup.getParentCode())) { parentCode = userGroup.getParentCode(); } UserGroup lastMaxCodeGroup = mongoTemplate .findOne(new Query(Criteria.where("parentCode").is(parentCode)) .with(Sort.by(Sort.Order.desc("groupCode"))).limit(1), UserGroup.class); if (lastMaxCodeGroup == null) { userGroup.setGroupCode("001"); userGroup.setParentCode("-1"); } else { String lastMaxCode = lastMaxCodeGroup.getGroupCode(); userGroup.setGroupCode(newMaxCode(lastMaxCode, 3)); } userGroup = mongoTemplate.insert(userGroup); JSONObject resultObj = new JSONObject(); if (userGroup.getId() != null) { resultObj.put("id", userGroup.getId()); } else { resultObj.put("error", "创建失败"); } return resultObj; } /** * 获取下一个同层级最大code * * @param lastMaxCode 历史最大code * @param length 单个层级位数(e.g. 001是3位, 0001是4位) * @return 下一个同层级最大code */ private String newMaxCode(String lastMaxCode, int length) { String prefix = ""; String mainCode; if (lastMaxCode.length() > length) { prefix = lastMaxCode.substring(0, lastMaxCode.length() - length); mainCode = lastMaxCode.substring(lastMaxCode.length() - length); } else { mainCode = lastMaxCode; } mainCode = String.format("%0" + length + "d", Integer.parseInt(mainCode) + 1); return prefix + mainCode; } /** * 更新用户组 * * @param requestMap 请求参数 * @return 结果集 */ @Override public JSONObject updateGroup(Map requestMap) { UserGroup userGroup = JSON.parseObject(JSON.toJSONString(requestMap), UserGroup.class); UserGroup oldUserGroup = mongoTemplate.findOne(Query.query(Criteria.where("id").is(userGroup.getId())), UserGroup.class); JSONObject resultObj = new JSONObject(); if (oldUserGroup == null) { resultObj.put("error", "数据不存在"); return resultObj; } if (userGroup.getParentCode().equals(oldUserGroup.getParentCode())) { oldUserGroup.setGroupLevel(userGroup.getGroupLevel()); oldUserGroup.setGroupName(userGroup.getGroupName()); mongoTemplate.save(oldUserGroup, "userGroup"); } return resultObj; } /** * 删除用户组 * * @param requestMap 请求参数 * @return 结果集 */ @Override public JSONObject deleteGroup(Map requestMap) { String groupId = (String) requestMap.get("groupId"); mongoTemplate.updateMulti(Query.query(Criteria.where("group").is(groupId)), Update.update("group", null), UserDetailsMsg.class); mongoTemplate.remove(Query.query(Criteria.where("id").is(groupId)), UserGroup.class); return new JSONObject(); } }