8 changed files with 300 additions and 15 deletions
-
5xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java
-
6xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java
-
96xm-core/src/main/java/com/xm/core/listener/XmMenuSumParentsListener.java
-
95xm-core/src/main/java/com/xm/core/listener/XmTaskSumParentsListener.java
-
35xm-core/src/main/java/com/xm/core/queue/XmMenuSumParentsPushService.java
-
42xm-core/src/main/java/com/xm/core/queue/XmTaskSumParentsPushService.java
-
14xm-core/src/main/java/com/xm/core/service/XmMenuService.java
-
22xm-core/src/main/java/com/xm/core/service/XmTaskService.java
@ -0,0 +1,96 @@ |
|||||
|
package com.xm.core.listener; |
||||
|
|
||||
|
import com.mdp.mq.queue.MessageListener; |
||||
|
import com.xm.core.entity.XmMenu; |
||||
|
import com.xm.core.entity.XmMenu; |
||||
|
import com.xm.core.queue.XmMenuSumParentsPushService; |
||||
|
import com.xm.core.queue.XmMenuSumParentsPushService; |
||||
|
import com.xm.core.service.XmMenuStateService; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.scheduling.annotation.Scheduled; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import javax.annotation.PostConstruct; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
@Service |
||||
|
public class XmMenuSumParentsListener extends MessageListener<XmMenu> { |
||||
|
|
||||
|
Map<String,Map<String,XmMenu>> menusAllMap =new HashMap<>(); |
||||
|
|
||||
|
|
||||
|
@Autowired |
||||
|
XmMenuStateService xmMenuStateService; |
||||
|
|
||||
|
|
||||
|
@Override |
||||
|
public Object getQueueKey() { |
||||
|
return XmMenuSumParentsPushService.queueName; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void handleMessage(XmMenu message) { |
||||
|
synchronized (menusAllMap){ |
||||
|
Map<String,XmMenu> my=menusAllMap.get(message.getProductId()); |
||||
|
if(my==null){ |
||||
|
my=new HashMap<>(); |
||||
|
menusAllMap.put(message.getProductId(),my); |
||||
|
} |
||||
|
my.put(message.getMenuId(),message); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 每隔一段时间更新一次数据库 |
||||
|
*/ |
||||
|
@Scheduled(cron = "* 0/30 * * * ?") |
||||
|
public void autoUpdateToDb(){ |
||||
|
Map<String,Map<String, XmMenu>> myMenusAllMap=new HashMap<>(); |
||||
|
synchronized (this.menusAllMap){ |
||||
|
myMenusAllMap.putAll(this.menusAllMap); |
||||
|
} |
||||
|
if(myMenusAllMap.size()>0){ |
||||
|
|
||||
|
List<XmMenu> menus=new ArrayList<>(); |
||||
|
List<XmMenu> errors=new ArrayList<>(); |
||||
|
myMenusAllMap.forEach((projectId,menusMap)->{ |
||||
|
menus.addAll(menusMap.values()); |
||||
|
if(menus.size()>100){ |
||||
|
try { |
||||
|
xmMenuStateService.batchSumParents(menus); |
||||
|
menus.clear(); |
||||
|
}catch (Exception e){ |
||||
|
errors.addAll(menus); |
||||
|
menus.clear(); |
||||
|
} |
||||
|
} |
||||
|
}); |
||||
|
if(menus.size()>0){ |
||||
|
try { |
||||
|
xmMenuStateService.batchSumParents(menus); |
||||
|
menus.clear(); |
||||
|
}catch (Exception e){ |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
if(errors.size()>0){ |
||||
|
try { |
||||
|
xmMenuStateService.batchSumParents(errors); |
||||
|
errors.clear(); |
||||
|
}catch (Exception e){ |
||||
|
errors.clear(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@PostConstruct |
||||
|
public void init(){ |
||||
|
super.popMessage(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,95 @@ |
|||||
|
package com.xm.core.listener; |
||||
|
|
||||
|
import com.mdp.core.service.BaseService; |
||||
|
import com.mdp.mq.queue.MessageListener; |
||||
|
import com.xm.core.entity.XmTask; |
||||
|
import com.xm.core.queue.XmTaskSumParentsPushService; |
||||
|
import com.xm.core.service.XmTaskService; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.scheduling.annotation.Scheduled; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import javax.annotation.PostConstruct; |
||||
|
import java.util.*; |
||||
|
import java.util.concurrent.locks.Condition; |
||||
|
import java.util.concurrent.locks.Lock; |
||||
|
import java.util.concurrent.locks.ReentrantLock; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
@Service |
||||
|
public class XmTaskSumParentsListener extends MessageListener<XmTask> { |
||||
|
|
||||
|
Map<String,Map<String,XmTask>> tasksAllMap=new HashMap<>(); |
||||
|
|
||||
|
|
||||
|
@Autowired |
||||
|
XmTaskService xmTaskService; |
||||
|
|
||||
|
|
||||
|
@Override |
||||
|
public Object getQueueKey() { |
||||
|
return XmTaskSumParentsPushService.queueName; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void handleMessage(XmTask message) { |
||||
|
synchronized (tasksAllMap){ |
||||
|
Map<String,XmTask> my=tasksAllMap.get(message.getProjectId()); |
||||
|
if(my==null){ |
||||
|
my=new HashMap<>(); |
||||
|
tasksAllMap.put(message.getProjectId(),my); |
||||
|
} |
||||
|
my.put(message.getId(),message); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 每隔一段时间更新一次数据库 |
||||
|
*/ |
||||
|
@Scheduled(cron = "* 0/30 * * * ?") |
||||
|
public void autoUpdateToDb(){ |
||||
|
Map<String,Map<String,XmTask>> myTasksAllMap=new HashMap<>(); |
||||
|
synchronized (this.tasksAllMap){ |
||||
|
myTasksAllMap.putAll(this.tasksAllMap); |
||||
|
} |
||||
|
if(myTasksAllMap.size()>0){ |
||||
|
|
||||
|
List<XmTask> tasks=new ArrayList<>(); |
||||
|
List<XmTask> errors=new ArrayList<>(); |
||||
|
myTasksAllMap.forEach((projectId,tasksMap)->{ |
||||
|
tasks.addAll(tasksMap.values()); |
||||
|
if(tasks.size()>100){ |
||||
|
try { |
||||
|
xmTaskService.batchSumParents(tasks); |
||||
|
tasks.clear(); |
||||
|
}catch (Exception e){ |
||||
|
errors.addAll(tasks); |
||||
|
tasks.clear(); |
||||
|
} |
||||
|
} |
||||
|
}); |
||||
|
if(tasks.size()>0){ |
||||
|
try { |
||||
|
xmTaskService.batchSumParents(tasks); |
||||
|
tasks.clear(); |
||||
|
}catch (Exception e){ |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
if(errors.size()>0){ |
||||
|
try { |
||||
|
xmTaskService.batchSumParents(errors); |
||||
|
errors.clear(); |
||||
|
}catch (Exception e){ |
||||
|
errors.clear(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@PostConstruct |
||||
|
public void init(){ |
||||
|
super.popMessage(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,35 @@ |
|||||
|
package com.xm.core.queue; |
||||
|
|
||||
|
import com.mdp.mq.queue.Push; |
||||
|
import com.xm.core.entity.XmMenu; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.util.StringUtils; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
@Service |
||||
|
public class XmMenuSumParentsPushService { |
||||
|
|
||||
|
@Autowired |
||||
|
Push push; |
||||
|
|
||||
|
public static String queueName="xm-menu-sum-parents"; |
||||
|
|
||||
|
public void pushXmMenu(XmMenu xmMenu){ |
||||
|
if(xmMenu==null || StringUtils.hasText(xmMenu.getMenuId())){ |
||||
|
return; |
||||
|
} |
||||
|
push.leftPush(queueName,xmMenu); |
||||
|
} |
||||
|
|
||||
|
public void pushXmMenus(List<XmMenu> xmMenus){ |
||||
|
if(xmMenus==null ||xmMenus.size()==0){ |
||||
|
return; |
||||
|
} |
||||
|
for (XmMenu xmMenu : xmMenus) { |
||||
|
push.leftPush(queueName,xmMenu); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,42 @@ |
|||||
|
package com.xm.core.queue; |
||||
|
|
||||
|
import com.mdp.mq.queue.MessageListener; |
||||
|
import com.mdp.mq.queue.Push; |
||||
|
import com.xm.core.entity.XmTask; |
||||
|
import com.xm.core.service.XmTaskService; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.scheduling.annotation.Scheduled; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.util.StringUtils; |
||||
|
|
||||
|
import javax.annotation.PostConstruct; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
@Service |
||||
|
public class XmTaskSumParentsPushService { |
||||
|
|
||||
|
@Autowired |
||||
|
Push push; |
||||
|
|
||||
|
public static String queueName="xm-task-sum-parents"; |
||||
|
|
||||
|
public void pushXmTask(XmTask xmTask){ |
||||
|
if(xmTask==null || StringUtils.hasText(xmTask.getId())){ |
||||
|
return; |
||||
|
} |
||||
|
push.leftPush(queueName,xmTask); |
||||
|
} |
||||
|
|
||||
|
public void pushXmTasks(List<XmTask> xmTasks){ |
||||
|
if(xmTasks==null ||xmTasks.size()==0){ |
||||
|
return; |
||||
|
} |
||||
|
for (XmTask xmTask : xmTasks) { |
||||
|
push.leftPush(queueName,xmTask); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue