From dc3c54cfde111567eb851cacdc83f9c03c74155d Mon Sep 17 00:00:00 2001 From: jiangchao Date: Fri, 3 Mar 2023 16:25:36 +0800 Subject: [PATCH] feature(*): 修改上传 --- fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalIndicatorImportRecordVO.java | 12 ++++++++++++ fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalRewardDistVO.java | 5 +++++ fw-morax-server/src/main/java/cn/fw/morax/server/controller/erp/EvalIndicatorController.java | 33 ++++++++++++++++----------------- fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalIndicatorReportService.java | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------- fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalRewardService.java | 10 ++++++++++ 5 files changed, 122 insertions(+), 75 deletions(-) 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; -- libgit2 0.22.2