提交 3cc1f54f 作者: guofeng

makt更新

上级 f40fcb48
...@@ -17,8 +17,10 @@ import com.huazheng.project.hana.model.Ausp; ...@@ -17,8 +17,10 @@ import com.huazheng.project.hana.model.Ausp;
import com.huazheng.project.hana.model.Bkpf; import com.huazheng.project.hana.model.Bkpf;
import com.huazheng.project.hana.model.Kna1; import com.huazheng.project.hana.model.Kna1;
import com.huazheng.project.hana.model.Knvv; import com.huazheng.project.hana.model.Knvv;
import com.huazheng.project.hana.model.Konv;
import com.huazheng.project.hana.model.Likp; import com.huazheng.project.hana.model.Likp;
import com.huazheng.project.hana.model.Lips; import com.huazheng.project.hana.model.Lips;
import com.huazheng.project.hana.model.Makt;
import com.huazheng.project.hana.model.Mara; import com.huazheng.project.hana.model.Mara;
import com.huazheng.project.hana.model.Pa0002; import com.huazheng.project.hana.model.Pa0002;
import com.huazheng.project.hana.model.Vbak; import com.huazheng.project.hana.model.Vbak;
...@@ -504,7 +506,6 @@ public class CheckDeleteServiceImpl { ...@@ -504,7 +506,6 @@ public class CheckDeleteServiceImpl {
redis1Template.opsForValue().set("huazheng:checkDeleteError:Knvv:rowNum", SomeUtils.getErrorInfoFromException(e)); redis1Template.opsForValue().set("huazheng:checkDeleteError:Knvv:rowNum", SomeUtils.getErrorInfoFromException(e));
} }
} }
public void selectVbrpCheckByDelete() { public void selectVbrpCheckByDelete() {
try { try {
ValueOperations<String, String> opsForValue = redis1Template.opsForValue(); ValueOperations<String, String> opsForValue = redis1Template.opsForValue();
...@@ -535,5 +536,64 @@ public class CheckDeleteServiceImpl { ...@@ -535,5 +536,64 @@ public class CheckDeleteServiceImpl {
redis1Template.opsForValue().set("huazheng:checkDeleteError:Vbrp:rowNum", SomeUtils.getErrorInfoFromException(e)); redis1Template.opsForValue().set("huazheng:checkDeleteError:Vbrp:rowNum", SomeUtils.getErrorInfoFromException(e));
} }
} }
public void selectKonvCheckByDelete() {
try {
ValueOperations<String, String> opsForValue = redis1Template.opsForValue();
opsForValue.setIfAbsent("huazheng:checkDelete:Konv:rowNum", "0");
String rowNum = opsForValue.get("huazheng:checkDelete:Konv:rowNum");
Konv build = Konv.builder().rowNum(rowNum).build();
List<Konv> list = gpMapper.selectKonvCheck(build); // 从数仓中查询一组数据
if (list.size() == 0) {
redis1Template.opsForValue().set("huazheng:checkDelete:Konv:rowNum", "0"); // 计数器复位
ThreadUtil.sleep(1000); // 没有数据了,休眠一下
}
list.forEach(target -> { // 遍历要检查的数据
Konv source = sapMapper.selectKonvById(target); // 根据主键查询源库中的数据
String operator = "none";
if (source == null) { // 如果源库中没有数据
gpMapper.deleteKonv(target); // 删除数仓中的数据
operator = "delete";
}
redis1Template.opsForValue().set("huazheng:checkDelete:Konv:rowNum", target.getRowNum());
if (!operator.equals("none")) {
log.info(String.format("selectKonvcheckDelete --> rowNum:%s, operator:%s", target.getRowNum(), operator));
}
});
} catch (Exception e) {
redis1Template.opsForValue().set("huazheng:checkDeleteError:Konv:rowNum", SomeUtils.getErrorInfoFromException(e));
}
}
public void selectMaktCheckByDelete() {
try {
ValueOperations<String, String> opsForValue = redis1Template.opsForValue();
opsForValue.setIfAbsent("huazheng:checkDelete:Makt:rowNum", "0");
String rowNum = opsForValue.get("huazheng:checkDelete:Makt:rowNum");
Makt build = Makt.builder().rowNum(rowNum).build();
List<Makt> list = gpMapper.selectMaktCheck(build); // 从数仓中查询一组数据
if (list.size() == 0) {
redis1Template.opsForValue().set("huazheng:checkDelete:Makt:rowNum", "0"); // 计数器复位
ThreadUtil.sleep(1000); // 没有数据了,休眠一下
}
list.forEach(target -> { // 遍历要检查的数据
Makt source = sapMapper.selectMaktById(target); // 根据主键查询源库中的数据
String operator = "none";
if (source == null) { // 如果源库中没有数据
gpMapper.deleteMakt(target); // 删除数仓中的数据
operator = "delete";
}
redis1Template.opsForValue().set("huazheng:checkDelete:Makt:rowNum", target.getRowNum());
if (!operator.equals("none")) {
log.info(String.format("selectMaktcheckDelete --> rowNum:%s, operator:%s", target.getRowNum(), operator));
}
});
} catch (Exception e) {
redis1Template.opsForValue().set("huazheng:checkDeleteError:Makt:rowNum", SomeUtils.getErrorInfoFromException(e));
}
}
} }
...@@ -18,8 +18,10 @@ import com.huazheng.project.hana.model.Ausp; ...@@ -18,8 +18,10 @@ import com.huazheng.project.hana.model.Ausp;
import com.huazheng.project.hana.model.Bkpf; import com.huazheng.project.hana.model.Bkpf;
import com.huazheng.project.hana.model.Kna1; import com.huazheng.project.hana.model.Kna1;
import com.huazheng.project.hana.model.Knvv; import com.huazheng.project.hana.model.Knvv;
import com.huazheng.project.hana.model.Konv;
import com.huazheng.project.hana.model.Likp; import com.huazheng.project.hana.model.Likp;
import com.huazheng.project.hana.model.Lips; import com.huazheng.project.hana.model.Lips;
import com.huazheng.project.hana.model.Makt;
import com.huazheng.project.hana.model.Mara; import com.huazheng.project.hana.model.Mara;
import com.huazheng.project.hana.model.Pa0002; import com.huazheng.project.hana.model.Pa0002;
import com.huazheng.project.hana.model.Vbak; import com.huazheng.project.hana.model.Vbak;
...@@ -451,6 +453,14 @@ public class CheckUpdateServiceImpl { ...@@ -451,6 +453,14 @@ public class CheckUpdateServiceImpl {
ThreadUtil.safeSleep(500); ThreadUtil.safeSleep(500);
} }
} }
// 级联更新业务
List<Konv> sKonvList = sapMapper.cascadeKonvByVbak(source); // 级联查询源库afko表
for (Konv sKonv : sKonvList) {
Konv tKonv = gpMapper.selectKonv(sKonv); // 查询目标库中afko表
cascadeKonvCheckByUpdate(sKonv, tKonv); // 级联更新afko表
}
ThreadUtil.safeSleep(500); ThreadUtil.safeSleep(500);
} }
} }
...@@ -692,6 +702,12 @@ public class CheckUpdateServiceImpl { ...@@ -692,6 +702,12 @@ public class CheckUpdateServiceImpl {
cascadeAuspCheckByUpdate(sAusp, tAusp); // 级联更新afko表 cascadeAuspCheckByUpdate(sAusp, tAusp); // 级联更新afko表
} }
List<Makt> sMaktList = sapMapper.cascadeMaktByMara(source); // 级联查询源库afko表
for (Makt sMakt : sMaktList) {
Makt tMakt = gpMapper.selectMakt(sMakt); // 查询目标库中afko表
cascadeMaktCheckByUpdate(sMakt, tMakt); // 级联更新afko表
}
ThreadUtil.safeSleep(500); ThreadUtil.safeSleep(500);
} }
} }
...@@ -704,7 +720,43 @@ public class CheckUpdateServiceImpl { ...@@ -704,7 +720,43 @@ public class CheckUpdateServiceImpl {
redis1Template.opsForValue().set("huazheng:checkUpdateError:Mara:rowids", SomeUtils.getErrorInfoFromException(e)); redis1Template.opsForValue().set("huazheng:checkUpdateError:Mara:rowids", SomeUtils.getErrorInfoFromException(e));
} }
} }
// 所属selectMaraCheckUpdate的级联
private void cascadeMaktCheckByUpdate(Makt source, Makt 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);
// ===============================
String maktx = source.getMaktx();
if (maktx != null && !maktx.equals("")) {
String[] split = maktx.split("-");
for (int i = split.length - 1; i >= 0; i--) {
String string = split[i];
if (string.indexOf("*") != -1) {
source.setMaktxSize(string.split("\\*")[0]); // 分割出尺寸数据
break;
}
}
}
// ===============================
while (true) {
try {
gpMapper.updateMakt(source); // 更新数据到数仓中
break;
} catch (RuntimeException e) {
log.error(e.getMessage());
ThreadUtil.safeSleep(500);
}
}
ThreadUtil.safeSleep(500);
}
}
}
// 所属selectMaraCheckUpdate的级联 // 所属selectMaraCheckUpdate的级联
private void cascadeAuspCheckByUpdate(Ausp source, Ausp target) { private void cascadeAuspCheckByUpdate(Ausp source, Ausp target) {
if (target != null) { // 目标库有数据 if (target != null) { // 目标库有数据
...@@ -825,5 +877,28 @@ public class CheckUpdateServiceImpl { ...@@ -825,5 +877,28 @@ public class CheckUpdateServiceImpl {
} }
} }
} }
// 所属selectVbakCheckUpdate的级联
private void cascadeKonvCheckByUpdate(Konv source, Konv 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.updateKonv(source); // 更新数据到数仓中
break;
} catch (RuntimeException e) {
log.error(e.getMessage());
ThreadUtil.safeSleep(500);
}
}
ThreadUtil.safeSleep(500);
}
}
}
} }
...@@ -24,7 +24,6 @@ import com.huazheng.project.hana.model.Bsid; ...@@ -24,7 +24,6 @@ import com.huazheng.project.hana.model.Bsid;
import com.huazheng.project.hana.model.Kna1; import com.huazheng.project.hana.model.Kna1;
import com.huazheng.project.hana.model.Knkk; import com.huazheng.project.hana.model.Knkk;
import com.huazheng.project.hana.model.Knvp; import com.huazheng.project.hana.model.Knvp;
import com.huazheng.project.hana.model.Konv;
import com.huazheng.project.hana.model.Likp; import com.huazheng.project.hana.model.Likp;
import com.huazheng.project.hana.model.Makt; import com.huazheng.project.hana.model.Makt;
import com.huazheng.project.hana.model.Mara; import com.huazheng.project.hana.model.Mara;
...@@ -905,10 +904,7 @@ public class DeleteUpdateJobServiceImpl { ...@@ -905,10 +904,7 @@ public class DeleteUpdateJobServiceImpl {
} }
public void checkJob4() { public void checkJob4() {
// selectKonvCheck(); // 21 注释掉
selectKnkkCheck(); // 19 selectKnkkCheck(); // 19
selectMaktCheck(); // 24
selectMskaCheck(); // 26 selectMskaCheck(); // 26
selectS066Check(); // 28 selectS066Check(); // 28
selectS067Check(); // 29 selectS067Check(); // 29
...@@ -1186,106 +1182,6 @@ public class DeleteUpdateJobServiceImpl { ...@@ -1186,106 +1182,6 @@ public class DeleteUpdateJobServiceImpl {
redis1Template.opsForValue().set("huazheng:checkError:Zpoedit:rowNum", getErrorInfoFromException(e)); redis1Template.opsForValue().set("huazheng:checkError:Zpoedit:rowNum", getErrorInfoFromException(e));
} }
} }
// 数据量过大不再执行任务
private void selectKonvCheck() {
try {
ValueOperations<String, String> opsForValue = redis1Template.opsForValue();
opsForValue.setIfAbsent("huazheng:check:Konv:rowNum", "0");
String rowNum = opsForValue.get("huazheng:check:Konv:rowNum");
Konv build = Konv.builder().rowNum(rowNum).build();
List<Konv> list = gpMapper.selectKonvCheck(build); // 从数仓中查询一组数据
if (list.size() == 0) {
redis1Template.opsForValue().set("huazheng:check:Konv:rowNum", "0"); // 计数器复位
ThreadUtil.sleep(1000); // 没有数据了,休眠一下
}
list.forEach(target -> { // 遍历要检查的数据
Konv source = sapMapper.selectKonvById(target); // 根据主键查询源库中的数据
String operator = "none";
if (source == null) { // 如果源库中没有数据
gpMapper.deleteKonv(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.updateKonv(source); // 更新数据到数仓中
break;
} catch (RuntimeException e) {
log.error(e.getMessage());ThreadUtil.safeSleep(500);
}
}
ThreadUtil.safeSleep(500);
}
}
redis1Template.opsForValue().set("huazheng:check:Konv:rowNum", target.getRowNum());
if (!operator.equals("none")) {
log.info(String.format("selectKonvCheck --> rowNum:%s, operator:%s", target.getRowNum(), operator));
}
});
} catch (Exception e) {
redis1Template.opsForValue().set("huazheng:checkError:Konv:rowNum", getErrorInfoFromException(e));
}
}
private void selectMaktCheck() {
try {
ValueOperations<String, String> opsForValue = redis1Template.opsForValue();
opsForValue.setIfAbsent("huazheng:check:Makt:rowNum", "0");
String rowNum = opsForValue.get("huazheng:check:Makt:rowNum");
Makt build = Makt.builder().rowNum(rowNum).build();
List<Makt> list = gpMapper.selectMaktCheck(build); // 从数仓中查询一组数据
if (list.size() == 0) {
redis1Template.opsForValue().set("huazheng:check:Makt:rowNum", "0"); // 计数器复位
ThreadUtil.sleep(1000); // 没有数据了,休眠一下
}
list.forEach(target -> { // 遍历要检查的数据
Makt source = sapMapper.selectMaktById(target); // 根据主键查询源库中的数据
String operator = "none";
if (source == null) { // 如果源库中没有数据
gpMapper.deleteMakt(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);
// ===============================
String maktx = source.getMaktx();
if (maktx != null && !maktx.equals("")) {
String[] split = maktx.split("-");
for (int i = split.length - 1; i >= 0; i--) {
String string = split[i];
if (string.indexOf("*") != -1) {
source.setMaktxSize(string.split("\\*")[0]); // 分割出尺寸数据
break;
}
}
}
// ===============================
while (true) {
try {
gpMapper.updateMakt(source); // 更新数据到数仓中
break;
} catch (RuntimeException e) {
log.error(e.getMessage());ThreadUtil.safeSleep(500);
}
}
ThreadUtil.safeSleep(500);
}
}
redis1Template.opsForValue().set("huazheng:check:Makt:rowNum", target.getRowNum());
if (!operator.equals("none")) {
log.info(String.format("selectMaktCheck --> rowNum:%s, operator:%s", target.getRowNum(), operator));
}
});
} catch (Exception e) {
redis1Template.opsForValue().set("huazheng:checkError:Makt:rowNum", getErrorInfoFromException(e));
}
}
private void selectMskaCheck() { private void selectMskaCheck() {
try { try {
ValueOperations<String, String> opsForValue = redis1Template.opsForValue(); ValueOperations<String, String> opsForValue = redis1Template.opsForValue();
......
...@@ -107,9 +107,8 @@ public interface SapMapper { ...@@ -107,9 +107,8 @@ public interface SapMapper {
public List<Knvv> cascadeKnvvByKna1(Kna1 kna1); public List<Knvv> cascadeKnvvByKna1(Kna1 kna1);
public List<Vbrp> cascadeVbrpByVbrk(Vbrk source); public List<Vbrp> cascadeVbrpByVbrk(Vbrk source);
public List<Ausp> cascadeAuspByMara(Mara mara); public List<Ausp> cascadeAuspByMara(Mara mara);
public List<Konv> cascadeKonvByVbak(Vbak vbak);
public List<Makt> cascadeMaktByMara(Mara mara);
// ...... // ......
...@@ -149,6 +148,5 @@ public interface SapMapper { ...@@ -149,6 +148,5 @@ public interface SapMapper {
public Bsid selectBsidById(Bsid target); public Bsid selectBsidById(Bsid target);
public Vbap selectVbapById(Vbap target); public Vbap selectVbapById(Vbap target);
public Tvkbt selectTvkbtById(Tvkbt target); public Tvkbt selectTvkbtById(Tvkbt target);
} }
...@@ -339,7 +339,6 @@ ...@@ -339,7 +339,6 @@
where "$rowid$" &gt; #{rowids} and aedat != '00000000' and aedat = CURRENT_DATE ${hana_mandt} where "$rowid$" &gt; #{rowids} and aedat != '00000000' and aedat = CURRENT_DATE ${hana_mandt}
order by "$rowid$" order by "$rowid$"
</select> </select>
<select id="selectBkpfCheckByUpdate" parameterType="Bkpf" resultType="Bkpf"> <select id="selectBkpfCheckByUpdate" parameterType="Bkpf" resultType="Bkpf">
select top 20 "$rowid$" as rowids, select top 20 "$rowid$" as rowids,
mandt, bukrs, belnr, gjahr, blart, bldat, budat, monat, cpudt, cputm, mandt, bukrs, belnr, gjahr, blart, bldat, budat, monat, cpudt, cputm,
...@@ -460,7 +459,18 @@ ...@@ -460,7 +459,18 @@
from ${hana_user}.Vbrp from ${hana_user}.Vbrp
where vbeln = #{vbeln} ${hana_mandt} where vbeln = #{vbeln} ${hana_mandt}
</select> </select>
<select id="cascadeKonvByVbak" parameterType="Vbak" resultType="Konv">
select
mandt,knumv,kposn,stunr,zaehk,kntyp,kbetr
from ${hana_user}.konv
where knumv = #{knumv} ${hana_mandt}
</select>
<select id="cascadeMaktByMara" parameterType="Mara" resultType="Makt">
select
matnr, mandt, spras, maktx
from ${hana_user}.Makt
where matnr = #{matnr} ${hana_mandt}
</select>
......
...@@ -951,6 +951,26 @@ ...@@ -951,6 +951,26 @@
</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="selectKonvCheckByDelete" />
</bean>
</property>
<property name="cronExpression" value="* * * * * ?" />
</bean>
<bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<bean parent="methodJobDetail">
<property name="targetObject" ref="checkDeleteServiceImpl" />
<property name="targetMethod" value="selectMaktCheckByDelete" />
</bean>
</property>
<property name="cronExpression" value="* * * * * ?" />
</bean>
</list> </list>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论