doum
2026-06-17 ea689dd91eaa72425dc01759042c3b4eb2186512
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();
    }
}