Commit bcb8ac08c2985a5404f23938283c20ac640c0749

Authored by 张志伟
2 parents 17d0c352 3a93dfe7

Merge branch 'main-fix' into 'main'

考评录入修改

考评录入修改

See merge request !66
fw-morax-domain/src/main/java/cn/fw/morax/domain/dto/EvalIndicatorDTO.java
... ... @@ -27,17 +27,17 @@ public class EvalIndicatorDTO {
27 27 @Length(max = 255, message = "指标名称超出最大长度限制")
28 28 private String name;
29 29  
30   - /**
31   - * 归属系统id
32   - */
33   - @NotNull(message = "归属系统不能为空")
34   - private Long sysId;
35   -
36   - /**
37   - * 归属系统名称
38   - */
39   - @NotNull(message = "归属系统名称不能为空")
40   - private String sysName;
  30 +// /**
  31 +// * 归属系统id
  32 +// */
  33 +// @NotNull(message = "归属系统不能为空")
  34 +// private Long sysId;
  35 +//
  36 +// /**
  37 +// * 归属系统名称
  38 +// */
  39 +// @NotNull(message = "归属系统名称不能为空")
  40 +// private String sysName;
41 41  
42 42 /**
43 43 * 数据类型;1:数量 2:百分比 3:金额
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalIndicatorImportRecordVO.java
... ... @@ -10,6 +10,7 @@ import lombok.experimental.Accessors;
10 10  
11 11 import java.time.LocalDate;
12 12 import java.util.Date;
  13 +import java.util.List;
13 14  
14 15 /**
15 16 * <p>
... ... @@ -100,4 +101,15 @@ public class EvalIndicatorImportRecordVO{
100 101 * 创建时间
101 102 */
102 103 private Date createTime;
  104 +
  105 + /**
  106 + * 保存的key
  107 + */
  108 + private String key;
  109 +
  110 + /**
  111 + * 导入详情
  112 + */
  113 + private List<EvalIndicatorImportDetailVO> details;
  114 +
103 115 }
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalRewardDistVO.java
... ... @@ -91,6 +91,11 @@ public class EvalRewardDistVO {
91 91 private Long groupId;
92 92  
93 93 /**
  94 + * 审批单号
  95 + */
  96 + private String approvalNo;
  97 +
  98 + /**
94 99 * 门店
95 100 */
96 101 private List<EvalShopPoolVO> shopPools;
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/controller/erp/EvalIndicatorController.java
... ... @@ -6,6 +6,7 @@ import cn.fw.common.web.annotation.ControllerMethod;
6 6 import cn.fw.common.web.auth.LoginAuthBean;
7 7 import cn.fw.common.web.auth.annotation.CurrentUser;
8 8 import cn.fw.data.base.domain.common.Message;
  9 +import cn.fw.morax.common.utils.PublicUtil;
9 10 import cn.fw.morax.domain.db.eval.EvalIndicatorImportDetail;
10 11 import cn.fw.morax.domain.dto.query.EvalIndicatorImportQueryDTO;
11 12 import cn.fw.morax.domain.vo.eval.*;
... ... @@ -115,14 +116,13 @@ public class EvalIndicatorController {
115 116 * @return
116 117 */
117 118 @IgnoreAuth
118   - @PostMapping("/staff-indicator")
  119 + @PostMapping("/analysis-staff")
119 120 @ControllerMethod("上传人员指标")
120   - public Message<Void> uploadStaffIndicator(@RequestParam("file") MultipartFile file, @CurrentUser LoginAuthBean user) {
  121 + public Message<EvalIndicatorImportRecordVO> analysisStaffExcel(@RequestParam("file") MultipartFile file, @CurrentUser LoginAuthBean user) {
121 122 if (file.isEmpty()) {
122 123 throw new BusinessException("请上传文件");
123 124 }
124   - evalIndicatorReportService.uploadStaffIndicator(file, user);
125   - return success();
  125 + return success(evalIndicatorReportService.uploadStaffIndicator(file, user));
126 126 }
127 127  
128 128 /**
... ... @@ -131,13 +131,27 @@ public class EvalIndicatorController {
131 131 * @return
132 132 */
133 133 @IgnoreAuth
134   - @PostMapping("/shop-indicator")
  134 + @PostMapping("/analysis-shop")
135 135 @ControllerMethod("上传门店指标")
136   - public Message<Void> uploadShopIndicator(@RequestParam("file") MultipartFile file, @CurrentUser LoginAuthBean user) {
  136 + public Message<EvalIndicatorImportRecordVO> uploadShopIndicator(@RequestParam("file") MultipartFile file, @CurrentUser LoginAuthBean user) {
137 137 if (file.isEmpty()) {
138 138 throw new BusinessException("请上传文件");
139 139 }
140   - evalIndicatorReportService.uploadShopIndicator(file, user);
  140 + return success(evalIndicatorReportService.uploadShopIndicator(file, user));
  141 + }
  142 +
  143 + /**
  144 + * 保存上传人员数据
  145 + *
  146 + * @return
  147 + */
  148 + @GetMapping("/save-import")
  149 + @ControllerMethod("保存上传人员数据")
  150 + public Message<Void> uploadStaffIndicator(String key) {
  151 + if (PublicUtil.isEmpty(key)) {
  152 + throw new BusinessException("参数错误");
  153 + }
  154 + evalIndicatorReportService.saveImportIndicator(key);
141 155 return success();
142 156 }
143 157  
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalIndicatorBizService.java
... ... @@ -246,12 +246,12 @@ public class EvalIndicatorBizService {
246 246 public EvalIndicator convertToDB(EvalIndicatorDTO dto){
247 247 EvalIndicator indicators = EvalIndicator.builder()
248 248 .name(dto.getName())
249   - .enable(Boolean.FALSE)
  249 + .enable(Boolean.TRUE)
250 250 .ruleType(dto.getRuleType())
251 251 .dataType(dto.getDataType())
252 252 .targetType(dto.getTargetType())
253   - .sysId(dto.getSysId())
254   - .sysName(dto.getSysName())
  253 +// .sysId(dto.getSysId())
  254 +// .sysName(dto.getSysName())
255 255 .roleCode(dto.getRoleCode())
256 256 .roleName(dto.getRoleName())
257 257 .build();
... ... @@ -359,9 +359,11 @@ public class EvalIndicatorBizService {
359 359 compositeIndicator.setCodeType(IndicatorCodeTypeEnum.EVAL_INDICATOR);
360 360 compositeIndicator.setCode(evalIndicator.getCode());
361 361 compositeIndicator.setName(evalIndicator.getName());
362   - compositeIndicator.setSysId(evalIndicator.getSysId());
363   - compositeIndicator.setSysPrefix(evalIndicator.getSysPrefix());
364   - compositeIndicator.setSysName(evalIndicator.getSysName());
  362 + if (PublicUtil.isNotEmpty(evalIndicator.getSysId())) {
  363 + compositeIndicator.setSysId(evalIndicator.getSysId());
  364 + compositeIndicator.setSysPrefix(evalIndicator.getSysPrefix());
  365 + compositeIndicator.setSysName(evalIndicator.getSysName());
  366 + }
365 367 compositeIndicator.setRoleCode(evalIndicator.getRoleCode());
366 368 compositeIndicator.setRoleName(evalIndicator.getRoleName());
367 369 compositeIndicator.setDataType(evalIndicator.getDataType());
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalIndicatorReportService.java
... ... @@ -18,13 +18,19 @@ import cn.fw.morax.service.biz.CommonService;
18 18 import cn.fw.morax.service.data.eval.*;
19 19 import cn.hutool.poi.excel.ExcelReader;
20 20 import cn.hutool.poi.excel.ExcelUtil;
  21 +import com.alibaba.fastjson.JSON;
21 22 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
22 23 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
23 24 import com.google.common.collect.Lists;
  25 +import lombok.Getter;
24 26 import lombok.RequiredArgsConstructor;
25 27 import lombok.extern.slf4j.Slf4j;
26 28 import org.apache.commons.collections4.map.MultiKeyMap;
27 29 import org.apache.poi.ss.formula.functions.T;
  30 +import org.checkerframework.checker.units.qual.K;
  31 +import org.springframework.beans.factory.annotation.Value;
  32 +import org.springframework.data.redis.core.BoundValueOperations;
  33 +import org.springframework.data.redis.core.StringRedisTemplate;
28 34 import org.springframework.stereotype.Service;
29 35 import org.springframework.transaction.annotation.Transactional;
30 36 import org.springframework.web.multipart.MultipartFile;
... ... @@ -39,6 +45,7 @@ import java.time.LocalTime;
39 45 import java.time.YearMonth;
40 46 import java.time.format.DateTimeFormatter;
41 47 import java.util.*;
  48 +import java.util.concurrent.TimeUnit;
42 49 import java.util.function.Function;
43 50 import java.util.stream.Collectors;
44 51  
... ... @@ -57,9 +64,17 @@ public class EvalIndicatorReportService {
57 64 private final EvalIndicatorService evalIndicatorService;
58 65 private final EvalUserPoolService evalUserPoolService;
59 66 private final EvalShopPoolService evalShopPoolService;
  67 + private final StringRedisTemplate stringRedisTemplate;
60 68 private final EvalGroupService evalGroupService;
61 69 private final EvalService evalService;
62 70  
  71 + @Value("${spring.cache.custom.global-prefix}:eval-import:")
  72 + @Getter
  73 + private String evalImport;
  74 + @Value("${spring.cache.custom.global-prefix}:eval-import-detail:")
  75 + @Getter
  76 + private String evalImportDetail;
  77 +
63 78 public void staffTemplateFile(HttpServletRequest request, HttpServletResponse response) {
64 79 String fileName = "人员导入标准模板.xlsx";
65 80 String encodeFileName = CommonService.getEncodeName(request, fileName);
... ... @@ -122,11 +137,11 @@ public class EvalIndicatorReportService {
122 137 }
123 138  
124 139 @Transactional(rollbackFor = Exception.class)
125   - public void uploadStaffIndicator(MultipartFile file, LoginAuthBean user) {
  140 + public EvalIndicatorImportRecordVO uploadStaffIndicator(MultipartFile file, LoginAuthBean user) {
126 141 MultiKeyMap<String, EvalUserPool> staffPostMap = getShopUserPoolMap(user);
127 142 Map<String, EvalIndicator> evalIndicatorMap = getNameIndicatorMap();
128 143 EvalIndicatorImportRecord importRecord = createRecord(user, DimensionTypeEnum.STAFF);
129   - evalIndicatorImportRecordService.save(importRecord);
  144 +// evalIndicatorImportRecordService.save(importRecord);
130 145 List<EvalIndicatorImportDetail> details = new ArrayList<>();
131 146 List<StaffIndicatorValueVO> indicatorValues = this.analysisExcel(file, StaffIndicatorValueVO.class);
132 147 Long importRecordId = importRecord.getId();
... ... @@ -168,28 +183,70 @@ public class EvalIndicatorReportService {
168 183 importDetail.setIndicatorValue(new BigDecimal(staff.getIndicatorValue()));
169 184 importDetail.setDataType(evalIndicator.getDataType());
170 185 }
171   - Optional<EvalIndicatorImportDetail> detailOptional = details.stream().findFirst();
  186 + Optional<EvalIndicatorImportDetail> detailOptional = details.stream().filter(detail -> PublicUtil.isEmpty(detail.getErrorType())).findFirst();
172 187 importRecord.setIndicatorCode(detailOptional.map(EvalIndicatorImportDetail::getIndicatorCode).orElse(""));
173 188 importRecord.setIndicatorName(detailOptional.map(EvalIndicatorImportDetail::getIndicatorName).orElse(""));
174 189 importRecord.setErrorNum(errorNum);
175 190 importRecord.setNum(indicatorValues.size());
176 191 importRecord.setSuccessNum(indicatorValues.size() - errorNum);
177   - evalIndicatorImportRecordService.updateById(importRecord);
178   - evalIndicatorImportDetailService.saveBatch(details);
179 192  
  193 + String key = PublicUtil.getUUID() + user.getUserId();
  194 + stringRedisTemplate.opsForValue().set(getEvalImport() + key, JSON.toJSONString(importRecord), 1 , TimeUnit.DAYS);
  195 + stringRedisTemplate.opsForValue().set(getEvalImportDetail() + key, JSON.toJSONString(details), 1 , TimeUnit.DAYS);
  196 +
  197 + EvalIndicatorImportRecordVO recordVO = PublicUtil.copy(importRecord, EvalIndicatorImportRecordVO.class);
  198 + List<EvalIndicatorImportDetailVO> detailVos = PublicUtil.copyList(details, EvalIndicatorImportDetailVO.class);
  199 + recordVO.setDetails(detailVos);
  200 + recordVO.setKey(key);
  201 + return recordVO;
  202 +
  203 +// evalIndicatorImportRecordService.updateById(importRecord);
  204 +// evalIndicatorImportDetailService.saveBatch(details);
  205 +
  206 +// for (String indicatorCode : uploadIndicatorCodes) {
  207 +// ImportEvalIndicatorEvent importEvalIndicatorEvent = new ImportEvalIndicatorEvent(indicatorCode,
  208 +// importRecord.getId(), importRecord.getGroupId(), importRecord.getUploadTime());
  209 +// EventBusUtil.asyncPost(importEvalIndicatorEvent);
  210 +// }
  211 + }
  212 +
  213 + public void saveImportIndicator(String key) {
  214 + BoundValueOperations<String, String> importOperation = stringRedisTemplate.boundValueOps(getEvalImport() + key);
  215 + BoundValueOperations<String, String> importDetailOperation = stringRedisTemplate.boundValueOps(getEvalImportDetail() + key);
  216 + String json = importOperation.get();
  217 + String detailJson = importDetailOperation.get();
  218 + if (PublicUtil.isEmpty(json) || PublicUtil.isEmpty(detailJson)) {
  219 + log.error("考评指标导入,redis数据为空,key {},", getEvalImport() + key);
  220 + throw new BusinessException("请求超时,请重新上传");
  221 + }
  222 + EvalIndicatorImportRecord record = JSON.parseObject(json, EvalIndicatorImportRecord.class);
  223 + List<EvalIndicatorImportDetail> details = JSON.parseArray(detailJson, EvalIndicatorImportDetail.class);
  224 + evalIndicatorImportRecordService.save(record);
  225 + Long recordId = record.getId();
  226 + Set<String> uploadIndicatorCodes = new HashSet<>();
  227 + for (EvalIndicatorImportDetail detail : details) {
  228 + detail.setRecordId(recordId);
  229 + if (PublicUtil.isEmpty(detail.getErrorType()) && PublicUtil.isEmpty(detail.getIndicatorCode())) {
  230 + uploadIndicatorCodes.add(detail.getIndicatorCode());
  231 + }
  232 + }
  233 + evalIndicatorImportDetailService.saveBatch(details);
  234 + stringRedisTemplate.delete(getEvalImport() + key);
  235 + stringRedisTemplate.delete(getEvalImportDetail() + key);
  236 + //事件
180 237 for (String indicatorCode : uploadIndicatorCodes) {
181 238 ImportEvalIndicatorEvent importEvalIndicatorEvent = new ImportEvalIndicatorEvent(indicatorCode,
182   - importRecord.getId(), importRecord.getGroupId(), importRecord.getUploadTime());
  239 + recordId, record.getGroupId(), record.getUploadTime());
183 240 EventBusUtil.asyncPost(importEvalIndicatorEvent);
184 241 }
185 242 }
186 243  
187 244 @Transactional(rollbackFor = Exception.class)
188   - public void uploadShopIndicator(MultipartFile file, LoginAuthBean user) {
  245 + public EvalIndicatorImportRecordVO uploadShopIndicator(MultipartFile file, LoginAuthBean user) {
189 246 Map<String, EvalShopPool> shopPoolMap = this.getShopPoolMap(user);
190 247 Map<String, EvalIndicator> evalIndicatorMap = getNameIndicatorMap();
191 248 EvalIndicatorImportRecord importRecord = createRecord(user, DimensionTypeEnum.SHOP);
192   - evalIndicatorImportRecordService.save(importRecord);
  249 +// evalIndicatorImportRecordService.save(importRecord);
193 250 Long importRecordId = importRecord.getId();
194 251 List<EvalIndicatorImportDetail> details = new ArrayList<>();
195 252 List<ShopIndicatorValueVO> indicatorValues = this.analysisExcel(file, ShopIndicatorValueVO.class);
... ... @@ -234,15 +291,31 @@ public class EvalIndicatorReportService {
234 291 importRecord.setErrorNum(errorNum);
235 292 importRecord.setNum(indicatorValues.size());
236 293 importRecord.setSuccessNum(indicatorValues.size() - errorNum);
237   - evalIndicatorImportRecordService.updateById(importRecord);
238   - evalIndicatorImportDetailService.saveBatch(details);
239   - for (String indicatorCode : uploadIndicatorCodes) {
240   - ImportEvalIndicatorEvent importEvalIndicatorEvent = new ImportEvalIndicatorEvent(indicatorCode,
241   - importRecord.getId(), importRecord.getGroupId(), importRecord.getUploadTime());
242   - EventBusUtil.asyncPost(importEvalIndicatorEvent);
243   - }
  294 + String key = PublicUtil.getUUID() + user.getUserId();
  295 + stringRedisTemplate.opsForValue().set(getEvalImport() + key, JSON.toJSONString(importRecord), 1 , TimeUnit.DAYS);
  296 + stringRedisTemplate.opsForValue().set(getEvalImportDetail() + key, JSON.toJSONString(details), 1 , TimeUnit.DAYS);
  297 +
  298 + EvalIndicatorImportRecordVO recordVO = PublicUtil.copy(importRecord, EvalIndicatorImportRecordVO.class);
  299 + List<EvalIndicatorImportDetailVO> detailVos = PublicUtil.copyList(details, EvalIndicatorImportDetailVO.class);
  300 + recordVO.setDetails(detailVos);
  301 + recordVO.setKey(key);
  302 + return recordVO;
  303 +// evalIndicatorImportRecordService.updateById(importRecord);
  304 +// evalIndicatorImportDetailService.saveBatch(details);
  305 +// for (String indicatorCode : uploadIndicatorCodes) {
  306 +// ImportEvalIndicatorEvent importEvalIndicatorEvent = new ImportEvalIndicatorEvent(indicatorCode,
  307 +// importRecord.getId(), importRecord.getGroupId(), importRecord.getUploadTime());
  308 +// EventBusUtil.asyncPost(importEvalIndicatorEvent);
  309 +// }
244 310 }
245 311  
  312 + public EvalIndicatorImportDetailVO convertStaffVo(Optional<StaffIndicatorValueVO> valueOptional) {
  313 + EvalIndicatorImportDetailVO detail = new EvalIndicatorImportDetailVO();
  314 + detail.setIndicatorName(valueOptional.map(StaffIndicatorValueVO::getIndicatorName).orElse(""));
  315 + detail.setUserName(valueOptional.map(StaffIndicatorValueVO::getStaffName).orElse(""));
  316 + detail.setShopName(valueOptional.map(StaffIndicatorValueVO::getShopName).orElse(""));
  317 + return detail;
  318 + }
246 319 public EvalIndicatorImportDetail convertStaffPo(Optional<StaffIndicatorValueVO> valueOptional) {
247 320 EvalIndicatorImportDetail detail = new EvalIndicatorImportDetail();
248 321 detail.setIndicatorName(valueOptional.map(StaffIndicatorValueVO::getIndicatorName).orElse(""));
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalRewardService.java
... ... @@ -26,6 +26,7 @@ import cn.fw.morax.rpc.erp.ErpRpcService;
26 26 import cn.fw.morax.rpc.erp.dto.RpcUserRoleInfoDTO;
27 27 import cn.fw.morax.rpc.erp.dto.RpcUserRoleShopDTO;
28 28 import cn.fw.morax.service.biz.ApprovalBizService;
  29 +import cn.fw.morax.service.data.ApprovalRecordService;
29 30 import cn.fw.morax.service.data.eval.*;
30 31 import com.alibaba.fastjson.JSON;
31 32 import com.alibaba.fastjson.JSONObject;
... ... @@ -73,6 +74,7 @@ public class EvalRewardService {
73 74 private final ApprovalBizService approvalBizService;
74 75 private final StringRedisTemplate stringRedisTemplate;
75 76 private final EvalShopPoolService evalShopPoolService;
  77 + private final ApprovalRecordService approvalRecordService;
76 78 private final EvalRewardDistService evalRewardDistService;
77 79 private final EvalRewardDistDetailService evalRewardDistDetailService;
78 80  
... ... @@ -300,6 +302,14 @@ public class EvalRewardService {
300 302 );
301 303 List<EvalRewardDistDetailVO> detailVOS = PublicUtil.copyList(details, EvalRewardDistDetailVO.class);
302 304 rewardDistVO.setRewardDetails(detailVOS);
  305 +
  306 + ApprovalRecord approvalRecord = approvalRecordService.getOne(Wrappers.<ApprovalRecord>lambdaQuery()
  307 + .eq(ApprovalRecord::getDataId, id)
  308 + .eq(ApprovalRecord::getApprovalType, ApprovalTypeEnum.EVAL_REWARD_DIST)
  309 + .eq(ApprovalRecord::getYn, Boolean.TRUE)
  310 + .last("ORDER BY id DESC LIMIT 1")
  311 + );
  312 + rewardDistVO.setApprovalNo(Optional.ofNullable(approvalRecord).map(ApprovalRecord::getApprovalNo).orElse(""));
303 313 }
304 314  
305 315 return rewardDistVO;
... ...