Browse Source

更新!11

TRX 11 months ago
parent
commit
b1bd833e06

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/org/TestController.java

@@ -66,7 +66,7 @@ public class TestController {
     @RequestMapping(value = "testAddUser1", method = {RequestMethod.POST})
     public ResultContent testAddUser1(@Parameter TestUserInfoParam param) {
 //        log.info("testAddUser1... {}", param.getNickname());
-        orderKeyExpire.saveKey("trx100010", 5000L);
+        orderKeyExpire.saveKey("2025032115212400002", 5000L);
 
         return ResultContent.buildSuccess();
     }

+ 2 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/payment/impl/ExpenseFlowDaoImpl.java

@@ -537,8 +537,8 @@ public class ExpenseFlowDaoImpl extends BaseImpl implements ExpenseFlowDaoExtend
     public ExpenseFlow init(String mqttDataId, String token) {
         ExpenseFlow doc = null;
         try {
-            Query query = Query.query(Criteria.where("mqttDataId").is(mqttDataId).and("token").isNull());
-            Update update = new Update().set("token", token).set("createTime", System.currentTimeMillis());
+            Query query = Query.query(Criteria.where("mqttDataId").is(mqttDataId).and("createToken").isNull());
+            Update update = new Update().set("createToken", token).set("createTime", System.currentTimeMillis());
             FindAndModifyOptions options = new FindAndModifyOptions().upsert(true).returnNew(true);
             doc = mongoTemplate.findAndModify(query, update, options, ExpenseFlow.class);
         } catch (Exception e) {

+ 6 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/base/SuperMain.java

@@ -56,4 +56,10 @@ public class SuperMain extends SuperEntity {
 
     @Schema(description = "添加用户电话", hidden = true)
     private String updatePhone;
+
+    @Schema(description = "")
+    private String token;
+
+    @Schema(description = "锁过期时间")
+    private Long expireAt;
 }

+ 0 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/devices/DeviceUseRecords.java

@@ -37,9 +37,6 @@ public class DeviceUseRecords extends SuperMain {
     @Schema(description = "mqtt推送生成的业务数据ID")
     private String mqttDataId;
 
-    @Schema(description = "token")
-    private String token;
-
     @Schema(description = "关联的项目名称")
     private String projectName;
 

+ 0 - 6
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/paySetting/ProjectMainPaySetting.java

@@ -110,10 +110,4 @@ public class ProjectMainPaySetting extends SuperMain {
     @Schema(description = "全局机构分账比例,0-100")
     private BigDecimal orgScale = BigDecimal.ZERO;
 
-    @Schema(description = "锁过期时间")
-    private Long expireAt;
-
-    @Schema(description = "锁token")
-    private String token;
-
 }

+ 1 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/payment/ExpenseFlow.java

@@ -51,8 +51,7 @@ public class ExpenseFlow extends SuperMain {
     @Schema(description = "mqtt推送生成的业务数据ID")
     private String mqttDataId;
 
-    @Schema(description = "")
-    private String token;
+    private String createToken;
 
     @Indexed
     @Schema(description = "订单的总体状态,待付款、支付中、已支付、已退款")

+ 0 - 6
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/schedule/ScheduleTaskConfig.java

@@ -42,10 +42,4 @@ public class ScheduleTaskConfig extends SuperMain {
     @Schema(description = "执行状态 1.正在执行 0.等待执行")
     private Integer executeStatus = 0;
 
-    @Schema(description = "中心token")
-    private String token;
-
-    @Schema(description = "过期时间")
-    private Long expireAt;
-
 }

+ 10 - 12
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/base/CommonService.java

@@ -9,6 +9,7 @@ import com.github.microservice.types.common.CommonEnum;
 import com.mongodb.client.result.UpdateResult;
 import com.zhongshu.card.client.type.OrganizationState;
 import com.zhongshu.card.server.core.dao.org.OrganizationDao;
+import com.zhongshu.card.server.core.domain.base.SuperMain;
 import com.zhongshu.card.server.core.domain.org.Organization;
 import com.zhongshu.card.server.core.domain.paySetting.ProjectMainPaySetting;
 import com.zhongshu.card.server.core.util.CommonUtil;
@@ -191,34 +192,31 @@ public class CommonService {
         return base64;
     }
 
-    public String acquire(String key, Long expiration) {
-        Query query = Query.query(Criteria.where("_id").is(key).and("token").isNull());
+    public String acquire(String id, Long expiration, SuperMain superMain) {
+        Query query = Query.query(Criteria.where("_id").is(id).and("token").isNull());
         String token = TokenUtil.create();
         Update update = new Update().set("expireAt", System.currentTimeMillis() + expiration).set("token", token);
 
         FindAndModifyOptions options = new FindAndModifyOptions().upsert(false).returnNew(true);
-
-        ProjectMainPaySetting doc = mongoTemplate.findAndModify(query, update, options, ProjectMainPaySetting.class);
+        SuperMain doc = mongoTemplate.findAndModify(query, update, options, superMain.getClass());
         if (doc == null) {
-            ProjectMainPaySetting lockObj = mongoTemplate.findOne(Query.query(Criteria.where("_id").is(key)), ProjectMainPaySetting.class);
+            SuperMain lockObj = mongoTemplate.findOne(Query.query(Criteria.where("_id").is(id)), ProjectMainPaySetting.class);
             doc = lockObj;
         }
         boolean locked = doc != null && doc.getToken() != null && doc.getToken().equals(token);
 
-        // 如果已过期
         if (!locked && doc != null && doc.getExpireAt() < System.currentTimeMillis()) {
-            release(key);
-            // 成功释放锁, 再次尝试获取锁
-            return this.acquire(key, expiration);
+            release(id, superMain);
+            return this.acquire(id, expiration, superMain);
         }
         return locked ? token : null;
     }
 
-    public boolean release(String key) {
-        Query releaseQuery = Query.query(Criteria.where("_id").is(key));
+    public boolean release(String id, SuperMain superMain) {
+        Query releaseQuery = Query.query(Criteria.where("_id").is(id));
         Update releaseUpdate = new Update().set("expireAt", null).set("token", null);
         FindAndModifyOptions releaseOptions = new FindAndModifyOptions().upsert(true).returnNew(true);
-        ProjectMainPaySetting flowDisposition = mongoTemplate.findAndModify(releaseQuery, releaseUpdate, releaseOptions, ProjectMainPaySetting.class);
+        SuperMain flowDisposition = mongoTemplate.findAndModify(releaseQuery, releaseUpdate, releaseOptions, superMain.getClass());
         return StringUtils.isEmpty(flowDisposition.getToken());
     }
 

+ 27 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/ExpenseFlowServiceImpl.java

@@ -137,7 +137,7 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
     private OrderKeyExpire orderKeyExpire;
 
     /**
-     * 创建流水
+     * 创建流水/订单记录
      *
      * @param mqttDataId
      * @return
@@ -1142,6 +1142,12 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
             Map<String, Object> standardData = new HashMap<>();
             standardData.put("orderState", OrderState.Expired);
             standardData.put("payRemark", "超时关闭");
+
+            standardData.put("isClosed", Boolean.TRUE);
+            standardData.put("closeUserId", "");
+            standardData.put("closeReason", "超时关闭");
+            standardData.put("closeTime", System.currentTimeMillis());
+
             commonService.updateData(entity.getId(), standardData, ExpenseFlow.class.getSimpleName());
             clearDelayedTimeout(entity);
         }
@@ -1165,7 +1171,26 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
     }
 
     public void handleDelayedTask(String orderNo) {
-
+        ExpenseFlow expenseFlow = expenseFlowDao.findTopByOrderNoOrderByCreateTimeDesc(orderNo);
+        if (ObjectUtils.isEmpty(expenseFlow)) {
+            return;
+        }
+        String id = expenseFlow.getId();
+        try {
+            String lockKey = commonService.acquire(id, 5000L, expenseFlow);
+            log.info("lockKey: {}", lockKey);
+            if (StringUtils.isNotEmpty(lockKey)) {
+                if (expenseFlow.getOrderState() == OrderState.WAIT_PAYMENT
+                        && expenseFlow.getExpirationTime() <= System.currentTimeMillis()) {
+                    // 为待支付并且支付时间已过
+                    markOrderTimeOut(expenseFlow);
+                }
+            }
+        } catch (Exception e) {
+            log.info(e.getMessage());
+        } finally {
+            commonService.release(id, expenseFlow);
+        }
     }
 
     /**