提交 31c41f3b authored 作者: douxy's avatar douxy

增加店内执行计划导出/入功能:修复更新功能

上级 03bcdf82
package com.sfa.operation.pojo.sales.vo;
import lombok.Data;
/**
* @Author: DouXinYu
* @Date: 2025-12-10 15:31
* @Description: 店内执行-填报要更新到表的字段
*/
@Data
public class SalesApDisplayVo {
/**
* 主键ID
*/
private Long sadId;
/**
* 主货架形式(实际)
*/
private String actualMainShelfType;
/**
* 主货架数量(实际)
*/
private Integer actualMainShelfQty;
/**
* 实际-主货架是否执行
* 执行主货架形式 >= 计划主货架形式 && 执行主货架数量 >= 计划主货架数量"
* 执行/未执行
*/
private String actualMainShelfExecuted;
/**
* 端架数量(实际)
*/
private Integer actualEndCapQty;
/**
* 实际-架是否执行
* 执行端架数量 >= 计划端架数量
*/
private String actualEndCapExecuted;
/**
* 地堆平米数(实际)
*/
private Double actualFloorStackArea;
/**
* 地堆数量(实际)
*/
private Integer actualFloorStackQty;
/**
* 实际-地堆是否执行
* 执行平米数 >= 计划平米数 && 执行数量 >= 计划数量"
*/
private String actualFloorStackExecuted;
/**
* 多点陈列数量+形式(实际)
*/
private String actualMultiDisplay;
/**
* 实际-多点陈列是否执行
*
* actualMultiDisplay的值如下时:
* 执行与计划一致:执行
* 执行与计划不一致:未执行
*/
private String actualMultiDisplayExecuted;
/**
* 挂条数量+形式(实际)
*/
private String actualHangingStripQuantityForm;
/**
* 实际-挂条是否执行
*
* actualHangingStripQuantityForm的值如下时:
* 执行与计划一致:执行
* 执行与计划不一致:未执行
*/
private String hangingStripExecuted;
/**
* 备注信息
*
*/
private String remark ;
}
package com.sfa.operation.service.sales.export.impl;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.sfa.common.core.domain.R;
import com.sfa.operation.factory.ApImportExcelStrategyFactory;
......@@ -13,6 +14,7 @@ import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
......@@ -61,9 +63,9 @@ public class ImportExcelServiceImpl implements IImportExcelService {
//failCount>0 时 返回错误信息
if (failCount>0 ) {
if (failCount > 0 ) {
log.error("导入失败,失败条数:{}",failCount);
return R.fail(0, request);
return R.fail(0, result);
} else {
String uuid = (String) result.getOrDefault("uuid", "");
String redisKey = REDIS_KEY_PREFIX + uuid;
......@@ -83,32 +85,70 @@ public class ImportExcelServiceImpl implements IImportExcelService {
*/
@Override
public R updateApEntity(ImportApExcelRequest request) {
if (request.getImportApType() == null || request.getImportApType().trim().isEmpty()){
if (request.getImportApType() == null || request.getImportApType().trim().isEmpty()) {
return R.fail("导入类型不能为空!");
}
if (request.getUuid() == null || request.getUuid().trim().isEmpty()){
if (request.getUuid() == null || request.getUuid().trim().isEmpty()) {
return R.fail("导入数据标识不能为空!");
}
// 获取策略
IImportApExcelStrategy strategy = apImportExcelStrategyFactory.getStrategy(request.getImportApType());
if (strategy == null){
if (strategy == null) {
return R.fail("未找到对应的导入策略!");
}
//从redis获取数据
String redisKey = REDIS_KEY_PREFIX+ request.getUuid();
String redisValue = stringRedisTemplate.opsForValue().get(redisKey);
//解析jsonToDtoList
List list = strategy.getTransactionJsonToObject(redisValue);
// 从redis获取数据
String redisKey = REDIS_KEY_PREFIX + request.getUuid();
String redisDataJson = stringRedisTemplate.opsForValue().get(redisKey);
log.info("从Redis获取数据,redisKey={}, redisDataJson={}", redisKey, redisDataJson);
//批量更新
String result = strategy.updateDisplay(list);
// 1校验Redis数据是否存在
if (redisDataJson == null || redisDataJson.trim().isEmpty()) {
log.error("Redis中无有效数据,key={}", redisKey);
return R.fail("导入数据已过期或不存在,请重新导入!");
}
if ("更新失败".equals(result)) {
return R.fail(result);
// 解析Redis数据为JSONObject,仅提取table数组(核心修改点,适配JDK8)
List<?> tableList;
try {
// 先解析整个Redis数据为JSONObject
JSONObject redisDataObj = JSONObject.parseObject(redisDataJson);
// 提取table字段对应的JSON数组
JSONArray tableArray = redisDataObj.getJSONArray("table");
if (tableArray == null) {
tableList = Collections.emptyList();
} else {
// 根据策略指定的DTO类型解析table数组
Class<?> dtoClass = strategy.getTargetDtoClass();
// 解析为策略对应的DTO类型列表(而非Object)
tableList = tableArray.toList(dtoClass);
}
} catch (Exception e) {
log.error("解析Redis中的table数组失败,redisDataJson={}", redisDataJson, e);
return R.fail("数据解析失败,请重新导入!");
}
return R.ok(result);
// 校验table数组非空
if (CollectionUtils.isEmpty(tableList)) {
log.error("解析出的table数组为空,redisDataJson={}", redisDataJson);
return R.fail("更新数据为空,请重新导入!");
}
for (Object o : tableList) {
System.out.println( o.toString());
}
// 批量更新(传入table数组,适配不同策略处理)
String updateResult = strategy.updateDisplay(tableList);
log.info("批量更新结果:{}", updateResult);
if ("更新失败".equals(updateResult)) {
return R.fail(updateResult);
}
return R.ok(updateResult);
}
}
......@@ -58,6 +58,12 @@ public interface IImportApExcelStrategy<T> {
*/
Map<String, Object> execute(String flePathUrl);
/**
* 获取导入目标DTO类
* @return 目标DTO类
*/
Class<?> getTargetDtoClass();
/**
* 获取导入Sheet名称(默认方法)
*/
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论