Commit e462c136 by caojingji

20190321---wangling---整库比对方式改为定时多线程比对

parent b02bd2ca
...@@ -134,10 +134,8 @@ public class BssjbdController { ...@@ -134,10 +134,8 @@ public class BssjbdController {
//md5比对(整库) //md5比对(整库)
@RequestMapping("/toBssjbdzk") @RequestMapping("/toBssjbdzk")
@ResponseBody @ResponseBody
public String toBssjbdzk(@RequestParam("xxzjbhs") String fmqString) { public void toBssjbdzk(@RequestParam("xxzjbhs") String fmqString) {
String updateflag = ""; sjjhService.getFmqBssjbd();
updateflag = sjjhService.getFmqBssjbd();
return updateflag;
} }
public ArrayList QueryByStr(String sqlString){ public ArrayList QueryByStr(String sqlString){
......
...@@ -37,5 +37,5 @@ public interface SjjhService { ...@@ -37,5 +37,5 @@ public interface SjjhService {
void insertSjsblog(Sjsblog sjsblog); void insertSjsblog(Sjsblog sjsblog);
String getFmqBssjbd(); void getFmqBssjbd();
} }
...@@ -8,6 +8,7 @@ import com.cc.mapper.xzxt.SjjhyzDao; ...@@ -8,6 +8,7 @@ import com.cc.mapper.xzxt.SjjhyzDao;
import com.cc.service.SjjhService; import com.cc.service.SjjhService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -134,15 +135,33 @@ public class SjjhServiceImpl implements SjjhService { ...@@ -134,15 +135,33 @@ public class SjjhServiceImpl implements SjjhService {
//心跳机制,每天晚上10点触发 //心跳机制,每天晚上10点触发
@Override @Override
@Scheduled(cron = "0 0 22 * * ?") @Scheduled(cron = "0 0 22 * * ?")
public String getFmqBssjbd() { @Async("taskExecutor")
public void getFmqBssjbd() {
System.out.print("心跳开始------------------------------------"); 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中 //整库比对,获取fmq表中的所有数据,存在tblmap中
String fmqsqlStr = "SELECT * FROM FMQ"; String fmqsqlStr = "SELECT * FROM FMQ";
List fmqList = QueryByStr(fmqsqlStr); List fmqList = QueryByStr(fmqsqlStr);
int num = 0;
Map<String, Map<String, String>> tblmap = getTblmap(fmqList);
//String updateflag = "fail";
for (String tblname : tblmap.keySet()) {
Map<String, String> md5map = tblmap.get(tblname);
num += md5map.size();
}
List objects = null;
if(num == fmqList.size()){
objects = getVwList(tblmap);
if(objects.get(0) == objects.get(1)){
System.out.print("比对完成!------------------------------------");
}else{
System.out.print("比对失败!------------------------------------");
}
}
}
public Map<String, Map<String, String>> getTblmap(List fmqList){
//tblmap<表名,<主键值,md5值>>
Map<String, Map<String, String>> tblmap = new HashMap<String, Map<String, String>>();
Map<String, String> md5map = new HashMap<String, String>();
String bjtablename = ""; String bjtablename = "";
String bjxxzjbh = ""; String bjxxzjbh = "";
String bjmd5 = ""; String bjmd5 = "";
...@@ -158,15 +177,19 @@ public class SjjhServiceImpl implements SjjhService { ...@@ -158,15 +177,19 @@ public class SjjhServiceImpl implements SjjhService {
tblmap.put(bjtablename, md5map); tblmap.put(bjtablename, md5map);
} }
} }
String bdzt = ""; return tblmap;
Boolean bool = false; }
int succNum = 0; public List getVwList(Map<String, Map<String, String>> tblmap){
List<Sjsblog> sjsbs = new ArrayList<Sjsblog>(); List objects = new ArrayList();
List objects2 = new ArrayList();
Fmq fmq = null; Fmq fmq = null;
List vwList = null;
int succNum = 0;
int sjsbss = 0;
//遍历map中的键 //遍历map中的键
for (String tblname : tblmap.keySet()) { for (String tblname : tblmap.keySet()) {
String vwsqlStr = ""; String vwsqlStr = "";
List vwList = new ArrayList(); vwList = new ArrayList();
//根据表名获取视图名 //根据表名获取视图名
fmq = new Fmq(); fmq = new Fmq();
String stname = "VW_" + tblname; String stname = "VW_" + tblname;
...@@ -175,11 +198,24 @@ public class SjjhServiceImpl implements SjjhService { ...@@ -175,11 +198,24 @@ public class SjjhServiceImpl implements SjjhService {
vwsqlStr = "SELECT * FROM " + fmq.getRn() + " WHERE TABLE_NAME = '" + fmq.getTableName() + "'"; vwsqlStr = "SELECT * FROM " + fmq.getRn() + " WHERE TABLE_NAME = '" + fmq.getTableName() + "'";
//整库比对 //整库比对
vwList = QueryByStr(vwsqlStr); vwList = QueryByStr(vwsqlStr);
objects = getFMQList(vwList);
succNum += Integer.parseInt(objects.get(0).toString());
sjsbss += Integer.parseInt(objects.get(1).toString());
}
objects2.add(succNum);
objects2.add(sjsbss);
return objects2;
}
public List<Integer> getFMQList(List vwList){
String sjtablename = ""; String sjtablename = "";
String sjxxzjbh = ""; String sjxxzjbh = "";
String sjmd5 = ""; String sjmd5 = "";
Sjsblog sjsblog = null; Sjsblog sjsblog = null;
List objs = new ArrayList();
int succnum = 0;
int sjsbnum = 0;
for (int j = 0; j < vwList.size(); j++) { for (int j = 0; j < vwList.size(); j++) {
List objects = new ArrayList();
sjtablename = ((Map<String, String>)vwList.get(j)).get("table_name"); sjtablename = ((Map<String, String>)vwList.get(j)).get("table_name");
sjxxzjbh = ((Map<String, String>)vwList.get(j)).get("xxzjbh"); sjxxzjbh = ((Map<String, String>)vwList.get(j)).get("xxzjbh");
sjmd5 = ((Map<String, String>)vwList.get(j)).get("md5"); sjmd5 = ((Map<String, String>)vwList.get(j)).get("md5");
...@@ -188,26 +224,9 @@ public class SjjhServiceImpl implements SjjhService { ...@@ -188,26 +224,9 @@ public class SjjhServiceImpl implements SjjhService {
List FMQList = QueryByStr(FMQsqlStr); List FMQList = QueryByStr(FMQsqlStr);
sjsblog = new Sjsblog(); sjsblog = new Sjsblog();
if (FMQList != null && FMQList.size() > 0) { if (FMQList != null && FMQList.size() > 0) {
for (int m = 0; m < FMQList.size(); m++) { objects = getObjects(FMQList,sjtablename,sjxxzjbh,sjmd5);
String fmqmd5 = ((Map<String, String>)FMQList.get(m)).get("md5"); succnum += Integer.parseInt(objects.get(0).toString());
if (!"".equals(fmqmd5)) { sjsbnum += Integer.parseInt(objects.get(1).toString());
//已经上报过
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 { } else {
//未上报过(将没有的数据插入到sys_log_sjsb表中,fwzt=2(未上报),bdzt=1) //未上报过(将没有的数据插入到sys_log_sjsb表中,fwzt=2(未上报),bdzt=1)
//插入之前先查询sys_log_sjsb表中是否存在这条数据 //插入之前先查询sys_log_sjsb表中是否存在这条数据
...@@ -220,20 +239,47 @@ public class SjjhServiceImpl implements SjjhService { ...@@ -220,20 +239,47 @@ public class SjjhServiceImpl implements SjjhService {
sjsblog.setScbz("0"); sjsblog.setScbz("0");
if (sjsbxxlog != null) { if (sjsbxxlog != null) {
//存在,更新 //存在,更新
bool = sjjhtjDao.updateSjsblog(sjsblog); sjjhtjDao.updateSjsblog(sjsblog);
} else { } else {
//不存在,插入 //不存在,插入
sjjhtjDao.insertSjsblog(sjsblog); sjjhtjDao.insertSjsblog(sjsblog);
} }
} }
} }
objs.add(succnum);
objs.add(sjsbnum);
return objs;
}
public List getObjects(List FMQList, String sjtablename, String sjxxzjbh, String sjmd5){
String bdzt = "";
Sjsblog sjsblog = null;
List Objects = new ArrayList();
Boolean bool = false;
int succNum = 0;
List<Sjsblog> sjsbs = new ArrayList<Sjsblog>();
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 ++;
} }
if(succNum == sjsbs.size()){
updateflag = "success";
}else{
updateflag = "fail";
} }
return updateflag; Objects.add(succNum);
Objects.add(sjsbs.size());
return Objects;
} }
public ArrayList QueryByStr(String sqlString){ public ArrayList QueryByStr(String sqlString){
ArrayList list = new ArrayList(); ArrayList list = new ArrayList();
......
...@@ -140,3 +140,6 @@ body .gSys_msg_box .ptitle h4 { ...@@ -140,3 +140,6 @@ body .gSys_msg_box .ptitle h4 {
line-height: 27px; line-height: 27px;
} }
.pmsg .ct{text-align:left;} .pmsg .ct{text-align:left;}
.gSys_msg_box .pbox .pmsg .ct{
color:#666;
}
\ No newline at end of file
...@@ -92,7 +92,7 @@ ...@@ -92,7 +92,7 @@
} }
.gSys_msg_box .ptitle .fn-bg { .gSys_msg_box .ptitle .fn-bg {
background-image: url("images/bg/bg.png"); background-image: url("../img/bg.png");
background-repeat: no-repeat; background-repeat: no-repeat;
} }
...@@ -116,7 +116,7 @@ ...@@ -116,7 +116,7 @@
overflow: hidden; overflow: hidden;
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
background-image: url("images/bg/bg.png"); background-image: url("../img/bg.png");
background-repeat: no-repeat; background-repeat: no-repeat;
left: 25px; left: 25px;
position: absolute; position: absolute;
...@@ -149,7 +149,7 @@ ...@@ -149,7 +149,7 @@
} }
.gSys_msg_box .pbox .pmsg .pinput{ .gSys_msg_box .pbox .pmsg .pinput{
background:url("images/bg/bg.png") no-repeat scroll 0 -180px transparent; background:url("../img/bg.png") no-repeat scroll 0 -180px transparent;
border-color:#9A9A9A #CDCDCD #CDCDCD #9A9A9A; border-color:#9A9A9A #CDCDCD #CDCDCD #9A9A9A;
border-style:solid; border-style:solid;
border-width:1px; border-width:1px;
...@@ -206,7 +206,7 @@ ...@@ -206,7 +206,7 @@
.gSys_msg_box .popt .opt .pbtn,.gSys_msg_box .popt .opt .pbtn span{ .gSys_msg_box .popt .opt .pbtn,.gSys_msg_box .popt .opt .pbtn span{
background-image: url("images/bg/bg.png"); background-image: url("../img/bg.png");
background-repeat: no-repeat; background-repeat: no-repeat;
} }
...@@ -218,7 +218,7 @@ ...@@ -218,7 +218,7 @@
.gSys_msg_box .popt .opt .pbtn span { .gSys_msg_box .popt .opt .pbtn span {
margin-right: 3px; margin-right: 3px;
padding: 4px 9px 5px 12px; padding: 4px 9px 5px 12px;
font-family:""; font-family:"����";
} }
.gSys_msg_box .popt .opt .pbtn{ .gSys_msg_box .popt .opt .pbtn{
......
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
</td> </td>
<td colspan="2" > <td colspan="2" >
<a class='btn_a btn_search' onclick='toSjbd()'>比对</a> <a class='btn_a btn_search' onclick='toSjbd()'>比对</a>
<a class='btn_a btn_add' onclick='toZkSjbd()'>整库比对</a> <%--<a class='btn_a btn_add' onclick='toZkSjbd()'>整库比对</a>--%>
</td> </td>
</tr> </tr>
</tbody> </tbody>
...@@ -96,7 +96,7 @@ ...@@ -96,7 +96,7 @@
</div> </div>
</div> </div>
<script type="text/javascript" src="sjsblog/js/jquery.min.js"></script> <script type="text/javascript" src="sjsblog/js/jquery.min.js"></script>
<script type="text/javascript" src="sjsblog/js/jquery.dataTables.min.js"></script> <script type="text/javascript" src="sjsblog/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="sjsblog/css/layer/layer.js"></script> <script type="text/javascript" src="sjsblog/css/layer/layer.js"></script>
<script type="text/javascript" src="sjsblog/datepicker/WdatePicker.js"></script> <script type="text/javascript" src="sjsblog/datepicker/WdatePicker.js"></script>
<script type="text/javascript" src="sjsblog/datepicker/calendar.js"></script> <script type="text/javascript" src="sjsblog/datepicker/calendar.js"></script>
......
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