.idea/libraries/Maven__com_sun_activation_jakarta_activation_1_2_2.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ <component name="libraryTable"> <library name="Maven: com.sun.activation:jakarta.activation:1.2.2"> <CLASSES> <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/sun/activation/jakarta.activation/1.2.2/jakarta.activation-1.2.2.jar!/" /> </CLASSES> <JAVADOC> <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/sun/activation/jakarta.activation/1.2.2/jakarta.activation-1.2.2-javadoc.jar!/" /> </JAVADOC> <SOURCES> <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/sun/activation/jakarta.activation/1.2.2/jakarta.activation-1.2.2-sources.jar!/" /> </SOURCES> </library> </component> .idea/libraries/Maven__com_sun_mail_jakarta_mail_1_6_4.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ <component name="libraryTable"> <library name="Maven: com.sun.mail:jakarta.mail:1.6.4"> <CLASSES> <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/sun/mail/jakarta.mail/1.6.4/jakarta.mail-1.6.4.jar!/" /> </CLASSES> <JAVADOC> <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/sun/mail/jakarta.mail/1.6.4/jakarta.mail-1.6.4-javadoc.jar!/" /> </JAVADOC> <SOURCES> <root url="jar://$PROJECT_DIR$/../../../maven/repository/com/sun/mail/jakarta.mail/1.6.4/jakarta.mail-1.6.4-sources.jar!/" /> </SOURCES> </library> </component> .idea/libraries/Maven__commons_fileupload_commons_fileupload_1_4.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ <component name="libraryTable"> <library name="Maven: commons-fileupload:commons-fileupload:1.4"> <CLASSES> <root url="jar://$PROJECT_DIR$/../../../maven/repository/commons-fileupload/commons-fileupload/1.4/commons-fileupload-1.4.jar!/" /> </CLASSES> <JAVADOC> <root url="jar://$PROJECT_DIR$/../../../maven/repository/commons-fileupload/commons-fileupload/1.4/commons-fileupload-1.4-javadoc.jar!/" /> </JAVADOC> <SOURCES> <root url="jar://$PROJECT_DIR$/../../../maven/repository/commons-fileupload/commons-fileupload/1.4/commons-fileupload-1.4-sources.jar!/" /> </SOURCES> </library> </component> .idea/libraries/Maven__commons_io_commons_io_1_3_1.xml
ÎļþÒÑɾ³ý .idea/libraries/Maven__commons_io_commons_io_2_2.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ <component name="libraryTable"> <library name="Maven: commons-io:commons-io:2.2"> <CLASSES> <root url="jar://$PROJECT_DIR$/../../../maven/repository/commons-io/commons-io/2.2/commons-io-2.2.jar!/" /> </CLASSES> <JAVADOC> <root url="jar://$PROJECT_DIR$/../../../maven/repository/commons-io/commons-io/2.2/commons-io-2.2-javadoc.jar!/" /> </JAVADOC> <SOURCES> <root url="jar://$PROJECT_DIR$/../../../maven/repository/commons-io/commons-io/2.2/commons-io-2.2-sources.jar!/" /> </SOURCES> </library> </component> .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_mail_2_2_5_RELEASE.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ <component name="libraryTable"> <library name="Maven: org.springframework.boot:spring-boot-starter-mail:2.2.5.RELEASE"> <CLASSES> <root url="jar://$PROJECT_DIR$/../../../maven/repository/org/springframework/boot/spring-boot-starter-mail/2.2.5.RELEASE/spring-boot-starter-mail-2.2.5.RELEASE.jar!/" /> </CLASSES> <JAVADOC> <root url="jar://$PROJECT_DIR$/../../../maven/repository/org/springframework/boot/spring-boot-starter-mail/2.2.5.RELEASE/spring-boot-starter-mail-2.2.5.RELEASE-javadoc.jar!/" /> </JAVADOC> <SOURCES> <root url="jar://$PROJECT_DIR$/../../../maven/repository/org/springframework/boot/spring-boot-starter-mail/2.2.5.RELEASE/spring-boot-starter-mail-2.2.5.RELEASE-sources.jar!/" /> </SOURCES> </library> </component> admin/src/components/business/OperaManagersWindow.vue
@@ -16,6 +16,14 @@ </el-option> </el-select> </el-form-item> <el-form-item v-if="form.type==3" label="æ¯å¦ä¼å¾®éç¥" prop="isQw" class="form-item-switch" > <el-switch v-model="form.isQw" :active-value="1" :inactive-value="0"/> <span class="switch-text"> </span> </el-form-item> <el-form-item v-if="form.type==3" label="æ¯å¦é®ä»¶éç¥" prop="isEmail" class="form-item-switch" > <el-switch v-model="form.isEmail" :active-value="1" :inactive-value="0"/> <span class="switch-text"></span> </el-form-item> <el-form-item label="夿³¨" prop="remark"> <el-input v-model="form.remark" placeholder="请è¾å ¥å¤æ³¨" v-trim/> </el-form-item> @@ -26,7 +34,7 @@ <script> import BaseOpera from '@/components/base/BaseOpera' import GlobalWindow from '@/components/common/GlobalWindow' import { allList } from "@/api/business/member"; import { allList } from '@/api/business/member' export default { name: 'OperaManagersWindow', @@ -38,7 +46,9 @@ form: { type: '', memberId: '', remark: '' remark: '', isQw: 0, isEmail: 0 }, loading:false, memberList: [], admin/src/views/business/company.vue
@@ -16,7 +16,6 @@ </el-table> </template> <!-- æ°å»º/ä¿®æ¹ --> <OperaInternalCompanyWindow ref="OperaInternalCompanyWindow" :list="list" @success="handlePageChange" /> </TableLayout> </template> @@ -71,7 +70,7 @@ this.loading = true companySync({}) .then(res => { this.$tip.apiSuccess(res || '忥æå') this.$tip.apiSuccess('忥æå') this.handlePageChange(1) }) .catch(e => { admin/src/views/business/managersDca.vue
@@ -3,8 +3,8 @@ <!-- æç´¢è¡¨å --> <div slot="search-form"> <el-form ref="searchForm" :model="searchForm" label-width="100px" inline> <el-form-item label="人åæç´¢ " prop="memberName"> <el-input v-model="searchForm.memberName" placeholder="å¯è¾å ¥å§å/ææºå·/é¨é¨" @keypress.enter.native="search"></el-input> <el-form-item label="人åæç´¢ " prop="keyword"> <el-input v-model="searchForm.keyword" placeholder="å¯è¾å ¥å§å/ææºå·/é¨é¨" @keypress.enter.native="search"></el-input> </el-form-item> <section> <el-button type="primary" @click="search">æç´¢</el-button> @@ -31,7 +31,7 @@ <el-table-column prop="memberEmail" label="人åé®ç®±" min-width="100px"></el-table-column> <el-table-column prop="companyName" label="æå±é¨é¨" min-width="100px"></el-table-column> <el-table-column prop="editorName" label="æä½äºº" min-width="100px"></el-table-column> <el-table-column prop="editDate" label="æ´æ°æ¶é´" min-width="100px"></el-table-column> <el-table-column prop="editDate" label="æ´æ°æ¶é´" min-width="150px"></el-table-column> <el-table-column prop="remark" label="夿³¨" min-width="100px"></el-table-column> <el-table-column v-if="containPermissions(['business:managers:update', 'business:managers:delete'])" @@ -72,7 +72,7 @@ return { // æç´¢ searchForm: { memberName: '', keyword: '', type: 1 } } admin/src/views/business/managersDcaAuth.vue
@@ -3,8 +3,8 @@ <!-- æç´¢è¡¨å --> <div slot="search-form"> <el-form ref="searchForm" :model="searchForm" label-width="100px" inline> <el-form-item label="人åæç´¢ " prop="memberName"> <el-input v-model="searchForm.memberName" placeholder="å¯è¾å ¥å§å/ææºå·/é¨é¨" @keypress.enter.native="search"></el-input> <el-form-item label="人åæç´¢ " prop="keyword"> <el-input v-model="searchForm.keyword" placeholder="å¯è¾å ¥å§å/ææºå·/é¨é¨" @keypress.enter.native="search"></el-input> </el-form-item> <section> <el-button type="primary" @click="search">æç´¢</el-button> @@ -31,7 +31,7 @@ <el-table-column prop="memberEmail" label="人åé®ç®±" min-width="100px"></el-table-column> <el-table-column prop="companyName" label="æå±é¨é¨" min-width="100px"></el-table-column> <el-table-column prop="editorName" label="æä½äºº" min-width="100px"></el-table-column> <el-table-column prop="editDate" label="æ´æ°æ¶é´" min-width="100px"></el-table-column> <el-table-column prop="editDate" label="æ´æ°æ¶é´" min-width="150px"></el-table-column> <el-table-column prop="remark" label="夿³¨" min-width="100px"></el-table-column> <el-table-column v-if="containPermissions(['business:managers:update', 'business:managers:delete'])" @@ -72,7 +72,7 @@ return { // æç´¢ searchForm: { memberName: '', keyword: '', type: 2 } } admin/src/views/business/managersShe.vue
@@ -3,8 +3,8 @@ <!-- æç´¢è¡¨å --> <div slot="search-form"> <el-form ref="searchForm" :model="searchForm" label-width="100px" inline> <el-form-item label="人åæç´¢ " prop="memberName"> <el-input v-model="searchForm.memberName" placeholder="å¯è¾å ¥å§å/ææºå·/é¨é¨" @keypress.enter.native="search"></el-input> <el-form-item label="人åæç´¢ " prop="keyword"> <el-input v-model="searchForm.keyword" placeholder="å¯è¾å ¥å§å/ææºå·/é¨é¨" @keypress.enter.native="search"></el-input> </el-form-item> <section> <el-button type="primary" @click="search">æç´¢</el-button> @@ -31,7 +31,7 @@ <el-table-column prop="memberEmail" label="人åé®ç®±" min-width="100px"></el-table-column> <el-table-column prop="companyName" label="æå±é¨é¨" min-width="100px"></el-table-column> <el-table-column prop="editorName" label="æä½äºº" min-width="100px"></el-table-column> <el-table-column prop="editDate" label="æ´æ°æ¶é´" min-width="100px"></el-table-column> <el-table-column prop="editDate" label="æ´æ°æ¶é´" min-width="150px"></el-table-column> <el-table-column prop="remark" label="夿³¨" min-width="100px"></el-table-column> <el-table-column v-if="containPermissions(['business:managers:update', 'business:managers:delete'])" @@ -72,7 +72,7 @@ return { // æç´¢ searchForm: { memberName: '', keyword: '', type: 0 } } admin/src/views/business/managersSheNotice.vue
@@ -3,8 +3,8 @@ <!-- æç´¢è¡¨å --> <div slot="search-form"> <el-form ref="searchForm" :model="searchForm" label-width="100px" inline> <el-form-item label="人åæç´¢ " prop="memberName"> <el-input v-model="searchForm.memberName" placeholder="å¯è¾å ¥å§å/ææºå·/é¨é¨" @keypress.enter.native="search"></el-input> <el-form-item label="人åæç´¢ " prop="keyword"> <el-input v-model="searchForm.keyword" placeholder="å¯è¾å ¥å§å/ææºå·/é¨é¨" @keypress.enter.native="search"></el-input> </el-form-item> <section> <el-button type="primary" @click="search">æç´¢</el-button> @@ -30,8 +30,18 @@ <el-table-column prop="memberPhone" label="äººåææºå·" min-width="100px"></el-table-column> <el-table-column prop="memberEmail" label="人åé®ç®±" min-width="100px"></el-table-column> <el-table-column prop="companyName" label="æå±é¨é¨" min-width="100px"></el-table-column> <el-table-column prop="isQw" label="ä¼å¾®éç¥" min-width="80px"> <template slot-scope="{row}"> <el-switch v-model="row.isQw" :active-value="1" :inactive-value="0" @change="updateInfo(row)"/> </template> </el-table-column> <el-table-column prop="isQw" label="é®ä»¶éç¥" min-width="80px"> <template slot-scope="{row}"> <el-switch v-model="row.isEmail" :active-value="1" :inactive-value="0" @change="updateEmailInfo(row)"/> </template> </el-table-column> <el-table-column prop="editorName" label="æä½äºº" min-width="100px"></el-table-column> <el-table-column prop="editDate" label="æ´æ°æ¶é´" min-width="100px"></el-table-column> <el-table-column prop="editDate" label="æ´æ°æ¶é´" min-width="150px"></el-table-column> <el-table-column prop="remark" label="夿³¨" min-width="100px"></el-table-column> <el-table-column v-if="containPermissions(['business:managers:update', 'business:managers:delete'])" @@ -71,8 +81,9 @@ data () { return { // æç´¢ updating: false, searchForm: { memberName: '', keyword: '', type: 3 } } @@ -85,6 +96,30 @@ 'field.main': 'id' }) this.search() }, methods: { updateInfo (row) { const newValue = row.isQw row.isQw = !row.isQw // å¼å¯ this.api.updateById({ id: row.id, isQw: newValue }).then(() => { this.$tip.success('设置æåï¼') this.search() }).final(() => { this.updating = false }) }, updateEmailInfo (row) { const newValue = row.isEmail row.isEmail = !row.isEmail // å¼å¯ this.api.updateById({ id: row.id, isEmail: newValue }).then(() => { this.$tip.success('设置æåï¼') this.search() }).finally(() => { this.updating = false }) } } } </script> server/pom.xml
@@ -185,6 +185,10 @@ <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> </dependencies> <build> server/src/main/java/com/doumee/api/common/PublicCloudController.java
@@ -11,15 +11,13 @@ import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.FtpUtil; import com.doumee.dao.system.model.SystemDictData; import com.doumee.service.common.EmailService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.commons.CommonsMultipartResolver; @@ -44,10 +42,27 @@ public class PublicCloudController extends BaseController { @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private EmailService emailService; public static FtpUtil ftp = null; @ApiOperation(value = "æµè¯é®ä»¶åé") @RequestMapping(method= RequestMethod.POST,value="/testEmail") @ResponseBody public void test( @RequestParam(required = false) String id, @RequestParam(required = false) String email) throws Exception { // sendEmailWithImages(String toEmail, String title, Map<String,String> contentForm, List<String> imgList) Map<String,String> content = new HashMap<>(); content.put("æ é¢","è¿æ¯æ é¢"); content.put("ç®ä»","è¿æ¯ç®ä»"); List<String> list = new ArrayList<>(); list.add("https://dmtest.ahapp.net/file/workorder/20250410/1.jpg"); list.add("https://dmtest.ahapp.net/file/workorder/20250410/2.png"); list.add("https://dmtest.ahapp.net/file/workorder/20250410/4.png"); emailService.sendEmailWithImages(StringUtils.defaultString(email,"jp@doumee.com"),"æ¥èªè¹è¹çé®ä»¶"+DateUtil.getPlusTime2(new Date()),content,list); } @ApiOperation(value = "æ¹éä¸ä¼ æä»¶å°FTP") @RequestMapping(method= RequestMethod.POST,value="/uploadBatch") @ResponseBody server/src/main/java/com/doumee/core/constants/Constants.java
@@ -29,6 +29,7 @@ public static final Integer TWO = 2; public static final Integer ZERO = 0; public static final Integer THREE = 3; public static boolean WORKORDER_SHE_EMAIL_SENDING = false; public static boolean DEALING_COMPANY_SYNC = false ; public static boolean DEALING_MEMBER_SYNC = false ; public static final String WORKORDER_FILE_PATH ="WORKORDER_FILE_PATH" ; server/src/main/java/com/doumee/dao/business/model/Managers.java
@@ -55,6 +55,10 @@ @ApiModelProperty(value = "ç±»å 0SHEè´è´£äºº 1DCAæå¨æé人å 2DCAæé人å", example = "1") private Integer type; @ApiModelProperty(value = "æ¯å¦ä¼å¾®æ¶æ¯éç¥ 0å¦ 1æ¯", example = "1") private Integer isQw; @ApiModelProperty(value = "æ¯å¦é®ç®±åé 0å¦ 1æ¯", example = "1") private Integer isEmail; @ApiModelProperty(value = "人åç¼ç ï¼å ³èmember)", example = "1") private Integer memberId; server/src/main/java/com/doumee/dao/business/model/Workorder.java
@@ -51,6 +51,12 @@ @ApiModelProperty(value = "ç¶æ ç¶æ 0å¾ ç¡®è®¤/å¾ å审 1å¾ åé /å¾ ç»å®¡ 2å¾ å¤ç 3SHEå ³é 4WTSå ³é 5å·¥ç¨å¸å ³é", example = "1") private Integer status; @ApiModelProperty(value = "é®ä»¶éç¥ç¶æ 0å¾ éç¥ 1å·²éç¥ 2éç¥å¤±è´¥", example = "1") private Integer emailStatus; @ApiModelProperty(value = "é®ä»¶éç¥æ¶é´", example = "1") private Integer emailDate; @ApiModelProperty(value = "é®ä»¶éç¥å¤æ³¨", example = "1") private Integer emailInfo; @ApiModelProperty(value = "æåºç ", example = "1") private Integer sortnum; server/src/main/java/com/doumee/job/WorkorderSheEmailJob.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ package com.doumee.job; import com.doumee.core.job.BaseJob; import com.doumee.core.job.JobContext; import com.doumee.core.job.JobParam; import com.doumee.service.business.WorkorderService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * æ´æ°ä¼ä¸å¾®ä¿¡èªå»ºåºç¨token * @author dm * @since 2025/03/31 16:44 */ @Slf4j @Component("workorderSheEmailJob") public class WorkorderSheEmailJob extends BaseJob { @Autowired private WorkorderService workorderService; @Override public JobContext execute(JobParam param) { JobContext jobContext = new JobContext(); try { workorderService.sendSheEmail(); jobContext.setContext("宿¶åéSHEé®ä»¶éç¥"); } catch (Exception e) { e.printStackTrace(); } return jobContext; } } server/src/main/java/com/doumee/service/business/WorkorderService.java
@@ -149,4 +149,5 @@ */ void sendCopy(SendCopyDTO sendCopyDTO); void sendSheEmail(); } server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java
@@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.catalina.Manager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; @@ -42,6 +43,7 @@ * @since 2025/04/02 17:49 */ @Service @Slf4j public class WorkorderServiceImpl implements WorkorderService { @Autowired @@ -592,73 +594,6 @@ Utils.MP.blankToNull(pageWrap.getModel()); pageWrap.getModel().setIsdeleted(Constants.ZERO); MPJLambdaWrapper<Workorder> queryWrapper = getJoinQueryMapper(pageWrap.getModel()); queryWrapper .selectAll(Workorder.class) .selectAs(Member::getName,Workorder::getMemberName) .selectAs(Member::getCompanyName,Workorder::getCompanyName) .selectAs(Member::getPhone,Workorder::getMemberPhone) .select(" c2.name ",Workorder::getCategoryName) .select(" c3.name ",Workorder::getTypeName) .select(" c4.name ",Workorder::getProblemName) .leftJoin(Member.class,Member::getId,Workorder::getMemberId) .leftJoin(" category c3 on t.TYPE_ID = c3.id ") //é£é©ç±»å .leftJoin(" category c4 on t.PROBLEM_ID = c4.id ") //DCAé®é¢ç¼ç .leftJoin(" category c2 on t.CATEGORY_ID = c2.id ") //DCAé®é¢ç¼ç .apply(Objects.nonNull(pageWrap.getModel().getMyWorkOrder())&& org.apache.commons.lang3.StringUtils.isNotBlank(pageWrap.getModel().getQwId()) &&Constants.equalsInteger(Constants.ONE,pageWrap.getModel().getMyWorkOrder()), " ( t.id in ( select OBJ_ID from notices where param1 = '"+pageWrap.getModel().getQwId()+"' )) ") .eq(pageWrap.getModel().getId() != null, Workorder::getId, pageWrap.getModel().getId()) .eq(pageWrap.getModel().getCreator() != null, Workorder::getCreator, pageWrap.getModel().getCreator()) .ge(pageWrap.getModel().getCreateDate() != null, Workorder::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())) .le(pageWrap.getModel().getCreateDate() != null, Workorder::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())) .eq(pageWrap.getModel().getEditor() != null, Workorder::getEditor, pageWrap.getModel().getEditor()) .ge(pageWrap.getModel().getEditDate() != null, Workorder::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())) .le(pageWrap.getModel().getEditDate() != null, Workorder::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())) .eq(pageWrap.getModel().getIsdeleted() != null, Workorder::getIsdeleted, pageWrap.getModel().getIsdeleted()) .eq(pageWrap.getModel().getCategoryId() != null, Workorder::getCategoryId, pageWrap.getModel().getCategoryId()) .eq(pageWrap.getModel().getRemark() != null, Workorder::getRemark, pageWrap.getModel().getRemark()) .eq(pageWrap.getModel().getStatus() != null, Workorder::getStatus, pageWrap.getModel().getStatus()) .eq(pageWrap.getModel().getSortnum() != null, Workorder::getSortnum, pageWrap.getModel().getSortnum()) .eq(pageWrap.getModel().getType() != null, Workorder::getType, pageWrap.getModel().getType()) .eq(pageWrap.getModel().getMemberId() != null, Workorder::getMemberId, pageWrap.getModel().getMemberId()) .eq(pageWrap.getModel().getCompanyId() != null, Workorder::getCompanyId, pageWrap.getModel().getCompanyId()) .eq(pageWrap.getModel().getSubmitDate() != null, Workorder::getSubmitDate, pageWrap.getModel().getSubmitDate()) .eq(pageWrap.getModel().getMemberType() != null, Workorder::getMemberType, pageWrap.getModel().getMemberType()) .eq(pageWrap.getModel().getMemberQwids() != null, Workorder::getMemberQwids, pageWrap.getModel().getMemberQwids()) .like(pageWrap.getModel().getMemberNames() != null, Workorder::getMemberNames, pageWrap.getModel().getMemberNames()) .eq(pageWrap.getModel().getLocaltionId() != null, Workorder::getLocaltionId, pageWrap.getModel().getLocaltionId()) .eq(pageWrap.getModel().getOutJiuyi() != null, Workorder::getOutJiuyi, pageWrap.getModel().getOutJiuyi()) .eq(pageWrap.getModel().getIsYiwushi() != null, Workorder::getIsYiwushi, pageWrap.getModel().getIsYiwushi()) .eq(pageWrap.getModel().getIsHurted() != null, Workorder::getIsHurted, pageWrap.getModel().getIsHurted()) .eq(pageWrap.getModel().getWorkRelated() != null, Workorder::getWorkRelated, pageWrap.getModel().getWorkRelated()) .eq(pageWrap.getModel().getEventInfo() != null, Workorder::getEventInfo, pageWrap.getModel().getEventInfo()) .eq(pageWrap.getModel().getEmialMemberIds() != null, Workorder::getEmialMemberIds, pageWrap.getModel().getEmialMemberIds()) .eq(pageWrap.getModel().getQwnoticeMemberIds() != null, Workorder::getQwnoticeMemberIds, pageWrap.getModel().getQwnoticeMemberIds()) .eq(pageWrap.getModel().getHappenTime() != null, Workorder::getHappenTime, pageWrap.getModel().getHappenTime()) .eq(pageWrap.getModel().getTypeId() != null, Workorder::getTypeId, pageWrap.getModel().getTypeId()) .eq(pageWrap.getModel().getRiskInfo() != null, Workorder::getRiskInfo, pageWrap.getModel().getRiskInfo()) .eq(pageWrap.getModel().getManagerId() != null, Workorder::getManagerId, pageWrap.getModel().getManagerId()) .eq(pageWrap.getModel().getDealerId() != null, Workorder::getDealerId, pageWrap.getModel().getDealerId()) .ge(pageWrap.getModel().getDispatchTime() != null, Workorder::getDispatchTime, Utils.Date.getStart(pageWrap.getModel().getDispatchTime())) .le(pageWrap.getModel().getDispatchTime() != null, Workorder::getDispatchTime, Utils.Date.getEnd(pageWrap.getModel().getDispatchTime())) .eq(pageWrap.getModel().getDispatchInfo() != null, Workorder::getDispatchInfo, pageWrap.getModel().getDispatchInfo()) .ge(pageWrap.getModel().getDealTime() != null, Workorder::getDealTime, Utils.Date.getStart(pageWrap.getModel().getDealTime())) .le(pageWrap.getModel().getDealTime() != null, Workorder::getDealTime, Utils.Date.getEnd(pageWrap.getModel().getDealTime())) .eq(pageWrap.getModel().getDealInfo() != null, Workorder::getDealInfo, pageWrap.getModel().getDealInfo()) .eq(pageWrap.getModel().getProblemTitle() != null, Workorder::getProblemTitle, pageWrap.getModel().getProblemTitle()) .eq(pageWrap.getModel().getProblemId() != null, Workorder::getProblemId, pageWrap.getModel().getProblemId()) .eq(pageWrap.getModel().getProblemInfo() != null, Workorder::getProblemInfo, pageWrap.getModel().getProblemInfo()) .eq(pageWrap.getModel().getLocationName() != null, Workorder::getLocationName, pageWrap.getModel().getLocationName()) .like(pageWrap.getModel().getCode() != null, Workorder::getCode, pageWrap.getModel().getCode()) .eq(pageWrap.getModel().getDcaYesNum() != null, Workorder::getDcaYesNum, pageWrap.getModel().getDcaYesNum()) .eq(pageWrap.getModel().getDcaNoNum() != null, Workorder::getDcaNoNum, pageWrap.getModel().getDcaNoNum()) .eq(pageWrap.getModel().getDcaRecordId() != null, Workorder::getDcaRecordId, pageWrap.getModel().getDcaRecordId()) .eq(pageWrap.getModel().getDcaCsIds() != null, Workorder::getDcaCsIds, pageWrap.getModel().getDcaCsIds()) ; if (pageWrap.getModel().getMemberName() != null) { queryWrapper.and( ms->ms.like(Member::getName,pageWrap.getModel().getMemberName()) .or().like(Member::getPhone,pageWrap.getModel().getMemberName()) ); } queryWrapper.orderByDesc(Workorder::getCreateDate); return PageData.from(workorderMapper.selectJoinPage(page,Workorder.class, queryWrapper)); } @@ -864,6 +799,27 @@ } } @Override public void sendSheEmail(){ if(Constants.WORKORDER_SHE_EMAIL_SENDING){ return; } Constants.WORKORDER_SHE_EMAIL_SENDING = true; try { List<Notices> list = noticesMapper.selectList(new QueryWrapper<Notices>().lambda() .eq(Notices::getIsdeleted,Constants.ZERO) .eq(Notices::getStatus,Constants.ZERO) .eq(Notices::getType,Constants.THREE)//é®ç®±éç¥ ); }catch (Exception e){ log.error("==================宿¶åçSHEé®ä»¶å¤±è´¥ï¼"+e.getMessage()); }finally { Constants.WORKORDER_SHE_EMAIL_SENDING = false; } } @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) server/src/main/java/com/doumee/service/common/CaptchaService.java
@@ -127,17 +127,13 @@ @Data @ApiModel("éªè¯ç 对象") public static class Captcha { @ApiModelProperty(value = "éªè¯ç UUID") private String uuid; @JsonIgnore @ApiModelProperty(value = "éªè¯ç ", hidden = true) private String text; @ApiModelProperty(value = "éªè¯ç Base64") private String image; Captcha (String text, BufferedImage image) { this.uuid = UUID.randomUUID().toString(); this.text = text; server/src/main/java/com/doumee/service/common/EmailService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,79 @@ package com.doumee.service.common; 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.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 sendEmailWithLocalFiles(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; } } public boolean sendEmailWithImages(String toEmail, String title, Map<String,String> contentForm, List<String> imgList) { 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); String content = "<html><body>"; if(contentForm!=null){ for (Map.Entry<String, String> f : contentForm.entrySet()) { // 设置éä»¶ content += "<div style='display:block;'>"+f.getKey()+"ï¼"+f.getValue()+"</p>"; } } if(imgList!=null){ content += "<div style='display:block;'> "; for (String f : imgList){ // 设置éä»¶ content += "<img style='width:200px;margin:5px' src='"+f+"'/>"; } } content += "</div></body><html>"; helper.setText(content,true); javaMailSender.send(message); System.out.println("é®ä»¶åéæåï¼"); return true; } catch (Exception e) { e.printStackTrace(); return false; } } } server/src/main/resources/application-dev.yml
@@ -15,7 +15,36 @@ jackson: time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss # mail: # username: jiangping0849@outlook.com # password: mwzaislgioyhxnig # host: smtp-mail.outlook.com # port: 587 # default-encoding: UTF-8 # properties: # mail: # debug: true # smtp: # ssl: # socketFactory: # class: com.sun.mail.util.MailSSLSocketFactory # fallback: false # auth: true # starttls: # enable: true # required: true 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 debug_model: true server/src/main/resources/application-pro.yml
@@ -15,7 +15,18 @@ jackson: time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss 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 debug_model: true