Prechádzať zdrojové kódy

销售角色管理 到总后台/三猫销售账号过时间/总后台课程同步不加官方群发/音色自动转为语音类型修复

三七 1 týždeň pred
rodič
commit
9e0dc81e0b
22 zmenil súbory, kde vykonal 406 pridanie a 60 odobranie
  1. 14 0
      fs-admin/src/main/java/com/fs/company/controller/CompanyMenuController.java
  2. 109 11
      fs-admin/src/main/java/com/fs/company/controller/CompanyRoleController.java
  3. 56 3
      fs-admin/src/main/java/com/fs/company/controller/CompanyUserAllController.java
  4. 1 0
      fs-admin/src/main/java/com/fs/qw/qwTask/qwTask.java
  5. 8 0
      fs-company/src/main/java/com/fs/company/controller/company/CompanyUserController.java
  6. 5 2
      fs-service/src/main/java/com/fs/company/domain/CompanyRole.java
  7. 16 0
      fs-service/src/main/java/com/fs/company/domain/CompanyUser.java
  8. 7 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyFsUserMapper.java
  9. 12 0
      fs-service/src/main/java/com/fs/company/param/VcCompanyUser.java
  10. 26 0
      fs-service/src/main/java/com/fs/company/param/VcCompanyUserParam.java
  11. 10 4
      fs-service/src/main/java/com/fs/company/service/ICompanyUserService.java
  12. 1 1
      fs-service/src/main/java/com/fs/company/service/impl/CompanyRoleServiceImpl.java
  13. 34 4
      fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java
  14. 5 0
      fs-service/src/main/java/com/fs/company/vo/CompanyUserQwListVO.java
  15. 41 27
      fs-service/src/main/java/com/fs/qw/vo/QwExternalContactVO.java
  16. 1 1
      fs-service/src/main/java/com/fs/sop/service/impl/QwSopTempServiceImpl.java
  17. 9 0
      fs-service/src/main/resources/db/changelog/changes/20260613-live-user-add-is-del.sql
  18. 32 0
      fs-service/src/main/resources/mapper/company/CompanyFsUserMapper.xml
  19. 7 7
      fs-service/src/main/resources/mapper/company/CompanyRoleMenuMapper.xml
  20. 4 0
      fs-service/src/main/resources/mapper/company/CompanyUserMapper.xml
  21. 2 0
      fs-service/src/main/resources/mapper/his/FsUserMapper.xml
  22. 6 0
      fs-service/src/main/resources/mapper/sop/QwSopTempVoiceMapper.xml

+ 14 - 0
fs-admin/src/main/java/com/fs/company/controller/CompanyMenuController.java

@@ -118,4 +118,18 @@ public class CompanyMenuController extends BaseController
         return AjaxResult.success(companyMenuService.buildMenuTreeSelect(menus));
     }
 
+    /**
+     * 加载对应角色菜单列表树
+     */
+    @GetMapping(value = "/roleMenuTreeselect/{roleId}")
+    public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        CompanyMenu companyMenu = new CompanyMenu();
+        List<CompanyMenu> menus = companyMenuService.selectMenuList(companyMenu,loginUser.getUser().getUserId(),"00");
+        AjaxResult ajax = AjaxResult.success();
+        ajax.put("checkedKeys", companyMenuService.selectMenuListByRoleId(roleId));
+        ajax.put("menus", companyMenuService.buildMenuTreeSelect(menus));
+        return ajax;
+    }
 }

+ 109 - 11
fs-admin/src/main/java/com/fs/company/controller/CompanyRoleController.java

@@ -1,17 +1,28 @@
 package com.fs.company.controller;
 
 import com.fs.common.annotation.Log;
+import com.fs.common.constant.UserConstants;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.model.LoginUser;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.SecurityUtils;
+import com.fs.common.utils.ServletUtils;
+import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.company.domain.CompanyMenu;
 import com.fs.company.domain.CompanyRole;
+import com.fs.company.service.ICompanyMenuService;
 import com.fs.company.service.ICompanyRoleService;
+import com.fs.company.service.ICompanyUserService;
+import com.fs.framework.web.service.TokenService;
+import liquibase.pro.packaged.R;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -27,15 +38,28 @@ public class CompanyRoleController extends BaseController
     @Autowired
     private ICompanyRoleService companyRoleService;
 
+    @Autowired
+    private ICompanyRoleService roleService;
+
+    @Autowired
+    private ICompanyUserService userService;
+
+    @Autowired
+    private ICompanyMenuService menuService;
+
+    @Autowired
+    private TokenService tokenService;
+
     /**
      * 查询角色信息列表
      */
     @PreAuthorize("@ss.hasPermi('company:companyRole:list')")
     @GetMapping("/list")
-    public TableDataInfo list(CompanyRole companyRole)
+    public TableDataInfo list(CompanyRole role)
     {
+
         startPage();
-        List<CompanyRole> list = companyRoleService.selectCompanyRoleList(companyRole);
+        List<CompanyRole> list = roleService.selectCompanyRoleList(role);
         return getDataTable(list);
     }
 
@@ -45,11 +69,11 @@ public class CompanyRoleController extends BaseController
     @PreAuthorize("@ss.hasPermi('company:companyRole:export')")
     @Log(title = "角色信息", businessType = BusinessType.EXPORT)
     @GetMapping("/export")
-    public AjaxResult export(CompanyRole companyRole)
+    public AjaxResult export(CompanyRole role)
     {
-        List<CompanyRole> list = companyRoleService.selectCompanyRoleList(companyRole);
+        List<CompanyRole> list = roleService.selectCompanyRoleList(role);
         ExcelUtil<CompanyRole> util = new ExcelUtil<CompanyRole>(CompanyRole.class);
-        return util.exportExcel(list, "companyRole");
+        return util.exportExcel(list, "销售角色数据");
     }
 
     /**
@@ -68,20 +92,80 @@ public class CompanyRoleController extends BaseController
     @PreAuthorize("@ss.hasPermi('company:companyRole:add')")
     @Log(title = "角色信息", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@RequestBody CompanyRole companyRole)
+    public AjaxResult add(@RequestBody CompanyRole role)
     {
-        return toAjax(companyRoleService.insertCompanyRole(companyRole));
+        role.setCreateTime(new Date());
+        if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
+        {
+            return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
+        }
+        else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role)))
+        {
+            return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
+        }
+        role.setCreateBy(SecurityUtils.getUsername());
+        return toAjax(roleService.insertRole(role));
     }
 
     /**
      * 修改角色信息
      */
     @PreAuthorize("@ss.hasPermi('company:companyRole:edit')")
-    @Log(title = "角色信息", businessType = BusinessType.UPDATE)
+    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult edit(@RequestBody CompanyRole companyRole)
+    public AjaxResult edit(@RequestBody CompanyRole role)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
+        {
+            return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
+        }
+        else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role)))
+        {
+            return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
+        }
+        role.setUpdateBy(SecurityUtils.getUsername());
+
+        if (roleService.updateRole(role) > 0)
+        {
+            // 更新缓存用户权限(销售端的token不行)
+//            if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin())
+//            {
+//                loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser()));
+//                loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName()));
+//                tokenService.setLoginUser(loginUser);
+//            }
+            return AjaxResult.success();
+        }
+        return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,请联系管理员");
+    }
+
+
+    /**
+     * 修改保存数据权限
+     */
+    @PreAuthorize("@ss.hasPermi('company:companyRole:edit')")
+    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
+    @PutMapping("/dataScope")
+    public AjaxResult dataScope(@RequestBody CompanyRole role)
+    {
+        return toAjax(roleService.authDataScope(role));
+    }
+
+
+    /**
+     * 状态修改
+     */
+    @PreAuthorize("@ss.hasPermi('company:role:edit')")
+    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
+    @PutMapping("/changeStatus")
+    public AjaxResult changeStatus(@RequestBody CompanyRole role)
     {
-        return toAjax(companyRoleService.updateCompanyRole(companyRole));
+        CompanyRole companyRole=roleService.selectCompanyRoleById(role.getRoleId());
+        if(companyRole.getRoleKey().equals("admin")){
+            return AjaxResult.error("管理员角色不能修改状态");
+        }
+        role.setUpdateBy(SecurityUtils.getUsername());
+        return toAjax(roleService.updateRoleStatus(role));
     }
 
     /**
@@ -92,6 +176,20 @@ public class CompanyRoleController extends BaseController
 	@DeleteMapping("/{roleIds}")
     public AjaxResult remove(@PathVariable Long[] roleIds)
     {
-        return toAjax(companyRoleService.deleteCompanyRoleByIds(roleIds));
+        return toAjax(roleService.deleteRoleByIds(roleIds));
     }
+
+    /**
+     * 获取角色选择框列表
+     */
+    @PreAuthorize("@ss.hasPermi('company:role:query')")
+    @GetMapping("/optionselect/{companyId}")
+    public AjaxResult optionselect(@PathVariable Long companyId)
+    {
+        CompanyRole role=new CompanyRole();
+        role.setCompanyId(companyId);
+        return AjaxResult.success(roleService.selectCompanyRoleList(role));
+    }
+
+
 }

+ 56 - 3
fs-admin/src/main/java/com/fs/company/controller/CompanyUserAllController.java

@@ -19,9 +19,8 @@ import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.domain.*;
-import com.fs.company.param.CompanyUserAreaParam;
-import com.fs.company.param.CompanyUserCodeParam;
-import com.fs.company.param.CompanyUserQwParam;
+import com.fs.company.mapper.CompanyFsUserMapper;
+import com.fs.company.param.*;
 import com.fs.company.service.*;
 import com.fs.company.vo.BatchUserRolesVO;
 import com.fs.company.vo.CompanyUserImportVO;
@@ -47,6 +46,7 @@ import com.fs.voice.utils.StringUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.ApiOperation;
+import liquibase.pro.packaged.S;
 import org.json.JSONArray;
 import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -103,6 +103,7 @@ public class CompanyUserAllController extends BaseController {
     @Autowired
     private TokenService tokenService;
 
+
     private static final String appLink = "https://jump.ylrztop.com/jumpapp/pages/index/index?link=";
 
 
@@ -124,6 +125,13 @@ public class CompanyUserAllController extends BaseController {
             for (CompanyUserQwListVO companyUserQwListVO : list) {
                 CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
                     CompanyUserDelayTime companyUserDelayTime = companyUserDelayTimeService.selectCompanyUserDelayTimeByCompanyUser(companyUserQwListVO.getCompanyId(), companyUserQwListVO.getUserId());
+                    VcCompanyUser vcCompanyUser = companyUserService.selectVcCompanyUser(String.valueOf(companyUserQwListVO.getUserId()));
+
+                    if (vcCompanyUser!=null){
+                        companyUserQwListVO.setIsBindVoiceSeat(1);
+                        companyUserQwListVO.setIsRecordVoiceSeat(!StringUtil.strIsNullOrEmpty(vcCompanyUser.getUploadUrl()) ? 1 : 2);
+                    }
+
                     if (ObjectUtil.isEmpty(companyUserDelayTime)) {
                         companyUserQwListVO.setSendDelayTime(sendDelayTime);
                     } else {
@@ -147,6 +155,43 @@ public class CompanyUserAllController extends BaseController {
         return getDataTable(list);
     }
 
+
+
+    /**
+     * 获取所有 没有 有语音席位的账号
+     */
+    @GetMapping("/getAllNotVoiceList")
+    public TableDataInfo getAllNotVoiceList(VcCompanyUserParam param) {
+        startPage();
+
+        List<VcCompanyUser> vcCompanyUsers = companyUserService.getAllNotVoiceList(param.getCompanyUserId());
+
+        return getDataTable(vcCompanyUsers);
+    }
+
+    /**
+    * 获取所有 已经 有语音席位的账号
+    */
+    @GetMapping("/getAllVoiceList")
+    public TableDataInfo getAllVoiceList(VcCompanyUserParam param) {
+        startPage();
+
+        List<VcCompanyUser> vcCompanyUsers = companyUserService.selectAllVcCompanyUser(param.getCompanyUserId());
+
+        return getDataTable(vcCompanyUsers);
+    }
+
+    /**
+    * 转换语音席位
+    */
+    @PostMapping("/transferVoiceCompanyUserId")
+    public R transferVoiceCompanyUserId(@RequestBody VcCompanyUserParam param) {
+
+        return   companyUserService.transferVoiceCompanyUserId(param);
+
+    }
+
+
     @Log(title = "用户管理导出", businessType = BusinessType.EXPORT)
     @PreAuthorize("@ss.hasPermi('company:user:export')")
     @GetMapping("/export")
@@ -264,6 +309,14 @@ public class CompanyUserAllController extends BaseController {
         user.setCreateBy(SecurityUtils.getUsername());
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
         user.setCreateTime(new Date());
+
+        Date createTime = new Date();
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(createTime);
+        cal.add(Calendar.YEAR, 1); // 加1年
+        Date expirationTime = cal.getTime();
+        user.setExpirationTime(expirationTime);
+
         user.setUserType("01");//一般用户
         user.setIsAudit(1);
         return toAjax(companyUserService.insertUser(user));

+ 1 - 0
fs-admin/src/main/java/com/fs/qw/qwTask/qwTask.java

@@ -460,6 +460,7 @@ public class qwTask {
                 item.setVoiceUrl(audioVO.getUrl());
                 item.setDuration(audioVO.getDuration());
                 item.setUserVoiceUrl(audioVO.getWavUrl());
+                item.setRecordType(1);
                 QwUser user = qwUserMapper.selectQwUserconvertSopVoice(item.getCompanyUserId());
                 ttsServiceImpl.ttsChargeByCount(vcCompanyUser,audioVO,user);
 

+ 8 - 0
fs-company/src/main/java/com/fs/company/controller/company/CompanyUserController.java

@@ -365,6 +365,14 @@ public class CompanyUserController extends BaseController {
         user.setCreateBy(SecurityUtils.getUsername());
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
         user.setCreateTime(new Date());
+
+        Date createTime = new Date();
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(createTime);
+        cal.add(Calendar.YEAR, 1); // 加1年
+        Date updateTime = cal.getTime();
+        user.setUpdateTime(updateTime);
+
         user.setUserType("01");//一般用户
         user.setIsAudit(1);
         return toAjax(companyUserService.insertUser(user));

+ 5 - 2
fs-service/src/main/java/com/fs/company/domain/CompanyRole.java

@@ -5,9 +5,11 @@ import com.fs.common.core.domain.BaseEntity;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 
+import javax.validation.constraints.NotNull;
+
 /**
  * 角色信息对象 company_role
- * 
+ *
  * @author fs
  * @date 2021-05-25
  */
@@ -18,7 +20,8 @@ public class CompanyRole extends BaseEntity
     /** 角色ID */
     private Long roleId;
 
-    /** 小区ID */
+    /** 销售公司ID */
+    @NotNull(message="销售公司id必传")
     private Long companyId;
 
     /** 角色名称 */

+ 16 - 0
fs-service/src/main/java/com/fs/company/domain/CompanyUser.java

@@ -1,5 +1,6 @@
 package com.fs.company.domain;
 
+import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fs.common.annotation.Excel;
@@ -216,6 +217,21 @@ public class CompanyUser extends BaseEntity
 
     private Long isCustomerVoice;
 
+
+
+    /** 账号过期时间 */
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date expirationTime;
+
+    public Date getExpirationTime() {
+        return expirationTime;
+    }
+
+    public void setExpirationTime(Date expirationTime) {
+        this.expirationTime = expirationTime;
+    }
+
     public String getFsUserId() {
         return fsUserId;
     }

+ 7 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyFsUserMapper.java

@@ -2,6 +2,7 @@ package com.fs.company.mapper;
 
 import com.fs.company.domain.CompanyFsUser;
 import com.fs.company.param.VcCompanyUser;
+import com.fs.company.param.VcCompanyUserParam;
 import com.fs.his.domain.FsUser;
 import com.fs.his.vo.CompanyUserBindUserVO;
 import org.apache.ibatis.annotations.Delete;
@@ -56,4 +57,10 @@ public interface CompanyFsUserMapper {
 
     @Select("select id,speaker_id,company_user_id,upload_url from vc_company_user where company_user_id=#{companyUserId}")
     VcCompanyUser selectVcCompanyUser(@Param("companyUserId") String companyUserId);
+
+    List<VcCompanyUser> selectAllVcCompanyUser(@Param("companyUserId") String companyUserId);
+
+    List<VcCompanyUser> getAllNotVoiceList(@Param("companyUserId") String companyUserId);
+
+    void updateVcComapnyUser(@Param("data") VcCompanyUserParam param);
 }

+ 12 - 0
fs-service/src/main/java/com/fs/company/param/VcCompanyUser.java

@@ -61,6 +61,18 @@ public class VcCompanyUser implements Serializable {
     @TableField("company_user_id")
     private Long companyUserId;
 
+    @TableField(exist = false)
+    private String companyUserName;
+
+    @TableField(exist = false)
+    private Long userId;
+
+    @TableField(exist = false)
+    private String userName;
+
+    @TableField(exist = false)
+    private String nickName;
+
     /**
      * 最后一次文字转语音生成的url
      */

+ 26 - 0
fs-service/src/main/java/com/fs/company/param/VcCompanyUserParam.java

@@ -0,0 +1,26 @@
+package com.fs.company.param;
+
+import com.fs.common.core.domain.BaseEntity;
+import lombok.Data;
+
+@Data
+public class VcCompanyUserParam extends  BaseEntity {
+
+    /**
+    * 占有的语音席位的销售账号
+    */
+    private Long companyUserIdOld;
+
+    /**
+    * 要转给 的销售账号
+    */
+    private Long companyUserIdNew;
+
+
+    private String companyUserId;
+    private String companyUserName;
+
+    private Integer pageNum;
+
+    private Integer pageSize;
+}

+ 10 - 4
fs-service/src/main/java/com/fs/company/service/ICompanyUserService.java

@@ -3,10 +3,7 @@ package com.fs.company.service;
 import com.fs.common.core.domain.R;
 import com.fs.company.domain.Company;
 import com.fs.company.domain.CompanyUser;
-import com.fs.company.param.CompanyUserAreaParam;
-import com.fs.company.param.CompanyUserCodeParam;
-import com.fs.company.param.CompanyUserQwParam;
-import com.fs.company.param.VcCompanyUser;
+import com.fs.company.param.*;
 import com.fs.company.vo.*;
 import com.fs.his.domain.FsUser;
 import com.fs.his.vo.CitysAreaVO;
@@ -318,5 +315,14 @@ public interface ICompanyUserService {
     /**
      * 获取所有公司员工列表
      * */
+
     List<CompanyUser> getAllCompanyUserListNoParams();
+
+    VcCompanyUser selectVcCompanyUser(String companyUserId);
+
+    List<VcCompanyUser>  selectAllVcCompanyUser(String companyUserId);
+
+    List<VcCompanyUser>  getAllNotVoiceList(String companyUserId);
+
+    R  transferVoiceCompanyUserId(VcCompanyUserParam param);
 }

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

@@ -221,7 +221,7 @@ public class CompanyRoleServiceImpl implements ICompanyRoleService
         }
         if (list.size() > 0)
         {
-            rows = roleMenuMapper.batchRoleMenu(list);
+            roleMenuMapper.batchRoleMenu(list);
         }
         return rows;
     }

+ 34 - 4
fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java

@@ -17,10 +17,7 @@ import com.fs.common.exception.file.OssException;
 import com.fs.common.utils.*;
 import com.fs.company.domain.*;
 import com.fs.company.mapper.*;
-import com.fs.company.param.CompanyUserAreaParam;
-import com.fs.company.param.CompanyUserCodeParam;
-import com.fs.company.param.CompanyUserQwParam;
-import com.fs.company.param.VcCompanyUser;
+import com.fs.company.param.*;
 import com.fs.company.service.*;
 import com.fs.company.vo.*;
 import com.fs.config.cloud.CloudHostProper;
@@ -1252,4 +1249,37 @@ public class CompanyUserServiceImpl implements ICompanyUserService
         return companyUserList;
     }
 
+    @Override
+    public VcCompanyUser selectVcCompanyUser(String companyUserId) {
+        return companyFsUserMapper.selectVcCompanyUser(companyUserId);
+    }
+
+    @Override
+    public List<VcCompanyUser> selectAllVcCompanyUser(String companyUserId) {
+        return companyFsUserMapper.selectAllVcCompanyUser(companyUserId);
+    }
+
+    @Override
+    public List<VcCompanyUser> getAllNotVoiceList(String companyUserId) {
+        return companyFsUserMapper.getAllNotVoiceList(companyUserId);
+    }
+
+    @Override
+    public R transferVoiceCompanyUserId(VcCompanyUserParam param) {
+
+        VcCompanyUser vcCompanyUser = companyFsUserMapper.selectVcCompanyUser(String.valueOf(param.getCompanyUserIdOld()));
+        if (vcCompanyUser == null) {
+            return R.error("原销售账号未绑定 语音席位");
+        }
+
+        VcCompanyUser companyUserNew = companyFsUserMapper.selectVcCompanyUser(String.valueOf(param.getCompanyUserIdNew()));
+        if (companyUserNew != null) {
+            return R.error("要转接的 销售账号 已经有了 语音席位");
+        }
+
+        companyFsUserMapper.updateVcComapnyUser(param);
+
+        return R.ok();
+    }
+
 }

+ 5 - 0
fs-service/src/main/java/com/fs/company/vo/CompanyUserQwListVO.java

@@ -77,6 +77,11 @@ public class CompanyUserQwListVO extends BaseEntity {
     @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd")
     private Date loginDate;
 
+    /** 账号过期时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "账号过期时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date expirationTime;
+
 
     /** 移动端登陆token */
     @Excel(name = "移动端登陆token")

+ 41 - 27
fs-service/src/main/java/com/fs/qw/vo/QwExternalContactVO.java

@@ -9,28 +9,60 @@ import java.util.List;
 
 @Data
 public class QwExternalContactVO {
+
+
+
     private Long id;
 
+    /** 外部联系人id */
+    @Excel(name = "外部联系人id")
+    private String externalUserId;
+
+    /** 名称 */
+    @Excel(name = "名称")
+    private String name;
+
+    /** 头像 */
+    @Excel(name = "头像")
+    private String avatar;
+
+
+    /** 描述信息 */
+    @Excel(name = "描述信息")
+    private String description;
+
+
     /** 属于用户id */
     @Excel(name = "属于用户id")
     private String userId;
 
     /**
-    *  属于用户名称
-    */
+     *  属于用户名称
+     */
     @Excel(name = "销售企微昵称")
     private String qwUserName;
 
+    /** 企业id */
+    @Excel(name = "企业id")
+    private String corpId;
+
+    /** 公司id */
+    @Excel(name = "公司id")
+    private Long companyId;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "添加时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @Excel(name = "来源")
+    private Long addWay;
+
     /**
     * 员工所属部门
     */
     private String departmentName;
 
 
-    /** 外部联系人id */
-    @Excel(name = "外部联系人id")
-    private String externalUserId;
-
     private Long companyUserId;
 
     /**
@@ -43,13 +75,6 @@ public class QwExternalContactVO {
     */
     private Long miniUserId;
 
-    /** 名称 */
-    @Excel(name = "名称")
-    private String name;
-
-    /** 头像 */
-    @Excel(name = "头像")
-    private String avatar;
 
     /** 外部联系人的类型1微信用户,2企业微信用户 */
     @Excel(name = "外部联系人的类型1微信用户,2企业微信用户")
@@ -59,9 +84,6 @@ public class QwExternalContactVO {
     @Excel(name = "0-未知 1-男性 2-女性")
     private Long gender;
 
-    /** 描述信息 */
-    @Excel(name = "描述信息")
-    private String description;
 
     /** 标签id */
     //@Excel(name = "标签id")
@@ -79,20 +101,14 @@ public class QwExternalContactVO {
     /** 备注企业名称 */
     @Excel(name = "备注企业名称")
     private String remarkCorpName;
-    @Excel(name = "来源")
-    private Long addWay;
+
+
 
     /** oper用户id */
     @Excel(name = "oper用户id")
     private String operUserid;
 
-    /** 企业id */
-    @Excel(name = "企业id")
-    private String corpId;
 
-    /** 公司id */
-    @Excel(name = "公司id")
-    private Long companyId;
 
     private Integer transferStatus;
     /*状态名称 用于excel导出*/
@@ -100,9 +116,7 @@ public class QwExternalContactVO {
     private String statusName;
     private Integer status;
 
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @Excel(name = "添加时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
+
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @Excel(name = "流失时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date lossTime;

+ 1 - 1
fs-service/src/main/java/com/fs/sop/service/impl/QwSopTempServiceImpl.java

@@ -619,7 +619,7 @@ public class QwSopTempServiceImpl implements IQwSopTempService {
                 rules.setTempId(temp.getId());
                 rules.setName(day.getName());
 
-                if (!"河山医院".equals(cloudHostProper.getCompanyName())){
+                if (!"河山医院".equals(cloudHostProper.getCompanyName()) && !"今正科技".equals(cloudHostProper.getCompanyName())){
                     if (temp.getOpenOfficial().equals("1")) {
                         rules.setIsOfficial(sorts.get() == 0 ? "1" : "0");
                     } else {

+ 9 - 0
fs-service/src/main/resources/db/changelog/changes/20260613-live-user-add-is-del.sql

@@ -260,3 +260,12 @@ WHERE dict_type = 'sys_integral_log_type' AND dict_value = '28';
 ALTER TABLE `fs_miniprogram_sub_notify_task`
     ADD COLUMN `fs_user_id` bigint DEFAULT NULL COMMENT 'fs_user.user_id' AFTER `touser`;
 --rollback ALTER TABLE fs_miniprogram_sub_notify_task DROP COLUMN fs_user_id;
+
+
+--changeset sgw:20260713-company_user_expiration_time
+--preconditions onFail:MARK_RAN
+--precondition-sql-check expectedResult:1 SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'company_user'
+--precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'company_user' AND column_name = 'expiration_time'
+ALTER TABLE company_user
+    ADD COLUMN expiration_time DATETIME DEFAULT NULL COMMENT '账号过期时间';
+--rollback ALTER TABLE company_user DROP COLUMN expiration_time;

+ 32 - 0
fs-service/src/main/resources/mapper/company/CompanyFsUserMapper.xml

@@ -37,6 +37,7 @@
         </set>
         where id = #{id}
     </update>
+
     <select id="selecUserList" resultType="com.fs.his.vo.CompanyUserBindUserVO">
         SELECT
             u.user_id userId,
@@ -79,6 +80,37 @@
                     </foreach>
     </select>
 
+    <select id="selectAllVcCompanyUser" resultType="com.fs.company.param.VcCompanyUser">
+        select vc.id,vc.company_user_id,cu.user_name,cu.nick_name from vc_company_user vc
+            left join company_user cu on vc.company_user_id=cu.user_id
+        <where>
+            vc.company_user_id is not null
+            <if test="companyUserId != null and companyUserId != ''">
+                and vc.company_user_id = #{companyUserId}
+            </if>
+        </where>
+    </select>
 
+    <select id="getAllNotVoiceList" resultType="com.fs.company.param.VcCompanyUser">
+        SELECT
+            cu.user_id as companyUserId,
+            cu.user_name,
+            cu.nick_name
+        FROM
+            company_user cu
+                LEFT JOIN vc_company_user vc ON vc.company_user_id = cu.user_id
+        <where>
+            vc.company_user_id is NULL
+            <if test="companyUserId != null and companyUserId != ''">
+                and cu.user_id = #{companyUserId}
+            </if>
+        </where>
+    </select>
+
+
+    <update id="updateVcComapnyUser">
+        update vc_company_user set company_user_id=#{data.companyUserIdNew} where company_user_id=#{data.companyUserIdOld}
+
+    </update>
 
 </mapper>

+ 7 - 7
fs-service/src/main/resources/mapper/company/CompanyRoleMenuMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fs.company.mapper.CompanyRoleMenuMapper">
-    
+
     <resultMap type="CompanyRoleMenu" id="CompanyRoleMenuResult">
         <result property="roleId"    column="role_id"    />
         <result property="menuId"    column="menu_id"    />
@@ -15,15 +15,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectCompanyRoleMenuList" parameterType="CompanyRoleMenu" resultMap="CompanyRoleMenuResult">
         <include refid="selectCompanyRoleMenuVo"/>
-        <where>  
+        <where>
         </where>
     </select>
-    
+
     <select id="selectCompanyRoleMenuById" parameterType="Long" resultMap="CompanyRoleMenuResult">
         <include refid="selectCompanyRoleMenuVo"/>
         where role_id = #{roleId}
     </select>
-        
+
     <insert id="insertCompanyRoleMenu" parameterType="CompanyRoleMenu">
         insert into company_role_menu
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -49,7 +49,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteCompanyRoleMenuByIds" parameterType="String">
-        delete from company_role_menu where role_id in 
+        delete from company_role_menu where role_id in
         <foreach item="roleId" collection="array" open="(" separator="," close=")">
             #{roleId}
         </foreach>
@@ -64,9 +64,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	</delete>
 
     <insert id="batchRoleMenu">
-        insert into company_role_menu(role_id, menu_id) values
+        insert ignore into company_role_menu(role_id, menu_id) values
         <foreach item="item" index="index" collection="list" separator=",">
             (#{item.roleId},#{item.menuId})
         </foreach>
     </insert>
-</mapper>
+</mapper>

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

@@ -25,6 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="createTime"    column="create_time"    />
         <result property="updateBy"    column="update_by"    />
         <result property="updateTime"    column="update_time"    />
+        <result property="expirationTime"    column="expiration_time"    />
         <result property="token"    column="token"    />
         <result property="remark"    column="remark"    />
         <result property="openId"    column="open_id"    />
@@ -110,6 +111,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         cfu.`status` bindStatus,
         u.cid_server_id,
         u.ai_sip_call_user_id,
+        u.expiration_time,
         xub.account_id
         from
         company_user u
@@ -304,6 +306,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createTime != null">create_time,</if>
             <if test="updateBy != null">update_by,</if>
             <if test="updateTime != null">update_time,</if>
+            <if test="expirationTime != null">expiration_time,</if>
             <if test="token != null">token,</if>
             <if test="remark != null">remark,</if>
             <if test="openId != null">open_id,</if>
@@ -338,6 +341,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createTime != null">#{createTime},</if>
             <if test="updateBy != null">#{updateBy},</if>
             <if test="updateTime != null">#{updateTime},</if>
+            <if test="expirationTime != null">#{expirationTime},</if>
             <if test="token != null">#{token},</if>
             <if test="remark != null">#{remark},</if>
             <if test="openId != null">#{openId},</if>

+ 2 - 0
fs-service/src/main/resources/mapper/his/FsUserMapper.xml

@@ -604,6 +604,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="appId != null">app_id,</if>
             <if test="appOpenId != null">app_open_id,</if>
             <if test="appleKey != null">apple_key,</if>
+            <if test="firstLoginTime != null">first_login_time,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="nickName != null">#{nickName},</if>
@@ -656,6 +657,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="appId != null">#{appId},</if>
             <if test="appOpenId != null">#{appOpenId},</if>
             <if test="appleKey != null">#{appleKey},</if>
+            <if test="firstLoginTime != null">#{firstLoginTime},</if>
          </trim>
     </insert>
 

+ 6 - 0
fs-service/src/main/resources/mapper/sop/QwSopTempVoiceMapper.xml

@@ -197,6 +197,11 @@
                     WHEN #{item.id} THEN #{item.userVoiceUrl}
                 </foreach>
             </trim>
+            <trim prefix="record_type = CASE id" suffix="END,">
+                <foreach collection="list" item="item">
+                    WHEN #{item.id} THEN #{item.recordType}
+                </foreach>
+            </trim>
         </trim>
         where id in
         <foreach collection="list" item="item" open="(" separator="," close=")">
@@ -209,6 +214,7 @@
         where company_user_id = #{companyUserId}
         and record_type =1
         <if test="keyword != null and keyword!='' ">  and voice_txt like concat('%', #{keyword}, '%') </if>
+        order by create_time desc
     </select>