Commit 17c19d3a8dc472d11c8db5a5beecf79863ae4cde
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
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<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
fw-morax-domain/src/main/java/cn/fw/morax/domain/enums/EvalIndicatorImportTypeEnum.java
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 | * 查最新上报数据(一个月内) | ... | ... |