skyfffire 1 сар өмнө
parent
commit
c8e7e33e1b

+ 26 - 0
src/main/java/common/model/base/BaseNftt.java

@@ -166,6 +166,32 @@ public abstract class BaseNftt<M extends BaseNftt<M>> extends Model<M> implement
 	public java.lang.Integer getCreatorId() {
 		return getInt("creator_id");
 	}
+	/**
+	 * bsn的token id
+	 */
+	public void setBsnTokenId(java.lang.String bsnTokenId) {
+		set("bsn_token_id", bsnTokenId);
+	}
+	
+	/**
+	 * bsn的token id
+	 */
+	public java.lang.String getBsnTokenId() {
+		return getStr("bsn_token_id");
+	}
+	/**
+	 * bsn最终获取的状态json
+	 */
+	public void setBsnStatusJson(java.lang.String bsnStatusJson) {
+		set("bsn_status_json", bsnStatusJson);
+	}
+	
+	/**
+	 * bsn最终获取的状态json
+	 */
+	public java.lang.String getBsnStatusJson() {
+		return getStr("bsn_status_json");
+	}
 	public void setCreateTime(java.lang.Long createTime) {
 		set("create_time", createTime);
 	}

+ 11 - 1
src/main/java/modules/nftt/NfttController.java

@@ -9,6 +9,7 @@ import common.interceptor.LoginInterceptor;
 import common.interceptor.empty.EmptyInterface;
 import common.interceptor.role.RequiredRoleInterface;
 import common.model.Nftt;
+import common.utils.bsn.BsnSDK;
 import common.utils.http.MyController;
 import common.utils.http.MyRet;
 import modules.user.UserController;
@@ -156,7 +157,16 @@ public class NfttController extends MyController {
             System.out.println("Nftt Model 的内部数据 (for debug): " + nftt);
 
             if (service.save(nftt)) {
-                renderJson(MyRet.ok("创建成功").setData(service.findNfttById(nftt.getId().toString())));
+                // 在链上创建NFT
+                JSONObject createResponse = BsnSDK.createNft(name, detailImageList.get(0).toString(), maxQuantity, "DLTBH_NFT_" + nftt.getId());
+                nftt.setBsnStatusJson(createResponse.toJSONString());
+                nftt.update();
+                
+                if (createResponse.getInteger("code") == 0) {
+                    renderJson(MyRet.ok("NFT创建成功,等待上链,请刷新查看").setData(nftt));
+                } else {
+                    renderJson(MyRet.fail("NFT创建失败(Bsn),请联系开发者").setData(createResponse));
+                }
             } else {
                 renderJson(MyRet.fail("创建失败,原因未知,请将此日志提供给开发者" + nftt).setData(nftt));
             }            

+ 36 - 7
src/main/java/modules/nftt/NfttService.java

@@ -1,7 +1,10 @@
 package modules.nftt;
 
+import com.alibaba.fastjson.JSONObject;
+import com.jfinal.kit.StrKit;
 import com.jfinal.plugin.activerecord.Db;
 import common.model.Nftt;
+import common.utils.bsn.BsnSDK;
 
 import java.util.List;
 
@@ -26,22 +29,48 @@ public class NfttService {
 
     public List<Nftt> homeList() {
         String columns = "*";
-        String baseSql = "select " + columns + " from t_nftt order by buying_start_time desc limit 0, 10";
+        String baseSql = "select " + columns + " from t_nftt where bsn_token_id != NULL and bsn_token_id != '-1' order by buying_start_time desc limit 0, 10";
 
         return Nftt.dao.find(baseSql);
     }
 
     public List<Nftt> nfttList(int pageNumber, int pageSize) {
-        // limit 的第一个参数是偏移量,第二个参数是查询数量
-        // 正确的 limit 是 LIMIT offset, count
-        // offset = (pageNumber - 1) * pageSize
-        // count = pageSize
         int offset = (pageNumber - 1) * pageSize;
         
-        String sql = "SELECT COUNT(1) FROM t_nftt";
         String columns = "*";
         String baseSql = "select " + columns + " from t_nftt order by buying_start_time desc limit ?, ?";
+        
+        List<Nftt> list = Nftt.dao.find(baseSql, offset, pageSize);
 
-        return Nftt.dao.find(baseSql, offset, pageSize);
+        for (Nftt nftt : list) {
+            if (StrKit.notBlank(nftt.getBsnTokenId())) {
+                continue;
+            }
+
+            try {
+                JSONObject searchObject = BsnSDK.search("DLTBH_NFT_" + nftt.getId());
+                nftt.setBsnStatusJson(searchObject.toJSONString());
+                nftt.update();
+                
+                if (searchObject.getInteger("code") != 0) {
+                    throw new RuntimeException("查询失败,返回值与预期不符:" + searchObject.toJSONString());
+                }
+                
+                JSONObject data = searchObject.getJSONObject("data");
+                if (data.getInteger("status") == 2) {
+                    nftt.setBsnTokenId("-1");
+                    throw new RuntimeException("上链失败,链上的错误:" + searchObject.toJSONString());
+                }
+                
+                if (data.getInteger("status") == 1) {
+                    nftt.setBsnTokenId(data.getString("tokenId"));
+                    nftt.update();
+                }
+            } catch (Exception e) {
+                System.err.println("search NFTT时出现问题:" + e.getMessage());
+            }
+        }
+        
+        return list;
     }
 }