package com.ruoyi.web.controller.api; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.WebUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.dto.BranchAuditDTO; import com.ruoyi.system.dto.TCrmBranchDTO; import com.ruoyi.system.dto.UnbindDTO; import com.ruoyi.system.dto.UnbindProcessingDTO; import com.ruoyi.system.export.TCrmBranchAuditExport; import com.ruoyi.system.export.TCrmBranchExport; import com.ruoyi.system.export.TSysAppUserClinicExport; import com.ruoyi.system.export.TSysAppUserExport; import com.ruoyi.system.model.*; import com.ruoyi.system.query.TCrmBranchAuditQuery; import com.ruoyi.system.query.TCrmBranchQuery; import com.ruoyi.system.query.TSysAppUserQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.TCrmBranchLiftVO; import com.ruoyi.system.vo.TCrmBranchVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; /** *

* crm分公司管理 前端控制器 *

* * @author xiaochen * @since 2025-08-20 */ @Api(tags = "crm分公司管理") @RestController @RequestMapping("/t-crm-branch") public class TCrmBranchController { private final TCrmBranchService crmBranchService; private final TCrmBranchAreaService crmBranchAreaService; private final TCrmBranchSalaryService crmBranchSalaryService; private final ISysUserService sysUserService; private final TCrmChangePointsService crmChangePointsService; private final TCrmPositionService crmPositionService; private final TCrmSalespersonService crmSalespersonService; private final TCrmBranchLiftService crmBranchLiftService; private final TRegionService regionService; private final TokenService tokenService; @Autowired public TCrmBranchController(TCrmBranchService crmBranchService, TCrmBranchAreaService crmBranchAreaService, TCrmBranchSalaryService crmBranchSalaryService, ISysUserService sysUserService, TCrmChangePointsService crmChangePointsService, TCrmPositionService crmPositionService, TCrmSalespersonService crmSalespersonService, TCrmBranchLiftService crmBranchLiftService, TRegionService regionService, TokenService tokenService) { this.crmBranchService = crmBranchService; this.crmBranchAreaService = crmBranchAreaService; this.crmBranchSalaryService = crmBranchSalaryService; this.sysUserService = sysUserService; this.crmChangePointsService = crmChangePointsService; this.crmPositionService = crmPositionService; this.crmSalespersonService = crmSalespersonService; this.crmBranchLiftService = crmBranchLiftService; this.regionService = regionService; this.tokenService = tokenService; } /** * 获取crm分公司管理管理列表 */ @ApiOperation(value = "获取crm分公司管理分页列表") @PostMapping(value = "/pageList") public R> pageList(@RequestBody TCrmBranchQuery query) { Integer roleType = tokenService.getLoginUser().getUser().getRoleType(); Long userId = tokenService.getLoginUser().getUserId(); query.setRoleType(roleType); query.setUserId(userId); return R.ok(crmBranchService.pageList(query)); } /** * 获取crm分公司管理管理列表 */ @ApiOperation(value = "获取crm分公司审核分页列表") @PostMapping(value = "/pageAuditList") public R> pageAuditList(@RequestBody TCrmBranchAuditQuery query) { return R.ok(crmBranchService.pageAuditList(query)); } /** * 获取crm分公司管理管理列表 */ @ApiOperation(value = "获取crm分公司解除绑定分页列表") @PostMapping(value = "/pageUnbindList") public R> pageUnbindList(@RequestBody TCrmBranchAuditQuery query) { return R.ok(crmBranchService.pageUnbindList(query)); } /** * 获取crm分公司管理管理列表 */ @ApiOperation(value = "获取crm分公司省公司,地区经理管理列表") @GetMapping(value = "/listProvince") public R> listProvince(@RequestParam Integer personType) { List crmBranches = crmBranchService.list(Wrappers.lambdaQuery(TCrmBranch.class) .eq(TCrmBranch::getPersonType, personType) .eq(TCrmBranch::getStatus, 1) .orderByDesc(TCrmBranch::getCreateTime)); return R.ok(crmBranches); } /** * 获取crm分公司管理管理列表 */ @ApiOperation(value = "获取crm分公司地区经理,城市经理管理列表") @GetMapping(value = "/listCity") public R> listCity() { Long userId = tokenService.getLoginUser().getUserId(); TCrmBranch crmBranch = crmBranchService.getOne(Wrappers.lambdaQuery(TCrmBranch.class) .eq(TCrmBranch::getUserId, userId) .eq(TCrmBranch::getStatus, 1) .last("LIMIT 1")); if(Objects.isNull(crmBranch)){ return R.ok(new ArrayList<>()); } if(crmBranch.getPersonType() == 1){ List crmBranches = crmBranchService.list(Wrappers.lambdaQuery(TCrmBranch.class) .eq(TCrmBranch::getProvinceBranchId, crmBranch.getId()) .eq(TCrmBranch::getStatus, 1) .orderByDesc(TCrmBranch::getCreateTime)); crmBranches.add(crmBranch); return R.ok(crmBranches); } if(crmBranch.getPersonType() == 2){ List crmBranches = crmBranchService.list(Wrappers.lambdaQuery(TCrmBranch.class) .eq(TCrmBranch::getCorrelationPersonId, userId) .eq(TCrmBranch::getStatus, 1) .orderByDesc(TCrmBranch::getCreateTime)); crmBranches.add(crmBranch); return R.ok(crmBranches); } if(crmBranch.getPersonType() == 3){ List crmBranches = new ArrayList<>(); crmBranches.add(crmBranch); return R.ok(crmBranches); } return R.ok(); } /** * 获取crm分公司管理管理列表 */ @ApiOperation(value = "获取crm分公司管理列表") @PostMapping(value = "/list") public R> list() { Integer roleType = tokenService.getLoginUser().getUser().getRoleType(); Long userId = tokenService.getLoginUser().getUserId(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if (roleType == 2) { wrapper.eq(TCrmBranch::getUserId, userId); } if(roleType == 3){ // 查询业务员信息 TCrmSalesperson crmSalesperson = crmSalespersonService.getOne(Wrappers.lambdaQuery(TCrmSalesperson.class) .eq(TCrmSalesperson::getUserId, userId) .last("LIMIT 1")); if(Objects.nonNull(crmSalesperson)){ wrapper.eq(TCrmBranch::getId, crmSalesperson.getBranchId()); } } wrapper.eq(TCrmBranch::getStatus,1) .eq(TCrmBranch::getAuditStatus,2) .orderByDesc(TCrmBranch::getCreateTime); return R.ok(crmBranchService.list(wrapper)); } /** * 添加crm分公司管理管理 */ @Log(title = "crm分公司管理信息-新增crm分公司管理", businessType = BusinessType.INSERT) @ApiOperation(value = "添加crm分公司管理") @PostMapping(value = "/add") public R add(@Validated @RequestBody TCrmBranchDTO dto) { Integer roleType = tokenService.getLoginUser().getUser().getRoleType(); if (roleType == 2) { dto.setAuditStatus(1); } if (roleType == 1) { dto.setAuditStatus(2); } return crmBranchService.addBranch(dto); } /** * 修改crm分公司管理 */ @Log(title = "crm分公司管理信息-修改crm分公司管理", businessType = BusinessType.UPDATE) @ApiOperation(value = "修改crm分公司管理") @PostMapping(value = "/update") public R update(@Validated @RequestBody TCrmBranchDTO dto) { return crmBranchService.updateBranch(dto); } /** * 查看crm分公司管理详情 */ @ApiOperation(value = "查看crm分公司管理详情") @GetMapping(value = "/getDetailById") public R getDetailById(@RequestParam String id) { TCrmBranch crmBranch = crmBranchService.getById(id); TCrmBranchVO crmBranchVO = new TCrmBranchVO(); BeanUtils.copyProperties(crmBranch, crmBranchVO); // 查询负责区域 List crmBranchAreas = crmBranchAreaService.list(Wrappers.lambdaQuery(TCrmBranchArea.class) .eq(TCrmBranchArea::getAreaType, 1) .eq(TCrmBranchArea::getBranchId, id)); crmBranchVO.setCrmBranchAreas(crmBranchAreas); // 查询管辖区域 List jurisdictionBranchAreas = crmBranchAreaService.list(Wrappers.lambdaQuery(TCrmBranchArea.class) .eq(TCrmBranchArea::getAreaType, 2) .eq(TCrmBranchArea::getBranchId, id)); crmBranchVO.setJurisdictionBranchAreas(jurisdictionBranchAreas); // 职位薪资 List crmPositions = crmPositionService.list(); List crmBranchSalaries = crmBranchSalaryService.list(Wrappers.lambdaQuery(TCrmBranchSalary.class).eq(TCrmBranchSalary::getBranchId, id)); for (TCrmBranchSalary crmBranchSalary : crmBranchSalaries) { crmPositions.stream().filter(crmPosition -> Objects.equals(crmPosition.getId(), crmBranchSalary.getPositionId())).findFirst().ifPresent(crmPosition -> crmBranchSalary.setPositionName(crmPosition.getPositionName())); } crmBranchVO.setCrmBranchSalaries(crmBranchSalaries); return R.ok(crmBranchVO); } /** * 查看crm分公司管理详情 */ @ApiOperation(value = "查看crm分公司解绑详情") @GetMapping(value = "/getDetailUnbindById") public R getDetailUnbindById(@RequestParam String id) { TCrmBranchLift crmBranchLift = crmBranchLiftService.getById(id); if(Objects.isNull(crmBranchLift)){ return R.fail("未找到该解绑信息"); } TCrmBranchLiftVO crmBranchLiftVO = new TCrmBranchLiftVO(); BeanUtils.copyProperties(crmBranchLift, crmBranchLiftVO); TCrmBranch crmBranch = crmBranchService.getById(crmBranchLift.getBranchId()); TCrmBranchVO crmBranchVO = new TCrmBranchVO(); BeanUtils.copyProperties(crmBranch, crmBranchVO); // 查询负责区域 List crmBranchAreas = crmBranchAreaService.list(Wrappers.lambdaQuery(TCrmBranchArea.class) .eq(TCrmBranchArea::getAreaType, 1) .eq(TCrmBranchArea::getBranchId, crmBranchLift.getBranchId())); crmBranchVO.setCrmBranchAreas(crmBranchAreas); // 查询管辖区域 List jurisdictionBranchAreas = crmBranchAreaService.list(Wrappers.lambdaQuery(TCrmBranchArea.class) .eq(TCrmBranchArea::getAreaType, 2) .eq(TCrmBranchArea::getBranchId, crmBranchLift.getBranchId())); crmBranchVO.setJurisdictionBranchAreas(jurisdictionBranchAreas); // 职位薪资 List crmPositions = crmPositionService.list(); List crmBranchSalaries = crmBranchSalaryService.list(Wrappers.lambdaQuery(TCrmBranchSalary.class).eq(TCrmBranchSalary::getBranchId, id)); for (TCrmBranchSalary crmBranchSalary : crmBranchSalaries) { crmPositions.stream().filter(crmPosition -> Objects.equals(crmPosition.getId(), crmBranchSalary.getPositionId())).findFirst().ifPresent(crmPosition -> crmBranchSalary.setPositionName(crmPosition.getPositionName())); } crmBranchVO.setCrmBranchSalaries(crmBranchSalaries); crmBranchLiftVO.setCrmBranchVO(crmBranchVO); return R.ok(crmBranchLiftVO); } /** * 删除crm分公司管理 */ @Log(title = "crm分公司管理信息-删除crm分公司管理", businessType = BusinessType.DELETE) @ApiOperation(value = "删除crm分公司管理") @DeleteMapping(value = "/deleteById") public R deleteById(@RequestParam String id) { // 删除区域 crmBranchAreaService.remove(Wrappers.lambdaQuery(TCrmBranchArea.class).eq(TCrmBranchArea::getBranchId, id)); // 删除职位薪资 crmBranchSalaryService.remove(Wrappers.lambdaQuery(TCrmBranchSalary.class).eq(TCrmBranchSalary::getBranchId, id)); // 删除账号 TCrmBranch crmBranch = crmBranchService.getById(id); sysUserService.deleteUserById(crmBranch.getUserId()); return R.ok(crmBranchService.removeById(id)); } /** * 批量删除crm分公司管理 */ @Log(title = "crm分公司管理信息-删除crm分公司管理", businessType = BusinessType.DELETE) @ApiOperation(value = "批量删除crm分公司管理") @DeleteMapping(value = "/deleteByIds") public R deleteByIds(@RequestBody List ids) { // 删除区域 crmBranchAreaService.remove(Wrappers.lambdaQuery(TCrmBranchArea.class).in(TCrmBranchArea::getBranchId, ids)); // 删除职位薪资 crmBranchSalaryService.remove(Wrappers.lambdaQuery(TCrmBranchSalary.class).in(TCrmBranchSalary::getBranchId, ids)); // 删除账号 List crmBranchList = crmBranchService.list(Wrappers.lambdaQuery(TCrmBranch.class).in(TCrmBranch::getId, ids)); List userIds = crmBranchList.stream().map(TCrmBranch::getUserId).collect(Collectors.toList()); sysUserService.deleteUserByIds(userIds); return R.ok(crmBranchService.removeByIds(ids)); } /** * 批量删除crm分公司管理 */ @Log(title = "crm分公司管理信息-分公司管理解冻冻结", businessType = BusinessType.UPDATE) @ApiOperation(value = "分公司管理解冻冻结",notes = "状态 1=使用中 2=冻结") @PutMapping(value = "/thawOrFreeze") public R thawOrFreeze(@RequestParam(value = "id")String id, @RequestParam(value = "status")Integer status) { TCrmBranch crmBranch = crmBranchService.getById(id); crmBranch.setStatus(status); crmBranchService.updateById(crmBranch); // 查询用户 SysUser sysUser = sysUserService.selectUserById(crmBranch.getUserId()); // 查询业务员 List crmSalespersons = crmSalespersonService.list(Wrappers.lambdaQuery(TCrmSalesperson.class) .eq(TCrmSalesperson::getBranchId, id)); switch (status){ case 1: // 解冻 sysUser.setStatus("0"); sysUserService.updateUser(sysUser); if(!CollectionUtils.isEmpty(crmSalespersons)){ List userIds = crmSalespersons.stream().map(TCrmSalesperson::getUserId).collect(Collectors.toList()); sysUserService.updateUserStatusByUserIds(userIds, "0"); } break; case 2: // 冻结 sysUser.setStatus("1"); sysUserService.updateUser(sysUser); // 查询业务员 if(!CollectionUtils.isEmpty(crmSalespersons)){ List userIds = crmSalespersons.stream().map(TCrmSalesperson::getUserId).collect(Collectors.toList()); sysUserService.updateUserStatusByUserIds(userIds, "1"); } break; } return R.ok(); } /** * 批量删除crm分公司管理 */ @Log(title = "crm分公司管理信息-分公司管理修改积分", businessType = BusinessType.DELETE) @ApiOperation(value = "分公司管理修改积分") @PutMapping(value = "/changePoints") public R changePoints(@RequestBody TCrmChangePoints changePoints) { // 查询分公司信息 TCrmBranch crmBranch = crmBranchService.getById(changePoints.getBranchSalespersonId()); if (Objects.isNull(crmBranch)) { return R.fail("未查询到该分公司"); } switch (changePoints.getChangeType()){ case 1: // 增加积分 crmBranch.setUserPoints(crmBranch.getUserPoints() + changePoints.getChangeValue()); break; case 2: // 减少积分 if (crmBranch.getUserPoints() < changePoints.getChangeValue()) { return R.fail("操作失败,剩余积分数不足"); } crmBranch.setUserPoints(crmBranch.getUserPoints() - changePoints.getChangeValue()); break; } crmBranchService.updateById(crmBranch); changePoints.setUserType(1); changePoints.setChangeReason(3); crmChangePointsService.save(changePoints); return R.ok(); } @Log(title = "crm分公司管理信息-分公司管理信息导出", businessType = BusinessType.EXPORT) @ApiOperation(value = "分公司管理信息导出") @PostMapping("/exportList") public void exportList(@RequestBody TCrmBranchQuery query){ Integer roleType = tokenService.getLoginUser().getUser().getRoleType(); query.setRoleType(roleType); List crmBranchExports = crmBranchService.exportList(query); Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TCrmBranchExport.class, crmBranchExports); HttpServletResponse response = WebUtils.response(); assert response != null; response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); ServletOutputStream outputStream = null; try { String fileName = URLEncoder.encode("分公司管理信息.xls", "utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); outputStream = response.getOutputStream(); workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } @Log(title = "crm分公司管理信息-分公司审核信息导出", businessType = BusinessType.EXPORT) @ApiOperation(value = "分公司审核信息导出") @PostMapping("/exportAuditList") public void exportAuditList(@RequestBody TCrmBranchAuditQuery query){ List crmBranchAuditExports = crmBranchService.exportAuditList(query); Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TCrmBranchAuditExport.class, crmBranchAuditExports); HttpServletResponse response = WebUtils.response(); assert response != null; response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); ServletOutputStream outputStream = null; try { String fileName = URLEncoder.encode("分公司审核信息.xls", "utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); outputStream = response.getOutputStream(); workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 解除绑定 */ @Log(title = "crm分公司管理信息-解除绑定", businessType = BusinessType.UPDATE) @ApiOperation(value = "crm分公司管理信息-解除绑定") @PostMapping(value = "/unbind") public R unbind(@RequestBody UnbindDTO dto) { Long userId = tokenService.getLoginUser().getUserId(); TCrmBranch crmBranch = crmBranchService.getOne(Wrappers.lambdaQuery(TCrmBranch.class) .eq(TCrmBranch::getUserId, userId) .last("LIMIT 1")); if(crmBranch.getPersonType() != 1){ return R.fail("仅负责人可操作解除绑定"); } TCrmBranchLift crmBranchLift = new TCrmBranchLift(); crmBranchLift.setBranchId(dto.getBranchId()); crmBranchLift.setChargePhone(dto.getChargePhone()); crmBranchLift.setLiftReason(dto.getLiftReason()); crmBranchLiftService.save(crmBranchLift); return R.ok(); } /** * 分公司审核 */ @Log(title = "crm分公司管理信息-分公司审核", businessType = BusinessType.UPDATE) @ApiOperation(value = "crm分公司管理信息-分公司审核") @PostMapping(value = "/branchAudit") public R branchAudit(@RequestBody BranchAuditDTO dto) { TCrmBranch crmBranch = crmBranchService.getById(dto.getId()); crmBranch.setAuditStatus(dto.getAuditStatus()); crmBranch.setAuditRemark(dto.getAuditRemark()); crmBranch.setAuditTime(LocalDateTime.now()); crmBranch.setMoneyCommission(dto.getMoneyCommission()); crmBranch.setPointsCommission(dto.getPointsCommission()); crmBranchService.updateById(crmBranch); return R.ok(); } /** * 解绑处理 */ @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED) @Log(title = "crm分公司管理信息-解绑处理", businessType = BusinessType.UPDATE) @ApiOperation(value = "crm分公司管理信息-解绑处理") @PostMapping(value = "/unbindProcessing") public R unbindProcessing(@RequestBody UnbindProcessingDTO dto) { // 查询解绑信息 TCrmBranchLift crmBranchLift = crmBranchLiftService.getById(dto.getId()); if (Objects.isNull(crmBranchLift)){ return R.fail("未查询到该解绑信息"); } crmBranchLift.setStatus(dto.getStatus()); crmBranchLift.setRemarks(dto.getRemarks()); crmBranchLiftService.updateById(crmBranchLift); TCrmBranch crmBranch = crmBranchService.getById(crmBranchLift.getBranchId()); crmBranch.setPhone(crmBranchLift.getChargePhone()); crmBranchService.updateById(crmBranch); // 查询分公司绑定的人员 SysUser sysUser = sysUserService.selectUserById(crmBranch.getUserId()); sysUser.setPhonenumber(crmBranchLift.getChargePhone()); sysUser.setUserName(crmBranchLift.getChargePhone()); sysUserService.updateUser(sysUser); return R.ok(); } /** * 通过分公司上级id查询负责区域 */ @ApiOperation(value = "crm分公司管理信息-通过分公司上级id查询负责区域",notes = "branchId:分公司id") @GetMapping(value = "/getAreaByParentId") public R> getAreaByParentId(@RequestParam String branchId) { List list = crmBranchAreaService.list(Wrappers.lambdaQuery(TCrmBranchArea.class) .eq(TCrmBranchArea::getBranchId, branchId) .eq(TCrmBranchArea::getAreaType, 1)); if(CollectionUtils.isEmpty(list)){ return R.fail("未查询到负责区域"); } List regionList = regionService.list(); // 匹配到省份 Set regions = new HashSet<>(); for (TCrmBranchArea tCrmBranchArea : list) { List parent = regionList.stream().filter(a -> a.getCode().equals(tCrmBranchArea.getProvinceCode())).collect(Collectors.toList()); regions.add(parent.get(0)); } // 匹配市区和区县 for (TRegion region : regions) { List cityCodes = list.stream().filter(a -> a.getProvinceCode().equals(region.getCode())) .map(TCrmBranchArea::getCityCode) .collect(Collectors.toList()); List tRegionList = regionList.stream().filter(a -> a.getParentId().equals(region.getId()) && cityCodes.contains(a.getCode())).collect(Collectors.toList()); for (TRegion child : tRegionList) { List children1 = regionList.stream().filter(a -> a.getParentId().equals(child.getId())).collect(Collectors.toList()); child.setChildren(children1); } region.setChildren(tRegionList); } return R.ok(regions); } }