Commit 9a94e60f by caojingji

20190313---wangling---添加Fmq比对功能模块

parent 8ed28d20
......@@ -6,6 +6,7 @@ import com.cc.common.util.JdbcUtil;
import com.cc.service.SjjhService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
......@@ -49,7 +50,7 @@ public class BssjbdController {
fmqDataMap.put("draw",fmq.getRn());
return fmqDataMap;
}
//md5比对
//md5比对(单条或者多条)
@RequestMapping("/toBssjbd")
@ResponseBody
public String toBssjbd(@RequestParam("xxzjbhs") String fmqString) {
......@@ -78,26 +79,6 @@ public class BssjbdController {
md5map.put(fmqString.split("@")[1].trim(), fmqString.split("@")[2].trim());
tblmap.put(fmqString.split("@")[0].trim(), md5map);
}
} else {
//整库比对,获取fmq表中的所有数据,存在tblmap中
String fmqsqlStr = "SELECT * FROM FMQ";
List fmqList = QueryByStr(fmqsqlStr);
String bjtablename = "";
String bjxxzjbh = "";
String bjmd5 = "";
for( int i = 0 ; i < fmqList.size() ; i++) {
bjtablename = ((Map<String, String>)fmqList.get(i)).get("table_name");
bjxxzjbh = ((Map<String, String>)fmqList.get(i)).get("xxzjbh");
bjmd5 = ((Map<String, String>)fmqList.get(i)).get("md5");
if (tblmap.containsKey(bjtablename)) {
md5map.put(bjxxzjbh,bjmd5);
} else {
md5map = new HashMap<String, String>();
md5map.put(bjxxzjbh,bjmd5);
tblmap.put(bjtablename, md5map);
}
}
tblmap.put("zkbd", null);
}
String bjmd5 = "";
String bdzt = "";
......@@ -114,63 +95,7 @@ public class BssjbdController {
String stname = "VW_" + tblname;
fmq.setRn(stname);
fmq.setTableName(tblname);
vwsqlStr = "SELECT * FROM " + fmq.getRn() + " WHERE TABLE_NAME = '" + fmq.getTableName() + "'";
if (tblmap.containsKey("zkbd")) {
//整库比对
vwList = QueryByStr(vwsqlStr);
String sjtablename = "";
String sjxxzjbh = "";
String sjmd5 = "";
Sjsblog sjsblog = null;
for (int j = 0; j < vwList.size(); j++) {
sjtablename = ((Map<String, String>)vwList.get(j)).get("table_name");
sjxxzjbh = ((Map<String, String>)vwList.get(j)).get("xxzjbh");
sjmd5 = ((Map<String, String>)vwList.get(j)).get("md5");
//根据表名和主键值获取对应的部级的md5值
String FMQsqlStr = "SELECT * FROM FMQ WHERE TABLE_NAME = '" + sjtablename + "' AND XXZJBH = '" + sjxxzjbh +"'";
List FMQList = QueryByStr(FMQsqlStr);
sjsblog = new Sjsblog();
if (FMQList != null && FMQList.size() > 0) {
for (int m = 0; m < FMQList.size(); m++) {
String fmqmd5 = ((Map<String, String>)FMQList.get(m)).get("md5");
if (!"".equals(fmqmd5)) {
//已经上报过
if (sjmd5.equals(fmqmd5)) {
bdzt = "0";//相同
} else {
bdzt = "1";//不相同
}
//更新本条数据的bdzt和bdsj
sjsblog = new Sjsblog();
sjsblog.setTblname(sjtablename.substring(3, sjtablename.length()));
sjsblog.setKeyvalue(sjxxzjbh);
sjsblog.setBdzt(bdzt);
sjsbs.add(sjsblog);
//在sys_log_sjsb表中更新数据的比对时间和比对状态
bool = sjjhService.updateSjsblog(sjsblog);
if(bool) succNum ++;
}
}
} else {
//未上报过(将没有的数据插入到sys_log_sjsb表中,fwzt=2(未上报),bdzt=1)
//插入之前先查询sys_log_sjsb表中是否存在这条数据
sjsblog.setTblname(sjtablename);
sjsblog.setKeyvalue(sjxxzjbh);
Sjsblog sjsbxxlog = sjjhService.getSjsbxq(sjsblog);
sjsblog.setYwxxdm(sjtablename.substring(3, sjtablename.length()));
sjsblog.setFwzt("2");
sjsblog.setBdzt("1");
sjsblog.setScbz("0");
if (sjsbxxlog != null) {
//存在,更新
bool = sjjhService.updateSjsblog(sjsblog);
} else {
//不存在,插入
sjjhService.insertSjsblog(sjsblog);
}
}
}
} else {
//vwsqlStr = "SELECT * FROM " + fmq.getRn() + " WHERE TABLE_NAME = '" + fmq.getTableName() + "'";
//非整库比对
Map<String, String> zjmd5 = tblmap.get(tblname);
Sjsblog sjsblog = null;
......@@ -199,7 +124,6 @@ public class BssjbdController {
}
}
}
}
if(succNum == sjsbs.size()){
updateflag = "success";
}else{
......@@ -208,6 +132,15 @@ public class BssjbdController {
return updateflag;
}
//md5比对(整库)
@RequestMapping("/toBssjbdzk")
@ResponseBody
public String toBssjbdzk(@RequestParam("xxzjbhs") String fmqString) {
String updateflag = "";
updateflag = sjjhService.getFmqBssjbd();
return updateflag;
}
public ArrayList QueryByStr(String sqlString){
ArrayList list = new ArrayList();
Connection conn = null;
......
......@@ -37,4 +37,5 @@ public interface SjjhService {
void insertSjsblog(Sjsblog sjsblog);
String getFmqBssjbd();
}
package com.cc.service.serviceimpl;
import com.cc.bean.*;
import com.cc.common.util.JdbcUtil;
import com.cc.mapper.fmq.BssjbdDao;
import com.cc.mapper.xzxt.SjjhtjDao;
import com.cc.mapper.xzxt.SjjhyzDao;
import com.cc.service.SjjhService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@Component
public class SjjhServiceImpl implements SjjhService {
@Autowired
......@@ -22,6 +31,15 @@ public class SjjhServiceImpl implements SjjhService {
@Autowired
BssjbdDao bssjbdDao;
@Autowired
JdbcUtil jdbcUtil;
@Value("${fmqjdbc.url}")
private String url;
@Value("${fmqjdbc.username}")
private String username;
@Value("${fmqjdbc.password}")
private String password;
@Override
public List<Sjsblog> getSbsjList(Sjsblog sjsblog) {
......@@ -113,4 +131,176 @@ public class SjjhServiceImpl implements SjjhService {
sjjhtjDao.insertSjsblog(sjsblog);
}
//心跳机制,每天晚上10点触发
@Override
@Scheduled(cron = "0 0 22 * * ?")
public String getFmqBssjbd() {
System.out.print("心跳开始------------------------------------");
//tblmap<表名,<主键值,md5值>>
Map<String, Map<String, String>> tblmap = new HashMap<String, Map<String, String>>();
Map<String, String> md5map = new HashMap<String, String>();
String updateflag = "";
//整库比对,获取fmq表中的所有数据,存在tblmap中
String fmqsqlStr = "SELECT * FROM FMQ";
List fmqList = QueryByStr(fmqsqlStr);
String bjtablename = "";
String bjxxzjbh = "";
String bjmd5 = "";
for( int i = 0 ; i < fmqList.size() ; i++) {
bjtablename = ((Map<String, String>)fmqList.get(i)).get("table_name");
bjxxzjbh = ((Map<String, String>)fmqList.get(i)).get("xxzjbh");
bjmd5 = ((Map<String, String>)fmqList.get(i)).get("md5");
if (tblmap.containsKey(bjtablename)) {
md5map.put(bjxxzjbh,bjmd5);
} else {
md5map = new HashMap<String, String>();
md5map.put(bjxxzjbh,bjmd5);
tblmap.put(bjtablename, md5map);
}
}
String bdzt = "";
Boolean bool = false;
int succNum = 0;
List<Sjsblog> sjsbs = new ArrayList<Sjsblog>();
Fmq fmq = null;
//遍历map中的键
for (String tblname : tblmap.keySet()) {
String vwsqlStr = "";
List vwList = new ArrayList();
//根据表名获取视图名
fmq = new Fmq();
String stname = "VW_" + tblname;
fmq.setRn(stname);
fmq.setTableName(tblname);
vwsqlStr = "SELECT * FROM " + fmq.getRn() + " WHERE TABLE_NAME = '" + fmq.getTableName() + "'";
//整库比对
vwList = QueryByStr(vwsqlStr);
String sjtablename = "";
String sjxxzjbh = "";
String sjmd5 = "";
Sjsblog sjsblog = null;
for (int j = 0; j < vwList.size(); j++) {
sjtablename = ((Map<String, String>)vwList.get(j)).get("table_name");
sjxxzjbh = ((Map<String, String>)vwList.get(j)).get("xxzjbh");
sjmd5 = ((Map<String, String>)vwList.get(j)).get("md5");
//根据表名和主键值获取对应的部级的md5值
String FMQsqlStr = "SELECT * FROM FMQ WHERE TABLE_NAME = '" + sjtablename + "' AND XXZJBH = '" + sjxxzjbh +"'";
List FMQList = QueryByStr(FMQsqlStr);
sjsblog = new Sjsblog();
if (FMQList != null && FMQList.size() > 0) {
for (int m = 0; m < FMQList.size(); m++) {
String fmqmd5 = ((Map<String, String>)FMQList.get(m)).get("md5");
if (!"".equals(fmqmd5)) {
//已经上报过
if (sjmd5.equals(fmqmd5)) {
bdzt = "0";//相同
} else {
bdzt = "1";//不相同
}
//更新本条数据的bdzt和bdsj
sjsblog = new Sjsblog();
sjsblog.setTblname(sjtablename);
sjsblog.setKeyvalue(sjxxzjbh);
sjsblog.setBdzt(bdzt);
sjsbs.add(sjsblog);
//在sys_log_sjsb表中更新数据的比对时间和比对状态
bool = sjjhtjDao.updateSjsblog(sjsblog);
if(bool) succNum ++;
}
}
} else {
//未上报过(将没有的数据插入到sys_log_sjsb表中,fwzt=2(未上报),bdzt=1)
//插入之前先查询sys_log_sjsb表中是否存在这条数据
sjsblog.setTblname(sjtablename);
sjsblog.setKeyvalue(sjxxzjbh);
Sjsblog sjsbxxlog = sjjhtjDao.querySjsbxq(sjsblog);
sjsblog.setYwxxdm(sjtablename.substring(3, sjtablename.length()));
sjsblog.setFwzt("2");
sjsblog.setBdzt("1");
sjsblog.setScbz("0");
if (sjsbxxlog != null) {
//存在,更新
bool = sjjhtjDao.updateSjsblog(sjsblog);
} else {
//不存在,插入
sjjhtjDao.insertSjsblog(sjsblog);
}
}
}
}
if(succNum == sjsbs.size()){
updateflag = "success";
}else{
updateflag = "fail";
}
return updateflag;
}
public ArrayList QueryByStr(String sqlString){
ArrayList list = new ArrayList();
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
ResultSetMetaData rsmd = null;
try {
//获取数据库链接
conn = jdbcUtil.getFmqConnetion(url, username, password);
stat = conn.createStatement();
rs = stat.executeQuery(sqlString);
rsmd = rs.getMetaData();
while (rs.next()) {
Map<String,Object> ht = new HashMap<String,Object>();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
Object obj = rs.getObject(i);
if (obj != null) {
ht.put(rsmd.getColumnName(i).toLowerCase(), obj);
}else{
ht.put(rsmd.getColumnName(i).toLowerCase(), null);
}
}
list.add(ht);
}
} catch (Exception e) {
System.out.println("查询数据失败!");
}finally{
freeAll(conn,stat,null,rs);
}
return list;
}
public static void freeAll(Connection conn, Statement stat, PreparedStatement paste, ResultSet rs){
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
// TODO: handle exception
System.out.println("关闭结果集失败!");
}
}
if (stat != null) {
try {
stat.close();
} catch (SQLException e) {
// TODO: handle exception
System.out.println("关闭Statement失败!");
}
}
if (paste != null) {
try {
paste.close();
} catch (SQLException e) {
// TODO: handle exception
System.out.println("关闭ResultSetMetaData失败!");
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO: handle exception
System.out.println("关闭连接失败!");
}
}
}
}
......@@ -226,7 +226,7 @@
var xxzjbhs = check_val.toString();
if(check_val==""){
$.ajax({
url:"toBssjbd",
url:"toBssjbdzk",
type:"POST",
data:{"xxzjbhs":xxzjbhs},
success:function(data){
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment