Pārlūkot izejas kodu

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

Conflicts:
	svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/CapacityAssessmentRecordService.java
yeshijie 4 gadi atpakaļ
vecāks
revīzija
885fc6392f

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

@ -2,6 +2,7 @@ package com.yihu.jw.security.core.userdetails.jdbc;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.patient.BasePatientFamilyMemberDO;
import com.yihu.jw.entity.base.wx.BasePatientWechatDo;
import com.yihu.jw.entity.hospital.family.WlyyPatientFamilyMemberDO;
import com.yihu.jw.security.core.userdetails.SaltUser;
@ -64,6 +65,10 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
    private static final String UPDATE_PATIENT_CARD_TYPE = "update base_patient set card_type = ?,alipay_id = ? where id = ?";
    private static final String DEFAULT_FAMILY_STATEMENT = "SELECT * FROM base_patient_family_member p WHERE p.patient = ? and p.family_member = ?";
    private static final String DEFAULT_PATIENT_STATEMENT = "SELECT * FROM base_patient p WHERE p.id = ? ";
    private static final String BespeakRegist = "bespeakRegist:";
@ -146,7 +151,7 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
     * 用户登录判读接口
     * 判断loginType查找用户信息
     * 用户类型 1或默认为user,2:医生登录,3:患者登录,4:i健康系统-患者登录(i健康患者可以不注册直接登录互联网系统,首次使用,根据i健康居民code去i健康查询居民信息,然后保存到base.base_patient)
     * 用户类型 5 中山医院支付宝-患者登录(可以不注册直接登录)
     * 用户类型 5 中山医院支付宝-患者登录(可以不注册直接登录) 6医养项目家人登录
     * @param username
     * @return
     */
@ -488,6 +493,24 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
                        }
                );
            }
        } else if ("6".equals(loginType)) {
            String data[] = username.split(":");
            String patientId = data[0];
            String familyPatientId = data[2];
            List<BasePatientFamilyMemberDO> familys =this.getJdbcTemplate().query(DEFAULT_FAMILY_STATEMENT, new BeanPropertyRowMapper(BasePatientFamilyMemberDO.class), patientId, familyPatientId);
            if(familys==null||familys.size()==0){
                return users;
            }
            username = data[1];
            //查找是否存在预注册 用户
            String userName = redisTemplate.opsForValue().get(BespeakRegist + username);
            if (StringUtils.isNotBlank(userName)) {
                //保存到数据库
                this.getJdbcTemplate().execute("update base_patient set del=1 where mobile='" + username + "'");
                redisTemplate.opsForValue().get(BespeakRegist + username);
                redisTemplate.delete(BespeakRegist + username);
            }
            users = this.getJdbcTemplate().query(DEFAULT_PATIENT_DETAILS_STATEMENT, new BeanPropertyRowMapper(WlyyUserDetails.class), username, username);
        }
        return users;
    }

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

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

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

@ -173,7 +173,7 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
     *                    username 用户名/手机/身份证号
     *                    key 图形验证码键值
     *                    text 用户输入的图形验证码
     *                    login_type 用户类型 1或默认为user,2:医生登录,3:患者登录,4:第三方同步账号登录,5.易联众居民健康卡授权登录
     *                    login_type 用户类型 1或默认为user,2:医生登录,3:患者登录,4:第三方同步账号登录,5.易联众居民健康卡授权登录 6医养项目家人登录
     * @param httpSession
     * @return
     * @throws Exception
@ -202,8 +202,8 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
        if (StringUtils.isEmpty(client_id)) {
            throw new InvalidRequestException("client_id");
        }
        if("alipay".equals(flag)){
            //支付宝登录
        if("alipay".equals(flag)||"family".equals(flag)){
            //支付宝登录||家人登录
            parameters.put("grant_type", flag);
            String encdata = parameters.get("encdata");
            encdata = AES.decrypt(encdata);