diff --git a/fw-morax-domain/src/main/java/cn/fw/morax/domain/dto/EvalIndicatorDTO.java b/fw-morax-domain/src/main/java/cn/fw/morax/domain/dto/EvalIndicatorDTO.java
index 227ce5a..aac8ed6 100644
--- a/fw-morax-domain/src/main/java/cn/fw/morax/domain/dto/EvalIndicatorDTO.java
+++ b/fw-morax-domain/src/main/java/cn/fw/morax/domain/dto/EvalIndicatorDTO.java
@@ -27,17 +27,17 @@ public class EvalIndicatorDTO {
@Length(max = 255, message = "指标名称超出最大长度限制")
private String name;
- /**
- * 归属系统id
- */
- @NotNull(message = "归属系统不能为空")
- private Long sysId;
-
- /**
- * 归属系统名称
- */
- @NotNull(message = "归属系统名称不能为空")
- private String sysName;
+// /**
+// * 归属系统id
+// */
+// @NotNull(message = "归属系统不能为空")
+// private Long sysId;
+//
+// /**
+// * 归属系统名称
+// */
+// @NotNull(message = "归属系统名称不能为空")
+// private String sysName;
/**
* 数据类型;1:数量 2:百分比 3:金额
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 4c13f9e..882a05f 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,14 +116,13 @@ 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));
}
/**
@@ -131,13 +131,27 @@ public class EvalIndicatorController {
* @return
*/
@IgnoreAuth
- @PostMapping("/shop-indicator")
+ @PostMapping("/analysis-shop")
@ControllerMethod("上传门店指标")
- public Message uploadShopIndicator(@RequestParam("file") MultipartFile file, @CurrentUser LoginAuthBean user) {
+ public Message uploadShopIndicator(@RequestParam("file") MultipartFile file, @CurrentUser LoginAuthBean user) {
if (file.isEmpty()) {
throw new BusinessException("请上传文件");
}
- evalIndicatorReportService.uploadShopIndicator(file, user);
+ return success(evalIndicatorReportService.uploadShopIndicator(file, user));
+ }
+
+ /**
+ * 保存上传人员数据
+ *
+ * @return
+ */
+ @GetMapping("/save-import")
+ @ControllerMethod("保存上传人员数据")
+ public Message uploadStaffIndicator(String key) {
+ if (PublicUtil.isEmpty(key)) {
+ throw new BusinessException("参数错误");
+ }
+ evalIndicatorReportService.saveImportIndicator(key);
return success();
}
diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalIndicatorBizService.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalIndicatorBizService.java
index d822542..bd40e55 100644
--- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalIndicatorBizService.java
+++ b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalIndicatorBizService.java
@@ -246,12 +246,12 @@ public class EvalIndicatorBizService {
public EvalIndicator convertToDB(EvalIndicatorDTO dto){
EvalIndicator indicators = EvalIndicator.builder()
.name(dto.getName())
- .enable(Boolean.FALSE)
+ .enable(Boolean.TRUE)
.ruleType(dto.getRuleType())
.dataType(dto.getDataType())
.targetType(dto.getTargetType())
- .sysId(dto.getSysId())
- .sysName(dto.getSysName())
+// .sysId(dto.getSysId())
+// .sysName(dto.getSysName())
.roleCode(dto.getRoleCode())
.roleName(dto.getRoleName())
.build();
@@ -359,9 +359,11 @@ public class EvalIndicatorBizService {
compositeIndicator.setCodeType(IndicatorCodeTypeEnum.EVAL_INDICATOR);
compositeIndicator.setCode(evalIndicator.getCode());
compositeIndicator.setName(evalIndicator.getName());
- compositeIndicator.setSysId(evalIndicator.getSysId());
- compositeIndicator.setSysPrefix(evalIndicator.getSysPrefix());
- compositeIndicator.setSysName(evalIndicator.getSysName());
+ if (PublicUtil.isNotEmpty(evalIndicator.getSysId())) {
+ compositeIndicator.setSysId(evalIndicator.getSysId());
+ compositeIndicator.setSysPrefix(evalIndicator.getSysPrefix());
+ compositeIndicator.setSysName(evalIndicator.getSysName());
+ }
compositeIndicator.setRoleCode(evalIndicator.getRoleCode());
compositeIndicator.setRoleName(evalIndicator.getRoleName());
compositeIndicator.setDataType(evalIndicator.getDataType());
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 1775dfb..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,28 +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);
+ 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 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());
+ }
+ }
+ evalIndicatorImportDetailService.saveBatch(details);
+ stringRedisTemplate.delete(getEvalImport() + key);
+ stringRedisTemplate.delete(getEvalImportDetail() + key);
+ //事件
for (String indicatorCode : uploadIndicatorCodes) {
ImportEvalIndicatorEvent importEvalIndicatorEvent = new ImportEvalIndicatorEvent(indicatorCode,
- importRecord.getId(), importRecord.getGroupId(), importRecord.getUploadTime());
+ 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);
@@ -234,15 +291,31 @@ 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) {
+ EvalIndicatorImportDetailVO detail = new EvalIndicatorImportDetailVO();
+ detail.setIndicatorName(valueOptional.map(StaffIndicatorValueVO::getIndicatorName).orElse(""));
+ detail.setUserName(valueOptional.map(StaffIndicatorValueVO::getStaffName).orElse(""));
+ detail.setShopName(valueOptional.map(StaffIndicatorValueVO::getShopName).orElse(""));
+ return detail;
+ }
public EvalIndicatorImportDetail convertStaffPo(Optional valueOptional) {
EvalIndicatorImportDetail detail = new EvalIndicatorImportDetail();
detail.setIndicatorName(valueOptional.map(StaffIndicatorValueVO::getIndicatorName).orElse(""));
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;