提交 2d841984 作者: guofeng

vbuk更新

上级 3cc1f54f
...@@ -26,6 +26,7 @@ import com.huazheng.project.hana.model.Pa0002; ...@@ -26,6 +26,7 @@ import com.huazheng.project.hana.model.Pa0002;
import com.huazheng.project.hana.model.Vbak; import com.huazheng.project.hana.model.Vbak;
import com.huazheng.project.hana.model.Vbrk; import com.huazheng.project.hana.model.Vbrk;
import com.huazheng.project.hana.model.Vbrp; import com.huazheng.project.hana.model.Vbrp;
import com.huazheng.project.hana.model.Vbuk;
import com.huazheng.project.hana.model.Zsd06; import com.huazheng.project.hana.model.Zsd06;
import com.huazheng.project.hana.model.Zsdfhzl; import com.huazheng.project.hana.model.Zsdfhzl;
...@@ -595,5 +596,34 @@ public class CheckDeleteServiceImpl { ...@@ -595,5 +596,34 @@ public class CheckDeleteServiceImpl {
redis1Template.opsForValue().set("huazheng:checkDeleteError:Makt:rowNum", SomeUtils.getErrorInfoFromException(e)); redis1Template.opsForValue().set("huazheng:checkDeleteError:Makt:rowNum", SomeUtils.getErrorInfoFromException(e));
} }
} }
public void selectVbukCheckByDelete() {
try {
ValueOperations<String, String> opsForValue = redis1Template.opsForValue();
opsForValue.setIfAbsent("huazheng:checkDelete:Vbuk:rowNum", "0");
String rowNum = opsForValue.get("huazheng:checkDelete:Vbuk:rowNum");
Vbuk build = Vbuk.builder().rowNum(rowNum).build();
List<Vbuk> list = gpMapper.selectVbukCheck(build); // 从数仓中查询一组数据
if (list.size() == 0) {
redis1Template.opsForValue().set("huazheng:checkDelete:Vbuk:rowNum", "0"); // 计数器复位
ThreadUtil.sleep(1000); // 没有数据了,休眠一下
}
list.forEach(target -> { // 遍历要检查的数据
Vbuk source = sapMapper.selectVbukById(target); // 根据主键查询源库中的数据
String operator = "none";
if (source == null) { // 如果源库中没有数据
gpMapper.deleteVbuk(target); // 删除数仓中的数据
operator = "delete";
}
redis1Template.opsForValue().set("huazheng:checkDelete:Vbuk:rowNum", target.getRowNum());
if (!operator.equals("none")) {
log.info(String.format("selectVbukcheckDelete --> rowNum:%s, operator:%s", target.getRowNum(), operator));
}
});
} catch (Exception e) {
redis1Template.opsForValue().set("huazheng:checkDeleteError:Vbuk:rowNum", SomeUtils.getErrorInfoFromException(e));
}
}
} }
...@@ -27,6 +27,7 @@ import com.huazheng.project.hana.model.Pa0002; ...@@ -27,6 +27,7 @@ import com.huazheng.project.hana.model.Pa0002;
import com.huazheng.project.hana.model.Vbak; import com.huazheng.project.hana.model.Vbak;
import com.huazheng.project.hana.model.Vbrk; import com.huazheng.project.hana.model.Vbrk;
import com.huazheng.project.hana.model.Vbrp; import com.huazheng.project.hana.model.Vbrp;
import com.huazheng.project.hana.model.Vbuk;
import com.huazheng.project.hana.model.Zsd06; import com.huazheng.project.hana.model.Zsd06;
import com.huazheng.project.hana.model.Zsdfhzl; import com.huazheng.project.hana.model.Zsdfhzl;
...@@ -350,6 +351,14 @@ public class CheckUpdateServiceImpl { ...@@ -350,6 +351,14 @@ public class CheckUpdateServiceImpl {
ThreadUtil.safeSleep(500); ThreadUtil.safeSleep(500);
} }
} }
// 级联更新业务
List<Vbuk> sVbukList = sapMapper.cascadeVbukByLips(source); // 级联查询源库afko表
for (Vbuk sVbuk : sVbukList) {
Vbuk tVbuk = gpMapper.selectVbuk(sVbuk); // 查询目标库中afko表
cascadeVbukCheckByUpdate(sVbuk, tVbuk); // 级联更新afko表
}
ThreadUtil.safeSleep(500); ThreadUtil.safeSleep(500);
} }
} }
...@@ -721,6 +730,30 @@ public class CheckUpdateServiceImpl { ...@@ -721,6 +730,30 @@ public class CheckUpdateServiceImpl {
} }
} }
// 所属selectLipsCheckUpdate的级联
private void cascadeVbukCheckByUpdate(Vbuk source, Vbuk target) {
if (target != null) { // 目标库有数据
String shash = SecureUtil.md5(JSONUtil.toJsonStr(source)); // 源库中数据的hash结果
String thash = target.getHashResult(); // 数仓中数据的hash结果
if (!shash.equals(thash)) { // 如果hash结果不一致
source.setHashResult(shash);
// ===============================
// ===============================
while (true) {
try {
gpMapper.updateVbuk(source); // 更新数据到数仓中
break;
} catch (RuntimeException e) {
log.error(e.getMessage());
ThreadUtil.safeSleep(500);
}
}
ThreadUtil.safeSleep(500);
}
}
}
// 所属selectMaraCheckUpdate的级联 // 所属selectMaraCheckUpdate的级联
private void cascadeMaktCheckByUpdate(Makt source, Makt target) { private void cascadeMaktCheckByUpdate(Makt source, Makt target) {
if (target != null) { // 目标库有数据 if (target != null) { // 目标库有数据
...@@ -754,9 +787,6 @@ public class CheckUpdateServiceImpl { ...@@ -754,9 +787,6 @@ public class CheckUpdateServiceImpl {
} }
} }
} }
// 所属selectMaraCheckUpdate的级联 // 所属selectMaraCheckUpdate的级联
private void cascadeAuspCheckByUpdate(Ausp source, Ausp target) { private void cascadeAuspCheckByUpdate(Ausp source, Ausp target) {
if (target != null) { // 目标库有数据 if (target != null) { // 目标库有数据
......
...@@ -39,7 +39,6 @@ import com.huazheng.project.hana.model.Vbap; ...@@ -39,7 +39,6 @@ import com.huazheng.project.hana.model.Vbap;
import com.huazheng.project.hana.model.VbapAdv; import com.huazheng.project.hana.model.VbapAdv;
import com.huazheng.project.hana.model.Vbep; import com.huazheng.project.hana.model.Vbep;
import com.huazheng.project.hana.model.Vbpa; import com.huazheng.project.hana.model.Vbpa;
import com.huazheng.project.hana.model.Vbuk;
import com.huazheng.project.hana.model.Zmdpc; import com.huazheng.project.hana.model.Zmdpc;
import com.huazheng.project.hana.model.Zpoedit; import com.huazheng.project.hana.model.Zpoedit;
import com.huazheng.project.hana.model.Zsd06; import com.huazheng.project.hana.model.Zsd06;
...@@ -912,7 +911,6 @@ public class DeleteUpdateJobServiceImpl { ...@@ -912,7 +911,6 @@ public class DeleteUpdateJobServiceImpl {
selectT023tCheck(); // 31 selectT023tCheck(); // 31
selectVbepCheck(); // 33 selectVbepCheck(); // 33
selectVbpaCheck(); // 34 selectVbpaCheck(); // 34
selectVbukCheck(); // 37
selectZmdpcCheck(); // 38 selectZmdpcCheck(); // 38
selectTvkbtCheck(); // selectTvkbtCheck(); //
selectAfvcCheck(); selectAfvcCheck();
...@@ -1525,50 +1523,6 @@ public class DeleteUpdateJobServiceImpl { ...@@ -1525,50 +1523,6 @@ public class DeleteUpdateJobServiceImpl {
redis1Template.opsForValue().set("huazheng:checkError:Vbpa:rowNum", getErrorInfoFromException(e)); redis1Template.opsForValue().set("huazheng:checkError:Vbpa:rowNum", getErrorInfoFromException(e));
} }
} }
private void selectVbukCheck() {
try {
ValueOperations<String, String> opsForValue = redis1Template.opsForValue();
opsForValue.setIfAbsent("huazheng:check:Vbuk:rowNum", "0");
String rowNum = opsForValue.get("huazheng:check:Vbuk:rowNum");
Vbuk build = Vbuk.builder().rowNum(rowNum).build();
List<Vbuk> list = gpMapper.selectVbukCheck(build); // 从数仓中查询一组数据
if (list.size() == 0) {
redis1Template.opsForValue().set("huazheng:check:Vbuk:rowNum", "0"); // 计数器复位
ThreadUtil.sleep(1000); // 没有数据了,休眠一下
}
list.forEach(target -> { // 遍历要检查的数据
Vbuk source = sapMapper.selectVbukById(target); // 根据主键查询源库中的数据
String operator = "none";
if (source == null) { // 如果源库中没有数据
gpMapper.deleteVbuk(target); // 删除数仓中的数据
operator = "delete";
} else { // 源库中有数据
String shash = SecureUtil.md5(JSONUtil.toJsonStr(source)); // 源库中数据的hash结果
String thash = target.getHashResult(); // 数仓中数据的hash结果
if (!shash.equals(thash)) { // 如果hash结果不一致
source.setHashResult(shash);
// ===============================
// ===============================
while (true) {
try {
gpMapper.updateVbuk(source); // 更新数据到数仓中
break;
} catch (RuntimeException e) {
log.error(e.getMessage());ThreadUtil.safeSleep(500);
}
}
ThreadUtil.safeSleep(500);
}
}
redis1Template.opsForValue().set("huazheng:check:Vbuk:rowNum", target.getRowNum());
if (!operator.equals("none")) {
log.info(String.format("selectVbukCheck --> rowNum:%s, operator:%s", target.getRowNum(), operator));
}
});
} catch (Exception e) {
redis1Template.opsForValue().set("huazheng:checkError:Vbuk:rowNum", getErrorInfoFromException(e));
}
}
private void selectZmdpcCheck() { private void selectZmdpcCheck() {
try { try {
ValueOperations<String, String> opsForValue = redis1Template.opsForValue(); ValueOperations<String, String> opsForValue = redis1Template.opsForValue();
......
...@@ -109,7 +109,7 @@ public interface SapMapper { ...@@ -109,7 +109,7 @@ public interface SapMapper {
public List<Ausp> cascadeAuspByMara(Mara mara); public List<Ausp> cascadeAuspByMara(Mara mara);
public List<Konv> cascadeKonvByVbak(Vbak vbak); public List<Konv> cascadeKonvByVbak(Vbak vbak);
public List<Makt> cascadeMaktByMara(Mara mara); public List<Makt> cascadeMaktByMara(Mara mara);
public List<Vbuk> cascadeVbukByLips(Lips lips);
// ...... // ......
public Bkpf selectBkpfById(Bkpf target); public Bkpf selectBkpfById(Bkpf target);
......
...@@ -471,7 +471,12 @@ ...@@ -471,7 +471,12 @@
from ${hana_user}.Makt from ${hana_user}.Makt
where matnr = #{matnr} ${hana_mandt} where matnr = #{matnr} ${hana_mandt}
</select> </select>
<select id="cascadeVbukByLips" parameterType="Lips" resultType="Vbuk">
select
vbeln, wbstk, kostk, mandt
from ${hana_user}.vbuk
where vbeln = #{vbeln} ${hana_mandt}
</select>
......
...@@ -969,7 +969,15 @@ ...@@ -969,7 +969,15 @@
</property> </property>
<property name="cronExpression" value="* * * * * ?" /> <property name="cronExpression" value="* * * * * ?" />
</bean> </bean>
<bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<bean parent="methodJobDetail">
<property name="targetObject" ref="checkDeleteServiceImpl" />
<property name="targetMethod" value="selectVbukCheckByDelete" />
</bean>
</property>
<property name="cronExpression" value="* * * * * ?" />
</bean>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论