mirror of
https://github.com/ctripcorp/zeus.git
synced 2024-09-21 08:06:08 +08:00
update vs activate and group activate
This commit is contained in:
parent
d60ebbf15c
commit
0122779f6e
|
@ -9,6 +9,7 @@ import com.ctrip.zeus.service.activate.ActivateService;
|
|||
import com.ctrip.zeus.service.build.BuildInfoService;
|
||||
import com.ctrip.zeus.service.build.BuildService;
|
||||
import com.ctrip.zeus.service.nginx.NginxService;
|
||||
import com.ctrip.zeus.service.query.VirtualServerCriteriaQuery;
|
||||
import com.ctrip.zeus.service.status.StatusOffset;
|
||||
import com.ctrip.zeus.service.status.StatusService;
|
||||
import com.ctrip.zeus.service.task.TaskService;
|
||||
|
@ -44,6 +45,8 @@ public class TaskExecutorImpl implements TaskExecutor {
|
|||
NginxService nginxService;
|
||||
@Resource
|
||||
private BuildInfoService buildInfoService;
|
||||
@Resource
|
||||
private VirtualServerCriteriaQuery virtualServerCriteriaQuery;
|
||||
|
||||
Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||
|
||||
|
@ -194,7 +197,7 @@ public class TaskExecutorImpl implements TaskExecutor {
|
|||
}
|
||||
}
|
||||
}
|
||||
performTasks(slbId,groupVs);
|
||||
performTasks(slbId,groupVs,activatingGroups,activatingVses);
|
||||
updateVersion(slbId);
|
||||
setTaskResult(slbId,true,null);
|
||||
}catch (Exception e){
|
||||
|
@ -236,22 +239,42 @@ public class TaskExecutorImpl implements TaskExecutor {
|
|||
private HashMap<Long, VirtualServer> getActivatingVses(HashMap<Long, OpsTask> activateVsOps,HashMap<Long, OpsTask> deactivateVsOps, Long slbId) {
|
||||
HashMap<Long,VirtualServer> result = new HashMap<>();
|
||||
Set<Long> vsIds = activateVsOps.keySet();
|
||||
List<Long> tmpIds = new ArrayList<>();
|
||||
List<Integer> versions = new ArrayList<>();
|
||||
for (Long vsId : vsIds){
|
||||
OpsTask task = activateVsOps.get(vsId);
|
||||
if (deactivateVsOps.containsKey(vsId)){
|
||||
setTaskFail(activateVsOps.get(vsId),"Activating and Deactivating Vs at same time! VsId:"+vsId);
|
||||
setTaskFail(task ,"Activating and Deactivating Vs at same time! VsId:"+vsId);
|
||||
continue;
|
||||
}
|
||||
VirtualServer vs = activateService.getActivatingVirtualServer(vsId,activateVsOps.get(vsId).getVersion());
|
||||
if ( vs != null ){
|
||||
if ( !vs.getSlbId().equals( slbId) ){
|
||||
setTaskFail(activateVsOps.get(vsId), "Activating Vs Fail! Not Found Vs[" + vsId + "] In Slb: " + slbId);
|
||||
continue;
|
||||
tmpIds.add(vsId);
|
||||
versions.add(task.getVersion());
|
||||
|
||||
// VirtualServer vs = activateService.getActivatingVirtualServer(vsId,activateVsOps.get(vsId).getVersion());
|
||||
// if ( vs != null ){
|
||||
// if ( !vs.getSlbId().equals( slbId) ){
|
||||
// setTaskFail(activateVsOps.get(vsId), "Activating Vs Fail! Not Found Vs[" + vsId + "] In Slb: " + slbId);
|
||||
// continue;
|
||||
// }
|
||||
// result.put(vsId,vs);
|
||||
// }
|
||||
}
|
||||
List<VirtualServer> vses = activateService.getActivatingVirtualServers(tmpIds.toArray(new Long[]{}),versions.toArray(new Integer[]{}));
|
||||
for (VirtualServer vs : vses){
|
||||
if ( !vs.getSlbId().equals( slbId) ){
|
||||
setTaskFail(activateVsOps.get(vs.getId()), "Activating Vs Fail! Not Found Vs[" + vs.getId() + "] In Slb: " + slbId);
|
||||
continue;
|
||||
}
|
||||
result.put(vs.getId(),vs);
|
||||
}
|
||||
if (result.size() != tmpIds.size()){
|
||||
for (Long vsid : tmpIds){
|
||||
if (!result.containsKey(vsid)){
|
||||
setTaskFail(activateVsOps.get(vsid), "Activating Vs Fail! Not Found Vs[" + vsid + "] In Slb: " + slbId);
|
||||
}
|
||||
result.put(vsId,vs);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
private void updateVersion(Long slbId) throws Exception{
|
||||
|
@ -276,7 +299,7 @@ public class TaskExecutorImpl implements TaskExecutor {
|
|||
}
|
||||
}
|
||||
|
||||
private void performTasks(Long slbId,Map<Long,Long> groupVs) throws Exception{
|
||||
private void performTasks(Long slbId,Map<Long,Long> groupVs,Map<Long,Group> activatingGroups,Map<Long,VirtualServer> activatingVses) throws Exception{
|
||||
try {
|
||||
for (OpsTask task :activateSlbOps.values()){
|
||||
if (!task.getStatus().equals(TaskStatus.DOING)){
|
||||
|
@ -288,7 +311,8 @@ public class TaskExecutorImpl implements TaskExecutor {
|
|||
if (!task.getStatus().equals(TaskStatus.DOING)){
|
||||
continue;
|
||||
}
|
||||
activateService.activeVirtualServer(task.getSlbVirtualServerId(),task.getVersion(),slbId);
|
||||
VirtualServer vs = activatingVses.get(task.getSlbVirtualServerId());
|
||||
activateService.activeVirtualServer(task.getSlbVirtualServerId(),vs,task.getVersion(),slbId);
|
||||
}
|
||||
for (OpsTask task : deactivateVsOps.values()){
|
||||
if (!task.getStatus().equals(TaskStatus.DOING)){
|
||||
|
@ -300,7 +324,8 @@ public class TaskExecutorImpl implements TaskExecutor {
|
|||
if (!task.getStatus().equals(TaskStatus.DOING)){
|
||||
continue;
|
||||
}
|
||||
activateService.activeGroup(task.getGroupId(), task.getVersion(),groupVs.get(task.getGroupId()),slbId);
|
||||
Group group = activatingGroups.get(task.getGroupId());
|
||||
activateService.activeGroup(task.getGroupId(),group,task.getVersion(),groupVs.get(task.getGroupId()),slbId);
|
||||
}
|
||||
for (OpsTask task :deactivateGroupOps.values()){
|
||||
if (!task.getStatus().equals(TaskStatus.DOING)){
|
||||
|
@ -326,7 +351,8 @@ public class TaskExecutorImpl implements TaskExecutor {
|
|||
}
|
||||
String [] ips = task.getIpList().split(";");
|
||||
List<String>ipList = Arrays.asList(ips);
|
||||
statusService.updateStatus(slbId,task.getGroupId(),ipList,StatusOffset.MEMBER_OPS,task.getUp());
|
||||
Long vsId = groupVs.get(task.getGroupId());
|
||||
statusService.updateStatus(slbId,vsId,task.getGroupId(),ipList,StatusOffset.MEMBER_OPS,task.getUp());
|
||||
}
|
||||
}
|
||||
for (List<OpsTask> taskList :pullMemberOps.values()){
|
||||
|
@ -336,7 +362,8 @@ public class TaskExecutorImpl implements TaskExecutor {
|
|||
}
|
||||
String [] ips = task.getIpList().split(";");
|
||||
List<String>ipList = Arrays.asList(ips);
|
||||
statusService.updateStatus(slbId,task.getGroupId(),ipList,StatusOffset.PULL_OPS,task.getUp());
|
||||
Long vsId = groupVs.get(task.getGroupId());
|
||||
statusService.updateStatus(slbId,vsId,task.getGroupId(),ipList,StatusOffset.PULL_OPS,task.getUp());
|
||||
}
|
||||
}
|
||||
}catch (Exception e){
|
||||
|
@ -470,10 +497,13 @@ public class TaskExecutorImpl implements TaskExecutor {
|
|||
for (Long groupId : memberGroups){
|
||||
if (!activateService.isGroupActivated(groupId,null)){
|
||||
List<OpsTask> tasksList = memberOps.get(groupId);
|
||||
Set<Long> vsIds = virtualServerCriteriaQuery.queryByGroupIds(new Long[]{groupId});
|
||||
for(OpsTask opsTask : tasksList){
|
||||
String ips = opsTask.getIpList();
|
||||
String[]iplist = ips.split(";");
|
||||
statusService.updateStatus(slbId , groupId, Arrays.asList(iplist),StatusOffset.MEMBER_OPS,opsTask.getUp());
|
||||
for (Long vsid : vsIds){
|
||||
statusService.updateStatus(slbId ,vsid, groupId, Arrays.asList(iplist),StatusOffset.MEMBER_OPS,opsTask.getUp());
|
||||
}
|
||||
opsTask.setStatus(TaskStatus.SUCCESS);
|
||||
}
|
||||
memberOps.remove(groupId);
|
||||
|
@ -483,10 +513,13 @@ public class TaskExecutorImpl implements TaskExecutor {
|
|||
for (Long groupId : pullMemberGroups){
|
||||
if (!activateService.isGroupActivated(groupId,null)){
|
||||
List<OpsTask> tasksList = pullMemberOps.get(groupId);
|
||||
Set<Long> vsIds = virtualServerCriteriaQuery.queryByGroupIds(new Long[]{groupId});
|
||||
for(OpsTask opsTask : tasksList){
|
||||
String ips = opsTask.getIpList();
|
||||
String[]iplist = ips.split(";");
|
||||
statusService.updateStatus(slbId , groupId, Arrays.asList(iplist),StatusOffset.PULL_OPS,opsTask.getUp());
|
||||
for (Long vsid : vsIds) {
|
||||
statusService.updateStatus(slbId,vsid, groupId, Arrays.asList(iplist), StatusOffset.PULL_OPS, opsTask.getUp());
|
||||
}
|
||||
opsTask.setStatus(TaskStatus.SUCCESS);
|
||||
}
|
||||
pullMemberOps.remove(groupId);
|
||||
|
@ -521,18 +554,34 @@ public class TaskExecutorImpl implements TaskExecutor {
|
|||
private HashMap<Long, Group> getActivatingGroups(HashMap<Long , OpsTask> activateGroupOps) {
|
||||
HashMap<Long , Group> result = new HashMap<>();
|
||||
Set<Long> groupIds = activateGroupOps.keySet();
|
||||
for (Long groupId : groupIds){
|
||||
List<Long> gids = new ArrayList<>();
|
||||
List<Integer> versions = new ArrayList<>();
|
||||
for (Long groupId : groupIds) {
|
||||
|
||||
OpsTask task = activateGroupOps.get(groupId);
|
||||
if (deactivateGroupOps.containsKey(groupId)){
|
||||
setTaskFail(task,"Deactivating this group at the same time!");
|
||||
if (deactivateGroupOps.containsKey(groupId)) {
|
||||
setTaskFail(task, "Deactivating this group at the same time!");
|
||||
continue;
|
||||
}
|
||||
Group group = activateService.getActivatingGroup(groupId,task.getVersion());
|
||||
if (group == null){
|
||||
setTaskFail(task,"Get Archive Group Fail! GroupId:"+groupId+";Version:"+task.getVersion());
|
||||
}else {
|
||||
result.put(groupId,group);
|
||||
gids.add(groupId);
|
||||
versions.add(task.getVersion());
|
||||
// Group group = activateService.getActivatingGroup(groupId, task.getVersion());
|
||||
// if (group == null) {
|
||||
// setTaskFail(task, "Get Archive Group Fail! GroupId:" + groupId + ";Version:" + task.getVersion());
|
||||
// } else {
|
||||
// result.put(groupId, group);
|
||||
// }
|
||||
}
|
||||
List<Group> groups = activateService.getActivatingGroups(gids.toArray(new Long[]{}),versions.toArray(new Integer[]{}));
|
||||
for (Group g : groups){
|
||||
result.put(g.getId(),g);
|
||||
}
|
||||
if (result.size() != gids.size()){
|
||||
for (Long gid : gids){
|
||||
if (!result.containsKey(gid)){
|
||||
OpsTask task = activateGroupOps.get(gid);
|
||||
setTaskFail(task, "Get Archive Group Fail! GroupId:" + gid + ";Version:" + task.getVersion());
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
|
|
@ -29,7 +29,15 @@ public interface ActivateService extends Repository {
|
|||
* @throws Exception
|
||||
*/
|
||||
public void activeGroup(long groupId ,int version , Long vsId , Long slbId) throws Exception;
|
||||
|
||||
/**
|
||||
* activate group
|
||||
* @param groupId the Group id
|
||||
* @param group the group obj
|
||||
* @param vsId the vsId
|
||||
* @param slbId the slbId
|
||||
* @throws Exception
|
||||
*/
|
||||
public void activeGroup(long groupId ,Group group ,int version, Long vsId , Long slbId) throws Exception;
|
||||
/**
|
||||
* activate group
|
||||
* @param version the version
|
||||
|
@ -37,7 +45,7 @@ public interface ActivateService extends Repository {
|
|||
* @param slbId the slbId
|
||||
* @throws Exception
|
||||
*/
|
||||
public void activeVirtualServer(long vsId ,int version , Long slbId) throws Exception;
|
||||
public void activeVirtualServer(long vsId ,VirtualServer vs , int version , Long slbId) throws Exception;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -104,6 +112,14 @@ public interface ActivateService extends Repository {
|
|||
*/
|
||||
|
||||
public Group getActivatingGroup(Long groupId, int version);
|
||||
/**
|
||||
* get activating groups
|
||||
* @param groupIds , the Group id
|
||||
* @param versions , Version
|
||||
* @return groups
|
||||
*/
|
||||
|
||||
public List<Group> getActivatingGroups(Long[] groupIds, Integer[] versions);
|
||||
/**
|
||||
* get activating slb
|
||||
* @param vsId the slb ID
|
||||
|
@ -112,6 +128,14 @@ public interface ActivateService extends Repository {
|
|||
*/
|
||||
|
||||
public VirtualServer getActivatingVirtualServer(Long vsId,int version);
|
||||
/**
|
||||
* get activating slb
|
||||
* @param vsIds the slb ID
|
||||
* @param versions the version
|
||||
* @return vses
|
||||
*/
|
||||
|
||||
public List<VirtualServer> getActivatingVirtualServers(Long[] vsIds,Integer[] versions);
|
||||
|
||||
/**
|
||||
* get activating slb
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.ctrip.zeus.service.activate.impl;
|
||||
|
||||
import com.ctrip.zeus.dal.core.*;
|
||||
import com.ctrip.zeus.exceptions.ValidationException;
|
||||
import com.ctrip.zeus.model.entity.*;
|
||||
import com.ctrip.zeus.model.transform.DefaultSaxParser;
|
||||
import com.ctrip.zeus.service.activate.ActivateService;
|
||||
|
@ -85,11 +86,38 @@ public class ActivateServiceImpl implements ActivateService {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void activeVirtualServer(long vsId, int version, Long slbId) throws Exception {
|
||||
Archive archive = archiveService.getVsArchive(vsId, version);
|
||||
AssertUtils.assertNotNull(archive, "[activate]get Virtual Server Archive return Null! VsId: " + vsId);
|
||||
public void activeGroup(long groupId, Group group,int version, Long vsId, Long slbId) throws Exception {
|
||||
|
||||
//while Group updated VsId, both vsIds belong to same slb, we need to delete the old version group active conf.
|
||||
ConfGroupActiveDo confGroupActiveDo = confGroupActiveDao.findByGroupIdAndVirtualServerId(groupId,vsId,ConfGroupActiveEntity.READSET_FULL);
|
||||
if (confGroupActiveDo == null){
|
||||
List<ConfGroupActiveDo> groups = confGroupActiveDao.findAllByGroupIds(new Long[]{groupId},ConfGroupActiveEntity.READSET_FULL);
|
||||
if (groups!=null && groups.size() > 0){
|
||||
List<Long> gvsIds = new ArrayList<>();
|
||||
for (ConfGroupActiveDo groupActiveDo : groups){
|
||||
gvsIds.add(groupActiveDo.getSlbVirtualServerId());
|
||||
}
|
||||
List<ConfSlbVirtualServerActiveDo> vses = confSlbVirtualServerActiveDao.findBySlbIdAndSlbVirtualServerIds(gvsIds.toArray(new Long[]{}),slbId,ConfSlbVirtualServerActiveEntity.READSET_FULL);
|
||||
for (ConfSlbVirtualServerActiveDo confSlbVirtualServerActiveDo : vses){
|
||||
confGroupActiveDao.deleteByGroupIdAndSlbVirtualServerId(new ConfGroupActiveDo().setGroupId(groupId).setSlbVirtualServerId(confSlbVirtualServerActiveDo.getSlbVirtualServerId()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String content = String.format(Group.XML, group);
|
||||
ConfGroupActiveDo c = new ConfGroupActiveDo().setCreatedTime(new Date());
|
||||
c.setGroupId(groupId).setContent(content).setVersion(version).setSlbVirtualServerId(vsId).setSlbId(slbId);
|
||||
confGroupActiveDao.insert(c);
|
||||
logger.info("Conf Group Active Inserted: [GroupId: " + c.getId() + ",Content: " + c.getContent() + ",Version: " + c.getVersion() + "]");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activeVirtualServer(long vsId, VirtualServer vs ,int version, Long slbId) throws Exception {
|
||||
if (vs == null){
|
||||
throw new ValidationException("Virtual Server is Null! vsId:"+vsId);
|
||||
}
|
||||
ConfSlbVirtualServerActiveDo confSlbVirtualServerActiveDo = new ConfSlbVirtualServerActiveDo();
|
||||
confSlbVirtualServerActiveDo.setContent(archive.getContent())
|
||||
confSlbVirtualServerActiveDo.setContent(String.format(VirtualServer.XML,vs))
|
||||
.setSlbId(slbId).setVersion(version)
|
||||
.setSlbVirtualServerId(vsId)
|
||||
.setCreatedTime(new Date());
|
||||
|
@ -160,7 +188,7 @@ public class ActivateServiceImpl implements ActivateService {
|
|||
|
||||
@Override
|
||||
public boolean isVsActivated(Long vsId, Long slbId) throws Exception {
|
||||
List<ConfSlbVirtualServerActiveDo> c = confSlbVirtualServerActiveDao.findBySlbIdAndSlbVirtualServerIds(new Long[]{vsId},slbId,ConfSlbVirtualServerActiveEntity.READSET_FULL);
|
||||
List<ConfSlbVirtualServerActiveDo> c = confSlbVirtualServerActiveDao.findBySlbIdAndSlbVirtualServerIds(new Long[]{vsId}, slbId, ConfSlbVirtualServerActiveEntity.READSET_FULL);
|
||||
return !(c == null || c.size() == 0 );
|
||||
}
|
||||
|
||||
|
@ -189,6 +217,28 @@ public class ActivateServiceImpl implements ActivateService {
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Group> getActivatingGroups(Long[] groupIds, Integer[] versions) {
|
||||
List<Group> result = new ArrayList<>();
|
||||
try {
|
||||
List<Archive> list = archiveService.getGroupArchives(groupIds, versions);
|
||||
if (list == null || list.size() == 0){
|
||||
return result;
|
||||
}
|
||||
for (Archive archive : list){
|
||||
String content = archive.getContent();
|
||||
Group group = DefaultSaxParser.parseEntity(Group.class, content);
|
||||
if (group != null){
|
||||
autoFiller.autofill(group);
|
||||
result.add(group);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.warn("Archive Parser Fail ! GroupId:"+Arrays.asList(groupIds).toString()+" Version:"+Arrays.asList(versions).toString());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VirtualServer getActivatingVirtualServer(Long vsId, int version) {
|
||||
try {
|
||||
|
@ -204,6 +254,27 @@ public class ActivateServiceImpl implements ActivateService {
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<VirtualServer> getActivatingVirtualServers(Long[] vsIds, Integer[] versions) {
|
||||
List<VirtualServer> result = new ArrayList<>();
|
||||
try {
|
||||
List<Archive> archives = archiveService.getVsArchives(vsIds, versions);
|
||||
if (archives == null || archives.size() == 0){
|
||||
return result;
|
||||
}
|
||||
for (Archive archive : archives){
|
||||
String content = archive.getContent();
|
||||
VirtualServer tmp = DefaultSaxParser.parseEntity(VirtualServer.class, content);
|
||||
if (tmp != null){
|
||||
result.add(tmp);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.warn("[getActivatingVirtualServer] Archive Parser Fail ! VsId:"+Arrays.asList(vsIds).toString()+" Version:"+Arrays.asList(versions).toString(),e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Slb getActivatingSlb(Long slbId , int version) {
|
||||
try {
|
||||
|
|
|
@ -52,7 +52,7 @@ public interface StatusService extends Repository {
|
|||
* @param status status enable = true , disable = false
|
||||
* @throws Exception
|
||||
*/
|
||||
void updateStatus(Long slbId ,Long groupId, List<String> ips , int offset , boolean status)throws Exception;
|
||||
void updateStatus(Long slbId ,Long vsId , Long groupId, List<String> ips , int offset , boolean status)throws Exception;
|
||||
|
||||
/**
|
||||
* get server status by server ip
|
||||
|
|
|
@ -88,41 +88,24 @@ public class StatusServiceImpl implements StatusService {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void updateStatus(Long slbId, Long groupId, List<String> ips, int offset, boolean status) throws Exception {
|
||||
public void updateStatus(Long slbId,Long vsId , Long groupId, List<String> ips, int offset, boolean status) throws Exception {
|
||||
if (offset > 30 || offset < 0){
|
||||
throw new Exception("offset of status should be [0-30]");
|
||||
}
|
||||
Group group;
|
||||
if(activateService.isGroupActivated(groupId,slbId)){
|
||||
group = activateService.getActivatedGroup(groupId,slbId);
|
||||
}else {
|
||||
group = groupRepository.getById(groupId);
|
||||
}
|
||||
if (group == null){
|
||||
return;
|
||||
}
|
||||
|
||||
List<GroupVirtualServer> groupVirtualServers = group.getGroupVirtualServers();
|
||||
for (GroupVirtualServer groupVirtualServer : groupVirtualServers){
|
||||
if (!groupVirtualServer.getVirtualServer().getSlbId().equals(slbId)){
|
||||
for (String ip : ips) {
|
||||
if (ip==null||ip.isEmpty())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
for (String ip : ips) {
|
||||
if (ip==null||ip.isEmpty())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
StatusGroupServerDo data = new StatusGroupServerDo();
|
||||
data.setSlbVirtualServerId(groupVirtualServer.getVirtualServer().getId())
|
||||
.setGroupId(groupId)
|
||||
.setIp(ip)
|
||||
.setCreatedTime(new Date());
|
||||
int reset = ~(1 << offset);
|
||||
int updatestatus = (status?0:1)<<offset;
|
||||
data.setReset(reset).setStatus(updatestatus);
|
||||
statusGroupServerDao.updateStatus(data);
|
||||
}
|
||||
logger.info("[update status]: VirtualServer:"+groupVirtualServer.toString()+"ips:"+ips.toString());
|
||||
StatusGroupServerDo data = new StatusGroupServerDo();
|
||||
data.setSlbVirtualServerId(vsId)
|
||||
.setGroupId(groupId)
|
||||
.setIp(ip)
|
||||
.setCreatedTime(new Date());
|
||||
int reset = ~(1 << offset);
|
||||
int updatestatus = (status?0:1)<<offset;
|
||||
data.setReset(reset).setStatus(updatestatus);
|
||||
statusGroupServerDao.updateStatus(data);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue