diff --git a/src/main/java/com/glxp/api/entity/sync/SyncDataSetEntity.java b/src/main/java/com/glxp/api/entity/sync/SyncDataSetEntity.java index 70d56ad4..104661f1 100644 --- a/src/main/java/com/glxp/api/entity/sync/SyncDataSetEntity.java +++ b/src/main/java/com/glxp/api/entity/sync/SyncDataSetEntity.java @@ -13,6 +13,9 @@ public class SyncDataSetEntity { private boolean basicProducts; private boolean basicCorp; private boolean basicInv; + private boolean basicType; + private boolean basicDept; + private boolean basicThirdProducts; private boolean basicThirdCorp; private boolean basicThirdInv; 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 4761ea41..c7dffe66 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 @@ -58,1131 +58,1152 @@ import okhttp3.Response; @Slf4j @Service public class IdcServiceImpl implements IdcService { - private static final Logger logger = LoggerFactory.getLogger(IdcServiceImpl.class); - @Value("${file_path}") - private String filePath; - @Value("${back_file_path}") - private String backFilePath; + private static final Logger logger = LoggerFactory.getLogger(IdcServiceImpl.class); + @Value("${file_path}") + private String filePath; + @Value("${back_file_path}") + private String backFilePath; - @Value("${API_KEY}") + @Value("${API_KEY}") private String apiKey; @Value("${API_SECRET}") private String apiSecret; /*同步表,格式:同步设置表列名/同步设置表列名(子表时设置,主表不设置)/主表唯一列(多列逗号分隔)/主表关联列/子表关联列/数据库实际表/时间列/图片或文件列/数据条件/说明*/ - private final String[] SYNC_TABLES= { - "entrustAction//basic_entrust_accept/id///updateTime///委托验收","basicProducts//basic_udirel/id///updateTime///耗材字典","/basicProducts/basic_products/id/uuid/uuid////耗材字典信息详情", - "/companyCert/company_product_relevance/id/customerId/unitFk/updateTime///供应商关联信息", - "basicCorp//basic_corp/id///updateTime///往来单位","typeThird//thr_bustype_origin/id///updateTime///第三方单据类型", - "basicThirdCorp//thr_corp/id///updateTime///第三方往来单位","//thr_dept/id///updateTime///第三方部门", - "//thr_inv_products/id///updateTime///第三方库存","basicThirdInv//thr_inv_warehouse/id//////第三方仓库", - "basicThirdBusOrder//thr_order/id///updateTime///第三方业务单据","/basicThirdBusOrder/thr_order_detail/orderIdFk/id/orderIdFk/updateTime///第三方单据详情", - "basicThirdProducts//thr_products/id///updateTime///第三方产品信息", - "//sup_cert_set/id///updateTime///供应商资质证书设置","companyCert//sup_company/customerId///updateTime///配送企业", - "manufacturerCert//sup_manufacturer/id///updateTime///生产企业","productCert//sup_product/id///updateTime///产品资质信息", - "/companyCert/sup_cert/id/customerId/customerId/updateTime/filePath/type=1/配送企业资质证书信息", - "/manufacturerCert/sup_cert/id/manufacturerId/manufacturerIdFk/updateTime/filePath/type=2/生产企业资质证书信息", - "/productCert/sup_cert/id/productId/productIdFk/updateTime/filePath/type=3/产品资质证书信息", - "//udicompany/id///updateTime///国际库医疗器械注册人信息"}; - //"dbDiProducts//productinfo/id///updateTime///DI产品信息", + private final String[] SYNC_TABLES = { + "entrustAction//basic_entrust_accept/id///updateTime///委托验收", + "basicProducts//basic_udirel/id///updateTime///耗材字典", + "/basicProducts/basic_products/id/uuid/uuid////耗材字典信息详情", + "basicCorp//basic_corp/id///updateTime///往来单位", + "//company_product_relevance/id///updateTime///供应商关联信息", + "typeThird//thr_bustype_origin/id///updateTime///第三方单据类型", + "basicThirdCorp//thr_corp/id///updateTime///第三方往来单位", + "//thr_dept/id///updateTime///第三方部门", + "//thr_inv_products/id///updateTime///第三方库存", + "basicThirdInv//thr_inv_warehouse/id//////第三方仓库", + "basicThirdBusOrder//thr_order/id///updateTime///第三方业务单据", + "/basicThirdBusOrder/thr_order_detail/orderIdFk/id/orderIdFk/updateTime///第三方单据详情", + "basicThirdProducts//thr_products/id///updateTime///第三方产品信息", + "//sup_cert_set/id///updateTime///供应商资质证书设置", + "companyCert//sup_company/customerId///updateTime///配送企业", + "manufacturerCert//sup_manufacturer/id///updateTime///生产企业", + "productCert//sup_product/id///updateTime///产品资质信息", + "/companyCert/sup_cert/id/customerId/customerId/updateTime/filePath/type=1/配送企业资质证书信息", + "/manufacturerCert/sup_cert/id/manufacturerId/manufacturerIdFk/updateTime/filePath/type=2/生产企业资质证书信息", + "/productCert/sup_cert/id/productId/productIdFk/updateTime/filePath/type=3/产品资质证书信息", + "//udicompany/id///updateTime///国际库医疗器械注册人信息", + "basicType//basic_hosp_type/id///updateTime///物资字典分类", + "basicDept//auth_dept/id///updateTime///部门信息", + "basicInv//auth_warehouse/id///updateTime///仓库信息", + }; + //"dbDiProducts//productinfo/id///updateTime///DI产品信息", //"basicInv/////////仓库字典", - //"typeBus/////////业务单据类型", - //"typeScan/////////扫码单据类型", - private int orderNum=0; + //"typeBus/////////业务单据类型", + //"typeScan/////////扫码单据类型", + private int orderNum = 0; - @Resource + @Resource private SystemParamConfigService systemParamConfigService; - @Resource - private JdbcTemplate jdbcTemplate; + @Resource + private JdbcTemplate jdbcTemplate; - @Resource - private DbDao dbDao; + @Resource + private DbDao dbDao; - @Resource + @Resource private ScheduledDao scheduledDao; - @Override - public BaseResponse taskList(HttpServletRequest request,Map params) { - Map map = new HashMap(); - map.put("sql", "select id as taskId from basic_export_status where receiveStatus='0'"); - List> list = dbDao.list(map); - return ResultVOUtils.success(list); - } - - @Override - public BaseResponse download(HttpServletRequest request,Map params) { - String id=""; - String tableName = params.get("scheduleType")!=null&¶ms.get("scheduleType").equals("3") ? "basic_export_status" : "basic_export_status"; - if(params.containsKey("taskId")&¶ms.get("taskId")!=null) { - id = params.get("taskId").toString(); - } else { - id = params.get("id").toString(); - } - - - Map map = map = dbDao.get("select * from "+tableName+" where id='"+id+"'"); - - if(map==null) - return ResultVOUtils.error(9000, "下载任务不存在"); - if(!(map.get("cacheFilePath")!=null&&FileUtils.isFileExist(map.get("cacheFilePath").toString()))) - return ResultVOUtils.error(9000, "下载文件不存在"); - String json = FileUtils.readFileAll(map.get("cacheFilePath").toString()); - - JSONObject object = JSON.parseObject(json); - if(object==null) - return ResultVOUtils.error(9000, "任务下载失败"); - if(object!=null&&object.getInteger("code")!=null) { - BaseResponse response = JSON.parseObject(json,BaseResponse.class); - return response; - } - logger.info("json-->"+json); - return ResultVOUtils.success(object); - } - - - /*UDI系统上传自助平台*/ - @Override + @Override + public BaseResponse taskList(HttpServletRequest request, Map params) { + Map map = new HashMap(); + map.put("sql", "select id as taskId from basic_export_status where receiveStatus='0'"); + List> list = dbDao.list(map); + return ResultVOUtils.success(list); + } + + @Override + public BaseResponse download(HttpServletRequest request, Map params) { + String id = ""; + String tableName = params.get("scheduleType") != null && params.get("scheduleType").equals("3") ? "basic_export_status" : "basic_export_status"; + if (params.containsKey("taskId") && params.get("taskId") != null) { + id = params.get("taskId").toString(); + } else { + id = params.get("id").toString(); + } + + + Map map = map = dbDao.get("select * from " + tableName + " where id='" + id + "'"); + + if (map == null) + return ResultVOUtils.error(9000, "下载任务不存在"); + if (!(map.get("cacheFilePath") != null && FileUtils.isFileExist(map.get("cacheFilePath").toString()))) + return ResultVOUtils.error(9000, "下载文件不存在"); + String json = FileUtils.readFileAll(map.get("cacheFilePath").toString()); + + JSONObject object = JSON.parseObject(json); + if (object == null) + return ResultVOUtils.error(9000, "任务下载失败"); + if (object != null && object.getInteger("code") != null) { + BaseResponse response = JSON.parseObject(json, BaseResponse.class); + return response; + } + logger.info("json-->" + json); + return ResultVOUtils.success(object); + } + + + /*UDI系统上传自助平台*/ + @Override public void asyncUdiTask() { - logger.info("UDI管理系统同步任务开始--------"); - asyncDataTask(true); + logger.info("UDI管理系统同步任务开始--------"); + asyncDataTask(true); } + /*自助平台生成任务,不上传*/ - @Override + @Override public void asyncSpsTask() { - logger.info("自助平台同步任务开始--------"); - asyncDataTask(false); + logger.info("自助平台同步任务开始--------"); + asyncDataTask(false); + } + + /*拉取前一级中继服务数据*/ + @Async + @Override + public void asyncFetchUdiTask() { + fetchTask(false); } - - /*拉取前一级中继服务数据*/ - @Async - @Override - public void asyncFetchUdiTask() { - fetchTask(false); - } - @Async - @Override - public void asyncFetchTask() { - initTable(); - Map map = dbDao.get("select * from idc_var where code='system_type'"); - if(map==null) { - dbDao.save("insert into idc_var (code,content) values ('system_type','IDC')"); - } - fetchTask(true); - } - - - private void fetchTask(boolean isIdc) { - - String host = getNextHost(); - if(!isIdc) { - Map map = dbDao.get("select * from sync_data_set limit 1"); - if(map!=null&&map.get("syncIp")!=null) - host = map.get("syncIp").toString(); - } - logger.info("fetch from ip:"+host); - if(!StringUtils.isEmpty(host)) { - String result = post(host+"/spssync/common/list",null); - - if(IDCUtils.isJson(result)) { - JSONObject json = JSON.parseObject(result); - if(json!=null&&json.getInteger("code")==20000&&json.getString("data")!=null) { - List list = JSON.parseArray(json.getString("data"), Map.class); - if(list!=null) { - for(Map map:list) { - Map params = new HashMap(); - params.put("taskId", map.get("taskId")); - fetchData(host,params); - } - } - } - } - } - } - - @Async - @Override + + @Async + @Override + public void asyncFetchTask() { + initTable(); + Map map = dbDao.get("select * from idc_var where code='system_type'"); + if (map == null) { + dbDao.save("insert into idc_var (code,content) values ('system_type','IDC')"); + } + fetchTask(true); + } + + + private void fetchTask(boolean isIdc) { + + String host = getNextHost(); + if (!isIdc) { + Map map = dbDao.get("select * from sync_data_set limit 1"); + if (map != null && map.get("syncIp") != null) + host = map.get("syncIp").toString(); + } + logger.info("fetch from ip:" + host); + if (!StringUtils.isEmpty(host)) { + String result = post(host + "/spssync/common/list", null); + + if (IDCUtils.isJson(result)) { + JSONObject json = JSON.parseObject(result); + if (json != null && json.getInteger("code") == 20000 && json.getString("data") != null) { + List list = JSON.parseArray(json.getString("data"), Map.class); + if (list != null) { + for (Map map : list) { + Map params = new HashMap(); + params.put("taskId", map.get("taskId")); + fetchData(host, params); + } + } + } + } + } + } + + @Async + @Override public void asyncIdcTask() { - initTable(); - Map map = dbDao.get("select * from idc_var where code='system_type'"); - if(map==null) { - 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(); - String sqlWhere = ""; - if(!StringUtils.isEmpty(tnames[6])) { - sqlWhere+=" "+tnames[6]+">= cast('"+lastUpdateTime+"' as datetime)";// and date_add(cast('"+DateUtil.formatDate(nowUpdateTime, "yyyy-MM-dd HH:mm:ss")+"' as datetime),INTERVAL 1 day)"; - sqlWhere+= " and not exists (select fkId from idc_record where type='"+tnames[2]+"' and fkId="+tnames[2]+"."+keyColumn+" and createTime>date_sub(now(),interval 15 MINUTE))"; - } else { - sqlWhere = "not exists (select fkId from idc_record where type='"+tnames[2]+"' and fkId="+tnames[2]+"."+keyColumn+")"; - map.put("isEnd", "1"); - } - map.put("sqlWhere", sqlWhere); - - map.put("tableKey", tnames[0]); - map.put("tableName", tnames[2]); - map.put("uniqueColumn", tnames[3]); - map.put("masterLinkColumn", tnames[4]); - map.put("subLinkColumn", tnames[5]); - map.put("filePathColumn", tnames[7]); - map.put("dataWhere", tnames[8]); - map.put("messageType", tnames[9]); - map.put("messageName", tnames[9]); - ScheduledRequest scheduledRequest = new ScheduledRequest(); - 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,syncIp)) { - setUpdateTime(tnames[2]+"."+tnames[0],DateUtil.formatDate(nowUpdateTime,"yyyy-MM-dd HH:mm:ss")); - } - } - } - } - - - - private String fetchData(String host,Map params) { - OkHttpClient client = new OkHttpClient().newBuilder() - .build(); - MediaType mediaType = MediaType.parse("application/json"); - RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(params)); - Request request = new Request.Builder() - .url(host+"/spssync/common/download") - .method("POST", body) - .addHeader("Content-Type", "application/json") - .build(); - String result = ""; - MultipartFile[] files = {}; - Date startTime = new Date(); - try { - boolean success=true; - Response response = client.newCall(request).execute(); - result = response.body().string(); - JSONObject json = JSONObject.parseObject(result); - - if(isLastLevel()) { - if(json.get("code")!=null&&json.getInteger("code")==20000) { - success = analyMiddle(host,json.getJSONObject("data"),files,false,true); - if(!success) - logger.info("fetchData-->解析失败"); - } else { - success = false; - } - syncAddTaskStatus(json.getJSONObject("data"),3,success,startTime,true); - } else { - if(json.get("code")!=null&&json.get("data")!=null) { - //logger.info("res1-->"+JSON.toJSONString(json)); - syncAddTaskStatus(json.getJSONObject("data"),0,success,startTime,true); - analyMiddle(host,json.getJSONObject("data"),files,false,false); - } - } - - if(success) { - String ret = post(host+"/spssync/common/success",params); - - } - - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - logger.error("fetchData-->"+e.getMessage()); - } - return result; - } - - private String post(String url,Map params) { - OkHttpClient client = new OkHttpClient().newBuilder() - .build(); - MediaType mediaType = MediaType.parse("application/json"); - RequestBody body = RequestBody.create(mediaType, ""); - if(params!=null) - body = RequestBody.create(mediaType,JSON.toJSONString(params)); - Request request = new Request.Builder() - .url(url) - .method("POST", body) - .addHeader("Content-Type", "application/json") - .build(); - String result = ""; - try { - Response response = client.newCall(request).execute(); - result = response.body().string(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return result; - } - - - public BaseResponse downlaodSuccess(HttpServletRequest request,Map params) { - String sql = "update basic_export_status set receiveStatus='1',endTime=now() where id='"+params.get("taskId")+"'"; - dbDao.update(sql); - return ResultVOUtils.success(); - } - /****/ - @Override - public BaseResponse receive(HttpServletRequest request, - String content,MultipartFile[] files) { - /*授权检查,后续完善*/ - String apiKey = request.getHeader("apiKey"); - String secretKey = request.getHeader("secretKey"); - /*******/ - JSONObject json = JSONObject.parseObject(content); - String filePathSlash = filePath.substring(filePath.length() -1).equals("/") ? "" : "/"; - String backFileSlash = backFilePath.substring(backFilePath.length() -1).equals("/") ? "" : "/"; - String datePath = DateUtil.formatDate(new Date(),"yyyy-MM-dd"); - String fileName =filePath +filePathSlash +datePath+"/"+json.getString("messageType")+"-"+json.getString("messageId")+".udi"; - String backFileName = backFilePath +backFileSlash +datePath+"/"+json.getString("messageType")+"-"+json.getString("messageId")+".udi"; - if(!FileUtils.makeDirectory( filePath +filePathSlash +datePath)) - IDCUtils.createDirectory(filePath +filePathSlash +datePath+"/"); - if(!FileUtils.makeDirectory(backFilePath +backFileSlash +datePath)) - IDCUtils.createDirectory(filePath +backFileSlash +datePath+"/"); - - FileUtils.SaveFileAs(content, fileName); + initTable(); + Map map = dbDao.get("select * from idc_var where code='system_type'"); + if (map == null) { + 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 < SYNC_TABLES.length; i++) { + String[] tnames = SYNC_TABLES[i].split("/"); + boolean sync = StringUtils.isEmpty(tnames[0]) || + (!StringUtils.isEmpty(tnames[0]) && map != null && map.get(tnames[0]) != null && map.get(tnames[0]).toString().equals("1")); + saveIdcLog("---", "", map.get(tnames[0]) + SYNC_TABLES[i], 0, 0); + if (sync) { + String syncIp = map.get("syncIp") != null ? map.get("syncIp").toString() : ""; + syncData(SYNC_TABLES[i], isUpload, syncIp); + } + } + } + } + + private void syncData(String t, boolean isUpload, String syncIp) { + boolean sync = true; + String[] tnames = t.split("/"); + + String lastUpdateTime = getUpdateTime(tnames[2] + "." + tnames[0]); + Date nowUpdateTime = new Date(); + if (!StringUtils.isEmpty(tnames[0])) { + + List> keyList = dbDao.listKeyMysql(tnames[2]); + String keyColumn = keyList != null && keyList.size() > 0 ? keyList.get(0).get("columnName").toString() : "id"; + Map map = new HashMap(); + String sqlWhere = ""; + if (!StringUtils.isEmpty(tnames[6])) { + sqlWhere += " " + tnames[6] + ">= cast('" + lastUpdateTime + "' as datetime)";// and date_add(cast('"+DateUtil.formatDate(nowUpdateTime, "yyyy-MM-dd HH:mm:ss")+"' as datetime),INTERVAL 1 day)"; + sqlWhere += " and not exists (select fkId from idc_record where type='" + tnames[2] + "' and fkId=" + tnames[2] + "." + keyColumn + " and createTime>date_sub(now(),interval 15 MINUTE))"; + } else { + sqlWhere = "not exists (select fkId from idc_record where type='" + tnames[2] + "' and fkId=" + tnames[2] + "." + keyColumn + ")"; + map.put("isEnd", "1"); + } + map.put("sqlWhere", sqlWhere); + + map.put("tableKey", tnames[0]); + map.put("tableName", tnames[2]); + map.put("uniqueColumn", tnames[3]); + map.put("masterLinkColumn", tnames[4]); + map.put("subLinkColumn", tnames[5]); + map.put("filePathColumn", tnames[7]); + map.put("dataWhere", tnames[8]); + map.put("messageType", tnames[9]); + map.put("messageName", tnames[9]); + ScheduledRequest scheduledRequest = new ScheduledRequest(); + 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, syncIp)) { + setUpdateTime(tnames[2] + "." + tnames[0], DateUtil.formatDate(nowUpdateTime, "yyyy-MM-dd HH:mm:ss")); + } + } + } + } + + + private String fetchData(String host, Map params) { + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(params)); + Request request = new Request.Builder() + .url(host + "/spssync/common/download") + .method("POST", body) + .addHeader("Content-Type", "application/json") + .build(); + String result = ""; + MultipartFile[] files = {}; + Date startTime = new Date(); + try { + boolean success = true; + Response response = client.newCall(request).execute(); + result = response.body().string(); + JSONObject json = JSONObject.parseObject(result); + + if (isLastLevel()) { + if (json.get("code") != null && json.getInteger("code") == 20000) { + success = analyMiddle(host, json.getJSONObject("data"), files, false, true); + if (!success) + logger.info("fetchData-->解析失败"); + } else { + success = false; + } + syncAddTaskStatus(json.getJSONObject("data"), 3, success, startTime, true); + } else { + if (json.get("code") != null && json.get("data") != null) { + //logger.info("res1-->"+JSON.toJSONString(json)); + syncAddTaskStatus(json.getJSONObject("data"), 0, success, startTime, true); + analyMiddle(host, json.getJSONObject("data"), files, false, false); + } + } + + if (success) { + String ret = post(host + "/spssync/common/success", params); + + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + logger.error("fetchData-->" + e.getMessage()); + } + return result; + } + + private String post(String url, Map params) { + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("application/json"); + RequestBody body = RequestBody.create(mediaType, ""); + if (params != null) + body = RequestBody.create(mediaType, JSON.toJSONString(params)); + Request request = new Request.Builder() + .url(url) + .method("POST", body) + .addHeader("Content-Type", "application/json") + .build(); + String result = ""; + try { + Response response = client.newCall(request).execute(); + result = response.body().string(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return result; + } + + + public BaseResponse downlaodSuccess(HttpServletRequest request, Map params) { + String sql = "update basic_export_status set receiveStatus='1',endTime=now() where id='" + params.get("taskId") + "'"; + dbDao.update(sql); + return ResultVOUtils.success(); + } + + /****/ + @Override + public BaseResponse receive(HttpServletRequest request, + String content, MultipartFile[] files) { + /*授权检查,后续完善*/ + String apiKey = request.getHeader("apiKey"); + String secretKey = request.getHeader("secretKey"); + /*******/ + JSONObject json = JSONObject.parseObject(content); + String filePathSlash = filePath.substring(filePath.length() - 1).equals("/") ? "" : "/"; + String backFileSlash = backFilePath.substring(backFilePath.length() - 1).equals("/") ? "" : "/"; + String datePath = DateUtil.formatDate(new Date(), "yyyy-MM-dd"); + String fileName = filePath + filePathSlash + datePath + "/" + json.getString("messageType") + "-" + json.getString("messageId") + ".udi"; + String backFileName = backFilePath + backFileSlash + datePath + "/" + json.getString("messageType") + "-" + json.getString("messageId") + ".udi"; + if (!FileUtils.makeDirectory(filePath + filePathSlash + datePath)) + IDCUtils.createDirectory(filePath + filePathSlash + datePath + "/"); + if (!FileUtils.makeDirectory(backFilePath + backFileSlash + datePath)) + IDCUtils.createDirectory(filePath + backFileSlash + datePath + "/"); + + FileUtils.SaveFileAs(content, fileName); FileUtils.SaveFileAs(content, backFileName); ArrayList saveFiles = new ArrayList<>(); Date startTime = new Date(); - if(files!=null) { - - int n=0; + if (files != null) { + + int n = 0; try { - for(MultipartFile file:files) { - String imageName = filePath +filePathSlash+"register/file/image2/"+file.getOriginalFilename(); - saveFiles.add(imageName); - - writeFile(file.getBytes(), filePath +filePathSlash+"register/file/image2/", file.getOriginalFilename()); - writeFile(file.getBytes(), backFilePath +backFileSlash+datePath+"register/file/image2/", file.getOriginalFilename()); - n++; - } - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + for (MultipartFile file : files) { + String imageName = filePath + filePathSlash + "register/file/image2/" + file.getOriginalFilename(); + saveFiles.add(imageName); + + writeFile(file.getBytes(), filePath + filePathSlash + "register/file/image2/", file.getOriginalFilename()); + writeFile(file.getBytes(), backFilePath + backFileSlash + datePath + "register/file/image2/", file.getOriginalFilename()); + n++; + } + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } - + /*解析入库*/ boolean success = false; - if(isLastLevel()) { - success = analyMiddle("",json,files,true,true); - syncAddTaskStatus(json,3,success,startTime,true); - if(!success) { - - return ResultVOUtils.error(9000, "解析失败"); - } + if (isLastLevel()) { + success = analyMiddle("", json, files, true, true); + syncAddTaskStatus(json, 3, success, startTime, true); + if (!success) { + + return ResultVOUtils.error(9000, "解析失败"); + } } else { - //需要转发 - if(isRelay()) { - String host = getNextHost(); - String result = relay(request.getHeader("reqNo"),content,saveFiles,host); - if(IDCUtils.isJson(result)) { - syncAddTaskStatus(json,2,true,startTime,true); - BaseResponse object = JSON.parseObject(result,BaseResponse.class); - return object; - } else { - syncAddTaskStatus(json,2,false,startTime,false); - return ResultVOUtils.error(9000, "转发失败"); - } - - } + //需要转发 + if (isRelay()) { + String host = getNextHost(); + String result = relay(request.getHeader("reqNo"), content, saveFiles, host); + if (IDCUtils.isJson(result)) { + syncAddTaskStatus(json, 2, true, startTime, true); + BaseResponse object = JSON.parseObject(result, BaseResponse.class); + return object; + } else { + syncAddTaskStatus(json, 2, false, startTime, false); + return ResultVOUtils.error(9000, "转发失败"); + } + + } + } + return ResultVOUtils.success(); + } + + + /*数据同步,从数据库获取数据下发或上传下级中继服务*/ + @Override + public BaseResponse send(Map 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, ""); + } + + + @Override + public void downloadFile(String fileName, HttpServletResponse response) { + OutputStream os; + String filePathSlash = filePath.substring(filePath.length() - 1).equals("/") ? "" : fileName.substring(0, 1).equals("/") ? "" : "/"; + + try { + if (FileUtils.isFileExist(filePath + filePathSlash + fileName)) { + byte[] bytes = FileUtils.readFileByBytes(filePath + filePathSlash + fileName); + os = response.getOutputStream(); + os.write(bytes); + os.flush(); + os.close(); + } + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); } - return ResultVOUtils.success(); - } - - - /*数据同步,从数据库获取数据下发或上传下级中继服务*/ - @Override - public BaseResponse send(Map 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, ""); - } - - - @Override - public void downloadFile(String fileName,HttpServletResponse response) { - OutputStream os; - String filePathSlash = filePath.substring(filePath.length() -1).equals("/") ? "" : fileName.substring(0,1).equals("/") ? "" : "/"; - - try { - if(FileUtils.isFileExist(filePath+filePathSlash+fileName)) { - byte[] bytes = FileUtils.readFileByBytes(filePath+filePathSlash+fileName); - os = response.getOutputStream(); - os.write(bytes); - os.flush(); - os.close(); - } - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private void saveUploadStatus(Map params) { - Map map = new HashMap(); - map.putAll(params); - - Map columns = getColumn("basic_upload_status"); - String sql = "replace basic_upload_status "+DBAUtils.parseInsert(map, columns); - - dbDao.save(sql); - } - - private void saveExportStatus(Map params) { - Map map = new HashMap(); - map.putAll(params); - map.put("receiveStatus", "0"); - - - Map columns = getColumn("basic_export_status"); - String sql = "replace basic_export_status "+DBAUtils.parseInsert(map, columns); - - dbDao.save(sql); - } - private void saveDownloadStatus(Map params) { - Map map = new HashMap(); - map.put("receiveStatus", "0"); - map.putAll(params); - - Map columns = getColumn("basic_download_status"); - String sql = "replace basic_download_status "+DBAUtils.parseInsert(map, columns); - - dbDao.save(sql); - } - private void saveIdcLog(String messageType,String taskId,String content,int offset,int total) { - Map map = new HashMap(); - map.put("id", CustomUtil.getId()); - map.put("taskId", taskId); - map.put("orderNum", orderNum); - map.put("type", messageType); - map.put("createTime", new Date()); - map.put("content", content); - map.put("offset", offset); - map.put("total", total); - Map columns = getColumn("idc_log"); - String sql = "insert into idc_log "+DBAUtils.parseInsert(map, columns); - - dbDao.save(sql); - } - - - private boolean syncMasterData(Map params,boolean isUpload,String syncIp) { - boolean success=false; - String tableName = params.get("tableName").toString(); - String tableKey = params.get("tableKey").toString(); - String[] childs = new String[30]; - int childNum = -1; - /*子表*/ - for(String str:SYNC_TABLES) { - if(str.contains("/"+tableKey+"/")) { - childNum++; - childs[childNum] = str; - } - } - Map table = dbDao.getMysql(tableName); - if(!(table!=null&&table.get("tableName")!=null)) - return false; - String sql = "select count(*) from "+tableName; - Map column = getColumn(tableName); - - 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; - ArrayList files = new ArrayList<>(); - - String filePathColumn = params.get("filePathColumn")!=null ? params.get("filePathColumn").toString() : ""; - orderNum++; - String messageType = params.get("messageType").toString(); - saveIdcLog(messageType,"",tableName +">"+where,0,total); - String filePathSlash = filePath.substring(filePath.length() -1).equals("/") ? "" : "/"; - - 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;i data = getData(messageType,tableName,params,whereParams); - String recordSql = ""; - orderNum++; - saveIdcLog(messageType,"",tableName +">"+where,i *limit,total); - if(data.get("data")!=null) { - - List list = JSONObject.parseArray(JSON.toJSONString(data.get("data")), Map.class); - if(list!=null&&list.size()>0) { - for(int m=0;m-1) { - for(int z=0;z childMap = new HashMap<>(); - childMap.put(chidTnames[5], keyValue); - List> childList = getList(chidTnames[2],childMap); - list.get(m).put("tableName"+z, chidTnames[2]); - list.get(m).put("filePathColumn"+z, chidTnames[7]); - list.get(m).put("data"+z, childList); - if(!StringUtils.isEmpty(chidTnames[7])&&childList.size()>0) { - for(int x=0;xsuccess",i *limit,total); - } else { - success = false; - - saveIdcLog(messageType,"",tableName +">"+result,i *limit,total); - } - } else { - success = false; - saveIdcLog(messageType,"",syncIp+":"+tableName +">fail:上传地址未连通",i *limit,total); - } - - } else { - if(!StringUtils.isEmpty(recordSql)) { - dbDao.save("insert into idc_record (id,type,fkId,isEnd,createTime) values "+recordSql); - } - saveIdcLog(messageType,"",tableName +">success",i *limit,total); - } - syncAddTaskStatus(data,isUpload ? 1 : 0 ,success,startTime,isUpload); - } - } - } - - } - - return success; - } - - /*增加同步任务状态*/ - private void syncAddTaskStatus(Map json,int scheduleType,boolean success,Date startTime,boolean isEnd) { - try - { - String content = JSON.toJSONString(json); - String datePath = DateUtil.formatDate(new Date(),"yyyy-MM-dd"); - String fileName = filePath +datePath+"/"+json.get("messageType")+"-"+json.get("messageId")+".udi"; - String backFileName = backFilePath +datePath+"/"+json.get("messageType")+"-"+json.get("messageId")+".udi"; - if(!FileUtils.makeDirectory( filePath +datePath)) - IDCUtils.createDirectory(filePath +datePath+"/"); - if(!FileUtils.makeDirectory(backFilePath +datePath)) - IDCUtils.createDirectory(filePath +datePath+"/"); - - FileUtils.SaveFileAs(content, fileName); - FileUtils.SaveFileAs(content, backFileName); - - //type,transportType,superiorService,subordinateService,cacheFilePath - Map map = new HashMap<>(); - map.put("type", json.get("messageType")); - map.put("id", json.get("messageId")); - if(json.get("id")==null) - map.put("id", CustomUtil.getId()); - map.put("transportType", scheduleType == 0 ? "1" : "2"); - map.put("scheduleType", scheduleType); - map.put("taskId", json.get("messageId")); - map.put("cacheFilePath", fileName); - map.put("status", success ? "1" : "0"); - map.put("startTime", startTime!=null ? startTime : new Date()); - map.put("updateTime", new Date()); - map.put("remark", json.get("messageType")+": "+json.get("total")+"条"); - if(isEnd) - map.put("endTime", new Date()); - if(scheduleType==2) { - saveUploadStatus(map); - } else if (scheduleType==3) { - saveDownloadStatus(map); - } else { - saveExportStatus(map); - } - } catch (Exception ex) { - logger.error(ex.getMessage()); - } - - } - - private boolean analyMiddle(String host,JSONObject jsonObject,MultipartFile[] files,boolean isUpload,boolean isToDB) { - if(jsonObject.get("data")!=null) { - String tableName = ""; - String uniqueColumn = ""; - String filePathColumn = ""; - Object object = jsonObject.get("data"); - List> list = new ArrayList<>(); - if(object instanceof List) { - list = jsonObject.getObject("data", List.class); - tableName = jsonObject.getString("tableName"); - uniqueColumn = jsonObject.getString("uniqueColumn"); - filePathColumn = jsonObject.getString("filePathColumn"); - } else { - JSONObject obj = jsonObject.getJSONObject("data"); - list = obj.getObject("data", List.class); - tableName = obj.getString("tableName"); - uniqueColumn = obj.getString("uniqueColumn"); - filePathColumn = obj.getString("filePathColumn"); - } - if(!StringUtils.isEmpty(tableName)) { - if(isToDB) { - return analyToDB(host,tableName,uniqueColumn,filePathColumn,list,isUpload); - } else { - //logger.info("files-->"+tableName); - return analyToFile(host,filePathColumn,list); - } - } else { - logger.error("数据格式错误:无数据标记"); - } - //图片处理 - } - return false; - } - - private boolean analyToFile(String host,String filePathColumn,List> list) { - - if(list!=null&&list.size()>0) { - String[] files = new String[list.size()]; - //logger.info("filePathColumn-->"+filePathColumn); - for(int i=0;i"+files[i]); - } - for(int z=0;z<30;z++) { - if(list.get(i).get("data"+z)!=null) { - if(list.get(i).get("filePathColumn"+z)!=null) { - List> childList = (List>)list.get(i).get("data"+z); - analyToFile(host,list.get(i).get("filePathColumn"+z).toString(),childList); - } - } else { - break; - } - } - } - - batchDownloadFile(host,files); - } - return true; - } - /*解析到数据库*/ - - /*按表名解析数据到数据库,子表暂未处理*/ - private boolean analyToDB(String host,String tableName,String uniqueColumn,String filePathColumn,List> list,boolean isUpload) { - - String tName = DBAUtils.tableRealName(tableName); - 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) - sql+=","; - columnList.get(i).put("attrName", columnList.get(i).get("columnName")); - sql+= columnList.get(i).get("columnName").toString() ; - col++; - if(uniqueColumn!=null&&columnList.get(i).get("columnKey")!=null&&(","+uniqueColumn+",").contains(","+columnList.get(i).get("columnName")+",")) { - keyColumn[key] = columnList.get(i).get("columnName").toString(); - keyDataType[key]=columnList.get(i).get("dataType").toString().contains("char") ? "C" : columnList.get(i).get("dataType").toString().contains("date") ? "D" : "N"; - key++; - } else { - if(columnList.get(i).get("columnKey")!=null&&!StringUtils.isEmpty(columnList.get(i).get("columnKey").toString())&& - ("PRI".contains(columnList.get(i).get("columnKey").toString()))) { - keyColumn[key] = columnList.get(i).get("columnName").toString(); - keyDataType[key]=columnList.get(i).get("dataType").toString().contains("char") ? "C" : columnList.get(i).get("dataType").toString().contains("date") ? "D" : "N"; - key++; - } - } - } - sql+=") values "; - - if(list!=null&&list.size()>0) { - int n = 0; - int d = 0; - String[] files = new String[list.size()]; - for(int i=0;i0 ? "," : ""; - sql+="("; - int m = 0; - int h = 0; - for(int k=0;k0 ? "," : ""; - boolean ups = list.get(i).containsKey(attrName) ? true : false ; - updateSet+=ups&&h>0 ? "," : ""; - updateSet+=ups ? columnList.get(k).get("columnName")+"=" : ""; - if(StringUtils.isEmpty(value)) { - sql+="null"; - updateSet+=ups ? "null" : ""; - } else { - if(dataType.equals("C")) { - sql+="'"+value+"'"; - updateSet+=ups ? "'"+value+"'" : ""; - } else if (dataType.equals("N")) { - sql+=value; - updateSet+=ups ? value : ""; - } else { - Date date = new Date(); - date = StringUtils.isNumeric(value) ? new Date(Long.valueOf(value)) : IDCUtils.parseDate(value); - String str = DateUtils.format(date, "yyyy-MM-dd HH:mm:ss"); - sql+="cast('"+str+"' as datetime)"; - updateSet+=ups ? "cast('"+str+"' as datetime)" : ""; - } - } - m++; - if(operateMode.equals("U")&&!StringUtils.isEmpty(updateSet)&&!StringUtils.isEmpty(updateWhere)) - 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); - List> chList = new ArrayList>(); - for (Object o : (List) obj) { - chList.add((Map)o); - } - analyToDB(host,list.get(i).get("tableName"+m).toString(),"","",chList,isUpload); - } else { - break; - } - } - - } - if(n>0) { - result = (dbDao.save(sql)>0); - if(!result) - logger.error(tableName+"-->fetchSave Fail"); - } - batchDownloadFile(host,files); - } - return result; - } - - - /*转发下级或上级中继服务*/ - private String relay(String reqNo,String content,ArrayList files,String ip) { - String host = ip; - String result=""; - if(StringUtils.isEmpty(reqNo)) - reqNo = UUID.randomUUID().toString(); - if(!StringUtils.isEmpty(host)) { - host+="/spssync/common/upload" ; - OkHttpClient client = new OkHttpClient().newBuilder() - .connectTimeout(30, TimeUnit.SECONDS)//设置连接超时时间 - .readTimeout(30, TimeUnit.SECONDS)//设置读取超时时间 - .build(); - MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); - - MultipartBody.Builder builder = new MultipartBody.Builder(); - builder.setType(MultipartBody.FORM); - String fileType = "application/octet-stream"; - if(files!=null&&files.size()>0) { - for (int i = 0; i < files.size(); i++) { - if(!StringUtils.isEmpty(files.get(i))) { - File file = new File(files.get(i)); - builder.addFormDataPart("files",files.get(i), - RequestBody.create(MediaType.parse(fileType), file)); - } - } - } - builder.addFormDataPart("content", content); - RequestBody body = builder.build(); - - Request req = new Request.Builder() - .url(host) - .method("POST", body) - .addHeader("Content-Type", "application/x-www-form-urlencoded") - .addHeader("format", "json") - .addHeader("apiKey", apiKey) - .addHeader("secretKey", apiSecret) - .addHeader("reqNo", reqNo) - .addHeader("timestamp",DateUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss")) - .addHeader("Access-Control-Allow-Headers", "Authorization, Origin, X-Requested-With, Content-Type, Accept") - .build(); - try { - Response response = client.newCall(req).execute(); - result=response.body().string(); - log.debug("result--->"+result); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } else { - log.debug("未配置中继服务地址"); - } - return result; - } - - /*下载文件*/ - private boolean batchDownloadFile(String syncIp,String[] files) { - boolean success = true; - for(String fileName:files) { - if(!StringUtils.isEmpty(fileName)) { - String[] str = fileName.split(","); - for(int i=0;i"+str[i]); - if(!signleDownloadFile(syncIp,str[i])) - success = false; - } - } - } - } - return success; - } - private boolean signleDownloadFile(String syncIp,String fileName) { - OkHttpClient client = new OkHttpClient().newBuilder() - .build();; - MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); - - RequestBody body = RequestBody.create(mediaType, "fileName="+fileName); - - Request request = new Request.Builder() - .url(syncIp+"/spssync/common/downloadFile") - .post(body) - .addHeader("Content-Type", "application/x-www-form-urlencoded") - .build(); - try { - Response result = client.newCall(request).execute(); - - - if (MediaType.parse("application/force-download").equals(result.body().contentType())) { - try (InputStream inputStream = result.body().byteStream()) { - String filePathSlash = filePath.substring(filePath.length() -1).equals("/") ? "" : "/"; - - FileOutputStream outputStream =new FileOutputStream(filePath +filePathSlash+fileName); - - byte b[]=new byte[1024]; - - int len=0; - - while ((len=inputStream.read(b))!=-1){ - - outputStream.write(b,0,len); - - } - - outputStream.flush(); - - - - } catch (Exception e) { - - - } - } - - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - return true; - } - - /*获取转发服务地址,当前值允许单向,只使用参数upper_server_ip*/ - private String getNextHost() { - SystemParamConfigEntity systemParamConfigEntity = systemParamConfigService.selectByParamKey("upper_server_ip"); - String host = systemParamConfigEntity!=null ? systemParamConfigEntity.getParamValue() : ""; - host = !StringUtils.isEmpty(host)&&host.substring(host.length() -1).equals("/") ? host.substring(0,host.length() -1) : host; - return host; - } - - /*判断是否需要解析入库,中继服务只转发*/ - private boolean isLastLevel() { - 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) ? 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(); - map.putAll(params); - map.put("sql", sql); - List> list = dbDao.list(map); - return list; - } - /*由表名获取数据*/ - private Map getData(String messageType,String tableName,Map params,Map whereParams) { - List> list = getList(tableName,whereParams); - Map map = new HashMap(); - map.put("messageId", CustomUtil.getId()); - map.put("messageType", messageType); - 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()); - map.put("data", list); - return map; - } - - - - - private SystemParamConfigEntity getSystemParamConfig(String paramKey,String paramName,String defaultValue,String paramExplain) { - SystemParamConfigEntity systemParamConfigEntity = systemParamConfigService.selectByParamKey(paramKey); - if(systemParamConfigEntity==null||(systemParamConfigEntity!=null&&StringUtils.isEmpty(systemParamConfigEntity.getParamKey()))) { - systemParamConfigEntity = new SystemParamConfigEntity(); - systemParamConfigEntity.setParamKey(paramKey); - systemParamConfigEntity.setParamName(paramName); - systemParamConfigEntity.setParentId(0); - systemParamConfigEntity.setParamValue(defaultValue); - systemParamConfigEntity.setParamExplain(paramExplain); - systemParamConfigEntity.setParamStatus(1); - systemParamConfigEntity.setParamType(0); - systemParamConfigService.insert(systemParamConfigEntity); - } - return systemParamConfigEntity; - } - private void writeFile(byte[] file, String filePath, String fileName) throws Exception { - File targetFile = new File(filePath); - if (!targetFile.exists()) { - targetFile.mkdirs(); - } - FileOutputStream out = new FileOutputStream(filePath + fileName); - out.write(file); - out.flush(); - out.close(); - } - - - /*把列数据转Map*/ - private Map getColumn(String tableName) { - Map map = new HashMap(); - List> columnList = new ArrayList>(); - String columnKey=""; - String[] tnames = tableName.split(","); - for(String tname:tnames) { - columnList = dbDao.listColumnsMysql(tname); - if(columnList!=null&&columnList.size()>0) { - for(int i=0;i column = new HashMap(); - String dataType =columnList.get(i).get("dataType").toLowerCase().contains("char") || columnList.get(i).get("dataType").toLowerCase().contains("text")? - "C" : columnList.get(i).get("dataType").toLowerCase().contains("date") ? "D" : "N" ;; - String attrName = columnList.get(i).get("columnName").toString(); - if(map.get(attrName)==null) { - column.put("tableName", tname); - column.put("dataType", dataType); - column.put("columnName", columnList.get(i).get("columnName")); - if(columnList.get(i).get("columnKey")!=null) { - column.put("columnKey", columnList.get(i).get("columnKey")); - } else { - column.put("columnKey","N"); - } - if(map.get(attrName)!=null) { - map.put(tname.toLowerCase()+"."+attrName, column); - } else { - map.put(attrName, column); - } - } - } - } - } - return map; - } - - - private String getUpdateTime(String id) { - String updateTime = ""; - Map map = dbDao.get("select * from idc_status where id='"+id+"'"); - if(map!=null&&map.get("id")!=null) { - updateTime = DateUtil.formatDate(IDCUtils.parseDate(map.get("statusTime").toString()),"yyyy-MM-dd HH:mm:ss"); - } else { - //国家库数据 - if(id.equals("productinfo")) { - - } - updateTime = "2000-01-01 00:00:00"; - String sql = "insert into idc_status (id,statusTime) values ('"+id+"',cast('"+updateTime+"' as datetime))"; - dbDao.save(sql); - } - return updateTime; - } - private String setUpdateTime(String id,String updateTime) { - String sql = ""; - Map map = dbDao.get("select * from idc_status where id='"+id+"'"); - if(map!=null&&map.get("id")!=null) { - sql = "update idc_status set statusTime=cast('"+updateTime+"' as datetime) where id='"+id+"'"; - dbDao.update(sql); - } else { - sql = "insert into idc_status (id,statusTime) values ('"+id+"',cast('"+updateTime+"' as datetime))"; - dbDao.save(sql); - } - return updateTime; - } - private void initTable() { - alterTable("idc_var","create table idc_var (code varchar(60),content varchar(200),PRIMARY KEY (code))"); - alterTable("idc_status","create table idc_status (id varchar(100),statusTime datetime,PRIMARY KEY (id))"); - alterTable("idc_record","create table idc_record (id varchar(36),type varchar(60),fkId varchar(36),isEnd char(1),createTime datetime,primary key (id),INDEX i_idc_record_fk_id (fkId),INDEX i_idc_record_create_time (createTime))"); - alterTable("idc_log","create table idc_log (id varchar(36),orderNum int,taskId varchar(60),type varchar(60),content varchar(2000),offset int,total int,createTime datetime,PRIMARY KEY (id))"); - dbDao.delete("delete from idc_record where createTime map = dbDao.getMysql(tableName); - if(!(map!=null&&map.get("tableName")!=null)) { - jdbcTemplate.execute(sql); - } - - } - + } + + private void saveUploadStatus(Map params) { + Map map = new HashMap(); + map.putAll(params); + + Map columns = getColumn("basic_upload_status"); + String sql = "replace basic_upload_status " + DBAUtils.parseInsert(map, columns); + + dbDao.save(sql); + } + + private void saveExportStatus(Map params) { + Map map = new HashMap(); + map.putAll(params); + map.put("receiveStatus", "0"); + + + Map columns = getColumn("basic_export_status"); + String sql = "replace basic_export_status " + DBAUtils.parseInsert(map, columns); + + dbDao.save(sql); + } + + private void saveDownloadStatus(Map params) { + Map map = new HashMap(); + map.put("receiveStatus", "0"); + map.putAll(params); + + Map columns = getColumn("basic_download_status"); + String sql = "replace basic_download_status " + DBAUtils.parseInsert(map, columns); + + dbDao.save(sql); + } + + private void saveIdcLog(String messageType, String taskId, String content, int offset, int total) { + Map map = new HashMap(); + map.put("id", CustomUtil.getId()); + map.put("taskId", taskId); + map.put("orderNum", orderNum); + map.put("type", messageType); + map.put("createTime", new Date()); + map.put("content", content); + map.put("offset", offset); + map.put("total", total); + Map columns = getColumn("idc_log"); + String sql = "insert into idc_log " + DBAUtils.parseInsert(map, columns); + + dbDao.save(sql); + } + + + private boolean syncMasterData(Map params, boolean isUpload, String syncIp) { + boolean success = false; + String tableName = params.get("tableName").toString(); + String tableKey = params.get("tableKey").toString(); + String[] childs = new String[30]; + int childNum = -1; + /*子表*/ + for (String str : SYNC_TABLES) { + if (str.contains("/" + tableKey + "/")) { + childNum++; + childs[childNum] = str; + } + } + Map table = dbDao.getMysql(tableName); + if (!(table != null && table.get("tableName") != null)) + return false; + String sql = "select count(*) from " + tableName; + Map column = getColumn(tableName); + + 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; + ArrayList files = new ArrayList<>(); + + String filePathColumn = params.get("filePathColumn") != null ? params.get("filePathColumn").toString() : ""; + orderNum++; + String messageType = params.get("messageType").toString(); + saveIdcLog(messageType, "", tableName + ">" + where, 0, total); + String filePathSlash = filePath.substring(filePath.length() - 1).equals("/") ? "" : "/"; + + 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; i < Math.ceil(total / limit) + 1; i++) { + whereParams.replace("page", i * limit); + whereParams.replace("limit", limit); + Date startTime = new Date(); + Map data = getData(messageType, tableName, params, whereParams); + String recordSql = ""; + orderNum++; + saveIdcLog(messageType, "", tableName + ">" + where, i * limit, total); + if (data.get("data") != null) { + + List list = JSONObject.parseArray(JSON.toJSONString(data.get("data")), Map.class); + if (list != null && list.size() > 0) { + for (int m = 0; m < list.size(); m++) { + + if (!StringUtils.isEmpty(filePathColumn) && list.get(m).get(filePathColumn) != null) { + String fileNames = list.get(m).get(filePathColumn).toString(); + String[] str = fileNames.split(","); + for (int r = 0; r < str.length; r++) { + if (!StringUtils.isEmpty(str[r])) + files.add(filePath + filePathSlash + "register/file/image2/" + str[r]); + } + } + recordSql += !StringUtils.isEmpty(recordSql) ? "," : ""; + recordSql += "('" + UUID.randomUUID().toString().replaceAll("-", "") + "','" + tableName + "','" + list.get(m).get(keyColumn) + "','" + isEnd + "',now())"; + + if (childNum > -1) { + for (int z = 0; z < childNum + 1; z++) { + String[] chidTnames = childs[z].split("/"); + if (!StringUtils.isEmpty(chidTnames[4]) && !StringUtils.isEmpty(chidTnames[5])) { + String keyValue = list.get(m).get(chidTnames[4]).toString(); + Map childMap = new HashMap<>(); + childMap.put(chidTnames[5], keyValue); + List> childList = getList(chidTnames[2], childMap); + list.get(m).put("tableName" + z, chidTnames[2]); + list.get(m).put("filePathColumn" + z, chidTnames[7]); + list.get(m).put("data" + z, childList); + if (!StringUtils.isEmpty(chidTnames[7]) && childList.size() > 0) { + for (int x = 0; x < childList.size(); x++) { + if (childList.get(i).get(chidTnames[7]) != null) { + String[] str = childList.get(i).get(chidTnames[7]).toString().split(","); + for (int s = 0; s < str.length; s++) { + files.add(filePath + filePathSlash + "register/file/image2/" + str[s]); + } + } + } + } + } + } + } + } + data.replace("data", list); + orderNum++; + + if (isUpload) { + String result = ""; + try { + result = relay("", JSON.toJSONString(data), files, syncIp); + } catch (Exception ex) { + + } + if (IDCUtils.isJson(result)) { + JSONObject json = JSON.parseObject(result); + if (json.getInteger("code") == 20000) { + if (!StringUtils.isEmpty(recordSql)) { + dbDao.save("insert into idc_record (id,type,fkId,isEnd,createTime) values " + recordSql); + } + saveIdcLog(messageType, "", tableName + ">success", i * limit, total); + } else { + success = false; + + saveIdcLog(messageType, "", tableName + ">" + result, i * limit, total); + } + } else { + success = false; + saveIdcLog(messageType, "", syncIp + ":" + tableName + ">fail:上传地址未连通", i * limit, total); + } + + } else { + if (!StringUtils.isEmpty(recordSql)) { + dbDao.save("insert into idc_record (id,type,fkId,isEnd,createTime) values " + recordSql); + } + saveIdcLog(messageType, "", tableName + ">success", i * limit, total); + } + syncAddTaskStatus(data, isUpload ? 1 : 0, success, startTime, isUpload); + } + } + } + + } + + return success; + } + + /*增加同步任务状态*/ + private void syncAddTaskStatus(Map json, int scheduleType, boolean success, Date startTime, boolean isEnd) { + try { + String content = JSON.toJSONString(json); + String datePath = DateUtil.formatDate(new Date(), "yyyy-MM-dd"); + String fileName = filePath + datePath + "/" + json.get("messageType") + "-" + json.get("messageId") + ".udi"; + String backFileName = backFilePath + datePath + "/" + json.get("messageType") + "-" + json.get("messageId") + ".udi"; + if (!FileUtils.makeDirectory(filePath + datePath)) + IDCUtils.createDirectory(filePath + datePath + "/"); + if (!FileUtils.makeDirectory(backFilePath + datePath)) + IDCUtils.createDirectory(filePath + datePath + "/"); + + FileUtils.SaveFileAs(content, fileName); + FileUtils.SaveFileAs(content, backFileName); + + //type,transportType,superiorService,subordinateService,cacheFilePath + Map map = new HashMap<>(); + map.put("type", json.get("messageType")); + map.put("id", json.get("messageId")); + if (json.get("id") == null) + map.put("id", CustomUtil.getId()); + map.put("transportType", scheduleType == 0 ? "1" : "2"); + map.put("scheduleType", scheduleType); + map.put("taskId", json.get("messageId")); + map.put("cacheFilePath", fileName); + map.put("status", success ? "1" : "0"); + map.put("startTime", startTime != null ? startTime : new Date()); + map.put("updateTime", new Date()); + map.put("remark", json.get("messageType") + ": " + json.get("total") + "条"); + if (isEnd) + map.put("endTime", new Date()); + if (scheduleType == 2) { + saveUploadStatus(map); + } else if (scheduleType == 3) { + saveDownloadStatus(map); + } else { + saveExportStatus(map); + } + } catch (Exception ex) { + logger.error(ex.getMessage()); + } + + } + + private boolean analyMiddle(String host, JSONObject jsonObject, MultipartFile[] files, boolean isUpload, boolean isToDB) { + if (jsonObject.get("data") != null) { + String tableName = ""; + String uniqueColumn = ""; + String filePathColumn = ""; + Object object = jsonObject.get("data"); + List> list = new ArrayList<>(); + if (object instanceof List) { + list = jsonObject.getObject("data", List.class); + tableName = jsonObject.getString("tableName"); + uniqueColumn = jsonObject.getString("uniqueColumn"); + filePathColumn = jsonObject.getString("filePathColumn"); + } else { + JSONObject obj = jsonObject.getJSONObject("data"); + list = obj.getObject("data", List.class); + tableName = obj.getString("tableName"); + uniqueColumn = obj.getString("uniqueColumn"); + filePathColumn = obj.getString("filePathColumn"); + } + if (!StringUtils.isEmpty(tableName)) { + if (isToDB) { + return analyToDB(host, tableName, uniqueColumn, filePathColumn, list, isUpload); + } else { + //logger.info("files-->"+tableName); + return analyToFile(host, filePathColumn, list); + } + } else { + logger.error("数据格式错误:无数据标记"); + } + //图片处理 + } + return false; + } + + private boolean analyToFile(String host, String filePathColumn, List> list) { + + if (list != null && list.size() > 0) { + String[] files = new String[list.size()]; + //logger.info("filePathColumn-->"+filePathColumn); + for (int i = 0; i < list.size(); i++) { + if (!StringUtils.isEmpty(filePathColumn)) { + files[i] = list.get(i).get(filePathColumn) != null ? list.get(i).get(filePathColumn).toString() : ""; + //logger.info("file-->"+files[i]); + } + for (int z = 0; z < 30; z++) { + if (list.get(i).get("data" + z) != null) { + if (list.get(i).get("filePathColumn" + z) != null) { + List> childList = (List>) list.get(i).get("data" + z); + analyToFile(host, list.get(i).get("filePathColumn" + z).toString(), childList); + } + } else { + break; + } + } + } + + batchDownloadFile(host, files); + } + return true; + } + /*解析到数据库*/ + + /*按表名解析数据到数据库,子表暂未处理*/ + private boolean analyToDB(String host, String tableName, String uniqueColumn, String filePathColumn, List> list, boolean isUpload) { + + String tName = DBAUtils.tableRealName(tableName); + 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; i < columnList.size(); i++) { + if (col > 0) + sql += ","; + columnList.get(i).put("attrName", columnList.get(i).get("columnName")); + sql += columnList.get(i).get("columnName").toString(); + col++; + if (uniqueColumn != null && columnList.get(i).get("columnKey") != null && ("," + uniqueColumn + ",").contains("," + columnList.get(i).get("columnName") + ",")) { + keyColumn[key] = columnList.get(i).get("columnName").toString(); + keyDataType[key] = columnList.get(i).get("dataType").toString().contains("char") ? "C" : columnList.get(i).get("dataType").toString().contains("date") ? "D" : "N"; + key++; + } else { + if (columnList.get(i).get("columnKey") != null && !StringUtils.isEmpty(columnList.get(i).get("columnKey").toString()) && + ("PRI".contains(columnList.get(i).get("columnKey").toString()))) { + keyColumn[key] = columnList.get(i).get("columnName").toString(); + keyDataType[key] = columnList.get(i).get("dataType").toString().contains("char") ? "C" : columnList.get(i).get("dataType").toString().contains("date") ? "D" : "N"; + key++; + } + } + } + sql += ") values "; + + if (list != null && list.size() > 0) { + int n = 0; + int d = 0; + String[] files = new String[list.size()]; + for (int i = 0; i < list.size(); i++) { + String operateMode = list.get(i).get("operateMode") != null ? list.get(i).get("operateMode").toString() : "A"; + String updateWhere = ""; + String updateSet = ""; + if (!StringUtils.isEmpty(filePathColumn)) { + files[i] = list.get(i).get(filePathColumn) != null ? list.get(i).get(filePathColumn).toString() : ""; + } + + if ("A,D,U".contains(operateMode)) { + for (int z = 0; z < keyColumn.length; z++) { + if (list.get(i).get(keyColumn[z]) != null && !StringUtils.isEmpty(list.get(i).get(keyColumn[z]).toString())) { + updateWhere += !StringUtils.isEmpty(updateWhere) ? " and " : " "; + String value = list.get(i).get(keyColumn[z]) != null ? list.get(i).get(keyColumn[z]).toString() : ""; + value = keyDataType[z].equals("D") ? "cast('" + DateUtil.formatDate(IDCUtils.parseDate(value), "yyyy-MM-dd HH:mm:ss") + "' as datetime)" : value; + updateWhere += keyColumn[z] + " = " + (keyDataType[z].equals("C") ? "'" : "") + value + (keyDataType[z].equals("C") ? "'" : ""); + } + } + + if ("A,D".contains(operateMode) && !StringUtils.isEmpty(updateWhere)) + dbDao.delete(del + updateWhere); + } + + /*A 新增 U 更新*/ + if ("A,U".contains(operateMode)) { + sql += n > 0 ? "," : ""; + sql += "("; + int m = 0; + int h = 0; + for (int k = 0; k < columnList.size(); k++) { + String attrName = columnList.get(k).get("attrName"); + String value = list.get(i).get(attrName) != null ? list.get(i).get(attrName).toString() : ""; + value = DBAUtils.escape(value); + String dataType = columnList.get(k).get("dataType").toLowerCase().contains("char") || columnList.get(k).get("dataType").toLowerCase().contains("text") ? + "C" : columnList.get(k).get("dataType").toLowerCase().contains("date") ? "D" : "N"; + + sql += m > 0 ? "," : ""; + boolean ups = list.get(i).containsKey(attrName) ? true : false; + updateSet += ups && h > 0 ? "," : ""; + updateSet += ups ? columnList.get(k).get("columnName") + "=" : ""; + if (StringUtils.isEmpty(value)) { + sql += "null"; + updateSet += ups ? "null" : ""; + } else { + if (dataType.equals("C")) { + sql += "'" + value + "'"; + updateSet += ups ? "'" + value + "'" : ""; + } else if (dataType.equals("N")) { + sql += value; + updateSet += ups ? value : ""; + } else { + Date date = new Date(); + date = StringUtils.isNumeric(value) ? new Date(Long.valueOf(value)) : IDCUtils.parseDate(value); + String str = DateUtils.format(date, "yyyy-MM-dd HH:mm:ss"); + sql += "cast('" + str + "' as datetime)"; + updateSet += ups ? "cast('" + str + "' as datetime)" : ""; + } + } + m++; + if (operateMode.equals("U") && !StringUtils.isEmpty(updateSet) && !StringUtils.isEmpty(updateWhere)) + 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); + List> chList = new ArrayList>(); + for (Object o : (List) obj) { + chList.add((Map) o); + } + analyToDB(host, list.get(i).get("tableName" + m).toString(), "", "", chList, isUpload); + } else { + break; + } + } + + } + if (n > 0) { + result = (dbDao.save(sql) > 0); + if (!result) + logger.error(tableName + "-->fetchSave Fail"); + } + batchDownloadFile(host, files); + } + return result; + } + + + /*转发下级或上级中继服务*/ + private String relay(String reqNo, String content, ArrayList files, String ip) { + String host = ip; + String result = ""; + if (StringUtils.isEmpty(reqNo)) + reqNo = UUID.randomUUID().toString(); + if (!StringUtils.isEmpty(host)) { + host += "/spssync/common/upload"; + OkHttpClient client = new OkHttpClient().newBuilder() + .connectTimeout(30, TimeUnit.SECONDS)//设置连接超时时间 + .readTimeout(30, TimeUnit.SECONDS)//设置读取超时时间 + .build(); + MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); + + MultipartBody.Builder builder = new MultipartBody.Builder(); + builder.setType(MultipartBody.FORM); + String fileType = "application/octet-stream"; + if (files != null && files.size() > 0) { + for (int i = 0; i < files.size(); i++) { + if (!StringUtils.isEmpty(files.get(i))) { + File file = new File(files.get(i)); + builder.addFormDataPart("files", files.get(i), + RequestBody.create(MediaType.parse(fileType), file)); + } + } + } + builder.addFormDataPart("content", content); + RequestBody body = builder.build(); + + Request req = new Request.Builder() + .url(host) + .method("POST", body) + .addHeader("Content-Type", "application/x-www-form-urlencoded") + .addHeader("format", "json") + .addHeader("apiKey", apiKey) + .addHeader("secretKey", apiSecret) + .addHeader("reqNo", reqNo) + .addHeader("timestamp", DateUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss")) + .addHeader("Access-Control-Allow-Headers", "Authorization, Origin, X-Requested-With, Content-Type, Accept") + .build(); + try { + Response response = client.newCall(req).execute(); + result = response.body().string(); + log.debug("result--->" + result); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } else { + log.debug("未配置中继服务地址"); + } + return result; + } + + /*下载文件*/ + private boolean batchDownloadFile(String syncIp, String[] files) { + boolean success = true; + for (String fileName : files) { + if (!StringUtils.isEmpty(fileName)) { + String[] str = fileName.split(","); + for (int i = 0; i < str.length; i++) { + if (!StringUtils.isEmpty(str[i])) { + //logger.info("downloadFile-->"+str[i]); + if (!signleDownloadFile(syncIp, str[i])) + success = false; + } + } + } + } + return success; + } + + private boolean signleDownloadFile(String syncIp, String fileName) { + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + ; + MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); + + RequestBody body = RequestBody.create(mediaType, "fileName=" + fileName); + + Request request = new Request.Builder() + .url(syncIp + "/spssync/common/downloadFile") + .post(body) + .addHeader("Content-Type", "application/x-www-form-urlencoded") + .build(); + try { + Response result = client.newCall(request).execute(); + + + if (MediaType.parse("application/force-download").equals(result.body().contentType())) { + try (InputStream inputStream = result.body().byteStream()) { + String filePathSlash = filePath.substring(filePath.length() - 1).equals("/") ? "" : "/"; + + FileOutputStream outputStream = new FileOutputStream(filePath + filePathSlash + fileName); + + byte b[] = new byte[1024]; + + int len = 0; + + while ((len = inputStream.read(b)) != -1) { + + outputStream.write(b, 0, len); + + } + + outputStream.flush(); + + + } catch (Exception e) { + + + } + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return true; + } + + /*获取转发服务地址,当前值允许单向,只使用参数upper_server_ip*/ + private String getNextHost() { + SystemParamConfigEntity systemParamConfigEntity = systemParamConfigService.selectByParamKey("upper_server_ip"); + String host = systemParamConfigEntity != null ? systemParamConfigEntity.getParamValue() : ""; + host = !StringUtils.isEmpty(host) && host.substring(host.length() - 1).equals("/") ? host.substring(0, host.length() - 1) : host; + return host; + } + + /*判断是否需要解析入库,中继服务只转发*/ + private boolean isLastLevel() { + 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) ? 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(); + map.putAll(params); + map.put("sql", sql); + List> list = dbDao.list(map); + return list; + } + + /*由表名获取数据*/ + private Map getData(String messageType, String tableName, Map params, Map whereParams) { + List> list = getList(tableName, whereParams); + Map map = new HashMap(); + map.put("messageId", CustomUtil.getId()); + map.put("messageType", messageType); + 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()); + map.put("data", list); + return map; + } + + + private SystemParamConfigEntity getSystemParamConfig(String paramKey, String paramName, String defaultValue, String paramExplain) { + SystemParamConfigEntity systemParamConfigEntity = systemParamConfigService.selectByParamKey(paramKey); + if (systemParamConfigEntity == null || (systemParamConfigEntity != null && StringUtils.isEmpty(systemParamConfigEntity.getParamKey()))) { + systemParamConfigEntity = new SystemParamConfigEntity(); + systemParamConfigEntity.setParamKey(paramKey); + systemParamConfigEntity.setParamName(paramName); + systemParamConfigEntity.setParentId(0); + systemParamConfigEntity.setParamValue(defaultValue); + systemParamConfigEntity.setParamExplain(paramExplain); + systemParamConfigEntity.setParamStatus(1); + systemParamConfigEntity.setParamType(0); + systemParamConfigService.insert(systemParamConfigEntity); + } + return systemParamConfigEntity; + } + + private void writeFile(byte[] file, String filePath, String fileName) throws Exception { + File targetFile = new File(filePath); + if (!targetFile.exists()) { + targetFile.mkdirs(); + } + FileOutputStream out = new FileOutputStream(filePath + fileName); + out.write(file); + out.flush(); + out.close(); + } + + + /*把列数据转Map*/ + private Map getColumn(String tableName) { + Map map = new HashMap(); + List> columnList = new ArrayList>(); + String columnKey = ""; + String[] tnames = tableName.split(","); + for (String tname : tnames) { + columnList = dbDao.listColumnsMysql(tname); + if (columnList != null && columnList.size() > 0) { + for (int i = 0; i < columnList.size(); i++) { + Map column = new HashMap(); + String dataType = columnList.get(i).get("dataType").toLowerCase().contains("char") || columnList.get(i).get("dataType").toLowerCase().contains("text") ? + "C" : columnList.get(i).get("dataType").toLowerCase().contains("date") ? "D" : "N"; + ; + String attrName = columnList.get(i).get("columnName").toString(); + if (map.get(attrName) == null) { + column.put("tableName", tname); + column.put("dataType", dataType); + column.put("columnName", columnList.get(i).get("columnName")); + if (columnList.get(i).get("columnKey") != null) { + column.put("columnKey", columnList.get(i).get("columnKey")); + } else { + column.put("columnKey", "N"); + } + if (map.get(attrName) != null) { + map.put(tname.toLowerCase() + "." + attrName, column); + } else { + map.put(attrName, column); + } + } + } + } + } + return map; + } + + + private String getUpdateTime(String id) { + String updateTime = ""; + Map map = dbDao.get("select * from idc_status where id='" + id + "'"); + if (map != null && map.get("id") != null) { + updateTime = DateUtil.formatDate(IDCUtils.parseDate(map.get("statusTime").toString()), "yyyy-MM-dd HH:mm:ss"); + } else { + //国家库数据 + if (id.equals("productinfo")) { + + } + updateTime = "2000-01-01 00:00:00"; + String sql = "insert into idc_status (id,statusTime) values ('" + id + "',cast('" + updateTime + "' as datetime))"; + dbDao.save(sql); + } + return updateTime; + } + + private String setUpdateTime(String id, String updateTime) { + String sql = ""; + Map map = dbDao.get("select * from idc_status where id='" + id + "'"); + if (map != null && map.get("id") != null) { + sql = "update idc_status set statusTime=cast('" + updateTime + "' as datetime) where id='" + id + "'"; + dbDao.update(sql); + } else { + sql = "insert into idc_status (id,statusTime) values ('" + id + "',cast('" + updateTime + "' as datetime))"; + dbDao.save(sql); + } + return updateTime; + } + + private void initTable() { + alterTable("idc_var", "create table idc_var (code varchar(60),content varchar(200),PRIMARY KEY (code))"); + alterTable("idc_status", "create table idc_status (id varchar(100),statusTime datetime,PRIMARY KEY (id))"); + alterTable("idc_record", "create table idc_record (id varchar(36),type varchar(60),fkId varchar(36),isEnd char(1),createTime datetime,primary key (id),INDEX i_idc_record_fk_id (fkId),INDEX i_idc_record_create_time (createTime))"); + alterTable("idc_log", "create table idc_log (id varchar(36),orderNum int,taskId varchar(60),type varchar(60),content varchar(2000),offset int,total int,createTime datetime,PRIMARY KEY (id))"); + dbDao.delete("delete from idc_record where createTime map = dbDao.getMysql(tableName); + if (!(map != null && map.get("tableName") != null)) { + jdbcTemplate.execute(sql); + } + + } + } diff --git a/src/main/java/com/glxp/api/res/system/SyncDataSetResponse.java b/src/main/java/com/glxp/api/res/system/SyncDataSetResponse.java index 54f35983..e7a67ac5 100644 --- a/src/main/java/com/glxp/api/res/system/SyncDataSetResponse.java +++ b/src/main/java/com/glxp/api/res/system/SyncDataSetResponse.java @@ -18,6 +18,10 @@ public class SyncDataSetResponse { private boolean basicThirdCorp; private boolean basicThirdInv; private boolean basicThirdBusOrder; + + private boolean basicType; + private boolean basicDept; + private boolean dbDiProducts; private boolean downstreamEnable; private boolean orderScanFinish; diff --git a/src/main/resources/mybatis/mapper/sync/SyncDataSetDao.xml b/src/main/resources/mybatis/mapper/sync/SyncDataSetDao.xml index 2a1b69b2..7b9c1643 100644 --- a/src/main/resources/mybatis/mapper/sync/SyncDataSetDao.xml +++ b/src/main/resources/mybatis/mapper/sync/SyncDataSetDao.xml @@ -18,7 +18,7 @@ , basicThirdBusOrder, orderScanFinish, dbDiProducts, downstreamEnable, syncTime, orderUnReceive, orderUnCheck, busTypes, sysUser, orderSyncTime, orderSyncStart, basicSyncStart, entrustAction - , unCheckCert, checkedCert, companyCert, manufacturerCert, productCert) + , unCheckCert, checkedCert, companyCert, manufacturerCert, productCert, basicType, basicDept) values (#{id}, #{typeBus}, #{typeScan}, @@ -43,6 +43,6 @@ #{basicSyncStart}, #{entrustAction}, #{unCheckCert}, - #{checkedCert}, #{companyCert}, #{manufacturerCert}, #{productCert}) + #{checkedCert}, #{companyCert}, #{manufacturerCert}, #{productCert}, #{basicType}, #{basicDept}) diff --git a/src/main/resources/schemas/schema_v2.1.sql b/src/main/resources/schemas/schema_v2.1.sql index 98f78ac4..f5b6bc33 100644 --- a/src/main/resources/schemas/schema_v2.1.sql +++ b/src/main/resources/schemas/schema_v2.1.sql @@ -139,4 +139,8 @@ CALL Pro_Temp_ColumnWork('inv_product', 'onWayCount', 'int ', 1); CALL Pro_Temp_ColumnWork('inv_product', 'availableStock', 'int ', 1); +CALL Pro_Temp_ColumnWork('sync_data_set', 'basicType', 'tinyint', 1); +CALL Pro_Temp_ColumnWork('sync_data_set', 'basicDept', 'tinyint', 1); + +