lilt085163@126.com 3 rokov pred
rodič
commit
2da3669452
49 zmenil súbory, kde vykonal 1793 pridanie a 76 odobranie
  1. 7 2
      src/main/java/com/care/bms/controller/EventHandleController.java
  2. 25 15
      src/main/java/com/care/bms/service/BmsEventOrderService.java
  3. 0 1
      src/main/java/com/care/client/controller/ContactApiController.java
  4. 0 2
      src/main/java/com/care/client/controller/EventApiController.java
  5. 17 1
      src/main/java/com/care/client/controller/HouseApiController.java
  6. 10 3
      src/main/java/com/care/client/controller/MemberApiController.java
  7. 17 3
      src/main/java/com/care/client/service/AbstractPassportService.java
  8. 42 1
      src/main/java/com/care/client/service/PinanbaoService.java
  9. 2 2
      src/main/java/com/care/client/service/WxPassportService.java
  10. 2 1
      src/main/java/com/care/client/vo/MemberInfoVO.java
  11. 13 3
      src/main/java/com/care/common/cache/RedisKeyConstant.java
  12. 21 0
      src/main/java/com/care/common/config/SwaggerConfig.java
  13. 14 4
      src/main/java/com/care/common/entity/CareEventOrderChamb.java
  14. 12 2
      src/main/java/com/care/common/entity/CareMemberInfo.java
  15. 7 2
      src/main/java/com/care/common/entity/CareOlder.java
  16. 14 4
      src/main/java/com/care/common/entity/CareSysUser.java
  17. 45 0
      src/main/java/com/care/common/enums/ChambOrderStatusEnum.java
  18. 27 0
      src/main/java/com/care/common/mapper/CareEventOrderChambMapper.java
  19. 2 1
      src/main/java/com/care/common/mapper/CareSysUserMapper.java
  20. 28 0
      src/main/java/com/care/common/service/CareEventOrderChambService.java
  21. 13 0
      src/main/java/com/care/common/service/CareSysUserService.java
  22. 1 1
      src/main/java/com/care/common/service/SmsSendService.java
  23. 62 0
      src/main/java/com/care/common/service/impl/CareEventOrderChambServiceImpl.java
  24. 1 2
      src/main/java/com/care/common/service/impl/CareEventOrderServiceImpl.java
  25. 27 8
      src/main/java/com/care/common/service/impl/CareSysUserServiceImpl.java
  26. 35 2
      src/main/java/com/care/common/service/impl/SmsSendServiceImpl.java
  27. 28 9
      src/main/java/com/care/common/util/SmsUtil.java
  28. 90 0
      src/main/java/com/care/common/vo/event/ChambEventOrderVO.java
  29. 1 1
      src/main/java/com/care/common/vo/event/EventOrderVO.java
  30. 13 0
      src/main/java/com/care/keeper/config/KeeperWxConfig.java
  31. 21 0
      src/main/java/com/care/keeper/config/PlatformPinanshouhuConfig.java
  32. 200 0
      src/main/java/com/care/keeper/controller/KeeperEventApiController.java
  33. 66 0
      src/main/java/com/care/keeper/controller/KeeperMemberApiController.java
  34. 49 0
      src/main/java/com/care/keeper/controller/KeeperPassportController.java
  35. 87 0
      src/main/java/com/care/keeper/service/AbstractKeeperPassportService.java
  36. 338 0
      src/main/java/com/care/keeper/service/KeeperApiService.java
  37. 56 0
      src/main/java/com/care/keeper/service/KeeperPassportService.java
  38. 76 0
      src/main/java/com/care/keeper/service/WxKeeperPassportService.java
  39. 40 0
      src/main/java/com/care/keeper/vo/DeviceMonitorVO.java
  40. 73 0
      src/main/java/com/care/keeper/vo/HouseContactVO.java
  41. 73 0
      src/main/java/com/care/keeper/vo/KeeperInfoVO.java
  42. 33 0
      src/main/java/com/care/keeper/vo/KeeperInitParams.java
  43. 2 2
      src/main/resources/application-dev.properties
  44. 29 0
      src/main/resources/application-prod.properties
  45. 15 1
      src/main/resources/application.properties
  46. 41 1
      src/main/resources/mybatis/CareEventOrderChambMapper.xml
  47. 9 0
      src/main/resources/mybatis/CareEventOrderMapper.xml
  48. 0 1
      src/main/resources/mybatis/CareOlderMapper.xml
  49. 9 1
      src/main/resources/mybatis/CareSysUserMapper.xml

+ 7 - 2
src/main/java/com/care/bms/controller/EventHandleController.java

@@ -188,8 +188,13 @@ public class EventHandleController {
     public Result<Object> sendSms(HttpServletRequest request,@RequestHeader("token") String token,
                                   @PathVariable("orderContactId") Long orderContactId){
         UserLogindConvertVO loginUser = WebPageUtils.getCurrentLoginedUser(request);
-        this.bmsEventOrderService.sendSmsToLianxiren(orderContactId);
-        return  Result.success("发送短信成功!");
+        boolean flag = this.bmsEventOrderService.sendSmsToLianxiren(orderContactId);
+        if (flag){
+           return Result.success("发送短信成功!");
+        }else {
+            return  Result.error("发送短信失败!");
+        }
+
     }
     @GetMapping("/getCallRadio/{hisId}")
     @ApiOperation(tags = {"事件处理"},value = "获取通话录音")

+ 25 - 15
src/main/java/com/care/bms/service/BmsEventOrderService.java

@@ -199,7 +199,6 @@ public class BmsEventOrderService {
     public List<OrderOlderVO>  queryOrderOlderList(Long orderId){
         List<OrderOlderVO> orderOlderVOList = Lists.newArrayList();
         CareEventOrder order = this.careEventOrderService.getById(orderId);
-        OrderOlderVO orderOlderVo = new OrderOlderVO();
         QueryWrapper<CareEventOrderOlder> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(CareEventOrderOlder::getOrderId,orderId);
         List<CareEventOrderOlder> ceoos  = this.careEventOrderOlderService.list(queryWrapper);
@@ -402,21 +401,32 @@ public class BmsEventOrderService {
      * @return
      */
     public boolean sendSmsToLianxiren(Long orderContactId){
+
         CareEventOrderContactStatus contactStatus = this.careEventOrderContactStatusService.getById(orderContactId);
-        CareEventOrderHandleHis his = new CareEventOrderHandleHis();
-        his.setOrgId(contactStatus.getOrgId());
-        his.setStationId(contactStatus.getStationId());
-        his.setOrderId(contactStatus.getOrderId());
-        his.setLogType(LogTypeEnum.SMS.getValue());
-        his.setLogObjectId(contactStatus.getContactId());
-        his.setLogObjectName(contactStatus.getContactName());
-        his.setLogResult("短信通知");
-        his.setOpUserRole(UserRoleEnum.SEAT.getValue());
-        his.setCreateTime(DateUtil.date());
-        his.setRelationTypeDesc(contactStatus.getRelationTypeDesc());
-        this.careEventOrderHandleHisService.save(his);
-        //return smsSendService.sendSmsToLianxiren(contactStatus.getContactPhone(),null);
-        return true;
+        if (contactStatus!=null){
+            CareHouse house = this.careHouseService.getById(contactStatus.getHouseId());
+            boolean smsResult = smsSendService.sendSmsToLianxiren(contactStatus.getContactPhone(),house.getName());
+            if (smsResult){
+                CareEventOrderHandleHis his = new CareEventOrderHandleHis();
+                his.setOrgId(contactStatus.getOrgId());
+                his.setStationId(contactStatus.getStationId());
+                his.setOrderId(contactStatus.getOrderId());
+                his.setLogType(LogTypeEnum.SMS.getValue());
+                his.setLogObjectId(contactStatus.getContactId());
+                his.setLogObjectName(contactStatus.getContactName());
+                his.setLogResult("短信通知");
+                his.setOpUserRole(UserRoleEnum.SEAT.getValue());
+                his.setCreateTime(DateUtil.date());
+                his.setRelationTypeDesc(contactStatus.getRelationTypeDesc());
+                this.careEventOrderHandleHisService.save(his);
+                return true;
+            }else {
+                return false;
+            }
+
+        }else{
+            return false;
+        }
     }
 
     /**

+ 0 - 1
src/main/java/com/care/client/controller/ContactApiController.java

@@ -28,7 +28,6 @@ import java.util.List;
 @Api(value = "ContactApiController", tags = { "我的紧急联系人" })
 @Slf4j
 @RequestMapping("/pinanbao/contact")
-@Permission
 public class ContactApiController {
 
     @Resource

+ 0 - 2
src/main/java/com/care/client/controller/EventApiController.java

@@ -37,13 +37,11 @@ import java.util.List;
 @Api(value = "EventHandleController")
 @Slf4j
 @RequestMapping("/pinanbao/event")
-@Permission
 public class EventApiController {
 
     @Resource
     private PinanbaoService pinanbaoService;
 
-    //TODO SOS求助 语音
 
     @GetMapping("/hasDoing")
     @ApiOperation(tags = {"首页"},value = "当前进行中的事件")

+ 17 - 1
src/main/java/com/care/client/controller/HouseApiController.java

@@ -29,7 +29,6 @@ import java.util.List;
 @Api(value = "EventHandleController", tags = { "房屋信息" })
 @Slf4j
 @RequestMapping("/pinanbao/house")
-@Permission
 public class HouseApiController {
     @Resource
     private PassportService passportService;
@@ -88,4 +87,21 @@ public class HouseApiController {
             return Result.error("呼叫失败!");
         }
     }
+
+    @PostMapping(value = "/sos-bak")
+    @ApiOperation(tags = {"首页"},value = "SOS呼叫",httpMethod ="POST" ,response = Result.class)
+    public Result<Object> sos(@RequestHeader("token") String token){
+        try {
+            MemberInfoVO memberInfoVO = passportService.checkToken(token);
+            this.pinanbaoService.sos(memberInfoVO);
+            return Result.success("呼叫成功");
+        }
+        catch (BDException e) {
+            log.error("主动呼叫异常BDException",e);
+            return Result.error(e.getMessage());
+        }catch (Exception e) {
+            log.error("线路管理:线路导入出现异常",e);
+            return Result.error("呼叫失败!");
+        }
+    }
 }

+ 10 - 3
src/main/java/com/care/client/controller/MemberApiController.java

@@ -1,11 +1,14 @@
 package com.care.client.controller;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
 import com.care.client.service.AbstractPassportService;
 import com.care.client.service.PassportService;
 import com.care.client.vo.MemberInfoVO;
 import com.care.common.entity.CareMemberInfo;
+import com.care.common.entity.CareOlder;
 import com.care.common.service.CareMemberInfoService;
+import com.care.common.service.CareOlderService;
 import com.care.common.util.Result;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -23,7 +26,7 @@ import javax.annotation.Resource;
  * @autho:wenskys
  * @create 2020/5/12 14:13
  **/
-@Api(tags = "会员相关接口")
+@Api(tags = "用户相关接口")
 @RestController
 @RequestMapping("/pinanbao/member")
 public class MemberApiController {
@@ -31,6 +34,7 @@ public class MemberApiController {
     @Resource
     private CareMemberInfoService careMemberInfoService;
 
+
     @Resource
     private PassportService passportService;
     @Autowired
@@ -42,15 +46,18 @@ public class MemberApiController {
         MemberInfoVO current = current(token);
         CareMemberInfo member = careMemberInfoService.detailByOpenid(current.getOpenId());
         BeanUtil.copyProperties(member,current);
+        if (member.getBirthday()!=null){
+            current.setAge(DateUtil.ageOfNow(member.getBirthday()));
+        }
         return Result.success(current);
     }
 
-    @ApiOperation(value = "刷新基本信息", notes = "刷新用户基本信息")
+    /*@ApiOperation(value = "刷新基本信息", notes = "刷新用户基本信息")
     @PostMapping("refresh")
     public Result<Object> refreshMember(@RequestHeader String token) {
         MemberInfoVO lastMemberInfoVO = abstractPassportService.refreshMember(token);
         return Result.success(lastMemberInfoVO);
-    }
+    }*/
 
    /* @ApiOperation(value = "校验是否要刷新小程序用户信息", notes = "校验是否要刷新小程序用户信息 true刷新")
     @PostMapping("notMatchMemberField")

+ 17 - 3
src/main/java/com/care/client/service/AbstractPassportService.java

@@ -1,9 +1,11 @@
 package com.care.client.service;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.SecureUtil;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.care.client.vo.MemberInfoVO;
 import com.care.client.vo.MemberInitParams;
 import com.care.common.cache.RedisKeyConstant;
@@ -13,6 +15,7 @@ import com.care.common.service.CareMemberInfoService;
 import com.care.common.util.Result;
 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;
@@ -51,13 +54,24 @@ public class AbstractPassportService {
                 return Result.error("账号密码不匹配");
             }
         }
+        if (StringUtils.isBlank(member.getOpenId()) && StringUtils.isNotBlank(params.getOpenid())) {
+            UpdateWrapper<CareMemberInfo> careMemberInfoUpdateWrapper = new UpdateWrapper<>();
+            careMemberInfoUpdateWrapper.lambda().eq(CareMemberInfo::getId,member.getId()).set(CareMemberInfo::getOpenId,params.getOpenid());
+            boolean bindFlag = this.careMemberInfoService.update(careMemberInfoUpdateWrapper);
+            if (bindFlag) {
+                member.setOpenId(params.getOpenid());
+            }
+        }
         MemberInfoVO memberInfoVO = new MemberInfoVO();
         BeanUtil.copyProperties(member,memberInfoVO);
-        redisUtil.hset(RedisKeyConstant.PINANBAO_LOGIN_INFO, token, memberInfoVO, RedisKeyConstant.LOGIN_INFO_TIME);
+        if (member.getBirthday()!=null){
+            memberInfoVO.setAge(DateUtil.ageOfNow(member.getBirthday()));
+        }
+        redisUtil.hset(RedisKeyConstant.PINANBAO_LOGIN_INFO, token, memberInfoVO, RedisKeyConstant.PINANBAO_LOGIN_INFO_TIME);
 
         Map<String,Object> data = Maps.newHashMap();
         data.put("token", token);
-        data.put("member", member);
+        data.put("member", memberInfoVO);
         return Result.success(data);
     }
 
@@ -68,7 +82,7 @@ public class AbstractPassportService {
             if (oldMemberInfoVo != null && member != null) {
                 MemberInfoVO memberInfoVO = new MemberInfoVO();
                 BeanUtil.copyProperties(member,memberInfoVO);
-                redisUtil.hset(RedisKeyConstant.PINANBAO_LOGIN_INFO, token, memberInfoVO, RedisKeyConstant.LOGIN_INFO_TIME);
+                redisUtil.hset(RedisKeyConstant.PINANBAO_LOGIN_INFO, token, memberInfoVO, RedisKeyConstant.PINANBAO_LOGIN_INFO_TIME);
                 return memberInfoVO;
             }
         }

+ 42 - 1
src/main/java/com/care/client/service/PinanbaoService.java

@@ -10,6 +10,8 @@ import com.care.client.vo.MemberInfoVO;
 import com.care.common.entity.*;
 import com.care.common.enums.OrderStatusEnum;
 import com.care.common.enums.OrderTypeEnum;
+import com.care.common.enums.RelationTypeEnum;
+import com.care.common.exception.BDException;
 import com.care.common.service.*;
 import com.care.common.vo.device.DeviceVO;
 import com.care.common.vo.event.EventOrderVO;
@@ -95,6 +97,7 @@ public class PinanbaoService {
             contacts.forEach(item -> {
                 HouseContactVO vo = new HouseContactVO();
                 BeanUtil.copyProperties(item,vo);
+                vo.setRelationTypeDesc(RelationTypeEnum.getCodeToName(vo.getRelationType()));
                 vos.add(vo);
             });
         }
@@ -146,11 +149,16 @@ public class PinanbaoService {
     /**
      *  老人 SOS呼叫
      * @param member
-     * @param houseId
      * @param file
      * @return
      */
     public boolean sos(MemberInfoVO member,  MultipartFile file){
+
+        EventOrderVO orderVO = getDoingEvent(member.getHouseId());
+        if (orderVO!=null){
+            throw new BDException("有进行中事件,请勿重复呼叫");
+        }
+
         Date now  = DateUtil.date();
         //1. 保存文件
         String url = fileUploadService.upload(file,"sos");
@@ -175,4 +183,37 @@ public class PinanbaoService {
         this.careEventOrderService.saveOrder(order);
         return true;
     }
+
+    /**
+     *  老人 SOS呼叫
+     * @param member
+     * @return
+     */
+    public boolean sos(MemberInfoVO member){
+
+        EventOrderVO orderVO = getDoingEvent(member.getHouseId());
+        if (orderVO!=null){
+            throw new BDException("有进行中事件,请勿重复呼叫");
+        }
+        Date now  = DateUtil.date();
+        //2. 查询房屋
+        CareHouse house = this.careHouseService.getById(member.getHouseId());
+        //2. 生成工单
+        CareEventOrder order = new CareEventOrder();
+        order.setOrgId(house.getOrgId());
+        order.setOrgName(this.careOrganizationService.getById(house.getOrgId()).getName());
+        order.setStationId(house.getStationId());
+        order.setStationName(this.careStationService.getById(house.getStationId()).getName());
+        order.setHouseId(house.getId());
+        order.setHouseName(house.getName());
+        order.setTitle(house.getAddr()+" "+member.getName()+" 主动呼叫");
+        order.setOlderId(member.getId());
+        order.setOlderName(member.getName());
+        order.setOrderType(OrderTypeEnum.ZHU_DONG_HU_JIAO.getValue());
+        order.setStatus(OrderStatusEnum.TODO.getValue());
+        order.setCreateTime(now);
+        order.setModifyTime(now);
+        this.careEventOrderService.saveOrder(order);
+        return true;
+    }
 }

+ 2 - 2
src/main/java/com/care/client/service/WxPassportService.java

@@ -30,7 +30,7 @@ public class WxPassportService extends AbstractPassportService {
     Gson gson = new Gson();
 
     public Result<Object> login(MemberInitParams params) {
-        WxConfig wxConfig = platformPinanbaoConfig.wxConfig();
+        /*WxConfig wxConfig = platformPinanbaoConfig.wxConfig();
         // 解析codeUrl
         String codeUrl = MessageFormat.format(wxConfig.getCodeUrl(), wxConfig.getAppId(), wxConfig.getSecret(), params.getCode());
         // 通过codeUrl获取openid
@@ -42,7 +42,7 @@ public class WxPassportService extends AbstractPassportService {
         log.warn("-----openid:[{}], session_key:[{}]", openid, sessionKey);
 
         // TODO 测试阶段先注释掉
-        params.setOpenid(openid);
+        params.setOpenid(openid);*/
         return cache(params);
     }
 

+ 2 - 1
src/main/java/com/care/client/vo/MemberInfoVO.java

@@ -19,7 +19,6 @@ import java.io.Serializable;
 public class MemberInfoVO implements Serializable {
     private static final long serialVersionUID = 676002338375207640L;
 
-    @TableId(value = "ID", type = IdType.AUTO)
     private Long id;
 
 
@@ -62,5 +61,7 @@ public class MemberInfoVO implements Serializable {
     @ApiModelProperty("状态")
     private String status;
 
+    @ApiModelProperty("年龄")
+    private Integer age;
 
 }

+ 13 - 3
src/main/java/com/care/common/cache/RedisKeyConstant.java

@@ -12,12 +12,12 @@ import lombok.Data;
 public class RedisKeyConstant {
 
     // 微信access_token 2h
-    public static final String WX_ACCESS_TOKEN = "WX:TOKEN";
+    public static final String WX_ACCESS_TOKEN = "WX:PINANBAO:TOKEN";
     public static final int WX_ACCESS_TOKEN_TIME = (3600 - 2) * 2;
 
-    // 会员登录信息 2days
+    // 频安保用户登录信息 2days
     public static final String PINANBAO_LOGIN_INFO = "PINANBAO:LOGIN";
-    public static final int LOGIN_INFO_TIME = 3600 * 24 * 7;
+    public static final int PINANBAO_LOGIN_INFO_TIME = 3600 * 24 * 7;
 
     // 后台登录信息 6 小时
     public static final String BACK_LOGIN_INFO = "BACK:LOGIN";
@@ -38,4 +38,14 @@ public class RedisKeyConstant {
     public static final String DEVICE_MONITOR = "DEVICE:MONITOR";
     public static final int DEVICE_MONITOR_TIME = 60;
 
+    //频安守护 小程序用户 登陆信息 7days
+    public static final String PINANSHOUHU_LOGIN_INFO = "PINANSHOUHU:LOGIN";
+    public static final int PINANSHOUHU_LOGIN_INFO_TIME = 3600 * 24 * 7;
+
+    // 微信access_token 2h
+    public static final String WX_PINANSHOUHU_ACCESS_TOKEN = "WX:PINANSHOUHU:TOKEN";
+    public static final int WX_PINANSHOUHU_ACCESS_TOKEN_TIME = (3600 - 2) * 2;
+
+    public static final String KEY_APPLY_LOCAK = "KEY_APPLY:LOCK";
+
 }

+ 21 - 0
src/main/java/com/care/common/config/SwaggerConfig.java

@@ -119,4 +119,25 @@ public class SwaggerConfig {
                 .apis(RequestHandlerSelectors.basePackage("com.care.client"))
                 .build();
     }
+    @Bean
+    public Docket docketD(){
+        return new Docket(DocumentationType.SWAGGER_2)
+                //设置分组名
+                .groupName("频安管家接口文档")
+                .apiInfo(new ApiInfo(
+                        "Swagger API文档标题",
+                        "Swagger API文档描述",
+                        "V1.0",
+                        "106",
+                        new Contact("作者名", "作者博客Url", "作者邮箱Email"),
+                        "Apache 2.0",
+                        "http://www.apache.org/licenses/LICENSE-2.0",
+                        new ArrayList<>()
+                ))
+                //配置 Swagger 信息
+                .select()
+                //basePackage("相对包路径"):指定要扫描的包(常用)
+                .apis(RequestHandlerSelectors.basePackage("com.care.keeper"))
+                .build();
+    }
 }

+ 14 - 4
src/main/java/com/care/common/entity/CareEventOrderChamb.java

@@ -17,7 +17,7 @@ import java.util.Date;
  * 管家工单(CareEventOrderChamb)实体类
  *
  * @author makejava
- * @since 2021-06-02 23:31:34
+ * @since 2021-06-10 02:32:27
  */
 
 @Data
@@ -26,7 +26,7 @@ import java.util.Date;
 @TableName("care_event_order_chamb")
 @ApiModel(value = "管家工单", description = "")
 public class CareEventOrderChamb implements Serializable {
-    private static final long serialVersionUID = -77047215922999145L;
+    private static final long serialVersionUID = -76114294392967396L;
 
     @TableId(value = "ID", type = IdType.AUTO)
     private Long id;
@@ -67,9 +67,9 @@ public class CareEventOrderChamb implements Serializable {
     private String phone;
 
 
-    @ApiModelProperty("状态: 0:未联系  1已联系  2 到达  3离开")
+    @ApiModelProperty("状态: 0:待处理  1处理中  2 处理完成 3取消")
     @TableField("STATUS")
-    private Integer status;
+    private String status;
 
 
     @ApiModelProperty("到达时间")
@@ -82,6 +82,16 @@ public class CareEventOrderChamb implements Serializable {
     private Date likaiTime;
 
 
+    @ApiModelProperty("说明")
+    @TableField("REMARK")
+    private String remark;
+
+
+    @ApiModelProperty("现场图片 多个逗号分隔")
+    @TableField("SCENE_PIC")
+    private String scenePic;
+
+
     @ApiModelProperty("createTime")
     @TableField("CREATE_TIME")
     private Date createTime;

+ 12 - 2
src/main/java/com/care/common/entity/CareMemberInfo.java

@@ -17,7 +17,7 @@ import java.util.Date;
  * 用户登录信息(CareMemberInfo)实体类
  *
  * @author makejava
- * @since 2021-06-07 00:18:53
+ * @since 2021-06-10 01:07:14
  */
 
 @Data
@@ -26,7 +26,7 @@ import java.util.Date;
 @TableName("care_member_info")
 @ApiModel(value = "用户登录信息", description = "")
 public class CareMemberInfo implements Serializable {
-    private static final long serialVersionUID = 676002338375207640L;
+    private static final long serialVersionUID = 806178869535928669L;
 
     @TableId(value = "ID", type = IdType.AUTO)
     private Long id;
@@ -37,6 +37,11 @@ public class CareMemberInfo implements Serializable {
     private Long houseId;
 
 
+    @ApiModelProperty("老人ID")
+    @TableField("OLDER_ID")
+    private Long olderId;
+
+
     @ApiModelProperty("openId")
     @TableField("OPEN_ID")
     private String openId;
@@ -97,4 +102,9 @@ public class CareMemberInfo implements Serializable {
     private Date modifyTime;
 
 
+    @ApiModelProperty("生日")
+    @TableField("BIRTHDAY")
+    private Date birthday;
+
+
 }

+ 7 - 2
src/main/java/com/care/common/entity/CareOlder.java

@@ -17,7 +17,7 @@ import java.util.Date;
  * 被监护人表(CareOlder)实体类
  *
  * @author makejava
- * @since 2021-06-02 21:54:49
+ * @since 2021-06-10 00:55:32
  */
 
 @Data
@@ -26,7 +26,7 @@ import java.util.Date;
 @TableName("care_older")
 @ApiModel(value = "被监护人表", description = "")
 public class CareOlder implements Serializable {
-    private static final long serialVersionUID = -94602489879653618L;
+    private static final long serialVersionUID = -80806565235080321L;
 
     @TableId(value = "ID", type = IdType.AUTO)
     private Long id;
@@ -72,6 +72,11 @@ public class CareOlder implements Serializable {
     private String liveType;
 
 
+    @ApiModelProperty("头像")
+    @TableField("PROFILE")
+    private String profile;
+
+
     @ApiModelProperty("床号或者门牌号")
     @TableField("BED_NUMBER")
     private String bedNumber;

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

@@ -17,7 +17,7 @@ import java.util.Date;
  * 安全管家表(CareSysUser)实体类
  *
  * @author makejava
- * @since 2021-05-21 00:08:37
+ * @since 2021-06-09 23:28:45
  */
 
 @Data
@@ -26,7 +26,7 @@ import java.util.Date;
 @TableName("care_sys_user")
 @ApiModel(value = "安全管家表", description = "")
 public class CareSysUser implements Serializable {
-    private static final long serialVersionUID = -32919685706503729L;
+    private static final long serialVersionUID = 387127586205394503L;
 
     @TableId(value = "ID", type = IdType.AUTO)
     private Long id;
@@ -62,7 +62,7 @@ public class CareSysUser implements Serializable {
     private String gender;
 
 
-    @ApiModelProperty("状态:1正常;2:休假 3忙碌")
+    @ApiModelProperty("状态:1正常;2:休假")
     @TableField("STATUS")
     private String status;
 
@@ -87,9 +87,19 @@ public class CareSysUser implements Serializable {
     private Date modifyTime;
 
 
-    @ApiModelProperty("1:坐席 2:管家")
+    @ApiModelProperty("seat:坐席chanmb:管家 admin管理员")
     @TableField("ROLE")
     private String role;
 
 
+    @ApiModelProperty("微信openid")
+    @TableField("OPEN_ID")
+    private String openId;
+
+
+    @ApiModelProperty("头像")
+    @TableField("PROFILE")
+    private String profile;
+
+
 }

+ 45 - 0
src/main/java/com/care/common/enums/ChambOrderStatusEnum.java

@@ -0,0 +1,45 @@
+package com.care.common.enums;
+
+
+import cn.hutool.core.util.StrUtil;
+
+/**
+ * @Author:java
+ * @Date: 2021/05/27
+ */
+public enum ChambOrderStatusEnum {
+
+    /**
+     *
+     */
+    TODO("0","未处理"),
+    DOING("1","处理中"),
+    COMPLETE("2","已完成"),
+    CANCEL("3","已取消");
+    private String value;
+    private String name;
+    ChambOrderStatusEnum(String value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+    public String getValue() {
+        return value;
+    }
+
+    public static String getCodeToName(String code){
+        if (StrUtil.isEmpty(code)){
+            return null;
+        }
+        if (TODO.getValue().equals(code)){
+            return  TODO.name;
+        }else if (DOING.getValue().equals(code)){
+            return DOING.name;
+        }else if (COMPLETE.getValue().equals(code)){
+            return COMPLETE.name;
+        }else if (CANCEL.getValue().equals(code)){
+            return CANCEL.name;
+        }
+
+        return null;
+    }
+}

+ 27 - 0
src/main/java/com/care/common/mapper/CareEventOrderChambMapper.java

@@ -1,7 +1,11 @@
 package com.care.common.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.care.common.entity.CareEventOrder;
 import com.care.common.entity.CareEventOrderChamb;
+import com.care.common.vo.event.ChambEventOrderVO;
+import org.apache.ibatis.annotations.Param;
 
 
 /**
@@ -12,4 +16,27 @@ import com.care.common.entity.CareEventOrderChamb;
  */
 public interface CareEventOrderChambMapper extends BaseMapper<CareEventOrderChamb> {
 
+    /**
+     * 待处理的工单
+     * @param page
+     * @param chambId
+     * @return
+     */
+    IPage<ChambEventOrderVO>  queryTodoEventByChambId(IPage<ChambEventOrderVO> page, @Param("chambId") Long chambId);
+
+    /**
+     * 进行中的工单
+     * @param page
+     * @param chambId
+     * @return
+     */
+    IPage<ChambEventOrderVO>  queryDoingEventByChambId(IPage<ChambEventOrderVO> page,@Param("chambId") Long chambId);
+
+    /**
+     * 完成的工单
+     * @param page
+     * @param chambId
+     * @return
+     */
+    IPage<ChambEventOrderVO>  queryDoneEventByChambId(IPage<ChambEventOrderVO> page,@Param("chambId") Long chambId);
 }

+ 2 - 1
src/main/java/com/care/common/mapper/CareSysUserMapper.java

@@ -2,6 +2,7 @@ package com.care.common.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.care.common.entity.CareSysUser;
+import org.apache.ibatis.annotations.Param;
 
 
 /**
@@ -11,5 +12,5 @@ import com.care.common.entity.CareSysUser;
  * @since 2021-05-21 00:08:37
  */
 public interface CareSysUserMapper extends BaseMapper<CareSysUser> {
-
+    int queryOlderCountByChambId(@Param("id") Long id);
 }

+ 28 - 0
src/main/java/com/care/common/service/CareEventOrderChambService.java

@@ -1,7 +1,13 @@
 package com.care.common.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.care.common.entity.CareEventOrder;
 import com.care.common.entity.CareEventOrderChamb;
+import com.care.common.vo.PageReqVO;
+import com.care.common.vo.event.ChambEventOrderVO;
+import com.care.common.vo.event.EventOrderVO;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 管家工单(CareEventOrderChamb)表服务接口
@@ -10,5 +16,27 @@ import com.care.common.entity.CareEventOrderChamb;
  * @since 2021-06-02 23:31:34
  */
 public interface CareEventOrderChambService extends IService<CareEventOrderChamb> {
+    /**
+     * 待处理的工单
+     * @param page
+     * @param chambId
+     * @return
+     */
+    IPage<ChambEventOrderVO> queryTodoEventByChambId(PageReqVO pageReqVo, Long chambId);
 
+    /**
+     * 进行中的工单
+     * @param page
+     * @param chambId
+     * @return
+     */
+    IPage<ChambEventOrderVO>  queryDoingEventByChambId(PageReqVO pageReqVo,Long chambId);
+
+    /**
+     * 完成的工单
+     * @param page
+     * @param chambId
+     * @return
+     */
+    IPage<ChambEventOrderVO>  queryDoneEventByChambId(PageReqVO pageReqVo,Long chambId);
 }

+ 13 - 0
src/main/java/com/care/common/service/CareSysUserService.java

@@ -1,8 +1,10 @@
 package com.care.common.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.care.common.entity.CareMemberInfo;
 import com.care.common.entity.CareSysUser;
 import com.care.common.vo.UserLogindConvertVO;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 安全管家表(CareSysUser)表服务接口
@@ -11,4 +13,15 @@ import com.care.common.vo.UserLogindConvertVO;
  * @since 2021-05-21 00:08:38
  */
 public interface CareSysUserService extends IService<CareSysUser> {
+
+    CareSysUser detailByOpenid4Keeper(String openId);
+
+    CareSysUser detailByPhone4Keeper(String phone);
+
+    /**
+     * 管家服务人数
+     * @param id
+     * @return
+     */
+    int queryOlderCountByChambId(@Param("id") Long id);
 }

+ 1 - 1
src/main/java/com/care/common/service/SmsSendService.java

@@ -14,5 +14,5 @@ public interface SmsSendService  {
      * @param params
      * @return
      */
-    boolean sendSmsToLianxiren(String phone,String[] params);
+    boolean sendSmsToLianxiren(String phone,String params);
 }

+ 62 - 0
src/main/java/com/care/common/service/impl/CareEventOrderChambServiceImpl.java

@@ -1,9 +1,15 @@
 package com.care.common.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.care.common.entity.CareEventOrderChamb;
+import com.care.common.enums.ChambOrderStatusEnum;
 import com.care.common.mapper.CareEventOrderChambMapper;
 import com.care.common.service.CareEventOrderChambService;
+import com.care.common.vo.PageReqVO;
+import com.care.common.vo.event.ChambEventOrderVO;
 import org.springframework.stereotype.Service;
 
 /**
@@ -15,4 +21,60 @@ import org.springframework.stereotype.Service;
 @Service
 public class CareEventOrderChambServiceImpl extends ServiceImpl<CareEventOrderChambMapper, CareEventOrderChamb> implements CareEventOrderChambService {
 
+    /**
+     * 待处理的工单
+     *
+     * @param page
+     * @param chambId
+     * @return
+     */
+    @Override
+    public IPage<ChambEventOrderVO> queryTodoEventByChambId(PageReqVO pageReqVo, Long chambId) {
+        IPage<ChambEventOrderVO> page = new Page<>(pageReqVo.getCurrent(), pageReqVo.getPageSize());
+        IPage<ChambEventOrderVO> pageRes = this.baseMapper.queryTodoEventByChambId(page,chambId);
+        if(CollUtil.isNotEmpty(pageRes.getRecords())){
+            pageRes.getRecords().forEach(item -> {
+                item.setStatusName(ChambOrderStatusEnum.getCodeToName(item.getStatus()));
+            });
+        }
+        return pageRes;
+    }
+
+    /**
+     * 进行中的工单
+     *
+     * @param page
+     * @param chambId
+     * @return
+     */
+    @Override
+    public IPage<ChambEventOrderVO> queryDoingEventByChambId(PageReqVO pageReqVo, Long chambId) {
+        IPage<ChambEventOrderVO> page = new Page<>(pageReqVo.getCurrent(), pageReqVo.getPageSize());
+        IPage<ChambEventOrderVO> pageRes = this.baseMapper.queryDoingEventByChambId(page,chambId);
+        if(CollUtil.isNotEmpty(pageRes.getRecords())){
+            pageRes.getRecords().forEach(item -> {
+                item.setStatusName(ChambOrderStatusEnum.getCodeToName(item.getStatus()));
+            });
+        }
+        return pageRes;
+    }
+
+    /**
+     * 完成的工单
+     *
+     * @param page
+     * @param chambId
+     * @return
+     */
+    @Override
+    public IPage<ChambEventOrderVO> queryDoneEventByChambId(PageReqVO pageReqVo, Long chambId) {
+        IPage<ChambEventOrderVO> page = new Page<>(pageReqVo.getCurrent(), pageReqVo.getPageSize());
+        IPage<ChambEventOrderVO> pageRes = this.baseMapper.queryDoneEventByChambId(page,chambId);
+        if(CollUtil.isNotEmpty(pageRes.getRecords())){
+            pageRes.getRecords().forEach(item -> {
+                item.setStatusName(ChambOrderStatusEnum.getCodeToName(item.getStatus()));
+            });
+        }
+        return pageRes;
+    }
 }

+ 1 - 2
src/main/java/com/care/common/service/impl/CareEventOrderServiceImpl.java

@@ -130,9 +130,8 @@ public class CareEventOrderServiceImpl extends ServiceImpl<CareEventOrderMapper,
                 chamb.setChambId(user.getId());
                 chamb.setChambName(user.getName());
                 chamb.setPhone(user.getPhone());
-                chamb.setStatus(0);
+                chamb.setStatus(ChambOrderStatusEnum.TODO.getValue());
                 chamb.setHouseId(house.getId());
-                chamb.setStatus(0);
                 chamb.setCreateTime(DateUtil.date());
                 chamb.setModifyTime(DateUtil.date());
                 this.careEventOrderChambService.save(chamb);

+ 27 - 8
src/main/java/com/care/common/service/impl/CareSysUserServiceImpl.java

@@ -1,20 +1,13 @@
 package com.care.common.service.impl;
 
-import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.care.common.entity.CareOrganization;
 import com.care.common.entity.CareSysUser;
-import com.care.common.exception.BDException;
+import com.care.common.enums.UserRoleEnum;
 import com.care.common.mapper.CareSysUserMapper;
-import com.care.common.service.CareOrganizationService;
 import com.care.common.service.CareSysUserService;
-import com.care.common.vo.UserLogindConvertVO;
-import org.apache.commons.codec.digest.DigestUtils;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.Resource;
-
 /**
  * 安全管家表(CareSysUser)表服务实现类
  *
@@ -24,4 +17,30 @@ import javax.annotation.Resource;
 @Service
 public class CareSysUserServiceImpl extends ServiceImpl<CareSysUserMapper, CareSysUser> implements CareSysUserService {
 
+    @Override
+    public CareSysUser detailByOpenid4Keeper(String openId) {
+        QueryWrapper<CareSysUser> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(CareSysUser::getOpenId,openId).eq(CareSysUser::getRole, UserRoleEnum.CHANMB.getValue());
+        return this.getOne(queryWrapper);
+    }
+
+    @Override
+    public CareSysUser detailByPhone4Keeper(String phone) {
+        QueryWrapper<CareSysUser> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(CareSysUser::getPhone,phone).eq(CareSysUser::getRole, UserRoleEnum.CHANMB.getValue());
+        return this.getOne(queryWrapper);
+    }
+
+    /**
+     * 管家服务人数
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public int queryOlderCountByChambId(Long id) {
+        return this.baseMapper.queryOlderCountByChambId(id);
+    }
+
+
 }

+ 35 - 2
src/main/java/com/care/common/service/impl/SmsSendServiceImpl.java

@@ -1,6 +1,9 @@
 package com.care.common.service.impl;
 
 import com.care.common.service.SmsSendService;
+import com.care.common.util.SmsUtil;
+import com.tencentcloudapi.sms.v20210111.models.SendStatus;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 /**
@@ -10,8 +13,38 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class SmsSendServiceImpl implements SmsSendService {
+
+    @Value("${sms.notice.endpoint:#{null}}")
+    private String noticeEndpoint;
+    @Value("${sms.notice.region:#{null}}")
+    private String noticeRegion;
+    @Value("${sms.notice.secretId:#{null}}")
+    private String noticeSecretId;
+    @Value("${sms.notice.secretKey:#{null}}")
+    private String noticeecretKey;
+    @Value("${sms.notice.smsSdkAppId:#{null}}")
+    private String noticeSmsSdkAppId;
+    @Value("${sms.notice.signName:#{null}}")
+    private String noticeSignName;
+    @Value("${sms.notice.templateId:#{null}}")
+    private String noticeTemplateId;
+
+
     @Override
-    public boolean sendSmsToLianxiren(String phone, String[] params) {
-        return true;
+    public boolean sendSmsToLianxiren(String phone, String params) {
+        String[] _p = {params};
+        SendStatus sendStatus =  SmsUtil.sendSms(noticeEndpoint,
+                noticeRegion,
+                noticeSecretId,
+                noticeecretKey,
+                noticeSmsSdkAppId,
+                noticeSignName,
+                noticeTemplateId,
+                phone,_p);
+        if (sendStatus!=null && "OK".equals(sendStatus.getCode())){
+            return true;
+        }else{
+            return  false;
+        }
     }
 }

+ 28 - 9
src/main/java/com/care/common/util/SmsUtil.java

@@ -1,5 +1,6 @@
 package com.care.common.util;
 
+import cn.hutool.json.JSONUtil;
 import com.tencentcloudapi.common.Credential;
 import com.tencentcloudapi.common.exception.TencentCloudSDKException;
 import com.tencentcloudapi.common.profile.ClientProfile;
@@ -16,38 +17,45 @@ import com.tencentcloudapi.sms.v20210111.models.SendStatus;
  */
 public class SmsUtil {
 
-    public static SendStatus sendSms(String SecretId,
-                                       String SecretKey,
-                                       String phoneNumber,
-                                       String SmsSdkAppId,
+    public static SendStatus sendSms(String endpoint,
+                                     String region,
+                                     String secretId,
+                                       String secretKey,
+                                       String smsSdkAppId,
                                        String signName,
                                        String templateId,
+                                        String phoneNumber,
                                        String[] templateParam){
         SendStatus sendStatus = null;
         try{
 
-            Credential cred = new Credential(SecretId, SecretKey);
+            Credential cred = new Credential(secretId, secretKey);
 
             HttpProfile httpProfile = new HttpProfile();
-            httpProfile.setEndpoint("sms.tencentcloudapi.com");
+            httpProfile.setEndpoint(endpoint);
 
             ClientProfile clientProfile = new ClientProfile();
             clientProfile.setHttpProfile(httpProfile);
 
-            SmsClient client = new SmsClient(cred, "", clientProfile);
-
+            SmsClient client = new SmsClient(cred, region, clientProfile);
+            if (phoneNumber.startsWith("+86")){
+                phoneNumber = phoneNumber.replace("+86","");
+            }else{
+                phoneNumber = "+86"+phoneNumber;
+            }
             String[] phoneNumberSet = {phoneNumber};
 
             SendSmsRequest req = new SendSmsRequest();
             req.setPhoneNumberSet(phoneNumberSet);
 
-            req.setSmsSdkAppId(SmsSdkAppId);
+            req.setSmsSdkAppId(smsSdkAppId);
             req.setSignName(signName);
             req.setTemplateId(templateId);
 
             req.setTemplateParamSet(templateParam);
 
             SendSmsResponse resp = client.SendSms(req);
+            System.out.println(JSONUtil.toJsonStr(resp));
             sendStatus = resp.getSendStatusSet()[0];
         } catch (TencentCloudSDKException e) {
             System.out.println(e.toString());
@@ -55,4 +63,15 @@ public class SmsUtil {
         return sendStatus;
     }
 
+    public static void main(String[] args) {
+        String SecretId = "AKIDkKfkbCX0HJ4YkgMlunPkpdBSVHo43mEQ";
+                String SecretKey = "wb08zZrRkmY3IGyPZS4PUIp66pHUQ6Vd";
+                String phoneNumber = "18010375763";
+                String SmsSdkAppId = "1400531694";
+                String signName ="熵行科技";
+                String templateId ="986791";
+                String[] templateParam = {"北太平庄201"};
+                sendSms("sms.tencentcloudapi.com","ap-beijing",SecretId,SecretKey,SmsSdkAppId,signName,templateId,phoneNumber,templateParam);
+    }
+
 }

+ 90 - 0
src/main/java/com/care/common/vo/event/ChambEventOrderVO.java

@@ -0,0 +1,90 @@
+package com.care.common.vo.event;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 管家工单(CareEventOrderChamb)实体类
+ *
+ * @author makejava
+ * @since 2021-06-10 02:05:50
+ */
+
+@Data
+@ApiModel(value = "管家工单", description = "")
+public class ChambEventOrderVO implements Serializable {
+    private static final long serialVersionUID = -68975985985657562L;
+
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+
+    @ApiModelProperty("机构ID")
+    private Long orgId;
+
+
+    @ApiModelProperty("服务站ID")
+    private Long stationId;
+
+
+    @ApiModelProperty("房屋ID")
+    private Long houseId;
+
+
+    @ApiModelProperty("工单ID")
+    private Long orderId;
+
+    private String title;
+
+    @ApiModelProperty("管家ID")
+    private Long chambId;
+
+
+    @ApiModelProperty("管家姓名")
+    private String chambName;
+
+
+    @ApiModelProperty("联系电话")
+    private String phone;
+
+
+    @ApiModelProperty("状态: 0:待处理  1处理中  2 处理完成 3已取消")
+    private String status;
+
+    @ApiModelProperty("状态: 0:待处理  1处理中  2 处理完成 3已取消")
+    private String statusName;
+
+
+    @ApiModelProperty("到达时间")
+    private Date daodaTime;
+
+
+    @ApiModelProperty("离开时间")
+    private Date likaiTime;
+
+
+    @ApiModelProperty("说明")
+    private String remark;
+
+
+    @ApiModelProperty("现场图片 多个逗号分隔")
+    private String scenePic;
+
+
+    @ApiModelProperty("createTime")
+    private Date createTime;
+
+
+    @ApiModelProperty("modifyTime")
+    private Date modifyTime;
+}

+ 1 - 1
src/main/java/com/care/common/vo/event/EventOrderVO.java

@@ -67,7 +67,7 @@ public class EventOrderVO implements Serializable {
     private String orderTypeName;
 
 
-    @ApiModelProperty("状态:0未处理,1处理中,2已完成,3主动取消,4已归档")
+    @ApiModelProperty("事件状态:0未处理,1处理中,2已完成,3主动取消,4已归档")
     private String status;
     private String statusName;
 

+ 13 - 0
src/main/java/com/care/keeper/config/KeeperWxConfig.java

@@ -0,0 +1,13 @@
+package com.care.keeper.config;
+
+import lombok.Data;
+
+@Data
+public class KeeperWxConfig {
+
+    private String codeUrl;
+    private String tokenUrl;
+    private String appId;
+    private String secret;
+
+}

+ 21 - 0
src/main/java/com/care/keeper/config/PlatformPinanshouhuConfig.java

@@ -0,0 +1,21 @@
+package com.care.keeper.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 描述:
+ *
+ * @autho:wenskys
+ * @create 2020/5/11 0:05
+ **/
+@Configuration
+public class PlatformPinanshouhuConfig {
+
+    @Bean
+    @ConfigurationProperties(prefix = "wx.pinanshouhu")
+    public KeeperWxConfig keeperWxConfig() {
+        return new KeeperWxConfig();
+    }
+}

+ 200 - 0
src/main/java/com/care/keeper/controller/KeeperEventApiController.java

@@ -0,0 +1,200 @@
+package com.care.keeper.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.care.common.exception.BDException;
+import com.care.common.service.FileUploadService;
+import com.care.common.util.PageResult;
+import com.care.common.util.Result;
+import com.care.common.vo.PageReqVO;
+import com.care.common.vo.event.*;
+import com.care.keeper.service.KeeperApiService;
+import com.care.keeper.service.KeeperPassportService;
+import com.care.keeper.vo.HouseContactVO;
+import com.care.keeper.vo.KeeperInfoVO;
+import io.swagger.annotations.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author: lilt
+ * @Date: 2021/5/26
+ * @Desc:
+ */
+@RestController
+@Api(value = "EventHandleController")
+@Slf4j
+@RequestMapping("/keeper/api/event")
+public class KeeperEventApiController {
+
+    @Resource
+    private KeeperApiService keeperApiService;
+
+    @Resource
+    private KeeperPassportService keeperPassportService;
+
+    @Resource
+    private FileUploadService fileUploadService;
+
+
+    @GetMapping("/queryTodoList")
+    @ApiOperation(tags = {"我的"},value = "未处理事件 分页")
+    public PageResult<List<ChambEventOrderVO>> queryTodoList(@RequestHeader String token,PageReqVO pageReqVo){
+        try {
+            KeeperInfoVO current = this.keeperPassportService.checkToken(token);
+
+            IPage<ChambEventOrderVO> pageResponse = this.keeperApiService.queryTodoEventByChambId(pageReqVo,current.getId());
+            return PageResult.success(pageResponse.getRecords(),pageResponse.getCurrent(),pageResponse.getSize(),pageResponse.getTotal());
+        }catch (BDException e) {
+            log.error("我的未处理事件 分页列表出现异常",e);
+            return  PageResult.error(e.getMessage());
+        } catch (Exception e) {
+            log.error("我的事件处理: 未处理事件查询出现异常",e);
+            return PageResult.error( "获取列表失败");
+        }
+    }
+    @GetMapping("/queryDoingList")
+    @ApiOperation(tags = {"我的"},value = "处理中事件 分页")
+    public PageResult<List<ChambEventOrderVO>> queryDoingList(@RequestHeader String token,PageReqVO pageReqVo){
+        try {
+            KeeperInfoVO current = this.keeperPassportService.checkToken(token);
+
+            IPage<ChambEventOrderVO> pageResponse = this.keeperApiService.queryDoingEventByChambId(pageReqVo,current.getId());
+            return PageResult.success(pageResponse.getRecords(),pageResponse.getCurrent(),pageResponse.getSize(),pageResponse.getTotal());
+        }catch (BDException e) {
+            log.error("我的处理中事件 分页列表出现异常",e);
+            return  PageResult.error(e.getMessage());
+        } catch (Exception e) {
+            log.error("我的事件处理: 处理中事件查询出现异常",e);
+            return PageResult.error( "获取列表失败");
+        }
+    }
+
+    @GetMapping("/queryDoneList")
+    @ApiOperation(tags = {"我的"},value = "已完成事件 分页")
+    public PageResult<List<ChambEventOrderVO>> queryDoneList(@RequestHeader String token,PageReqVO pageReqVo){
+        try {
+            KeeperInfoVO current = this.keeperPassportService.checkToken(token);
+
+            IPage<ChambEventOrderVO> pageResponse = this.keeperApiService.queryDoneEventByChambId(pageReqVo,current.getId());
+            return PageResult.success(pageResponse.getRecords(),pageResponse.getCurrent(),pageResponse.getSize(),pageResponse.getTotal());
+        }catch (BDException e) {
+            log.error("我的已完成事件 分页列表出现异常",e);
+            return  PageResult.error(e.getMessage());
+        } catch (Exception e) {
+            log.error("我的已完成事件: 分页列表出现异常",e);
+            return PageResult.error( "获取列表失败");
+        }
+    }
+
+    @GetMapping("/getEventInfo")
+    @ApiOperation(tags = {"事件处理"},value = "事件处理或者详情")
+    public Result<Map<String,Object>> getEventInfo(@RequestParam("orderId") Long orderId){
+        EventOrderVO eventOrderVO = this.keeperApiService.getEventInfo(orderId);
+        List<OrderOlderVO> olderVOList = this.keeperApiService.queryOrderOlderList(orderId);
+        List<HouseContactVO> houseContactVOList = this.keeperApiService.queryContactByOrderId(orderId);
+        Map<String,Object> data = new HashMap<>(3);
+        //订单信息
+        data.put("info",eventOrderVO);
+        //老人
+        data.put("older",olderVOList);
+         // 联系人
+        data.put("contact",houseContactVOList);
+
+        return  Result.success("查询成功!",data);
+    }
+
+    @GetMapping("/getApplyKeyInfo")
+    @ApiOperation(tags = {"事件处理"},value = "获取钥匙信息,data如果为NULL,需要进行申请")
+    public Result<OrderKeyApplyVO> getApplyKeyInfo(@RequestHeader("token") String token, @RequestParam("orderId") Long orderId){
+        KeeperInfoVO current = this.keeperPassportService.checkToken(token);
+        OrderKeyApplyVO orderKeyApplyVO = this.keeperApiService.getApplyKeyInfo(orderId,current.getId());
+        return  Result.success("查询成功!",orderKeyApplyVO);
+    }
+
+    @GetMapping("/toApplyKey")
+    @ApiOperation(tags = {"事件处理"},value = "申请钥匙")
+    public Result<Map<String,Object>> toApplyKey(@RequestHeader("token") String token, @RequestParam("orderId") Long orderId){
+        KeeperInfoVO current = this.keeperPassportService.checkToken(token);
+        this.keeperApiService.applyKey(orderId,current);
+        return  Result.success("申请成功!");
+    }
+
+    @GetMapping("/getKeeperStatus")
+    @ApiOperation(tags = {"事件处理"},value = "获取管家当前的状态进度条")
+    public Result<List<Map<String,Object>>> getKeeperStatus(@RequestParam("chambOrderId") Long chambOrderId){
+        List<Map<String,Object>> datas = new ArrayList<>();
+        Map<String,Object> map1 = new HashMap<>();
+        map1.put("code",1);
+        map1.put("color","blue");
+        datas.add(map1);
+        Map<String,Object> map2 = new HashMap<>();
+        map2.put("code",2);
+        map2.put("color","blue");
+        datas.add(map2);
+        Map<String,Object> map3 = new HashMap<>();
+        map3.put("code",3);
+        map3.put("color","blue");
+        datas.add(map3);
+        ChambEventOrderVO orderVO = this.keeperApiService.getChambOrder(chambOrderId);
+        if (orderVO!=null ){
+            if (orderVO.getDaodaTime()!=null && orderVO.getLikaiTime()==null){
+                datas.get(0).put("color","red");
+                datas.get(1).put("color","red");
+            }else if (orderVO.getDaodaTime()!=null && orderVO.getLikaiTime()!=null){
+                datas.get(0).put("color","red");
+                datas.get(1).put("color","red");
+                datas.get(2).put("color","red");
+            }
+        }
+        return  Result.success("查询成功!",datas);
+    }
+
+    @PostMapping("/daoda")
+    @ApiOperation(tags = {"事件处理"},value = "到达确认")
+    public Result<Object> daoDaConfirm(@RequestParam("chambOrderId") Long chambOrderId){
+        if (this.keeperApiService.daoDaConfirm(chambOrderId)){
+            return  Result.success("到达确认成功!");
+        }else{
+            return  Result.error("操作失败!");
+        }
+
+    }
+
+    @PostMapping("/likai")
+    @ApiOperation(tags = {"事件处理"},value = "离开确认")
+    public Result<Object> liKaiConfirm(@RequestParam("chambOrderId") Long chambOrderId,@RequestParam("remark") String remark,@RequestParam("chambOrderId") String scenePic){
+        if (this.keeperApiService.liKaiConfirm(chambOrderId,remark,scenePic)){
+            return  Result.success("离开确认成功!");
+        }else{
+            return  Result.error("操作失败!");
+        }
+    }
+
+    @GetMapping("/queryDoHis")
+    @ApiOperation(tags = {"事件处理"},value = "处理日志")
+    public Result<List<OrderHandleHisVO>> queryDoHis(@RequestParam("orderId") Long orderId){
+        return  Result.success("查询成功!",this.keeperApiService.queryOrderHandleHis(orderId));
+    }
+
+    @ApiOperation(tags = {"APP-图片上传"},value = "图片上传接口", notes = "图片上传接口")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "token", value = "放在请求头中的令牌",
+                    dataType = "String", paramType = "header",
+                    required = true)
+    })
+    @CrossOrigin
+    @PostMapping(value = "/img/upload", headers="content-type=multipart/form-data",produces = "application/json;charset=UTF-8")
+    public Result<String> imgUpload( @ApiParam(value="图片",required=true) MultipartFile file,
+                                         @RequestHeader(name = "token") String token) {
+            KeeperInfoVO current = this.keeperPassportService.checkToken(token);
+            String url = fileUploadService.upload(file,"order");
+            return  Result.success("上传成功!",url);
+    }
+}

+ 66 - 0
src/main/java/com/care/keeper/controller/KeeperMemberApiController.java

@@ -0,0 +1,66 @@
+package com.care.keeper.controller;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.care.common.entity.CareSysUser;
+import com.care.common.service.CareSysUserService;
+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 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;
+
+/**
+ * 描述:
+ *
+ * @autho:wenskys
+ * @create 2020/5/12 14:13
+ **/
+@Api(tags = "用户相关接口")
+@RestController
+@RequestMapping("/keeper/api/member")
+public class KeeperMemberApiController {
+
+    @Resource
+    private CareSysUserService careSysUserService;
+
+    @Resource
+    private KeeperPassportService keeperPassportService;
+
+    @Resource
+    private AbstractKeeperPassportService abstractKeeperPassportService;
+
+    @ApiOperation(value = "获取基本信息", notes = "获取用户基本录信息")
+    @PostMapping("detail/info")
+    public Result<Object> detailInfo(@RequestHeader String token) {
+        KeeperInfoVO current = current(token);
+        CareSysUser member = careSysUserService.getById(current.getId());
+        BeanUtil.copyProperties(member,current);
+        return Result.success(current);
+    }
+
+    @ApiOperation(value = "刷新基本信息", notes = "刷新用户基本录信息")
+    @PostMapping("refresh")
+    public Result<Object> refreshMember(@RequestHeader String token) {
+        KeeperInfoVO lastMemberInfoVO = abstractKeeperPassportService.refreshMember(token);
+        return Result.success(lastMemberInfoVO);
+    }
+
+   /* @ApiOperation(value = "校验是否要刷新小程序用户信息", notes = "校验是否要刷新小程序用户信息 true刷新")
+    @PostMapping("notMatchMemberField")
+    public Result<Object> notMatchMemberField(@RequestHeader String token) {
+        return Result.success(passportService.notMatchMemberField(token));
+    }
+*/
+    public KeeperInfoVO current(String token) {
+        return keeperPassportService.checkToken(token);
+    }
+
+}

+ 49 - 0
src/main/java/com/care/keeper/controller/KeeperPassportController.java

@@ -0,0 +1,49 @@
+package com.care.keeper.controller;
+
+import com.care.keeper.service.KeeperPassportService;
+import com.care.keeper.vo.KeeperInitParams;
+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 org.apache.commons.lang3.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+@Api(tags = "登录")
+@RestController
+@RequestMapping("/keeper/api")
+public class KeeperPassportController {
+
+
+    @Resource
+    private KeeperPassportService keeperPassportService;
+
+    @ApiOperation(value = "小程序登录", notes = "小程序授权登录")
+    @ApiParam(name = "params", value = "登录参数")
+    @PostMapping("login")
+    public Result<Object> login(@RequestBody KeeperInitParams params) {
+
+        if ("wx".equalsIgnoreCase(params.getLoginType())) {
+            CheckUtils.valueIsNull(params, "code");
+        } else if ("pwd".equalsIgnoreCase(params.getLoginType())) {
+            if (StringUtils.isBlank(params.getPhone())) {
+                return Result.error("请输入手机号码");
+            }
+            if (StringUtils.isBlank(params.getPassword())) {
+                return Result.error("请输入密码");
+            }
+        }
+        return keeperPassportService.login(params);
+    }
+
+
+    @ApiOperation(value = "小程序登出", notes = "小程序登出")
+    @PostMapping("logout")
+    public Result<Object>  logout(@RequestHeader String token) {
+        keeperPassportService.logout(token);
+        return Result.success();
+    }
+}

+ 87 - 0
src/main/java/com/care/keeper/service/AbstractKeeperPassportService.java

@@ -0,0 +1,87 @@
+package com.care.keeper.service;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.SecureUtil;
+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.util.Result;
+import com.care.keeper.vo.KeeperInfoVO;
+import com.care.keeper.vo.KeeperInitParams;
+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.Map;
+
+@Slf4j
+@Service
+public class AbstractKeeperPassportService {
+
+    @Resource
+    private RedisUtil redisUtil;
+
+
+    @Resource
+    private CareSysUserService careSysUserService;
+
+    public Result<Object> cache(KeeperInitParams params) {
+        String token = IdUtil.fastUUID();
+        // cache member
+        CareSysUser member = null;
+
+        if ("wx".equalsIgnoreCase(params.getLoginType())) {
+            member = careSysUserService.detailByOpenid4Keeper(params.getOpenid());
+            if (member == null) {
+                member = careSysUserService.detailByPhone4Keeper(params.getPhone());
+                if (member == null) {
+                    return Result.error("账号不存在!");
+                }
+            }
+        } else if ("pwd".equalsIgnoreCase(params.getLoginType())) {
+            member = careSysUserService.detailByPhone4Keeper(params.getPhone());
+            if (member == null) {
+                return Result.error("账号密码不匹配");
+            }
+            if (!StrUtil.equalsIgnoreCase(SecureUtil.md5(params.getPassword()), member.getPassword())) {
+                return Result.error("账号密码不匹配");
+            }
+        }
+        if (StringUtils.isBlank(member.getOpenId()) && StringUtils.isNotBlank(params.getOpenid())) {
+            UpdateWrapper<CareSysUser> careMemberInfoUpdateWrapper = new UpdateWrapper<>();
+            careMemberInfoUpdateWrapper.lambda().eq(CareSysUser::getId,member.getId()).set(CareSysUser::getOpenId,params.getOpenid());
+            boolean bindFlag = this.careSysUserService.update(careMemberInfoUpdateWrapper);
+            if (bindFlag) {
+                member.setOpenId(params.getOpenid());
+            }
+        }
+        KeeperInfoVO keeperInfoVO = new KeeperInfoVO();
+        BeanUtil.copyProperties(member,keeperInfoVO);
+        redisUtil.hset(RedisKeyConstant.PINANSHOUHU_LOGIN_INFO, token, keeperInfoVO, RedisKeyConstant.PINANSHOUHU_LOGIN_INFO_TIME);
+
+        Map<String,Object> data = Maps.newHashMap();
+        data.put("token", token);
+        data.put("member", keeperInfoVO);
+        return Result.success(data);
+    }
+
+    public KeeperInfoVO refreshMember(String token) {
+        if (StrUtil.isNotBlank(token) && redisUtil.hHasKey(RedisKeyConstant.PINANSHOUHU_LOGIN_INFO, token)) {
+            KeeperInfoVO oldMemberInfoVo = (KeeperInfoVO)redisUtil.hget(RedisKeyConstant.PINANSHOUHU_LOGIN_INFO, token);
+            CareSysUser member = careSysUserService.getById(oldMemberInfoVo.getId());
+            if (oldMemberInfoVo != null && member != null) {
+                KeeperInfoVO memberInfoVO = new KeeperInfoVO();
+                BeanUtil.copyProperties(member,memberInfoVO);
+                redisUtil.hset(RedisKeyConstant.PINANSHOUHU_LOGIN_INFO, token, memberInfoVO, RedisKeyConstant.PINANSHOUHU_LOGIN_INFO_TIME);
+                return memberInfoVO;
+            }
+        }
+        return null;
+    }
+}

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

@@ -0,0 +1,338 @@
+package com.care.keeper.service;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.care.client.vo.MemberInfoVO;
+import com.care.common.cache.RedisKeyConstant;
+import com.care.common.cache.RedisUtil;
+import com.care.common.entity.*;
+import com.care.common.enums.*;
+import com.care.common.exception.BDException;
+import com.care.common.service.*;
+import com.care.common.vo.PageReqVO;
+import com.care.common.vo.device.DeviceVO;
+import com.care.common.vo.event.*;
+import com.care.keeper.vo.DeviceMonitorVO;
+import com.care.keeper.vo.HouseContactVO;
+import com.care.keeper.vo.KeeperInfoVO;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.compress.utils.Lists;
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author: lilt
+ * @Date: 2021/6/7
+ * @Desc:
+ */
+@Slf4j
+@Service
+public class KeeperApiService {
+    @Resource
+    private CareDeviceService careDeviceService;
+    @Resource
+    private CareMemberInfoService careMemberInfoService;
+    @Resource
+    private CareHouseContactService careHouseContactService;
+    @Resource
+    private CareEventOrderService careEventOrderService;
+    @Resource
+    private CareEventOrderHandleHisService careEventOrderHandleHisService;
+    @Resource
+    private FileUploadService fileUploadService;
+    @Resource
+    private CareHouseService careHouseService;
+    @Resource
+    private CareOrganizationService careOrganizationService;
+    @Resource
+    private CareStationService careStationService;
+    @Resource
+    private CareSysUserService careSysUserService;
+    @Resource
+    private CareEventOrderChambService careEventOrderChambService;
+    @Resource
+    private CareEventOrderOlderService careEventOrderOlderService;
+
+    @Resource
+    private CareEventOrderKeyApplyService careEventOrderKeyApplyService;
+
+    @Resource
+    RedisUtil redisUtil;
+
+    /**
+     * 管理服务人数
+     * @param keeperInfoVO
+     * @return
+     */
+    public int queryOlderCount(KeeperInfoVO keeperInfoVO){
+        return this.careSysUserService.queryOlderCountByChambId(keeperInfoVO.getId());
+    }
+
+    /**
+     * 待处理的工单
+     *
+     * @param pageReqVo
+     * @param chambId
+     * @return
+     */
+    public IPage<ChambEventOrderVO> queryTodoEventByChambId(PageReqVO pageReqVo, Long chambId) {
+        return this.careEventOrderChambService.queryTodoEventByChambId(pageReqVo,chambId);
+    }
+
+    /**
+     * 进行中的工单
+     *
+     * @param pageReqVo
+     * @param chambId
+     * @return
+     */
+    public IPage<ChambEventOrderVO> queryDoingEventByChambId(PageReqVO pageReqVo, Long chambId) {
+        return this.careEventOrderChambService.queryDoingEventByChambId(pageReqVo,chambId);
+    }
+
+    /**
+     * 完成的工单
+     *
+     * @param pageReqVo
+     * @param chambId
+     * @return
+     */
+    public IPage<ChambEventOrderVO> queryDoneEventByChambId(PageReqVO pageReqVo, Long chambId) {
+        return this.careEventOrderChambService.queryDoneEventByChambId(pageReqVo,chambId);
+    }
+
+    public ChambEventOrderVO getChambOrder(Long id){
+        CareEventOrderChamb orderChamb = this.careEventOrderChambService.getById(id);
+        ChambEventOrderVO  chambEventOrderVO = new ChambEventOrderVO();
+        BeanUtil.copyProperties(orderChamb,chambEventOrderVO);
+        return chambEventOrderVO;
+    }
+
+    /**
+     * 事件详情
+     * @param orderId
+     * @return
+     */
+    public EventOrderVO getEventInfo(Long orderId){
+        CareEventOrder eventOrder = this.careEventOrderService.getById(orderId);
+        EventOrderVO vo = new EventOrderVO();
+        BeanUtil.copyProperties(eventOrder,vo);
+        vo.setOrderTypeName(OrderTypeEnum.getCodeToName(vo.getOrderType()));
+        return vo;
+    }
+    /**
+     * 查询老人列表
+     * @param orderId
+     * @return
+     */
+    public List<OrderOlderVO>  queryOrderOlderList(Long orderId){
+        List<OrderOlderVO> orderOlderVOList = Lists.newArrayList();
+        QueryWrapper<CareEventOrderOlder> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(CareEventOrderOlder::getOrderId,orderId);
+        List<CareEventOrderOlder> ceoos  = this.careEventOrderOlderService.list(queryWrapper);
+        if (CollUtil.isNotEmpty(ceoos)){
+            ceoos.forEach(item->{
+                OrderOlderVO orderOlderVO = new OrderOlderVO();
+                BeanUtil.copyProperties(item,orderOlderVO);
+                orderOlderVO.setStatusDesc(OrderOlderStatusEnum.getCodeToName(orderOlderVO.getStatus()));
+                orderOlderVOList.add(orderOlderVO);
+            });
+        }
+        return orderOlderVOList;
+    }
+
+    /**
+     * 查询事件紧急联系人
+     * @param orderId
+     * @return
+     */
+    public List<HouseContactVO> queryContactByOrderId(Long orderId){
+        List<HouseContactVO> vos = Lists.newArrayList();
+        CareEventOrder order = this.careEventOrderService.getById(orderId);
+        QueryWrapper<CareHouseContact> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(CareHouseContact::getHouseId, order.getHouseId())
+                .orderByAsc(CareHouseContact::getContactLevel);
+        List<CareHouseContact> contacts = this.careHouseContactService.list(queryWrapper);
+        if (CollUtil.isNotEmpty(contacts)){
+            contacts.forEach(item -> {
+                HouseContactVO vo = new HouseContactVO();
+                BeanUtil.copyProperties(item,vo);
+                vos.add(vo);
+            });
+        }
+        return vos;
+    }
+
+    /**
+     * 钥匙信息
+     * @param orderId
+     * @param keeperId
+     * @return
+     */
+    public OrderKeyApplyVO getApplyKeyInfo(Long orderId,Long keeperId ){
+        QueryWrapper<CareEventOrderKeyApply> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(CareEventOrderKeyApply::getOrderId,orderId).eq(CareEventOrderKeyApply::getApplyRole,UserRoleEnum.CHANMB.getValue())
+                .eq(CareEventOrderKeyApply::getApplyUserId,keeperId);
+        List<CareEventOrderKeyApply> datas = this.careEventOrderKeyApplyService.list(queryWrapper);
+        if (CollUtil.isNotEmpty(datas)){
+            OrderKeyApplyVO keyApplyVO = new OrderKeyApplyVO();
+            BeanUtil.copyProperties(datas.get(0),keyApplyVO);
+            return keyApplyVO;
+        }else {
+            return null;
+        }
+    }
+    /**
+     * 申请钥匙
+     * @param orderId
+     * @param keeperInfoVO
+     * @return
+     */
+    public boolean applyKey(Long orderId,KeeperInfoVO keeperInfoVO){
+        String key = RedisKeyConstant.KEY_APPLY_LOCAK+":"+keeperInfoVO.getId();
+        boolean result = redisUtil.tryLock(key,3000);
+        Date date = DateUtil.date();
+        boolean flag =false;
+        try{
+            if (result){
+                CareEventOrder order = this.careEventOrderService.getById(orderId);
+                CareEventOrderKeyApply keyApply = new CareEventOrderKeyApply();
+                keyApply.setOrgId(order.getOrgId());
+                keyApply.setStationId(order.getStationId());
+                keyApply.setHouseId(order.getHouseId());
+                keyApply.setOrderId(orderId);
+                keyApply.setApplyRole(UserRoleEnum.CHANMB.getValue());
+                keyApply.setApplyUserId(keeperInfoVO.getId());
+                keyApply.setApplyUserName(keeperInfoVO.getName());
+                keyApply.setStatus(KeyAuthEnum.TODO.getValue());
+                keyApply.setCreateTime(date);
+                keyApply.setModifyTime(date);
+                keyApply.setRelationTypeDesc(RelationTypeEnum.CHANMB.getName());
+                flag = this.careEventOrderKeyApplyService.save(keyApply);
+                if (flag){
+                    CareEventOrderHandleHis his = new CareEventOrderHandleHis();
+                    his.setOrgId(keyApply.getOrgId());
+                    his.setStationId(keyApply.getStationId());
+                    his.setOrderId(keyApply.getOrderId());
+                    his.setLogType(LogTypeEnum.KEY.getValue());
+                    his.setLogObjectId(keyApply.getApplyUserId());
+                    his.setLogObjectName(keyApply.getApplyUserName());
+                    his.setLogResult("申请钥匙");
+                    his.setOpUserRole(UserRoleEnum.SEAT.getValue());
+                    his.setOpUserId(keyApply.getApplyUserId());
+                    his.setOpUserName(keyApply.getApplyUserName());
+                    his.setCreateTime(date);
+                    his.setRelationTypeDesc(RelationTypeEnum.CHANMB.getName());
+                    this.careEventOrderHandleHisService.save(his);
+                }
+            }else {
+                throw  new BDException("已经申请,请勿重复申请");
+            }
+        }finally {
+            redisUtil.releaseLock(key);
+        }
+        return flag;
+    }
+
+    /**
+     * 到达确认
+     * @param orderChambId
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public boolean daoDaConfirm(Long orderChambId){
+        boolean flag = false;
+        CareEventOrderChamb orderChamb = this.careEventOrderChambService.getById(orderChambId);
+        Date date = DateUtil.date();
+        UpdateWrapper<CareEventOrderChamb> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().eq(CareEventOrderChamb::getId,orderChambId)
+                .set(CareEventOrderChamb::getDaodaTime,date)
+                .set(CareEventOrderChamb::getModifyTime,date);
+        flag = this.careEventOrderChambService.update(updateWrapper);
+        if (flag){
+            //保存日志
+            CareEventOrderHandleHis his = new CareEventOrderHandleHis();
+            his.setOrgId(orderChamb.getOrgId());
+            his.setStationId(orderChamb.getStationId());
+            his.setOrderId(orderChamb.getOrderId());
+            his.setLogType(LogTypeEnum.CHAMB.getValue());
+            his.setLogObjectId(orderChamb.getId());
+            his.setLogObjectName(orderChamb.getChambName());
+            his.setLogResult("已到达");
+            his.setOpUserRole(UserRoleEnum.CHANMB.getValue());
+            his.setOpUserId(orderChamb.getChambId());
+            his.setOpUserName(orderChamb.getChambName());
+            his.setCreateTime(date);
+            his.setRelationTypeDesc(RelationTypeEnum.CHANMB.getName());
+            this.careEventOrderHandleHisService.save(his);
+        }
+        return flag;
+    }
+    /**
+     * 离开确认
+     * @param orderChambId
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public boolean liKaiConfirm(Long orderChambId,String remark,String scenePic){
+        boolean flag = false;
+        CareEventOrderChamb orderChamb = this.careEventOrderChambService.getById(orderChambId);
+        Date date = DateUtil.date();
+        UpdateWrapper<CareEventOrderChamb> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().eq(CareEventOrderChamb::getId,orderChambId)
+                .set(CareEventOrderChamb::getRemark,remark)
+                .set(CareEventOrderChamb::getScenePic,scenePic)
+                .set(CareEventOrderChamb::getLikaiTime,date)
+                .set(CareEventOrderChamb::getStatus,ChambOrderStatusEnum.COMPLETE.getValue())
+                .set(CareEventOrderChamb::getModifyTime,date);
+        flag = this.careEventOrderChambService.update(updateWrapper);
+        if (flag){
+            //保存日志
+            CareEventOrderHandleHis his = new CareEventOrderHandleHis();
+            his.setOrgId(orderChamb.getOrgId());
+            his.setStationId(orderChamb.getStationId());
+            his.setOrderId(orderChamb.getOrderId());
+            his.setLogType(LogTypeEnum.CHAMB.getValue());
+            his.setLogObjectId(orderChamb.getId());
+            his.setLogObjectName(orderChamb.getChambName());
+            his.setLogResult("已离开");
+            his.setOpUserRole(UserRoleEnum.CHANMB.getValue());
+            his.setOpUserId(orderChamb.getChambId());
+            his.setOpUserName(orderChamb.getChambName());
+            his.setCreateTime(date);
+            his.setRelationTypeDesc(RelationTypeEnum.CHANMB.getName());
+            this.careEventOrderHandleHisService.save(his);
+        }
+        return flag;
+    }
+    /**
+     * 获取处理记录
+     * @return
+     */
+    public List<OrderHandleHisVO> queryOrderHandleHis(Long orderId){
+        List<OrderHandleHisVO> result = Lists.newArrayList();
+        QueryWrapper<CareEventOrderHandleHis> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(CareEventOrderHandleHis::getOrderId,orderId)
+                .orderByDesc(CareEventOrderHandleHis::getCreateTime);
+        List<CareEventOrderHandleHis> datas = this.careEventOrderHandleHisService.list(queryWrapper);
+        if (CollUtil.isNotEmpty(datas)){
+            datas.forEach(item ->{
+                OrderHandleHisVO hisVO = new OrderHandleHisVO();
+                BeanUtil.copyProperties(item,hisVO);
+                result.add(hisVO);
+            });
+        }
+        return result;
+    }
+}

+ 56 - 0
src/main/java/com/care/keeper/service/KeeperPassportService.java

@@ -0,0 +1,56 @@
+package com.care.keeper.service;
+
+import com.care.common.cache.RedisKeyConstant;
+import com.care.common.cache.RedisUtil;
+import com.care.common.exception.BDException;
+import com.care.common.util.CheckUtils;
+import com.care.common.util.Result;
+import com.care.keeper.vo.KeeperInfoVO;
+import com.care.keeper.vo.KeeperInitParams;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Slf4j
+@Service
+public class KeeperPassportService {
+
+    @Resource
+    private RedisUtil redisUtil;
+    @Resource
+    private WxKeeperPassportService wxKeeperPassportService;
+
+    public Result<Object> login(KeeperInitParams params) {
+
+        if ("wx".equalsIgnoreCase(params.getLoginType())) {
+            CheckUtils.valueIsNull(params, "code");
+        } else if ("pwd".equalsIgnoreCase(params.getLoginType())) {
+            CheckUtils.valueIsNull(params, "phone");
+            CheckUtils.valueIsNull(params, "password");
+        }
+        Result<Object>  result = wxKeeperPassportService.login(params);
+        return result;
+    }
+
+    public void logout(String token) {
+        CheckUtils.notNull(token, "token");
+        KeeperInfoVO memberInfoVO = (KeeperInfoVO) redisUtil.hget(RedisKeyConstant.PINANSHOUHU_LOGIN_INFO, token);
+        if (memberInfoVO != null) {
+            redisUtil.hset(RedisKeyConstant.PINANSHOUHU_LOGIN_INFO, token, null);
+        }
+    }
+
+    public KeeperInfoVO checkToken(String token) {
+        CheckUtils.notNull(token, "token");
+        if (!redisUtil.hHasKey(RedisKeyConstant.PINANSHOUHU_LOGIN_INFO, token)) {
+            throw new BDException(400002, "TOKEN WAS WRONG :[{"+token+"}]" );
+        }
+        return (KeeperInfoVO) redisUtil.hget(RedisKeyConstant.PINANSHOUHU_LOGIN_INFO, token);
+    }
+
+    public boolean notMatchMemberField(String token) {
+
+        return false;
+    }
+}

+ 76 - 0
src/main/java/com/care/keeper/service/WxKeeperPassportService.java

@@ -0,0 +1,76 @@
+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.Result;
+import com.care.keeper.config.KeeperWxConfig;
+import com.care.keeper.config.PlatformPinanshouhuConfig;
+import com.care.keeper.vo.KeeperInitParams;
+import com.google.gson.Gson;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.text.MessageFormat;
+
+@Slf4j
+@Service
+public class WxKeeperPassportService extends AbstractKeeperPassportService {
+
+    @Resource
+    private RedisUtil redisUtil;
+
+    @Resource
+    private PlatformPinanshouhuConfig platformPinanshouhuConfig;
+
+    Gson gson = new Gson();
+
+    public Result<Object> login(KeeperInitParams params) {
+        /*WxConfig wxConfig = platformPinanbaoConfig.wxConfig();
+        // 解析codeUrl
+        String codeUrl = MessageFormat.format(wxConfig.getCodeUrl(), wxConfig.getAppId(), wxConfig.getSecret(), params.getCode());
+        // 通过codeUrl获取openid
+        JSONObject jsonObject = this.httpGet(codeUrl);
+        log.warn("-----jsonObject:[{}]", jsonObject);
+
+        String openid = jsonObject.getStr("openid");
+        String sessionKey = jsonObject.getStr("session_key"); // TODO 暂时用不到
+        log.warn("-----openid:[{}], session_key:[{}]", openid, sessionKey);
+
+        // TODO 测试阶段先注释掉
+        params.setOpenid(openid);*/
+        return cache(params);
+    }
+
+    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() {
+        KeeperWxConfig wxConfig = platformPinanshouhuConfig.keeperWxConfig();
+        String access_token = (String) redisUtil.hget(RedisKeyConstant.WX_PINANSHOUHU_ACCESS_TOKEN, wxConfig.getAppId());
+        if (access_token != null) {
+            return access_token;
+        }
+        return this.flushWxToken();
+    }
+
+    private String flushWxToken() {
+        KeeperWxConfig wxConfig = platformPinanshouhuConfig.keeperWxConfig();
+        // 解析codeUrl
+        String tokenUrl = MessageFormat.format(wxConfig.getTokenUrl(), wxConfig.getAppId(), wxConfig.getSecret());
+        // 通过codeUrl获取openid
+        JSONObject jsonObject = this.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;
+    }
+
+}

+ 40 - 0
src/main/java/com/care/keeper/vo/DeviceMonitorVO.java

@@ -0,0 +1,40 @@
+package com.care.keeper.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author: lilt
+ * @Date: 2021/6/8
+ * @Desc:
+ */
+@Data
+@ApiModel(description = "设备监测数据")
+public class DeviceMonitorVO {
+    private Long id;
+    @ApiModelProperty("呼吸频率")
+    private Integer breathRate;
+    @ApiModelProperty("呼吸频率单位")
+    private String breathRateUnit="次/分";
+
+    @ApiModelProperty("心跳频率")
+    private Integer heartRate;
+    @ApiModelProperty("心跳频率单位")
+    private String heartRateUnit="次/分";
+
+    @ApiModelProperty("活动距离")
+    private Integer activityDistance;
+    @ApiModelProperty("活动距离单位")
+    private String activityDistanceUnit = "m";
+
+    @ApiModelProperty("活动时长-N小时")
+    private Integer activityTimeHour;
+    @ApiModelProperty("活动时长-N分钟")
+    private Integer activityTimeMinute;
+
+    @ApiModelProperty("睡眠时长-N小时")
+    private Integer sleepTimeHour;
+    @ApiModelProperty("睡眠时长-N分钟")
+    private Integer sleepTimeMinute;
+}

+ 73 - 0
src/main/java/com/care/keeper/vo/HouseContactVO.java

@@ -0,0 +1,73 @@
+package com.care.keeper.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 被监护人紧急联系人(CareHouseContact)实体类
+ *
+ * @author makejava
+ * @since 2021-06-02 21:54:55
+ */
+
+@Data
+@ApiModel(value = "房屋紧急联系人", description = "")
+public class HouseContactVO implements Serializable {
+    private static final long serialVersionUID = -90072609726445263L;
+
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+
+    @ApiModelProperty("机构ID")
+    private Long orgId;
+
+
+    @ApiModelProperty("服务站ID")
+    private Long stationId;
+
+
+    @ApiModelProperty("房屋ID")
+    private Long houseId;
+
+
+    @ApiModelProperty("姓名")
+    private String name;
+
+
+    @ApiModelProperty("电话")
+    private String phone;
+
+
+    @ApiModelProperty("关系类别:kinsman亲属  neighbor:邻居")
+    private String relationType;
+    @ApiModelProperty("关系描述")
+    private String relationTypeDesc;
+
+    @ApiModelProperty("联系级别")
+    private Integer contactLevel;
+
+
+    @ApiModelProperty("经度")
+    private Double longitude;
+
+
+    @ApiModelProperty("纬度")
+    private Double latitude;
+
+
+    @ApiModelProperty("createTime")
+    private Date createTime;
+
+
+    @ApiModelProperty("modifyTime")
+    private Date modifyTime;
+
+
+}

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

@@ -0,0 +1,73 @@
+package com.care.keeper.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 用户登录信息(CareMemberInfo)实体类
+ *
+ * @author makejava
+ * @since 2021-06-07 00:18:53
+ */
+@ApiModel(description = "登陆人信息")
+@Data
+public class KeeperInfoVO implements Serializable {
+    private static final long serialVersionUID = 676002338375207640L;
+
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+
+    @ApiModelProperty("机构ID")
+    private Long orgId;
+    @ApiModelProperty("机构名称")
+    private String orgName;
+
+
+    @ApiModelProperty("服务站ID,角色为坐席时,该字段可能未空")
+    private Long stationId;
+
+    @ApiModelProperty("机构名称")
+    private String stationName;
+
+    @ApiModelProperty("站点地址")
+    private String stationAddr;
+
+    @ApiModelProperty("姓名")
+    private String name;
+
+
+    @ApiModelProperty("电话")
+    private String phone;
+
+
+    @ApiModelProperty("姓名:M:男 W:女")
+    private String gender;
+
+
+    @ApiModelProperty("状态:1正常;2:休假")
+    private String status;
+
+
+    @ApiModelProperty("经度")
+    private Double longitude;
+
+
+    @ApiModelProperty("纬度")
+    private Double latitude;
+
+    @ApiModelProperty("微信openid")
+    private String openId;
+
+
+    @ApiModelProperty("头像")
+    private String profile;
+
+
+}

+ 33 - 0
src/main/java/com/care/keeper/vo/KeeperInitParams.java

@@ -0,0 +1,33 @@
+package com.care.keeper.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@ApiModel(description = "登录参数")
+@Data
+public class KeeperInitParams implements Serializable {
+
+    private static final long serialVersionUID = 2825354998621065333L;
+    @ApiModelProperty(name = "code", value = "授权码")
+    private String code;
+    @ApiModelProperty(name = "openid", value = "平台标识")
+    private String openid;
+
+    @ApiModelProperty(name = "nickname", value = "昵称")
+    private String nickname;
+
+    @ApiModelProperty(name = "profile", value = "头像")
+    private String profile;
+
+    @ApiModelProperty(name = "phone", value = "手机号码")
+    private String phone;
+
+    @ApiModelProperty(name = "password", value = "密码")
+    private String password;
+
+    @ApiModelProperty(name = "loginType", value = "登录方式")
+    private String loginType;
+}

+ 2 - 2
src/main/resources/application-dev.properties

@@ -23,5 +23,5 @@ spring.redis.database=0
 spring.redis.timeout=500
 spring.redis.password=106@!en4
 #################################### 以下是redis的集群标准配置 结束 ##############################
-file.savePath=/root/care
-file.url=http://124.70.58.209:17777/
+file.savePath=/root/care/file
+file.url=https://rfcare.106tec.com/care-file/

+ 29 - 0
src/main/resources/application-prod.properties

@@ -0,0 +1,29 @@
+### 开发环境配置文件 2021-01-11
+
+## 数据源 配置
+# 数据库连接URL
+spring.datasource.url=jdbc:mysql://localhost:3306/rfcare?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
+# 数据库登录名
+spring.datasource.username=root
+# 数据库登录密码
+spring.datasource.auth=care#476^
+
+## mybatis-plus 配置
+# 将 SQL 语句输出到控制台(生产环境关闭)
+mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
+
+## logging 日志配置
+# 设置日志输出级别
+logging.level.root=info
+
+#
+springfox.documentation.swagger.v2.host=www.rfcare.cn/api
+
+#################################### 以下是redis的集群标准配置 ##################################
+spring.redis.host=localhost
+spring.redis.port=6379
+spring.redis.database=0
+spring.redis.timeout=500
+#################################### 以下是redis的集群标准配置 结束 ##############################
+file.savePath=/data/care/care-file
+file.url=https://www.rfcare.cn/care-file/

+ 15 - 1
src/main/resources/application.properties

@@ -52,10 +52,24 @@ spring.freemarker.template-loader-path=classpath:/template,classpath:/font
 #spring.freemarker.check-template-location=false
 
 
-
+#频安宝 小程序
 wx.pinanbao.codeUrl=https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code
 wx.pinanbao.tokenUrl=https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}
 wx.pinanbao.appid=wxda02870032b8f928
 wx.pinanbao.secret=5984b6cf5dad4693eb60cbc494d9f385
 
+#频安守护 小程序
+wx.pinanshouhu.codeUrl=https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code
+wx.pinanshouhu.tokenUrl=https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}
+wx.pinanshouhu.appid=wx6d5e4dd85fa3338c
+wx.pinanshouhu.secret=76db78871a7311e1dd3701795e5ee55e
+
 
+#短信信息
+sms.notice.endpoint=sms.tencentcloudapi.com
+sms.notice.region=ap-beijing
+sms.notice.secretId=AKIDkKfkbCX0HJ4YkgMlunPkpdBSVHo43mEQ
+sms.notice.secretKey=wb08zZrRkmY3IGyPZS4PUIp66pHUQ6Vd
+sms.notice.smsSdkAppId=1400531694
+sms.notice.signName=熵行科技
+sms.notice.templateId=986791

+ 41 - 1
src/main/resources/mybatis/CareEventOrderChambMapper.xml

@@ -1,6 +1,46 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.care.common.mapper.CareEventOrderChambMapper">
-   
+
+    <select id="queryTodoEventByChambId" resultType="com.care.common.vo.event.ChambEventOrderVO">
+        select
+            ceoc.*,
+            ceo.title
+        from care_event_order_chamb ceoc
+        left join care_event_order ceo on ceo.id = ceoc.order_id
+        <where>
+            ( ceo.status = '0' or ceo.status = '1') <!-- 工单未处理 处理中 -->
+            and ceoc.status = 0
+            and ceoc.chamb_id = #{chambId}
+        </where>
+        order by ceo.create_time asc
+    </select>
+
+    <select id="queryDoingEventByChambId" resultType="com.care.common.vo.event.ChambEventOrderVO">
+        select
+            ceoc.*,
+            ceo.title
+        from care_event_order_chamb ceoc
+        left join care_event_order ceo on ceo.id = ceoc.order_id
+        <where>
+            ( ceo.status = '0' or ceo.status = '1') <!-- 工单未处理 处理中 -->
+            and ceoc.status = 1
+            and ceoc.chamb_id = #{chambId}
+        </where>
+        order by ceo.create_time asc
+    </select>
+
+    <select id="queryDoneEventByChambId" resultType="com.care.common.vo.event.ChambEventOrderVO">
+        select
+            ceoc.*,
+            ceo.title
+        from care_event_order_chamb ceoc
+        left join care_event_order ceo on ceo.id = ceoc.order_id
+        <where>
+            and ceoc.status = 2
+            and ceoc.chamb_id = #{chambId}
+        </where>
+        order by ceo.create_time asc
+    </select>
 
 </mapper>

+ 9 - 0
src/main/resources/mybatis/CareEventOrderMapper.xml

@@ -18,4 +18,13 @@
             </if>
         </where>
     </select>
+
+    <select id="queryOrderOlderList" resultType="com.care.common.vo.event.OrderOlderVO">
+        select
+            co.*,
+            case when (select count(1) from cc_call_result ccr where ccr.house_id=co.house_id and ccr.phone = co.phone)>=1
+            then 1 else 0 end as status
+        from care_older co
+        where co.house_id =#{houseId}
+    </select>
 </mapper>

+ 0 - 1
src/main/resources/mybatis/CareOlderMapper.xml

@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.care.common.mapper.CareOlderMapper">
-   
 
 </mapper>

+ 9 - 1
src/main/resources/mybatis/CareSysUserMapper.xml

@@ -1,6 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.care.common.mapper.CareSysUserMapper">
-   
+
+   <select id="queryOlderCountByChambId" resultType="java.lang.Integer">
+    select count(o.id)
+    from care_older o
+    left join care_house h on h.id = o.house_id
+    left join care_sys_user csu on csu.id = h.chamb_id
+    where csu.id = #{id}
+
+</select>
 
 </mapper>