zdm 6 anni fa
parent
commit
490455a64a
16 ha cambiato i file con 463 aggiunte e 24 eliminazioni
  1. 1 0
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/base/WechatRequestMapping.java
  2. 12 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/wlyy/HouseUserContant.java
  3. 53 0
      server/svr-authentication/readme.md
  4. 8 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyAuthorizationEndpoint.java
  5. 1 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java
  6. 7 0
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/wx/WxTemplateController.java
  7. 9 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/wx/WxTemplateService.java
  8. 10 0
      svr/svr-healthy-house/pom.xml
  9. 12 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/constant/LoginInfo.java
  10. 53 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/LoginController.java
  11. 14 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/dao/UserDao.java
  12. 49 4
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/model/user/User.java
  13. 91 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/service/user/LoginService.java
  14. 116 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/service/user/UserService.java
  15. 0 2
      svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/service/SpecialistHospitalServiceItemService.java
  16. 27 18
      svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/service/rehabilitation/RehabilitationManageService.java

+ 1 - 0
common/common-request-mapping/src/main/java/com/yihu/jw/rm/base/WechatRequestMapping.java

@ -71,6 +71,7 @@ public class WechatRequestMapping {
        public static final String api_getById="/template/{id}";
        public static final String api_sendTemplateMessage="/sendTemplateMessage";
        public static final String api_test_template="/test_template";
        public static final String api_getAllTemplate="/api_getAllTemplate";
        public static final String message_success_create="wxTemplate create success";
        public static final String message_success_update="wxTemplate update success";

+ 12 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/wlyy/HouseUserContant.java

@ -0,0 +1,12 @@
package com.yihu.jw.restmodel.wlyy;
/**
 * @author HZY
 * @created 2018/9/18 20:19
 */
public class HouseUserContant {
    public static Integer activated_del=-1;
    public static Integer activated_lock=0;
    public static Integer activated_active =1;
    public static Integer activated_offline=2;
}

+ 53 - 0
server/svr-authentication/readme.md

@ -0,0 +1,53 @@
授权码模式 authorization_code
1.GET http://localhost:10260/oauth/authorize?response_type=code&client_id=uzs5G0HgTp&state=sxy&scope=read&redirect_uri=http://192.168.1.221:8010/ehr/browser/common/login/signin&ak=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjgKCe2zFmYSjHZz93cO17A0Hj6H5XdfwP2I5Qu1UJbmhGG/wPu409r9TABXblcxC9uPVR3PJ5dPrWPLuQ/r7tq16vSa5GF4iCcSlLyx/IDA5bq8ZnafS/RjPiKDtdZAx5uCNLog9GkVHNZIhK9cS9MI4QNuOJzOXaAVwnP2wIDAQAB
    HTTP/1.1 302 Found
    Location: http://localhost:9000/info?code=Ar0mp5&state=sxy
2.POST  http://localhost:10260/oauth/token
    
    HTTP/1.1 200 OK
    Content-Type: application/json;charset=UTF-8
    Cache-Control: no-store
    Pragma: no-cache
    {
      "accessToken":"4c5c7f4f-158a-4f73-9c14-ecbe78671872",
      "tokenType":"bearer",
      "expiresIn":3600,
      "refreshToken":"4c5c7f4f-158a-4f73-9c14-ecbe78671873",
      "state":"example_value"
    }
简化模式 implicit
1.GET http://localhost:10260/oauth/authorize?response_type=token&client_id=EwC0iRSrc4&state=sxy&scope=read&ak=xxxxxxxxxxxxxxxxxxxxxxxxxxx
    HTTP/1.1 302 Found
    Location: https://www.baidu.com/#access_token=4c5c7f4f-158a-4f73-9c14-ecbe78671872&token_type=bearer&state=sxy&expires_in=2418755
   
密码模式 password
1.POST http://localhost:10260/oauth/token
    grant_type=password&username=admin&password=123456789&scope=read&client_id=uzs5G0HgTp
    HTTP/1.1 200 OK
    Content-Type: application/json;charset=UTF-8
    Cache-Control: no-store
    Pragma: no-cache
    {
      "accessToken":"8ce77011-87c9-48f3-8e4f-5cf945f047c7",
      "tokenType":"example",
      "expiresIn":3600,
      "refreshToken":"6b010e33-8bc3-4f3f-8123-66df589dc82f",
      "state":"example_value",
      "user":"admin"
     }
更新令牌 refresh_token
1.POST http://localhost:10260/oauth/token
    grant_type=refresh_token&refresh_token=6b010e33-8bc3-4f3f-8123-66df589dc82f&client_id=uzs5G0HgTp
单点登陆 sso
//A 应用发起请求
1.GET http://localhost:10260/oauth/sso?response_type=token&client_id=EwC0iRSrcS&state=sxy&scope=read&redirect_uri=https://www.jd.com?idCardNo=362321200108017313&access_token=40db969a-5fa0-444e-a0e0-36ba86e7a9ed
//B应用 验证token
2.post http://localhost:10260/oauth/sso?client_id=EwC0iRSrcS&access_token=26502c29-6ba8-4986-8feb-723b8288356d

+ 8 - 0
server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyAuthorizationEndpoint.java

@ -120,6 +120,14 @@ public class WlyyAuthorizationEndpoint extends AbstractEndpoint {
        this.errorPage = errorPage;
    }
    /**
     *
     * @param model
     * @param parameters
     * @param sessionStatus
     * @param principal
     * @return
     */
    @RequestMapping(value = "/oauth/authorize", method = RequestMethod.GET)
    public ModelAndView authorize(Map<String, Object> model, @RequestParam Map<String, String> parameters,
                                  SessionStatus sessionStatus, Principal principal) {

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

@ -111,6 +111,7 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
        }
        if (StringUtils.isEmpty(parameters.get("captcha"))) {
            parameters.put("grant_type", "password");
            //解密密码
//            if (parameters.get("password") != null) {
//                RSAPrivateKey rsaPrivateKey = (RSAPrivateKey)httpSession.getAttribute("privateKey");
//                parameters.put("password", RSAUtils.decryptByPrivateKey(new String(Base64.decodeBase64(parameters.get("password"))), rsaPrivateKey));

+ 7 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/wx/WxTemplateController.java

@ -28,6 +28,13 @@ public class WxTemplateController extends EnvelopRestEndpoint {
        return wxTemplateService.sendWeTempMesTest(wechatId,openid);
    }
    @PostMapping(value = WechatRequestMapping.WxTemplate.api_getAllTemplate, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "获取所有微信模板", notes = "获取所有微信模板")
    public String  getAllTemp(String wechatId) {
        return wxTemplateService.getAllTemp(wechatId);
    }
//    @PostMapping(value = WechatRequestMapping.WxTemplate.api_create, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    @ApiOperation(value = "创建微信模版", notes = "创建微信模版")

+ 9 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/wx/WxTemplateService.java

@ -2,7 +2,9 @@ package com.yihu.jw.base.service.wx;
import com.yihu.jw.base.dao.wx.WxTemplateConfigDao;
import com.yihu.jw.entity.base.wx.WxTemplateConfigDO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.util.wechat.WeixinMessagePushUtils;
import com.yihu.jw.util.wechat.wxhttp.HttpUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -33,6 +35,13 @@ public class WxTemplateService {
        return "success";
    }
    public String  getAllTemp(String wechatId){
        String url ="https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token="+wxAccessTokenService.getWxAccessTokenById(wechatId).getAccessToken();
        String result = HttpUtil.sendGet(url);
        return result;
    }
//    public WxTemplateDO createWxTemplate(WxTemplateDO wxTemplate) {
//        if (StringUtils.isEmpty(wxTemplate.getTemplateId())) {

+ 10 - 0
svr/svr-healthy-house/pom.xml

@ -94,6 +94,16 @@
			<groupId>com.yihu.jw</groupId>
			<artifactId>common-rest-model</artifactId>
		</dependency>
		<dependency>
			<groupId>com.yihu.jw</groupId>
			<artifactId>common-util</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springside</groupId>
			<artifactId>springside-core</artifactId>
			<version>4.2.3-GA</version>
			<!--<classifier>GA</classifier>-->
		</dependency>
	</dependencies>

+ 12 - 0
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/constant/LoginInfo.java

@ -0,0 +1,12 @@
package com.yihu.jw.healthyhouse.constant;
/**
 * @author HZY
 * @created 2018/9/19 9:10
 */
public class LoginInfo {
    public static final String IS_LOGIN = "isLogin";
    public static final String USER_NAME = "loginName";
    public static final String USER_ID = "userId";
    public static final String TOKEN = "token";
}

+ 53 - 0
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/LoginController.java

@ -0,0 +1,53 @@
package com.yihu.jw.healthyhouse.controller;
import com.yihu.jw.exception.business.ManageException;
import com.yihu.jw.healthyhouse.model.user.User;
import com.yihu.jw.healthyhouse.service.user.LoginService;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
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.RequestParam;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
/**
 * @author HZY
 * @created 2018/9/18 19:55
 */
public class LoginController extends EnvelopRestEndpoint {
    @Autowired
    private LoginService loginService;
    @GetMapping("/login")
    @ApiOperation(value = "登陆")
    public Envelop login(
            HttpServletRequest request,
            @ApiParam(name = "username", value = "账号", required = true)@RequestParam(required = true, name = "username") String username,
            @ApiParam(name = "password", value = "密码", required = true)@RequestParam(required = true, name = "password") String password) throws ManageException {
        User data = loginService.login(request,username, password);
        return Envelop.getSuccess("登陆成功");
    }
    @GetMapping("/loginout")
    @ApiOperation(value = "退出")
    public Envelop loginout(
            HttpServletRequest request,
            @ApiParam(name = "userCode", value = "用户code", required = true)@RequestParam(required = true, name = "userCode") String userCode) {
        try {
            //修改用户状态  离线
           return Envelop.getSuccess("登出成功");
        } catch (Exception e) {
            e.printStackTrace();
            return Envelop.getError("登出成功:" + e.getMessage(), -1);
        }
    }
}

+ 14 - 0
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/dao/UserDao.java

@ -2,11 +2,25 @@ package com.yihu.jw.healthyhouse.dao;
import com.yihu.jw.healthyhouse.model.user.User;
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.transaction.annotation.Transactional;
/**
 * @author HZY
 * @created 2018/9/18 19:21
 */
public interface UserDao extends PagingAndSortingRepository<User, String>, JpaSpecificationExecutor<User> {
    @Query("from User u where u.loginCode=?1 and u.activated<>0 ")
    User findByLoginCode(String loginCode);
    @Query("from User u where u.name=?1 and u.activated<>0 ")
    User findByName(String name);
    @Transactional
    @Modifying
    @Query("update User u set u.activated = 0 where u.loginCode = ?1 ")
    void delete(String loginCode);
}

+ 49 - 4
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/model/user/User.java

@ -5,6 +5,7 @@ import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;
@ -17,23 +18,25 @@ import java.util.Date;
@Table(name = "user")
public class User extends UuidIdentityEntityWithOperator {
    @Id
    private String id;
    @Column(name = "login_code", nullable = false)
    private String loginCode;
    @Column(name = "name", nullable = false)
    private String name;
    @Column(name = "password", nullable = false)
    private String password;
    @Column(name = "gender", nullable = false)
    @Column(name = "gender" )
    private String gender;
    @Column(name = "birthday", nullable = false)
    @Column(name = "birthday" )
    private Date birthday;
    @Column(name = "id_card_no", nullable = false)
    private String idCardNo;
    @Column(name = "telephone", nullable = false)
    private String telephone;
    @Column(name = "last_login_time", nullable = false, length = 0)
    @Column(name = "last_login_time", length = 0)
    private String lastLoginTime;
    @Column(name = "img_remote_path", nullable = false)
    @Column(name = "img_remote_path")
    private String imgRemotePath;   //头像地址
    @Column(name = "user_type", nullable = false)
    private String userType;         //用户类型
@ -44,6 +47,14 @@ public class User extends UuidIdentityEntityWithOperator {
    @Column(name = "city_code", nullable = false)
    private String cityCode;        //市编码
    @Column(name = "salt")
    private String salt; //加密种子
    @Column(name = "creator")
    private String creator;
    @Column(name = "modifier")
    private String modifier;
    @Column(name = "modifier_name")
    private String modifierName;
    public String getLoginCode() {
        return loginCode;
@ -148,4 +159,38 @@ public class User extends UuidIdentityEntityWithOperator {
    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }
    public String getCreator() {
        return creator;
    }
    public void setCreator(String creator) {
        this.creator = creator;
    }
    public String getModifier() {
        return modifier;
    }
    public void setModifier(String modifier) {
        this.modifier = modifier;
    }
    public String getModifierName() {
        return modifierName;
    }
    public void setModifierName(String modifierName) {
        this.modifierName = modifierName;
    }
    public String getSalt() {
        return salt;
    }
    public void setSalt(String salt) {
        this.salt = salt;
    }
}

+ 91 - 0
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/service/user/LoginService.java

@ -0,0 +1,91 @@
package com.yihu.jw.healthyhouse.service.user;
import com.yihu.jw.exception.business.ManageException;
import com.yihu.jw.healthyhouse.constant.LoginInfo;
import com.yihu.jw.healthyhouse.model.user.User;
import com.yihu.jw.restmodel.wlyy.HouseUserContant;
import com.yihu.jw.util.security.MD5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author HZY
 * @created 2018/9/18 20:02
 */
@Service
public class LoginService {
    @Autowired
    private UserService userService;
    /**
     * 登录
     * @param username
     * @param password
     * @return
     * @throws Exception
     */
    @Transactional(noRollbackForClassName = "ManageException")
    public User login(HttpServletRequest request, String username, String password) throws ManageException {
        Map<String, List> data = new HashMap<>();
        //判断登陆信息是否正确
        User user = userService.findByCode(username);
        if (user == null) {
            //保存登陆信息
            String message = "账号不存在";
            throw new ManageException(message);
        }
        if (!user.getPassword().equals(MD5.GetMD5Code(password + user.getSalt()))) {
            //保存登陆信息
            String message = "密码错误";
            throw new ManageException(message);
        }
        request.getSession().setAttribute(LoginInfo.IS_LOGIN, true);
        request.getSession().setAttribute(LoginInfo.TOKEN, ""); //TODO token是否添加
        request.getSession().setAttribute(LoginInfo.USER_NAME, user.getName());
        request.getSession().setAttribute(LoginInfo.USER_ID, user.getId());
        user.setActivated(HouseUserContant.activated_active);
        userService.saveOrUpdate(user,password,"systemLogin");
        return user;
    }
    /**
     *  登出
     * @param username
     * @param password
     * @return
     * @throws Exception
     */
    @Transactional(noRollbackForClassName = "ManageException")
    public User logout(HttpServletRequest request, String username, String password) throws ManageException {
        Map<String, List> data = new HashMap<>();
        //判断登陆信息是否正确
        User user = userService.findByCode(username);
        if (user == null) {
            //保存登陆信息
            String message = "账号不存在";
            throw new ManageException(message);
        }
        if (!user.getPassword().equals(MD5.GetMD5Code(password + user.getSalt()))) {
            //保存登陆信息
            String message = "密码错误";
            throw new ManageException(message);
        }
        request.getSession().removeAttribute(LoginInfo.IS_LOGIN);
        request.getSession().removeAttribute(LoginInfo.TOKEN); //TODO token是否添加
        request.getSession().removeAttribute(LoginInfo.USER_NAME);
        request.getSession().removeAttribute(LoginInfo.USER_ID);
        user.setActivated(HouseUserContant.activated_offline);
        userService.saveOrUpdate(user,password,"systemLogin");
        return user;
    }
}

+ 116 - 0
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/service/user/UserService.java

@ -0,0 +1,116 @@
package com.yihu.jw.healthyhouse.service.user;
import com.yihu.jw.exception.business.ManageException;
import com.yihu.jw.healthyhouse.dao.UserDao;
import com.yihu.jw.healthyhouse.model.user.User;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.wlyy.HouseUserContant;
import com.yihu.jw.util.security.MD5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springside.modules.persistence.DynamicSpecifications;
import org.springside.modules.persistence.SearchFilter;
import javax.transaction.Transactional;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
 * @author HZY
 * @created 2018/9/18 19:48
 */
@Service
public class UserService {
    @Autowired
    private UserDao userDao;
    public User findByCode(String code){
        return userDao.findByLoginCode(code);
    }
    public User findByAccount(String username) {
        return userDao.findByName(username);
    }
    public Page<User> userList(Integer page, Integer pageSize, Map<String,String> map)throws ManageException {
        // 排序
        Sort sort = new Sort(Sort.Direction.DESC, "modifyDate");
        // 分页信息
        PageRequest pageRequest = new PageRequest(page, pageSize, sort);
        // 设置查询条件
        Map<String, SearchFilter> filters = new HashMap<String, SearchFilter>();
        // 用户名称
        String name = map.get("name");
        if (!StringUtils.isEmpty(name)) {
            filters.put("name", new SearchFilter("name", SearchFilter.Operator.LIKE, name));
        }
        // 电话号码
        String mobile = map.get("telephone");
        if (!StringUtils.isEmpty(mobile)) {
            filters.put("telephone", new SearchFilter("telephone", SearchFilter.Operator.LIKE, mobile));
        }
        // 激活状态
        filters.put("activated", new SearchFilter("activated", SearchFilter.Operator.EQ, HouseUserContant.activated_active));
        Specification<User> spec = DynamicSpecifications.bySearchFilter(filters.values(), User.class);
        return userDao.findAll(spec, pageRequest);
    }
    /**
     *
     * @param codes        待删除code
     * @param userCode     修改者code
     */
    @Transactional
    public void delete(String codes, String userCode) {
        User user = userDao.findByLoginCode(userCode);
        String userName = user.getName();
        for(String code:codes.split(",")){
            User user1 = findByCode(code);
            user1.setActivated(-1);
            user1.setModifierName(userName);
            user1.setModifier(userCode);
            userDao.save(user1);
        }
    }
    public Envelop saveOrUpdate(User user, String oldPsd, String userCode) throws ManageException {
        User loginUser = userDao.findByLoginCode(userCode);
        String userName = loginUser.getName();
        if(user.getId()==null){//保存
            //判断登陆账号是否存在
            User user1 = userDao.findByLoginCode(userCode);
            if(user1!=null){//登陆账号已存在
                throw new ManageException("该登陆账号已存在");
            }
            String salt = UUID.randomUUID().toString().replaceAll("-","");
            user.setSalt(salt);
            String password = MD5.GetMD5Code(user.getPassword() + salt);
            user.setPassword(password);
            String code = UUID.randomUUID().toString().replaceAll("-", "");
            user.setId(code);
            user.setCreator(userCode);
            user.setActivated(1);
            userDao.save(user);
            return Envelop.getSuccess("保存成功");
        }else{//修改
            User user1 = findByCode(user.getLoginCode());
            String psd = MD5.GetMD5Code(oldPsd + user1.getSalt());
            if(!user1.getPassword().equals(psd)){//判断密码是否相同
                throw new ManageException("原密码错误");
            }
            user.setModifier(userCode);
            user.setModifierName(userName);
            userDao.save(user);
            return Envelop.getSuccess("修改成功");
        }
    }
}

+ 0 - 2
svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/service/SpecialistHospitalServiceItemService.java

@ -212,8 +212,6 @@ public class SpecialistHospitalServiceItemService extends EnvelopRestEndpoint {
                    for (int j = 0;j<hospitalServiceItemDOS1.size();j++){
                        SpecialistServiceItemDO specialistServiceItemDO = hospitalServiceItemDOS1.get(j).getSpecialistServiceItemDO();
                        if (itemType.get(i).equals(specialistServiceItemDO.getItemType())){
                            System.out.println(itemType.get(i));
                            System.out.println(specialistServiceItemDO.getDiseaseItem());
                            if (type.get(z).equals(specialistServiceItemDO.getDiseaseItem())) {
                                hospitalServiceItemDOS2.add(hospitalServiceItemDOS1.get(j));
                            }

+ 27 - 18
svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/service/rehabilitation/RehabilitationManageService.java

@ -238,12 +238,17 @@ public class RehabilitationManageService {
            Integer familyFinishCount1 = rehabilitationDetailDao.findItemByDoctor(signFamilyMap.get("doctor")+"",patientCode);
            Integer familyServiceCount1 = rehabilitationDetailDao.completeServiceByDoctor(signFamilyMap.get("doctor")+"",patientCode,1);
            Integer familyUnfinishCount2 = rehabilitationDetailDao.unfinishItemByDoctor(signFamilyMap.get("doctor_health")+"",patientCode,1);
            Integer familyFinishCount2 = rehabilitationDetailDao.findItemByDoctor(signFamilyMap.get("doctor_health")+"",patientCode);
            Integer familyServiceCount2 = rehabilitationDetailDao.completeServiceByDoctor(signFamilyMap.get("doctor_health")+"",patientCode,1);
            if((signFamilyMap.get("doctor")+"").equals(signFamilyMap.get("doctor_health")+"")){
                resultMap.put("signFamilyFinishItemCount",familyFinishCount1-familyUnfinishCount1);//完成项目
                resultMap.put("signFamilyServiceRecordCount",familyServiceCount1);//服务次数
            }else{
                Integer familyUnfinishCount2 = rehabilitationDetailDao.unfinishItemByDoctor(signFamilyMap.get("doctor_health")+"",patientCode,1);
                Integer familyFinishCount2 = rehabilitationDetailDao.findItemByDoctor(signFamilyMap.get("doctor_health")+"",patientCode);
                Integer familyServiceCount2 = rehabilitationDetailDao.completeServiceByDoctor(signFamilyMap.get("doctor_health")+"",patientCode,1);
            resultMap.put("signFamilyFinishItemCount",familyFinishCount1-familyUnfinishCount1+familyFinishCount2-familyUnfinishCount2);//完成项目
            resultMap.put("signFamilyServiceRecordCount",familyServiceCount1+familyServiceCount2);//服务次数
                resultMap.put("signFamilyFinishItemCount",familyFinishCount1-familyUnfinishCount1+familyFinishCount2-familyUnfinishCount2);//完成项目
                resultMap.put("signFamilyServiceRecordCount",familyServiceCount1+familyServiceCount2);//服务次数
            }
            //基础信息
            resultMap.put("hospitalName",signFamilyMap.get("hospital_name"));
@ -678,6 +683,23 @@ public class RehabilitationManageService {
        //服务医生
        //完成项目=全部的服务项目-未完成的服务项目
        List<Map<String,Object>> serviceDoctorList = new ArrayList<>();
        //全科医生和健管师要是同一个人,就显示全科医生
        if(!generalDoctor.equals(healthDoctor)){
            if(StringUtils.isNotEmpty(healthDoctor)){
                Map<String,Object> healthDoctorMap =  new HashMap<>();
                healthDoctorMap.put("type","健管师");
                healthDoctorMap.put("doctorName",healthDoctorName);
                healthDoctorMap.put("doctorCode",healthDoctor);
                Integer healthUnfinishCount = rehabilitationDetailDao.unfinishItemByDoctor(healthDoctor,patientCode,1);
                Integer healthFinishCount = rehabilitationDetailDao.findItemByDoctor(healthDoctor,patientCode);
                Integer healthServiceCount = rehabilitationDetailDao.completeServiceByDoctor(healthDoctor,patientCode,1);
                healthDoctorMap.put("finishedItem",healthFinishCount-healthUnfinishCount);
                healthDoctorMap.put("serviceCount",healthServiceCount);
                serviceDoctorList.add(healthDoctorMap);
            }
        }
        if(StringUtils.isNotEmpty(generalDoctor)){
            Map<String,Object> generalDoctorMap =  new HashMap<>();
@ -691,19 +713,6 @@ public class RehabilitationManageService {
            generalDoctorMap.put("serviceCount",generalServiceCount);
            serviceDoctorList.add(generalDoctorMap);
        }
        if(StringUtils.isNotEmpty(healthDoctor)){
            Map<String,Object> healthDoctorMap =  new HashMap<>();
            healthDoctorMap.put("type","健管师");
            healthDoctorMap.put("doctorName",healthDoctorName);
            healthDoctorMap.put("doctorCode",healthDoctor);
            Integer healthUnfinishCount = rehabilitationDetailDao.unfinishItemByDoctor(healthDoctor,patientCode,1);
            Integer healthFinishCount = rehabilitationDetailDao.findItemByDoctor(healthDoctor,patientCode);
            Integer healthServiceCount = rehabilitationDetailDao.completeServiceByDoctor(healthDoctor,patientCode,1);
            healthDoctorMap.put("finishedItem",healthFinishCount-healthUnfinishCount);
            healthDoctorMap.put("serviceCount",healthServiceCount);
            serviceDoctorList.add(healthDoctorMap);
        }
//        String specialistRelationSql = "select * from wlyy_specialist.wlyy_specialist_patient_relation where patient='"+patientCode+"' and sign_status='1' and status >=0  ";
        String specialistRelationSql = "select DISTINCT d.doctor,d.doctor_name from wlyy_specialist.wlyy_rehabilitation_plan_detail d LEFT JOIN wlyy_specialist.wlyy_patient_rehabilitation_plan p on d.plan_id=p.id where d.type=2 and  p.patient='"+patientCode+"'";