Merge #97 into master from cc_20260414_store

feat:bug处理

* cc_20260414_store: (6 commits squashed)

  - feat:省市区

  - feat:设备接口

  - feat:设备接口

  - feat:获取门店设备列表 get->post

  - feat:异常处理

  - feat:bug处理

Signed-off-by: 正新 <accounts_6964c7bcd2a2c377c5bbd01b@mail.teambition.com>
Merged-by: 正新 <accounts_6964c7bcd2a2c377c5bbd01b@mail.teambition.com>

CR-link: https://codeup.aliyun.com/692ea314dec569489f6f167c/hangzhou/java/custom_zxjp/change/97
This commit is contained in:
正新
2026-04-14 09:53:00 +00:00
parent 11ce6dc306
commit 9ad7fa0f5a
8 changed files with 267 additions and 3 deletions

View File

@@ -12,6 +12,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.entity.Example;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -44,6 +45,9 @@ public class StoreTypeOptionDAO {
}
public List<StoreTypeOptionDO> selectByIds(List<Long> optionIds,Long storeTypeId){
if (storeTypeId==null||CollectionUtils.isEmpty(optionIds)){
return new ArrayList<>();
}
Example example = new Example(StoreTypeOptionDO.class);
example.createCriteria().andIn("optionId", optionIds).andEqualTo("storeTypeId",storeTypeId);
return mapper.selectByExample(example);

View File

@@ -10,6 +10,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.lang.reflect.Type;
import java.util.Date;
import java.util.List;
/**
* @Author suzhuhong
@@ -38,7 +40,7 @@ public class StoreXinFaDeviceDetail {
/**
* 设备连接状态 0:未连接 1:已连接
*/
@ApiModelProperty(value = "设备连接状态 false:未连接 true:已连接")
@ApiModelProperty(value = "设备连接状态未连接 1:已连接")
private Boolean isConnect;
@ApiModelProperty(value = "授权码")
@@ -68,6 +70,201 @@ public class StoreXinFaDeviceDetail {
@ApiModelProperty(value = "内用内存小于300M 或者 浏览器版本小于60")
private Boolean flag;
@ApiModelProperty("应用版本")
private String appVersion;
@ApiModelProperty("屏幕角度")
private String screenAngle;
@ApiModelProperty("分类ID")
private Long classifyId;
@ApiModelProperty("点位名称")
private String pointName;
@ApiModelProperty("渠道")
private Integer channel;
@ApiModelProperty("类型")
private Integer type;
@ApiModelProperty("商户名称")
private String merchantName;
@ApiModelProperty("销售人ID")
private Long sellerId;
@ApiModelProperty("客户端类型")
private String clientType;
@ApiModelProperty("管理信息")
private String manageInfo;
@ApiModelProperty("节目名称")
private String programName;
@ApiModelProperty("型号")
private String model;
// @ApiModelProperty("标签")
// private List<String> tag;
@ApiModelProperty("品牌")
private String brand;
@ApiModelProperty("屏幕点位")
private Integer screenPoint;
@ApiModelProperty("是否子终端")
private Boolean isChildTerminal;
@ApiModelProperty("序列号")
private String serialNum;
@ApiModelProperty("签到时间")
private String signTime;
@ApiModelProperty("IP地址")
private String ip;
@ApiModelProperty("CPU")
private String cpu;
@ApiModelProperty("是否激活")
private Boolean active;
@ApiModelProperty("激活时间")
private String activateTime;
@ApiModelProperty("时区")
private String timeZone;
@ApiModelProperty("空闲容量")
private String freeCapacity;
@ApiModelProperty("设备信息")
private String deviceInfo;
@ApiModelProperty("使用状态")
private Integer useStatus;
@ApiModelProperty("POS X坐标")
private Integer posX;
@ApiModelProperty("POS Y坐标")
private Integer posY;
@ApiModelProperty("授权信息")
private License license;
@ApiModelProperty("门店容量")
private String storeCapacity;
@ApiModelProperty("尺寸")
private String size;
@ApiModelProperty("图片模式")
private String imgMode;
@ApiModelProperty("设备唯一ID")
private String deviceUId;
@ApiModelProperty("设备")
private String device;
// @ApiModelProperty("标签ID列表")
// private List<String> tagIdList;
@ApiModelProperty("最后更新时间")
private String lastUpdateTime;
@ApiModelProperty("日志类型")
private String logType;
@ApiModelProperty("编码")
private String code;
@ApiModelProperty("是否连接")
private Boolean connect;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("终端ID")
private Long terminalId;
@ApiModelProperty("视频模式")
private String videoMode;
@ApiModelProperty("MAC地址")
private String mac;
@ApiModelProperty("制造商")
private String manufacturer;
@ApiModelProperty("H5版本")
private String h5Version;
@ApiModelProperty("是否删除")
private Boolean isDeleted;
@ApiModelProperty("操作系统版本")
private String osVersion;
@ApiModelProperty("点位ID")
private Long pointId;
@ApiModelProperty("行数")
private Integer rowCount;
@ApiModelProperty("DPI")
private String dpi;
@ApiModelProperty("渠道ID")
private Long channelId;
@ApiModelProperty("方向")
private String orientation;
@ApiModelProperty("创建时间")
private String createTime;
@ApiModelProperty("操作系统")
private String os;
@ApiModelProperty("切换配置")
private String switchConfig;
@ApiModelProperty("浏览器内核")
private String browserKernel;
@ApiModelProperty("更新时间")
private String updateTime;
@ApiModelProperty("点位编号")
private String pointNo;
@ApiModelProperty("Token")
private String token;
@ApiModelProperty("删除")
private Boolean deleted;
@ApiModelProperty("列数")
private Integer colCount;
@ApiModelProperty("链接类型")
private String linkType;
@ApiModelProperty("渠道名称")
private String channelName;
@ApiModelProperty("操作")
private List<String> operation;
@ApiModelProperty("节目ID")
private Long programId;
public boolean getFlag() {
if (StringUtil.isEmpty(availRam)||StringUtil.isEmpty(userAgent)){
return false;
@@ -88,4 +285,22 @@ public class StoreXinFaDeviceDetail {
public String getDeviceId() {
return id;
}
/**
* 授权信息内部类
*/
@Data
public static class License {
@ApiModelProperty("开始时间")
private String startTime;
@ApiModelProperty("结束时间")
private String endTime;
@ApiModelProperty("授权ID")
private Long id;
@ApiModelProperty("状态")
private Integer status;
}
}

View File

@@ -0,0 +1,17 @@
package com.cool.store.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Auther zx_szh
* @Date 2026/4/14 15:00
* @Version 1.0
*/
@Data
public class StoreNumRequest {
@ApiModelProperty("门店编码")
private String storeNum;
}

View File

@@ -571,6 +571,9 @@ public class StoreServiceImpl implements StoreService {
dto.setBrand(FranchiseBrandEnum.getDescByCode(store.getJoinBrand()));
dto.setOrderMiniProgramName(store.getMiniProgramOrderStoreName());
dto.setStatus(StoreStatusEnum.getName(store.getStoreStatus()));
dto.setCity(store.getCity());
dto.setProvince(store.getProvince());
dto.setCity(store.getCity());
if (store.getRegionId() != null){
dto.setRegionId(store.getRegionId());
dto.setManagerSupervisionName(regionMap.get(store.getRegionId()));

View File

@@ -1,10 +1,13 @@
package com.cool.store.service.impl.xinfa;
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.service.xinfa.XinFaBusinessService;
import com.cool.store.service.xinfa.XinFaDeviceService;
import com.cool.store.utils.poi.StringUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
@@ -27,6 +30,9 @@ public class XinFaBusinessServiceImpl implements XinFaBusinessService {
@Override
public List<StoreXinFaDeviceDetail> getStoreXinFaDeviceDetail(String storeNum) {
if (StringUtils.isEmpty(storeNum)){
throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR);
}
return xinFaDeviceService.getStoreXinFaDeviceDetail(storeNum);
}

View File

@@ -2,6 +2,7 @@ package com.cool.store.service.order.impl;
import cn.hutool.core.util.PageUtil;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.constants.CommonConstants;
import com.cool.store.constants.RedisConstant;
import com.cool.store.context.LoginUserInfo;
import com.cool.store.dao.*;
@@ -74,6 +75,7 @@ import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -129,6 +131,8 @@ public class MiniStoreOrderServiceImpl implements MiniStoreOrderService {
private final FranchiseFeeMapper franchiseFeeMapper;
private final PushService pushService;
private final StoreOrderOptionSnapshotDAO storeOrderOptionSnapshotDAO;
@Value("${spring.profiles.active}")
private String active;
@Override
@@ -2042,8 +2046,11 @@ public class MiniStoreOrderServiceImpl implements MiniStoreOrderService {
return Collections.emptyList();
}
Boolean isOnline = active.equals(CommonConstants.HD_ENV) || active.equals(CommonConstants.ONLINE_ENV);
Long tableId = isOnline ? 38L : 32L;
// 获取费用类型字典映射(费用名称)
Map<String, String> expenseTypeNameMap = buildDictNameMap(32L);
Map<String, String> expenseTypeNameMap = buildDictNameMap(tableId);
// 获取配置大类名称映射
Set<String> categoryCodeSet = snapshotList.stream()

View File

@@ -316,7 +316,7 @@ public class XinFaDeviceService {
}
return list;
}catch (Exception e){
log.error("getStoreXinFaDeviceDetailByPointId解析获取data失败,url:{},responseBody:{}",huoMaTokenUrl, responseBody);
log.error("getStoreXinFaDeviceDetailByPointId解析获取data失败,url:{},responseBody:{},exception:{}",huoMaTokenUrl, responseBody,e.getMessage());
}
return null;
}

View File

@@ -3,6 +3,7 @@ package com.cool.store.controller.webb;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.annotation.Debounce;
import com.cool.store.dto.*;
import com.cool.store.dto.huoma.StoreXinFaDeviceDetail;
import com.cool.store.dto.region.BigRegionDTO;
import com.cool.store.dto.store.StoreUserPositionDTO;
import com.cool.store.dto.wallet.PaymentDTO;
@@ -31,6 +32,8 @@ import com.cool.store.response.bigdata.ApiResponse;
import com.cool.store.service.*;
import com.cool.store.service.privatesphere.PrivateSphereQrService;
import com.cool.store.service.wallet.WalletService;
import com.cool.store.service.xinfa.XinFaBusinessService;
import com.cool.store.service.xinfa.XinFaDeviceService;
import com.cool.store.utils.HttpHelper;
import com.cool.store.utils.poi.StringUtils;
import com.cool.store.service.close.CloseStoreService;
@@ -88,6 +91,8 @@ public class OpenApiController {
RegionService regionService;
@Resource
PrivateSphereQrService privateSphereQrService;
@Resource
XinFaBusinessService xinFaBusinessService;
@PostMapping("/statusRefresh")
public ApiResponse<Boolean> statusRefresh(@RequestBody StatusRefreshDTO statusRefreshDTO){
@@ -303,4 +308,11 @@ public class OpenApiController {
request.setClientIp(HttpHelper.getIpAddr(httpRequest));
return ApiResponse.success(privateSphereQrService.getPrivateSphereQr(request));
}
@ApiOperation("获取门店设备列表")
@PostMapping("/getDeviceByStoreNum")
public ApiResponse<List<StoreXinFaDeviceDetail>> getStoreXinFaDeviceDetail(@RequestBody StoreNumRequest request) {
return ApiResponse.success(xinFaBusinessService.getStoreXinFaDeviceDetail(request.getStoreNum()));
}
}