Commit 17c19d3a8dc472d11c8db5a5beecf79863ae4cde

Authored by 姜超
1 parent 15e650ca

feature(*): 人员数据汇出门店数据

人员数据汇出门店数据
Showing 20 changed files with 235 additions and 209 deletions
doc/2023-05-18_update.sql
1 1 -- 2024年3月27日
2 2 ALTER TABLE `fw_morax`.`eval_indicator_import_record`
3   - ADD COLUMN `import_type` tinyint(4) NULL DEFAULT 1 COMMENT '考评指标导入类型;1:结果数据 2:原始数据' AFTER `status`;
  3 + ADD COLUMN `import_type` tinyint(4) NULL DEFAULT 1 COMMENT '考评指标导入类型;1:结果数据 2:分值原始数据' AFTER `status`;
  4 +
  5 +ALTER TABLE `fw_morax`.`eval_indicator_import_record`
  6 + ADD COLUMN `shop_ids` varchar(2048) NULL COMMENT '门店id' AFTER `approval_no`;
4 7  
5 8 ALTER TABLE `fw_morax`.`eval_indicator`
6 9 ADD COLUMN `role_codes` varchar(2048) NULL COMMENT '授权角色' AFTER `role_name`,
... ...
fw-morax-common/src/main/java/cn/fw/morax/common/pojo/event/ImportEvalIndicatorOriginValueEvent.java renamed to fw-morax-common/src/main/java/cn/fw/morax/common/pojo/event/ImportEvalIndicatorScoreEvent.java
... ... @@ -5,12 +5,8 @@ import lombok.Data;
5 5  
6 6 @Data
7 7 @Builder
8   -public class ImportEvalIndicatorOriginValueEvent {
  8 +public class ImportEvalIndicatorScoreEvent {
9 9  
10   -// /**
11   -// * 考评指标
12   -// */
13   -// private String code;
14 10 /**
15 11 * 考评指标导入记录id
16 12 */
... ... @@ -27,10 +23,10 @@ public class ImportEvalIndicatorOriginValueEvent {
27 23 // private LocalDate dataDate;
28 24  
29 25  
30   - public ImportEvalIndicatorOriginValueEvent() {
  26 + public ImportEvalIndicatorScoreEvent() {
31 27 }
32 28  
33   - public ImportEvalIndicatorOriginValueEvent(Long evalIndicatorImportRecordId, Long groupId) {
  29 + public ImportEvalIndicatorScoreEvent(Long evalIndicatorImportRecordId, Long groupId) {
34 30 this.evalIndicatorImportRecordId = evalIndicatorImportRecordId;
35 31 this.groupId = groupId;
36 32 }
... ...
fw-morax-dao/src/main/java/cn/fw/morax/dao/eval/EvalIndicatorValueDao.java
1 1 package cn.fw.morax.dao.eval;
2 2  
3 3  
  4 +import cn.fw.morax.dao.orm.LocalMapper;
4 5 import cn.fw.morax.domain.db.eval.EvalIndicatorValue;
5 6 import cn.fw.morax.domain.enums.DimensionTypeEnum;
6 7 import cn.fw.morax.domain.vo.kpi.IndicatorUserValueVO;
... ... @@ -20,7 +21,7 @@ import java.util.Set;
20 21 * @author jiangchao
21 22 * @since 2023-01-30
22 23 */
23   -public interface EvalIndicatorValueDao extends BaseMapper<EvalIndicatorValue> {
  24 +public interface EvalIndicatorValueDao extends LocalMapper<EvalIndicatorValue> {
24 25  
25 26 /**
26 27 * 查询最新上报数据
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalIndicatorImportDetailScore.java
... ... @@ -88,7 +88,7 @@ public class EvalIndicatorImportDetailScore extends BaseAuditableTimeEntity&lt;Eval
88 88 private LocalDate dataDate;
89 89  
90 90 /**
91   - * 错误提示
  91 + * 错误提示: 1:未匹配到人员 2:未匹配到门店 3:未匹配到指标 4:重复 5:时间错误
92 92 */
93 93 private ImportErrorReasonEnum errorType;
94 94  
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalIndicatorImportRecord.java
1 1 package cn.fw.morax.domain.db.eval;
2 2  
3 3 import cn.fw.common.data.entity.BaseAuditableTimeEntity;
  4 +import cn.fw.common.data.mybatis.handler.LongListTypeHandler;
4 5 import cn.fw.morax.domain.enums.*;
  6 +import com.baomidou.mybatisplus.annotation.TableField;
5 7 import com.baomidou.mybatisplus.annotation.TableLogic;
6 8 import com.baomidou.mybatisplus.annotation.TableName;
7 9 import lombok.Data;
... ... @@ -11,6 +13,7 @@ import lombok.experimental.Accessors;
11 13 import java.io.Serializable;
12 14 import java.time.LocalDate;
13 15 import java.time.LocalDateTime;
  16 +import java.util.List;
14 17  
15 18 /**
16 19 * <p>
... ... @@ -114,11 +117,17 @@ public class EvalIndicatorImportRecord extends BaseAuditableTimeEntity&lt;EvalIndic
114 117 private DataTimeTypeEnum dataTimeType;
115 118  
116 119 /**
117   - * 考评指标导入类型;1:结果数据 2:原始数据
  120 + * 考评指标导入类型;1:结果数据 2:分值原始数据
118 121 */
119 122 private EvalIndicatorImportTypeEnum importType;
120 123  
121 124 /**
  125 + * 适用门店ids
  126 + */
  127 + @TableField(typeHandler = LongListTypeHandler.class)
  128 + private List<Long> shopIds;
  129 +
  130 + /**
122 131 * 逻辑删除
123 132 */
124 133 @TableLogic
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/dto/EvalIndicatorDTO.java
1 1 package cn.fw.morax.domain.dto;
2 2  
  3 +import cn.fw.common.data.mybatis.handler.StringListTypeHandler;
3 4 import cn.fw.common.web.annotation.LoginContextField;
4 5 import cn.fw.morax.domain.enums.*;
  6 +import com.baomidou.mybatisplus.annotation.TableField;
5 7 import lombok.Data;
6 8 import org.hibernate.validator.constraints.Length;
7 9  
... ... @@ -137,6 +139,16 @@ public class EvalIndicatorDTO {
137 139 */
138 140 private Integer importEndDate;
139 141  
  142 + /**
  143 + * 适用角色编码
  144 + */
  145 + private List<String> roleCodes;
  146 +
  147 + /**
  148 + * 适用角色名称
  149 + */
  150 + private List<String> roleNames;
  151 +
140 152 // /**
141 153 // * 月天数
142 154 // */
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/dto/query/EvalIndicatorImportScoreQueryDTO.java
... ... @@ -21,6 +21,11 @@ public class EvalIndicatorImportScoreQueryDTO extends BasePageQuery {
21 21 private Long userId;
22 22  
23 23 /**
  24 + * 门店id
  25 + */
  26 + private Long shopId;
  27 +
  28 + /**
24 29 * 开始导入时间
25 30 */
26 31 private YearMonth monthly;
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/enums/EvalIndicatorImportTypeEnum.java
... ... @@ -12,7 +12,7 @@ import lombok.Getter;
12 12 */
13 13 public enum EvalIndicatorImportTypeEnum implements IEnum<Integer> {
14 14 /**
15   - * 考评指标导入类型;1:结果数据 2:原始数据
  15 + * 考评指标导入类型;1:结果数据 2:分值原始数据
16 16 */
17 17 VALUE(1, "结果数据"),
18 18 SCORE_ORIGIN_VALUE(2, "分值原始数据"),
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/enums/ImportErrorReasonEnum.java
... ... @@ -13,12 +13,13 @@ import lombok.Getter;
13 13 public enum ImportErrorReasonEnum implements IEnum<Integer> {
14 14  
15 15 /**
16   - * 错误类型: 1:未匹配到人员 2:未匹配到门店 3:未匹配到指标
  16 + * 错误类型: 1:未匹配到人员 2:未匹配到门店 3:未匹配到指标 4:重复 5:时间错误
17 17 */
18 18 NO_MATCH_STAFF(1, "未匹配到人员"),
19 19 NO_MATCH_SHOP(2, "未匹配到门店"),
20 20 NO_MATCH_INDICATOR(3, "未匹配到指标"),
21 21 REPETITION(4, "重复"),
  22 + TIME_ERROR(5, "时间错误"),
22 23 ;
23 24  
24 25 /**
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/CombineAndEvalIndicatorVO.java
... ... @@ -177,6 +177,16 @@ public class CombineAndEvalIndicatorVO {
177 177 */
178 178 private Integer importEndDate;
179 179  
  180 + /**
  181 + * 适用角色编码
  182 + */
  183 + private List<String> roleCodes;
  184 +
  185 + /**
  186 + * 适用角色名称
  187 + */
  188 + private List<String> roleNames;
  189 +
180 190  
181 191 public void setHasTarget() {
182 192 this.setHasTarget((! TargetTypeEnum.NO.equals(this.getTargetType())));
... ...
fw-morax-rpc/src/main/java/cn/fw/morax/rpc/erp/dto/HRoleAuthRangeDayVO.java
... ... @@ -3,7 +3,6 @@ package cn.fw.morax.rpc.erp.dto;
3 3 import lombok.Data;
4 4  
5 5 import java.time.LocalDate;
6   -import java.util.Date;
7 6  
8 7 /**
9 8 * @author jiangchao
... ... @@ -61,5 +60,5 @@ public class HRoleAuthRangeDayVO {
61 60 /**
62 61 * 授权天数
63 62 */
64   - private Long days;
  63 + private Long authDays;
65 64 }
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/controller/erp/KpiDebugController.java
... ... @@ -5,6 +5,7 @@ import cn.fw.data.base.domain.common.Message;
5 5 import cn.fw.ehr.sdk.api.mq.StaffLeaveEvent;
6 6 import cn.fw.morax.common.config.SpecialIndicatorCodeVal;
7 7 import cn.fw.morax.common.pojo.event.ImportEvalIndicatorEvent;
  8 +import cn.fw.morax.common.pojo.event.ImportEvalIndicatorScoreEvent;
8 9 import cn.fw.morax.common.utils.DateUtil;
9 10 import cn.fw.morax.common.utils.PublicUtil;
10 11 import cn.fw.morax.domain.db.eval.EvalIndicatorImportRecord;
... ... @@ -27,6 +28,7 @@ import cn.fw.morax.service.biz.BusinessSysReportBizService;
27 28 import cn.fw.morax.service.biz.CommonService;
28 29 import cn.fw.morax.service.biz.kpi.*;
29 30 import cn.fw.morax.service.component.EvalIndicatorSaveObserver;
  31 +import cn.fw.morax.service.component.EvalIndicatorScoreSaveObserver;
30 32 import cn.fw.morax.service.data.eval.EvalIndicatorImportRecordService;
31 33 import cn.fw.morax.service.data.kpi.*;
32 34 import cn.fw.oop.sdk.dto.InvalidShopEvent;
... ... @@ -74,6 +76,7 @@ public class KpiDebugController {
74 76 private final CommonService commonService;
75 77 private final GenericTask genericTask;
76 78 private final EvalIndicatorSaveObserver evalIndicatorSaveObserver;
  79 + private final EvalIndicatorScoreSaveObserver evalIndicatorScoreSaveObserver;
77 80 private final EvalIndicatorImportRecordService evalIndicatorImportRecordService;
78 81 private final KpiGroupUserService kpiGroupUserService;
79 82 private final KpiGroupService kpiGroupService;
... ... @@ -124,6 +127,20 @@ public class KpiDebugController {
124 127 return success();
125 128 }
126 129  
  130 + @GetMapping("/save-eval-import-score")
  131 + @ControllerMethod("保存导入的展厅美化得分指标")
  132 + public Message<Void> saveEvalIndicatorScore(Long evalIndicatorImportRecordId) {
  133 + EvalIndicatorImportRecord record = evalIndicatorImportRecordService.getById(evalIndicatorImportRecordId);
  134 + if (PublicUtil.isEmpty(record)) {
  135 + return success();
  136 + }
  137 + ImportEvalIndicatorScoreEvent event = new ImportEvalIndicatorScoreEvent();
  138 + event.setEvalIndicatorImportRecordId(record.getId());
  139 + event.setGroupId(record.getGroupId());
  140 + evalIndicatorScoreSaveObserver.saveEvalIndicator(event);
  141 + return success();
  142 + }
  143 +
127 144 @GetMapping("/dealHistoryDataKpiGroupUser")
128 145 @ControllerMethod("历史数据KpiGroupUser状态处理")
129 146 public Message<Void> dealHistoryDataKpiGroupUser(@RequestParam(required = false) Long groupId,
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/runner/CheckCommandLineRunner.java
... ... @@ -9,7 +9,6 @@ import cn.fw.morax.service.data.salary.SalaryGeneralSettinService;
9 9 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
10 10 import lombok.RequiredArgsConstructor;
11 11 import lombok.extern.slf4j.Slf4j;
12   -import org.springframework.beans.factory.annotation.Autowired;
13 12 import org.springframework.boot.CommandLineRunner;
14 13 import org.springframework.stereotype.Component;
15 14 import org.springframework.util.CollectionUtils;
... ... @@ -29,7 +28,7 @@ import java.util.List;
29 28 @Slf4j
30 29 @RequiredArgsConstructor
31 30 public class CheckCommandLineRunner implements CommandLineRunner {
32   - private final EvalIndicatorOriginValueSaveObserver evalIndicatorOriginValueSaveObserver;
  31 + private final EvalIndicatorScoreSaveObserver evalIndicatorScoreSaveObserver;
33 32 private final SalaryGeneralSettinService salaryGeneralSettinService;
34 33 private final EvalIndicatorSaveObserver evalIndicatorSaveObserver;
35 34 private final KpiStarAdjustmentObserver kpiStarAdjustmentObserver;
... ... @@ -52,7 +51,7 @@ public class CheckCommandLineRunner implements CommandLineRunner {
52 51 * 注册监听器
53 52 */
54 53 public void registerObserver() {
55   - EventBusUtil.asyncRegister(evalIndicatorOriginValueSaveObserver);
  54 + EventBusUtil.asyncRegister(evalIndicatorScoreSaveObserver);
56 55 EventBusUtil.asyncRegister(kpiStarAdjustmentObserver);
57 56 EventBusUtil.asyncRegister(paySalaryObserver);
58 57 EventBusUtil.asyncRegister(kpiGroupChangeObserver);
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/RpcCommonService.java
... ... @@ -3,6 +3,7 @@ package cn.fw.morax.service.biz;
3 3 import cn.fw.common.exception.BusinessException;
4 4 import cn.fw.morax.common.config.DicKeyCofigProperties;
5 5 import cn.fw.morax.common.config.SpecialIndicatorCodeVal;
  6 +import cn.fw.morax.common.utils.DateUtil;
6 7 import cn.fw.morax.common.utils.PublicUtil;
7 8 import cn.fw.morax.rpc.ehr.EhrRpcService;
8 9 import cn.fw.morax.rpc.ehr.dto.PostInfoDTO;
... ... @@ -24,10 +25,10 @@ import org.springframework.data.redis.core.StringRedisTemplate;
24 25 import org.springframework.stereotype.Service;
25 26  
26 27 import java.time.LocalDate;
  28 +import java.time.temporal.ChronoUnit;
27 29 import java.time.temporal.TemporalAdjusters;
28 30 import java.util.ArrayList;
29 31 import java.util.List;
30   -import java.util.Set;
31 32 import java.util.stream.Collectors;
32 33  
33 34 /**
... ... @@ -95,16 +96,30 @@ public class RpcCommonService {
95 96 return matchPostInfos.get(0);
96 97 }
97 98  
98   - public void get(final Long groupId, final LocalDate calcDate, final String roleCode, final List<Long> shopIds) {
  99 + /**
  100 + * 角色月度授权情况
  101 + */
  102 + public List<HRoleAuthRangeDayVO> roleMonthlyAuthDay(final Long groupId, final LocalDate calcDate, final String roleCode, final List<Long> shopIds) {
99 103 final LocalDate monthlyFirstDate = calcDate.with(TemporalAdjusters.firstDayOfMonth());
100 104 List<HRoleAuthRangeDayVO> rangeDayVos = new ArrayList<>();
101 105 List<HRoleAuthRangeVO> hRoleAuthRangeVos = erpRpcService.queryRoleHistoryAuthRange(groupId, shopIds, roleCode, calcDate);
102 106 for (HRoleAuthRangeVO hRoleAuthRangeVO : hRoleAuthRangeVos) {
103 107 HRoleAuthRangeDayVO rangeDayVo = PublicUtil.copy(hRoleAuthRangeVO, HRoleAuthRangeDayVO.class);
104   -// rangeDayVo.setStartTime()
105   -
  108 + LocalDate authStartTime = DateUtil.date2LocalDate(hRoleAuthRangeVO.getStartTime());
  109 + //角色授权开始时间 在 月度开始时间之前
  110 + if (authStartTime.compareTo(monthlyFirstDate) < 0) {
  111 + rangeDayVo.setStartTime(monthlyFirstDate);
  112 + }
  113 + //角色授权结束时间 在 计算日期之后
  114 + LocalDate authEndTime = DateUtil.date2LocalDate(hRoleAuthRangeVO.getEndTime());
  115 + if (authEndTime.compareTo(calcDate) > 0) {
  116 + rangeDayVo.setEndTime(calcDate);
  117 + }
  118 + Long authDays = rangeDayVo.getStartTime().until(rangeDayVo.getEndTime(), ChronoUnit.DAYS);
  119 + rangeDayVo.setAuthDays(authDays);
  120 + rangeDayVos.add(rangeDayVo);
106 121 }
107   -
  122 + return rangeDayVos;
108 123 }
109 124  
110 125 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalIndicatorBizService.java
... ... @@ -358,6 +358,12 @@ public class EvalIndicatorBizService {
358 358 break;
359 359 }
360 360 }
  361 + if (PublicUtil.isNotEmpty(dto.getRoleCodes())) {
  362 + indicators.setRoleCodes(dto.getRoleCodes());
  363 + }
  364 + if (PublicUtil.isNotEmpty(dto.getRoleNames())) {
  365 + indicators.setRoleNames(dto.getRoleNames());
  366 + }
361 367 return indicators;
362 368 }
363 369  
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalIndicatorCommonService.java
... ... @@ -7,14 +7,17 @@ import cn.fw.morax.common.utils.DateUtil;
7 7 import cn.fw.morax.common.utils.ExcelDataUtil;
8 8 import cn.fw.morax.common.utils.PublicUtil;
9 9 import cn.fw.morax.domain.db.eval.EvalIndicator;
  10 +import cn.fw.morax.domain.db.eval.EvalIndicatorValue;
10 11 import cn.fw.morax.domain.db.salary.SalaryGeneralSettin;
11 12 import cn.fw.morax.domain.enums.DataTimeTypeEnum;
  13 +import cn.fw.morax.domain.enums.DimensionTypeEnum;
12 14 import cn.fw.morax.domain.vo.eval.ShowroomScoreImportValueVO;
13 15 import cn.fw.morax.rpc.file.FileRpcService;
14 16 import cn.fw.morax.rpc.file.dto.DfsFileDTO;
15 17 import cn.fw.morax.rpc.oop.OopRpcService;
16 18 import cn.fw.morax.rpc.oop.dto.ShopDTO;
17 19 import cn.fw.morax.service.data.eval.EvalIndicatorService;
  20 +import cn.fw.morax.service.data.eval.EvalIndicatorValueService;
18 21 import cn.fw.morax.service.data.salary.SalaryGeneralSettinService;
19 22 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
20 23 import lombok.RequiredArgsConstructor;
... ... @@ -26,6 +29,7 @@ import org.apache.poi.xssf.usermodel.XSSFRow;
26 29 import org.apache.poi.xssf.usermodel.XSSFSheet;
27 30 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
28 31 import org.springframework.stereotype.Service;
  32 +import org.springframework.transaction.annotation.Transactional;
29 33 import org.springframework.web.multipart.MultipartFile;
30 34  
31 35 import java.io.ByteArrayInputStream;
... ... @@ -51,6 +55,7 @@ import java.util.stream.Collectors;
51 55 public class EvalIndicatorCommonService {
52 56  
53 57 private final SalaryGeneralSettinService salaryGeneralSettinService;
  58 + private final EvalIndicatorValueService evalIndicatorValueService;
54 59 private final EvalIndicatorService evalIndicatorService;
55 60 private final FileRpcService fileRpcService;
56 61 private final OopRpcService oopRpcService;
... ... @@ -141,4 +146,27 @@ public class EvalIndicatorCommonService {
141 146 return DateUtil.localDateTime2Date(LocalDate.now().atTime(23, 59, 59));
142 147 }
143 148  
  149 + /**
  150 + * 保存数据
  151 + */
  152 + @Transactional(rollbackFor = Exception.class)
  153 + public void saveIndicatorValue(List<EvalIndicatorValue> evalIndicatorValues) {
  154 + //删除当天重复数据
  155 + for (EvalIndicatorValue evalIndicatorValue : evalIndicatorValues) {
  156 + List<EvalIndicatorValue> repeatIndicatorValues = evalIndicatorValueService.list(Wrappers.<EvalIndicatorValue>lambdaQuery()
  157 + .eq(EvalIndicatorValue::getUserId, evalIndicatorValue.getUserId())
  158 + .eq(EvalIndicatorValue::getShopId, evalIndicatorValue.getShopId())
  159 + .eq(EvalIndicatorValue::getIndicatorCode, evalIndicatorValue.getIndicatorCode())
  160 + .eq(EvalIndicatorValue::getDataDate, evalIndicatorValue.getDataDate())
  161 + .eq(EvalIndicatorValue::getDimensionType, evalIndicatorValue.getDimensionType())
  162 + .eq(EvalIndicatorValue::getYn, Boolean.TRUE)
  163 + .select(EvalIndicatorValue::getId)
  164 + );
  165 + if (PublicUtil.isNotEmpty(repeatIndicatorValues)) {
  166 + evalIndicatorValueService.removeByIds(repeatIndicatorValues.stream().map(EvalIndicatorValue::getId).collect(Collectors.toList()));
  167 + }
  168 + }
  169 + evalIndicatorValueService.insertBatchSomeColumn(evalIndicatorValues);
  170 + }
  171 +
144 172 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalIndicatorImportBizService.java
... ... @@ -7,6 +7,7 @@ import cn.fw.common.web.auth.LoginAuthBean;
7 7 import cn.fw.morax.common.config.EvalIndicatorCodeVal;
8 8 import cn.fw.morax.common.config.EvalIndicatorVal;
9 9 import cn.fw.morax.common.config.FileVal;
  10 +import cn.fw.morax.common.utils.MessageFormatUtil;
10 11 import cn.fw.morax.common.utils.PublicUtil;
11 12 import cn.fw.morax.domain.db.eval.*;
12 13 import cn.fw.morax.domain.dto.query.EvalIndicatorImportDetailQueryDTO;
... ... @@ -56,25 +57,14 @@ import static cn.fw.common.businessvalidator.Validator.BV;
56 57 @RequiredArgsConstructor
57 58 public class EvalIndicatorImportBizService {
58 59  
59   - private final EvalIndicatorImportKeyValueService evalIndicatorImportKeyValueService;
60   - private final EvalIndicatorImportRecordService evalIndicatorImportRecordService;
61 60 private final EvalIndicatorImportDetailScoreService evalIndicatorImportDetailScoreService;
62   - private final EvalIndicatorImportDetailService evalIndicatorImportDetailService;
  61 + private final EvalIndicatorImportRecordService evalIndicatorImportRecordService;
63 62 private final EvalIndicatorCommonService evalIndicatorCommonService;
64   - private final SalaryGeneralSettinService salaryGeneralSettinService;
65   - private final ApprovalRecordService approvalRecordService;
66 63 private final EvalIndicatorCodeVal evalIndicatorCodeVal;
67 64 private final EvalIndicatorService evalIndicatorService;
68 65 private final StringRedisTemplate stringRedisTemplate;
69 66 private final ApprovalBizService approvalBizService;
70 67 private final EvalIndicatorVal evalIndicatorVal;
71   - private final FlowApproveRpc flowApproveRpc;
72   - private final FileRpcService fileRpcService;
73   - private final EhrRpcService ehrRpcService;
74   - private final CommonService commonService;
75   - private final OopRpcService oopRpcService;
76   - private final EvalService evalService;
77   - private final FileVal fileVal;
78 68  
79 69 /**
80 70 * 数据导入指标列表
... ... @@ -107,6 +97,7 @@ public class EvalIndicatorImportBizService {
107 97 PageData<EvalIndicatorImportRecord> pageData = evalIndicatorImportRecordService.page(new PageData<>(dto.getCurrent(), dto.getPageSize()),
108 98 Wrappers.<EvalIndicatorImportRecord>lambdaQuery()
109 99 .eq(PublicUtil.isNotEmpty(dto.getUserId()), EvalIndicatorImportRecord::getImportUserId, dto.getUserId())
  100 + .apply(PublicUtil.isNotEmpty(dto.getShopId()), MessageFormatUtil.transferWithQuotationMarks("FIND_IN_SET({0}, shop_ids)", dto.getShopId()))
110 101 .eq(PublicUtil.isNotEmpty(dto.getIndicatorCode()), EvalIndicatorImportRecord::getIndicatorCode, dto.getIndicatorCode())
111 102 .ge(PublicUtil.isNotEmpty(startTime), EvalIndicatorImportRecord::getDataDate, startTime)
112 103 .le(PublicUtil.isNotEmpty(endTime), EvalIndicatorImportRecord::getDataDate, endTime)
... ... @@ -121,42 +112,6 @@ public class EvalIndicatorImportBizService {
121 112 });
122 113 }
123 114  
124   - public List<EvalIndicatorImportDetailVO> importDetail(EvalIndicatorImportDetailQueryDTO dto) {
125   - final Long id = dto.getId();
126   - final Boolean querySuccess = dto.getQuerySuccess();
127   - LambdaQueryWrapper<EvalIndicatorImportDetail> wrappers = Wrappers.<EvalIndicatorImportDetail>lambdaQuery()
128   - .eq(EvalIndicatorImportDetail::getRecordId, id)
129   - .like(PublicUtil.isNotEmpty(dto.getIndicatorCode()), EvalIndicatorImportDetail::getIndicatorCode, dto.getIndicatorCode())
130   - .like(PublicUtil.isNotEmpty(dto.getUserName()), EvalIndicatorImportDetail::getUserName, dto.getUserName())
131   - .eq(PublicUtil.isNotEmpty(dto.getShopId()),EvalIndicatorImportDetail::getShopId, dto.getShopId())
132   - .eq(EvalIndicatorImportDetail::getYn, Boolean.TRUE);
133   - if (PublicUtil.isNotEmpty(querySuccess)) {
134   - if (querySuccess) {
135   - wrappers.isNotNull(EvalIndicatorImportDetail::getErrorType);
136   - }else {
137   - wrappers.isNull(EvalIndicatorImportDetail::getErrorType);
138   - }
139   - }
140   - List<EvalIndicatorImportDetail> details = evalIndicatorImportDetailService.list(wrappers);
141   - if (PublicUtil.isEmpty(details)) {
142   - return new ArrayList<>();
143   - }
144   - List<EvalIndicatorImportDetailVO> detailVOS = Lists.newArrayListWithCapacity(details.size());
145   - for (EvalIndicatorImportDetail detail : details) {
146   - EvalIndicatorImportDetailVO detailVO = PublicUtil.copy(detail, EvalIndicatorImportDetailVO.class);
147   - List<EvalIndicatorImportKeyValue> keyValues = evalIndicatorImportKeyValueService.list(Wrappers.<EvalIndicatorImportKeyValue>lambdaQuery()
148   - .eq(EvalIndicatorImportKeyValue::getEvalIndicatorImportDetailId, detailVO.getId())
149   - .eq(EvalIndicatorImportKeyValue::getYn, Boolean.TRUE)
150   - );
151   - if (PublicUtil.isNotEmpty(keyValues)) {
152   - List<EvalIndicatorImportKeyValueVO> keyValueVos = PublicUtil.copyList(keyValues, EvalIndicatorImportKeyValueVO.class);
153   - detailVO.setKeyValues(keyValueVos);
154   - }
155   - detailVOS.add(detailVO);
156   - }
157   - return detailVOS;
158   - }
159   -
160 115 /**
161 116 * 展厅梅花导入数据分页查询
162 117 *
... ... @@ -170,6 +125,7 @@ public class EvalIndicatorImportBizService {
170 125 PageData<EvalIndicatorImportDetailScore> pageData = evalIndicatorImportDetailScoreService.page(new PageData<>(dto.getCurrent(), dto.getPageSize()),
171 126 Wrappers.<EvalIndicatorImportDetailScore>lambdaQuery()
172 127 .eq(PublicUtil.isNotEmpty(dto.getIndicatorCode()), EvalIndicatorImportDetailScore::getIndicatorCode, dto.getIndicatorCode())
  128 + .eq(PublicUtil.isNotEmpty(dto.getShopId()), EvalIndicatorImportDetailScore::getShopId, dto.getShopId())
173 129 .ge(PublicUtil.isNotEmpty(startTime), EvalIndicatorImportDetailScore::getDataDate, startTime)
174 130 .le(PublicUtil.isNotEmpty(endTime), EvalIndicatorImportDetailScore::getDataDate, endTime)
175 131 .isNull(EvalIndicatorImportDetailScore::getErrorType)
... ... @@ -189,6 +145,10 @@ public class EvalIndicatorImportBizService {
189 145 final Long groupId = user.getGroupId();
190 146 EvalIndicator evalIndicator = evalIndicatorService.queryByCode(evalIndicatorCodeVal.getShowroomScore(), Boolean.FALSE);
191 147 BV.notNull(evalIndicator, "展厅美化指标不存在,请重试");
  148 + List<YearMonth> importValidMonthlies = new ArrayList<YearMonth>() {{
  149 + add(YearMonth.now());
  150 + add(YearMonth.now().minusMonths(1));
  151 + }};
192 152  
193 153 final Map<String, ShopDTO> shopMap = evalIndicatorCommonService.getShopNameMap(user);
194 154 Map<Integer, String> headerAlias = this.getShopHeaderNameMap(dataTimeType);
... ... @@ -198,44 +158,33 @@ public class EvalIndicatorImportBizService {
198 158 } else {
199 159 indicatorValues = evalIndicatorCommonService.analysisExcelFid(file, 1, headerAlias, ShowroomScoreImportValueVO.class);
200 160 }
201   -
202   - EvalIndicatorImportRecord importRecord = this.createRecord(user, DimensionTypeEnum.SHOP);
203   - importRecord.setImportType(EvalIndicatorImportTypeEnum.SCORE_ORIGIN_VALUE);
  161 + Set<Long> shopIds = new HashSet<>();
204 162 List<EvalIndicatorImportDetailScore> details = new ArrayList<>();
205 163 Integer errorNum = 0;
206 164 for (ShowroomScoreImportValueVO shop : indicatorValues) {
207   - EvalIndicatorImportDetailScore importDetailScore = this.convertShopPo(shop, dataTimeType);
  165 + EvalIndicatorImportDetailScore importDetailScore = this.convertShopPo(shop, evalIndicator, groupId);
208 166 details.add(importDetailScore);
209   -
210 167 if (! shopMap.containsKey(shop.getShopName())) {
211 168 importDetailScore.setErrorType(ImportErrorReasonEnum.NO_MATCH_SHOP);
212 169 errorNum += 1;
213 170 continue;
214 171 }
  172 + //只能导入近两月的指标数据
  173 + if (PublicUtil.isEmpty(importDetailScore.getDataDate()) || (! importValidMonthlies.contains(YearMonth.from(importDetailScore.getDataDate())))) {
  174 + importDetailScore.setErrorType(ImportErrorReasonEnum.TIME_ERROR);
  175 + errorNum += 1;
  176 + continue;
  177 + }
215 178 ShopDTO shopDTO = shopMap.get(shop.getShopName());
  179 + shopIds.add(shopDTO.getId());
216 180 importDetailScore.setShopId(shopDTO.getId());
217   -
218   - importDetailScore.setIndicatorCode(evalIndicatorCodeVal.getShowroomScore());
219   - importDetailScore.setIndicatorName(evalIndicator.getName());
220   - importDetailScore.setValid(Boolean.FALSE);
221   - importDetailScore.setGroupId(groupId);
222   - importDetailScore.setScore(shop.getScore());
223   - importDetailScore.setTotalScore(shop.getTotalScore());
224   - importDetailScore.setGraderStaffName(shop.getGraderStaffName());
225   -// importDetailScore.setGraderStaffId(shop.getGraderStaffId());
226   -
227 181 }
228   - LocalDate dataDate = details.stream()
229   - .filter(detail -> PublicUtil.isEmpty(detail.getErrorType()) && PublicUtil.isNotEmpty(detail.getDataDate()))
230   - .map(EvalIndicatorImportDetailScore::getDataDate)
231   - .findFirst().orElse(LocalDate.now());
232   - importRecord.setDataDate(dataDate);
  182 + EvalIndicatorImportRecord importRecord = this.createRecord(details, evalIndicator, user, DimensionTypeEnum.SHOP);
233 183 importRecord.setErrorNum(errorNum);
234 184 importRecord.setNum(indicatorValues.size());
235 185 importRecord.setSuccessNum(indicatorValues.size() - errorNum);
236 186 importRecord.setDataTimeType(dataTimeType);
237   - importRecord.setIndicatorName(evalIndicator.getName());
238   - importRecord.setIndicatorCode(evalIndicatorCodeVal.getShowroomScore());
  187 + importRecord.setShopIds(new ArrayList<>(shopIds));
239 188  
240 189 String key = PublicUtil.getUUID() + user.getUserId();
241 190 stringRedisTemplate.opsForValue().set(evalIndicatorVal.getEvalShowroomBeautificationImport() + key, JSON.toJSONString(importRecord), 1 , TimeUnit.DAYS);
... ... @@ -300,20 +249,7 @@ public class EvalIndicatorImportBizService {
300 249 return recordVO;
301 250 }
302 251  
303   - /**
304   - * 设置导入编码
305   - * @param importRecord
306   - * @param details
307   - */
308   - public void setImportIndicatorInfo(EvalIndicatorImportRecord importRecord, List<EvalIndicatorImportDetailScore> details) {
309   - Optional<EvalIndicatorImportDetailScore> effectImportDetail = details.stream()
310   - .filter(detail -> PublicUtil.isEmpty(detail.getErrorType()) && PublicUtil.isNotEmpty(detail.getIndicatorName()))
311   - .findFirst();
312   - importRecord.setIndicatorName(effectImportDetail.map(EvalIndicatorImportDetailScore::getIndicatorName).orElse(""));
313   - importRecord.setIndicatorCode(effectImportDetail.map(EvalIndicatorImportDetailScore::getIndicatorCode).orElse(""));
314   - }
315   -
316   - public EvalIndicatorImportRecord createRecord(LoginAuthBean user, DimensionTypeEnum dimensionType) {
  252 + public EvalIndicatorImportRecord createRecord(List<EvalIndicatorImportDetailScore> details, EvalIndicator evalIndicator, LoginAuthBean user, DimensionTypeEnum dimensionType) {
317 253 EvalIndicatorImportRecord importRecord = new EvalIndicatorImportRecord();
318 254 importRecord.setImportType(EvalIndicatorImportTypeEnum.SCORE_ORIGIN_VALUE);
319 255 importRecord.setImportUserId(user.getUserId());
... ... @@ -322,6 +258,14 @@ public class EvalIndicatorImportBizService {
322 258 importRecord.setUploadTime(LocalDate.now());
323 259 importRecord.setGroupId(user.getGroupId());
324 260 importRecord.setYn(Boolean.TRUE);
  261 + LocalDate dataDate = details.stream()
  262 + .filter(detail -> PublicUtil.isEmpty(detail.getErrorType()) && PublicUtil.isNotEmpty(detail.getDataDate()))
  263 + .map(EvalIndicatorImportDetailScore::getDataDate)
  264 + .findFirst().orElse(LocalDate.now());
  265 + importRecord.setDataDate(dataDate);
  266 +
  267 + importRecord.setIndicatorName(evalIndicator.getName());
  268 + importRecord.setIndicatorCode(evalIndicatorCodeVal.getShowroomScore());
325 269 return importRecord;
326 270 }
327 271  
... ... @@ -348,7 +292,7 @@ public class EvalIndicatorImportBizService {
348 292 return headerMap;
349 293 }
350 294  
351   - public EvalIndicatorImportDetailScore convertShopPo(ShowroomScoreImportValueVO shopValue, DataTimeTypeEnum dataTimeType) {
  295 + public EvalIndicatorImportDetailScore convertShopPo(ShowroomScoreImportValueVO shopValue, EvalIndicator evalIndicator, Long groupId) {
352 296 Optional<ShowroomScoreImportValueVO> valueOptional = Optional.ofNullable(shopValue);
353 297 EvalIndicatorImportDetailScore detail = new EvalIndicatorImportDetailScore();
354 298 detail.setIndicatorCode(evalIndicatorCodeVal.getShowroomScore());
... ... @@ -356,6 +300,13 @@ public class EvalIndicatorImportBizService {
356 300 if (PublicUtil.isNotEmpty(shopValue.getMonthlyDate())) {
357 301 detail.setDataDate(evalIndicatorCommonService.convertMonthlyDate(shopValue.getMonthlyDate()));
358 302 }
  303 + detail.setIndicatorCode(evalIndicatorCodeVal.getShowroomScore());
  304 + detail.setIndicatorName(evalIndicator.getName());
  305 + detail.setValid(Boolean.FALSE);
  306 + detail.setGroupId(groupId);
  307 + detail.setScore(shopValue.getScore());
  308 + detail.setTotalScore(shopValue.getTotalScore());
  309 + detail.setGraderStaffName(shopValue.getGraderStaffName());
359 310 return detail;
360 311 }
361 312  
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalIndicatorReportService.java
... ... @@ -8,7 +8,7 @@ import cn.fw.morax.common.config.FileVal;
8 8 import cn.fw.morax.common.constant.ExcelConstant;
9 9 import cn.fw.morax.common.pojo.event.ApprovalResultEvent;
10 10 import cn.fw.morax.common.pojo.event.ImportEvalIndicatorEvent;
11   -import cn.fw.morax.common.pojo.event.ImportEvalIndicatorOriginValueEvent;
  11 +import cn.fw.morax.common.pojo.event.ImportEvalIndicatorScoreEvent;
12 12 import cn.fw.morax.common.utils.DateUtil;
13 13 import cn.fw.morax.common.utils.EventBusUtil;
14 14 import cn.fw.morax.common.utils.ExcelDataUtil;
... ... @@ -26,7 +26,6 @@ import cn.fw.morax.rpc.ehr.dto.StaffBaseInfoDTO;
26 26 import cn.fw.morax.rpc.oop.OopRpcService;
27 27 import cn.fw.morax.rpc.oop.dto.ShopDTO;
28 28 import cn.fw.morax.service.biz.ApprovalBizService;
29   -import cn.fw.morax.service.component.EvalIndicatorOriginValueSaveObserver;
30 29 import cn.fw.morax.service.data.ApprovalRecordService;
31 30 import cn.fw.morax.service.data.eval.*;
32 31 import cn.fw.morax.service.data.salary.SalaryGeneralSettinService;
... ... @@ -40,7 +39,6 @@ import lombok.Getter;
40 39 import lombok.RequiredArgsConstructor;
41 40 import lombok.extern.slf4j.Slf4j;
42 41 import org.apache.commons.collections4.map.MultiKeyMap;
43   -import org.apache.commons.lang3.math.NumberUtils;
44 42 import org.apache.poi.ss.usermodel.CellType;
45 43 import org.apache.poi.xssf.usermodel.XSSFCell;
46 44 import org.apache.poi.xssf.usermodel.XSSFRow;
... ... @@ -55,7 +53,6 @@ import org.springframework.web.multipart.MultipartFile;
55 53  
56 54 import java.io.IOException;
57 55 import java.math.BigDecimal;
58   -import java.math.RoundingMode;
59 56 import java.time.LocalDate;
60 57 import java.time.LocalDateTime;
61 58 import java.time.LocalTime;
... ... @@ -496,7 +493,7 @@ public class EvalIndicatorReportService {
496 493 }
497 494 //分数原始数据
498 495 if (EvalIndicatorImportTypeEnum.SCORE_ORIGIN_VALUE.equals(record.getImportType())) {
499   - ImportEvalIndicatorOriginValueEvent event = new ImportEvalIndicatorOriginValueEvent(record.getId()
  496 + ImportEvalIndicatorScoreEvent event = new ImportEvalIndicatorScoreEvent(record.getId()
500 497 , record.getGroupId());
501 498 EventBusUtil.asyncPost(event);
502 499 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/component/EvalIndicatorOriginValueSaveObserver.java renamed to fw-morax-service/src/main/java/cn/fw/morax/service/component/EvalIndicatorScoreSaveObserver.java
1 1 package cn.fw.morax.service.component;
2 2  
3 3 import cn.fw.morax.common.config.EvalIndicatorCodeVal;
4   -import cn.fw.morax.common.config.EvalIndicatorVal;
5 4 import cn.fw.morax.common.config.TodoVal;
6   -import cn.fw.morax.common.pojo.event.ImportEvalIndicatorEvent;
7   -import cn.fw.morax.common.pojo.event.ImportEvalIndicatorOriginValueEvent;
8   -import cn.fw.morax.common.utils.DateUtil;
  5 +import cn.fw.morax.common.pojo.event.ImportEvalIndicatorScoreEvent;
9 6 import cn.fw.morax.common.utils.PublicUtil;
10 7 import cn.fw.morax.domain.bo.eval.EvalIndicatorScoreBO;
11 8 import cn.fw.morax.domain.db.eval.*;
12   -import cn.fw.morax.domain.db.salary.SalaryPool;
13   -import cn.fw.morax.domain.enums.DataImportStatusEnum;
14   -import cn.fw.morax.domain.enums.DataTimeTypeEnum;
15 9 import cn.fw.morax.domain.enums.DataTypeEnum;
16 10 import cn.fw.morax.domain.enums.DimensionTypeEnum;
17 11 import cn.fw.morax.rpc.backlog.TodoRpcService;
18   -import cn.fw.morax.rpc.backlog.dto.BackLogItemDTO;
19 12 import cn.fw.morax.rpc.erp.ErpRpcService;
20   -import cn.fw.morax.rpc.erp.dto.HRoleAuthRangeVO;
  13 +import cn.fw.morax.rpc.erp.dto.HRoleAuthRangeDayVO;
  14 +import cn.fw.morax.service.biz.RpcCommonService;
  15 +import cn.fw.morax.service.biz.eval.EvalIndicatorCommonService;
21 16 import cn.fw.morax.service.data.eval.*;
22 17 import com.alibaba.fastjson.JSON;
23 18 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
24   -import com.google.common.collect.Lists;
25 19 import com.google.common.eventbus.Subscribe;
26 20 import lombok.RequiredArgsConstructor;
27 21 import lombok.extern.slf4j.Slf4j;
... ... @@ -31,25 +25,24 @@ import org.springframework.transaction.annotation.Transactional;
31 25 import java.math.BigDecimal;
32 26 import java.math.RoundingMode;
33 27 import java.time.LocalDate;
34   -import java.time.Period;
35 28 import java.time.YearMonth;
36   -import java.time.temporal.ChronoUnit;
37 29 import java.time.temporal.TemporalAdjusters;
38   -import java.time.temporal.TemporalUnit;
39 30 import java.util.*;
40 31 import java.util.stream.Collectors;
41 32  
42 33 @Component
43 34 @Slf4j
44 35 @RequiredArgsConstructor
45   -public class EvalIndicatorOriginValueSaveObserver {
  36 +public class EvalIndicatorScoreSaveObserver {
46 37  
47 38 private final TodoVal todoVal;
48 39 private final TodoRpcService todoRpcService;
49 40 private final ErpRpcService erpRpcService;
  41 + private final RpcCommonService rpcCommonService;
50 42 private final EvalIndicatorCodeVal evalIndicatorCodeVal;
51 43 private final EvalIndicatorService evalIndicatorService;
52 44 private final EvalIndicatorValueService evalIndicatorValueService;
  45 + private final EvalIndicatorCommonService evalIndicatorCommonService;
53 46 private final EvalIndicatorImportService evalIndicatorImportService;
54 47 private final EvalIndicatorStageValueService evalIndicatorStageValueService;
55 48 private final EvalIndicatorImportRecordService evalIndicatorImportRecordService;
... ... @@ -63,19 +56,17 @@ public class EvalIndicatorOriginValueSaveObserver {
63 56 */
64 57 @Subscribe
65 58 @Transactional(rollbackFor = Exception.class)
66   - public void saveEvalIndicator(ImportEvalIndicatorOriginValueEvent event) {
  59 + public void saveEvalIndicator(ImportEvalIndicatorScoreEvent event) {
67 60 //睡10秒保证数据落库
68 61 try {
69 62 Thread.sleep(10 * 1000);
70 63 } catch (InterruptedException e) {
71 64 e.printStackTrace();
72 65 }
73   - final LocalDate currentMonthFirstDate = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());
74   - Boolean uploadLastMonthData = Boolean.FALSE;
75 66 final Long recordId = event.getEvalIndicatorImportRecordId();
76 67 EvalIndicatorImportRecord importRecord = evalIndicatorImportRecordService.getById(recordId);
  68 + EvalIndicator evalIndicator = evalIndicatorService.queryByCode(importRecord.getIndicatorCode(), Boolean.FALSE);
77 69 final Long groupId = importRecord.getGroupId();
78   - DimensionTypeEnum dimensionType = importRecord.getDimensionType();
79 70 List<EvalIndicatorImportDetailScore> detailScores = evalIndicatorImportDetailScoreService.list(Wrappers.<EvalIndicatorImportDetailScore>lambdaQuery()
80 71 .eq(EvalIndicatorImportDetailScore::getRecordId, recordId)
81 72 .isNull(EvalIndicatorImportDetailScore::getErrorType)
... ... @@ -84,7 +75,7 @@ public class EvalIndicatorOriginValueSaveObserver {
84 75  
85 76 Set<YearMonth> monthlies = new HashSet<>();
86 77 for (EvalIndicatorImportDetailScore showroomBeautifyScore : detailScores) {
87   - //月度重复数据删除
  78 + //月度重复数据删除(打分人员一个月 只能打分一次)
88 79 final LocalDate monthlyFirstDate = showroomBeautifyScore.getDataDate().with(TemporalAdjusters.firstDayOfMonth());
89 80 List<EvalIndicatorImportDetailScore> repeatScores = evalIndicatorImportDetailScoreService.list(Wrappers.<EvalIndicatorImportDetailScore>lambdaQuery()
90 81 .eq(EvalIndicatorImportDetailScore::getIndicatorCode, showroomBeautifyScore.getIndicatorCode())
... ... @@ -105,13 +96,21 @@ public class EvalIndicatorOriginValueSaveObserver {
105 96 showroomBeautifyScore.setValid(Boolean.TRUE);
106 97 evalIndicatorImportDetailScoreService.updateById(showroomBeautifyScore);
107 98 }
108   -
  99 + //抽取数据
  100 + for (YearMonth monthly : monthlies) {
  101 + LocalDate dataDate = YearMonth.now().compareTo(monthly) == 0 ? LocalDate.now() : monthly.atEndOfMonth();
  102 + List<EvalIndicatorScoreBO> monthlyScoreBos = this.getShopScoreBO(monthly, dataDate, groupId);
  103 +
  104 + List<EvalIndicatorValue> shopValues = this.extractShopValue(dataDate, groupId, monthlyScoreBos);
  105 + List<EvalIndicatorValue> staffValues = this.extractUserValue(evalIndicator, monthly, dataDate, groupId, monthlyScoreBos);
  106 + evalIndicatorCommonService.saveIndicatorValue(shopValues);
  107 + evalIndicatorCommonService.saveIndicatorValue(staffValues);
  108 + }
109 109 }
110 110  
111 111 public List<EvalIndicatorScoreBO> getShopScoreBO(YearMonth monthly, LocalDate dataDate, Long groupId) {
112 112 final LocalDate startTime = monthly.atDay(1);
113 113 final LocalDate endTime = monthly.atEndOfMonth();
114   -
115 114 List<EvalIndicatorImportDetailScore> showroomScores = evalIndicatorImportDetailScoreService.list(Wrappers.<EvalIndicatorImportDetailScore>lambdaQuery()
116 115 .eq(EvalIndicatorImportDetailScore::getIndicatorCode, evalIndicatorCodeVal.getShowroomScore())
117 116 .le(EvalIndicatorImportDetailScore::getDataDate, startTime)
... ... @@ -121,16 +120,13 @@ public class EvalIndicatorOriginValueSaveObserver {
121 120 .eq(EvalIndicatorImportDetailScore::getGroupId, groupId)
122 121 .eq(EvalIndicatorImportDetailScore::getYn, Boolean.TRUE)
123 122 );
124   -
  123 + //一个门店 多次打分
125 124 Map<Long, List<EvalIndicatorImportDetailScore>> shopMonthlyShowroomScoreMap = showroomScores.stream().
126 125 collect(Collectors.groupingBy(EvalIndicatorImportDetailScore::getShopId));
127   -
128 126 List<EvalIndicatorScoreBO> scoreBOS = new ArrayList<>();
129 127 for (Map.Entry<Long, List<EvalIndicatorImportDetailScore>> entry : shopMonthlyShowroomScoreMap.entrySet()) {
130 128 final Long shopId = entry.getKey();
131 129 final List<EvalIndicatorImportDetailScore> shopShowroomScores = entry.getValue();
132   -
133   -
134 130 BigDecimal score = shopShowroomScores.stream().map(EvalIndicatorImportDetailScore::getScore).reduce(BigDecimal.ZERO, BigDecimal::add);
135 131 BigDecimal totalScore = shopShowroomScores.stream().map(EvalIndicatorImportDetailScore::getTotalScore).reduce(BigDecimal.ZERO, BigDecimal::add);
136 132 EvalIndicatorScoreBO value = new EvalIndicatorScoreBO();
... ... @@ -140,21 +136,17 @@ public class EvalIndicatorOriginValueSaveObserver {
140 136 value.setDataDate(dataDate);
141 137 scoreBOS.add(value);
142 138 }
143   -
144   - return null;
  139 + return scoreBOS;
145 140 }
146 141  
147   - public void extractShopValue(YearMonth monthly, LocalDate dataDate, Long groupId, List<EvalIndicatorScoreBO> scoreBos) {
148   - final LocalDate startTime = monthly.atDay(1);
149   - final LocalDate endTime = monthly.atEndOfMonth();
150   -
151   -
  142 + public List<EvalIndicatorValue> extractShopValue(LocalDate dataDate, Long groupId, List<EvalIndicatorScoreBO> scoreBos) {
152 143 List<EvalIndicatorValue> evalIndicatorValues = new ArrayList<>();
153 144 for (EvalIndicatorScoreBO scoreBO : scoreBos) {
154 145 final BigDecimal score = scoreBO.getScore();
155 146 final BigDecimal totalScore = scoreBO.getTotalScore();
156 147  
157 148 EvalIndicatorValue indicatorValue = new EvalIndicatorValue();
  149 + indicatorValue.setUserId(-1L);
158 150 indicatorValue.setShopId(scoreBO.getShopId());
159 151 indicatorValue.setIndicatorValue(BigDecimal.ZERO);
160 152 indicatorValue.setIndicatorCode(evalIndicatorCodeVal.getShowroomScore());
... ... @@ -162,88 +154,72 @@ public class EvalIndicatorOriginValueSaveObserver {
162 154 if (PublicUtil.isNotEmpty(score) && PublicUtil.isNotEmpty(totalScore) && (totalScore.compareTo(BigDecimal.ZERO) > 0)) {
163 155 indicatorValue.setIndicatorValue(score.divide(totalScore, 4, RoundingMode.HALF_UP));
164 156 }
165   -// value.setShopName(detail.getShopName());
166 157 indicatorValue.setDataType(DataTypeEnum.RATIO);
167 158 indicatorValue.setDataDate(dataDate);
168 159 indicatorValue.setGroupId(groupId);
169 160 indicatorValue.setYn(Boolean.TRUE);
170   -
171   - //删除当天重复数据
172   - List<EvalIndicatorValue> indicatorValues = evalIndicatorValueService.list(Wrappers.<EvalIndicatorValue>lambdaQuery()
173   - .eq(EvalIndicatorValue::getShopId, scoreBO.getShopId())
174   - .eq(EvalIndicatorValue::getIndicatorCode, evalIndicatorCodeVal.getShowroomScore())
175   - .eq(EvalIndicatorValue::getDataDate, scoreBO.getDataDate())
176   - .eq(EvalIndicatorValue::getDimensionType, DimensionTypeEnum.SHOP)
177   - .eq(EvalIndicatorValue::getYn, Boolean.TRUE)
178   - );
179   - if (PublicUtil.isNotEmpty(indicatorValues)) {
180   - evalIndicatorValueService.removeByIds(indicatorValues.stream().map(EvalIndicatorValue::getId).collect(Collectors.toList()));
181   - }
182   -
183 161 evalIndicatorValues.add(indicatorValue);
184   - evalIndicatorValueService.save(indicatorValue);
185 162 }
  163 + return evalIndicatorValues;
186 164  
187 165 }
188 166  
189   - public EvalIndicatorValue extractUserValue(EvalIndicator evalIndicator, YearMonth monthly, LocalDate dataDate, Long groupId, List<EvalIndicatorScoreBO> scoreBos) {
190   - final LocalDate startTime = monthly.atDay(1);
  167 + public List<EvalIndicatorValue> extractUserValue(EvalIndicator evalIndicator, YearMonth monthly, LocalDate dataDate, Long groupId, List<EvalIndicatorScoreBO> scoreBos) {
191 168 final LocalDate endTime = monthly.atEndOfMonth();
192 169 List<String> roleCodes = evalIndicator.getRoleCodes();
193 170  
194   -
195 171 List<Long> shopIds = scoreBos.stream().map(EvalIndicatorScoreBO::getShopId).distinct().collect(Collectors.toList());
196   -
197   -
198   -
199 172 Map<Long, Set<Long>> userAuthShopIds = new HashMap<>();
  173 + //角色维度
200 174 for (String roleCode : roleCodes) {
201   - List<HRoleAuthRangeVO> hRoleAuthRangeVos = erpRpcService.queryRoleHistoryAuthRange(groupId, new ArrayList<>(shopIds), roleCode, startTime);
202   -
203   - Map<Long, List<HRoleAuthRangeVO>> shopAuths = hRoleAuthRangeVos.stream().collect(Collectors.groupingBy(HRoleAuthRangeVO::getRangeValue));
204   -
205   - for (Map.Entry<Long, List<HRoleAuthRangeVO>> entry : shopAuths.entrySet()) {
206   -
207   - for (HRoleAuthRangeVO hRoleAuthRangeVO : entry.getValue()) {
208   - Period period = Period.between(DateUtil.date2LocalDate(hRoleAuthRangeVO.getStartTime()), DateUtil.date2LocalDate(hRoleAuthRangeVO.getEndTime()));
209   - Long days = period.get(ChronoUnit.DAYS);
210   -
211   -
  175 + //角色授权天数
  176 + List<HRoleAuthRangeDayVO> authRangeDayVos = rpcCommonService.roleMonthlyAuthDay(groupId, endTime, roleCode, new ArrayList<>(shopIds));
  177 + //门店角色授权天数
  178 + Map<Long, List<HRoleAuthRangeDayVO>> shopAuths = authRangeDayVos.stream().collect(Collectors.groupingBy(HRoleAuthRangeDayVO::getRangeValue));
  179 + for (Map.Entry<Long, List<HRoleAuthRangeDayVO>> entry : shopAuths.entrySet()) {
  180 + //获取最大 角色授权
  181 + log.info("门店角色:{},授权记录:{}", roleCode, JSON.toJSONString(entry.getValue()));
  182 + Long maxAuthRangeDay = entry.getValue().stream()
  183 + .max(Comparator.comparing(HRoleAuthRangeDayVO::getAuthDays)).map(HRoleAuthRangeDayVO::getAuthDays).get();
  184 + List<HRoleAuthRangeDayVO> maxAuthVos = entry.getValue().stream()
  185 + .filter(auth -> maxAuthRangeDay.compareTo(auth.getAuthDays()) == 0).collect(Collectors.toList());
  186 + log.info("门店角色:{},最长天数授权:{}", roleCode, JSON.toJSONString(maxAuthVos));
  187 + for (HRoleAuthRangeDayVO rangeDayVO : maxAuthVos) {
  188 + //初始化
  189 + if (! userAuthShopIds.containsKey(rangeDayVO.getUserId())) {
  190 + userAuthShopIds.put(rangeDayVO.getUserId(), new HashSet<>());
  191 + }
  192 + userAuthShopIds.get(rangeDayVO.getUserId()).add(rangeDayVO.getRangeValue());
212 193 }
213   -
214 194 }
215   -
216   - for (HRoleAuthRangeVO hRoleAuthRangeVO : hRoleAuthRangeVos) {
217   -
218   -
  195 + }
  196 + log.info("角色授权门店:{}", JSON.toJSONString(userAuthShopIds));
  197 + //抽取人员数据
  198 + List<EvalIndicatorValue> evalIndicatorValues = new ArrayList<>();
  199 + for (Map.Entry<Long, Set<Long>> entry : userAuthShopIds.entrySet()) {
  200 + final Long userId = entry.getKey();
  201 + final Set<Long> authShopIds = entry.getValue();
  202 +
  203 + BigDecimal score = scoreBos.stream().filter(scoreBo -> authShopIds.contains(scoreBo.getShopId()))
  204 + .map(EvalIndicatorScoreBO::getScore).reduce(BigDecimal.ZERO, BigDecimal::add);
  205 + BigDecimal totalScore = scoreBos.stream().filter(scoreBo -> authShopIds.contains(scoreBo.getShopId()))
  206 + .map(EvalIndicatorScoreBO::getTotalScore).reduce(BigDecimal.ZERO, BigDecimal::add);
  207 + EvalIndicatorValue value = new EvalIndicatorValue();
  208 + value.setUserId(userId);
  209 + value.setShopId(-1L);
  210 + value.setIndicatorValue(BigDecimal.ZERO);
  211 + value.setIndicatorCode(evalIndicatorCodeVal.getShowroomScore());
  212 + value.setDimensionType(DimensionTypeEnum.STAFF);
  213 + if (PublicUtil.isNotEmpty(score) && PublicUtil.isNotEmpty(totalScore) && (totalScore.compareTo(BigDecimal.ZERO) > 0)) {
  214 + value.setIndicatorValue(score.divide(totalScore, 4, RoundingMode.HALF_UP));
219 215 }
220   -
221   -
  216 + value.setDataType(DataTypeEnum.RATIO);
  217 + value.setDataDate(dataDate);
  218 + value.setGroupId(groupId);
  219 + value.setYn(Boolean.TRUE);
  220 + evalIndicatorValues.add(value);
222 221 }
223   -
224   -
225   -// for (Map.Entry<Long, List<EvalIndicatorImportDetailScore>> entry : shopMonthlyShowroomScoreMap.entrySet()) {
226   -// final Long shopId = entry.getKey();
227   -// final List<EvalIndicatorImportDetailScore> shopShowroomScores = entry.getValue();
228   -//
229   -// BigDecimal score = shopShowroomScores.stream().map(EvalIndicatorImportDetailScore::getScore).reduce(BigDecimal.ZERO, BigDecimal::add);
230   -// BigDecimal totalScore = shopShowroomScores.stream().map(EvalIndicatorImportDetailScore::getTotalScore).reduce(BigDecimal.ZERO, BigDecimal::add);
231   -// EvalIndicatorValue value = new EvalIndicatorValue();
232   -// value.setShopId(shopId);
233   -// value.setIndicatorValue(BigDecimal.ZERO);
234   -// value.setIndicatorCode(evalIndicatorCodeVal.getShowroomScore());
235   -// value.setDimensionType(DimensionTypeEnum.SHOP);
236   -// if (PublicUtil.isNotEmpty(score) && PublicUtil.isNotEmpty(totalScore) && (totalScore.compareTo(BigDecimal.ZERO) > 0)) {
237   -// value.setIndicatorValue(score.divide(totalScore, 4, RoundingMode.HALF_UP));
238   -// }
239   -//// value.setShopName(detail.getShopName());
240   -// value.setDataType(DataTypeEnum.RATIO);
241   -// value.setDataDate(dataDate);
242   -// value.setGroupId(groupId);
243   -// value.setYn(Boolean.TRUE);
244   -// }
245   -
246   - return null;
  222 + return evalIndicatorValues;
247 223 }
248 224  
249 225 }
250 226 \ No newline at end of file
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/EvalIndicatorValueService.java
1 1 package cn.fw.morax.service.data.eval;
2 2  
3 3  
  4 +import cn.fw.morax.dao.orm.ILocalService;
4 5 import cn.fw.morax.domain.db.eval.EvalIndicatorValue;
5 6 import cn.fw.morax.domain.enums.DimensionTypeEnum;
6 7 import cn.fw.morax.domain.vo.kpi.IndicatorUserValueVO;
... ... @@ -19,7 +20,7 @@ import java.util.Set;
19 20 * @author jiangchao
20 21 * @since 2022-12-09
21 22 */
22   -public interface EvalIndicatorValueService extends IService<EvalIndicatorValue> {
  23 +public interface EvalIndicatorValueService extends ILocalService<EvalIndicatorValue> {
23 24  
24 25 /**
25 26 * 查最新上报数据(一个月内)
... ...