jiangping
2024-02-01 f6b0e262db2af5ca2e5ed76f95e746c1dd3c58e3
开发业务接口
已添加1个文件
已修改18个文件
332 ■■■■ 文件已修改
company/src/components/business/OperaApplyChangeDetailWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaApplyChangeUnitDetailWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaInsuranceApplyWindow.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/applyChange.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/switchCourt.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/taxes.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/pom.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/Constants.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/InsuranceApply.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/SmsEmail.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/SmsEmailService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java 99 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/third/EmailService.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/third/EmayService.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/resources/application-dev.yml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/resources/application-pro.yml 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/resources/application-test.yml 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaApplyChangeDetailWindow.vue
@@ -13,7 +13,7 @@
                        <span>投保企业:{{ apply.companyName }}</span>
                      <span v-if="model.status === 0">保单状态:待签署</span>
                      <span v-if="model.status === 1">保单状态:已签章</span>
                      <span v-if="model.status === 2">保单状态:已上传批单</span>
                      <span v-if="model.status === 2">保单状态:已生效</span>
                      <span v-if="model.status === 3 || model.status === 4">保单状态:退回申请</span>
                      <span v-if="model.status ===5 || model.status === 8">保单状态:已退回</span>
                      <span v-if="model.status ===7">保单状态:已关闭</span>
company/src/components/business/OperaApplyChangeUnitDetailWindow.vue
@@ -13,7 +13,7 @@
                        <span>投保企业:{{ apply.companyName }}</span>
                      <span v-if="model.status === 0">保单状态:待签署</span>
                      <span v-if="model.status === 1">保单状态:已签章</span>
                      <span v-if="model.status === 2">保单状态:已上传批单</span>
                      <span v-if="model.status === 2">保单状态:已生效</span>
                      <span v-if="model.status === 3 || model.status === 4">保单状态:退回申请</span>
                      <span v-if="model.status ===5 || model.status === 8">保单状态:已退回</span>
                      <span v-if="model.status ===7">保单状态:已关闭</span>
company/src/components/business/OperaInsuranceApplyWindow.vue
@@ -24,11 +24,16 @@
                    </div>
                  <div class="desc_item_label_right">
                      <template v-if="userInfo.type === 1">
                          <el-button type="primary" @click="$refs.InsuranceDetails.open('投保详情单',model,0)">签署申请单</el-button>
                          <el-button v-if="[2, 3, 5, 7, 8].includes(model.status)" type="primary" @click="viewToubaodan">申请退回</el-button>
                          <el-button v-if="[2, 3, 5, 7, 8].includes(model.status)" type="primary" @click="viewToubaodan">再次投保</el-button>
                          <el-button v-if="model.status == 5" type="primary" @click="viewBaoxiandan">关闭订单</el-button>
                          <el-button v-if="model.status == 2" type="primary" @click="goSign">签署投保单</el-button>
                        <el-button v-if="[0, 2, 3, 10].includes(model.status)" type="danger" @click="$refs.applyReturn.open('申请退回', {id: dataId})">申请退回</el-button>
                        <el-button v-if="model.status == 4" type="primary" @click="$refs.OperaInsuranceApply.open('投保申请', {id: dataId})">再次投保</el-button>
                        <el-button type="primary" @click="$refs.InsuranceDetails.open('投保详情单',model,0)">导出详单</el-button>
                        <el-button v-if="[2, 3, 5, 7, 8].includes(model.status)" type="primary" @click="viewToubaodan">查看投保单</el-button>
                        <el-button v-if="model.status == 5" type="primary" @click="viewBaoxiandan">查看保险单</el-button>
                        <el-button type="primary" @click="$refs.InsuranceDetails.open('投保详情单',model,0)">签署申请单</el-button>
                        <el-button v-if="[2, 3, 5, 7, 8].includes(model.status)" type="primary" @click="viewToubaodan">申请退回</el-button>
                        <el-button v-if="[2, 3, 5, 7, 8].includes(model.status)" type="primary" @click="viewToubaodan">再次投保</el-button>
                        <el-button v-if="model.status == 5" type="primary" @click="viewBaoxiandan">关闭订单</el-button>
                        <el-button v-if="model.status == 2" type="primary" @click="goSign">签署投保单</el-button>
                      </template>
                      <template v-else>
                            <el-button type="primary" @click="$refs.InsuranceDetails.open('投保详情单',model,0)">导出详单</el-button>
company/src/views/business/applyChange.vue
@@ -66,7 +66,7 @@
          <template slot-scope="{row}">
            <span v-if="row.status === 0">待签署</span>
            <span v-if="row.status === 1">已签章</span>
            <span v-if="row.status === 2">已上传批单</span>
            <span v-if="row.status === 2">已生效</span>
            <span v-if="row.status === 3 || row.status === 4">退回申请</span>
            <span v-if="row.status ===5 || row.status === 8">已退回</span>
            <span v-if="row.status ===7">已关闭</span>
company/src/views/business/switchCourt.vue
@@ -66,7 +66,7 @@
          <template slot-scope="{row}">
            <span v-if="row.status === 0">待签署</span>
            <span v-if="row.status === 1">已签章</span>
            <span v-if="row.status === 2">已上传批单</span>
            <span v-if="row.status === 2">已生效</span>
            <span v-if="row.status === 3 || row.status === 4">退回申请</span>
            <span v-if="row.status ===5 || row.status === 8">已退回</span>
            <span v-if="row.status ===7">已关闭</span>
company/src/views/business/taxes.vue
@@ -52,9 +52,9 @@
                        <span v-if="row.status === 2">平台撤回</span>
                    </template>
                </el-table-column>
                <el-table-column prop="companyId" label="申请企业" min-width="100px"></el-table-column>
                <el-table-column prop="companyId" label="申请开票时间" min-width="100px"></el-table-column>
                <el-table-column prop="companyId" label="申请人" min-width="100px"></el-table-column>
                <el-table-column prop="companyName" label="申请企业" min-width="100px"></el-table-column>
                <el-table-column prop="createDate" label="申请开票时间" min-width="100px"></el-table-column>
                <el-table-column prop="creatorName" label="申请人" min-width="100px"></el-table-column>
                <el-table-column prop="price" label="开票金额(元)" min-width="100px"></el-table-column>
                <el-table-column label="投保类型" min-width="100px">
                    <template slot-scope="{row}">
@@ -70,10 +70,10 @@
                </el-table-column>
                <el-table-column prop="type" label="发票电子版" min-width="100px">
                    <template slot-scope="{row}">
                      <img v-if="row.imgurlfull!=null" :src="row.imgurlfull"  style="width: 90px;height: 90px">
                      <img v-if="row.imgurlFull!=null" :src="row.imgurlFull"  style="width: 90px;height: 90px">
                    </template>
                </el-table-column>
                <el-table-column label="操作" min-width="100px">
                <el-table-column label="操作" min-width="180px">
                    <template slot-scope="{row}">
                        <el-button v-if="row.status==0" type="text" @click="$refs.OperaTaxesUploadWindow.open('上传发票',row)">上传发票</el-button>
                        <el-button v-if="row.status ==1 " type="text" @click="$refs.OperaTaxesUploadWindow.open('修改发票',row)">修改发票</el-button>
server/pom.xml
@@ -190,7 +190,10 @@
      <artifactId>mybatis-plus-join</artifactId>
      <version>1.4.2.2</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -1420,6 +1420,7 @@
                    }
                }
                zipOutputStream.closeArchiveEntry();
                file.delete();
            }
        }
    }
server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java
@@ -193,7 +193,9 @@
    @ApiModelProperty(value = "保险生效止期")
    @TableField(exist = false)
    private Date endTime;
    @ApiModelProperty(value = "方案邮件")
    @TableField(exist = false)
    private String solutionEmail;
    @ApiModelProperty(value = "日志记录")
    @TableField(exist = false)
    private List<ApplyLog> applyLogList;
server/service/src/main/java/com/doumee/dao/business/model/InsuranceApply.java
@@ -132,6 +132,9 @@
    @ApiModelProperty(value = "方案名称")
    @TableField(exist = false)
    private String solutionsName;
    @ApiModelProperty(value = "方案邮件")
    @TableField(exist = false)
    private String solutionEmail;
    @ApiModelProperty(value = "签章关键字")
    @TableField(exist = false)
    private String signKeyword;
server/service/src/main/java/com/doumee/dao/business/model/SmsEmail.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -9,6 +10,8 @@
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * çŸ­ä¿¡é‚®ä»¶ä¿¡æ¯è¡¨
@@ -86,5 +89,8 @@
    @ApiModelProperty(value = "关联对象类型")
    @ExcelColumn(name="关联对象类型")
    private String objType;
    @ApiModelProperty(value = "附件集合")
    @TableField(exist = false)
    private   List<Map<String,Object>> fileList;
}
server/service/src/main/java/com/doumee/service/business/SmsEmailService.java
@@ -20,6 +20,7 @@
     */
    Integer create(SmsEmail smsEmail);
    Integer sendSms(SmsEmail smsEmail);
    Integer sendEmail(SmsEmail smsEmail);
    /**
     * ä¸»é”®åˆ é™¤
     *
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
@@ -24,6 +24,8 @@
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.service.business.SmsEmailService;
import com.doumee.service.business.third.EmailService;
import com.doumee.service.business.third.SignService;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -36,6 +38,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.File;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@@ -53,7 +56,9 @@
    @Autowired
    private InsuranceApplyMapper insuranceApplyMapper;
    @Autowired
    private ApplyChangeMapper applyChangeMapper;
    private SmsEmailService smsEmailService;
    @Autowired
    private ApplyChangeJoinMapper applyChangeMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
@@ -396,14 +401,13 @@
                return tempFileName;
            }
        }catch (Exception e){
        }
        return  null;
    }
    public Integer uploadSignedFileDo(InsuranceApply model,String fileurl) {
    public Multifile   uploadSignedFileDo(InsuranceApply model,String fileurl,String fullUrl) {
        InsuranceApply update = new InsuranceApply();
        update.setEditDate(new Date());
        update.setEditor(model.getCreator());
@@ -422,15 +426,19 @@
        f.setObjType(Constants.MultiFile.BD_SIGNED_PDF.getKey());
        f.setType(Constants.TWO);
        f.setFileurl(fileurl);
        f.setFileurlFull(fullUrl);
        f.setInfo("投保单企业签约合同");
        f.setName("投保单签约合同.pdf");
        multifileMapper.insert(f);
        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.SIGNATURE;
        ApplyLog log = new ApplyLog(update,applyLogType.getName(), null,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
        applyLogMapper.insert(log);
        return  1;
        startSendEmail(f, model.getCompanyName(),model.getSolutionsName(),model.getSolutionEmail());
        return  f;
    }
    public Integer uploadChangeSignedFileDo(ApplyChange model,String fileurl) {
    public Multifile  uploadChangeSignedFileDo(ApplyChange model,String fileurl,String fullurl) {
        ApplyChange update = new ApplyChange();
        update.setEditDate(new Date());
        update.setEditor(model.getCreator());
@@ -449,19 +457,53 @@
        f.setObjType(Constants.equalsInteger(Constants.ZERO,model.getType())?Constants.MultiFile.CA_APPLY_JIAJIAN_SIGN.getKey() : Constants.MultiFile.CA_APPLY_CHANGEUNIT_SIGN.getKey());
        f.setType(Constants.TWO);
        f.setFileurl(fileurl);
        f.setFileurlFull(fullurl);
        f.setInfo("企业申请表签署文件");
        f.setName("签章申请表.pdf");
        multifileMapper.insert(f);
        Constants.ApplyLogType applyLogType =Constants.equalsInteger(Constants.ZERO,model.getType())? Constants.ApplyLogType.CA_JIAJIAN_APPLY_SIGN: Constants.ApplyLogType.CA_CHANGUNIT_APPLY_SIGN;
        ApplyLog log = new ApplyLog(update,applyLogType.getName(), null,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
        applyLogMapper.insert(log);
        return  1;
        startSendEmail(f,model.getCompanyName(),model.getSolutionsName(),model.getSolutionEmail());
        return f;
    }
    private void startSendEmail(Multifile f, String companyName, String solutionsName, String solutionEmail) {
        if(StringUtils.isBlank(solutionEmail) || f==null|| StringUtils.isBlank(f.getFileurl())){
            return;
        }
        SmsEmail email = new SmsEmail();
        email.setTitle(f.getInfo());
        email.setEmail(solutionEmail);
        email.setContent("来自企业【"+companyName+"】关于保险方案【"+solutionsName+"】的"+f.getInfo());
        File file = Constants.getFileByNetFile(f.getFileurlFull(),f.getName());
        if(file!=null && file.isFile()){
            Map<String,Object> files = new HashMap<>();
            files.put("name",f.getName());
            files.put("file",file);
            email.setFileList(new ArrayList<>());
            email.getFileList().add(files);
            smsEmailService.sendEmail(email);
            file.delete();//发送后删除临时文件
        }
    }
    @Override
    public   void dealWaitSignedData(){
        List<InsuranceApply> applyList = insuranceApplyMapper.selectList(new QueryWrapper<InsuranceApply>().lambda()
        List<InsuranceApply> applyList = insuranceApplyJoinMapper.selectJoinList(InsuranceApply.class,
                new MPJLambdaWrapper<InsuranceApply>()
                .selectAll(InsuranceApply.class)
                .selectAs(Solutions::getName,InsuranceApply::getSolutionsName)
                .selectAs(Solutions::getEmail,InsuranceApply::getSolutionEmail)
                .selectAs(Company::getName,InsuranceApply::getCompanyName)
                .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
                .eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.WAIT_SIGNATURE.getKey())
                .isNotNull(InsuranceApply::getSignApplyNo));
        String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode();
        if(applyList !=null && applyList.size()>0 ){
            for(InsuranceApply model : applyList){
                String status = signService.linkFileStatus(model.getSignApplyNo());
@@ -474,11 +516,19 @@
                    //如果下载失败,清除合同,下次签章重新生成新合同
                    return;
                }
                uploadSignedFileDo(model,fileUrl);
                uploadSignedFileDo(model,fileUrl,path+fileUrl);
                return;
            }
        }
        List<ApplyChange> chagneList = applyChangeMapper.selectList(new QueryWrapper<ApplyChange>().lambda()
        List<ApplyChange> chagneList = applyChangeMapper.selectJoinList(ApplyChange.class,
                new MPJLambdaWrapper<ApplyChange>()
                .selectAll(ApplyChange.class)
                .selectAs(Solutions::getName,InsuranceApply::getSolutionsName)
                .selectAs(Solutions::getEmail,InsuranceApply::getSolutionEmail)
                .selectAs(Company::getName,InsuranceApply::getCompanyName)
                .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyChange::getApplyId)
                .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
                .eq(ApplyChange::getStatus,Constants.ApplyChangeStatus.UPLOAD.getKey())
                .isNotNull(ApplyChange::getSignApplyNo));
        if(chagneList !=null && chagneList.size()>0 ){
@@ -493,7 +543,7 @@
                    //如果下载失败,清除合同,下次签章重新生成新合同
                    return;
                }
                uploadChangeSignedFileDo(model,fileUrl);
                uploadChangeSignedFileDo(model,fileUrl,path+fileUrl);
                return;
            }
        }
@@ -505,7 +555,18 @@
        }
        if(Constants.equalsInteger(data.getSignStatus(), Constants.THREE )){
            //如果已保全,可下载签约附件
            InsuranceApply model = insuranceApplyMapper.selectOne(new QueryWrapper<InsuranceApply>().lambda().eq(InsuranceApply::getSignApplyNo,data.getApplyNo()).last("limit 1" ));
            String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                    systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode();
            InsuranceApply model = insuranceApplyJoinMapper.selectJoinOne(InsuranceApply.class,
                    new MPJLambdaWrapper<InsuranceApply>()
                            .selectAll(InsuranceApply.class)
                            .selectAs(Solutions::getName,InsuranceApply::getSolutionsName)
                            .selectAs(Solutions::getEmail,InsuranceApply::getSolutionEmail)
                            .selectAs(Company::getName,InsuranceApply::getCompanyName)
                            .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                            .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
                            .eq(InsuranceApply::getSignApplyNo,data.getApplyNo())
                            .last("limit 1" ));
            if(model != null && Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.WAIT_SIGNATURE.getKey())){
                //完成签署已完成操作
                String link = signService.linkFile(data.getApplyNo());
@@ -514,11 +575,19 @@
                    //如果下载失败,清除合同,下次签章重新生成新合同
                    return;
                }
                uploadSignedFileDo(model,fileUrl);
                uploadSignedFileDo(model,fileUrl,path+fileUrl);
                return;
            }
            ApplyChange applyChange = applyChangeMapper.selectOne(new QueryWrapper<ApplyChange>().lambda().eq(ApplyChange::getSignApplyNo,data.getApplyNo()).last("limit 1" ));
            ApplyChange applyChange = applyChangeMapper.selectJoinOne(ApplyChange.class,
                    new MPJLambdaWrapper<ApplyChange>()
                            .selectAll(ApplyChange.class)
                            .selectAs(Solutions::getName,InsuranceApply::getSolutionsName)
                            .selectAs(Solutions::getEmail,InsuranceApply::getSolutionEmail)
                            .selectAs(Company::getName,InsuranceApply::getCompanyName)
                            .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyChange::getApplyId)
                            .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                            .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
                            .eq(ApplyChange::getSignApplyNo,data.getApplyNo()).last("limit 1" ));
            if(applyChange != null &&Constants.equalsInteger(applyChange.getStatus(),Constants.ApplyChangeStatus.UPLOAD.getKey())){
                String link = signService.linkFile(data.getApplyNo());
                String fileUrl = uploadSignFile(link);
@@ -526,7 +595,7 @@
                    //如果下载失败,清除合同,下次签章重新生成新合同
                    return;
                }
                uploadChangeSignedFileDo(applyChange,fileUrl);
                uploadChangeSignedFileDo(applyChange,fileUrl,path+fileUrl);
            }
        }else if(Constants.equalsInteger(data.getSignStatus(), Constants.TWO )){
            //如果已拒签,清除合同,下次签章重新生成新合同
server/service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
@@ -14,6 +14,7 @@
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.service.business.third.EmailService;
import com.doumee.service.business.third.EmayService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -38,6 +39,8 @@
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private EmayService emayService;
    @Autowired
    private EmailService emailService;
    public static void isCaptcheValide(SmsEmailMapper smsEmailMapper, String phone, String captche) {
        SmsEmail model = smsEmailMapper.selectOne(new QueryWrapper<SmsEmail>().lambda()
@@ -69,11 +72,33 @@
        return smsEmail.getId();
    }
    @Override
    public Integer sendEmail(SmsEmail smsEmail) {
        if(StringUtils.isBlank(smsEmail.getEmail())){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        boolean result=   emailService.sendEmail(smsEmail.getEmail(),smsEmail.getTitle(),smsEmail.getContent(),smsEmail.getFileList());
        smsEmail.setRemark("邮件发生成功");
        if(!result){
            smsEmail.setRemark("邮件发生失败");
        }
        smsEmail.setIsdeleted(Constants.ZERO);
        smsEmail.setCreateDate(new Date());
        smsEmail.setStatus(Constants.ONE);
        smsEmail.setType(Constants.TWO);
        smsEmailMapper.insert(smsEmail);
        return smsEmail.getId();
    }
    @Override
    public Integer sendSms(SmsEmail smsEmail) {
        if(StringUtils.isBlank(smsEmail.getPhone())){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        String code = Constants.getRandom6Num();
        boolean result=   emayService.sendSingleSms(smsEmail.getPhone(),code);
        if(!result){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,短信验证码发送失败,请稍后重试!");
        }
        smsEmail.setRemark(code);
        smsEmail.setIsdeleted(Constants.ZERO);
        smsEmail.setCreateDate(new Date());
@@ -84,6 +109,7 @@
        smsEmailMapper.insert(smsEmail);
        return smsEmail.getId();
    }
    @Override
server/service/src/main/java/com/doumee/service/business/third/EmailService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
package com.doumee.service.business.third;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import javax.activation.DataSource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.List;
import java.util.Map;
@Service
public class EmailService {
    @Autowired
    private JavaMailSender javaMailSender;//注入JavaMailSender
    @Value("${spring.mail.username}")
    private String fromEmail;
    public boolean sendEmail(String toEmail, String title, String content, List<Map<String,Object>> fileList) {
        try {
                AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
                context.refresh();
                MimeMessage message = javaMailSender.createMimeMessage();
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setTo(toEmail);
                helper.setFrom(fromEmail);
                helper.setSubject(title);
                helper.setText(content);
                if(fileList!=null){
                    for (Map<String,Object> f : fileList){
                        // è®¾ç½®é™„ä»¶
                        helper.addAttachment((String) f.get("name"),new FileSystemResource((File) f.get("file")));
                    }
                }
            javaMailSender.send(message);
                    System.out.println("邮件发送成功!");
                    return true;
            } catch (Exception e) {
            e.printStackTrace();
                    return false;
                }
            }
    }
server/service/src/main/java/com/doumee/service/business/third/EmayService.java
@@ -61,30 +61,32 @@
        return 0;
    }
    public   boolean sendSingleSms(String mobile,String content) throws SDKParamsException {
    public   boolean sendSingleSms(String mobile,String content)  {
        try {
            client = new SmsSDKClient(ip,port,appKey,appSecret);
        } catch (SDKParamsException e) {
            throw new RuntimeException(e);
        }
        if(client == null){
            return false;
        }
        String customSmsId = "1";
        String extendedCode = "01";
        SmsSingleRequest request = new SmsSingleRequest(mobile, content, customSmsId, extendedCode, "");
        ResultModel<SmsResponse> result = client.sendSingleSms(request);
        saveInterfaceLog(ip+"/"+port,"【短信】发送", JSONObject.toJSONString(result),JSONObject.toJSONString(result));
        if (result.getCode().equals("SUCCESS")) {
            System.out.println("请求成功");
            SmsResponse response = result.getResult();
            System.out.println("sendSingleSms:" + response.toString());
            return  true;
        } else {
            System.out.println("请求失败");
            return false;
            if(client == null){
                return false;
            }
            String customSmsId = "1";
            String extendedCode = "01";
            SmsSingleRequest request = new SmsSingleRequest(mobile, content, customSmsId, extendedCode, "");
            ResultModel<SmsResponse> result = client.sendSingleSms(request);
            saveInterfaceLog(ip+"/"+port,"【短信】发送", JSONObject.toJSONString(result),JSONObject.toJSONString(result));
            if (result.getCode().equals("SUCCESS")) {
                System.out.println("请求成功");
                SmsResponse response = result.getResult();
                System.out.println("sendSingleSms:" + response.toString());
                return  true;
            } else {
                System.out.println("请求失败");
                return false;
            }
        } catch (Exception e) {
        }
        return false;
    }
server/service/src/main/resources/application-dev.yml
@@ -18,6 +18,18 @@
    password: rtjgfEr@&0c0m
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
  mail:
    host: smtp.exmail.qq.com
    username: jp@doumee.com
    password: 2Jz9HFW2U7vRnCRu
    default-encoding: UTF-8
    properties:
      mail:
        smtp:
          auth: true
        starttls:
          enable: true
          required: true
  redis:
    #    database: 0
server/service/src/main/resources/application-pro.yml
@@ -13,12 +13,22 @@
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://57b57595ddc66.sh.cdb.myqcloud.com:4464/yunyibao?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8
    username: test
    password: doumee@168
    url: jdbc:mysql://sh-cdb-aiskr3vy.sql.tencentcdb.com:62443/yunyibao?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8
    username: doumee
    password: rtjgfEr@&0c0m
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
  mail:
    host: smtp.exmail.qq.com
    username: jp@doumee.com
    password: 2Jz9HFW2U7vRnCRu
    properties:
      mail:
        smtp:
          auth: true
        starttls:
          enable: true
          required: true
  redis:
    #    database: 0
    host: 127.0.0.1
@@ -39,7 +49,6 @@
debug_model: false
captcha_check: true
# Swagger配置
swagger:
@@ -49,3 +58,6 @@
  enabled: true
  # ç¦ç”¨swagger时的重定向地址
  redirect-uri: /
project:
  imgAuthen: false
server/service/src/main/resources/application-test.yml
@@ -4,6 +4,8 @@
    enabled: true
    mime-types: application/json
  tomcat:
    max-swallow-size: -1
  servlet:
    session:
      timeout: PT3H  #表示12小时
@@ -11,22 +13,35 @@
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://57b57595ddc66.sh.cdb.myqcloud.com:4464/yunyibao?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8
    username: test
    password: doumee@168
    url: jdbc:mysql://sh-cdb-aiskr3vy.sql.tencentcdb.com:62443/yunyibao?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8
    username: doumee
    password: rtjgfEr@&0c0m
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
  mail:
    host: smtp.exmail.qq.com
    username: jp@doumee.com
    password: Jiangping0427
  redis:
    #    database: 0
    host: 127.0.0.1
    port: 6379
    password:
    timeout: 5000      # è¿žæŽ¥æ± ä¸­çš„æœ€å°ç©ºé—²è¿žæŽ¥
  jackson:
    time-zone: GMT+8
    date-format: yyyy-MM-dd HH:mm:ss
knife4j:
  enable: true
  basic:
    enable: true
    username: admin
    password: test@168.com
    password: 111111
debug_model: true
debug_model: false
captcha_check: false
# Swagger配置
swagger:
@@ -38,4 +53,4 @@
  redirect-uri: /
project:
  imgAuthenti: false
  imgAuthen: false