feat:信发
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
package com.cool.store.service.impl.xinfa;
|
||||
|
||||
import com.cool.store.dto.huoma.*;
|
||||
import com.cool.store.enums.SpecialTagEnum;
|
||||
import com.cool.store.response.ResponseResult;
|
||||
import com.cool.store.service.xinfa.XinFaBusinessService;
|
||||
import com.cool.store.service.xinfa.XinFaDeviceService;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Author suzhuhong
|
||||
* @Date 2025/11/5 16:17
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class XinFaBusinessServiceImpl implements XinFaBusinessService {
|
||||
@Resource
|
||||
XinFaDeviceService xinFaDeviceService;
|
||||
|
||||
@Override
|
||||
public List<StoreXinFaDeviceDetail> getStoreXinFaDeviceDetail(String storeNum) {
|
||||
return xinFaDeviceService.getStoreXinFaDeviceDetail(storeNum);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TagDetailDTO> getAccountAllTags(String storeNum,String deviceName) {
|
||||
//如果是广告机,不需要展示标签
|
||||
if (deviceName.contains("广告机")){
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<TagDetailDTO> accountAllTags = xinFaDeviceService.getAccountAllTags(storeNum);
|
||||
if (accountAllTags != null){
|
||||
return accountAllTags.stream()
|
||||
.filter(tag -> tag.getName() != null &&
|
||||
SpecialTagEnum.getAllTagNames().contains(tag.getName()))
|
||||
.sorted(Comparator.comparing(tag -> SpecialTagEnum.getAllTagNames().indexOf(tag.getName())))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ProgramResponseDTO> getProgramList(ProgramReqDTO programReqDTO) {
|
||||
//如果没传tag 查所有 根据更新时间倒序排
|
||||
programReqDTO.setSort("desc");
|
||||
programReqDTO.setDate("updateTime");
|
||||
if (CollectionUtils.isEmpty(programReqDTO.getTagIds())){
|
||||
//设备名称包含 广告机 只查询电子价目表
|
||||
programReqDTO.setTagIds(xinFaDeviceService.getAccountSpecialTagIds(programReqDTO.getStoreCode(), SpecialTagEnum.getElectronicPriceTagName()));
|
||||
}
|
||||
List<ProgramResponseDTO> programList = xinFaDeviceService.getProgramList(programReqDTO);
|
||||
return programList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean publishProgram(PublishDTO publishDTO) {
|
||||
return xinFaDeviceService.publish(publishDTO);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.cool.store.service.xinfa;
|
||||
|
||||
import com.cool.store.dto.huoma.*;
|
||||
import com.cool.store.response.ResponseResult;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author suzhuhong
|
||||
* @Date 2025/11/5 16:15
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface XinFaBusinessService {
|
||||
|
||||
|
||||
/**
|
||||
* 获取门店信发设备列表
|
||||
* @param storeNum
|
||||
* @return
|
||||
*/
|
||||
List<StoreXinFaDeviceDetail> getStoreXinFaDeviceDetail(String storeNum);
|
||||
|
||||
/**
|
||||
* 获取账号下有哪些标签
|
||||
* @param storeNum
|
||||
* @return
|
||||
*/
|
||||
List<TagDetailDTO> getAccountAllTags(String storeNum,String deviceName);
|
||||
|
||||
/**
|
||||
* 获取账号下有哪些节目、
|
||||
* 通过门店在哪个账号下 确定账号
|
||||
* @param programReqDTO
|
||||
* @return
|
||||
*/
|
||||
List<ProgramResponseDTO> getProgramList(ProgramReqDTO programReqDTO);
|
||||
|
||||
/**
|
||||
* 发布信发设备
|
||||
* @param publishDTO
|
||||
* @return
|
||||
*/
|
||||
Boolean publishProgram(PublishDTO publishDTO);
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -4,7 +4,9 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.cool.store.constants.RedisConstant;
|
||||
import com.cool.store.dto.huoma.*;
|
||||
import com.cool.store.enums.ErrorCodeEnum;
|
||||
import com.cool.store.enums.SpecialTagEnum;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.response.ResponseResult;
|
||||
import com.cool.store.utils.RedisUtilPool;
|
||||
import com.cool.store.utils.poi.constant.Constants;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
@@ -16,12 +18,14 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Author suzhuhong
|
||||
@@ -54,8 +58,12 @@ public class XinFaDeviceService {
|
||||
private String huoMaGetStoreIdUrl;
|
||||
@Value("${huoMa.store.device.detail.url}")
|
||||
private String huoMaGetStoreXinFaDeviceDetailUrl ;
|
||||
@Value("${huoMa.get.tag.url }")
|
||||
@Value("${huoMa.get.tag.url}")
|
||||
private String huoMaGetTagUrl;
|
||||
@Value("${huoMa.get.program.url}")
|
||||
private String huoMaGetProgramUrl;
|
||||
@Value("${huoMa.get.publish.url}")
|
||||
private String huoMaGetPublishUrl;
|
||||
|
||||
|
||||
private final Map<String, HuoMaAccountDTO> accountMap = new HashMap<>();
|
||||
@@ -168,18 +176,115 @@ public class XinFaDeviceService {
|
||||
String source = redisUtilPool.hashGet(RedisConstant.HUOMA_STORE_DEVICE_RESOURCE_KEY, storeNum);
|
||||
//获取标签 必须要知道门店属于哪个账号下 获取对应账号下的标签 如果获取不到 直接返回空
|
||||
if (StringUtils.isEmpty(source)){
|
||||
log.info("门店没有找到对应的账号,storeNum: {}", storeNum);
|
||||
return new ArrayList<>();
|
||||
}
|
||||
HuoMaAccountDTO huoMaAccountDTO = accountMap.get(source);
|
||||
if (Objects.nonNull(huoMaAccountDTO)){
|
||||
huoMaAccountDTO.setIsQuery(true);
|
||||
String token = getStoreToken(huoMaAccountDTO.getAccount(), huoMaAccountDTO.getPassword());
|
||||
return getAccountAllTags(token);
|
||||
TagDTO tagDTO = new TagDTO("DEFAULT", 0, 30,"program");
|
||||
String responseBody = null;
|
||||
try{
|
||||
responseBody = sendPostRequestByToken(JSONObject.toJSONString(tagDTO), huoMaGetTagUrl,token);
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
JsonNode rootNode = mapper.readTree(responseBody);
|
||||
|
||||
// 直接转换整个数组
|
||||
return mapper.convertValue(
|
||||
rootNode.path("data").path("content"),
|
||||
mapper.getTypeFactory().constructCollectionType(List.class, TagDetailDTO.class)
|
||||
);
|
||||
}catch (Exception e){
|
||||
log.error("getAccountAllTags解析获取data失败,url:{},responseBody:{}",huoMaTokenUrl, responseBody);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取账号下指定标签的id 只需要一下四个
|
||||
* @param storeNum
|
||||
* @return
|
||||
*/
|
||||
public List<Integer> getAccountSpecialTagIds( String storeNum,List<String> tagList) {
|
||||
List<TagDetailDTO> accountAllTags = getAccountAllTags(storeNum);
|
||||
if (accountAllTags != null) {
|
||||
return accountAllTags.stream()
|
||||
.filter(tag -> tag.getName() != null &&
|
||||
tagList.contains(tag.getName()))
|
||||
.map(TagDetailDTO::getId)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
|
||||
public List<ProgramResponseDTO> getProgramList(ProgramReqDTO programReqDTO) {
|
||||
if (StringUtils.isEmpty(programReqDTO.getStoreCode())){
|
||||
log.info("门店没有找到对应的账号,storeNum: {}", programReqDTO.getStoreCode());
|
||||
return new ArrayList<>();
|
||||
}
|
||||
//先查询门店是属于哪个账号下
|
||||
String source = redisUtilPool.hashGet(RedisConstant.HUOMA_STORE_DEVICE_RESOURCE_KEY, programReqDTO.getStoreCode());
|
||||
//获取标签 必须要知道门店属于哪个账号下 获取对应账号下的标签 如果获取不到 直接返回空
|
||||
if (StringUtils.isEmpty(source)){
|
||||
log.info("门店没有找到对应的账号,storeNum: {}", programReqDTO.getStoreCode());
|
||||
return new ArrayList<>();
|
||||
}
|
||||
HuoMaAccountDTO huoMaAccountDTO = accountMap.get(source);
|
||||
if (huoMaAccountDTO!=null){
|
||||
String token = getStoreToken(huoMaAccountDTO.getAccount(), huoMaAccountDTO.getPassword());
|
||||
String responseBody = null;
|
||||
try{
|
||||
responseBody = sendPostRequestByToken(JSONObject.toJSONString(programReqDTO), huoMaGetProgramUrl,token);
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
JsonNode rootNode = mapper.readTree(responseBody);
|
||||
|
||||
// 直接转换整个数组
|
||||
return mapper.convertValue(
|
||||
rootNode.path("data").path("content"),
|
||||
mapper.getTypeFactory().constructCollectionType(List.class, ProgramResponseDTO.class)
|
||||
);
|
||||
}catch (Exception e){
|
||||
log.error("getProgramList 解析获取data失败,url:{},responseBody:{}",huoMaTokenUrl, responseBody);
|
||||
}
|
||||
}
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
public Boolean publish(PublishDTO publishDTO){
|
||||
if (StringUtils.isEmpty(publishDTO.getStoreCode())){
|
||||
log.info("门店没有找到对应的账号,发布失败,storeNum: {}", publishDTO.getStoreCode());
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
String source = redisUtilPool.hashGet(RedisConstant.HUOMA_STORE_DEVICE_RESOURCE_KEY, publishDTO.getStoreCode());
|
||||
//获取标签 必须要知道门店属于哪个账号下 获取对应账号下的标签 如果获取不到 直接返回空
|
||||
if (StringUtils.isEmpty(source)){
|
||||
log.info("门店没有找到对应的账号,storeNum: {}", publishDTO.getStoreCode());
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
HuoMaAccountDTO huoMaAccountDTO = accountMap.get(source);
|
||||
if (huoMaAccountDTO!=null){
|
||||
String token = getStoreToken(huoMaAccountDTO.getAccount(), huoMaAccountDTO.getPassword());
|
||||
String responseBody = null;
|
||||
try{
|
||||
responseBody = sendPostRequestByToken(JSONObject.toJSONString(publishDTO), huoMaGetPublishUrl,token);
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
JsonNode rootNode = mapper.readTree(responseBody);
|
||||
|
||||
// 直接转换整个数组
|
||||
log.info("发布成功 deviceId:{},storeCod:{}e",JSONObject.toJSONString(publishDTO.getDeviceIdList()), publishDTO.getStoreCode() );
|
||||
return Boolean.TRUE;
|
||||
}catch (Exception e){
|
||||
log.error("getProgramList 解析获取data失败,url:{},responseBody:{}",huoMaTokenUrl, responseBody);
|
||||
}
|
||||
}
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public List<StoreXinFaDeviceDetail> getStoreXinFaDeviceDetailByPointId(Integer pointId, String token) {
|
||||
if (pointId != null){
|
||||
|
||||
Reference in New Issue
Block a user