From 59e05e85b16e077f6ba2899218f32e1987bffc71 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:14:32 +0800 Subject: [PATCH] =?UTF-8?q?0325-=E5=8C=97=E4=BB=91=EF=BC=9A=E5=AE=A2?= =?UTF-8?q?=E7=BE=A4=E4=BF=AE=E6=94=B9+pad=E8=B5=B0=E8=AE=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group/domain/dto/CustGroupQueryDTO.java | 8 +- .../ruoyi/group/mapper/CustGroupMapper.java | 22 +- .../group/service/ICustGroupService.java | 9 +- .../impl/CustGroupMemberServiceImpl.java | 5 + .../service/impl/CustGroupServiceImpl.java | 14 +- .../mapper/group/CustGroupMapper.xml | 48 +++- .../com/ruoyi/ibs/list/domain/VisitInfo.java | 36 +++ .../ruoyi/ibs/list/domain/VisitInfoDTO.java | 4 + .../ruoyi/ibs/list/domain/VisitInfoVO.java | 36 +++ .../mapper/list/SysCampaignMapper.xml | 19 +- pom.xml | 7 + ruoyi-quartz/pom.xml | 4 + .../java/com/ruoyi/quartz/task/RyTask.java | 12 + .../service/impl/SysDeptServiceImpl.java | 9 +- .../src/views/grid/charts/customer/index.vue | 8 +- ruoyi-ui/src/views/group/custGroup/index.vue | 247 ++++++++++++++---- .../views/taskManage/PADvisitRecord/index.vue | 130 +++++---- 17 files changed, 492 insertions(+), 126 deletions(-) diff --git a/ibs-group/src/main/java/com/ruoyi/group/domain/dto/CustGroupQueryDTO.java b/ibs-group/src/main/java/com/ruoyi/group/domain/dto/CustGroupQueryDTO.java index 8cd9afb..8cda0c9 100644 --- a/ibs-group/src/main/java/com/ruoyi/group/domain/dto/CustGroupQueryDTO.java +++ b/ibs-group/src/main/java/com/ruoyi/group/domain/dto/CustGroupQueryDTO.java @@ -39,6 +39,12 @@ public class CustGroupQueryDTO implements Serializable { @ApiModelProperty(value = "客群状态", name = "groupStatus") private String groupStatus; + /** + * 视图类型:mine=我创建的,sharedToMe=下发给我的 + */ + @ApiModelProperty(value = "视图类型", name = "viewType") + private String viewType; + /** * 页码 */ @@ -50,4 +56,4 @@ public class CustGroupQueryDTO implements Serializable { */ @ApiModelProperty(value = "每页大小", name = "pageSize") private Integer pageSize = 10; -} \ No newline at end of file +} diff --git a/ibs-group/src/main/java/com/ruoyi/group/mapper/CustGroupMapper.java b/ibs-group/src/main/java/com/ruoyi/group/mapper/CustGroupMapper.java index 25920af..5023f9c 100644 --- a/ibs-group/src/main/java/com/ruoyi/group/mapper/CustGroupMapper.java +++ b/ibs-group/src/main/java/com/ruoyi/group/mapper/CustGroupMapper.java @@ -32,7 +32,9 @@ public interface CustGroupMapper extends BaseMapper { * @param dto 查询条件 * @return 客群VO列表 */ - List selectCustGroupList(@Param("dto") CustGroupQueryDTO dto); + List selectCustGroupList(@Param("dto") CustGroupQueryDTO dto, + @Param("userName") String userName, + @Param("deptId") String deptId); /** * 根据ID查询客群详情 @@ -40,5 +42,19 @@ public interface CustGroupMapper extends BaseMapper { * @param id 客群ID * @return 客群VO */ - CustGroupVO selectCustGroupById(@Param("id") Long id); -} \ No newline at end of file + CustGroupVO selectCustGroupById(@Param("id") Long id, + @Param("userName") String userName, + @Param("deptId") String deptId); + + /** + * 校验当前用户是否有客群查看权限 + * + * @param id 客群ID + * @param userName 当前用户名 + * @param deptId 当前部门ID + * @return 可查看数量 + */ + Long countVisibleCustGroup(@Param("id") Long id, + @Param("userName") String userName, + @Param("deptId") String deptId); +} diff --git a/ibs-group/src/main/java/com/ruoyi/group/service/ICustGroupService.java b/ibs-group/src/main/java/com/ruoyi/group/service/ICustGroupService.java index 9a73df6..b0cb593 100644 --- a/ibs-group/src/main/java/com/ruoyi/group/service/ICustGroupService.java +++ b/ibs-group/src/main/java/com/ruoyi/group/service/ICustGroupService.java @@ -31,6 +31,13 @@ public interface ICustGroupService { */ CustGroupVO getCustGroup(Long id); + /** + * 校验当前用户是否有客群查看权限 + * + * @param id 客群ID + */ + void checkCustGroupViewPermission(Long id); + /** * 异步创建客群(模板导入) * @@ -100,4 +107,4 @@ public interface ICustGroupService { */ void checkAndDisableExpiredGroups(); -} \ No newline at end of file +} diff --git a/ibs-group/src/main/java/com/ruoyi/group/service/impl/CustGroupMemberServiceImpl.java b/ibs-group/src/main/java/com/ruoyi/group/service/impl/CustGroupMemberServiceImpl.java index 031a700..5a3aff0 100644 --- a/ibs-group/src/main/java/com/ruoyi/group/service/impl/CustGroupMemberServiceImpl.java +++ b/ibs-group/src/main/java/com/ruoyi/group/service/impl/CustGroupMemberServiceImpl.java @@ -6,6 +6,7 @@ import com.ruoyi.group.domain.entity.CustGroupMember; import com.ruoyi.group.domain.vo.CustGroupMemberVO; import com.ruoyi.group.mapper.CustGroupMapper; import com.ruoyi.group.mapper.CustGroupMemberMapper; +import com.ruoyi.group.service.ICustGroupService; import com.ruoyi.group.service.ICustGroupMemberService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -27,8 +28,12 @@ public class CustGroupMemberServiceImpl implements ICustGroupMemberService { @Resource private CustGroupMapper custGroupMapper; + @Resource + private ICustGroupService custGroupService; + @Override public List listCustGroupMembers(Long groupId, CustGroupMemberQueryDTO dto) { + custGroupService.checkCustGroupViewPermission(groupId); return custGroupMemberMapper.selectCustGroupMemberList(groupId, dto); } diff --git a/ibs-group/src/main/java/com/ruoyi/group/service/impl/CustGroupServiceImpl.java b/ibs-group/src/main/java/com/ruoyi/group/service/impl/CustGroupServiceImpl.java index a0e8804..0ba910f 100644 --- a/ibs-group/src/main/java/com/ruoyi/group/service/impl/CustGroupServiceImpl.java +++ b/ibs-group/src/main/java/com/ruoyi/group/service/impl/CustGroupServiceImpl.java @@ -66,18 +66,26 @@ public class CustGroupServiceImpl implements ICustGroupService { @Override public List listCustGroup(CustGroupQueryDTO dto) { - return custGroupMapper.selectCustGroupList(dto); + return custGroupMapper.selectCustGroupList(dto, SecurityUtils.getUsername(), String.valueOf(SecurityUtils.getDeptId())); } @Override public CustGroupVO getCustGroup(Long id) { - CustGroupVO custGroup = custGroupMapper.selectCustGroupById(id); + CustGroupVO custGroup = custGroupMapper.selectCustGroupById(id, SecurityUtils.getUsername(), String.valueOf(SecurityUtils.getDeptId())); if (custGroup == null) { throw new ServiceException("客群不存在"); } return custGroup; } + @Override + public void checkCustGroupViewPermission(Long id) { + Long count = custGroupMapper.countVisibleCustGroup(id, SecurityUtils.getUsername(), String.valueOf(SecurityUtils.getDeptId())); + if (count == null || count <= 0) { + throw new ServiceException("客群不存在或无查看权限"); + } + } + @Override @Transactional(rollbackFor = Exception.class) public String createCustGroupByTemplate(CustGroup custGroup, MultipartFile file) { @@ -914,4 +922,4 @@ public class CustGroupServiceImpl implements ICustGroupService { } return memberList; } -} \ No newline at end of file +} diff --git a/ibs-group/src/main/resources/mapper/group/CustGroupMapper.xml b/ibs-group/src/main/resources/mapper/group/CustGroupMapper.xml index 3b78e5d..8b55004 100644 --- a/ibs-group/src/main/resources/mapper/group/CustGroupMapper.xml +++ b/ibs-group/src/main/resources/mapper/group/CustGroupMapper.xml @@ -4,6 +4,37 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + AND ( + cg.user_name = #{userName} + OR ( + cg.share_enabled = 1 + AND cg.group_status = '0' + AND cg.share_dept_ids IS NOT NULL + AND cg.share_dept_ids != '' + AND find_in_set(#{deptId}, cg.share_dept_ids) + ) + ) + + + + + + AND cg.user_name = #{userName} + + + AND cg.share_enabled = 1 + AND cg.group_status = '0' + AND cg.share_dept_ids IS NOT NULL + AND cg.share_dept_ids != '' + AND find_in_set(#{deptId}, cg.share_dept_ids) + + + + + + + + + diff --git a/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitInfo.java b/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitInfo.java index ce6a62f..1210321 100644 --- a/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitInfo.java +++ b/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitInfo.java @@ -117,4 +117,40 @@ public class VisitInfo { @ApiModelProperty(value = "走访备注") private String remark; + @ApiModelProperty(value = "互动地址") + private String interAddr; + + @ApiModelProperty(value = "协同员工名称") + private String colStafName; + + @ApiModelProperty(value = "后续备注") + private String laterNote; + + @ApiModelProperty(value = "意向产品值") + private String intentionProductValue; + + @ApiModelProperty(value = "反馈状态") + private String feedbackStatus; + + @ApiModelProperty(value = "走访来源") + private String sourceOfInterview; + + @ApiModelProperty(value = "文件名") + private String filename; + + @ApiModelProperty(value = "外呼状态") + private String outCallStatus; + + @ApiModelProperty(value = "外呼意向") + private String outCallIntention; + + @ApiModelProperty(value = "来源") + private String source; + + @ApiModelProperty(value = "分析值") + private String analysisValue; + + @ApiModelProperty(value = "设备") + private String facility; + } diff --git a/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitInfoDTO.java b/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitInfoDTO.java index 53d4d4f..b7f45a9 100644 --- a/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitInfoDTO.java +++ b/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitInfoDTO.java @@ -13,6 +13,10 @@ public class VisitInfoDTO { @ApiModelProperty(value = "柜员名称") private String visName; + /** 柜员号 */ + @ApiModelProperty(value = "柜员号") + private String visId; + /** 走访时间 */ @ApiModelProperty(value = "走访时间") private String visTime; diff --git a/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitInfoVO.java b/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitInfoVO.java index d0556a7..31df6ae 100644 --- a/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitInfoVO.java +++ b/ibs/src/main/java/com/ruoyi/ibs/list/domain/VisitInfoVO.java @@ -128,4 +128,40 @@ public class VisitInfoVO { @ApiModelProperty(value = "走访结果") private String interRes; + @ApiModelProperty(value = "实地拜访地址") + private String interAddr; + + @ApiModelProperty(value = "协同走访客户经理") + private String colStafName; + + @ApiModelProperty(value = "事后备注") + private String laterNote; + + @ApiModelProperty(value = "走访反馈") + private String intentionProductValue; + + @ApiModelProperty(value = "反馈状态") + private String feedbackStatus; + + @ApiModelProperty(value = "走访来源") + private String sourceOfInterview; + + @ApiModelProperty(value = "批量导入文件名") + private String filename; + + @ApiModelProperty(value = "外呼状态") + private String outCallStatus; + + @ApiModelProperty(value = "客户意愿") + private String outCallIntention; + + @ApiModelProperty(value = "走访来源:1null:pad 2:企业微信 3:pc") + private String source; + + @ApiModelProperty(value = "nlp模型提取") + private String analysisValue; + + @ApiModelProperty(value = "预授信额度") + private String facility; + } diff --git a/ibs/src/main/resources/mapper/list/SysCampaignMapper.xml b/ibs/src/main/resources/mapper/list/SysCampaignMapper.xml index 81c0b71..e0ee982 100644 --- a/ibs/src/main/resources/mapper/list/SysCampaignMapper.xml +++ b/ibs/src/main/resources/mapper/list/SysCampaignMapper.xml @@ -127,6 +127,18 @@ + + + + + + + + + + + + @@ -1384,12 +1396,15 @@ - \ No newline at end of file + diff --git a/pom.xml b/pom.xml index 540b357..c16384c 100644 --- a/pom.xml +++ b/pom.xml @@ -215,6 +215,13 @@ ${ruoyi.version} + + + com.ruoyi + ibs-group + 3.8.8 + + diff --git a/ruoyi-quartz/pom.xml b/ruoyi-quartz/pom.xml index 1c929ad..8e64e38 100644 --- a/ruoyi-quartz/pom.xml +++ b/ruoyi-quartz/pom.xml @@ -38,6 +38,10 @@ com.ruoyi ibs + + com.ruoyi + ibs-group + diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java index 775a625..0d47bb2 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java @@ -1,6 +1,7 @@ package com.ruoyi.quartz.task; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.group.service.ICustGroupService; import com.ruoyi.ibs.cmpm.service.GridCmpmService; import com.ruoyi.ibs.dashboard.service.FileOptService; import com.ruoyi.ibs.draw.service.DrawGridCustService; @@ -47,6 +48,9 @@ public class RyTask @Resource private AddressAnalyseService addressAnalyseService; + @Resource + private ICustGroupService custGroupService; + public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) { @@ -111,4 +115,12 @@ public class RyTask addressAnalyseService.pointInGeometryScheduled(); } + public void updateDynamicCustGroups() { + custGroupService.updateDynamicCustGroups(); + } + + public void checkAndDisableExpiredGroups() { + custGroupService.checkAndDisableExpiredGroups(); + } + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java index aa62daa..06e6447 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -133,8 +133,13 @@ public class SysDeptServiceImpl implements ISysDeptService @Override public List selectDeptTreeListForTopGrid(SysDept dept) { List depts = SpringUtils.getAopProxy(this).selectDeptList(dept); - List branchs = depts.stream().filter(sysDept -> !sysDept.getDeptType().equals("outlet")) - .filter(sysDept -> !sysDept.getDeptType().equals("head")) + if (depts == null || depts.isEmpty()) { + return Collections.emptyList(); + } + List branchs = depts.stream() + .filter(Objects::nonNull) + .filter(sysDept -> !"outlet".equals(sysDept.getDeptType())) + .filter(sysDept -> !"head".equals(sysDept.getDeptType())) .collect(Collectors.toList()); return buildDeptTreeSelect(branchs); } diff --git a/ruoyi-ui/src/views/grid/charts/customer/index.vue b/ruoyi-ui/src/views/grid/charts/customer/index.vue index 52f8a80..117bf9e 100644 --- a/ruoyi-ui/src/views/grid/charts/customer/index.vue +++ b/ruoyi-ui/src/views/grid/charts/customer/index.vue @@ -142,7 +142,7 @@ 导出前1000条 -