3 Коміти 7e47fe1233 ... a99ac0de4d

Автор SHA1 Опис Дата
  csy a99ac0de4d 配置复原 2 тижнів тому
  csy b82fd7fc18 手机加密2 3 тижнів тому
  csy 501eb2bc2c 手机加密 3 тижнів тому

+ 2 - 2
deploy.sh

@@ -83,13 +83,13 @@ deploy_jar() {
 # 部署 fs-admin
 #deploy_jar "$LOCAL_FS_ADMIN_JAR" "fs-admin"
 
-deploy_jar "$LOCAL_FS_API_JAR" "fs-api"
+#deploy_jar "$LOCAL_FS_API_JAR" "fs-api"
 
 # 部署 fs-company
 #deploy_jar "$LOCAL_FS_COMPANY_JAR" "fs-company"
 
 # 部署 fs-user-app
-#deploy_jar "$LOCAL_FS_USER_APP_JAR" "fs-user-app"
+deploy_jar "$LOCAL_FS_USER_APP_JAR" "fs-user-app"
 
 echo "Deployment completed."
 

+ 7 - 0
fs-admin/src/main/java/com/fs/store/controller/FsUserController.java

@@ -1,6 +1,7 @@
 package com.fs.store.controller;
 
 import java.util.List;
+import java.util.regex.Pattern;
 
 import com.fs.common.core.domain.R;
 import com.fs.common.utils.ParseUtils;
@@ -18,6 +19,8 @@ import com.fs.store.service.IFsUserService;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.common.core.page.TableDataInfo;
 
+import static com.fs.until.PhoneUtil.encryptPhone;
+
 /**
  * 用户Controller
  *
@@ -91,6 +94,10 @@ public class FsUserController extends BaseController
     @PostMapping
     public R add(@RequestBody FsUser fsUser)
     {
+        Pattern PHONE_PATTERN = Pattern.compile("^1\\d{10}$");
+        if (PHONE_PATTERN.matcher(fsUser.getPhone().trim()).matches()){
+            fsUser.setPhone(encryptPhone(fsUser.getPhone()));
+        }
         FsUser check=fsUserService.selectFsUserByPhone(fsUser.getPhone());
         if(check!=null){
             return R.error("手机号已存在");

+ 8 - 0
fs-company/src/main/java/com/fs/users/controller/FsUserController.java

@@ -17,6 +17,10 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.regex.Pattern;
+
+import static com.fs.until.PhoneUtil.decryptPhone;
+import static com.fs.until.PhoneUtil.encryptPhone;
 
 /**
  * 用户Controller
@@ -86,6 +90,10 @@ public class FsUserController extends BaseController
     @PostMapping
     public R add(@RequestBody FsUser fsUser)
     {
+        Pattern PHONE_PATTERN = Pattern.compile("^1\\d{10}$");
+        if (PHONE_PATTERN.matcher(fsUser.getPhone().trim()).matches()){
+            fsUser.setPhone(encryptPhone(fsUser.getPhone()));
+        }
         FsUser check=fsUserService.selectFsUserByPhone(fsUser.getPhone());
         if(check!=null){
             return R.error("手机号已存在");

+ 8 - 0
fs-service-system/src/main/java/com/fs/common/service/impl/SmsServiceImpl.java

@@ -39,6 +39,10 @@ import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
+import java.util.regex.Pattern;
+
+import static com.fs.until.PhoneUtil.decryptPhone;
+import static com.fs.until.PhoneUtil.encryptPhone;
 
 @Service
 public class SmsServiceImpl implements ISmsService
@@ -419,6 +423,10 @@ public class SmsServiceImpl implements ISmsService
         // 通知类的不加 退订回T 只有营销类的加
         //最多500个手机号
         try {
+            Pattern PHONE_PATTERN = Pattern.compile("^1\\d{10}$");
+            if (PHONE_PATTERN.matcher(order.getUserPhone().trim()).matches()){
+                order.setUserPhone(decryptPhone(order.getUserPhone()));
+            }
             if(temp.getTempType().equals(1)){
                 urls = url1+"sms?action=send&account="+account1+"&password="+password1+"&mobile="+order.getUserPhone()+"&content="+ URLEncoder.encode(sign+content, "UTF-8")+"&extno="+code1+"&rt=json";
             }

+ 7 - 0
fs-service-system/src/main/java/com/fs/express/impl/FsStoreDeliversServiceImpl.java

@@ -26,8 +26,11 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
+import static com.fs.until.PhoneUtil.decryptPhone;
+
 /**
  * 物流信息查询类
  * @author xdd
@@ -169,6 +172,10 @@ public class FsStoreDeliversServiceImpl implements FsStoreDeliversService {
             fsStoreDeliversMapper.insert(deliveryDTO);
 
             //新增的要订阅快递鸟监控
+            Pattern PHONE_PATTERN = Pattern.compile("^1\\d{10}$");
+            if (PHONE_PATTERN.matcher(fsStoreOrder.getUserPhone().trim()).matches()){
+                fsStoreOrder.setUserPhone(decryptPhone(fsStoreOrder.getUserPhone()));
+            }
             String lastFourNum = PhoneUtils.getLastFourNum(fsStoreOrder.getUserPhone());
             expressService.subscribeEspress(deliveryDTO.getOrderCode(),
                     deliveryDTO.getDeliverSn(),

+ 4 - 0
fs-service-system/src/main/java/com/fs/store/mapper/FsUserMapper.java

@@ -199,4 +199,8 @@ public interface FsUserMapper
 
 
     FsUser selectFsUserByMaOpenIdOrUnionId(@Param("openId") String openId,@Param("unionId") String unionId);
+
+    List<FsUser> getUserList(@Param("lastId") Long lastId, @Param("limit") int limit);
+
+    int batchUpdatePhone(@Param("list") List<FsUser> subList);
 }

+ 6 - 0
fs-service-system/src/main/java/com/fs/store/service/channel/TzbkPaymentHandler.java

@@ -26,7 +26,9 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import java.text.SimpleDateFormat;
 import java.time.Instant;
 import java.util.Date;
+import java.util.regex.Pattern;
 
+import static com.fs.until.PhoneUtil.decryptPhone;
 import static org.springframework.beans.factory.config.ConfigurableBeanFactory.SCOPE_PROTOTYPE;
 
 /**
@@ -66,6 +68,10 @@ public class TzbkPaymentHandler extends PaymentHandler{
         reqBodyDTO.setPayNotifyUrl(tzConfigInfoDTO.getPayNotifyUrl());
         reqBodyDTO.setPayerName(user.getUsername());
         reqBodyDTO.setPayerMobileNo(user.getPhone());
+        Pattern PHONE_PATTERN = Pattern.compile("^1\\d{10}$");
+        if (!PHONE_PATTERN.matcher(user.getPhone().trim()).matches()){
+            reqBodyDTO.setPayerMobileNo(decryptPhone(user.getPhone()));
+        }
         reqBodyDTO.setGoodsInfo(context.getGoodsInfo());
         // 不需要分账
         reqBodyDTO.setNeedLedger("00");

+ 7 - 0
fs-service-system/src/main/java/com/fs/store/service/impl/FsExpressServiceImpl.java

@@ -7,6 +7,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Pattern;
 
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -47,6 +48,8 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Base64Utils;
 
+import static com.fs.until.PhoneUtil.decryptPhone;
+
 /**
  * 快递公司Service业务层处理
  *
@@ -272,6 +275,10 @@ public class FsExpressServiceImpl implements IFsExpressService
 
             String lastFourNumber = "";
             if (order.getDeliverySn().equals(ShipperCodeEnum.SF.getValue())) {
+                Pattern PHONE_PATTERN = Pattern.compile("^1\\d{10}$");
+                if (PHONE_PATTERN.matcher(order.getUserPhone().trim()).matches()){
+                    order.setUserPhone(decryptPhone(order.getUserPhone()));
+                }
                 lastFourNumber = order.getUserPhone();
                 if (lastFourNumber.length() == 11) {
                     lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);

+ 10 - 0
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderServiceImpl.java

@@ -11,6 +11,7 @@ import java.time.OffsetDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 import cn.binarywang.wx.miniapp.api.WxMaService;
@@ -110,6 +111,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import static com.fs.store.constants.StoreConstants.DELIVERY;
+import static com.fs.until.PhoneUtil.encryptPhone;
 
 /**
  * 订单Service业务层处理
@@ -839,6 +841,10 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             storeOrder.setOrderCode(orderSn);
             storeOrder.setRealName(address.getRealName());
             storeOrder.setUserPhone(address.getPhone());
+            Pattern PHONE_PATTERN = Pattern.compile("^1\\d{10}$");
+            if (PHONE_PATTERN.matcher(storeOrder.getUserPhone().trim()).matches()){
+                storeOrder.setUserPhone(encryptPhone(storeOrder.getUserPhone()));
+            }
             storeOrder.setUserAddress(address.getProvince() + " " + address.getCity() +
                     " " + address.getDistrict() + " " + address.getDetail().trim());
             storeOrder.setCartId(cartIds);
@@ -1625,6 +1631,10 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             storeOrder.setOrderCode(orderSn);
             storeOrder.setRealName(address.getRealName());
             storeOrder.setUserPhone(address.getPhone());
+            Pattern PHONE_PATTERN = Pattern.compile("^1\\d{10}$");
+            if (PHONE_PATTERN.matcher(storeOrder.getUserPhone().trim()).matches()){
+                storeOrder.setUserPhone(encryptPhone(storeOrder.getUserPhone()));
+            }
             storeOrder.setUserAddress(address.getProvince() + " " + address.getCity() +
                     " " + address.getDistrict() + " " + address.getDetail());
 

+ 9 - 0
fs-service-system/src/main/java/com/fs/store/service/impl/FsUserServiceImpl.java

@@ -4,6 +4,7 @@ import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 import java.util.concurrent.CompletableFuture;
+import java.util.regex.Pattern;
 
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
@@ -51,6 +52,8 @@ import javax.annotation.PostConstruct;
 
 import static com.fs.store.enums.BillDetailEnum.CATEGORY_1;
 import static com.fs.store.enums.BillDetailEnum.CATEGORY_3;
+import static com.fs.until.PhoneUtil.decryptPhone;
+import static com.fs.until.PhoneUtil.encryptPhone;
 
 /**
  * 用户Service业务层处理
@@ -422,6 +425,12 @@ public class FsUserServiceImpl implements IFsUserService
         //写入
         user=new FsUser();
         user.setPhone(phoneNoInfo.getPhoneNumber());
+        logger.info("加密前的电话号码:" + phoneNoInfo.getPhoneNumber());
+        Pattern PHONE_PATTERN = Pattern.compile("^1\\d{10}$");
+        if (PHONE_PATTERN.matcher(phoneNoInfo.getPhoneNumber().trim()).matches()){
+            user.setPhone(encryptPhone(user.getPhone()));
+            logger.info("加密后的电话号码:" + user.getPhone());
+        }
         user.setNickname("微信用户");
         user.setStatus(1);
         user.setMaOpenId(session.getOpenid());

+ 294 - 0
fs-service-system/src/main/java/com/fs/until/PhoneUtil.java

@@ -0,0 +1,294 @@
+package com.fs.until;
+
+import cn.hutool.http.HttpException;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.utils.ParseUtils;
+import com.fs.common.utils.StringUtils;
+import com.fs.system.domain.SysConfig;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.util.Base64;
+
+import static com.fs.common.core.domain.AjaxResult.CODE_TAG;
+import static com.fs.common.core.domain.AjaxResult.DATA_TAG;
+
+@Slf4j
+@Component
+public class PhoneUtil {
+
+    /**
+     * 2025-9-3 需求替换新 key
+     */
+    private static String OLD_KEY = "2c8d1a7f4e9b3c6ae6d5c4b3a291f8c9";
+
+    private static String USE_KEY = "AESAabCdeREssREA";
+
+
+    //外部刷新方法
+    public static void refreshKeyExternal(SysConfig config) {
+        String configValue = config.getConfigValue();
+        if (null != configValue) {
+            JSONObject jsonObject = JSON.parseObject(configValue);
+            if (jsonObject.containsKey("useKey") && jsonObject.containsKey("oldKey")) {
+                USE_KEY = jsonObject.getString("useKey");
+                OLD_KEY = jsonObject.getString("oldKey");
+            }
+        }
+    }
+
+    /**
+     * 加密
+     */
+    public static String encryptPhone(String text) {
+
+        try {
+            String encryptedText = null;
+            String url = "http://172.16.0.114:8000/app/common/genEncryption";
+            // 构建请求体 JSON
+            JSONObject jsonBody = new JSONObject();
+            jsonBody.put("content", text);
+
+            String result = HttpRequest.post(url).body(jsonBody.toString()).execute().body();
+            //解析返回
+            AjaxResult ajaxResult = JSONUtil.toBean(result, AjaxResult.class);
+
+            //取值返回参数
+            Object codeValue = ajaxResult.get(CODE_TAG);
+            Object dataValue = ajaxResult.get(DATA_TAG);
+
+            //判断是否成功
+            if ("200".equals(String.valueOf(codeValue))) {
+                encryptedText = String.valueOf(dataValue);
+            } else {
+                log.error("请求失败,状态码: " + codeValue);
+                return "";
+            }
+            return encryptedText;
+        } catch (HttpException e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+
+
+    /**
+     * 解密
+     */
+    public static String decryptPhone(String encryptedText) {
+
+        try {
+            String text = null;
+            String url = "http://172.16.0.114:8000/app/common/genDecryption";
+            // 构建请求体 JSON
+            JSONObject jsonBody = new JSONObject();
+            jsonBody.put("content", encryptedText);
+
+            String result = HttpRequest.post(url).body(jsonBody.toString()).execute().body();
+            //解析返回
+            AjaxResult ajaxResult = JSONUtil.toBean(result, AjaxResult.class);
+
+            //取值返回参数
+            Object codeValue = ajaxResult.get(CODE_TAG);
+            Object dataValue = ajaxResult.get(DATA_TAG);
+
+            //判断是否成功
+            if ("200".equals(String.valueOf(codeValue))) {
+                text = String.valueOf(dataValue);
+            } else {
+                log.error("请求失败,状态码: " + codeValue);
+                return "";
+            }
+            return text;
+        } catch (HttpException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+
+    /**
+     * 用于查询 使用老的数据加密
+     *
+     * @param text
+     * @return
+     */
+    public static String encryptPhoneOldKey(String text) {
+        String encryptedText = null;
+        try {
+            SecretKeySpec secretKey = new SecretKeySpec(OLD_KEY.getBytes(), "AES");
+            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
+            // Encryption
+            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
+            byte[] encryptedBytes = cipher.doFinal(text.getBytes());
+            encryptedText = Base64.getEncoder().encodeToString(encryptedBytes);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return encryptedText;
+    }
+
+    //
+    public static void main(String[] args) {
+
+        String text = null;
+        String url = "http://172.16.0.114:8000/app/common/genEncryption";
+        // 构建请求体 JSON
+        JSONObject jsonBody = new JSONObject();
+        jsonBody.put("content", "17749925835");
+
+        String result = HttpRequest.post(url)
+                .body(jsonBody.toString())
+                .execute()
+                .body();
+        AjaxResult ajaxResult = JSONUtil.toBean(result, AjaxResult.class);
+        System.out.println("完整响应: " + ajaxResult);
+
+        Object codeValue = ajaxResult.get(CODE_TAG);
+        Object dataValue = ajaxResult.get(DATA_TAG);
+
+        System.out.println("code原始值: '" + codeValue + "'");
+        System.out.println("data原始值: '" + dataValue + "'");
+
+        // 使用 String.valueOf 确保类型安全
+        if ("200".equals(String.valueOf(codeValue))) {
+            text = String.valueOf(dataValue);
+            System.out.println("加密结果: " + text);
+        } else {
+            System.out.println("请求失败,状态码: " + codeValue);
+        }
+    }
+
+
+    /**
+     * 解密加*
+     */
+    public static String decryptPhoneMk(String encryptedText) {
+        String text = null;
+        try {
+            text = decryptPhone(encryptedText);
+            text = text.replaceAll("(\\d{3})\\d*(\\d{4})", "$1****$2");
+        } catch (Exception e) {
+            log.warn("decryptPhoneMk 解密失败 text: {}, msg: {}", encryptedText, e.getMessage(), e);
+            text = encryptedText;
+        }
+        return text;
+    }
+
+    public static String decryptAutoPhoneMk(String encryptedText) {
+        String text = null;
+        if (encryptedText != null && encryptedText != "") {
+            if (encryptedText.length() > 11) {
+                try {
+                    text = decryptPhone(encryptedText);
+                    text = text.replaceAll("(\\d{3})\\d*(\\d{4})", "$1****$2");
+                } catch (Exception e) {
+                    log.warn("decryptAutoPhoneMk 解密失败 text: {}, msg: {}", encryptedText, e.getMessage(), e);
+                    text = encryptedText;
+                }
+            } else {
+                text = ParseUtils.parsePhone(encryptedText);
+            }
+        }
+
+        return text;
+    }
+
+    /**
+     * 手机号加密 *
+     *
+     * @param text 手机号
+     * @return 加密后手机号
+     */
+    public static String hiddenPhone(String text) {
+        if (StringUtils.isBlank(text)) {
+            return text;
+        }
+
+        return "***********";
+    }
+
+    /**
+     * 显示前3位
+     *
+     * @param text 手机号
+     * @return 加密后手机号
+     */
+    public static String displayPre3Phone(String text) {
+        if (StringUtils.isBlank(text)) {
+            return text;
+        }
+
+        text = text.trim();
+        if (text.length() > 11) {
+            text = decryptPhone(text);
+        }
+
+        return text.replaceAll("(\\d{3})\\d*", "$1********");
+    }
+
+
+    /**
+     * 判断文本中是否存在手机号
+     *
+     * @param text 原始文本
+     * @return 是否存在手机号
+     */
+    private static boolean containsPhoneNumber(String text) {
+        if (text == null || text.trim().isEmpty()) {
+            return false;
+        }
+
+        // 手机号正则
+        String phoneRegex = "1[3-9]\\d{9}";
+        java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(phoneRegex);
+        java.util.regex.Matcher matcher = pattern.matcher(text);
+
+        return matcher.find();
+    }
+
+    private static final String PUBLIC_KEY_STR = "ylrz112233";
+
+    /**
+     * XOR 加密(返回 Base64)(对于解析后的电话明文加密,适用于前端解密)
+     *
+     * @param data 明文电话
+     * @return String 密文
+     */
+    public static String xorEncrypt(String data) {
+        byte[] dataBytes = data.getBytes(java.nio.charset.StandardCharsets.UTF_8);
+        byte[] keyBytes = PUBLIC_KEY_STR.getBytes(java.nio.charset.StandardCharsets.UTF_8);
+        byte[] result = new byte[dataBytes.length];
+        for (int i = 0; i < dataBytes.length; i++) {
+            result[i] = (byte) (dataBytes[i] ^ keyBytes[i % keyBytes.length]);
+        }
+        return Base64.getEncoder().encodeToString(result);
+    }
+
+
+    /**
+     * XOR 解密
+     *
+     * @param base64Str  Base64 编码的密文
+     * @param privateKey 私钥字符串(如 "ylrz987654321")
+     * @return 解密后的明文字符串
+     */
+    public static String xorDecrypt(String base64Str, String privateKey) {
+        // 1. Base64 解码为字节数组
+        byte[] encryptedBytes = Base64.getDecoder().decode(base64Str);
+        // 2. 私钥字符串转字节数组(UTF-8 编码)
+        byte[] keyBytes = privateKey.getBytes(java.nio.charset.StandardCharsets.UTF_8);
+        // 3. 逐字节异或
+        byte[] resultBytes = new byte[encryptedBytes.length];
+        for (int i = 0; i < encryptedBytes.length; i++) {
+            resultBytes[i] = (byte) (encryptedBytes[i] ^ keyBytes[i % keyBytes.length]);
+        }
+        // 4. 将字节数组按 UTF-8 解码为字符串
+        return new String(resultBytes, java.nio.charset.StandardCharsets.UTF_8);
+    }
+}

+ 15 - 0
fs-service-system/src/main/resources/mapper/store/FsUserMapper.xml

@@ -243,4 +243,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </delete>
 
+    <select id="getUserList" resultType="com.fs.store.domain.FsUser">
+        SELECT user_id, phone FROM fs_user WHERE user_id > #{lastId} ORDER BY user_id ASC LIMIT #{limit}
+    </select>
+
+    <update id="batchUpdatePhone" parameterType="java.util.List">
+        UPDATE fs_user
+        SET phone =
+        <foreach collection="list" item="item" open="CASE user_id " close="END" separator=" ">
+            WHEN #{item.userId} THEN #{item.phone}
+        </foreach>
+        WHERE user_id IN
+        <foreach collection="list" item="item" open="(" close=")" separator=",">
+            #{item.userId}
+        </foreach>
+    </update>
 </mapper>

+ 21 - 2
fs-user-app/src/main/java/com/fs/app/controller/WxUserController.java

@@ -29,6 +29,9 @@ import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
 import me.chanjar.weixin.common.error.WxErrorException;
 
 import java.util.Date;
+import java.util.regex.Pattern;
+
+import static com.fs.until.PhoneUtil.encryptPhone;
 
 /**
  * 微信小程序用户接口
@@ -54,6 +57,7 @@ public class WxUserController extends AppBaseController{
     @ApiOperation("登录")
     @PostMapping("/login")
     public R login( @RequestBody LoginMpWxParam param) {
+        Pattern PHONE_PATTERN = Pattern.compile("^1\\d{10}$");
         if (StringUtils.isBlank(param.getCode())) {
             return R.error("code不存在");
         }
@@ -67,8 +71,14 @@ public class WxUserController extends AppBaseController{
             FsUser user=userService.selectFsUserByMaOpenId(session.getOpenid());
             String ip = IpUtil.getRequestIp();
             if(user==null){
+                FsUser checkPhone = null;
+                //先看手机是否是11位,再加密查询
+                if (PHONE_PATTERN.matcher(phoneNoInfo.getPhoneNumber().trim()).matches()){
+                    String phone = encryptPhone(phoneNoInfo.getPhoneNumber());
+                    logger.info("登录,用户为空,电话明文:" + phoneNoInfo.getPhoneNumber() + "电话密文:" + phone);
+                    checkPhone = userService.selectFsUserByPhone(phone);
+                }
                 //查询手机号是否存在,如果存在,更新
-                FsUser checkPhone=userService.selectFsUserByPhone(phoneNoInfo.getPhoneNumber());
                 if(checkPhone!=null){
                     if(checkPhone.getMaOpenId()==null){
                         user=checkPhone;
@@ -82,7 +92,6 @@ public class WxUserController extends AppBaseController{
                     else{
                         throw new CustomException("此手机号已存在");
                     }
-
                 }
                 else{
                     //写入
@@ -96,6 +105,11 @@ public class WxUserController extends AppBaseController{
                     }
                     user.setUserCode(OrderUtils.genUserCode());
                     user.setPhone(phoneNoInfo.getPhoneNumber());
+                    logger.info("登录:手机存在电话明文:" + phoneNoInfo.getPhoneNumber());
+                    if (PHONE_PATTERN.matcher(phoneNoInfo.getPhoneNumber().trim()).matches()){
+                        user.setPhone(encryptPhone(phoneNoInfo.getPhoneNumber()));
+                        logger.info("登录:手机存在电话密文:" + user.getPhone());
+                    }
                     user.setUsername(phoneNoInfo.getPhoneNumber());
                     user.setNickname("微信用户");
                     user.setStatus(1);
@@ -109,6 +123,11 @@ public class WxUserController extends AppBaseController{
            else{
                FsUser userMap=new FsUser();
                userMap.setPhone(phoneNoInfo.getPhoneNumber());
+               logger.info("用户存在,电话明文:" + phoneNoInfo.getPhoneNumber());
+               if (PHONE_PATTERN.matcher(phoneNoInfo.getPhoneNumber().trim()).matches()){
+                   user.setPhone(encryptPhone(phoneNoInfo.getPhoneNumber()));
+                   logger.info("用户存在,电话密文::" + user.getPhone());
+               }
                userMap.setUserId(user.getUserId());
                userMap.setUpdateTime(new DateTime());
                userMap.setLastIp(ip);