Browse Source

Merge branch 'dev' of http://192.168.1.220:10080/Amoy2/wlyy2.0 into dev

Conflicts:
	common/common-entity/src/main/java/com/yihu/jw/entity/specialist/rehabilitation/RehabilitationTemplateDetailDO.java
yeshijie 4 năm trước cách đây
mục cha
commit
f43459ed83
30 tập tin đã thay đổi với 2844 bổ sung77 xóa
  1. 75 8
      common/common-entity/sql记录
  2. 1 4
      common/common-entity/src/main/java/com/yihu/jw/entity/base/org/BaseOrgDO.java
  3. 34 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/servicePackage/ServicePackageSignRecordDO.java
  4. 3 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/sign/CapacityAssessmentRecordDO.java
  5. 16 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/web/ObjEnvelop.java
  6. 0 1
      svr/svr-cloud-care/readme.MD
  7. 1 0
      svr/svr-cloud-care/src/main/java/com/yihu/SvrCloudCareApplication.java
  8. 14 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/ObserverRequired.java
  9. 89 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/ObserverRequiredAOP.java
  10. 22 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/ServicesAuth.java
  11. 100 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/ServicesAuthAOP.java
  12. 53 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/family/PatientFamilyMemberDao.java
  13. 42 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/team/BaseTeamDao.java
  14. 54 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/team/BaseTeamMemberDao.java
  15. 64 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doctor/DoctorEndpoint.java
  16. 354 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/family/FamilyMemberEndpoint.java
  17. 40 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/org/OrgEndpoint.java
  18. 60 6
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/patient/PatientEndpoint.java
  19. 29 8
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/sign/SignEndpoint.java
  20. 232 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/team/TeamEndpoint.java
  21. 87 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/doctor/CareDoctorService.java
  22. 799 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/family/PatientFamilyMemberService.java
  23. 34 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/org/BaseOrgService.java
  24. 107 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/patient/CarePatientService.java
  25. 14 12
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/CapacityAssessmentRecordService.java
  26. 84 15
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/ServicePackageService.java
  27. 60 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/team/BaseTeamMemberService.java
  28. 218 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/team/BaseTeamService.java
  29. 113 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/wechat/WeiXinAccessTokenUtils.java
  30. 45 23
      svr/svr-cloud-care/src/main/resources/application.yml

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

@ -96,7 +96,7 @@ CREATE TABLE `base_capacity_assessment_record` (
  `id` varchar(50) NOT NULL,
  `patient` varchar(50) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  `sex` tinyint(1) DEFAULT NULL,
  `sex` tinyint(2) DEFAULT NULL,
  `birthday` datetime DEFAULT NULL,
  `idcard` varchar(20) DEFAULT NULL,
  `mobile` varchar(20) DEFAULT NULL,
@ -104,23 +104,90 @@ CREATE TABLE `base_capacity_assessment_record` (
  `live_address` varchar(100) DEFAULT NULL COMMENT '居住地',
  `assessment_time` datetime DEFAULT NULL COMMENT '评估时间',
  `assessment_address` varchar(100) DEFAULT NULL COMMENT '评估地点',
  `living_ability` tinyint(1) DEFAULT NULL COMMENT '日常生活活动能力等级',
  `cognitive_ability` tinyint(1) DEFAULT NULL COMMENT '认知能力',
  `social_ability` tinyint(1) DEFAULT NULL COMMENT '精神状态与社会交流能力',
  `comprehensive_ability` tinyint(1) DEFAULT NULL COMMENT '能力总体评价',
  `level_conclusion` tinyint(1) DEFAULT NULL COMMENT '等级结论',
  `living_ability` tinyint(2) DEFAULT NULL COMMENT '日常生活活动能力等级',
  `cognitive_ability` tinyint(2) DEFAULT NULL COMMENT '认知能力',
  `social_ability` tinyint(2) DEFAULT NULL COMMENT '精神状态与社会交流能力',
  `comprehensive_ability` tinyint(2) DEFAULT NULL COMMENT '能力总体评价',
  `level_conclusion` tinyint(2) DEFAULT NULL COMMENT '等级结论',
  `doctor` varchar(50) DEFAULT NULL,
  `doctor_name` varchar(50) DEFAULT NULL,
  `org_code` varchar(50) DEFAULT NULL,
  `org_name` varchar(50) DEFAULT NULL,
  `status` tinyint(1) DEFAULT NULL COMMENT '认可结果(0未认可,1已认可,2不认可)',
  `status` tinyint(2) DEFAULT NULL COMMENT '认可结果(0未认可,1已认可,2不认可)',
  `sign_time` datetime DEFAULT NULL COMMENT '居民签字时间',
  `sign_url` varchar(255) DEFAULT NULL COMMENT '签字结果图片url',
  `service_package_status` tinyint(1) DEFAULT NULL COMMENT '是否分配服务包(0未分配,1已分配)',
  `service_package_status` tinyint(2) DEFAULT NULL COMMENT '是否分配服务包(0未分配,1已分配)',
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='能力评估记录';
DROP TABLE IF EXISTS `base_service_package`;
CREATE TABLE `base_service_package` (
  `id` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '服务包名称',
  `type` varchar(1) COLLATE utf8_unicode_ci NOT NULL COMMENT '服务类型(1养老服务、2医疗服务、3安防监护、4慢病管理)',
  `price` decimal(10,2) DEFAULT NULL COMMENT '价格',
  `num` int(10) DEFAULT NULL COMMENT '服务项数量',
  `introduce` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '服务介绍',
  `del` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '是否有效(1生效,0失效)',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=COMPACT COMMENT='服务包表';
-- ----------------------------
-- Table structure for base_service_package_item
-- ----------------------------
DROP TABLE IF EXISTS `base_service_package_item`;
CREATE TABLE `base_service_package_item` (
  `id` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `code` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '服务项code',
  `name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '服务项名称',
  `service_package_id` varchar(50) COLLATE utf8_unicode_ci DEFAULT 'system' COMMENT '服务包id',
  `price` decimal(11,2) DEFAULT '0.00' COMMENT '价格',
  `fee_type` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '收费标准(1免费)',
  `org_code` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '机构编码',
  `org_name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '机构名称',
  `introduce` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '服务简介',
  `del` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '是否生效(1 生效,0 失效)',
  `team_code` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '服务团队code',
  `team_name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '服务团队名称',
  `create_time` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=COMPACT COMMENT='服务项';
-- ----------------------------
-- Table structure for base_service_package_record
-- ----------------------------
DROP TABLE IF EXISTS `base_service_package_record`;
CREATE TABLE `base_service_package_record` (
  `id` varchar(50) NOT NULL,
  `sign_id` varchar(50) DEFAULT NULL COMMENT '签约id',
  `service_package_id` varchar(50) DEFAULT NULL COMMENT '服务包id',
  `patient` varchar(50) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='签约的服务包记录表';
-- ----------------------------
-- Table structure for base_service_package_sign_record
-- ----------------------------
DROP TABLE IF EXISTS `base_service_package_sign_record`;
CREATE TABLE `base_service_package_sign_record` (
  `id` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `patient` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '居民code签约人',
  `name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '居民姓名',
  `sign_doctor` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '签约医生code',
  `sign_doctor_name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '签约医生名称',
  `start_time` datetime DEFAULT NULL COMMENT '服务开始时间',
  `end_time` datetime DEFAULT NULL COMMENT '服务结束时间',
  `status` tinyint(4) DEFAULT NULL COMMENT '状态 0新增,1生效,-1已过期',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=COMPACT COMMENT='服务包签约记录表';
alter table base_patient add `marriage` int(11) DEFAULT NULL COMMENT '婚姻状况【10.未婚 20.已婚 30.丧偶 40.离婚 90.未说明的婚姻状况】';
alter table base_patient add `national` int(11) DEFAULT NULL COMMENT '民族';
alter table base_patient add `blood` int(11) DEFAULT NULL COMMENT '血型【1.A型 2.B型 3.O型 4.AB型 5.不详】';

+ 1 - 4
common/common-entity/src/main/java/com/yihu/jw/entity/base/org/BaseOrgDO.java

@ -1,13 +1,10 @@
package com.yihu.jw.entity.base.org;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
@ -86,7 +83,7 @@ public class BaseOrgDO extends UuidIdentityEntityWithOperator {
	private String spell;
    /**
	 * 机构类型: 1.  医疗机构2.  企事业单位3.  政府机关4.  社会团体 5.药店 0.  部门 6.单位或者独立子公司7.基层机构 8.专业公共机构
	 * 机构类型: 1. 等级医院2. 社区医院3.  养老机构
	 */
	private String type;

+ 34 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/servicePackage/ServicePackageSignRecordDO.java

@ -32,6 +32,13 @@ public class ServicePackageSignRecordDO extends UuidIdentityEntityWithCreateTime
     */
    private List<ServicePackageRecordDO> recordDOList;
    //社区医生
    private String doctorInfo;
    //助老员
    private String helperInfo;
    //服务包
    private String packageInfo;
    public String getPatient() {
        return patient;
    }
@ -102,4 +109,31 @@ public class ServicePackageSignRecordDO extends UuidIdentityEntityWithCreateTime
    public void setRecordDOList(List<ServicePackageRecordDO> recordDOList) {
        this.recordDOList = recordDOList;
    }
    @Transient
    public String getDoctorInfo() {
        return doctorInfo;
    }
    public void setDoctorInfo(String doctorInfo) {
        this.doctorInfo = doctorInfo;
    }
    @Transient
    public String getHelperInfo() {
        return helperInfo;
    }
    public void setHelperInfo(String helperInfo) {
        this.helperInfo = helperInfo;
    }
    @Transient
    public String getPackageInfo() {
        return packageInfo;
    }
    public void setPackageInfo(String packageInfo) {
        this.packageInfo = packageInfo;
    }
}

+ 3 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/sign/CapacityAssessmentRecordDO.java

@ -1,5 +1,6 @@
package com.yihu.jw.entity.care.sign;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.UuidIdentityEntityWithCreateTime;
import javax.persistence.Entity;
@ -122,6 +123,7 @@ public class CapacityAssessmentRecordDO extends UuidIdentityEntityWithCreateTime
        this.name = name;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getBirthday() {
        return birthday;
    }
@ -170,6 +172,7 @@ public class CapacityAssessmentRecordDO extends UuidIdentityEntityWithCreateTime
        this.liveAddress = liveAddress;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getAssessmentTime() {
        return assessmentTime;
    }

+ 16 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/web/ObjEnvelop.java

@ -42,10 +42,26 @@ public class ObjEnvelop<J> extends Envelop {
        envelop.setStatus(200);
        return envelop;
    }
    public static ObjEnvelop getSuccess(String message, Object obj,int status) {
        ObjEnvelop envelop = new ObjEnvelop();
        envelop.setMessage(message);
        envelop.setObj(obj);
        envelop.setStatus(status);
        return envelop;
    }
    public static ObjEnvelop getError(String message) {
        ObjEnvelop envelop = new ObjEnvelop();
        envelop.setMessage(message);
        envelop.setStatus(-1);
        return envelop;
    }
    public static ObjEnvelop getError(String message,int errorCode) {
        ObjEnvelop envelop = new ObjEnvelop();
        envelop.setMessage(message);
        envelop.setStatus(errorCode);
        return envelop;
    }
}

+ 0 - 1
svr/svr-cloud-care/readme.MD

@ -1,4 +1,3 @@
基础微服务
    每个模块有自己独立的文件夹,这样做的好处是以后如果哪个模块需要独立成微服务,代码直接剪切到新的微服务即可。
    每个模块下面有独立的Endpoint,service,model和dao
  

+ 1 - 0
svr/svr-cloud-care/src/main/java/com/yihu/SvrCloudCareApplication.java

@ -4,6 +4,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
/**

+ 14 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/ObserverRequired.java

@ -0,0 +1,14 @@
package com.yihu.jw.care.aop;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * Created by Trick on 2017/6/24.
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ObserverRequired {
}

+ 89 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/ObserverRequiredAOP.java

@ -0,0 +1,89 @@
package com.yihu.jw.care.aop;
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.json.JSONObject;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
/**
 * Created by Trick on 2017/6/24..
 */
@Aspect
@Component
public class ObserverRequiredAOP {
    //Controller层切点路径
    @Pointcut("execution(* com.yihu.jw.care.endpoint..*.*(..))")
    public void controllerAspect() {
    }
    public ObserverRequiredAOP() {
        //System.out.println("Observer---------------------------------------");
    }
    @Around("controllerAspect() && @annotation(com.yihu.jw.care.aop.ObserverRequired)")
    public Object checkToken(ProceedingJoinPoint point) throws Throwable {
        Object o = null;
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
        String error = "";
        try {
            response.setCharacterEncoding("UTF-8");
            JSONObject json = getAgent(request);
            String observer = json.has("observer") ? json.getString("observer") : "";
            if(StringUtils.isNotBlank(observer)&&"1".equals(observer)){
                PrintWriter writer=response.getWriter();
                writer.write(error(403, "该操作没有权限"));
                writer.flush();
                return o;
            }
        }catch (Exception e){
            //return o;
        }
         o = point.proceed();
        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;
        }
    }
}

+ 22 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/ServicesAuth.java

@ -0,0 +1,22 @@
package com.yihu.jw.care.aop;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * 使用该注解必须带item。注解的方法参数必须有patientId
 * 服务项权限控制
 * Created by yeshijie on 2021/3/5.
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ServicesAuth {
    /**
     * 服务项code
     * @return
     */
    String item();
}

+ 100 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/aop/ServicesAuthAOP.java

@ -0,0 +1,100 @@
package com.yihu.jw.care.aop;
import com.yihu.jw.care.service.sign.ServicePackageService;
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.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.List;
/**
 * Created by yeshijie on 2021/3/5.
 */
@Aspect
@Component
public class ServicesAuthAOP {
    @Autowired
    private ServicePackageService servicePackageService;
    //Controller层切点路径
    @Pointcut("execution(* com.yihu.jw.care.endpoint..*.*(..))")
    public void controllerAspect() {
    }
    public ServicesAuthAOP() {
        //System.out.println("Observer---------------------------------------");
    }
    @Around("controllerAspect() && @annotation(com.yihu.jw.care.aop.ServicesAuth)")
    public Object checkToken(ProceedingJoinPoint point) throws Throwable {
        Object o = null;
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
        try {
            response.setCharacterEncoding("UTF-8");
            MethodSignature signature = (MethodSignature)point.getSignature();
            ServicesAuth annotation = signature.getMethod().getAnnotation(ServicesAuth.class);
            String item = annotation.item();
            String patientId = request.getParameter("patientId");
            List<String> items =servicePackageService.getPatientServiceItems(patientId);
            if(!items.contains(item)){
                PrintWriter writer=response.getWriter();
                writer.write(error(401, "该操作没有权限"));
                writer.flush();
                return o;
            }
        }catch (Exception e){
            //return o;
        }
         o = point.proceed();
        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;
        }
    }
}

+ 53 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/family/PatientFamilyMemberDao.java

@ -0,0 +1,53 @@
package com.yihu.jw.care.dao.family;
import com.yihu.jw.entity.base.patient.BasePatientFamilyMemberDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * @author liuwenbin on 2018/11/27.
 */
public interface PatientFamilyMemberDao extends PagingAndSortingRepository<BasePatientFamilyMemberDO, String>, JpaSpecificationExecutor<BasePatientFamilyMemberDO> {
    @Query("select m from BasePatientFamilyMemberDO m where m.del=1 and m.patient=?1")
    List<BasePatientFamilyMemberDO> getByPatient(String patient);
    @Query("select m from BasePatientFamilyMemberDO m where m.del=1 and m.patient=?1 and m.familyRelation=?2")
    List<BasePatientFamilyMemberDO> getByPatientAndFamilyRelation(String patient, Integer familyRelation);
    @Query("select m from BasePatientFamilyMemberDO m where m.del=1 and m.familyMember=?1")
    List<BasePatientFamilyMemberDO> getByFamilyMember(String familyMember);
    @Query("select m from BasePatientFamilyMemberDO m where m.del=1 and m.familyMember=?1 and m.familyRelation=?2")
    List<BasePatientFamilyMemberDO> getByFamilyMemberAndFamilyRelation(String familyMember, Integer familyRelation);
    @Query("select m from BasePatientFamilyMemberDO m where m.del=1 and m.familyMember=?1 and m.familyRelation in (?2,?3)")
    List<BasePatientFamilyMemberDO> getByFamilyMemberAndFamilyRelation(String familyMember, Integer familyRelation1, Integer familyRelation2);
    @Query("select m from BasePatientFamilyMemberDO m where m.del=1 and m.patient=?1")
    List<BasePatientFamilyMemberDO> getByPatientAndFamilyMember(String patient);
    @Modifying
    @Query("update BasePatientFamilyMemberDO m set m.isAuthorize = ?1 where m.id=?2 ")
    int updateAuthorizeById(Integer isAuthorize, String id);
    @Modifying
    @Query("update BasePatientFamilyMemberDO m set m.del = ?1 where m.id=?2 ")
    int updateDelById(Integer del, String id);
    @Modifying
    @Query("update BasePatientFamilyMemberDO m set m.del = ?1 where m.patient=?2 and m.familyMember=?3 ")
    int updateDelByPatientAndFamilyMember(Integer del, String patient, String familyPatientId);
    BasePatientFamilyMemberDO findByPatientAndFamilyMemberAndDel(String patient, String familyMember, Integer del);
    List<BasePatientFamilyMemberDO> findByPatientAndFamilyRelation(String patient,Integer familyRelation);
    BasePatientFamilyMemberDO findByPatientAndFamilyMember(String patient,String member);
    List<BasePatientFamilyMemberDO> findByFamilyMemberAndIsAuthorize(String familyMember,Integer isAuthorize);
}

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

@ -0,0 +1,42 @@
package com.yihu.jw.care.dao.team;
import com.yihu.jw.entity.base.team.BaseTeamDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import java.util.List;
import java.util.Map;
/**
 * 
 * 团队信息 数据库访问层
 * 
 * @version 
 * <pre>
 * Author	Version		Date		Changes
 * litaohong 	1.0  		2018年08月31日 	Created
 *
 * </pre>
 * @since 1.
 */
public interface BaseTeamDao extends PagingAndSortingRepository<BaseTeamDO, String>, JpaSpecificationExecutor<BaseTeamDO>  {
    @Query("select orgCode as code,orgName as name from BaseTeamDO")
    List<Map<String,Object>> getTeamOrgList();
    @Modifying
    @Query("update BaseTeamDO t SET t.del = '0' where t.id = :teamCode")
    void delete(@Param("teamCode") String teamCode);
    @Query("SELECT t from BaseTeamDO t WHERE t.leaderCode = :leaderCode AND t.del = '1'")
    BaseTeamDO findByLeaderCode(@Param("leaderCode") String leaderCode);
    @Query("SELECT t FROM BaseTeamMemberDO m, BaseTeamDO t WHERE m.doctorCode = :doctorCode " +
            "AND t.id = m.teamCode AND t.del = '1' AND m.del = '1'")
    List<BaseTeamDO> findDoctorTeams(@Param(value = "doctorCode") String doctorCode);
    @Query("from BaseTeamDO t WHERE t.del = '1'  AND t.orgCode = ?1 ")
    List<BaseTeamDO> findByOrgCode(String orgCode);
 }

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

@ -0,0 +1,54 @@
package com.yihu.jw.care.dao.team;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.team.BaseTeamMemberDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
 * 
 * 团队成员 数据库访问层
 * 
 * @version 
 * <pre>
 * Author	Version		Date		Changes
 * litaohong 	1.0  		2018年08月31日 	Created
 *
 * </pre>
 * @since 1.
 */
public interface BaseTeamMemberDao extends PagingAndSortingRepository<BaseTeamMemberDO, String>, JpaSpecificationExecutor<BaseTeamMemberDO>  {
    @Query("select doc.name as name,doc.idcard as idcard ,doc.id as doctorCode from BaseDoctorDO doc where doc.id in (select team.doctorCode from BaseTeamMemberDO team where team.teamCode = ?1)")
    List<Map<String,Object>> getTeamMemberList(String teamCode);
    @Query("select id from BaseTeamMemberDO where teamCode = ?1")
    Set<Object> findIdListByTeamCode(String teamCode);
    List<BaseTeamMemberDO> findByTeamCode(String teamCode);
    @Query("SELECT case when count(A) > 0 then true else false END FROM BaseTeamMemberDO A WHERE A.teamCode = :teamCode " +
            "AND A.doctorCode = :doctorCode AND A.del = '1'")
    Boolean isMemberExist(@Param(value = "teamCode") String teamCode, @Param(value = "doctorCode") String doctorCode);
    @Modifying
    @Query("update BaseTeamMemberDO t SET t.del = '0' where t.teamCode = :teamCode")
    void deleteByTeamCode(@Param("teamCode") String teamCode);
    BaseTeamMemberDO findByTeamCodeAndDoctorCode(String teamCode, String doctorCode);
    @Modifying
    @Query("update BaseTeamMemberDO t SET t.del = '0' where t.id = :id")
    void deleteById(@Param("id") String id);
    @Query("SELECT d FROM BaseTeamMemberDO m, BaseTeamDO t, BaseDoctorDO d WHERE t.id = :teamCode AND t.id = m.teamCode " +
            "AND m.doctorCode = d.id AND t.del = '1' AND m.del = '1' ")
    List<BaseDoctorDO> findAllMembers(@Param(value = "teamCode") String teamCode);
}

+ 64 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doctor/DoctorEndpoint.java

@ -0,0 +1,64 @@
package com.yihu.jw.care.endpoint.doctor;
import com.yihu.jw.care.service.doctor.CareDoctorService;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
 * Created by yeshijie on 2021/3/4.
 */
@RestController
@RequestMapping("doctor" )
@Api(tags = "医生信息", description = "医生信息")
public class DoctorEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private BaseDoctorDao doctorDao;
    @Autowired
    private CareDoctorService doctorService;
    @GetMapping(value = "doctorPage")
    @ApiOperation(value = "获取医生记录分页")
    public PageEnvelop<List<Map<String,Object>>> doctorPage (
            @ApiParam(name = "name", value = "医生姓名", required = false)
            @RequestParam(value = "name",required = false) String name,
            @ApiParam(name = "orgCode", value = "机构code", required = false)
            @RequestParam(value = "orgCode",required = false) String orgCode,
            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
            @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) throws Exception {
        try{
            return doctorService.doctorPage(name, orgCode, page, size);
        }catch (Exception e){
            e.printStackTrace();
            return PageEnvelop.getError("查询失败");
        }
    }
    @GetMapping(value = "doctorInfo")
    @ApiOperation(value = "获取医生详情")
    public ObjEnvelop doctorInfo (
            @ApiParam(name = "doctorId", value = "医生id", required = true)
            @RequestParam(value = "doctorId",required = true) String doctorId) throws Exception {
        try{
            return ObjEnvelop.getSuccess("查询成功",doctorService.doctorInfo(doctorId));
        }catch (Exception e){
            e.printStackTrace();
            return ObjEnvelop.getError("查询失败");
        }
    }
}

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

@ -0,0 +1,354 @@
package com.yihu.jw.care.endpoint.family;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.dao.family.PatientFamilyMemberDao;
import com.yihu.jw.care.service.family.PatientFamilyMemberService;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.patient.BasePatientFamilyMemberDO;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
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.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
 * Created by yeshijie on 2021/3/3.
 */
@RestController
@RequestMapping(value = "family")
@Api(description = "家庭成员")
public class FamilyMemberEndpoint extends EnvelopRestEndpoint {
    
    @Autowired
    private PatientFamilyMemberDao familyMemberDao;
    @Autowired
    private BasePatientDao patientDao;
    @Autowired
    private PatientFamilyMemberService familyMemberService;
    /**
     * 添加成员
     * @param member   成员code
     * @param captcha  验证码
     * @param relation 关系
     * @return
     */
    @RequestMapping(value = "/member_add", method = RequestMethod.POST)
    @ApiOperation(value = "添加成员")
    public Envelop addFamilyMember(@RequestParam("member") String member,
                                   @RequestParam(value = "captcha", required = false) String captcha,
                                   @RequestParam(value = "password", required = false) String password,
                                   @RequestParam("relation") int relation) {
        try {
            if (StringUtils.isEmpty(member)) {
                return failed("添加成员不能为空",-1);
            }
            if (StringUtils.isEmpty(captcha) && StringUtils.isEmpty(password)) {
                return failed( "验证码或密码不能为空",-1);
            }
            if (relation < 0 || relation > 6) {
                return failed( "家庭关系无效",-1);
            }
            int result = familyMemberService.addMember(getUID(), member, captcha, password, relation);
            if (result == -1) {
                return failed( "居民信息查询失败",-1);
            } else if (result == -2) {
                return failed( "该成员未注册",-1);
            } else if (result == -3) {
                return failed( StringUtils.isNotEmpty(captcha) ? "请输入正确的验证码" : "密码错误",-1);
            } else if (result == -4) {
                return failed( "该家庭成员已存在",-1);
            } else if (result == -5) {
                return failed( "该家庭关系已存在成员",-1);
            } else if (result == -6) {
                return failed( "验证码已过期,请重新获取验证码",-1);
            } else if (result == 0) {
                return failed( "不能添加自己",-1);
            } else {
                return success("添加成功");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return failed( "添加失败",-1);
        }
    }
    /**
     * 更新家庭关系
     *
     * @param member   成员code
     * @param relation 家庭关系
     * @return
     */
    @RequestMapping(value = "/relation_update", method = RequestMethod.POST)
    @ApiOperation(value = "家庭成员关系修改")
    public Envelop modifyFamilyRelation(@RequestParam("member") String member, @RequestParam("relation") int relation) {
        try {
            if (StringUtils.isEmpty(member)) {
                return failed( "添加成员不能为空",-1);
            }
            if (relation < 0 || relation > 6) {
                return failed( "家庭关系无效",-1);
            }
            int result = familyMemberService.modifyFamilyRelation(getUID(), member, relation);
            if (result == -1) {
                return failed( "居民信息查询失败",-1);
            } else if (result == -2) {
                return failed( "该成员未注册",-1);
            } else if (result == -3) {
                return failed( "与该成员的关系不存在",-1);
            } else if(result==-5){
                return failed( "该家庭关系已存在成员",-1);
            } else {
                return success( "更新成功");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return failed( "更新失败",-1);
        }
    }
    /**
     * 删除成员
     *
     * @param member
     * @return
     */
    @RequestMapping(value = "/member_delete", method = RequestMethod.POST)
    @ApiOperation(value = "家庭成员删除")
    public Envelop deleteMember(@RequestParam("member") String member) {
        try {
            if (StringUtils.isEmpty(member)) {
                return failed( "成员不能为空",-1);
            }
            int result = familyMemberService.deleteMember(getUID(), member);
            if (result == -1) {
                return failed( "与该成员的关系不存在",-1);
            } else {
                return success( "删除成功");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return failed( "删除失败",-1);
        }
    }
    @RequestMapping(value = "/member_authorize", method = RequestMethod.POST)
    @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")
                                  @RequestParam(value = "isAuthorize", required = true) Integer isAuthorize){
        try {
            int result = familyMemberService.authorizeMember(getUID(),familyMember,isAuthorize);
            if(result==0){
                return failed( "与该成员的关系不存在",-1);
            }
            return success( "授权成功");
        }catch (Exception e){
            return failed("授权失败",-1);
        }
    }
    /**
     * 家庭成员查询
     * @param patient
     * @param isAgree (任意值已同意(只查询家人关系表),null不同意)
     * @return
     */
    @RequestMapping(value = "/members", method = RequestMethod.GET)
    @ApiOperation(value = "家庭成员查询")
    public ObjEnvelop getPatientFamilyMembers(@RequestParam(required = false) String patient,
                                              @RequestParam(required = false) Integer isAgree) {
        try {
            JSONObject data = new JSONObject();
            JSONArray result = new JSONArray();
            if (StringUtils.isNotEmpty(patient)) {
                result = familyMemberService.getPatientMembers(patient, "", true, getUID(),isAgree);
            } else  {
                result = familyMemberService.getPatientFamilyMembers(getUID(), "",null);
            }
            data.put("normalmembers",result);//家人关系
            return ObjEnvelop.getSuccess( "查询成功", data);
        } catch (Exception e) {
            e.printStackTrace();
            return ObjEnvelop.getError( "查询失败");
        }
    }
    @RequestMapping(value = "/authorize_members", method = RequestMethod.GET)
    @ApiOperation(value = "家庭成员(有授权)查询")
    public ObjEnvelop getAuthorizeFamilyMembers(){
        try {
            JSONArray result = familyMemberService.getAuthorizeMembers(getUID());
            return ObjEnvelop.getSuccess( "查询成功", result);
        } catch (Exception e) {
            e.printStackTrace();
            return ObjEnvelop.getError( "查询失败");
        }
    }
    @RequestMapping(value = "/is_authorize", method = RequestMethod.GET)
    @ApiOperation(value = "是否授权查询")
    public ObjEnvelop isAuthorize(@ApiParam(name = "patient", value = "居民code", defaultValue = "")
                              @RequestParam(value = "patient", required = true) String patient,
                              @ApiParam(name = "familyMember", value = "家人code", defaultValue = "")
                              @RequestParam(value = "familyMember", required = true) String familyMember){
        try {
            BasePatientDO p = patientDao.findById(patient);
            JSONObject json = new JSONObject();
            json.put("id", p.getId());
            json.put("name", p.getName());
            if(patient.equals(familyMember)){
                return ObjEnvelop.getSuccess("自己", json);
            }
            BasePatientFamilyMemberDO member = familyMemberDao.findByPatientAndFamilyMember(patient,familyMember);
            if(member==null){
                return ObjEnvelop.getSuccess("不是家人", json,100);
            }
            if(1==member.getIsAuthorize()){
                return ObjEnvelop.getSuccess( "查询成功", json);
            }
            return ObjEnvelop.getSuccess("未授权", json,100);
        } catch (Exception e) {
            e.printStackTrace();
            return ObjEnvelop.getError( "查询失败");
        }
    }
    /**
     * 根据身份证号查询居民是否注册
     *
     * @param idcard 身份证号
     * @return
     */
    @RequestMapping(value = "/is_register", method = RequestMethod.GET)
    @ApiOperation(value = "家庭成员查询")
    public ObjEnvelop isRegister(@RequestParam("idcard") String idcard) {
        try {
            if (StringUtils.isEmpty(idcard)) {
                return ObjEnvelop.getError( "身份证号不能为空");
            }
            JSONObject result = familyMemberService.isRegister(idcard, getUID());
            return ObjEnvelop.getSuccess( "查询成功",  result);
        } catch (Exception e) {
            return ObjEnvelop.getError( "查询失败");
        }
    }
    /**
     * 验证家庭成员微信及手机绑定情况
     * @param memberCode
     * @return
     */
    @RequestMapping(value = "/check_member", method = RequestMethod.GET)
    @ApiOperation(value = "验证家庭成员微信及手机绑定情况")
    public ObjEnvelop checkFamilyMember(@RequestParam("memberCode")String memberCode){
        try {
            JSONObject result = familyMemberService.checkFamilyMember(memberCode);
            return ObjEnvelop.getSuccess( "验证成功",  result);
        }catch (Exception e){
            return ObjEnvelop.getError( "验证失败");
        }
    }
    @RequestMapping(value = "/addMemberByPw", method = RequestMethod.POST)
    @ApiOperation(value = "通过登录验证新增家庭成员")
    public Envelop addMemberByPw(@RequestParam("member") String member,
                                @RequestParam("password")String password,
                                @RequestParam("relation")int relation){
        try {
            if (StringUtils.isEmpty(member)) {
                return failed( "添加成员不能为空",-1);
            }
            if (relation < 0 || relation > 6) {
                return failed( "家庭关系无效",-1);
            }
            int result = familyMemberService.addMemberByPw(getUID(),member,password,relation);
            if(result==0){
                return failed( "不能添加自己",-1);
            }else if(result==-1){
                return failed( "居民信息查询失败",-1);
            }else if(result==-2){
                return failed( "该成员未注册",-1);
            }else if(result==-3){
                return failed( "密码错误",-1);
            }else if (result == -4) {
                return failed( "该家庭成员已存在",-1);
            }else if(result==-5){
                return failed( "该家庭关系已存在成员",-1);
            } else {
                return success( "添加成功");
            }
        } catch (Exception e) {
            return failed( "添加失败",-1);
        }
    }
    @RequestMapping(value = "/addMemberByCaptcha", method = RequestMethod.POST)
    @ApiOperation(value = "通过手机验证码新增家庭成员")
    public Envelop addMemberByCaptcha(@RequestParam("member") String member,
                                     @RequestParam("captcha") String captcha,
                                     @RequestParam("relation") int relation){
        try {
            if (StringUtils.isEmpty(member)) {
                return failed( "添加成员不能为空",-1);
            }
            if (StringUtils.isEmpty(captcha)) {
                return failed( "验证码不能为空",-1);
            }
            if (relation < 0 || relation > 6) {
                return failed( "家庭关系无效",-1);
            }
            int result = familyMemberService.addMemberByCaptcha(getUID(),member,captcha,relation);
            if(result==0){
                return failed( "不能添加自己",-1);
            }else if(result==-1){
                return failed( "居民信息查询失败",-1);
            }else if(result==-2){
                return failed( "该成员未注册",-1);
            }else if(result==-3){
                return failed( "验证码错误",-1);
            }else if (result == -4) {
                return failed( "该家庭成员已存在",-1);
            }else if(result==-5){
                return failed( "该家庭关系已存在成员",-1);
            }else if(result==-6){
                return failed( "验证码已过期,请重新获取验证码",-1);
            } else {
                return success( "添加成功");
            }
        } catch (Exception e) {
            return failed( "添加失败",-1);
        }
    }
}

+ 40 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/org/OrgEndpoint.java

@ -0,0 +1,40 @@
package com.yihu.jw.care.endpoint.org;
import com.yihu.jw.care.service.org.BaseOrgService;
import com.yihu.jw.restmodel.web.ListEnvelop;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
 * Created by yeshijie on 2021/3/3.
 */
@RestController
@RequestMapping("org" )
@Api(tags = "机构信息", description = "机构信息")
public class OrgEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private BaseOrgService orgService;
    @RequestMapping(value = "/findOrgList", method = RequestMethod.GET)
    @ApiOperation(value = "获取机构成员")
    public ListEnvelop findOrgList(@ApiParam(name = "type", value = "机构类型1. 等级医院2. 社区医院3.  养老机构")
                                      @RequestParam(value = "type", required = false) String type,
                                      @ApiParam(name = "name", value = "医生姓名")
                                      @RequestParam(value = "name", required = false) String name) {
        try {
            return ListEnvelop.getSuccess("获取成功",orgService.findOrgList(type,name));
        } catch (Exception e) {
            e.printStackTrace();
            return ListEnvelop.getError("获取失败");
        }
    }
}

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

@ -1,7 +1,11 @@
package com.yihu.jw.care.endpoint.patient;
import com.yihu.jw.patient.service.BasePatientService;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.aop.ServicesAuth;
import com.yihu.jw.care.aop.ServicesAuthAOP;
import com.yihu.jw.care.service.patient.CarePatientService;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.base.BaseRequestMapping;
import io.swagger.annotations.Api;
@ -13,6 +17,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
 * Created by yeshijie on 2021/2/24.
 */
@ -22,8 +29,56 @@ import org.springframework.web.bind.annotation.RestController;
public class PatientEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private BasePatientService basePatientService;
    private CarePatientService patientService;
    @Autowired
    ServicesAuthAOP servicesAuthAOP;
    @GetMapping(value = "testServicesAuth1")
    @ApiOperation(value = "测试居民服务项权限操作")
    @ServicesAuth(item = "auth")
    public Envelop testServicesAuth1(
            @ApiParam(name = "patientId", value = "居民id")
            @RequestParam(value = "patientId", required = true) String patientId) {
        try{
            return success("获取成功");
        }catch (Exception e){
            e.printStackTrace();
            return failed("获取失败",-1);
        }
    }
    @GetMapping(value = "testServicesAuth2")
    @ApiOperation(value = "测试居民服务项权限操作")
    @ServicesAuth(item = "healthEducation")
    public Envelop testServicesAuth2(
            @ApiParam(name = "patientId", value = "居民id")
            @RequestParam(value = "patientId", required = true) String patientId) {
        try{
            return success("获取成功");
        }catch (Exception e){
            e.printStackTrace();
            return failed("获取失败",-1);
        }
    }
    @GetMapping(value = "myPatientPage")
    @ApiOperation(value = "通讯录-我的居民分页")
    public PageEnvelop<List<Map<String,Object>>> myPatientPage (
            @ApiParam(name = "name", value = "居民姓名", required = false)
            @RequestParam(value = "name",required = false) String name,
            @ApiParam(name = "doctorId", value = "医生code", required = true)
            @RequestParam(value = "doctorId",required = true) String doctorId,
            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
            @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) throws Exception {
        try{
            return patientService.myPatientPage(name, doctorId, page, size);
        }catch (Exception e){
            e.printStackTrace();
            return PageEnvelop.getError("查询失败");
        }
    }
    @GetMapping(value = BaseRequestMapping.BasePatient.getPatientById)
    @ApiOperation(value = "获取居民信息")
@ -31,12 +86,11 @@ public class PatientEndpoint extends EnvelopRestEndpoint {
            @ApiParam(name = "id", value = "居民id")
            @RequestParam(value = "id", required = true) String id) {
        try{
            String result = basePatientService.findPatientById(id);
            return success(result);
            JSONObject result = patientService.findPatientById(id);
            return success("获取成功",result);
        }catch (Exception e){
            e.printStackTrace();
            return failed("获取失败");
            return failed("获取失败",-1);
        }
    }
}

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

@ -1,12 +1,14 @@
package com.yihu.jw.care.endpoint.sign;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.aop.ObserverRequired;
import com.yihu.jw.care.dao.sign.ArchiveDao;
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.patient.BasePatientDO;
import com.yihu.jw.entity.base.servicePackage.ServicePackageSignRecordDO;
import com.yihu.jw.entity.care.archive.ArchiveDO;
import com.yihu.jw.entity.care.sign.CapacityAssessmentRecordDO;
import com.yihu.jw.patient.dao.BasePatientDao;
@ -65,14 +67,14 @@ public class SignEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "servicePackageSign" )
    @GetMapping(value = "getSignTopNum")
    @ApiOperation(value = "签约管理-获取签约/未签约总数")
    public ObjEnvelop servicePackageSign(
            @ApiParam(name = "doctorId", value = "医生id", required = true)
            @RequestParam String doctoId) {
            @RequestParam String doctorId) {
        try{
            int signTotal = servicePackageService.getSignTotal(doctoId);
            int unSignTotal = archiveService.getUnSignTotal(doctoId);
            int signTotal = servicePackageService.getSignTotal(doctorId);
            int unSignTotal = archiveService.getUnSignTotal(doctorId);
            JSONObject json = new JSONObject();
            json.put("signTotal",signTotal);
            json.put("unSignTotal",unSignTotal);
@ -83,15 +85,30 @@ public class SignEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "findSignById")
    @ApiOperation(value = "根据签约记录获取签约详情")
    public ObjEnvelop findSignById(
            @ApiParam(name = "id", value = "签约记录id", required = true)
            @RequestParam String id) {
        try{
            return ObjEnvelop.getSuccess("查询成功",servicePackageService.findSignById(id));
        }catch (Exception e){
            e.printStackTrace();
            return ObjEnvelop.getError("查询失败");
        }
    }
    @PostMapping(value = "servicePackageSign" )
    @ApiOperation(value = "分配服务包-签约")
    @ObserverRequired
    public Envelop servicePackageSign(
            @ApiParam(name = "jsonData", value = "Json数据", required = true)
            @RequestParam String jsonData,
            @ApiParam(name = "doctorId", value = "医生id", required = true)
            @RequestParam String doctoId) {
            @RequestParam String doctorId) {
        try{
            servicePackageService.servicePackageSign(jsonData,doctoId);
            ServicePackageSignRecordDO signRecordDO = servicePackageService.servicePackageSign(jsonData,doctorId);
            servicePackageService.setPatientServiceItems(signRecordDO.getPatient());
            return success("分配成功");
        }catch (Exception e){
            e.printStackTrace();
@ -171,13 +188,14 @@ public class SignEndpoint extends EnvelopRestEndpoint {
    @PostMapping(value = "capacityAssessment" )
    @ApiOperation(value = "生成能力评估报告")
    @ObserverRequired
    public Envelop capacityAssessment(
            @ApiParam(name = "jsonData", value = "Json数据", required = true)
            @RequestParam String jsonData,
            @ApiParam(name = "doctorId", value = "医生id", required = true)
            @RequestParam String doctoId) {
            @RequestParam String doctorId) {
        try{
            capacityAssessmentRecordService.capacityAssessment(jsonData,doctoId);
            capacityAssessmentRecordService.capacityAssessment(jsonData,doctorId);
            return success("生成成功");
        }catch (Exception e){
            e.printStackTrace();
@ -187,6 +205,7 @@ public class SignEndpoint extends EnvelopRestEndpoint {
    @PostMapping(value = "confirmAssessment" )
    @ApiOperation(value = "确认评估结果")
    @ObserverRequired
    public Envelop confirmAssessment(
            @ApiParam(name = "signUrl", value = "签字结果图片url", required = true)
            @RequestParam String signUrl,
@ -205,6 +224,7 @@ public class SignEndpoint extends EnvelopRestEndpoint {
    @PostMapping(value = "createArchive" )
    @ApiOperation(value = "建档")
    @ObserverRequired
    public Envelop createArchive(
            @ApiParam(name = "jsonData", value = "Json数据", required = true)
            @RequestParam String jsonData,
@ -233,6 +253,7 @@ public class SignEndpoint extends EnvelopRestEndpoint {
    @PostMapping(value = "sysArchive" )
    @ApiOperation(value = "同步档案")
    @ObserverRequired
    public Envelop sysArchive(
            @ApiParam(name = "idcard", value = "居民身份证", required = true)
            @RequestParam String idcard,

+ 232 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/team/TeamEndpoint.java

@ -0,0 +1,232 @@
package com.yihu.jw.care.endpoint.team;
import com.yihu.jw.care.aop.ObserverRequired;
import com.yihu.jw.care.dao.team.BaseTeamDao;
import com.yihu.jw.care.service.team.BaseTeamService;
import com.yihu.jw.entity.base.team.BaseTeamDO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
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.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by yeshijie on 2021/2/24.
 */
@RestController
@RequestMapping("team" )
@Api(tags = "医生团队信息", description = "医生团队信息")
public class TeamEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private BaseTeamService teamService;
    @Autowired
    private BaseTeamDao teamDao;
    @RequestMapping(method = RequestMethod.POST)
    @ApiOperation(value = "创建团队")
    @ObserverRequired
    public ObjEnvelop createTeam(@RequestParam("teamName") String teamName,
                                 @RequestParam("leaderCode") String leaderCode,
                                 @RequestParam("orgCode") String orgCode,
                                 @RequestParam("orgName") String orgName) {
        try {
            BaseTeamDO teamDO = teamService.createTeam(teamName, leaderCode, orgCode, orgName);
            return ObjEnvelop.getSuccess("创建成功",teamDO);
        } catch (Exception e) {
            e.printStackTrace();
            return ObjEnvelop.getError("创建失败");
        }
    }
    @RequestMapping(value = "/remove", method = RequestMethod.POST)
    @ApiOperation(value = "删除团队信息")
    @ObserverRequired
    public Envelop deleteTeam(@RequestParam("teamCode") String teamCode) {
        try {
            teamService.deleteTeam(teamCode);
            return success("删除成功");
        } catch (Exception e) {
            e.printStackTrace();
            return failed("删除失败", -1);
        }
    }
    @RequestMapping(value = "/{teamCode}/name", method = RequestMethod.POST)
    @ApiOperation(value = "更新团队名称")
    @ObserverRequired
    public ObjEnvelop updateTeamName(@PathVariable("teamCode") String teamCode,
                                 @RequestParam("teamName") String teamName) {
        try {
            BaseTeamDO team = teamService.updateTeamName(teamCode, teamName);
            return ObjEnvelop.getSuccess("更新成功",team);
        } catch (Exception e) {
            e.printStackTrace();
            return ObjEnvelop.getError("更新失败");
        }
    }
    @RequestMapping(value = "/{teamCode}/leader", method = RequestMethod.POST)
    @ApiOperation(value = "更新团队领导")
    @ObserverRequired
    public ObjEnvelop updateTeamLeader(@PathVariable("teamCode") String teamCode,
                                   @RequestParam("doctorCode") String doctorCode) {
        try {
            BaseTeamDO team = teamService.updateTeamLeader(teamCode, doctorCode);
            return ObjEnvelop.getSuccess("更新成功",team);
        } catch (Exception e) {
            e.printStackTrace();
            return ObjEnvelop.getError("更新失败");
        }
    }
    @RequestMapping(value = "/{teamCode}", method = RequestMethod.GET)
    @ApiOperation(value = "团队信息")
    public ObjEnvelop getTeam(@PathVariable("teamCode") String teamCode) {
        try {
            BaseTeamDO team = teamDao.findOne(teamCode);
            return ObjEnvelop.getSuccess("获取成功",team);
        } catch (Exception e) {
            e.printStackTrace();
            return ObjEnvelop.getError("获取失败");
        }
    }
    @RequestMapping(value = "/{teamCode}/members", method = RequestMethod.POST)
    @ApiOperation(value = "添加团队成员,批量添加使用逗号分隔列表")
    @ObserverRequired
    public Envelop addMember(@PathVariable("teamCode") String teamCode,
                            @RequestParam("doctorCodeList") String doctorCodeList) {
        try {
            String doctorCodes[] = doctorCodeList.split(",");
            BaseTeamDO team = teamDao.findOne(teamCode);
            for (String doctorCode : doctorCodes) {
                teamService.addMember(team, doctorCode);
            }
            return success("添加成功");
        } catch (Exception e) {
            e.printStackTrace();
            return failed("删除失败", -1);
        }
    }
    @RequestMapping(value = "/{teamCode}/members", method = RequestMethod.GET)
    @ApiOperation(value = "获取团队成员")
    public ListEnvelop getTeamMembers(@PathVariable("teamCode") String teamCode,
                                      @ApiParam(name = "name", value = "医生姓名")
                                 @RequestParam(value = "name", required = false) String name) {
        try {
            return ListEnvelop.getSuccess("获取成功",teamService.findMembers(teamCode,name));
        } catch (Exception e) {
            e.printStackTrace();
            return ListEnvelop.getError("获取失败");
        }
    }
    @RequestMapping(value = "/{teamCode}/members/{doctorCode}/remove", method = RequestMethod.POST)
    @ApiOperation(value = "移除成员")
    @ObserverRequired
    public Envelop removeMember(@PathVariable("teamCode") String teamCode,
                               @PathVariable("doctorCode") String doctorCode) {
        try {
            teamService.removeMember(teamCode, doctorCode);
            return success("移除成功");
        } catch (Exception e) {
            e.printStackTrace();
            return failed("移除失败", -1);
        }
    }
    @RequestMapping(value = "/team/{doctorCode}/team", method = RequestMethod.GET)
    @ApiOperation(value = "获取团队长团队")
    public ObjEnvelop getLeaderTeam(@PathVariable("doctorCode") String doctorCode) {
        try {
            BaseTeamDO team = teamDao.findByLeaderCode(doctorCode);
            if (team == null) {
                return ObjEnvelop.getError( "没有找到数据!",-2);
            }
            return ObjEnvelop.getSuccess("获取成功",team);
        } catch (Exception e) {
            e.printStackTrace();
            return ObjEnvelop.getError("获取失败");
        }
    }
    /**
     * 当前医生为团队长信息排在最前,成员在后
     * @param doctorCode
     * @return
     */
    @RequestMapping(value = "/team/{doctorCode}/teams", method = RequestMethod.GET)
    @ApiOperation(value = "获取医生团队列表")
    public ListEnvelop getDoctorTeams(@PathVariable("doctorCode") String doctorCode) {
        try {
            ArrayList teams = new ArrayList();
            List<BaseTeamDO> teamList = teamDao.findDoctorTeams(doctorCode);
            BaseTeamDO team = teamDao.findByLeaderCode(doctorCode);
            String teamCode = "";
            if (team != null){
                teams.add(team);
                teamCode = team.getId();
            }
            for (BaseTeamDO list : teamList){
                if (teamCode!=list.getId()){
                    teams.add(list);
                }
            }
            return ListEnvelop.getSuccess("获取成功",teams);
        } catch (Exception e) {
            e.printStackTrace();
            return ListEnvelop.getError("获取失败");
        }
    }
    @RequestMapping(value = "/teams/info", method = RequestMethod.GET)
    @ApiOperation(value = "查询团队信息")
    public ObjEnvelop getTeamInfo( @RequestParam(value = "teamCode", defaultValue = "0", required = true) String teamCode){
        try{
            JSONObject result =  teamService.getTeamInfo(teamCode);
            return ObjEnvelop.getSuccess("查询成功",result);
        }catch (Exception e){
            e.printStackTrace();
            return ObjEnvelop.getError("查询失败");
        }
    }
    @RequestMapping(value = "/teams/{hospital}", method = RequestMethod.GET)
    @ApiOperation(value = "查询机构下的团队(翻译名称)")
    public ListEnvelop getHospitalTeams(@PathVariable  String hospital){
        try{
            List<BaseTeamDO> teams =  teamService.getHospitalTeams(hospital);
            return ListEnvelop.getSuccess("查询成功",teams);
        }catch (Exception e){
            e.printStackTrace();
            return ListEnvelop.getError("获取失败");
        }
    }
    @RequestMapping(value = "/teams/{hospital}/noTranslateAdminTeamLeaderName", method = RequestMethod.GET)
    @ApiOperation(value = "查询机构下的团队(不翻译名称)")
    public ListEnvelop getHospitalTeamsNoTranslateAdminTeamLeaderName(@PathVariable  String hospital){
        try{
            List<BaseTeamDO> teams =  teamDao.findByOrgCode(hospital);
            return ListEnvelop.getSuccess("查询成功",teams);
        }catch (Exception e){
            e.printStackTrace();
            return ListEnvelop.getError("获取失败");
        }
    }
}

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

@ -0,0 +1,87 @@
package com.yihu.jw.care.service.doctor;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.doctor.dao.DoctorSpecialDiseaseDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.hospital.dict.WlyyHospitalSysDictDao;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.utils.StringUtil;
import com.yihu.mysql.query.BaseJpaService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
 * Created by yeshijie on 2021/3/3.
 */
@Service
public class CareDoctorService extends BaseJpaService<BaseDoctorDO, BaseDoctorDao> {
    private static Logger logger = LoggerFactory.getLogger(CareDoctorService.class);
    @Autowired
    private BaseDoctorDao baseDoctorDao;
    @Autowired
    private DoctorSpecialDiseaseDao specialDiseaseDao;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private WlyyHospitalSysDictDao wlyyHospitalSysDictDao;
    /**
     * 获取医生详情
     * @return
     */
    public Map<String,Object> doctorInfo(String doctorId){
        String sql = "SELECT d.id,d.name,d.photo,d.introduce,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 += "from base_doctor d left join base_doctor_hospital h on d.id = h.doctor_code  and h.del = 1" +
                "WHERE d.id = '"+doctorId+"' ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> map :list){
            String idcard = map.get("idcard").toString();
            map.put("age", IdCardUtil.getAgeForIdcard(idcard));
        }
        return list.get(0);
    }
    /**
     * 获取医生记录分页
     * @param name
     * @param page
     * @param size
     * @return
     */
    public PageEnvelop<List<Map<String,Object>>> doctorPage(String name,String orgCode,int page, int size){
        String sql = "SELECT d.id,d.name,d.photo,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 countSql = "SELECT count(d.id) ";
        String filters = "from base_doctor d,base_doctor_hospital h " +
                "WHERE d.id = h.doctor_code and d.del = 1 and h.del = 1 ";
        if(!StringUtil.isEmpty(orgCode)){
            filters += " and h.org_code = '"+orgCode+"' ";
        }
        if(!StringUtil.isEmpty(name)){
            filters += " and d.name like '%"+name+"%' ";
        }
        String orderBy = " ORDER BY d.id DESC " +
                "LIMIT "+ (page - 1) * size + "," + size;
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql+filters+orderBy);
        for (Map<String,Object> map :list){
            String idcard = map.get("idcard").toString();
            map.put("age", IdCardUtil.getAgeForIdcard(idcard));
        }
        Long count = jdbcTemplate.queryForObject(countSql+filters,Long.class);
        return PageEnvelop.getSuccessListWithPage("success",list,page,size,count);
    }
}

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

@ -0,0 +1,799 @@
package com.yihu.jw.care.service.family;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.dao.family.PatientFamilyMemberDao;
import com.yihu.jw.care.dao.sign.ServicePackageSignRecordDao;
import com.yihu.jw.care.service.wechat.WeiXinAccessTokenUtils;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.patient.BasePatientFamilyMemberDO;
import com.yihu.jw.entity.base.servicePackage.ServicePackageSignRecordDO;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.security.MD5;
import com.yihu.jw.util.wechat.wxhttp.HttpUtil;
import com.yihu.mysql.query.BaseJpaService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * @author liuwenbin on 2018/11/27.
 */
@Service
public class PatientFamilyMemberService extends BaseJpaService<BasePatientFamilyMemberDO, PatientFamilyMemberDao> {
    Map<Integer, String> relations = new HashMap<>();
    @Autowired
    private PatientFamilyMemberDao memberDao;
    @Autowired
    private BasePatientDao patientDao;
    @Autowired
    private ServicePackageSignRecordDao signRecordDao;
    @Autowired
    private WeiXinAccessTokenUtils weiXinAccessTokenUtils;
    @PostConstruct
    public void init() {
        relations.put(0, "其他");
        relations.put(1, "父亲");
        relations.put(2, "母亲");
        relations.put(3, "老公");
        relations.put(4, "老婆");
        relations.put(5, "儿子");
        relations.put(6, "女儿");
        relations.put(7, "未知");
        relations.put(8, "免疫关联");
    }
    /**
     * 家庭关系转换
     *
     * @param patient  居民
     * @param relation 关系 1父亲 2母亲 3老公 4老婆 5儿子 6女儿 7其他
     * @return
     */
    public int familyRelationTrans(BasePatientDO patient, int relation) throws Exception {
        int relationTrans = 0;
        switch (relation) {
            case 1:
            case 2:
                if (patient.getSex() == 1) {
                    relationTrans = 5;
                } else if (patient.getSex() == 2) {
                    relationTrans = 6;
                } else {
                    relationTrans = 0;
                }
                if (relationTrans == 0) {
                    if (IdCardUtil.getSexForIdcard(StringUtils.isEmpty(patient.getIdcard()) ? "" : patient.getIdcard()).equals("1")) {
                        relationTrans = 6;
                    } else if (IdCardUtil.getSexForIdcard(StringUtils.isEmpty(patient.getIdcard()) ? "" : patient.getIdcard()).equals("2")) {
                        relationTrans = 5;
                    }
                }
                break;
            case 3:
                relationTrans = 4;
                break;
            case 4:
                relationTrans = 3;
                break;
            case 5:
            case 6:
                if (patient.getSex() == 1) {
                    relationTrans = 1;
                } else if (patient.getSex() == 2) {
                    relationTrans = 2;
                } else {
                    relationTrans = 0;
                }
                if (relationTrans == 0) {
                    if (IdCardUtil.getSexForIdcard(StringUtils.isEmpty(patient.getIdcard()) ? "" : patient.getIdcard()).equals("1")) {
                        relationTrans = 2;
                    } else if (IdCardUtil.getSexForIdcard(StringUtils.isEmpty(patient.getIdcard()) ? "" : patient.getIdcard()).equals("2")) {
                        relationTrans = 1;
                    }
                }
                break;
        }
        return relationTrans;
    }
    /**
     * 添加家庭成员
     *
     * @param patient 患者
     * @param member  成员
     * @param captcha 验证码
     * @param member  成员
     * @return
     */
    public int addMember(String patient, String member, String captcha, String password, int relation) throws Exception {
        if (patient.equals(member)) {
            return 0;
        }
        BasePatientDO p = patientDao.findById(patient);
        BasePatientDO m = patientDao.findById(member);
        if (p == null) {
            return -1;
        }
        // 添加的成员是否注册判断
        if (m == null) {
            return -2;
        }
        //家庭关系为父亲、母亲、老公、老婆时只能有一个
        if (relation > 0 && relation < 5) {
            List<BasePatientFamilyMemberDO> familyMembers = memberDao.findByPatientAndFamilyRelation(patient, relation);
            if (familyMembers != null && familyMembers.size() > 0) {
                return -5;
            }
        }
        // 验证码验证
//        if (StringUtils.isNotEmpty(captcha)) {
//            int checkStatus = smsService.check(m.getMobile(), 10, captcha);
//            if (checkStatus == -2) {
//                return -6;  // 验证码过期
//            } else if (checkStatus == -1) {
//                return -3; // 验证码错误
//            }
//        }
        if (StringUtils.isNotEmpty(password)) {
            String loginPassword = MD5.GetMD5Code(password + m.getSalt());
            if (!loginPassword.equals(m.getPassword())) {
                return -3;
            }
        }
        // 添加自己与对方的关系
        BasePatientFamilyMemberDO fm = memberDao.findByPatientAndFamilyMember(patient, member);
        // 家庭关系已存在时,不重复添加
        if (fm != null) {
            return -4;
        } else {
            fm = new BasePatientFamilyMemberDO();
            fm.setPatient(patient);
            fm.setFamilyMember(member);
        }
        fm.setFamilyRelation(relation);
        fm.setIsAuthorize(0);//默认授权
        // 添加对方与自己的关系
        BasePatientFamilyMemberDO fmt = memberDao.findByPatientAndFamilyMember(member, patient);
        // 不存在则创建
        if (fmt == null) {
            fmt = new BasePatientFamilyMemberDO();
            fmt.setPatient(member);
            fmt.setFamilyMember(patient);
        }
        // 对方与自己的关系转换
        int relationTrans = familyRelationTrans(p, relation);
        fmt.setFamilyRelation(relationTrans);
        fmt.setIsAuthorize(1);//默认授权
        memberDao.save(fm);
        memberDao.save(fmt);
        //设置家人openid 加入undefined 判断
        if (StringUtils.isBlank(m.getOpenid()) && StringUtils.isNotBlank(p.getOpenid()) && !"undefined".equals(p.getOpenid())) {
            m.setOpenid(p.getOpenid());
            if (m.getOpenidTime() == null) {
                m.setOpenidTime(new Date());
            }
            patientDao.save(m);
        } else if (StringUtils.isBlank(p.getOpenid()) && StringUtils.isNotBlank(m.getOpenid()) && !"undefined".equals(m.getOpenid())) {
            p.setOpenid(m.getOpenid());
            if (p.getOpenidTime() == null) {
                p.setOpenidTime(new Date());
            }
            patientDao.save(p);
        }
        return 1;
    }
    /**
     * 修改家庭成员关系
     * @param patient  居民
     * @param member   成员
     * @param relation 关系
     * @return
     */
    public int modifyFamilyRelation(String patient, String member, int relation) throws Exception {
        BasePatientDO p = patientDao.findById(patient);
        BasePatientDO m = patientDao.findById(member);
        if (p == null) {
            return -1;
        }
        // 成员是否注册判断
        if (m == null) {
            return -2;
        }
        // 自己与对方的关系
        BasePatientFamilyMemberDO fm = memberDao.findByPatientAndFamilyMember(patient, member);
        if (fm == null) {
            return -3;
        }
        if (relation > 0 && relation < 5) {
            List<BasePatientFamilyMemberDO> familyMembers = memberDao.findByPatientAndFamilyRelation(patient, relation);
            if (familyMembers != null && familyMembers.size() > 0) {
                return -5;
            }
        }
        fm.setFamilyRelation(relation);
        // 对方与自己的关系
        BasePatientFamilyMemberDO fmt = memberDao.findByPatientAndFamilyMember(member, patient);
        // 不存在则创建
        if (fmt == null) {
            fmt = new BasePatientFamilyMemberDO();
            fmt.setPatient(patient);
            fmt.setFamilyMember(member);
        }
        int relationTrans = familyRelationTrans(p, relation);
        fmt.setFamilyRelation(relationTrans);
        memberDao.save(fm);
        memberDao.save(fmt);
        return 1;
    }
    /**
     * 删除家庭成员
     * @param patient 居民
     * @param member  成员
     * @return
     */
    public int deleteMember(String patient, String member) {
        // 自己与对方的关系
        BasePatientFamilyMemberDO fm = memberDao.findByPatientAndFamilyMember(patient, member);
        if (fm == null) {
            return -1;
        }
        // 对方与自己的关系
        BasePatientFamilyMemberDO fmt = memberDao.findByPatientAndFamilyMember(member, patient);
        memberDao.delete(fm);
        if (fmt != null) {
            memberDao.delete(fmt);
        }
        return 1;
    }
    /**
     * 设置授权关系
     * @param patient
     * @param member
     * @param isAuthorize
     * @return
     * @throws Exception
     */
    public int authorizeMember(String patient, String member, Integer isAuthorize) throws Exception {
        BasePatientFamilyMemberDO fm = memberDao.findByPatientAndFamilyMember(patient, member);
        if (fm == null) {
            return -1;
        }
        fm.setIsAuthorize(isAuthorize);
        memberDao.save(fm);
        return 1;
    }
    /**
     * 获取居民的家庭成员
     *
     * @param patient 居民
     * @return
     */
    public JSONArray getPatientMembers(String patient, String doctorCode, boolean isContain, String current, Integer isAgree) {
        JSONArray resultArray = getPatientFamilyMembers(patient, doctorCode, isAgree);
        if (resultArray == null) {
            resultArray = new JSONArray();
        }
        if (isContain && !patient.equals(current)) {
            BasePatientDO p = patientDao.findById(patient);
            JSONObject obj = new JSONObject();
            List<ServicePackageSignRecordDO> signs = signRecordDao.findByStatusAndPatient(1,patient);
            boolean jtSign = false;
            if(signs.size()>0){
                jtSign = true;
            }
            obj.put("id", p.getId());
            obj.put("name", p.getName());
            obj.put("sex", p.getSex());
            obj.put("birthday", p.getBirthday());
            obj.put("idcard", StringUtils.isEmpty(p.getIdcard()) ? "" : p.getIdcard());
            obj.put("photo", StringUtils.isEmpty(p.getPhoto()) ? "" : p.getPhoto());
            obj.put("mobile", StringUtils.isEmpty(p.getMobile()) ? "" : p.getMobile());
            obj.put("address", StringUtils.isEmpty(p.getAddress()) ? "" : p.getAddress());
            obj.put("familyRelation", "-1");
            obj.put("familyRelationName", "自己");
            obj.put("isAuthorize", 1);//0:未授权,1:已授权
            obj.put("authorizeStatus", 3);//
            if (jtSign) {
                obj.put("signType", 1);
            } else {
                obj.put("signType", 0);
            }
            resultArray.add(obj);
        }
        return resultArray;
    }
    /**
     * 获取居民的家庭成员
     *
     * @param patient 居民
     * @return
     */
    public JSONArray getPatientFamilyMembers(String patient, String doctorCode, Integer isAgree) {
        JSONArray resultArray = new JSONArray();
        String sql = "select * " +
                " from " +
                "    base_patient_family_member t1, " +
                "    base_patient t2 " +
                " where " +
                "    t2.id in (select family_member from base_patient_family_member where patient = ? ) " +
                "    and t1.patient = ? " +
                "    and t1.family_member = t2.id ";
        List<Map<String, Object>> result = jdbcTemplate.queryForList(sql, new Object[]{patient, patient});
        if (result != null && result.size() > 0) {
            for (Map<String, Object> map : result) {
                JSONObject obj = new JSONObject();
                List<ServicePackageSignRecordDO> signs = signRecordDao.findByStatusAndPatient(1,map.get("family_member").toString());
                boolean jtSign = false;
                int status = 0;
                if(signs.size()>0){
                    jtSign = true;
                    status = 1;
                }
                Integer isAuthorize = (Integer) map.get("is_authorize");
                obj.put("id", map.get("id"));
                obj.put("name", map.get("name"));
                obj.put("sex", map.get("sex"));
                obj.put("isAuthorize", isAuthorize);//0:未授权,1:已授权
                obj.put("birthday", map.get("birthday"));
                obj.put("idcard", StringUtils.isEmpty(String.valueOf(map.get("idcard"))) ? "" : map.get("idcard").toString());
                obj.put("photo", map.get("photo"));
                obj.put("mobile", map.get("mobile"));
                obj.put("address", StringUtils.isEmpty(String.valueOf(map.get("address"))) ? "" : map.get("address"));
                obj.put("familyRelation", map.get("family_relation"));
                obj.put("familyRelationName", relations.get(map.get("family_relation")));
                if (!StringUtils.isEmpty(doctorCode)) {
                    obj.put("relaholder", relations.get(map.get("family_relation")));
                    obj.put("addressCode", "");
                    obj.put("addressName", StringUtils.isEmpty(String.valueOf(map.get("address"))) ? "" : map.get("address"));
                    obj.put("status", status);
                    obj.put("source", 1);
                    if (isAuthorize == 1) {
                        BasePatientFamilyMemberDO familyMember = memberDao.findByPatientAndFamilyMember(String.valueOf(map.get("family_member")), patient);
                        if (familyMember.getIsAuthorize() == 1) {
                            obj.put("authorizeStatus", 1);//相互授权
                        } else {
                            obj.put("authorizeStatus", 2);//居民单方向向家人授权
                        }
                    } else {
                        obj.put("authorizeStatus", 3);//居民被家人授权
                    }
                }
                if (jtSign) {
                    obj.put("signType", 1);
                } else {
                    obj.put("signType", 0);
                }
                obj.put("state", "1");//0 :未处理;1:已同意;2:已拒绝
                obj.put("id", map.get("id"));
                resultArray.add(obj);
            }
        }
        return resultArray;
    }
    /**
     * 获取有授权的家庭成员
     *
     * @param patient
     * @return
     */
    public JSONArray getAuthorizeMembers(String patient) throws Exception {
        JSONArray resultArray = new JSONArray();
        resultArray.add(getPatient(patient));
        List<BasePatientFamilyMemberDO> list = memberDao.findByFamilyMemberAndIsAuthorize(patient, 1);
        if (list != null && list.size() > 0) {
            JSONArray tem = new JSONArray();
            for (BasePatientFamilyMemberDO member : list) {
                JSONObject obj = new JSONObject();
                BasePatientDO p = patientDao.findById(member.getPatient());
                if (p == null) {
                    throw new Exception("成员为空!");
                }
                List<ServicePackageSignRecordDO> signs = signRecordDao.findByStatusAndPatient(1,patient);
                boolean jtSign = false;
                if(signs.size()>0){
                    jtSign = true;
                }
                Integer relation = familyRelationTrans(p, member.getFamilyRelation());
                if (signs.size() > 0){
                    obj.put("signCode",signs.get(0).getId());
                }else {
                    obj.put("signCode","");
                }
                obj.put("id", p.getId());
                obj.put("name", p.getName());
                obj.put("sex", p.getSex());
                obj.put("isAuthorize", member.getIsAuthorize());//0:未授权,1:已授权
                obj.put("birthday", p.getBirthday());
                String idCard = StringUtils.isEmpty(p.getIdcard()) ? "" : p.getIdcard();
                obj.put("idcard", IdCardUtil.getIdcardEncode(idCard));
                obj.put("idcardAll", idCard);
                obj.put("photo", p.getPhoto());
                obj.put("mobile", p.getMobile());
                obj.put("age", IdCardUtil.getAgeByIdcardOrBirthday(p.getIdcard(),p.getBirthday()));
                obj.put("ssc", p.getSsc());
                obj.put("familyRelation", relation);
                obj.put("familyRelationName", relations.get(relation));
                obj.put("address", p.getAddress());
                obj.put("openid", p.getOpenid());
                if (jtSign) {
                    obj.put("signType", 1);
                } else {
                    obj.put("signType", 0);
                }
                if (member.getIsAuthorize() == 0) {
                    tem.add(obj);
                } else {
                    resultArray.add(obj);
                }
            }
            if (tem.size() > 0) {
                for (int i = 0; i < tem.size(); i++) {
                    resultArray.add(tem.get(i));
                }
            }
        }
        return resultArray;
    }
    /**
     * 判断成员是否注册
     *
     * @param idcard 身份证号
     * @return
     */
    public JSONObject isRegister(String idcard, String patient) {
        JSONObject result = new JSONObject();
        BasePatientDO p = patientDao.findByIdcard(idcard);
        if (p == null) {
            result.put("isRegister", 0);
        } else {
            if (patient.equals(p.getId())) {
                result.put("isRegister", -1); //不能添加自己
                return result;
            }
            result.put("isRegister", 1);
            result.put("mobile", StringUtils.isEmpty(p.getMobile()) ? "" : p.getMobile());
            result.put("name", StringUtils.isEmpty(p.getName()) ? "" : p.getName());
            result.put("id",  p.getId());
            result.put("photo", StringUtils.isEmpty(p.getPhoto()) ? "" : p.getPhoto());
            result.put("sex", p.getSex());
        }
        return result;
    }
    public JSONObject getPatient(String patient) {
        BasePatientDO p = patientDao.findById(patient);
        JSONObject obj = new JSONObject();
        List<ServicePackageSignRecordDO> signs = signRecordDao.findByStatusAndPatient(1,patient);
        boolean jtSign = false;
        if(signs.size()>0){
            jtSign = true;
        }
        obj.put("id", p.getId());
        obj.put("name", p.getName());
        obj.put("sex", p.getSex());
        obj.put("birthday", p.getBirthday());
        obj.put("isAuthorize", 1);
        String idCard = StringUtils.isEmpty(p.getIdcard()) ? "" : p.getIdcard();
        obj.put("idcard", IdCardUtil.getIdcardEncode(idCard));
        obj.put("idcardAll", idCard);
        obj.put("age", IdCardUtil.getAgeByIdcardOrBirthday(p.getIdcard(),p.getBirthday()));
        obj.put("ssc", p.getSsc());
        obj.put("photo", StringUtils.isEmpty(p.getPhoto()) ? "" : p.getPhoto());
        obj.put("mobile", StringUtils.isEmpty(p.getMobile()) ? "" : p.getMobile());
        obj.put("address", StringUtils.isEmpty(p.getAddress()) ? "" : p.getAddress());
        obj.put("familyRelation", -1);
        obj.put("familyRelationName", "自己");
        obj.put("isAuthorize", 1);//0:未授权,1:已授权
        obj.put("openid", p.getOpenid());
        if (jtSign) {
            obj.put("signType", 1);
        }else {
            obj.put("signType", 0);
        }
        return obj;
    }
    /**
     * 验证添加的家庭成员
     *
     * @param menber 预绑定成员
     * @return 0未绑定微信,1仅绑定微信,2仅绑定手机,3手机微信都绑定
     */
    public JSONObject checkFamilyMember(String menber) throws Exception {
        JSONObject r = new JSONObject();
        //未绑定微信,未绑定手机
        int result = 0;
        //1.判断微信过滤
        //判断是否绑定微信,如果版绑定了微信,将状态改变为 1
        BasePatientDO p = patientDao.findById(menber);
        if (StringUtils.isNotBlank(p.getOpenid())) {
            String sus = getIsSus(p.getOpenid());
            if (StringUtils.isNotBlank(sus)) {
                if ("1".equals(sus)) {
                    result = 1;
                }
            }
        }
        //2.判断手机过滤
        //判断是否绑定了手机
        if (StringUtils.isNoneBlank(p.getMobile()) && isMobileNO(p.getMobile())) {
            //如果用户绑定了微信,将状态更改为4
            if (result == 1) {
                result = 3;
                //如果用户未绑定微信,将状态更改为2
            } else if (result == 0) {
                result = 2;
            }
        }
        //返回过滤后的状态
        r.put("state", result);
        if (result == 0) {
            r.put("mes", "未绑定微信和手机");
        } else if (result == 1) {
            r.put("mes", "仅绑定微信");
        } else if (result == 2) {
            r.put("mes", "仅绑定手机");
        } else if (result == 3) {
            r.put("mes", "手机和微信皆绑定");
        }
        return r;
    }
    /**
     * 通过用户名密码添加
     *
     * @param patient
     * @param member
     * @param password
     * @param relation
     * @return
     * @throws Exception
     */
    @Transactional
    public int addMemberByPw(String patient, String member, String password, int relation) throws Exception {
        if (patient.equals(member)) {
            return 0;
        }
        BasePatientDO p = patientDao.findById(patient);
        BasePatientDO m = patientDao.findById(member);
        if (p == null) {
            return -1;
        }
        // 添加的成员是否注册判断
        if (m == null) {
            return -2;
        }
        if (StringUtils.isNotEmpty(password)) {
            String loginPassword = MD5.GetMD5Code(password + m.getSalt());
            if (!loginPassword.equals(m.getPassword())) {
                return -3;
            }
        }
        return addMemberFamily(p, m, patient, member, relation);
    }
    @Transactional
    public int addMemberFamily(BasePatientDO p, BasePatientDO m, String patient, String member, int relation) throws Exception {
        if (relation > 0 && relation < 5) {
            List<BasePatientFamilyMemberDO> familyMembers = memberDao.findByPatientAndFamilyRelation(patient, relation);
            if (familyMembers != null && familyMembers.size() > 0) {
                return -5;
            }
        }
        // 添加自己与对方的关系
        BasePatientFamilyMemberDO fm = memberDao.findByPatientAndFamilyMember(patient, member);
        // 家庭关系已存在时,不重复添加
        if (fm != null) {
            return -4;
        } else {
            fm = new BasePatientFamilyMemberDO();
            fm.setPatient(patient);
            fm.setFamilyMember(member);
        }
        fm.setFamilyRelation(relation);
        fm.setIsAuthorize(0);//默认授权
        // 添加对方与自己的关系
        BasePatientFamilyMemberDO fmt = memberDao.findByPatientAndFamilyMember(member, patient);
        // 不存在则创建
        if (fmt == null) {
            fmt = new BasePatientFamilyMemberDO();
            fmt.setPatient(member);
            fmt.setFamilyMember(patient);
        }
        // 对方与自己的关系转s
        //int relationTrans = familyRelationTrans(p, relation);
        int relationTrans = familyRelationTrans(p, relation);
        fmt.setFamilyRelation(relationTrans);
        fmt.setIsAuthorize(0);//默认授权
        memberDao.save(fm);
        memberDao.save(fmt);
        //设置家人openid
        if (StringUtils.isBlank(m.getOpenid()) && StringUtils.isNotBlank(p.getOpenid()) && !"undefined".equals(p.getOpenid())) {
            m.setOpenid(p.getOpenid());
            if (m.getOpenidTime() == null) {
                m.setOpenidTime(new Date());
            }
            patientDao.save(m);
        } else if (StringUtils.isBlank(p.getOpenid()) && StringUtils.isNotBlank(m.getOpenid()) && !"undefined".equals(m.getOpenid())) {
            p.setOpenid(m.getOpenid());
            if (p.getOpenidTime() == null) {
                p.setOpenidTime(new Date());
            }
            patientDao.save(p);
        }
        return 1;
    }
    @Transactional
    public int addMemberByCaptcha(String patient, String member, String captcha, int relation) throws Exception {
        if (patient.equals(member)) {
            return 0;
        }
        BasePatientDO p = patientDao.findById(patient);
        BasePatientDO m = patientDao.findById(member);
        if (p == null) {
            return -1;
        }
        // 添加的成员是否注册判断
        if (m == null) {
            return -2;
        }
//        // 验证码验证
//        if (StringUtils.isNotEmpty(captcha)) {
//            int checkStatus = smsService.check(m.getMobile(), 10, captcha);
//            if (checkStatus == -2) {
//                return -6;  // 验证码过期
//            } else if (checkStatus == -1) {
//                return -3; // 验证码错误
//            }
//        }
        return addMemberFamily(p, m, patient, member, relation);
    }
    /**
     * 获取subscribe
     *
     * @param openid
     * @return
     * @throws Exception
     */
    public String getIsSus(String openid) throws Exception {
        String userInfo_url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + weiXinAccessTokenUtils.getAccessToken() + "&openid=" + openid + "&lang=zh_CN";
        String params = "";
        String result = HttpUtil.sendGet(userInfo_url, params);
        JSONObject json = JSONObject.parseObject(result);
        if (json.containsKey("subscribe")) {
            return json.get("subscribe").toString();
        } else {
            return null;
        }
    }
    public boolean isMobileNO(String number) {
        Pattern pattern = Pattern.compile("^1(3|4|5|7|8)[0-9]\\d{8}$");
        Matcher m = pattern.matcher(number);
        return m.matches();
    }
    /**
     * 获取已绑定家人的信息
     * @param patient
     */
    public List<BasePatientFamilyMemberDO> getByPatientAndFamilyRelation(String patient,Integer familyRelation){
        List<BasePatientFamilyMemberDO> list = null;
        if(familyRelation==null){
            list = memberDao.getByPatient(patient);
        }else{
            list = memberDao.getByPatientAndFamilyRelation(patient,familyRelation);
        }
        return list;
    }
    public List<BasePatientFamilyMemberDO> getByFamilyMemberAndRelation(String familyMember,Integer familyRelation){
        List<BasePatientFamilyMemberDO> list = null;
        if(familyRelation==null){
            list = memberDao.getByFamilyMember(familyMember);
        }else{
            list = memberDao.getByFamilyMemberAndFamilyRelation(familyMember,familyRelation);
        }
        return list;
    }
}

+ 34 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/org/BaseOrgService.java

@ -0,0 +1,34 @@
package com.yihu.jw.care.service.org;
import com.yihu.jw.entity.base.org.BaseOrgDO;
import com.yihu.jw.org.dao.BaseOrgDao;
import com.yihu.jw.utils.StringUtil;
import com.yihu.mysql.query.BaseJpaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * Created by yeshijie on 2021/3/3.
 */
@Service
public class BaseOrgService extends BaseJpaService<BaseOrgDO, BaseOrgDao> {
    @Autowired
    private BaseOrgDao orgDao;
    public List<BaseOrgDO> findOrgList(String type,String name){
        String sql = "select a.* from base_org a where a.del = 1";
        if(!StringUtil.isBlank(type)){
            sql += " and a.type = '"+type+"' ";
        }
        if(!StringUtil.isBlank(name)){
            sql += " and a.name like '%"+name+"%' ";
        }
        return jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(BaseOrgDO.class));
    }
}

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

@ -0,0 +1,107 @@
package com.yihu.jw.care.service.patient;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.patient.PatientMedicareCardDO;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.patient.service.BasePatientMedicardCardService;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.utils.StringUtil;
import com.yihu.mysql.query.BaseJpaService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
 * 
 * 居民基础信息服务service
 * 
 * @version 
 * <pre>
 * Author	Version		Date		Changes
 * litaohong    1.0  2018年08月31日 Created
 *
 * </pre>
 * @since 1.
 */
@Service
public class CarePatientService<T, R extends CrudRepository> extends BaseJpaService<BasePatientDO, BasePatientDao> {
    @Autowired
    private BasePatientDao basePatientDao;
    @Autowired
    private BasePatientMedicardCardService basePatientMedicardCardService;
    @Autowired
    private ObjectMapper objectMapper;
    /**
     * 签约记录
     * @param name
     * @param doctorId
     * @param page
     * @param size
     * @return
     */
    public PageEnvelop<List<Map<String,Object>>> myPatientPage(String name, String doctorId, int page, int size){
        String sql = "SELECT DISTINCT p.id,sr.start_time,p.name,p.sex,p.idcard,p.openid,p.photo ";
        String countSql = "SELECT count(DISTINCT sr.patient) ";
        String filters = " from base_service_package_sign_record sr,base_service_package_record r, " +
                "base_service_package_item i,base_team_member m,base_patient p " +
                "WHERE sr.id = r.sign_id and r.service_package_id = i.service_package_id " +
                "and i.del = 1 and m.team_code = i.team_code and p.id = sr.patient " +
                "and m.doctor_code = '"+doctorId+"' and m.del = '1' ";
        if(!StringUtil.isEmpty(name)){
            filters += " and p.name like '%"+name+"%' ";
        }
        String orderBy = " ORDER BY sr.start_time DESC " +
                "LIMIT "+ (page - 1) * size + "," + size;
        String familySql = "SELECT p.id,p.name,p.sex,p.idcard,p.mobile,p.phone,f.family_relation,p.openid from base_patient_family_member f,base_patient p " +
                "WHERE p.id = f.family_member and f.del=1 and f.patient=?";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql+filters+orderBy);
        for (Map<String,Object> map :list){
            String id = map.get("id").toString();
            String idcard = map.get("idcard").toString();
            map.put("age", IdCardUtil.getAgeForIdcard(idcard));
            map.put("family",jdbcTemplate.queryForList(familySql,id));
        }
        Long count = jdbcTemplate.queryForObject(countSql+filters,Long.class);
        return PageEnvelop.getSuccessListWithPage("success",list,page,size,count);
    }
    /**
     * 居民id
     * @param patientId
     * @return
     */
    public JSONObject findPatientById(String patientId) throws Exception{
        JSONObject result = new JSONObject();
        if(StringUtils.isEmpty(patientId)){
            result.put("result","parameter patientId is null");
            return result;
        }
        BasePatientDO patientDO = basePatientDao.findById(patientId);
        if(patientDO == null){
            result.put("result","not exist patient for id:"+patientId);
            return result;
        }
        PatientMedicareCardDO card = basePatientMedicardCardService.findByTypeAndPatientCodeAndDel("A_01",patientId,"1");
        if(card != null){
            patientDO.setSsc(card.getCode());
        }
        result.put("patient",patientDO);
        return result;
    }
}

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

@ -42,11 +42,11 @@ public class CapacityAssessmentRecordService extends BaseJpaService<CapacityAsse
    public PageEnvelop<List<Map<String,Object>>> assessmentPage(String doctorId,String name, int page, int size,
                    Integer status,Integer levelConclusion,Integer servicePackageStatus){
        String sql = "SELECT c.id,c.patient,c.assessment_time,c.service_package_status servicePackageStatus, " +
                "c.`status`,c.level_conclusion levelConclusion,p.name,p.phone,p.sex,p.idcard  ";
                "c.`status`,c.level_conclusion levelConclusion,p.name,p.mobile,p.sex,p.idcard  ";
        String countSql = "SELECT count(*) ";
        String filters = "from base_capacity_assessment_record c,base_patient p " +
                "WHERE c.doctor = '"+doctorId+"' c.patient = p.id " +
                "WHERE c.doctor = '"+doctorId+"' and c.patient = p.id " +
                " and c.assessment_time>='" + DateUtil.getNowYear() + "-01-01'";
        if(status!=null){
@ -59,7 +59,7 @@ public class CapacityAssessmentRecordService extends BaseJpaService<CapacityAsse
            filters += " and c.service_package_status = "+servicePackageStatus;
        }
        if(!StringUtil.isEmpty(name)){
            filters += " and (c.name like '%"+name+"%' or c.idcard like '%"+name+"%'";
            filters += " and (c.name like '%"+name+"%' or c.idcard like '%"+name+"%') ";
        }
        String orderBy = " ORDER BY c.assessment_time DESC " +
@ -97,15 +97,17 @@ public class CapacityAssessmentRecordService extends BaseJpaService<CapacityAsse
        JSONObject jsonObject = JSONObject.parseObject(jsonData);
        CapacityAssessmentRecordDO recordDO = objectMapper.readValue(jsonObject.getJSONObject("assessment").toJSONString(), CapacityAssessmentRecordDO.class);
        BaseDoctorDO doctorDO = doctorDao.findById(doctorId);
        List<BaseDoctorHospitalDO> doctorHospitalDOs = doctorHospitalDao.findByDoctorCode(doctorId);
        recordDO.setOrgCode(doctorHospitalDOs.get(0).getOrgCode());
        recordDO.setOrgName(doctorHospitalDOs.get(0).getOrgName());
        recordDO.setDoctorName(doctorDO.getName());
        recordDO.setDoctor(doctorId);
        recordDO.setServicePackageStatus(0);
        recordDO.setStatus(0);
        capacityAssessmentRecordDao.save(recordDO);
        if(isCapacityAssessment(recordDO.getPatient())==0){
            BaseDoctorDO doctorDO = doctorDao.findById(doctorId);
            List<BaseDoctorHospitalDO> doctorHospitalDOs = doctorHospitalDao.findByDoctorCode(doctorId);
            recordDO.setOrgCode(doctorHospitalDOs.get(0).getOrgCode());
            recordDO.setOrgName(doctorHospitalDOs.get(0).getOrgName());
            recordDO.setDoctorName(doctorDO.getName());
            recordDO.setDoctor(doctorId);
            recordDO.setServicePackageStatus(0);
            recordDO.setStatus(0);
            capacityAssessmentRecordDao.save(recordDO);
        }
    }
    /**

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

@ -6,12 +6,14 @@ import com.yihu.jw.care.dao.sign.*;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.patient.PatientMedicareCardDO;
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.archive.ArchiveDO;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.patient.service.BasePatientMedicardCardService;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.utils.StringUtil;
@ -19,14 +21,12 @@ import com.yihu.mysql.query.BaseJpaService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
 *
@ -57,32 +57,99 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
    private BasePatientDao patientDao;
    @Autowired
    private ArchiveDao archiveDao;
    @Autowired
    private BasePatientMedicardCardService basePatientMedicardCardService;
    @Autowired
    private StringRedisTemplate redisTemplate;
    /**
     * 获取居民签约的服务项
     * @param patientId
     * @return
     */
    public List<String> getPatientServiceItems(String patientId){
        String key = "serviceItem:"+patientId;
        List<String> res;
        if(redisTemplate.hasKey(key)){
            long size = redisTemplate.opsForList().size(key);
            res = redisTemplate.opsForList().range(key,0,size);
        }else{
            res = fingServiceItemsCodeByPatientId(patientId);
            redisTemplate.opsForList().leftPushAll(key,res);
        }
        return res;
    }
    /**
     * 每次修改服务项重新设置res的服务项值
     * @param patientId
     */
    public void setPatientServiceItems(String patientId){
        String key = "serviceItem:"+patientId;
        if(redisTemplate.hasKey(key)){
            redisTemplate.delete(key);
        }
        List<String> res = fingServiceItemsCodeByPatientId(patientId);
        redisTemplate.opsForList().leftPushAll(key,res);
    }
    /**
     * 查找居民的签约服务项
     * @param patientId
     * @return
     */
    public List<Map<String,Object>> fingServiceItemsByPatientId(String patientId){
        String sql = "SELECT DISTINCT i.code,i.name from base_service_package_sign_record sr,base_service_package_record r, " +
                " base_service_package_item i  where  sr.id = r.sign_id and r.service_package_id = i.service_package_id " +
                "  and i.del = 1 and sr.`status`=1 and  sr.patient  = '"+patientId+"' ";
        return jdbcTemplate.queryForList(sql);
    }
    /**
     * 查找居民的签约服务项Code
     * @param patientId
     * @return
     */
    public List<String> fingServiceItemsCodeByPatientId(String patientId){
        String sql = "SELECT DISTINCT i.code from base_service_package_sign_record sr,base_service_package_record r, " +
                " base_service_package_item i  where  sr.id = r.sign_id and r.service_package_id = i.service_package_id " +
                "  and i.del = 1 and sr.`status`=1 and  sr.patient  = '"+patientId+"' ";
        return jdbcTemplate.queryForList(sql,String.class);
    }
    /**
     * 获取签约明细
     * @param id
     */
    public JSONObject signDetail(String id){
    public JSONObject findSignById(String id) throws Exception{
        JSONObject json = new JSONObject();
        ServicePackageSignRecordDO signRecordDO = servicePackageSignRecordDao.findOne(id);
        BasePatientDO patientDO = patientDao.findById(signRecordDO.getPatient());
        List<Map<String,Object>> packageList = fingdBySignId(id);
        PatientMedicareCardDO card = basePatientMedicardCardService.findByTypeAndPatientCodeAndDel("A_01",signRecordDO.getPatient(),"1");
        if(card != null){
            patientDO.setSsc(card.getCode());
        }
        json.put("patient",patientDO);
        json.put("signRecordDO",signRecordDO);
        List<Map<String,Object>> packageList = fingdBySignId(id);
        List<Map<String,Object>> doctorList = fingdDoctorBySignId(id,"generalDoctor");
        List<Map<String,Object>> helperList = fingdDoctorBySignId(id,"helper");
        String doctorInfo = "";
        String helperInfo = "";
        String packageInfo = "";
        if(doctorList.size()>0){
            doctorInfo = doctorList.get(0).get("name").toString()+"等"+doctorList.size()+"名";
        }
        if(helperList.size()>0){
            helperInfo = doctorList.get(0).get("name").toString()+"等"+helperList.size()+"名";
        }
        json.put("doctorInfo",doctorInfo);
        json.put("helperInfo",helperInfo);
        if(packageList.size()>0){
            packageInfo = packageList.get(0).get("name").toString()+"等"+packageList.size()+"个";
        }
        signRecordDO.setDoctorInfo(doctorInfo);
        signRecordDO.setHelperInfo(helperInfo);
        signRecordDO.setPackageInfo(packageInfo);
        json.put("signRecordDO",signRecordDO);
        return json;
    }
@ -128,10 +195,10 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
                "base_service_package_item i,base_team_member m,base_patient p " +
                "WHERE sr.id = r.sign_id and r.service_package_id = i.service_package_id " +
                "and i.del = 1 and m.team_code = i.team_code and p.id = sr.patient " +
                "and m.doctor_code = '"+doctorId+"' and m.del = '1' ";
                "and m.doctor_code = '"+doctorId+"' and m.del = '1' and sr.`status`=1 ";
        if(!StringUtil.isEmpty(name)){
            filters += " sr.name like '%"+name+"%' ";
            filters += " and sr.name like '%"+name+"%' ";
        }
        String orderBy = " ORDER BY sr.start_time DESC " +
@ -144,6 +211,7 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
            map.put("servicePackageList",servicePackageList);
            String idcard = map.get("idcard").toString();
            map.put("age", IdCardUtil.getAgeForIdcard(idcard));
            map.put("startTime", map.get("start_time").toString().substring(0,19));
        }
        Long count = jdbcTemplate.queryForObject(countSql+filters,Long.class);
        return PageEnvelop.getSuccessListWithPage("success",list,page,size,count);
@ -159,7 +227,7 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
                "base_service_package_item i,base_team_member m " +
                "WHERE sr.id = r.sign_id and r.service_package_id = i.service_package_id " +
                "and i.del = 1 and m.team_code = i.team_code " +
                "and m.doctor_code = '"+doctorId+"' and m.del = '1' ";
                "and m.doctor_code = '"+doctorId+"' and m.del = '1' and sr.`status`=1 ";
        return jdbcTemplate.queryForObject(sql,Integer.class);
    }
@ -170,7 +238,7 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
     * @param doctorId
     */
    @Transactional(rollbackFor = Exception.class)
    public void servicePackageSign(String jsonData,String doctorId) throws Exception{
    public ServicePackageSignRecordDO servicePackageSign(String jsonData,String doctorId) throws Exception{
        ServicePackageSignRecordDO signRecordDO = objectMapper.readValue(jsonData, ServicePackageSignRecordDO.class);
        List<ServicePackageRecordDO> recordDOList = signRecordDO.getRecordDOList();
        String signId = signRecordDO.getId();
@ -205,6 +273,7 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
            recordDO.setSignId(signId);
        }
        servicePackageRecordDao.save(recordDOList);
        return signRecordDO;
    }
    public PageEnvelop<List<Map<String,Object>>> servicePackagePage(int page, int size){

+ 60 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/team/BaseTeamMemberService.java

@ -0,0 +1,60 @@
package com.yihu.jw.care.service.team;
import com.yihu.jw.care.dao.team.BaseTeamMemberDao;
import com.yihu.jw.entity.base.team.BaseTeamMemberDO;
import com.yihu.mysql.query.BaseJpaService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
 * 
 * 团队成员服务service
 * 
 * @version 
 * <pre>
 * Author	Version		Date		Changes
 * litaohong    1.0  2018年08月31日 Created
 *
 * </pre>
 * @since 1.
 */
@Service
public class BaseTeamMemberService extends BaseJpaService<BaseTeamMemberDO, BaseTeamMemberDao> {
    @Autowired
    private BaseTeamMemberDao baseTeamMemberDao;
    /**
     * 根据团队标识获取团队成员Id列表
     *
     * @param teamCode
     * @return
     */
    public Set<Object> findMemberIdList(String teamCode) {
        Set<Object> result = new HashSet<>();
        if (StringUtils.isEmpty(teamCode)) {
            return result;
        }
        return baseTeamMemberDao.findIdListByTeamCode(teamCode);
    }
    /**
     * 根据团队标识获取居民团队成员列表
     * @param teamCode
     * @return
     */
    public List<BaseTeamMemberDO> findMembersByTeamCode(String teamCode){
        List<BaseTeamMemberDO> result = new ArrayList<>();
        if(org.apache.commons.lang.StringUtils.isEmpty(teamCode)){
            return result;
        }
        return baseTeamMemberDao.findByTeamCode(teamCode);
    }
}

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

@ -0,0 +1,218 @@
package com.yihu.jw.care.service.team;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.care.dao.team.BaseTeamDao;
import com.yihu.jw.care.dao.team.BaseTeamMemberDao;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.team.BaseTeamDO;
import com.yihu.jw.entity.base.team.BaseTeamMemberDO;
import com.yihu.mysql.query.BaseJpaService;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * 
 * 团队信息服务service
 * 
 * @version 
 * <pre>
 * Author	Version		Date		Changes
 * litaohong    1.0  2018年08月31日 Created
 *
 * </pre>
 * @since 1.
 */
@Service
public class BaseTeamService extends BaseJpaService<BaseTeamDO, BaseTeamDao> {
    @Autowired
    private BaseTeamMemberService teamMemberService;
    @Autowired
    private BaseTeamMemberDao memberDao;
    @Autowired
    private BaseDoctorDao doctorDao;
    @Autowired
    private BaseTeamDao teamDao;
    @Autowired
    private ObjectMapper objectMapper;
    /**
     * 创建团队。
     * @return
     */
    public BaseTeamDO createTeam(String teamName, String leaderCode, String orgCode, String orgName) {
        BaseTeamDO team = new BaseTeamDO();
        team.setName(teamName);
        team.setLeaderCode(leaderCode);
        team.setOrgCode(orgCode);
        team.setOrgName(orgName);
        team.setDel("1");
        team.setTeamNum("0");
        teamDao.save(team);
        addMember(team,leaderCode);
        return team;
    }
    /**
     * 添加成员。
     * @param doctorCode
     */
    public void addMember(BaseTeamDO team, String doctorCode) {
        if (!memberDao.isMemberExist(team.getId(), doctorCode)) {
            BaseTeamMemberDO member = new BaseTeamMemberDO();
            member.setTeamCode(team.getId());
            member.setDoctorCode(doctorCode);
            member.setDel("1");
            member.setOrgCode(team.getOrgCode());
            memberDao.save(member);
        }
    }
    /**
     * 删除团队
     * @param teamCode
     */
    @Transactional(rollbackFor = Exception.class)
    public void deleteTeam(String teamCode) {
        teamDao.delete(teamCode);
        memberDao.deleteByTeamCode(teamCode);
    }
    /**
     * 更新团队名称。
     * @return
     */
    public BaseTeamDO updateTeamName(String teamCode, String teamName) {
        BaseTeamDO team = teamDao.findOne(teamCode);
        if (team != null) {
            team.setName(teamName);
            teamDao.save(team);
        }
        return team;
    }
    /**
     * 更新团队领导。
     * @return
     */
    public BaseTeamDO updateTeamLeader(String teamCode, String doctorCode) {
        BaseTeamDO team = teamDao.findOne(teamCode);
        if (team != null) {
            team.setLeaderCode(doctorCode);
            teamDao.save(team);
        }
        return team;
    }
    public List<Map<String,Object>> findMembers(String teamCode, String name) {
        String sql = "SELECT " +
                " d.*,h.org_code,h.org_name,h.org_name,h.dept_code,h.dept_name " +
                "FROM " +
                " base_team_member m, " +
                " base_doctor d, " +
                " base_doctor_hospital h " +
                " WHERE " +
                " m.team_code = '"+teamCode+"' and m.doctor_code = d.id " +
                " and m.del = '1' and d.id = h.doctor_code";
        if(!StringUtils.isEmpty(name)){
            sql += " and d.name like '%"+name+"%'";
        }
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        BaseTeamDO team = teamDao.findOne(teamCode);
        for(Map<String,Object> member : list){
            String id = member.get("id").toString();
            if (id.equals(team.getLeaderCode())) {
                member.put("leader",true);
            } else {
                member.put("leader",false);
            }
        }
        return list;
    }
    /**
     * 获取团队信息
     * @param teamCode
     * @return
     */
    public List<Map<String,Object>> findMembers(String teamCode) {
        String sql = "SELECT " +
                " d.*,h.org_code,h.org_name,h.org_name,h.dept_code,h.dept_name " +
                "FROM " +
                " base_team_member m, " +
                " base_doctor d, " +
                " base_doctor_hospital h " +
                " WHERE " +
                " m.team_code = '"+teamCode+"' and m.doctor_code = d.id " +
                " and m.del = '1' and d.id = h.doctor_code";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        return list;
    }
    /**
     * 移除团队信息
     * @param teamCode
     * @param doctorCode
     */
    public void removeMember(String teamCode, String doctorCode) {
        BaseTeamMemberDO member = memberDao.findByTeamCodeAndDoctorCode(teamCode, doctorCode);
        if (member != null){
            memberDao.delete(member);
        }
    }
    /**
     * 获取团队信息
     * @param teamCode
     * @return
     */
    public JSONObject getTeamInfo(String teamCode){
        BaseTeamDO adminTeam = teamDao.findOne(teamCode);
        JSONObject result = new JSONObject();
        JSONObject teamInfo = new JSONObject(adminTeam);
        BaseDoctorDO doctor = doctorDao.findById(adminTeam.getLeaderCode());
        teamInfo.put("leaderName",doctor.getName());
        result.put("team",teamInfo);
        List<Map<String,Object>> members = findMembers(teamCode);
        List<JSONObject> doctors = new ArrayList<>();
        for(Map<String,Object> d:members){
            JSONObject doctorInfo = new JSONObject();
            doctorInfo.put("name",d.get("name").toString());
            doctorInfo.put("id",d.get("id").toString());
            doctorInfo.put("deptName",d.get("dept_name").toString());
            doctorInfo.put("jobTitleName",d.get("job_title_name").toString());
            doctorInfo.put("photo",d.get("photo").toString());
            doctors.add(doctorInfo);
        }
        result.put("members",doctors);
        return result;
    }
    /**
     * 查询机构下的团队(翻译名称)
     * @param orgCode
     * @return
     */
    public List<BaseTeamDO> getHospitalTeams(String orgCode){
        String sql = "SELECT t.*,CAST(d.name AS char) name from base_doctor d,base_team t " +
                "WHERE t.org_code = '"+orgCode+"' and t.leader_code = d.id " +
                " and t.del = '1'";
        List<BaseTeamDO> list = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(BaseTeamDO.class));
        return list;
    }
}

+ 113 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/wechat/WeiXinAccessTokenUtils.java

@ -0,0 +1,113 @@
package com.yihu.jw.care.service.wechat;
import com.yihu.jw.entity.base.wx.WxAccessTokenDO;
import com.yihu.jw.util.wechat.wxhttp.HttpUtil;
import com.yihu.jw.wechat.dao.WxAccessTokenDao;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
/**
 * Created by lyr on 2016/08/22.
 */
@Component
public class WeiXinAccessTokenUtils {
    private static Logger logger = LoggerFactory.getLogger(WeiXinAccessTokenUtils.class);
    @Autowired
    private WxAccessTokenDao accessTokenDao;
    @Autowired
    StringRedisTemplate redisTemplate;
    @Value("${wechat.appId}")
    private String appId;
    @Value("${wechat.appSecret}")
    private String appSecret;
    @Value("${wechat.accId}")
    private String accId;
    /**
     * 获取微信AccessToken
     *
     * @return
     */
    public synchronized String getAccessToken(){
        try {
            if (redisTemplate.hasKey("AccessToken:"+accId)){
                String jsonStr = redisTemplate.opsForValue().get("AccessToken:"+accId);
                JSONObject jsonObject = new JSONObject(jsonStr);
                long add_timestamp = jsonObject.getLong("add_timestamp");
                long expires_in = jsonObject.getLong("expires_in");
                String token = jsonObject.getString("access_token");
                if ((System.currentTimeMillis() - add_timestamp) < (expires_in * 1000)) {
                    return token;
                } else {
                    redisTemplate.delete("AccessToken:"+accId);
                }
            }
            String token_url = "https://api.weixin.qq.com/cgi-bin/token";
            String params = "grant_type=client_credential&appid=" +appId + "&secret=" + appSecret;
            String result = HttpUtil.sendGet(token_url, params);
            JSONObject json = new JSONObject(result);
            if (json.has("access_token")) {
                String token = json.get("access_token").toString();
                String expires_in = json.get("expires_in").toString();
                WxAccessTokenDO newaccessToken = new WxAccessTokenDO();
                newaccessToken.setAccessToken(token);
                newaccessToken.setExpiresIn(Long.parseLong(expires_in));
                newaccessToken.setWechatId(accId);
                accessTokenDao.save(newaccessToken);
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("access_token",token);
                jsonObject.put("add_timestamp",System.currentTimeMillis());
                jsonObject.put("expires_in",Long.parseLong(expires_in));
                redisTemplate.opsForValue().set("AccessToken:"+accId,jsonObject.toString());
                return token;
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    public synchronized String setAccessToken(){
        accessTokenDao.deleteByWechatId(accId);
        String token_url = "https://api.weixin.qq.com/cgi-bin/token";
        String params = "grant_type=client_credential&appid=" +appId + "&secret=" + appSecret;
        String result = HttpUtil.sendGet(token_url, params);
        JSONObject json = new JSONObject(result);
        if (json.has("access_token")) {
            String token = json.get("access_token").toString();
            String expires_in = json.get("expires_in").toString();
            WxAccessTokenDO newaccessToken = new WxAccessTokenDO();
            newaccessToken.setAccessToken(token);
            newaccessToken.setExpiresIn(Long.parseLong(expires_in));
            newaccessToken.setWechatId(accId);
            accessTokenDao.save(newaccessToken);
            if (redisTemplate.hasKey("AccessToken:"+accId)){
                String jsonStr = redisTemplate.opsForValue().get("AccessToken:"+accId);
                JSONObject jsonObject = new JSONObject(jsonStr);
                jsonObject.put("access_token",token);
                jsonObject.put("add_timestamp",System.currentTimeMillis());
                jsonObject.put("expires_in",Long.parseLong(expires_in));
                redisTemplate.opsForValue().set("AccessToken:"+accId,jsonObject.toString());
            }else {
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("access_token",token);
                jsonObject.put("add_timestamp",System.currentTimeMillis());
                jsonObject.put("expires_in",Long.parseLong(expires_in));
                redisTemplate.opsForValue().set("AccessToken:"+accId,jsonObject.toString());
            }
            return token;
        } else {
            //token失败原因
            logger.info(result);
            return null;
        }
    }
}

+ 45 - 23
svr/svr-cloud-care/src/main/resources/application.yml

@ -110,9 +110,6 @@ jw:
  smsUrl: http://svr-base:10020/sms_gateway/send
myFamily:
  qrCodeFailurTime: 2
wechat:
  id: xm_zsyy_wx  # base库中,wx_wechat 的id字段
  flag: false #演示环境  true走Mysql数据库  false走Oracle
# 短信验证码发送的客户端标识,居民端
sms:
  clientId: EwC0iRSrcP
@ -128,21 +125,32 @@ hospital:
  mqPwd: 123456
  SourceSysCode: S60
  TargetSysCode: S01
wechat:
  appId: wxd03f859efdf0873d
  appSecret: 2935b54b53a957d9516c920a544f2537
  wechat_token: 27eb3bb24f149a7760cf1bb154b08040
  wechat_base_url: http%3a%2f%2fweixin.xmtyw.cn%2fwlyy-dev
  accId: gh_ffd64560fb21
  id: sd_tnzyy_wx  # base库中,wx_wechat 的id字段
  flag: false #演示环境  true走Mysql数据库  false走Oracle
im:
  im_list_get: http://172.26.0.105:3000/
  data_base_name: im_internet_hospital
es:
  pwflag: 1 # 1需要密码,2不需要密码
  index:
    Statistics: hlw_quota_test
    FollowUp: wlyy_followup
  type:
    Statistics: hlw_quota_test
  host:  http://172.26.0.112:9200
  tHost: 172.26.0.112:9300
    FollowUpContent: wlyy_followup_content
  host:  http://172.26.0.55:9000
  tHost: 172.26.0.55:9300
  clusterName: jkzl
  securityUser: elastic:elastic
  securityUser: lion:jkzlehr
  user: lion
  password: jkzlehr
# 上传文件临时路径配置
FileTempPath:
@ -186,9 +194,6 @@ fastDFS:
  fastdfs_file_url: http://172.26.0.110:8888/
fast-dfs:
  tracker-server: 172.26.0.110:22122 #服务器地址
wechat:
  id: xm_ykyy_wx  # base库中,wx_wechat 的id字段
  flag: false #演示环境  true走Mysql数据库  false走Oracle
# 短信验证码发送的客户端标识,居民端
sms:
  clientId: EwC0iRSrcP
@ -206,16 +211,26 @@ hospital:
  mqPwd: 123456
  SourceSysCode: S60
  TargetSysCode: S01
wechat:
  appId: wxd03f859efdf0873d
  appSecret: 2935b54b53a957d9516c920a544f2537
  wechat_token: 27eb3bb24f149a7760cf1bb154b08040
  wechat_base_url: http%3a%2f%2fweixin.xmtyw.cn%2fwlyy-dev
  accId: gh_ffd64560fb21
  id: sd_tnzyy_wx  # base库中,wx_wechat 的id字段
  flag: false #演示环境  true走Mysql数据库  false走Oracle
im:
  im_list_get: http://172.26.0.105:3000/
  data_base_name: im_internet_hospital
es:
  pwflag: 1 # 1需要密码,2不需要密码
  index:
    Statistics: hlw_quota_test
    FollowUp: wlyy_followup
  type:
    Statistics: hlw_quota_test
    FollowUpContent: wlyy_followup_content
  host:  http://172.26.0.55:9000
  tHost: 172.26.0.55:9300
  clusterName: jkzl
@ -272,9 +287,6 @@ fastDFS:
  fastdfs_file_url: https://hlwyy.xmzsh.com/fastdfs/
fast-dfs:
  tracker-server: 192.0.33.26:22122 #服务器地址
wechat:
  id: xm_zsyy_wx  # base库中,wx_wechat 的id字段  # todo 待配置
  flag: false #演示环境  true走Mysql数据库  false走Oracle
# 短信验证码发送的客户端标识,居民端
sms:
  clientId: EwC0iRSrcP #todo 待配置
@ -292,20 +304,30 @@ hospital:
  mqPwd: 123456
  SourceSysCode: S60
  TargetSysCode: S01
im:
  im_list_get: http://172.16.1.42:3000/
  data_base_name: im
wechat:
  appId: wxd03f859efdf0873d
  appSecret: 2935b54b53a957d9516c920a544f2537
  wechat_token: 27eb3bb24f149a7760cf1bb154b08040
  wechat_base_url: http%3a%2f%2fweixin.xmtyw.cn%2fwlyy-dev
  accId: gh_ffd64560fb21
  id: sd_tnzyy_wx  # base库中,wx_wechat 的id字段
  flag: false #演示环境  true走Mysql数据库  false走Oracle
im:
  im_list_get: http://172.26.0.105:3000/
  data_base_name: im_internet_hospital
es:
  pwflag: 1 # 1需要密码,2不需要密码
  index:
    Statistics: hlw_quota_prod
    Statistics: hlw_quota_test
    FollowUp: wlyy_followup
  type:
    Statistics: hlw_quota_prod
  host:  http://192.0.33.26:9200
  tHost: 192.0.33.26:9300
    Statistics: hlw_quota_test
    FollowUpContent: wlyy_followup_content
  host:  http://172.26.0.55:9000
  tHost: 172.26.0.55:9300
  clusterName: jkzl
  securityUser: lion:jkzlehr
  user: lion
  password: jkzlehr