Commit e462c136 by caojingji

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

parent b02bd2ca
......@@ -134,10 +134,8 @@ public class BssjbdController {
//md5比对(整库)
@RequestMapping("/toBssjbdzk")
@ResponseBody
public String toBssjbdzk(@RequestParam("xxzjbhs") String fmqString) {
String updateflag = "";
updateflag = sjjhService.getFmqBssjbd();
return updateflag;
public void toBssjbdzk(@RequestParam("xxzjbhs") String fmqString) {
sjjhService.getFmqBssjbd();
}
public ArrayList QueryByStr(String sqlString){
......
......@@ -37,5 +37,5 @@ public interface SjjhService {
void insertSjsblog(Sjsblog sjsblog);
String getFmqBssjbd();
void getFmqBssjbd();
}
......@@ -8,6 +8,7 @@ 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.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
......@@ -134,15 +135,33 @@ public class SjjhServiceImpl implements SjjhService {
//心跳机制,每天晚上10点触发
@Override
@Scheduled(cron = "0 0 22 * * ?")
public String getFmqBssjbd() {
@Async("taskExecutor")
public void 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);
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 bjxxzjbh = "";
String bjmd5 = "";
......@@ -158,15 +177,19 @@ public class SjjhServiceImpl implements SjjhService {
tblmap.put(bjtablename, md5map);
}
}
String bdzt = "";
Boolean bool = false;
int succNum = 0;
List<Sjsblog> sjsbs = new ArrayList<Sjsblog>();
return tblmap;
}
public List getVwList(Map<String, Map<String, String>> tblmap){
List objects = new ArrayList();
List objects2 = new ArrayList();
Fmq fmq = null;
List vwList = null;
int succNum = 0;
int sjsbss = 0;
//遍历map中的键
for (String tblname : tblmap.keySet()) {
String vwsqlStr = "";
List vwList = new ArrayList();
vwList = new ArrayList();
//根据表名获取视图名
fmq = new Fmq();
String stname = "VW_" + tblname;
......@@ -175,65 +198,88 @@ public class SjjhServiceImpl implements SjjhService {
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 ++;
}
}
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 sjxxzjbh = "";
String sjmd5 = "";
Sjsblog sjsblog = null;
List objs = new ArrayList();
int succnum = 0;
int sjsbnum = 0;
for (int j = 0; j < vwList.size(); j++) {
List objects = new ArrayList();
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) {
objects = getObjects(FMQList,sjtablename,sjxxzjbh,sjmd5);
succnum += Integer.parseInt(objects.get(0).toString());
sjsbnum += Integer.parseInt(objects.get(1).toString());
} 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) {
//存在,更新
sjjhtjDao.updateSjsblog(sjsblog);
} 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);
}
//不存在,插入
sjjhtjDao.insertSjsblog(sjsblog);
}
}
}
if(succNum == sjsbs.size()){
updateflag = "success";
}else{
updateflag = "fail";
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 ++;
}
}
return updateflag;
Objects.add(succNum);
Objects.add(sjsbs.size());
return Objects;
}
public ArrayList QueryByStr(String sqlString){
ArrayList list = new ArrayList();
......
......@@ -139,4 +139,7 @@ body .gSys_msg_box .ptitle h4 {
height: 27px ;
line-height: 27px;
}
.pmsg .ct{text-align:left;}
\ No newline at end of file
.pmsg .ct{text-align:left;}
.gSys_msg_box .pbox .pmsg .ct{
color:#666;
}
\ No newline at end of file
......@@ -92,7 +92,7 @@
}
.gSys_msg_box .ptitle .fn-bg {
background-image: url("images/bg/bg.png");
background-image: url("../img/bg.png");
background-repeat: no-repeat;
}
......@@ -116,7 +116,7 @@
overflow: hidden;
display: inline-block;
vertical-align: middle;
background-image: url("images/bg/bg.png");
background-image: url("../img/bg.png");
background-repeat: no-repeat;
left: 25px;
position: absolute;
......@@ -149,7 +149,7 @@
}
.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-style:solid;
border-width:1px;
......@@ -206,7 +206,7 @@
.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;
}
......@@ -218,7 +218,7 @@
.gSys_msg_box .popt .opt .pbtn span {
margin-right: 3px;
padding: 4px 9px 5px 12px;
font-family:"";
font-family:"����";
}
.gSys_msg_box .popt .opt .pbtn{
......
......@@ -69,7 +69,7 @@
</td>
<td colspan="2" >
<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>
</tr>
</tbody>
......@@ -96,7 +96,7 @@
</div>
</div>
<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/datepicker/WdatePicker.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