Selaa lähdekoodia

Merge branch 'dev' of LiTaohong/wlyy2.0 into dev

LiTaohong 5 vuotta sitten
vanhempi
commit
c1327c8267
13 muutettua tiedostoa jossa 1088 lisäystä ja 65 poistoa
  1. 14 0
      business/base-service/src/main/java/com/yihu/jw/config/JpaConfig.java
  2. 20 0
      business/base-service/src/main/java/com/yihu/jw/utils/EntityUtils.java
  3. 59 1
      common/common-entity/src/main/java/com/yihu/jw/entity/base/patient/BasePatientDO.java
  4. 192 0
      common/common-entity/src/main/java/com/yihu/jw/entity/hospital/prescription/WlyyPatientExpressageAddrDO.java
  5. 7 0
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/hospital/BaseHospitalRequestMapping.java
  6. 196 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/hospital/prescription/WlyyPatientExpressageAddrVO.java
  7. 184 60
      server/svr-authentication/src/main/java/com/yihu/jw/security/core/userdetails/jdbc/WlyyUserDetailsService.java
  8. 182 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/model/WlyyUserDetails.java
  9. 62 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/WlyyTokenGranter.java
  10. 6 4
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java
  11. 106 0
      svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/controller/expressage/WlyyPatientExpressageAddrEndpoint.java
  12. 21 0
      svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/dao/WlyyPatientExpressageAddrDao.java
  13. 39 0
      svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/service/WlyyPatientExpressageAddrService.java

+ 14 - 0
business/base-service/src/main/java/com/yihu/jw/config/JpaConfig.java

@ -0,0 +1,14 @@
package com.yihu.jw.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.JpaTransactionManager;
@Configuration
public class JpaConfig {
    @Bean
    public JpaTransactionManager transactionManager(){
        return new JpaTransactionManager();
    }
}

+ 20 - 0
business/base-service/src/main/java/com/yihu/jw/utils/EntityUtils.java

@ -0,0 +1,20 @@
package com.yihu.jw.utils;
import com.fasterxml.jackson.databind.ObjectMapper;
public class EntityUtils {
    protected static ObjectMapper objectMapper = new ObjectMapper();
    public static <T> T jsonToEntity(String json,Class<T> target){
        T entity = null;
        try {
            entity  = objectMapper.readValue(json,target);
        } catch (Exception e) {
           throw new RuntimeException("Json字符串转换成【"+target.getName()+"】实体类异常:" + e.getMessage());
        }
        return entity;
    }
}

+ 59 - 1
common/common-entity/src/main/java/com/yihu/jw/entity/base/patient/BasePatientDO.java

@ -13,7 +13,6 @@ import java.util.Date;
 * 居民信息(居民就是患者)实体
 *
 * @author Administrator on  2018年09月05日
 *
 */
@Entity
@Table(name = "base_patient")
@ -181,6 +180,18 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
     */
    private String openid;
    /**
     * i健康微信编号
     */
    private String ihealthOpenid;
    /**
     * i健康微信编号添加时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    private Date ihealthOpenidTime;
    /**
     * 用户状态:1正常,0禁用,-1恶意注册,2审核中
     */
@ -252,6 +263,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getSaasId() {
        return saasId;
    }
    public void setSaasId(String saasId) {
        this.saasId = saasId;
    }
@ -260,6 +272,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getIdcard() {
        return idcard;
    }
    public void setIdcard(String idcard) {
        this.idcard = idcard;
    }
@ -268,6 +281,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
@ -276,6 +290,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getSalt() {
        return salt;
    }
    public void setSalt(String salt) {
        this.salt = salt;
    }
@ -284,6 +299,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
@ -292,6 +308,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
@ -300,6 +317,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public Integer getSex() {
        return sex;
    }
    public void setSex(Integer sex) {
        this.sex = sex;
    }
@ -308,6 +326,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getMobile() {
        return mobile;
    }
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
@ -316,6 +335,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getPhoto() {
        return photo;
    }
    public void setPhoto(String photo) {
        this.photo = photo;
    }
@ -324,6 +344,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getProvinceCode() {
        return provinceCode;
    }
    public void setProvinceCode(String provinceCode) {
        this.provinceCode = provinceCode;
    }
@ -332,6 +353,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getProvinceName() {
        return provinceName;
    }
    public void setProvinceName(String provinceName) {
        this.provinceName = provinceName;
    }
@ -340,6 +362,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getCityCode() {
        return cityCode;
    }
    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }
@ -348,6 +371,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getCityName() {
        return cityName;
    }
    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
@ -356,6 +380,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getTownCode() {
        return townCode;
    }
    public void setTownCode(String townCode) {
        this.townCode = townCode;
    }
@ -364,6 +389,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getTownName() {
        return townName;
    }
    public void setTownName(String townName) {
        this.townName = townName;
    }
@ -372,6 +398,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getStreetCode() {
        return streetCode;
    }
    public void setStreetCode(String streetCode) {
        this.streetCode = streetCode;
    }
@ -380,6 +407,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getStreetName() {
        return streetName;
    }
    public void setStreetName(String streetName) {
        this.streetName = streetName;
    }
@ -415,6 +443,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getPoints() {
        return points;
    }
    public void setPoints(String points) {
        this.points = points;
    }
@ -423,6 +452,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getRecordAmount() {
        return recordAmount;
    }
    public void setRecordAmount(String recordAmount) {
        this.recordAmount = recordAmount;
    }
@ -431,6 +461,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getOpenid() {
        return openid;
    }
    public void setOpenid(String openid) {
        this.openid = openid;
    }
@ -439,6 +470,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getPatientStatus() {
        return patientStatus;
    }
    public void setPatientStatus(String patientStatus) {
        this.patientStatus = patientStatus;
    }
@ -447,6 +479,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getMobileRemarks() {
        return mobileRemarks;
    }
    public void setMobileRemarks(String mobileRemarks) {
        this.mobileRemarks = mobileRemarks;
    }
@ -455,6 +488,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public Date getOpenidTime() {
        return openidTime;
    }
    public void setOpenidTime(Date openidTime) {
        this.openidTime = openidTime;
    }
@ -463,6 +497,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getPrincipalCode() {
        return principalCode;
    }
    public void setPrincipalCode(String principalCode) {
        this.principalCode = principalCode;
    }
@ -471,6 +506,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public Integer getStandardStatus() {
        return standardStatus;
    }
    public void setStandardStatus(Integer standardStatus) {
        this.standardStatus = standardStatus;
    }
@ -479,6 +515,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getUnionid() {
        return unionid;
    }
    public void setUnionid(String unionid) {
        this.unionid = unionid;
    }
@ -487,6 +524,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getDel() {
        return del;
    }
    public void setDel(String del) {
        this.del = del;
    }
@ -494,6 +532,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public String getRemark() {
        return remark;
    }
    @Column(name = "remark")
    public void setRemark(String remark) {
        this.remark = remark;
@ -555,6 +594,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public void setLiveStreetCode(String liveStreetCode) {
        this.liveStreetCode = liveStreetCode;
    }
    @Column(name = "live_street_name")
    public String getLiveStreetName() {
        return liveStreetName;
@ -603,4 +643,22 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    public void setLoginDate(Date loginDate) {
        this.loginDate = loginDate;
    }
    @Column(name = "ihealth_openid")
    public String getIhealthOpenid() {
        return ihealthOpenid;
    }
    public void setIhealthOpenid(String ihealthOpenid) {
        this.ihealthOpenid = ihealthOpenid;
    }
    @Column(name = "ihealth_openid_time")
    public Date getIhealthOpenidTime() {
        return ihealthOpenidTime;
    }
    public void setIhealthOpenidTime(Date ihealthOpenidTime) {
        this.ihealthOpenidTime = ihealthOpenidTime;
    }
}

+ 192 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/hospital/prescription/WlyyPatientExpressageAddrDO.java

@ -0,0 +1,192 @@
package com.yihu.jw.entity.hospital.prescription;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
* 居民收获地址实体
*
* @author Administrator on  2019年06月12日
*
*/
@Entity
@Table(name = "wlyy_patient_expressage_addr")
public class WlyyPatientExpressageAddrDO extends UuidIdentityEntityWithOperator {
    /**
	 * 居民标识
	 */
	private String patient;
    /**
	 * 省编码
	 */
	private String provinceCode;
    /**
	 * 省名称
	 */
	private String provinceName;
    /**
	 * 市编码
	 */
	private String cityCode;
    /**
	 * 城市名称
	 */
	private String cityName;
    /**
	 * 区县编码
	 */
	private String townCode;
    /**
	 * 区县名称
	 */
	private String townName;
    /**
	 * 街道编码
	 */
	private String streetCode;
    /**
	 * 街道名称
	 */
	private String streetName;
    /**
	 * 居住居委会代码
	 */
	private String committeeCode;
    /**
	 * 居住居委会名称
	 */
	private String committeeName;
    /**
	 * 具体详细地址
	 */
	private String address;
    /**
	 * 作废标识,1正常,0作废
	 */
	private String del;
	@Column(name = "patient")
    public String getPatient() {
        return patient;
    }
    public void setPatient(String patient) {
        this.patient = patient;
    }
	@Column(name = "province_code")
    public String getProvinceCode() {
        return provinceCode;
    }
    public void setProvinceCode(String provinceCode) {
        this.provinceCode = provinceCode;
    }
	@Column(name = "province_name")
    public String getProvinceName() {
        return provinceName;
    }
    public void setProvinceName(String provinceName) {
        this.provinceName = provinceName;
    }
	@Column(name = "city_code")
    public String getCityCode() {
        return cityCode;
    }
    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }
	@Column(name = "city_name")
    public String getCityName() {
        return cityName;
    }
    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
	@Column(name = "town_code")
    public String getTownCode() {
        return townCode;
    }
    public void setTownCode(String townCode) {
        this.townCode = townCode;
    }
	@Column(name = "town_name")
    public String getTownName() {
        return townName;
    }
    public void setTownName(String townName) {
        this.townName = townName;
    }
	@Column(name = "street_code")
    public String getStreetCode() {
        return streetCode;
    }
    public void setStreetCode(String streetCode) {
        this.streetCode = streetCode;
    }
	@Column(name = "street_name")
    public String getStreetName() {
        return streetName;
    }
    public void setStreetName(String streetName) {
        this.streetName = streetName;
    }
	@Column(name = "committee_code")
    public String getCommitteeCode() {
        return committeeCode;
    }
    public void setCommitteeCode(String committeeCode) {
        this.committeeCode = committeeCode;
    }
	@Column(name = "committee_name")
    public String getCommitteeName() {
        return committeeName;
    }
    public void setCommitteeName(String committeeName) {
        this.committeeName = committeeName;
    }
	@Column(name = "address")
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
	@Column(name = "del")
    public String getDel() {
        return del;
    }
    public void setDel(String del) {
        this.del = del;
    }
}

+ 7 - 0
common/common-request-mapping/src/main/java/com/yihu/jw/rm/hospital/BaseHospitalRequestMapping.java

@ -190,4 +190,11 @@ public class BaseHospitalRequestMapping {
        public static final String PREFIX  = "/expressage";
    }
    /**
     * 居民收获地址
     */
    public static class WlyyPatientExpressageAddr extends Basic {
        public static final String PREFIX  = "/expressageAddr";
    }
}

+ 196 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/hospital/prescription/WlyyPatientExpressageAddrVO.java

@ -0,0 +1,196 @@
package com.yihu.jw.restmodel.hospital.prescription;
import com.yihu.jw.restmodel.UuidIdentityVOWithOperator;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
/**
 * 
 * 居民收获地址vo
 * 
 * @version 
 * <pre>
 * Author	Version		Date		Changes
 * Administrator 	1.0  2019年06月12日 Created
 *
 * </pre>
 * @since 1.
 */
@ApiModel(value = "WlyyPatientExpressageAddrVO", description = "居民收获地址")
public class WlyyPatientExpressageAddrVO extends UuidIdentityVOWithOperator {
    /**
	 * 居民标识
	 */
	@ApiModelProperty(value = "居民标识", example = "模块1")
    private String patient;
    /**
	 * 省编码
	 */
	@ApiModelProperty(value = "省编码", example = "模块1")
    private String provinceCode;
    /**
	 * 省名称
	 */
	@ApiModelProperty(value = "省名称", example = "模块1")
    private String provinceName;
    /**
	 * 市编码
	 */
	@ApiModelProperty(value = "市编码", example = "模块1")
    private String cityCode;
    /**
	 * 城市名称
	 */
	@ApiModelProperty(value = "城市名称", example = "模块1")
    private String cityName;
    /**
	 * 区县编码
	 */
	@ApiModelProperty(value = "区县编码", example = "模块1")
    private String townCode;
    /**
	 * 区县名称
	 */
	@ApiModelProperty(value = "区县名称", example = "模块1")
    private String townName;
    /**
	 * 街道编码
	 */
	@ApiModelProperty(value = "街道编码", example = "模块1")
    private String streetCode;
    /**
	 * 街道名称
	 */
	@ApiModelProperty(value = "街道名称", example = "模块1")
    private String streetName;
    /**
	 * 居住居委会代码
	 */
	@ApiModelProperty(value = "居住居委会代码", example = "模块1")
    private String committeeCode;
    /**
	 * 居住居委会名称
	 */
	@ApiModelProperty(value = "居住居委会名称", example = "模块1")
    private String committeeName;
    /**
	 * 具体详细地址
	 */
	@ApiModelProperty(value = "具体详细地址", example = "模块1")
    private String address;
    /**
	 * 作废标识,1正常,0作废
	 */
	@ApiModelProperty(value = "作废标识,1正常,0作废", example = "模块1")
    private String del;
    public String getPatient() {
        return patient;
    }
    public void setPatient(String patient) {
        this.patient = patient;
    }
    public String getProvinceCode() {
        return provinceCode;
    }
    public void setProvinceCode(String provinceCode) {
        this.provinceCode = provinceCode;
    }
    public String getProvinceName() {
        return provinceName;
    }
    public void setProvinceName(String provinceName) {
        this.provinceName = provinceName;
    }
    public String getCityCode() {
        return cityCode;
    }
    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }
    public String getCityName() {
        return cityName;
    }
    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
    public String getTownCode() {
        return townCode;
    }
    public void setTownCode(String townCode) {
        this.townCode = townCode;
    }
    public String getTownName() {
        return townName;
    }
    public void setTownName(String townName) {
        this.townName = townName;
    }
    public String getStreetCode() {
        return streetCode;
    }
    public void setStreetCode(String streetCode) {
        this.streetCode = streetCode;
    }
    public String getStreetName() {
        return streetName;
    }
    public void setStreetName(String streetName) {
        this.streetName = streetName;
    }
    public String getCommitteeCode() {
        return committeeCode;
    }
    public void setCommitteeCode(String committeeCode) {
        this.committeeCode = committeeCode;
    }
    public String getCommitteeName() {
        return committeeName;
    }
    public void setCommitteeName(String committeeName) {
        this.committeeName = committeeName;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public String getDel() {
        return del;
    }
    public void setDel(String del) {
        this.del = del;
    }
}

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

@ -1,10 +1,14 @@
package com.yihu.jw.security.core.userdetails.jdbc;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.security.core.userdetails.SaltUser;
import com.yihu.jw.security.model.WlyyUserDetails;
import com.yihu.jw.security.model.WlyyUserSimple;
import com.yihu.jw.util.http.HttpClientKit;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
@ -16,6 +20,8 @@ import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.provider.ClientDetails;
import org.springframework.security.oauth2.provider.ClientDetailsService;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@ -36,6 +42,13 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
    private static final String DEFAULT_DOCTOR_DETAILS_STATEMENT = "SELECT * FROM base_doctor d WHERE d.mobile = ? OR d.idcard = ?";
    private static final String DEFAULT_PATIENT_DETAILS_STATEMENT = "SELECT * FROM base_patient p WHERE p.mobile = ? OR p.idcard = ?";
    private static final String DEFAULT_PATIENT_DETAILS_ID_STATEMENT = "SELECT * FROM base_patient p WHERE p.id = ? ";
    private static final String DEFAULT_PATIENT_INSERT_STATEMENT =
            "INSERT into base_patient (`id`,`ihealth_openid`,`ihealth_openid_time`,`idcard`,`password`,`salt`,`name`,`birthday`,`sex`,`mobile`," +
                    "`province_code`,`province_name`,`city_code`,`city_name`,`town_code`,`town_name`,`street_code`,`street_name`,`address`," +
                    "`del`,`locked`,`enabled`,`login_failure_count`,`login_date`) " +
                    " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
    private static final String BespeakRegist = "bespeakRegist:";
@ -48,6 +61,13 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
    @Value("${user.tryLoginTimes}")
    private Integer tryLoginTimes;//失败重试次数
    @Value("${iHealth.user-info-uri}")
    private String iHealthUserInfoUrl;//失败重试次数
    @Autowired
    private ClientDetailsService clientDetailsService;
    public WlyyUserDetailsService(DataSource dataSource) {
        this.setDataSource(dataSource);
    }
@ -56,6 +76,7 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
     * 用户登录判读接口
     * 判断loginType查找用户信息
     * 用户类型 1或默认为user,2:医生登录,3:患者登录
     *
     * @param username
     * @return
     * @throws UsernameNotFoundException
@ -80,61 +101,128 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
    }
    public void unlocked(String username){
    public void unlocked(String username) {
        String loginType = getLogintype();
        if(StringUtils.isBlank(loginType)||"1".equals(loginType)){ //1或默认查找user表,为平台管理员账号
        if (StringUtils.isBlank(loginType) || "1".equals(loginType)) { //1或默认查找user表,为平台管理员账号
            //解除锁定
            this.getJdbcTemplate().update("update base_user u set login_failure_count = 0, u.locked = 0 where u.username = ? or u.mobile = ? or u.idcard = ?", username, username, username);
        }else if("2".equals(loginType)){//2.为医生账号
        } else if ("2".equals(loginType)) {//2.为医生账号
            //解除锁定
            this.getJdbcTemplate().update("update base_doctor d set d.login_failure_count = 0, d.locked = 0 where d.mobile = ? or d.idcard = ?",username, username);
        }else if("3".equals(loginType)){ //3.患者账号
            this.getJdbcTemplate().update("update base_doctor d set d.login_failure_count = 0, d.locked = 0 where d.mobile = ? or d.idcard = ?", username, username);
        } else if ("3".equals(loginType)) { //3.患者账号
            //解除锁定
            this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = 5, p.locked = 0 where p.mobile = ? or p.idcard = ?",username, username);
            this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = 5, p.locked = 0 where p.mobile = ? or p.idcard = ?", username, username);
        } //...
    }
    /**
     * 用户登录判读接口
     * 判断loginType查找用户信息
     * 用户类型 1或默认为user,2:医生登录,3:患者登录
     * 用户类型 1或默认为user,2:医生登录,3:患者登录,4:i健康系统-患者登录(i健康患者可以不注册直接登录互联网系统,首次使用,根据i健康居民code去i健康查询居民信息,然后保存到base.base_patient)
     *
     * @param username
     * @return
     */
    public  List<WlyyUserDetails> getWlyyUserDetails(String username){
    public List<WlyyUserDetails> getWlyyUserDetails(String username) {
        String loginType = getLogintype();
        List<WlyyUserDetails> users = null;
        //1或默认查找user表,为平台管理员账号
        if(StringUtils.isBlank(loginType)||"1".equals(loginType)){
        if (StringUtils.isBlank(loginType) || "1".equals(loginType)) {
            users = this.getJdbcTemplate().query(DEFAULT_USER_DETAILS_STATEMENT, new BeanPropertyRowMapper(WlyyUserDetails.class), username, username, username);
            //2.为医生登录账号
        }else if("2".equals(loginType)){
        } else if ("2".equals(loginType)) {
            users = this.getJdbcTemplate().query(DEFAULT_DOCTOR_DETAILS_STATEMENT, new BeanPropertyRowMapper(WlyyUserDetails.class), username, username);
            //3.患者登录
        }else if("3".equals(loginType)){
        } else if ("3".equals(loginType)) {
            //查找是否存在预注册 用户
            String userName = redisTemplate.opsForValue().get(BespeakRegist + username);
            if(StringUtils.isNotBlank(userName)){
            if (StringUtils.isNotBlank(userName)) {
                //保存到数据库
                this.getJdbcTemplate().execute("update base_patient set del=1 where mobile='"+username+"'");
                this.getJdbcTemplate().execute("update base_patient set del=1 where mobile='" + username + "'");
                redisTemplate.opsForValue().get(BespeakRegist + username);
                redisTemplate.delete(BespeakRegist+username);
                redisTemplate.delete(BespeakRegist + username);
            }
            users = this.getJdbcTemplate().query(DEFAULT_PATIENT_DETAILS_STATEMENT, new BeanPropertyRowMapper(WlyyUserDetails.class), username, username);
        }//..
            // 去i健康查询用户
        }else if("4".equals(loginType)){
            users = this.getJdbcTemplate().query(DEFAULT_PATIENT_DETAILS_ID_STATEMENT, new BeanPropertyRowMapper(WlyyUserDetails.class), username);
            if ((null == users || users.size() == 0) && "4".equals(loginType)) {
                List<NameValuePair> params = new ArrayList<>();
                params.add(new BasicNameValuePair("clientId", getClientId()));
                ClientDetails clientDetails = clientDetailsService.loadClientByClientId(getClientId());
                params.add(new BasicNameValuePair("clientSecret", clientDetails.getClientSecret()));
                params.add(new BasicNameValuePair("code", username));
                params.add(new BasicNameValuePair("openid", getOpenid()));
                String res = HttpClientKit.post(iHealthUserInfoUrl, params, "UTF-8");
                JSONObject patient = JSONObject.parseObject(res);
                if(patient.getInteger("status") == -1){
                    logger.error("去i健康查询用户信息失败:" + patient.getString("error"));
                    return users;
                }
                try {
                    this.getJdbcTemplate().update(DEFAULT_PATIENT_INSERT_STATEMENT,
                            new Object[]{patient.getString("code"),
                                    patient.getString("openid"),
                                    new Date(),
                                    patient.getString("idcard"),
                                    patient.getString("password"),
                                    patient.getString("salt"),
                                    patient.getString("name"),
                                    patient.getDate("birthday"),
                                    patient.getInteger("sex"),
                                    patient.getString("mobile"),
                                    patient.getString("province"),
                                    patient.getString("provinceName"),
                                    patient.getString("city"),
                                    patient.getString("cityName"),
                                    patient.getString("town"),
                                    patient.getString("townName"),
                                    patient.getString("street"),
                                    patient.getString("streetName"),
                                    patient.getString("address"),
                                    1,
                                    0,
                                    1,
                                    0,
                                    new Date()
                            }
                    );
                }catch (Exception e){
                    e.printStackTrace();
                }
                WlyyUserDetails user = new WlyyUserDetails();
                user.setName(patient.getString("name"));
                user.setPassword(patient.getString("password"));
                if(patient.getInteger("sex") == 1){
                    user.setGender(WlyyUserDetails.Gender.male);
                }else if(patient.getInteger("sex") == 2){
                    user.setGender(WlyyUserDetails.Gender.female);
                }
                user.setId(username);
                user.setIdcard(patient.getString("idcard"));
                user.setMobile(patient.getString("mobile"));
                user.setEnabled(true);
                user.setLocked(false);
                user.setLockedDate(null);
                users.add(user);
            }
        }
        return users;
    }
    /**
     * 设置用户登录时间,返回登录信息
     * 判断loginType,用户类型 1或默认为user,2:医生登录,3:患者登录
     *
     * @param username
     * @return
     * @throws UsernameNotFoundException
     */
    public WlyyUserSimple authSuccess (String username) throws UsernameNotFoundException {
    public WlyyUserSimple authSuccess(String username) throws UsernameNotFoundException {
        //加载用户简略信息
        List<WlyyUserSimple> users = getWlyyUserSimple(username);
        if (users == null || users.size() == 0) {
@ -143,16 +231,16 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
        return users.get(0);
    }
    public String authFailure () throws UsernameNotFoundException {
    public String authFailure() throws UsernameNotFoundException {
        //获取失败次数
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String username = request.getParameter("username");
        Map<String,Object> map = getLoginFailureCount(username);
        Integer loginFailureCount = Integer.valueOf(map.get("login_failure_count").toString());
        Map<String, Object> map = getLoginFailureCount(username);
        Integer loginFailureCount = null == map.get("login_failure_count") ? 0 : Integer.valueOf(map.get("login_failure_count").toString());
        Object timeObj = map.get("last_login_failure_time");
        if(timeObj == null){
        if (timeObj == null) {
            loginFailureCount = 0;
        }else{
        } else {
            Timestamp timestamp = (Timestamp) timeObj;
            //判断是否得重置登陆次数
            Date date = new Date(timestamp.getTime());
@ -161,49 +249,50 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
                loginFailureCount = 0;
            }
        }
        loginFailureCount ++;
        loginFailureCount++;
        if (loginFailureCount >= tryLoginTimes) {
            locked(username);
            return "账号已被锁定,请"+autoUnlockTime+"分钟后重试!";
            return "账号已被锁定,请" + autoUnlockTime + "分钟后重试!";
        } else {
            addFailureCount(username,loginFailureCount);
            addFailureCount(username, loginFailureCount);
            return "账号或密码错误,还可以再试" + (tryLoginTimes - loginFailureCount) + "次!";
        }
    }
    /**
     * 获取失败次数 返回 map  key1: login_failure_count   失败次数
     *                       key2: last_login_failure_time 上次登录失败时间 /可能为null
     * key2: last_login_failure_time 上次登录失败时间 /可能为null
     *
     * @param username
     * @return
     */
    public Map<String, Object> getLoginFailureCount(String username){
    public Map<String, Object> getLoginFailureCount(String username) {
        Map<String, Object> result = new HashMap<>();
        String loginType = getLogintype();
        if(StringUtils.isBlank(loginType)||"1".equals(loginType)){ //1或默认查找user表,为平台管理员账号
        if (StringUtils.isBlank(loginType) || "1".equals(loginType)) { //1或默认查找user表,为平台管理员账号
            result = this.getJdbcTemplate().queryForMap("select u.login_failure_count,u.last_login_failure_time from base_user u where u.username = ? or u.mobile = ? or u.idcard = ?", username, username, username);
        }else if("2".equals(loginType)){//2.为医生账号
        } else if ("2".equals(loginType)) {//2.为医生账号
            result = this.getJdbcTemplate().queryForMap("select d.login_failure_count,d.last_login_failure_time from base_doctor d where d.mobile = ? or d.idcard = ?", username, username);
        }else if("3".equals(loginType)){ //3.患者账号
            result = this.getJdbcTemplate().queryForMap("select p.login_failure_count,p.last_login_failure_time from base_patient p where p.mobile = ? or p.idcard = ?",username, username);
        } else if ("3".equals(loginType)) { //3.患者账号
            result = this.getJdbcTemplate().queryForMap("select p.login_failure_count,p.last_login_failure_time from base_patient p where p.mobile = ? or p.idcard = ?", username, username);
        }
        return result;
    }
    /**
     * 锁定账号
     *
     * @param username
     */
    public void locked(String username){
    public void locked(String username) {
        String loginType = getLogintype();
        if(StringUtils.isBlank(loginType)||"1".equals(loginType)){ //1或默认查找user表,为平台管理员账号
        if (StringUtils.isBlank(loginType) || "1".equals(loginType)) { //1或默认查找user表,为平台管理员账号
            //账号锁定
            this.getJdbcTemplate().update("update base_user u set u.login_failure_count = 5, u.locked = 1, u.locked_date = ? where u.username = ? or u.mobile = ? or u.idcard = ?", new Date(), username, username, username);
        }else if("2".equals(loginType)){//2.为医生账号
        } else if ("2".equals(loginType)) {//2.为医生账号
            //账号锁定
            this.getJdbcTemplate().update("update base_doctor d set d.login_failure_count = 5, d.locked = 1, d.locked_date = ? where d.mobile = ? or d.idcard = ?", new Date(), username, username);
        }else if("3".equals(loginType)){ //3.患者账号
        } else if ("3".equals(loginType)) { //3.患者账号
            //账号锁定
            this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = 5, p.locked = 1, p.locked_date = ?  where p.mobile = ? or p.idcard = ?", new Date(), username, username);
        } //...
@ -211,20 +300,21 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
    /**
     * 更新登录失败次数
     *
     * @param username
     * @param loginFailureCount
     */
    public void addFailureCount(String username,Integer loginFailureCount){
    public void addFailureCount(String username, Integer loginFailureCount) {
        String loginType = getLogintype();
        if(StringUtils.isBlank(loginType)||"1".equals(loginType)){ //1或默认查找user表,为平台管理员账号
        if (StringUtils.isBlank(loginType) || "1".equals(loginType)) { //1或默认查找user表,为平台管理员账号
            //更新失败次数
            this.getJdbcTemplate().update("update base_user u set u.login_failure_count = ? ,u.last_login_failure_time = ? where u.username = ? or u.mobile = ? or u.idcard = ?", loginFailureCount,new Date(), username, username, username);
        }else if("2".equals(loginType)){//2.为医生账号
            this.getJdbcTemplate().update("update base_user u set u.login_failure_count = ? ,u.last_login_failure_time = ? where u.username = ? or u.mobile = ? or u.idcard = ?", loginFailureCount, new Date(), username, username, username);
        } else if ("2".equals(loginType)) {//2.为医生账号
            //更新失败次数
            this.getJdbcTemplate().update("update base_doctor d set d.login_failure_count = ?, d.last_login_failure_time = ?  where d.mobile = ? or d.idcard = ?", loginFailureCount,new Date(), username, username);
        }else if("3".equals(loginType)){ //3.患者账号
            this.getJdbcTemplate().update("update base_doctor d set d.login_failure_count = ?, d.last_login_failure_time = ?  where d.mobile = ? or d.idcard = ?", loginFailureCount, new Date(), username, username);
        } else if ("3".equals(loginType)) { //3.患者账号
            //更新失败次数
            this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = ? ,p.last_login_failure_time = ? where p.mobile = ? or p.idcard = ?", loginFailureCount,new Date(),username, username);
            this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = ? ,p.last_login_failure_time = ? where p.mobile = ? or p.idcard = ?", loginFailureCount, new Date(), username, username);
        } //...
    }
@ -237,40 +327,46 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
    /**
     * 设置用户登录时间,返回登录信息
     * 判断loginType,用户类型 1或默认为user,2:医生登录,3:患者登录
     *
     * @param username
     * @return
     */
    public List<WlyyUserSimple> getWlyyUserSimple(String username){
    public List<WlyyUserSimple> getWlyyUserSimple(String username) {
        String loginType = getLogintype();
        List<WlyyUserSimple> users = null;
        //1或默认查找user表,为平台管理员账号
        if(StringUtils.isBlank(loginType)||"1".equals(loginType)){
        if (StringUtils.isBlank(loginType) || "1".equals(loginType)) {
            //更新登录时间
            this.getJdbcTemplate().update("update base_user u set u.login_failure_count = 0, u.login_date = ? where u.username = ? or u.mobile = ? or u.idcard = ?", new Date(), username, username, username);
            users = this.getJdbcTemplate().query(DEFAULT_USER_DETAILS_STATEMENT, new BeanPropertyRowMapper(WlyyUserSimple.class), username, username, username);
            //2.为医生登录账号
        }else if("2".equals(loginType)){
        } else if ("2".equals(loginType)) {
            //更新登录时间
            this.getJdbcTemplate().update("update base_doctor d set d.login_failure_count = 0, d.login_date = ? where d.mobile = ? or d.idcard = ?", new Date(), username, username);
            users = this.getJdbcTemplate().query(DEFAULT_DOCTOR_DETAILS_STATEMENT, new BeanPropertyRowMapper(WlyyUserSimple.class), username, username);
            //3.患者登录
        }else if("3".equals(loginType)){
        } else if ("3".equals(loginType)) {
            //更新登录时间
            this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = 0, p.login_date = ? where p.mobile = ? or p.idcard = ?", new Date(), username, username);
            users = this.getJdbcTemplate().query(DEFAULT_PATIENT_DETAILS_STATEMENT, new BeanPropertyRowMapper(WlyyUserSimple.class), username, username);
        } //...
        } else if("4".equals(loginType)){
            //更新登录时间
            this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = 0, p.login_date = ? where p.mobile = ? or p.idcard = ?", new Date(), username, username);
            users = this.getJdbcTemplate().query(DEFAULT_PATIENT_DETAILS_ID_STATEMENT, new BeanPropertyRowMapper(WlyyUserSimple.class), username);
        }
        return users;
    }
    /**
     * 获取用户登录类型
     *
     * @return
     */
    public String getLogintype(){
    public String getLogintype() {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
@ -279,26 +375,54 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
        return loginType;
    }
    /**
     * 获取i健康用户登录openid型
     *
     * @return
     */
    public String getOpenid() {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String openid = request.getParameter("openid");
        return openid;
    }
    /**
     * 获取i健康用户登录openid型
     *
     * @return
     */
    public String getClientId() {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    public boolean setRolePhth(String loginType, OAuth2AccessToken token, String id, StringRedisTemplate redisTemplate){
        String clientId = request.getParameter("client_id");
        if(org.apache.commons.lang.StringUtils.isBlank(loginType)||"1".equals(loginType)){ //1或默认查找user表,为平台管理员账号
            String key = "wlyy2:auth:token:"+token.getValue();
            redisTemplate.opsForValue().set(key,"/**");
            redisTemplate.expire(key,token.getExpiresIn(), TimeUnit.SECONDS);
        }else if("2".equals(loginType)){//2.为医生账号
        return clientId;
    }
    public boolean setRolePhth(String loginType, OAuth2AccessToken token, String id, StringRedisTemplate redisTemplate) {
        }else if("3".equals(loginType)){ //3.患者账号
            String key = "wlyy2:auth:token:"+token.getValue();
            redisTemplate.opsForValue().set(key,"/**");
            redisTemplate.expire(key,token.getExpiresIn(), TimeUnit.SECONDS);
        }else{
        if (org.apache.commons.lang.StringUtils.isBlank(loginType) || "1".equals(loginType)) { //1或默认查找user表,为平台管理员账号
            String key = "wlyy2:auth:token:" + token.getValue();
            redisTemplate.opsForValue().set(key, "/**");
            redisTemplate.expire(key, token.getExpiresIn(), TimeUnit.SECONDS);
        } else if ("2".equals(loginType)) {//2.为医生账号
        } else if ("3".equals(loginType) || "4".equals(loginType)) { //3.患者账号
            String key = "wlyy2:auth:token:" + token.getValue();
            redisTemplate.opsForValue().set(key, "/**");
            redisTemplate.expire(key, token.getExpiresIn(), TimeUnit.SECONDS);
        } else {
            return false;
        }
        return true;
    }
    public void updateOpenId(String openid,String userId){
        this.getJdbcTemplate().update("update base_patient p set p.openid = ? where p.id= ?",openid ,userId);
    public void updateOpenId(String openid, String userId) {
        this.getJdbcTemplate().update("update base_patient p set p.openid = ? where p.id= ?", openid, userId);
    }
}

+ 182 - 0
server/svr-authentication/src/main/java/com/yihu/jw/security/model/WlyyUserDetails.java

@ -1,5 +1,8 @@
package com.yihu.jw.security.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import javax.persistence.Column;
import java.io.Serializable;
import java.util.Date;
@ -58,6 +61,161 @@ public class WlyyUserDetails implements Serializable {
    //登陆失败次数
    private Integer loginFailureCount;
    /**
     * 生日
     */
//	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    private Date birthday;
    // 性別,1男,2女
    private Integer sex;
    /**
     * 省代码
     */
    private String provinceCode;
    /**
     * 省名称
     */
    private String provinceName;
    /**
     * 市代码
     */
    private String cityCode;
    /**
     * 市名称
     */
    private String cityName;
    /**
     * 区县代码
     */
    private String townCode;
    /**
     * 区县名称
     */
    private String townName;
    /**
     * 街道代码
     */
    private String streetCode;
    /**
     * 街道名称
     */
    private String streetName;
    /**
     * 地址
     */
    private String address;
    /**
     * i健康微信编号
     */
    private String ihealthOpenid;
    /**
     * i健康微信编号添加时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    private Date ihealthOpenidTime;
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public String getProvinceCode() {
        return provinceCode;
    }
    public void setProvinceCode(String provinceCode) {
        this.provinceCode = provinceCode;
    }
    public String getProvinceName() {
        return provinceName;
    }
    public void setProvinceName(String provinceName) {
        this.provinceName = provinceName;
    }
    public String getCityCode() {
        return cityCode;
    }
    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }
    public String getCityName() {
        return cityName;
    }
    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
    public String getTownCode() {
        return townCode;
    }
    public void setTownCode(String townCode) {
        this.townCode = townCode;
    }
    public String getTownName() {
        return townName;
    }
    public void setTownName(String townName) {
        this.townName = townName;
    }
    public String getStreetCode() {
        return streetCode;
    }
    public void setStreetCode(String streetCode) {
        this.streetCode = streetCode;
    }
    public String getStreetName() {
        return streetName;
    }
    public void setStreetName(String streetName) {
        this.streetName = streetName;
    }
    public String getIhealthOpenid() {
        return ihealthOpenid;
    }
    public void setIhealthOpenid(String ihealthOpenid) {
        this.ihealthOpenid = ihealthOpenid;
    }
    public Date getIhealthOpenidTime() {
        return ihealthOpenidTime;
    }
    public void setIhealthOpenidTime(Date ihealthOpenidTime) {
        this.ihealthOpenidTime = ihealthOpenidTime;
    }
    public String getId() {
        return id;
    }
@ -217,4 +375,28 @@ public class WlyyUserDetails implements Serializable {
    public void setLoginFailureCount(Integer loginFailureCount) {
        this.loginFailureCount = loginFailureCount;
    }
    public Boolean getEnabled() {
        return enabled;
    }
    public Boolean getLocked() {
        return locked;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public Integer getSex() {
        return sex;
    }
    public void setSex(Integer sex) {
        this.sex = sex;
    }
}

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

@ -4,6 +4,8 @@ import com.yihu.jw.security.core.userdetails.SaltUser;
import com.yihu.jw.security.oauth2.core.redis.WlyyRedisVerifyCodeService;
import org.springframework.security.authentication.*;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
import org.springframework.security.core.authority.mapping.NullAuthoritiesMapper;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
@ -77,6 +79,15 @@ public class WlyyTokenGranter implements TokenGranter {
                        wlyyRedisVerifyCodeService,
                        userDetailsService
                ));
        tokenGranters.put(IhealthOwnerCodeTokenGranter.GRANT_TYPE,
                new IhealthOwnerCodeTokenGranter(
                        authenticationManager,
                        tokenServices,
                        clientDetailsService,
                        requestFactory,
                        userDetailsService
                ));
    }
    public OAuth2AccessToken grant(String grantType, TokenRequest tokenRequest) {
@ -333,5 +344,56 @@ public class WlyyTokenGranter implements TokenGranter {
        }
    }
    /**
     * i健康居民code模式Token授权器。
     */
    public static class IhealthOwnerCodeTokenGranter extends AbstractTokenGranter {
        private static final String GRANT_TYPE = "ihealthCode";
        private final AuthenticationManager authenticationManager;
        private final UserDetailsService userDetailsService;
        private GrantedAuthoritiesMapper authoritiesMapper = new NullAuthoritiesMapper();
        public IhealthOwnerCodeTokenGranter(AuthenticationManager authenticationManager,
                                       AuthorizationServerTokenServices tokenServices,
                                       ClientDetailsService clientDetailsService,
                                       OAuth2RequestFactory requestFactory,
                                       UserDetailsService userDetailsService) {
            this(authenticationManager, tokenServices, clientDetailsService, requestFactory, userDetailsService, GRANT_TYPE);
        }
        protected IhealthOwnerCodeTokenGranter(AuthenticationManager authenticationManager,
                                          AuthorizationServerTokenServices tokenServices,
                                          ClientDetailsService clientDetailsService,
                                          OAuth2RequestFactory requestFactory,
                                          UserDetailsService userDetailsService,
                                          String grantType) {
            super(tokenServices, clientDetailsService, requestFactory, grantType);
            this.authenticationManager = authenticationManager;
            this.userDetailsService = userDetailsService;
        }
        @Override
        protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) {
            Map<String, String> parameters = new LinkedHashMap<String, String>(tokenRequest.getRequestParameters());
            String username = parameters.get("username");
            SaltUser userDetails = (SaltUser)userDetailsService.loadUserByUsername(username);
            if (!userDetails.isEnabled()) {
                throw new InvalidGrantException("User is disabled");
            }
            if (!userDetails.isAccountNonLocked()) {
                throw new InvalidGrantException("User account is locked");
            }
//            parameters.put("password",userDetails.getPassword());
            Authentication userAuth = new UsernamePasswordAuthenticationToken(username,userDetails.getPassword(),  this.authoritiesMapper.mapAuthorities(userDetails.getAuthorities()));
            ((AbstractAuthenticationToken) userAuth).setDetails(parameters);
            OAuth2Request storedOAuth2Request = getRequestFactory().createOAuth2Request(client, tokenRequest);
            return new OAuth2Authentication(storedOAuth2Request, userAuth);
        }
    }
}

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

@ -129,17 +129,19 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
                String password = com.yihu.jw.security.utils.RSAUtils.decryptBase64(parameters.get("password"),keyPair);
                parameters.put("password",password);
//                parameters.put("password", RSAUtils.decryptByPrivateKey(parameters.get("password"), rsaPrivateKey));
            }else {
                parameters.put("grant_type", "ihealthCode");
            }
        } else {
            parameters.put("grant_type", "captcha");
        }
        ClientDetails authenticatedClient = clientDetailsService.loadClientByClientId(client_id);
        TokenRequest tokenRequest = oAuth2RequestFactory.createTokenRequest(parameters, authenticatedClient);
        if (authenticatedClient != null) {
            oAuth2RequestValidator.validateScope(tokenRequest, authenticatedClient);
        if(null == authenticatedClient){
            throw new InvalidRequestException("client_id");
        }
        TokenRequest tokenRequest = oAuth2RequestFactory.createTokenRequest(parameters, authenticatedClient);
        oAuth2RequestValidator.validateScope(tokenRequest, authenticatedClient);
        OAuth2AccessToken token = getTokenGranter().grant(tokenRequest.getGrantType(), tokenRequest);
        if (token == null) {
            throw new UnsupportedGrantTypeException("Unsupported grant type: " + tokenRequest.getGrantType());

+ 106 - 0
svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/controller/expressage/WlyyPatientExpressageAddrEndpoint.java

@ -0,0 +1,106 @@
package com.yihu.jw.entrance.controller.expressage;
import com.yihu.jw.entrance.service.WlyyPatientExpressageAddrService;
import com.yihu.jw.restmodel.hospital.prescription.WlyyPatientExpressageAddrVO;
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.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.hospital.BaseHospitalRequestMapping;
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.*;
import java.util.List;
import com.yihu.jw.entity.hospital.prescription.WlyyPatientExpressageAddrDO;
/**
 * 居民收获地址控制器
 *
 * @version <pre>
 * Author	Version		Date		Changes
 * Administrator 	1.0  		2019年06月12日 	Created
 *
 * </pre>
 * @since 1.
 */
@RestController
@RequestMapping(value = BaseHospitalRequestMapping.WlyyPatientExpressageAddr.PREFIX)
@Api(value = "居民收获地址管理", description = "居民收获地址管理服务接口", tags = {"wlyy基础服务 - 居民收获地址管理服务接口"})
public class WlyyPatientExpressageAddrEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private WlyyPatientExpressageAddrService wlyyPatientExpressageAddrService;
    @PostMapping(value = BaseHospitalRequestMapping.WlyyPatientExpressageAddr.CREATE)
    @ApiOperation(value = "创建")
    public Envelop create(
            @ApiParam(name = "jsonData", value = "Json数据", required = true)
            @RequestParam String jsonData) throws Exception {
        StringBuilder log = new StringBuilder();
        WlyyPatientExpressageAddrDO addrDO = wlyyPatientExpressageAddrService.createAddr(jsonData,log);
        if(!StringUtils.isEmpty(log.toString())){
            return failed(log.toString());
        }
        return success(addrDO, WlyyPatientExpressageAddrVO.class);
    }
    @PostMapping(value = BaseHospitalRequestMapping.WlyyPatientExpressageAddr.DELETE)
    @ApiOperation(value = "删除")
    public Envelop delete(
            @ApiParam(name = "ids", value = "id串,中间用,分隔", required = true)
            @RequestParam(value = "ids") String ids) {
        wlyyPatientExpressageAddrService.delete(ids.split(","));
        return success("删除成功");
    }
    @PostMapping(value = BaseHospitalRequestMapping.WlyyPatientExpressageAddr.UPDATE)
    @ApiOperation(value = "更新")
    public ObjEnvelop<WlyyPatientExpressageAddrVO> update(
            @ApiParam(name = "jsonData", value = "Json数据", required = true)
            @RequestParam String jsonData) throws Exception {
        WlyyPatientExpressageAddrDO wlyyPatientExpressageAddr = toEntity(jsonData, WlyyPatientExpressageAddrDO.class);
        if (null == wlyyPatientExpressageAddr.getId()) {
            return failed("ID不能为空", ObjEnvelop.class);
        }
        wlyyPatientExpressageAddr = wlyyPatientExpressageAddrService.save(wlyyPatientExpressageAddr);
        return success(wlyyPatientExpressageAddr, WlyyPatientExpressageAddrVO.class);
    }
    @GetMapping(value = BaseHospitalRequestMapping.WlyyPatientExpressageAddr.PAGE)
    @ApiOperation(value = "获取分页")
    public PageEnvelop<WlyyPatientExpressageAddrVO> page(
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts,
            @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 {
        List<WlyyPatientExpressageAddrDO> wlyyPatientExpressageAddrs = wlyyPatientExpressageAddrService.search(fields, filters, sorts, page, size);
        int count = (int) wlyyPatientExpressageAddrService.getCount(filters);
        return success(wlyyPatientExpressageAddrs, count, page, size, WlyyPatientExpressageAddrVO.class);
    }
    @GetMapping(value = BaseHospitalRequestMapping.WlyyPatientExpressageAddr.LIST)
    @ApiOperation(value = "获取列表")
    public ListEnvelop<WlyyPatientExpressageAddrVO> list(
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts) throws Exception {
        List<WlyyPatientExpressageAddrDO> wlyyPatientExpressageAddrs = wlyyPatientExpressageAddrService.search(fields, filters, sorts);
        return success(wlyyPatientExpressageAddrs, WlyyPatientExpressageAddrVO.class);
    }
}

+ 21 - 0
svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/dao/WlyyPatientExpressageAddrDao.java

@ -0,0 +1,21 @@
package com.yihu.jw.entrance.dao;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import com.yihu.jw.entity.hospital.prescription.WlyyPatientExpressageAddrDO;
/**
 * 
 * 居民收获地址 数据库访问层
 * 
 * @version 
 * <pre>
 * Author	Version		Date		Changes
 * Administrator 	1.0  		2019年06月12日 	Created
 *
 * </pre>
 * @since 1.
 */
public interface WlyyPatientExpressageAddrDao extends PagingAndSortingRepository<WlyyPatientExpressageAddrDO, String>, JpaSpecificationExecutor<WlyyPatientExpressageAddrDO>  {
}

+ 39 - 0
svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/service/WlyyPatientExpressageAddrService.java

@ -0,0 +1,39 @@
package com.yihu.jw.entrance.service;
import com.yihu.jw.entrance.dao.WlyyPatientExpressageAddrDao;
import com.yihu.jw.utils.EntityUtils;
import com.yihu.mysql.query.BaseJpaService;
import org.springframework.stereotype.Service;
import com.yihu.jw.entity.hospital.prescription.WlyyPatientExpressageAddrDO;
/**
 * 居民收获地址服务service
 *
 * @version <pre>
 * Author	Version		Date		Changes
 * Administrator    1.0  2019年06月12日 Created
 *
 * </pre>
 * @since 1.
 */
@Service
public class WlyyPatientExpressageAddrService extends BaseJpaService<WlyyPatientExpressageAddrDO, WlyyPatientExpressageAddrDao> {
    /**
     * 新增居民收货地址
     * @param jsonData
     * @param error
     * @return
     */
    public WlyyPatientExpressageAddrDO createAddr(String jsonData, StringBuilder error) {
        WlyyPatientExpressageAddrDO addrDO = null;
        try {
            addrDO = EntityUtils.jsonToEntity(jsonData,WlyyPatientExpressageAddrDO.class);
        } catch (Exception e) {
            error.append(e.getMessage());
            return null;
        }
        this.save(addrDO);
        return addrDO;
    }
}