Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wangxiaolu-sfa-module-operation
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
sfa
wangxiaolu-sfa-module-operation
Commits
31c41f3b
提交
31c41f3b
authored
12月 16, 2025
作者:
douxy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加店内执行计划导出/入功能:修复更新功能
上级
03bcdf82
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
61 行增加
和
108 行删除
+61
-108
SalesApDisplayVo.java
...ava/com/sfa/operation/pojo/sales/vo/SalesApDisplayVo.java
+0
-93
ImportExcelServiceImpl.java
...ion/service/sales/export/impl/ImportExcelServiceImpl.java
+55
-15
IImportApExcelStrategy.java
...va/com/sfa/operation/strategy/IImportApExcelStrategy.java
+6
-0
NormalDisplayImportStrategyImpl.java
...trategy/impl/imports/NormalDisplayImportStrategyImpl.java
+0
-0
没有找到文件。
src/main/java/com/sfa/operation/pojo/sales/vo/SalesApDisplayVo.java
deleted
100644 → 0
浏览文件 @
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
;
}
src/main/java/com/sfa/operation/service/sales/export/impl/ImportExcelServiceImpl.java
浏览文件 @
31c41f3b
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
,
re
ques
t
);
return
R
.
fail
(
0
,
re
sul
t
);
}
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
);
}
}
src/main/java/com/sfa/operation/strategy/IImportApExcelStrategy.java
浏览文件 @
31c41f3b
...
...
@@ -58,6 +58,12 @@ public interface IImportApExcelStrategy<T> {
*/
Map
<
String
,
Object
>
execute
(
String
flePathUrl
);
/**
* 获取导入目标DTO类
* @return 目标DTO类
*/
Class
<?>
getTargetDtoClass
();
/**
* 获取导入Sheet名称(默认方法)
*/
...
...
src/main/java/com/sfa/operation/strategy/impl/imports/NormalDisplayImportStrategyImpl.java
浏览文件 @
31c41f3b
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论