| Pass |
- 11:57:28 |
+ 18:43:15 |
Test passed
|
@@ -128,13 +128,13 @@
Started
-
八月 24, 2026 11:57:28
+
八月 26, 2026 18:43:14
Ended
-
八月 24, 2026 11:57:28
+
八月 26, 2026 18:43:15
diff --git a/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/UserController.java b/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/UserController.java
index 813e5636..705bb333 100644
--- a/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/UserController.java
+++ b/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/UserController.java
@@ -672,13 +672,21 @@ public class UserController {
User wechatUser = null;
final Map resultMap = new HashMap<>();
if(StringUtils.isEmpty(wechatVo.getUserId())){
- wechatUser = userService.findByUnionid(unionid);
+ if (StringUtils.isNotEmpty(unionid)) {
+ wechatUser = userService.findByUnionid(unionid);
+ }
+ if (wechatUser == null) {
+ wechatUser = userService.findByMiniProgramOpenid(openId);
+ }
}else{
wechatUser = userService.findById(wechatVo.getUserId());
- if (wechatUser == null) {
+ if (wechatUser == null && StringUtils.isNotEmpty(unionid)) {
// 濡傛灉鏍规嵁userid娌℃煡鍒帮紝鍐嶆牴鎹畊nionid鏌ヨ涓閬
wechatUser = userService.findByUnionid(unionid);
}
+ if (wechatUser == null) {
+ wechatUser = userService.findByMiniProgramOpenid(openId);
+ }
}
if (wechatUser == null) {
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/campus/service/impl/CampusServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/campus/service/impl/CampusServiceImpl.java
index a5d9627b..7b02d068 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/campus/service/impl/CampusServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/campus/service/impl/CampusServiceImpl.java
@@ -15,6 +15,7 @@ import cc.hiver.mall.ie.service.IeContentAuditLogService;
import cc.hiver.mall.ie.service.IeSecurityAuditService;
import cc.hiver.mall.ie.vo.IeAliyunModerationResult;
import cc.hiver.mall.ie.vo.IeAuditResult;
+import cc.hiver.mall.utils.WechatSendMessageUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -22,6 +23,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -31,8 +33,11 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.TransactionSynchronization;
+import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springframework.transaction.support.TransactionTemplate;
+import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
@@ -45,6 +50,7 @@ public class CampusServiceImpl implements CampusService {
private static final String IMAGE_AUDIT_REJECT_MESSAGE = "鍥剧墖瀹℃牳鏈氳繃锛岃鏇存崲鍚庨噸璇";
private static final String CHAT_UNREAD_KEY_PREFIX = "campus:unread:chat:";
private static final String COMMENT_UNREAD_KEY_PREFIX = "campus:unread:comment:";
+ private static final String CAMPUS_COMMENT_WECHAT_TEMPLATE_ID = "X-lezVQyqm9EUsHCi6ja2cAnjdif5uyA21nhmg0RsuU";
private static final int STATUS_NORMAL = 1;
private static final int STATUS_OFF_SHELF = 2;
private static final int STATUS_DELETED = 3;
@@ -84,6 +90,8 @@ public class CampusServiceImpl implements CampusService {
private SimpMessagingTemplate messagingTemplate;
@Autowired
private PlatformTransactionManager transactionManager;
+ @Autowired
+ private WechatSendMessageUtil wechatSendMessageUtil;
@Override
public List listCategories(String regionId, String parentCode, String categoryType) {
@@ -378,6 +386,11 @@ public class CampusServiceImpl implements CampusService {
if (!user.getId().equals(post.getUserId())) {
incrementUnread(commentUnreadKey(post.getUserId()), commentUnreadField(post.getId(), comment.getId()));
}
+ if (StringUtils.isBlank(comment.getParentId())
+ && Integer.valueOf(AUDIT_PASS).equals(comment.getAuditStatus())
+ && !user.getId().equals(post.getUserId())) {
+ sendCampusCommentNotifyAfterCommit(comment, post);
+ }
return comment;
}
@@ -1253,6 +1266,44 @@ public class CampusServiceImpl implements CampusService {
messagingTemplate.convertAndSend("/topic/campus/session/" + message.getSessionId(), message);
}
+ private void sendCampusCommentNotifyAfterCommit(CampusComment comment, CampusPost post) {
+ if (comment == null || post == null || StringUtils.isBlank(post.getUserId())) return;
+ if (TransactionSynchronizationManager.isSynchronizationActive()) {
+ TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
+ @Override
+ public void afterCommit() {
+ sendCampusCommentNotify(comment, post);
+ }
+ });
+ return;
+ }
+ sendCampusCommentNotify(comment, post);
+ }
+
+ private void sendCampusCommentNotify(CampusComment comment, CampusPost post) {
+ try {
+ User receiver = userService.findById(post.getUserId());
+ if (receiver == null || StringUtils.isBlank(receiver.getOfficialAccountOpenid())) {
+ return;
+ }
+ List data = new ArrayList<>();
+ Date createTime = comment.getCreateTime() == null ? new Date() : comment.getCreateTime();
+ data.add(new WxMpTemplateData("time5", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createTime)));
+ data.add(new WxMpTemplateData("thing10", "鏍″洯鍦堟湁鏂扮殑璇勮鍟"));
+ data.add(new WxMpTemplateData("character_string6", limitCharacterStringValue(defaultString(comment.getId(), post.getId()))));
+ wechatSendMessageUtil.sendWechatTempMessage(
+ Collections.singletonList(receiver.getOfficialAccountOpenid()),
+ CAMPUS_COMMENT_WECHAT_TEMPLATE_ID,
+ data,
+ "pages/index/index"
+ );
+ log.info("鏍″洯鍦堣瘎璁哄叕浼楀彿閫氱煡宸插彂閫侊紝commentId={}, receiverId={}", comment.getId(), post.getUserId());
+ } catch (Exception e) {
+ log.warn("鏍″洯鍦堣瘎璁哄叕浼楀彿閫氱煡鍙戦佸け璐ワ紝commentId={}, receiverId={}, reason={}",
+ comment == null ? null : comment.getId(), post == null ? null : post.getUserId(), e.getMessage());
+ }
+ }
+
private void incrementUnread(String key, String field) {
if (stringRedisTemplate == null || StringUtils.isAnyBlank(key, field)) return;
stringRedisTemplate.opsForHash().increment(key, field, 1L);
@@ -1324,6 +1375,14 @@ public class CampusServiceImpl implements CampusService {
return postId + ":" + commentId;
}
+ private String limitCharacterStringValue(String value) {
+ String text = StringUtils.defaultString(value).replaceAll("[^A-Za-z0-9_-]", "");
+ if (StringUtils.isBlank(text)) {
+ return "campus";
+ }
+ return text.length() > 32 ? text.substring(0, 32) : text;
+ }
+
private CampusPageQuery normalizeQuery(CampusPageQuery query) {
CampusPageQuery q = query == null ? new CampusPageQuery() : query;
q.setPageNum(q.getPageNum() == null || q.getPageNum() < 1 ? 1 : q.getPageNum());
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallDeliveryOrderController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallDeliveryOrderController.java
index 4698955d..257f8dd7 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallDeliveryOrderController.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallDeliveryOrderController.java
@@ -38,10 +38,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
/**
* 閰嶉佽鍗曟帴鍙
@@ -53,6 +50,7 @@ import java.util.Map;
public class MallDeliveryOrderController {
private static final int STATUS_WAIT = -1;
+ private static final String HOME_POPUP_POSITION = "home_popup";
@Autowired
private MallDeliveryOrderService mallDeliveryOrderService;
@@ -103,11 +101,14 @@ public class MallDeliveryOrderController {
//棣栧厛浠庣紦瀛樹腑鏌ヨ
Map cacheResult = waitOrderCacheUtil.getAll(q);
List cathList = mallAdPositionService.getAdsByRegionId(q.getRegionId(),q.getPaths());
+ MallAdPosition homePopupAd = getHomePopupAd(q.getRegionId());
if (cacheResult != null) {
cacheResult.put("mallAds",cathList);
+ cacheResult.put("homePopupAd", homePopupAd);
}else{
cacheResult = new HashMap<>();
cacheResult.put("mallAds",cathList);
+ cacheResult.put("homePopupAd", homePopupAd);
if (q.getDeliveryType() == 4 && StrUtil.isNotBlank(q.getWorkerId())) {
//鍏堟煡褰撳墠鐢ㄦ埛鎸囨淳鍗曟湭纭鎺ュ崟鏁伴噺 涓嶇敤鍒嗛〉
q.setHallOnly(false);
@@ -163,6 +164,11 @@ public class MallDeliveryOrderController {
return new ResultUtil