فهرست منبع

Merge remote-tracking branch 'origin/master'

zyp 1 روز پیش
والد
کامیت
ae08d76f3d
37فایلهای تغییر یافته به همراه2553 افزوده شده و 5 حذف شده
  1. 130 0
      fs-admin/src/main/java/com/fs/company/controller/CompanyDomainBindController.java
  2. 99 0
      fs-admin/src/main/java/com/fs/company/controller/CompanyDomainBindUserController.java
  3. 189 0
      fs-admin/src/main/java/com/fs/company/controller/CompanyDomainController.java
  4. 135 0
      fs-company/src/main/java/com/fs/company/controller/company/CompanyDomainBindController.java
  5. 108 0
      fs-company/src/main/java/com/fs/company/controller/company/CompanyDomainBindUserController.java
  6. 27 0
      fs-service/src/main/java/com/fs/company/domain/CompanyDomain.java
  7. 35 0
      fs-service/src/main/java/com/fs/company/domain/CompanyDomainBind.java
  8. 31 0
      fs-service/src/main/java/com/fs/company/domain/CompanyDomainBindUser.java
  9. 83 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyDomainBindMapper.java
  10. 75 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyDomainBindUserMapper.java
  11. 79 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyDomainMapper.java
  12. 5 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyMapper.java
  13. 11 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyUserMapper.java
  14. 47 0
      fs-service/src/main/java/com/fs/company/param/CompanyDomainBindParam.java
  15. 36 0
      fs-service/src/main/java/com/fs/company/param/CompanyDomainBindUserParam.java
  16. 47 0
      fs-service/src/main/java/com/fs/company/param/CompanyDomainParam.java
  17. 74 0
      fs-service/src/main/java/com/fs/company/service/ICompanyDomainBindService.java
  18. 63 0
      fs-service/src/main/java/com/fs/company/service/ICompanyDomainBindUserService.java
  19. 83 0
      fs-service/src/main/java/com/fs/company/service/ICompanyDomainService.java
  20. 2 0
      fs-service/src/main/java/com/fs/company/service/ICompanyUserService.java
  21. 166 0
      fs-service/src/main/java/com/fs/company/service/impl/CompanyDomainBindServiceImpl.java
  22. 95 0
      fs-service/src/main/java/com/fs/company/service/impl/CompanyDomainBindUserServiceImpl.java
  23. 274 0
      fs-service/src/main/java/com/fs/company/service/impl/CompanyDomainServiceImpl.java
  24. 1 0
      fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java
  25. 5 0
      fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java
  26. 58 0
      fs-service/src/main/java/com/fs/company/vo/CompanyDomainBindUserVo.java
  27. 59 0
      fs-service/src/main/java/com/fs/company/vo/CompanyDomainBindVo.java
  28. 26 0
      fs-service/src/main/java/com/fs/company/vo/CompanyDomainExportTemplateVo.java
  29. 52 0
      fs-service/src/main/java/com/fs/company/vo/CompanyDomainVo.java
  30. 8 0
      fs-service/src/main/java/com/fs/sop/params/QwSopLogsParam.java
  31. 39 5
      fs-service/src/main/java/com/fs/sop/service/impl/QwSopLogsServiceImpl.java
  32. 149 0
      fs-service/src/main/resources/mapper/company/CompanyDomainBindMapper.xml
  33. 105 0
      fs-service/src/main/resources/mapper/company/CompanyDomainBindUserMapper.xml
  34. 125 0
      fs-service/src/main/resources/mapper/company/CompanyDomainMapper.xml
  35. 15 0
      fs-service/src/main/resources/mapper/company/CompanyMapper.xml
  36. 13 0
      fs-service/src/main/resources/mapper/company/CompanyUserMapper.xml
  37. 4 0
      fs-service/src/main/resources/mapper/sop/QwSopLogsMapper.xml

+ 130 - 0
fs-admin/src/main/java/com/fs/company/controller/CompanyDomainBindController.java

@@ -0,0 +1,130 @@
+package com.fs.company.controller;
+
+import java.util.List;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.api.R;
+import com.fs.common.core.domain.model.LoginUser;
+import com.fs.common.utils.ServletUtils;
+import com.fs.company.param.CompanyDomainBindParam;
+import com.fs.company.vo.CompanyDomainBindVo;
+import com.fs.framework.web.service.TokenService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.enums.BusinessType;
+import com.fs.company.domain.CompanyDomainBind;
+import com.fs.company.service.ICompanyDomainBindService;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.common.core.page.TableDataInfo;
+
+/**
+ * 域名绑定销售公司Controller
+ * 
+ * @author fs
+ * @date 2025-06-17
+ */
+@RestController
+@RequestMapping("/company/companyDomainBind")
+public class CompanyDomainBindController extends BaseController
+{
+    @Autowired
+    private TokenService tokenService;
+    @Autowired
+    private ICompanyDomainBindService companyDomainBindService;
+
+    /**
+     * 查询域名绑定销售公司列表
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomainBind:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(CompanyDomainBindParam companyDomainBind)
+    {
+        startPage();
+        List<CompanyDomainBindVo> list = companyDomainBindService.selectCompanyDomainBindList(companyDomainBind);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出域名绑定销售公司列表
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomainBind:export')")
+    @Log(title = "域名绑定销售公司", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(CompanyDomainBindParam companyDomainBind)
+    {
+        List<CompanyDomainBindVo> list = companyDomainBindService.selectCompanyDomainBindList(companyDomainBind);
+        ExcelUtil<CompanyDomainBindVo> util = new ExcelUtil<CompanyDomainBindVo>(CompanyDomainBindVo.class);
+        return util.exportExcel(list, "域名绑定销售公司数据");
+    }
+
+    /**
+     * 获取域名绑定销售公司详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomainBind:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(companyDomainBindService.selectCompanyDomainBindById(id));
+    }
+
+    /**
+     * 新增域名绑定销售公司
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomainBind:add')")
+    @Log(title = "域名绑定销售公司", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody CompanyDomainBind companyDomainBind)
+    {
+        return toAjax(companyDomainBindService.insertCompanyDomainBind(companyDomainBind));
+    }
+
+    /**
+     * 修改域名绑定销售公司
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomainBind:edit')")
+    @Log(title = "域名绑定销售公司", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody CompanyDomainBind companyDomainBind)
+    {
+        return toAjax(companyDomainBindService.updateCompanyDomainBind(companyDomainBind));
+    }
+
+    /**
+     * 删除域名绑定销售公司
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomainBind:remove')")
+    @Log(title = "域名绑定销售公司", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(companyDomainBindService.deleteCompanyDomainBindByIds(ids));
+    }
+
+    /**
+     * 域名批量绑定
+     **/
+    @PreAuthorize("@ss.hasPermi('company:companyDomain:domainBatchBinding')")
+    @PostMapping("/domainBatchBinding")
+    public R domainBatchBinding(@RequestBody CompanyDomainBindParam param) {
+        if (ObjectUtil.isEmpty(param.getCompanyIds()) || param.getCompanyIds().isEmpty()) {
+            return R.failed("绑定失败,至少有一条域名分配信息!");
+        }
+        if (ObjectUtil.isEmpty(param.getCompanyUserIds()) || param.getCompanyUserIds().isEmpty()) {
+            return R.failed("绑定失败,至少有一条分配人员信息!");
+        }
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        param.setUserId(loginUser.getUser().getUserId().toString());
+        return companyDomainBindService.domainBatchBinding(param);
+    }
+}

+ 99 - 0
fs-admin/src/main/java/com/fs/company/controller/CompanyDomainBindUserController.java

@@ -0,0 +1,99 @@
+package com.fs.company.controller;
+
+import java.util.List;
+
+import com.fs.company.param.CompanyDomainBindUserParam;
+import com.fs.company.vo.CompanyDomainBindUserVo;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.enums.BusinessType;
+import com.fs.company.domain.CompanyDomainBindUser;
+import com.fs.company.service.ICompanyDomainBindUserService;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.common.core.page.TableDataInfo;
+
+/**
+ * 企业域名分配中间表Controller
+ *
+ * @author fs
+ * @date 2025-06-19
+ */
+@RestController
+@RequestMapping("/company/companyBindUser")
+public class CompanyDomainBindUserController extends BaseController {
+    @Autowired
+    private ICompanyDomainBindUserService companyDomainBindUserService;
+
+    /**
+     * 查询企业域名分配中间表列表
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyBindUser:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(CompanyDomainBindUserParam companyDomainBindUser) {
+        startPage();
+        List<CompanyDomainBindUserVo> list = companyDomainBindUserService.selectCompanyDomainBindUserList(companyDomainBindUser);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出企业域名分配中间表列表
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyBindUser:export')")
+    @Log(title = "企业域名分配中间表", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(CompanyDomainBindUserParam companyDomainBindUser) {
+        List<CompanyDomainBindUserVo> list = companyDomainBindUserService.selectCompanyDomainBindUserList(companyDomainBindUser);
+        ExcelUtil<CompanyDomainBindUserVo> util = new ExcelUtil<CompanyDomainBindUserVo>(CompanyDomainBindUserVo.class);
+        return util.exportExcel(list, "企业域名分配中间表数据");
+    }
+
+    /**
+     * 获取企业域名分配中间表详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyBindUser:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return AjaxResult.success(companyDomainBindUserService.selectCompanyDomainBindUserById(id));
+    }
+
+    /**
+     * 新增企业域名分配中间表
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyBindUser:add')")
+    @Log(title = "企业域名分配中间表", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody CompanyDomainBindUser companyDomainBindUser) {
+        return toAjax(companyDomainBindUserService.insertCompanyDomainBindUser(companyDomainBindUser));
+    }
+
+    /**
+     * 修改企业域名分配中间表
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyBindUser:edit')")
+    @Log(title = "企业域名分配中间表", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody CompanyDomainBindUser companyDomainBindUser) {
+        return toAjax(companyDomainBindUserService.updateCompanyDomainBindUser(companyDomainBindUser));
+    }
+
+    /**
+     * 删除企业域名分配中间表
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyBindUser:remove')")
+    @Log(title = "企业域名分配中间表", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(companyDomainBindUserService.deleteCompanyDomainBindUserByIds(ids));
+    }
+}

+ 189 - 0
fs-admin/src/main/java/com/fs/company/controller/CompanyDomainController.java

@@ -0,0 +1,189 @@
+package com.fs.company.controller;
+
+import java.util.List;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.api.R;
+import com.fs.common.core.domain.model.LoginUser;
+import com.fs.common.exception.ServiceException;
+import com.fs.common.utils.ServletUtils;
+import com.fs.company.param.CompanyDomainParam;
+import com.fs.company.vo.CompanyDomainExportTemplateVo;
+import com.fs.company.vo.CompanyDomainVo;
+import com.fs.framework.web.service.TokenService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.enums.BusinessType;
+import com.fs.company.domain.CompanyDomain;
+import com.fs.company.service.ICompanyDomainService;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.common.core.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 域名管路Controller
+ *
+ * @author fs
+ * @date 2025-06-16
+ */
+@RestController
+@RequestMapping("/company/companyDomain")
+public class CompanyDomainController extends BaseController {
+    @Autowired
+    private TokenService tokenService;
+    @Autowired
+    private ICompanyDomainService companyDomainService;
+
+    // 允许的文件扩展名
+    private static final String[] ALLOWED_EXCEL_EXTENSIONS = {".xlsx", ".xls"};
+    // 最大文件大小(5MB)
+    private static final long MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB
+
+    /**
+     * 查询域名管路列表
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomain:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(CompanyDomainParam companyDomain) {
+        startPage();
+        List<CompanyDomainVo> list = companyDomainService.selectCompanyDomainList(companyDomain);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出域名管路列表
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomain:export')")
+    @Log(title = "域名管理", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(CompanyDomainParam companyDomain) {
+        List<CompanyDomainVo> list = companyDomainService.selectCompanyDomainList(companyDomain);
+        ExcelUtil<CompanyDomainVo> util = new ExcelUtil<CompanyDomainVo>(CompanyDomainVo.class);
+        return util.exportExcel(list, "域名管路数据");
+    }
+
+    /**
+     * 获取域名管路详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomain:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return AjaxResult.success(companyDomainService.selectCompanyDomainById(id));
+    }
+
+    /**
+     * 新增域名管路
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomain:add')")
+    @Log(title = "域名管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody CompanyDomain companyDomain) {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        companyDomain.setCreateBy(loginUser.getUser().getUserId().toString());
+        return toAjax(companyDomainService.insertCompanyDomain(companyDomain));
+    }
+
+    /**
+     * 修改域名管路
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomain:edit')")
+    @Log(title = "域名管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody CompanyDomain companyDomain) {
+        if (ObjectUtil.isEmpty(companyDomain.getId())) {
+            throw new ServiceException("修改关键信息不能为空!");
+        }
+        return toAjax(companyDomainService.updateCompanyDomain(companyDomain));
+    }
+
+    /**
+     * 删除域名管路
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomain:remove')")
+    @Log(title = "域名管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        if (ObjectUtil.isEmpty(ids)) {
+            throw new ServiceException("删除关键信息不能为空!");
+        }
+        return toAjax(companyDomainService.deleteCompanyDomainByIds(ids));
+    }
+
+    /**
+     * 域名批量绑定
+     **/
+    @PreAuthorize("@ss.hasPermi('company:companyDomain:domainBatchBinding')")
+    @PostMapping("/domainBatchBinding")
+    public R domainBatchBinding(@RequestBody CompanyDomainParam param) {
+        if (ObjectUtil.isEmpty(param.getDomainIds()) || param.getDomainIds().isEmpty()) {
+            return R.failed("绑定失败,至少有一条绑定域名信息!");
+        }
+        if (ObjectUtil.isEmpty(param.getCompanyIds()) || param.getCompanyIds().isEmpty()) {
+            return R.failed("绑定失败,至少有一条绑定公司信息!");
+        }
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        param.setUserId(loginUser.getUser().getUserId().toString());
+        return companyDomainService.domainBatchBinding(param);
+    }
+
+    /**
+     * 导出模板
+     **/
+    @GetMapping("/exportTemplate")
+    public AjaxResult exportTemplate() {
+        ExcelUtil<CompanyDomainExportTemplateVo> util = new ExcelUtil<>(CompanyDomainExportTemplateVo.class);
+        return util.importTemplateExcel("域名导入模板");
+    }
+
+    @Log(title = "域名导入", businessType = BusinessType.IMPORT)
+    @PostMapping("/importDomainData")
+    public R importDomainData(MultipartFile file) {
+        // 1. 检查文件是否为空
+        if (file.isEmpty()) {
+            return R.failed("上传的文件不能为空");
+        }
+
+        // 2. 检查文件大小
+        if (file.getSize() > MAX_FILE_SIZE) {
+            return R.failed("文件大小不能超过5MB");
+        }
+
+        // 3. 检查文件扩展名
+        String fileName = file.getOriginalFilename();
+        if (fileName == null || !isValidExcelFile(fileName)) {
+            return R.failed("请上传Excel文件(.xlsx或.xls格式)");
+        }
+        CompanyDomainParam param = new CompanyDomainParam();
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        param.setUserId(loginUser.getUser().getUserId().toString());
+        ExcelUtil<CompanyDomainExportTemplateVo> util = new ExcelUtil<>(CompanyDomainExportTemplateVo.class);
+        try {
+            List<CompanyDomainExportTemplateVo> companyDomainList = util.importExcel(file.getInputStream());
+            return companyDomainService.importDomainData(param, companyDomainList);
+        } catch (Exception e) {
+            e.getStackTrace();
+            return R.failed("导入失败!");
+        }
+    }
+
+    // 检查文件是否为有效的Excel文件
+    private boolean isValidExcelFile(String fileName) {
+        for (String ext : ALLOWED_EXCEL_EXTENSIONS) {
+            if (fileName.toLowerCase().endsWith(ext)) {
+                return true;
+            }
+        }
+        return false;
+    }
+}

+ 135 - 0
fs-company/src/main/java/com/fs/company/controller/company/CompanyDomainBindController.java

@@ -0,0 +1,135 @@
+package com.fs.company.controller.company;
+
+import java.util.List;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.api.R;
+import com.fs.common.utils.ServletUtils;
+import com.fs.company.param.CompanyDomainBindParam;
+import com.fs.company.vo.CompanyDomainBindVo;
+import com.fs.framework.security.LoginUser;
+import com.fs.framework.service.TokenService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.enums.BusinessType;
+import com.fs.company.domain.CompanyDomainBind;
+import com.fs.company.service.ICompanyDomainBindService;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.common.core.page.TableDataInfo;
+
+/**
+ * 域名绑定销售公司Controller
+ * 
+ * @author fs
+ * @date 2025-06-17
+ */
+@RestController
+@RequestMapping("/company/companyDomainBind")
+public class CompanyDomainBindController extends BaseController
+{
+    @Autowired
+    private TokenService tokenService;
+    @Autowired
+    private ICompanyDomainBindService companyDomainBindService;
+
+    /**
+     * 查询域名绑定销售公司列表
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomainBind:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(CompanyDomainBindParam companyDomainBind)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        companyDomainBind.setCompanyId(loginUser.getUser().getCompanyId());
+        startPage();
+        List<CompanyDomainBindVo> list = companyDomainBindService.selectCompanyDomainBindList(companyDomainBind);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出域名绑定销售公司列表
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomainBind:export')")
+    @Log(title = "域名绑定销售公司", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(CompanyDomainBindParam companyDomainBind)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        companyDomainBind.setCompanyId(loginUser.getUser().getCompanyId());
+        List<CompanyDomainBindVo> list = companyDomainBindService.selectCompanyDomainBindList(companyDomainBind);
+        ExcelUtil<CompanyDomainBindVo> util = new ExcelUtil<CompanyDomainBindVo>(CompanyDomainBindVo.class);
+        return util.exportExcel(list, "域名绑定销售公司数据");
+    }
+
+    /**
+     * 获取域名绑定销售公司详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomainBind:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(companyDomainBindService.selectCompanyDomainBindById(id));
+    }
+
+    /**
+     * 新增域名绑定销售公司
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomainBind:add')")
+    @Log(title = "域名绑定销售公司", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody CompanyDomainBind companyDomainBind)
+    {
+        return toAjax(companyDomainBindService.insertCompanyDomainBind(companyDomainBind));
+    }
+
+    /**
+     * 修改域名绑定销售公司
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomainBind:edit')")
+    @Log(title = "域名绑定销售公司", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody CompanyDomainBind companyDomainBind)
+    {
+        return toAjax(companyDomainBindService.updateCompanyDomainBind(companyDomainBind));
+    }
+
+    /**
+     * 删除域名绑定销售公司
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyDomainBind:remove')")
+    @Log(title = "域名绑定销售公司", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(companyDomainBindService.deleteCompanyDomainBindByIds(ids));
+    }
+
+    /**
+     * 域名批量绑定
+     **/
+    @PreAuthorize("@ss.hasPermi('company:companyDomain:domainBatchBinding')")
+    @PostMapping("/domainBatchBinding")
+    public R domainBatchBinding(@RequestBody CompanyDomainBindParam param) {
+        if (ObjectUtil.isEmpty(param.getCompanyIds()) || param.getCompanyIds().isEmpty()) {
+            return R.failed("绑定失败,至少有一条域名分配信息!");
+        }
+        if (ObjectUtil.isEmpty(param.getCompanyUserIds()) || param.getCompanyUserIds().isEmpty()) {
+            return R.failed("绑定失败,至少有一条分配人员信息!");
+        }
+
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        param.setUserId(loginUser.getUser().getUserId().toString());
+        return companyDomainBindService.domainBatchBinding(param);
+    }
+}

+ 108 - 0
fs-company/src/main/java/com/fs/company/controller/company/CompanyDomainBindUserController.java

@@ -0,0 +1,108 @@
+package com.fs.company.controller.company;
+
+import java.util.List;
+
+import com.fs.common.utils.ServletUtils;
+import com.fs.company.param.CompanyDomainBindUserParam;
+import com.fs.company.vo.CompanyDomainBindUserVo;
+import com.fs.framework.security.LoginUser;
+import com.fs.framework.service.TokenService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.enums.BusinessType;
+import com.fs.company.domain.CompanyDomainBindUser;
+import com.fs.company.service.ICompanyDomainBindUserService;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.common.core.page.TableDataInfo;
+
+/**
+ * 企业域名分配中间表Controller
+ *
+ * @author fs
+ * @date 2025-06-19
+ */
+@RestController
+@RequestMapping("/company/companyBindUser")
+public class CompanyDomainBindUserController extends BaseController {
+    @Autowired
+    private TokenService tokenService;
+    @Autowired
+    private ICompanyDomainBindUserService companyDomainBindUserService;
+
+    /**
+     * 查询企业域名分配中间表列表
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyBindUser:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(CompanyDomainBindUserParam companyDomainBindUser) {
+        startPage();
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        companyDomainBindUser.setCompanyId(loginUser.getUser().getCompanyId());
+        List<CompanyDomainBindUserVo> list = companyDomainBindUserService.selectCompanyDomainBindUserList(companyDomainBindUser);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出企业域名分配中间表列表
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyBindUser:export')")
+    @Log(title = "企业域名分配中间表", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(CompanyDomainBindUserParam companyDomainBindUser) {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        companyDomainBindUser.setCompanyId(loginUser.getUser().getCompanyId());
+        List<CompanyDomainBindUserVo> list = companyDomainBindUserService.selectCompanyDomainBindUserList(companyDomainBindUser);
+        ExcelUtil<CompanyDomainBindUserVo> util = new ExcelUtil<CompanyDomainBindUserVo>(CompanyDomainBindUserVo.class);
+        return util.exportExcel(list, "企业域名分配中间表数据");
+    }
+
+    /**
+     * 获取企业域名分配中间表详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyBindUser:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return AjaxResult.success(companyDomainBindUserService.selectCompanyDomainBindUserById(id));
+    }
+
+    /**
+     * 新增企业域名分配中间表
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyBindUser:add')")
+    @Log(title = "企业域名分配中间表", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody CompanyDomainBindUser companyDomainBindUser) {
+        return toAjax(companyDomainBindUserService.insertCompanyDomainBindUser(companyDomainBindUser));
+    }
+
+    /**
+     * 修改企业域名分配中间表
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyBindUser:edit')")
+    @Log(title = "企业域名分配中间表", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody CompanyDomainBindUser companyDomainBindUser) {
+        return toAjax(companyDomainBindUserService.updateCompanyDomainBindUser(companyDomainBindUser));
+    }
+
+    /**
+     * 删除企业域名分配中间表
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyBindUser:remove')")
+    @Log(title = "企业域名分配中间表", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(companyDomainBindUserService.deleteCompanyDomainBindUserByIds(ids));
+    }
+}

+ 27 - 0
fs-service/src/main/java/com/fs/company/domain/CompanyDomain.java

@@ -0,0 +1,27 @@
+package com.fs.company.domain;
+
+import lombok.Data;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 域名管路对象 company_domain
+ *
+ * @author fs
+ * @date 2025-06-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CompanyDomain extends BaseEntity{
+
+    /** 域名id */
+    private Long id;
+
+    /** 域名 */
+    private String domain;
+
+    /** 状态(1未启用、2启用) */
+    private Long status;
+
+
+}

+ 35 - 0
fs-service/src/main/java/com/fs/company/domain/CompanyDomainBind.java

@@ -0,0 +1,35 @@
+package com.fs.company.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 域名绑定销售公司对象 company_domain_bind
+ *
+ * @author fs
+ * @date 2025-06-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CompanyDomainBind extends BaseEntity{
+
+    /** 域名绑定中间表 */
+    private Long id;
+
+    /** 销售公司ID */
+    @Excel(name = "销售公司ID")
+    private Long companyId;
+
+    /** 绑定域名ID */
+    @Excel(name = "绑定域名ID")
+    private Long domainId;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    private Long status;
+
+
+}

+ 31 - 0
fs-service/src/main/java/com/fs/company/domain/CompanyDomainBindUser.java

@@ -0,0 +1,31 @@
+package com.fs.company.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 企业域名分配中间表对象 company_domain_bind_user
+ *
+ * @author fs
+ * @date 2025-06-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CompanyDomainBindUser extends BaseEntity{
+
+    /** 中间表id */
+    private Long id;
+
+    /** 企业销售id */
+    @Excel(name = "企业销售id")
+    private Long companyUserId;
+
+    /** 中间表id */
+    @Excel(name = "中间表id")
+    private Long bindId;
+
+
+}

+ 83 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyDomainBindMapper.java

@@ -0,0 +1,83 @@
+package com.fs.company.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.company.domain.CompanyDomainBind;
+import com.fs.company.param.CompanyDomainBindParam;
+import com.fs.company.vo.CompanyDomainBindVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 域名绑定销售公司Mapper接口
+ * 
+ * @author fs
+ * @date 2025-06-17
+ */
+public interface CompanyDomainBindMapper extends BaseMapper<CompanyDomainBind>{
+    /**
+     * 查询域名绑定销售公司
+     * 
+     * @param id 域名绑定销售公司主键
+     * @return 域名绑定销售公司
+     */
+    CompanyDomainBind selectCompanyDomainBindById(Long id);
+
+    /**
+     * 查询域名绑定销售公司列表
+     * 
+     * @param companyDomainBind 域名绑定销售公司
+     * @return 域名绑定销售公司集合
+     */
+    List<CompanyDomainBind> selectCompanyDomainBindList(CompanyDomainBindParam companyDomainBind);
+
+    /**
+     * 新增域名绑定销售公司
+     * 
+     * @param companyDomainBind 域名绑定销售公司
+     * @return 结果
+     */
+    int insertCompanyDomainBind(CompanyDomainBind companyDomainBind);
+
+    /**
+     * 修改域名绑定销售公司
+     * 
+     * @param companyDomainBind 域名绑定销售公司
+     * @return 结果
+     */
+    int updateCompanyDomainBind(CompanyDomainBind companyDomainBind);
+
+    /**
+     * 删除域名绑定销售公司
+     * 
+     * @param id 域名绑定销售公司主键
+     * @return 结果
+     */
+    int deleteCompanyDomainBindById(Long id);
+
+    /**
+     * 批量删除域名绑定销售公司
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteCompanyDomainBindByIds(Long[] ids);
+
+    /**
+     * 批量插入绑定数据
+     * @param bindList 数据集合
+     * **/
+    void batchInsertBindInfo(@Param("bindList") List<CompanyDomainBind> bindList);
+
+    /**
+     * 批量删除域名绑定销售公司
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteCompanyDomainBindBydomainIds(Long[] ids);
+
+    /**
+     * 查询中间表链接信息
+     * **/
+    List<CompanyDomainBindVo> selectJoinBindInfo(CompanyDomainBindParam companyDomainBind);
+}

+ 75 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyDomainBindUserMapper.java

@@ -0,0 +1,75 @@
+package com.fs.company.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.company.domain.CompanyDomainBindUser;
+import com.fs.company.param.CompanyDomainBindUserParam;
+import com.fs.company.vo.CompanyDomainBindUserVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 企业域名分配中间表Mapper接口
+ * 
+ * @author fs
+ * @date 2025-06-19
+ */
+public interface CompanyDomainBindUserMapper extends BaseMapper<CompanyDomainBindUser>{
+    /**
+     * 查询企业域名分配中间表
+     * 
+     * @param id 企业域名分配中间表主键
+     * @return 企业域名分配中间表
+     */
+    CompanyDomainBindUser selectCompanyDomainBindUserById(Long id);
+
+    /**
+     * 查询企业域名分配中间表列表
+     * 
+     * @param companyDomainBindUser 企业域名分配中间表
+     * @return 企业域名分配中间表集合
+     */
+    List<CompanyDomainBindUserVo> selectCompanyDomainBindUserList(CompanyDomainBindUserParam companyDomainBindUser);
+
+    /**
+     * 新增企业域名分配中间表
+     * 
+     * @param companyDomainBindUser 企业域名分配中间表
+     * @return 结果
+     */
+    int insertCompanyDomainBindUser(CompanyDomainBindUser companyDomainBindUser);
+
+    /**
+     * 修改企业域名分配中间表
+     * 
+     * @param companyDomainBindUser 企业域名分配中间表
+     * @return 结果
+     */
+    int updateCompanyDomainBindUser(CompanyDomainBindUser companyDomainBindUser);
+
+    /**
+     * 删除企业域名分配中间表
+     * 
+     * @param id 企业域名分配中间表主键
+     * @return 结果
+     */
+    int deleteCompanyDomainBindUserById(Long id);
+
+    /**
+     * 批量删除企业域名分配中间表
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteCompanyDomainBindUserByIds(Long[] ids);
+
+    /**
+     * 批量插入
+     * @param bindUserList 插入对象
+     * **/
+    void batchInsertBindUserInfo(@Param("bindUserList") List<CompanyDomainBindUser> bindUserList);
+
+    /**
+     * 批量查询用户分配域名中间表接口
+     * **/
+    List<CompanyDomainBindUserVo> selectDoaminBindUserJoinInfo(CompanyDomainBindUserParam companyDomainBindUser);
+}

+ 79 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyDomainMapper.java

@@ -0,0 +1,79 @@
+package com.fs.company.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.company.domain.CompanyDomain;
+import com.fs.company.param.CompanyDomainParam;
+import com.fs.company.vo.CompanyDomainVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 域名管路Mapper接口
+ *
+ * @author fs
+ * @date 2025-06-16
+ */
+public interface CompanyDomainMapper extends BaseMapper<CompanyDomain> {
+    /**
+     * 查询域名管路
+     *
+     * @param id 域名管路主键
+     * @return 域名管路
+     */
+    CompanyDomain selectCompanyDomainById(Long id);
+
+    /**
+     * 查询域名管路列表
+     *
+     * @param companyDomain 域名管路
+     * @return 域名管路集合
+     */
+    List<CompanyDomainVo> selectCompanyDomainList(CompanyDomainParam companyDomain);
+
+    /**
+     * 新增域名管路
+     *
+     * @param companyDomain 域名管路
+     * @return 结果
+     */
+    int insertCompanyDomain(CompanyDomain companyDomain);
+
+    /**
+     * 修改域名管路
+     *
+     * @param companyDomain 域名管路
+     * @return 结果
+     */
+    int updateCompanyDomain(CompanyDomain companyDomain);
+
+    /**
+     * 删除域名管路
+     *
+     * @param id 域名管路主键
+     * @return 结果
+     */
+    int deleteCompanyDomainById(Long id);
+
+    /**
+     * 批量删除域名管路
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteCompanyDomainByIds(Long[] ids);
+
+    /**
+     * 获取路由链接列表数量查询接口
+     *
+     * @param companyDomain 参数
+     * @return 结果
+     **/
+    List<CompanyDomainVo> selectCompanyDomainJoinInfo(CompanyDomainParam companyDomain);
+
+    /**
+     * 批量插入
+     * @param list 插入数据
+     * **/
+    void batchDomainInfo(@Param("list") List<CompanyDomain> list);
+}

+ 5 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyMapper.java

@@ -169,4 +169,9 @@ public interface CompanyMapper
 
     @Select("select company_id from company")
     List<Long> selectCompanyIds();
+
+    /**
+     * 通过企业id批量查询
+     * **/
+    List<Company> selectCompanyByIds(@Param("ids") List<Long> ids);
 }

+ 11 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyUserMapper.java

@@ -1,5 +1,7 @@
 package com.fs.company.mapper;
 
+import com.fs.common.annotation.DataSource;
+import com.fs.common.enums.DataSourceType;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.param.CompanyUserAreaParam;
 import com.fs.company.param.CompanyUserQwParam;
@@ -252,4 +254,13 @@ public interface CompanyUserMapper
     int setIsRegisterMember(@Param("status") boolean status, @Param("userIds")List<Long> userIds);
 
     void auditUsers(@Param("userIds") List<Long> userIds);
+
+    /**
+     * 获取企业用户信息
+     * @param ids 数组
+     * @return 结果
+     * **/
+    List<CompanyUser> getUserInfoByUserIds(@Param("ids") List<Long> ids);
+    @DataSource(DataSourceType.MASTER)
+    CompanyUser selectCompanyUserByPhone(String phone);
 }

+ 47 - 0
fs-service/src/main/java/com/fs/company/param/CompanyDomainBindParam.java

@@ -0,0 +1,47 @@
+package com.fs.company.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 绑定域名管理中间表接收
+ **/
+@Data
+public class CompanyDomainBindParam implements Serializable {
+    /**
+     * 企业名称
+     * **/
+    private String companyName;
+
+    /**
+     * 域名
+     * **/
+    private String domain;
+
+    /**
+     * 绑定域名ID
+     * **/
+    private Long domainId;
+
+    /**
+     * 公司ID
+     * **/
+    private Long companyId;
+
+    /**
+     * 企业Id数组
+     **/
+    private List<Long> companyIds;
+
+    /**
+     * 企业用户ids
+     * **/
+    private List<Long> companyUserIds;
+
+    /**
+     * 用户id
+     * **/
+    private String userId;
+}

+ 36 - 0
fs-service/src/main/java/com/fs/company/param/CompanyDomainBindUserParam.java

@@ -0,0 +1,36 @@
+package com.fs.company.param;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class CompanyDomainBindUserParam implements Serializable {
+    /** 中间表id */
+    private Long id;
+
+    /** 企业销售id */
+    private Long companyUserId;
+
+    /** 中间表id */
+    private Long bindId;
+
+    /**
+     * 分配域名
+     **/
+    private String domain;
+
+    /**
+     * 分配人员
+     **/
+    private String userName;
+
+    /**
+     * 分配人员手机号
+     **/
+    private String phonenumber;
+
+    /**
+     * 企业ID
+     * **/
+    private Long companyId;
+}

+ 47 - 0
fs-service/src/main/java/com/fs/company/param/CompanyDomainParam.java

@@ -0,0 +1,47 @@
+package com.fs.company.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 域名管理接收
+ **/
+@Data
+public class CompanyDomainParam implements Serializable {
+    /**
+     * 域名id
+     */
+    private Long id;
+
+    /**
+     * 域名
+     */
+    private String domain;
+
+    /**
+     * 状态(1未启用、2启用)
+     */
+    private Long status;
+
+    /**
+     * 域名ID数组
+     **/
+    private List<Long> domainIds;
+
+    /**
+     * 企业Id数组
+     **/
+    private List<Long> companyIds;
+
+    /**
+     * 用户ID
+     * **/
+    private String userId;
+
+    /**
+     * 参数ids
+     * **/
+    private Long[] ids;
+}

+ 74 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyDomainBindService.java

@@ -0,0 +1,74 @@
+package com.fs.company.service;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.api.R;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.company.domain.CompanyDomainBind;
+import com.fs.company.param.CompanyDomainBindParam;
+import com.fs.company.vo.CompanyDomainBindVo;
+
+/**
+ * 域名绑定销售公司Service接口
+ * 
+ * @author fs
+ * @date 2025-06-17
+ */
+public interface ICompanyDomainBindService extends IService<CompanyDomainBind>{
+    /**
+     * 查询域名绑定销售公司
+     * 
+     * @param id 域名绑定销售公司主键
+     * @return 域名绑定销售公司
+     */
+    CompanyDomainBind selectCompanyDomainBindById(Long id);
+
+    /**
+     * 查询域名绑定销售公司列表
+     * 
+     * @param companyDomainBind 域名绑定销售公司
+     * @return 域名绑定销售公司集合
+     */
+    List<CompanyDomainBindVo> selectCompanyDomainBindList(CompanyDomainBindParam companyDomainBind);
+
+    /**
+     * 新增域名绑定销售公司
+     * 
+     * @param companyDomainBind 域名绑定销售公司
+     * @return 结果
+     */
+    int insertCompanyDomainBind(CompanyDomainBind companyDomainBind);
+
+    /**
+     * 修改域名绑定销售公司
+     * 
+     * @param companyDomainBind 域名绑定销售公司
+     * @return 结果
+     */
+    int updateCompanyDomainBind(CompanyDomainBind companyDomainBind);
+
+    /**
+     * 批量删除域名绑定销售公司
+     * 
+     * @param ids 需要删除的域名绑定销售公司主键集合
+     * @return 结果
+     */
+    int deleteCompanyDomainBindByIds(Long[] ids);
+
+    /**
+     * 删除域名绑定销售公司信息
+     * 
+     * @param id 域名绑定销售公司主键
+     * @return 结果
+     */
+    int deleteCompanyDomainBindById(Long id);
+
+
+    /**
+     * 域名批量绑定接口
+     *
+     * @param param 接收参数
+     * @return R
+     **/
+    R domainBatchBinding(CompanyDomainBindParam param);
+}

+ 63 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyDomainBindUserService.java

@@ -0,0 +1,63 @@
+package com.fs.company.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.company.domain.CompanyDomainBindUser;
+import com.fs.company.param.CompanyDomainBindUserParam;
+import com.fs.company.vo.CompanyDomainBindUserVo;
+
+/**
+ * 企业域名分配中间表Service接口
+ * 
+ * @author fs
+ * @date 2025-06-19
+ */
+public interface ICompanyDomainBindUserService extends IService<CompanyDomainBindUser>{
+    /**
+     * 查询企业域名分配中间表
+     * 
+     * @param id 企业域名分配中间表主键
+     * @return 企业域名分配中间表
+     */
+    CompanyDomainBindUser selectCompanyDomainBindUserById(Long id);
+
+    /**
+     * 查询企业域名分配中间表列表
+     * 
+     * @param companyDomainBindUser 企业域名分配中间表
+     * @return 企业域名分配中间表集合
+     */
+    List<CompanyDomainBindUserVo> selectCompanyDomainBindUserList(CompanyDomainBindUserParam companyDomainBindUser);
+
+    /**
+     * 新增企业域名分配中间表
+     * 
+     * @param companyDomainBindUser 企业域名分配中间表
+     * @return 结果
+     */
+    int insertCompanyDomainBindUser(CompanyDomainBindUser companyDomainBindUser);
+
+    /**
+     * 修改企业域名分配中间表
+     * 
+     * @param companyDomainBindUser 企业域名分配中间表
+     * @return 结果
+     */
+    int updateCompanyDomainBindUser(CompanyDomainBindUser companyDomainBindUser);
+
+    /**
+     * 批量删除企业域名分配中间表
+     * 
+     * @param ids 需要删除的企业域名分配中间表主键集合
+     * @return 结果
+     */
+    int deleteCompanyDomainBindUserByIds(Long[] ids);
+
+    /**
+     * 删除企业域名分配中间表信息
+     * 
+     * @param id 企业域名分配中间表主键
+     * @return 结果
+     */
+    int deleteCompanyDomainBindUserById(Long id);
+}

+ 83 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyDomainService.java

@@ -0,0 +1,83 @@
+package com.fs.company.service;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.api.R;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.company.domain.CompanyDomain;
+import com.fs.company.param.CompanyDomainParam;
+import com.fs.company.vo.CompanyDomainExportTemplateVo;
+import com.fs.company.vo.CompanyDomainVo;
+
+/**
+ * 域名管路Service接口
+ *
+ * @author fs
+ * @date 2025-06-16
+ */
+public interface ICompanyDomainService extends IService<CompanyDomain> {
+    /**
+     * 查询域名管路
+     *
+     * @param id 域名管路主键
+     * @return 域名管路
+     */
+    CompanyDomain selectCompanyDomainById(Long id);
+
+    /**
+     * 查询域名管路列表
+     *
+     * @param companyDomain 域名管路
+     * @return 域名管路集合
+     */
+    List<CompanyDomainVo> selectCompanyDomainList(CompanyDomainParam companyDomain);
+
+    /**
+     * 新增域名管路
+     *
+     * @param companyDomain 域名管路
+     * @return 结果
+     */
+    int insertCompanyDomain(CompanyDomain companyDomain);
+
+    /**
+     * 修改域名管路
+     *
+     * @param companyDomain 域名管路
+     * @return 结果
+     */
+    int updateCompanyDomain(CompanyDomain companyDomain);
+
+    /**
+     * 批量删除域名管路
+     *
+     * @param ids 需要删除的域名管路主键集合
+     * @return 结果
+     */
+    int deleteCompanyDomainByIds(Long[] ids);
+
+    /**
+     * 删除域名管路信息
+     *
+     * @param id 域名管路主键
+     * @return 结果
+     */
+    int deleteCompanyDomainById(Long id);
+
+    /**
+     * 域名批量绑定接口
+     *
+     * @param param 接收参数
+     * @return R
+     **/
+    R domainBatchBinding(CompanyDomainParam param);
+
+    /**
+     * 域名批量导入
+     *
+     * @param param      参数
+     * @param domainList 解析数组
+     * @return R
+     **/
+    R importDomainData(CompanyDomainParam param, List<CompanyDomainExportTemplateVo> domainList);
+}

+ 2 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyUserService.java

@@ -193,4 +193,6 @@ public interface ICompanyUserService {
     Boolean setIsRegisterMember(boolean status,  List<Long> userIds);
 
     void auditUsers(List<Long> userIds);
+
+    CompanyUser selectCompanyUserByPhone(String phone);
 }

+ 166 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyDomainBindServiceImpl.java

@@ -0,0 +1,166 @@
+package com.fs.company.service.impl;
+
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.api.R;
+import com.fs.common.utils.DateUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.company.domain.CompanyDomainBindUser;
+import com.fs.company.domain.CompanyUser;
+import com.fs.company.mapper.CompanyDomainBindUserMapper;
+import com.fs.company.mapper.CompanyUserMapper;
+import com.fs.company.param.CompanyDomainBindParam;
+import com.fs.company.vo.CompanyDomainBindVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.fs.company.mapper.CompanyDomainBindMapper;
+import com.fs.company.domain.CompanyDomainBind;
+import com.fs.company.service.ICompanyDomainBindService;
+
+/**
+ * 域名绑定销售公司Service业务层处理
+ *
+ * @author fs
+ * @date 2025-06-17
+ */
+@Service
+public class CompanyDomainBindServiceImpl extends ServiceImpl<CompanyDomainBindMapper, CompanyDomainBind> implements ICompanyDomainBindService {
+    @Autowired
+    private CompanyDomainBindMapper baseMapper;
+    @Autowired
+    private CompanyUserMapper companyUserMapper;
+
+    @Autowired
+    private CompanyDomainBindUserMapper companyDomainBindUserMapper;
+
+    /**
+     * 查询域名绑定销售公司
+     *
+     * @param id 域名绑定销售公司主键
+     * @return 域名绑定销售公司
+     */
+    @Override
+    public CompanyDomainBind selectCompanyDomainBindById(Long id) {
+        return baseMapper.selectCompanyDomainBindById(id);
+    }
+
+    /**
+     * 查询域名绑定销售公司列表
+     *
+     * @param companyDomainBind 域名绑定销售公司
+     * @return 域名绑定销售公司
+     */
+    @Override
+    public List<CompanyDomainBindVo> selectCompanyDomainBindList(CompanyDomainBindParam companyDomainBind) {
+        return baseMapper.selectJoinBindInfo(companyDomainBind);
+    }
+
+    /**
+     * 新增域名绑定销售公司
+     *
+     * @param companyDomainBind 域名绑定销售公司
+     * @return 结果
+     */
+    @Override
+    public int insertCompanyDomainBind(CompanyDomainBind companyDomainBind) {
+        companyDomainBind.setCreateTime(DateUtils.getNowDate());
+        return baseMapper.insertCompanyDomainBind(companyDomainBind);
+    }
+
+    /**
+     * 修改域名绑定销售公司
+     *
+     * @param companyDomainBind 域名绑定销售公司
+     * @return 结果
+     */
+    @Override
+    public int updateCompanyDomainBind(CompanyDomainBind companyDomainBind) {
+        companyDomainBind.setUpdateTime(DateUtils.getNowDate());
+        return baseMapper.updateCompanyDomainBind(companyDomainBind);
+    }
+
+    /**
+     * 批量删除域名绑定销售公司
+     *
+     * @param ids 需要删除的域名绑定销售公司主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCompanyDomainBindByIds(Long[] ids) {
+        return baseMapper.deleteCompanyDomainBindByIds(ids);
+    }
+
+    /**
+     * 删除域名绑定销售公司信息
+     *
+     * @param id 域名绑定销售公司主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCompanyDomainBindById(Long id) {
+        return baseMapper.deleteCompanyDomainBindById(id);
+    }
+
+    @Override
+    public R domainBatchBinding(CompanyDomainBindParam param) {
+        //验证分配企业信息是否存在
+        List<CompanyDomainBind> companyDomainBindList = baseMapper.selectList(new LambdaQueryWrapper<CompanyDomainBind>().in(CompanyDomainBind::getId, param.getCompanyIds()));
+
+        if (companyDomainBindList.isEmpty()) {
+            return R.failed("分配域名企业数据不存在!");
+        }
+        if (companyDomainBindList.size() != param.getCompanyIds().size()) {
+            return R.failed("分配域名中存在不存在的记录!");
+        }
+
+        //验证分配人员是否存在
+        List<CompanyUser> companyUserList = companyUserMapper.getUserInfoByUserIds(param.getCompanyUserIds());
+        if (companyUserList.isEmpty()) {
+            return R.failed("分配人员数据不存在!");
+        }
+
+        if (companyUserList.size() != param.getCompanyUserIds().size()) {
+            return R.failed("分配人员中存在不存在的记录!");
+        }
+
+        //获取分配关系
+        Set<String> existingBinds = companyDomainBindUserMapper.selectList(new LambdaQueryWrapper<CompanyDomainBindUser>().in(CompanyDomainBindUser::getBindId, param.getCompanyIds()).in(CompanyDomainBindUser::getCompanyUserId, param.getCompanyUserIds())).stream()
+                .map(bind -> bind.getBindId() + "key" + bind.getCompanyUserId())
+                .collect(Collectors.toSet());
+
+        List<CompanyDomainBindUser> insertUserList = new LinkedList<>();
+        String userId = param.getUserId();
+        for (Long bind : param.getCompanyIds()) {
+            for (Long bindUser : param.getCompanyUserIds()) {
+                String key = bind + "key" + bindUser;
+                if (!existingBinds.contains(key)) {
+                    CompanyDomainBindUser user = new CompanyDomainBindUser();
+                    user.setBindId(bind);
+                    user.setCompanyUserId(bindUser);
+                    user.setCreateTime(new Date());
+                    user.setCreateBy(userId);
+                    insertUserList.add(user);
+                }
+            }
+        }
+
+        //批量插入数据
+        if (!insertUserList.isEmpty()) {
+            batchBindInsert(insertUserList, 1000);
+        }
+        return R.ok("操作成功!");
+    }
+
+    // 分批插入方法
+    private void batchBindInsert(List<CompanyDomainBindUser> list, int batchSize) {
+        for (int i = 0; i < list.size(); i += batchSize) {
+            int end = Math.min(i + batchSize, list.size());
+            companyDomainBindUserMapper.batchInsertBindUserInfo(list.subList(i, end));
+        }
+    }
+}

+ 95 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyDomainBindUserServiceImpl.java

@@ -0,0 +1,95 @@
+package com.fs.company.service.impl;
+
+import java.util.List;
+import com.fs.common.utils.DateUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.company.param.CompanyDomainBindUserParam;
+import com.fs.company.vo.CompanyDomainBindUserVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.fs.company.mapper.CompanyDomainBindUserMapper;
+import com.fs.company.domain.CompanyDomainBindUser;
+import com.fs.company.service.ICompanyDomainBindUserService;
+
+/**
+ * 企业域名分配中间表Service业务层处理
+ * 
+ * @author fs
+ * @date 2025-06-19
+ */
+@Service
+public class CompanyDomainBindUserServiceImpl extends ServiceImpl<CompanyDomainBindUserMapper, CompanyDomainBindUser> implements ICompanyDomainBindUserService {
+
+    /**
+     * 查询企业域名分配中间表
+     * 
+     * @param id 企业域名分配中间表主键
+     * @return 企业域名分配中间表
+     */
+    @Override
+    public CompanyDomainBindUser selectCompanyDomainBindUserById(Long id)
+    {
+        return baseMapper.selectCompanyDomainBindUserById(id);
+    }
+
+    /**
+     * 查询企业域名分配中间表列表
+     * 
+     * @param companyDomainBindUser 企业域名分配中间表
+     * @return 企业域名分配中间表
+     */
+    @Override
+    public List<CompanyDomainBindUserVo> selectCompanyDomainBindUserList(CompanyDomainBindUserParam companyDomainBindUser)
+    {
+        return baseMapper.selectDoaminBindUserJoinInfo(companyDomainBindUser);
+    }
+
+    /**
+     * 新增企业域名分配中间表
+     * 
+     * @param companyDomainBindUser 企业域名分配中间表
+     * @return 结果
+     */
+    @Override
+    public int insertCompanyDomainBindUser(CompanyDomainBindUser companyDomainBindUser)
+    {
+        companyDomainBindUser.setCreateTime(DateUtils.getNowDate());
+        return baseMapper.insertCompanyDomainBindUser(companyDomainBindUser);
+    }
+
+    /**
+     * 修改企业域名分配中间表
+     * 
+     * @param companyDomainBindUser 企业域名分配中间表
+     * @return 结果
+     */
+    @Override
+    public int updateCompanyDomainBindUser(CompanyDomainBindUser companyDomainBindUser)
+    {
+        return baseMapper.updateCompanyDomainBindUser(companyDomainBindUser);
+    }
+
+    /**
+     * 批量删除企业域名分配中间表
+     * 
+     * @param ids 需要删除的企业域名分配中间表主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCompanyDomainBindUserByIds(Long[] ids)
+    {
+        return baseMapper.deleteCompanyDomainBindUserByIds(ids);
+    }
+
+    /**
+     * 删除企业域名分配中间表信息
+     * 
+     * @param id 企业域名分配中间表主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCompanyDomainBindUserById(Long id)
+    {
+        return baseMapper.deleteCompanyDomainBindUserById(id);
+    }
+}

+ 274 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyDomainServiceImpl.java

@@ -0,0 +1,274 @@
+package com.fs.company.service.impl;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.api.R;
+import com.fs.common.exception.ServiceException;
+import com.fs.common.utils.DateUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.company.domain.Company;
+import com.fs.company.domain.CompanyDomainBind;
+import com.fs.company.mapper.CompanyDomainBindMapper;
+import com.fs.company.mapper.CompanyMapper;
+import com.fs.company.param.CompanyDomainParam;
+import com.fs.company.vo.CompanyDomainExportTemplateVo;
+import com.fs.company.vo.CompanyDomainVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.fs.company.mapper.CompanyDomainMapper;
+import com.fs.company.domain.CompanyDomain;
+import com.fs.company.service.ICompanyDomainService;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 域名管路Service业务层处理
+ *
+ * @author fs
+ * @date 2025-06-16
+ */
+@Service
+public class CompanyDomainServiceImpl extends ServiceImpl<CompanyDomainMapper, CompanyDomain> implements ICompanyDomainService {
+    @Autowired
+    private CompanyMapper companyMapper;
+
+    @Autowired
+    private CompanyDomainMapper baseMapper;
+
+    @Autowired
+    private CompanyDomainBindMapper companyDomainBindMapper;
+
+    /**
+     * 查询域名管路
+     *
+     * @param id 域名管路主键
+     * @return 域名管路
+     */
+    @Override
+    public CompanyDomain selectCompanyDomainById(Long id) {
+        return baseMapper.selectCompanyDomainById(id);
+    }
+
+    /**
+     * 查询域名管路列表
+     *
+     * @param companyDomain 域名管路
+     * @return 域名管路
+     */
+    @Override
+    public List<CompanyDomainVo> selectCompanyDomainList(CompanyDomainParam companyDomain) {
+        return baseMapper.selectCompanyDomainJoinInfo(companyDomain);
+    }
+
+    /**
+     * 新增域名管路
+     *
+     * @param companyDomain 域名管路
+     * @return 结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int insertCompanyDomain(CompanyDomain companyDomain) {
+        //验证是否域名重复
+        if (baseMapper.selectCount(new LambdaQueryWrapper<CompanyDomain>().eq(CompanyDomain::getDomain, companyDomain.getDomain()).eq(CompanyDomain::getStatus, 1)) > 0) {
+            throw new ServiceException("更新失败,当前域名" + companyDomain.getDomain() + "已存在!");
+        }
+
+        companyDomain.setCreateTime(DateUtils.getNowDate());
+        return baseMapper.insertCompanyDomain(companyDomain);
+    }
+
+    /**
+     * 修改域名管路
+     *
+     * @param companyDomain 域名管路
+     * @return 结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int updateCompanyDomain(CompanyDomain companyDomain) {
+        //验证数据是否存在
+        CompanyDomain domain = baseMapper.selectById(companyDomain.getId());
+        if (ObjectUtil.isEmpty(domain)) {
+            throw new ServiceException("操作失败,更新数据不存在!");
+        }
+
+        //验证是否域名重复
+        if (baseMapper.selectCount(new LambdaQueryWrapper<CompanyDomain>().eq(CompanyDomain::getDomain, companyDomain.getDomain()).eq(CompanyDomain::getStatus, 1).ne(CompanyDomain::getId, companyDomain.getId())) > 0) {
+            throw new ServiceException("更新失败,当前域名" + companyDomain.getDomain() + "已存在!");
+        }
+
+        companyDomain.setUpdateTime(DateUtils.getNowDate());
+        return baseMapper.updateCompanyDomain(companyDomain);
+    }
+
+    /**
+     * 批量删除域名管路
+     *
+     * @param ids 需要删除的域名管路主键
+     * @return 结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int deleteCompanyDomainByIds(Long[] ids) {
+        //查询域名
+        CompanyDomainParam companyDomain = new CompanyDomainParam();
+        companyDomain.setIds(ids);
+        List<CompanyDomainVo> domainList = baseMapper.selectCompanyDomainJoinInfo(companyDomain);
+        if (domainList.isEmpty() || domainList.size() != ids.length) {
+            throw new ServiceException("域名数量不一致,请核对后再试!");
+        }
+
+//        Map<Long, CompanyDomainVo> checkMap = domainList.stream().collect(Collectors.toMap(CompanyDomainVo::getId, d -> d));
+//        //查询是否有分配
+//        CompanyDomainVo checkVo;
+//        for (Long id : ids) {
+//            checkVo = checkMap.get(id);
+//            if (ObjectUtil.isNotNull(checkVo)) {
+//                if (ObjectUtil.isNotNull(checkVo.getBindNum()) && checkVo.getBindNum() > 0) {
+//                    throw new ServiceException("删除失败,当前域名" + checkVo.getDomain() + "已绑定" + checkVo.getBindNum() + "家销售公司,请解绑后操作!");
+//                } else if (checkVo.getStatus() == 1) {
+//                    throw new ServiceException("删除失败,当前域名" + checkVo.getDomain() + "状态正常启用中,请关闭后操作!");
+//                }
+//            }
+//        }
+        //删除域名企业中间表数据
+        companyDomainBindMapper.deleteCompanyDomainBindBydomainIds(ids);
+        //删除企业销售中间表数据
+
+        return baseMapper.deleteCompanyDomainByIds(ids);
+    }
+
+    /**
+     * 删除域名管路信息
+     *
+     * @param id 域名管路主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCompanyDomainById(Long id) {
+        return baseMapper.deleteCompanyDomainById(id);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R domainBatchBinding(CompanyDomainParam param) {
+        // 验证绑定域名是否存在(批量查询)
+        List<CompanyDomain> domainList = baseMapper.selectList(
+                new LambdaQueryWrapper<CompanyDomain>()
+                        .select(CompanyDomain::getId)
+                        .in(CompanyDomain::getId, param.getDomainIds())
+                        .eq(CompanyDomain::getStatus, 1)
+        );
+
+        if (domainList.isEmpty()) {
+            return R.failed("绑定域名数据不存在!");
+        }
+
+        if (domainList.size() != param.getDomainIds().size()) {
+            return R.failed("绑定域名中存在状态非激活或不存在的记录!");
+        }
+
+        // 验证绑定企业是否存在
+        List<Company> companyList = companyMapper.selectCompanyByIds(param.getCompanyIds());
+        if (companyList.isEmpty()) {
+            return R.failed("绑定企业数据不存在!");
+        }
+
+        if (companyList.size() != param.getCompanyIds().size()) {
+            return R.failed("绑定企业中存在不存在的记录!");
+        }
+
+        // 获取已存在的绑定关系
+        Set<String> existingBinds = companyDomainBindMapper.selectList(
+                        new LambdaQueryWrapper<CompanyDomainBind>()
+                                .select(CompanyDomainBind::getDomainId, CompanyDomainBind::getCompanyId)
+                                .in(CompanyDomainBind::getDomainId, param.getDomainIds())
+                                .in(CompanyDomainBind::getCompanyId, param.getCompanyIds())
+                )
+                .stream()
+                .map(bind -> bind.getDomainId() + "key" + bind.getCompanyId())
+                .collect(Collectors.toSet());
+
+        // 生成待插入的绑定关系(优化集合操作)
+        List<CompanyDomainBind> insertList = new ArrayList<>();
+        String userId = param.getUserId();  // 假设此处为userId
+
+        for (Long domainId : param.getDomainIds()) {
+            for (Company company : companyList) {
+                String key = domainId + "key" + company.getCompanyId();
+                if (!existingBinds.contains(key)) {
+                    insertList.add(createBind(domainId, company, userId));
+                }
+            }
+        }
+
+        // 批量插入数据(修正条件判断)
+        if (!insertList.isEmpty()) {
+            // 分批处理,每批1000条
+            batchBindInsert(insertList, 1000);
+        }
+
+        return R.ok("操作成功!");
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R importDomainData(CompanyDomainParam param, List<CompanyDomainExportTemplateVo> domainList) {
+        if (!domainList.isEmpty()) {
+            //查询域名列表数据
+            List<String> domains = domainList.stream().map(CompanyDomainExportTemplateVo::getDomain).collect(Collectors.toList());
+            List<CompanyDomain> companyDomainList = baseMapper.selectList(new LambdaQueryWrapper<CompanyDomain>().select(CompanyDomain::getDomain).eq(CompanyDomain::getStatus, 1).in(CompanyDomain::getDomain, domains));
+            Map<String, Long> checkMap = companyDomainList.stream().collect(Collectors.toMap(CompanyDomain::getDomain, s -> 0L));
+            //便利数据
+            List<CompanyDomain> insertList = new LinkedList<>();
+            String userId = param.getUserId();
+            domainList.stream().filter(d -> ObjectUtil.isNotNull(d.getDomain())).forEach(f -> {
+                if (!checkMap.containsKey(f.getDomain())) {
+                    CompanyDomain domain = new CompanyDomain();
+                    domain.setStatus(1L);//默认启用
+                    domain.setCreateBy(userId);
+                    domain.setDomain(f.getDomain());
+                    domain.setRemark(f.getRemark());
+                    domain.setCreateTime(new Date());
+                    insertList.add(domain);
+                    checkMap.put(f.getDomain(), 0L);
+                }
+            });
+
+            //批量插入
+            if (!insertList.isEmpty()) {
+                batchDomainInsert(insertList, 1000);
+            }
+        }
+        return R.ok(null);
+    }
+
+    // 辅助方法:创建绑定对象
+    private CompanyDomainBind createBind(Long domainId, Company company, String userId) {
+        CompanyDomainBind bind = new CompanyDomainBind();
+        bind.setDomainId(domainId);
+        bind.setCompanyId(company.getCompanyId());
+        bind.setCreateBy(userId);
+        bind.setCreateTime(new Date());  // 补充创建时间
+        return bind;
+    }
+
+    // 分批插入方法
+    private void batchBindInsert(List<CompanyDomainBind> list, int batchSize) {
+        for (int i = 0; i < list.size(); i += batchSize) {
+            int end = Math.min(i + batchSize, list.size());
+            companyDomainBindMapper.batchInsertBindInfo(list.subList(i, end));
+        }
+    }
+
+    // 分批插入方法
+    private void batchDomainInsert(List<CompanyDomain> list, int batchSize) {
+        for (int i = 0; i < list.size(); i += batchSize) {
+            int end = Math.min(i + batchSize, list.size());
+            baseMapper.batchDomainInfo(list.subList(i, end));
+        }
+    }
+}

+ 1 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java

@@ -160,6 +160,7 @@ public class CompanyServiceImpl implements ICompanyService
             user.setSex("0");
             user.setStatus("0");
             user.setIsDel(0);
+            user.setIsAudit(1);
             userMapper.insertCompanyUser(user);
             //添加用户角色表
             CompanyUserRole userRole=new CompanyUserRole();

+ 5 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java

@@ -512,4 +512,9 @@ public class CompanyUserServiceImpl implements ICompanyUserService
         }
         companyUserMapper.auditUsers(userIds);
     }
+
+    @Override
+    public CompanyUser selectCompanyUserByPhone(String phone) {
+        return companyUserMapper.selectCompanyUserByPhone(phone);
+    }
 }

+ 58 - 0
fs-service/src/main/java/com/fs/company/vo/CompanyDomainBindUserVo.java

@@ -0,0 +1,58 @@
+package com.fs.company.vo;
+
+import com.baidu.dev2.thirdparty.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 企业域名分配中间表对象 company_domain_bind_user
+ *
+ * @author fs
+ * @date 2025-06-19
+ */
+@Data
+public class CompanyDomainBindUserVo implements Serializable {
+
+    /**
+     * 中间表id
+     */
+    @Excel(name = "编号", sort = 0)
+    private Long id;
+
+    /**
+     * 企业销售id
+     */
+    private Long companyUserId;
+
+    /**
+     * 中间表id
+     */
+    private Long bindId;
+
+    /**
+     * 分配域名
+     **/
+    @Excel(name = "分配域名", sort = 1)
+    private String domain;
+
+    /**
+     * 分配人员
+     **/
+    @Excel(name = "分配人员", sort = 2)
+    private String userName;
+
+    /**
+     * 分配人员手机号
+     **/
+    @Excel(name = "分配人员手机号", sort = 3)
+    private String phonenumber;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Excel(name = "绑定时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", sort = 4)
+    private Date createTime;
+}

+ 59 - 0
fs-service/src/main/java/com/fs/company/vo/CompanyDomainBindVo.java

@@ -0,0 +1,59 @@
+package com.fs.company.vo;
+
+import com.baidu.dev2.thirdparty.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 域名绑定销售公司对象 company_domain_bind
+ *
+ * @author fs
+ * @date 2025-06-17
+ */
+@Data
+public class CompanyDomainBindVo implements Serializable {
+
+    /**
+     * 域名绑定中间表
+     */
+    @Excel(name = "编码", sort = 0)
+    private Long id;
+
+    /**
+     * 销售公司ID
+     */
+    @Excel(name = "销售公司编码", sort = 1)
+    private Long companyId;
+
+    /**
+     * 绑定域名ID
+     */
+    @Excel(name = "绑定域名编码", sort = 3)
+    private Long domainId;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Excel(name = "绑定时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", sort = 5)
+    private Date createTime;
+
+    /**
+     * 域名名称
+     **/
+    @Excel(name = "域名", sort = 4)
+    private String domain;
+
+    /**
+     * 公司
+     **/
+    @Excel(name = "公司", sort = 2)
+    private String companyName;
+
+    /**
+     * 分配数量
+     * **/
+    @Excel(name = "分配数量", sort = 4)
+    private int allocationNum;
+
+}

+ 26 - 0
fs-service/src/main/java/com/fs/company/vo/CompanyDomainExportTemplateVo.java

@@ -0,0 +1,26 @@
+package com.fs.company.vo;
+
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 域名管路导入模板对象 CompanyDomainExportTemplateVo
+ *
+ * @author fs
+ * @date 2025-06-16
+ */
+@Data
+public class CompanyDomainExportTemplateVo implements Serializable {
+
+    /**
+     * 域名
+     */
+    @Excel(name = "域名", sort = 1,width = 30)
+    private String domain;
+    /**
+     * 备注
+     **/
+    @Excel(name = "备注", sort = 2,width = 50)
+    private String remark;
+}

+ 52 - 0
fs-service/src/main/java/com/fs/company/vo/CompanyDomainVo.java

@@ -0,0 +1,52 @@
+package com.fs.company.vo;
+
+import com.baidu.dev2.thirdparty.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 域名管路对象 company_domain
+ *
+ * @author fs
+ * @date 2025-06-16
+ */
+@Data
+public class CompanyDomainVo implements Serializable {
+
+    /**
+     * 域名id
+     */
+    @Excel(name = "编号", sort = 0)
+    private Long id;
+
+    /**
+     * 域名
+     */
+    @Excel(name = "域名", sort = 1)
+    private String domain;
+
+    /**
+     * 状态(0=停用、1正常)
+     */
+    @Excel(name = "状态", dictType = "sys_company_status", sort = 3)
+    private Long status;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", sort = 4)
+    private Date createTime;
+
+    /**
+     * 备注
+     **/
+    @Excel(name = "备注", sort = 5)
+    private String remark;
+
+    /**
+     * 绑定数量
+     **/
+    @Excel(name = "域名绑定企业数量", sort = 2)
+    private int bindNum;
+}

+ 8 - 0
fs-service/src/main/java/com/fs/sop/params/QwSopLogsParam.java

@@ -3,6 +3,8 @@ package com.fs.sop.params;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class QwSopLogsParam {
     /**
@@ -16,6 +18,7 @@ public class QwSopLogsParam {
     private String qwUserName;
 
     private String qwUserid;
+    private List<String> qwUseridByList;
 
     /**
      * 客户昵称
@@ -51,4 +54,9 @@ public class QwSopLogsParam {
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private String sendTime;
+
+    /**
+     * 手机号
+     */
+    private String phone;
 }

+ 39 - 5
fs-service/src/main/java/com/fs/sop/service/impl/QwSopLogsServiceImpl.java

@@ -1,13 +1,17 @@
 package com.fs.sop.service.impl;
 
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.utils.StringUtils;
+import com.fs.company.domain.CompanyUser;
+import com.fs.company.service.ICompanyUserService;
 import com.fs.course.config.CourseConfig;
 import com.fs.course.domain.FsCourseWatchLog;
 import com.fs.course.service.IFsCourseWatchLogService;
+import com.fs.course.service.IFsUserCompanyUserService;
 import com.fs.fastGpt.service.IFastGptChatSessionService;
 import com.fs.qw.domain.QwExternalContact;
 import com.fs.qw.domain.QwUser;
@@ -37,6 +41,7 @@ import com.fs.sop.vo.QwSopLogsDoSendListTVO;
 import com.fs.sop.vo.QwSopLogsListCVO;
 import com.fs.system.service.ISysConfigService;
 import com.fs.voice.utils.StringUtil;
+import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -99,6 +104,9 @@ public class QwSopLogsServiceImpl implements IQwSopLogsService
     @Autowired
     private IFastGptChatSessionService fastGptChatSessionService;
 
+    @Autowired
+    private ICompanyUserService companyUserService;
+
 
     /**
      * 查询企业微信SOP  定时任务
@@ -129,16 +137,42 @@ public class QwSopLogsServiceImpl implements IQwSopLogsService
      */
     @Override
     public List<QwSopLogsListCVO> selectQwSopLogsListBySopId(QwSopLogsParam param) {
+        if (param == null || param.getType() == null) {
+            return Collections.emptyList();
+        }
 
-        switch (param.getType()){
-            //个微
+        switch (param.getType()) {
+            // 个微
             case 1:
                 return qwSopLogsMapper.selectQwSopLogsListByGwSopId(param);
-            //企微
+            // 企微
             case 2:
-                return qwSopLogsMapper.selectQwSopLogsListByQwSopId(param);
+                return handleQwSopLogs(param);
+            default:
+                return Collections.emptyList();
+        }
+    }
+
+    private List<QwSopLogsListCVO> handleQwSopLogs(QwSopLogsParam param) {
+        if (StringUtils.isNotEmpty(param.getPhone())) {
+            try {
+                CompanyUser companyUser = companyUserService.selectCompanyUserByPhone(param.getPhone());
+                if (companyUser == null) {
+                    return Collections.emptyList();
+                }
+                QwUser qwUser = new QwUser();
+                qwUser.setCompanyUserId(companyUser.getUserId());
+                List<QwUser> qwUsers = qwUserMapper.selectQwUserList(qwUser);
+                if (CollectionUtils.isNotEmpty(qwUsers)){
+                    List<String> qwUserIds = qwUsers.stream().map(QwUser::getQwUserId).collect(Collectors.toList());
+                    param.setQwUseridByList(qwUserIds);
+                }
+            } catch (Exception e) {
+                logger.error("根据手机号查询企业用户出现异常,手机号: {}, 异常信息: {}", param.getPhone(), e.getMessage(), e);
+                return Collections.emptyList();
+            }
         }
-       return null;
+        return qwSopLogsMapper.selectQwSopLogsListByQwSopId(param);
     }
 
 

+ 149 - 0
fs-service/src/main/resources/mapper/company/CompanyDomainBindMapper.xml

@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fs.company.mapper.CompanyDomainBindMapper">
+
+    <resultMap type="CompanyDomainBind" id="CompanyDomainBindResult">
+        <result property="id" column="id"/>
+        <result property="companyId" column="company_id"/>
+        <result property="domainId" column="domain_id"/>
+        <result property="remark" column="remark"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="status" column="status"/>
+        <result property="createBy" column="create_by"/>
+        <result property="updateBy" column="update_by"/>
+    </resultMap>
+
+    <sql id="selectCompanyDomainBindVo">
+        select id,
+               company_id,
+               domain_id,
+               remark,
+               create_time,
+               update_time,
+               status,
+               create_by,
+               update_by
+        from company_domain_bind
+    </sql>
+
+    <select id="selectCompanyDomainBindList" parameterType="CompanyDomainBind" resultMap="CompanyDomainBindResult">
+        <include refid="selectCompanyDomainBindVo"/>
+        <where>
+            <if test="companyId != null ">and company_id = #{companyId}</if>
+            <if test="domainId != null ">and domain_id = #{domainId}</if>
+            <if test="status != null ">and status = #{status}</if>
+        </where>
+    </select>
+
+    <select id="selectCompanyDomainBindById" parameterType="Long" resultMap="CompanyDomainBindResult">
+        <include refid="selectCompanyDomainBindVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertCompanyDomainBind" parameterType="CompanyDomainBind" useGeneratedKeys="true" keyProperty="id">
+        insert into company_domain_bind
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="companyId != null">company_id,</if>
+            <if test="domainId != null">domain_id,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="status != null">status,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="companyId != null">#{companyId},</if>
+            <if test="domainId != null">#{domainId},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="status != null">#{status},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+        </trim>
+    </insert>
+
+    <update id="updateCompanyDomainBind" parameterType="CompanyDomainBind">
+        update company_domain_bind
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="companyId != null">company_id = #{companyId},</if>
+            <if test="domainId != null">domain_id = #{domainId},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteCompanyDomainBindById" parameterType="Long">
+        delete
+        from company_domain_bind
+        where id = #{id}
+    </delete>
+
+    <delete id="deleteCompanyDomainBindByIds" parameterType="String">
+        delete from company_domain_bind where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <insert id="batchInsertBindInfo">
+        INSERT INTO company_domain_bind
+        (company_id, domain_id, remark, create_time, update_time, status, create_by, update_by)
+        VALUES
+        <foreach collection="bindList" item="item" separator=",">
+            (
+            #{item.companyId},
+            #{item.domainId},
+            #{item.remark},
+            #{item.createTime},
+            #{item.updateTime},
+            #{item.status},
+            #{item.createBy},
+            #{item.updateBy}
+            )
+        </foreach>
+    </insert>
+
+    <delete id="deleteCompanyDomainBindBydomainIds" parameterType="String">
+        delete from company_domain_bind where domain_id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <select id="selectJoinBindInfo" resultType="com.fs.company.vo.CompanyDomainBindVo">
+        SELECT
+        cdb.id,
+        cdb.company_id,
+        cdb.create_time,
+        cdb.domain_id,
+        cd.domain,
+        c.company_name,
+        COUNT(dbu.id) allocationNum
+        FROM
+        company_domain_bind cdb
+        INNER JOIN company_domain cd ON cdb.domain_id = cd.id
+        LEFT JOIN company c ON cdb.company_id = c.company_id
+        LEFT JOIN company_domain_bind_user dbu ON cdb.id=dbu.bind_id
+        <where>
+            <if test="companyName != null and companyName != ''">and c.company_name LIKE
+                CONCAT('%',#{companyName},'%')
+            </if>
+            <if test="domain != null and domain != ''">and cd.domain LIKE CONCAT('%',#{domain},'%')</if>
+            <if test="companyId != null ">and cdb.company_id = #{companyId}</if>
+            <if test="domainId != null ">and cdb.domain_id = #{domainId}</if>
+        </where>
+        GROUP BY cdb.id
+        ORDER BY
+        cdb.create_time DESC
+    </select>
+</mapper>

+ 105 - 0
fs-service/src/main/resources/mapper/company/CompanyDomainBindUserMapper.xml

@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fs.company.mapper.CompanyDomainBindUserMapper">
+    
+    <resultMap type="CompanyDomainBindUser" id="CompanyDomainBindUserResult">
+        <result property="id"    column="id"    />
+        <result property="companyUserId"    column="company_user_id"    />
+        <result property="bindId"    column="bind_id"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateBy"    column="update_by"    />
+    </resultMap>
+
+    <sql id="selectCompanyDomainBindUserVo">
+        select id, company_user_id, bind_id, create_time, create_by, update_by from company_domain_bind_user
+    </sql>
+
+    <select id="selectCompanyDomainBindUserList" parameterType="CompanyDomainBindUser" resultMap="CompanyDomainBindUserResult">
+        <include refid="selectCompanyDomainBindUserVo"/>
+        <where>  
+            <if test="companyUserId != null "> and company_user_id = #{companyUserId}</if>
+            <if test="bindId != null "> and bind_id = #{bindId}</if>
+        </where>
+    </select>
+    
+    <select id="selectCompanyDomainBindUserById" parameterType="Long" resultMap="CompanyDomainBindUserResult">
+        <include refid="selectCompanyDomainBindUserVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertCompanyDomainBindUser" parameterType="CompanyDomainBindUser" useGeneratedKeys="true" keyProperty="id">
+        insert into company_domain_bind_user
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="companyUserId != null">company_user_id,</if>
+            <if test="bindId != null">bind_id,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="companyUserId != null">#{companyUserId},</if>
+            <if test="bindId != null">#{bindId},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+         </trim>
+    </insert>
+
+    <update id="updateCompanyDomainBindUser" parameterType="CompanyDomainBindUser">
+        update company_domain_bind_user
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="companyUserId != null">company_user_id = #{companyUserId},</if>
+            <if test="bindId != null">bind_id = #{bindId},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteCompanyDomainBindUserById" parameterType="Long">
+        delete from company_domain_bind_user where id = #{id}
+    </delete>
+
+    <delete id="deleteCompanyDomainBindUserByIds" parameterType="String">
+        delete from company_domain_bind_user where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <insert id="batchInsertBindUserInfo">
+        INSERT INTO company_domain_bind_user
+        (company_user_id, bind_id, create_time, create_by, update_by)
+        VALUES
+        <foreach collection="bindUserList" item="item" separator=",">
+            (#{item.companyUserId}, #{item.bindId}, #{item.createTime}, #{item.createBy}, #{item.updateBy})
+        </foreach>
+    </insert>
+    <select id="selectDoaminBindUserJoinInfo" resultType="com.fs.company.vo.CompanyDomainBindUserVo">
+        SELECT
+            dbu.id,
+            dbu.company_user_id,
+            dbu.bind_id,
+            dbu.create_time,
+            cd.domain,
+            cu.user_name,
+            cu.phonenumber
+        FROM
+            company_domain_bind_user dbu
+                LEFT JOIN company_domain_bind cdb ON dbu.bind_id = cdb.id
+                LEFT JOIN company_domain cd ON cdb.domain_id = cd.id
+                LEFT JOIN company_user cu ON dbu.company_user_id = cu.user_id
+        <where>
+            <if test="companyUserId != null "> and dbu.company_user_id = #{companyUserId}</if>
+            <if test="bindId != null "> and dbu.bind_id = #{bindId}</if>
+            <if test="companyId != null "> and cdb.company_id = #{companyId}</if>
+            <if test="domain != null and domain != ''"> and cd.domain LIKE CONCAT('%',#{domain},'%') </if>
+            <if test="userName != null and userName != ''"> and cu.user_name LIKE CONCAT('%',#{userName},'%')</if>
+            <if test="phonenumber != null and phonenumber != ''"> and cu.phonenumber LIKE CONCAT('%',#{phonenumber},'%')</if>
+        </where>
+    </select>
+</mapper>

+ 125 - 0
fs-service/src/main/resources/mapper/company/CompanyDomainMapper.xml

@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fs.company.mapper.CompanyDomainMapper">
+
+    <resultMap type="CompanyDomain" id="CompanyDomainResult">
+        <result property="id" column="id"/>
+        <result property="domain" column="domain"/>
+        <result property="remark" column="remark"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="status" column="status"/>
+        <result property="createBy" column="create_by"/>
+        <result property="updateBy" column="update_by"/>
+    </resultMap>
+
+    <sql id="selectCompanyDomainVo">
+        select id, domain, remark, create_time, update_time, status, create_by, update_by
+        from company_domain
+    </sql>
+
+    <select id="selectCompanyDomainList" parameterType="CompanyDomain" resultMap="CompanyDomainResult">
+        <include refid="selectCompanyDomainVo"/>
+        <where>
+            <if test="domain != null  and domain != ''">and domain LIKE CONCAT('%',#{domain},'%')</if>
+            <if test="status != null ">and status = #{status}</if>
+        </where>
+    </select>
+
+    <select id="selectCompanyDomainById" parameterType="Long" resultMap="CompanyDomainResult">
+        <include refid="selectCompanyDomainVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertCompanyDomain" parameterType="CompanyDomain" useGeneratedKeys="true" keyProperty="id">
+        insert into company_domain
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="domain != null and domain != ''">domain,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="status != null">status,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="domain != null and domain != ''">#{domain},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="status != null">#{status},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+        </trim>
+    </insert>
+
+    <update id="updateCompanyDomain" parameterType="CompanyDomain">
+        update company_domain
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="domain != null and domain != ''">domain = #{domain},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteCompanyDomainById" parameterType="Long">
+        delete
+        from company_domain
+        where id = #{id}
+    </delete>
+
+    <delete id="deleteCompanyDomainByIds" parameterType="String">
+        delete from company_domain where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <select id="selectCompanyDomainJoinInfo" resultType="com.fs.company.vo.CompanyDomainVo">
+        SELECT cd.*,
+        COUNT(cdb.domain_id) bindNum
+        FROM company_domain cd
+        LEFT JOIN company_domain_bind cdb ON cd.id = cdb.domain_id
+        <where>
+            <if test="domain != null  and domain != ''">and cd.domain LIKE CONCAT('%',#{domain},'%')</if>
+            <if test="status != null ">and cd.status = #{status}</if>
+            <if test="ids != null ">and cd.id IN
+                <foreach collection="ids" item="item" index="index" open="(" separator="," close=")">#{item}</foreach>
+            </if>
+        </where>
+        GROUP BY
+        cd.id
+        ORDER BY cd.create_time DESC
+    </select>
+
+    <insert id="batchDomainInfo">
+        insert into company_domain (
+        domain,
+        remark,
+        create_time,
+        update_time,
+        status,
+        create_by,
+        update_by
+        )
+        values
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.domain},
+            #{item.remark},
+            #{item.createTime},
+            #{item.updateTime},
+            #{item.status},
+            #{item.createBy},
+            #{item.updateBy}
+            )
+        </foreach>
+    </insert>
+</mapper>

+ 15 - 0
fs-service/src/main/resources/mapper/company/CompanyMapper.xml

@@ -172,4 +172,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </delete>
 
+    <select id="selectCompanyByIds" resultMap="CompanyResult">
+        SELECT
+        company_id,
+        company_name
+        FROM
+        company
+        WHERE
+        status=1
+        AND company_id IN
+            <foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
+            #{item}
+            </foreach>
+            <!-- 批量查询企业ID: ${ids} -->
+    </select>
+
 </mapper>

+ 13 - 0
fs-service/src/main/resources/mapper/company/CompanyUserMapper.xml

@@ -205,6 +205,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="voicePrintUrl != null">voice_print_url = #{voicePrintUrl},</if>
             <if test="addressId != null">address_id = #{addressId},</if>
             <if test="domain != null">domain = #{domain},</if>
+            <if test="isAudit != null">`is_audit` = #{isAudit},</if>
         </trim>
         where user_id = #{userId}
     </update>
@@ -279,6 +280,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
 
+
+    <select id="selectCompanyUserByPhone" resultType="com.fs.company.domain.CompanyUser">
+        select user_id, dept_id, user_name, nick_name, user_type, email, phonenumber, sex, avatar, password, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark, open_id, id_card, company_id, qr_code_weixin, qr_code_wecom, jpush_id, qw_user_id, qw_status, voice_print_url, address_id, `domain`, parent_id, bind_code from company_user where phonenumber=#{phone} and del_flag=0
+    </select>
+
+
     <sql id="selectUserVo">
         select u.user_id,u.qw_user_id,u.company_id,u.voice_print_url, u.dept_id, u.user_name, u.nick_name,
                u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip,
@@ -398,4 +405,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     select="com.fs.company.mapper.CompanyPostMapper.selectPostsByUserId" column="{user_id=user_id}" />
 
     </resultMap>
+
+    <select id="getUserInfoByUserIds" resultType="com.fs.company.domain.CompanyUser">
+        SELECT user_id,user_name FROM company_user WHERE user_id IN <foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
+        #{item}
+    </foreach>
+    </select>
 </mapper>

+ 4 - 0
fs-service/src/main/resources/mapper/sop/QwSopLogsMapper.xml

@@ -181,6 +181,10 @@
             <if test="map.externalUserName != null and map.externalUserName!= '' ">AND external_user_name = #{map.externalUserName}</if>
             <if test="map.scheduleStartTime != null">AND send_time &gt;= #{map.scheduleStartTime}</if>
             <if test="map.scheduleEndTime != null">AND send_time &lt;=  #{map.scheduleEndTime}</if>
+            <if test="map.qwUseridByList != null">AND qw_userid IN
+                <foreach collection="map.qwUseridByList" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach></if>
         </where>
         ORDER BY send_time desc,real_send_time desc