From a0436685d963dd19e0df70d1447ad5efafbfb36e Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期一, 14 四月 2025 17:07:35 +0800
Subject: [PATCH] 代码初始化
---
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_mail_2_2_5_RELEASE.xml | 13 +
admin/src/components/business/OperaManagersWindow.vue | 22 ++
server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java | 90 ++--------
server/src/main/resources/application-dev.yml | 31 +++
admin/src/views/business/managersDca.vue | 8
admin/src/views/business/managersShe.vue | 8
server/src/main/java/com/doumee/service/business/WorkorderService.java | 1
server/src/main/java/com/doumee/dao/business/model/Managers.java | 4
.idea/libraries/Maven__com_sun_activation_jakarta_activation_1_2_2.xml | 13 +
server/src/main/java/com/doumee/api/common/PublicCloudController.java | 23 ++
/dev/null | 13 -
admin/src/views/business/managersSheNotice.vue | 43 ++++
server/src/main/java/com/doumee/job/WorkorderSheEmailJob.java | 34 ++++
server/pom.xml | 4
.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_4.xml | 13 +
server/src/main/java/com/doumee/core/constants/Constants.java | 1
server/src/main/java/com/doumee/dao/business/model/Workorder.java | 6
server/src/main/resources/application-pro.yml | 13 +
.idea/libraries/Maven__commons_io_commons_io_2_2.xml | 13 +
admin/src/views/business/company.vue | 3
admin/src/views/business/managersDcaAuth.vue | 8
server/src/main/java/com/doumee/service/common/CaptchaService.java | 4
server/src/main/java/com/doumee/service/common/EmailService.java | 79 +++++++++
.idea/libraries/Maven__com_sun_mail_jakarta_mail_1_6_4.xml | 13 +
24 files changed, 346 insertions(+), 114 deletions(-)
diff --git a/.idea/libraries/Maven__com_sun_activation_jakarta_activation_1_2_2.xml b/.idea/libraries/Maven__com_sun_activation_jakarta_activation_1_2_2.xml
new file mode 100644
index 0000000..33df932
--- /dev/null
+++ b/.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>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sun_mail_jakarta_mail_1_6_4.xml b/.idea/libraries/Maven__com_sun_mail_jakarta_mail_1_6_4.xml
new file mode 100644
index 0000000..05500cf
--- /dev/null
+++ b/.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>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_4.xml b/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_4.xml
new file mode 100644
index 0000000..fd4bc5d
--- /dev/null
+++ b/.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>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__commons_io_commons_io_1_3_1.xml b/.idea/libraries/Maven__commons_io_commons_io_1_3_1.xml
deleted file mode 100644
index 1a19912..0000000
--- a/.idea/libraries/Maven__commons_io_commons_io_1_3_1.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<component name="libraryTable">
- <library name="Maven: commons-io:commons-io:1.3.1">
- <CLASSES>
- <root url="jar://$PROJECT_DIR$/../../../maven/repository/commons-io/commons-io/1.3.1/commons-io-1.3.1.jar!/" />
- </CLASSES>
- <JAVADOC>
- <root url="jar://$PROJECT_DIR$/../../../maven/repository/commons-io/commons-io/1.3.1/commons-io-1.3.1-javadoc.jar!/" />
- </JAVADOC>
- <SOURCES>
- <root url="jar://$PROJECT_DIR$/../../../maven/repository/commons-io/commons-io/1.3.1/commons-io-1.3.1-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__commons_io_commons_io_2_2.xml b/.idea/libraries/Maven__commons_io_commons_io_2_2.xml
new file mode 100644
index 0000000..fa554ba
--- /dev/null
+++ b/.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>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_mail_2_2_5_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_mail_2_2_5_RELEASE.xml
new file mode 100644
index 0000000..40b8974
--- /dev/null
+++ b/.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>
\ No newline at end of file
diff --git a/admin/src/components/business/OperaManagersWindow.vue b/admin/src/components/business/OperaManagersWindow.vue
index e99f814..e106aac 100644
--- a/admin/src/components/business/OperaManagersWindow.vue
+++ b/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,9 +46,11 @@
form: {
type: '',
memberId: '',
- remark: ''
+ remark: '',
+ isQw: 0,
+ isEmail: 0
},
- loading:false,
+ loading: false,
memberList: [],
// 楠岃瘉瑙勫垯
rules: {
@@ -59,10 +69,10 @@
methods: {
loadMember (query) {
this.memberList = []
- if(!query || query==''){
+ if (!query || query == '') {
return
}
- this.loading =true
+ this.loading = true
allList({
keyword: query
})
@@ -72,7 +82,7 @@
.catch(e => {
})
.finally(() => {
- this.loading =false
+ this.loading = false
})
},
open (title, target) {
diff --git a/admin/src/views/business/company.vue b/admin/src/views/business/company.vue
index 5b50d07..e16a296 100644
--- a/admin/src/views/business/company.vue
+++ b/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 => {
diff --git a/admin/src/views/business/managersDca.vue b/admin/src/views/business/managersDca.vue
index f1adef1..a7ce451 100644
--- a/admin/src/views/business/managersDca.vue
+++ b/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
}
}
diff --git a/admin/src/views/business/managersDcaAuth.vue b/admin/src/views/business/managersDcaAuth.vue
index 0faccb6..4805f1f 100644
--- a/admin/src/views/business/managersDcaAuth.vue
+++ b/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
}
}
diff --git a/admin/src/views/business/managersShe.vue b/admin/src/views/business/managersShe.vue
index 10c282b..52171b8 100644
--- a/admin/src/views/business/managersShe.vue
+++ b/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
}
}
diff --git a/admin/src/views/business/managersSheNotice.vue b/admin/src/views/business/managersSheNotice.vue
index 0f8f3a3..44b59bd 100644
--- a/admin/src/views/business/managersSheNotice.vue
+++ b/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>
diff --git a/server/pom.xml b/server/pom.xml
index 0156c1b..d761875 100644
--- a/server/pom.xml
+++ b/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>
diff --git a/server/src/main/java/com/doumee/api/common/PublicCloudController.java b/server/src/main/java/com/doumee/api/common/PublicCloudController.java
index 4ecc8da..abe0006 100644
--- a/server/src/main/java/com/doumee/api/common/PublicCloudController.java
+++ b/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 = "鎵归噺涓婁紶鏂囦欢鍒癋TP")
@RequestMapping(method= RequestMethod.POST,value="/uploadBatch")
@ResponseBody
diff --git a/server/src/main/java/com/doumee/core/constants/Constants.java b/server/src/main/java/com/doumee/core/constants/Constants.java
index 265f93c..5dbbe8b 100644
--- a/server/src/main/java/com/doumee/core/constants/Constants.java
+++ b/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" ;
diff --git a/server/src/main/java/com/doumee/dao/business/model/Managers.java b/server/src/main/java/com/doumee/dao/business/model/Managers.java
index 679154a..72d6f2d 100644
--- a/server/src/main/java/com/doumee/dao/business/model/Managers.java
+++ b/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 = "浜哄憳缂栫爜锛堝叧鑱攎ember)", example = "1")
private Integer memberId;
diff --git a/server/src/main/java/com/doumee/dao/business/model/Workorder.java b/server/src/main/java/com/doumee/dao/business/model/Workorder.java
index 5d4384b..57fddf1 100644
--- a/server/src/main/java/com/doumee/dao/business/model/Workorder.java
+++ b/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;
diff --git a/server/src/main/java/com/doumee/job/WorkorderSheEmailJob.java b/server/src/main/java/com/doumee/job/WorkorderSheEmailJob.java
new file mode 100644
index 0000000..2548de9
--- /dev/null
+++ b/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("瀹氭椂鍙戦�丼HE閭欢閫氱煡");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return jobContext;
+ }
+}
diff --git a/server/src/main/java/com/doumee/service/business/WorkorderService.java b/server/src/main/java/com/doumee/service/business/WorkorderService.java
index f093ecd..4f12fe8 100644
--- a/server/src/main/java/com/doumee/service/business/WorkorderService.java
+++ b/server/src/main/java/com/doumee/service/business/WorkorderService.java
@@ -149,4 +149,5 @@
*/
void sendCopy(SendCopyDTO sendCopyDTO);
+ void sendSheEmail();
}
diff --git a/server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java b/server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java
index 782492f..dd7ed90 100644
--- a/server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java
+++ b/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})
diff --git a/server/src/main/java/com/doumee/service/common/CaptchaService.java b/server/src/main/java/com/doumee/service/common/CaptchaService.java
index df4c868..2b00c71 100644
--- a/server/src/main/java/com/doumee/service/common/CaptchaService.java
+++ b/server/src/main/java/com/doumee/service/common/CaptchaService.java
@@ -127,17 +127,13 @@
@Data
@ApiModel("楠岃瘉鐮佸璞�")
public static class Captcha {
-
@ApiModelProperty(value = "楠岃瘉鐮乁UID")
private String uuid;
-
@JsonIgnore
@ApiModelProperty(value = "楠岃瘉鐮�", hidden = true)
private String text;
-
@ApiModelProperty(value = "楠岃瘉鐮丅ase64")
private String image;
-
Captcha (String text, BufferedImage image) {
this.uuid = UUID.randomUUID().toString();
this.text = text;
diff --git a/server/src/main/java/com/doumee/service/common/EmailService.java b/server/src/main/java/com/doumee/service/common/EmailService.java
new file mode 100644
index 0000000..6467d4c
--- /dev/null
+++ b/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;
+ }
+ }
+ }
diff --git a/server/src/main/resources/application-dev.yml b/server/src/main/resources/application-dev.yml
index e60b0b3..634538d 100644
--- a/server/src/main/resources/application-dev.yml
+++ b/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
diff --git a/server/src/main/resources/application-pro.yml b/server/src/main/resources/application-pro.yml
index 8da4bc1..b48a872 100644
--- a/server/src/main/resources/application-pro.yml
+++ b/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
--
Gitblit v1.9.3