diff --git a/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalIndicatorImportRecordVO.java b/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalIndicatorImportRecordVO.java
index de3f6a3..554961c 100644
--- a/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalIndicatorImportRecordVO.java
+++ b/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalIndicatorImportRecordVO.java
@@ -10,6 +10,7 @@ import lombok.experimental.Accessors;
import java.time.LocalDate;
import java.util.Date;
+import java.util.List;
/**
*
@@ -100,4 +101,15 @@ public class EvalIndicatorImportRecordVO{
* 创建时间
*/
private Date createTime;
+
+ /**
+ * 保存的key
+ */
+ private String key;
+
+ /**
+ * 导入详情
+ */
+ private List details;
+
}
diff --git a/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalRewardDistVO.java b/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalRewardDistVO.java
index 6095cc5..2f4a02d 100644
--- a/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalRewardDistVO.java
+++ b/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalRewardDistVO.java
@@ -91,6 +91,11 @@ public class EvalRewardDistVO {
private Long groupId;
/**
+ * 审批单号
+ */
+ private String approvalNo;
+
+ /**
* 门店
*/
private List shopPools;
diff --git a/fw-morax-server/src/main/java/cn/fw/morax/server/controller/erp/EvalIndicatorController.java b/fw-morax-server/src/main/java/cn/fw/morax/server/controller/erp/EvalIndicatorController.java
index 3e6e510..a96fbc1 100644
--- a/fw-morax-server/src/main/java/cn/fw/morax/server/controller/erp/EvalIndicatorController.java
+++ b/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;
import cn.fw.common.web.auth.LoginAuthBean;
import cn.fw.common.web.auth.annotation.CurrentUser;
import cn.fw.data.base.domain.common.Message;
+import cn.fw.morax.common.utils.PublicUtil;
import cn.fw.morax.domain.db.eval.EvalIndicatorImportDetail;
import cn.fw.morax.domain.dto.query.EvalIndicatorImportQueryDTO;
import cn.fw.morax.domain.vo.eval.*;
@@ -115,45 +116,43 @@ public class EvalIndicatorController {
* @return
*/
@IgnoreAuth
- @PostMapping("/staff-indicator")
+ @PostMapping("/analysis-staff")
@ControllerMethod("上传人员指标")
- public Message uploadStaffIndicator(@RequestParam("file") MultipartFile file, @CurrentUser LoginAuthBean user) {
+ public Message analysisStaffExcel(@RequestParam("file") MultipartFile file, @CurrentUser LoginAuthBean user) {
if (file.isEmpty()) {
throw new BusinessException("请上传文件");
}
- evalIndicatorReportService.uploadStaffIndicator(file, user);
- return success();
+ return success(evalIndicatorReportService.uploadStaffIndicator(file, user));
}
/**
- * 上传人员指标
+ * 上传门店指标
*
* @return
*/
@IgnoreAuth
- @PostMapping("/analysis-staff-indicator")
- @ControllerMethod("上传人员指标")
- public Message> analysisStaffExcel(@RequestParam("file") MultipartFile file, @CurrentUser LoginAuthBean user) {
+ @PostMapping("/analysis-shop")
+ @ControllerMethod("上传门店指标")
+ public Message uploadShopIndicator(@RequestParam("file") MultipartFile file, @CurrentUser LoginAuthBean user) {
if (file.isEmpty()) {
throw new BusinessException("请上传文件");
}
- evalIndicatorReportService.analysisStaffExcel(file, user);
+ evalIndicatorReportService.uploadShopIndicator(file, user);
return success();
}
/**
- * 上传门店指标
+ * 保存上传人员数据
*
* @return
*/
- @IgnoreAuth
- @PostMapping("/shop-indicator")
- @ControllerMethod("上传门店指标")
- public Message uploadShopIndicator(@RequestParam("file") MultipartFile file, @CurrentUser LoginAuthBean user) {
- if (file.isEmpty()) {
- throw new BusinessException("请上传文件");
+ @GetMapping("/save-import")
+ @ControllerMethod("保存上传人员数据")
+ public Message uploadStaffIndicator(String key) {
+ if (PublicUtil.isEmpty(key)) {
+ throw new BusinessException("参数错误");
}
- evalIndicatorReportService.uploadShopIndicator(file, user);
+ evalIndicatorReportService.saveImportIndicator(key);
return success();
}
diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalIndicatorReportService.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalIndicatorReportService.java
index 79a24d2..7750538 100644
--- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalIndicatorReportService.java
+++ b/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;
import cn.fw.morax.service.data.eval.*;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
+import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Lists;
+import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.map.MultiKeyMap;
import org.apache.poi.ss.formula.functions.T;
+import org.checkerframework.checker.units.qual.K;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.BoundValueOperations;
+import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@@ -39,6 +45,7 @@ import java.time.LocalTime;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.*;
+import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -57,9 +64,17 @@ public class EvalIndicatorReportService {
private final EvalIndicatorService evalIndicatorService;
private final EvalUserPoolService evalUserPoolService;
private final EvalShopPoolService evalShopPoolService;
+ private final StringRedisTemplate stringRedisTemplate;
private final EvalGroupService evalGroupService;
private final EvalService evalService;
+ @Value("${spring.cache.custom.global-prefix}:eval-import:")
+ @Getter
+ private String evalImport;
+ @Value("${spring.cache.custom.global-prefix}:eval-import-detail:")
+ @Getter
+ private String evalImportDetail;
+
public void staffTemplateFile(HttpServletRequest request, HttpServletResponse response) {
String fileName = "人员导入标准模板.xlsx";
String encodeFileName = CommonService.getEncodeName(request, fileName);
@@ -122,11 +137,11 @@ public class EvalIndicatorReportService {
}
@Transactional(rollbackFor = Exception.class)
- public void uploadStaffIndicator(MultipartFile file, LoginAuthBean user) {
+ public EvalIndicatorImportRecordVO uploadStaffIndicator(MultipartFile file, LoginAuthBean user) {
MultiKeyMap staffPostMap = getShopUserPoolMap(user);
Map evalIndicatorMap = getNameIndicatorMap();
EvalIndicatorImportRecord importRecord = createRecord(user, DimensionTypeEnum.STAFF);
- evalIndicatorImportRecordService.save(importRecord);
+// evalIndicatorImportRecordService.save(importRecord);
List details = new ArrayList<>();
List indicatorValues = this.analysisExcel(file, StaffIndicatorValueVO.class);
Long importRecordId = importRecord.getId();
@@ -168,73 +183,70 @@ public class EvalIndicatorReportService {
importDetail.setIndicatorValue(new BigDecimal(staff.getIndicatorValue()));
importDetail.setDataType(evalIndicator.getDataType());
}
- Optional detailOptional = details.stream().findFirst();
+ Optional detailOptional = details.stream().filter(detail -> PublicUtil.isEmpty(detail.getErrorType())).findFirst();
importRecord.setIndicatorCode(detailOptional.map(EvalIndicatorImportDetail::getIndicatorCode).orElse(""));
importRecord.setIndicatorName(detailOptional.map(EvalIndicatorImportDetail::getIndicatorName).orElse(""));
importRecord.setErrorNum(errorNum);
importRecord.setNum(indicatorValues.size());
importRecord.setSuccessNum(indicatorValues.size() - errorNum);
- evalIndicatorImportRecordService.updateById(importRecord);
- evalIndicatorImportDetailService.saveBatch(details);
- for (String indicatorCode : uploadIndicatorCodes) {
- ImportEvalIndicatorEvent importEvalIndicatorEvent = new ImportEvalIndicatorEvent(indicatorCode,
- importRecord.getId(), importRecord.getGroupId(), importRecord.getUploadTime());
- EventBusUtil.asyncPost(importEvalIndicatorEvent);
- }
- }
+ String key = PublicUtil.getUUID() + user.getUserId();
+ stringRedisTemplate.opsForValue().set(getEvalImport() + key, JSON.toJSONString(importRecord), 1 , TimeUnit.DAYS);
+ stringRedisTemplate.opsForValue().set(getEvalImportDetail() + key, JSON.toJSONString(details), 1 , TimeUnit.DAYS);
- public List analysisStaffExcel(MultipartFile file, LoginAuthBean user) {
- MultiKeyMap staffPostMap = getShopUserPoolMap(user);
- Map evalIndicatorMap = getNameIndicatorMap();
- List details = new ArrayList<>();
- List indicatorValues = this.analysisExcel(file, StaffIndicatorValueVO.class);
- Integer errorNum = 0;
- Set uploadIndicatorCodes = new HashSet<>();
+ EvalIndicatorImportRecordVO recordVO = PublicUtil.copy(importRecord, EvalIndicatorImportRecordVO.class);
+ List detailVos = PublicUtil.copyList(details, EvalIndicatorImportDetailVO.class);
+ recordVO.setDetails(detailVos);
+ recordVO.setKey(key);
+ return recordVO;
- MultiKeyMap repeatMap = new MultiKeyMap<>();
- for (StaffIndicatorValueVO staff : indicatorValues) {
- Optional valueOptional = Optional.ofNullable(staff);
- EvalIndicatorImportDetailVO importDetail = convertStaffVo(valueOptional);
- details.add(importDetail);
- if (repeatMap.containsKey(staff.getStaffName(), staff.getShopName(), staff.getIndicatorName())) {
- importDetail.setErrorType(ImportErrorReasonEnum.NO_MATCH_STAFF);
- errorNum += 1;
- continue;
- }
- repeatMap.put(staff.getStaffName(), staff.getShopName(), staff.getIndicatorName(), "");
+// evalIndicatorImportRecordService.updateById(importRecord);
+// evalIndicatorImportDetailService.saveBatch(details);
- importDetail.setDataDate(transferDate(staff.getDataDate()));
- if (! staffPostMap.containsKey(staff.getShopName(), staff.getStaffName())) {
- importDetail.setErrorType(ImportErrorReasonEnum.NO_MATCH_STAFF);
- errorNum += 1;
- continue;
- }
- EvalUserPool userPool = staffPostMap.get(staff.getShopName(), staff.getStaffName());
- importDetail.setUserId(userPool.getUserId());
- importDetail.setShopId(userPool.getShopId());
+// for (String indicatorCode : uploadIndicatorCodes) {
+// ImportEvalIndicatorEvent importEvalIndicatorEvent = new ImportEvalIndicatorEvent(indicatorCode,
+// importRecord.getId(), importRecord.getGroupId(), importRecord.getUploadTime());
+// EventBusUtil.asyncPost(importEvalIndicatorEvent);
+// }
+ }
- if (! evalIndicatorMap.containsKey(staff.getIndicatorName())) {
- importDetail.setErrorType(ImportErrorReasonEnum.NO_MATCH_INDICATOR);
- errorNum += 1;
- continue;
+ public void saveImportIndicator(String key) {
+ BoundValueOperations importOperation = stringRedisTemplate.boundValueOps(getEvalImport() + key);
+ BoundValueOperations importDetailOperation = stringRedisTemplate.boundValueOps(getEvalImportDetail() + key);
+ String json = importOperation.get();
+ String detailJson = importDetailOperation.get();
+ if (PublicUtil.isEmpty(json) || PublicUtil.isEmpty(detailJson)) {
+ log.error("考评指标导入,redis数据为空,key {},", getEvalImport() + key);
+ throw new BusinessException("请求超时,请重新上传");
+ }
+ EvalIndicatorImportRecord record = JSON.parseObject(json, EvalIndicatorImportRecord.class);
+ List details = JSON.parseArray(detailJson, EvalIndicatorImportDetail.class);
+ evalIndicatorImportRecordService.save(record);
+ Long recordId = record.getId();
+ Set uploadIndicatorCodes = new HashSet<>();
+ for (EvalIndicatorImportDetail detail : details) {
+ detail.setRecordId(recordId);
+ if (PublicUtil.isEmpty(detail.getErrorType()) && PublicUtil.isEmpty(detail.getIndicatorCode())) {
+ uploadIndicatorCodes.add(detail.getIndicatorCode());
}
- EvalIndicator evalIndicator = evalIndicatorMap.get(staff.getIndicatorName());
- uploadIndicatorCodes.add(evalIndicator.getCode());
- importDetail.setIndicatorCode(evalIndicator.getCode());
- importDetail.setIndicatorName(evalIndicator.getName());
- importDetail.setIndicatorValue(new BigDecimal(staff.getIndicatorValue()));
- importDetail.setDataType(evalIndicator.getDataType());
}
- return details;
+ evalIndicatorImportDetailService.saveBatch(details);
+ stringRedisTemplate.delete(getEvalImport() + key);
+ stringRedisTemplate.delete(getEvalImportDetail() + key);
+ //事件
+ for (String indicatorCode : uploadIndicatorCodes) {
+ ImportEvalIndicatorEvent importEvalIndicatorEvent = new ImportEvalIndicatorEvent(indicatorCode,
+ recordId, record.getGroupId(), record.getUploadTime());
+ EventBusUtil.asyncPost(importEvalIndicatorEvent);
+ }
}
@Transactional(rollbackFor = Exception.class)
- public void uploadShopIndicator(MultipartFile file, LoginAuthBean user) {
+ public EvalIndicatorImportRecordVO uploadShopIndicator(MultipartFile file, LoginAuthBean user) {
Map shopPoolMap = this.getShopPoolMap(user);
Map evalIndicatorMap = getNameIndicatorMap();
EvalIndicatorImportRecord importRecord = createRecord(user, DimensionTypeEnum.SHOP);
- evalIndicatorImportRecordService.save(importRecord);
+// evalIndicatorImportRecordService.save(importRecord);
Long importRecordId = importRecord.getId();
List details = new ArrayList<>();
List indicatorValues = this.analysisExcel(file, ShopIndicatorValueVO.class);
@@ -279,13 +291,22 @@ public class EvalIndicatorReportService {
importRecord.setErrorNum(errorNum);
importRecord.setNum(indicatorValues.size());
importRecord.setSuccessNum(indicatorValues.size() - errorNum);
- evalIndicatorImportRecordService.updateById(importRecord);
- evalIndicatorImportDetailService.saveBatch(details);
- for (String indicatorCode : uploadIndicatorCodes) {
- ImportEvalIndicatorEvent importEvalIndicatorEvent = new ImportEvalIndicatorEvent(indicatorCode,
- importRecord.getId(), importRecord.getGroupId(), importRecord.getUploadTime());
- EventBusUtil.asyncPost(importEvalIndicatorEvent);
- }
+ String key = PublicUtil.getUUID() + user.getUserId();
+ stringRedisTemplate.opsForValue().set(getEvalImport() + key, JSON.toJSONString(importRecord), 1 , TimeUnit.DAYS);
+ stringRedisTemplate.opsForValue().set(getEvalImportDetail() + key, JSON.toJSONString(details), 1 , TimeUnit.DAYS);
+
+ EvalIndicatorImportRecordVO recordVO = PublicUtil.copy(importRecord, EvalIndicatorImportRecordVO.class);
+ List detailVos = PublicUtil.copyList(details, EvalIndicatorImportDetailVO.class);
+ recordVO.setDetails(detailVos);
+ recordVO.setKey(key);
+ return recordVO;
+// evalIndicatorImportRecordService.updateById(importRecord);
+// evalIndicatorImportDetailService.saveBatch(details);
+// for (String indicatorCode : uploadIndicatorCodes) {
+// ImportEvalIndicatorEvent importEvalIndicatorEvent = new ImportEvalIndicatorEvent(indicatorCode,
+// importRecord.getId(), importRecord.getGroupId(), importRecord.getUploadTime());
+// EventBusUtil.asyncPost(importEvalIndicatorEvent);
+// }
}
public EvalIndicatorImportDetailVO convertStaffVo(Optional valueOptional) {
diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalRewardService.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalRewardService.java
index 6ad0858..b0ce014 100644
--- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalRewardService.java
+++ b/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;
import cn.fw.morax.rpc.erp.dto.RpcUserRoleInfoDTO;
import cn.fw.morax.rpc.erp.dto.RpcUserRoleShopDTO;
import cn.fw.morax.service.biz.ApprovalBizService;
+import cn.fw.morax.service.data.ApprovalRecordService;
import cn.fw.morax.service.data.eval.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
@@ -73,6 +74,7 @@ public class EvalRewardService {
private final ApprovalBizService approvalBizService;
private final StringRedisTemplate stringRedisTemplate;
private final EvalShopPoolService evalShopPoolService;
+ private final ApprovalRecordService approvalRecordService;
private final EvalRewardDistService evalRewardDistService;
private final EvalRewardDistDetailService evalRewardDistDetailService;
@@ -300,6 +302,14 @@ public class EvalRewardService {
);
List detailVOS = PublicUtil.copyList(details, EvalRewardDistDetailVO.class);
rewardDistVO.setRewardDetails(detailVOS);
+
+ ApprovalRecord approvalRecord = approvalRecordService.getOne(Wrappers.lambdaQuery()
+ .eq(ApprovalRecord::getDataId, id)
+ .eq(ApprovalRecord::getApprovalType, ApprovalTypeEnum.EVAL_REWARD_DIST)
+ .eq(ApprovalRecord::getYn, Boolean.TRUE)
+ .last("ORDER BY id DESC LIMIT 1")
+ );
+ rewardDistVO.setApprovalNo(Optional.ofNullable(approvalRecord).map(ApprovalRecord::getApprovalNo).orElse(""));
}
return rewardDistVO;