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 @@ - + + + + + + + + + 取消 + 确定 + +