diff --git a/api-admin/src/main/java/com/glxp/sale/admin/idc/service/impl/IdcServiceImpl.java b/api-admin/src/main/java/com/glxp/sale/admin/idc/service/impl/IdcServiceImpl.java index 5356846..1eb613a 100644 --- a/api-admin/src/main/java/com/glxp/sale/admin/idc/service/impl/IdcServiceImpl.java +++ b/api-admin/src/main/java/com/glxp/sale/admin/idc/service/impl/IdcServiceImpl.java @@ -233,11 +233,84 @@ public class IdcServiceImpl implements IdcService { if (sync) { String syncIp = map.get("syncIp") != null ? map.get("syncIp").toString() : ""; syncData(syncTables[i], isUpload, syncIp); + asyncDelete(syncTables[i], isUpload, syncIp); } } } } + /*数据删除同步*/ + private void asyncDelete(String tname,boolean isUpload,String syncIp) { + String[] tnames = tname.split("/"); + String lastUpdateTime = getUpdateTime(tnames[2] + "." + tnames[0]+"."+tnames[1]+".delete"); + Date nowUpdateTime = new Date(); + String where = "tableName='"+tnames[2].toLowerCase()+"' and updateTime between cast('"+lastUpdateTime+"' as datetime) "+ + " and cast('"+DateUtil.formatDate(nowUpdateTime, "yyyy-MM-dd HH:mm:ss")+"' as datetime)"; + Map count = new HashMap(); + count.put("sql", "select count(*) from idc_delete where "+where); + int total = dbDao.count(count); + int limit = 50; + if (total > 0) { + boolean success = true; + for (int i = 0; i < Math.ceil(total / limit) + 1; i++) { + Date startTime = new Date(); + Map map = new HashMap(); + map.put("sql", "select * from idc_delete"); + map.put("sqlWhere", where); + map.put("limit", limit); + map.put("page", i * limit); + List> list = dbDao.list(map); + if(list!=null&&map.size()>0) { + List> data = new ArrayList<>(); + for(int k=0;i0 ? ","+key : key; + } + obj.put("uniqueColumn", uniqueColumn); + obj.put("operateMode", "D"); + data.add(obj); + } + Map msg = new HashMap(); + msg.put("messageId", CustomUtil.getId()); + msg.put("messageType", tnames[9]+"(删除)"); + msg.put("apiCode", "common"); + msg.put("tableName", DBAUtils.tableAliasName(tnames[2])); + msg.put("sendTime", new Date()); + msg.put("version", "1.0"); + msg.put("total", data.size()); + msg.put("data", data); + if (isUpload) { + String result = ""; + try { + result = relay("", JSON.toJSONString(msg), null, syncIp); + } catch (Exception ex) { + + } + if (IDCUtils.isJson(result)) { + JSONObject json = JSON.parseObject(result); + if (json.getInteger("code") == 20000) { + saveIdcLog(tnames[9], "", tnames[2] + ">success(delete)", i * limit, total); + } else { + success = false; + + saveIdcLog(tnames[9], "", tnames[2] + ">" + result, i * limit, total); + } + } else { + success = false; + saveIdcLog(tnames[9], "", syncIp + ":" + tnames[2] + ">fail:上传地址未连通", i * limit, total); + } + + } else { + saveIdcLog(tnames[9], "", tnames[2] + ">success(delete)", i * limit, total); + } + syncAddTaskStatus(msg, isUpload ? 1 : 0, success, startTime, isUpload); + } + } + } + } /*单独表调用,tableName可只传表名,如传完整参数按SYNCS_TABLES格式*/ @Override @@ -820,6 +893,7 @@ public class IdcServiceImpl implements IdcService { String[] keyColumn = new String[30]; String[] keyDataType = new String[30]; List> columnList = dbDao.listColumnsMysql(tName); + Map column = getColumn(tName); boolean result = false; int key = 0; int col = 0; @@ -857,15 +931,24 @@ public class IdcServiceImpl implements IdcService { } 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())) { + if(operateMode.equals("D")&&list.get(i).get("uniqueColumn")!=null) { + String[] ucs = list.get(i).get("uniqueColumn").toString().split(","); + for(String str:ucs) { + Map map = (Map) column.get(str); + String dataType = map.get("dataType").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") ? "'" : ""); + updateWhere += str +" = "+(dataType.equals("C") ? "'" : "") + list.get(i).get(str) + (dataType.equals("C") ? "'" : ""); + } + } else { + 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); }