Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
C
chinafrica
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
zhengfg
chinafrica
Commits
34c648fa
提交
34c648fa
authored
10月 15, 2020
作者:
吴德鹏
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改商品oss上传二级目录
上级
1c00243f
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
260 行增加
和
220 行删除
+260
-220
OssTestApi.java
...src/main/java/com/platform/controller/api/OssTestApi.java
+218
-213
uploadController.java
...in/java/com/platform/controller/api/uploadController.java
+2
-2
AdvertisementItemDao.java
.../src/main/java/com/platform/dao/AdvertisementItemDao.java
+4
-0
AdvertisementItemServiceImpl.java
...m/platform/service/impl/AdvertisementItemServiceImpl.java
+16
-5
AdvertisementItemDao.xml
.../main/resources/com/platform/dao/AdvertisementItemDao.xml
+20
-0
没有找到文件。
platform-admin/src/main/java/com/platform/controller/api/OssTestApi.java
浏览文件 @
34c648fa
...
...
@@ -12,6 +12,7 @@ import javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpSession
;
import
com.platform.utils.OssUtil
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
...
...
@@ -30,244 +31,248 @@ import com.platform.utils.util.UuidUtil;
@Controller
@RequestMapping
(
value
=
"/api/osstest"
,
produces
=
"application/json;charset=UTF-8"
)
@RequestMapping
(
value
=
"/api/osstest"
,
produces
=
"application/json;charset=UTF-8"
)
public
class
OssTestApi
{
@IgnoreAuth
@RequestMapping
(
"/createfolder"
)
@ResponseBody
public
String
createFolder
()
{
try
{
OSSClient
client
=
OssUtil
.
getOSSClient
();
String
fileDir
=
OssUtil
.
createFolder
(
client
,
"diaosaas-prod"
,
"xinlizixun/"
);
return
fileDir
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
"error"
;
}
}
@IgnoreAuth
@RequestMapping
(
value
=
"/uploadtest"
,
produces
=
"application/json;charset=UTF-8"
)
@ResponseBody
public
String
upload
(
MultipartFile
file
,
String
secondaryFolderName
)
{
try
{
// 获取文件名
String
fileName
=
file
.
getOriginalFilename
();
// 获取文件后缀
String
prefix
=
fileName
.
substring
(
fileName
.
lastIndexOf
(
"."
));
// 用uuid作为文件名,防止生成的文件重复
final
File
mfile
=
File
.
createTempFile
(
UuidUtil
.
get32UUID
(),
prefix
);
// MultipartFile to File
file
.
transferTo
(
mfile
);
String
url
=
OssUtil
.
uploadObject2OSS
(
mfile
,
secondaryFolderName
);
System
.
out
.
println
(
mfile
.
getName
());
System
.
out
.
println
(
url
);
return
url
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
"err"
;
}
}
@IgnoreAuth
@RequestMapping
(
value
=
"/uploadfile"
,
produces
=
"application/json;charset=UTF-8"
)
@ResponseBody
public
String
uploadfile
(
MultipartFile
file
,
String
secondaryFolderName
)
{
try
{
// 获取文件名
String
fileName
=
file
.
getOriginalFilename
();
// 获取文件后缀
String
prefix
=
fileName
.
substring
(
fileName
.
lastIndexOf
(
"."
));
// 用uuid作为文件名,防止生成的文件重复
final
File
mfile
=
File
.
createTempFile
(
UuidUtil
.
get32UUID
(),
prefix
);
// MultipartFile to File
file
.
transferTo
(
mfile
);
String
url
=
OssUtil
.
uploadObject2OSS
(
mfile
,
secondaryFolderName
);
System
.
out
.
println
(
mfile
.
getName
());
System
.
out
.
println
(
url
);
return
url
+
" "
+
fileName
;
//return "";
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
"err"
;
}
}
/**
*
* @Function: uploadfileVideo
* @Description: (此方法只用于[课程管理模块]上传课程宣传视频和课程视频)
* @param:
* @return:
* @since JDK 1.8
@IgnoreAuth
@RequestMapping(value="/uploadfileVideo",produces="application/json;charset=UTF-8")
@ResponseBody
public Map<String, Object> uploadfileVideo(HttpServletRequest request,MultipartFile[] files) {
Map<String, Object> map = new HashMap<>();
List<String> urlList = new ArrayList<>();
try {
for (int i = 0; i < files.length; i++) {
// 获取文件名
String fileName = files[i].getOriginalFilename();
// 获取文件后缀
String prefix=fileName.substring(fileName.lastIndexOf("."));
System.out.println(UuidUtil.get32UUID()+"-"+fileName.substring(0,fileName.lastIndexOf(".")));
final File mfile = File.createTempFile(UuidUtil.get32UUID(), prefix);
// MultipartFile to File
files[i].transferTo(mfile);
String url=OssUtil.uploadObject3OSS(mfile,fileName);
// String fileUpload = OssUtil.fileUpload(mfile, fileName, request);
System.out.println(mfile.getName());
urlList.add(url);
// urlList.add(fileUpload);
}
map.put("urlList", urlList);
return map;
} catch (Exception e) {
e.printStackTrace();
return map;
}
} */
@IgnoreAuth
@RequestMapping
(
"/deletetest"
)
@ResponseBody
public
R
delete
(
String
url
)
{
try
{
// http://diaosaas-prod.oss-cn-shenzhen.aliyuncs.com/education/155771122620710111.jpg
url
=
url
.
substring
(
url
.
lastIndexOf
(
"/"
)+
1
);
OssUtil
.
deleteFile
(
"diaosaas-prod"
,
"education/"
,
url
);
return
R
.
ok
().
put
(
"success"
,
"删除成功"
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
R
.
error
().
put
(
"fail"
,
"删除失败"
);
}
}
/**
* 富文本图片自定义上传
*/
@IgnoreAuth
@RequestMapping
(
value
=
"/uploaditemimage"
,
produces
=
"application/json;charset=UTF-8"
)
@ResponseBody
public
Object
uploadItemImage
(
HttpServletRequest
request
)
throws
Exception
{
MultipartHttpServletRequest
multipartRequest
=
(
MultipartHttpServletRequest
)
request
;
MultipartFile
photo
=
multipartRequest
.
getFile
(
"upfile"
);
String
url
=
""
;
if
(
photo
.
getSize
()
>
0
)
{
String
result
=
OssUtil
.
upload
(
photo
);
if
(
result
.
equals
(
"fail"
))
{
}
else
{
url
=
result
;
}
}
// 这里获取到文件 处理上传后返回路径
ImageUploadResult
result
=
new
ImageUploadResult
();
result
.
setState
(
"SUCCESS"
);
result
.
setUrl
(
url
);
result
.
setOriginal
(
System
.
currentTimeMillis
()
+
"/"
+
photo
.
getOriginalFilename
());
result
.
setTitle
(
photo
.
getOriginalFilename
());
return
result
;
}
// 删除富文本的图片
//content 需要更新的内容
//pd 没更新的数据
public
void
deleteUeditorImg
(
String
content
,
PageData
pd
)
{
if
(
pd
.
get
(
"describes"
)!=
null
&&
pd
.
get
(
"describes"
).
toString
().
trim
().
length
()>
0
){
String
dbContent
=
pd
.
getString
(
"describes"
);
List
<
String
>
list
=
StringUtil
.
getImgStr
(
dbContent
);
String
[]
a
=
new
String
[
list
.
size
()];
for
(
int
i
=
0
;
i
<
list
.
size
();
i
++)
{
a
[
i
]
=
list
.
get
(
i
);
}
List
<
String
>
list1
=
StringUtil
.
getImgStr
(
content
);
String
[]
b
=
new
String
[
list1
.
size
()];
for
(
int
i
=
0
;
i
<
list1
.
size
();
i
++)
{
b
[
i
]
=
list1
.
get
(
i
);
}
List
<
String
>
list2
=
StringUtil
.
compare
(
b
,
a
);
for
(
int
i
=
0
;
i
<
list2
.
size
();
i
++)
{
String
path
=
list2
.
get
(
i
);
path
.
substring
(
path
.
lastIndexOf
(
"/"
)+
1
,
path
.
length
());
OssUtil
.
deleteFile
(
"diaosaas-prod"
,
"education/"
,
path
);
}
}
}
/**
@IgnoreAuth
@RequestMapping
(
"/createfolder"
)
@ResponseBody
public
String
createFolder
()
{
try
{
OSSClient
client
=
OssUtil
.
getOSSClient
();
String
fileDir
=
OssUtil
.
createFolder
(
client
,
"diaosaas-prod"
,
"xinlizixun/"
);
return
fileDir
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
"error"
;
}
}
@IgnoreAuth
@RequestMapping
(
value
=
"/uploadtest"
,
produces
=
"application/json;charset=UTF-8"
)
@ResponseBody
public
String
upload
(
MultipartFile
file
,
String
secondaryFolderName
)
{
try
{
// 获取文件名
String
fileName
=
file
.
getOriginalFilename
();
// 获取文件后缀
String
prefix
=
fileName
.
substring
(
fileName
.
lastIndexOf
(
"."
));
// 用uuid作为文件名,防止生成的文件重复
final
File
mfile
=
File
.
createTempFile
(
UuidUtil
.
get32UUID
(),
prefix
);
// MultipartFile to File
file
.
transferTo
(
mfile
);
if
(
StringUtils
.
isBlank
(
secondaryFolderName
))
{
secondaryFolderName
=
"afrishop"
;
}
String
url
=
OssUtil
.
uploadObject2OSS
(
mfile
,
secondaryFolderName
);
System
.
out
.
println
(
mfile
.
getName
());
System
.
out
.
println
(
url
);
return
url
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
"err"
;
}
}
@IgnoreAuth
@RequestMapping
(
value
=
"/uploadfile"
,
produces
=
"application/json;charset=UTF-8"
)
@ResponseBody
public
String
uploadfile
(
MultipartFile
file
,
String
secondaryFolderName
)
{
try
{
// 获取文件名
String
fileName
=
file
.
getOriginalFilename
();
// 获取文件后缀
String
prefix
=
fileName
.
substring
(
fileName
.
lastIndexOf
(
"."
));
// 用uuid作为文件名,防止生成的文件重复
final
File
mfile
=
File
.
createTempFile
(
UuidUtil
.
get32UUID
(),
prefix
);
// MultipartFile to File
file
.
transferTo
(
mfile
);
String
url
=
OssUtil
.
uploadObject2OSS
(
mfile
,
secondaryFolderName
);
System
.
out
.
println
(
mfile
.
getName
());
System
.
out
.
println
(
url
);
return
url
+
" "
+
fileName
;
//return "";
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
"err"
;
}
}
/**
* @Function: uploadfileVideo
* @Description: (此方法只用于[课程管理模块]上传课程宣传视频和课程视频)
* @param:
* @return:
* @IgnoreAuth
* @RequestMapping(value="/uploadfileVideo",produces="application/json;charset=UTF-8")
* @ResponseBody public Map<String, Object> uploadfileVideo(HttpServletRequest request,MultipartFile[] files) {
* <p>
* Map<String, Object> map = new HashMap<>();
* List<String> urlList = new ArrayList<>();
* try {
* for (int i = 0; i < files.length; i++) {
* // 获取文件名
* String fileName = files[i].getOriginalFilename();
* // 获取文件后缀
* String prefix=fileName.substring(fileName.lastIndexOf("."));
* System.out.println(UuidUtil.get32UUID()+"-"+fileName.substring(0,fileName.lastIndexOf(".")));
* final File mfile = File.createTempFile(UuidUtil.get32UUID(), prefix);
* // MultipartFile to File
* files[i].transferTo(mfile);
* String url=OssUtil.uploadObject3OSS(mfile,fileName);
* // String fileUpload = OssUtil.fileUpload(mfile, fileName, request);
* System.out.println(mfile.getName());
* urlList.add(url);
* // urlList.add(fileUpload);
* }
* map.put("urlList", urlList);
* return map;
* } catch (Exception e) {
* e.printStackTrace();
* return map;
* }
* }
* @since JDK 1.8
*/
@IgnoreAuth
@RequestMapping
(
"/deletetest"
)
@ResponseBody
public
R
delete
(
String
url
)
{
try
{
// http://diaosaas-prod.oss-cn-shenzhen.aliyuncs.com/education/155771122620710111.jpg
url
=
url
.
substring
(
url
.
lastIndexOf
(
"/"
)
+
1
);
OssUtil
.
deleteFile
(
"diaosaas-prod"
,
"education/"
,
url
);
return
R
.
ok
().
put
(
"success"
,
"删除成功"
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
R
.
error
().
put
(
"fail"
,
"删除失败"
);
}
}
/**
* 富文本图片自定义上传
*/
@IgnoreAuth
@RequestMapping
(
value
=
"/uploaditemimage"
,
produces
=
"application/json;charset=UTF-8"
)
@ResponseBody
public
Object
uploadItemImage
(
HttpServletRequest
request
)
throws
Exception
{
MultipartHttpServletRequest
multipartRequest
=
(
MultipartHttpServletRequest
)
request
;
MultipartFile
photo
=
multipartRequest
.
getFile
(
"upfile"
);
String
url
=
""
;
if
(
photo
.
getSize
()
>
0
)
{
String
result
=
OssUtil
.
upload
(
photo
);
if
(
result
.
equals
(
"fail"
))
{
}
else
{
url
=
result
;
}
}
// 这里获取到文件 处理上传后返回路径
ImageUploadResult
result
=
new
ImageUploadResult
();
result
.
setState
(
"SUCCESS"
);
result
.
setUrl
(
url
);
result
.
setOriginal
(
System
.
currentTimeMillis
()
+
"/"
+
photo
.
getOriginalFilename
());
result
.
setTitle
(
photo
.
getOriginalFilename
());
return
result
;
}
// 删除富文本的图片
//content 需要更新的内容
//pd 没更新的数据
public
void
deleteUeditorImg
(
String
content
,
PageData
pd
)
{
if
(
pd
.
get
(
"describes"
)
!=
null
&&
pd
.
get
(
"describes"
).
toString
().
trim
().
length
()
>
0
)
{
String
dbContent
=
pd
.
getString
(
"describes"
);
List
<
String
>
list
=
StringUtil
.
getImgStr
(
dbContent
);
String
[]
a
=
new
String
[
list
.
size
()];
for
(
int
i
=
0
;
i
<
list
.
size
();
i
++)
{
a
[
i
]
=
list
.
get
(
i
);
}
List
<
String
>
list1
=
StringUtil
.
getImgStr
(
content
);
String
[]
b
=
new
String
[
list1
.
size
()];
for
(
int
i
=
0
;
i
<
list1
.
size
();
i
++)
{
b
[
i
]
=
list1
.
get
(
i
);
}
List
<
String
>
list2
=
StringUtil
.
compare
(
b
,
a
);
for
(
int
i
=
0
;
i
<
list2
.
size
();
i
++)
{
String
path
=
list2
.
get
(
i
);
path
.
substring
(
path
.
lastIndexOf
(
"/"
)
+
1
,
path
.
length
());
OssUtil
.
deleteFile
(
"diaosaas-prod"
,
"education/"
,
path
);
}
}
}
/**
* 获取实时长传进度
*
* @param request
* @return
*/
@RequestMapping
(
"/item/percent"
)
@RequestMapping
(
"/item/percent"
)
@ResponseBody
public
int
getUploadPercent
(
HttpServletRequest
request
){
public
int
getUploadPercent
(
HttpServletRequest
request
)
{
HttpSession
session
=
request
.
getSession
();
int
percent
=
session
.
getAttribute
(
"upload_percent"
)
==
null
?
0
:
(
Integer
)
session
.
getAttribute
(
"upload_percent"
);
int
percent
=
session
.
getAttribute
(
"upload_percent"
)
==
null
?
0
:
(
Integer
)
session
.
getAttribute
(
"upload_percent"
);
return
percent
;
}
/**
* 重置上传进度
*
* @param request
* @return
*/
@RequestMapping
(
"/percent/reset"
)
public
void
resetPercent
(
HttpServletRequest
request
){
@RequestMapping
(
"/percent/reset"
)
public
void
resetPercent
(
HttpServletRequest
request
)
{
HttpSession
session
=
request
.
getSession
();
session
.
setAttribute
(
"upload_percent"
,
0
);
session
.
setAttribute
(
"upload_percent"
,
0
);
}
/**多线程分片文件上传**/
/**
* 多线程分片文件上传
**/
@RequestMapping
(
"uploadFile"
)
public
String
uploadBlog
(
@RequestParam
(
"file"
)
MultipartFile
file
,
HttpServletRequest
request
)
{
//MultipartFile是spring类型,代表HTML中form data方式上传的文件,包含二进制数据+文件名称。 logger.info("文件上传");
HttpSession
session
=
request
.
getSession
();
String
filename
=
file
.
getOriginalFilename
();
session
.
setAttribute
(
"fileName"
,
filename
);
public
String
uploadBlog
(
@RequestParam
(
"file"
)
MultipartFile
file
,
HttpServletRequest
request
)
{
//MultipartFile是spring类型,代表HTML中form data方式上传的文件,包含二进制数据+文件名称。 logger.info("文件上传");
HttpSession
session
=
request
.
getSession
();
String
filename
=
file
.
getOriginalFilename
();
session
.
setAttribute
(
"fileName"
,
filename
);
System
.
out
.
println
(
filename
);
long
fileLength
=
file
.
getSize
();
DecimalFormat
df
=
new
DecimalFormat
(
".00"
);
if
(
fileLength
<
1024
)
{
session
.
setAttribute
(
"fileSize"
,
"1KB"
);
}
else
if
(
fileLength
>=
1024
&&
fileLength
<
1024
*
1024
)
{
session
.
setAttribute
(
"fileSize"
,
df
.
format
(
fileLength
/
1024.0
)+
"KB"
);
}
else
{
session
.
setAttribute
(
"fileSize"
,
df
.
format
(
fileLength
/(
1024.0
*
1024.0
))+
"MB"
);
long
fileLength
=
file
.
getSize
();
DecimalFormat
df
=
new
DecimalFormat
(
".00"
);
if
(
fileLength
<
1024
)
{
session
.
setAttribute
(
"fileSize"
,
"1KB"
);
}
else
if
(
fileLength
>=
1024
&&
fileLength
<
1024
*
1024
)
{
session
.
setAttribute
(
"fileSize"
,
df
.
format
(
fileLength
/
1024.0
)
+
"KB"
);
}
else
{
session
.
setAttribute
(
"fileSize"
,
df
.
format
(
fileLength
/
(
1024.0
*
1024.0
))
+
"MB"
);
}
try
{
if
(
file
!=
null
)
{
if
(!
""
.
equals
(
filename
.
trim
())){
if
(
file
!=
null
)
{
if
(!
""
.
equals
(
filename
.
trim
()))
{
//MultipartFile转File
File
newFile
=
new
File
(
filename
);
FileOutputStream
os
=
new
FileOutputStream
(
newFile
);
File
newFile
=
new
File
(
filename
);
FileOutputStream
os
=
new
FileOutputStream
(
newFile
);
os
.
write
(
file
.
getBytes
());
os
.
close
();
file
.
transferTo
(
newFile
);
//将上传文件写入目标文件
//上传到OSS
String
key
=
"time1128"
;
// String url=OssUtil.upLoad(newFile,session,key);
String
key
=
"time1128"
;
// String url=OssUtil.upLoad(newFile,session,key);
//删除临时文件
newFile
.
delete
();
}
...
...
@@ -279,5 +284,5 @@ public class OssTestApi {
return
"upload_success"
;
//上传成功页面
}
}
platform-admin/src/main/java/com/platform/controller/api/uploadController.java
浏览文件 @
34c648fa
...
...
@@ -29,7 +29,7 @@ public class uploadController {
@RequestMapping
(
value
=
"/uploadFile"
,
produces
=
"application/json;charset=UTF-8"
)
public
String
upload
(
MultipartFile
file
)
{
try
{
String
secondaryFolderName
=
"
A
frishop"
;
String
secondaryFolderName
=
"
a
frishop"
;
// 获取文件名
String
fileName
=
file
.
getOriginalFilename
();
// 获取文件后缀
...
...
@@ -87,4 +87,4 @@ public class uploadController {
/**
* data:image/jpg;base64,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
*/
}
\ No newline at end of file
}
platform-admin/src/main/java/com/platform/dao/AdvertisementItemDao.java
浏览文件 @
34c648fa
...
...
@@ -3,6 +3,7 @@ package com.platform.dao;
import
com.platform.entity.AdvertisementItemEntity
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
import
java.util.Map
;
/**
...
...
@@ -27,5 +28,8 @@ public interface AdvertisementItemDao extends BaseDao<AdvertisementItemEntity> {
int
existItemSort
(
@Param
(
"adId"
)
String
adId
,
@Param
(
"sort"
)
Integer
sort
);
List
<
AdvertisementItemEntity
>
changeSortBack
(
@Param
(
"firstSort"
)
Integer
firstSort
,
@Param
(
"endSort"
)
Integer
endSort
,
@Param
(
"adId"
)
String
adId
);
List
<
AdvertisementItemEntity
>
changeSortFront
(
@Param
(
"firstSort"
)
Integer
firstSort
,
@Param
(
"endSort"
)
Integer
endSort
,
@Param
(
"adId"
)
String
adId
);
}
platform-admin/src/main/java/com/platform/service/impl/AdvertisementItemServiceImpl.java
浏览文件 @
34c648fa
...
...
@@ -146,13 +146,24 @@ public class AdvertisementItemServiceImpl implements AdvertisementItemService {
res
=
advertisementItemDao
.
updateAdItem
(
byId
);
}
else
{
//要更换的序号被占有
//情况3
if
(
byId
.
getSort
()
<
itemSort
)
{
//情况3 (2-->8)
Integer
sort1
=
byId
.
getSort
();
if
(
sort1
<
itemSort
)
{
List
<
AdvertisementItemEntity
>
list
=
advertisementItemDao
.
changeSortBack
(
sort1
+
1
,
itemSort
,
adId
);
for
(
AdvertisementItemEntity
ad
:
list
)
{
ad
.
setSort
(
ad
.
getSort
()
-
1
);
advertisementItemDao
.
updateAdItem
(
ad
);
}
}
else
{
//情况4
//情况4 (8-->2)
List
<
AdvertisementItemEntity
>
list
=
advertisementItemDao
.
changeSortFront
(
itemSort
,
sort1
-
1
,
adId
);
for
(
AdvertisementItemEntity
ad
:
list
)
{
ad
.
setSort
(
ad
.
getSort
()
+
1
);
advertisementItemDao
.
updateAdItem
(
ad
);
}
}
byId
.
setSort
(
itemSort
);
res
=
advertisementItemDao
.
updateAdItem
(
byId
);
}
...
...
platform-admin/src/main/resources/com/platform/dao/AdvertisementItemDao.xml
浏览文件 @
34c648fa
...
...
@@ -57,6 +57,26 @@
</if>
</select>
<select
id=
"changeSortBack"
resultType=
"com.platform.entity.AdvertisementItemEntity"
>
select
`ad_id`,
`item_id`,
`is_top`,
`sort`,
`create_time`
from advertisement_item where sort BETWEEN #{firstSort} AND #{endSort} and ad_id=#{adId}
</select>
<select
id=
"changeSortFront"
resultType=
"com.platform.entity.AdvertisementItemEntity"
>
select
`ad_id`,
`item_id`,
`is_top`,
`sort`,
`create_time`
from advertisement_item where sort BETWEEN #{firstSort} AND #{endSort} and ad_id=#{adId}
</select>
<delete
id=
"deleteByItem"
>
delete from advertisement_item where item_id=#{itemId} and ad_id=#{adId}
</delete>
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论