Commit 8f047cd0 authored by hongguangwu's avatar hongguangwu

Merge remote-tracking branch 'origin/MVP1.7.7' into MVP1.7.7

parents b989b140 80393951
...@@ -66,12 +66,6 @@ public class TSettleDomain extends BaseEntity { ...@@ -66,12 +66,6 @@ public class TSettleDomain extends BaseEntity {
@Schema(description = "项目名称") @Schema(description = "项目名称")
private String departName; private String departName;
/**
* 登录账号
*/
@Schema(description = "登录账号")
private String loginName;
/** /**
* 是否是新业务(0是/1否) * 是否是新业务(0是/1否)
*/ */
......
...@@ -78,4 +78,7 @@ public class TEmployeeProjectBelongDeptSearchVo extends EmployeeProjectScpVO { ...@@ -78,4 +78,7 @@ public class TEmployeeProjectBelongDeptSearchVo extends EmployeeProjectScpVO {
@Schema(description = "查询limit 数据条数") @Schema(description = "查询limit 数据条数")
private int limitEnd; private int limitEnd;
@Schema(description = "部门下人员档案数量")
private Integer empNum;
} }
...@@ -26,7 +26,10 @@ import com.yifu.cloud.plus.v1.yifu.archives.vo.TEmployeeProjectBelongDeptSearchV ...@@ -26,7 +26,10 @@ import com.yifu.cloud.plus.v1.yifu.archives.vo.TEmployeeProjectBelongDeptSearchV
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants; import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common; import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R; import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.UserPermissionVo;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser;
import com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog; import com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog;
import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
...@@ -34,6 +37,8 @@ import org.springframework.security.access.prepost.PreAuthorize; ...@@ -34,6 +37,8 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/** /**
...@@ -113,4 +118,70 @@ public class TEmployeeProjectBelongDeptController { ...@@ -113,4 +118,70 @@ public class TEmployeeProjectBelongDeptController {
tEmployeeProjectBelongDeptService.listExport(response,searchVo); tEmployeeProjectBelongDeptService.listExport(response,searchVo);
} }
/**
* 获取指定部门下花名册总数
* @param tEmployeeProjectBelongDept 花名册查询
* @return R<Integer> 花名册总数
* @author chenyuxi
* @since 1.9.7
*/
@GetMapping(value = "/getDeptCount")
public R<Integer> getDeptCount(TEmployeeProjectBelongDeptSearchVo tEmployeeProjectBelongDept) {
if(Common.isEmpty(tEmployeeProjectBelongDept.getEmpDeptId())){
R.failed("所属部门id不能为空");
}
if(Common.isEmpty(tEmployeeProjectBelongDept.getDeptId())){
R.failed("项目ID不能为空");
}
return R.ok(tEmployeeProjectBelongDeptService.getDeptCount(tEmployeeProjectBelongDept));
}
/**
* 根据权限获取对应部门ID下的花名册总数Map
* @param tEmployeeProjectBelongDept 花名册查询
* @return R<Integer> 花名册总数
* @author chenyuxi
* @since 1.9.7
*/
@GetMapping(value = "/getDeptCountMap")
public R<Map<String,Integer>> getDeptCountMap(TEmployeeProjectBelongDeptSearchVo tEmployeeProjectBelongDept) {
if(Common.isEmpty(tEmployeeProjectBelongDept.getDeptId())){
R.failed("项目ID不能为空");
}
YifuUser user = SecurityUtils.getUser();
if (user == null || Common.isEmpty(user.getId())) {
return R.failed(CommonConstants.PLEASE_LOG_IN);
}
List<UserPermissionVo> cspPermList = user.getCspPermMap();
if(Common.isEmpty(cspPermList)){
return R.failed("获取用户权限失败!");
}
// 获取用户在当前项目下的权限
UserPermissionVo authority = null;
for (UserPermissionVo userPermissionVo : cspPermList) {
if(tEmployeeProjectBelongDept.getDeptId().equals(userPermissionVo.getProjectId())){
authority = userPermissionVo;
}
}
if(Common.isEmpty(authority)){
return R.failed("获取用户在当前项目下的权限失败!");
}
return R.ok(tEmployeeProjectBelongDeptService.getDeptCountMap(tEmployeeProjectBelongDept,authority));
}
/**
* 没有关联部门的花名册总数
* @param tEmployeeProjectBelongDept 花名册查询
* @return R<Integer> 花名册总数
* @author chenyuxi
* @since 1.9.7
*/
@GetMapping(value = "/getNoneDeptCount")
public R<Integer> getNoneDeptCount(TEmployeeProjectBelongDeptSearchVo tEmployeeProjectBelongDept) {
if(Common.isEmpty(tEmployeeProjectBelongDept.getDeptId())){
R.failed("项目ID不能为空");
}
return R.ok(tEmployeeProjectBelongDeptService.getNoneDeptCount(tEmployeeProjectBelongDept));
}
} }
...@@ -462,7 +462,6 @@ public class TSettleDomainController { ...@@ -462,7 +462,6 @@ public class TSettleDomainController {
} catch (UnsupportedEncodingException e) { } catch (UnsupportedEncodingException e) {
e.printStackTrace(); e.printStackTrace();
} }
log.error("jsonStr:"+jsonStr);
List<TDomainUpCsVo> list= JSONObject.parseArray(jsonStr, TDomainUpCsVo.class); List<TDomainUpCsVo> list= JSONObject.parseArray(jsonStr, TDomainUpCsVo.class);
return tSettleDomainService.updateProjectCsInfo(list); return tSettleDomainService.updateProjectCsInfo(list);
} }
......
...@@ -27,6 +27,7 @@ import org.apache.ibatis.annotations.Mapper; ...@@ -27,6 +27,7 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* 项目档案所属部门表 * 项目档案所属部门表
...@@ -53,4 +54,13 @@ public interface TEmployeeProjectBelongDeptMapper extends BaseMapper<TEmployeePr ...@@ -53,4 +54,13 @@ public interface TEmployeeProjectBelongDeptMapper extends BaseMapper<TEmployeePr
List<EmployeeProjectScpVO> getTEmployeeProjectBelongDeptList( List<EmployeeProjectScpVO> getTEmployeeProjectBelongDeptList(
@Param("tEmployeeProjectBelongDept") TEmployeeProjectBelongDeptSearchVo tEmployeeProjectBelongDept); @Param("tEmployeeProjectBelongDept") TEmployeeProjectBelongDeptSearchVo tEmployeeProjectBelongDept);
// 获取部门下花名册总数
int getDeptCount(@Param("tEmployeeProjectBelongDept") TEmployeeProjectBelongDeptSearchVo tEmployeeProjectBelongDept);
// 根据权限获取对应部门ID下的花名册总数Map
List<TEmployeeProjectBelongDeptSearchVo> getDeptCountMap(@Param("deptId") String deptId,@Param("departIdSet") Set<String> departIdSet);
// 没有关联部门的花名册总数
int getNoneDeptCount(@Param("tEmployeeProjectBelongDept") TEmployeeProjectBelongDeptSearchVo tEmployeeProjectBelongDept);
} }
...@@ -23,8 +23,10 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -23,8 +23,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TEmployeeProjectBelongDept; import com.yifu.cloud.plus.v1.yifu.archives.entity.TEmployeeProjectBelongDept;
import com.yifu.cloud.plus.v1.yifu.archives.vo.EmployeeProjectScpVO; import com.yifu.cloud.plus.v1.yifu.archives.vo.EmployeeProjectScpVO;
import com.yifu.cloud.plus.v1.yifu.archives.vo.TEmployeeProjectBelongDeptSearchVo; import com.yifu.cloud.plus.v1.yifu.archives.vo.TEmployeeProjectBelongDeptSearchVo;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.UserPermissionVo;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/** /**
* 项目档案所属部门表 * 项目档案所属部门表
...@@ -50,4 +52,28 @@ public interface TEmployeeProjectBelongDeptService extends IService<TEmployeePro ...@@ -50,4 +52,28 @@ public interface TEmployeeProjectBelongDeptService extends IService<TEmployeePro
**/ **/
void listExport(HttpServletResponse response, TEmployeeProjectBelongDeptSearchVo searchVo); void listExport(HttpServletResponse response, TEmployeeProjectBelongDeptSearchVo searchVo);
/**
* 获取部门下花名册总数
*
* @param tEmployeeProjectBelongDept 花名册查询
* @return Integer 花名册总数
*/
Integer getDeptCount(TEmployeeProjectBelongDeptSearchVo tEmployeeProjectBelongDept);
/**
* 根据权限获取对应部门ID下的花名册总数Map
*
* @param tEmployeeProjectBelongDept 花名册查询
* @return Map<String,Integer> 对应部门ID下的花名册总数Map
*/
Map<String,Integer> getDeptCountMap(TEmployeeProjectBelongDeptSearchVo tEmployeeProjectBelongDept, UserPermissionVo authority);
/**
* 没有关联部门的花名册总数
*
* @param tEmployeeProjectBelongDept 花名册查询
* @return Integer 花名册总数
*/
Integer getNoneDeptCount(TEmployeeProjectBelongDeptSearchVo tEmployeeProjectBelongDept);
} }
...@@ -22,6 +22,7 @@ import com.alibaba.excel.write.metadata.WriteSheet; ...@@ -22,6 +22,7 @@ import com.alibaba.excel.write.metadata.WriteSheet;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.yifu.admin.api.vo.SysDeptVo;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TEmployeeProjectBelongDept; import com.yifu.cloud.plus.v1.yifu.archives.entity.TEmployeeProjectBelongDept;
import com.yifu.cloud.plus.v1.yifu.archives.mapper.TEmployeeProjectBelongDeptMapper; import com.yifu.cloud.plus.v1.yifu.archives.mapper.TEmployeeProjectBelongDeptMapper;
import com.yifu.cloud.plus.v1.yifu.archives.service.TEmployeeProjectBelongDeptService; import com.yifu.cloud.plus.v1.yifu.archives.service.TEmployeeProjectBelongDeptService;
...@@ -34,6 +35,7 @@ import com.yifu.cloud.plus.v1.yifu.common.core.util.Common; ...@@ -34,6 +35,7 @@ import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.DateUtil; import com.yifu.cloud.plus.v1.yifu.common.core.util.DateUtil;
import com.yifu.cloud.plus.v1.yifu.common.core.util.DictConverter; import com.yifu.cloud.plus.v1.yifu.common.core.util.DictConverter;
import com.yifu.cloud.plus.v1.yifu.common.core.util.RedisUtil; import com.yifu.cloud.plus.v1.yifu.common.core.util.RedisUtil;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.UserPermissionVo;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -41,10 +43,8 @@ import javax.servlet.ServletOutputStream; ...@@ -41,10 +43,8 @@ import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap; import java.util.stream.Collectors;
import java.util.List;
import java.util.Map;
/** /**
* 项目档案所属部门表 * 项目档案所属部门表
...@@ -149,4 +149,48 @@ public class TEmployeeProjectBelongDeptServiceImpl extends ServiceImpl<TEmployee ...@@ -149,4 +149,48 @@ public class TEmployeeProjectBelongDeptServiceImpl extends ServiceImpl<TEmployee
} }
} }
/**
* 获取部门下花名册总数
*
* @param tEmployeeProjectBelongDept 花名册查询
* @return Integer 花名册总数
*/
@Override
public Integer getDeptCount(TEmployeeProjectBelongDeptSearchVo tEmployeeProjectBelongDept) {
return baseMapper.getDeptCount(tEmployeeProjectBelongDept);
}
/**
* 根据权限获取对应部门ID下的花名册总数Map
*
* @param tEmployeeProjectBelongDept 花名册查询
* @return Map<String, Integer> 对应部门ID下的花名册总数Map
*/
@Override
public Map<String, Integer> getDeptCountMap(TEmployeeProjectBelongDeptSearchVo tEmployeeProjectBelongDept, UserPermissionVo authority) {
Map<String, Integer> deptCountMap = new HashMap<>();
Set<String> departIdSet = authority.getDepartIdSet();
// 有全部权限
if(authority.isHaveAll()){
departIdSet = new HashSet<>();
}
List<TEmployeeProjectBelongDeptSearchVo> sysDeptList = baseMapper.getDeptCountMap(tEmployeeProjectBelongDept.getDeptId(),departIdSet);
if(Common.isNotNull(sysDeptList)) {
for (TEmployeeProjectBelongDeptSearchVo deptVo : sysDeptList) {
deptCountMap.put(deptVo.getEmpDeptId(),deptVo.getEmpNum());
}
}
return deptCountMap;
}
/**
* 没有关联部门的花名册总数
*
* @param tEmployeeProjectBelongDept 花名册查询
* @return Integer 花名册总数
*/
@Override
public Integer getNoneDeptCount(TEmployeeProjectBelongDeptSearchVo tEmployeeProjectBelongDept) {
return baseMapper.getNoneDeptCount(tEmployeeProjectBelongDept);
}
} }
...@@ -164,5 +164,55 @@ ...@@ -164,5 +164,55 @@
</if> </if>
</select> </select>
<!-- 获取部门下花名册总数 -->
<select id="getDeptCount" resultType="java.lang.Integer">
select count(1)
from t_employee_project_belong_dept b
LEFT JOIN t_employee_project a on b.id = a.id
<where>
a.DELETE_FLAG ='0'
<if test="tEmployeeProjectBelongDept.deptId != null and tEmployeeProjectBelongDept.deptId.trim() != ''">
AND a.DEPT_ID = #{tEmployeeProjectBelongDept.deptId}
</if>
<if test="tEmployeeProjectBelongDept.empDeptId != null and tEmployeeProjectBelongDept.empDeptId.trim() != ''">
AND b.emp_deptid = #{tEmployeeProjectBelongDept.empDeptId}
</if>
</where>
</select>
<!-- 根据权限获取对应部门ID下的花名册总数Map -->
<select id="getDeptCountMap" resultType="com.yifu.cloud.plus.v1.yifu.archives.vo.TEmployeeProjectBelongDeptSearchVo">
select emp_deptid as empDeptId, count(emp_deptid) as empNum
from t_employee_project_belong_dept b
LEFT JOIN t_employee_project a on b.id = a.id
<where>
a.DELETE_FLAG ='0'
<if test="deptId != null and deptId.trim() != ''">
AND a.DEPT_ID = #{deptId}
</if>
<if test="departIdSet != null and departIdSet.size > 0">
AND b.emp_deptid in
<foreach item="idStr" index="index" collection="departIdSet" open="(" separator=","
close=")">
#{idStr}
</foreach>
</if>
</where>
group by emp_deptid
</select>
<!-- 没有关联部门的花名册总数 -->
<select id="getNoneDeptCount" resultType="java.lang.Integer">
select count(1)
from t_employee_project a
LEFT JOIN t_employee_project_belong_dept b on a.id=b.id
<where>
a.DELETE_FLAG ='0' and b.id is null
<if test="tEmployeeProjectBelongDept.deptId != null and tEmployeeProjectBelongDept.deptId.trim() != ''">
AND a.DEPT_ID = #{tEmployeeProjectBelongDept.deptId}
</if>
</where>
</select>
</mapper> </mapper>
...@@ -41,4 +41,10 @@ public class UserPermissionVo implements Serializable { ...@@ -41,4 +41,10 @@ public class UserPermissionVo implements Serializable {
* 关联项目名称 fxj 2025-02-25 * 关联项目名称 fxj 2025-02-25
*/ */
private String projectName; private String projectName;
/**
* 关联项目ID fxj 2025-02-25
*/
private String projectId;
} }
...@@ -2,6 +2,7 @@ package com.yifu.cloud.plus.v1.csp.entity; ...@@ -2,6 +2,7 @@ package com.yifu.cloud.plus.v1.csp.entity;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity; import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
...@@ -82,9 +83,21 @@ public class EmployeeRegistration extends BaseEntity { ...@@ -82,9 +83,21 @@ public class EmployeeRegistration extends BaseEntity {
@Schema(description = "客服姓名") @Schema(description = "客服姓名")
private String customerUsername; private String customerUsername;
@Schema(description = "客服姓名") @Schema(description = "客服登录名")
private String customerUserLoginname;
@Schema(description = "项目立项时间")
@TableField(exist = false)
private LocalDateTime projectCreateTime; private LocalDateTime projectCreateTime;
@Schema(description = "入职登记人数")
@TableField(exist = false)
private int inNum;
@Schema(description = "离职登记人数")
@TableField(exist = false)
private int outNum;
} }
package com.yifu.cloud.plus.v1.csp.config;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CacheConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.SecurityConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.exception.CheckedException;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationServiceException;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* @Author: huyc
* @Date: 2023/7/28
* @Description:
* @return: 企业微信配置
**/
@Configuration
@Data
@Slf4j
public class WxConfig {
@Value("${wx.corpid}")
private String corpid;
@Value("${wx.corpsecret}")
private String corpsecret;
@Value("${wx.agentid}")
private String agentid;
@Value("${wx.authUrl}")
private String authUrl;
@Value("${wx.domainName}")
private String domainName;
@Autowired
private RedisTemplate redisTemplate;
//未授权
private String accossTokenInvliad = "40014";
/**
* @param
* @Author: huyc
* @Date: 2023/7/28
* @Description: 获取微信accos_token
* @return: java.lang.String
**/
public String getAccessToken(RestTemplate restTemplate) {
if (Common.isNotNull(agentid)) {
return this.getToken(restTemplate, CacheConstants.WX_ACCOSS_TOKEN.concat(agentid), corpsecret);
}
return this.getToken(restTemplate, CacheConstants.WX_ACCOSS_TOKEN, corpsecret);
}
public String getAccessToken(RestTemplate restTemplate,String corpsecret)throws AuthenticationServiceException {
if(Common.isEmpty(corpsecret)){
throw new AuthenticationServiceException("未找到对应的corpsecret请联系管理员配置");
}
return this.getToken(restTemplate, CacheConstants.WX_ACCOSS_TOKEN.concat(agentid), corpsecret);
}
/**
* @param restTemplate
* @param tokenKey
* @param corpsecretKey
* @Description: 获取token
* @Author: huyc
* @Date: 2023/7/28 14:46
* @return: java.lang.String
**/
public String getToken(RestTemplate restTemplate,String tokenKey, String corpsecretKey) {
Object wxToken = redisTemplate.opsForValue().get(tokenKey);
if (null != wxToken) {
return String.valueOf(wxToken);
}
String requestTokenUrl = String.format(SecurityConstants.WX_GET_ACCOSS_TOKEN, corpid, corpsecretKey);
String result = restTemplate.getForObject(requestTokenUrl, String.class);
if (Common.isEmpty(result)) {
throw new CheckedException("微信授权失败");
}
String token = JSON.parseObject(result).getString("access_token");
if (Common.isEmpty(token)) {
log.info(result);
throw new CheckedException("获取微信token失败");
}
redisTemplate.opsForValue().set(tokenKey, token);
redisTemplate.expire(tokenKey, 3600, TimeUnit.SECONDS);
return token;
}
/**
* @param
* @Author: huyc
* @Date: 2023/7/28 14:43
* @Description: 移除微信accossToken
* @return: java.lang.String
**/
public void removeAccessToken() {
redisTemplate.delete(CacheConstants.WX_ACCOSS_TOKEN);
}
/**
* @param restTemplate
* @param requestMap 请求内容
* @Author: huyc
* @Date: 2023/7/28 14:48
* @Description: 发送卡片消息
* @return: java.lang.String
**/
public boolean sendTextCard(RestTemplate restTemplate, Map<String, Object> requestMap) {
// 必须加上header说明
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
Gson gson = new Gson();
log.debug("发企业微信===请求:{}", gson.toJson(requestMap));
HttpEntity<String> requestEntity = new HttpEntity<>(gson.toJson(requestMap), headers);
String accessToken = getAccessToken(restTemplate);
ResponseEntity<String> responseEntity = restTemplate.postForEntity(String.format(SecurityConstants.WX_SEND_MESSAGE, accessToken), requestEntity, String.class);
log.debug("发企业微信===返回:{}",JSON.toJSONString(responseEntity));
JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(responseEntity));
JSONObject jsonBody = jsonObject.getJSONObject("body");
if (jsonBody != null) {
String errcode = jsonBody.getString("errcode");
if (accossTokenInvliad.equals(errcode)) {
//删除accossToken缓存
removeAccessToken();
return false;
}
if (!CommonConstants.ZERO_STRING.equals(errcode)) { //非正常,则打印错误日志
log.info(jsonObject.toJSONString());
}
} else {
log.info(jsonObject.toJSONString());
}
return true;
}
/**
* 功能描述: 获取微信accos_token
* @Author: huyc
* @Date: 2023/7/28 14:50
* @return: java.lang.String
*/
public String getAppAccessToken(RestTemplate restTemplate) {
return this.getToken(restTemplate, CacheConstants.WX_ACCOSS_TOKEN, corpsecret);
}
}
...@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; ...@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.csp.config.WxConfig;
import com.yifu.cloud.plus.v1.csp.constants.RegistConstants; import com.yifu.cloud.plus.v1.csp.constants.RegistConstants;
import com.yifu.cloud.plus.v1.csp.entity.EmployeeRegistration; import com.yifu.cloud.plus.v1.csp.entity.EmployeeRegistration;
import com.yifu.cloud.plus.v1.csp.mapper.EmployeeRegistrationMapper; import com.yifu.cloud.plus.v1.csp.mapper.EmployeeRegistrationMapper;
...@@ -21,6 +22,7 @@ import com.yifu.cloud.plus.v1.csp.vo.EmployeeRegistrationExportVo; ...@@ -21,6 +22,7 @@ import com.yifu.cloud.plus.v1.csp.vo.EmployeeRegistrationExportVo;
import com.yifu.cloud.plus.v1.csp.vo.EmployeeRegistrationHrExportVo; import com.yifu.cloud.plus.v1.csp.vo.EmployeeRegistrationHrExportVo;
import com.yifu.cloud.plus.v1.csp.vo.EmployeeRegistrationSearchVo; import com.yifu.cloud.plus.v1.csp.vo.EmployeeRegistrationSearchVo;
import com.yifu.cloud.plus.v1.csp.vo.EmployeeRegistrationVo; import com.yifu.cloud.plus.v1.csp.vo.EmployeeRegistrationVo;
import com.yifu.cloud.plus.v1.yifu.admin.api.entity.SysUser;
import com.yifu.cloud.plus.v1.yifu.archives.vo.EmpProjectStatusVo; import com.yifu.cloud.plus.v1.yifu.archives.vo.EmpProjectStatusVo;
import com.yifu.cloud.plus.v1.yifu.archives.vo.TSettleDomainSelectVo; import com.yifu.cloud.plus.v1.yifu.archives.vo.TSettleDomainSelectVo;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants; import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
...@@ -30,6 +32,7 @@ import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser; ...@@ -30,6 +32,7 @@ import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser;
import com.yifu.cloud.plus.v1.yifu.common.dapr.config.DaprArchivesProperties; import com.yifu.cloud.plus.v1.yifu.common.dapr.config.DaprArchivesProperties;
import com.yifu.cloud.plus.v1.yifu.common.dapr.util.ArchivesDaprUtil; import com.yifu.cloud.plus.v1.yifu.common.dapr.util.ArchivesDaprUtil;
import com.yifu.cloud.plus.v1.yifu.common.dapr.util.HttpDaprUtil; import com.yifu.cloud.plus.v1.yifu.common.dapr.util.HttpDaprUtil;
import com.yifu.cloud.plus.v1.yifu.common.dapr.util.UpmsDaprUtils;
import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils; import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils;
import com.yifu.cloud.plus.v1.yifu.insurances.util.ValidityUtil; import com.yifu.cloud.plus.v1.yifu.insurances.util.ValidityUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
...@@ -37,6 +40,7 @@ import lombok.extern.log4j.Log4j2; ...@@ -37,6 +40,7 @@ import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
...@@ -69,6 +73,12 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr ...@@ -69,6 +73,12 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr
@Autowired @Autowired
private ArchivesDaprUtil archivesDaprUtil; private ArchivesDaprUtil archivesDaprUtil;
@Autowired
private WxConfig wxConfig;
@Autowired
private UpmsDaprUtils upmsDaprUtils;
private final TOperationLogService logService; private final TOperationLogService logService;
/** /**
...@@ -185,8 +195,10 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr ...@@ -185,8 +195,10 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr
YifuUser user = SecurityUtils.getUser(); YifuUser user = SecurityUtils.getUser();
//获取项目信息 //获取项目信息
R<TSettleDomainSelectVo> domainR = archivesDaprUtil.getSettleDomainSelectVoById(deptId); R<TSettleDomainSelectVo> domainR = archivesDaprUtil.getSettleDomainSelectVoById(deptId);
if (null == domainR || null == domainR.getData()) { if (null == domainR || null == domainR.getData()) {
errorMessageList.add(new ErrorMessage(-1, "访问员工基础服务异常:")); errorMessageList.add(new ErrorMessage(-1, "访问员工基础服务异常:"));
return R.ok(errorMessageList);
} }
TSettleDomainSelectVo selectVo = domainR.getData(); TSettleDomainSelectVo selectVo = domainR.getData();
// 写法2: // 写法2:
...@@ -197,7 +209,7 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr ...@@ -197,7 +209,7 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr
/** /**
* 单次缓存的数据量 * 单次缓存的数据量
*/ */
public static final int BATCH_COUNT = CommonConstants.BATCH_COUNT; public static final int BATCH_COUNT = CommonConstants.BATCH_COUNT1;
/** /**
*临时存储 *临时存储
*/ */
...@@ -245,9 +257,10 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr ...@@ -245,9 +257,10 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr
private void importEmployeeRegistration(List<EmployeeRegistrationVo> excelVOList, private void importEmployeeRegistration(List<EmployeeRegistrationVo> excelVOList,
List<ErrorMessage> errorMessageList,YifuUser user,TSettleDomainSelectVo selectVo) { List<ErrorMessage> errorMessageList,YifuUser user,TSettleDomainSelectVo selectVo) {
List<EmployeeRegistration> successList = new ArrayList<>();
Map<String, String> exitMap = new HashMap<>(); Map<String, String> exitMap = new HashMap<>();
EmployeeRegistrationVo excel; EmployeeRegistrationVo excel;
int inNum = 0;
int outNum = 0;
for (int i = 0; i < excelVOList.size(); i++) { for (int i = 0; i < excelVOList.size(); i++) {
excel = excelVOList.get(i); excel = excelVOList.get(i);
// 插入 // 插入
...@@ -273,12 +286,26 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr ...@@ -273,12 +286,26 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr
continue; continue;
} }
initRegistInfo(insert,user, selectVo); initRegistInfo(insert,user, selectVo);
successList.add(insert); //新增记录,新增操作记录
} baseMapper.insert(insert);
// 执行数据插入操作 组装 if (CommonConstants.ONE_STRING.equals(insert.getFeedbackType())) {
if (!successList.isEmpty()) { inNum ++;
this.saveBatch(successList); } else {
} outNum ++;
}
logService.saveLog(insert.getId(), CommonConstants.ZERO_STRING,RegistConstants.MESSAGE_REGIST, LocalDateTime.now(),
insert.getRegistorUsername(),null);
}
//发送企业微信待办
EmployeeRegistration msgRegistration = new EmployeeRegistration();
msgRegistration.setInNum(inNum);
msgRegistration.setOutNum(outNum);
msgRegistration.setCustomerUserLoginname(selectVo.getCsLoginName());
msgRegistration.setDeptName(selectVo.getDepartName());
msgRegistration.setDeptNo(selectVo.getDepartNo());
//企业微信消息提醒
sendMessageToWx(msgRegistration,CommonConstants.THREE_STRING);
} }
public R registAdd(EmployeeRegistration registration) { public R registAdd(EmployeeRegistration registration) {
...@@ -291,6 +318,8 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr ...@@ -291,6 +318,8 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr
} else { } else {
baseMapper.insert(registration); baseMapper.insert(registration);
} }
//企业微信消息提醒
sendMessageToWx(registration,registration.getFeedbackType());
//操作记录 //操作记录
logService.saveLog(registration.getId(), CommonConstants.ZERO_STRING,RegistConstants.MESSAGE_REGIST, LocalDateTime.now(), logService.saveLog(registration.getId(), CommonConstants.ZERO_STRING,RegistConstants.MESSAGE_REGIST, LocalDateTime.now(),
registration.getRegistorUsername(),null); registration.getRegistorUsername(),null);
...@@ -389,9 +418,62 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr ...@@ -389,9 +418,62 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr
insert.setEmpDeptname(user.getDeptName()); insert.setEmpDeptname(user.getDeptName());
insert.setCustomerPhone(selectVo.getCsPhone()); insert.setCustomerPhone(selectVo.getCsPhone());
insert.setCustomerUsername(selectVo.getCsName()); insert.setCustomerUsername(selectVo.getCsName());
insert.setCustomerUserLoginname(selectVo.getCsLoginName());
insert.setDeptNo(selectVo.getDepartNo()); insert.setDeptNo(selectVo.getDepartNo());
insert.setDeptName(selectVo.getDepartName()); insert.setDeptName(selectVo.getDepartName());
insert.setDeptId(selectVo.getId()); insert.setDeptId(selectVo.getId());
} }
//发送企业微信待办
private void sendMessageToWx(EmployeeRegistration registration, String type) {
//获取前端客服
SysUser user;
R<SysUser> res = upmsDaprUtils.getSimpleUserByLoginName(registration.getCustomerUserLoginname());
if (Common.isNotNull(res) && Common.isNotNull(res.getData())){
user = res.getData();
}else {
return;
}
StringBuilder sendUser = null;
if (Common.isNotKong(user.getWxMessage())) {
sendUser = new StringBuilder(user.getWxMessage());
}
if (sendUser != null) {
RestTemplate restTemplate = new RestTemplate();
Map<String, Object> requestMap = new HashMap<>();
// String authUrl = null;
Map<String, Object> textcard = new HashMap<>();
// authUrl = String.format(SecurityConstants.WX_GET_MESSAGE_AUTH_URL, wxConfig.getCorpid(), wxConfig.getDomainName()+"/auth/oauth/wxLogin", "01"+registration.getId());
StringBuilder description = new StringBuilder();
String title = "";
if (CommonConstants.ONE_STRING.equals(type) || CommonConstants.TWO_STRING.equals(type)) {
title = "人员入职提醒";
description.append(CommonConstants.ONE_STRING.equals(type) ? "入职日期:":"离职日期:")
.append(registration.getJoinLeaveDate()).append("<br>");
description.append("项目名称:").append(registration.getDeptName()).append("<br>");
description.append("项目编码:").append(registration.getDeptNo()).append("<br>");
description.append("员工姓名:").append(registration.getEmployeeName()).append("<br>");
description.append("身份证号:").append(registration.getEmpIdcard()).append("<br>");
description.append("手机号码:").append(registration.getEmpPhone()).append("<br>");
} else {
title = "人员批量入离职提醒";
description.append("项目名称:").append(registration.getDeptName()).append("<br>");
description.append("项目编码:").append(registration.getDeptNo()).append("<br>");
description.append("入职人数:").append(registration.getInNum()).append("<br>");
description.append("离职人数:").append(registration.getOutNum()).append("<br>");
}
textcard.put("title", title);
// textcard.put("url", authUrl);
textcard.put("description", description.toString());
requestMap.put("touser", sendUser);
requestMap.put("agentid", wxConfig.getAgentid());
requestMap.put("msgtype", "textcard");
requestMap.put("textcard", textcard);
// 必须加上header说明
if (!wxConfig.sendTextCard(restTemplate, requestMap)) {
wxConfig.sendTextCard(restTemplate, requestMap);
}
}
}
} }
...@@ -38,3 +38,10 @@ security: ...@@ -38,3 +38,10 @@ security:
- /v3/api-docs - /v3/api-docs
- /actuator/** - /actuator/**
- /swagger-ui/** - /swagger-ui/**
wx:
corpid: wwbcb090af0dfe50e5
corpsecret: R0nKkvsY-oF41fuQvUXZ-kFG3_g_Ce0bpZt6mByx524
agentid: 1000009
authUrl: https://wx.worfu.com/yifu-auth/method/oauth/wxLogin
domainName: https://wx.worfu.com
\ No newline at end of file
...@@ -38,3 +38,10 @@ security: ...@@ -38,3 +38,10 @@ security:
- /v3/api-docs - /v3/api-docs
- /actuator/** - /actuator/**
- /swagger-ui/** - /swagger-ui/**
wx:
corpid: wwbcb090af0dfe50e5
corpsecret: 16kqEL_eU-ARwYyqLgEBWHgxm8gXVnkzv_eJMLy9NpU
agentid: 1000010
authUrl: https://test-wx.worfu.com/yifu-auth/method/oauth/wxLogin
domainName: https://test-wx.worfu.com
...@@ -423,7 +423,7 @@ public class TInsuranceUnpurchaseApplyServiceImpl extends ServiceImpl<TInsurance ...@@ -423,7 +423,7 @@ public class TInsuranceUnpurchaseApplyServiceImpl extends ServiceImpl<TInsurance
submitAuditRecord.setEntityName(tInsuranceUnpurchaseApply.getApplyNo()); submitAuditRecord.setEntityName(tInsuranceUnpurchaseApply.getApplyNo());
auditRecordService.save(submitAuditRecord); auditRecordService.save(submitAuditRecord);
} }
if(CommonConstants.TWO_STRING.equals(tInsuranceUnpurchaseApply.getReasonType())){ if(CommonConstants.TWO_STRING.equals(tInsuranceUnpurchaseApply.getReasonType()) && CommonConstants.THREE_STRING.equals(tInsuranceUnpurchaseApply.getStatus())){
// 是“人员已离职”并且 申请已审核通过 // 是“人员已离职”并且 申请已审核通过
// 记录提交审核日志 // 记录提交审核日志
TAuditRecord submitAuditRecord = new TAuditRecord(); TAuditRecord submitAuditRecord = new TAuditRecord();
......
...@@ -156,7 +156,7 @@ public class TSalaryAccountServiceImpl extends ServiceImpl<TSalaryAccountMapper, ...@@ -156,7 +156,7 @@ public class TSalaryAccountServiceImpl extends ServiceImpl<TSalaryAccountMapper,
response.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8");
response.setHeader(CommonConstants.CONTENT_DISPOSITION, CommonConstants.ATTACHMENT_FILENAME + URLEncoder.encode(fileName, "UTF-8")); response.setHeader(CommonConstants.CONTENT_DISPOSITION, CommonConstants.ATTACHMENT_FILENAME + URLEncoder.encode(fileName, "UTF-8"));
//非管理员导出 大于100W 提示“导出量过大,请选择更多查询条件!如果确定要导出这些数据请联系系统管理员操作” //非管理员导出 大于100W 提示“导出量过大,请选择更多查询条件!如果确定要导出这些数据请联系系统管理员操作”
if (count > 150000) { if (count > 1000000) {
out.write(CommonConstants.SOCIAL_EXPORT_LIMIT.getBytes("GBK")); out.write(CommonConstants.SOCIAL_EXPORT_LIMIT.getBytes("GBK"));
out.close(); out.close();
return; return;
...@@ -234,7 +234,7 @@ public class TSalaryAccountServiceImpl extends ServiceImpl<TSalaryAccountMapper, ...@@ -234,7 +234,7 @@ public class TSalaryAccountServiceImpl extends ServiceImpl<TSalaryAccountMapper,
response.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8");
response.setHeader(CommonConstants.CONTENT_DISPOSITION, CommonConstants.ATTACHMENT_FILENAME + URLEncoder.encode(fileName, "UTF-8")); response.setHeader(CommonConstants.CONTENT_DISPOSITION, CommonConstants.ATTACHMENT_FILENAME + URLEncoder.encode(fileName, "UTF-8"));
//非管理员导出 大于100W 提示“导出量过大,请选择更多查询条件!如果确定要导出这些数据请联系系统管理员操作” //非管理员导出 大于100W 提示“导出量过大,请选择更多查询条件!如果确定要导出这些数据请联系系统管理员操作”
if (count > 150000) { if (count > 600000) {
out.write(CommonConstants.SOCIAL_EXPORT_LIMIT.getBytes("GBK")); out.write(CommonConstants.SOCIAL_EXPORT_LIMIT.getBytes("GBK"));
out.close(); out.close();
return; return;
......
...@@ -57,6 +57,10 @@ public class SysUserDeptPermission extends Model<SysUserDeptPermission> { ...@@ -57,6 +57,10 @@ public class SysUserDeptPermission extends Model<SysUserDeptPermission> {
@Schema(description = "关联项目名称") @Schema(description = "关联项目名称")
private String projectName; private String projectName;
@NotBlank(message = "关联项目ID 不能为空")
@Schema(description = "关联项目ID")
private String projectId;
@Schema(description = "归属系统 yifu-mvp、yifu-csp") @Schema(description = "归属系统 yifu-mvp、yifu-csp")
private String client; private String client;
......
...@@ -6,6 +6,8 @@ import lombok.Data; ...@@ -6,6 +6,8 @@ import lombok.Data;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set;
/** /**
* 客户服务平台——部门包装类 * 客户服务平台——部门包装类
...@@ -28,4 +30,14 @@ public class SysDeptVo extends SysDept { ...@@ -28,4 +30,14 @@ public class SysDeptVo extends SysDept {
* 部门人数 * 部门人数
*/ */
private String peopleNum; private String peopleNum;
/**
* 花名册部门对应的人数
*/
private Map<String,Integer> deptPeopleNumMap;
/**
* 部门ID集合
*/
private Set<String> departIdSet;
} }
...@@ -79,6 +79,10 @@ public class UserCspVO implements Serializable { ...@@ -79,6 +79,10 @@ public class UserCspVO implements Serializable {
@Schema(description = "关联项目名称") @Schema(description = "关联项目名称")
private String projectName; private String projectName;
@NotBlank(message = "关联项目ID 不能为空")
@Schema(description = "关联项目ID")
private String projectId;
@Schema(description = "归属系统 0 yifu-mvp 1 yifu-csp") @Schema(description = "归属系统 0 yifu-mvp 1 yifu-csp")
private String client; private String client;
......
...@@ -25,8 +25,11 @@ import com.yifu.cloud.plus.v1.yifu.admin.service.SysDeptService; ...@@ -25,8 +25,11 @@ import com.yifu.cloud.plus.v1.yifu.admin.service.SysDeptService;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants; import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common; import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R; import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.UserPermissionVo;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser;
import com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog; import com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog;
import com.yifu.cloud.plus.v1.yifu.common.security.annotation.Inner; import com.yifu.cloud.plus.v1.yifu.common.security.annotation.Inner;
import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
...@@ -163,11 +166,13 @@ public class DeptController { ...@@ -163,11 +166,13 @@ public class DeptController {
/** /**
* 客户服务平台——获取部门树(用于下拉选择) * 客户服务平台——获取部门树(用于下拉选择)
* @return 树形菜单 * @return 树形菜单
* @author chenyuxi
* @since 1.9.7
*/ */
@GetMapping(value = "/csp/list") @GetMapping(value = "/csp/list")
public R<List<DeptTreeSelectVO>> cspList(SysDeptVo dept) { public R<List<DeptTreeSelectVO>> cspList(SysDeptVo dept) {
if(Common.isEmpty(dept.getProjectNo())){ if(Common.isEmpty(dept.getProjectNo())){
R.failed("项目编码不能为空"); return R.failed("项目编码不能为空");
} }
return R.ok(sysDeptService.cspDeptTreeSelect(dept)); return R.ok(sysDeptService.cspDeptTreeSelect(dept));
} }
...@@ -175,29 +180,67 @@ public class DeptController { ...@@ -175,29 +180,67 @@ public class DeptController {
/** /**
* 客户服务平台——获取部门树(带部门下人数) * 客户服务平台——获取部门树(带部门下人数)
* @return 树形菜单 * @return 树形菜单
* @author chenyuxi
* @since 1.9.7
*/ */
@GetMapping(value = "/csp/tree") @GetMapping(value = "/csp/tree")
public R<List<DeptTreeSelectVO>> cspTree(SysDeptVo dept) { public R<List<DeptTreeSelectVO>> cspTree(SysDeptVo dept) {
if(Common.isEmpty(dept.getProjectNo())){ if(Common.isEmpty(dept.getProjectNo())){
R.failed("项目编码不能为空"); return R.failed("项目编码不能为空");
} }
return R.ok(sysDeptService.cspDeptTree(dept)); return R.ok(sysDeptService.cspDeptTree(dept));
} }
/**
* 客户服务平台——获取花名册的部门树(带部门下人数)
* @return 树形菜单
* @author chenyuxi
* @since 1.9.7
*/
@PostMapping(value = "/csp/rosterTree")
public R<List<DeptTreeSelectVO>> cspRosterTree(@RequestBody SysDeptVo dept) {
if(Common.isEmpty(dept.getProjectNo())){
return R.failed("项目编码不能为空");
}
YifuUser user = SecurityUtils.getUser();
if (user == null || Common.isEmpty(user.getId())) {
return R.failed(CommonConstants.PLEASE_LOG_IN);
}
List<UserPermissionVo> cspPermList = user.getCspPermMap();
if(Common.isEmpty(cspPermList)){
return R.failed("获取用户权限失败!");
}
// 获取用户在当前项目下的权限
UserPermissionVo authority = null;
for (UserPermissionVo userPermissionVo : cspPermList) {
if(dept.getProjectNo().equals(userPermissionVo.getProjectNo())){
authority = userPermissionVo;
}
}
if(Common.isEmpty(authority)){
return R.failed("获取用户在当前项目下的权限失败!");
}
return R.ok(sysDeptService.cspRosterTree(dept, authority));
}
/** /**
* 客户服务平台——添加部门 * 客户服务平台——添加部门
* @param sysDept 实体 * @param sysDept 实体
* @return success/false * @return success/false
* @author chenyuxi
* @since 1.9.7
*/ */
@SysLog("客户服务平台——添加部门") @SysLog("客户服务平台——添加部门")
@PostMapping("/csp") @PostMapping("/csp")
public R<String> saveCspDept(@RequestBody SysDept sysDept) { public R<String> saveCspDept(@RequestBody SysDept sysDept) {
if(Common.isEmpty(sysDept.getProjectNo())){ if(Common.isEmpty(sysDept.getProjectNo())){
R.failed("项目编码不能为空"); return R.failed("项目编码不能为空");
} }
// todo 名字长度
if(Common.isEmpty(sysDept.getName())){ if(Common.isEmpty(sysDept.getName())){
R.failed("部门名称不能为空"); return R.failed("部门名称不能为空");
}
if(sysDept.getName().length()>50){
return R.failed("部门名称不能超过50个字");
} }
// 父级不传,默认增顶级部门 // 父级不传,默认增顶级部门
if (Common.isEmpty(sysDept.getParentId())){ if (Common.isEmpty(sysDept.getParentId())){
...@@ -210,15 +253,20 @@ public class DeptController { ...@@ -210,15 +253,20 @@ public class DeptController {
* 客户服务平台——编辑部门 * 客户服务平台——编辑部门
* @param sysDept 实体 * @param sysDept 实体
* @return success/false * @return success/false
* @author chenyuxi
* @since 1.9.7
*/ */
@SysLog("客户服务平台——编辑部门") @SysLog("客户服务平台——编辑部门")
@PutMapping("/csp") @PutMapping("/csp")
public R<String> updateCspDept(@RequestBody SysDept sysDept) { public R<String> updateCspDept(@RequestBody SysDept sysDept) {
if(Common.isEmpty(sysDept.getDeptId())){ if(Common.isEmpty(sysDept.getDeptId())){
R.failed("ID不能为空"); return R.failed("ID不能为空");
} }
if(Common.isEmpty(sysDept.getName())){ if(Common.isEmpty(sysDept.getName())){
R.failed("部门名称不能为空"); return R.failed("部门名称不能为空");
}
if(sysDept.getName().length()>50){
return R.failed("部门名称不能超过50个字");
} }
return sysDeptService.updateCspDept(sysDept); return sysDeptService.updateCspDept(sysDept);
} }
...@@ -227,12 +275,14 @@ public class DeptController { ...@@ -227,12 +275,14 @@ public class DeptController {
* 删除 * 删除
* @param id ID * @param id ID
* @return success/false * @return success/false
* @author chenyuxi
* @since 1.9.7
*/ */
@SysLog("客户服务平台——删除部门") @SysLog("客户服务平台——删除部门")
@DeleteMapping("/csp/{id:\\d+}") @DeleteMapping("/csp/{id:\\d+}")
public R<String> removeCspDeptById(@PathVariable Long id) { public R<String> removeCspDeptById(@PathVariable Long id) {
if(Common.isEmpty(id)){ if(Common.isEmpty(id)){
R.failed("项目Id不能为空"); return R.failed("项目Id不能为空");
} }
return sysDeptService.removeCspDeptById(id); return sysDeptService.removeCspDeptById(id);
} }
...@@ -240,11 +290,13 @@ public class DeptController { ...@@ -240,11 +290,13 @@ public class DeptController {
/** /**
* 客户服务平台——获取项目下部门总数 * 客户服务平台——获取项目下部门总数
* @return R<Integer> 部门总数 * @return R<Integer> 部门总数
* @author chenyuxi
* @since 1.9.7
*/ */
@GetMapping(value = "/csp/getDeptCount") @GetMapping(value = "/csp/getDeptCount")
public R<Integer> cspDeptCount(SysDeptVo dept) { public R<Integer> cspDeptCount(SysDeptVo dept) {
if(Common.isEmpty(dept.getProjectNo())){ if(Common.isEmpty(dept.getProjectNo())){
R.failed("项目编码不能为空"); return R.failed("项目编码不能为空");
} }
return R.ok(sysDeptService.cspDeptCount(dept.getProjectNo())); return R.ok(sysDeptService.cspDeptCount(dept.getProjectNo()));
} }
...@@ -258,4 +310,5 @@ public class DeptController { ...@@ -258,4 +310,5 @@ public class DeptController {
public R<Boolean> cspUpdateDept(@RequestBody SysDeptMoveVo dept) { public R<Boolean> cspUpdateDept(@RequestBody SysDeptMoveVo dept) {
return sysDeptService.cspUpdateDept(dept); return sysDeptService.cspUpdateDept(dept);
} }
} }
...@@ -224,6 +224,18 @@ public class UserController { ...@@ -224,6 +224,18 @@ public class UserController {
return userService.updatePassword(vo); return userService.updatePassword(vo);
} }
/**
* 修改密码
*
* @param vo 用户信息
* @return R
*/
@SysLog("重置密码")
@PostMapping("/resetPassword")
public R<String> resetPassword(@RequestBody UserPasswordVo vo) {
return userService.resetPassword(vo);
}
/** /**
* 分页查询用户 * 分页查询用户
* *
......
...@@ -58,10 +58,10 @@ public class UserDeptPermissionController { ...@@ -58,10 +58,10 @@ public class UserDeptPermissionController {
@GetMapping("/info") @GetMapping("/info")
public R<SysUserDeptPermission> getInfo(SysUserDeptPermission sysUserDeptPermission) { public R<SysUserDeptPermission> getInfo(SysUserDeptPermission sysUserDeptPermission) {
if(Common.isEmpty(sysUserDeptPermission.getProjectNo())){ if(Common.isEmpty(sysUserDeptPermission.getProjectNo())){
R.failed("项目编码不能为空"); return R.failed("项目编码不能为空");
} }
if(Common.isEmpty(sysUserDeptPermission.getUserId())){ if(Common.isEmpty(sysUserDeptPermission.getUserId())){
R.failed("用户ID不能为空"); return R.failed("用户ID不能为空");
} }
return R.ok(sysUserDeptPermissionService.getInfo(sysUserDeptPermission.getProjectNo(),sysUserDeptPermission.getUserId())); return R.ok(sysUserDeptPermissionService.getInfo(sysUserDeptPermission.getProjectNo(),sysUserDeptPermission.getUserId()));
} }
...@@ -75,18 +75,18 @@ public class UserDeptPermissionController { ...@@ -75,18 +75,18 @@ public class UserDeptPermissionController {
@PostMapping("/permission") @PostMapping("/permission")
public R<String> saveUserPermission(@RequestBody SysUserDeptPermission sysUserDeptPermission) { public R<String> saveUserPermission(@RequestBody SysUserDeptPermission sysUserDeptPermission) {
if(Common.isEmpty(sysUserDeptPermission.getProjectNo())){ if(Common.isEmpty(sysUserDeptPermission.getProjectNo())){
R.failed("项目编码不能为空"); return R.failed("项目编码不能为空");
} }
if(Common.isEmpty(sysUserDeptPermission.getUserId())){ if(Common.isEmpty(sysUserDeptPermission.getUserId())){
R.failed("用户ID不能为空"); return R.failed("用户ID不能为空");
} }
if (Common.isEmpty(sysUserDeptPermission.getPermissionsType())){ if (Common.isEmpty(sysUserDeptPermission.getPermissionsType())){
R.failed("数据权限不能为空"); return R.failed("数据权限不能为空");
} }
if (CommonConstants.THREE_STRING.equals(sysUserDeptPermission.getPermissionsType()) if (CommonConstants.THREE_STRING.equals(sysUserDeptPermission.getPermissionsType())
&& Common.isEmpty(sysUserDeptPermission.getAppointDeptScope()) && Common.isEmpty(sysUserDeptPermission.getAppointDeptScope())
){ ){
R.failed("指定部门时,部门范围不能为空"); return R.failed("指定部门时,部门范围不能为空");
} }
return sysUserDeptPermissionService.saveUserPermission(sysUserDeptPermission); return sysUserDeptPermissionService.saveUserPermission(sysUserDeptPermission);
} }
...@@ -100,16 +100,19 @@ public class UserDeptPermissionController { ...@@ -100,16 +100,19 @@ public class UserDeptPermissionController {
@PostMapping("/relation") @PostMapping("/relation")
public R<String> relationUser(@RequestBody SysUserDeptPermission sysUserDeptPermission) { public R<String> relationUser(@RequestBody SysUserDeptPermission sysUserDeptPermission) {
if(Common.isEmpty(sysUserDeptPermission.getProjectNo())){ if(Common.isEmpty(sysUserDeptPermission.getProjectNo())){
R.failed("项目编码不能为空"); return R.failed("项目编码不能为空");
} }
if(Common.isEmpty(sysUserDeptPermission.getProjectName())){ if(Common.isEmpty(sysUserDeptPermission.getProjectName())){
R.failed("项目名称不能为空"); return R.failed("项目名称不能为空");
} }
if(Common.isEmpty(sysUserDeptPermission.getUserId())){ if(Common.isEmpty(sysUserDeptPermission.getUserId())){
R.failed("用户ID不能为空"); return R.failed("用户ID不能为空");
} }
if (Common.isEmpty(sysUserDeptPermission.getDeptId())){ if (Common.isEmpty(sysUserDeptPermission.getDeptId())){
R.failed("部门ID不能为空"); return R.failed("部门ID不能为空");
}
if (Common.isEmpty(sysUserDeptPermission.getProjectId())){
return R.failed("项目ID不能为空");
} }
return sysUserDeptPermissionService.relationUser(sysUserDeptPermission); return sysUserDeptPermissionService.relationUser(sysUserDeptPermission);
} }
......
...@@ -24,6 +24,7 @@ import org.apache.ibatis.annotations.Mapper; ...@@ -24,6 +24,7 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* <p> * <p>
...@@ -63,6 +64,13 @@ public interface SysDeptMapper extends BaseMapper<SysDept> { ...@@ -63,6 +64,13 @@ public interface SysDeptMapper extends BaseMapper<SysDept> {
*/ */
List<SysDeptVo> cspDeptUserList(@Param("dept") SysDeptVo dept); List<SysDeptVo> cspDeptUserList(@Param("dept") SysDeptVo dept);
/**
* 客户服务平台——根据部门集合查询部门管理数据
*
* @param dept 部门信息
*/
List<SysDeptVo> cspDeptListByDeptIdSet(@Param("dept") SysDeptVo dept, @Param("departIdSet") Set<String> departIdSet);
/** /**
* 客户服务平台——查询同项目下同级部门 * 客户服务平台——查询同项目下同级部门
* *
......
...@@ -23,6 +23,7 @@ import com.yifu.cloud.plus.v1.yifu.admin.api.vo.DeptTreeSelectVO; ...@@ -23,6 +23,7 @@ import com.yifu.cloud.plus.v1.yifu.admin.api.vo.DeptTreeSelectVO;
import com.yifu.cloud.plus.v1.yifu.admin.api.vo.SysDeptMoveVo; import com.yifu.cloud.plus.v1.yifu.admin.api.vo.SysDeptMoveVo;
import com.yifu.cloud.plus.v1.yifu.admin.api.vo.SysDeptVo; import com.yifu.cloud.plus.v1.yifu.admin.api.vo.SysDeptVo;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R; import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.UserPermissionVo;
import java.util.List; import java.util.List;
...@@ -100,6 +101,15 @@ public interface SysDeptService extends IService<SysDept> { ...@@ -100,6 +101,15 @@ public interface SysDeptService extends IService<SysDept> {
*/ */
List<DeptTreeSelectVO> cspDeptTree(SysDeptVo dept); List<DeptTreeSelectVO> cspDeptTree(SysDeptVo dept);
/**
* 客户服务平台——获取花名册的部门树(带部门下人数)
*
* @param dept 部门信息
* @param authority 用户在当前项目下的权限
* @return 部门树列表
*/
List<DeptTreeSelectVO> cspRosterTree(SysDeptVo dept, UserPermissionVo authority);
/** /**
* 客户服务平台——添加部门 * 客户服务平台——添加部门
* *
......
...@@ -86,6 +86,15 @@ public interface SysUserService extends IService<SysUser> { ...@@ -86,6 +86,15 @@ public interface SysUserService extends IService<SysUser> {
**/ **/
R<String> updatePassword(UserPasswordVo vo); R<String> updatePassword(UserPasswordVo vo);
/**
* @param vo
* @Description: 重置密码
* @Author: hgw
* @Date: 2025/3/3 9:25
* @return: java.lang.Boolean
**/
R<String> resetPassword(UserPasswordVo vo);
/** /**
* 通过ID查询用户信息 * 通过ID查询用户信息
* @param id 用户ID * @param id 用户ID
......
...@@ -40,6 +40,7 @@ import com.yifu.cloud.plus.v1.yifu.admin.service.SysDeptService; ...@@ -40,6 +40,7 @@ import com.yifu.cloud.plus.v1.yifu.admin.service.SysDeptService;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants; import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common; import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R; import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.UserPermissionVo;
import com.yifu.cloud.plus.v1.yifu.common.ldap.util.LdapUtil; import com.yifu.cloud.plus.v1.yifu.common.ldap.util.LdapUtil;
import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils; import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
...@@ -303,7 +304,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl ...@@ -303,7 +304,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
/** /**
* 客户服务平台——获取部门树(带部门下人数) * 客户服务平台——获取部门树(带部门下人数)
* * @param dept 部门信息
* @return 部门树列表 * @return 部门树列表
*/ */
@Override @Override
...@@ -322,6 +323,60 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl ...@@ -322,6 +323,60 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
return cspDeptTree; return cspDeptTree;
} }
/**
* 客户服务平台——获取部门树(带部门下人数)
* @param dept 部门信息
* @param authority 用户在当前项目下的权限
* @return 部门树列表
*/
@Override
public List<DeptTreeSelectVO> cspRosterTree(SysDeptVo dept, UserPermissionVo authority) {
List<DeptTreeSelectVO> cspDeptTree = new ArrayList<>();
List<SysDeptVo> sysDeptList = new ArrayList<>();
// 有全部权限
if(authority.isHaveAll()){
sysDeptList = baseMapper.cspDeptList(dept);
} else {
// 获取用户部门集合
Set<String> allDepartIdSet = new HashSet<>();
Set<String> departIdSet = authority.getDepartIdSet();
List<SysDeptVo> deptVoList = baseMapper.cspDeptListByDeptIdSet(dept, departIdSet);
if(Common.isNotNull(deptVoList)){
// 将指定部门和祖级部门都存到一个集合里
for (SysDeptVo deptVo : deptVoList) {
// 先存当前部门ID
allDepartIdSet.add(deptVo.getDeptId().toString());
String ancestors = deptVo.getAncestors();
String[] ancestorArr = ancestors.split(CommonConstants.COMMA_STRING);
Set<String> ancestorDeptIdSet = Arrays.stream(ancestorArr).collect(Collectors.toSet());
if(Common.isNotNull(ancestorDeptIdSet)){
allDepartIdSet.addAll(ancestorDeptIdSet);
}
}
}
sysDeptList = baseMapper.cspDeptListByDeptIdSet(dept, allDepartIdSet);
}
if(Common.isNotNull(sysDeptList)){
Map<String,Integer> deptPeopleNumMap = dept.getDeptPeopleNumMap();
for (SysDeptVo deptVo : sysDeptList) {
Integer peopleNum = deptPeopleNumMap.get(deptVo.getDeptId().toString());
if(Common.isEmpty(peopleNum)){
peopleNum = 0;
}
deptVo.setPeopleNum(peopleNum.toString());
}
// 组装部门树
List<SysDeptVo> deptTrees = buildDeptTree(sysDeptList);
if(Common.isNotNull(sysDeptList)){
// 数据库查到的对象到视图对象的映射
cspDeptTree = deptTrees.stream().map(DeptTreeSelectVO::new).collect(Collectors.toList());
}
}
return cspDeptTree;
}
/** /**
* 客户服务平台——组装部门树 * 客户服务平台——组装部门树
* *
......
...@@ -338,6 +338,7 @@ public class SysUserDeptPermissionServiceImpl extends ServiceImpl<SysUserDeptPer ...@@ -338,6 +338,7 @@ public class SysUserDeptPermissionServiceImpl extends ServiceImpl<SysUserDeptPer
authority.setProjectNo(projectNoStr); authority.setProjectNo(projectNoStr);
authority.setProjectName(tPermissionInfo.getProjectName()); authority.setProjectName(tPermissionInfo.getProjectName());
authority.setUserType(tPermissionInfo.getUserType()); authority.setUserType(tPermissionInfo.getUserType());
authority.setProjectId(tPermissionInfo.getProjectId());
if (CommonConstants.ZERO_STRING.equals(tPermissionInfo.getPermissionsType())) { if (CommonConstants.ZERO_STRING.equals(tPermissionInfo.getPermissionsType())) {
// 全部数据 // 全部数据
authority.setHaveAll(true); authority.setHaveAll(true);
...@@ -453,6 +454,7 @@ public class SysUserDeptPermissionServiceImpl extends ServiceImpl<SysUserDeptPer ...@@ -453,6 +454,7 @@ public class SysUserDeptPermissionServiceImpl extends ServiceImpl<SysUserDeptPer
permission.setProjectName(entity.getProjectName()); permission.setProjectName(entity.getProjectName());
permission.setProjectNo(entity.getProjectNo()); permission.setProjectNo(entity.getProjectNo());
permission.setUserType(entity.getUserType()); permission.setUserType(entity.getUserType());
permission.setProjectId(entity.getProjectId());
baseMapper.insert(permission); baseMapper.insert(permission);
if (Common.isNotNull(permission) && Common.isNotNull(permission.getUserId())){ if (Common.isNotNull(permission) && Common.isNotNull(permission.getUserId())){
return R.ok(Boolean.TRUE,CommonConstants.SAVE_SUCCESS); return R.ok(Boolean.TRUE,CommonConstants.SAVE_SUCCESS);
......
...@@ -329,6 +329,20 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl ...@@ -329,6 +329,20 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
return R.ok(); return R.ok();
} }
@Override
@Transactional(rollbackFor = Exception.class)
@CacheEvict(value = CacheConstants.USER_DETAILS, key = "#vo.userName")
public R<String> resetPassword(UserPasswordVo vo) {
SysUser sysUser = this.getOne(Wrappers.<SysUser>query().lambda()
.eq(SysUser::getUserId, vo.getUserId())
.eq(SysUser::getType, CommonConstants.FOUR_STRING));
if (Common.isNotNull(sysUser)) {
sysUser.setPassword(ENCODER.encode("123456"));
}
this.updateById(sysUser);
return R.ok();
}
/** /**
* 查询上级部门的用户信息 * 查询上级部门的用户信息
* @param username 用户名 * @param username 用户名
......
...@@ -93,6 +93,23 @@ ...@@ -93,6 +93,23 @@
order by d.sort_order asc,d.create_time desc order by d.sort_order asc,d.create_time desc
</select> </select>
<select id="cspDeptListByDeptIdSet" resultType="com.yifu.cloud.plus.v1.yifu.admin.api.vo.SysDeptVo">
select d.dept_id, d.name, d.parent_id,d.ancestors,sort_order
from sys_dept d
where d.del_flag = '0'
<if test="dept.projectNo != null and dept.projectNo != ''">
AND d.project_no = #{dept.projectNo}
</if>
<if test="departIdSet != null and departIdSet.size > 0">
AND d.dept_id in
<foreach item="idStr" index="index" collection="departIdSet" open="(" separator=","
close=")">
#{idStr}
</foreach>
</if>
order by d.sort_order asc,d.create_time desc
</select>
<select id="checkDeptNameUnique" resultMap="BaseResultMap"> <select id="checkDeptNameUnique" resultMap="BaseResultMap">
select dept_id,name from sys_dept select dept_id,name from sys_dept
where project_no = #{projectNo} and name=#{deptName} and parent_id = #{parentId} and del_flag = '0' limit 1 where project_no = #{projectNo} and name=#{deptName} and parent_id = #{parentId} and del_flag = '0' limit 1
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
<result column="user_type" property="userType"/> <result column="user_type" property="userType"/>
<result column="permissions_type" property="permissionsType"/> <result column="permissions_type" property="permissionsType"/>
<result column="appoint_dept_scope" property="appointDeptScope"/> <result column="appoint_dept_scope" property="appointDeptScope"/>
<result column="project_id" property="projectId"/>
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
...@@ -40,7 +41,8 @@ ...@@ -40,7 +41,8 @@
a.client, a.client,
a.user_type, a.user_type,
a.permissions_type, a.permissions_type,
a.appoint_dept_scope a.appoint_dept_scope,
a.project_id
</sql> </sql>
<select id="getUserDeptPermission" resultMap="BaseResultMap"> <select id="getUserDeptPermission" resultMap="BaseResultMap">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment