Jelajahi Sumber

Merge remote-tracking branch 'origin/master'

zhujing 1 bulan lalu
induk
melakukan
4d104b56f2

+ 9 - 4
java/storlead-sasa/storlead-trade/src/main/java/com/storlead/trade/service/impl/MarketingCampaignServiceImpl.java

@@ -173,6 +173,10 @@ public class MarketingCampaignServiceImpl
     public Result<Object> addMarket(MarketingCampaignDTO marketingCampaignDTO) {
         MarketingCampaignEntity marketingCampaignEntity = new MarketingCampaignEntity();
         BeanUtils.copyProperties(marketingCampaignDTO, marketingCampaignEntity);
+        // 过滤 AI 最优时间占位值,避免写入 DATETIME 列报错
+        if ("optimal".equalsIgnoreCase(marketingCampaignEntity.getEmailSentTime())) {
+            marketingCampaignEntity.setEmailSentTime(null);
+        }
         boolean isOk = this.save(marketingCampaignEntity);
         if (!isOk) {
 
@@ -217,12 +221,9 @@ public class MarketingCampaignServiceImpl
                 }
                 boolean saveOk = marketingCampaignSopDetailService.saveBatch(marketingCampaignSopDetailEntityList);
 
-
-                //生成每个客户的邮件发送时间
+                //异步生成每个客户的邮件发送时间
                 marketEmailsService.addSendTime(marketingCampaignEntity);
 
-
-
         }
         return Result.ok();
     }
@@ -236,6 +237,10 @@ public class MarketingCampaignServiceImpl
         MarketingCampaignEntity marketingCampaignOld = this.getById(marketingCampaignDTO.getId());
         MarketingCampaignEntity marketingCampaignEntity = new MarketingCampaignEntity();
         BeanUtils.copyProperties(marketingCampaignDTO, marketingCampaignEntity);
+        // 过滤 AI 最优时间占位值,避免写入 DATETIME 列报错
+        if ("optimal".equalsIgnoreCase(marketingCampaignEntity.getEmailSentTime())) {
+            marketingCampaignEntity.setEmailSentTime(null);
+        }
         boolean isOk = this.updateById(marketingCampaignEntity);
         if (!isOk) {
             return Result.error("修改失败");

+ 0 - 3
java/storlead-sasa/storlead-trade/src/main/java/com/storlead/trade/service/impl/MarketingCampaignSopDetailServiceImpl.java

@@ -113,9 +113,6 @@ public class MarketingCampaignSopDetailServiceImpl
                 if ("yourEmail".equals(sysDictDetailResponseDTO.getLabel())) {
                     yourEmail = sysDictDetailResponseDTO.getValue();
                 }
-                if ("本地信息".equals(sysDictDetailResponseDTO.getLabel())) {
-                    yourName = sysDictDetailResponseDTO.getValue();
-                }
                 if ("fullCompanyAddress".equals(sysDictDetailResponseDTO.getLabel())) {
                     fullCompanyAddress = sysDictDetailResponseDTO.getValue();
                 }

+ 1 - 1
ui/smarttrade-platform/src/api/knowledge/index.js

@@ -65,7 +65,7 @@ export const editChunk = (data = {}) => {
 
 export const blocking = (data = {}) => post('/router/rest/chat/blocking', data,{
     headers: {
-        'Authorization': 'Bearer app-KpoSEqve0ybB2Ej5PIJiBu2k'
+        'Authorization': 'Bearer app-2i687TVfIS2TeqDxCbTWS5sMy'
     }
 })
 

+ 15 - 9
ui/smarttrade-platform/src/components/addMarketing.vue

@@ -82,9 +82,9 @@
                             <label class="form-label">开始日期</label>
                             <el-date-picker
                                 v-model="newCampaign.startDate"
-                                type="datetime"
-                                format="YYYY-MM-DD HH:mm"
-                                value-format="YYYY-MM-DD HH:mm"
+                                type="date"
+                                format="YYYY-MM-DD"
+                                value-format="YYYY-MM-DD"
                                 placeholder="选择开始时间"
                             />
                         </div>
@@ -92,9 +92,9 @@
                             <label class="form-label">结束日期</label>
                             <el-date-picker
                                 v-model="newCampaign.endDate"
-                                type="datetime"
-                                format="YYYY-MM-DD HH:mm"
-                                value-format="YYYY-MM-DD HH:mm"
+                                type="date"
+                                format="YYYY-MM-DD"
+                                value-format="YYYY-MM-DD"
                                 placeholder="选择结束时间"
                             />
                         </div>
@@ -107,7 +107,7 @@
                                 <el-option label="李主管" value="sales2" />
                                 <el-option label="王小明" value="sales3" />
                             </el-select> -->
-                            <SelectUser v-model="newCampaign.owner" multiple />
+                            <SelectUser v-model="newCampaign.owner" multiple @onOk="handleSelectUser" />
                         </div>
                     </div>
                     <div class="form-group">
@@ -525,7 +525,7 @@
                                 <div class="preview-info">
                                     <div class="preview-label">负责人</div>
                                     <div class="preview-value">
-                                        {{ getOwnerName(newCampaign.owner) || "未指定" }}
+                                        {{ getOwnerName() }}
                                     </div>
                                 </div>
                             </div>
@@ -859,10 +859,15 @@
         customerDetailRef.value.open(type, customerList.value)
     }
 
+    const selectedUser = ref([])
+    const handleSelectUser = (users) => {
+        selectedUser.value = users
+    }
+
     const sopTemplates = ref([])
     const getTypeLabel = (type) => ({ prospect: '潜客开发', nurture: '客户培育', reactivate: '客户唤醒', promote: '产品推广', seasonal: '节日营销', exhibition: '展会跟进', other: '其他' }[type] || type)
     const getPriorityLabel = (priority) => ({ urgent: '紧急', high: '高优先', medium: '中等', low: '低优先' }[priority] || priority)
-    const getOwnerName = (owner) => ({ sales1: '张经理', sales2: '李主管', sales3: '王小明' }[owner] || '')
+    const getOwnerName = () => { return selectedUser.value.map(item => item.realName).join(',') }
     const getChannelStyle = (id) => {
         const styles = {
             email: { background: 'rgba(99, 102, 241, 0.2)', color: 'var(--primary)' },
@@ -1111,6 +1116,7 @@
         getEmails()
         let userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}')
         newCampaign.value.owner = [userInfo.id]
+        selectedUser.value = [{ id: userInfo.id, realName: userInfo.realName }]
     }
 
     const regionValue = ref([])

+ 2 - 2
ui/smarttrade-platform/src/components/marketing/marketingDetail.vue

@@ -199,12 +199,12 @@
           </div>
         </div>
         <div class="modal-footer">
-          <button class="btn btn-secondary" @click="duplicateCampaign(selectedCampaign)">
+          <!-- <button class="btn btn-secondary" @click="duplicateCampaign(selectedCampaign)">
             <i class="fas fa-copy"></i> 复制活动
           </button>
           <button class="btn btn-secondary" @click="exportCampaignReport(selectedCampaign)">
             <i class="fas fa-download"></i> 导出报告
-          </button>
+          </button> -->
           <button class="btn btn-secondary" @click="showCampaignDetailModal = false">关闭</button>
           <button class="btn btn-primary" @click="editCampaign(selectedCampaign)">
             <i class="fas fa-edit"></i> 编辑活动

+ 1 - 1
ui/smarttrade-platform/src/views/KnowledgeView.vue

@@ -1130,7 +1130,7 @@ const aiOptimize = (type) => {
     query:'',
     responseMode:'blocking',
     user:1,
-    appId:'app-KpoSEqve0ybB2Ej5PlJiBu2k',
+    appId:'app-2i687TVfIS2TeqDxCbTWS5sM',
     conversationId:'',
     inputs:{},
   }