diff --git a/pom.xml b/pom.xml
index 336d33ee..5fc6ee94 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,7 +37,7 @@
2.9.9
2.8.5
1.2.60
- 4.1.1
+ 5.2.3
1.18.4
3.17
@@ -251,7 +251,7 @@
com.aliyun
alibaba-dingtalk-service-sdk
- 1.0.0
+ 2.0.0
suibian
diff --git a/src/main/java/com/lz/common/emun/WorkMsgTypeEnum.java b/src/main/java/com/lz/common/emun/WorkMsgTypeEnum.java
index 3d9806fa..0f94627a 100644
--- a/src/main/java/com/lz/common/emun/WorkMsgTypeEnum.java
+++ b/src/main/java/com/lz/common/emun/WorkMsgTypeEnum.java
@@ -14,7 +14,7 @@ public enum WorkMsgTypeEnum {
LEADER_PASS(2, "绩效已打分", "去提交给人事", "# 绩效已打分\n ## 你的绩效已经打分"),
//绩效通过人事,老板审核的最终审核通知
PASS(3, "绩效通过", "去查看", "# 绩效通过\n ## 你的绩效已经通过"),
- URGING(4, "绩效催办", "去审批", "# 绩效催办\n ## @提醒您审批"),
+ URGING(4, "绩效催办", "去处理", "# 绩效催办\n ## @的绩效需您处理"),
END(5, "绩效终止", "去查看", "# 绩效终止\n ## @,你的绩效终止"),
START_WORK(6, "绩效考评待办事项", "去查看", "# 绩效目标制定\n ## @,你的绩效需要制定目标"),
START_SCORE(7, "绩效考评待办事项", "去查看", "# 绩效结果输入\n ## @,你的绩效需要输入结果"),
diff --git a/src/main/java/com/lz/common/utils/DingTalkUtil.java b/src/main/java/com/lz/common/utils/DingTalkUtil.java
index 6a4d5187..67563ec6 100644
--- a/src/main/java/com/lz/common/utils/DingTalkUtil.java
+++ b/src/main/java/com/lz/common/utils/DingTalkUtil.java
@@ -121,6 +121,7 @@ public class DingTalkUtil {
try {
//下面获取所有部门的i就按单信息
Map list = new HashMap<>();
+
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list");
OapiDepartmentListRequest req = new OapiDepartmentListRequest();
req.setFetchChild(true);
@@ -144,6 +145,7 @@ public class DingTalkUtil {
deReq.setId(departmentInfosBo.getId());
deReq.setHttpMethod("GET");
OapiDepartmentGetResponse deRsp = client.execute(deReq, accessToken);
+ logger.info("钉钉部门信息返回{}", deRsp.getBody());
json = JSONObject.parseObject(deRsp.getBody());
departmentInfosBo.setChatId(json.getString("deptGroupChatId"));
departmentInfosBo.setLeaderEmployeeId(json.getString("deptManagerUseridList"));//部门主管,多个主管以|隔开
@@ -162,6 +164,47 @@ public class DingTalkUtil {
return null;
}
+ public List getDepartmentDetailsV2(String accessToken, String departmentIds) {
+ List list = new ArrayList<>();
+
+ try {
+ //下面获取所有部门的i就按单信息
+ getDepartment(list, 1L, accessToken);
+ return list;
+ } catch (Exception e) {
+ logger.info("获取部门详情异常{}", e);
+ }
+ return null;
+ }
+
+ private void getDepartment(List list, Long depId, String accessToken) throws ApiException {
+
+ DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
+ OapiV2DepartmentListsubRequest req = new OapiV2DepartmentListsubRequest();
+ req.setDeptId(depId);
+ req.setLanguage("zh_CN");
+ OapiV2DepartmentListsubResponse rsp = client.execute(req, accessToken);
+
+ logger.info("钉钉请求返回{}", rsp.getBody());
+ JSONObject json = JSONObject.parseObject(rsp.getBody());
+ if(json.getInteger("errcode") == 0) {
+ JSONArray array = json.getJSONArray("result");
+ logger.info("子部门数量{}", array.size());
+ for (int i = 0; i < array.size(); i++) {
+ json = array.getJSONObject(i);
+
+ DepartmentInfosBo departmentInfosBo = new DepartmentInfosBo();
+ departmentInfosBo.setName(json.getString("name"));
+ departmentInfosBo.setId(json.getString("dept_id"));//自身ID
+ departmentInfosBo.setParentId(json.getString("parent_id"));//父级ID
+ list.add(departmentInfosBo);
+ logger.info("钉钉请求{}的子部门", departmentInfosBo.getName());
+ getDepartment(list, json.getLong("dept_id"), accessToken);
+ }
+ }
+
+ }
+
/**
* 获取部门用户详情
*
@@ -183,7 +226,7 @@ public class DingTalkUtil {
for(long page = 0; isNext; page++){
req.setOffset(page);
OapiUserListbypageResponse rsp = client.execute(req, accessToken);
- logger.info("钉钉请求返回{}", rsp.getBody());
+ logger.info("钉钉请求人员返回{}", rsp.getBody());
JSONObject json = JSONObject.parseObject(rsp.getBody());
if(json.getInteger("errcode") == 0){
JSONArray array = json.getJSONArray("userlist");
@@ -219,7 +262,104 @@ public class DingTalkUtil {
}else{
- logger.info("获取部门详情异常{}", rsp.getBody());
+ logger.info("获取人员详情异常{}", rsp.getBody());
+ }
+ }
+
+ return list;
+ } catch (Exception e) {
+ e.printStackTrace();
+ logger.info("获取部门用户详情异常{}", e);
+ }
+ return null;
+ }
+
+ /**
+ * 获取部门用户详情
+ *
+ * @param accessToken
+ * @return
+ */
+ public List getDepartmentStaffDetailsV2(String accessToken, String departmentId, Map mapProbation) {
+ try {
+ long page = 0L;
+ List list =new ArrayList<>();
+ DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/list");
+ OapiV2UserListRequest req = new OapiV2UserListRequest();
+ req.setDeptId(Long.parseLong(departmentId));
+ req.setCursor(page);
+ req.setSize(100L);
+ req.setOrderField("modify_desc");
+ req.setContainAccessLimit(false);
+ req.setLanguage("zh_CN");
+ /*OapiV2UserListResponse rsp = client.execute(req, accessToken);
+
+ DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/listbypage");
+
+ OapiUserListbypageRequest req = new OapiUserListbypageRequest();
+ req.setDepartmentId(Long.parseLong(departmentId));
+
+ req.setSize(100L);
+ req.setHttpMethod("GET");*/
+
+ boolean isNext = false;
+ for(; true; page++){
+ req.setCursor(page);
+ OapiV2UserListResponse rsp = client.execute(req, accessToken);
+ logger.info("钉钉请求人员返回{}", rsp.getBody());
+ JSONObject json = JSONObject.parseObject(rsp.getBody());
+ if(json.getInteger("errcode") == 0){
+ json = json.getJSONObject("result");
+ JSONArray array = json.getJSONArray("list");
+ isNext = json.getBoolean("has_more");//获取是否由更多数据
+ for (int i = 0; i < array.size(); i++) {
+ json = array.getJSONObject(i);
+ DepartmentStaffBo departmentStaffBo = new DepartmentStaffBo();
+ departmentStaffBo.setEmployeeId(json.getString("userid"));//用户在企业内部的唯一编号,创建时可指定。可代表一定的含义
+ departmentStaffBo.setName(json.getString("name"));
+ departmentStaffBo.setEmployeeNo(json.getString("job_number"));//工号
+ departmentStaffBo.setUnionId(json.getString("unionid"));//企业内部id,唯一
+ departmentStaffBo.setOpenId(departmentStaffBo.getUnionId());//和上面的值目前是一样的,未找到说明
+ departmentStaffBo.setMobile(json.getString("mobile"));//手机,需要单独授权手机权限
+ departmentStaffBo.setEmail(json.getString("email"));//邮箱,钉钉的企业邮箱才可以,需要单独授权手机权限
+ departmentStaffBo.setAvatar(json.getString("avatar"));//头像
+ departmentStaffBo.setPosition(json.getString("title"));
+ if(mapProbation.containsKey(departmentStaffBo.getEmployeeId())){
+ departmentStaffBo.setEmployeeType(2);
+ }else{
+ departmentStaffBo.setEmployeeType(1);
+ }
+ departmentStaffBo.setStatus(0);
+ /*if(json.getBoolean("active")){
+ //在职已激活
+ departmentStaffBo.setStatus(0);
+ }else{
+ //在职未激活
+ departmentStaffBo.setStatus(4);
+ }*/
+ if(json.getBoolean("leader")){
+ departmentStaffBo.setIsLeader(1);
+
+ }else{
+ departmentStaffBo.setIsLeader(0);
+ }
+
+ if(json.getBoolean("boss")){
+ departmentStaffBo.setIsBoss(1);
+
+ }else{
+ departmentStaffBo.setIsBoss(0);
+ }
+ list.add(departmentStaffBo);
+ }
+ if(!isNext){
+ break;
+ }
+
+
+ }else{
+ logger.info("获取人员详情异常{}", rsp.getBody());
+ break;
}
}
diff --git a/src/main/java/com/lz/config/SwaggerConfig.java b/src/main/java/com/lz/config/SwaggerConfig.java
index fb548dec..ab4b4b44 100644
--- a/src/main/java/com/lz/config/SwaggerConfig.java
+++ b/src/main/java/com/lz/config/SwaggerConfig.java
@@ -9,6 +9,7 @@
package com.lz.config;
import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@@ -29,10 +30,13 @@ import static com.google.common.collect.Lists.newArrayList;
@EnableSwagger2
public class SwaggerConfig implements WebMvcConfigurer {
+ @Value(value = "${swagger.enable}")
+ boolean enableSwagger;
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
+ .enable(enableSwagger)
.select()
//加了ApiOperation注解的类,才生成接口文档
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
diff --git a/src/main/java/com/lz/modules/app/controller/ResultRecordController.java b/src/main/java/com/lz/modules/app/controller/ResultRecordController.java
index 01d8012a..1471fcc5 100644
--- a/src/main/java/com/lz/modules/app/controller/ResultRecordController.java
+++ b/src/main/java/com/lz/modules/app/controller/ResultRecordController.java
@@ -20,6 +20,7 @@ import com.lz.modules.flow.entity.*;
import com.lz.modules.flow.model.*;
import com.lz.modules.flow.req.ResultDetailReq;
import com.lz.modules.flow.service.*;
+import com.lz.modules.job.business.DingtalkBusiness;
import com.lz.modules.sys.controller.AbstractController;
import com.lz.modules.sys.entity.SysUserEntity;
import com.lz.modules.sys.entity.app.ResultComment;
@@ -105,6 +106,9 @@ public class ResultRecordController extends AbstractController {
@Autowired
private FlowChartDetailRecordService flowChartDetailRecordService;
+ @Autowired
+ private DingtalkBusiness dingtalkBusiness;
+
/**
* 列表
*/
@@ -331,6 +335,31 @@ public class ResultRecordController extends AbstractController {
return R.ok().put("lzResultRecord", lzResultRecord);
}
+ /**
+ * 信息
+ */
+ @GetMapping("/urging")
+ @ApiOperation("绩效催办-吴林")
+ @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "绩效id")})
+ @ApiResponses({@ApiResponse(code = 200, message = "成功", response = R.class)})
+ public R getDetail(@RequestParam Long id) {
+ ResultRecord lzResultRecord = lzResultRecordService.selectResultRecordById(id);
+ //获取当前节点,谁在处理
+ List flowRecords = flowRecordService.selectFlowRecordsByRecordIdAndStatus(id, 2);
+ if(flowRecords.size() > 0){
+ List ids = flowRecords.stream().map(new Function() {
+ @Override
+ public Long apply(FlowRecord flowRecord) {
+ return flowRecord.getApprovalStaffId();
+ }
+ }).collect(Collectors.toList());
+ List staffs = staffService.selectNamesByIds(ids);
+ dingtalkBusiness.sendNoticeMsg(lzResultRecord, staffs);
+ return R.ok("催办成功");
+ }
+ return R.error("无可催办人员");
+ }
+
/**
* 信息
*/
diff --git a/src/main/java/com/lz/modules/app/dao/DepartmentsDao.java b/src/main/java/com/lz/modules/app/dao/DepartmentsDao.java
index b93b93a4..a1b41cee 100644
--- a/src/main/java/com/lz/modules/app/dao/DepartmentsDao.java
+++ b/src/main/java/com/lz/modules/app/dao/DepartmentsDao.java
@@ -6,6 +6,7 @@ import com.lz.modules.app.dto.DepartmentsDto;
import com.lz.modules.app.dto.StaffDepartmentDto;
import com.lz.modules.app.entity.DepartmentsEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lz.modules.performance.dto.SimpleDepartmentDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -59,4 +60,9 @@ public interface DepartmentsDao extends BaseMapper {
DepartmentsEntity selectParentDepartmentByDepartmentId(String departmentId);
int delDepartments(@Param("list") List departmentsEntities);
+
+ List selectSimpleDepartmentByDepartmentIds(@Param("depIds") List depIds);
+
+ SimpleDepartmentDto selectSimpleDepartmentByDepartmentId(@Param("departmentId") String departmentId);
+
}
diff --git a/src/main/java/com/lz/modules/app/dao/StaffOccupationDao.java b/src/main/java/com/lz/modules/app/dao/StaffOccupationDao.java
index f0ce615e..9989ea24 100644
--- a/src/main/java/com/lz/modules/app/dao/StaffOccupationDao.java
+++ b/src/main/java/com/lz/modules/app/dao/StaffOccupationDao.java
@@ -4,6 +4,7 @@ import com.lz.modules.app.dto.StaffOccupationInfoDto;
import com.lz.modules.app.entity.StaffOccupationEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lz.modules.job.model.responseBo.DepartmentStaffBo;
+import com.lz.modules.performance.dto.StaffTypeDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -33,4 +34,8 @@ public interface StaffOccupationDao extends BaseMapper {
void updateStatusByStaff(Long staffId, DepartmentStaffBo departmentStaffBo);
List removeDimissionStaffByStaffIds(@Param("staffIds") List staffIds);
+
+ List selectAll();
+
+ List selectStaffTypesByStaffIds(@Param("staffIds")List staffIds);
}
diff --git a/src/main/java/com/lz/modules/app/entity/DepartmentsStaffRelateEntity.java b/src/main/java/com/lz/modules/app/entity/DepartmentsStaffRelateEntity.java
index edc90a6d..de9c6f4b 100644
--- a/src/main/java/com/lz/modules/app/entity/DepartmentsStaffRelateEntity.java
+++ b/src/main/java/com/lz/modules/app/entity/DepartmentsStaffRelateEntity.java
@@ -39,6 +39,11 @@ public class DepartmentsStaffRelateEntity implements Serializable {
* 是否为部门领导
*/
private Integer isLeader;
+ //获取mapkey
+ public String getKey(){
+ return departmentId + "_" + staffId;
+ }
+
/**
* 自增主键
* @return
diff --git a/src/main/java/com/lz/modules/app/entity/StaffOccupationEntity.java b/src/main/java/com/lz/modules/app/entity/StaffOccupationEntity.java
index 1959c17a..26ed9a84 100644
--- a/src/main/java/com/lz/modules/app/entity/StaffOccupationEntity.java
+++ b/src/main/java/com/lz/modules/app/entity/StaffOccupationEntity.java
@@ -105,4 +105,8 @@ public class StaffOccupationEntity implements Serializable {
*/
private String resumeUrl;
+ public String getKey(){
+ return staffId + "_" + position;
+ }
+
}
diff --git a/src/main/java/com/lz/modules/app/service/DepartmentsService.java b/src/main/java/com/lz/modules/app/service/DepartmentsService.java
index 41c6bf54..7e24eb72 100644
--- a/src/main/java/com/lz/modules/app/service/DepartmentsService.java
+++ b/src/main/java/com/lz/modules/app/service/DepartmentsService.java
@@ -61,5 +61,7 @@ public interface DepartmentsService extends IService {
List selectAll();
int delDepartments(List departmentsEntities);
+
+ Map> selectDepartmentTreeByDepIds(List depIds);
}
diff --git a/src/main/java/com/lz/modules/app/service/StaffOccupationService.java b/src/main/java/com/lz/modules/app/service/StaffOccupationService.java
index 61ab3b85..893e07f1 100644
--- a/src/main/java/com/lz/modules/app/service/StaffOccupationService.java
+++ b/src/main/java/com/lz/modules/app/service/StaffOccupationService.java
@@ -5,6 +5,7 @@ import com.lz.common.utils.PageUtils;
import com.lz.modules.app.dto.StaffOccupationInfoDto;
import com.lz.modules.app.entity.StaffOccupationEntity;
import com.lz.modules.job.model.responseBo.DepartmentStaffBo;
+import com.lz.modules.performance.dto.StaffTypeDto;
import java.util.List;
import java.util.Map;
@@ -33,5 +34,9 @@ public interface StaffOccupationService extends IService
void updateStatusByStaff(Long staffId, DepartmentStaffBo departmentStaffBo);
List removeDimissionStaffByStaffIds(List staffIds);
+
+ List selectAll();
+
+ List selectStaffTypesByStaffIds(List staffIds);
}
diff --git a/src/main/java/com/lz/modules/app/service/StaffService.java b/src/main/java/com/lz/modules/app/service/StaffService.java
index 936f6f45..eddffc4d 100644
--- a/src/main/java/com/lz/modules/app/service/StaffService.java
+++ b/src/main/java/com/lz/modules/app/service/StaffService.java
@@ -105,5 +105,7 @@ public interface StaffService extends IService {
List selectStaffsByGroupId(Long copyId);
List findManger(Long recordId, int flowProcess);
+
+ StaffEntity convertStaffEntity(DepartmentStaffBo staffBo);
}
diff --git a/src/main/java/com/lz/modules/app/service/impl/DepartmentsServiceImpl.java b/src/main/java/com/lz/modules/app/service/impl/DepartmentsServiceImpl.java
index e19201d8..18511d51 100644
--- a/src/main/java/com/lz/modules/app/service/impl/DepartmentsServiceImpl.java
+++ b/src/main/java/com/lz/modules/app/service/impl/DepartmentsServiceImpl.java
@@ -1,27 +1,28 @@
package com.lz.modules.app.service.impl;
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import com.lz.common.utils.PageUtils;
import com.lz.common.utils.Query;
import com.lz.common.utils.StringUtil;
import com.lz.modules.app.dao.DepartmentsDao;
import com.lz.modules.app.dao.DepartmentsStaffRelateDao;
-import com.lz.modules.app.dao.StaffDao;
import com.lz.modules.app.dto.DepartmentInfos;
import com.lz.modules.app.dto.DepartmentsDto;
import com.lz.modules.app.dto.StaffDepartmentDto;
import com.lz.modules.app.dto.StaffDto;
import com.lz.modules.app.entity.DepartmentsEntity;
import com.lz.modules.app.entity.DepartmentsStaffRelateEntity;
-import com.lz.modules.app.entity.StaffEntity;
import com.lz.modules.app.service.DepartmentsService;
import com.lz.modules.app.service.StaffService;
import com.lz.modules.job.model.responseBo.DepartmentInfosBo;
+import com.lz.modules.performance.dto.SimpleDepartmentDto;
import org.apache.commons.collections.CollectionUtils;
-import org.apache.ibatis.annotations.Param;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -305,5 +306,65 @@ public class DepartmentsServiceImpl extends ServiceImpl departmentsEntities){
return departmentsDao.delDepartments(departmentsEntities);
}
-
+
+ @Override
+ public Map> selectDepartmentTreeByDepIds(List depIds) {
+ Map> data = Maps.newHashMap();
+ if(CollectionUtils.isEmpty(depIds)){
+ return data;
+ }
+
+ List simpleDepartmentDtos = departmentsDao.selectSimpleDepartmentByDepartmentIds(depIds);
+ List depNames = Lists.newArrayList();
+ //将数据分类
+ Map dtos = Maps.newHashMap();
+ for (SimpleDepartmentDto simpleDepartmentDto:simpleDepartmentDtos){
+ dtos.put(Long.valueOf(simpleDepartmentDto.getDepartmentId()),simpleDepartmentDto);
+ }
+
+ for (SimpleDepartmentDto simpleDepartmentDto:simpleDepartmentDtos) {
+ List names = recursiveToBuild(depNames, simpleDepartmentDto, dtos,simpleDepartmentDto.getLevel());
+ data.put(Long.valueOf(simpleDepartmentDto.getDepartmentId()),names);
+ }
+ return data;
+
+ }
+
+
+ /**
+ *
+ * @param data 响应数据
+ * @param departmentDto 当前部门信息
+ * @param dtos 缓存,存在就不查数据库
+ * @return
+ */
+ private List recursiveToBuild(List data, SimpleDepartmentDto departmentDto,Map dtos, int level){
+ if(departmentDto == null){
+ logger.info("部门信息为空,截至当前数据data: " + JSON.toJSONString(data));
+ return data;
+ }
+ data.add(departmentDto.getDepartmentName());
+ if(level == 0){
+ logger.info("部门级别为0,departmentId: " + departmentDto.getDepartmentId());
+ return data;
+ }
+ if(level == data.size()){
+ logger.info("数据填充结束,departmentId: " + departmentDto.getDepartmentId() + " ,level: " + level);
+ return data;
+ }
+ SimpleDepartmentDto existSimpleDepartment = dtos.get(departmentDto.getDepartmentParentId());
+
+ if(existSimpleDepartment!=null){
+ return recursiveToBuild(data,existSimpleDepartment,dtos,level);
+ }
+ else {
+ SimpleDepartmentDto simpleDepartmentDto = departmentsDao.selectSimpleDepartmentByDepartmentId(departmentDto.getDepartmentParentId());
+ if(simpleDepartmentDto!=null){
+ dtos.put(Long.valueOf(departmentDto.getDepartmentParentId()),simpleDepartmentDto);
+ }
+ return recursiveToBuild(data,simpleDepartmentDto,dtos,level);
+ }
+
+
+ }
}
diff --git a/src/main/java/com/lz/modules/app/service/impl/StaffOccupationServiceImpl.java b/src/main/java/com/lz/modules/app/service/impl/StaffOccupationServiceImpl.java
index 214bde65..0138f16b 100644
--- a/src/main/java/com/lz/modules/app/service/impl/StaffOccupationServiceImpl.java
+++ b/src/main/java/com/lz/modules/app/service/impl/StaffOccupationServiceImpl.java
@@ -10,6 +10,7 @@ import com.lz.modules.app.dao.StaffOccupationDao;
import com.lz.modules.app.entity.StaffOccupationEntity;
import com.lz.modules.app.service.StaffOccupationService;
import com.lz.modules.job.model.responseBo.DepartmentStaffBo;
+import com.lz.modules.performance.dto.StaffTypeDto;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -72,4 +73,14 @@ public class StaffOccupationServiceImpl extends ServiceImpl selectAll(){
+ return staffOccupationDao.selectAll();
+ }
+
+ @Override
+ public List selectStaffTypesByStaffIds(List staffIds) {
+ return staffOccupationDao.selectStaffTypesByStaffIds(staffIds);
+ }
}
diff --git a/src/main/java/com/lz/modules/app/service/impl/StaffServiceImpl.java b/src/main/java/com/lz/modules/app/service/impl/StaffServiceImpl.java
index a15333aa..cd0f894a 100644
--- a/src/main/java/com/lz/modules/app/service/impl/StaffServiceImpl.java
+++ b/src/main/java/com/lz/modules/app/service/impl/StaffServiceImpl.java
@@ -374,7 +374,7 @@ public class StaffServiceImpl extends ServiceImpl impleme
}
}
- private StaffEntity convertStaffEntity(DepartmentStaffBo staffBo) {
+ public StaffEntity convertStaffEntity(DepartmentStaffBo staffBo) {
StaffEntity staffEntity = new StaffEntity();
staffEntity.setName(staffBo.getName());//员工姓名
staffEntity.setGender(staffBo.getGender());
diff --git a/src/main/java/com/lz/modules/flow/dao/FlowRecordMapper.java b/src/main/java/com/lz/modules/flow/dao/FlowRecordMapper.java
index d417c7c5..fff7c877 100644
--- a/src/main/java/com/lz/modules/flow/dao/FlowRecordMapper.java
+++ b/src/main/java/com/lz/modules/flow/dao/FlowRecordMapper.java
@@ -90,5 +90,7 @@ public interface FlowRecordMapper extends BaseMapper {
List selectSkipFlowRecordsById(@Param("recordId") Long recordId);
- List selectFirstFlowRecordsByIdAndFlowIndex(Long recordId, int flowIndex, int status);
+ List selectFirstFlowRecordsByIdAndFlowIndex(@Param("recordId") Long recordId, @Param("flowIndex") int flowIndex, @Param("status") int status);
+
+ List selectFlowRecordsByRecordIdAndStatus(@Param("recordId") Long recordId, @Param("status") int status);
}
\ No newline at end of file
diff --git a/src/main/java/com/lz/modules/flow/service/FlowRecordService.java b/src/main/java/com/lz/modules/flow/service/FlowRecordService.java
index 99c44187..4503002a 100644
--- a/src/main/java/com/lz/modules/flow/service/FlowRecordService.java
+++ b/src/main/java/com/lz/modules/flow/service/FlowRecordService.java
@@ -86,4 +86,6 @@ public interface FlowRecordService extends IService {
List selectSkipFlowRecordsById(Long recordId);
List selectFirstFlowRecordsByIdAndFlowIndex(Long recordId, int flowIndex, int status);
+
+ List selectFlowRecordsByRecordIdAndStatus(Long recordId, int status);
}
\ No newline at end of file
diff --git a/src/main/java/com/lz/modules/flow/service/FlowService.java b/src/main/java/com/lz/modules/flow/service/FlowService.java
index 37f43fea..abd795f2 100644
--- a/src/main/java/com/lz/modules/flow/service/FlowService.java
+++ b/src/main/java/com/lz/modules/flow/service/FlowService.java
@@ -38,4 +38,5 @@ public interface FlowService extends IService {
FlowChart selectFlowChartByChartId(Long flowId);
+ FlowChart selectFlowChartByFlow(Flow flow);
}
\ No newline at end of file
diff --git a/src/main/java/com/lz/modules/flow/service/impl/EvaluationGroupServiceImpl.java b/src/main/java/com/lz/modules/flow/service/impl/EvaluationGroupServiceImpl.java
index 941867bb..7625cba0 100644
--- a/src/main/java/com/lz/modules/flow/service/impl/EvaluationGroupServiceImpl.java
+++ b/src/main/java/com/lz/modules/flow/service/impl/EvaluationGroupServiceImpl.java
@@ -183,7 +183,6 @@ public class EvaluationGroupServiceImpl extends ServiceImpl selectFlowRecordsByRecordIdAndStatus(Long recordId, int status){
+ return flowRecordMapper.selectFlowRecordsByRecordIdAndStatus(recordId, status);
+ }
+
}
diff --git a/src/main/java/com/lz/modules/flow/service/impl/FlowServiceImpl.java b/src/main/java/com/lz/modules/flow/service/impl/FlowServiceImpl.java
index 18161ddb..636325c8 100644
--- a/src/main/java/com/lz/modules/flow/service/impl/FlowServiceImpl.java
+++ b/src/main/java/com/lz/modules/flow/service/impl/FlowServiceImpl.java
@@ -77,6 +77,11 @@ public class FlowServiceImpl extends ServiceImpl implements Fl
return flowChart;
}
+ @Override
+ public FlowChart selectFlowChartByFlow(Flow flow){
+ FlowChart flowChart = flowChartService.selectFlowChartById(flow.getChartId());
+ return flowChart;
+ }
diff --git a/src/main/java/com/lz/modules/flow/service/impl/FlowStartServiceImpl.java b/src/main/java/com/lz/modules/flow/service/impl/FlowStartServiceImpl.java
index 727a3f44..e15a8364 100644
--- a/src/main/java/com/lz/modules/flow/service/impl/FlowStartServiceImpl.java
+++ b/src/main/java/com/lz/modules/flow/service/impl/FlowStartServiceImpl.java
@@ -2,22 +2,13 @@ package com.lz.modules.flow.service.impl;
import ch.qos.logback.classic.Logger;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.google.common.collect.Lists;
import com.lz.common.emun.ChartOptType;
import com.lz.common.emun.CheckStaffType;
import com.lz.common.emun.WorkMsgTypeEnum;
import com.lz.common.utils.R;
-import com.lz.common.utils.StringUtil;
-import com.lz.modules.app.entity.DepartmentsStaffRelateEntity;
import com.lz.modules.app.entity.StaffEntity;
import com.lz.modules.app.entity.StaffSimpleInfo;
-import com.lz.modules.app.enums.FlowApprovalRoleTypeEnums;
-import com.lz.modules.app.enums.FlowRecordStatusEnums;
-import com.lz.modules.app.enums.RoleEnums;
-import com.lz.modules.app.service.DepartmentsService;
-import com.lz.modules.app.service.DepartmentsStaffRelateService;
import com.lz.modules.app.service.StaffService;
-import com.lz.modules.flow.dao.EvaluationStartStaffMapper;
import com.lz.modules.flow.dao.FlowStartMapper;
import com.lz.modules.flow.entity.*;
import com.lz.modules.flow.model.*;
@@ -28,22 +19,15 @@ import com.lz.modules.sys.entity.app.ResultDetail;
import com.lz.modules.sys.entity.app.ResultRecord;
import com.lz.modules.sys.service.app.ResultDetailService;
import com.lz.modules.sys.service.app.ResultRecordService;
-import com.lz.modules.third.entity.ThirdAppConfig;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.map.HashedMap;
-import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
-import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.*;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -839,12 +823,12 @@ public class FlowStartServiceImpl extends ServiceImpl resultRecords;
+ List resultStarts;
List noticeStaff;
public ThreadInitFlowRecord(List resultRecords, List noticeStaff){
- this.resultRecords = resultRecords;
+ this.resultStarts = resultRecords;
this.noticeStaff = noticeStaff;
}
@@ -853,12 +837,14 @@ public class FlowStartServiceImpl extends ServiceImpl 0){
+
+ /*DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/role/list");
+ OapiRoleListRequest request = new OapiRoleListRequest();
+ request.setOffset(0L);
+ request.setSize(10L);
+
+ OapiRoleListResponse response = null;
+ try {
+ response = client.execute(request, token);
+ logger.info("角色返回{}", response.getBody());
+ JSONObject jsonObject = JSONObject.parseObject(response.getBody());
+ JSONArray jsonArray = jsonObject.getJSONObject("result").getJSONArray("list");
+ for (int i = 0; i < jsonArray.size(); i++
+ ) {
+ JSONObject json = jsonArray.getJSONObject(i);
+ JSONArray array = json.getJSONArray("roles");
+ logger.info("角色组{}", json.getString("name"));
+ for(int j = 0; j < array.size(); j++){
+ json = array.getJSONObject(j);
+ client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/role/simplelist");
+ OapiRoleSimplelistRequest request1 = new OapiRoleSimplelistRequest();
+ request1.setRoleId(json.getLong("id"));
+ request1.setOffset(0L);
+ request1.setSize(200L);
+
+ OapiRoleSimplelistResponse response1 = client.execute(request1, token);
+ logger.info("钉钉获取角色{},数据为{}", json.getString("name"), response1.getBody());
+ }
+ }
+ } catch (ApiException e) {
+ e.printStackTrace();
+ }*/
+
+ List addDeparts = new ArrayList<>();//需要新增的部门信息
+ List updateDeparts = new ArrayList<>();//需要更新的部门信息
+
+ List addStaffs = new ArrayList<>();//需要新增的人员信息
+ List updateStaffs = new ArrayList<>();//需要更新的人员
+
+ List addDepartStaff = new ArrayList<>();//需要新增的部门人员对应关系
+ List updateDepartStaff = new ArrayList<>();//需要更新部门人员对应关系
+ Map mapEmployeeIdDeparts = new HashedMap();//新员工对应的部门对应关系
+
+ List addStaffOcc = new ArrayList<>();//需要新增的职位信息
+ List updateStaffOcc = new ArrayList<>();//需要更新的职位信息
+ Map mapEmployeeIdStaffOccs = new HashedMap();//新员工对应的职位对应关系
+
+ List newDepartIds = new ArrayList<>();//新的部门或者新的人员对应信息
+ List newPositions = new ArrayList<>();//新的职位或者新的人员对应信息
+
//获取所有的部门详情
- Map departmentInfosBos = dingTalkUtil.getDepartmentDetails(token, "1");
+ List departmentInfosBos = dingTalkUtil.getDepartmentDetailsV2(token, "1");
if(departmentInfosBos.size() > 0){
- //获取所有部门信息
+ List probationUserIDS = getProbationStaff(token);//获取试用期人员信息
+ Map mapProbation =
+ probationUserIDS.stream().collect(Collectors.toMap(String::toString, Function.identity(), (e, r) -> e));
+ //获取原有部门信息
+ Map mapDepartmentInfosBos
+ = departmentInfosBos.stream().collect(Collectors.toMap(DepartmentInfosBo::getId, Function.identity(), (e, r) -> e));
List departmentsEntities = departmentsService.selectAll();
- Map mapDeparts =
- departmentsEntities.stream().collect(Collectors.toMap(DepartmentsEntity::getDepartmentId, Function.identity(), (e, r) -> e));
- //更新数据库中的部门相关信息
- //departmentsService.updateDepartmentInfos(departmentInfosBos);
+ Map mapDeparts = null;
+ if(departmentsEntities.size() > 0){
+ mapDeparts =
+ departmentsEntities.stream().collect(Collectors.toMap(DepartmentsEntity::getDepartmentId, Function.identity(), (e, r) -> e));
+ }
+
+ //获取原有的部门人员对应关系
+ List departmentsStaffRelateEntities = departmentsStaffRelateService.selectAll();
+
+ Map mapDepStaffs = null;
+ if(departmentsStaffRelateEntities.size() > 0){
+ mapDepStaffs =
+ departmentsStaffRelateEntities.stream().collect(
+ Collectors.toMap(DepartmentsStaffRelateEntity::getKey,
+ Function.identity(), (e, r) -> e));
+ }
+
+ //获取所有人员信息
+ List staffEntities = staffService.selectAll();
+ Map mapStaffs = null;
+ if(staffEntities.size() > 0){
+ mapStaffs = staffEntities.stream().
+ collect(Collectors.toMap(StaffEntity::getEmployeeId, Function.identity(), (e, r)->e));
+ }
+ Map mapMorDepartStaffs = new HashedMap();//跨部门人员
+ List staffOccupationEntities = staffOccupationService.selectAll();
+ Map mapStaffOccs = null;
+ if(staffOccupationEntities.size() > 0){
+ mapStaffOccs =
+ staffOccupationEntities.stream().collect(Collectors.toMap(StaffOccupationEntity::getKey, Function.identity(), (e, r) -> e));
+ }
+ Map mapHaveStaffOccs = new HashedMap();
+
//删除原有的对应关系下面在更新
- departmentsStaffRelateService.deleteAllRelates();
//未在飞书组织架构里的成员,置为离职(全部置为离职,再把在职的恢复)
- staffOccupationService.updateAllOccupation();
//获取飞书部门对应的用户详情
- for (String key : departmentInfosBos.keySet()) {
- if(mapDeparts.containsKey(key)){
+ for (DepartmentInfosBo departmentInfo : departmentInfosBos) {
+ //DepartmentInfosBo departmentInfo = departmentInfosBos.get(key);
+ String key = departmentInfo.getId();
+ DepartmentsEntity departmentsEntity = null;
+ if(mapDeparts != null && mapDeparts.containsKey(key)){
//部门存在
+ departmentsEntity = mapDeparts.get(key);
+ updateDeparts.add(departmentsEntity);
mapDeparts.remove(key);
+ }else{//新增部门信息
+ departmentsEntity = new DepartmentsEntity();
+ departmentsEntity.setDepartmentId(departmentInfo.getId());
+ addDeparts.add(departmentsEntity);
}
- DepartmentInfosBo departmentInfo = departmentInfosBos.get(key);
+
//获取部门用户详情
- List staffs = dingTalkUtil.getDepartmentStaffDetails(token, departmentInfo.getId());
+ List staffs = dingTalkUtil.getDepartmentStaffDetailsV2(token, departmentInfo.getId(), mapProbation);
logger.info("=============================" + departmentInfo.getName() + "================================");
-
- //departmentInfo.setMemberCount(staffs.size());//设置部门人数,钉钉没有返回部门人数,只能这样设置
- //计算父类的
- DepartmentInfosBo integer = departmentInfo;
- while(!integer.getParentId().equals("1")){
- integer = departmentInfosBos.get(integer.getParentId());
- if(integer.getMemberCount() == null){
- integer.setMemberCount(0);
- }
- integer.setMemberCount(integer.getMemberCount() + staffs.size());
-
- }
- //获取自己的
+ //设置本部门人数
if(departmentInfo.getMemberCount() == null){
departmentInfo.setMemberCount(0);
}
departmentInfo.setMemberCount(departmentInfo.getMemberCount() + staffs.size());
+ //计算父类的
+ DepartmentInfosBo integer = departmentInfo;
+ while(!integer.getParentId().equals("1")){
+ integer = mapDepartmentInfosBos.get(integer.getParentId());
+ if(integer.getMemberCount() == null){
+ integer.setMemberCount(0);
+ }
+ integer.setMemberCount(integer.getMemberCount() + staffs.size());
+ }
if(staffs.size() > 0){
- //循环录入到员工信息表中
- if(staffService.updateStaffsInfo(staffs)){
- //加入到部门和员工关系表,同时更新leader关系
- departmentsStaffRelateService.addRelateInfos(departmentInfo.getId(), staffs);
- //录入员工职业信息表
- enterStaffOccupationInfos(staffs);
+ for (DepartmentStaffBo departmentStaffBo:staffs
+ ) {
+ StaffEntity staff = staffService.convertStaffEntity(departmentStaffBo);
+ if(mapStaffs != null && mapStaffs.containsKey(departmentStaffBo.getEmployeeId())){//老员工
+ StaffEntity entity = mapStaffs.get(departmentStaffBo.getEmployeeId());
+ staff.setId(entity.getId());
+ staff.setCreateTime(entity.getCreateTime());
+ staff.setUpdateTime(new Date());
+ updateStaffs.add(staff);
+ if(!mapMorDepartStaffs.containsKey(departmentStaffBo.getEmployeeId())){
+ mapMorDepartStaffs.put(departmentStaffBo.getEmployeeId(), staff);
+ }
+ mapStaffs.remove(departmentStaffBo.getEmployeeId());
+
+ StaffOccupationEntity staffOccupation = new StaffOccupationEntity();
+ staffOccupation.setStaffId(staff.getId());
+ staffOccupation.setPosition(departmentStaffBo.getPosition());//职位信息
+ staffOccupation.setEmployeeNo(departmentStaffBo.getEmployeeNo());
+ staffOccupation.setStaffNo(departmentStaffBo.getEmployeeNo());//钉钉的员工工号
+ staffOccupation.setStaffType(departmentStaffBo.getEmployeeType());
+ staffOccupation.setStaffStatus(departmentStaffBo.getStatus());
+ String key1 = entity.getId() + "_" + staffOccupation.getPosition();
+ if(mapStaffOccs != null && mapStaffOccs.containsKey(key1)){//职位信息已存在,更新
+ StaffOccupationEntity staffOccupation1 = mapStaffOccs.get(key1);
+ staffOccupation.setId(staffOccupation1.getId());
+ staffOccupation.setUpdateTime(new Date());
+ updateStaffOcc.add(staffOccupation);
+ mapStaffOccs.remove(key1);
+ mapHaveStaffOccs.put(key1, staffOccupation);
+ }else if(!mapHaveStaffOccs.containsKey(key1)){//职位信息不存在,新建
+
+ addStaffOcc.add(staffOccupation);
+ mapHaveStaffOccs.put(key1, staffOccupation);
+ }
+
+ DepartmentsStaffRelateEntity departmentsStaffRelateEntity = new DepartmentsStaffRelateEntity();
+ departmentsStaffRelateEntity.setDepartmentId(departmentInfo.getId());
+ departmentsStaffRelateEntity.setStaffId(staff.getId());
+ departmentsStaffRelateEntity.setIsLeader(departmentStaffBo.getIsLeader());
+ if(mapDepStaffs != null && mapDepStaffs.containsKey(departmentsStaffRelateEntity.getKey())){//对应关系已经存在
+ DepartmentsStaffRelateEntity staffRelateEntityentity1 = mapDepStaffs.get(departmentsStaffRelateEntity.getKey());
+ if(staffRelateEntityentity1.getIsLeader().intValue() != departmentsStaffRelateEntity.getIsLeader().intValue()){
+ departmentsStaffRelateEntity.setId(staffRelateEntityentity1.getId());
+ departmentsStaffRelateEntity.setUpdateTime(new Date());
+ updateDepartStaff.add(departmentsStaffRelateEntity);
+
+ }
+ mapDepStaffs.remove(departmentsStaffRelateEntity.getKey());
+
+ }else{//不存在对应关系
+ addDepartStaff.add(departmentsStaffRelateEntity);
+ }
+ }else if(mapMorDepartStaffs.containsKey(departmentStaffBo.getEmployeeId())){
+ //跨部门人员
+ StaffEntity entity = mapMorDepartStaffs.get(departmentStaffBo.getEmployeeId());
+ staff.setId(entity.getId());
+ DepartmentsStaffRelateEntity departmentsStaffRelateEntity = new DepartmentsStaffRelateEntity();
+ departmentsStaffRelateEntity.setDepartmentId(departmentInfo.getId());
+ departmentsStaffRelateEntity.setIsLeader(departmentStaffBo.getIsLeader());
+ departmentsStaffRelateEntity.setStaffId(staff.getId());
+
+ StaffOccupationEntity staffOccupation = new StaffOccupationEntity();
+ staffOccupation.setStaffId(staff.getId());
+ staffOccupation.setPosition(departmentStaffBo.getPosition());//职位信息
+ staffOccupation.setEmployeeNo(departmentStaffBo.getEmployeeNo());
+ staffOccupation.setStaffNo(departmentStaffBo.getEmployeeNo());//钉钉的员工工号
+ staffOccupation.setStaffType(departmentStaffBo.getEmployeeType());
+ staffOccupation.setStaffStatus(departmentStaffBo.getStatus());
+
+
+ if(entity.getId() == null){//新用户
+ key = staff.getEmployeeId() + "_" + departmentsStaffRelateEntity.getDepartmentId();
+ if(!mapEmployeeIdDeparts.containsKey(key)){
+
+ departmentsStaffRelateEntity.setIsLeader(departmentStaffBo.getIsLeader());
+ mapEmployeeIdDeparts.put(key
+ , departmentsStaffRelateEntity);
+ newDepartIds.add(departmentsStaffRelateEntity.getDepartmentId());
+ }
+
+ key = staff.getEmployeeId() + "_" + staffOccupation.getPosition();
+ if(!mapEmployeeIdStaffOccs.containsKey(key)){
+
+ mapEmployeeIdStaffOccs.put(key
+ , staffOccupation);
+ newPositions.add(departmentStaffBo.getPosition());
+ }
+ }else{
+ String key1 = entity.getId() + "_" + staffOccupation.getPosition();
+ if(mapStaffOccs != null && mapStaffOccs.containsKey(key1)){//职位信息已存在,更新
+ StaffOccupationEntity staffOccupation1 = mapStaffOccs.get(key1);
+ staffOccupation.setId(staffOccupation1.getId());//职位信息
+ staffOccupation.setUpdateTime(new Date());
+ updateStaffOcc.add(staffOccupation);
+ mapStaffOccs.remove(key1);
+ mapHaveStaffOccs.put(key1, staffOccupation);
+ }else if(!mapHaveStaffOccs.containsKey(key1)){//职位信息不存在,新建
+ addStaffOcc.add(staffOccupation);
+ mapHaveStaffOccs.put(key1, staffOccupation);
+ }
+
+ if(mapDepStaffs != null && mapDepStaffs.containsKey(departmentsStaffRelateEntity.getKey())){//对应关系已经存在
+ DepartmentsStaffRelateEntity staffRelateEntityentity1 = mapDepStaffs.get(departmentsStaffRelateEntity.getKey());
+ if(staffRelateEntityentity1.getIsLeader().intValue() != departmentsStaffRelateEntity.getIsLeader().intValue()){
+ departmentsStaffRelateEntity.setId(staffRelateEntityentity1.getId());
+ departmentsStaffRelateEntity.setUpdateTime(new Date());
+ updateDepartStaff.add(departmentsStaffRelateEntity);
+
+ }
+ mapDepStaffs.remove(departmentsStaffRelateEntity.getKey());
+ }else{//不存在对应关系
+ addDepartStaff.add(departmentsStaffRelateEntity);
+ }
+ }
+ }else{//新的员工信息
+ addStaffs.add(staff);
+
+ if(!mapMorDepartStaffs.containsKey(departmentStaffBo.getEmployeeId())){
+ mapMorDepartStaffs.put(departmentStaffBo.getEmployeeId(), staff);
+ }
+
+ //新增部门人员对应关系,新增人员后插入数据库
+ DepartmentsStaffRelateEntity departmentsStaffRelateEntity = new DepartmentsStaffRelateEntity();
+ departmentsStaffRelateEntity.setDepartmentId(departmentInfo.getId());
+ key = staff.getEmployeeId() + "_" + departmentsStaffRelateEntity.getDepartmentId();
+ if(!mapEmployeeIdDeparts.containsKey(key)){
+
+ departmentsStaffRelateEntity.setIsLeader(departmentStaffBo.getIsLeader());
+ mapEmployeeIdDeparts.put(key
+ , departmentsStaffRelateEntity);
+ newDepartIds.add(departmentsStaffRelateEntity.getDepartmentId());
+ }
+
+ //新增人员职位信息,新增人员后插入数据库
+ StaffOccupationEntity staffOccupation = new StaffOccupationEntity();
+ staffOccupation.setPosition(departmentStaffBo.getPosition());//职位信息
+ key = staff.getEmployeeId() + "_" + staffOccupation.getPosition();
+ if(!mapEmployeeIdStaffOccs.containsKey(key)){
+
+ staffOccupation.setEmployeeNo(departmentStaffBo.getEmployeeNo());
+ staffOccupation.setStaffNo(departmentStaffBo.getEmployeeNo());//钉钉的员工工号
+ staffOccupation.setStaffType(departmentStaffBo.getEmployeeType());
+ staffOccupation.setStaffStatus(departmentStaffBo.getStatus());
+ mapEmployeeIdStaffOccs.put(key
+ , staffOccupation);
+ newPositions.add(departmentStaffBo.getPosition());
+ }
+
+ }
}
-
-
}
}
- for (String key : departmentInfosBos.keySet()) {
- DepartmentInfosBo departmentInfo = departmentInfosBos.get(key);
- departmentsService.updateDepartmentInfo(departmentInfo);
- }
- if(mapDeparts.size() > 0){//有需要删除的部门信息
+ if(mapDeparts != null && mapDeparts.size() > 0){//有需要删除的部门信息
+ logger.info("删除部门信息个数{}", mapDeparts.size());
departmentsEntities = mapDeparts.values().stream().collect(Collectors.toList());
- departmentsService.delDepartments(departmentsEntities);
+ for(DepartmentsEntity entity:departmentsEntities) {
+ entity.setIsDelete(1);
+ entity.setUpdateTime(new Date());
+ }
+ departmentsService.updateBatchById(departmentsEntities);
+ }
+ if(addDeparts.size() > 0){//有新增部门
+ logger.info("新增部门信息个数{}", addDeparts.size());
+ for (DepartmentsEntity entity:addDeparts
+ ) {
+ DepartmentInfosBo departmentInfo = mapDepartmentInfosBos.get(entity.getDepartmentId());
+ entity.setDepartmentId(departmentInfo.getId());
+ entity.setDepartmentName(departmentInfo.getName());
+ entity.setDepartmentParentId(departmentInfo.getParentId());
+ entity.setMemberCount(departmentInfo.getMemberCount());
+ entity.setChatId(departmentInfo.getChatId());
+ entity.setLeaderEmployeeId(departmentInfo.getLeaderEmployeeId());
+ entity.setLeaderOpenId(departmentInfo.getLeaderOpenId());
+ entity.setStatus(1);
+ }
+ departmentsService.saveBatch(addDeparts);
}
+ if(updateDeparts.size() > 0){//有新增部门
+ logger.info("更新部门信息个数{}", updateDeparts.size());
+ for (DepartmentsEntity entity:updateDeparts
+ ) {
+ DepartmentInfosBo departmentInfo = mapDepartmentInfosBos.get(entity.getDepartmentId());
+ entity.setDepartmentId(departmentInfo.getId());
+ entity.setDepartmentName(departmentInfo.getName());
+ entity.setDepartmentParentId(departmentInfo.getParentId());
+ entity.setMemberCount(departmentInfo.getMemberCount());
+ entity.setChatId(departmentInfo.getChatId());
+ entity.setLeaderEmployeeId(departmentInfo.getLeaderEmployeeId());
+ entity.setLeaderOpenId(departmentInfo.getLeaderOpenId());
+ entity.setStatus(1);
+ }
+ departmentsService.updateBatchById(updateDeparts);
+ }
+
+ if(addStaffs.size() > 0){//有新增部门
+ logger.info("新增人员信息个数{}", addStaffs.size());
+
+ staffService.saveBatch(addStaffs);
+ String key;
+ for (StaffEntity entity:addStaffs
+ ) {
+ for (String departId:newDepartIds
+ ) {
+ key = entity.getEmployeeId() + "_" + departId;
+ if(mapEmployeeIdDeparts.containsKey(key)){
+ DepartmentsStaffRelateEntity departmentsStaffRelateEntity =
+ mapEmployeeIdDeparts.get(key);
+ departmentsStaffRelateEntity.setStaffId(entity.getId());
+ addDepartStaff.add(departmentsStaffRelateEntity);
+ mapEmployeeIdDeparts.remove(key);
+ }
+ }
+
+ for (String position:newPositions
+ ) {
+ key = entity.getEmployeeId() + "_" + position;
+ if(mapEmployeeIdStaffOccs.containsKey(key)){
+ StaffOccupationEntity staffOccupation = mapEmployeeIdStaffOccs.get(key);
+ staffOccupation.setStaffId(entity.getId());
+ addStaffOcc.add(staffOccupation);
+ mapEmployeeIdStaffOccs.remove(key);
+ }
+ }
+ }
+ }
+
+
+
+ if(updateStaffs.size() > 0){//有新增部门
+ logger.info("更新人员信息个数{}", updateStaffs.size());
+ staffService.updateBatchById(updateStaffs);
+ }
+
+ if(mapDepStaffs != null && mapDepStaffs.size() > 0){
+ logger.info("删除人员部门个数{}", mapDepStaffs.size());
+ departmentsStaffRelateEntities = mapDepStaffs.values().stream().collect(Collectors.toList());
+ for (DepartmentsStaffRelateEntity entity:departmentsStaffRelateEntities
+ ) {
+ entity.setIsDelete(1);
+ }
+ departmentsStaffRelateService.updateBatchById(departmentsStaffRelateEntities);
+ }
+
+ if(addDepartStaff.size() > 0){//有新增部门
+ logger.info("新增部门人员对应关系个数{}", addDepartStaff.size());
+ departmentsStaffRelateService.saveBatch(addDepartStaff);
+
+ }
+
+ if(updateDepartStaff.size() > 0){//有新增部门
+ logger.info("更新部门人员对应关系个数{}", updateDepartStaff.size());
+ departmentsStaffRelateService.updateBatchById(updateDepartStaff);
+ }
+
+ if(addStaffOcc.size() > 0){//有新增部门
+ logger.info("新增人员职位对应关系个数{}", addStaffOcc.size());
+ staffOccupationService.saveBatch(addStaffOcc);
+
+ }
+
+ if(updateStaffOcc.size() > 0){//有新增部门
+ logger.info("更新人员对职位应关系个数{}", updateStaffOcc.size());
+ staffOccupationService.updateBatchById(updateStaffOcc);
+ }
+
+ if(mapStaffs != null && mapStaffs.size() > 0){//离职人员
+ logger.info("离职人员可能个数{}", mapStaffs.size());
+ if(mapStaffOccs != null && mapStaffOccs.size() > 0){
+ logger.info("离职人员对应的职位信息个数{}", mapStaffs.size());
+ staffEntities = mapStaffs.values().stream().collect(Collectors.toList());
+ staffOccupationEntities.clear();
+ for (StaffEntity entity:staffEntities
+ ) {
+ if(mapStaffOccs.containsKey(entity.getId())){
+ StaffOccupationEntity staffOccupationEntity = mapStaffOccs.get(entity.getId());
+ if(staffOccupationEntity.getStaffStatus().intValue() == 0){
+ staffOccupationEntity.setStaffStatus(1);
+ staffOccupationEntity.setUpdateTime(new Date());
+ staffOccupationEntities.add(staffOccupationEntity);
+ }
+ }
+ }
+ logger.info("离职人员实际个数{}", staffOccupationEntities.size());
+ staffOccupationService.updateBatchById(staffOccupationEntities);
+ }
+ }
}else{
logger.info("部门信息为空");
}
}
}
+ private List getProbationStaff(String token){
+ //获取试用期员工信息
+
+ try {
+ DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/smartwork/hrm/employee/queryonjob");
+ OapiSmartworkHrmEmployeeQueryonjobRequest req = new OapiSmartworkHrmEmployeeQueryonjobRequest();
+ Long offSet = 0L;
+ req.setStatusList("2");
+ req.setSize(50L);
+ boolean isNext = false;
+ List ids = new ArrayList<>();
+ {
+ req.setOffset(offSet);
+ OapiSmartworkHrmEmployeeQueryonjobResponse rsp = client.execute(req, token);
+ logger.info("钉钉请求试用期员工返回信息{}", rsp.getBody());
+ JSONObject jsonObject = JSONObject.parseObject(rsp.getBody());
+ if(jsonObject.getIntValue("errcode") == 0){
+ jsonObject = jsonObject.getJSONObject("result");
+ offSet = jsonObject.getLong("next_cursor");
+ if(offSet != null){
+ isNext = true;
+ }
+ JSONArray jsonArray = JSONArray.parseArray(jsonObject.getString("data_list"));
+ ids.addAll(Arrays.stream(jsonArray.toArray(new String[jsonArray.size()])).collect(Collectors.toList()));
+ }else{
+ logger.info("钉钉请求返回错误{}", jsonObject);
+ }
+ }while(isNext)
+ return ids;
+
+ } catch (ApiException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
public void enterStaffOccupationInfos(List staffs) {
@@ -227,6 +626,45 @@ public class DingtalkBusiness {
}
}
+ public String sendNoticeMsg(ResultRecord lzResultRecord, List staffs) {
+
+ ThirdAppConfig thirdAppConfig = thirdAppConfigService.getByAppId(appid);
+ String token = dingTalkUtil.getAccessTokenWitchEntity(thirdAppConfig);
+ if(token != null && token.length() > 0){
+ String url = homeUrl;
+ if(url.contains("?")){
+ url += "&halokit=" + System.currentTimeMillis();
+ }else{
+ url += "?halokit=" + System.currentTimeMillis();
+ }
+ url += ("&detail=1&id=" + lzResultRecord.getId());
+ url = URLEncoder.encode(url);
+
+
+ url = "dingtalk://dingtalkclient/action/openapp?corpid=" + thirdAppConfig.getCorpId() +
+ "&container_type=work_platform&app_id=0_" +
+ appid + "&redirect_type=jump&redirect_url=" + url;
+ logger.info("推送消息个数{}", staffs.size());
+ for (StaffEntity info:
+ staffs) {
+ logger.info("发送消息给{},url:{}", info, url);
+ String content = null;
+ if(!lzResultRecord.getStaffName().equals(info.getName())){
+ content = WorkMsgTypeEnum.URGING.getContent().replace("@", lzResultRecord.getStaffName());
+ }else{
+ content = WorkMsgTypeEnum.URGING.getContent().replace("@", "您");
+ }
+
+ dingTalkUtil.sendSingleActionCardMSG(appid, info, WorkMsgTypeEnum.URGING.getTitle(),
+ content, WorkMsgTypeEnum.URGING.getBtnText(), url, token);
+ }
+ return "OK";
+
+ }else{
+ return "token无效";
+ }
+ }
+
public String sendWorkMSG(String appid, Long fromStaffid, long toStaffid, int type) {
//获取Token
StaffEntity toStaffEntity = staffService.selectStaffById(toStaffid);
@@ -383,13 +821,15 @@ public class DingtalkBusiness {
return R.error("未授权登录");
}
+
+
public class ThreadSendMessage implements Runnable{
List toStaffids;
StaffSimpleInfo fromStaff = null;
List recordIds;
WorkMsgTypeEnum workMsgTypeEnum;
String appid;
- String hostUrl = "https://lzmanagement.ldxinyong.com/digitization";
+ String hostUrl = homeUrl;
public ThreadSendMessage(StaffSimpleInfo fromStaff, List toStaffids, WorkMsgTypeEnum typeEnum, String appid){
this.fromStaff = fromStaff;
this.toStaffids = toStaffids;
diff --git a/src/main/java/com/lz/modules/job/model/responseBo/DepartmentStaffBo.java b/src/main/java/com/lz/modules/job/model/responseBo/DepartmentStaffBo.java
index 990fe21b..4d55936d 100644
--- a/src/main/java/com/lz/modules/job/model/responseBo/DepartmentStaffBo.java
+++ b/src/main/java/com/lz/modules/job/model/responseBo/DepartmentStaffBo.java
@@ -82,6 +82,10 @@ public class DepartmentStaffBo implements Serializable {
*/
private Integer isLeader;
+ /***
+ * 是否为老板
+ */
+ private Integer isBoss;
diff --git a/src/main/java/com/lz/modules/performance/controller/AssessManagerController.java b/src/main/java/com/lz/modules/performance/controller/AssessManagerController.java
index ae350613..2dbee8f0 100644
--- a/src/main/java/com/lz/modules/performance/controller/AssessManagerController.java
+++ b/src/main/java/com/lz/modules/performance/controller/AssessManagerController.java
@@ -6,6 +6,7 @@ import com.lz.common.utils.StringUtil;
import com.lz.modules.app.dto.StaffSimpleDto;
import com.lz.modules.flow.dao.FlowStartMapper;
import com.lz.modules.flow.entity.FlowStart;
+import com.lz.modules.flow.service.EvaluationStartStaffService;
import com.lz.modules.performance.req.AssessChangeReq;
import com.lz.modules.performance.req.AssessListReq;
import com.lz.modules.performance.req.AssessDetailReq;
@@ -47,6 +48,7 @@ public class AssessManagerController extends AbstractController{
private ChartResultService chartResultService;
+
@PostMapping("assess/manager/list")
@ApiOperation("获取考核列表")
@ApiResponses({@ApiResponse(code = 200,message = "成功",response = AssessManagerListRes.class)})
@@ -115,9 +117,6 @@ public class AssessManagerController extends AbstractController{
}
-
-
-
@GetMapping("assess/manager/delete")
@ApiOperation("删除考核任务")
@ApiResponses({@ApiResponse(code = 200,message = "成功",response = ChartStatisticalRes.class)})
diff --git a/src/main/java/com/lz/modules/performance/controller/ChartController.java b/src/main/java/com/lz/modules/performance/controller/ChartController.java
index 6c2c1c33..344ca94f 100644
--- a/src/main/java/com/lz/modules/performance/controller/ChartController.java
+++ b/src/main/java/com/lz/modules/performance/controller/ChartController.java
@@ -1,16 +1,9 @@
package com.lz.modules.performance.controller;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.google.common.collect.Lists;
import com.lz.common.utils.PageUtils;
import com.lz.common.utils.R;
-import com.lz.common.utils.StringUtil;
-import com.lz.modules.app.enums.ResultRecordStatusEnum;
import com.lz.modules.app.resp.OwnResultResp;
-import com.lz.modules.equipment.entity.model.BasePage;
import com.lz.modules.flow.dao.FlowStartMapper;
-import com.lz.modules.flow.entity.FlowStart;
-import com.lz.modules.flow.service.FlowStartService;
import com.lz.modules.performance.req.ChartResultReq;
import com.lz.modules.performance.req.ChartStartsReq;
import com.lz.modules.performance.req.OwnResultReq;
@@ -19,17 +12,13 @@ import com.lz.modules.performance.res.ChartStatisticalRes;
import com.lz.modules.performance.res.ResultRankListRes;
import com.lz.modules.performance.service.ChartResultService;
import com.lz.modules.sys.controller.AbstractController;
-import com.lz.modules.sys.entity.app.ResultRecord;
import com.lz.modules.sys.service.app.ResultRecordService;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
-import java.util.*;
-import java.util.concurrent.*;
-import java.util.function.Function;
-import java.util.function.Supplier;
+import java.util.List;
/**
* @Author: djc
@@ -110,6 +99,4 @@ public class ChartController extends AbstractController{
}
-
-
}
diff --git a/src/main/java/com/lz/modules/performance/controller/ExportController.java b/src/main/java/com/lz/modules/performance/controller/ExportController.java
new file mode 100644
index 00000000..d8d2b7be
--- /dev/null
+++ b/src/main/java/com/lz/modules/performance/controller/ExportController.java
@@ -0,0 +1,138 @@
+package com.lz.modules.performance.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.poi.excel.ExcelUtil;
+import cn.hutool.poi.excel.ExcelWriter;
+import cn.hutool.poi.excel.StyleSet;
+import com.google.common.collect.Lists;
+import com.lz.common.utils.PageUtils;
+import com.lz.common.utils.R;
+import com.lz.common.utils.StringUtil;
+import com.lz.modules.performance.req.ChartResultReq;
+import com.lz.modules.performance.res.LevelDetailExportRes;
+import com.lz.modules.performance.service.ChartResultService;
+import com.lz.modules.sys.entity.app.ResultRecord;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import io.swagger.models.auth.In;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddressList;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author: djc
+ * @Desc:
+ * @Date: 2020/12/1 10:26
+ */
+@RestController
+@RequestMapping("/file")
+@Slf4j
+@Api(value="导出excel接口", tags={"导出表格"})
+public class ExportController {
+ @Autowired
+ private ChartResultService chartResultService;
+
+
+ @GetMapping("/export/levelDetail")
+ @ApiOperation("导出等级详情")
+ public void levelDetail(ChartResultReq req,HttpServletResponse response){
+ try {
+ //Long userId = getUserId();
+ Long userId = 313L;
+ req.setLoginUserId(userId);
+ //获取数据
+ List data = chartResultService.selectLevelDetailList(req);
+ //导出
+ buildExcelExport(data,response);
+
+ } catch (Exception e) {
+ log.error("导出等级详情异常,e: ",e);
+ }
+
+ }
+
+
+
+
+
+ //对应实体属性名与表列名
+ private void buildData(Class> data,List tags,ExcelWriter writer){
+ if(data == null || CollectionUtils.isEmpty(tags)){
+ log.info("导出excel-实体属性或数据为空!");
+ return;
+ }
+ Field[] fields = data.getDeclaredFields();
+ if(fields.length != tags.size()){
+ log.info("导出excel-实体属性与数据大小不一致!");
+ return;
+ }
+ for(int i=0; i rowHead = CollUtil.newArrayList("序号", "工号", "员工姓名", "当月状态", "一级部门", "二级部门", "三级部门", "职位", "员工月度绩效考核评分","员工月度绩效考核结果等级");
+ ExcelWriter writer = ExcelUtil.getWriter();
+ writer.setColumnWidth(-1,15);
+ writer.passRows(4);
+ buildData(LevelDetailExportRes.class,rowHead,writer);
+ writer.merge(0,2,0,9,"绩效考核总表",false);
+ writer.merge(3,3,0,1,"考核月份",false);
+ writer.write(data, true);
+ writer.merge(7 + data.size(),8 + data.size(),0,0,"签字",false);
+
+ //设置下拉框数据
+ String[] values = {"已转正", "试用期"};
+ Sheet sheet = writer.getSheet();
+ int firstRow = 4;
+ int lastRow = 4;
+ int firstCol = 3;
+ int lastCol = 3;
+ CellRangeAddressList addressList = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
+ StyleSet styleSet = writer.getStyleSet();
+ CellStyle cellStyle = styleSet.getCellStyle();
+ cellStyle.setDataFormat((short) BuiltinFormats.getBuiltinFormat("text"));
+ DataValidationHelper helper = sheet.getDataValidationHelper();
+ DataValidationConstraint constraint = helper.createExplicitListConstraint(values);
+ DataValidation dataValidation = helper.createValidation(constraint, addressList);
+ writer.addValidationData(dataValidation);
+
+ //响应
+ String name = "test测试";
+ response.setContentType("application/vnd.ms-excel;charset=utf-8");
+ response.setHeader("Content-Disposition", "attachment;filename=" + name + ".xls");
+ ServletOutputStream out = null;
+ try {
+ out = response.getOutputStream();
+ writer.flush(out, true);
+ }
+ catch (IOException e) {
+ log.error("生成excel文档异常,e: ",e);
+ }
+ finally {
+ writer.close();
+ }
+ IoUtil.close(out);
+ }
+
+}
diff --git a/src/main/java/com/lz/modules/performance/dto/LevelDetailExportDto.java b/src/main/java/com/lz/modules/performance/dto/LevelDetailExportDto.java
new file mode 100644
index 00000000..363cf9ec
--- /dev/null
+++ b/src/main/java/com/lz/modules/performance/dto/LevelDetailExportDto.java
@@ -0,0 +1,37 @@
+package com.lz.modules.performance.dto;
+
+import lombok.Data;
+
+/**
+ * @Author: djc
+ * @Desc:
+ * @Date: 2020/12/2 10:15
+ */
+@Data
+public class LevelDetailExportDto {
+ //序号
+ private Long id;
+ //工号
+ private String staffNo;
+ //姓名
+ private String staffName;
+ //员工id
+ private Long staffId;
+ //当月状态
+ private int staffType;
+ //所属部门
+ private Long departmentId;
+ //一级部门
+ private String departmentOne;
+ //二级部门
+ private String departmentTwo;
+ //三级部门
+ private String departmentThree;
+ //职位
+ private String position;
+ //员工月度绩效考核评分
+ private String allScore;
+ //员工月度绩效考核结果等级
+ private String scoreLevel;
+
+}
diff --git a/src/main/java/com/lz/modules/performance/dto/SimpleDepartmentDto.java b/src/main/java/com/lz/modules/performance/dto/SimpleDepartmentDto.java
new file mode 100644
index 00000000..e51503a2
--- /dev/null
+++ b/src/main/java/com/lz/modules/performance/dto/SimpleDepartmentDto.java
@@ -0,0 +1,22 @@
+package com.lz.modules.performance.dto;
+
+import lombok.Data;
+
+/**
+ * @Author: djc
+ * @Desc:
+ * @Date: 2020/12/1 16:37
+ */
+@Data
+public class SimpleDepartmentDto {
+ //部门id
+ private String departmentId;
+ //上级部门id
+ private String departmentParentId;
+ //组织架构名称/部门名称
+ private String departmentName;
+ //第几级部门
+ private Integer level;
+
+
+}
diff --git a/src/main/java/com/lz/modules/performance/dto/StaffTypeDto.java b/src/main/java/com/lz/modules/performance/dto/StaffTypeDto.java
new file mode 100644
index 00000000..5822caf5
--- /dev/null
+++ b/src/main/java/com/lz/modules/performance/dto/StaffTypeDto.java
@@ -0,0 +1,28 @@
+package com.lz.modules.performance.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author: djc
+ * @Desc:
+ * @Date: 2020/12/1 16:11
+ */
+@Data
+public class StaffTypeDto {
+ //员工类型
+ private int staffType;
+ //员工id
+ private Long staffId;
+ //职位
+ private String position;
+ //人员状态
+ private Long staffStatus;
+ //入职日期
+ private Date entryTime;
+ //转正日期
+ private Date officialTime;
+ //离职时间
+ private Date resignationTime;
+}
diff --git a/src/main/java/com/lz/modules/performance/res/LevelDetailExportRes.java b/src/main/java/com/lz/modules/performance/res/LevelDetailExportRes.java
new file mode 100644
index 00000000..50b56404
--- /dev/null
+++ b/src/main/java/com/lz/modules/performance/res/LevelDetailExportRes.java
@@ -0,0 +1,34 @@
+package com.lz.modules.performance.res;
+
+import lombok.Data;
+
+/**
+ * @Author: djc
+ * @Desc:
+ * @Date: 2020/12/1 15:04
+ */
+@Data
+public class LevelDetailExportRes {
+ //序号
+ private Long id;
+ //工号
+ private String staffNo;
+ //姓名
+ private String staffName;
+ //当月状态
+ private String staffType;
+ //一级部门
+ private String departmentOne;
+ //二级部门
+ private String departmentTwo;
+ //三级部门
+ private String departmentThree;
+ //职位
+ private String position;
+ //员工月度绩效考核评分
+ private String allScore;
+ //员工月度绩效考核结果等级
+ private String scoreLevel;
+
+
+}
diff --git a/src/main/java/com/lz/modules/performance/service/ChartResultService.java b/src/main/java/com/lz/modules/performance/service/ChartResultService.java
index 6d67af17..09a11346 100644
--- a/src/main/java/com/lz/modules/performance/service/ChartResultService.java
+++ b/src/main/java/com/lz/modules/performance/service/ChartResultService.java
@@ -8,6 +8,7 @@ import com.lz.modules.performance.req.ChartStartsReq;
import com.lz.modules.performance.res.ChartStartsRes;
import com.lz.modules.performance.res.ChartStatistical;
import com.lz.modules.performance.res.ChartStatisticalRes;
+import com.lz.modules.performance.res.LevelDetailExportRes;
import java.util.List;
@@ -28,4 +29,6 @@ public interface ChartResultService {
List countAssessNumByFlowProcess(AssessDetailReq req);
+ List selectLevelDetailList(ChartResultReq req);
+
}
diff --git a/src/main/java/com/lz/modules/performance/service/impl/ChartResultServiceImpl.java b/src/main/java/com/lz/modules/performance/service/impl/ChartResultServiceImpl.java
index e3731c09..e85918b2 100644
--- a/src/main/java/com/lz/modules/performance/service/impl/ChartResultServiceImpl.java
+++ b/src/main/java/com/lz/modules/performance/service/impl/ChartResultServiceImpl.java
@@ -12,9 +12,7 @@ import com.lz.common.utils.StringUtil;
import com.lz.modules.app.entity.DepartmentsEntity;
import com.lz.modules.app.entity.DepartmentsStaffRelateEntity;
import com.lz.modules.app.entity.StaffEntity;
-import com.lz.modules.app.service.DepartmentsService;
-import com.lz.modules.app.service.DepartmentsStaffRelateService;
-import com.lz.modules.app.service.StaffService;
+import com.lz.modules.app.service.*;
import com.lz.modules.flow.dao.EvaluationGroupMapper;
import com.lz.modules.flow.dao.FlowChartMapper;
import com.lz.modules.flow.dao.FlowStartMapper;
@@ -23,6 +21,8 @@ import com.lz.modules.flow.entity.FlowStart;
import com.lz.modules.flow.service.EvaluationGroupService;
import com.lz.modules.flow.service.FlowChartService;
import com.lz.modules.flow.service.FlowStartService;
+import com.lz.modules.performance.dto.LevelDetailExportDto;
+import com.lz.modules.performance.dto.StaffTypeDto;
import com.lz.modules.performance.enums.ResultFlowProcessEnum;
import com.lz.modules.performance.req.AssessDetailReq;
import com.lz.modules.performance.req.ChartResultReq;
@@ -30,6 +30,7 @@ import com.lz.modules.performance.req.ChartStartsReq;
import com.lz.modules.performance.res.ChartStartsRes;
import com.lz.modules.performance.res.ChartStatistical;
import com.lz.modules.performance.res.ChartStatisticalRes;
+import com.lz.modules.performance.res.LevelDetailExportRes;
import com.lz.modules.performance.service.AssessService;
import com.lz.modules.performance.service.ChartResultService;
import com.lz.modules.sys.dao.app.ResultRecordMapper;
@@ -37,6 +38,8 @@ import com.lz.modules.sys.entity.app.ResultRecord;
import com.lz.modules.sys.service.app.ResultRecordService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -75,6 +78,8 @@ public class ChartResultServiceImpl implements ChartResultService {
private AssessService assessService;
@Autowired
private EvaluationGroupMapper evaluationGroupMapper;
+ @Autowired
+ private StaffOccupationService staffOccupationService;
private static final Long processId = 1L;
@@ -183,34 +188,7 @@ public class ChartResultServiceImpl implements ChartResultService {
@Override
public PageUtils selectChartDetailList(ChartResultReq req) {
- String departmentIds = req.getDepartmentIds();
- Set allDepart = Sets.newHashSet();
- if(StringUtil.isNotBlank(departmentIds)){
- String[] split = departmentIds.split(",");
- for(String s:split){
- List deparmentIds = staffService.selectAllDeparmentIdsByDepartmentParentId(s);
- allDepart.addAll(deparmentIds);
- }
- }
- List allDeparmentIds = new ArrayList<>(allDepart);
- //自己管理的和所有的部门交集
- log.info("selectChartDetailList 查询部门:" + JSON.toJSONString(allDeparmentIds));
- List mandepartmentIds = assessService.roleDepartments(req.getLoginUserId());
- if(mandepartmentIds!=null ){
- if(mandepartmentIds.size()==0){
- return new PageUtils();
- }
- log.info("selectChartDetailList 管理部门:" + JSON.toJSONString(mandepartmentIds));
- mandepartmentIds.retainAll(allDeparmentIds);
- if(mandepartmentIds.size()==0){
- return new PageUtils();
- }
- }
- else {
- //如果掌管所有部门,查询请求部门
- mandepartmentIds = allDeparmentIds;
- }
- log.info("selectChartDetailList 交集部门:" + JSON.toJSONString(mandepartmentIds));
+ List mandepartmentIds = getMandepartmentIds(req.getDepartmentIds(), req.getLoginUserId());
List finalMandepartmentIds = mandepartmentIds;
PageUtils pageUtils = PageUtils.startPage(req.getCurrPage(), req.getPageSize()).doSelect(
page -> resultRecordMapper.selectChartDetailList(page, finalMandepartmentIds,req.getStartId(),req.getScoreLevel())
@@ -261,6 +239,72 @@ public class ChartResultServiceImpl implements ChartResultService {
return data;
}
+
+ @Override
+ public List selectLevelDetailList(ChartResultReq req) {
+ List mandepartmentIds = getMandepartmentIds(req.getDepartmentIds(), req.getLoginUserId());
+ List levelDetailExportDtos = resultRecordMapper.selectLevelDetailList(mandepartmentIds, req.getStartId(), req.getScoreLevel());
+
+ if(CollectionUtils.isEmpty(levelDetailExportDtos)){
+ return Collections.EMPTY_LIST;
+ }
+ List staffIds = levelDetailExportDtos.stream().map(LevelDetailExportDto::getStaffId).collect(Collectors.toList());
+ List depIds = levelDetailExportDtos.stream().map(levelDetailExportDto -> levelDetailExportDto.getDepartmentId().toString()).collect(Collectors.toList());
+
+ List staffTypeDtos = staffOccupationService.selectStaffTypesByStaffIds(staffIds);
+ //状态
+ Map types = Maps.newHashMap();
+ //职位
+ Map positions = Maps.newHashMap();
+
+ for(StaffTypeDto dto: staffTypeDtos){
+ types.put(dto.getStaffId(),dto.getStaffType());
+ positions.put(dto.getStaffId(),dto.getPosition());
+ }
+ Map> map = departmentsService.selectDepartmentTreeByDepIds(depIds);
+
+ for(LevelDetailExportDto res: levelDetailExportDtos){
+ Integer integer = types.get(res.getStaffId());
+ String position = positions.get(res.getStaffId());
+ if(integer !=null){
+ res.setStaffType(integer);
+ }
+ if(StringUtil.isNotBlank(position)){
+ res.setPosition(position);
+ }
+ List names = map.get(res.getDepartmentId());
+ if(CollectionUtils.isNotEmpty(names)){
+ Collections.reverse(names);
+ int size = names.size();
+ if(size>0 && StringUtils.isNotBlank(names.get(0))){
+ res.setDepartmentOne(names.get(0));
+ }
+ if(size>1 && StringUtils.isNotBlank(names.get(1))){
+ res.setDepartmentTwo(names.get(1));
+ }
+ if(size>2 && StringUtils.isNotBlank(names.get(2))){
+ res.setDepartmentThree(names.get(2));
+ }
+ }
+ }
+
+ //拷贝为excel格式
+ List levelDetailExportRes = levelDetailExportDtos.stream().map(levelDetailExportDto -> {
+ LevelDetailExportRes res = new LevelDetailExportRes();
+ BeanUtils.copyProperties(levelDetailExportDto,res);
+ if(1 == levelDetailExportDto.getStaffType()){
+ res.setStaffType("已转正");
+ }
+ if(2 == levelDetailExportDto.getStaffType()){
+ res.setStaffType("试用期");
+ }
+ return res;
+ }).collect(Collectors.toList());
+
+ return levelDetailExportRes;
+
+ }
+
//构建流程默认人数
private List buildProcess(List process,Long startId,List mandepartmentIds,AssessDetailReq req){
List data = Lists.newArrayList();
@@ -314,4 +358,36 @@ public class ChartResultServiceImpl implements ChartResultService {
});
return depStaffs;
}
+
+ private List getMandepartmentIds(String departmentIds,Long loginUserId){
+ Set allDepart = Sets.newHashSet();
+ if(StringUtil.isNotBlank(departmentIds)){
+ String[] split = departmentIds.split(",");
+ for(String s:split){
+ List deparmentIds = staffService.selectAllDeparmentIdsByDepartmentParentId(s);
+ allDepart.addAll(deparmentIds);
+ }
+ }
+ List allDeparmentIds = new ArrayList<>(allDepart);
+ //自己管理的和所有的部门交集
+ log.info("selectChartDetailList 查询部门:" + JSON.toJSONString(allDeparmentIds));
+ List mandepartmentIds = assessService.roleDepartments(loginUserId);
+ if(mandepartmentIds!=null ){
+ if(mandepartmentIds.size()==0){
+ return Collections.EMPTY_LIST;
+ }
+ log.info("selectChartDetailList 管理部门:" + JSON.toJSONString(mandepartmentIds));
+ mandepartmentIds.retainAll(allDeparmentIds);
+ if(mandepartmentIds.size()==0){
+ return Collections.EMPTY_LIST;
+ }
+ }
+ else {
+ //如果掌管所有部门,查询请求部门
+ mandepartmentIds = allDeparmentIds;
+ }
+ log.info("selectChartDetailList 交集部门:" + JSON.toJSONString(mandepartmentIds));
+ return mandepartmentIds;
+
+ }
}
diff --git a/src/main/java/com/lz/modules/sys/dao/app/ResultRecordMapper.java b/src/main/java/com/lz/modules/sys/dao/app/ResultRecordMapper.java
index 6607f392..316791c8 100644
--- a/src/main/java/com/lz/modules/sys/dao/app/ResultRecordMapper.java
+++ b/src/main/java/com/lz/modules/sys/dao/app/ResultRecordMapper.java
@@ -16,11 +16,13 @@ import com.lz.modules.app.req.ReportListReq;
import com.lz.modules.app.req.ResultRecordReq;
import com.lz.modules.app.resp.OwnResultResp;
import com.lz.modules.flow.model.ResultRecordDto;
+import com.lz.modules.performance.dto.LevelDetailExportDto;
import com.lz.modules.performance.dto.ToScoreDingTalkDto;
import com.lz.modules.performance.req.AssessDetailReq;
import com.lz.modules.performance.req.OwnResultReq;
import com.lz.modules.performance.res.AssessManagerDetailRes;
import com.lz.modules.performance.res.ChartStatistical;
+import com.lz.modules.performance.res.LevelDetailExportRes;
import com.lz.modules.sys.entity.app.ResultRecord;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -108,4 +110,7 @@ public interface ResultRecordMapper extends BaseMapper {
List selectResultRecordsByStartId(Long startId);
+ List selectLevelDetailList(@Param("departmentIds") List departmentIds, @Param("startId")Long startId, @Param("scoreLevel")String scoreLevel);
+
+
}
\ No newline at end of file
diff --git a/src/main/java/com/lz/modules/sys/service/app/impl/ResultRecordServiceImpl.java b/src/main/java/com/lz/modules/sys/service/app/impl/ResultRecordServiceImpl.java
index 06f34868..a9f18179 100644
--- a/src/main/java/com/lz/modules/sys/service/app/impl/ResultRecordServiceImpl.java
+++ b/src/main/java/com/lz/modules/sys/service/app/impl/ResultRecordServiceImpl.java
@@ -841,10 +841,11 @@ public class ResultRecordServiceImpl extends ServiceImpl flows,FlowApprovalRole flowApprovalRole ,ResultRecord resultRecord,int i,Integer stepType ){
flowRecord.setApprovalStaffName(approvalStaff.getName());
flowRecord.setApprovalStaffId(approvalStaff.getId());
- flowRecord.setFlowName(getFlow(flows, flowApprovalRole.getFlowId()).getOptDesc());
+ Flow flow = getFlow(flows, flowApprovalRole.getFlowId());
+ flowRecord.setFlowName(flow.getOptDesc());
flowRecord.setRecordStaffId(resultRecord.getStaffId());
flowRecord.setFlowId(flowApprovalRole.getFlowId());
- FlowChart flowChart = flowService.selectFlowChartByChartId(flowApprovalRole.getFlowId());
+ FlowChart flowChart = flowService.selectFlowChartByFlow(flow);
flowRecord.setProcessId(flowChart.getProcessId());
flowRecord.setFlowProcess(flowChart.getFlowProcess());
String staffRole = StaffRoles.getStaffRole(approvalStaff.getId(), StringUtil.strToLongs(flowApprovalRole.getRoleId()));
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 70cd2e92..a9d3cf4a 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -37,6 +37,8 @@ domain:
main: "http://192.168.43.94:8001"
sms:
code: false
+swagger:
+ enable: true
##多数据源的配置
#dynamic:
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 964f818f..e6d9522d 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -36,6 +36,8 @@ domain:
main: "https://lzmanagement.ldxinyong.com"
sms:
code: true
+swagger:
+ enable: false
##多数据源的配置
#dynamic:
# datasource:
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index 91fd96e5..4caf5f00 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -36,7 +36,8 @@ domain:
main: "http:/localhost"
sms:
code: false
-
+swagger:
+ enable: true
##多数据源的配置
#dynamic:
diff --git a/src/main/resources/mapper/app/ResultRecordMapper.xml b/src/main/resources/mapper/app/ResultRecordMapper.xml
index 30a0d8cf..0f15ce89 100644
--- a/src/main/resources/mapper/app/ResultRecordMapper.xml
+++ b/src/main/resources/mapper/app/ResultRecordMapper.xml
@@ -619,6 +619,29 @@
and start_id = #{startId}
+
diff --git a/src/main/resources/mapper/flow/EvaluationGroupMapper.xml b/src/main/resources/mapper/flow/EvaluationGroupMapper.xml
index 82c3279b..ba5c7090 100644
--- a/src/main/resources/mapper/flow/EvaluationGroupMapper.xml
+++ b/src/main/resources/mapper/flow/EvaluationGroupMapper.xml
@@ -111,8 +111,9 @@
#{item}
)
- group by id
+
+ group by id order by id desc
+
+
diff --git a/src/main/resources/mapper/generator/DepartmentsDao.xml b/src/main/resources/mapper/generator/DepartmentsDao.xml
index ba3c028f..7928da60 100644
--- a/src/main/resources/mapper/generator/DepartmentsDao.xml
+++ b/src/main/resources/mapper/generator/DepartmentsDao.xml
@@ -188,4 +188,22 @@
+
+
+
+
+
+
diff --git a/src/main/resources/mapper/generator/StaffDao.xml b/src/main/resources/mapper/generator/StaffDao.xml
index 102b4ab8..469c6543 100644
--- a/src/main/resources/mapper/generator/StaffDao.xml
+++ b/src/main/resources/mapper/generator/StaffDao.xml
@@ -248,43 +248,45 @@
diff --git a/src/main/resources/mapper/generator/StaffOccupationDao.xml b/src/main/resources/mapper/generator/StaffOccupationDao.xml
index c5e70cfc..ff2f00c7 100644
--- a/src/main/resources/mapper/generator/StaffOccupationDao.xml
+++ b/src/main/resources/mapper/generator/StaffOccupationDao.xml
@@ -60,7 +60,7 @@
+
+
+
+
diff --git a/src/test/java/com/lz/mysql/MysqlMain.java b/src/test/java/com/lz/mysql/MysqlMain.java
index 09095683..9433eb0c 100644
--- a/src/test/java/com/lz/mysql/MysqlMain.java
+++ b/src/test/java/com/lz/mysql/MysqlMain.java
@@ -1,5 +1,7 @@
package com.lz.mysql;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
import com.lz.common.utils.StringUtil;
import com.lz.modules.flow.entity.FlowChartRole;
import org.springframework.util.ResourceUtils;
@@ -65,51 +67,7 @@ public class MysqlMain {
*/
public static void main(String[] args) throws Exception {
- /*Long a = 2l;
- Long b = 3l;
- String value = "aaa";
- StopWatch stopWatch = new StopWatch();
- stopWatch.start("测试静态方法");
- for(int i = 0; i < 10000; i++){
- if(TestStaticAndHuo.isEmpt(value)){
- }
- }
- stopWatch.stop();
-
- stopWatch.start("测试对象方法");
- for(int i = 0; i < 10000; i++){
- if(value == null || value.length() == 0){
-
- }
- }
- stopWatch.stop();
-
- System.out.println(stopWatch.prettyPrint());*/
-
- /*List testMaps = new ArrayList<>();
- TestMap test = new TestMap();
- test.setName("123");
- test.setMobile("18969093321");
- testMaps.add(test);
-
- test = new TestMap();
- test.setName("123");
- test.setMobile("18969093321");
- testMaps.add(test);
-
- Map t = testMaps.stream().collect(Collectors.toMap(TestMap::getName, testMap -> testMap));
- List flowChartRoles = new ArrayList<>();
- flowChartRoles.add(1L);
- flowChartRoles.add(2L);
- flowChartRoles.add(3L);
- flowChartRoles.add(4L);
- String roles = flowChartRoles.stream().map(new Function() {
- @Override
- public String apply(Long flowChartRole) {
- return flowChartRole.toString();
- }
- }).collect(Collectors.joining(","));*/
String path = ResourceUtils.getURL("classpath:").getPath();
System.out.println(path);