fix: 修复一些问题

This commit is contained in:
曹鹏飞 2025-05-08 14:32:31 +08:00
parent 25e19717a2
commit 8e0accc6ff
9 changed files with 52 additions and 22 deletions

View File

@ -3,8 +3,10 @@ package com.nflg.mobilebroken.admin.controller;
import com.nflg.mobilebroken.admin.annotation.ApiMark;
import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.pojo.ApiResult;
import com.nflg.mobilebroken.common.pojo.PageData;
import com.nflg.mobilebroken.common.pojo.request.AdvertisementRequst;
import com.nflg.mobilebroken.common.pojo.request.AdvertisementSaveRequest;
import com.nflg.mobilebroken.common.pojo.request.PageRequest;
import com.nflg.mobilebroken.common.pojo.vo.AdvertisementListVO;
import com.nflg.mobilebroken.common.pojo.vo.AdvertisementVO;
import com.nflg.mobilebroken.repository.entity.DictionaryItem;
@ -81,9 +83,9 @@ public class AdvertisementController extends ControllerBase{
* 获取广告列表
* @return 广告列表
*/
@GetMapping("list")
public ApiResult<AdvertisementListVO> getAdvertisementList(){
return ApiResult.success(advertisementService.getList());
@PostMapping("list")
public ApiResult<PageData<AdvertisementListVO>> getAdvertisementList(@Valid @RequestBody @NotNull PageRequest request){
return ApiResult.success(advertisementService.getList(request));
}
/**
@ -91,7 +93,7 @@ public class AdvertisementController extends ControllerBase{
* @param request 请求参数
* @return 广告列表
*/
@GetMapping("getByType")
@PostMapping("getByType")
@ApiMark(moduleName = "广告", apiName = "根据类型获取广告")
public ApiResult<AdvertisementVO> getAdvertisement(@Valid @RequestBody @NotNull AdvertisementRequst request){
return ApiResult.success(advertisementService.getByType(request.getType(),request.getPosition()));

View File

@ -27,6 +27,7 @@ import com.nflg.mobilebroken.repository.entity.*;
import com.nflg.mobilebroken.repository.service.*;
import com.nflg.mobilebroken.starter.annotation.MethodInfoMark;
import com.nflg.mobilebroken.starter.service.FileUploadService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.ClassPathResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
@ -60,6 +61,7 @@ import java.util.zip.ZipOutputStream;
/**
* 设备管理
*/
@Slf4j
@RestController
@RequestMapping("/device")
public class DeviceController extends ControllerBase {
@ -723,25 +725,26 @@ public class DeviceController extends ControllerBase {
*/
@PostMapping("exportImages")
public ResponseEntity<byte[]> exportImages(@Valid @RequestBody IdPostRequest request){
List<Device> devices=deviceService.listByIds(request.getIds());
if (CollUtil.isNotEmpty(devices)){
Collection<String> deviceNos=deviceService.listByIds(request.getIds()).stream().map(Device::getDeviceNo).collect(Collectors.toSet());
if (CollUtil.isNotEmpty(deviceNos)){
try {
if (devices.size()==1){
byte[] bytes=deviceQRCodeService.generate(devices.get(0).getDeviceNo());
if (deviceNos.size()==1){
String deviceNo=deviceNos.stream().findFirst().get();
byte[] bytes=deviceQRCodeService.generate(deviceNo);
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename="+ devices.get(0).getDeviceNo()+".jpg");
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename="+ deviceNo+".jpg");
return ResponseEntity.ok()
.headers(headers)
.contentType(MediaType.IMAGE_JPEG)
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(bytes);
}else {
Path tempZipFile = Files.createTempFile("files", ".zip");
try (FileOutputStream fos = new FileOutputStream(tempZipFile.toFile());
ZipOutputStream zos = new ZipOutputStream(fos)) {
for (Device device : devices) {
ZipEntry zipEntry = new ZipEntry(device.getDeviceNo()+".jpg");
for (String deviceNo : deviceNos) {
ZipEntry zipEntry = new ZipEntry(deviceNo+".jpg");
zos.putNextEntry(zipEntry);
byte[] bytes=deviceQRCodeService.generate(device.getDeviceNo());
byte[] bytes=deviceQRCodeService.generate(deviceNo);
zos.write(bytes, 0, bytes.length);
zos.closeEntry();
}
@ -756,6 +759,7 @@ public class DeviceController extends ControllerBase {
.body(zipContent);
}
}catch (Exception e) {
log.error("导出二维码出错",e);
VUtils.trueThrowBusinessError(true).throwMessage("生成二维码出错");
}
}

View File

@ -1,18 +1,22 @@
package com.nflg.mobilebroken.admin.service;
import com.nflg.mobilebroken.common.util.QRCodeUtil;
import org.springframework.beans.factory.annotation.Value;
import com.nflg.mobilebroken.repository.entity.ParamConfig;
import com.nflg.mobilebroken.repository.service.IParamConfigService;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
@RefreshScope
public class DeviceQRCodeService {
@Value("${qrcode.device.url}")
private String deviceUrl;
@Resource
private IParamConfigService paramConfigService;
public byte[] generate(String deviceNo) throws Exception {
return QRCodeUtil.generateDeviceQRCode(deviceNo ,deviceUrl + deviceNo,200, 200);
ParamConfig config = paramConfigService.lambdaQuery().eq(ParamConfig::getCode, "DeviceQRCodeHost").one();
return QRCodeUtil.generateDeviceQRCode(deviceNo ,config.getValue() + deviceNo,200, 200);
}
}

View File

@ -2,16 +2,20 @@ package com.nflg.mobilebroken.common.pojo.request;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
public class AdvertisementRequst {
/**
* 广告类型
*/
@NotBlank
private String type;
/**
* 广告位置
*/
@NotBlank
private String position;
}

View File

@ -1,6 +1,7 @@
package com.nflg.mobilebroken.repository.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Getter;
import lombok.Setter;
@ -40,6 +41,7 @@ public class Advertisement implements Serializable {
/**
* 间隔单位秒
*/
@TableField("`interval`")
private Integer interval;
/**

View File

@ -1,6 +1,7 @@
package com.nflg.mobilebroken.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nflg.mobilebroken.common.pojo.vo.AdvertisementListVO;
import com.nflg.mobilebroken.repository.entity.Advertisement;
@ -17,5 +18,5 @@ public interface AdvertisementMapper extends BaseMapper<Advertisement> {
Advertisement getByType(String type,String position);
AdvertisementListVO getList();
IPage<AdvertisementListVO> getList(IPage<?> page);
}

View File

@ -1,7 +1,9 @@
package com.nflg.mobilebroken.repository.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.mobilebroken.common.pojo.request.AdvertisementSaveRequest;
import com.nflg.mobilebroken.common.pojo.request.PageRequest;
import com.nflg.mobilebroken.common.pojo.vo.AdvertisementListVO;
import com.nflg.mobilebroken.common.pojo.vo.AdvertisementVO;
import com.nflg.mobilebroken.repository.entity.Advertisement;
@ -20,5 +22,5 @@ public interface IAdvertisementService extends IService<Advertisement> {
void save(AdvertisementSaveRequest request);
AdvertisementListVO getList();
IPage<AdvertisementListVO> getList(PageRequest request);
}

View File

@ -1,12 +1,16 @@
package com.nflg.mobilebroken.repository.service.impl;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.mobilebroken.common.pojo.request.AdvertisementSaveRequest;
import com.nflg.mobilebroken.common.pojo.request.PageRequest;
import com.nflg.mobilebroken.common.pojo.vo.AdvertisementItemVO;
import com.nflg.mobilebroken.common.pojo.vo.AdvertisementListVO;
import com.nflg.mobilebroken.common.pojo.vo.AdvertisementVO;
import com.nflg.mobilebroken.common.util.AdminUserUtil;
import com.nflg.mobilebroken.common.util.VUtils;
import com.nflg.mobilebroken.repository.entity.Advertisement;
import com.nflg.mobilebroken.repository.mapper.AdvertisementMapper;
import com.nflg.mobilebroken.repository.service.IAdvertisementService;
@ -29,6 +33,9 @@ public class AdvertisementServiceImpl extends ServiceImpl<AdvertisementMapper, A
@Override
public AdvertisementVO getByType(String type,String position) {
Advertisement ad=baseMapper.getByType(type,position);
if (Objects.isNull(ad)){
return null;
}
AdvertisementVO vo=new AdvertisementVO();
vo.setInterval(ad.getInterval());
vo.setItems(JSONUtil.toList(ad.getContent(), AdvertisementItemVO.class));
@ -38,6 +45,10 @@ public class AdvertisementServiceImpl extends ServiceImpl<AdvertisementMapper, A
@Override
public void save(AdvertisementSaveRequest request) {
if (Objects.isNull(request.getId())){
VUtils.trueThrowBusinessError(lambdaQuery().eq(Advertisement::getType,request.getType())
.eq(Advertisement::getPosition,request.getPosition())
.exists())
.throwMessage("已存在相同位置的广告");
Advertisement ad=new Advertisement()
.setType(request.getType())
.setPosition(request.getPosition())
@ -60,7 +71,7 @@ public class AdvertisementServiceImpl extends ServiceImpl<AdvertisementMapper, A
}
@Override
public AdvertisementListVO getList() {
return baseMapper.getList();
public IPage<AdvertisementListVO> getList(PageRequest request) {
return baseMapper.getList(new Page<>(request.getPage(),request.getPageSize()));
}
}

View File

@ -11,7 +11,7 @@
</select>
<select id="getList" resultType="com.nflg.mobilebroken.common.pojo.vo.AdvertisementListVO">
SELECT ad.*,di1.`code` AS 'typeName',di2.`code` AS 'positionName'
SELECT ad.*,di1.`value` AS 'typeName',di2.`value` AS 'positionName'
FROM advertisement ad
INNER JOIN dictionary_item di1 ON ad.type=di1.id
INNER JOIN dictionary_item di2 ON ad.position=di2.id