diff --git a/parent/base.common/src/main/java/com/lyms/base/common/enums/SyncParamConf.java b/parent/base.common/src/main/java/com/lyms/base/common/enums/SyncParamConf.java new file mode 100644 index 0000000..f8aa5a5 --- /dev/null +++ b/parent/base.common/src/main/java/com/lyms/base/common/enums/SyncParamConf.java @@ -0,0 +1,39 @@ +package com.lyms.base.common.enums; + +public enum SyncParamConf { + + + + + USER_INSERT(com.lyms.base.common.service.user.impl.UsersServiceImpl.class.getName(),"addUser"), + USER_UPDATE(com.lyms.base.common.service.user.impl.UsersServiceImpl.class.getName(),"updateUser"), + USER_DELETE(com.lyms.base.common.service.user.impl.UsersServiceImpl.class.getName(),"delete"); + + + private String remoteClazz; + + public String getRemoteClazz() { + return remoteClazz; + } + + public void setRemoteClazz(String remoteClazz) { + this.remoteClazz = remoteClazz; + } + + public String getRemoteMethod() { + return remoteMethod; + } + + public void setRemoteMethod(String remoteMethod) { + this.remoteMethod = remoteMethod; + } + + private String remoteMethod; + + private SyncParamConf(String remoteClazz,String remoteMethod) { + this.remoteClazz = remoteClazz; + this.remoteMethod = remoteMethod; + } + + +} diff --git a/parent/center.manager/src/main/java/com/lyms/cm/job/SyncFixJob.java b/parent/center.manager/src/main/java/com/lyms/cm/job/SyncFixJob.java index e71cb9d..fa2238c 100644 --- a/parent/center.manager/src/main/java/com/lyms/cm/job/SyncFixJob.java +++ b/parent/center.manager/src/main/java/com/lyms/cm/job/SyncFixJob.java @@ -16,6 +16,7 @@ import com.lyms.sync.SyncHandler; import com.lyms.sync.channel.ChannelData; import com.lyms.util.HttpUtils; import com.lyms.util.JsonUtils; +import com.lyms.util.StrUtils; /** *
  • @ClassName: SycnJob @@ -55,7 +56,7 @@ public class SyncFixJob { return; ChannelData data = JsonUtils.jsonToBean(result, ChannelData.class); // 处理回执消息 - if (data != null && data.getAck()) { + if (data != null && data.getAck() && StrUtils.isNotEmpty(data.getRemoteClazz()) && StrUtils.isNotEmpty(data.getRemoteMethod())) { // 拉取到数据执行本地方法 System.out.println("执行: " + ToStringBuilder.reflectionToString(data)); Object handlResult = SyncHandler.handler(data); diff --git a/parent/center.manager/src/main/java/com/lyms/cm/util/SyncComponent.java b/parent/center.manager/src/main/java/com/lyms/cm/util/SyncComponent.java new file mode 100644 index 0000000..c1d6005 --- /dev/null +++ b/parent/center.manager/src/main/java/com/lyms/cm/util/SyncComponent.java @@ -0,0 +1,66 @@ +package com.lyms.cm.util; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.lyms.base.common.entity.organ.OrganGroup; +import com.lyms.base.common.enums.SyncParamConf; +import com.lyms.base.common.service.organ.OrganGroupService; +import com.lyms.sync.ParamsAdpter; +import com.lyms.sync.SyncCenter; +import com.lyms.util.CollectionUtils; +import com.lyms.util.InstanceUtils; +import com.lyms.util.StrUtils; + +@Component +public class SyncComponent { + + @Autowired + public SyncCenter center; + + @Autowired + private OrganGroupService organGroupService; + + private List getAllGroupIpList() { + List ipList = InstanceUtils.newArrayList(); + List list = organGroupService.selectList(new EntityWrapper().where("ifDel=0")); + if (CollectionUtils.isNotEmpty(list)) { + for (OrganGroup group : list) { + if (StrUtils.isNotEmpty(group.getClientaddress())) { + ipList.add(group.getClientaddress()); + } + } + } + return ipList; + } + + /** + *
  • @Description:添加一个同步操作 + *
  • @param syncParamConf + *
  • @param data data和对应方法参数个数和类型一致 + *
  • @return + *
  • 创建人:方承 + *
  • 创建时间:2017年4月11日 + *
  • 修改人: + *
  • 修改时间: + */ + public boolean addSyncOperation(SyncParamConf syncParamConf, Object... data) { + List ipList = getAllGroupIpList(); + ParamsAdpter adpter = null; + if (data != null && data.length > 0) { + adpter = ParamsAdpter.builder(); + for (int i = 0; i < data.length; i++) { + adpter.push(data[i]); + } + } + for (String ip : ipList) { + String id = StrUtils.uuid(); + center.pushTmp(id, ip, syncParamConf.getRemoteClazz(), syncParamConf.getRemoteMethod(), adpter); + } + return true; + } + +} diff --git a/parent/center.manager/src/main/resources/logback.xml b/parent/center.manager/src/main/resources/logback.xml index 4faa9d0..0967721 100644 --- a/parent/center.manager/src/main/resources/logback.xml +++ b/parent/center.manager/src/main/resources/logback.xml @@ -40,7 +40,7 @@ - + diff --git a/parent/center.manager/src/main/resources/xml/app-timer.xml b/parent/center.manager/src/main/resources/xml/app-timer.xml index e5bc983..3d89b7a 100644 --- a/parent/center.manager/src/main/resources/xml/app-timer.xml +++ b/parent/center.manager/src/main/resources/xml/app-timer.xml @@ -14,7 +14,7 @@ - + diff --git a/parent/center.manager/src/test/java/center/manager/test/user/SyncTest.java b/parent/center.manager/src/test/java/center/manager/test/user/SyncTest.java new file mode 100644 index 0000000..0bf0e0d --- /dev/null +++ b/parent/center.manager/src/test/java/center/manager/test/user/SyncTest.java @@ -0,0 +1,25 @@ +package center.manager.test.user; + +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import com.lyms.base.common.entity.user.Users; +import com.lyms.base.common.enums.SyncParamConf; +import com.lyms.cm.util.SyncComponent; + +public class SyncTest extends BaseTest { + + @Autowired + private SyncComponent syncComponent; + + @Test + public void testpushSync(){ + String name = "test123"; + Users entity = new Users(); + entity.setId(name); + entity.setAccount(name); + entity.setName(name); + syncComponent.addSyncOperation(SyncParamConf.USER_INSERT, entity,null); + } + +} diff --git a/parent/center.manager/src/test/java/center/manager/test/user/WorkTest.java b/parent/center.manager/src/test/java/center/manager/test/user/WorkTest.java index 61c8cf8..b437b22 100644 --- a/parent/center.manager/src/test/java/center/manager/test/user/WorkTest.java +++ b/parent/center.manager/src/test/java/center/manager/test/user/WorkTest.java @@ -33,7 +33,7 @@ public class WorkTest extends BaseTest { @Test public void pushFix() { String id = StrUtils.uuid(); - String remote = "http://127.0.0.1:8080/hospital.web/remote/sycn"; + String remote = "http://127.0.0.1:8080/hospital.web/remote/sync"; String remoteClazz = "com.lyms.hospital.service.sys.impl.SyncDataBasicServiceImpl"; String remoteMethod = "selectOne"; center.pushFix(id, remote, remoteClazz, remoteMethod, null); @@ -50,7 +50,7 @@ public class WorkTest extends BaseTest { @Test public void pushTmp() { String id = StrUtils.uuid(); - String remote = "http://127.0.0.1:9090/hospital.web/remote/sycn"; + String remote = "http://127.0.0.1:9090/hospital.web/remote/sync"; String remoteClazz = "com.lyms.hospital.service.sys.impl.SyncDataBasicServiceImpl"; String remoteMethod = "selectOne"; // 参数构建如下注释方式 diff --git a/parent/hospital.web/src/main/java/com/lyms/hospital/controller/RouterController.java b/parent/hospital.web/src/main/java/com/lyms/hospital/controller/RouterController.java index ff6d4e8..f77a1b5 100644 --- a/parent/hospital.web/src/main/java/com/lyms/hospital/controller/RouterController.java +++ b/parent/hospital.web/src/main/java/com/lyms/hospital/controller/RouterController.java @@ -26,8 +26,8 @@ import com.lyms.web.controller.BaseController; @RequestMapping("/remote") public class RouterController extends BaseController { - @RequestMapping(value = "/sycn", produces = { MediaType.APPLICATION_JSON_VALUE }) - public Object remote(HttpServletRequest request) throws ClassNotFoundException, IOException { + @RequestMapping(value = "/pull", produces = { MediaType.APPLICATION_JSON_VALUE }) + public Object pull(HttpServletRequest request) throws ClassNotFoundException, IOException { ChannelData data = SyncUtils.conver(request); System.out.println("接受到数据: " + ToStringBuilder.reflectionToString(data)); Object handResult = SyncHandler.handler(data); @@ -39,5 +39,19 @@ public class RouterController extends BaseController { data.setAck(true); return data; } + + @RequestMapping(value = "/push", produces = { MediaType.APPLICATION_JSON_VALUE }) + public Object push(HttpServletRequest request) throws ClassNotFoundException, IOException { + ChannelData data = SyncUtils.conver(request); + System.out.println("接受到数据: " + ToStringBuilder.reflectionToString(data)); + Object handResult = SyncHandler.handler(data); + if (data.getLoop()) { + data = (ChannelData) handResult; + } else { + data.setData(ParamsAdpter.builder().push(handResult).toJsonString()); + } + return data; + } + } diff --git a/parent/hospital.web/src/main/java/com/lyms/hospital/service/sys/SyncDataBasicService.java b/parent/hospital.web/src/main/java/com/lyms/hospital/service/sys/SyncDataBasicService.java index 338ebec..a9d64c4 100644 --- a/parent/hospital.web/src/main/java/com/lyms/hospital/service/sys/SyncDataBasicService.java +++ b/parent/hospital.web/src/main/java/com/lyms/hospital/service/sys/SyncDataBasicService.java @@ -3,6 +3,7 @@ package com.lyms.hospital.service.sys; import java.io.Serializable; import java.util.List; +import com.lyms.base.common.enums.SyncParamConf; import com.lyms.hospital.entity.sys.SyncDataBasic; import com.lyms.sync.channel.ChannelData; import com.lyms.web.service.BaseService; @@ -47,5 +48,16 @@ public interface SyncDataBasicService extends BaseService { public ChannelData selectOne(); public Boolean updateBasic(Serializable id); + /** + *
  • @Description:向同步库插入一个需要提交给center的同步任务 + *
  • @param syncParamConf + *
  • @param dataObjects 对象方法参数列表 + *
  • @return + *
  • 创建人:方承 + *
  • 创建时间:2017年4月11日 + *
  • 修改人: + *
  • 修改时间: + */ + public boolean addSyncData(SyncParamConf syncParamConf,Object ...dataObjects); } diff --git a/parent/hospital.web/src/main/java/com/lyms/hospital/service/sys/impl/SyncDataBasicServiceImpl.java b/parent/hospital.web/src/main/java/com/lyms/hospital/service/sys/impl/SyncDataBasicServiceImpl.java index fd5ebf4..ce6013b 100644 --- a/parent/hospital.web/src/main/java/com/lyms/hospital/service/sys/impl/SyncDataBasicServiceImpl.java +++ b/parent/hospital.web/src/main/java/com/lyms/hospital/service/sys/impl/SyncDataBasicServiceImpl.java @@ -1,6 +1,7 @@ package com.lyms.hospital.service.sys.impl; import java.io.Serializable; +import java.util.Date; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; @@ -9,11 +10,14 @@ import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.lyms.base.common.enums.SyncParamConf; import com.lyms.hospital.dao.sys.SyncDataBasicMapper; import com.lyms.hospital.entity.sys.SyncDataBasic; import com.lyms.hospital.service.sys.SyncDataBasicService; +import com.lyms.sync.ParamsAdpter; import com.lyms.sync.channel.ChannelData; import com.lyms.util.JsonUtils; +import com.lyms.util.StrUtils; /** *

    @@ -25,43 +29,69 @@ import com.lyms.util.JsonUtils; */ @Service public class SyncDataBasicServiceImpl extends ServiceImpl - implements SyncDataBasicService { + implements SyncDataBasicService { - @Autowired - private SyncDataBasicMapper basicMapper; + @Autowired + private SyncDataBasicMapper basicMapper; - public Integer deleteLogicById(Serializable id) { - return baseMapper.deleteLogicById(id); - } + public Integer deleteLogicById(Serializable id) { + return baseMapper.deleteLogicById(id); + } - @Override - @Transactional - public Boolean updateBasic(List ids) { - Integer tag = basicMapper.updateBatchByIds(ids); - return tag >= 1 ? Boolean.TRUE : Boolean.FALSE; - } + @Override + @Transactional + public Boolean updateBasic(List ids) { + Integer tag = basicMapper.updateBatchByIds(ids); + return tag >= 1 ? Boolean.TRUE : Boolean.FALSE; + } - @Override - public Boolean updateBasic(Serializable id) { - SyncDataBasic dataBasic = baseMapper.selectById(id); - dataBasic.setIfsuc(1); - Integer tag = baseMapper.updateById(dataBasic); - return tag >= 1; - } + @Override + public Boolean updateBasic(Serializable id) { + SyncDataBasic dataBasic = baseMapper.selectById(id); + dataBasic.setIfsuc(1); + Integer tag = baseMapper.updateById(dataBasic); + return tag >= 1; + } - @Override - public ChannelData selectOne() { - EntityWrapper ew = new EntityWrapper(); - ew.where("ifsuc=0"); - List datas = baseMapper.selectList(ew); + @Override + public ChannelData selectOne() { + EntityWrapper ew = new EntityWrapper(); + ew.where("ifsuc=0"); + List datas = baseMapper.selectList(ew); - // 单条同步,避免过于复杂的消息回执 - SyncDataBasic basic = datas != null && datas.size() > 0 ? datas.get(0) : null; - if (basic != null) { - ChannelData data = JsonUtils.jsonToBean(basic.getData(), ChannelData.class); - return data; - } - return ChannelData.emtpy(); - } + // 单条同步,避免过于复杂的消息回执 + SyncDataBasic basic = datas != null && datas.size() > 0 ? datas.get(0) : null; + if (basic != null) { + ChannelData data = JsonUtils.jsonToBean(basic.getData(), ChannelData.class); + return data; + } + return ChannelData.emtpy(); + } + + @Override + public boolean addSyncData(SyncParamConf syncParamConf, Object... dataObjects) { + SyncDataBasic entity = new SyncDataBasic(); + String uid = StrUtils.uuid(); + entity.setId(uid); + Date now = new Date(); + entity.setCreateTime(now); + + ChannelData cdata = new ChannelData(); + cdata.setAck(true); + ParamsAdpter adpter = ParamsAdpter.builder(); + for(Object param : dataObjects){ + adpter.push(param); + } + cdata.setData(adpter.toJsonString()); + cdata.setId(uid); + cdata.setLoop(false); + cdata.setRemoteClazz(syncParamConf.getRemoteClazz()); + cdata.setRemoteMethod(syncParamConf.getRemoteMethod()); + cdata.setTs(now.getTime()); + + entity.setData(cdata.toJsonString()); + Integer tag = baseMapper.insert(entity); + return tag >= 1 ? true : false; + } } diff --git a/parent/hospital.web/src/main/resources/app-context.xml b/parent/hospital.web/src/main/resources/app-context.xml index 3065608..02ee4ff 100644 --- a/parent/hospital.web/src/main/resources/app-context.xml +++ b/parent/hospital.web/src/main/resources/app-context.xml @@ -16,6 +16,7 @@ + classpath:conf.properties classpath:jdbc.properties classpath:redis.properties diff --git a/parent/hospital.web/src/main/resources/dev/conf.properties b/parent/hospital.web/src/main/resources/dev/conf.properties new file mode 100644 index 0000000..78afdc7 --- /dev/null +++ b/parent/hospital.web/src/main/resources/dev/conf.properties @@ -0,0 +1 @@ +token.prefix=token:user: \ No newline at end of file diff --git a/parent/hospital.web/src/test/java/test/hospital/sync/SyncTest.java b/parent/hospital.web/src/test/java/test/hospital/sync/SyncTest.java new file mode 100644 index 0000000..4242409 --- /dev/null +++ b/parent/hospital.web/src/test/java/test/hospital/sync/SyncTest.java @@ -0,0 +1,28 @@ +package test.hospital.sync; + +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import com.lyms.base.common.entity.user.Users; +import com.lyms.base.common.enums.SyncParamConf; +import com.lyms.hospital.service.sys.SyncDataBasicService; +import com.lyms.util.DateTimeUtils; + +import test.hospital.BaseServiceTest; + +public class SyncTest extends BaseServiceTest{ + + @Autowired + private SyncDataBasicService syncDataBasicService; + + @Test + public void addSync(){ + Users u = new Users(); + String uid = DateTimeUtils.getDateTime(); + u.setId(uid); + u.setAccount(uid); + u.setName(uid); + syncDataBasicService.addSyncData(SyncParamConf.USER_INSERT, u,null); + } + +}