From 77094dd01f0c6ff59b4fb4fa1105addf34b2398c Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期二, 16 六月 2026 18:49:03 +0800
Subject: [PATCH] 新增智能电表、空调管理

---
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerH5AuthServiceImpl.java |   63 +++++++++++++++++++++++++++++--
 1 files changed, 58 insertions(+), 5 deletions(-)

diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerH5AuthServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerH5AuthServiceImpl.java
index 37fcf42..59d02f7 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerH5AuthServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerH5AuthServiceImpl.java
@@ -7,7 +7,9 @@
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.MemberMapper;
 import com.doumee.dao.business.YwCustomerMapper;
+import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.YwCustomer;
 import com.doumee.dao.system.dto.LoginPhoneDTO;
 import com.doumee.service.business.YwCustomerH5AuthService;
@@ -24,6 +26,8 @@
 
     @Autowired
     private YwCustomerMapper ywCustomerMapper;
+    @Autowired
+    private MemberMapper memberMapper;
     @Autowired
     private JwtTokenUtil jwtTokenUtil;
 
@@ -67,19 +71,55 @@
         return toLoginUserInfo(requireActiveCustomer(customerId));
     }
 
+    @Override
+    public void assertActiveCustomerByPhone(String phone) {
+        findActiveByPhone(phone);
+    }
+
     private YwCustomer findActiveByPhone(String phone) {
         if (StringUtils.isBlank(phone)) {
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎵嬫満鍙蜂笉鑳戒负绌�");
         }
-        YwCustomer customer = ywCustomerMapper.selectOne(new QueryWrapper<YwCustomer>().lambda()
-                .eq(YwCustomer::getIsdeleted, Constants.ZERO)
-                .eq(YwCustomer::getPhone, phone.trim())
-                .last(" limit 1 "));
+        YwCustomer customer = findCustomerByPhone(phone.trim());
         if (customer == null) {
             throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), "鍟嗘埛涓嶅瓨鍦ㄦ垨鏈敞鍐�");
         }
         assertCustomerEnabled(customer);
         return customer;
+    }
+
+    /**
+     * 鍟嗘埛鎵嬫満鍙凤細浼樺厛 yw_customer.phone锛屽惁鍒欏尮閰嶈仈绯讳汉 member.phone
+     */
+    private YwCustomer findCustomerByPhone(String phone) {
+        YwCustomer byCustomerPhone = ywCustomerMapper.selectOne(new QueryWrapper<YwCustomer>().lambda()
+                .eq(YwCustomer::getIsdeleted, Constants.ZERO)
+                .eq(YwCustomer::getPhone, phone)
+                .last(" limit 1 "));
+        if (byCustomerPhone != null) {
+            return byCustomerPhone;
+        }
+        Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
+                .eq(Member::getIsdeleted, Constants.ZERO)
+                .eq(Member::getType, Constants.memberType.customer)
+                .eq(Member::getPhone, phone)
+                .isNotNull(Member::getCustomerId)
+                .orderByDesc(Member::getId)
+                .last(" limit 1 "));
+        if (member == null || member.getCustomerId() == null) {
+            return null;
+        }
+        YwCustomer customer = ywCustomerMapper.selectOne(new QueryWrapper<YwCustomer>().lambda()
+                .eq(YwCustomer::getId, member.getCustomerId())
+                .eq(YwCustomer::getIsdeleted, Constants.ZERO)
+                .last(" limit 1 "));
+        if (customer != null) {
+            return customer;
+        }
+        return ywCustomerMapper.selectOne(new QueryWrapper<YwCustomer>().lambda()
+                .eq(YwCustomer::getIsdeleted, Constants.ZERO)
+                .eq(YwCustomer::getMemberId, member.getId())
+                .last(" limit 1 "));
     }
 
     private YwCustomer requireActiveCustomer(Integer customerId) {
@@ -125,11 +165,24 @@
         loginUserInfo.setId(customer.getId());
         loginUserInfo.setH5UserType(LoginUserInfo.H5_USER_CUSTOMER);
         loginUserInfo.setRealname(customer.getName());
-        loginUserInfo.setMobile(customer.getPhone());
+        loginUserInfo.setMobile(resolveLoginMobile(customer));
         loginUserInfo.setUsername("customer_" + customer.getId());
         loginUserInfo.setSource(LoginUserInfo.SOURCE_H5_CUSTOMER);
         loginUserInfo.setRoles(Collections.singletonList("h5_customer"));
         loginUserInfo.setPermissions(Collections.emptyList());
         return loginUserInfo;
     }
+
+    private String resolveLoginMobile(YwCustomer customer) {
+        if (StringUtils.isNotBlank(customer.getPhone())) {
+            return customer.getPhone();
+        }
+        if (customer.getMemberId() != null) {
+            Member member = memberMapper.selectById(customer.getMemberId());
+            if (member != null && StringUtils.isNotBlank(member.getPhone())) {
+                return member.getPhone();
+            }
+        }
+        return customer.getPhone();
+    }
 }

--
Gitblit v1.9.3