|
|
@@ -1,6 +1,8 @@
|
|
|
package common.utils.model;
|
|
|
|
|
|
import com.alibaba.druid.util.StringUtils;
|
|
|
+import com.google.common.collect.Interner;
|
|
|
+import com.google.common.collect.Interners;
|
|
|
import com.jfinal.plugin.activerecord.Db;
|
|
|
import com.jfinal.plugin.activerecord.Model;
|
|
|
|
|
|
@@ -9,19 +11,22 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|
|
public class SaveUtil {
|
|
|
public static final int SAVE_CODE = 1;
|
|
|
public static final int UPDATE_CODE = 2;
|
|
|
+ Interner<String> pool = Interners.newWeakInterner();
|
|
|
|
|
|
- public static int saveOrUpdate(Model<?> model) {
|
|
|
+ public int saveOrUpdate(Model<?> model) {
|
|
|
if(!StringUtils.isEmpty(model.getStr("chainId")) && !StringUtils.isEmpty(model.getStr("hash"))){
|
|
|
model.set("id", model.getStr("chainId").concat(model.getStr("hash")));
|
|
|
}
|
|
|
// Object[] values = CopyUtil.generateDuplicateObjects(model._getAttrValues());
|
|
|
- // 是否存在
|
|
|
- if (Db.template("hasRecord", TableUtil.getTableName(model), model.getStr("chainId"), model.getStr("hash")).queryInt() == 1){
|
|
|
- model.update();
|
|
|
- return UPDATE_CODE;
|
|
|
- } else {
|
|
|
- model.save();
|
|
|
- return SAVE_CODE;
|
|
|
+ synchronized (pool.intern(model.get("id"))){
|
|
|
+ // 是否存在
|
|
|
+ if (Db.template("hasRecord", TableUtil.getTableName(model), model.getStr("chainId"), model.getStr("hash")).queryInt() == 1){
|
|
|
+ model.update();
|
|
|
+ return UPDATE_CODE;
|
|
|
+ } else {
|
|
|
+ model.save();
|
|
|
+ return SAVE_CODE;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -40,15 +45,15 @@ public class SaveUtil {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public static int saveSuperAndSub(Model<?> superModel, Model<?> subModel) {
|
|
|
+ public int saveSuperAndSub(Model<?> superModel, Model<?> subModel) {
|
|
|
AtomicInteger code = new AtomicInteger();
|
|
|
|
|
|
Db.tx(() -> {
|
|
|
subModel.set("id", subModel.getStr("chainId").concat(subModel.getStr("hash")));
|
|
|
superModel.set("id", superModel.getStr("chainId").concat(superModel.getStr("hash")));
|
|
|
- SaveUtil.saveOrUpdate(superModel);
|
|
|
+ saveOrUpdate(superModel);
|
|
|
|
|
|
- code.set(SaveUtil.saveOrUpdate(subModel));
|
|
|
+ code.set(saveOrUpdate(subModel));
|
|
|
|
|
|
return true;
|
|
|
});
|