Commit f933c9bf authored by 赵啸非's avatar 赵啸非

添加mybatis xml映射文件

parent 945f2d4f
...@@ -325,6 +325,12 @@ public class UserEntity extends UserEntityExt implements IUser { ...@@ -325,6 +325,12 @@ public class UserEntity extends UserEntityExt implements IUser {
public Long getSiteId() { public Long getSiteId() {
return this.siteId; return this.siteId;
} }
@Override
public String getSiteIds() {
return "";
}
/** /**
* 设置 站点id * 设置 站点id
* @param siteId * @param siteId
......
package com.mortals.xhx.common.utils; package com.mortals.xhx.common.utils;
import com.alibaba.fastjson.JSON;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.xhx.module.site.model.SiteTreeSelect;
import com.mortals.xhx.module.site.service.SiteService; import com.mortals.xhx.module.site.service.SiteService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.apachecommons.CommonsLog; import lombok.extern.apachecommons.CommonsLog;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.ObjectUtils;
import java.util.List;
/** /**
* @author: zxfei * @author: zxfei
...@@ -11,7 +17,7 @@ import lombok.extern.apachecommons.CommonsLog; ...@@ -11,7 +17,7 @@ import lombok.extern.apachecommons.CommonsLog;
* @description: * @description:
**/ **/
@AllArgsConstructor @AllArgsConstructor
@CommonsLog @Slf4j
public class SyncTreeSiteThread implements Runnable { public class SyncTreeSiteThread implements Runnable {
private SiteService siteService; private SiteService siteService;
...@@ -20,9 +26,13 @@ public class SyncTreeSiteThread implements Runnable { ...@@ -20,9 +26,13 @@ public class SyncTreeSiteThread implements Runnable {
@Override @Override
public void run() { public void run() {
log.info("刷新站点树"); log.info("刷新用户站点树=》userID:{}",context.getUser().getId());
siteService.setSiteTree(siteService.siteTree(context), context); List<SiteTreeSelect> siteTreeSelects = siteService.siteTree(context);
siteService.setSiteTree(siteTreeSelects, context);
log.info("刷新用户站点树=》siteTree:{}", JSON.toJSONString(siteService.getSiteTree(context)));
} }
} }
package com.mortals.xhx.daemon.applicationservice; package com.mortals.xhx.daemon.applicationservice;
import com.mortals.framework.util.ThreadPool;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.mortals.framework.springcloud.service.IApplicationService; import com.mortals.framework.springcloud.service.IApplicationService;
/**
* 应用级服务,在应用启动、停止过程中调用
*
* 缺陷:类加载完成后就调用,会由于某些组件还未初始化而导致服务异常,
* 比如Kafka的连接以及订阅初始化比较靠后,在服务启动过程中就调用操作kafka相关API,将导致失败
* 比如开启Socket监听端口,可能端口都接收到连接请求了,但数据库连接还未初始化完成,导致请求处理失败
* 比如定时任务,任务执行时,相关缓存还未初始化,导致处理失败
*
* 应用场景:
* 1、无依赖其它模块或框架的数据初始化等操作
* @author GM
* @date 2020年7月15日
*/
@Component @Component
public class DemoStartService implements IApplicationService { public class DemoStartService implements IApplicationService {
private static Log logger = LogFactory.getLog(DemoStartService.class); private static Log logger = LogFactory.getLog(DemoStartService.class);
@Override @Override
public void start() { public void start() {
ThreadPool.getInstance().init(10);
logger.info("开始服务..[配置已加载完成,但部分框架还未初始化,比如:Kafka]"); logger.info("开始服务..[配置已加载完成,但部分框架还未初始化,比如:Kafka]");
} }
......
package com.mortals.xhx.daemon.applicationservice; package com.mortals.xhx.daemon.applicationservice;
import com.mortals.framework.model.Context;
import com.mortals.framework.service.ICacheService; import com.mortals.framework.service.ICacheService;
import com.mortals.framework.springcloud.config.web.BaseWebMvcConfigurer; import com.mortals.framework.springcloud.config.web.BaseWebMvcConfigurer;
import com.mortals.framework.util.ThreadPool;
import com.mortals.xhx.base.system.user.model.UserEntity;
import com.mortals.xhx.base.system.user.model.UserQuery;
import com.mortals.xhx.base.system.user.service.UserService;
import com.mortals.xhx.common.utils.SyncTreeSiteThread;
import com.mortals.xhx.module.site.model.SiteTreeSelect; import com.mortals.xhx.module.site.model.SiteTreeSelect;
import com.mortals.xhx.module.site.service.SiteService; import com.mortals.xhx.module.site.service.SiteService;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
...@@ -34,12 +40,24 @@ public class DemoStartedService implements IApplicationStartedService { ...@@ -34,12 +40,24 @@ public class DemoStartedService implements IApplicationStartedService {
@Autowired @Autowired
private ICacheService cacheService; private ICacheService cacheService;
@Autowired
private UserService userService;
@Override @Override
public void start() { public void start() {
logger.info("开始服务..[配置已加载完成,并且所有框架都已经初始化]"); logger.info("开始服务..[初始化用户站点树]");
List<SiteTreeSelect> siteTreeSelects = siteService.siteTree(null); UserEntity userEntity = new UserEntity();
siteService.setSiteTree(siteTreeSelects, null); userEntity.initAttrValue();
userEntity.setId(0L);
Context contextTemp = new Context();
contextTemp.setUser(userEntity);
SyncTreeSiteThread syncTreeSiteThread = new SyncTreeSiteThread(siteService, contextTemp);
ThreadPool.getInstance().execute(syncTreeSiteThread);
userService.find(new UserQuery()).stream().forEach(user->{
Context context = new Context();
context.setUser(user);
ThreadPool.getInstance().execute(new SyncTreeSiteThread(siteService,context));
});
} }
@Override @Override
......
...@@ -10,6 +10,7 @@ import com.mortals.xhx.module.site.model.SiteTreeSelect; ...@@ -10,6 +10,7 @@ import com.mortals.xhx.module.site.model.SiteTreeSelect;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
/** /**
* SiteService * SiteService
...@@ -29,9 +30,17 @@ public interface SiteService extends ICRUDCacheService<SiteEntity, Long> { ...@@ -29,9 +30,17 @@ public interface SiteService extends ICRUDCacheService<SiteEntity, Long> {
*/ */
List<SiteTreeSelect> siteTree(Context context); List<SiteTreeSelect> siteTree(Context context);
/**
* 根据站点列表获取区域站点树
*
* @param context
* @return
*/
List<SiteTreeSelect> getSiteTree(Context context); List<SiteTreeSelect> getSiteTree(Context context);
void setSiteTree(List<SiteTreeSelect> list, Context context); void setSiteTree(List<SiteTreeSelect> list, Context context);
} }
\ No newline at end of file
...@@ -22,10 +22,7 @@ import com.mortals.xhx.module.site.model.SiteEntity; ...@@ -22,10 +22,7 @@ import com.mortals.xhx.module.site.model.SiteEntity;
import com.mortals.xhx.module.site.service.SiteService; import com.mortals.xhx.module.site.service.SiteService;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -38,7 +35,11 @@ import java.util.stream.Collectors; ...@@ -38,7 +35,11 @@ import java.util.stream.Collectors;
@Service("siteService") @Service("siteService")
public class SiteServiceImpl extends AbstractCRUDCacheServiceImpl<SiteDao, SiteEntity, Long> implements SiteService { public class SiteServiceImpl extends AbstractCRUDCacheServiceImpl<SiteDao, SiteEntity, Long> implements SiteService {
private List<SiteTreeSelect> siteTreeList; // private List<SiteTreeSelect> siteTreeList;
/**
* 根据用户id 暂存对应站点树 默认0为全站点树
*/
private Map<Long, List<SiteTreeSelect>> siteTreeMap = new HashMap<>();
@Autowired @Autowired
private AreaService areaService; private AreaService areaService;
...@@ -62,31 +63,33 @@ public class SiteServiceImpl extends AbstractCRUDCacheServiceImpl<SiteDao, SiteE ...@@ -62,31 +63,33 @@ public class SiteServiceImpl extends AbstractCRUDCacheServiceImpl<SiteDao, SiteE
super.saveBefore(entity, context); super.saveBefore(entity, context);
} }
void checkSite(SiteQuery siteQuery,Context context){
if(!ObjectUtils.isEmpty(context)&&!ObjectUtils.isEmpty(context.getUser())&&!ObjectUtils.isEmpty(context.getUser().getSiteId())){
}
}
@Override @Override
public List<SiteTreeSelect> siteTree(Context context) { public List<SiteTreeSelect> siteTree(Context context) {
Map<String, AreaEntity> areaMap = new HashMap<>(); Map<String, AreaEntity> areaMap = new HashMap<>();
SiteQuery siteQuery = new SiteQuery(); SiteQuery siteQuery = new SiteQuery();
Set<String> siteSet = Arrays.stream(context.getUser().getSiteIds().split(",")).filter(f->!f.equals("")).collect(Collectors.toSet());
if (!ObjectUtils.isEmpty(siteSet)) {
List<Long> siteIdList = siteSet.stream().map(Long::parseLong).collect(Collectors.toList());
if(!ObjectUtils.isEmpty(siteIdList)){
siteQuery.idList(siteIdList);
}
}
List<SiteEntity> siteList = this.find(siteQuery); List<SiteEntity> siteList = this.find(siteQuery);
Map<String, SiteEntity> siteMap = siteList.parallelStream().collect(Collectors.toMap(x -> x.getSiteCode(), y -> y, (o, n) -> n)); Map<String, SiteEntity> siteMap = siteList.parallelStream().collect(Collectors.toMap(x -> x.getSiteCode(), y -> y, (o, n) -> n));
//遍历过滤站点树 //遍历过滤站点树
for (SiteEntity siteEntity : siteList) { for (SiteEntity siteEntity : siteList) {
AreaEntity areaEntity = areaService.getExtCache(siteEntity.getAreaCode()); AreaEntity areaEntity = areaService.getExtCache(siteEntity.getAreaCode());
//根据区域添加父节点 //根据区域添加父节点
if (!ObjectUtils.isEmpty(areaEntity) && !ObjectUtils.isEmpty(areaEntity.getPid())) { if (!ObjectUtils.isEmpty(areaEntity)
&& !ObjectUtils.isEmpty(areaEntity.getPid())) {
//递归查找父节点并添加 //递归查找父节点并添加
areaMap.put(areaEntity.getAreaCode(), areaEntity); areaMap.put(areaEntity.getAreaCode(), areaEntity);
//递归 //递归
recursionFn(areaMap, areaEntity); recursionFn(areaMap, areaEntity);
} }
} }
return buildSiteTreeSelect(areaMap, siteMap); //areaMap 为当前站点相关区域树结构 已经剔除不必要的分支结构
return buildSiteTreeSelect(areaMap, siteMap);
} }
public List<SiteTreeSelect> buildSiteTreeSelect(Map<String, AreaEntity> areaMap, Map<String, SiteEntity> siteMap) { public List<SiteTreeSelect> buildSiteTreeSelect(Map<String, AreaEntity> areaMap, Map<String, SiteEntity> siteMap) {
...@@ -107,10 +110,10 @@ public class SiteServiceImpl extends AbstractCRUDCacheServiceImpl<SiteDao, SiteE ...@@ -107,10 +110,10 @@ public class SiteServiceImpl extends AbstractCRUDCacheServiceImpl<SiteDao, SiteE
} }
//构建站点树 //构建站点树
List<SiteTreeSelect> collect = returnList.stream().map(item -> List<SiteTreeSelect> collect = returnList.parallelStream().map(item ->
new SiteTreeSelect(item, siteMap) new SiteTreeSelect(item, siteMap)
).collect(Collectors.toList()); ).collect(Collectors.toList());
this.siteTreeList = collect; //this.siteTreeList = collect;
return collect; return collect;
} }
...@@ -159,30 +162,36 @@ public class SiteServiceImpl extends AbstractCRUDCacheServiceImpl<SiteDao, SiteE ...@@ -159,30 +162,36 @@ public class SiteServiceImpl extends AbstractCRUDCacheServiceImpl<SiteDao, SiteE
@Override @Override
protected void updateAfter(SiteEntity entity, Context context) throws AppException { protected void updateAfter(SiteEntity entity, Context context) throws AppException {
//刷新站点树 //刷新站点树
new Thread(new SyncTreeSiteThread(this,context)).start(); new Thread(new SyncTreeSiteThread(this, context)).start();
super.updateAfter(entity, context); super.updateAfter(entity, context);
} }
@Override @Override
protected void saveAfter(SiteEntity entity, Context context) throws AppException { protected void saveAfter(SiteEntity entity, Context context) throws AppException {
//刷新站点树 //刷新站点树
new Thread(new SyncTreeSiteThread(this,context)).start(); new Thread(new SyncTreeSiteThread(this, context)).start();
super.saveAfter(entity, context); super.saveAfter(entity, context);
} }
@Override @Override
protected void removeBefore(Long[] ids, Context context) throws AppException { protected void removeBefore(Long[] ids, Context context) throws AppException {
new Thread(new SyncTreeSiteThread(this,context)).start(); new Thread(new SyncTreeSiteThread(this, context)).start();
super.removeBefore(ids, context); super.removeBefore(ids, context);
} }
@Override @Override
public List<SiteTreeSelect> getSiteTree(Context context) { public List<SiteTreeSelect> getSiteTree(Context context) {
return siteTreeList; List<SiteTreeSelect> siteTreeSelects = siteTreeMap.get(context.getUser().getId());
//如果所属站点为空返回全节点树
if (ObjectUtils.isEmpty(siteTreeSelects)) {
return siteTreeSelects;
} else {
return siteTreeMap.get(0);
}
} }
@Override @Override
public void setSiteTree(List<SiteTreeSelect> list, Context context) { public void setSiteTree(List<SiteTreeSelect> list, Context context) {
this.siteTreeList = list; siteTreeMap.put(context.getUser().getId(), list);
} }
} }
\ No newline at end of file
package com.mortals.xhx.module.site.web; package com.mortals.xhx.module.site.web;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
...@@ -75,17 +76,17 @@ public class SiteController extends BaseCRUDJsonBodyMappingController<SiteServic ...@@ -75,17 +76,17 @@ public class SiteController extends BaseCRUDJsonBodyMappingController<SiteServic
siteTree = this.service.siteTree(getContext()); siteTree = this.service.siteTree(getContext());
} }
//校验 //校验
Long siteId = getContext().getUser().getSiteId(); // Long siteId = getContext().getUser().getSiteId();
String siteIds = getContext().getUser().getSiteIds(); // String siteIds = getContext().getUser().getSiteIds();
Set<String> siteSet = Arrays.stream(siteIds.split(",")).collect(Collectors.toSet()); // Set<String> siteSet = Arrays.stream(siteIds.split(",")).collect(Collectors.toSet());
if(!ObjectUtils.isEmpty(siteId)){ // if(!ObjectUtils.isEmpty(siteId)){
//遍历树 // //遍历树
SiteTreeSelect temp =reFucurs(siteTree,siteId.toString()); // SiteTreeSelect temp =reFucurs(siteTree,siteId.toString());
if (!ObjectUtils.isEmpty(temp)) { // if (!ObjectUtils.isEmpty(temp)) {
siteTree = new ArrayList<>(); // siteTree = new ArrayList<>();
siteTree.add(temp); // siteTree.add(temp);
} // }
} // }
model.put("siteTree", siteTree); model.put("siteTree", siteTree);
this.init(model, getContext()); this.init(model, getContext());
recordSysLog(request, busiDesc + " 【成功】"); recordSysLog(request, busiDesc + " 【成功】");
...@@ -140,4 +141,10 @@ public class SiteController extends BaseCRUDJsonBodyMappingController<SiteServic ...@@ -140,4 +141,10 @@ public class SiteController extends BaseCRUDJsonBodyMappingController<SiteServic
} }
return temp; return temp;
}*/ }*/
public static void main(String[] args) {
//深度克隆
//ObjectUtil.clone()
}
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment