diff --git a/src/main/java/com/glxp/api/idc/service/impl/IdcServiceImpl.java b/src/main/java/com/glxp/api/idc/service/impl/IdcServiceImpl.java index 6068991b6..2b56767b7 100644 --- a/src/main/java/com/glxp/api/idc/service/impl/IdcServiceImpl.java +++ b/src/main/java/com/glxp/api/idc/service/impl/IdcServiceImpl.java @@ -78,8 +78,9 @@ public class IdcServiceImpl implements IdcService { "basicThirdProducts//thr_products/id///updateTime///第三方产品信息","//sup_cert/id///updateTime/filePath//资质证书信息", "//sup_cert_set/id///updateTime///供应商资质证书设置","companyCert//sup_company/customerId///updateTime///配送企业", "manufacturerCert//sup_manufacturer/id///updateTime///生产企业","productCert//sup_product/id///updateTime///产品资质信息", - "dbDiProducts//productinfo/id///updateTime///DI产品信息","//udicompany/id///updateTime///国际库医疗器械注册人信息"}; - + "//udicompany/id///updateTime///国际库医疗器械注册人信息"}; + //"dbDiProducts//productinfo/id///updateTime///DI产品信息", + private int orderNum=0; @Resource @@ -102,7 +103,6 @@ public class IdcServiceImpl implements IdcService { return ResultVOUtils.success(list); } - @Override public BaseResponse download(HttpServletRequest request,Map params) { Map map = dbDao.get("select * from basic_upload_status where taskId='"+params.get("taskId")+"'"); @@ -113,7 +113,7 @@ public class IdcServiceImpl implements IdcService { return ResultVOUtils.success(object); } - + /*UDI系统上传自助平台*/ @Override public void asyncUdiTask() { @@ -126,12 +126,12 @@ public class IdcServiceImpl implements IdcService { logger.info("自助平台同步任务开始--------"); asyncDataTask(false); } - + /*拉取前一级中继服务数据*/ @Async @Override public void asyncFetchTask() { - + Map query = new HashMap(); String host = getNextHost(); if(!StringUtils.isEmpty(host)) { @@ -150,7 +150,7 @@ public class IdcServiceImpl implements IdcService { } } } - + } @Async @@ -162,29 +162,37 @@ public class IdcServiceImpl implements IdcService { dbDao.save("insert into idc_var (code,content) values ('system_type','IDC')"); } } - + private void asyncDataTask(boolean isUpload) { initTable(); Map map = dbDao.get("select * from sync_data_set limit 1"); if(map!=null&&map.get("downstreamEnable")!=null&&map.get("downstreamEnable").toString().equals("1")) { + if(isUpload) { + if(!(map.get("syncIp")!=null&&!StringUtils.isEmpty(map.get("syncIp").toString()))) { + logger.error("中继服务地址未配置"); + return; + } + } for(int i=0;i> keyList = dbDao.listKeyMysql(tnames[2]); String keyColumn = keyList!=null&&keyList.size()>0 ? keyList.get(0).get("columnName").toString() : "id"; Map map = new HashMap(); @@ -195,7 +203,7 @@ public class IdcServiceImpl implements IdcService { map.put("isEnd", "1"); } map.put("sqlWhere", sqlWhere); - + map.put("tableKey", tnames[0]); map.put("tableName", tnames[2]); map.put("uniqueColumn", tnames[3]); @@ -209,21 +217,21 @@ public class IdcServiceImpl implements IdcService { scheduledRequest.setCronName("sync"+WordUtils.capitalizeFully(tnames[2], new char[]{'_'}).replace("_", "")); ScheduledEntity scheduledEntity = scheduledDao.findScheduled(scheduledRequest); String cron = scheduledEntity!=null ? scheduledEntity.getCron() : ""; - + if(!StringUtils.isEmpty(cron)) { CronSequenceGenerator cronSequenceGenerator = new CronSequenceGenerator(cron); Date nextTimePoint = cronSequenceGenerator.next(DateUtil.parseDate(lastUpdateTime)); sync = nextTimePoint.before(nowUpdateTime); } if(sync) { - if(syncMasterData(map,isUpload)) { + if(syncMasterData(map,isUpload,syncIp)) { setUpdateTime(tnames[2],DateUtil.formatDate(nowUpdateTime,"yyyy-MM-dd HH:mm:ss")); } } } } - - + + private String fetchData(String url,Map params) { OkHttpClient client = new OkHttpClient().newBuilder() @@ -287,11 +295,11 @@ public class IdcServiceImpl implements IdcService { JSONObject json = JSONObject.parseObject(content); String datePath = DateUtil.formatDate(new Date(),"yyyy-MM-dd"); - - FileUtils.makeDirectory(filePath +datePath+"/"); - FileUtils.makeDirectory(backFilePath +datePath+"/"); String fileName = filePath +datePath+"/"+json.getString("messageType")+"-"+json.getString("messageId")+".udi"; String backFileName = backFilePath +datePath+"/"+json.getString("messageType")+"-"+json.getString("messageId")+".udi"; + FileUtils.makeDirectory( filePath +datePath+"/"); + FileUtils.makeDirectory(backFilePath +datePath+"/"); + FileUtils.SaveFileAs(content, fileName); FileUtils.SaveFileAs(content, backFileName); String[] saveFiles= {}; @@ -317,11 +325,20 @@ public class IdcServiceImpl implements IdcService { saveUploadStatus(json.getString("messageType"),json.getString("messageId"),fileName); /*解析入库*/ if(isLastLevel()) { - analyToDB(json,files); + if(!analyToDB(json,files)) + return ResultVOUtils.error(9000, "解析失败"); } else { //需要转发 if(isRelay()) { - relay(request.getHeader("reqNo"),content,saveFiles); + String host = getNextHost(); + String result = relay(request.getHeader("reqNo"),content,saveFiles,host); + if(IDCUtils.isJson(result)) { + BaseResponse object = JSON.parseObject(result,BaseResponse.class); + return object; + } else { + return ResultVOUtils.error(9000, "转发失败"); + } + } } return ResultVOUtils.success(); @@ -331,14 +348,14 @@ public class IdcServiceImpl implements IdcService { /*数据同步,从数据库获取数据下发或上传下级中继服务*/ @Override public BaseResponse send(Map params) { - - return send(params.get("messageType").toString(),params.get("tableName").toString(),params); - - + + return send(params.get("messageType").toString(),params.get("tableName").toString(),params); + + } @Override public BaseResponse send(String messageType,String tableName,Map params) { - + return ResultVOUtils.error(9999, ""); } @@ -356,14 +373,12 @@ public class IdcServiceImpl implements IdcService { dbDao.save(sql); } - - private void saveExportStatus(String messageType,String taskId,String fileName) { + + private void saveExportStatus(Map params) { Map map = new HashMap(); - map.put("id", CustomUtil.getId()); - map.put("taskId", taskId); - map.put("cacheFilePath", fileName); map.put("status", "0"); - map.put("type", messageType); + map.putAll(params); + map.put("id", CustomUtil.getId()); map.put("updateTime", new Date()); Map columns = getColumn("basic_export_status"); String sql = "insert into basic_export_status "+DBAUtils.parseInsert(map, columns); @@ -398,9 +413,9 @@ public class IdcServiceImpl implements IdcService { dbDao.save(sql); } - - - private boolean syncMasterData(Map params,boolean isUplaod) { + + + private boolean syncMasterData(Map params,boolean isUplaod,String syncIp) { boolean success=false; String tableName = params.get("tableName").toString(); String tableKey = params.get("tableKey").toString(); @@ -422,13 +437,13 @@ public class IdcServiceImpl implements IdcService { Map whereParams = new HashMap(); whereParams.put("sqlWhere", params.get("sqlWhere")); whereParams.put("dataWhere", params.get("dataWhere")); - + Map map = new HashMap(); String where = DBAUtils.convertWhere(column,whereParams,""); sql+=!StringUtils.isEmpty(where) ? " where "+where : ""; map.put("sql", sql); int total = dbDao.count(map); - + String isEnd = params.get("isEnd")!=null ? params.get("isEnd").toString() : "0"; int limit = 50; String[] files = new String[limit]; @@ -436,14 +451,14 @@ public class IdcServiceImpl implements IdcService { orderNum++; String messageType = params.get("messageType").toString(); saveIdcLog(messageType,"",tableName +">"+where,0,total); - - + + if(total>0) { success = true; - + whereParams.put("page", 0); whereParams.put("limit", limit); - + List> keyList = dbDao.listKeyMysql(tableName); String keyColumn = keyList!=null&&keyList.size()>0 ? keyList.get(0).get("columnName").toString() : "id"; for(int i=0;ifail:上传地址未连通",i *limit,total); } } else { - syncAddTask(data); if(!StringUtils.isEmpty(recordSql)) { dbDao.save("insert into idc_record (id,type,fkId,isEnd,createTime) values "+recordSql); } saveIdcLog(messageType,"",tableName +">success",i *limit,total); } + syncAddTask(data,isUplaod); } } } - - } - + + } + return success; } - + /*增加同步任务*/ - private void syncAddTask(Map json) { + private void syncAddTask(Map json,boolean isUpload) { String content = JSON.toJSONString(json); String datePath = DateUtil.formatDate(new Date(),"yyyy-MM-dd"); - - FileUtils.makeDirectory(filePath +datePath+"/"); - FileUtils.makeDirectory(backFilePath +datePath+"/"); String fileName = filePath +datePath+"/"+json.get("messageType")+"-"+json.get("messageId")+".udi"; String backFileName = backFilePath +datePath+"/"+json.get("messageType")+"-"+json.get("messageId")+".udi"; + FileUtils.makeDirectory(filePath +datePath+"/"); + FileUtils.makeDirectory(backFilePath +datePath+"/"); + FileUtils.SaveFileAs(content, fileName); FileUtils.SaveFileAs(content, backFileName); - - - saveExportStatus(json.get("messageType").toString(),json.get("messageId").toString(),fileName); - } - - + + //type,transportType,superiorService,subordinateService,cacheFilePath + Map map = new HashMap<>(); + map.put("type", json.get("messageType")); + map.put("transportType", isUpload ? "1" : "2"); + map.put("scheduleType", isUpload ? "1" : "0"); + map.put("taskId", json.get("messageId")); + map.put("cacheFilePath", fileName); + saveExportStatus(map); + } + + /*解析到数据库*/ - private void analyToDB(JSONObject jsonObject,MultipartFile[] files) { + private boolean analyToDB(JSONObject jsonObject,MultipartFile[] files) { if(!StringUtils.isEmpty(jsonObject.getString("tableName"))) { List> list = jsonObject.getObject("data", List.class); - analyData(jsonObject.getString("tableName"),jsonObject.getString("uniqueColumn"),list); + return analyData(jsonObject.getString("tableName"),jsonObject.getString("uniqueColumn"),list); //图片处理 } + return false; } /*按表名解析数据到数据库,子表暂未处理*/ - private void analyData(String tableName,String uniqueColumn,List> list) { + private boolean analyData(String tableName,String uniqueColumn,List> list) { String tName = DBAUtils.tableRealName(tableName); - String sql="replace "+tName +"("; + String sql="replace "+tName +"("; String del="delete from "+tName+" where "; String upd="update "+tName+" set "; String[] keyColumn=new String[30]; String[] keyDataType=new String[30]; List> columnList = dbDao.listColumnsMysql(tName); + boolean result = false; int key=0; int col=0; for(int i=0;i0 ? "," : ""; boolean ups = list.get(i).containsKey(attrName) ? true : false ; updateSet+=ups&&h>0 ? "," : ""; @@ -640,11 +663,11 @@ public class IdcServiceImpl implements IdcService { dbDao.update(upd + updateSet+" where "+updateWhere); h+=ups ? 1 : 0; } - + sql+=")"; n++; } - + for(int m=0;m<30;m++) { if(list.get(i).get("tableName"+m)!=null&&list.get(i).get("data"+m)!=null) { Object obj = list.get(i).get("data"+m); @@ -657,19 +680,20 @@ public class IdcServiceImpl implements IdcService { break; } } - + + } + if(n>0) { + result = (dbDao.save(sql)>0); } - if(n>0) - dbDao.save(sql); } - + return result; } /*转发下级或上级中继服务*/ - private String relay(String reqNo,String content,String[] files) { - String host = getNextHost(); + private String relay(String reqNo,String content,String[] files,String ip) { + String host = ip; String result=""; if(StringUtils.isEmpty(reqNo)) reqNo = UUID.randomUUID().toString(); @@ -733,18 +757,18 @@ public class IdcServiceImpl implements IdcService { Map map = dbDao.get("select * from idc_var where code='system_type'"); return !(map!=null&&map.get("content")!=null&&map.get("content").toString().equals("IDC")) ; } - + /*是否需要转发*/ private boolean isRelay() { String relayHost = getNextHost(); - return !StringUtils.isEmpty(relayHost); + return StringUtils.isEmpty(relayHost) ? false : true; } private List> getList(String tableName,Map params) { String sql = "select "+tableName+".*,'A' as operateMode from "+tableName; Map column = getColumn(tableName); - + String where = DBAUtils.convertWhere(column,params,""); sql+=!StringUtils.isEmpty(where) ? " where "+where : ""; Map map = new HashMap(); @@ -762,6 +786,7 @@ public class IdcServiceImpl implements IdcService { map.put("apiCode", "common"); map.put("tableName", DBAUtils.tableAliasName(tableName)); map.put("uniqueColumn", params.get("uniqueColumn")); + map.put("filePathColumn", params.get("filePathColumn")); map.put("sendTime", new Date()); map.put("version", "1.0"); map.put("total", list.size()); @@ -870,7 +895,7 @@ public class IdcServiceImpl implements IdcService { jdbcTemplate.execute("alter table basic_export_status add column cacheFilePath varchar(255)"); jdbcTemplate.execute("alter table basic_upload_status add column cacheFilePath varchar(255)"); } catch (Exception e) { - + } } private void alterTable(String tableName,String sql) { @@ -880,4 +905,6 @@ public class IdcServiceImpl implements IdcService { } } + + }