From 378c0bf641a86f5b21c3528b730e67554937f6b4 Mon Sep 17 00:00:00 2001 From: chen <1251790704@qq.com> Date: Thu, 31 Dec 2020 17:49:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DgEfficiencyController.java | 150 +++++- .../PersonalEfficiencyListRequest.java | 30 ++ .../PersonalEfficiencyListResponse.java | 20 +- .../service/IDgEfficiencyService.java | 4 + .../service/impl/DgEfficiencyServiceImpl.java | 434 +++++++++++++++++- .../domain/guarantee/po/StatusPO.java | 31 ++ .../utils/excel/TaskNodeConverter.java | 87 ++++ 7 files changed, 725 insertions(+), 31 deletions(-) create mode 100644 dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/model/request/PersonalEfficiencyListRequest.java create mode 100644 dq-framework-model/src/main/java/com/daqing/framework/domain/guarantee/po/StatusPO.java create mode 100644 dq-framework-utils/src/main/java/com/daqing/framework/utils/excel/TaskNodeConverter.java diff --git a/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/controller/DgEfficiencyController.java b/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/controller/DgEfficiencyController.java index 905c50cd..4296eb83 100644 --- a/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/controller/DgEfficiencyController.java +++ b/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/controller/DgEfficiencyController.java @@ -1,23 +1,28 @@ package com.daqing.financial.guarantee.controller; +import com.alibaba.fastjson.JSONObject; +import com.daqing.financial.guarantee.feign.HrmsFeignService; import com.daqing.financial.guarantee.model.request.DgEfficiencyTeamRequest; +import com.daqing.financial.guarantee.model.request.PersonalEfficiencyListRequest; +import com.daqing.financial.guarantee.model.response.PersonalEfficiencyListResponse; import com.daqing.financial.guarantee.service.IDgEfficiencyService; +import com.daqing.financial.guarantee.util.DateUtils; +import com.daqing.framework.model.StatusCode; import com.daqing.framework.model.response.ResponseResult; +import com.daqing.framework.utils.excel.EasyExcelUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import com.daqing.financial.guarantee.service.IDgEfficiencyService; -import com.daqing.framework.model.response.ResponseResult; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; -import java.util.Map; +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * 流程效率 @@ -33,6 +38,9 @@ public class DgEfficiencyController { @Autowired private IDgEfficiencyService dgEfficiencyService; + @Autowired + private HrmsFeignService hrmsFeignService; + /** * 团队效率 */ @@ -51,4 +59,126 @@ public class DgEfficiencyController { Map result = dgEfficiencyService.approvalNum(); return ResponseResult.SUCCESS(result); } + + @ApiOperation(value = "个人效率记录列表") + @PostMapping("/personalEfficiencyList") + public ResponseResult personalEfficiencyList( + @ApiParam(name = "personalEfficiencyListRequest", value = "个人效率列表查询对象") + @RequestBody PersonalEfficiencyListRequest personalEfficiencyListRequest){ + List responseList = dgEfficiencyService.queryPersonalEfficiencyList(); + + if(responseList.size()>0){ + List arr = new ArrayList<>(); + for (PersonalEfficiencyListResponse res : responseList) { + arr.add(res.getApplicantId()); + } + //根据提单人id查询其部门名称 + ResponseResult responseResult = hrmsFeignService.getAccountAndDeptNameById(arr); + List employeeMessage = null; + if(responseResult.getData() != null){ + employeeMessage = (List) responseResult.getData(); + } + + for (PersonalEfficiencyListResponse response:responseList) { + for(LinkedHashMap res : employeeMessage){ + if(response.getApplicantId().equals(res.get("id"))){//如果提单人id相同情况下,就往对象里面赋值 + response.setApplicant(JSONObject.toJSONString(res.get("account")).replace("\"","")); + } + } + } + } + //根据条件筛选数据 + if (personalEfficiencyListRequest.getOperatingStatus()!=null){ + // 已发起 + if (personalEfficiencyListRequest.getOperatingStatus().equals(StatusCode.CZ_LAUNCH)){ + responseList = responseList.stream().filter(p -> p.getOperatingStatus().equals(StatusCode.CZ_LAUNCH)).collect(Collectors.toList()); + // 待处理 + }else if (personalEfficiencyListRequest.getOperatingStatus().equals(StatusCode.CZ_ON_HAND)){ + responseList = responseList.stream().filter(p -> p.getOperatingStatus().equals(StatusCode.CZ_ON_HAND)).collect(Collectors.toList()); + // 已处理 + }else if (personalEfficiencyListRequest.getOperatingStatus().equals(StatusCode.CZ_PROCESSED)){ + responseList = responseList.stream().filter(p -> p.getOperatingStatus().equals(StatusCode.CZ_PROCESSED)).collect(Collectors.toList()); + } + } + + // 时间筛选(固定时间) + if (personalEfficiencyListRequest.getCreateFixedTime() != null && personalEfficiencyListRequest.getStartTime() == null && personalEfficiencyListRequest.getEndTime() == null) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + switch (personalEfficiencyListRequest.getCreateFixedTime()) { + case 0: + personalEfficiencyListRequest.setStartTime(dateFormat.format(DateUtils.getDayBegin())); + personalEfficiencyListRequest.setEndTime(dateFormat.format(DateUtils.getDayEnd()));// 今天 + break; + case 1: + personalEfficiencyListRequest.setStartTime(dateFormat.format(DateUtils.getBeginDayOfYesterday())); + personalEfficiencyListRequest.setEndTime(dateFormat.format(DateUtils.getEndDayOfYesterDay()));// 昨天 + break; + case 2: + personalEfficiencyListRequest.setStartTime(dateFormat.format(DateUtils.getBeginDayOfWeek())); + personalEfficiencyListRequest.setEndTime(dateFormat.format(DateUtils.getEndDayOfWeek()));// 本周 + break; + case 3: + personalEfficiencyListRequest.setStartTime(dateFormat.format(DateUtils.getBeginDayOfMonth())); + personalEfficiencyListRequest.setEndTime(dateFormat.format(DateUtils.getEndDayOfMonth()));// 本月 + break; + case 4: + personalEfficiencyListRequest.setStartTime(dateFormat.format(DateUtils.getBeginDayOfYear())); + personalEfficiencyListRequest.setEndTime(dateFormat.format(DateUtils.getEndDayOfYear()));// 本年 + break; + default: + personalEfficiencyListRequest.setStartTime(null); + personalEfficiencyListRequest.setEndTime(null); + } + //获取毫秒数 + long longStart = getLongDate(personalEfficiencyListRequest.getStartTime()); + long longEnd = getLongDate(personalEfficiencyListRequest.getEndTime()); + Stream booleanStream = responseList.stream().map(p -> getLongDate(p.getApplicationDate()) > longStart && getLongDate(p.getApplicationDate()) < longEnd); + } + return ResponseResult.SUCCESS(responseList); + } + + public static long getLongDate(String stringDate){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + try { + Date date = sdf.parse(stringDate); + return date.getTime(); + } catch (ParseException e) { + e.printStackTrace(); + } + return 0L; + } + + @ApiOperation(value = "个人效率记录列表导出") + @GetMapping("/personalEfficiencyListExport") + public void personalEfficiencyListExport(HttpServletResponse httpServletResponse){ + List responseList = dgEfficiencyService.queryPersonalEfficiencyList(); + if(responseList.size()>0){ + List arr = new ArrayList<>(); + for (PersonalEfficiencyListResponse res : responseList) { + arr.add(res.getApplicantId()); + } + //根据提单人id查询其部门名称 + ResponseResult responseResult = hrmsFeignService.getAccountAndDeptNameById(arr); + List employeeMessage = null; + if(responseResult.getData() != null){ + employeeMessage = (List) responseResult.getData(); + } + + for (PersonalEfficiencyListResponse response:responseList) { + for(LinkedHashMap res : employeeMessage){ + if(response.getApplicantId().equals(res.get("id"))){//如果提单人id相同情况下,就往对象里面赋值 + response.setApplicant(JSONObject.toJSONString(res.get("account")).replace("\"","")); + } + } + } + } + try { + EasyExcelUtil.download(httpServletResponse,PersonalEfficiencyListResponse.class,responseList,"个人效率记录列表","第一页"); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + } diff --git a/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/model/request/PersonalEfficiencyListRequest.java b/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/model/request/PersonalEfficiencyListRequest.java new file mode 100644 index 00000000..91571f33 --- /dev/null +++ b/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/model/request/PersonalEfficiencyListRequest.java @@ -0,0 +1,30 @@ +package com.daqing.financial.guarantee.model.request; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.ToString; + +/** + * @Author chen + * @DATE 2020/12/31 15:35 + * @Version 1.0 + */ +@Data +@ToString +public class PersonalEfficiencyListRequest { + + @ApiModelProperty("申请时间,固定类型,0:今天,1:昨天,2:本周,3:本月,4:本年") + private Integer createFixedTime; + + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @ApiModelProperty("起始时间") + private String startTime; + + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @ApiModelProperty("结束时间") + private String endTime; + + @ApiModelProperty("操作状态") + private Integer operatingStatus; +} diff --git a/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/model/response/PersonalEfficiencyListResponse.java b/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/model/response/PersonalEfficiencyListResponse.java index b35bfdcf..81b245ab 100644 --- a/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/model/response/PersonalEfficiencyListResponse.java +++ b/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/model/response/PersonalEfficiencyListResponse.java @@ -1,15 +1,14 @@ package com.daqing.financial.guarantee.model.response; +import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import com.daqing.framework.utils.excel.ApprovalStatusConverter; import com.daqing.framework.utils.excel.BusinessStatusConverter; import com.daqing.framework.utils.excel.OperatingStatusConverter; -import com.fasterxml.jackson.annotation.JsonFormat; +import com.daqing.framework.utils.excel.TaskNodeConverter; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import java.util.Date; - /** * @Author chen * @DATE 2020/12/28 16:31 @@ -18,6 +17,14 @@ import java.util.Date; @Data public class PersonalEfficiencyListResponse { + @ExcelIgnore + @ApiModelProperty(value = "业务id") + private Integer businessId; + + @ExcelIgnore + @ApiModelProperty(value = "提单人") + private Integer applicantId; + @ApiModelProperty(value = "提单人") @ExcelProperty(value = "提单人",index = 1) private String applicant; @@ -28,8 +35,7 @@ public class PersonalEfficiencyListResponse { @ApiModelProperty("申请日期") @ExcelProperty(value = "申请日期",index = 3) - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") - private Date applicationDate; + private String applicationDate; @ApiModelProperty("累计耗时") @ExcelProperty(value = "累计耗时",index = 4) @@ -40,8 +46,8 @@ public class PersonalEfficiencyListResponse { private String completeTime; @ApiModelProperty("任务节点") - @ExcelProperty(value = "任务节点",index = 6) - private Double taskNode; + @ExcelProperty(value = "任务节点",index = 6,converter = TaskNodeConverter.class) + private Integer taskNode; @ApiModelProperty("审批状态") @ExcelProperty(value = "审核状态",index = 7,converter = ApprovalStatusConverter.class) diff --git a/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/service/IDgEfficiencyService.java b/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/service/IDgEfficiencyService.java index 05c36682..a7a4c729 100644 --- a/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/service/IDgEfficiencyService.java +++ b/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/service/IDgEfficiencyService.java @@ -2,10 +2,12 @@ package com.daqing.financial.guarantee.service; import com.baomidou.mybatisplus.extension.service.IService; import com.daqing.financial.guarantee.model.request.DgEfficiencyTeamRequest; +import com.daqing.financial.guarantee.model.response.PersonalEfficiencyListResponse; import com.daqing.framework.domain.guarantee.DgApplyAmountInfo; import org.springframework.stereotype.Service; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -16,4 +18,6 @@ public interface IDgEfficiencyService extends IService { Map approvalNum(); HashMap> queryList(DgEfficiencyTeamRequest dgEfficiencyTeamRequest); + + List queryPersonalEfficiencyList(); } diff --git a/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/service/impl/DgEfficiencyServiceImpl.java b/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/service/impl/DgEfficiencyServiceImpl.java index d50c3597..8f8753fb 100644 --- a/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/service/impl/DgEfficiencyServiceImpl.java +++ b/dq-financial-guarantee/src/main/java/com/daqing/financial/guarantee/service/impl/DgEfficiencyServiceImpl.java @@ -1,25 +1,33 @@ package com.daqing.financial.guarantee.service.impl; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.daqing.financial.guarantee.controller.DgApplyAmountInfoController; -import com.daqing.financial.guarantee.mapper.DgAuditProcessMapper; -import com.daqing.financial.guarantee.mapper.DgEfficiencyMapper; +import com.daqing.financial.guarantee.mapper.*; +import com.daqing.financial.guarantee.model.request.DgComplianceInvestigationRequest; import com.daqing.financial.guarantee.model.request.DgEfficiencyTeamRequest; -import com.daqing.financial.guarantee.model.response.EfficiencyApprovalResponse; +import com.daqing.financial.guarantee.model.response.*; import com.daqing.financial.guarantee.service.IDgEfficiencyService; import com.daqing.financial.guarantee.util.DateUtils; import com.daqing.framework.domain.guarantee.DgApplyAmountInfo; -import org.springframework.stereotype.Service; - - +import com.daqing.framework.domain.guarantee.DgAuditProcess; import com.daqing.framework.domain.guarantee.po.DgTeamEfficiencyPO; -import java.text.SimpleDateFormat; -import java.util.*; - +import com.daqing.framework.domain.guarantee.po.DgWorkConferencePO; +import com.daqing.framework.domain.guarantee.po.StatusPO; +import com.daqing.framework.model.response.PromptSuccess; +import com.daqing.framework.util.RedisUtil; +import com.google.common.collect.Maps; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; -import java.util.List; +import javax.servlet.http.HttpServletRequest; +import java.text.SimpleDateFormat; +import java.util.*; /** * @auther River @@ -30,9 +38,44 @@ public class DgEfficiencyServiceImpl extends ServiceImpltimeList = dgAuditProcessMapper.selectTenDays(Integer.parseInt(userId)); + List timeList = dgAuditProcessMapper.selectTenDays(Integer.parseInt(userId)); //近十天审批数目的值的数组 - ListapprovalList = dgAuditProcessMapper.selectApprovalNum(Integer.parseInt(userId)); + List approvalList = dgAuditProcessMapper.selectApprovalNum(Integer.parseInt(userId)); Map map = new HashMap(); - map.put("timeArr",timeList); - map.put("approvalNumArr",approvalList); + map.put("timeArr", timeList); + map.put("approvalNumArr", approvalList); return map; } + + @Override + public List queryPersonalEfficiencyList() { + int size = 100; + List efficiencyList = new ArrayList<>(); + //获取当前登录用户id + int currentUser = Integer.parseInt(this.getUserId()); + //获取当前用户拥有的角色ids + String roleIds = RedisUtil.get("dq:userRole:" + currentUser); + //字符串格式 + List roleIdList = new ArrayList<>(); + if (roleIds != null) { + String[] ids = roleIds.split(","); + roleIdList = Arrays.asList(ids); + } + //数字格式 + List roleList = new ArrayList<>(); + if (roleIds != null) { + String[] roleId = roleIds.split(","); + for (String id : roleId) { + roleList.add(Integer.parseInt(id)); + } + } + //查询用户处理过的业务 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("user_id", currentUser).groupBy("business_id").select("business_id"); + List auditProcessList = dgAuditProcessMapper.selectList(wrapper); + if (auditProcessList != null && auditProcessList.size() != 0) { + List businessIdList = new ArrayList<>(); + auditProcessList.forEach(dgAuditProcess -> { + businessIdList.add(dgAuditProcess.getBusinessId()); + }); + + //根据业务id查询业务流程,统计耗时,完成时间 + businessIdList.forEach(businessId -> { + //new返回对象 + PersonalEfficiencyListResponse efficiencyListResponse = new PersonalEfficiencyListResponse(); + efficiencyListResponse.setBusinessId(businessId); + //根据业务id查询业务 + DgApplyAmountInfo dgApplyAmountInfo = applyAmountInfoMapper.selectById(businessId); + //业务申请日期 + Date createTime = dgApplyAmountInfo.getCreateTime(); + //客户公司id + Integer companyId = dgApplyAmountInfo.getCompanyId(); + //提单人id + Integer presenterId = dgApplyAmountInfo.getPresenterId(); + efficiencyListResponse.setApplicantId(presenterId); + efficiencyListResponse.setApplicationDate(new SimpleDateFormat("yyyy-MM-dd").format(createTime)); + efficiencyListResponse.setClientName(String.valueOf(companyId)); + //获取累计耗时,完成时间,任务节点 + HashMap hashMap = getTime(businessId, currentUser); + Object countTime = hashMap.get("countTime"); + Object endTime = hashMap.get("endTime"); + efficiencyListResponse.setTimeConsuming(String.valueOf(countTime)); + efficiencyListResponse.setCompleteTime(String.valueOf(endTime)); + efficiencyList.add(efficiencyListResponse); + }); + //获取每个业务id的三种状态 + HashMap hashMap = Maps.newHashMap(); + //角色不为空 + //担保业务员角色、担保经理角色 + if (roleIdList.contains(String.valueOf(PromptSuccess.DB_YWY_ID)) | roleIdList.contains(String.valueOf(PromptSuccess.DB_JL_ID))) { + //业务申请列表查询 + IPage positionVO = applyAmountListMapper.pageByCondition(new Page(1, size), "", roleIdList, this.getUserId()); + List records = positionVO.getRecords(); + if (records!=null && records.size()!=0){ + records.forEach(businessApplicationListResponse -> { + StatusPO statusPO = new StatusPO(); + Integer businessId = businessApplicationListResponse.getBusinessId(); + String name = businessApplicationListResponse.getName(); + Integer status = businessApplicationListResponse.getStatus(); + Integer operatingStatus = businessApplicationListResponse.getOperatingStatus(); + Integer businessStatus = businessApplicationListResponse.getBusinessStatus(); + statusPO.setBusinessStatus(businessStatus); + statusPO.setName(name); + statusPO.setOperatingStatus(operatingStatus); + statusPO.setProcessId(1); + statusPO.setStatus(status); + hashMap.put(businessId, statusPO); + }); + } + } + //担保经理角色、担保A角角色、担保B角角色、担保领导角色 + if (roleIdList.contains(String.valueOf(PromptSuccess.DB_JL_ID)) | roleIdList.contains(String.valueOf(PromptSuccess.DB_A_ID)) | roleIdList.contains(String.valueOf(PromptSuccess.DB_B_ID)) | roleIdList.contains(String.valueOf(PromptSuccess.DB_LD_ID))) { + // 担保部调查列表 + IPage positionVO = guaranteeAssignUserMapper.pageByCondition(new Page(1, size), "", roleIdList, this.getUserId(), null); + List records = positionVO.getRecords(); + if (records!=null && records.size()!=0) { + records.forEach(guaranteeListResponse -> { + StatusPO statusPO = new StatusPO(); + Integer businessId = guaranteeListResponse.getBusinessId(); + Integer status = guaranteeListResponse.getStatus(); + String name = guaranteeListResponse.getName(); + Integer operatingStatus = guaranteeListResponse.getOperatingStatus(); + Integer businessStatus = guaranteeListResponse.getBusinessStatus(); + statusPO.setBusinessStatus(businessStatus); + statusPO.setOperatingStatus(operatingStatus); + statusPO.setProcessId(2); + statusPO.setName(name); + statusPO.setStatus(status); + hashMap.put(businessId, statusPO); + }); + } + } + //资产经理角色、资产专员角色、资产领导角色 + if (roleIdList.contains(String.valueOf(PromptSuccess.ZC_JL_ID)) | roleIdList.contains(String.valueOf(PromptSuccess.ZC_ZY_ID)) | roleIdList.contains(String.valueOf(PromptSuccess.ZC_LD_ID))) { + // 资产部调查列表 + IPage positionVO = assetsInvestigationMapper.pageByCondition(new Page(1, size), "", roleIdList, this.getUserId(), null); + List records = positionVO.getRecords(); + if (records!=null && records.size()!=0) { + records.forEach(assetsInvestigationListResponse -> { + StatusPO statusPO = new StatusPO(); + Integer businessId = assetsInvestigationListResponse.getBusinessId(); + Integer status = assetsInvestigationListResponse.getStatus(); + String name = assetsInvestigationListResponse.getName(); + Integer operatingStatus = assetsInvestigationListResponse.getOperatingStatus(); + Integer businessStatus = assetsInvestigationListResponse.getBusinessStatus(); + statusPO.setBusinessStatus(businessStatus); + statusPO.setOperatingStatus(operatingStatus); + statusPO.setProcessId(3); + statusPO.setName(name); + statusPO.setStatus(status); + hashMap.put(businessId, statusPO); + }); + } + } + //信息经理角色、信息专员角色、信息领导角色 + if (roleIdList.contains(String.valueOf(PromptSuccess.XX_JL_ID)) | roleIdList.contains(String.valueOf(PromptSuccess.XX_ZY_ID)) | roleIdList.contains(String.valueOf(PromptSuccess.XX_LD_ID))) { + // 信息部调查列表 + IPage positionVO = messageInvestigationMapper.pageByCondition(new Page(1, size), "", roleIdList, this.getUserId(), null); + List records = positionVO.getRecords(); + if (records!=null && records.size()!=0) { + records.forEach(messageInvestigationListResponse -> { + StatusPO statusPO = new StatusPO(); + Integer businessId = messageInvestigationListResponse.getBusinessId(); + Integer status = messageInvestigationListResponse.getStatus(); + String name = messageInvestigationListResponse.getName(); + Integer operatingStatus = messageInvestigationListResponse.getOperatingStatus(); + Integer businessStatus = messageInvestigationListResponse.getBusinessStatus(); + statusPO.setBusinessStatus(businessStatus); + statusPO.setOperatingStatus(operatingStatus); + statusPO.setProcessId(4); + statusPO.setName(name); + statusPO.setStatus(status); + hashMap.put(businessId, statusPO); + }); + } + } + //担保部A/B角、法规经理角色、法规部C角、法规部分管领导 + if (roleIdList.contains(String.valueOf(PromptSuccess.DB_A_ID))|roleIdList.contains(String.valueOf(PromptSuccess.DB_B_ID))|roleIdList.contains(String.valueOf(PromptSuccess.FG_JL_ID))|roleIdList.contains(String.valueOf(PromptSuccess.FG_C_ID))|roleIdList.contains(String.valueOf(PromptSuccess.FG_LD_ID))) { + // 合规调查列表 + DgComplianceInvestigationRequest dgComplianceInvestigationRequest = new DgComplianceInvestigationRequest(); + IPage list = complianceInvestigationMapper.list(new Page(1, size), dgComplianceInvestigationRequest, roleList, currentUser); + List records = list.getRecords(); + if (records!=null && records.size()!=0) { + records.forEach(dgComplianceInvestigationResponse -> { + StatusPO statusPO = new StatusPO(); + Integer businessId = dgComplianceInvestigationResponse.getBusinessId(); + String name = dgComplianceInvestigationResponse.getName(); + Integer status = dgComplianceInvestigationResponse.getAuditStatus(); + Integer operatingStatus = dgComplianceInvestigationResponse.getOperationStatus(); + Integer businessStatus = dgComplianceInvestigationResponse.getBusinessStatus(); + statusPO.setBusinessStatus(businessStatus); + statusPO.setOperatingStatus(operatingStatus); + statusPO.setProcessId(5); + statusPO.setName(name); + statusPO.setStatus(status); + hashMap.put(businessId, statusPO); + }); + } + } + //工作会 + if (roleIdList.contains(String.valueOf(PromptSuccess.GZU_ID))) { + IPage list = workConferenceConsiderMapper.list(new Page(1, size), "", roleList, currentUser); + List records = list.getRecords(); + if (records!=null && records.size()!=0) { + records.forEach(dgWorkConferencePO -> { + StatusPO statusPO = new StatusPO(); + Integer businessId = dgWorkConferencePO.getBusinessId(); + String name = dgWorkConferencePO.getName(); + Integer status = dgWorkConferencePO.getAuditStatus(); + Integer operatingStatus = dgWorkConferencePO.getOperationStatus(); + Integer businessStatus = dgWorkConferencePO.getBusinessStatus(); + statusPO.setBusinessStatus(businessStatus); + statusPO.setOperatingStatus(operatingStatus); + statusPO.setProcessId(6); + statusPO.setName(name); + statusPO.setStatus(status); + hashMap.put(businessId, statusPO); + }); + } + } + //担保部A/B角、贷审会 + if (roleIdList.contains(String.valueOf(PromptSuccess.DB_A_ID))|roleIdList.contains(String.valueOf(PromptSuccess.DB_B_ID))|roleIdList.contains(String.valueOf(PromptSuccess.DSH_ID))) { + IPage list = loanCommitteeConsiderMapper.list(new Page(1, size), "", roleList, currentUser); + List records = list.getRecords(); + if (records!=null && records.size()!=0) { + records.forEach(dgLoanCommitteeConsiderResponse -> { + StatusPO statusPO = new StatusPO(); + Integer businessId = dgLoanCommitteeConsiderResponse.getBusinessId(); + Integer status = dgLoanCommitteeConsiderResponse.getStatus(); + String name = dgLoanCommitteeConsiderResponse.getName(); + Integer operatingStatus = dgLoanCommitteeConsiderResponse.getOperatingStatus(); + Integer businessStatus = dgLoanCommitteeConsiderResponse.getBusinessStatus(); + statusPO.setBusinessStatus(businessStatus); + statusPO.setOperatingStatus(operatingStatus); + statusPO.setProcessId(7); + statusPO.setName(name); + statusPO.setStatus(status); + hashMap.put(businessId, statusPO); + }); + } + } + //法规经理、担保部A/B角、资产部经理 + if (roleIdList.contains(String.valueOf(PromptSuccess.FG_JL_ID))|roleIdList.contains(String.valueOf(PromptSuccess.DB_A_ID))|roleIdList.contains(String.valueOf(PromptSuccess.DB_B_ID))|roleIdList.contains(String.valueOf(PromptSuccess.ZC_JL_ID)) ) { + //担保函 + IPage iPage = guaranteeLetterAssignUserMapper.pageByCondition(new Page(1, size), currentUser, roleIdList, null, null); + List records = iPage.getRecords(); + if (records!=null && records.size()!=0) { + records.forEach(guaranteeLetterListResponse -> { + StatusPO statusPO = new StatusPO(); + String name = guaranteeLetterListResponse.getName(); + Integer businessId = guaranteeLetterListResponse.getBusinessId(); + Integer status = guaranteeLetterListResponse.getStatus(); + Integer operatingStatus = guaranteeLetterListResponse.getOperatingStatus(); + Integer businessStatus = guaranteeLetterListResponse.getBusinessStatus(); + statusPO.setBusinessStatus(businessStatus); + statusPO.setOperatingStatus(operatingStatus); + statusPO.setProcessId(8); + statusPO.setName(name); + statusPO.setStatus(status); + hashMap.put(businessId, statusPO); + }); + } + } + //财务部、法规经理 + if (roleIdList.contains(String.valueOf(PromptSuccess.CWB_ID))|roleIdList.contains(String.valueOf(PromptSuccess.FG_JL_ID))) { + //回款确认 + IPage iPage = paymentConfirmationConsiderMapper.pageByCondition(new Page(1, size), roleIdList, currentUser, null, null); + List records = iPage.getRecords(); + if (records!=null && records.size()!=0) { + records.forEach(paymentConfirmationListResponse -> { + StatusPO statusPO = new StatusPO(); + String name = paymentConfirmationListResponse.getName(); + Integer businessId = paymentConfirmationListResponse.getBusinessId(); + Integer status = paymentConfirmationListResponse.getStatus(); + Integer operatingStatus = paymentConfirmationListResponse.getOperatingStatus(); + Integer businessStatus = paymentConfirmationListResponse.getBusinessStatus(); + statusPO.setBusinessStatus(businessStatus); + statusPO.setOperatingStatus(operatingStatus); + statusPO.setProcessId(9); + statusPO.setName(name); + statusPO.setStatus(status); + hashMap.put(businessId, statusPO); + }); + } + } + //法规经理 + if (roleIdList.contains(String.valueOf(PromptSuccess.FG_JL_ID))) { + //放款通知 + IPage iPage = loanNoticeMapper.pageByCondition(new Page(1, size), roleIdList, currentUser, null, null); + List records = iPage.getRecords(); + if (records!=null && records.size()!=0) { + records.forEach(loanNoticeListResponse -> { + StatusPO statusPO = new StatusPO(); + String name = loanNoticeListResponse.getName(); + Integer businessId = loanNoticeListResponse.getBusinessId(); + Integer status = loanNoticeListResponse.getStatus(); + Integer operatingStatus = loanNoticeListResponse.getOperatingStatus(); + Integer businessStatus = loanNoticeListResponse.getBusinessStatus(); + statusPO.setBusinessStatus(businessStatus); + statusPO.setOperatingStatus(operatingStatus); + statusPO.setProcessId(10); + statusPO.setName(name); + statusPO.setStatus(status); + hashMap.put(businessId, statusPO); + }); + } + } + //再次循环,拼接数据 + efficiencyList.forEach(personalEfficiencyListResponse -> { + Integer businessId = personalEfficiencyListResponse.getBusinessId(); + Object o = hashMap.get(businessId); + //有数据 + if (ObjectUtil.isNotNull(o)){ + //强制转换 + if (o instanceof StatusPO){ + StatusPO statusPO = (StatusPO)o; + String name = statusPO.getName(); + Integer operatingStatus = statusPO.getOperatingStatus(); + Integer processId = statusPO.getProcessId(); + Integer status = statusPO.getStatus(); + Integer businessStatus = statusPO.getBusinessStatus(); + personalEfficiencyListResponse.setTaskNode(processId); + personalEfficiencyListResponse.setBusinessStatus(businessStatus); + personalEfficiencyListResponse.setOperatingStatus(operatingStatus); + personalEfficiencyListResponse.setApproveStatus(status); + personalEfficiencyListResponse.setClientName(name); + } + } + String timeConsuming = personalEfficiencyListResponse.getTimeConsuming(); + String totalTimeConsuming = countTime(timeConsuming); + personalEfficiencyListResponse.setTimeConsuming(totalTimeConsuming); + }); + } + return efficiencyList; + } + + //根据业务id和用户id统计耗时 + private HashMap getTime(Integer businessId, Integer userId) { + HashMap hashMap = Maps.newHashMap(); + //根据业务id查询业务流程表 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("business_id", businessId).orderByAsc("create_time"); + List auditProcessList = dgAuditProcessMapper.selectList(wrapper); + long countTime = 0L; + if (auditProcessList.size()>1){ + //遍历业务流程数据,统计该用户的耗时 + for (int i = 1; i <= auditProcessList.size() - 1; i++) { + //从第二条数据开始,获取该数据 + DgAuditProcess auditProcess = auditProcessList.get(i); + //该数据是当前用户处理的 + if (auditProcess.getUserId().equals(userId)) { + //获取上一流程的时间节点 + DgAuditProcess previousProcess = auditProcessList.get(i - 1); + Date previousTime = previousProcess.getCreateTime(); + Date currentTime = auditProcess.getCreateTime(); + long currentTimeTime = currentTime.getTime(); + long previousTimeTime = previousTime.getTime(); + //累计耗时,毫秒 + countTime = currentTimeTime - previousTimeTime; + } + } + } + //查询结束时间 + QueryWrapper wrapperTime = new QueryWrapper<>(); + wrapperTime.eq("business_id", businessId).eq("user_id", userId).orderByDesc("create_time").last("limit 1"); + DgAuditProcess auditProcess = dgAuditProcessMapper.selectOne(wrapperTime); + Date endTime = auditProcess.getCreateTime(); + hashMap.put("countTime", countTime); + hashMap.put("endTime", new SimpleDateFormat("yyyy-MM-dd").format(endTime)); + return hashMap; + } + + public static String countTime(String totalTime) { + long time = Long.parseLong(totalTime); + long days = time/ (1000 * 60 * 60 * 24); + long hours = (time% (1000 * 60 * 60 * 24)) / (1000 * 60 * 60); + long minutes = (time% (1000 * 60 * 60)) / (1000 * 60); + long seconds = (time% (1000 * 60)) / 1000; + return days + "天" + hours + "小时"+ minutes +"分钟"; + } + + /** + * 获取当前登录用户信息 + */ + private String getUserId() { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String token = request.getHeader("token"); + return RedisUtil.get("dq:token:" + token); + } } \ No newline at end of file diff --git a/dq-framework-model/src/main/java/com/daqing/framework/domain/guarantee/po/StatusPO.java b/dq-framework-model/src/main/java/com/daqing/framework/domain/guarantee/po/StatusPO.java new file mode 100644 index 00000000..dce15077 --- /dev/null +++ b/dq-framework-model/src/main/java/com/daqing/framework/domain/guarantee/po/StatusPO.java @@ -0,0 +1,31 @@ +package com.daqing.framework.domain.guarantee.po; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.ToString; + +/** + * @Author chen + * @DATE 2020/12/30 9:45 + * @Version 1.0 + */ +@Data +@ToString +public class StatusPO { + + @ApiModelProperty("客户名称") + private String name; + + @ApiModelProperty("进程id") + private Integer processId; + + @ApiModelProperty("审核状态") + private Integer status; + + @ApiModelProperty("业务状态") + private Integer businessStatus; + + @ApiModelProperty("操作状态") + private Integer operatingStatus; + +} diff --git a/dq-framework-utils/src/main/java/com/daqing/framework/utils/excel/TaskNodeConverter.java b/dq-framework-utils/src/main/java/com/daqing/framework/utils/excel/TaskNodeConverter.java new file mode 100644 index 00000000..8df4881c --- /dev/null +++ b/dq-framework-utils/src/main/java/com/daqing/framework/utils/excel/TaskNodeConverter.java @@ -0,0 +1,87 @@ +package com.daqing.framework.utils.excel; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +/** + * @Author chen + * @DATE 2020/12/30 15:26 + * @Version 1.0 + * 任务节点转换器 + */ +public class TaskNodeConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Integer.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + /** + * 这里读的时候会调用 + * + * @param cellData + * NotNull + * @param contentProperty + * Nullable + * @param globalConfiguration + * NotNull + * @return + */ + @Override + public Integer convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + return 0; + } + + /** + * 这里是写的时候会调用 + * + * @param value + * NotNull + * @param contentProperty + * Nullable + * @param globalConfiguration + * NotNull + * @return + */ + @Override + public CellData convertToExcelData(Integer value, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + + switch (value){ + case 1: + return new CellData("业务申请"); + case 2: + return new CellData("担保部调查"); + case 3: + return new CellData("资产部调查"); + case 4: + return new CellData("信息部调查"); + case 5: + return new CellData("合规调查"); + case 6: + return new CellData("工作会"); + case 7: + return new CellData("贷审会"); + case 8: + return new CellData("担保函"); + case 9: + return new CellData("回款确认"); + case 10: + return new CellData("放款通知"); + default: + return new CellData(String.valueOf(value)); + } + + } + +} +