wangjun 4 år sedan
förälder
incheckning
cb9af0ef78
46 ändrade filer med 1909 tillägg och 221 borttagningar
  1. 3 0
      business/base-service/src/main/java/com/yihu/jw/doctor/dao/BaseDoctorHospitalDao.java
  2. 8 0
      common/common-entity/sql记录
  3. 1 1
      common/common-entity/src/main/java/com/yihu/jw/entity/care/apply/PatientBedApplyDo.java
  4. 36 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/assistance/EmergencyAssistanceDO.java
  5. 12 0
      common/common-entity/src/main/java/com/yihu/jw/entity/util/AesEncryptUtils.java
  6. 35 0
      common/common-util/src/main/java/com/yihu/jw/util/http/HttpClientUtil.java
  7. 38 2
      server/svr-authentication/src/main/java/com/yihu/jw/security/core/userdetails/jdbc/WlyyUserDetailsService.java
  8. 65 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/WlyyTokenGranter.java
  9. 10 4
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java
  10. 4 4
      svr/svr-cloud-care/pom.xml
  11. 47 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/BaseAop.java
  12. 1 35
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/ObserverRequiredAOP.java
  13. 45 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/RedisLock.java
  14. 178 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/RedisLockAOP.java
  15. 2 24
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/ServicesAuthAOP.java
  16. 125 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/config/RedisConfig.java
  17. 3 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/apply/PatientBedApplyDao.java
  18. 2 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/assistance/EmergencyAssistanceDao.java
  19. 5 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/security/SecurityMonitoringOrderDao.java
  20. 2 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/team/BaseTeamMemberDao.java
  21. 42 3
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/assistance/EmergencyAssistanceEndpoint.java
  22. 463 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/device/PatientHealthController.java
  23. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/family/FamilyMemberEndpoint.java
  24. 4 2
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/lifeCare/DoctorLifeCareEndpoint.java
  25. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/lifeCare/PatientLifeCareEndpoint.java
  26. 31 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/patient/PatientEndpoint.java
  27. 45 7
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/sign/SignEndpoint.java
  28. 29 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/exception/BusinessException.java
  29. 46 8
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/apply/PatientBedApplyService.java
  30. 210 48
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/assistance/EmergencyAssistanceService.java
  31. 109 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/common/RedisService.java
  32. 49 3
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/consult/ConsultTeamService.java
  33. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/doctor/CareDoctorService.java
  34. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/family/PatientFamilyMemberService.java
  35. 38 8
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/lifeCare/LifeCareOrderService.java
  36. 2 2
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/message/DoctorMessageService.java
  37. 10 4
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/patient/CarePatientService.java
  38. 28 13
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/security/SecurityMonitoringOrderService.java
  39. 6 20
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/ArchiveService.java
  40. 24 13
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/CapacityAssessmentRecordService.java
  41. 81 13
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/ServicePackageService.java
  42. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/team/BaseTeamService.java
  43. 4 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/ConstantUtil.java
  44. 22 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/RedisConstant.java
  45. 12 0
      svr/svr-cloud-care/src/main/resources/application.yml
  46. 27 0
      svr/svr-cloud-care/src/main/test/com/yihu/jw/test/LatTest.java

+ 3 - 0
business/base-service/src/main/java/com/yihu/jw/doctor/dao/BaseDoctorHospitalDao.java

@ -24,6 +24,9 @@ public interface BaseDoctorHospitalDao extends PagingAndSortingRepository<BaseDo
    @Query("select bdo from BaseDoctorHospitalDO bdo where bdo.doctorCode = ?1 and bdo.del=1")
    List<BaseDoctorHospitalDO> findByDoctorCode(String doctorCode);
    @Query("select bdo from BaseDoctorHospitalDO bdo where bdo.doctorCode = ?1 and bdo.del=1 group by bdo.orgCode")
    List<BaseDoctorHospitalDO> findDistinctOrgByDoctorCode(String doctorCode);
    List<BaseDoctorHospitalDO> findByOrgCode(String orgCode);

+ 8 - 0
common/common-entity/sql记录

@ -431,6 +431,14 @@ alter TABLE base_emergency_assistance_order add COLUMN complete_time timestamp N
ALTER table base.base_doctor add COLUMN `doctor_locate_address` varchar(100) DEFAULT NULL COMMENT '医生当前定位地址';
ALTER table base.base_emergency_assistance_order add COLUMN `team_code` varchar(100) DEFAULT NULL COMMENT '服务团队';
--2021-04-23
ALTER table base.base_emergency_assistance_order modify COLUMN  `conclusion_img` varchar(1000) DEFAULT NULL COMMENT '服务相关附件';
-- 2021-04-26
ALTER table base.base_emergency_assistance_order add COLUMN `proxy_patient` varchar(50) DEFAULT NULL COMMENT '代理发起工单的居民code,替父母,孩子等发起工单';
ALTER table base.base_emergency_assistance_order add COLUMN `proxy_patient_name` varchar(10) DEFAULT NULL COMMENT '代理发起工单的居民code,替父母,孩子等发起工单';
ALTER table base.base_emergency_assistance_order add COLUMN  `proxy_patient_phone` varchar(15) DEFAULT NULL COMMENT '代理发起工单的居民联系电话';
ALTER table base.base_emergency_assistance_order add COLUMN   `type` tinyint(2) DEFAULT '1' COMMENT '发起类型(1本人发起 2家人待预约 3医生代预约)';
-- 2021-04-20 wj
alter table base_doctor add doctor_level tinyint(4) DEFAULT NULL COMMENT '类型 1社区医生,2助老员';

+ 1 - 1
common/common-entity/src/main/java/com/yihu/jw/entity/care/apply/PatientBedApplyDo.java

@ -17,7 +17,7 @@ public class PatientBedApplyDo extends UuidIdentityEntityWithOperator {
    private String idcard;
    private String orgCode;
    private String orgName;
    private Integer status; //状态 -1取消 0已完成 1未处理 2未评估
    private Integer status; //状态 -1取消 0已完成 1未评估 2未分配服务包
    public String getPatient() {
        return patient;

+ 36 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/assistance/EmergencyAssistanceDO.java

@ -18,6 +18,9 @@ public class EmergencyAssistanceDO extends UuidIdentityEntityWithOperator {
    private String patientName; //发起救助的居民姓名
    private String patientPhone; //救助居民电话
    private String patientIdcard; //救助居民身份证
    private String proxyPatient; //代理发起工单的居民code,替父母,孩子等发起工单
    private String proxyPatientName; //代理发起工单的居民code,替父母,孩子等发起工单
    private String proxyPatientPhone; //代理发起工单的居民联系电话
    private String orgCode; //救助居民所在机构code
    private String orgName; //救助居民所在机构名称
    private String serveAddress;
@ -34,6 +37,7 @@ public class EmergencyAssistanceDO extends UuidIdentityEntityWithOperator {
    private Integer status; //工单状态 -1已取消 0已完成 1申请中
    private Date completeTime;//完成时间
    private String teamCode;
    private Integer type; //发起类型(1本人发起 2家人待预约 3医生代预约)
    private String sendMessage;//
    private Integer patientAge;
@ -201,6 +205,38 @@ public class EmergencyAssistanceDO extends UuidIdentityEntityWithOperator {
        this.teamCode = teamCode;
    }
    public String getProxyPatient() {
        return proxyPatient;
    }
    public void setProxyPatient(String proxyPatient) {
        this.proxyPatient = proxyPatient;
    }
    public String getProxyPatientName() {
        return proxyPatientName;
    }
    public void setProxyPatientName(String proxyPatientName) {
        this.proxyPatientName = proxyPatientName;
    }
    public String getProxyPatientPhone() {
        return proxyPatientPhone;
    }
    public void setProxyPatientPhone(String proxyPatientPhone) {
        this.proxyPatientPhone = proxyPatientPhone;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    @Transient
    public String getSendMessage() {
        return sendMessage;

+ 12 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/util/AesEncryptUtils.java

@ -134,5 +134,17 @@ public class AesEncryptUtils {
        return decrypt(encryptStr, KEY);
    }
    /**
     * 网关解密
     * @param encryptStr
     * @return
     */
    public static String agDecrypt(String encryptStr){
        if(StringUtils.isEmpty(encryptStr)){
            return encryptStr;
        }
        return decrypt(encryptStr, AGKEY);
    }
    private static final String AGKEY = "46A61629A19AE04C";
}

+ 35 - 0
common/common-util/src/main/java/com/yihu/jw/util/http/HttpClientUtil.java

@ -1,5 +1,6 @@
package com.yihu.jw.util.http;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
@ -111,6 +112,40 @@ public class HttpClientUtil {
        return null;
    }
    public  String get(String url,List<NameValuePair> params, String chatSet) {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        try {
            // 创建httpget.
            String entityString = EntityUtils.toString(new UrlEncodedFormEntity(params, Consts.UTF_8));
            HttpGet httpget = new HttpGet(url+"?"+entityString);
            // 执行get请求.
            CloseableHttpResponse response = httpclient.execute(httpget);
            try {
                // 获取响应实体
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    return EntityUtils.toString(entity, chatSet);
                }
            } finally {
                response.close();
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭连接,释放资源
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    /**
     * http调用方法,(健康之路开放平台)
     *

+ 38 - 2
server/svr-authentication/src/main/java/com/yihu/jw/security/core/userdetails/jdbc/WlyyUserDetailsService.java

@ -2,6 +2,7 @@ package com.yihu.jw.security.core.userdetails.jdbc;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.patient.BasePatientFamilyMemberDO;
import com.yihu.jw.entity.base.wx.BasePatientWechatDo;
import com.yihu.jw.entity.hospital.family.WlyyPatientFamilyMemberDO;
import com.yihu.jw.security.core.userdetails.SaltUser;
@ -64,6 +65,10 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
    private static final String UPDATE_PATIENT_CARD_TYPE = "update base_patient set card_type = ?,alipay_id = ? where id = ?";
    private static final String DEFAULT_FAMILY_STATEMENT = "SELECT * FROM base_patient_family_member p WHERE p.patient = ? and p.family_member = ?";
    private static final String DEFAULT_PATIENT_STATEMENT = "SELECT * FROM base_patient p WHERE p.id = ? ";
    private static final String BespeakRegist = "bespeakRegist:";
@ -146,7 +151,7 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
     * 用户登录判读接口
     * 判断loginType查找用户信息
     * 用户类型 1或默认为user,2:医生登录,3:患者登录,4:i健康系统-患者登录(i健康患者可以不注册直接登录互联网系统,首次使用,根据i健康居民code去i健康查询居民信息,然后保存到base.base_patient)
     * 用户类型 5 中山医院支付宝-患者登录(可以不注册直接登录)
     * 用户类型 5 中山医院支付宝-患者登录(可以不注册直接登录) 6医养项目家人登录
     * @param username
     * @return
     */
@ -488,6 +493,24 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
                        }
                );
            }
        } else if ("6".equals(loginType)) {
            String data[] = username.split(":");
            String patientId = data[0];
            String familyPatientId = data[2];
            List<BasePatientFamilyMemberDO> familys =this.getJdbcTemplate().query(DEFAULT_FAMILY_STATEMENT, new BeanPropertyRowMapper(BasePatientFamilyMemberDO.class), patientId, familyPatientId);
            if(familys==null||familys.size()==0){
                return users;
            }
            username = data[1];
            //查找是否存在预注册 用户
            String userName = redisTemplate.opsForValue().get(BespeakRegist + username);
            if (StringUtils.isNotBlank(userName)) {
                //保存到数据库
                this.getJdbcTemplate().execute("update base_patient set del=1 where mobile='" + username + "'");
                redisTemplate.opsForValue().get(BespeakRegist + username);
                redisTemplate.delete(BespeakRegist + username);
            }
            users = this.getJdbcTemplate().query(DEFAULT_PATIENT_DETAILS_STATEMENT, new BeanPropertyRowMapper(WlyyUserDetails.class), username, username);
        }
        return users;
    }
@ -646,6 +669,10 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
            //更新登录时间
            this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = 0, p.login_date = ? where p.mobile = ? or p.idcard = ?", new Date(), username, username);
            users = this.getJdbcTemplate().query(DEFAULT_PATIENT_DETAILS_STATEMENT, new BeanPropertyRowMapper(WlyyUserSimple.class), username,username);
        } else if ("6".equals(loginType)) {
            //更新登录时间
            this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = 0, p.login_date = ? where p.mobile = ? or p.idcard = ?", new Date(), username, username);
            users = this.getJdbcTemplate().query(DEFAULT_PATIENT_DETAILS_STATEMENT, new BeanPropertyRowMapper(WlyyUserSimple.class), username, username);
        }
        logger.info("login:登录进入6");
@ -722,10 +749,19 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
        return idcard;
    }
    public static List<String> loginTypeList = new ArrayList<>();
    static {
        loginTypeList.add("1");
        loginTypeList.add("2");
        loginTypeList.add("3");
        loginTypeList.add("4");
        loginTypeList.add("5");
        loginTypeList.add("6");
    }
    public boolean setRolePhth(String loginType, OAuth2AccessToken token, String id, StringRedisTemplate redisTemplate) {
        if (org.apache.commons.lang.StringUtils.isBlank(loginType) || "1".equals(loginType) || "2".equals(loginType) || "3".equals(loginType) || "4".equals(loginType)|| "5".equals(loginType)) { //1或默认查找user表,为平台管理员账号
        if (org.apache.commons.lang.StringUtils.isBlank(loginType) || loginTypeList.contains(loginType)) { //1或默认查找user表,为平台管理员账号
            String key = "wlyy2:auth:token:" + token.getValue();
            redisTemplate.opsForValue().set(key, "/**");
            redisTemplate.expire(key, token.getExpiresIn(), TimeUnit.SECONDS);

+ 65 - 0
server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/WlyyTokenGranter.java

@ -1,5 +1,6 @@
package com.yihu.jw.security.oauth2.provider;
import com.yihu.jw.entity.util.AesEncryptUtils;
import com.yihu.jw.security.core.userdetails.SaltUser;
import com.yihu.jw.security.oauth2.core.redis.WlyyRedisVerifyCodeService;
import com.yihu.jw.security.utils.AES;
@ -107,6 +108,14 @@ public class WlyyTokenGranter implements TokenGranter {
                        requestFactory,
                        userDetailsService
                ));
        tokenGranters.put(FamilyTokenGranter.GRANT_TYPE,
                new FamilyTokenGranter(
                        authenticationManager,
                        tokenServices,
                        clientDetailsService,
                        requestFactory,
                        userDetailsService
                ));
    }
    public OAuth2AccessToken grant(String grantType, TokenRequest tokenRequest) {
@ -511,6 +520,62 @@ public class WlyyTokenGranter implements TokenGranter {
                throw new InvalidGrantException("User account is locked");
            }
//            parameters.put("password",userDetails.getPassword());
            Authentication userAuth = new UsernamePasswordAuthenticationToken(username,userDetails.getPassword(),  this.authoritiesMapper.mapAuthorities(userDetails.getAuthorities()));
            ((AbstractAuthenticationToken) userAuth).setDetails(parameters);
            OAuth2Request storedOAuth2Request = getRequestFactory().createOAuth2Request(client, tokenRequest);
            return new OAuth2Authentication(storedOAuth2Request, userAuth);
        }
    }
    /**
     * 家人登录
     */
    public static class FamilyTokenGranter extends AbstractTokenGranter {
        private static final String GRANT_TYPE = "family";
        private final AuthenticationManager authenticationManager;
        private final UserDetailsService userDetailsService;
        private GrantedAuthoritiesMapper authoritiesMapper = new NullAuthoritiesMapper();
        public FamilyTokenGranter(AuthenticationManager authenticationManager,
                                  AuthorizationServerTokenServices tokenServices,
                                  ClientDetailsService clientDetailsService,
                                  OAuth2RequestFactory requestFactory,
                                  UserDetailsService userDetailsService) {
            this(authenticationManager, tokenServices, clientDetailsService, requestFactory, userDetailsService, GRANT_TYPE);
        }
        protected FamilyTokenGranter(AuthenticationManager authenticationManager,
                                     AuthorizationServerTokenServices tokenServices,
                                     ClientDetailsService clientDetailsService,
                                     OAuth2RequestFactory requestFactory,
                                     UserDetailsService userDetailsService,
                                     String grantType) {
            super(tokenServices, clientDetailsService, requestFactory, grantType);
            this.authenticationManager = authenticationManager;
            this.userDetailsService = userDetailsService;
        }
        @Override
        protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) {
            Map<String, String> parameters = new LinkedHashMap<String, String>(tokenRequest.getRequestParameters());
            String encdata = parameters.get("encdata");
            encdata = AesEncryptUtils.agDecrypt(encdata);
            //居民id 家人手机号/家人身份证 家人id 以冒号组合,如:
            //6e9d7cdb05b346a3a992739b9810319c:13559485277:3ae2673512154d5280d1dcf5ffa5626d
            String data[] = encdata.split(":");
            String username = data[1];
            SaltUser userDetails = (SaltUser)userDetailsService.loadUserByUsername(encdata);
            if (!userDetails.isEnabled()) {
                throw new InvalidGrantException("User is disabled");
            }
            if (!userDetails.isAccountNonLocked()) {
                throw new InvalidGrantException("User account is locked");
            }
//            parameters.put("password",userDetails.getPassword());
            Authentication userAuth = new UsernamePasswordAuthenticationToken(username,userDetails.getPassword(),  this.authoritiesMapper.mapAuthorities(userDetails.getAuthorities()));
            ((AbstractAuthenticationToken) userAuth).setDetails(parameters);

+ 10 - 4
server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java

@ -9,6 +9,7 @@ import com.yihu.jw.entity.base.login.BaseLoginLogDO;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.wx.WxWechatDO;
import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
import com.yihu.jw.entity.util.AesEncryptUtils;
import com.yihu.jw.restmodel.ResultStatus;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
@ -173,7 +174,7 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
     *                    username 用户名/手机/身份证号
     *                    key 图形验证码键值
     *                    text 用户输入的图形验证码
     *                    login_type 用户类型 1或默认为user,2:医生登录,3:患者登录,4:第三方同步账号登录,5.易联众居民健康卡授权登录
     *                    login_type 用户类型 1或默认为user,2:医生登录,3:患者登录,4:第三方同步账号登录,5.易联众居民健康卡授权登录 6医养项目家人登录
     * @param httpSession
     * @return
     * @throws Exception
@ -202,11 +203,16 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
        if (StringUtils.isEmpty(client_id)) {
            throw new InvalidRequestException("client_id");
        }
        if("alipay".equals(flag)){
            //支付宝登录
        if("alipay".equals(flag)||"family".equals(flag)){
            //支付宝登录||家人登录
            parameters.put("grant_type", flag);
            String encdata = parameters.get("encdata");
            encdata = AES.decrypt(encdata);
            if("alipay".equals(flag)){
                encdata = AES.decrypt(encdata);
            }else{
                encdata = AesEncryptUtils.agDecrypt(encdata);
            }
            String data[] = encdata.split(":");
            username = data[1];
            parameters.put("username", username);

+ 4 - 4
svr/svr-cloud-care/pom.xml

@ -216,11 +216,11 @@
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-commons</artifactId>
            <version>1.3.2</version>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--缩略图-->
        <dependency>

+ 47 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/BaseAop.java

@ -0,0 +1,47 @@
package com.yihu.jw.care.aop;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
/**
 * Created by yeshijie on 2021/4/23.
 */
public class BaseAop {
    public String write(int code, String msg) {
        try {
            JSONObject json = new JSONObject();
            json.put("status", code);
            json.put("msg", msg);
            return json.toString();
        } catch (Exception e) {
            return null;
        }
    }
    public String error(int code, String msg) {
        try {
            JSONObject json = new JSONObject();
            json.put("status", code);
            json.put("msg", msg);
            return json.toString();
        } catch (Exception e) {
            return null;
        }
    }
    public JSONObject getAgent(HttpServletRequest request) {
        try {
            String userAgent = request.getHeader("userAgent");
            if (StringUtils.isEmpty(userAgent)) {
                userAgent = request.getHeader("User-Agent");
            }
            System.out.println("userAgent:" + userAgent);
            return new JSONObject(userAgent);
        } catch (Exception e) {
            return null;
        }
    }
}

+ 1 - 35
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/ObserverRequiredAOP.java

@ -19,7 +19,7 @@ import java.io.PrintWriter;
 */
@Aspect
@Component
public class ObserverRequiredAOP {
public class ObserverRequiredAOP extends BaseAop{
    //Controller层切点路径
    @Pointcut("execution(* com.yihu.jw.care.endpoint..*.*(..))")
    public void controllerAspect() {
@ -52,38 +52,4 @@ public class ObserverRequiredAOP {
        return o;
    }
    public String write(int code, String msg) {
        try {
            JSONObject json = new JSONObject();
            json.put("status", code);
            json.put("msg", msg);
            return json.toString();
        } catch (Exception e) {
            return null;
        }
    }
    public String error(int code, String msg) {
        try {
            JSONObject json = new JSONObject();
            json.put("status", code);
            json.put("msg", msg);
            return json.toString();
        } catch (Exception e) {
            return null;
        }
    }
    public JSONObject getAgent(HttpServletRequest request) {
        try {
            String userAgent = request.getHeader("userAgent");
            if (StringUtils.isEmpty(userAgent)) {
                userAgent = request.getHeader("User-Agent");
            }
            System.out.println("userAgent:" + userAgent);
            return new JSONObject(userAgent);
        } catch (Exception e) {
            return null;
        }
    }
}

+ 45 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/RedisLock.java

@ -0,0 +1,45 @@
package com.yihu.jw.care.aop;
import com.yihu.jw.care.util.RedisConstant;
import java.lang.annotation.*;
/**
 * redis分布式锁注解
 *
 * Created by yeshijie on 2021/4/23.
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RedisLock {
    /**
     * 锁值
     *
     * @return {@link String}
     */
    String value() default "";
    /**
     * spel参数(#开头)
     *
     * @return {@link String}
     */
    String key() default "";
    /**
     * 上锁超时时间,单位秒
     *
     * @return long
     */
    long time() default RedisConstant.REDIS_LOCK_EXPIRE;
    /**
     * 提示
     *
     * @return {@link String}
     */
    String msg() default "请求频繁,请稍后再试";
}

+ 178 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/RedisLockAOP.java

@ -0,0 +1,178 @@
package com.yihu.jw.care.aop;
import com.google.common.base.Joiner;
import com.yihu.jw.care.exception.BusinessException;
import com.yihu.jw.care.service.common.RedisService;
import com.yihu.jw.care.util.RedisConstant;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.core.annotation.Order;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.SpelEvaluationException;
import org.springframework.expression.spel.SpelParseException;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
 * redis分布式锁AOP
 *
 * @author baichuan.wu
 * @version 1.0.0
 * @date 2019-12-26 14:16
 */
@Aspect
@Order(-1)
@Component
public class RedisLockAOP {
    private static final Logger LOGGER = LoggerFactory.getLogger(RedisLockAOP.class);
    @Autowired
    private RedisService redisService;
    private static final ExpressionParser PARSER = new SpelExpressionParser();
    private static final ParameterNameDiscoverer DISCOVERER = new LocalVariableTableParameterNameDiscoverer();
    private static final String UNDERLINE = "_";
    private static final String REDIS_LOCK = "REDIS_LOCK";
    /**
     * aop切入点
     *
     * @param redisLock
     */
    @Pointcut("@annotation(redisLock)")
    public void pointCut(RedisLock redisLock) {
    }
    /**
     * aop环绕
     *
     * @param joinPoint
     * @param redisLock
     * @return {@link Object}
     */
    @Around(value = "pointCut(redisLock)", argNames = "joinPoint,redisLock")
    public Object around(ProceedingJoinPoint joinPoint, RedisLock redisLock) throws Throwable {
        return aroundRedisLock(joinPoint, redisLock);
    }
    /**
     * 分布式锁
     *
     * @param joinPoint
     * @param redisLock
     * @return {@link Object}
     */
    public Object aroundRedisLock(ProceedingJoinPoint joinPoint, RedisLock redisLock) throws Throwable {
        String lockKey = null;
        Object result;
        boolean lock = false;
        try {
            lockKey = getLockKey(joinPoint, redisLock);
            lock = redisService.tryLock(lockKey, REDIS_LOCK, redisLock.time());
            if (!lock) {
                LOGGER.error("【LOCK】{}", redisLock.msg());
                throw new BusinessException(redisLock.msg());
            }
            result = joinPoint.proceed();
        } catch (SpelParseException e) {
            LOGGER.error("【LOCK】表达式解析异常", e);
            throw new BusinessException("【LOCK】请求异常,请稍后再试");
        } catch (SpelEvaluationException e) {
            LOGGER.error("【LOCK】表达式异常:{}", e.getMessage());
            throw new BusinessException("【LOCK】请求异常,请稍后再试");
        } catch (BusinessException e) {
            LOGGER.error("【LOCK】请求异常", e);
            throw new BusinessException(e.getMessage());
        } catch (Exception e) {
            LOGGER.error("【LOCK】请求异常", e);
            throw new BusinessException("请求异常,请稍后再试");
        } finally {
            if (lock) {
                redisService.releaseLock(lockKey);
            }
        }
        return result;
    }
    /**
     * 获取分布式锁key
     *
     * @param joinPoint
     * @param redisLock
     * @return {@link String}
     */
    public String getLockKey(ProceedingJoinPoint joinPoint, RedisLock redisLock) {
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        List<String> keyList = new ArrayList<>();
        keyList.add(RedisConstant.REDIS_LOCK_PREFIX);
        keyList.add(joinPoint.getTarget().getClass().getSimpleName().toUpperCase());
        // 如果配置key前缀则使用配置的,否则用方法名
        if (StringUtils.isNotBlank(redisLock.value())) {
            keyList.add(redisLock.value());
        } else {
            keyList.add(methodSignature.getName().toUpperCase());
        }
        // 解析spel表达式
        String key = getParseKey(redisLock.key(), methodSignature.getMethod(), joinPoint.getArgs());
        if (StringUtils.isNotBlank(key)) {
            keyList.add(key);
        }
        return Joiner.on(UNDERLINE).join(keyList);
    }
    /**
     * 获取缓存的key
     * key 定义在注解上,支持SPEL表达式
     *
     * @param key
     * @param method
     * @param args
     * @return {@link String}
     */
    public String getParseKey(String key, Method method, Object[] args) {
        if (StringUtils.isBlank(key)) {
            return getHexKey(args);
        }
        // 获取请求参数名
        String[] paramNames = DISCOVERER.getParameterNames(method);
        if (paramNames != null && paramNames.length > 0) {
            StandardEvaluationContext context = new StandardEvaluationContext();
            for (int i = 0; i < args.length; i++) {
                context.setVariable(paramNames[i], args[i]);
            }
            // 解析表达式
            return PARSER.parseExpression(key).getValue(context, String.class);
        } else {
            return getHexKey(args);
        }
    }
    /**
     * hex加密key
     *
     * @param args
     * @return {@link String}
     */
    public static String getHexKey(Object[] args) {
        if (args != null && args.length > 0) {
            return DigestUtils.md5Hex(Arrays.toString(args));
        } else {
            return null;
        }
    }
}

+ 2 - 24
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/ServicesAuthAOP.java

@ -7,7 +7,6 @@ import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
@ -23,7 +22,7 @@ import java.util.List;
 */
@Aspect
@Component
public class ServicesAuthAOP {
public class ServicesAuthAOP extends BaseAop{
    @Autowired
    private ServicePackageService servicePackageService;
@ -57,7 +56,7 @@ public class ServicesAuthAOP {
            List<String> items =servicePackageService.fingServiceItemsCodeByPatientId(patientId);
            if(!items.contains(item)){
                PrintWriter writer=response.getWriter();
                writer.write(error(401, "该操作没有权限"));
                writer.write(error(401, "未签约相关服务,该操作没有权限"));
                writer.flush();
                return o;
            }
@ -68,26 +67,5 @@ public class ServicesAuthAOP {
        return o;
    }
    public String write(int code, String msg) {
        try {
            JSONObject json = new JSONObject();
            json.put("status", code);
            json.put("msg", msg);
            return json.toString();
        } catch (Exception e) {
            return null;
        }
    }
    public String error(int code, String msg) {
        try {
            JSONObject json = new JSONObject();
            json.put("status", code);
            json.put("msg", msg);
            return json.toString();
        } catch (Exception e) {
            return null;
        }
    }
}

+ 125 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/config/RedisConfig.java

@ -0,0 +1,125 @@
package com.yihu.jw.care.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.care.util.RedisConstant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.serializer.*;
/**
 * 缓存配置
 *
 * @author baichuan.wu
 * @version 1.0
 * @date 2019/4/8 15:17
 */
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
    @Autowired
    private RedisConnectionFactory factory;
    @Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
        rcm.setDefaultExpiration(RedisConstant.REDIS_LOCK_EXPIRE_30);
        return rcm;
    }
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
        redisTemplate.setConnectionFactory(factory);
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        /**hash也同样存对象数组*/
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
    /**
     * 对hash类型的数据操作
     *
     * @param redisTemplate
     * @return {@link HashOperations <String,String,Object>}
     */
    @Bean
    public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForHash();
    }
    /**
     * 对redis字符串类型数据操作
     *
     * @param redisTemplate
     * @return {@link ValueOperations <String, Object>}
     */
    @Bean
    public ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForValue();
    }
    /**
     * 对链表类型的数据操作
     *
     * @param redisTemplate
     * @return {@link ListOperations <String, Object>}
     */
    @Bean
    public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForList();
    }
    /**
     * 对无序集合类型的数据操作
     *
     * @param redisTemplate
     * @return {@link SetOperations <String, Object>}
     */
    @Bean
    public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForSet();
    }
    /**
     * 对有序集合类型的数据操作
     *
     * @param redisTemplate
     * @return {@link ZSetOperations <String, Object>}
     */
    @Bean
    public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForZSet();
    }
    /**
     * string序列化
     *
     * @return {@link RedisSerializer <String>}
     */
    private RedisSerializer<String> keySerializer() {
        return new StringRedisSerializer();
    }
}

+ 3 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/apply/PatientBedApplyDao.java

@ -14,7 +14,9 @@ import java.util.List;
public interface PatientBedApplyDao extends PagingAndSortingRepository<PatientBedApplyDo,String>,
        JpaSpecificationExecutor<PatientBedApplyDo> {
    PatientBedApplyDo findByPatientAndOrgCodeAndStatus(String patient,String orgCode,Integer status);
    PatientBedApplyDo findByIdcardAndOrgCodeAndStatus(String idcard,String orgCode,Integer status);
    PatientBedApplyDo findByIdcardAndStatus(String idcard,Integer status);
    List<PatientBedApplyDo> findByOrgCodeAndStatusIn(String orgCode,Integer[] status ,Sort sort);

+ 2 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/assistance/EmergencyAssistanceDao.java

@ -16,4 +16,6 @@ public interface EmergencyAssistanceDao extends PagingAndSortingRepository<Emerg
    List<EmergencyAssistanceDO> queryByPatientAndStatusIn(String patient, Integer[] status, Sort sort);
    EmergencyAssistanceDO findByPatientAndStatus(String patient,Integer status);
    EmergencyAssistanceDO findByProxyPatientAndStatus(String proxyPatient,Integer status);
}

+ 5 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/security/SecurityMonitoringOrderDao.java

@ -21,4 +21,9 @@ public interface SecurityMonitoringOrderDao extends PagingAndSortingRepository<S
    @Transactional
    @Query("update SecurityMonitoringOrderDO o set o.conclusionStatus = 1,o.status='4' where o.id=?1")
    void updateConclusionStatus(String orderId);
    @Modifying
    @Transactional
    @Query("update SecurityMonitoringOrderDO o set o.conclusionStatus = 1 where o.id=?1")
    void updateConclusionStatus2(String orderId);
}

+ 2 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/team/BaseTeamMemberDao.java

@ -44,6 +44,8 @@ public interface BaseTeamMemberDao extends PagingAndSortingRepository<BaseTeamMe
    BaseTeamMemberDO findByTeamCodeAndDoctorCode(String teamCode, String doctorCode);
    BaseTeamMemberDO findByTeamCodeAndDoctorCodeAndDel(String teamCode, String doctorCode,String del);
    @Modifying
    @Query("update BaseTeamMemberDO t SET t.del = '0' where t.id = :id")
    void deleteById(@Param("id") String id);

+ 42 - 3
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/assistance/EmergencyAssistanceEndpoint.java

@ -35,7 +35,7 @@ public class EmergencyAssistanceEndpoint extends EnvelopRestEndpoint {
                               @RequestParam(value = "jsonData") String jsonData
                               ){
        try {
            JSONObject result = assistanceService.newOrder(patientId,jsonData);
            JSONObject result = assistanceService.newOrder(patientId,jsonData,getUID());
            if (result.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                return ObjEnvelop.getError(result.getString(ResponseContant.resultMsg));
            }
@ -112,7 +112,7 @@ public class EmergencyAssistanceEndpoint extends EnvelopRestEndpoint {
    @GetMapping(value = "existApplyStatus")
    @ApiOperation(value = "查看居民救助状态是否在申请中")
    public ObjEnvelop existApplyStatus(@ApiParam(name="patient",value = "患者")
    public ObjEnvelop existApplyStatus(@ApiParam(name="patient",value = "患者(代预约家人为主)")
                                    @RequestParam(value = "patient") String patient){
        try {
            JSONObject result = assistanceService.existApplyStatus(patient);
@ -167,7 +167,7 @@ public class EmergencyAssistanceEndpoint extends EnvelopRestEndpoint {
            if (StringUtils.isBlank(patientId)&&StringUtils.isBlank(doctor)){
                return ListEnvelop.getError("请求参数错误");
            }
            return ListEnvelop.getSuccess( "查询成功",assistanceService.getOrderList(patientId,doctor,"1",page,pageSize,"asc"));
            return ListEnvelop.getSuccess( "查询成功",assistanceService.doctorGetOrderList(patientId,doctor,"1",page,pageSize,"asc"));
        }catch (Exception e){
            e.printStackTrace();
            return ListEnvelop.getError("查询失败"+e.getMessage());
@ -240,6 +240,29 @@ public class EmergencyAssistanceEndpoint extends EnvelopRestEndpoint {
        }
    }
    @PostMapping(value = "updatePatientLocation")
    @ApiOperation(value = "更新患者定位信息")
    @ObserverRequired
    public ObjEnvelop updatePatientLocation(@ApiParam(name="patient",value = "patient")
                                           @RequestParam(value = "patient") String patient,
                                           @ApiParam(name="patientAddress",value = "患者地址描述")
                                           @RequestParam(value = "patientAddress") String patientAddress,
                                           @ApiParam(name="patientLat",value = "患者当前定位纬度")
                                           @RequestParam(value = "patientLat") String patientLat,
                                           @ApiParam(name="patientLon",value = "患者当前定位经度")
                                           @RequestParam(value = "patientLon") String patientLon){
        try {
            JSONObject result = assistanceService.updatePatientLocation(patient,patientAddress,patientLat,patientLon);
            if (result.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                return ObjEnvelop.getError(result.getString(ResponseContant.resultMsg));
            }
            return ObjEnvelop.getSuccess("定位更新成功",result.getJSONObject("resultMsg"));
        }catch (Exception e){
            e.printStackTrace();
            return ObjEnvelop.getError("定位更新失败"+e.getMessage());
        }
    }
    @PostMapping(value = "sendQuickMessage")
    @ApiOperation(value = "患者发送快捷消息")
@ -261,4 +284,20 @@ public class EmergencyAssistanceEndpoint extends EnvelopRestEndpoint {
            return ObjEnvelop.getError("发送失败"+e.getMessage());
        }
    }
    @PostMapping(value = "test")
    @ApiOperation(value = "患者发送快捷消息")
    @ObserverRequired
    public ObjEnvelop test(@ApiParam(name="doctor",value = "doctor",required =true )
                           @RequestParam(value = "doctor") String doctor,
                           @ApiParam(name="orderID",value = "orderID",required =true )
                           @RequestParam(value = "orderID") String orderID){
        try {
            return ObjEnvelop.getSuccess("发送成功",assistanceService.test(doctor, orderID));
        }catch (Exception e){
            e.printStackTrace();
            return ObjEnvelop.getError("发送失败"+e.getMessage());
        }
    }
}

+ 463 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/device/PatientHealthController.java

@ -0,0 +1,463 @@
package com.yihu.jw.care.endpoint.device;
import com.yihu.jw.care.endpoint.BaseController;
import com.yihu.jw.care.service.device.PatientHealthIndexService;
import com.yihu.jw.entity.care.device.DevicePatientHealthIndex;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@Controller
@RequestMapping(value = "/patient/health_index", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(description = "患者指标")
public class PatientHealthController extends BaseController {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private PatientHealthIndexService healthIndexService;
    /**
     * 更改接口(包括手动记录的修改和所有的删除)
     * 血糖  value1 血糖值 value2 1234567血糖时间段
     * 血压  value1 高压 value2 低压 value3脉搏 value4心率不齐(0否 1是)
     * 体重 value1 体重值
     * 腰围 value1 腰围值
     *  @param recordDate 记录时间
     */
    @RequestMapping(value = "/modify", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation("更改接口(包括手动记录的修改和所有的删除)")
    public String modify(@RequestParam long id,
                         @RequestParam(required = false) String recordDate,
                         @RequestParam(required = false) String value1,
                         @RequestParam(required = false) String value2,
                         @RequestParam(required = false) String value3,
                         @RequestParam(required = false) String value4) {
        try {
            healthIndexService.modify(id,recordDate, value1, value2, value3, value4);
            return write(200, "更改成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "更改失败!");
        }
    }
    @RequestMapping(value = "/getRecentData", method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation("患者最近的各项健康信息")
    public String getRecentData() {
        try {
            //新增查询物联网
            List list = new ArrayList();
            String patient = getRepUID();
//            String patient = getUID();
//            健康指标类型(1血糖,2血压,3体重,4腰围)
            Map map = healthIndexService.findDataByPatient(patient, 1);
            Map map1 = healthIndexService.findDataByPatient(patient, 2);
            Map map2 = healthIndexService.findDataByPatient(patient, 3);
            Map map3 = healthIndexService.findDataByPatient(patient, 4);
//            血糖各个时间段取值
            if (map.size() != 0) {
                Map sugar = new HashMap();
                Object time = map.get("time");
                String isDevice = map.get("isDevice").toString();
                Object value1 = map.get("value1");
                Object value2 = map.get("value2");
                Object value3 = map.get("value3");
                Object value4 = map.get("value4");
                Object value5 = map.get("value5");
                Object value6 = map.get("value6");
                Object value7 = map.get("value7");
                sugar.put("type", 1);
                sugar.put("isDevice", isDevice);
                if (time != null) {
                    sugar.put("time", time);
                }
                if (value1 != null) {
                    sugar.put("value1", value1);
                }
                if (value2 != null) {
                    sugar.put("value2", value2);
                }
                if (value3 != null) {
                    sugar.put("value3", value3);
                }
                if (value4 != null) {
                    sugar.put("value4", value4);
                }
                if (value5 != null) {
                    sugar.put("value5", value5);
                }
                if (value6 != null) {
                    sugar.put("value6", value6);
                }
                if (value7 != null) {
                    sugar.put("value7", value7);
                }
                list.add(sugar);
            }
//            血压  value1高压 value2低压 value3脉搏 value4心率不齐
            if (map1.size() != 0) {
                Map pa = new HashMap();
                Object time = map1.get("time");
                String isDevice = map1.get("isDevice").toString();
                Object value1 = map1.get("value1");
                Object value2 = map1.get("value2");
                Object value3 = map1.get("value3");
                Object value4 = map1.get("value4");
                Object value5 = map1.get("value5");
                Object value6 = map1.get("value6");
                Object value7 = map1.get("value7");
                pa.put("type", 2);
                pa.put("isDevice", isDevice);
                if (time != null) {
                    pa.put("time", time);
                }
                if (value1 != null) {
                    pa.put("value1", value1);
                }
                if (value2 != null) {
                    pa.put("value2", value2);
                }
                if (value3 != null) {
                    pa.put("value3", value3);
                }
                if (value4 != null) {
                    pa.put("value4", value4);
                }
                if (value5 != null) {
                    pa.put("value5", value5);
                }
                if (value6 != null) {
                    pa.put("value6", value6);
                }
                if (value7 != null) {
                    pa.put("value7", value7);
                }
                list.add(pa);
            }
//            体重 value1 体重
            if (map2.size() != 0) {
                Map weight = new HashMap();
                Object time = map2.get("time");
                String isDevice = map2.get("isDevice").toString();
                Object value1 = map2.get("value1");
                Object value2 = map2.get("value2");
                Object value3 = map2.get("value3");
                Object value4 = map2.get("value4");
                Object value5 = map2.get("value5");
                Object value6 = map2.get("value6");
                Object value7 = map2.get("value7");
                weight.put("type", 3);
                weight.put("isDevice", isDevice);
                if (time != null) {
                    weight.put("time", time);
                }
                if (value1 != null) {
                    weight.put("value1", value1);
                }
                if (value2 != null) {
                    weight.put("value2", value2);
                }
                if (value3 != null) {
                    weight.put("value3", value3);
                }
                if (value4 != null) {
                    weight.put("value4", value4);
                }
                if (value5 != null) {
                    weight.put("value5", value5);
                }
                if (value6 != null) {
                    weight.put("value6", value6);
                }
                if (value7 != null) {
                    weight.put("value7", value7);
                }
                list.add(weight);
            }
//            腰围 value1腰围
            if (map3.size() != 0) {
                Map waist = new HashMap();
                Object time = map3.get("time");
                String isDevice = map3.get("isDevice").toString();
                Object value1 = map3.get("value1");
                Object value2 = map3.get("value2");
                Object value3 = map3.get("value3");
                Object value4 = map3.get("value4");
                Object value5 = map3.get("value5");
                Object value6 = map3.get("value6");
                Object value7 = map3.get("value7");
                waist.put("type", 4);
                waist.put("isDevice", isDevice);
                if (time != null) {
                    waist.put("time", time);
                }
                if (value1 != null) {
                    waist.put("value1", value1);
                }
                if (value2 != null) {
                    waist.put("value2", value2);
                }
                if (value3 != null) {
                    waist.put("value3", value3);
                }
                if (value4 != null) {
                    waist.put("value4", value4);
                }
                if (value5 != null) {
                    waist.put("value5", value5);
                }
                if (value6 != null) {
                    waist.put("value6", value6);
                }
                if (value7 != null) {
                    waist.put("value7", value7);
                }
                list.add(waist);
            }
            return write(200, "查询成功", "data", list);
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
    @RequestMapping(value = "recent", method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation("患者最近填写的健康指标")
    public String recent() {
        try {
            JSONArray array = healthIndexService.findRecentByPatient(getRepUID());
//            JSONArray array = healthIndexService.findRecentByPatient(getUID());
            if (array != null) {
                return write(200, "查询成功", "list", array);
            } else {
                return error(-1, "查询失败");
            }
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
    @RequestMapping(value = "last_new", method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation("获取患者最后填写的健康指标(新)-展会")
    public String last_new() {
        try {
            Map<String, Object> map = new HashMap<>();
            String patient = getRepUID();
//            String patient = getUID();
//            DevicePatientHealthIndex xt = healthIndexService.findLastByPatien(patient, 1);
            DevicePatientHealthIndex xt = healthIndexService.findLastByPatienIot(patient, 1);
            if (xt != null) {
                map.put("xt", xt);
            }
//            DevicePatientHealthIndex xy = healthIndexService.findLastByPatien(patient, 2);
            DevicePatientHealthIndex xy = healthIndexService.findLastByPatienIot(patient, 2);
            if (xy != null) {
                map.put("xy", xy);
            }
//            DevicePatientHealthIndex tz = healthIndexService.findLastByPatien(patient, 3);
            DevicePatientHealthIndex tz = healthIndexService.findLastByPatienIot(patient, 3);
            if (tz != null) {
                map.put("tz", tz);
            }
//            DevicePatientHealthIndex sg = healthIndexService.findLastByPatien(patient, 4);
            DevicePatientHealthIndex sg = healthIndexService.findLastByPatienIot(patient, 4);
            if (sg != null) {
                map.put("sg", sg);
            }
            DevicePatientHealthIndex xl = healthIndexService.findLastByPatienIot(patient, 5);
            if (xl != null) {
                map.put("xl", xl);
            }
            return write(200, "查询成功", "data", map);
        } catch (Exception ex) {
            error(ex);
            return invalidUserException(ex, -1, ex.getMessage());
        }
    }
    @RequestMapping(value = "addPatientHealthIndex", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation("新增患者指标")
    public String addPatientHealthIndex(@ApiParam(name = "data", value = "指标数据", defaultValue = "{\"gi\":\"5.5\",\"gi_type\":\"1\"}")
                                        @RequestParam(value = "data", required = true) String data,
                                        @ApiParam(name = "type", value = "指标类型", defaultValue = "1")
                                        @RequestParam(value = "type", required = true) String type,
                                        @ApiParam(name = "patient", value = "patient", defaultValue = "1")
                                        @RequestParam(value = "patient", required = false) String patient) {
        try {
            if(StringUtils.isBlank(patient)){
                patient = getRepUID();
//                patient = getUID();
            }
            DevicePatientHealthIndex obj = healthIndexService.addPatientHealthIndex(data, type, patient, null);
            
            //血糖和血压需要校验
            if (type.equals("1") || type.equals("2")) {
                healthIndexService.verifyHealthIndex(obj.getId());
            }
            //判断居民的体征预警状态
//            healthIndexService.handlePatientStandarStatus(obj);
            return success("新增患者指标成功!");
        } catch (Exception ex) {
            error(ex);
            return invalidUserException(ex, -1, ex.getMessage());
        }
    }
    @RequestMapping(value = "verifyPatientHealthIndex", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation("校验患者指标")
    public String verifyPatientHealthIndex(@ApiParam(name = "id", value = "指标id", defaultValue = "")
                                           @RequestParam(value = "id", required = true) Long id) {
        try {
            healthIndexService.verifyHealthIndex(id);
            return success("校验患者指标成功!");
        } catch (Exception ex) {
            return invalidUserException(ex, -1, ex.getMessage());
        }
    }
    @RequestMapping(value = "chart", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation("根据患者标志获取健康指标(图表)")
    public String getHealthIndexChartByPatient(@ApiParam(name = "type", value = "指标类型(1血糖,2血压,3体重,4腰围)", defaultValue = "1")
                                               @RequestParam(value = "type", required = true) int type,
                                               @ApiParam(name = "gi_type", value = "就餐类型0全部", defaultValue = "1")
                                               @RequestParam(value = "gi_type", required = false) int gi_type,
                                               @ApiParam(name = "begin", value = "开始时间", defaultValue = "2017-05-22 00:00:00")
                                               @RequestParam(value = "begin", required = true) String begin,
                                               @ApiParam(name = "end", value = "结束时间", defaultValue = "2017-06-02 00:00:00")
                                               @RequestParam(value = "end", required = true) String end) {
        try {
            JSONArray jsonArray = healthIndexService.findChartByPatient(getUID(),type,gi_type,begin,end);
            if (jsonArray.length()==0) {
                return success("查询成功!");
            }
            return write(200, "查询成功", "list", jsonArray);
        } catch (Exception ex) {
            error(ex);
            return invalidUserException(ex, -1, "查询失败!");
        }
    }
    @RequestMapping(value = "chart_new", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation("根据患者标志获取健康指标(图表)-展会")
    public String getHealthIndexChartByPatient_new(@ApiParam(name = "type", value = "指标类型(1血糖,2血压,3体重,4腰围)", defaultValue = "1")
                                               @RequestParam(value = "type", required = true) int type,
                                               @ApiParam(name = "gi_type", value = "就餐类型0全部", defaultValue = "1")
                                               @RequestParam(value = "gi_type", required = false) int gi_type,
                                               @ApiParam(name = "begin", value = "开始时间", defaultValue = "2017-05-22 00:00:00")
                                               @RequestParam(value = "begin", required = true) String begin,
                                               @ApiParam(name = "end", value = "结束时间", defaultValue = "2017-06-02 00:00:00")
                                               @RequestParam(value = "end", required = true) String end) {
        try {
            JSONArray jsonArray = healthIndexService.findChartByPatient(getRepUID(), type, gi_type, begin, end);
//            List<DevicePatientHealthIndex> list = healthIndexService.findChartByPatient(getUID(), type, gi_type, begin, end);
            if (jsonArray.length()==0) {
                return success("查询成功!");
            }
            return write(200, "查询成功", "list", jsonArray);
        } catch (Exception ex) {
            error(ex);
            return invalidUserException(ex, -1, "查询失败!");
        }
    }
    @RequestMapping(value = "list", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation("患者获取健康指标")
    public String getHealthIndexByPatient(@ApiParam(name = "type", value = "指标类型(1血糖,2血压,3体重/身高,4腰围)", defaultValue = "1")
                                          @RequestParam(value = "type", required = true) int type,
                                          @ApiParam(name = "start", value = "开始时间", defaultValue = "2016-07-23 00:00:00")
                                          @RequestParam(value = "start", required = true) String start,
                                          @ApiParam(name = "end", value = "结束时间", defaultValue = "2016-08-23 00:00:00")
                                          @RequestParam(value = "end", required = true) String end,
                                          @ApiParam(name = "page", value = "第几页", defaultValue = "1")
                                          @RequestParam(value = "page", required = true) int page,
                                          @ApiParam(name = "pagesize", value = "每页几行", defaultValue = "10")
                                          @RequestParam(value = "pagesize", required = true) int pagesize) {
        try {
            JSONObject jsonObject = new JSONObject();
            if (type == 1) {
                List<Object> list = healthIndexService.findIndexByPatient2(getUID(), type, start, end, page, pagesize);
                jsonObject.put("data",list);
            }else{
                JSONArray jsonArray = healthIndexService.findIndexByPatient(getUID(), type, start, end, page, pagesize);
                jsonObject.put("data",jsonArray);
            }
            return write(200, "查询成功", "list", jsonObject);
        } catch (Exception ex) {
            error(ex);
            return invalidUserException(ex, -1, "查询失败!");
        }
    }
    @RequestMapping(value = "standard", method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation("患者健康指标预警值查询")
    public String standard() {
        try {
            JSONArray standardArray = new JSONArray();
            JSONArray userArray = new JSONArray();
            // 预警值未设置,返回默认值
            StringBuffer sb = new StringBuffer();
            sb.append("[");
            // 默认血糖(餐前,餐后二小时)
            sb.append("{min_value_1:"+ PatientHealthIndexService.HEALTH_STANDARD_ST_MIN_BEFORE +", max_value_1: "+ PatientHealthIndexService.HEALTH_STANDARD_ST_MAX_BEFORE +", " +
                    "min_value_2:"+ PatientHealthIndexService.HEALTH_STANDARD_ST_MIN_AFTER +", max_value_2:"+ PatientHealthIndexService.HEALTH_STANDARD_ST_MAX_AFTER +", type:1},");
            // 默认血压(收缩压,舒张压)
            sb.append("{min_value_1:"+ PatientHealthIndexService.HEALTH_STANDARD_SSY_MIN +", max_value_1:"+ PatientHealthIndexService.HEALTH_STANDARD_SSY_MAX +", " +
                    "min_value_2:"+ PatientHealthIndexService.HEALTH_STANDARD_SZY_MIN +", max_value_2:"+ PatientHealthIndexService.HEALTH_STANDARD_SZY_MAX +", type:2}");
            sb.append("]");
            standardArray = new JSONArray(sb.toString());
            JSONObject json = new JSONObject();
            json.put("standard", standardArray);
            json.put("custom", userArray);
            return write(200, "查询成功", "data", json);
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "查询失败!");
        }
    }
}

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/family/FamilyMemberEndpoint.java

@ -150,7 +150,7 @@ public class FamilyMemberEndpoint extends EnvelopRestEndpoint {
    }
    @RequestMapping(value = "/member_authorize", method = RequestMethod.POST)
    @ApiOperation(value = "家庭成员授权")
    @ApiOperation(value = "家庭成员授权--已废弃不需要做授权操作")
    public Envelop authorizeMember(@ApiParam(name = "familyMember", value = "家人code", defaultValue ="1555c32c626343e7aaa62e9cf76c97f2")
                                  @RequestParam(value = "familyMember", required = true) String familyMember,
                                  @ApiParam(name = "isAuthorize", value = "是否授权(0:未授权,1:已授权)", defaultValue ="1")

+ 4 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/lifeCare/DoctorLifeCareEndpoint.java

@ -89,9 +89,11 @@ public class DoctorLifeCareEndpoint extends EnvelopRestEndpoint {
            @ApiParam(value = "附件", name = "completeImgs")
            @RequestParam(value = "completeImgs", required = false) String completeImgs,
            @ApiParam(value = "完成服务记录", name = "completeRemark")
            @RequestParam(value = "completeRemark", required = true) String completeRemark) {
            @RequestParam(value = "completeRemark", required = true) String completeRemark,
            @ApiParam(value = "doctorId", name = "doctorId")
            @RequestParam(value = "doctorId", required = true) String doctorId) {
        try {
           lifeCareOrderService.completeOrder(orderId, completeImgs, completeRemark);
           lifeCareOrderService.completeOrder(orderId, completeImgs, completeRemark,doctorId);
            return Envelop.getSuccess("记录成功");
        } catch (Exception e) {
            e.printStackTrace();

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/lifeCare/PatientLifeCareEndpoint.java

@ -33,7 +33,7 @@ public class PatientLifeCareEndpoint  extends EnvelopRestEndpoint {
    public Envelop create(@ApiParam(name = "jsonData", value = "Json数据", required = true) @RequestParam String jsonData) {
        JSONObject result = new JSONObject();
        try{
            result = lifeCareOrderService.create(jsonData);
            result = lifeCareOrderService.create(jsonData,getUID());
        }catch (Exception e){
            e.printStackTrace();
            return Envelop.getError("操作失败",-1);

+ 31 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/patient/PatientEndpoint.java

@ -1,11 +1,16 @@
package com.yihu.jw.care.endpoint.patient;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.aop.ObserverRequired;
import com.yihu.jw.care.aop.RedisLock;
import com.yihu.jw.care.aop.ServicesAuth;
import com.yihu.jw.care.aop.ServicesAuthAOP;
import com.yihu.jw.care.dao.label.WlyyPatientLabelDao;
import com.yihu.jw.care.service.patient.CarePatientService;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.base.BaseRequestMapping;
@ -32,6 +37,25 @@ public class PatientEndpoint extends EnvelopRestEndpoint {
    private WlyyPatientLabelDao patientLabelDao;
    @Autowired
    ServicesAuthAOP servicesAuthAOP;
    public int num = 20;
    @RequestMapping(value = "testRedisLock")
    @RedisLock(key = "#patientDO.id")
    public Envelop testRedisLock(BasePatientDO patientDO) {
        try {
            String s = Thread.currentThread().getName() + "=====================" + patientDO.getId();
            if (num > 0) {
                System.out.println(s + "排号成功,号码是:" + num);
                num--;
            } else {
                System.out.println(s + "排号失败,号码已经被抢光");
            }
            return success(patientDO);
        } catch (Exception e) {
            e.printStackTrace();
            return failed("获取失败",-1);
        }
    }
    @GetMapping(value = "testServicesAuth1")
    @ApiOperation(value = "测试居民服务项权限操作")
@ -102,9 +126,15 @@ public class PatientEndpoint extends EnvelopRestEndpoint {
                                  @ApiParam(name = "doctorId", value = "医生id")
                                  @RequestParam(value = "doctorId", required = false)String doctorId)throws Exception{
        try{
            patientService.updPatient(jsonData, doctorId);
            JSONObject result =  patientService.updPatient(jsonData, doctorId);
            if (result.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                return Envelop.getError(result.getString(ResponseContant.resultMsg));
            }
            return success("修改成功");
        }catch (Exception e){
            if (e.getMessage().contains("重复签约服务项目")){
                return failed("修改失败,"+e.getMessage(),-1);
            }
            e.printStackTrace();
            return failed("修改失败",-1);
        }

+ 45 - 7
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/sign/SignEndpoint.java

@ -7,6 +7,7 @@ import com.yihu.jw.care.dao.sign.CapacityAssessmentRecordDao;
import com.yihu.jw.care.service.sign.ArchiveService;
import com.yihu.jw.care.service.sign.CapacityAssessmentRecordService;
import com.yihu.jw.care.service.sign.ServicePackageService;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.servicePackage.ServicePackageSignRecordDO;
import com.yihu.jw.entity.care.archive.ArchiveDO;
@ -20,9 +21,12 @@ import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -180,12 +184,18 @@ public class SignEndpoint extends EnvelopRestEndpoint {
            @ApiParam(name = "doctorId", value = "医生id", required = true)
            @RequestParam String doctorId) {
        try{
            ServicePackageSignRecordDO signRecordDO = servicePackageService.servicePackageSign(jsonData,doctorId,patientId);
            servicePackageService.setPatientServiceItems(signRecordDO.getPatient());
            return success("分配成功");
           JSONObject result  = servicePackageService.servicePackageSign(jsonData,doctorId,patientId);
            if (result.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                return Envelop.getError(result.getString(ResponseContant.resultMsg));
            }
            servicePackageService.setPatientServiceItems(result.getJSONObject("resultMsg").getString("patient"));
            return Envelop.getSuccess("分配成功");
        }catch (Exception e){
            if (e.getMessage().contains("重复签约服务项目")){
                return failed("分配失败,"+e.getMessage(),-1);
            }
            e.printStackTrace();
            return failed("分配失败",-1);
            return failed("分配失败 ",-1);
        }
    }
@ -362,11 +372,14 @@ public class SignEndpoint extends EnvelopRestEndpoint {
            String idcard = patientDO.getIdcard();
            if(patientDao.existsByIdcardAndDel(idcard,"1")){
                ArchiveDO archiveDO = archiveDao.findByIdcardAndDoctorCode(idcard,doctorId);
                if(archiveDO!=null){
                if(archiveDO!=null){//医生已经为患者建档
                    return failed("您所提交的居民信息已存在,请勿重复建档",-1);
                }else {//查询最近的一条建档记录
                }else {//该医生未对患者建档 查询最近的一条建档记录
                    archiveDO  = archiveDao.findByIdcard(idcard);
                    return success(archiveDO);
                    if (archiveDO!=null){//有其他医生对其建档,返回最近建档信息,共前端同步
                        return success(archiveDO);
                    }
                    //其他医生对其建档 该医生对其建档
                }
            }
            archiveService.createArchive(patientDO,doctorId);
@ -462,4 +475,29 @@ public class SignEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value="getServerDoctorByPackage")
    @ApiOperation(value = "根据服务包,服务项目获取对应的服务医生")
    public ListEnvelop getServerDoctorByPackage(@ApiParam(name="packageId",value = "服务包id",required = true)
                       @RequestParam(value = "packageId")String packageId,
                       @ApiParam(name="serverItem",value = "服务项目code",required = true)
                       @RequestParam(value = "serverItem")String serverItem){
        try {
            return ListEnvelop.getSuccess("查询成功",servicePackageService.getServerDoctorByPackage(packageId,serverItem));
        }catch (Exception e){
            e.printStackTrace();
            return ListEnvelop.getError("查询失败");
        }
    }
    @GetMapping(value="getPackageDetailById")
    @ApiOperation(value = "获取服务包详情")
    public ObjEnvelop getPackageDetailById(@ApiParam(name="packageId",value = "服务包id",required = true)
                                                @RequestParam(value = "packageId")String packageId){
        try {
            return ObjEnvelop.getSuccess("查询成功",servicePackageService.getPackageDetailById(packageId));
        }catch (Exception e){
            e.printStackTrace();
            return ObjEnvelop.getError("查询失败");
        }
    }
}

+ 29 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/exception/BusinessException.java

@ -0,0 +1,29 @@
package com.yihu.jw.care.exception;
/**
 * 业务异常
 *
 * Created by yeshijie on 2021/4/23.
 */
public class BusinessException extends RuntimeException {
    public BusinessException() {
        super();
    }
    public BusinessException(String msg) {
        super(msg);
    }
    public BusinessException(String msg, Throwable cause) {
        super(msg, cause);
    }
    public BusinessException(Throwable cause) {
        super(cause);
    }
    protected BusinessException(String msg, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(msg, cause, enableSuppression, writableStackTrace);
    }
}

+ 46 - 8
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/apply/PatientBedApplyService.java

@ -3,6 +3,7 @@ package com.yihu.jw.care.service.apply;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.dao.apply.PatientBedApplyDao;
import com.yihu.jw.care.dao.sign.ArchiveDao;
import com.yihu.jw.care.service.sign.CapacityAssessmentRecordService;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
@ -46,10 +47,18 @@ public class PatientBedApplyService extends BaseJpaService<PatientBedApplyDo, Pa
    private BaseDoctorDao baseDoctorDao;
    @Autowired
    private BaseDoctorHospitalDao baseDoctorHospitalDao;
    @Autowired
    private CapacityAssessmentRecordService assessmentRecordService;
    public JSONObject apply(String idcard,String orgCode){
        JSONObject result = new JSONObject();
        BasePatientDO basePatientDo = basePatientDao.findByIdcardAndDel(idcard,"1");
        if (basePatientDo==null){
            String failMsg = "用户不存在,无法进行床位申请";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            return result;
        }
        //展示只能申请一个机构
        List<PatientBedApplyDo> applyList = patientBedApplyDao.queryByIdcardAndOrgCodeAndStatusIn(idcard,orgCode,new Integer[]{0,1,2});
        if (applyList.size()>0){
@ -59,6 +68,17 @@ public class PatientBedApplyService extends BaseJpaService<PatientBedApplyDo, Pa
            return result;
        }
        else {
            //
            String sql = " select count(*) from base_patient p,base_service_package_sign_record sr, base_service_package_record pr,base_service_package pack\n" +
                    "where p.idcard = '"+idcard+"' and p.id = sr.patient and sr.id = pr.sign_id and pr.service_package_id = pack.id and sr.`status`=1 and pack.del=1 ";
            Integer count = jdbcTemplate.queryForObject(sql,Integer.class);
            if (count>0){
                String failMsg = "居民已签约,无法进行床位申请";
                result.put(ResponseContant.resultFlag, ResponseContant.fail);
                result.put(ResponseContant.resultMsg,failMsg);
                return result;
            }
            BaseOrgDO baseOrgDO = baseOrgDao.findByCode(orgCode);
            if (baseOrgDO==null){
                String failMsg = "申请机构不存在";
@ -74,11 +94,18 @@ public class PatientBedApplyService extends BaseJpaService<PatientBedApplyDo, Pa
            patientBedApplyDo.setOrgCode(orgCode);
            patientBedApplyDo.setIdcard(idcard);
            patientBedApplyDo.setOrgName(baseOrgDO.getName());
            patientBedApplyDo.setStatus(1);//申请床位是未选择医生 设为未建档(医生未创建建档记录)。
            //
            count = assessmentRecordService.isCapacityAssessment(basePatientDo.getIdcard());
            if (count>0)
            {
                patientBedApplyDo.setStatus(2);
            }
            else { //医生点击评估时 需要同步该患者至未签约列表下
                patientBedApplyDo.setStatus(1);
            }
            patientBedApplyDao.save(patientBedApplyDo);
            result.put(ResponseContant.resultFlag, ResponseContant.success);
            result.put(ResponseContant.resultMsg,patientBedApplyDo);
        }
        return result;
    }
@ -86,11 +113,12 @@ public class PatientBedApplyService extends BaseJpaService<PatientBedApplyDo, Pa
    public List<Map<String,Object>> getApplyList(String doctor){
        List<Map<String,Object>> result = new ArrayList<>();
        BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
        if (doctorDO.getLevel()==2){//助老员
            List<BaseDoctorHospitalDO> hospitalDOS = baseDoctorHospitalDao.findByDoctorCode(doctor);
        if (doctorDO.getLevel()!=null&&doctorDO.getLevel()==2){//助老员
            List<BaseDoctorHospitalDO> hospitalDOS = baseDoctorHospitalDao.findDistinctOrgByDoctorCode(doctor);
            for (BaseDoctorHospitalDO obj:hospitalDOS){
                String sql="select ap.id,p.id patientCode,p.name,p.sex,p.idcard,p.photo,ap.status,DATE_FORMAT(ap.create_time,'%Y-%m-%d %H:%i:%S') create_time from base_patient_bed_apply ap INNER JOIN base_patient p where ap.idcard = p.idcard and org_code='"+obj.getOrgCode()+"' " +
                    "and ap.status <> -1 and ap.status<>0";
                String sql="select ap.id,p.id patientCode,ap.patient_name name,p.sex,ap.idcard,p.photo,ap.status,DATE_FORMAT(ap.create_time,'%Y-%m-%d %H:%i:%S') create_time " +
                        "from base_patient_bed_apply ap LEFT JOIN base_patient p ON ap.idcard = p.idcard WHERE org_code='"+obj.getOrgCode()+"' " +
                        "and ap.status <> -1 and ap.status<>0";
                List<Map<String,Object>> tmp = jdbcTemplate.queryForList(sql);
                for (Map<String,Object> map:tmp){
                    if (map.get("idcard")==null){
@ -100,11 +128,21 @@ public class PatientBedApplyService extends BaseJpaService<PatientBedApplyDo, Pa
                        Integer age  = IdCardUtil.getAgeForIdcard(map.get("idcard").toString());
                        map.put("age",age);
                    }
                    if (map.get("sex")==null){
                        try {
                            String sex = IdCardUtil.getSexForIdcard_new(map.get("idcard").toString());
                            map.put("sex",Integer.parseInt(sex));
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                }
                result.addAll(tmp);
            }
            result.sort(Comparator.comparing(obj -> ((Map<String,Object>) obj).get("create_time").toString()));
            if (result.size()>0){
                result.sort(Comparator.comparing(obj -> ((Map<String,Object>) obj).get("create_time").toString()));
            }
        }
        return result;
    }

+ 210 - 48
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/assistance/EmergencyAssistanceService.java

@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.yihu.jw.care.dao.assistance.EmergencyAssistanceDao;
import com.yihu.jw.care.dao.sign.ServicePackageItemDao;
import com.yihu.jw.care.dao.sign.ServicePackageSignRecordDao;
import com.yihu.jw.care.dao.team.BaseTeamMemberDao;
import com.yihu.jw.care.service.consult.ConsultTeamService;
@ -19,9 +20,13 @@ import com.yihu.jw.im.util.ImUtil;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.http.HttpClientUtil;
import com.yihu.mysql.query.BaseJpaService;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
@ -54,6 +59,12 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
    private ImUtil imUtill;
    @Autowired
    private ConsultTeamDao consultTeamDao;
    @Autowired
    private HttpClientUtil httpClientUtil;
    @Value("${baiduApi.AK}")
    private String baiduAk;
    @Value("${baiduApi.url}")
    private String baiduUrl;
    /**
     * 新建居民紧急救助
@ -61,7 +72,7 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
     * @param jsonData
     * @return
     */
    public JSONObject newOrder(String patient,String jsonData) throws Exception{
    public JSONObject newOrder(String patient,String jsonData,String proxyPatient) throws Exception{
        JSONObject result = new JSONObject();
        EmergencyAssistanceDO assistanceDO = JSON.parseObject(jsonData,EmergencyAssistanceDO.class);
        BasePatientDO patientDO = patientDao.findById(patient);
@ -76,6 +87,18 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
        assistanceDO.setPatientIdcard(patientDO.getIdcard());
        assistanceDO.setPatientName(patientDO.getName());
        assistanceDO.setPatientPhone(patientDO.getMobile());
        if(patient.equals(proxyPatient)) {//本人发起
            assistanceDO.setProxyPatient(patient);
            assistanceDO.setProxyPatientName(patientDO.getName());
            assistanceDO.setProxyPatientPhone(patientDO.getMobile());
            assistanceDO.setType(1);
        }else {//家人
            BasePatientDO proxyPatientDO = patientDao.findById(proxyPatient);
            assistanceDO.setProxyPatient(proxyPatient);
            assistanceDO.setProxyPatientName(proxyPatientDO.getName());
            assistanceDO.setProxyPatientPhone(proxyPatientDO.getMobile());
            assistanceDO.setType(2);
        }
        if (emergencyAssistanceDao.findByPatientAndStatus(patient,1)!=null){
            String failMsg = "当前居民存在申请中的救助,请完成后再申请";
@ -84,7 +107,7 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
            return result;
        }
        //签约防走失服务包
        String sql ="SELECT i.code,team_code,org_code from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i  \n" +
        String sql ="SELECT i.code,i.team_code,i.org_code,i.org_name from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i  \n" +
                "where  sr.id = r.sign_id and sr.status=1 and r.service_package_id = i.service_package_id   and i.del = 1 and sr.`status`=1 \n" +
                "and  sr.patient  = '"+assistanceDO.getPatient()+"' and i.code='emergencyAssistance' ";
        List<Map<String,Object>> items = jdbcTemplate.queryForList(sql);
@ -96,6 +119,12 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
        }
        Map<String,Object> mapTmp = items.get(0);
        List<BaseDoctorDO> doctorDOS = baseTeamMemberDao.findAllMembers(mapTmp.get("team_code").toString());
        if (StringUtils.isNotBlank((mapTmp.get("org_code").toString()))){
            assistanceDO.setOrgCode(mapTmp.get("org_code").toString());
        }
        if (StringUtils.isNotBlank((mapTmp.get("org_name").toString()))){
            assistanceDO.setOrgName((mapTmp.get("org_name").toString()));
        }
        assistanceDO.setTeamCode(mapTmp.get("team_code").toString());
        if (doctorDOS.size()==0){
            String failMsg = "紧急救助服务项服务医生为空,不可发起救助";
@ -103,25 +132,25 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
            result.put(ResponseContant.resultMsg,failMsg);
            return result;
        }
        //获取距离患者最近的一个医生
        double distance = 0.0;
        for (BaseDoctorDO doctorDO:doctorDOS){
            if (StringUtils.isBlank(doctorDO.getDoctorLat())||StringUtils.isBlank(doctorDO.getDoctorLon())){
                continue;
            }
            double distanceTmp = countDistance.getDistance(Double.parseDouble(assistanceDO.getServeLat()),Double.parseDouble(assistanceDO.getServeLon()),Double.parseDouble(doctorDO.getDoctorLat()),Double.parseDouble(doctorDO.getDoctorLon()));
            if (distanceTmp>distance){
                distance = distanceTmp;
                assistanceDO.setDoctor(doctorDO.getId());
                assistanceDO.setDoctorName(doctorDO.getName());
                assistanceDO.setDoctorAddress(doctorDO.getDoctorLocateAddress());
                assistanceDO.setDoctorLon(doctorDO.getDoctorLon());
                assistanceDO.setDoctorLat(doctorDO.getDoctorLat());
            }
        }
        //获取距离患者最近的一个医生(默认直线距离最近的医生)
//        double distance = 0.0;
//        for (BaseDoctorDO doctorDO:doctorDOS){
//            if (StringUtils.isBlank(doctorDO.getDoctorLat())||StringUtils.isBlank(doctorDO.getDoctorLon())){
//                continue;
//            }
//            double distanceTmp = countDistance.getDistance(Double.parseDouble(assistanceDO.getServeLat()),Double.parseDouble(assistanceDO.getServeLon()),Double.parseDouble(doctorDO.getDoctorLat()),Double.parseDouble(doctorDO.getDoctorLon()));
//            if (distanceTmp>distance){
//                distance = distanceTmp;
//                assistanceDO.setDoctor(doctorDO.getId());
//                assistanceDO.setDoctorName(doctorDO.getName());
//                assistanceDO.setDoctorAddress(doctorDO.getDoctorLocateAddress());
//                assistanceDO.setDoctorLon(doctorDO.getDoctorLon());
//                assistanceDO.setDoctorLat(doctorDO.getDoctorLat());
//            }
//        }
        assistanceDO = emergencyAssistanceDao.save(assistanceDO);
        //创建im会话  紧急救助咨询的sessionid  为居民code+(wlyy_consult_team表consult)+20
        JSONObject IMObj = consultTeamService.addServiceConsult(assistanceDO.getId(),patient,null);
        JSONObject IMObj = consultTeamService.addServiceConsult(assistanceDO.getId(),patient,proxyPatient,null);
        String sessionId=patient+"_"+ IMObj.getJSONObject("resultMsg").getString("consult") + "_20";
        assistanceDO.setSessionId(sessionId);
        //向会话中发送一条 陈XX发起紧急救助
@ -131,6 +160,20 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
                imUtill.sendTopicIM(patient,patientDO.getName(),consultTeam.getConsult(),"1",assistanceDO.getSendMessage(),null);
            }
        }
        //推送socket给医生
        for (BaseDoctorDO doctorDO:doctorDOS){
            JSONObject message = new JSONObject();
            message.put("session_id",assistanceDO.getSessionId());
            message.put("sender_name",assistanceDO.getPatientName());
            message.put("sender_code",assistanceDO.getPatient());
            message.put("order_id",assistanceDO.getId());
            message.put("content_type",40);
            try {
                imUtill.sendMDTSocketMessageToDoctor(doctorDO.getId(),message.toString());
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        emergencyAssistanceDao.save(assistanceDO);
        return getOrderDetail(assistanceDO.getId());
    }
@ -148,23 +191,49 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
        double distance = 0.0;
        JSONArray otherDoctorDistance = new JSONArray();
        JSONObject otherDoctorDistanceObj = new JSONObject();
        for (BaseDoctorDO doctorDO:doctorDOS){
            if (StringUtils.isBlank(doctorDO.getDoctorLat())||StringUtils.isBlank(doctorDO.getDoctorLon())){
                continue;
            }
            double distanceTmp = countDistance.getDistance(Double.parseDouble(assistanceDO.getServeLat()),Double.parseDouble(assistanceDO.getServeLon()),Double.parseDouble(doctorDO.getDoctorLat()),Double.parseDouble(doctorDO.getDoctorLon()));
            if (doctorDO.getId().equals(assistanceDO.getDoctor())){//服务医生
                assistanceDO.setDistance(distance);
            }
            else {
        if (assistanceDO.getStatus()==1){
            StringBuilder origins = new StringBuilder("");
            for (BaseDoctorDO doctorDO:doctorDOS) {
                if (StringUtils.isBlank(doctorDO.getDoctorLat()) || StringUtils.isBlank(doctorDO.getDoctorLon())) {
                    continue;
                }
                double distanceTmp = countDistance.getDistance(Double.parseDouble(assistanceDO.getServeLat()),Double.parseDouble(assistanceDO.getServeLon()),Double.parseDouble(doctorDO.getDoctorLat()),Double.parseDouble(doctorDO.getDoctorLon()));
                otherDoctorDistanceObj = new JSONObject();
                otherDoctorDistanceObj.put("doctor",doctorDO.getId());
                otherDoctorDistanceObj.put("doctorName",doctorDO.getName());
                otherDoctorDistanceObj.put("doctorAddress",doctorDO.getDoctorLocateAddress());
                otherDoctorDistanceObj.put("doctorLon",doctorDO.getDoctorLon());
                otherDoctorDistanceObj.put("doctorLat",doctorDO.getDoctorLat());
                otherDoctorDistanceObj.put("distance",distanceTmp);
                otherDoctorDistanceObj.put("distance",distanceTmp);//两点距离
                otherDoctorDistance.add(otherDoctorDistanceObj);
                origins.append(doctorDO.getDoctorLat()+","+doctorDO.getDoctorLon()+"|");
            }
            if (StringUtils.isNotBlank(origins.toString())){
                origins.deleteCharAt(origins.length()-1);
            }
            String destinations = assistanceDO.getServeLat()+","+assistanceDO.getServeLon();
            List<NameValuePair> params = new ArrayList<>();
            params.add(new BasicNameValuePair("origins", origins.toString()));
            params.add(new BasicNameValuePair("destinations", destinations));
            params.add(new BasicNameValuePair("output", "json"));
            params.add(new BasicNameValuePair("ak", baiduAk));
            //前端做距离计算
//            String url = baiduUrl+"routematrix/v2/driving";
//            String response = httpClientUtil.get(url,params,"UTF-8");
//            JSONObject responseObj = JSONObject.parseObject(response);
//            if (responseObj.getInteger("status")==0){
//                JSONArray resultArr = responseObj.getJSONArray("result");
//                int length = resultArr.size()>otherDoctorDistance.size()?resultArr.size():otherDoctorDistance.size();
//                for (int i=0;i<length;i++){
//                    JSONObject disTmp = resultArr.getJSONObject(i);
//                    JSONObject docTmp = otherDoctorDistance.getJSONObject(i);
//                    docTmp.put("time",disTmp.getJSONObject("duration").getString("text"));
//                    docTmp.put("distance",disTmp.getJSONObject("distance").getInteger("value")/1000.0);//实际路线距离
//                    docTmp.put("distanceMeter",disTmp.getJSONObject("distance").getInteger("value"));
//                }
//                otherDoctorDistance.sort(Comparator.comparing(obj -> ((JSONObject) obj).getInteger("distance")));
//            }
        }
        assistanceDO.setOtherDoctorDistance(otherDoctorDistance.toJSONString());
        BasePatientDO patientDO = patientDao.findById(assistanceDO.getPatient());
@ -227,12 +296,12 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
            result.put(ResponseContant.resultMsg,failMsg);
            return result;
        }
        if (assistanceDO.getStatus()!=0){
            String failMsg = "当前工单未完成 无法查看";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            return result;
        }
//        if (assistanceDO.getStatus()!=0){
//            String failMsg = "当前工单未完成 无法查看";
//            result.put(ResponseContant.resultFlag, ResponseContant.fail);
//            result.put(ResponseContant.resultMsg,failMsg);
//            return result;
//        }
        return getOrderDetail(orderID);
    }
@ -249,7 +318,7 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
        tmpObj.put("status_1",0);//申请中
        StringBuilder sql = new StringBuilder(" select ord.status,count(ord.id) count from base_emergency_assistance_order ord where 1=1") ;
        if (StringUtils.isNotBlank(patient)){
            sql.append( " and ord.patient='"+patient+"' group by ord.status  ");
            sql.append( " and (ord.patient='"+patient+"' or ord.proxy_patient='"+patient+"' ) group by ord.status  ");
        }
        else if (StringUtils.isNotBlank(doctor))    {
            sql.append(" AND EXISTS (" +
@ -276,21 +345,17 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
    public JSONObject existApplyStatus(String patient){
        JSONObject result = new JSONObject();
        JSONObject tmpObj = new JSONObject();
        EmergencyAssistanceDO assistanceDO = emergencyAssistanceDao.findByPatientAndStatus(patient,1);
        EmergencyAssistanceDO assistanceDO = emergencyAssistanceDao.findByProxyPatientAndStatus(patient,1);
        if (assistanceDO==null){
            tmpObj.put("exist","false");
            result.put(ResponseContant.resultFlag, ResponseContant.success);
            result.put(ResponseContant.resultMsg,tmpObj);
            return result;
        }
        else {
            BasePatientDO patientDO = patientDao.findById(assistanceDO.getPatient());
            assistanceDO.setPatientPhoto(patientDO.getPhoto());
            assistanceDO.setPatientSex(patientDO.getSex());
            assistanceDO.setPatientAge(IdCardUtil.getAgeForIdcard(patientDO.getIdcard()));
            double distance=countDistance.getDistance(Double.parseDouble(assistanceDO.getServeLat()),Double.parseDouble(assistanceDO.getServeLon()),Double.parseDouble(assistanceDO.getDoctorLat()),Double.parseDouble(assistanceDO.getDoctorLon()));
            assistanceDO.setDistance(distance);
            JSONObject detail  = getOrderDetail(assistanceDO.getId());
            tmpObj.put("exist","true");
            tmpObj.put("assistanceDO",JSONObject.parseObject(JSON.toJSONStringWithDateFormat(assistanceDO,"yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteMapNullValue)));
            tmpObj.put("assistanceDO",detail.getJSONObject("resultMsg"));
            result.put(ResponseContant.resultFlag, ResponseContant.success);
            result.put(ResponseContant.resultMsg,tmpObj);
        }
@ -304,6 +369,31 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
     * @return
     */
    public List<EmergencyAssistanceDO> getOrderList(String patient,String doctor,String status,Integer page,Integer pageSize,String sort){
        StringBuilder sql = new StringBuilder(" select ord.* from base_emergency_assistance_order ord where 1=1 ");
        if (StringUtils.isNotBlank(doctor)){
            sql.append(" AND EXISTS (" +
                    "SELECT sr.patient from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i ," +
                    "base_team_member m " +
                    "where ord.patient = CONVERT(sr.patient USING utf8) and  sr.id = r.sign_id and sr.status=1 and r.service_package_id = i.service_package_id and  m.team_code = i.team_code " +
                    " and i.del = 1 and sr.`status`=1  and i.code='emergencyAssistance' and m.doctor_code = '"+doctor+"' and m.del = '1') ");
        }
        if (StringUtils.isNotBlank(patient)){
            sql.append(" and ( ord.patient  = '"+patient+"' or ord.proxy_patient='"+patient+"' )");
        }
        sql.append(" and ord.status in ( '").append(status.replace(",","','")).append("') ");
        sql.append(" order by ord.create_time "+sort+" limit "+page*pageSize+","+pageSize);
        List<EmergencyAssistanceDO> resultList = jdbcTemplate.query(sql.toString(),new BeanPropertyRowMapper(EmergencyAssistanceDO.class));
        for (EmergencyAssistanceDO obj:resultList){
            BasePatientDO patientDO = patientDao.findById(obj.getPatient());
            obj.setPatientPhoto(patientDO.getPhoto());
            obj.setPatientSex(patientDO.getSex());
            obj.setPatientAge(IdCardUtil.getAgeForIdcard(patientDO.getIdcard()));
        }
        return resultList;
    }
    public List<EmergencyAssistanceDO> doctorGetOrderList(String patient,String doctor,String status,Integer page,Integer pageSize,String sort){
        StringBuilder sql = new StringBuilder(" select ord.* from base_emergency_assistance_order ord where 1=1 ");
        if (StringUtils.isNotBlank(doctor)){
            sql.append(" AND EXISTS (" +
@ -330,6 +420,13 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
    public JSONObject cancelOrder(String patient,String orderId){
        JSONObject result = new JSONObject();
        BasePatientDO patientDO = patientDao.findById(patient);
        if (patientDO==null){
            String failMsg = "当前居民信息获取失败";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            return result;
        }
        EmergencyAssistanceDO assistanceDO = emergencyAssistanceDao.findOne(orderId);
        if (assistanceDO==null){
            String failMsg = "当前救助工单不存在";
@ -337,7 +434,7 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
            result.put(ResponseContant.resultMsg,failMsg);
            return result;
        }
        if (!assistanceDO.getPatient().equals(patient)){
        if (!(assistanceDO.getPatient().equals(patient)||assistanceDO.getProxyPatient().equals(patient))){
            String failMsg = "当前救助工单不是您的工单,无法取消";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
@ -351,9 +448,15 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
        }
        assistanceDO.setStatus(-1);
        assistanceDO.setUpdateUser(patient);
        assistanceDO.setUpdateUserName(assistanceDO.getPatientName());
        assistanceDO.setUpdateUserName(patientDO.getName());
        assistanceDO.setUpdateTime(new Date());
        //im是否结束会话?
        //结束救助咨询
        if (!consultTeamService.finishEmergencyConsult(assistanceDO,patient,1)){
            String failMsg = "咨询结束失败 无法完成工单";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            return result;
        }
        emergencyAssistanceDao.save(assistanceDO);
        String failMsg = "当前救助工单已取消";
        result.put(ResponseContant.resultFlag, ResponseContant.success);
@ -382,12 +485,23 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
        if (StringUtils.isNotBlank(conclusionImg)){
            assistanceDO.setConclusionImg(conclusionImg);
        }
        //完成医生
        BaseDoctorDO doctorDO = doctorDao.findById(doctor);
        assistanceDO.setDoctor(doctor);
        assistanceDO.setDoctorName(doctorDO.getName());
        assistanceDO.setCompleteTime(new Date());
        assistanceDO.setStatus(0);
        assistanceDO.setUpdateUser(doctor);
        assistanceDO.setUpdateUserName(assistanceDO.getDoctorName());
        assistanceDO.setUpdateTime(new Date());
        //im会话是否结束?
        //结束会话
        if (!consultTeamService.finishEmergencyConsult(assistanceDO,doctor,2)){
            String failMsg = "咨询结束失败 无法完成工单";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            return result;
        }
        emergencyAssistanceDao.save(assistanceDO);
        return getOrderDetail(orderId);
    }
@ -424,6 +538,30 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
        return result;
    }
    public JSONObject updatePatientLocation(String patient,String patientAddress,String patientLat,String patientLon){
        JSONObject result = new JSONObject();
        BasePatientDO patientDO = patientDao.findById(patient);
        if (patientDO==null){
            String failMsg = "患者不存在";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            return result;
        }
        EmergencyAssistanceDO assistanceDO = emergencyAssistanceDao.findByPatientAndStatus(patient,1);
        if (assistanceDO!=null){
            assistanceDO.setServeAddress(patientAddress);
            assistanceDO.setServeLat(patientLat);
            assistanceDO.setServeLon(patientLon);
            emergencyAssistanceDao.save(assistanceDO);
            return getOrderDetail(assistanceDO.getId());
        }
        else {
            result.put(ResponseContant.resultFlag, ResponseContant.success);
            result.put(ResponseContant.resultMsg,null);
        }
        return result;
    }
    public JSONObject sendQuickMessage(String orderId,String patient,String content){
        JSONObject result = new JSONObject();
        ConsultTeamDo consultTeam = consultTeamDao.queryByRelationCode(orderId);
@ -448,4 +586,28 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
        }
        return result;
    }
    public String test(String doctor,String orderID){
//        JSONObject message = new JSONObject();
//        message.put("session_id","808080eb78b5d8e90178b5fcfa330001_4028030c78f1df510178f217a6c50001_20");
//        message.put("sender_name","一一");
//        message.put("sender_code","808080eb78b5d8e90178b5fcfa330001");
//        message.put("order_id","4028030c78f1df510178f217a6a70000");
//        message.put("content_type",40);
//        imUtill.sendMDTSocketMessageToDoctor(doctor,message.toString());
        //结束救助咨询
//        String sql = "select id from base_emergency_assistance_order where status!=1";
//        List<String> ids = jdbcTemplate.queryForList(sql,String.class);
//        for (String id:ids){
//            EmergencyAssistanceDO assistanceDO = emergencyAssistanceDao.findOne(orderID);
//            if (!consultTeamService.finishEmergencyConsult(assistanceDO,doctor,2)){
//                String failMsg = "咨询结束失败 无法完成工单";
//
//                return failMsg;
//            }
//        }
        return null;
    }
}

+ 109 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/common/RedisService.java

@ -0,0 +1,109 @@
package com.yihu.jw.care.service.common;
import com.yihu.jw.care.util.RedisConstant;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.data.redis.core.script.RedisScript;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.concurrent.TimeUnit;
/**
 * redis接口实现
 *
 * @author baichuan.wu
 * @version 1.0.0
 * @date 2019-12-19 15:00
 */
@Service("redisService")
public class RedisService {
    private static final Logger log = LoggerFactory.getLogger(RedisService.class);
    @Autowired
    private RedisTemplate redisTemplate;
    private static final String LOCK_LUA = "if redis.call('setNx',KEYS[1],ARGV[1]) == 1 then redis.call('expire',KEYS[1],ARGV[2]) return 1 else return 0 end";
    private static final String UNLOCK_LUA = "if redis.call('get', KEYS[1]) == ARGV[1] then redis.call('del', KEYS[1]) end return 1 ";
    private static final Long SUCCESS = 1L;
    public boolean tryLock(String lockKey, String value) {
        try {
            RedisScript<Long> redisScript = new DefaultRedisScript<>(LOCK_LUA, Long.class);
            Object result = redisTemplate.execute(redisScript, Collections.singletonList(lockKey), value, RedisConstant.REDIS_LOCK_EXPIRE);
            return SUCCESS.equals(result);
        } catch (Exception e) {
            log.error("Get Lock Exception", e);
            return false;
        }
    }
    public boolean tryLock(String lockKey, String value, long expire) {
        try {
            RedisScript<Long> redisScript = new DefaultRedisScript<>(LOCK_LUA, Long.class);
            Object result = redisTemplate.execute(redisScript, Collections.singletonList(lockKey), value, expire);
            return SUCCESS.equals(result);
        } catch (Exception e) {
            log.error("Get Lock Exception", e);
            return false;
        }
    }
    public void releaseLock(String lockKey) {
        try {
            redisTemplate.delete(lockKey);
        } catch (Exception e) {
            log.error("Release Lock Exception", e);
        }
    }
    public boolean releaseLock(String lockKey, String value) {
        try {
            RedisScript<Long> redisScript = new DefaultRedisScript<>(UNLOCK_LUA, Long.class);
            Object result = redisTemplate.execute(redisScript, Collections.singletonList(lockKey), value);
            return SUCCESS.equals(result);
        } catch (Exception e) {
            log.error("Release Lock Exception", e);
            return false;
        }
    }
    public boolean expire(String key, long expire) {
        try {
            if (expire > 0) {
                return redisTemplate.expire(key, expire, TimeUnit.SECONDS);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    public long getExpire(String key) {
        return redisTemplate.getExpire(key, TimeUnit.SECONDS);
    }
    public boolean hasKey(String key) {
        try {
            return StringUtils.isBlank(key) ? false : redisTemplate.hasKey(key);
        } catch (Exception e) {
            return false;
        }
    }
}

+ 49 - 3
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/consult/ConsultTeamService.java

@ -3,10 +3,13 @@ package com.yihu.jw.care.service.consult;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.dao.sign.ServicePackageSignRecordDao;
import com.yihu.jw.care.service.sign.ServicePackageService;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.im.ConsultDo;
import com.yihu.jw.entity.base.im.ConsultTeamDo;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.servicePackage.ServicePackageSignRecordDO;
import com.yihu.jw.entity.care.assistance.EmergencyAssistanceDO;
import com.yihu.jw.im.dao.ConsultDao;
import com.yihu.jw.im.dao.ConsultTeamDao;
import com.yihu.jw.im.util.ImUtil;
@ -32,6 +35,8 @@ public class ConsultTeamService {
    @Autowired
    private BasePatientDao patientDao;
    @Autowired
    private BaseDoctorDao doctorDao;
    @Autowired
    private ConsultDao consultDao;
    @Autowired
    private ImUtil imUtill;
@ -121,7 +126,7 @@ public class ConsultTeamService {
     * @return
     * @throws Exception
     */
    public JSONObject addServiceConsult(String orderId,String patient,String symptoms) throws Exception {
    public JSONObject addServiceConsult(String orderId,String patient,String proxyPatient,String symptoms) throws Exception {
        JSONObject result = new JSONObject();
        // 判断居民是否已经签约
@ -143,7 +148,7 @@ public class ConsultTeamService {
        }
        //咨询记录
        String title = patientDO.getName() + "-发起了服务咨询";
        String title = patientDO.getName() + "发起了紧急救助咨询";
        ConsultDo consult = addConsult(patient,title,symptoms,patientDO.getPhone(),20);
        //咨询详细信息
@ -171,13 +176,16 @@ public class ConsultTeamService {
        //4、 紧急救助咨询-参与者
        JSONObject participants = new JSONObject();
        participants.put(patient, 0);
        if (StringUtils.isNotBlank(proxyPatient)&&(!proxyPatient.equals(patient))){
            participants.put(proxyPatient, 0);
        }
        //加入团队医生
        List<Map<String,Object>> doctorList = servicePackageService.fingdDoctorByPaitenId(patient,"emergencyAssistance");
        for(Map<String,Object> map:doctorList){
            participants.put(String.valueOf(map.get("id")), 0);
        }
        String content = patientDO.getName() + "-紧急救助咨询";
        String content = patientDO.getName() + "发起紧急救助申请";
        JSONObject messages = imUtill.getCreateTopicMessage(patient, patientDO.getName(), consult.getTitle(), content, consult.getImages(), "");
        JSONObject imResponseJson = imUtill.createTopics(sessionId, consult.getId(), content, participants, messages, ImUtil.SESSION_TYPE_EMERGENCY_ASSISTANCE);
@ -196,4 +204,42 @@ public class ConsultTeamService {
        result.put(ResponseContant.resultMsg, consultTeam);
        return result;
    }
    /**
     *
     * @param assistanceDO
     * @param endOperator 操作者ID
     * @param endType 1居民 2医生
     * @return
     */
    public boolean finishEmergencyConsult(EmergencyAssistanceDO assistanceDO, String endOperator, int endType){
        ConsultTeamDo consultTeam = consultTeamDao.queryByRelationCode(assistanceDO.getId());
        ConsultDo consult = consultDao.findOne(consultTeam.getConsult());
        String sessionId = assistanceDO.getPatient() + "_" + consultTeam.getConsult() + "_" + consultTeam.getType();
        String operatorId = endOperator;
        String operatorName=null;
        if (endType==1){
            BasePatientDO patientDO = patientDao.findById(endOperator);
            operatorName = patientDO.getName();
        }else {
            BaseDoctorDO doctorDO = doctorDao.findById(endOperator);
            operatorName = doctorDO.getName();
        }
        try {
            JSONObject obj =  imUtill.endTopics(sessionId,operatorId,operatorName,consultTeam.getConsult());
            if (obj == null||obj.getInteger("status") == -1) {
                return false;
            }
            consultTeam.setEndMsgId(obj.getString("id"));
            consult.setEndTime(new Date());
            consultTeam.setEndTime(new Date());
            consultTeam.setStatus(1);
            consultDao.save(consult);
            consultTeamDao.save(consultTeam);
        }catch (Exception e){
            e.printStackTrace();
        }
        return true;
    }
}

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/doctor/CareDoctorService.java

@ -44,7 +44,7 @@ public class CareDoctorService extends BaseJpaService<BaseDoctorDO, BaseDoctorDa
     * @return
     */
    public Map<String,Object> doctorInfo(String doctorId,String isRole){
        String sql = "SELECT d.id,d.name,d.level,d.photo,d.introduce,d.expertise,d.mobile,d.idcard,d.sex,h.dept_code deptCode,h.dept_name deptName,d.job_title_code jobTitleCode,d.job_title_name jobTitleName ";
        String sql = "SELECT d.id,d.name,d.doctor_level,d.photo,d.introduce,d.expertise,d.mobile,d.idcard,d.sex,h.dept_code deptCode,h.dept_name deptName,d.job_title_code jobTitleCode,d.job_title_name jobTitleName ";
        sql += " ,h.org_code orgCode,org.address orgAddress,h.org_name orgName from base_doctor d left join base_doctor_hospital h on d.id = h.doctor_code  and h.del = 1" +
                " LEFT JOIN base_org org on h.org_code = org.`code`  WHERE d.id = '"+doctorId+"' limit 1 ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/family/PatientFamilyMemberService.java

@ -307,7 +307,7 @@ public class PatientFamilyMemberService extends BaseJpaService<BasePatientFamily
    /**
     * 获取居民的家庭成员
     *
     * isContain 1包含自己
     * @param patient 居民
     * @return
     */

+ 38 - 8
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/lifeCare/LifeCareOrderService.java

@ -6,13 +6,17 @@ import com.yihu.jw.care.dao.lifeCare.LifeCareFeeDetailDao;
import com.yihu.jw.care.dao.lifeCare.LifeCareItemDictDao;
import com.yihu.jw.care.dao.lifeCare.LifeCareOrderDao;
import com.yihu.jw.care.util.MessageUtil;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.doctor.BaseDoctorHospitalDO;
import com.yihu.jw.entity.base.org.BaseOrgDO;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.care.lifeCare.LifeCareCancelLogDO;
import com.yihu.jw.entity.care.lifeCare.LifeCareFeeDetailDO;
import com.yihu.jw.entity.care.lifeCare.LifeCareItemDictDO;
import com.yihu.jw.entity.care.lifeCare.LifeCareOrderDO;
import com.yihu.jw.org.dao.BaseOrgDao;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.util.common.IdCardUtil;
@ -61,6 +65,10 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
    private String wxId;
    @Autowired
    private BaseDoctorHospitalDao doctorHospitalDao;
    @Autowired
    private BaseOrgDao baseOrgDao;
    @Autowired
    private BaseDoctorDao doctorDao;
    /**
     * 记录完成情况
@ -68,9 +76,12 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
     * @param complereImgs
     * @param completeRemark
     */
    public void completeOrder(String orderId,String complereImgs,String completeRemark){
    public void completeOrder(String orderId,String complereImgs,String completeRemark,String doctorId){
        BaseDoctorDO doctorDO = doctorDao.findById(doctorId);
        LifeCareOrderDO lifeCareOrderDO = lifeCareOrderDao.findOne(orderId);
        if(lifeCareOrderDO.getStatus().equals(LifeCareOrderDO.Status.waitForAccept.getType())){
            lifeCareOrderDO.setDoctor(doctorId);
            lifeCareOrderDO.setDoctorName(doctorDO.getName());
            lifeCareOrderDO.setStatus(2);
            lifeCareOrderDO.setCompleteImgs(complereImgs);
            lifeCareOrderDO.setCompleteRemark(completeRemark);
@ -217,7 +228,7 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
            }
        } catch (Exception e) {
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg, "从数据库查询【调度员】生活照料工单列表信息失败:" + e.getMessage());
            result.put(ResponseContant.resultMsg, "从数据库查询生活照料工单列表信息失败");
            return result;
        }
@ -226,7 +237,7 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
            count = jdbcTemplate.queryForObject(finqlCountSql, Long.class);
        } catch (Exception e) {
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg, "从数据库统计【调度员】生活照料工单数量失败:" + e.getMessage());
            result.put(ResponseContant.resultMsg, "从数据库统计生活照料工单数量失败" );
            return result;
        }
        
@ -313,7 +324,7 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
                " FROM " +
                "  base_life_care_order o " +
                " WHERE " +
                "  o.patient = '"+ patient + "' " +
                "  (o.patient = '"+ patient + "' or o.proxy_patient = '"+patient+"' )"+
                " GROUP BY o.`status`";
        List<Map<String,Object>> countMapList = jdbcTemplate.queryForList(countSql);
@ -339,14 +350,14 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
        LifeCareOrderDO orderDO = lifeCareOrderDao.findOne(orderId);
        if(null == orderDO){
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            String failMsg = "【取消工单】该工单不存在:," + orderId;
            String failMsg = "【取消工单】该工单不存在";
            result.put(ResponseContant.resultMsg, failMsg);
            logger.error(failMsg);
            return result;
        }
        if(orderDO.getStatus().equals(LifeCareOrderDO.Status.waitForAccept.getType())){
        if(orderDO.getStatus().equals(LifeCareOrderDO.Status.complete.getType())){
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            String failMsg = "只有医生服务前的工单才可取消:," + orderId;
            String failMsg = "只有医生服务前的工单才可取消";
            result.put(ResponseContant.resultMsg, failMsg);
            logger.error(failMsg);
            return result;
@ -395,13 +406,27 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public JSONObject create(String jsonData) {
    public JSONObject create(String jsonData,String proxyPatient) {
        logger.info("申请生活照料jsonData参数:" + jsonData);
        JSONObject result = new JSONObject();
        JSONObject jsonObjectParam;
        try {
            jsonObjectParam = JSONObject.parseObject(jsonData);
            if (jsonObjectParam.getJSONObject("order").getInteger("type")==1||jsonObjectParam.getInteger("type")==2){
                //本人或家人代发起
                BasePatientDO patientDO = patientDao.findById(proxyPatient);
                jsonObjectParam.put("proxyPatient",proxyPatient);
                jsonObjectParam.put("proxyPatientName",patientDO.getName());
                jsonObjectParam.put("proxyPatientPhone",patientDO.getMobile());
            }
            if (jsonObjectParam.getJSONObject("order").getInteger("type")==3) {//医生代发起
                BaseDoctorDO doctorDO = doctorDao.findById(proxyPatient);
                jsonObjectParam.put("proxyPatient",proxyPatient);
                jsonObjectParam.put("proxyPatientName",doctorDO.getName());
                jsonObjectParam.put("proxyPatientPhone",doctorDO.getMobile());
            }
        } catch (Exception e) {
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            String failMsg = "参数转换成JSON对象异常:" + e.getMessage();
@ -439,6 +464,11 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
            return result;
        }
        if (StringUtils.isNotBlank(orderDO.getHospital())){
            BaseOrgDO orgDO = baseOrgDao.findByCode(orderDO.getHospital());
            orderDO.setHospitalName(orgDO.getName());
        }
        orderDO.setCreateTime(new Date());
        //判断创建生活照料类型,发起类型(1本人发起 2家人待预约 3医生代预约)
        if(orderDO.getProxyPatient().equals(orderDO.getPatient())){

+ 2 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/message/DoctorMessageService.java

@ -51,7 +51,7 @@ public class DoctorMessageService {
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,"患者今年已做过能力评估报告,不可重复操作");
        }
        List<BaseDoctorHospitalDO> hospitalDO = baseDoctorHospitalDao.findByDoctorCode(doctor);
        List<BaseDoctorHospitalDO> hospitalDO = baseDoctorHospitalDao.findDistinctOrgByDoctorCode(doctor);
        Integer count;
        if (typeNull||type.equals("10")){//床位申请-未完成
            JSONObject tmpJson = new JSONObject();
@ -85,7 +85,7 @@ public class DoctorMessageService {
            sql+= "and  EXISTS ( SELECT 1 from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i ," +
                    "base_team_member m " +
                    "where ord.patient = CONVERT(sr.patient USING utf8) and  sr.id = r.sign_id and sr.status=1 and " +
                    " r.service_package_id = i.service_package_id and  m.team_code = i.team_code  and i.del = 1 and sr.`status`=1  and i.code='8' and m.doctor_code = '"+doctor+"' and m.del = '1') ";
                    " r.service_package_id = i.service_package_id and  m.team_code = i.team_code  and i.del = 1 and sr.`status`=1  and i.code='preventLost' and m.doctor_code = '"+doctor+"' and m.del = '1') ";
            sql+=" order by create_time asc ";
            Map<String,Object> sqlResult  = jdbcTemplate.queryForMap(sql);
            if (sqlResult.containsKey("count")){

+ 10 - 4
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/patient/CarePatientService.java

@ -14,6 +14,7 @@ import com.yihu.jw.entity.care.label.WlyyPatientLabelDO;
import com.yihu.jw.entity.care.sign.CapacityAssessmentRecordDO;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.patient.service.BasePatientMedicardCardService;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.utils.StringUtil;
@ -141,7 +142,7 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
     * @param doctorId
     */
    @Transactional(rollbackFor = Exception.class)
    public void updPatient(String jsonData,String doctorId) throws Exception{
    public JSONObject updPatient(String jsonData,String doctorId) throws Exception{
        JSONObject jsonObject = JSON.parseObject(jsonData);
        BasePatientDO patientDetail = JSONObject.parseObject(jsonObject.getJSONObject("patient").toJSONString(), BasePatientDO.class);
        BasePatientDO patientBrief = patientDao.findById(patientDetail.getId());
@ -174,11 +175,16 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
        patientDao.save(patientBrief);
        JSONObject jsonObject1 = jsonObject.getJSONObject("signRecordDO");
        JSONObject result  = new JSONObject();
        result.put(ResponseContant.resultFlag, ResponseContant.success);
        result.put(ResponseContant.resultMsg,"修改成功");
        if(jsonObject1!=null){
            servicePackageService.servicePackageSign(jsonObject1.toJSONString(),doctorId,patientBrief.getId());
            servicePackageService.setPatientServiceItems(patientBrief.getId());
            result = servicePackageService.servicePackageSign(jsonObject1.toJSONString(),doctorId,patientBrief.getId());
            if (result.getIntValue(ResponseContant.resultFlag) == ResponseContant.success) {
                servicePackageService.setPatientServiceItems(patientBrief.getId());
            }
        }
        return result;
    }
    /**

+ 28 - 13
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/security/SecurityMonitoringOrderService.java

@ -73,7 +73,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
    private Logger logger = LoggerFactory.getLogger(SecurityMonitoringOrderService.class);
    public JSONObject createOrder(String jsonData){
        logger.info("创建上门服务jsonData参数:" + jsonData);
        logger.info("创建安防工单jsonData参数:" + jsonData);
        JSONObject result = new JSONObject();
        JSONObject jsonObjectParam;
@ -123,7 +123,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        //签约防走失服务包
        String sql ="SELECT i.code from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i  \n" +
                "where  sr.id = r.sign_id and sr.status=1 and r.service_package_id = i.service_package_id   and i.del = 1 and sr.`status`=1 \n" +
                "and  sr.patient  = '"+orderDO.getPatient()+"' and i.code=8 ";
                "and  sr.patient  = '"+orderDO.getPatient()+"' and i.code='preventLost' ";
       List<String> items = jdbcTemplate.queryForList(sql,String.class);
        if (items.size()==0) {
            result.put("resultFlag", 0);
@ -220,7 +220,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            sql+=" and  EXISTS ( SELECT 1 from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i ," +
                    "base_team_member m " +
                    "where ord.patient = CONVERT(sr.patient USING utf8) and  sr.id = r.sign_id and sr.status=1 and " +
                    " r.service_package_id = i.service_package_id and  m.team_code = i.team_code  and i.del = 1 and sr.`status`=1  and i.code='8' and m.doctor_code = '"+doctor+"' and m.del = '1') ";
                    " r.service_package_id = i.service_package_id and  m.team_code = i.team_code  and i.del = 1 and sr.`status`=1  and i.code='preventLost' and m.doctor_code = '"+doctor+"' and m.del = '1') ";
        }
        if (StringUtils.isNotBlank(serverDoctor)){
            sql +=" and ord.doctor = '"+serverDoctor+"' ";
@ -297,7 +297,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        sql+= "and  EXISTS ( SELECT 1 from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i ," +
                "base_team_member m " +
                "where ord.patient = CONVERT(sr.patient USING utf8) and  sr.id = r.sign_id and sr.status=1 and " +
                " r.service_package_id = i.service_package_id and  m.team_code = i.team_code  and i.del = 1 and sr.`status`=1  and i.code='8' and m.doctor_code = '"+doctor+"' and m.del = '1') ";
                " r.service_package_id = i.service_package_id and  m.team_code = i.team_code  and i.del = 1 and sr.`status`=1  and i.code='preventLost' and m.doctor_code = '"+doctor+"' and m.del = '1') ";
        sql +=" order by ord.create_time asc ";
        result= jdbcTemplate.queryForList(sql);
        for (Map<String,Object> map:result){
@ -509,7 +509,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        JSONObject result = new JSONObject();
        SecurityMonitoringOrderDO orderDO = securityMonitoringOrderDao.findOne(orderId);
        if(null == orderDO){
            String failMsg = "【取消工单】该工单不存在:," + orderId;
            String failMsg = "【取消工单】该工单不存在" ;
            result.put("resultFlag", 0);
            result.put("resultMsg", failMsg);
            logger.error(failMsg);
@ -518,14 +518,14 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        //接单前可取消工单
        BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
        if (doctorDO==null){
            String failMsg = "【取消工单】操作医生不存在," + orderId;
            String failMsg = "【取消工单】操作医生不存在";
            result.put("resultFlag", 0);
            result.put("resultMsg", failMsg);
            logger.error(failMsg);
            return result;
        }
        if(orderDO.getStatus() > SecurityMonitoringOrderDO.Status.waitForSend.getType()){
            String failMsg = "只有医生接单前的工单才可取消:," + orderId;
            String failMsg = "只有医生接单前的工单才可取消";
            result.put("resultFlag", 0);
            result.put("resultMsg", failMsg);
            logger.error(failMsg);
@ -596,7 +596,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            try {
                confirmLogDO = EntityUtils.jsonToEntity(confirmInfo.toString(), SecurityMonitoringOrderPatientConfirmLog.class);
            } catch (Exception e) {
                String failMsg = "工单关联【居民确认操作日志记录】时," + e.getMessage();
                String failMsg = "工单关联【居民确认操作日志记录】时出错";
                result.put("resultFlag", 0);
                result.put("resultMsg", failMsg);
                logger.error(failMsg);
@ -607,7 +607,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            try {
                securityMonitoringOrderPatientConfirmLogDao.save(confirmLogDO);
            } catch (Exception e) {
                String failMsg = "保存工单关联的【居民确认操作日志记录】时:," + e.getMessage();
                String failMsg = "保存工单关联的【居民确认操作日志记录】时出错";
                result.put("resultFlag", 0);
                result.put("resultMsg", failMsg);
                logger.error(failMsg);
@ -707,7 +707,9 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        }
        securityMonitoringConclusionDao.save(doorConclusion);
        // 设置是否需要上传补录报告
        one.setStatus(SecurityMonitoringOrderDO.Status.registerSummary.getType());//已登记服务小结
        if (!(one.getStatus()==SecurityMonitoringOrderDO.Status.complete.getType())){
            one.setStatus(SecurityMonitoringOrderDO.Status.registerSummary.getType());//已登记服务小结
        }
        one.setExamPaperStatus(examPapeStatus);
        one.setConclusionStatus(2);
        securityMonitoringOrderDao.save(one);
@ -719,7 +721,20 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
     * @param orderId
     */
    public JSONObject cancelConclusion(String orderId) {
        securityMonitoringOrderDao.updateConclusionStatus(orderId);
        JSONObject result = new JSONObject();
        SecurityMonitoringOrderDO one = securityMonitoringOrderDao.findOne(orderId);
        if (one==null){
            String failMsg = "工单不存在" ;
            result.put("resultFlag", 0);
            result.put("resultMsg", failMsg);
            return result;
        }
        if (one.getStatus()==SecurityMonitoringOrderDO.Status.complete.getType()){//修改工单记录
            securityMonitoringOrderDao.updateConclusionStatus2(orderId);
        }
        else {
            securityMonitoringOrderDao.updateConclusionStatus(orderId);
        }
        return getSecurityOrderDetail(orderId);
    }
@ -878,7 +893,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        //获取患者签约防走失服务的团队
        String sql="SELECT DISTINCT i.team_code from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i  \n" +
                "where  sr.id = r.sign_id and sr.status=1 and r.service_package_id = i.service_package_id   and i.del = 1 and sr.`status`=1 \n" +
                "and  sr.patient  = '"+patient+"' and i.code=8";
                "and  sr.patient  = '"+patient+"' and i.code='preventLost'";
        List<String> teams = jdbcTemplate.queryForList(sql,String.class);
        List<Map<String,Object>> result = new ArrayList<>();
        if (teams.size()==0){
@ -886,7 +901,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        }else {
            for (String team:teams){
                sql = "select DISTINCT doc.id doctor,CONCAT(doc.`name`,\n" +
                        "CASE WHEN doc.`level`=1 THEN '(社区医生)' ELSE '(助老员)' END) as name,doc.photo,doc.mobile from base_team_member mem " +
                        "CASE WHEN doc.doctor_level=1 THEN '(社区医生)' ELSE '(助老员)' END) as name,doc.photo,doc.mobile from base_team_member mem " +
                        "INNER JOIN base_doctor doc on mem.doctor_code = doc.id and mem.del=1 and mem.team_code='"+team+"'";
                List<Map<String,Object>>tmp = jdbcTemplate.queryForList(sql);
                result.addAll(tmp);

+ 6 - 20
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/ArchiveService.java

@ -137,8 +137,12 @@ public class ArchiveService extends BaseJpaService<ArchiveDO, ArchiveDao> {
        patientDO.setCreateTime(new Date());
        patientDO.setUpdateTime(new Date());
        patientDO.setPatientStatus("1");
        patientDao.save(patientDO);
        if(!patientDao.existsByIdcardAndDel(idcard,"1")){
            patientDO = patientDao.save(patientDO);
        }
        else{
            patientDO = patientDao.findByIdcardAndDel(idcard,"1");
        }
        BaseDoctorDO doctorDO = doctorDao.findById(doctorId);
        ArchiveDO archiveDO = new ArchiveDO();
        archiveDO.setArchiveOperatorName(doctorDO.getName());
@ -150,15 +154,6 @@ public class ArchiveService extends BaseJpaService<ArchiveDO, ArchiveDao> {
        archiveDO.setCreateTime(new Date());
        archiveDao.save(archiveDO);
        //床位申请修改状态
        List<BaseDoctorHospitalDO> hospitalDOs = baseDoctorHospitalDao.findByDoctorCode(doctorId);
        if (hospitalDOs.size()>0){
            PatientBedApplyDo bedApplyDo = patientBedApplyDao.findByPatientAndOrgCodeAndStatus(patientDO.getIdcard(),hospitalDOs.get(0).getOrgCode(),1);
            if (bedApplyDo!=null){
                bedApplyDo.setStatus(2);
                patientBedApplyDao.save(bedApplyDo);
            }
        }
        return 0;
    }
@ -177,15 +172,6 @@ public class ArchiveService extends BaseJpaService<ArchiveDO, ArchiveDao> {
        archiveDO.setIdcard(patientDO.getIdcard());
        archiveDO.setCreateTime(new Date());
        archiveDao.save(archiveDO);
        List<BaseDoctorHospitalDO> hospitalDOs = baseDoctorHospitalDao.findByDoctorCode(doctorId);
        if (hospitalDOs.size()>0){
            PatientBedApplyDo bedApplyDo = patientBedApplyDao.findByPatientAndOrgCodeAndStatus(patientDO.getIdcard(),hospitalDOs.get(0).getOrgCode(),1);
            if (bedApplyDo!=null){
                bedApplyDo.setStatus(2);
                patientBedApplyDao.save(bedApplyDo);
            }
        }
    }
}

+ 24 - 13
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/CapacityAssessmentRecordService.java

@ -132,7 +132,7 @@ public class CapacityAssessmentRecordService extends BaseJpaService<CapacityAsse
        List<Map<String,Object>> countMapList = jdbcTemplate.queryForList(sql);
        for(Map<String,Object> map:countMapList){
            int c = Integer.valueOf(map.get("count").toString());
            res.put(String.valueOf(map.get("status")),c);
            res.put(String.valueOf(map.get("level_conclusion")),c);
        }
        String sql2 = "SELECT COUNT(DISTINCT ar.id) from base_patient ar, " +
@ -251,13 +251,23 @@ public class CapacityAssessmentRecordService extends BaseJpaService<CapacityAsse
            patientLabelDO.setLabelCode(String.valueOf(recordDO.getLevelConclusion()));
            patientLabelDO.setLabelName(dictService.fingByNameAndCode(ConstantUtil.DICT_SERVICE_TYPE,patientLabelDO.getLabelCode()));
            patientLabelDao.save(patientLabelDO);
            result.put(ResponseContant.resultFlag, ResponseContant.success);
            result.put(ResponseContant.resultMsg,recordDO);
            return result;
        }
        result.put(ResponseContant.resultFlag, ResponseContant.fail);
        result.put(ResponseContant.resultMsg,"患者今年已做过能力评估报告,不可重复操作");
        else{
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,"患者今年已做过能力评估报告,不可重复操作");
        }
        if(StringUtils.isNotBlank(recordDO.getPatient())){
            BasePatientDO patientDO= patientDao.findById(recordDO.getPatient());
            if (patientDO!=null){
                PatientBedApplyDo bedApplyDo = patientBedApplyDao.findByIdcardAndStatus(patientDO.getIdcard(),1);
                if (bedApplyDo!=null){
                    bedApplyDo.setStatus(2);
                    patientBedApplyDao.save(bedApplyDo);
                }
            }
        }
        return result;
    }
@ -350,6 +360,13 @@ public class CapacityAssessmentRecordService extends BaseJpaService<CapacityAsse
                    patientLabelDO.setLabelCode(String.valueOf(recordDO.getLevelConclusion()));
                    patientLabelDO.setLabelName(dictService.fingByNameAndCode(ConstantUtil.DICT_SERVICE_TYPE,patientLabelDO.getLabelCode()));
                    patientLabelDao.save(patientLabelDO);
                    if (patientDO!=null){
                        PatientBedApplyDo bedApplyDo = patientBedApplyDao.findByIdcardAndStatus(patientDO.getIdcard(),1);
                        if (bedApplyDo!=null){
                            bedApplyDo.setStatus(2);
                            patientBedApplyDao.save(bedApplyDo);
                        }
                    }
                    result.put("status",1);
                    result.put("message","保存成功");
                    result.put("data",recordDO);
@ -384,12 +401,6 @@ public class CapacityAssessmentRecordService extends BaseJpaService<CapacityAsse
        recordDO.setSignTime(new Date());
        capacityAssessmentRecordDao.save(recordDO);
        //完成评估 修改床位生请状态为已完成
        PatientBedApplyDo bedApplyDo = patientBedApplyDao.findByPatientAndOrgCodeAndStatus(recordDO.getIdcard(),recordDO.getOrgCode(),2);
        if (bedApplyDo!=null) {
            bedApplyDo.setStatus(0);
            patientBedApplyDao.save(bedApplyDo);
        }
    }
    /**
@ -443,13 +454,13 @@ public class CapacityAssessmentRecordService extends BaseJpaService<CapacityAsse
            }
            JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(O1, SerializerFeature.WriteMapNullValue));
            jsonObject.put("patient",patient);
            if (item==1){
            if (tmpItem==1){
                if (StringUtils.isNotBlank(jsonObject.getString("idcard"))){
                    jsonObject.put("birthday",IdCardUtil.getBirthdayForIdcardStr(jsonObject.getString("idcard")));
                }
                jsonObject.put("birthday",null);
            }
            if (!searchFlag && item == 1) {//基本信息带入
            if (!searchFlag && tmpItem == 1) {//基本信息带入
                CapacityAssessmentBaseInfoDo obj = new CapacityAssessmentBaseInfoDo();
                BasePatientDO patientDo = patientDao.findById(patient);
                obj.setPatient(patient);

+ 81 - 13
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/ServicePackageService.java

@ -2,6 +2,7 @@ package com.yihu.jw.care.service.sign;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.care.dao.apply.PatientBedApplyDao;
import com.yihu.jw.care.dao.sign.*;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
@ -11,10 +12,12 @@ import com.yihu.jw.entity.base.servicePackage.ServicePackageDO;
import com.yihu.jw.entity.base.servicePackage.ServicePackageItemDO;
import com.yihu.jw.entity.base.servicePackage.ServicePackageRecordDO;
import com.yihu.jw.entity.base.servicePackage.ServicePackageSignRecordDO;
import com.yihu.jw.entity.care.apply.PatientBedApplyDo;
import com.yihu.jw.entity.care.archive.ArchiveDO;
import com.yihu.jw.entity.care.sign.CapacityAssessmentRecordDO;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.patient.service.BasePatientMedicardCardService;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.utils.StringUtil;
@ -66,6 +69,8 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
    private BasePatientMedicardCardService basePatientMedicardCardService;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private PatientBedApplyDao bedApplyDao;
    /**
     * 查找签约机构
@ -202,7 +207,7 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
                "base_service_package_item i,base_team_member m,base_doctor d " +
                "WHERE sr.id = r.sign_id and sr.status=1 and r.service_package_id = i.service_package_id " +
                "and i.del = 1 and m.team_code = i.team_code and m.doctor_code = d.id " +
                "and m.del = '1' and d.level = " + level+
                "and m.del = '1' and d.doctor_level = " + level+
                " and sr.id = '"+signId+"' ";
        return jdbcTemplate.queryForList(sql);
    }
@ -230,7 +235,7 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
                "base_service_package_item i,base_team_member m,base_doctor d " +
                "WHERE r.service_package_id = i.service_package_id " +
                "and i.del = 1 and m.team_code = i.team_code and m.doctor_code = d.id " +
                "and m.del = '1' and d.level = " + level+
                "and m.del = '1' and d.doctor_level = " + level+
                " and r.id = '"+packageId+"' ";
        return jdbcTemplate.queryForList(sql);
    }
@ -240,10 +245,10 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
     * @param signId
     */
    public List<Map<String,Object>> fingdBySignId(String signId){
        String sql = "SELECT DISTINCT p.id,p.`name` from base_service_package_sign_record sr,base_service_package_record r, " +
                "base_service_package p " +
                "WHERE sr.id = r.sign_id and  p.id = r.service_package_id and p.del = 1 " +
                "and sr.id = '"+signId+"' ";
        String sql = "SELECT DISTINCT p.id,p.`name`,item.org_code,item.org_name from base_service_package_sign_record sr,base_service_package_record r, " +
                "base_service_package p,base_service_package_item item " +
                "WHERE sr.id = r.sign_id and  p.id = r.service_package_id and item.service_package_id = r.service_package_id and p.del = 1 " +
                " and item.del=1 and sr.id = '"+signId+"' GROUP BY item.service_package_id ORDER BY item.create_time desc ";
        return jdbcTemplate.queryForList(sql);
    }
@ -306,7 +311,9 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
     * @param doctorId
     */
    @Transactional(rollbackFor = Exception.class)
    public ServicePackageSignRecordDO servicePackageSign(String jsonData,String doctorId,String patientId) throws Exception{
    public JSONObject servicePackageSign(String jsonData,String doctorId,String patientId) throws Exception{
        BasePatientDO patientDO = patientDao.findById(patientId);
        JSONObject result = new JSONObject();
        ServicePackageSignRecordDO signRecordDO = objectMapper.readValue(jsonData, ServicePackageSignRecordDO.class);
        signRecordDO.setPatient(patientId);
        List<ServicePackageRecordDO> recordDOList = signRecordDO.getRecordDOList();
@ -334,12 +341,23 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
                    archiveDao.save(archiveDO);
                }
            }else{
                ArchiveDO archiveDO = archiveDao.findByPatientAndDoctorCode(patientId,doctorId);
                if(archiveDO!=null){
                    archiveDO.setSignStatus(1);
                    archiveDao.save(archiveDO);
                }
                signId = signRecordDOs.get(0).getId();
                List<ServicePackageRecordDO> existList = servicePackageRecordDao.findBySignId(signId);
                idList = existList.stream().map(ServicePackageRecordDO::getServicePackageId).collect(Collectors.toList());
            }
        }
        //服务项目 emergencyAssistance 只能签约一个
        String sqlItem = "select item.`code`,item.name from base_service_package_item item INNER JOIN base_service_package_record pr on item.service_package_id = pr.service_package_id\n" +
                "where pr.sign_id='"+signId+"' GROUP BY item.`code`";
        List<Map<String,Object>> itemList = jdbcTemplate.queryForList(sqlItem);
        Map<String,List<Map<String,Object>>> signItem = itemList.stream().collect(Collectors.groupingBy(e->e.get("code").toString()));
        Iterator<ServicePackageRecordDO> iterator = recordDOList.iterator();
        while (iterator.hasNext()) {
            ServicePackageRecordDO recordDO = iterator.next();
@ -351,12 +369,32 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
        }
        if(recordDOList.size()>0){
            CapacityAssessmentRecordDO capacityAssessmentRecordDO = capacityAssessmentRecordService.findAssessmentByPatientId(patientId);
            capacityAssessmentRecordDO.setServicePackageStatus(1);
            capacityAssessmentRecordService.save(capacityAssessmentRecordDO);
            List<String> packages = recordDOList.stream().map(ServicePackageRecordDO::getServicePackageId).collect(Collectors.toList());
            String packagesId = packages.stream().map(String::valueOf).collect(Collectors.joining("','"));
            sqlItem = "select item.`code`,item.name from base_service_package_item item " +
                    "where item.service_package_id in ('"+packagesId+"') GROUP BY item.`code`";
            itemList = jdbcTemplate.queryForList(sqlItem);
           Map<String,List<Map<String,Object>>> newItem = itemList.stream().collect(Collectors.groupingBy(e->e.get("code").toString()));
           if (newItem.containsKey("emergencyAssistance")&&signItem.containsKey("emergencyAssistance")){
               String message = "重复签约服务项目:"+newItem.get("emergencyAssistance").get(0).get("name").toString();
               throw new Exception(message);
           }
        }
        CapacityAssessmentRecordDO capacityAssessmentRecordDO = capacityAssessmentRecordService.findAssessmentByPatientId(patientId);
        capacityAssessmentRecordDO.setServicePackageStatus(1);
        capacityAssessmentRecordService.save(capacityAssessmentRecordDO);
        servicePackageRecordDao.save(recordDOList);
        return signRecordDO;
        //修改床位生请状态为已完成
        PatientBedApplyDo bedApplyDo = bedApplyDao.findByIdcardAndStatus(patientDO.getIdcard(),2);
        if (bedApplyDo!=null) {
            bedApplyDo.setStatus(0);
            bedApplyDao.save(bedApplyDo);
        }
        result.put(ResponseContant.resultFlag, ResponseContant.success);
        result.put(ResponseContant.resultMsg,signRecordDO);
        return result;
    }
@ -405,7 +443,7 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
    public List<Map<String,Object>> serviceItemByPackageId(String packageId){
        String sql ="select it.code,it.name,count(it.code)count,pack.introduce,pack.type,pack.`name` from base_service_package_item it " +
                "INNER JOIN base_service_package pack on it.service_package_id = pack.id  where it.service_package_id='"+packageId+"' group by it.code ";
                "INNER JOIN base_service_package pack on it.service_package_id = pack.id  where it.service_package_id='"+packageId+"' and pack.del=1 group by it.code ";
        List<Map<String,Object>> result = jdbcTemplate.queryForList(sql);
        return result;
    }
@ -415,12 +453,42 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
        String sql="select  DISTINCT pack.*,CASE WHEN pack.type=1 THEN '养老服务' WHEN pack.type=2 THEN '医疗服务'\n" +
                "WHEN pack.type=3 THEN '安防监护' WHEN pack.type=4 THEN '慢病管理' ELSE pack.type\n" +
                "END as 'typeName' from base_service_package_record re, base_service_package_item item,base_service_package pack  \n" +
                "where re.service_package_id = item.service_package_id and item.service_package_id = pack.id and item.code='"+serverItem+"' and re.sign_id in (\n" +
                "where re.service_package_id = item.service_package_id and item.service_package_id = pack.id and pack.del=1 and  item.code='"+serverItem+"' and re.sign_id in (\n" +
                "select rd.id from base_service_package_sign_record rd  where rd.patient='"+patient+"' and rd.status=1) ";
        List<Map<String,Object>> resultSql = jdbcTemplate.queryForList(sql);
        //查询服务包的服务项目
        for (Map<String,Object> map:resultSql){
            String packageId = map.get("id").toString();
            sql="select DISTINCT it.code serverItem,it.name,pack.introduce,pack.type packageType,pack.`name` packageName from base_service_package_item it \n" +
                    "INNER JOIN base_service_package pack on it.service_package_id = pack.id  where pack.del=1 and it.service_package_id='"+packageId+"' group by it.code";
            List<Map<String,Object>> resultTmp = jdbcTemplate.queryForList(sql);
            map.put("serverItems",resultTmp);
        }
        Map<String,List<Map<String,Object>>> result = resultSql.stream().collect(Collectors.groupingBy(e -> e.get("typeName").toString()));
        return result;
    }
    public List<Map<String,Object>> getServerDoctorByPackage(String packageId,String serverItem){
        String sql="select DISTINCT doc.id doctor,CONCAT(doc.`name`,\n" +
                "CASE WHEN doc.doctor_level=1 THEN '(社区医生)' ELSE '(助老员)' END) as name,doc.photo,doc.mobile\n" +
                "from base_service_package_item item ,base_service_package pack,base_team_member mem,base_doctor doc\n" +
                "where item.`code`='"+serverItem+"' and item.service_package_id='"+packageId+"' and item.service_package_id = pack.id " +
                "and item.team_code = mem.team_code and mem.doctor_code = doc.id and mem.del=1 and pack.del=1 ";
        List<Map<String,Object>>result = jdbcTemplate.queryForList(sql);
        return result;
    }
    public Map<String,Object> getPackageDetailById(String packageId){
        String sql="select * from base_service_package where id='"+packageId+"' and del=1 ";
        Map<String,Object>result = jdbcTemplate.queryForMap(sql);
        sql = "select org_code,org_name,introduce from base_service_package_item where service_package_id='"+packageId+"'\n" +
                "GROUP BY org_code ORDER BY create_time desc ";
        List<Map<String,Object>> tmp = jdbcTemplate.queryForList(sql);
        result.put("hospital",tmp);
        result.put("hospitalCount",tmp.size());
        return result;
    }
}

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/team/BaseTeamService.java

@ -170,7 +170,7 @@ public class BaseTeamService extends BaseJpaService<BaseTeamDO, BaseTeamDao> {
     * @param doctorCode
     */
    public void removeMember(String teamCode, String doctorCode) {
        BaseTeamMemberDO member = memberDao.findByTeamCodeAndDoctorCode(teamCode, doctorCode);
        BaseTeamMemberDO member = memberDao.findByTeamCodeAndDoctorCodeAndDel(teamCode, doctorCode,"1");
        if (member != null){
            memberDao.delete(member);
        }

+ 4 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/ConstantUtil.java

@ -37,6 +37,8 @@ public class ConstantUtil {
     servicePackageStatus 是否分配服务包
     capacity_agree_status 能力评估认可状态
     sex 性别
     emergency_assistance_message //紧急救助快速消息
     emergency_assistance_call //紧急救助快速呼叫
     */
    public static final String DICT_ARCHIVETYPE = "archiveType";
    public static final String DICT_ARCHIVESTATUS = "archiveStatus";
@ -52,6 +54,8 @@ public class ConstantUtil {
    public static final String DICT_SERVICEPACKAGESTATUS= "servicePackageStatus";
    public static final String DICT_CAPACITY_AGREE_STATUS= "capacity_agree_status";
    public static final String DICT_SEX= "sex";
    public static final String DICT_EMERGENCY_ASSISTANCE_MESSAGE= "emergency_assistance_message";
    public static final String DICT_EMERGENCY_ASSISTANCE_CALL= "emergency_assistance_call";
}

+ 22 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/RedisConstant.java

@ -0,0 +1,22 @@
package com.yihu.jw.care.util;
/**
 * redis常量
 *
 * Created by yeshijie on 2021/4/23.
 */
public class RedisConstant {
    /**
     * redis锁
     */
    public static final String REDIS_LOCK_PREFIX = "REDIS_LOCK";
    /**
     * redis锁默认过期时间(s秒)
     */
    public static final long REDIS_LOCK_EXPIRE = 15L;
    /**
     * redis锁默认过期时间(s秒)
     */
    public static final long REDIS_LOCK_EXPIRE_30 = 30L;
}

+ 12 - 0
svr/svr-cloud-care/src/main/resources/application.yml

@ -167,6 +167,10 @@ express:
  sf_url: https://mrds-admin.sf-express.com:443
  sf_code: JKZL
  sf_check_word: QkeIfIvQdheqIv2cVSgAUnBU29lfNbVk
baiduApi:
  AK: 0vjnCSReegE7A47a941ohjv9a07ONiMC
  url: http://api.map.baidu.com/
---
spring:
  profiles: jwtest
@ -259,6 +263,10 @@ express:
  sf_url: http://mrds-admin-ci.sit.sf-express.com:45478
  sf_code: HD000001
  sf_check_word: AAAABBBBCCCCDDDD
baiduApi:
  AK: 0vjnCSReegE7A47a941ohjv9a07ONiMC
  url: http://api.map.baidu.com/
---
spring:
  profiles: jwprod
@ -353,3 +361,7 @@ express:
  sf_url: https://mrds-admin.sf-express.com:443
  sf_code: WH000102
  sf_check_word: TGUQASFNAZyjt9112
baiduApi:
  AK: 0vjnCSReegE7A47a941ohjv9a07ONiMC
  url: http://api.map.baidu.com/

+ 27 - 0
svr/svr-cloud-care/src/main/test/com/yihu/jw/test/LatTest.java

@ -0,0 +1,27 @@
package com.yihu.jw.test;
import com.yihu.jw.util.common.LatitudeUtils;
import org.junit.Test;
import java.util.Map;
/**
 * Created with IntelliJ IDEA.
 *
 * @Author: yeshijie
 * @Date: 2021/4/28
 * @Description:
 */
public class LatTest {
    @Test
    public void testLat(){
        try {
            Map<String, String> json = LatitudeUtils.getGeocoderLatitude("厦门海沧区新阳海新阳光公寓15梯304");
            System.out.println("经度 : " + json.get("lng"));
            System.out.println("纬度 : " + json.get("lat"));
        }catch (Exception e ){
            e.printStackTrace();
        }
    }
}