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