Browse Source

Merge branch 'develop' of http://132.232.206.88:3000/lift-manager/lift-server into feature-bieao

别傲 5 years ago
parent
commit
26c61567c9

+ 4 - 0
lift-business-service/src/main/java/cn/com/ty/lift/business/emergency/dto/RepairResponse.java

@@ -53,6 +53,10 @@ public class RepairResponse extends EmergencyRepair{
      * 电梯位置
      */
     private String devicePosition;
+    /**
+     * 电梯经纬度
+     */
+    private String coordinate;
 
     /**
      * 单位设备编号

+ 46 - 46
lift-business-service/src/main/java/cn/com/ty/lift/business/framework/job/BusinessJob.java

@@ -18,10 +18,10 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import java.util.stream.Collectors;
 
 /**
  * 定时任务
@@ -74,7 +74,7 @@ public class BusinessJob {
         long pageNum = 1;
         long pages;
         do {
-            IPage<InspectionTips> tips = pushUserService.pageMtCompanyByAnnualInspection(new Page<>(pageNum, 10), days);
+            IPage<InspectionTips> tips = pushUserService.pageMtCompanyByAnnualInspection(new Page<>(pageNum, 100), days);
             pages = tips.getPages();
             List<InspectionTips> records = tips.getRecords();
             if(records.isEmpty()){
@@ -98,66 +98,66 @@ public class BusinessJob {
             pageNum++;
         } while (pageNum <= pages);
     }
+
     /**
      * 年检到期提前15天提醒
      */
-//    @Scheduled(cron = "0/30 * * * * ?")
     @Scheduled(cron = "0 0 10 * * ?")
     public void inspection15days() {
         log.warn("Starting inspection 15days notice job...");
         sendAnnualInspection(15);
     }
 
-    @Scheduled(cron = "0 0 16 * * ?")
-    public void taskNotice() {
+    @Scheduled(cron = "0 10 16 * * ?")
+    public void taskTipsForRegion() {
         log.trace("Starting task report notice job...");
-        List<RepairTips> repairTips = pushUserService.listMtCompanyByEmergencyRepair();
+        List<RepairTips> repairTips = pushUserService.listMtCompanyByEmergencyRepairForRegion();
         if(repairTips.isEmpty()){
             return;
         }
-        //按维保公司分组
-        Map<Long, List<RepairTips>> companies = repairTips.stream().collect(Collectors.groupingBy(RepairTips::getMtCompanyId));
-        if(companies.isEmpty()){
+
+        Map<Long, TaskTips> taskTipsMap = new HashMap<>();
+        List<TaskTips> taskTips = pushUserService.listMaintainForEnterpriseAdmin();
+        for (TaskTips taskTip : taskTips) {
+            taskTipsMap.put(taskTip.getMtCompanyId(), taskTip);
+        }
+
+        //区域主管(项目所属)
+        for (RepairTips repairTip : repairTips) {
+            long mtCompanyId = repairTip.getMtCompanyId();
+            PushUserInfo director = pushUserService.listByUserId(mtCompanyId, repairTip.getDirectorId());
+            int maintain = 0;
+            TaskTips current = taskTipsMap.get(mtCompanyId);
+            if(Objects.nonNull(current)){
+                maintain = current.getMaintainTotal();
+            }
+            PushMessage.managerTaskForRegionChargerDaily(repairTip.getAreaName(), repairTip.getTotal(), repairTip.getFinish(), repairTip.getRepairing(), maintain).sendTokenOnPlatform(jmsMessagingTemplate, director);
+        }
+    }
+
+    @Scheduled(cron = "0 0 16 * * ?")
+    public void taskTipsForDirector() {
+        log.trace("Starting task report notice job...");
+        List<RepairTips> repairTips = pushUserService.listMtCompanyByEmergencyRepairForDirector();
+        if (repairTips.isEmpty()) {
             return;
         }
-        List<TaskTips> taskTips = pushUserService.listMaintainForEnterpriseAdmin();
-        Map<Long, List<TaskTips>> maintains = taskTips.stream().collect(Collectors.groupingBy(TaskTips::getMtCompanyId));
-        for (Map.Entry<Long, List<RepairTips>> entry : companies.entrySet()) {
-            int companyTotal = 0, companyFinish = 0, companyDoings = 0;
-            List<RepairTips> repairTipsList = entry.getValue();
-            if(IterUtil.isNotEmpty(repairTipsList)){
-                List<TaskTips> tipsList = maintains.get(repairTipsList.get(0).getMtCompanyId());
-                int maintain = 0;
-                if(IterUtil.isNotEmpty(tipsList)){
-                    maintain = tipsList.get(0).getMaintainTotal();
-                }
-                //按区域分组, 发给区域主管
-                Map<String, List<RepairTips>> areas = repairTipsList.stream().collect(Collectors.groupingBy(RepairTips::getAreaName));
-                for (Map.Entry<String, List<RepairTips>> listEntry : areas.entrySet()) {
-                    List<RepairTips> tips = listEntry.getValue();
-                    int total = 0, finish = 0, doings = 0;
-                    //循环同一个公司同一个区域下的数据
-                    for (RepairTips tip : tips) {
-                        total += tip.getTotal();
-                        if(tip.isRepairing()){
-                            doings += tip.getTotal();
-                        }else if(tip.isFinish()){
-                            finish += tip.getTotal();
-                        }
-                    }
-                    companyTotal += total;
-                    companyFinish += finish;
-                    companyDoings += doings;
 
-                    RepairTips repair = tips.get(0);
-                    //区域主管(项目所属)
-                    PushUserInfo director = pushUserService.listByUserId(repair.getMtCompanyId(), repair.getDirectorId());
-                    PushMessage.managerTaskForRegionChargerDaily(repair.getAreaName(), total, finish, doings, maintain).sendTokenOnPlatform(jmsMessagingTemplate, director);
-                }
-                //总经理
-                List<PushUserInfo> pushUserInfos = pushUserService.listHighDirector(repairTipsList.get(0).getMtCompanyId());
-                PushMessage.managerTaskForLeaderDaily(companyTotal, companyFinish, companyDoings, maintain).sendTokenOnPlatform(jmsMessagingTemplate, pushUserInfos);
+        Map<Long, TaskTips> taskTipsMap = new HashMap<>();
+        List<TaskTips> taskTips = pushUserService.listMaintainForEnterpriseAdmin();
+        for (TaskTips taskTip : taskTips) {
+            taskTipsMap.put(taskTip.getMtCompanyId(), taskTip);
+        }
+        //总经理
+        for (RepairTips repairTip : repairTips) {
+            long mtCompanyId = repairTip.getMtCompanyId();
+            List<PushUserInfo> pushUserInfos = pushUserService.listHighDirector(mtCompanyId);
+            int maintain = 0;
+            TaskTips current = taskTipsMap.get(mtCompanyId);
+            if(Objects.nonNull(current)){
+                maintain = current.getMaintainTotal();
             }
+            PushMessage.managerTaskForLeaderDaily(repairTip.getTotal(), repairTip.getFinish(), repairTip.getRepairing(), maintain).sendTokenOnPlatform(jmsMessagingTemplate, pushUserInfos);
         }
     }
 
@@ -167,7 +167,7 @@ public class BusinessJob {
         long pageNum = 1;
         long pages;
         do {
-            IPage<TaskTips> tipsIPage = pushUserService.pageRepairAndMaintainForClerk(new Page<>(pageNum, 20));
+            IPage<TaskTips> tipsIPage = pushUserService.pageRepairAndMaintainForClerk(new Page<>(pageNum, 100));
             pages = tipsIPage.getPages();
             List<TaskTips> records = tipsIPage.getRecords();
             if (!records.isEmpty()) {

+ 4 - 12
lift-business-service/src/main/java/cn/com/ty/lift/business/push/entity/RepairTips.java

@@ -33,15 +33,15 @@ public class RepairTips {
      * 区域
      */
     private String  areaName;
-    /**
-     * 急修状态
-     */
-    private int status;
     /**
      * 急修单总数
      */
     private int total;
 
+    private int repairing;
+
+    private int finish;
+
     /**
      * 返回区域主管和文员的id列表
      */
@@ -62,12 +62,4 @@ public class RepairTips {
         }
         return members;
     }
-
-    public boolean isRepairing(){
-        return this.status == 1;
-    }
-
-    public boolean isFinish(){
-        return this.status == 2;
-    }
 }

+ 3 - 1
lift-business-service/src/main/java/cn/com/ty/lift/business/push/mapper/PushUserMapper.java

@@ -35,7 +35,9 @@ public interface PushUserMapper extends BaseMapper<PushUserInfo> {
 
     IPage<InspectionTips> pageMtCompanyByAnnualInspection(IPage<InspectionTips> page, @Param("days") int days);
 
-    List<RepairTips> listMtCompanyByEmergencyRepair();
+    List<RepairTips> listMtCompanyByEmergencyRepairForRegion();
+
+    List<RepairTips> listMtCompanyByEmergencyRepairForDirector();
 
     IPage<TaskTips> pageRepairAndMaintainForClerk(IPage<TaskTips> page);
 

+ 6 - 2
lift-business-service/src/main/java/cn/com/ty/lift/business/push/service/PushUserService.java

@@ -77,8 +77,12 @@ public class PushUserService extends ServiceImpl<PushUserMapper, PushUserInfo> {
     /**
      * 查询有急修的维保公司
      */
-    public List<RepairTips> listMtCompanyByEmergencyRepair(){
-        return baseMapper.listMtCompanyByEmergencyRepair();
+    public List<RepairTips> listMtCompanyByEmergencyRepairForDirector(){
+        return baseMapper.listMtCompanyByEmergencyRepairForDirector();
+    }
+
+    public List<RepairTips> listMtCompanyByEmergencyRepairForRegion(){
+        return baseMapper.listMtCompanyByEmergencyRepairForRegion();
     }
 
     public IPage<TaskTips> pageRepairAndMaintainForClerk(IPage<TaskTips> page){

+ 20 - 18
lift-business-service/src/main/resources/mapper/emergency/EmergencyRepairMapper.xml

@@ -60,6 +60,7 @@
 		<result column="lift_category" property="liftCategory" jdbcType="INTEGER" />
         <result column="lift_type" property="liftType" jdbcType="INTEGER" />
 		<result column="device_position" property="devicePosition" jdbcType="VARCHAR" />
+        <result column="coordinate" property="coordinate" jdbcType="VARCHAR" />
 		<result column="create_name" property="createName" jdbcType="VARCHAR" />
 		<result column="worker_name" property="workerName" jdbcType="VARCHAR" />
         <result column="worker_mobile" property="workerMobile" jdbcType="VARCHAR" />
@@ -86,6 +87,7 @@
                 li.lift_type,
 				li.use_company_code,
 				li.device_position,
+                li.coordinate,
 				pr.project_name,
                 pr.project_code,
                 pr.address AS project_address,
@@ -133,28 +135,28 @@
     <select id="pageByCondition" resultMap="BaseResultMap" parameterType="cn.com.ty.lift.business.emergency.dto.RepairRequest" >
         SELECT
             er.*,
-			li.registration_code,
-			li.device_position,
+            li.registration_code,
+            li.device_position,
             li.category AS lift_category,
             li.lift_type,
-			li.use_company_code,
+            li.use_company_code,
             pr.project_name,
             pr.project_code,
             pr.address AS project_address,
             re.area_name,
-			ui.name AS worker_name,
+            ui.name AS worker_name,
             ui.mobile AS worker_mobile,
-			TimeStampDiff(SECOND ,er.stop_date,er.recovery_date) * 1000 AS repair_diff
+            TimeStampDiff(SECOND ,er.stop_date,er.recovery_date) * 1000 AS repair_diff
         FROM
             emergency_repair er
-		LEFT JOIN project pr ON er.project_id = pr.id AND pr.mt_company_id = er.mt_company_id
-		LEFT JOIN region re ON pr.region_id = re.id
-		LEFT JOIN lift li ON er.lift_id = li.id
-		LEFT JOIN user_info ui ON ui.user_id = er.worker_id1
+            LEFT JOIN project pr ON er.project_id = pr.id AND pr.mt_company_id = er.mt_company_id
+            LEFT JOIN region re ON pr.region_id = re.id
+            LEFT JOIN lift li ON er.lift_id = li.id
+            LEFT JOIN user_info ui ON ui.user_id = er.worker_id1
         <where>
-			<if test="cond.mtCompanyId != null and cond.mtCompanyId > 0">
-				AND er.mt_company_id = #{cond.mtCompanyId}
-			</if>
+            <if test="cond.mtCompanyId != null and cond.mtCompanyId > 0">
+                AND er.mt_company_id = #{cond.mtCompanyId}
+            </if>
             <if test="cond.projectId != null and cond.projectId > 0">
                 AND pr.id = #{cond.projectId}
             </if>
@@ -173,12 +175,12 @@
             <if test="cond.status != null">
                 AND er.status = #{cond.status}
             </if>
-			<if test="cond.source != null">
-				AND er.source = #{cond.source}
-			</if>
-			<if test="cond.info != null and cond.info != ''">
-				AND li.registration_code LIKE concat('%',#{cond.info},'%')
-			</if>
+            <if test="cond.source != null">
+                AND er.source = #{cond.source}
+            </if>
+            <if test="cond.info != null and cond.info != ''">
+                AND li.registration_code LIKE concat('%',#{cond.info},'%')
+            </if>
         </where>
     </select>
 

+ 74 - 21
lift-business-service/src/main/resources/mapper/push/PushUserMapper.xml

@@ -186,30 +186,83 @@
             AND li.annual_inspection_date >= CURDATE()
     </select>
 
-    <select id="listMtCompanyByEmergencyRepair" resultType="cn.com.ty.lift.business.push.entity.RepairTips">
+    <select id="listMtCompanyByEmergencyRepairForRegion" resultType="cn.com.ty.lift.business.push.entity.RepairTips">
         SELECT
-            mc.id AS mt_company_id,
-            er.`status`,
-            re.area_name,
-            re.user_id AS director_id,
-            re.clerk,
-            count(*) AS total
+            t.mt_company_id,
+            t.area_name,
+            t.director_id,
+            t.clerk,
+            SUM(t.total) AS total,
+            SUM( CASE t.STATUS WHEN '1' THEN t.total ELSE 0 END ) AS repairing,
+            SUM( CASE t.STATUS WHEN '2' THEN t.total ELSE 0 END ) AS finish
         FROM
-            maintenance_company mc
-            LEFT JOIN emergency_repair er ON er.mt_company_id = mc.id
-            LEFT JOIN project_lift_relevance plr ON plr.project_id = er.project_id AND plr.mt_company_id = er.mt_company_id
-            LEFT JOIN project pr ON pr.id = er.project_id
-            LEFT JOIN region re ON pr.region_id = re.id
-        WHERE
-            er.id > 0
-            AND re.id > 0
-            AND TO_DAYS(er.create_date) = TO_DAYS(NOW())
+            (
+                SELECT
+                    mc.id AS mt_company_id,
+                    er.`status`,
+                    re.area_name,
+                    re.user_id AS director_id,
+                    re.clerk,
+                    count( * ) AS total
+                FROM
+                    maintenance_company mc
+                    LEFT JOIN emergency_repair er ON er.mt_company_id = mc.id
+                    LEFT JOIN project_lift_relevance plr ON plr.project_id = er.project_id
+                                                            AND plr.mt_company_id = er.mt_company_id
+                    LEFT JOIN project pr ON pr.id = er.project_id
+                    LEFT JOIN region re ON pr.region_id = re.id
+                WHERE
+                    er.id > 0
+                    AND re.id > 0
+                    AND TO_DAYS( er.create_date ) = TO_DAYS( NOW( ) )
+                GROUP BY
+                    mc.id,
+                    re.id,
+                    er.`status`
+                HAVING
+                    count( * ) > 0
+            ) t
+        GROUP BY
+            t.mt_company_id,t.director_id
+    </select>
+
+    <select id="listMtCompanyByEmergencyRepairForDirector" resultType="cn.com.ty.lift.business.push.entity.RepairTips">
+        SELECT
+            t.mt_company_id,
+            t.area_name,
+            t.director_id,
+            t.clerk,
+            SUM(t.total) AS total,
+            SUM( CASE t.STATUS WHEN '1' THEN t.total ELSE 0 END ) AS repairing,
+            SUM( CASE t.STATUS WHEN '2' THEN t.total ELSE 0 END ) AS finish
+        FROM
+            (
+                SELECT
+                    mc.id AS mt_company_id,
+                    er.`status`,
+                    re.area_name,
+                    re.user_id AS director_id,
+                    re.clerk,
+                    count( * ) AS total
+                FROM
+                    maintenance_company mc
+                    LEFT JOIN emergency_repair er ON er.mt_company_id = mc.id
+                    LEFT JOIN project_lift_relevance plr ON plr.project_id = er.project_id AND plr.mt_company_id = er.mt_company_id
+                    LEFT JOIN project pr ON pr.id = er.project_id
+                    LEFT JOIN region re ON pr.region_id = re.id
+                WHERE
+                    er.id > 0
+                    AND re.id > 0
+                    AND TO_DAYS( er.create_date ) = TO_DAYS( NOW( ) )
+                GROUP BY
+                    mc.id,
+                    re.id,
+                    er.`status`
+                HAVING
+                    count( * ) > 0
+            ) t
         GROUP BY
-            mc.id,
-            re.id,
-            er.`status`
-        HAVING
-            count(*) > 0;
+            t.mt_company_id
     </select>
 
     <select id="pageRepairAndMaintainForClerk" resultType="cn.com.ty.lift.business.push.entity.TaskTips">

+ 0 - 5
lift-common/src/main/java/cn.com.ty.lift.common/constants/WebSocketConstants.java

@@ -12,11 +12,6 @@ public class WebSocketConstants {
      */
     public static final String PUSH_MESSAGE_TO_PC = "pushMessageToPC";
 
-    /**
-     * 推送当前用户信息
-     */
-    public static final String CURRENT_TIMEY_USER = "currentTimeyUser";
-
     /**
      * 查看标识 已经查看
      */

+ 0 - 25
lift-common/src/main/java/cn.com.ty.lift.common/model/TimeyUser.java

@@ -1,25 +0,0 @@
-package cn.com.ty.lift.common.model;
-
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * @author huangyuan
- * @date 2019-12-22
- * @description 实时消息用户信息类
- */
-@Data
-public class TimeyUser implements Serializable {
-
-    private static final long serialVersionUID = 4125096758372084309L;
-
-    /**
-     * 用户id
-     */
-    private Long userId;
-    /**
-     * 用户昵称
-     */
-    private String userName;
-}

+ 2 - 18
lift-push/src/main/java/cn/com/ty/lift/push/websocket/config/WebSocketInterceptor.java

@@ -1,15 +1,11 @@
 package cn.com.ty.lift.push.websocket.config;
 
-import cn.com.ty.lift.common.constants.ApiConstants;
-import cn.com.ty.lift.common.constants.WebSocketConstants;
-import cn.com.ty.lift.common.model.TimeyUser;
 import org.springframework.http.server.ServerHttpRequest;
 import org.springframework.http.server.ServerHttpResponse;
 import org.springframework.http.server.ServletServerHttpRequest;
 import org.springframework.web.socket.WebSocketHandler;
 import org.springframework.web.socket.server.HandshakeInterceptor;
 
-import javax.servlet.http.HttpSession;
 import java.util.Map;
 
 public class WebSocketInterceptor implements HandshakeInterceptor {
@@ -22,12 +18,7 @@ public class WebSocketInterceptor implements HandshakeInterceptor {
                                    WebSocketHandler wsHandler, Map<String, Object> map) {
 
         if (request instanceof ServletServerHttpRequest) {
-            ServletServerHttpRequest serverHttpRequest = (ServletServerHttpRequest) request;
-            HttpSession session = serverHttpRequest.getServletRequest().getSession();
-            TimeyUser timeyUser = (TimeyUser) session.getAttribute(WebSocketConstants.CURRENT_TIMEY_USER);
-            if (timeyUser != null) {
-                map.put(ApiConstants.CURRENT_USER_ID, timeyUser.getUserId());
-            }
+            System.out.println("进入成功");
         }
         return true;
     }
@@ -35,14 +26,7 @@ public class WebSocketInterceptor implements HandshakeInterceptor {
     @Override
     public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
                                Exception exception) {
-        ServletServerHttpRequest serverHttpRequest = (ServletServerHttpRequest) request;
-        HttpSession session = serverHttpRequest.getServletRequest().getSession();
-        TimeyUser timeyUser = (TimeyUser) session.getAttribute(WebSocketConstants.CURRENT_TIMEY_USER);
-        if (timeyUser != null) {
-            System.out.println("用户" + timeyUser.getUserName() + "连接进入系统");
-        } else {
-            System.out.println("当前连接为空");
-        }
+        System.out.println("进入成功");
     }
 
 }

+ 16 - 0
lift-system-service/src/main/java/cn/com/ty/lift/system/user/controller/LoginController.java

@@ -73,6 +73,22 @@ public class LoginController {
         return restResponse;
     }
 
+    /**
+     * @param userRequest mobile 用户手机号
+     * @return
+     * @description app 卫星登录绑定用户手机号
+     * @date 2020/5/7 10:43 上午
+     */
+    @PostMapping("/appBindMobile")
+    public RestResponse appBindMobile(HttpServletRequest request, @RequestBody UserRequest userRequest) {
+        RestResponse restResponse = judgeAuthCode(userRequest, WxConstants.APP_LOGIN);
+        if (restResponse == null) {
+            //校验通过,用户绑定手机号
+            return loginService.appBindMobile(request, userRequest);
+        }
+        return restResponse;
+    }
+
     /**
      * @param
      * @return

+ 8 - 0
lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/ILoginService.java

@@ -81,4 +81,12 @@ public interface ILoginService {
      * @date 2020/4/27 2:39 下午
      */
     RestResponse bindMobile(HttpServletRequest request, UserRequest userRequest);
+
+    /**
+     * @param userRequest mobile 用户手机号
+     * @return
+     * @description app 卫星登录绑定用户手机号
+     * @date 2020/5/7 10:43 上午
+     */
+    RestResponse appBindMobile(HttpServletRequest request, UserRequest userRequest);
 }

+ 36 - 16
lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/impl/LoginService.java

@@ -2,8 +2,6 @@ package cn.com.ty.lift.system.user.service.impl;
 
 import cn.com.ty.lift.common.aliservice.constants.AliConstants;
 import cn.com.ty.lift.common.constants.ApiConstants;
-import cn.com.ty.lift.common.constants.WebSocketConstants;
-import cn.com.ty.lift.common.model.TimeyUser;
 import cn.com.ty.lift.common.utils.ProjectUtils;
 import cn.com.ty.lift.system.settings.dao.entity.MaintenanceCompany;
 import cn.com.ty.lift.system.settings.service.IMaintenanceCompanyService;
@@ -184,8 +182,7 @@ public class LoginService implements ILoginService {
         String newPassword = PasswordUtils.generatePassword(userRequest.getPassword(), salt);
         userAccount.setPassword(newPassword);
         userAccountService.updateById(userAccount);
-        redisTemplate.delete(userRequest.getToken());
-        this.blankingUserInfoIntoRedis(userRequest.getMobile(), userRequest.getToken(),session);
+        this.blankingUserInfoIntoRedis(userRequest.getMobile(), userRequest.getToken(), session);
         return RestResponse.success(null, ApiConstants.RESULT_SUCCESS, "重置密码成功");
     }
 
@@ -210,7 +207,7 @@ public class LoginService implements ILoginService {
     @Override
     public RestResponse wxLogin(HttpServletRequest request, UserRequest userRequest) {
         //通过授权码获取用户openId
-        String openId = userRequest.getAuthCode();
+        String openId = userRequest.getWeChatOpenId();
         UserAccount userAccount = userAccountService.getOne(new QueryWrapper<UserAccount>()
                 .eq("wechat_open_id", openId)
         );
@@ -228,7 +225,7 @@ public class LoginService implements ILoginService {
     @Override
     public RestResponse appletLogin(HttpServletRequest request, UserRequest userRequest) {
         //通过授权码获取用户openId
-        String openId = userRequest.getAuthCode();
+        String openId = userRequest.getWeChatOpenId();
         UserAccount userAccount = userAccountService.getOne(new QueryWrapper<UserAccount>()
                 .eq("applet_open_id", openId)
         );
@@ -246,10 +243,8 @@ public class LoginService implements ILoginService {
 
     @Override
     public RestResponse bindMobile(HttpServletRequest request, UserRequest userRequest) {
-        if (StringUtils.isBlank(userRequest.getMobile())) {
-            return RestResponse.fail(ApiConstants.RESULT_ERROR, "手机号为空无法绑定");
-        }
-        RestResponse restResponse = verifySmsCode(userRequest.getMobile(), userRequest.getInputSmsCode());
+        //校验手机号和短信验证码
+        RestResponse restResponse = checkMobileAndSmsCode(userRequest);
         if (restResponse != null) {
             return restResponse;
         }
@@ -267,6 +262,32 @@ public class LoginService implements ILoginService {
         return RestResponse.success(userResponse, ApiConstants.RESULT_SUCCESS, "绑定成功");
     }
 
+    @Override
+    public RestResponse appBindMobile(HttpServletRequest request, UserRequest userRequest) {
+        //校验手机号和短信验证码
+        RestResponse restResponse = checkMobileAndSmsCode(userRequest);
+        if (restResponse != null) {
+            return restResponse;
+        }
+        UserAccount userAccount = userAccountService.getByMobile(userRequest.getMobile());
+        if (userAccount == null) {
+            return RestResponse.fail(ApiConstants.RESULT_ERROR, "当前手机号尚未注册,请先注册再绑定");
+        }
+        //通过授权码获取用户openId
+        String openId = userRequest.getWeChatOpenId();
+        userAccount.setWechatOpenId(openId);
+        userAccountService.save(userAccount);
+        UserResponse userResponse = initLoginInfo(request, userRequest);
+        return RestResponse.success(userResponse, ApiConstants.RESULT_SUCCESS, "绑定手机号成功");
+    }
+
+    private RestResponse checkMobileAndSmsCode(UserRequest userRequest) {
+        if (StringUtils.isBlank(userRequest.getMobile())) {
+            return RestResponse.fail(ApiConstants.RESULT_ERROR, "手机号为空无法绑定");
+        }
+        return verifySmsCode(userRequest.getMobile(), userRequest.getInputSmsCode());
+    }
+
     @Override
     public RestResponse verifySmsCode(String mobile, String inputSmsCode) {
         Object smsCode = redisTemplate.opsForValue().get(mobile + AliConstants.SmsConstants.SMS_CODE_FIELD);
@@ -284,7 +305,9 @@ public class LoginService implements ILoginService {
     public void blankingUserInfoIntoRedis(String mobile, String token, HttpSession session) {
         String mobileUserInfo = mobile + ApiConstants.UserConstants.USER_INFO_MOBILE;
         sessionRepository.deleteById(session.getId());
-        redisTemplate.delete(token);
+        if (StringUtils.isNotBlank(token)) {
+            redisTemplate.delete(token);
+        }
         redisTemplate.delete(mobileUserInfo + ApiConstants.ACCESS_TYPE_PC);
         redisTemplate.delete(mobileUserInfo + ApiConstants.ACCESS_TYPE_APP);
         redisTemplate.delete(mobileUserInfo + ApiConstants.ACCESS_TYPE_PUBLIC);
@@ -301,11 +324,6 @@ public class LoginService implements ILoginService {
         HttpSession session = request.getSession();
         //获取用户信息
         UserResponse userResponse = userService.getLoginUserInfo(userRequest.getUserId());
-        //将消息推送信息放入session中
-        TimeyUser timeyUser = new TimeyUser();
-        timeyUser.setUserId(userResponse.getUserId());
-        timeyUser.setUserName(userResponse.getName());
-        session.setAttribute(WebSocketConstants.CURRENT_TIMEY_USER, timeyUser);
         //将当前用户id放入session中
         session.setAttribute(ApiConstants.CURRENT_USER_ID, userResponse.getUserId());
         //将当前公司id放入session中
@@ -465,6 +483,8 @@ public class LoginService implements ILoginService {
         setUserInfoToSession(request, userResponse);
         //添加登录记录
         userLoginService.saveLoginInfo(request, userAccount.getUserId());
+        //更新用户信息
+        userAccountService.save(userAccount);
     }
 
     /**