From 15891708de887f26bec6b5fc52fe0fff742fda19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E4=B9=90=E8=A8=80?= Date: Wed, 25 Mar 2026 14:37:28 +0800 Subject: [PATCH] =?UTF-8?q?0325-=E6=B5=B7=E5=AE=81pad=E8=B5=B0=E8=AE=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SysCampaignController.java | 7 + .../ibs/list/domain/VisitFeedbackItemDTO.java | 19 ++ .../domain/VisitInfoFeedbackUpdateDTO.java | 31 +++ .../ibs/list/mapper/SysCampaignMapper.java | 2 + .../ibs/list/service/ISysCampaignService.java | 2 + .../service/impl/SysCampaignServiceImpl.java | 41 ++++ .../mapper/list/SysCampaignMapper.xml | 18 ++ ruoyi-ui/src/api/task/PADvisitRecord.js | 10 +- .../views/taskManage/PADvisitRecord/index.vue | 220 +++++++++++++++++- 9 files changed, 344 insertions(+), 6 deletions(-) create mode 100644 ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitFeedbackItemDTO.java create mode 100644 ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitInfoFeedbackUpdateDTO.java diff --git a/ibs/src/main/java/com/ruoyi/ibs/list/controller/SysCampaignController.java b/ibs/src/main/java/com/ruoyi/ibs/list/controller/SysCampaignController.java index b9789e7..ece06c2 100644 --- a/ibs/src/main/java/com/ruoyi/ibs/list/controller/SysCampaignController.java +++ b/ibs/src/main/java/com/ruoyi/ibs/list/controller/SysCampaignController.java @@ -312,6 +312,13 @@ public class SysCampaignController extends BaseController { .stream().collect(HashMap::new, (m, v) -> m.put(v.getUuid(),v.getModelName()), HashMap::putAll))); } + @PostMapping("/updateVisitInfoFeedback") + @ApiOperation("更新PAD走访反馈") + @Log(title ="pad走访记录-更新走访反馈", businessType = BusinessType.UPDATE) + public AjaxResult updateVisitInfoFeedback(@RequestBody VisitInfoFeedbackUpdateDTO updateDTO) { + return toAjax(sysCampaignService.updateVisitInfoFeedback(updateDTO)); + } + @PostMapping("/delete") @ApiOperation("根据campaignId删除任务") @Log(title = "走访-根据campaignId删除任务") diff --git a/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitFeedbackItemDTO.java b/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitFeedbackItemDTO.java new file mode 100644 index 0000000..3e909e3 --- /dev/null +++ b/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitFeedbackItemDTO.java @@ -0,0 +1,19 @@ +package com.ruoyi.ibs.list.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class VisitFeedbackItemDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "反馈类型") + private String feedbackType; + + @ApiModelProperty(value = "反馈产品列表") + private List products; +} diff --git a/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitInfoFeedbackUpdateDTO.java b/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitInfoFeedbackUpdateDTO.java new file mode 100644 index 0000000..52b5e48 --- /dev/null +++ b/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitInfoFeedbackUpdateDTO.java @@ -0,0 +1,31 @@ +package com.ruoyi.ibs.list.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class VisitInfoFeedbackUpdateDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "走访记录ID") + private Long id; + + @ApiModelProperty(value = "走访渠道") + private String source; + + @ApiModelProperty(value = "客户意愿结构化数据") + private List feedbackItems; + + @ApiModelProperty(value = "客户意愿拼接值") + private String intentionProductValue; + + private String userName; + + private String userRole; + + private String deptId; +} diff --git a/ibs/src/main/java/com/ruoyi/ibs/list/mapper/SysCampaignMapper.java b/ibs/src/main/java/com/ruoyi/ibs/list/mapper/SysCampaignMapper.java index 9459998..06f2303 100644 --- a/ibs/src/main/java/com/ruoyi/ibs/list/mapper/SysCampaignMapper.java +++ b/ibs/src/main/java/com/ruoyi/ibs/list/mapper/SysCampaignMapper.java @@ -156,6 +156,8 @@ public interface SysCampaignMapper extends BaseMapper { List selectVisitInfoList(VisitInfoDTO visitInfoDTO); + int updateVisitInfoFeedback(VisitInfoFeedbackUpdateDTO updateDTO); + @Update("UPDATE sys_campaign SET del_flag = '2' where campaign_id = #{campaignId}") int deleteSysCampaignByCampaignId(@Param("campaignId") String campaignId); diff --git a/ibs/src/main/java/com/ruoyi/ibs/list/service/ISysCampaignService.java b/ibs/src/main/java/com/ruoyi/ibs/list/service/ISysCampaignService.java index be7cc4c..6183ef7 100644 --- a/ibs/src/main/java/com/ruoyi/ibs/list/service/ISysCampaignService.java +++ b/ibs/src/main/java/com/ruoyi/ibs/list/service/ISysCampaignService.java @@ -115,5 +115,7 @@ public interface ISysCampaignService { public List selectVisitInfoVoList(VisitInfoDTO visitInfoDTO); + int updateVisitInfoFeedback(VisitInfoFeedbackUpdateDTO updateDTO); + public int deleteSysCampaign(String campaignId); } diff --git a/ibs/src/main/java/com/ruoyi/ibs/list/service/impl/SysCampaignServiceImpl.java b/ibs/src/main/java/com/ruoyi/ibs/list/service/impl/SysCampaignServiceImpl.java index 74a5e48..3f8d6ed 100644 --- a/ibs/src/main/java/com/ruoyi/ibs/list/service/impl/SysCampaignServiceImpl.java +++ b/ibs/src/main/java/com/ruoyi/ibs/list/service/impl/SysCampaignServiceImpl.java @@ -2178,6 +2178,23 @@ public class SysCampaignServiceImpl implements ISysCampaignService return sysCampaignMapper.selectVisitInfoList(visitInfoDTO); } + @Override + public int updateVisitInfoFeedback(VisitInfoFeedbackUpdateDTO updateDTO) { + if (updateDTO == null || updateDTO.getId() == null) { + throw new ServiceException("走访记录ID不能为空"); + } + updateDTO.setUserName(SecurityUtils.getUsername()); + updateDTO.setUserRole(SecurityUtils.userRole()); + updateDTO.setDeptId(String.valueOf(SecurityUtils.getDeptId())); + updateDTO.setSource(StringUtils.trimToNull(updateDTO.getSource())); + updateDTO.setIntentionProductValue(buildIntentionProductValue(updateDTO.getFeedbackItems())); + int rows = sysCampaignMapper.updateVisitInfoFeedback(updateDTO); + if (rows <= 0) { + throw new ServiceException("走访记录不存在或无权限修改"); + } + return rows; + } + @Override public int deleteSysCampaign(String campaignId) { SysCampaign sysCampaign = sysCampaignMapper.selectSysCampaignByCampaignId(campaignId); @@ -2186,4 +2203,28 @@ public class SysCampaignServiceImpl implements ISysCampaignService } return sysCampaignMapper.deleteSysCampaignByCampaignId(campaignId); } + private String buildIntentionProductValue(List feedbackItems) { + if (feedbackItems == null || feedbackItems.isEmpty()) { + return null; + } + String joinedValue = feedbackItems.stream() + .filter(Objects::nonNull) + .map(item -> { + String feedbackType = StringUtils.trimToNull(item.getFeedbackType()); + List products = Optional.ofNullable(item.getProducts()) + .orElse(Collections.emptyList()) + .stream() + .map(StringUtils::trimToNull) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + if (feedbackType == null || products.isEmpty()) { + return null; + } + return feedbackType + ":" + String.join(",", products); + }) + .filter(Objects::nonNull) + .collect(Collectors.joining(";")); + return StringUtils.trimToNull(joinedValue); + } } diff --git a/ibs/src/main/resources/mapper/list/SysCampaignMapper.xml b/ibs/src/main/resources/mapper/list/SysCampaignMapper.xml index e0ee982..d883af4 100644 --- a/ibs/src/main/resources/mapper/list/SysCampaignMapper.xml +++ b/ibs/src/main/resources/mapper/list/SysCampaignMapper.xml @@ -1425,4 +1425,22 @@ order by vi.sign_in_time desc + + update visit_info vi + left join sys_dept d on vi.dept_id = d.dept_id + set vi.source = #{source}, + vi.intention_product_value = #{intentionProductValue}, + vi.update_by = #{userName}, + vi.update_time = sysdate() + where vi.id = #{id} + + + and vi.vis_id = #{userName} + and d.dept_id = #{deptId} + and (d.dept_id = #{deptId} or find_in_set(#{deptId},d.ancestors)) + and left(d.dept_id,3) = left(#{deptId},3) + + + + diff --git a/ruoyi-ui/src/api/task/PADvisitRecord.js b/ruoyi-ui/src/api/task/PADvisitRecord.js index 7425d94..8908411 100644 --- a/ruoyi-ui/src/api/task/PADvisitRecord.js +++ b/ruoyi-ui/src/api/task/PADvisitRecord.js @@ -6,4 +6,12 @@ export function getPADVisitRecord(query) { method: 'get', params: query }) - } \ No newline at end of file + } + +export function updatePADVisitFeedback(data) { + return request({ + url: `/system/campaign/updateVisitInfoFeedback`, + method: 'post', + data: data + }) +} diff --git a/ruoyi-ui/src/views/taskManage/PADvisitRecord/index.vue b/ruoyi-ui/src/views/taskManage/PADvisitRecord/index.vue index cfd3f81..e7eb9b9 100644 --- a/ruoyi-ui/src/views/taskManage/PADvisitRecord/index.vue +++ b/ruoyi-ui/src/views/taskManage/PADvisitRecord/index.vue @@ -380,9 +380,14 @@ - + + + + + + + + + 取消 + 确定 + +