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.admin.annotation.ApiMark;
import com.nflg.mobilebroken.common.constant.Constant; import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.pojo.ApiResult; 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.AdvertisementRequst;
import com.nflg.mobilebroken.common.pojo.request.AdvertisementSaveRequest; 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.AdvertisementListVO;
import com.nflg.mobilebroken.common.pojo.vo.AdvertisementVO; import com.nflg.mobilebroken.common.pojo.vo.AdvertisementVO;
import com.nflg.mobilebroken.repository.entity.DictionaryItem; import com.nflg.mobilebroken.repository.entity.DictionaryItem;
@ -81,9 +83,9 @@ public class AdvertisementController extends ControllerBase{
* 获取广告列表 * 获取广告列表
* @return 广告列表 * @return 广告列表
*/ */
@GetMapping("list") @PostMapping("list")
public ApiResult<AdvertisementListVO> getAdvertisementList(){ public ApiResult<PageData<AdvertisementListVO>> getAdvertisementList(@Valid @RequestBody @NotNull PageRequest request){
return ApiResult.success(advertisementService.getList()); return ApiResult.success(advertisementService.getList(request));
} }
/** /**
@ -91,7 +93,7 @@ public class AdvertisementController extends ControllerBase{
* @param request 请求参数 * @param request 请求参数
* @return 广告列表 * @return 广告列表
*/ */
@GetMapping("getByType") @PostMapping("getByType")
@ApiMark(moduleName = "广告", apiName = "根据类型获取广告") @ApiMark(moduleName = "广告", apiName = "根据类型获取广告")
public ApiResult<AdvertisementVO> getAdvertisement(@Valid @RequestBody @NotNull AdvertisementRequst request){ public ApiResult<AdvertisementVO> getAdvertisement(@Valid @RequestBody @NotNull AdvertisementRequst request){
return ApiResult.success(advertisementService.getByType(request.getType(),request.getPosition())); 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.repository.service.*;
import com.nflg.mobilebroken.starter.annotation.MethodInfoMark; import com.nflg.mobilebroken.starter.annotation.MethodInfoMark;
import com.nflg.mobilebroken.starter.service.FileUploadService; import com.nflg.mobilebroken.starter.service.FileUploadService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
@ -60,6 +61,7 @@ import java.util.zip.ZipOutputStream;
/** /**
* 设备管理 * 设备管理
*/ */
@Slf4j
@RestController @RestController
@RequestMapping("/device") @RequestMapping("/device")
public class DeviceController extends ControllerBase { public class DeviceController extends ControllerBase {
@ -723,25 +725,26 @@ public class DeviceController extends ControllerBase {
*/ */
@PostMapping("exportImages") @PostMapping("exportImages")
public ResponseEntity<byte[]> exportImages(@Valid @RequestBody IdPostRequest request){ public ResponseEntity<byte[]> exportImages(@Valid @RequestBody IdPostRequest request){
List<Device> devices=deviceService.listByIds(request.getIds()); Collection<String> deviceNos=deviceService.listByIds(request.getIds()).stream().map(Device::getDeviceNo).collect(Collectors.toSet());
if (CollUtil.isNotEmpty(devices)){ if (CollUtil.isNotEmpty(deviceNos)){
try { try {
if (devices.size()==1){ if (deviceNos.size()==1){
byte[] bytes=deviceQRCodeService.generate(devices.get(0).getDeviceNo()); String deviceNo=deviceNos.stream().findFirst().get();
byte[] bytes=deviceQRCodeService.generate(deviceNo);
HttpHeaders headers = new HttpHeaders(); 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() return ResponseEntity.ok()
.headers(headers) .headers(headers)
.contentType(MediaType.IMAGE_JPEG) .contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(bytes); .body(bytes);
}else { }else {
Path tempZipFile = Files.createTempFile("files", ".zip"); Path tempZipFile = Files.createTempFile("files", ".zip");
try (FileOutputStream fos = new FileOutputStream(tempZipFile.toFile()); try (FileOutputStream fos = new FileOutputStream(tempZipFile.toFile());
ZipOutputStream zos = new ZipOutputStream(fos)) { ZipOutputStream zos = new ZipOutputStream(fos)) {
for (Device device : devices) { for (String deviceNo : deviceNos) {
ZipEntry zipEntry = new ZipEntry(device.getDeviceNo()+".jpg"); ZipEntry zipEntry = new ZipEntry(deviceNo+".jpg");
zos.putNextEntry(zipEntry); zos.putNextEntry(zipEntry);
byte[] bytes=deviceQRCodeService.generate(device.getDeviceNo()); byte[] bytes=deviceQRCodeService.generate(deviceNo);
zos.write(bytes, 0, bytes.length); zos.write(bytes, 0, bytes.length);
zos.closeEntry(); zos.closeEntry();
} }
@ -756,6 +759,7 @@ public class DeviceController extends ControllerBase {
.body(zipContent); .body(zipContent);
} }
}catch (Exception e) { }catch (Exception e) {
log.error("导出二维码出错",e);
VUtils.trueThrowBusinessError(true).throwMessage("生成二维码出错"); VUtils.trueThrowBusinessError(true).throwMessage("生成二维码出错");
} }
} }

View File

@ -1,18 +1,22 @@
package com.nflg.mobilebroken.admin.service; package com.nflg.mobilebroken.admin.service;
import com.nflg.mobilebroken.common.util.QRCodeUtil; 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.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component @Component
@RefreshScope @RefreshScope
public class DeviceQRCodeService { public class DeviceQRCodeService {
@Value("${qrcode.device.url}") @Resource
private String deviceUrl; private IParamConfigService paramConfigService;
public byte[] generate(String deviceNo) throws Exception { 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 lombok.Data;
import javax.validation.constraints.NotBlank;
@Data @Data
public class AdvertisementRequst { public class AdvertisementRequst {
/** /**
* 广告类型 * 广告类型
*/ */
@NotBlank
private String type; private String type;
/** /**
* 广告位置 * 广告位置
*/ */
@NotBlank
private String position; private String position;
} }

View File

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

View File

@ -1,6 +1,7 @@
package com.nflg.mobilebroken.repository.mapper; package com.nflg.mobilebroken.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; 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.common.pojo.vo.AdvertisementListVO;
import com.nflg.mobilebroken.repository.entity.Advertisement; import com.nflg.mobilebroken.repository.entity.Advertisement;
@ -17,5 +18,5 @@ public interface AdvertisementMapper extends BaseMapper<Advertisement> {
Advertisement getByType(String type,String position); 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; package com.nflg.mobilebroken.repository.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.mobilebroken.common.pojo.request.AdvertisementSaveRequest; 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.AdvertisementListVO;
import com.nflg.mobilebroken.common.pojo.vo.AdvertisementVO; import com.nflg.mobilebroken.common.pojo.vo.AdvertisementVO;
import com.nflg.mobilebroken.repository.entity.Advertisement; import com.nflg.mobilebroken.repository.entity.Advertisement;
@ -20,5 +22,5 @@ public interface IAdvertisementService extends IService<Advertisement> {
void save(AdvertisementSaveRequest request); void save(AdvertisementSaveRequest request);
AdvertisementListVO getList(); IPage<AdvertisementListVO> getList(PageRequest request);
} }

View File

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

View File

@ -11,7 +11,7 @@
</select> </select>
<select id="getList" resultType="com.nflg.mobilebroken.common.pojo.vo.AdvertisementListVO"> <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 FROM advertisement ad
INNER JOIN dictionary_item di1 ON ad.type=di1.id INNER JOIN dictionary_item di1 ON ad.type=di1.id
INNER JOIN dictionary_item di2 ON ad.position=di2.id INNER JOIN dictionary_item di2 ON ad.position=di2.id