Browse Source

二期 管家小程序

suntianwu 3 years atrás
parent
commit
0ca04c45b7

+ 13 - 0
src/main/java/com/care/bms/service/BmsSysUserService.java

@@ -149,6 +149,19 @@ public class BmsSysUserService{
      * @return
      */
     public boolean deleteById(Long id){
+        QueryWrapper<CareDevice> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(CareDevice::getChambId,id);
+        int cnt = careDeviceService.count(queryWrapper);
+        if(cnt > 0 ) {
+            return false;
+        }
+        QueryWrapper<CareEventOrderChamb> queryWrapper1 = new QueryWrapper<>();
+        queryWrapper1.lambda().eq(CareEventOrderChamb::getChambId,id);
+        int cnt1 = careEventOrderChambService.count(queryWrapper1);
+        if(cnt1 > 0 ) {
+            return false;
+        }
+
         return this.careSysUserService.removeById(id);
     }
 

+ 4 - 0
src/main/java/com/care/common/cache/RedisKeyConstant.java

@@ -53,4 +53,8 @@ public class RedisKeyConstant {
     // 频安保用户微信登录信息 2h
     public static final String PINANBAO_WX_LOGIN_INFO = "PINANBAO:WXLOGIN";
     public static final int PINANBAO_WX_LOGIN_INFO_TIME = 3600 * 2;
+
+    // 频安管家微信登录信息 2h
+    public static final String PINANSHOUHU_WX_LOGIN_INFO = "PINANSHOUHU:WXLOGIN";
+    public static final int PINANSHOUHU_WX_LOGIN_INFO_TIME = 3600 * 2;
 }

+ 1 - 1
src/main/java/com/care/common/entity/CareSysUser.java

@@ -57,7 +57,7 @@ public class CareSysUser implements Serializable {
     private String password;
 
 
-    @ApiModelProperty("姓名:M:男 W:女")
+    @ApiModelProperty("性别:M:男 W:女")
     @TableField("GENDER")
     private String gender;
 

+ 5 - 2
src/main/java/com/care/keeper/controller/KeeperEventApiController.java

@@ -94,14 +94,17 @@ public class KeeperEventApiController {
     }
 
     @GetMapping("/getEventInfo")
-    @ApiOperation(tags = {"事件处理"},value = "事件处理或者详情")
+    @ApiOperation(tags = {"事件处理"},value = "事件处理或者详情  --二期修改")
     public Result<Map<String,Object>> getEventInfo(@RequestParam("orderId") Long orderId){
         EventOrderVO eventOrderVO = this.keeperApiService.getEventInfo(orderId);
+        List<ChamberlainVO> chambList = this.keeperApiService.queryChambList(orderId);
         List<OrderOlderVO> olderVOList = this.keeperApiService.queryOrderOlderList(orderId);
         List<HouseContactVO> houseContactVOList = this.keeperApiService.queryContactByOrderId(orderId);
-        Map<String,Object> data = new HashMap<>(3);
+        Map<String,Object> data = new HashMap<>(4);
         //订单信息
         data.put("info",eventOrderVO);
+        //管家
+        data.put("chamb",chambList);
         //老人
         data.put("older",olderVOList);
          // 联系人

+ 53 - 8
src/main/java/com/care/keeper/controller/KeeperMemberApiController.java

@@ -1,21 +1,25 @@
 package com.care.keeper.controller;
 
 import cn.hutool.core.bean.BeanUtil;
-import com.care.common.entity.CareSysUser;
-import com.care.common.service.CareSysUserService;
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.care.common.entity.*;
+import com.care.common.service.*;
 import com.care.common.util.Result;
 import com.care.keeper.service.AbstractKeeperPassportService;
 import com.care.keeper.service.KeeperPassportService;
 import com.care.keeper.vo.KeeperInfoVO;
+import com.care.keeper.vo.OlderVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 描述:
@@ -37,12 +41,56 @@ public class KeeperMemberApiController {
     @Resource
     private AbstractKeeperPassportService abstractKeeperPassportService;
 
-    @ApiOperation(value = "获取基本信息", notes = "获取用户基本录信息")
+    @Resource
+    private CareStationService careStationService;
+    @Resource
+    private CareEventOrderChambService careEventOrderChambService;
+    @Resource
+    private CareDeviceService careDeviceService;
+    @Resource
+    private CareHouseOlderRelService careHouseOlderRelService;
+    @Resource
+    private CareOlderService careOlderService;
+
+
+    @ApiOperation(value = "获取基本信息", notes = "获取用户基本录信息 -- 二期修改")
     @PostMapping("detail/info")
     public Result<Object> detailInfo(@RequestHeader String token) {
-        KeeperInfoVO current = current(token);
+        KeeperInfoVO current = keeperPassportService.checkToken(token);
         CareSysUser member = careSysUserService.getById(current.getId());
         BeanUtil.copyProperties(member,current);
+        if(current.getStationId() != null) {
+            current.setStationName(careStationService.getById(current.getStationId()).getName());
+        }
+        //服务次数
+        QueryWrapper<CareEventOrderChamb> queryWrapper2 = new QueryWrapper<>();
+        queryWrapper2.lambda().eq(CareEventOrderChamb::getChambId,current.getId()).ne(CareEventOrderChamb::getStatus,"3");
+        current.setServeCount(this.careEventOrderChambService.count(queryWrapper2));
+
+        //老人列表
+        List<OlderVO> olderVOList = new ArrayList<>();
+        QueryWrapper<CareDevice> queryWrapper0 = new QueryWrapper<>();
+        queryWrapper0.lambda().eq(CareDevice::getChambId,current.getId());
+        List<CareDevice> listDev = this.careDeviceService.list(queryWrapper0);
+        if(CollUtil.isNotEmpty(listDev)){
+            listDev.forEach(item -> {
+                QueryWrapper<CareHouseOlderRel> queryWrapper = new QueryWrapper<>();
+                queryWrapper.lambda().eq(CareHouseOlderRel::getHouseId,item.getHouseId());
+                List<CareHouseOlderRel> listRel = careHouseOlderRelService.list(queryWrapper);
+                if(CollUtil.isNotEmpty(listRel)) {
+                    listRel.forEach(i->{
+                        CareOlder careOlder = this.careOlderService.getById(i.getOlderId());
+                        OlderVO olderVO = new OlderVO();
+                        BeanUtil.copyProperties(careOlder,olderVO);
+                        olderVOList.add(olderVO);
+                    });
+                }
+            });
+        }
+        if(CollUtil.isNotEmpty(olderVOList)){
+            current.setOlderVOList(olderVOList);
+        }
+
         return Result.success(current);
     }
 
@@ -59,8 +107,5 @@ public class KeeperMemberApiController {
         return Result.success(passportService.notMatchMemberField(token));
     }
 */
-    public KeeperInfoVO current(String token) {
-        return keeperPassportService.checkToken(token);
-    }
 
 }

+ 106 - 4
src/main/java/com/care/keeper/controller/KeeperPassportController.java

@@ -1,16 +1,21 @@
 package com.care.keeper.controller;
 
+import com.care.common.entity.CareSysUser;
+import com.care.common.service.CareSysUserService;
 import com.care.keeper.service.KeeperPassportService;
 import com.care.keeper.vo.KeeperInitParams;
+import com.care.common.service.SmsSendService;
 import com.care.common.util.CheckUtils;
 import com.care.common.util.Result;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+import io.swagger.annotations.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.Random;
+import java.util.concurrent.TimeUnit;
 
 @Api(tags = "登录")
 @RestController
@@ -20,8 +25,14 @@ public class KeeperPassportController {
 
     @Resource
     private KeeperPassportService keeperPassportService;
+    @Resource
+    private SmsSendService smsSendService;
+    @Resource
+    private CareSysUserService careSysUserService;
 
-    @ApiOperation(value = "小程序登录", notes = "小程序授权登录")
+    public final Cache<String, String> smsTimeoutCache = CacheBuilder.newBuilder().expireAfterWrite(5, TimeUnit.MINUTES).build();
+
+    @ApiOperation(value = "管家小程序登录", notes = "管家小程序登录,微信登录传参:loginType=wx,code; 密码登录:loginType=pwd, phone, password")
     @ApiParam(name = "params", value = "登录参数")
     @PostMapping("login")
     public Result<Object> login(@RequestBody KeeperInitParams params) {
@@ -40,6 +51,97 @@ public class KeeperPassportController {
     }
 
 
+    @ApiOperation(value = "管家小程序登录", notes = "微信登录解密手机号 --二期新增")
+    @PostMapping("decodePhoneNumber")
+    public Result<Object> decodePhoneNumber(@RequestParam(value = "code", required = true) String code,
+                                            @RequestParam(value = "encryptedData", required = true) String encryptedData,
+                                            @RequestParam(value = "iv", required = true) String iv) {
+        if (keeperPassportService.decodePhoneNumber(code,encryptedData,iv)){
+            return Result.success();
+        } else {
+            return Result.error("失败");
+        }
+
+    }
+    @ApiOperation(value = " 获取验证码", notes = "获取验证码 --二期新增")
+    @GetMapping("getVCode")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(paramType = "query", name = "phone", value = "电话号码"),
+            @ApiImplicitParam(paramType = "query", name = "type", value = "类型:1手机号注册,2密码重置,3修改注册手机号"),
+    })
+    public Result<String> getVCode(@RequestParam(value = "phone", required = true) String phone,
+                                   @RequestParam(value = "type", required = true) String type) {
+
+        String vcode = String.format("%04d",new Random().nextInt(9999));
+        boolean flag = false;
+        if("1".equals(type)){
+            flag = smsSendService.sendSmsCode4RegisterPhone(phone, vcode);
+        } else if("2".equals(type)){
+            flag = smsSendService.sendSmsCode4ModifyPassword(phone, vcode);
+        } else if("3".equals(type)){
+            flag = smsSendService.sendSmsCode4ModifyPhone(phone, vcode);
+        }
+
+        if (flag) {
+            smsTimeoutCache.put(phone, vcode);
+            return Result.success();
+        } else {
+            return Result.error("获取验证码失败");
+        }
+    }
+
+    @ApiOperation(value = "校验验证码", notes = "校验验证码 --二期新增")
+    @GetMapping("checkVCode")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(paramType = "query", name = "phone", value = "电话号码"),
+    })
+    public Result<String> checkVCode(@RequestParam(value = "phone", required = true) String phone,
+                                     @RequestParam(value = "vcode", required = true) String vcode) {
+        if(StringUtils.equalsIgnoreCase(vcode, smsTimeoutCache.getIfPresent(phone))){
+            return Result.success();
+        } else {
+            return Result.error("请输入正确的验证码");
+        }
+
+    }
+
+    @ApiOperation(value = "设置新密码", notes = "设置新密码, 传值:手机号,密码,确认密码,验证码")
+    @ApiParam(name = "params", value = "登录参数")
+    @PostMapping("changePwd")
+    public Result<Object> changePwd(@RequestBody KeeperInitParams params) {
+
+        if (StringUtils.isBlank(params.getPhone())) {
+            return Result.error("手机号码不能为空");
+        }
+        if (StringUtils.isBlank(params.getPassword())) {
+            return Result.error("请输入密码");
+        }
+        if (StringUtils.isBlank(params.getPasswordAgain())) {
+            return Result.error("请再次输入密码");
+        }
+        if (!params.getPassword().equals(params.getPasswordAgain())) {
+            return Result.error("两次输入密码不一致");
+        }
+        if (StringUtils.isBlank(params.getVcode())) {
+            return Result.error("验证码不能为空");
+        }
+        if (!StringUtils.equalsIgnoreCase(params.getVcode(), smsTimeoutCache.getIfPresent(params.getPhone()))) {
+            return Result.error("验证码无效");
+        }
+        CareSysUser careSysUser = careSysUserService.detailByPhone4Keeper(params.getPhone());
+        if (careSysUser == null) {
+            return Result.error("该手机号未注册");
+        }
+
+        boolean flag = keeperPassportService.changePwd(params.getPassword(), careSysUser.getId());
+        if (flag) {
+            return Result.success();
+        }
+
+        return Result.error("设置新密码失败");
+    }
+
+
     @ApiOperation(value = "小程序登出", notes = "小程序登出")
     @PostMapping("logout")
     public Result<Object>  logout(@RequestHeader String token) {

+ 59 - 16
src/main/java/com/care/keeper/service/AbstractKeeperPassportService.java

@@ -1,23 +1,28 @@
 package com.care.keeper.service;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.SecureUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.care.common.cache.RedisKeyConstant;
 import com.care.common.cache.RedisUtil;
-import com.care.common.entity.CareSysUser;
-import com.care.common.service.CareSysUserService;
+import com.care.common.entity.*;
+import com.care.common.service.*;
 import com.care.common.util.Result;
 import com.care.keeper.vo.KeeperInfoVO;
 import com.care.keeper.vo.KeeperInitParams;
+import com.care.keeper.vo.OlderVO;
 import com.google.common.collect.Maps;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 @Slf4j
@@ -26,43 +31,51 @@ public class AbstractKeeperPassportService {
 
     @Resource
     private RedisUtil redisUtil;
-
+    @Resource
+    private CareStationService careStationService;
+    @Resource
+    private CareEventOrderChambService careEventOrderChambService;
 
     @Resource
     private CareSysUserService careSysUserService;
-
+    @Resource
+    private CareDeviceService careDeviceService;
+    @Resource
+    private CareHouseOlderRelService careHouseOlderRelService;
+    @Resource
+    private CareOlderService careOlderService;
     public Result<Object> cache(KeeperInitParams params) {
         String token = IdUtil.fastUUID();
         // cache member
-        CareSysUser member = null;
+        CareSysUser sysUser = null;
 
         if ("wx".equalsIgnoreCase(params.getLoginType())) {
-            member = careSysUserService.detailByOpenid4Keeper(params.getOpenid());
-            if (member == null) {
-                member = careSysUserService.detailByPhone4Keeper(params.getPhone());
-                if (member == null) {
+            sysUser = careSysUserService.detailByOpenid4Keeper(params.getOpenid());
+            if (sysUser == null) {
+                sysUser = careSysUserService.detailByPhone4Keeper(params.getPhone());
+                if (sysUser == null) {
                     return Result.error("账号不存在!");
                 }
             }
         } else if ("pwd".equalsIgnoreCase(params.getLoginType())) {
-            member = careSysUserService.detailByPhone4Keeper(params.getPhone());
-            if (member == null) {
+            sysUser = careSysUserService.detailByPhone4Keeper(params.getPhone());
+            if (sysUser == null) {
                 return Result.error("账号密码不匹配");
             }
-            if (!StrUtil.equalsIgnoreCase(SecureUtil.md5(params.getPassword()), member.getPassword())) {
+            if (!StrUtil.equalsIgnoreCase(SecureUtil.md5(params.getPassword()), sysUser.getPassword())) {
                 return Result.error("账号密码不匹配");
             }
         }
-        if (StringUtils.isBlank(member.getOpenId()) && StringUtils.isNotBlank(params.getOpenid())) {
+        if (StringUtils.isBlank(sysUser.getOpenId()) && StringUtils.isNotBlank(params.getOpenid())) {
             UpdateWrapper<CareSysUser> careMemberInfoUpdateWrapper = new UpdateWrapper<>();
-            careMemberInfoUpdateWrapper.lambda().eq(CareSysUser::getId,member.getId()).set(CareSysUser::getOpenId,params.getOpenid());
+            careMemberInfoUpdateWrapper.lambda().eq(CareSysUser::getId,sysUser.getId()).set(CareSysUser::getOpenId,params.getOpenid());
             boolean bindFlag = this.careSysUserService.update(careMemberInfoUpdateWrapper);
             if (bindFlag) {
-                member.setOpenId(params.getOpenid());
+                sysUser.setOpenId(params.getOpenid());
             }
         }
         KeeperInfoVO keeperInfoVO = new KeeperInfoVO();
-        BeanUtil.copyProperties(member,keeperInfoVO);
+        BeanUtil.copyProperties(sysUser,keeperInfoVO);
         redisUtil.hset(RedisKeyConstant.PINANSHOUHU_LOGIN_INFO, token, keeperInfoVO, RedisKeyConstant.PINANSHOUHU_LOGIN_INFO_TIME);
 
         Map<String,Object> data = Maps.newHashMap();
@@ -78,6 +91,36 @@ public class AbstractKeeperPassportService {
             if (oldMemberInfoVo != null && member != null) {
                 KeeperInfoVO memberInfoVO = new KeeperInfoVO();
                 BeanUtil.copyProperties(member,memberInfoVO);
+                if(memberInfoVO.getStationId() != null) {
+                    memberInfoVO.setStationName(careStationService.getById(memberInfoVO.getStationId()).getName());
+                }
+                //服务次数
+                QueryWrapper<CareEventOrderChamb> queryWrapper2 = new QueryWrapper<>();
+                queryWrapper2.lambda().eq(CareEventOrderChamb::getChambId,memberInfoVO.getId()).ne(CareEventOrderChamb::getStatus,"3");
+                memberInfoVO.setServeCount(this.careEventOrderChambService.count(queryWrapper2));
+                //老人列表
+                List<OlderVO> olderVOList = new ArrayList<>();
+                QueryWrapper<CareDevice> queryWrapper0 = new QueryWrapper<>();
+                queryWrapper0.lambda().eq(CareDevice::getChambId,memberInfoVO.getId());
+                List<CareDevice> listDev = this.careDeviceService.list(queryWrapper0);
+                if(CollUtil.isNotEmpty(listDev)){
+                    listDev.forEach(item -> {
+                        QueryWrapper<CareHouseOlderRel> queryWrapper = new QueryWrapper<>();
+                        queryWrapper.lambda().eq(CareHouseOlderRel::getHouseId,item.getHouseId());
+                        List<CareHouseOlderRel> listRel = careHouseOlderRelService.list(queryWrapper);
+                        if(CollUtil.isNotEmpty(listRel)) {
+                            listRel.forEach(i->{
+                                CareOlder careOlder = this.careOlderService.getById(i.getOlderId());
+                                OlderVO olderVO = new OlderVO();
+                                BeanUtil.copyProperties(careOlder,olderVO);
+                                olderVOList.add(olderVO);
+                            });
+                        }
+                    });
+                }
+                if(CollUtil.isNotEmpty(olderVOList)){
+                    memberInfoVO.setOlderVOList(olderVOList);
+                }
                 redisUtil.hset(RedisKeyConstant.PINANSHOUHU_LOGIN_INFO, token, memberInfoVO, RedisKeyConstant.PINANSHOUHU_LOGIN_INFO_TIME);
                 return memberInfoVO;
             }

+ 86 - 0
src/main/java/com/care/keeper/service/KeeperApiService.java

@@ -22,6 +22,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -126,6 +127,91 @@ public class KeeperApiService {
         vo.setOrderTypeName(OrderTypeEnum.getCodeToName(vo.getOrderType()));
         return vo;
     }
+
+    /**
+     * 主管家改派管家列表查询
+     * @param orderId
+     * @return
+     */
+    public List<ChamberlainVO>  queryChambList(Long orderId){
+        List<ChamberlainVO> chambList = new ArrayList<>();
+
+        ChamberlainVO mainVO = null;
+        ChamberlainVO assignVO = null;
+
+        CareEventOrder order = this.careEventOrderService.getById(orderId);
+        CareDevice dev = this.careDeviceService.getById(order.getDevId());
+        if(dev != null){
+            CareSysUser careSysUser = this.careSysUserService.getById(dev.getChambId());
+            if (careSysUser != null) {
+                mainVO = new ChamberlainVO();
+                BeanUtil.copyProperties(careSysUser,mainVO);
+                mainVO.setIsMain(TrueFalseEnum.TRUE.getValue());
+                mainVO.setStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getStatus()));
+            }
+        }
+        CareEventOrderChamb careEventOrderChamb = this.careEventOrderChambService.getChambOrderByOrderId(orderId);
+        if(careEventOrderChamb != null) {
+            CareSysUser careSysUser = this.careSysUserService.getById(careEventOrderChamb.getChambId());
+            if(careSysUser != null){
+                assignVO = new ChamberlainVO();
+                BeanUtil.copyProperties(careSysUser,assignVO);
+                assignVO.setIsMain(TrueFalseEnum.FALSE.getValue());
+                assignVO.setStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getStatus()));
+            }
+        }
+
+        if (mainVO != null && assignVO != null) {
+            if(mainVO.getId().equals(assignVO.getId())){ //没有指派管家
+                if(ChambStatusEnum.BUSY.getValue().equals(mainVO.getStatus())){ //主状态是忙碌时拆分子状态
+                    if(ChambOrderStatusEnum.DOING.equals(careEventOrderChamb.getStatus())){
+                        mainVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中
+                    } else {
+                        mainVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌
+                    }
+                } else {//主状态不是忙碌时设置子状态和主状态相同
+                    mainVO.setSubStatus(mainVO.getStatus());
+                }
+                mainVO.setSubStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getSubStatus()));
+                chambList.add(mainVO);
+            } else{ //指派了管家
+                //设置主管家子状态和主状态相同:空闲、休假、忙碌
+                mainVO.setSubStatus(mainVO.getStatus());
+
+                //设置指派管家状态
+                if(ChambStatusEnum.BUSY.getValue().equals(assignVO.getStatus())) { //指派管家的主状态是忙碌时拆分子状态
+                    if(ChambOrderStatusEnum.DOING.equals(careEventOrderChamb.getStatus())){
+                        assignVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中
+                    } else {
+                        assignVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌
+                    }
+                } else {//指派管家的主状态不是忙碌时设置子状态和主状态相同
+                    assignVO.setSubStatus(assignVO.getStatus());
+                }
+                mainVO.setSubStatusDesc(ChambStatusEnum.getCodeToName(mainVO.getSubStatus()));
+                chambList.add(mainVO);
+                assignVO.setSubStatusDesc(ChambStatusEnum.getCodeToName(assignVO.getSubStatus()));
+                chambList.add(assignVO);
+            }
+        } else if(mainVO == null && assignVO != null) {
+            //设置指派管家状态
+            if(ChambStatusEnum.BUSY.getValue().equals(assignVO.getStatus())) { //指派管家的主状态是忙碌时拆分子状态
+                if(ChambOrderStatusEnum.DOING.equals(careEventOrderChamb.getStatus())){
+                    assignVO.setSubStatus(ChambSubStatusEnum.DOING.getValue());//处理中
+                } else {
+                    assignVO.setSubStatus(ChambSubStatusEnum.BUSY.getValue());//忙碌
+                }
+            } else {//指派管家的主状态不是忙碌时设置子状态和主状态相同
+                assignVO.setSubStatus(assignVO.getStatus());
+            }
+
+            assignVO.setSubStatusDesc(ChambStatusEnum.getCodeToName(assignVO.getSubStatus()));
+            chambList.add(assignVO);
+        }
+
+        return chambList;
+    }
+
     /**
      * 查询老人列表
      * @param orderId

+ 44 - 6
src/main/java/com/care/keeper/service/KeeperPassportService.java

@@ -2,35 +2,53 @@ package com.care.keeper.service;
 
 import com.care.common.cache.RedisKeyConstant;
 import com.care.common.cache.RedisUtil;
+import com.care.common.entity.CareSysUser;
 import com.care.common.exception.BDException;
+import com.care.common.service.CareSysUserService;
 import com.care.common.util.CheckUtils;
 import com.care.common.util.Result;
+import com.care.common.util.WxUtil;
 import com.care.keeper.vo.KeeperInfoVO;
 import com.care.keeper.vo.KeeperInitParams;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.digest.DigestUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
 
 @Slf4j
 @Service
-public class KeeperPassportService {
+public class KeeperPassportService extends AbstractKeeperPassportService{
 
     @Resource
     private RedisUtil redisUtil;
     @Resource
     private WxKeeperPassportService wxKeeperPassportService;
+   @Resource
+   private CareSysUserService careSysUserService;
 
     public Result<Object> login(KeeperInitParams params) {
 
         if ("wx".equalsIgnoreCase(params.getLoginType())) {
             CheckUtils.valueIsNull(params, "code");
+            Result<Object>  result = wxKeeperPassportService.login(params);
+            return result;
         } else if ("pwd".equalsIgnoreCase(params.getLoginType())) {
             CheckUtils.valueIsNull(params, "phone");
             CheckUtils.valueIsNull(params, "password");
+            CareSysUser careSysUser = careSysUserService.detailByPhone4Keeper(params.getPhone());
+            if (careSysUser == null){
+                return  Result.error("手机号没注册");
+            }
+            if (!DigestUtils.md5Hex(params.getPassword()).equals(careSysUser.getPassword())) {
+                return  Result.error("密码错误");
+            }
+            cache(params);
+            return Result.success();
         }
-        Result<Object>  result = wxKeeperPassportService.login(params);
-        return result;
+        return Result.error();
+
     }
 
     public void logout(String token) {
@@ -49,8 +67,28 @@ public class KeeperPassportService {
         return (KeeperInfoVO) redisUtil.hget(RedisKeyConstant.PINANSHOUHU_LOGIN_INFO, token);
     }
 
-    public boolean notMatchMemberField(String token) {
 
-        return false;
-    }
+     public Boolean changePwd(String password,Long userId) {
+         CareSysUser careSysUser = careSysUserService.getById(userId);
+         careSysUser.setPassword(DigestUtils.md5Hex(password));
+         return careSysUserService.updateById(careSysUser);
+     }
+
+     public Boolean decodePhoneNumber(String code, String encryptedData,String iv) {
+         KeeperInitParams params = (KeeperInitParams) redisUtil.hget(RedisKeyConstant.PINANSHOUHU_WX_LOGIN_INFO, code);
+         String sessionKey = params.getSessionKey();
+
+         String phone = WxUtil.getPhoneNumber(encryptedData,sessionKey,iv);
+        if (StringUtils.isEmpty(phone)) {
+            return false;
+        }
+         params.setPhone(phone);
+         CareSysUser careSysUser = careSysUserService.detailByPhone4Keeper(phone);
+         if (careSysUser == null) { //没注册
+             return false;
+         } else { //已经注册了
+             cache(params);
+             return true;
+         }
+     }
 }

+ 13 - 17
src/main/java/com/care/keeper/service/WxKeeperPassportService.java

@@ -1,11 +1,10 @@
 package com.care.keeper.service;
 
-import cn.hutool.http.HttpRequest;
-import cn.hutool.http.HttpResponse;
+
 import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
 import com.care.common.cache.RedisKeyConstant;
 import com.care.common.cache.RedisUtil;
+import com.care.common.util.HttpUtil;
 import com.care.common.util.Result;
 import com.care.keeper.config.KeeperWxConfig;
 import com.care.keeper.config.PlatformPinanshouhuConfig;
@@ -30,30 +29,27 @@ public class WxKeeperPassportService extends AbstractKeeperPassportService {
     Gson gson = new Gson();
 
     public Result<Object> login(KeeperInitParams params) {
-        /*WxConfig wxConfig = platformPinanbaoConfig.wxConfig();
+        KeeperWxConfig wxConfig = platformPinanshouhuConfig.keeperWxConfig();
         // 解析codeUrl
         String codeUrl = MessageFormat.format(wxConfig.getCodeUrl(), wxConfig.getAppId(), wxConfig.getSecret(), params.getCode());
         // 通过codeUrl获取openid
-        JSONObject jsonObject = this.httpGet(codeUrl);
+        JSONObject jsonObject = HttpUtil.httpGet(codeUrl);
         log.warn("-----jsonObject:[{}]", jsonObject);
 
         String openid = jsonObject.getStr("openid");
-        String sessionKey = jsonObject.getStr("session_key"); // TODO 暂时用不到
+        String sessionKey = jsonObject.getStr("session_key");
         log.warn("-----openid:[{}], session_key:[{}]", openid, sessionKey);
 
-        // TODO 测试阶段先注释掉
-        params.setOpenid(openid);*/
-        return cache(params);
+        KeeperInitParams keeperInitParams = new KeeperInitParams();
+        params.setLoginType("wx");
+        keeperInitParams.setOpenid(openid);
+        keeperInitParams.setSessionKey(sessionKey);
+        redisUtil.hset(RedisKeyConstant.PINANSHOUHU_WX_LOGIN_INFO, params.getCode(), keeperInitParams, RedisKeyConstant.PINANSHOUHU_WX_LOGIN_INFO_TIME);
+        return Result.success();
     }
 
-    private JSONObject httpGet(String url) {
-        HttpResponse response = HttpRequest.get(url).execute();
-        String json = response.charset("utf-8").body();
-        JSONObject jsonObject = JSONUtil.parseObj(json);
-        return jsonObject;
-    }
 
-    private String accessToken() {
+    public String accessToken() {
         KeeperWxConfig wxConfig = platformPinanshouhuConfig.keeperWxConfig();
         String access_token = (String) redisUtil.hget(RedisKeyConstant.WX_PINANSHOUHU_ACCESS_TOKEN, wxConfig.getAppId());
         if (access_token != null) {
@@ -67,7 +63,7 @@ public class WxKeeperPassportService extends AbstractKeeperPassportService {
         // 解析codeUrl
         String tokenUrl = MessageFormat.format(wxConfig.getTokenUrl(), wxConfig.getAppId(), wxConfig.getSecret());
         // 通过codeUrl获取openid
-        JSONObject jsonObject = this.httpGet(tokenUrl);
+        JSONObject jsonObject = HttpUtil.httpGet(tokenUrl);
         String access_token = jsonObject.getStr("access_token");
         redisUtil.hset(RedisKeyConstant.WX_PINANSHOUHU_ACCESS_TOKEN, wxConfig.getAppId(), access_token, RedisKeyConstant.WX_PINANSHOUHU_ACCESS_TOKEN_TIME);
         return access_token;

+ 6 - 0
src/main/java/com/care/keeper/vo/KeeperInfoVO.java

@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * 用户登录信息(CareMemberInfo)实体类
@@ -69,5 +70,10 @@ public class KeeperInfoVO implements Serializable {
     @ApiModelProperty("头像")
     private String profile;
 
+    @ApiModelProperty("服务次数")
+    private Integer serveCount;
+
+    @ApiModelProperty("服务用户列表")
+    private List<OlderVO> olderVOList;
 
 }

+ 9 - 1
src/main/java/com/care/keeper/vo/KeeperInitParams.java

@@ -15,6 +15,8 @@ public class KeeperInitParams implements Serializable {
     private String code;
     @ApiModelProperty(name = "openid", value = "平台标识")
     private String openid;
+    @ApiModelProperty(name = "sessionKey", value = "session_key")
+    private String sessionKey;
 
     @ApiModelProperty(name = "nickname", value = "昵称")
     private String nickname;
@@ -28,6 +30,12 @@ public class KeeperInitParams implements Serializable {
     @ApiModelProperty(name = "password", value = "密码")
     private String password;
 
-    @ApiModelProperty(name = "loginType", value = "登录方式")
+    @ApiModelProperty(name = "passwordAgain", value = "密码确认")
+    private String passwordAgain;
+
+
+    @ApiModelProperty(name = "vcode", value = "验证码")
+    private String vcode;
+    @ApiModelProperty(name = "loginType", value = "登录方式,微信:wx,密码:pwd")
     private String loginType;
 }

+ 83 - 0
src/main/java/com/care/keeper/vo/OlderVO.java

@@ -0,0 +1,83 @@
+package com.care.keeper.vo;
+
+import cn.hutool.core.date.DateUtil;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author: lilt
+ * @Date: 2021/5/29
+ * @Desc:
+ */
+@Data
+@ApiModel(value = "老人详细信息", description = "老人详细信息响应类")
+public class OlderVO {
+
+    private Long id;
+
+
+    @ApiModelProperty("机构ID")
+    private Long orgId;
+
+
+    @ApiModelProperty("服务站ID")
+    private Long stationId;
+
+    @ApiModelProperty("频安宝用户ID")
+    private Long memberId;
+
+
+    @ApiModelProperty("姓名")
+    private String name;
+
+
+    @ApiModelProperty("电话")
+    private String phone;
+
+
+    @ApiModelProperty("姓名:M:男 W:女")
+    private String gender;
+
+
+    @ApiModelProperty("生日")
+    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+    private Date birthday;
+
+
+    @ApiModelProperty("居住类别:1:独居 2:非独居 3:集中居住 4:其他")
+    private String liveType;
+
+    @ApiModelProperty("居住类别描述")
+    private String liveTypeDesc;
+
+    @ApiModelProperty("床号或者门牌号")
+    private String bedNumber;
+
+
+    @ApiModelProperty("安全级别: 1 :一级 2:二级 3: 三级")
+    private String safeLevel;
+
+
+
+    @ApiModelProperty("状态:  0:未联系  1已联系 ")
+    private Integer status;
+
+    @ApiModelProperty("老人联系状态描述")
+    private String statusDesc;
+
+    @ApiModelProperty("年龄")
+    private Integer age;
+
+    public Integer getAge(){
+        if (this.getBirthday() != null){
+            return DateUtil.ageOfNow(this.getBirthday());
+        }else{
+            return null;
+        }
+    }
+
+}