Browse Source

账号登录锁定

trick9191 6 years ago
parent
commit
ffbc3d52ef
22 changed files with 329 additions and 329 deletions
  1. 0 76
      common/common-entity/src/main/java/com/yihu/jw/entity/base/team/BaseTeamDO.java
  2. 12 0
      common/common-entity/src/main/java/com/yihu/jw/entity/specialist/HospitalServiceItemDO.java
  3. 1 1
      common/common-entity/src/main/java/com/yihu/jw/entity/specialist/SpecialistServiceItemDO.java
  4. 2 0
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/specialist/SpecialistMapping.java
  5. 1 1
      gateway/ag-basic/src/main/resources/application.yml
  6. 2 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/config/WlyyWebSecurityConfigurerAdapter.java
  7. 4 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/core/userdetails/SaltUser.java
  8. 35 12
      server/svr-authentication/src/main/java/com/yihu/jw/security/core/userdetails/jdbc/WlyyUserDetailsService.java
  9. 5 2
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/config/WlyyAuthorizationServerConfigurerAdapter.java
  10. 35 25
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/WlyyTokenGranter.java
  11. 20 6
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java
  12. 5 5
      server/svr-authentication/src/main/resources/application.yml
  13. 0 57
      svr/svr-base/src/main/java/com/yihu/jw/base/config/BaseJpa.java
  14. 0 43
      svr/svr-base/src/main/java/com/yihu/jw/base/config/HibernateProperties.java
  15. 21 14
      svr/svr-base/src/main/java/com/yihu/jw/base/config/SwaggerDocs.java
  16. 29 7
      svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/controller/SpecialistHospitalServiceItemController.java
  17. 9 3
      svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/controller/SpecialistServiceItemController.java
  18. 6 1
      svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/dao/SpecialistHospitalServiceItemDao.java
  19. 2 0
      svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/dao/SpecialistServiceItemDao.java
  20. 124 46
      svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/service/SpecialistHospitalServiceItemService.java
  21. 15 29
      svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/service/SpecialistServiceItemService.java
  22. 1 1
      wlyy-parent-pom/pom.xml

+ 0 - 76
common/common-entity/src/main/java/com/yihu/jw/entity/base/team/BaseTeamDO.java

@ -1,76 +0,0 @@
package com.yihu.jw.entity.base.team;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * Created by Trick on 2018/8/31.
 */
@Entity
@Table(name = "base_team")
public class BaseTeamDO extends UuidIdentityEntityWithOperator {
    private String saasid;//saas化',
    private String name;//团队名称',
    private String leaderId;//领导医生标识',
    private String teamNum;//团队人数',
    private String qrcode;//团队二维码',
    private String del;//作废标识,1正常,0作废',
    @Column(name = "saasid")
    public String getSaasid() {
        return saasid;
    }
    public void setSaasid(String saasid) {
        this.saasid = saasid;
    }
    @Column(name = "name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "leader_id")
    public String getLeaderId() {
        return leaderId;
    }
    public void setLeaderId(String leaderId) {
        this.leaderId = leaderId;
    }
    @Column(name = "team_num")
    public String getTeamNum() {
        return teamNum;
    }
    public void setTeamNum(String teamNum) {
        this.teamNum = teamNum;
    }
    @Column(name = "qrcode")
    public String getQrcode() {
        return qrcode;
    }
    public void setQrcode(String qrcode) {
        this.qrcode = qrcode;
    }
    @Column(name = "del")
    public String getDel() {
        return del;
    }
    public void setDel(String del) {
        this.del = del;
    }
}

+ 12 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/specialist/HospitalServiceItemDO.java

@ -44,6 +44,9 @@ public class HospitalServiceItemDO extends UuidIdentityEntityWithOperator implem
    @Transient
    private Integer flag;//标识(1:社区,2、医院,3、社区、医院)
    @Column(name = "imediate")
    private Integer imediate;//(1:立即生效、0:未立即生效 )
    @Transient
    private SpecialistServiceItemDO specialistServiceItemDO;
@ -127,4 +130,13 @@ public class HospitalServiceItemDO extends UuidIdentityEntityWithOperator implem
    public void setFlag(Integer flag) {
        this.flag = flag;
    }
    @Column(name = "imediate")
    public Integer getImediate() {
        return imediate;
    }
    public void setImediate(Integer imediate) {
        this.imediate = imediate;
    }
}

+ 1 - 1
common/common-entity/src/main/java/com/yihu/jw/entity/specialist/SpecialistServiceItemDO.java

@ -74,7 +74,7 @@ public class SpecialistServiceItemDO extends UuidIdentityEntityWithOperator impl
    private Integer status; //删除状态
    @Transient
    public Integer flag;
    public Integer flag;//标识(1:社区,2、医院,3、社区、医院)
    @Column(name = "saas_id")

+ 2 - 0
common/common-request-mapping/src/main/java/com/yihu/jw/rm/specialist/SpecialistMapping.java

@ -100,5 +100,7 @@ public class SpecialistMapping {
        public static final String selectByCondition="/selectByCondition";
        public static final String deleteHospitalItem = "/deleteHospitalItem";
        public static final String selectByHospital1 = "/selectByHospital1";
        public static final String importData1 = "/importData1";
        public static final String importData2 = "/importData2";
    }
}

+ 1 - 1
gateway/ag-basic/src/main/resources/application.yml

@ -11,7 +11,7 @@ zuul:
      serviceId: svr-iot
    svr-base:
      path: /base/**
      serviceId: svr-base-sxy
      serviceId: svr-base
    demo:
      path: /baidu/**
      url: https://www.baidu.com

+ 2 - 0
server/svr-authentication/src/main/java/com/yihu/jw/security/config/WlyyWebSecurityConfigurerAdapter.java

@ -31,6 +31,7 @@ public class WlyyWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapt
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/oauth/**");
        web.ignoring().antMatchers("/health");
    }
    @Override
@ -63,6 +64,7 @@ public class WlyyWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapt
        reflectionSaltSource.setUserPropertyToUse("salt");
        authenticationProvider.setSaltSource(reflectionSaltSource);
        authenticationProvider.setSaltSource(reflectionSaltSource);
        authenticationProvider.setHideUserNotFoundExceptions(false);
        return authenticationProvider;
    }

+ 4 - 0
server/svr-authentication/src/main/java/com/yihu/jw/security/core/userdetails/SaltUser.java

@ -31,6 +31,10 @@ public class SaltUser implements UserDetails, CredentialsContainer {
        this(username, password, salt, true, true, true, true, authorities);
    }
    public SaltUser(String username, String password, String salt, boolean enabled, boolean locked, Collection<? extends GrantedAuthority> authorities) {
        this(username, password, salt, enabled, true, true, !locked, authorities);
    }
    public SaltUser(String username, String password, String salt, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities) {
        if(username != null && !"".equals(username) && password != null) {
            this.username = username;

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

@ -3,7 +3,6 @@ package com.yihu.jw.security.core.userdetails.jdbc;
import com.yihu.jw.security.core.userdetails.SaltUser;
import com.yihu.jw.security.model.WlyyUserDetails;
import com.yihu.jw.security.model.WlyyUserSimple;
import org.apache.commons.lang3.StringUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.security.core.GrantedAuthority;
@ -22,12 +21,12 @@ import java.util.Date;
import java.util.List;
/**
 * Service - 用户加载
 * Service - 用户信息
 * Created by progr1mmer on 2018/8/29.
 */
public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetailsService {
    private static final String DEFAULT_USER_DETAILS_STATEMENT = "SELECT * FROM base_user u WHERE u.username = ? OR u.mobile = ? OR u.idcard = ?";
    private static final String DEFAULT_USER_DETAILS_STATEMENT = "select * from base_user u where u.username = ? or u.mobile = ? or u.idcard = ?";
    private static final String DEFAULT_DOCTOR_DETAILS_STATEMENT = "SELECT * FROM base_doctor d WHERE d.mobile = ? OR d.idcard = ?";
@ -48,14 +47,18 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
     */
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        List<WlyyUserDetails> users = getWlyyUserDetails(username);
        if (users == null || users.size() == 0) {
            throw new UsernameNotFoundException(username);
        }
        return new SaltUser(username, users.get(0).getPassword(), users.get(0).getSalt(), getGrantedAuthorities(username));
        if (users.get(0).isLocked()) {
            Date date = users.get(0).getLockedDate();
            if (new Date().after(DateUtils.addMinutes(date, 5))) {
                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);
                users.get(0).setLocked(false);
            }
        }
        return new SaltUser(username, users.get(0).getPassword(), users.get(0).getSalt(), users.get(0).isEnabled(), users.get(0).isLocked(), getGrantedAuthorities(username));
    }
    /**
@ -97,15 +100,35 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
     * @throws UsernameNotFoundException
     */
    public WlyyUserSimple authSuccess (String username) throws UsernameNotFoundException {
        List<WlyyUserSimple> users = getWlyyUserSimple(username);
        //加载用户简略信息
        List<WlyyUserSimple> users = getWlyyUserSimple(username);
        if (users == null || users.size() == 0) {
            throw new UsernameNotFoundException(username);
        }
        return users.get(0);
    }
    public String authFailure () throws UsernameNotFoundException {
        //获取失败次数
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String username = request.getParameter("username");
        Integer loginFailureCount = this.getJdbcTemplate().queryForObject("select login_failure_count from base_user u where u.username = ? or u.mobile = ? or u.idcard = ?", Integer.class, username, username, username);
        loginFailureCount ++;
        if (loginFailureCount == 5) {
            this.getJdbcTemplate().update("update base_user u set u.login_failure_count = 5, locked = 1, u.locked_date = ? where u.username = ? or u.mobile = ? or u.idcard = ?", new Date(), username, username, username);
            return "账号已被锁定,请5分钟后重试!";
        } else {
            this.getJdbcTemplate().update("update base_user u set u.login_failure_count = ? where u.username = ? or u.mobile = ? or u.idcard = ?", loginFailureCount, username, username, username);
            return "密码错误,还可以再试" + (5 - loginFailureCount) + "次!";
        }
    }
    private Collection<? extends GrantedAuthority> getGrantedAuthorities(String username) {
        Collection<GrantedAuthority> authorities = new ArrayList<>(1);
        authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
        return authorities;
    }
    /**
     * 设置用户登录时间,返回登录信息
     * 判断loginType,用户类型 1或默认为user,2:医生登录,3:患者登录
@ -121,17 +144,17 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
        //1或默认查找user表,为平台管理员账号
        if(StringUtils.isBlank(loginType)||"1".equals(loginType)){
            //更新登录时间
            this.getJdbcTemplate().update("update base_user u set u.login_date = ? where u.username = ? or u.mobile = ? or u.idcard = ?", new Date(), username, username, username);
            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)){
            //更新登录时间
            this.getJdbcTemplate().update("update base_doctor d set d.login_date = ? where d.mobile = ? or d.idcard = ?", new Date(), username, username);
            this.getJdbcTemplate().update("update base_doctor d set 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)){
            //更新登录时间
            this.getJdbcTemplate().update("update base_patient p set p.login_date = ? where p.mobile = ? or p.idcard = ?", new Date(), username, username);
            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);
        } //...

+ 5 - 2
server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/config/WlyyAuthorizationServerConfigurerAdapter.java

@ -11,6 +11,7 @@ import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
@ -62,14 +63,16 @@ public class WlyyAuthorizationServerConfigurerAdapter extends AuthorizationServe
    @Primary
    WlyyTokenGranter wlyyTokenGranter (
            AuthenticationManager authenticationManager,
            AuthorizationServerTokenServices authorizationServerTokenServices) {
            AuthorizationServerTokenServices authorizationServerTokenServices,
            UserDetailsService userDetailsService) {
        WlyyTokenGranter tokenGranter = new WlyyTokenGranter(
                authenticationManager,
                authorizationServerTokenServices,
                authorizationCodeServices(),
                clientDetailsService(),
                new DefaultOAuth2RequestFactory(clientDetailsService()),
                wlyyRedisVerifyCodeService());
                wlyyRedisVerifyCodeService(),
                userDetailsService);
        return tokenGranter;
    }

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

@ -1,11 +1,11 @@
package com.yihu.jw.security.oauth2.provider;
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.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.common.exceptions.InvalidClientException;
import org.springframework.security.oauth2.common.exceptions.InvalidGrantException;
@ -35,7 +35,8 @@ public class WlyyTokenGranter implements TokenGranter {
                            AuthorizationCodeServices authorizationCodeServices,
                            ClientDetailsService clientDetailsService,
                            OAuth2RequestFactory requestFactory,
                            WlyyRedisVerifyCodeService wlyyRedisVerifyCodeService) {
                            WlyyRedisVerifyCodeService wlyyRedisVerifyCodeService,
                            UserDetailsService userDetailsService) {
        tokenGranters.put(WlyyAuthorizationCodeGranter.GRANT_TYPE,
                new WlyyAuthorizationCodeGranter(
@ -73,7 +74,8 @@ public class WlyyTokenGranter implements TokenGranter {
                        tokenServices,
                        clientDetailsService,
                        requestFactory,
                        wlyyRedisVerifyCodeService
                        wlyyRedisVerifyCodeService,
                        userDetailsService
                ));
    }
@ -237,7 +239,7 @@ public class WlyyTokenGranter implements TokenGranter {
    }
    /**
     * Implicit模式Token授权器。
     * implicit模式Token授权器。
     */
    public static class WlyyImplicitTokenGranter extends AbstractTokenGranter {
        private static final String GRANT_TYPE = "implicit";
@ -272,32 +274,37 @@ public class WlyyTokenGranter implements TokenGranter {
    }
    /**
     * verify_code模式Token授权器。
     * captcha模式Token授权器。
     */
    public static class WlyyCaptchaTokenGranter extends AbstractTokenGranter {
        private static final String GRANT_TYPE = "captcha";
        private final AuthenticationManager authenticationManager;
        // Ehr Properties
        // Customize Properties
        private final WlyyRedisVerifyCodeService wlyyRedisVerifyCodeService;
        private final UserDetailsService userDetailsService;
        public WlyyCaptchaTokenGranter(AuthenticationManager authenticationManager,
                                         AuthorizationServerTokenServices tokenServices,
                                         ClientDetailsService clientDetailsService,
                                         OAuth2RequestFactory requestFactory,
                                         WlyyRedisVerifyCodeService wlyyRedisVerifyCodeService) {
            this(authenticationManager, tokenServices, clientDetailsService, requestFactory, GRANT_TYPE, wlyyRedisVerifyCodeService);
                                       AuthorizationServerTokenServices tokenServices,
                                       ClientDetailsService clientDetailsService,
                                       OAuth2RequestFactory requestFactory,
                                       WlyyRedisVerifyCodeService wlyyRedisVerifyCodeService,
                                       UserDetailsService userDetailsService) {
            this(authenticationManager, tokenServices, clientDetailsService, requestFactory, wlyyRedisVerifyCodeService, userDetailsService, GRANT_TYPE);
        }
        protected WlyyCaptchaTokenGranter(AuthenticationManager authenticationManager,
                                            AuthorizationServerTokenServices tokenServices,
                                            ClientDetailsService clientDetailsService,
                                            OAuth2RequestFactory requestFactory,
                                            String grantType,
                                            WlyyRedisVerifyCodeService wlyyRedisVerifyCodeService) {
                                          AuthorizationServerTokenServices tokenServices,
                                          ClientDetailsService clientDetailsService,
                                          OAuth2RequestFactory requestFactory,
                                          WlyyRedisVerifyCodeService wlyyRedisVerifyCodeService,
                                          UserDetailsService userDetailsService,
                                          String grantType) {
            super(tokenServices, clientDetailsService, requestFactory, grantType);
            this.authenticationManager = authenticationManager;
            this.wlyyRedisVerifyCodeService = wlyyRedisVerifyCodeService;
            this.userDetailsService = userDetailsService;
        }
        @Override
@ -306,22 +313,25 @@ public class WlyyTokenGranter implements TokenGranter {
            Map<String, String> parameters = new LinkedHashMap<String, String>(tokenRequest.getRequestParameters());
            String client_id = parameters.get("client_id");
            String username = parameters.get("username");
            String verify_code = parameters.get("captcha");
            String captcha = parameters.get("captcha");
            if (!wlyyRedisVerifyCodeService.verification(client_id, username, verify_code)){
            if (!wlyyRedisVerifyCodeService.verification(client_id, username, captcha)){
                throw new InvalidGrantException("Invalid captcha");
            }
            Authentication userAuth = new UsernamePasswordAuthenticationToken(username, verify_code, getGrantedAuthorities(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");
            }
            Authentication userAuth = new UsernamePasswordAuthenticationToken(userDetails.getUsername(), captcha, userDetails.getAuthorities());
            ((AbstractAuthenticationToken) userAuth).setDetails(parameters);
            OAuth2Request storedOAuth2Request = getRequestFactory().createOAuth2Request(client, tokenRequest);
            return new OAuth2Authentication(storedOAuth2Request, userAuth);
        }
        private Collection<? extends GrantedAuthority> getGrantedAuthorities(String username) {
            Collection<GrantedAuthority> authorities = new ArrayList<>(1);
            authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
            return authorities;
        }
    }
}

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

@ -101,6 +101,10 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
     */
    @RequestMapping(value = "/oauth/login", method = RequestMethod.POST)
    public ResponseEntity<Oauth2Envelop<WlyyUserSimple>> login(@RequestParam Map<String, String> parameters, HttpSession httpSession) throws Exception {
        String username = parameters.get("username");
        if (StringUtils.isEmpty(username)) {
            throw new InvalidRequestException("username");
        }
        String client_id = parameters.get("client_id");
        if (StringUtils.isEmpty(client_id)) {
            throw new InvalidRequestException("client_id");
@ -359,16 +363,13 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
   @ExceptionHandler(Exception.class)
    public ResponseEntity<Oauth2Envelop> handleException(Exception e) throws Exception {
        LOG.info(e.getMessage(), e);
        LOG.debug(e.getMessage(), e);
        if (e instanceof UsernameNotFoundException) {
            return handleOAuth2Exception(new Oauth2Envelop("用户未注册!", HttpStatus.UNAUTHORIZED.value()), e);
            return handleOAuth2Exception(new Oauth2Envelop("用户不存在!", HttpStatus.UNAUTHORIZED.value()), e);
        } else if (e instanceof NoSuchClientException) {
            return handleOAuth2Exception(new Oauth2Envelop("应用未注册!", HttpStatus.UNAUTHORIZED.value()), e);
        } else if (e instanceof InvalidGrantException) {
            if (e.getMessage().contains("captcha")) {
                return handleOAuth2Exception(new Oauth2Envelop("验证码有误!", HttpStatus.UNAUTHORIZED.value()), e);
            }
            return handleOAuth2Exception(new Oauth2Envelop("密码有误!", HttpStatus.UNAUTHORIZED.value()), e);
            return handleOAuth2Exception(new Oauth2Envelop(invalidGrantMessage((InvalidGrantException)e), HttpStatus.UNAUTHORIZED.value()), e);
        } else if (e instanceof InvalidTokenException) {
            return handleOAuth2Exception(new Oauth2Envelop("Token有误!", HttpStatus.UNAUTHORIZED.value()), e);
        } else if (e instanceof InvalidRequestException) {
@ -381,6 +382,19 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
        return handleOAuth2Exception(new Oauth2Envelop(e.getMessage(), -1), e);
    }
    private String invalidGrantMessage(InvalidGrantException e) {
        if (e.getMessage().equals("User is disabled")) {
            return "账号不可用!";
        } else if (e.getMessage().equals("User account is locked")) {
            return "账号已被锁定,请稍后重试!";
        } else if (e.getMessage().equals("Bad credentials")) {
            return userDetailsService.authFailure();
        } else if (e.getMessage().equals("Invalid captcha")) {
            return "验证码错误!";
        }
        return e.getMessage();
    }
    private ResponseEntity<Oauth2Envelop> handleOAuth2Exception(Oauth2Envelop authenticationFailed, Exception e) throws IOException {
        HttpHeaders headers = new HttpHeaders();
        headers.set("Cache-Control", "no-store");

+ 5 - 5
server/svr-authentication/src/main/resources/application.yml

@ -18,11 +18,11 @@ spring:
      max-wait: -1 # Maximum amount of time (in milliseconds) a connection allocation should block before throwing an exception when the pool is exhausted. Use a negative value to block indefinitely.
      min-idle: 1 # Target for the minimum number of idle connections to maintain in the pool. This setting only has an effect if it is positive.
logging:
  level:
    org:
      springframework:
        security: DEBUG
#logging:
#  level:
#    org:
#      springframework:
#        security: DEBUG
---
spring:

+ 0 - 57
svr/svr-base/src/main/java/com/yihu/jw/base/config/BaseJpa.java

@ -1,57 +0,0 @@
//package com.yihu.jw.base.config;
//
//
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Qualifier;
//import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
//import org.springframework.boot.context.properties.ConfigurationProperties;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.annotation.Primary;
//import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
//import org.springframework.orm.jpa.JpaTransactionManager;
//import org.springframework.orm.jpa.JpaVendorAdapter;
//import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
//import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
//import org.springframework.transaction.annotation.EnableTransactionManagement;
//
//import javax.persistence.EntityManagerFactory;
//import javax.sql.DataSource;
//
///**
// * Created by chenweida on 2017/4/6.
// */
//@Configuration
//@EnableTransactionManagement
//@EnableJpaRepositories(
//        entityManagerFactoryRef = "baseEntityManagerFactory",
//        transactionManagerRef = "baseTransactionManager",
//        basePackages = {"com.yihu.jw.business"})   //设置Repository所在位置
//public class BaseJpa {
//
//    @Autowired
//    private HibernateProperties hibernateProperties;
//
//    @Bean(name = "baseEntityManagerFactory")
//    @Primary
//    public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary(DataSource dataSource) {
//
//        LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean();
//        emfb.setDataSource(dataSource);
//        emfb.setPackagesToScan("com.yihu.jw.base");
//        emfb.setPersistenceUnitName("base");
//        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
//        emfb.setJpaVendorAdapter(vendorAdapter);
//        emfb.setJpaProperties(hibernateProperties.hibProperties());
//
//        return emfb;
//    }
//
//
//    @Bean(name = "baseTransactionManager")
//    @Primary
//    JpaTransactionManager transactionManagerSecondary(
//            @Qualifier("baseEntityManagerFactory") EntityManagerFactory builder) {
//        return new JpaTransactionManager(builder);
//    }
//}

+ 0 - 43
svr/svr-base/src/main/java/com/yihu/jw/base/config/HibernateProperties.java

@ -1,43 +0,0 @@
//package com.yihu.jw.base.config;
//
//import org.hibernate.EmptyInterceptor;
//import org.hibernate.Interceptor;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.cloud.context.config.annotation.RefreshScope;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.stereotype.Component;
//
//import java.util.List;
//import java.util.Properties;
//
///**
// * Created by chenweida on 2017/4/6.
// */
//@Configuration
//@Component
//public class HibernateProperties {
//    @Value("${hibernate.dialect}")
//    private String dialect;
//    @Value("${hibernate.show_sql}")
//    private String show_sql;
////    @Value("${hibernate.ejb.naming_strategy}")
////    private String naming_strategy;
//
//    @Value("${hibernate.physical_naming_strategy}")
//    private String physical_naming_strategy;
//    @Value("${hibernate.implicit_naming_strategy}")
//    private String implicit_naming_strategy;
////    @Autowired
////    private List<Interceptor> interceptors;
//
//    public Properties hibProperties() {
//        Properties properties = new Properties();
//        properties.put("hibernate.dialect", dialect);
//        properties.put("hibernate.show_sql", show_sql);
//        properties.put("hibernate.physical_naming_strategy", physical_naming_strategy);
//        properties.put("hibernate.implicit_naming_strategy", implicit_naming_strategy);
//        //properties.put("hibernate.ejb.interceptor", interceptors.get(0));
//        return properties;
//    }
//}

+ 21 - 14
svr/svr-base/src/main/java/com/yihu/jw/base/config/SwaggerDocs.java

@ -1,5 +1,12 @@
package com.yihu.jw.base.config;
import io.github.swagger2markup.GroupBy;
import io.github.swagger2markup.Language;
import io.github.swagger2markup.Swagger2MarkupConfig;
import io.github.swagger2markup.Swagger2MarkupConverter;
import io.github.swagger2markup.builder.Swagger2MarkupConfigBuilder;
import io.github.swagger2markup.markup.builder.MarkupLanguage;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
@ -17,19 +24,19 @@ public class SwaggerDocs {
        String prefix = Thread.currentThread().getContextClassLoader().getResource("").getPath();
        Path outputFile = Paths.get(prefix.substring(prefix.lastIndexOf(":") + 1, prefix.indexOf("target") - 1) + "/build/" + group); //文档输出地址
//        Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
//                .withMarkupLanguage(MarkupLanguage.ASCIIDOC)
//                .withOutputLanguage(Language.ZH)
//                .withPathsGroupedBy(GroupBy.TAGS)
//                .withGeneratedExamples()
//                .withoutInlineSchema()
//                //.withBasePathPrefix()
//                .build();
//
//        Swagger2MarkupConverter converter = Swagger2MarkupConverter.from(remoteSwaggerFile)
//                .withConfig(config)
//                .build();
//
//        converter.toFile(outputFile);
        Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
                .withMarkupLanguage(MarkupLanguage.ASCIIDOC)
                .withOutputLanguage(Language.ZH)
                .withPathsGroupedBy(GroupBy.TAGS)
                .withGeneratedExamples()
                .withoutInlineSchema()
                //.withBasePathPrefix()
                .build();
        Swagger2MarkupConverter converter = Swagger2MarkupConverter.from(remoteSwaggerFile)
                .withConfig(config)
                .build();
        converter.toFile(outputFile);
    }
}

+ 29 - 7
svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/controller/SpecialistHospitalServiceItemController.java

@ -14,10 +14,7 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@ -121,8 +118,8 @@ public class SpecialistHospitalServiceItemController extends EnvelopRestEndpoint
     */
    @PostMapping(value = SpecialistMapping.serviceItem.selectByCondition)
    @ApiOperation(value = "根据条件查找机构服务项目")
    public MixEnvelop<HospitalServiceItemDO,HospitalServiceItemDO> selectByCondition(@ApiParam(name = "serviceItemName", value = "服务项目名称")
                                                                                    @RequestParam(value = "serviceItemName")String serviceItemName,
    public MixEnvelop<JSONArray,JSONArray> selectByCondition(@ApiParam(name = "serviceItemName", value = "服务项目名称")
                                                                                    @RequestParam(value = "serviceItemName",required = false)String serviceItemName,
                                                                                     @ApiParam(name = "hospitals",value = "医院集合")
                                                                                     @RequestParam(value = "hospitals",required = false)String hospitals){
        try {
@ -172,7 +169,7 @@ public class SpecialistHospitalServiceItemController extends EnvelopRestEndpoint
    @PostMapping(value = SpecialistMapping.serviceItem.selectByHospital1)
    @ApiOperation(value = "查询服务项目")
    public MixEnvelop<JSONArray,JSONArray> selectByHospital1(@ApiParam(name = "hospital", value ="社区code")
                                              @RequestParam(name = "hospital")String hospital,
                                              @RequestParam(name = "hospital",required = false)String hospital,
                                              @ApiParam(name = "docHospital", value = "医院code")
                                              @RequestParam(name = "docHospital")String docHospital,
                                              @ApiParam(name = "serviceItemName", value = "服务项目名称")
@ -185,4 +182,29 @@ public class SpecialistHospitalServiceItemController extends EnvelopRestEndpoint
            return MixEnvelop.getError(e.getMessage());
        }
    }
    /**
     * 机构服务项目导数据
     *
     * @param hospitalItems
     * @return
     */
    @RequestMapping(value = SpecialistMapping.serviceItem.importData2)
    @ResponseBody
    public MixEnvelop<Boolean,Boolean> importData(@ApiParam(name = "hospitalItems", value = "机构服务项目集合")
                                                  @RequestParam(value = "hospitalItems")String hospitalItems) {
        try {
            JSONArray array = JSONArray.parseArray(hospitalItems);
            List<HospitalServiceItemDO> hospitalServiceItemDOList = new ArrayList<>();
            for (int i = 0;i<array.size();i++){
                HospitalServiceItemDO hospitalServiceItemDO = toEntity(array.getJSONObject(i).toJSONString(),HospitalServiceItemDO.class);
                hospitalServiceItemDOList.add(hospitalServiceItemDO);
            }
            return specialistHospitalServiceItemService.importData(hospitalServiceItemDOList);
        } catch (Exception e) {
            e.printStackTrace();
            tracer.getCurrentSpan().logEvent(e.getMessage());
            return MixEnvelop.getError(e.getMessage());
        }
    }
}

+ 9 - 3
svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/controller/SpecialistServiceItemController.java

@ -12,7 +12,6 @@ import com.yihu.jw.service.SpecialistServiceItemService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import jxl.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.web.bind.annotation.*;
@ -158,9 +157,16 @@ public class SpecialistServiceItemController extends EnvelopRestEndpoint {
     */
    @RequestMapping(value = "importData")
    @ResponseBody
    public MixEnvelop<Boolean,Boolean> importData(@RequestBody Workbook workbook) {
    public MixEnvelop<Boolean,Boolean> importData(@ApiParam(name = "serviceItems", value = "服务项目集合")
                                                      @RequestParam(value = "serviceItems")String serviceItems) {
        try {
            return specialistServiceItemService.importData(workbook);
            JSONArray array = JSONArray.parseArray(serviceItems);
            List<SpecialistServiceItemDO> specialistServiceItemDOS = new ArrayList<>();
            for (int i = 0;i<array.size();i++){
                SpecialistServiceItemDO specialistServiceItemDO = toEntity(array.getJSONObject(i).toJSONString(),SpecialistServiceItemDO.class);
                specialistServiceItemDOS.add(specialistServiceItemDO);
            }
            return specialistServiceItemService.importData(specialistServiceItemDOS);
        } catch (Exception e) {
            e.printStackTrace();
            tracer.getCurrentSpan().logEvent(e.getMessage());

+ 6 - 1
svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/dao/SpecialistHospitalServiceItemDao.java

@ -3,9 +3,13 @@ package com.yihu.jw.dao;/**
 */
import com.yihu.jw.entity.specialist.HospitalServiceItemDO;
import com.yihu.jw.entity.specialist.SpecialistServiceItemDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * @author wangzhinan
 * @create 2018-08-28 19:54
@ -14,5 +18,6 @@ import org.springframework.data.repository.PagingAndSortingRepository;
public interface SpecialistHospitalServiceItemDao extends PagingAndSortingRepository<HospitalServiceItemDO, String>,
        JpaSpecificationExecutor<HospitalServiceItemDO> {
    @Query("select p from HospitalServiceItemDO  p where p.hospital =?1 and p.serviceItemId =?2")
    public List<HospitalServiceItemDO> findByHospitalAndServiceItemId(String hospital,String serviceItemId);
}

+ 2 - 0
svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/dao/SpecialistServiceItemDao.java

@ -19,4 +19,6 @@ public interface SpecialistServiceItemDao extends PagingAndSortingRepository<Spe
    @Query("select p from SpecialistServiceItemDO p where p.title =?1")
    public List<SpecialistServiceItemDO> findByTitle(String title);
}

+ 124 - 46
svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/service/SpecialistHospitalServiceItemService.java

@ -17,8 +17,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
/**
 * @author wangzhinan
@ -93,33 +92,69 @@ public class SpecialistHospitalServiceItemService extends EnvelopRestEndpoint {
    public MixEnvelop<JSONArray,JSONArray> selectByHospital1(String hospital,String docHospital,String serviceItemName){
        MixEnvelop<JSONArray,JSONArray> envelop = new MixEnvelop<>();
        String sqlUtil = "";
        if (StringUtils.isNoneBlank(serviceItemName)){
        if (StringUtils.isNoneBlank(serviceItemName)||serviceItemName != null){
            sqlUtil="and service_item_name = '"+serviceItemName+"'";
        }
        String sql = "select * from wlyy_hospital_service_item where 1=1 AND hospital = '"+hospital+"' "+sqlUtil;
        List<HospitalServiceItemDO> hospitalServiceItemDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(HospitalServiceItemDO.class));
        String sql1 = "select * from wlyy_hospital_service_item where 1=1 AND hospital = '"+docHospital+"' "+sqlUtil;
        List<HospitalServiceItemDO> hospitalServiceItemDOList = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(HospitalServiceItemDO.class));
        List<HospitalServiceItemDO> hospitalServiceItemDOS1 = new ArrayList<>();
        for (HospitalServiceItemDO hospitalServiceItemDO:hospitalServiceItemDOS){
            boolean flag = false;
            for (HospitalServiceItemDO hospitalServiceItemDO1 :hospitalServiceItemDOList){
                if (hospitalServiceItemDO.getHospital().equals(hospitalServiceItemDO1.getHospital())){
                    hospitalServiceItemDO1.setFlag(3);
                    hospitalServiceItemDOS1.add(hospitalServiceItemDO1);
                    flag = true;
                    hospitalServiceItemDOList.remove(hospitalServiceItemDO1);
                    break;
                }else{
                    hospitalServiceItemDO1.setFlag(2);
                    hospitalServiceItemDOS1.add(hospitalServiceItemDO1);
                    flag = false;
                }
        if (StringUtils.isNoneBlank(hospital)&&hospital.equals(docHospital)){
            String sql1 = "select * from wlyy_hospital_service_item where 1=1 AND hospital = '"+docHospital+"' "+sqlUtil;
            List<HospitalServiceItemDO> hospitalServiceItemDOList = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(HospitalServiceItemDO.class));
            for (HospitalServiceItemDO hospitalServiceItemDO:hospitalServiceItemDOList){
                hospitalServiceItemDO.setFlag(3);
                hospitalServiceItemDOS1.add(hospitalServiceItemDO);
            }
            if (flag==false){
                hospitalServiceItemDO.setFlag(1);
        }else if (hospital == null || hospital == ""){
            String sql1 = "select * from wlyy_hospital_service_item where 1=1 AND hospital = '"+docHospital+"' "+sqlUtil;
            List<HospitalServiceItemDO> hospitalServiceItemDOList = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(HospitalServiceItemDO.class));
            for (HospitalServiceItemDO hospitalServiceItemDO:hospitalServiceItemDOList){
                hospitalServiceItemDO.setFlag(2);
                hospitalServiceItemDOS1.add(hospitalServiceItemDO);
            }
        }else{
            String sql = "select * from wlyy_hospital_service_item where 1=1 AND hospital = '"+hospital+"' "+sqlUtil;
            List<HospitalServiceItemDO> hospitalServiceItemDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(HospitalServiceItemDO.class));
            String sql1 = "select * from wlyy_hospital_service_item where 1=1 AND hospital = '"+docHospital+"' "+sqlUtil;
            List<HospitalServiceItemDO> hospitalServiceItemDOList = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(HospitalServiceItemDO.class));
            for (HospitalServiceItemDO hospitalServiceItemDO:hospitalServiceItemDOList){
                boolean flag = false;
                for (HospitalServiceItemDO hospitalServiceItemDO1 :hospitalServiceItemDOS){
                    boolean isTrue = false;
                    if (hospitalServiceItemDOS1 != null && hospitalServiceItemDOS1.size() != 0){
                        for (HospitalServiceItemDO hospitalServiceItemDO2:hospitalServiceItemDOS1){
                            if (hospitalServiceItemDO1.getServiceItemId().equals(hospitalServiceItemDO2.getServiceItemId())){
                                isTrue = true;
                            }
                        }
                    }
                    if (hospitalServiceItemDO.getServiceItemId().equals(hospitalServiceItemDO1.getServiceItemId())){
                        if (isTrue==false){
                            hospitalServiceItemDO1.setFlag(3);
                            hospitalServiceItemDOS1.add(hospitalServiceItemDO);
                            flag = true;
                            break;
                        }
                    }else{
                        if (isTrue == false){
                            hospitalServiceItemDO1.setFlag(2);
                            hospitalServiceItemDOS1.add(hospitalServiceItemDO1);
                        }
                    }
                }
                if (flag==false){
                    boolean isTure1 = false;
                    if (hospitalServiceItemDOS1 != null && hospitalServiceItemDOS1.size() != 0){
                        for (HospitalServiceItemDO hospitalServiceItemDO2:hospitalServiceItemDOS1){
                            if (hospitalServiceItemDO.getServiceItemId().equals(hospitalServiceItemDO2.getServiceItemId())){
                                isTure1 = true;
                            }
                        }
                    }
                    if (isTure1 == false){
                        hospitalServiceItemDO.setFlag(1);
                        hospitalServiceItemDOS1.add(hospitalServiceItemDO);
                    }
                }
            }
        }
        for (HospitalServiceItemDO hospitalServiceItemDO:hospitalServiceItemDOS1){
            SpecialistServiceItemDO specialistServiceItemDO = specialistServiceItemDao.findOne(hospitalServiceItemDO.getServiceItemId());
@ -131,7 +166,7 @@ public class SpecialistHospitalServiceItemService extends EnvelopRestEndpoint {
            SpecialistServiceItemDO specialistServiceItemDO = hospitalServiceItemDO.getSpecialistServiceItemDO();
            if (itemType != null && itemType.size() != 0){
                for (int i=0;i<itemType.size();i++){
                    if (!itemType.get(i).equals(specialistServiceItemDO.getItemType())){
                    if (!itemType.contains(specialistServiceItemDO.getItemType())){
                        itemType.add(specialistServiceItemDO.getItemType());
                    }
                }
@ -145,9 +180,9 @@ 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())){
                    type.add(specialistServiceItemDO.getDiseaseItem());
                }
            }
            type.add(specialistServiceItemDO.getDiseaseItem());
        }
    }
            JSONArray itemArray = new JSONArray();
            if (type != null && type.size() != 0){
                for (int z =0 ;z<type.size();z++){
@ -210,34 +245,53 @@ public class SpecialistHospitalServiceItemService extends EnvelopRestEndpoint {
     * @param hospitals 医院code集合
     * @return
     */
    public MixEnvelop<HospitalServiceItemDO,HospitalServiceItemDO> selectByCondition(String serviceItemName,List<String> hospitals){
        MixEnvelop<HospitalServiceItemDO,HospitalServiceItemDO> envelop = new MixEnvelop<>();
        if (StringUtils.isNoneBlank(serviceItemName)){
    public MixEnvelop<JSONArray,JSONArray> selectByCondition(String serviceItemName,List<String> hospitals){
        MixEnvelop<JSONArray,JSONArray> envelop = new MixEnvelop<>();
        /*if (StringUtils.isNoneBlank(serviceItemName)||serviceItemName != null){
            String sql = "select * from wlyy_hospital_service_item where service_item_name = '"+serviceItemName+"' and status=1";
            List<HospitalServiceItemDO> hospitalServiceItemDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(HospitalServiceItemDO.class));
            for (HospitalServiceItemDO hospitalServiceItemDO:hospitalServiceItemDOS){
                SpecialistServiceItemDO specialistServiceItemDO = specialistServiceItemDao.findOne(hospitalServiceItemDO.getServiceItemId());
                hospitalServiceItemDO.setSpecialistServiceItemDO(specialistServiceItemDO);
            }
            envelop.setDetailModelList(hospitalServiceItemDOS);
        }else {
            StringBuffer buffer = new StringBuffer();
            if(hospitals != null && hospitals.size()!=0){
                buffer.append(" and hospital in (");
                for (int i =0 ;i<hospitals.size();i++){
                    buffer.append("'"+hospitals.get(i)+"',");
                }
                buffer.deleteCharAt(buffer.length()-1);
                buffer.append(")");
            JSONArray array = new JSONArray();
            for (int i =0 ;i<hospitalServiceItemDOS.size();i++){
                SpecialistServiceItemDO specialistServiceItemDO = hospitalServiceItemDOS.get(i).getSpecialistServiceItemDO();
                JSONObject object = new JSONObject();
                object.put("itemName",specialistServiceItemDO.getItemType());
                object.put("hospitalServiceItem",hospitalServiceItemDOS.get(i));
                array.add(object);
            }
            String sql = "select * from wlyy_hospital_service_item where 1=1 "+buffer;
            List<HospitalServiceItemDO> hospitalServiceItemDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(HospitalServiceItemDO.class));
            for (HospitalServiceItemDO hospitalServiceItemDO:hospitalServiceItemDOS){
                SpecialistServiceItemDO specialistServiceItemDO = specialistServiceItemDao.findOne(hospitalServiceItemDO.getServiceItemId());
                hospitalServiceItemDO.setSpecialistServiceItemDO(specialistServiceItemDO);
            List<JSONArray> list = new ArrayList<>();
            list.add(array);
            envelop.setDetailModelList(list);
        }else {*/
        StringBuffer buffer = new StringBuffer();
        if(hospitals != null && hospitals.size()!=0){
            buffer.append(" and hospital in (");
            for (int i =0 ;i<hospitals.size();i++){
                buffer.append("'"+hospitals.get(i)+"',");
            }
            envelop.setDetailModelList(hospitalServiceItemDOS);
            buffer.deleteCharAt(buffer.length()-1);
            buffer.append(")");
        }
        String sql = "select * from wlyy_hospital_service_item where 1=1 AND status=1"+buffer;
        List<HospitalServiceItemDO> hospitalServiceItemDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(HospitalServiceItemDO.class));
        for (HospitalServiceItemDO hospitalServiceItemDO:hospitalServiceItemDOS){
            SpecialistServiceItemDO specialistServiceItemDO = specialistServiceItemDao.findOne(hospitalServiceItemDO.getServiceItemId());
            hospitalServiceItemDO.setSpecialistServiceItemDO(specialistServiceItemDO);
        }
        JSONArray array = new JSONArray();
        for (int i =0 ;i<hospitalServiceItemDOS.size();i++){
            SpecialistServiceItemDO specialistServiceItemDO = hospitalServiceItemDOS.get(i).getSpecialistServiceItemDO();
            JSONObject object = new JSONObject();
            object.put("itemName",specialistServiceItemDO.getItemType());
            object.put("hospitalServiceItem",hospitalServiceItemDOS.get(i));
            array.add(object);
        }
        List<JSONArray> list = new ArrayList<>();
        list.add(array);
        envelop.setDetailModelList(list);
        return envelop;
    }
@ -263,4 +317,28 @@ public class SpecialistHospitalServiceItemService extends EnvelopRestEndpoint {
    }
    /**
     * 机构服务项目数据添加
     *
     * @param hospitalServiceItemDOS
     * @return
     */
    public MixEnvelop<Boolean,Boolean> importData(List<HospitalServiceItemDO> hospitalServiceItemDOS) {
        MixEnvelop<Boolean,Boolean> envelop = new MixEnvelop<>();
        if (hospitalServiceItemDOS != null && hospitalServiceItemDOS.size()!=0){
            for (HospitalServiceItemDO hospitalServiceItemDO:hospitalServiceItemDOS){
                List<HospitalServiceItemDO> hospitalServiceItemDOList = specialistHospitalServiceItemDao.findByHospitalAndServiceItemId(hospitalServiceItemDO.getHospital(),hospitalServiceItemDO.getServiceItemId());
                if (hospitalServiceItemDOList == null && hospitalServiceItemDOList.size() ==0){
                    continue;
                }else {
                    hospitalServiceItemDO.setStatus(1);
                    hospitalServiceItemDO.setId(UUID.randomUUID().toString());
                    specialistHospitalServiceItemDao.save(hospitalServiceItemDO);
                }
            }
        }
        envelop.setObj(true);
        return envelop;
    }
}

+ 15 - 29
svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/service/SpecialistServiceItemService.java

@ -12,11 +12,7 @@ import com.yihu.jw.entity.specialist.SpecialistServiceItemDO;
import com.yihu.jw.entity.specialist.SpecialistServiceItemOperateLogDO;
import com.yihu.jw.restmodel.web.MixEnvelop;
import com.yihu.jw.rm.health.bank.HealthBankMapping;
import com.yihu.jw.util.ExcelData;
import com.yihu.jw.util.ISqlUtils;
import com.yihu.jw.util.ReadExcelUtil;
import jxl.Sheet;
import jxl.Workbook;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
@ -192,43 +188,33 @@ public class SpecialistServiceItemService {
    /**
     * 导数据
     *
     * @param workbook
     * @param specialistServiceItemDOS
     * @return
     */
    public MixEnvelop<Boolean,Boolean> importData(Workbook workbook) {
    public MixEnvelop<Boolean,Boolean> importData(List<SpecialistServiceItemDO> specialistServiceItemDOS) {
        MixEnvelop<Boolean,Boolean> envelop = new MixEnvelop<>();
        Sheet[] sheets = workbook.getSheets();
        Sheet sheet = sheets[0];
        int rows = ReadExcelUtil.getRightRows(sheet);
        for (int row = 1; row < rows; row++) {  //索引从0开始,第一行为标题
            SpecialistServiceItemDO itemDO = new SpecialistServiceItemDO();
            Map<Integer, ExcelData> mapping = mapping(itemDO);
            int finalRow = row;
            mapping.forEach((index, excelData) -> {
                String value = sheet.getCell(index, finalRow).getContents().trim();
                excelData.transform(value);
            });
            //Additional Handel
            List<SpecialistServiceItemDO> specialistServiceItemDOS = specialistServiceItemDao.findByTitle(itemDO.getTitle());
           if (specialistServiceItemDOS == null && specialistServiceItemDOS.size() ==0){
               continue;
           }else {
                itemDO.setStatus(1);
                specialistServiceItemDao.save(itemDO);
           }
        if (specialistServiceItemDOS != null && specialistServiceItemDOS.size()!=0){
            for (SpecialistServiceItemDO specialistServiceItemDO:specialistServiceItemDOS){
                List<SpecialistServiceItemDO> specialistServiceItemDOList = specialistServiceItemDao.findByTitle(specialistServiceItemDO.getTitle());
                if (specialistServiceItemDOList == null && specialistServiceItemDOList.size() ==0){
                    continue;
                }else {
                    specialistServiceItemDO.setStatus(1);
                    specialistServiceItemDO.setId(UUID.randomUUID().toString());
                    specialistServiceItemDao.save(specialistServiceItemDO);
                }
            }
        }
        envelop.setObj(true);
        return envelop;
    }
    /**
     * 表格数据转为对象
     *
     * @param specialistServiceItemDO
     * @return
     */
     *//*
    private Map<Integer, ExcelData> mapping(SpecialistServiceItemDO specialistServiceItemDO) {
        Map<Integer, ExcelData> dataMap = new HashMap<>();
        //项目名称
@ -368,7 +354,7 @@ public class SpecialistServiceItemService {
        });
        specialistServiceItemDO.setId(UUID.randomUUID().toString());
        return dataMap;
    }
    }*/

+ 1 - 1
wlyy-parent-pom/pom.xml

@ -375,7 +375,7 @@
                <version>${asciidoctor.maven.plugin.version}</version>
                <configuration>
                    <sourceDirectory>build</sourceDirectory>
                    <outputDirectory>docs/${project.version}</outputDirectory>
                    <outputDirectory>doc/${project.version}</outputDirectory>
                    <headerFooter>true</headerFooter>
                    <doctype>book</doctype>
                    <sourceHighlighter>coderay</sourceHighlighter>