Trick 5 年 前
コミット
3744078565

+ 103 - 2
common/common-entity/src/main/java/com/yihu/jw/entity/hospital/prescription/WlyyInspectionDO.java

@ -1,5 +1,6 @@
package com.yihu.jw.entity.hospital.prescription;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.UuidIdentityEntity;
import javax.persistence.Entity;
@ -15,14 +16,26 @@ public class WlyyInspectionDO extends UuidIdentityEntity {
    private String outpatientId;//门诊id',
    private String prescriptionId;//处方id',
    private String name;//检验名称',
    private String code;//项目编码',
    private String name;//(检查方法)',
    private String information;//病史与体征',
    private String checkEquip;//类别',
    private String checkPart;//部位',
    private String adresult;//辅助检查治疗',
    private String goal;//检查目的',
    private String opview;//手术所见-病理申请单必填',
    private String specimenName;//标本名称-病理申请单必填',
    private String specimenNum;//标本数量-病理申请单必填',
    private String ywjcResult;//以往检查结果-病理申请单选填',
    private String ywjcDate;//以往检查时间-病理申请单选填 格式:yyyy-mm-dd',
    private String blzd;//病理诊断-病理申请单选填',
    private String chargeUnit;//项目单位',
    private String chargeAmount;//项目单价',
    private String pyCode;//拼音码',
    private String dCode;//自定义码',
    private String code;//项目编码',
    private String execUnit;//执行科室',
    private String winNo;//院区',
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    private Date createTime;//,
    public String getOutpatientId() {
@ -112,4 +125,92 @@ public class WlyyInspectionDO extends UuidIdentityEntity {
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public String getInformation() {
        return information;
    }
    public void setInformation(String information) {
        this.information = information;
    }
    public String getCheckEquip() {
        return checkEquip;
    }
    public void setCheckEquip(String checkEquip) {
        this.checkEquip = checkEquip;
    }
    public String getCheckPart() {
        return checkPart;
    }
    public void setCheckPart(String checkPart) {
        this.checkPart = checkPart;
    }
    public String getAdresult() {
        return adresult;
    }
    public void setAdresult(String adresult) {
        this.adresult = adresult;
    }
    public String getGoal() {
        return goal;
    }
    public void setGoal(String goal) {
        this.goal = goal;
    }
    public String getOpview() {
        return opview;
    }
    public void setOpview(String opview) {
        this.opview = opview;
    }
    public String getSpecimenName() {
        return specimenName;
    }
    public void setSpecimenName(String specimenName) {
        this.specimenName = specimenName;
    }
    public String getSpecimenNum() {
        return specimenNum;
    }
    public void setSpecimenNum(String specimenNum) {
        this.specimenNum = specimenNum;
    }
    public String getYwjcResult() {
        return ywjcResult;
    }
    public void setYwjcResult(String ywjcResult) {
        this.ywjcResult = ywjcResult;
    }
    public String getYwjcDate() {
        return ywjcDate;
    }
    public void setYwjcDate(String ywjcDate) {
        this.ywjcDate = ywjcDate;
    }
    public String getBlzd() {
        return blzd;
    }
    public void setBlzd(String blzd) {
        this.blzd = blzd;
    }
}

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

@ -106,6 +106,8 @@ public class WlyyHisPrescriptionVO extends UuidIdentityVOWithOperator {
     */
    private String diagFive;
    public String getCardNo() {
        return cardNo;
    }

+ 108 - 2
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/hospital/prescription/WlyyInspectionVO.java

@ -1,5 +1,6 @@
package com.yihu.jw.restmodel.hospital.prescription;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.restmodel.UuidIdentityVO;
import io.swagger.annotations.ApiModel;
@ -13,14 +14,31 @@ public class WlyyInspectionVO extends UuidIdentityVO {
    private String outpatientId;//门诊id',
    private String prescriptionId;//处方id',
    private String name;//检验名称',
    private String code;//项目编码',
    private String name;//(检查方法)',
    private String information;//病史与体征',
    private String checkEquip;//类别',
    private String checkPart;//部位',
    private String adresult;//辅助检查治疗',
    private String goal;//检查目的',
    //病理相关
    private String opview;//手术所见-病理申请单必填',
    private String specimenName;//标本名称-病理申请单必填',
    private String specimenNum;//标本数量-病理申请单必填',
    private String ywjcResult;//以往检查结果-病理申请单选填',
    private String ywjcDate;//以往检查时间-病理申请单选填 格式:yyyy-mm-dd',
    private String blzd;//病理诊断-病理申请单选填',
    private String chargeUnit;//项目单位',
    private String chargeAmount;//项目单价',
    private String pyCode;//拼音码',
    private String dCode;//自定义码',
    private String code;//项目编码',
    private String execUnit;//执行科室',
    private String winNo;//院区',
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    private Date createTime;//,
    public String getOutpatientId() {
@ -110,4 +128,92 @@ public class WlyyInspectionVO extends UuidIdentityVO {
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public String getInformation() {
        return information;
    }
    public void setInformation(String information) {
        this.information = information;
    }
    public String getCheckEquip() {
        return checkEquip;
    }
    public void setCheckEquip(String checkEquip) {
        this.checkEquip = checkEquip;
    }
    public String getCheckPart() {
        return checkPart;
    }
    public void setCheckPart(String checkPart) {
        this.checkPart = checkPart;
    }
    public String getAdresult() {
        return adresult;
    }
    public void setAdresult(String adresult) {
        this.adresult = adresult;
    }
    public String getGoal() {
        return goal;
    }
    public void setGoal(String goal) {
        this.goal = goal;
    }
    public String getOpview() {
        return opview;
    }
    public void setOpview(String opview) {
        this.opview = opview;
    }
    public String getSpecimenName() {
        return specimenName;
    }
    public void setSpecimenName(String specimenName) {
        this.specimenName = specimenName;
    }
    public String getSpecimenNum() {
        return specimenNum;
    }
    public void setSpecimenNum(String specimenNum) {
        this.specimenNum = specimenNum;
    }
    public String getYwjcResult() {
        return ywjcResult;
    }
    public void setYwjcResult(String ywjcResult) {
        this.ywjcResult = ywjcResult;
    }
    public String getYwjcDate() {
        return ywjcDate;
    }
    public void setYwjcDate(String ywjcDate) {
        this.ywjcDate = ywjcDate;
    }
    public String getBlzd() {
        return blzd;
    }
    public void setBlzd(String blzd) {
        this.blzd = blzd;
    }
}

+ 6 - 0
server/svr-authentication/pom.xml

@ -137,6 +137,12 @@
            <artifactId>javase</artifactId>
            <version>RELEASE</version>
        </dependency>
        <!--验证码-->
        <dependency>
            <groupId>com.google.code.kaptcha</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3</version>
        </dependency>
    </dependencies>

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

@ -2,6 +2,8 @@ package com.yihu.jw.security.oauth2.provider.endpoint;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import com.yihu.jw.entity.base.login.BaseLoginLogDO;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.ylzinfo.OauthYlzConfigDO;
@ -20,6 +22,9 @@ import com.yihu.jw.security.service.OauthYlzConfigService;
import com.yihu.jw.security.utils.DateUtil;
import com.yihu.jw.security.utils.SerializeUtil;
import com.yihu.utils.security.RSAUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.collections.map.HashedMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -49,21 +54,24 @@ import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.PostConstruct;
import javax.imageio.ImageIO;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.*;
import java.util.concurrent.TimeUnit;
import com.alibaba.fastjson.JSON;
import sun.misc.BASE64Encoder;
/**
 * <p>
@ -74,6 +82,7 @@ import com.alibaba.fastjson.JSON;
 * @author Progr1mmer
 * @created on 2018/8/29
 */
@Api(description = "认证服务")
@RestController
public class WlyyLoginEndpoint extends AbstractEndpoint {
@ -109,6 +118,7 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
    @Autowired
    private OauthWlyyConfigService oauthWlyyConfigService;
    @PostConstruct
    private void init() {
        super.setTokenGranter(tokenGranter);
@ -122,6 +132,8 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
     *                    captcha 验证码
     *                    password 密码
     *                    username 用户名/手机/身份证号
     *                    key 图形验证码键值
     *                    text 用户输入的图形验证码
     *                    login_type 用户类型 1或默认为user,2:医生登录,3:患者登录,4:第三方同步账号登录,5.易联众居民健康卡授权登录
     * @param httpSession
     * @return
@ -129,6 +141,16 @@ 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 key = parameters.get("key");
        String text = parameters.get("text");
        if(org.apache.commons.lang3.StringUtils.isNotBlank(key)&& org.apache.commons.lang3.StringUtils.isNotBlank(text)){
            if(!verifyCaptcha(key,text)){
                throw new InvalidRequestException("img_captcha error");
            }
        }
        String username = parameters.get("username");
        if (StringUtils.isEmpty(username)) {
            throw new InvalidRequestException("username");
@ -832,4 +854,49 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
        return ObjEnvelop.getSuccess("success",map);
    }
    @RequestMapping(value = "/oauth/imgCaptcha", method = RequestMethod.GET)
    @ApiOperation("生成验证码")
    public ObjEnvelop createCaptcha()throws Exception{
        return ObjEnvelop.getSuccess("success",generateCaptcha());
    }
    private Map<String, String> generateCaptcha() throws IOException {
        DefaultKaptcha captchaProducer = new DefaultKaptcha();
        Properties properties = new Properties();
        properties.put("kaptcha.textproducer.font.color", "blue");
        properties.put("kaptcha.textproducer.font.size", "45");
        properties.put("kaptcha.textproducer.char.length", "4");
        properties.put("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
        properties.put("kaptcha.textproducer.char.string","0123456789QWERTYUIOPLKJHGFDSAZXCVBNM");
        Config config = new Config(properties);
        captchaProducer.setConfig(config);
        String captchaText = captchaProducer.createText();
        BufferedImage image = captchaProducer.createImage(captchaText);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ImageIO.write(image, "png", outputStream);
        String base64Img = new BASE64Encoder().encode(outputStream.toByteArray());
        base64Img = "data:image/jpeg;base64,"+base64Img.replaceAll("\n", "").replaceAll("\r", "");//格式化处理
        String key = "hwlyy:captcha:" + UUID.randomUUID().toString();
        Map<String, String> data = new HashMap<>();
        data.put("key", key);
        data.put("image", base64Img);
        data.put("format", "png");
        redisTemplate.opsForValue().set(key,captchaText.toLowerCase(),5, TimeUnit.MINUTES);
        return data;
    }
    public boolean verifyCaptcha(String key,String text){
        boolean pass = false;
        String captcha = redisTemplate.opsForValue().get(key);
        if (org.apache.commons.lang3.StringUtils.isNotBlank(captcha)&& captcha.equals(text.toLowerCase())){
            pass = true;
            redisTemplate.delete(key);
        }
        return pass;
    }
}

+ 1 - 1
server/svr-authentication/src/main/resources/bootstrap.yml

@ -1,6 +1,6 @@
spring:
  application:
    name: svr-authentication
    name: svr-authentication-lyx
  cloud:
    config:
      failFast: true