Kaynağa Gözat

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

humingfen 6 yıl önce
ebeveyn
işleme
1df4d0ef54

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

@ -41,6 +41,7 @@ public class SpecialistMapping {
        public static final String searchPatientInSpeciaInfo ="/searchPatientInSpeciaInfo";
        public static final String createPatientInSpeciaRelation ="/createPatientInSpeciaRelation";
        public static final String updateRedisFindPatientTeamList ="/updateRedisFindPatientTeamList";
        public static final String selectByAssistant="/selectByAssistant";

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

@ -134,7 +134,7 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
            return "账号已被锁定,请5分钟后重试!";
        } else {
            addFailureCount(username,loginFailureCount);
            return "密码错误,还可以再试" + (5 - loginFailureCount) + "次!";
            return "账号或密码错误,还可以再试" + (5 - loginFailureCount) + "次!";
        }
    }

+ 57 - 21
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/open/register/RegisterEndpoint.java

@ -5,6 +5,7 @@ import com.yihu.jw.base.service.saas.SaasService;
import com.yihu.jw.base.service.saas.SaasTypeDictService;
import com.yihu.jw.base.service.user.UserService;
import com.yihu.jw.base.util.ErrorCodeUtil;
import com.yihu.jw.base.util.SendEmailUtils;
import com.yihu.jw.base.util.ValidateUtil;
import com.yihu.jw.entity.base.saas.BaseEmailTemplateConfigDO;
import com.yihu.jw.entity.base.saas.SaasDO;
@ -14,6 +15,7 @@ import com.yihu.jw.restmodel.base.saas.SaasTypeDictVO;
import com.yihu.jw.restmodel.base.saas.SaasVO;
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.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.base.BaseRequestMapping;
import io.swagger.annotations.Api;
@ -27,7 +29,15 @@ import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.*;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.io.UnsupportedEncodingException;
import java.util.Calendar;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
/**
@ -146,41 +156,67 @@ public class RegisterEndpoint extends EnvelopRestEndpoint {
    @PostMapping(value = BaseRequestMapping.RegisterSaas.SEND_EMAIL)
    @ApiOperation(value = "邮件发送")
    public Envelop send(@ApiParam(name = "email", value = "邮箱地址", required = true)
                         @RequestParam String email) throws Exception {
                        @RequestParam String email) throws Exception {
        if(!ValidateUtil.isValidEmail(email)){
        if (!ValidateUtil.isValidEmail(email)) {
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Saas.EMAIL_IS_NOT_FORMAT), Envelop.class);
        }
        //建立邮件消息
        SimpleMailMessage mainMessage = new SimpleMailMessage();
        //发送者
        mainMessage.setFrom(username);
        //接收者
        mainMessage.setTo(email);
        //发送的标题
        //查找发送模板
        BaseEmailTemplateConfigDO emailTemplateConfigDO = emailTemplateConfigDao.findByTemplateName("租户注册-验证码");
        StringBuilder content = null;
        String captcha = String.valueOf(Math.random()).substring(2, 8);
        if(emailTemplateConfigDO == null){
        if (emailTemplateConfigDO == null) {
            //发送的内容
            content =  new StringBuilder("您好!\n感谢您注册健康之路城市i健康。\n");
            content = new StringBuilder("您好!\n感谢您注册健康之路城市i健康。\n");
            content.append("您的验证码是:").append(captcha);
            content.append("。 (验证码10分钟内有效)");
        }else {
        } else {
            //发送的内容
            content =  new StringBuilder(emailTemplateConfigDO.getFirst());
            content = new StringBuilder(emailTemplateConfigDO.getFirst());
            content.append("\n").append(emailTemplateConfigDO.getKeyword1()).append("\n")
                .append(emailTemplateConfigDO.getKeyword2()).append(captcha)
                .append(emailTemplateConfigDO.getKeyword3()).append("\n")
                .append(emailTemplateConfigDO.getKeyword5()).append(emailTemplateConfigDO.getUrl())
                .append("\n").append("\n").append(emailTemplateConfigDO.getRemark());
                    .append(emailTemplateConfigDO.getKeyword2()).append(captcha)
                    .append(emailTemplateConfigDO.getKeyword3()).append("\n")
                    .append(emailTemplateConfigDO.getKeyword5()).append(emailTemplateConfigDO.getUrl())
                    .append("\n").append("\n").append(emailTemplateConfigDO.getRemark());
        }
        mainMessage.setSubject("租户注册-验证码");
        mainMessage.setText(content.toString());
        jms.send(mainMessage);
        String subject = "租户注册验证码";
        boolean blo = SendEmailUtils.sendMessage(email, content.toString(), subject);
        redisTemplate.opsForValue().set(redisPrefix + email, captcha, 10, TimeUnit.MINUTES);
        return success("发送成功");
        if (blo) {
            return success("success", true);
        } else {
            return failed("failed", ObjEnvelop.class);
        }
    }
    @PostMapping(value = "/testSendEmailMethod")
    @ApiOperation(value = "测试邮件发送")
    public Envelop testSendEmailMethod(@ApiParam(name = "email", value = "邮箱地址", required = true)
                                       @RequestParam String email) throws Exception {
        if (!ValidateUtil.isValidEmail(email)) {
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Saas.EMAIL_IS_NOT_FORMAT), Envelop.class);
        }
        try {
            // 设置主题
            String subject = "租户注册验证码";
            //发送的内容
            String captcha = String.valueOf(Math.random()).substring(2, 8);
            StringBuilder content = new StringBuilder("您好!\n感谢您注册健康之路城市i健康。\n");
            content.append("您的验证码是:").append(captcha);
            content.append("。 (验证码10分钟内有效)");
            boolean blo = SendEmailUtils.sendMessage(email, content.toString(), subject);
            if (blo) {
                return success("success", true);
            } else {
                return failed("failed", ObjEnvelop.class);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return failed(e.getMessage(), ObjEnvelop.class);
        }
    }
}

+ 3 - 10
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/saas/SaasEndpoint.java

@ -7,6 +7,7 @@ import com.yihu.jw.base.service.saas.SaasService;
import com.yihu.jw.base.service.saas.SaasTypeDictService;
import com.yihu.jw.base.service.user.UserService;
import com.yihu.jw.base.util.ErrorCodeUtil;
import com.yihu.jw.base.util.SendEmailUtils;
import com.yihu.jw.base.util.ValidateUtil;
import com.yihu.jw.entity.base.module.ModuleDO;
import com.yihu.jw.entity.base.module.SaasModuleDO;
@ -296,14 +297,6 @@ public class SaasEndpoint extends EnvelopRestEndpoint {
            if (null == baseEmailTemplateConfigDO) {
                failed(status.name() + "邮件模板不存在!");
            }
            //建立邮件消息
            SimpleMailMessage mainMessage = new SimpleMailMessage();
            //发送者
            mainMessage.setFrom(username);
            //接收者
            mainMessage.setTo(saasDO.getEmail());
            //发送的标题
            mainMessage.setSubject(baseEmailTemplateConfigDO.getTemplateName());
            //发送的内容
            StringBuffer content = new StringBuffer();
            content.append(baseEmailTemplateConfigDO.getFirst() + "\n").append(baseEmailTemplateConfigDO.getKeyword1() + "\n");
@ -319,8 +312,8 @@ public class SaasEndpoint extends EnvelopRestEndpoint {
            }
            content.append(baseEmailTemplateConfigDO.getKeyword5() + baseEmailTemplateConfigDO.getUrl() + "\n");
            content.append(baseEmailTemplateConfigDO.getRemark());
            mainMessage.setText(content.toString());
            jms.send(mainMessage);
            boolean blo = SendEmailUtils.sendMessage(saasDO.getEmail(), content.toString(), baseEmailTemplateConfigDO.getTemplateName());
            System.out.println("sendEmail--"+blo);
        } catch (MailException e) {
            e.printStackTrace();
            return failed("邮件发送失败!"+e.getMessage(),ObjEnvelop.class);

+ 3 - 10
svr/svr-base/src/main/java/com/yihu/jw/base/service/saas/SaasService.java

@ -14,6 +14,7 @@ import com.yihu.jw.base.dao.system.SystemDictEntryDao;
import com.yihu.jw.base.dao.user.UserDao;
import com.yihu.jw.base.dao.user.UserRoleDao;
import com.yihu.jw.base.service.dict.DictHospitalDeptService;
import com.yihu.jw.base.util.SendEmailUtils;
import com.yihu.jw.entity.base.dict.*;
import com.yihu.jw.entity.base.module.ModuleDO;
import com.yihu.jw.entity.base.module.SaasModuleDO;
@ -154,14 +155,6 @@ public class SaasService extends BaseJpaService<SaasDO, SaasDao> {
            if (null == baseEmailTemplateConfigDO) {
                return;
            }
            //建立邮件消息
            SimpleMailMessage mainMessage = new SimpleMailMessage();
            //发送者
            mainMessage.setFrom(username);
            //接收者
            mainMessage.setTo(saasDO.getEmail());
            //发送的标题
            mainMessage.setSubject(baseEmailTemplateConfigDO.getTemplateName());
            //发送的内容
            StringBuffer content = new StringBuffer();
            content.append(baseEmailTemplateConfigDO.getFirst() + "\n").append(baseEmailTemplateConfigDO.getKeyword1() + "\n");
@ -177,8 +170,8 @@ public class SaasService extends BaseJpaService<SaasDO, SaasDao> {
            }
            content.append(baseEmailTemplateConfigDO.getKeyword5() + baseEmailTemplateConfigDO.getUrl() + "\n");
            content.append(baseEmailTemplateConfigDO.getRemark());
            mainMessage.setText(content.toString());
            jms.send(mainMessage);
            boolean blo = SendEmailUtils.sendMessage(saasDO.getEmail(), content.toString(), baseEmailTemplateConfigDO.getTemplateName());
            System.out.println("sendEmail--"+blo);
        } catch (MailException e) {
            e.printStackTrace();
        }

+ 9 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/service/wx/WechatService.java

@ -400,6 +400,14 @@ public class WechatService {
                wxReplySceneDao.delete(list);
            }
        }
        wxReplySceneDO.setCreateUser(userAgent.getUID());
        wxReplySceneDO.setCreateUserName(userAgent.getUNAME());
        wxReplySceneDO.setCreateTime(new Date());
        wxReplySceneDO.setUpdateUser(userAgent.getUID());
        wxReplySceneDO.setUpdateUserName(userAgent.getUNAME());
        wxReplySceneDO.setUpdateTime(new Date());
        wxReplySceneDao.save(wxReplySceneDO);
        return Envelop.getSuccess(BaseRequestMapping.WeChat.api_success);
    }
@ -504,7 +512,7 @@ public class WechatService {
        if(status!=null){
            sql += " AND s.status = "+status;
        }
        sql+=" LIMIT  " + (page - 1) * size + "," + size + "";
        sql+=" ORDER BY s.create_time DESC LIMIT  " + (page - 1) * size + "," + size + "";
        List<WxReplySceneVO> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(WxReplySceneVO.class));
        return MixEnvelop.getSuccessListWithPage(BaseRequestMapping.WeChat.api_success, list, page, size, count);

+ 193 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/util/SendEmailUtils.java

@ -0,0 +1,193 @@
package com.yihu.jw.base.util;
import com.sun.mail.util.MailSSLSocketFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.io.UnsupportedEncodingException;
import java.util.Calendar;
import java.util.Properties;
/**
 * Created by zdm on 2018/11/21.
 */
@Component
public class SendEmailUtils {
    private static String username;
    private  static  String smtp;
    private  static  String host;
    private  static  String port;
    private  static  String auth;
    private  static  String timeout;
    private  static  String password;
    /**
     * mimeMessage发送邮件
     * @param email 目标邮箱
     * @param content 邮件主体内容
     * @param subject 邮件标题
     * @return
     */
    public static  boolean mimeMessage(String email,String content,String subject){
        // 1.创建一个程序与邮件服务器会话对象 Session
        Properties props = new Properties();
        props.setProperty("mail.transport.protocol", smtp);// 连接协议
        props.setProperty("mail.smtp.host", host);// 连接协议
        props.setProperty("mail.smtp.port", port);// 连接协议
        // 指定验证为true
        props.setProperty("mail.smtp.auth", auth);
        props.setProperty("mail.smtp.timeout",timeout);
        props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        // 验证账号及密码,密码需要是第三方授权码
        Authenticator auth = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication(){
                return new PasswordAuthentication(username, password);
            }
        };
        Session session = Session.getInstance(props, auth);
        // 2.创建一个Message,它相当于是邮件内容
        MimeMessage message = new MimeMessage(session);
        try {
            //防止成为垃圾邮件,披上outlook的马甲
            message.addHeader("X-Priority", "3");
            message.addHeader("X-MSMail-Priority", "Normal");
            message.addHeader("X-Mailer", "Microsoft Outlook Express 6.00.2900.2869");   //本文以outlook名义发送邮件,不会被当作垃圾邮件
            message.addHeader("X-MimeOLE", "Produced By Microsoft MimeOLE V6.00.2900.2869");
            message.addHeader("ReturnReceipt", "1");
            // 设置发送者
            String nick=javax.mail.internet.MimeUtility.encodeText("厦门i健康");
            message.setFrom(new InternetAddress(nick+" <"+username+">"));
            // 设置发送方式与接收者
            message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(email));
            // 设置主题
            message.setSubject(subject);
            //创建消息主体
            MimeBodyPart messageBodyPart = new MimeBodyPart();
            //发送的内容
            messageBodyPart.setText(content);
            // 创建多重消息
            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(messageBodyPart);
            // 设置邮件消息发送的时间
            message.setSentDate(Calendar.getInstance().getTime());
            // 设置内容
            message.setContent(multipart, "text/html;charset=utf-8");
            // 3.创建 Transport用于将邮件发送
            Transport.send(message);
        }catch (Exception e){
            e.printStackTrace();
        }
            return  true;
    }
    /**
     * 邮件发送
     * @param email 目标邮箱
     * @param content 邮件主体内容
     * @param subject 邮件主题
     * @return
     */
    public static boolean  sendMessage(String email,String content,String subject){
        // 配置
        Properties prop=new Properties();
        // 设置邮件服务器主机名,这里是163
        prop.put("mail.host",host );
        // 发送邮件协议名称
        prop.put("mail.transport.protocol",smtp);
        // 是否认证
        prop.put("mail.smtp.auth", auth);
        try {
            // SSL加密
            MailSSLSocketFactory sf = null;
            sf = new MailSSLSocketFactory();
            // 设置信任所有的主机
            sf.setTrustAllHosts(true);
            prop.put("mail.smtp.ssl.enable", true);
            prop.put("mail.smtp.ssl.socketFactory", sf);
            // 创建会话对象
            Session session = Session.getInstance(prop, new Authenticator() {
                // 认证信息,需要提供"用户账号","授权码"
                public PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(username, password);
                }
            });
            // 是否打印出debug信息
//            session.setDebug(true);
            // 创建邮件
            Message message = new MimeMessage(session);
            // 邮件发送者
            message.setFrom(new InternetAddress(username));
            // 邮件接受者
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
            // 邮件主题
            message.setSubject(subject);
            message.setContent(content, "text/html;charset=UTF-8");
            // Transport.send(message);
            // 邮件发送
            Transport transport = session.getTransport();
            transport.connect();
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
    @Value("${spring.mail.username}")
    public void setUsername(String username) {
        SendEmailUtils.username = username;
    }
    @Value("${spring.mail.protocol}")
    public void setSmtp(String smtp) {
        SendEmailUtils.smtp = smtp;
    }
    @Value("${spring.mail.host}")
    public void setHost(String host) {
        SendEmailUtils.host = host;
    }
    @Value("${spring.mail.port}")
    public void setPort(String port) {
        SendEmailUtils.port = port;
    }
    @Value("${spring.mail.properties.mail.smtp.auth}")
    public void setAuth(String auth) {
        SendEmailUtils.auth = auth;
    }
    @Value("${spring.mail.timeout}")
    public void setTimeout(String timeout) {
        SendEmailUtils.timeout = timeout;
    }
    @Value("${spring.mail.password}")
    public void setPassword(String password) {
        SendEmailUtils.password = password;
    }
}

+ 1 - 0
svr/svr-base/src/main/resources/application.yml

@ -41,6 +41,7 @@ spring:
    properties.mail.smtp.auth: true
    properties.mail.smtp.starttls.enable: true
    properties.mail.smtp.starttls.required: true
    timeout: 1000
    host: smtp.163.com
#发送者的邮箱密码
    password: xmijk181016jkzl

+ 1 - 1
svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/controller/SpecialistController.java

@ -473,7 +473,7 @@ public class SpecialistController extends EnvelopRestEndpoint {
     * @param doctor
     * @return
     */
    @GetMapping(value = "/selectByAssistant")
    @GetMapping(value =SpecialistMapping.specialist.selectByAssistant)
    @ApiOperation(value = "根据共管医生和居民code查询专科签约信息")
    public MixEnvelop<SpecialistPatientRelationDO,SpecialistPatientRelationDO> selectByAssistant(
            @ApiParam(name = "patient", value = "居民code") @RequestParam(required = true)String patient,

+ 17 - 26
svr/svr-wlyy-specialist/src/main/java/com/yihu/jw/service/SpecialistService.java

@ -203,8 +203,8 @@ public class SpecialistService{
                " lb.labelType, " +
                " lb.label, " +
                " p.photo, " +
                " h.label_name as health, " +
                " h.label AS healthcode ," +
                " lb.labelName as health, " +
                " lb.label AS healthcode ," +
                " s.health_assistant AS healthAssistant," +
                " s.health_assistant_name AS healthAssistantName" +
                " FROM " +
@ -223,20 +223,9 @@ public class SpecialistService{
                " ) lb " +
                " JOIN "+basedb+".wlyy_patient p ON p. CODE = lb.patient " +
                " JOIN wlyy_specialist_patient_relation s ON s.patient = lb.patient " +
                " LEFT JOIN ( " +
                " SELECT " +
                "  t.label, " +
                "  t.label_name, " +
                "  t.patient " +
                " FROM " +
                "  "+basedb+".wlyy_sign_patient_label_info t " +
                " WHERE " +
                "  t.label_type = '8' " +
                " AND t.`status` = '1' " +
                " ) h ON h.patient = lb.patient " +
                " WHERE ( s.doctor ='"+doctor+"' OR s.health_doctor='"+doctor+"' OR s.health_assistant='"+doctor+ "') AND s.status >=0  AND s.sign_status >0"+
                " LIMIT "+(page-1)*size+","+size;
        
        System.out.print("日志:"+sql);
        if("7".equals(labelType)){
            sql = "SELECT " +
                    "c.CODE," +
@ -263,25 +252,27 @@ public class SpecialistService{
        return MixEnvelop.getSuccess(SpecialistMapping.api_success,PatientLabelVOs);
    }
    public MixEnvelop<Long, Long> getLabelpatientCount(String doctor, String label, String labelType){
    public MixEnvelop<Long, Long> getLabelpatientCount(String doctor, String labelType, String label){
        String sql = "SELECT " +
                " COUNT(1) as total " +
                " FROM " +
                " ( " +
                "  SELECT " +
                "   i.label_type AS labelType, " +
                "   i.label, " +
                "   i.label_name AS labelName, " +
                "   i.patient " +
                "  FROM " +
//                " ( " +
//                "  SELECT " +
//                "   i.label_type AS labelType, " +
//                "   i.label, " +
//                "   i.label_name AS labelName, " +
//                "   i.patient " +
//                "  FROM " +
                "   "+basedb+".wlyy_sign_patient_label_info i " +
                "  WHERE " +
                "   i.label = '"+label+"' "+
                "  AND i.label_type = '"+labelType+"' " +
                "  AND i.`status` = '1' " +
                " ) lb " +
                " JOIN wlyy_specialist_patient_relation s ON s.patient = lb.patient " +
                " WHERE ( s.doctor ='"+doctor+"' OR s.health_doctor='"+doctor+"' OR s.health_assistant='"+doctor+ "')  AND s.status >=0  AND s.sign_status >0";
                " AND i.patient in ( " +
                " select patient from  wlyy_specialist_patient_relation  WHERE " +
                "( doctor = '"+doctor+"' OR health_doctor = '"+doctor+"' OR health_assistant='"+doctor+ "' ) AND STATUS >= 0 AND sign_status > 0 )";
//                +" ) lb ";
        System.out.print("日志:"+sql);
        List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sql);
        Long count = 0L;
        if(rstotal!=null&&rstotal.size()>0){
@ -957,7 +948,7 @@ public class SpecialistService{
     * @return
     */
    public List<SpecialistPatientRelationDO> selectByAssistant(String patient,String doctor){
        String sql = "select * from wlyy_specialist_patient_relation r where r.health_assistant = '"+doctor+"' and r.patient = '"+patient+"' and status = 1 and sign_status = 1";
        String sql = "select * from wlyy_specialist_patient_relation r where r.health_assistant = '"+doctor+"' and r.patient = '"+patient+"' ";
        List<SpecialistPatientRelationDO> relationDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SpecialistPatientRelationDO.class));
        return relationDOS;
    }