提交 8b5f9c8c authored 作者: 李秋林's avatar 李秋林

添加/删除 - 今日活动 - (出售列表中添加)出售单元

上级 5ea6e123
...@@ -234,6 +234,12 @@ ...@@ -234,6 +234,12 @@
</exclusions> </exclusions>
</dependency> </dependency>
<dependency>
<groupId>com.fasterxml.uuid</groupId>
<artifactId>java-uuid-generator</artifactId>
<version>${java-uuid-generator.version}</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -2,15 +2,14 @@ package com.wangxiaolu.promotion.controller.activity.temporary; ...@@ -2,15 +2,14 @@ package com.wangxiaolu.promotion.controller.activity.temporary;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto; import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto;
import com.wangxiaolu.promotion.pojo.activity.temporary.vo.TemporaryActivityDataVo; import com.wangxiaolu.promotion.pojo.activity.temporary.vo.TemporaryActivityDataVo;
import com.wangxiaolu.promotion.pojo.activity.temporary.vo.TemporaryActivityMarketCellVo;
import com.wangxiaolu.promotion.result.basedata.R; import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.service.activity.temporary.TemporaryActivityCoreService; import com.wangxiaolu.promotion.service.activity.temporary.TemporaryActivityCoreService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
import java.util.Objects; import java.util.Objects;
/** /**
...@@ -44,6 +43,30 @@ public class TemporaryActivityCoreController { ...@@ -44,6 +43,30 @@ public class TemporaryActivityCoreController {
return R.success(tempActivityCoreService.activityDataReportedSave(temActDto)); return R.success(tempActivityCoreService.activityDataReportedSave(temActDto));
} }
/**
* 促销员[今日活动 - (出售列表中添加)出售单元]数据
* 数据暂存到redis中,当调用保存接口时再添加到数据库中
* 返回保存成功信息
*/
@PostMapping("/today/reported/market_cell")
public R todayActivityMarketCellReported(@RequestBody TemporaryActivityMarketCellVo marketcellVo) {
marketcellVo.saveDataVerify();
tempActivityCoreService.todayActivityMarketCellReported(marketcellVo);
return R.success();
}
/**
* 删除促销员[今日活动 - (出售列表中添加)出售单元]数据
* 当促销员取消保存活动记录时,数据进行删除
*/
@DeleteMapping("/today/reported/del_market_cell")
public R todayActivityMarketCellReported(Integer temporaryId) {
tempActivityCoreService.todayActivityDeleteMarketCellReported(temporaryId);
return R.success();
}
/** /**
* 促销员[今日活动]数据提交审批 * 促销员[今日活动]数据提交审批
* 修改审批状态 * 修改审批状态
......
...@@ -2,6 +2,7 @@ package com.wangxiaolu.promotion.controller.activity.temporary; ...@@ -2,6 +2,7 @@ package com.wangxiaolu.promotion.controller.activity.temporary;
import com.wangxiaolu.promotion.pojo.PageInfo; import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto; import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto;
import com.wangxiaolu.promotion.pojo.activity.temporary.vo.TemporaryActivityMarketCellVo;
import com.wangxiaolu.promotion.result.basedata.R; import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.service.activity.temporary.TemporaryActivityQueryService; import com.wangxiaolu.promotion.service.activity.temporary.TemporaryActivityQueryService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -51,4 +52,16 @@ public class TemporaryActivityQueryController { ...@@ -51,4 +52,16 @@ public class TemporaryActivityQueryController {
TemporaryActivityReportedDto dto = temporaryActivityQueryService.findTemporaryActivityById(activityId); TemporaryActivityReportedDto dto = temporaryActivityQueryService.findTemporaryActivityById(activityId);
return R.success(dto); return R.success(dto);
} }
/**
* 促销员[今日活动 - (出售列表中添加)出售单元]数据
* 数据暂存到redis中,当调用保存接口时再添加到数据库中
* 返回已保存的数据
*/
@GetMapping("/today/reported/market_cell")
public R todayActivityMarketCell(Integer temporaryId) {
return R.success(temporaryActivityQueryService.findActivityMarketCell(temporaryId));
}
} }
...@@ -46,5 +46,23 @@ public class QinCeDataTaskController { ...@@ -46,5 +46,23 @@ public class QinCeDataTaskController {
return R.success(); return R.success();
} }
/**
* 同步商品类型
*/
@GetMapping("/product/type")
public R productQueryPdTypeAllTask(){
qinCeDataTaskService.productQueryPdTypeAllTask();
return R.success();
}
/**
* 同步商品数据
*/
@GetMapping("/product")
public R productAllTask(){
qinCeDataTaskService.productAllTask();
return R.success();
}
} }
package com.wangxiaolu.promotion.controller.user.qince;
import com.wangxiaolu.promotion.pojo.CascadeVo;
import com.wangxiaolu.promotion.pojo.user.dto.QinceProductTypeDto;
import com.wangxiaolu.promotion.result.basedata.R;
import com.wangxiaolu.promotion.service.user.QinCeProductQueryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author : liqiulin
* @date : 2024-06-19 17
* @describe :
*/
@RestController
@RequestMapping("/user/qince/query")
public class QinCeProductQueryController {
@Autowired
QinCeProductQueryService qinCeProductQueryService;
@PostMapping("/product/type/list")
public R findProductTypeList(){
List<QinceProductTypeDto> dtos = qinCeProductQueryService.findProductTypeList();
return R.success(dtos);
}
/**
* 级联选择
* @return
*/
@PostMapping("/product/cascade")
public R findProductCascade(){
List<CascadeVo> dtos = qinCeProductQueryService.findProductCascade();
return R.success(dtos);
}
}
package com.wangxiaolu.promotion.domain.user.dao;
import com.alibaba.fastjson.JSONArray;
import com.wangxiaolu.promotion.pojo.user.dto.QinceProductInfoDto;
import java.util.List;
/**
* @author : liqiulin
* @date : 2024-06-19 17
* @describe :
*/
public interface QinceProductInfoDao {
void productSyncTask(JSONArray responseDatas);
List<QinceProductInfoDto> selectList();
}
package com.wangxiaolu.promotion.domain.user.dao;
import com.alibaba.fastjson.JSONArray;
import com.wangxiaolu.promotion.pojo.user.dto.QinceProductTypeDto;
import java.util.List;
/**
* @author : liqiulin
* @date : 2024-06-19 15
* @describe :
*/
public interface QinceProductTypeDao {
void productPdTypeSyncTask(JSONArray responseDatas);
List<QinceProductTypeDto> findAll();
}
package com.wangxiaolu.promotion.domain.user.dao.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wangxiaolu.promotion.domain.user.dao.QinceProductInfoDao;
import com.wangxiaolu.promotion.domain.user.mapper.QinceProductInfoMapper;
import com.wangxiaolu.promotion.domain.user.mapper.entity.QinceProductInfoDO;
import com.wangxiaolu.promotion.pojo.user.dto.QinceProductInfoDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* @author : liqiulin
* @date : 2024-06-19 17
* @describe :
*/
@Slf4j
@Service
public class QinceProductInfoDaoImpl implements QinceProductInfoDao {
@Autowired
QinceProductInfoMapper qinceProductInfoMapper;
@Override
public void productSyncTask(JSONArray responseDatas) {
log.info("勤策-同步商品信息,共「{}」条数据", responseDatas.size());
LambdaQueryWrapper<QinceProductInfoDO> qw = new LambdaQueryWrapper<>();
for (Object responseData : responseDatas) {
qw.clear();
// 查询人员是否存在
QinceProductInfoDO qcDo = JSONObject.parseObject(JSONObject.toJSONString(responseData), QinceProductInfoDO.class);
qw.eq(QinceProductInfoDO::getPrdWaiqin365Id, qcDo.getPrdWaiqin365Id());
QinceProductInfoDO doExist = qinceProductInfoMapper.selectOne(qw);
// 存在则修改,不存在则添加
if (Objects.isNull(doExist)) {
qinceProductInfoMapper.insert(qcDo);
log.info("勤策-[{}]商品信息不存在,已添加,qc_id:{}", qcDo.getPrdName(), qcDo.getPrdWaiqin365Id());
} else {
qcDo.setId(doExist.getId());
qinceProductInfoMapper.updateById(qcDo);
log.info("勤策--[{}]商品信息已存在,现已修改,qc_id:{}", qcDo.getPrdName(), qcDo.getPrdWaiqin365Id());
}
}
}
@Override
public List<QinceProductInfoDto> selectList() {
LambdaQueryWrapper<QinceProductInfoDO> qw = new LambdaQueryWrapper<>();
qw.eq(QinceProductInfoDO::getSaleStatus,1).eq(QinceProductInfoDO::getStatus,1).ne(QinceProductInfoDO::getClassName,"")
.select(QinceProductInfoDO::getClassId,QinceProductInfoDO::getClassName,QinceProductInfoDO::getPrdId,QinceProductInfoDO::getPrdName);
List<QinceProductInfoDO> qinceProductInfoDOS = qinceProductInfoMapper.selectList(qw);
return transitionDtos(qinceProductInfoDOS);
}
/**
* DO to DTO (单个对象)
*
* @param productInfoDOS DO对象List
* @return DTO对象
*/
private List<QinceProductInfoDto> transitionDtos(List<QinceProductInfoDO> productInfoDOS) {
if (CollectionUtils.isEmpty(productInfoDOS)) {
return new ArrayList<>();
}
List<QinceProductInfoDto> dtos = new ArrayList<>(productInfoDOS.size() * 2);
for (QinceProductInfoDO productInfoDO : productInfoDOS) {
dtos.add(transitionDto(productInfoDO));
}
return dtos;
}
private QinceProductInfoDto transitionDto(QinceProductInfoDO productInfoDO) {
QinceProductInfoDto dto = null;
if (Objects.isNull(productInfoDO)) {
return dto;
}
dto = new QinceProductInfoDto();
BeanUtils.copyProperties(productInfoDO, dto);
return dto;
}
}
package com.wangxiaolu.promotion.domain.user.dao.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wangxiaolu.promotion.domain.user.dao.QinceProductTypeDao;
import com.wangxiaolu.promotion.domain.user.mapper.QinceProductTypeMapper;
import com.wangxiaolu.promotion.domain.user.mapper.entity.QinceProductTypeDO;
import com.wangxiaolu.promotion.pojo.user.dto.QinceProductTypeDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* @author : liqiulin
* @date : 2024-06-19 15
* @describe :
*/
@Slf4j
@Service
public class QinceProductTypeDaoImpl implements QinceProductTypeDao {
@Autowired
QinceProductTypeMapper qinceProductTypeMapper;
@Override
public void productPdTypeSyncTask(JSONArray responseDatas) {
log.info("勤策-同步商品类型数据,共「{}」条数据", responseDatas.size());
LambdaQueryWrapper<QinceProductTypeDO> qw = new LambdaQueryWrapper<>();
for (Object responseData : responseDatas) {
qw.clear();
// 查询人员是否存在
QinceProductTypeDO qcDo = JSONObject.parseObject(JSONObject.toJSONString(responseData), QinceProductTypeDO.class);
qw.eq(QinceProductTypeDO::getPrdWaiqin365Id, qcDo.getPrdWaiqin365Id());
QinceProductTypeDO doExist = qinceProductTypeMapper.selectOne(qw);
// 存在则修改,不存在则添加
if (Objects.isNull(doExist)) {
qinceProductTypeMapper.insert(qcDo);
log.info("勤策-[{}]商品类型不存在,已添加,qc_id:{}", qcDo.getName(), qcDo.getPrdWaiqin365Id());
} else {
qcDo.setId(doExist.getId());
qinceProductTypeMapper.updateById(qcDo);
log.info("勤策--[{}]商品类型已存在,现已修改,qc_id:{}", qcDo.getName(), qcDo.getPrdWaiqin365Id());
}
}
}
@Override
public List<QinceProductTypeDto> findAll() {
LambdaQueryWrapper<QinceProductTypeDO> qw = new LambdaQueryWrapper<>();
qw.eq(QinceProductTypeDO::getStatus,1).select(QinceProductTypeDO::getPrdWaiqin365Id,QinceProductTypeDO::getName);
List<QinceProductTypeDO> qinceProductTypeDOS = qinceProductTypeMapper.selectList(qw);
return transitionDtos(qinceProductTypeDOS);
}
/**
* DO to DTO (单个对象)
*
* @param productTypeDos DO对象List
* @return DTO对象
*/
private List<QinceProductTypeDto> transitionDtos(List<QinceProductTypeDO> productTypeDos) {
if (CollectionUtils.isEmpty(productTypeDos)) {
return new ArrayList<>();
}
List<QinceProductTypeDto> dtos = new ArrayList<>(productTypeDos.size() * 2);
for (QinceProductTypeDO productTypeDo : productTypeDos) {
dtos.add(transitionDto(productTypeDo));
}
return dtos;
}
private QinceProductTypeDto transitionDto(QinceProductTypeDO productTypeDo) {
QinceProductTypeDto dto = null;
if (Objects.isNull(productTypeDo)) {
return dto;
}
dto = new QinceProductTypeDto();
BeanUtils.copyProperties(productTypeDo, dto);
return dto;
}
}
package com.wangxiaolu.promotion.domain.user.mapper;
import com.wangxiaolu.promotion.domain.user.mapper.entity.QinceProductInfoDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* @author a02200059
* @description 针对表【qince_product_info】的数据库操作Mapper
* @createDate 2024-06-19 16:55:53
* @Entity generator.domain.QinceProductInfoDto
*/
@Mapper
@Repository
public interface QinceProductInfoMapper extends BaseMapper<QinceProductInfoDO> {
}
package com.wangxiaolu.promotion.domain.user.mapper;
import com.wangxiaolu.promotion.domain.user.mapper.entity.QinceProductTypeDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* @author a02200059
* @description 针对表【qince_product_type】的数据库操作Mapper
* @createDate 2024-06-19 15:40:15
* @Entity com.wangxiaolu.promotion.domain.user.mapper.entity.QinceProductTypeDO
*/
@Mapper
@Repository
public interface QinceProductTypeMapper extends BaseMapper<QinceProductTypeDO> {
}
package com.wangxiaolu.promotion.domain.user.mapper.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
*
* @TableName qince_product_info
*/
@TableName(value ="qince_product_info")
@Data
public class QinceProductInfoDO implements Serializable {
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 商品唯一标识,来源第三方系统的唯一ID(ERP)
*/
@JsonProperty("prd_id")
private String prdId;
/**
* 勤策商品id
*/
@JsonProperty("prd_waiqin365_id")
private String prdWaiqin365Id;
/**
* 商品名称
*/
@JsonProperty("prd_name")
private String prdName;
/**
* 商品类型唯一ID,所属类型
*/
@JsonProperty("class_id")
private String classId;
/**
* 商品类型名称
*/
@JsonProperty("class_name")
private String className;
/**
* 商品类型全路径
*/
@JsonProperty("class_full_path")
private String classFullPath;
/**
* 单位
*/
@JsonProperty("prd_unit")
private String prdUnit;
/**
* 商品规格
*/
@JsonProperty("prd_spec")
private String prdSpec;
/**
* 商品分类,0:普通商品,1:助销物料,2:包装物,3:兑换物料
*/
@JsonProperty("classification")
private String classification;
/**
* 商品编码
*/
@JsonProperty("prd_code")
private String prdCode;
/**
* 销售状态。0:停售,1:在售
*/
@JsonProperty("prd_sale_status")
private String prdSaleStatus;
/**
* 销售状态。0:停售,1:在售
*/
@JsonProperty("sale_status")
private String saleStatus;
/**
* 删除标志。1:正常,0:删除
*/
@JsonProperty("status")
private String status;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date modifyTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.wangxiaolu.promotion.domain.user.mapper.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
*
* @TableName qince_product_type
*/
@TableName(value ="qince_product_type")
@Data
public class QinceProductTypeDO implements Serializable {
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 勤策ID
*/
@JsonProperty("prd_waiqin365_id")
private String prdWaiqin365Id;
/**
* 父id - 勤策ID
*/
@JsonProperty("parent_id")
private String parentId;
/**
* 商品类型名称
*/
@JsonProperty("name")
private String name;
/**
* 删除标志。1:正常,0:删除
*/
@JsonProperty("status")
private Integer status;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date modifyTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.wangxiaolu.promotion.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author : liqiulin
* @date : 2024-06-20 11
* @describe : 级联对象
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CascadeVo {
private String label;
private String value;
private List<CascadeVo> children;
public CascadeVo(String label, String value) {
this.label = label;
this.value = value;
}
}
package com.wangxiaolu.promotion.pojo.activity.temporary.vo;
import com.wangxiaolu.promotion.exception.ParamException;
import com.wangxiaolu.promotion.result.basedata.RCode;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.StringUtils;
import java.util.Objects;
/**
* @author : liqiulin
* @date : 2024-06-20 17
* @describe :今日活动 - (出售列表中添加)出售单元
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class TemporaryActivityMarketCellVo {
/**
* 促销员id
* temporaryInfo表id
*/
private Integer temporaryId;
/**
* market_cell 表id
* 影响保存逻辑:有则修改,无则新增
*/
private Long marketCellId;
/**
* 保存到redis中的 uuid
* 未保存到数据且保存到redis中的数据:根据这个id进行缓存数据的修改
*/
private String uuid;
/**
* 类型名称
*/
private String prdClassName;
/**
* 商品品类名称
*/
private String prdName;
/**
* 商品品类编码
*/
private String prdId;
/**
* 卖出数据 - 袋
*/
private Integer bag;
/**
* 卖出数据 - 箱
*/
private Integer box;
public void saveDataVerify() {
// if (Objects.isNull(this.marketCellId) && StringUtils.isBlank(this.uuid)){
// throw new ParamException(RCode.DATA_NOT_HAVE_ERROR, null);
// }
if (StringUtils.isBlank(this.prdClassName) || StringUtils.isBlank(this.prdId)){
throw new ParamException(RCode.PRODUCT_CLASS_NOT_ERROR, null);
}
if ((Objects.isNull(this.bag) && Objects.isNull(this.box)) || (this.bag + this.box <= 0)) {
throw new ParamException(RCode.MARKET_NUMBER_NOT_ERROR, null);
}
}
}
package com.wangxiaolu.promotion.pojo.user.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
*
* @TableName qince_product_info
*/
@Data
public class QinceProductInfoDto implements Serializable {
/**
* 主键id
*/
private Integer id;
/**
* 商品唯一标识,来源第三方系统的唯一ID(ERP)
*/
private String prdId;
/**
* 勤策商品id
*/
private String prdWaiqin365Id;
/**
* 商品名称
*/
private String prdName;
/**
* 商品类型唯一ID,所属类型
*/
private String classId;
/**
* 商品类型名称
*/
private String className;
/**
* 商品类型全路径
*/
private String classFullPath;
/**
* 单位
*/
private String prdUnit;
/**
* 商品规格
*/
private String prdSpec;
/**
* 商品分类,0:普通商品,1:助销物料,2:包装物,3:兑换物料
*/
private String classification;
/**
* 商品编码
*/
private String prdCode;
/**
* 销售状态。0:停售,1:在售
*/
private String prdSaleStatus;
/**
* 销售状态。0:停售,1:在售
*/
private String saleStatus;
/**
* 删除标志。1:正常,0:删除
*/
private String status;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date modifyTime;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.wangxiaolu.promotion.pojo.user.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
*
* @TableName qince_product_type
*/
@Data
public class QinceProductTypeDto implements Serializable {
/**
* 主键id
*/
private Integer id;
/**
* 勤策ID
*/
private String prdWaiqin365Id;
/**
* 父id - 勤策ID
*/
private String parentId;
/**
* 商品类型名称
*/
private String name;
/**
* 删除标志。1:正常,0:删除
*/
private Integer status;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date modifyTime;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
...@@ -2,6 +2,7 @@ package com.wangxiaolu.promotion.service.activity.temporary; ...@@ -2,6 +2,7 @@ package com.wangxiaolu.promotion.service.activity.temporary;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto; import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto; import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto;
import com.wangxiaolu.promotion.pojo.activity.temporary.vo.TemporaryActivityMarketCellVo;
/** /**
* @author : liqiulin * @author : liqiulin
...@@ -38,4 +39,8 @@ public interface TemporaryActivityCoreService { ...@@ -38,4 +39,8 @@ public interface TemporaryActivityCoreService {
* @param clockCoordinates 打卡经纬度 * @param clockCoordinates 打卡经纬度
*/ */
void clockStoreCalDistance(String storeQcId, Long id, String clockCoordinates); void clockStoreCalDistance(String storeQcId, Long id, String clockCoordinates);
void todayActivityMarketCellReported(TemporaryActivityMarketCellVo marketcellVo);
void todayActivityDeleteMarketCellReported(Integer temporaryId);
} }
package com.wangxiaolu.promotion.service.activity.temporary; package com.wangxiaolu.promotion.service.activity.temporary;
import com.alibaba.fastjson.JSONArray;
import com.wangxiaolu.promotion.pojo.PageInfo; import com.wangxiaolu.promotion.pojo.PageInfo;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto; import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto;
...@@ -23,4 +24,6 @@ public interface TemporaryActivityQueryService { ...@@ -23,4 +24,6 @@ public interface TemporaryActivityQueryService {
TemporaryActivityReportedDto findtemporaryIdTodayActivityData(Integer temporaryId); TemporaryActivityReportedDto findtemporaryIdTodayActivityData(Integer temporaryId);
TemporaryActivityReportedDto findTemporaryActivityById(Long activityId); TemporaryActivityReportedDto findTemporaryActivityById(Long activityId);
JSONArray findActivityMarketCell(Integer temporaryId);
} }
package com.wangxiaolu.promotion.service.activity.temporary.impl; package com.wangxiaolu.promotion.service.activity.temporary.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.fasterxml.uuid.Generators;
import com.wangxiaolu.promotion.common.redis.RedisKeys;
import com.wangxiaolu.promotion.common.redis.service.RedisCache;
import com.wangxiaolu.promotion.domain.activity.dao.*; import com.wangxiaolu.promotion.domain.activity.dao.*;
import com.wangxiaolu.promotion.domain.user.dao.QinCeClienteleStoreDao; import com.wangxiaolu.promotion.domain.user.dao.QinCeClienteleStoreDao;
import com.wangxiaolu.promotion.domain.user.dao.TemporaryInfoDao; import com.wangxiaolu.promotion.domain.user.dao.TemporaryInfoDao;
...@@ -9,11 +14,13 @@ import com.wangxiaolu.promotion.enums.activity.ActivityPhotoType; ...@@ -9,11 +14,13 @@ import com.wangxiaolu.promotion.enums.activity.ActivityPhotoType;
import com.wangxiaolu.promotion.enums.activity.ClockType; import com.wangxiaolu.promotion.enums.activity.ClockType;
import com.wangxiaolu.promotion.enums.activity.LogType; import com.wangxiaolu.promotion.enums.activity.LogType;
import com.wangxiaolu.promotion.enums.activity.TemActApproveStatus; import com.wangxiaolu.promotion.enums.activity.TemActApproveStatus;
import com.wangxiaolu.promotion.exception.DataException;
import com.wangxiaolu.promotion.exception.FlowException; import com.wangxiaolu.promotion.exception.FlowException;
import com.wangxiaolu.promotion.exception.ParamException; import com.wangxiaolu.promotion.exception.ParamException;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.PromotionStoreDto; import com.wangxiaolu.promotion.pojo.activity.temporary.dto.PromotionStoreDto;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto; import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryActivityReportedDto;
import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto; import com.wangxiaolu.promotion.pojo.activity.temporary.dto.TemporaryClockDto;
import com.wangxiaolu.promotion.pojo.activity.temporary.vo.TemporaryActivityMarketCellVo;
import com.wangxiaolu.promotion.pojo.user.dto.QinCeClienteleStoreDto; import com.wangxiaolu.promotion.pojo.user.dto.QinCeClienteleStoreDto;
import com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto; import com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto;
import com.wangxiaolu.promotion.result.basedata.RCode; import com.wangxiaolu.promotion.result.basedata.RCode;
...@@ -27,10 +34,8 @@ import org.springframework.stereotype.Service; ...@@ -27,10 +34,8 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.Date; import java.util.*;
import java.util.List; import java.util.stream.Collectors;
import java.util.Map;
import java.util.Objects;
/** /**
* @author : liqiulin * @author : liqiulin
...@@ -43,6 +48,8 @@ public class TemporaryActivityCoreServiceImpl implements TemporaryActivityCoreSe ...@@ -43,6 +48,8 @@ public class TemporaryActivityCoreServiceImpl implements TemporaryActivityCoreSe
@Autowired @Autowired
QinCeUtils qinCeUtils; QinCeUtils qinCeUtils;
@Autowired @Autowired
RedisCache redisCache;
@Autowired
private TemporaryActivityReportedDao temporaryActivityReportedDao; private TemporaryActivityReportedDao temporaryActivityReportedDao;
@Autowired @Autowired
...@@ -148,13 +155,10 @@ public class TemporaryActivityCoreServiceImpl implements TemporaryActivityCoreSe ...@@ -148,13 +155,10 @@ public class TemporaryActivityCoreServiceImpl implements TemporaryActivityCoreSe
if (Objects.isNull(reportedDto)) { if (Objects.isNull(reportedDto)) {
throw new ParamException(RCode.DATA_NOT_HAVE_ERROR, null); throw new ParamException(RCode.DATA_NOT_HAVE_ERROR, null);
} }
// TemActApproveStatus approveStatus = reportedDto.getApproveStatus();
TemActApproveStatus approveStatus = reportedDto.getApproveStatus(); // if (!TemActApproveStatus.SUBMITTED.name().equals(approveStatus.name()) && !TemActApproveStatus.SEND_BACK.name().equals(approveStatus.name())) {
if (!TemActApproveStatus.SUBMITTED.name().equals(approveStatus.name()) && !TemActApproveStatus.SEND_BACK.name().equals(approveStatus.name())) { // throw new FlowException(RCode.STATUS_UPDATE_ERROR, null);
throw new FlowException(RCode.STATUS_UPDATE_ERROR, null); // }
}
// todo 判断数据是否符合提交审批规则
// 查询促销员负责人,将人员补充到审批中 // 查询促销员负责人,将人员补充到审批中
WxTemporaryInfoDto wxTemporaryInfoDto = temporaryInfoDao.selectOneById(reportedDto.getTemporaryId()); WxTemporaryInfoDto wxTemporaryInfoDto = temporaryInfoDao.selectOneById(reportedDto.getTemporaryId());
...@@ -170,6 +174,31 @@ public class TemporaryActivityCoreServiceImpl implements TemporaryActivityCoreSe ...@@ -170,6 +174,31 @@ public class TemporaryActivityCoreServiceImpl implements TemporaryActivityCoreSe
tempActivityLogDao.save(reportedDto.getTemporaryId(), reportedDto.getTemporaryName(), LogType.t_3, updateDto.getId(), updateDto); tempActivityLogDao.save(reportedDto.getTemporaryId(), reportedDto.getTemporaryName(), LogType.t_3, updateDto.getId(), updateDto);
} }
@Override
public void todayActivityMarketCellReported(TemporaryActivityMarketCellVo marketcellVo) {
String key = temMarketCellRedisKey(marketcellVo.getTemporaryId());
JSONArray marketCells = redisCache.getToJsonArray(key);
if (Objects.isNull(marketCells)){
marketCells = new JSONArray();
}else {
// 判断prdId是否已存在
List<String> prdIdList = marketCells.stream().map(o -> ((JSONObject) o).getString("prdId")).collect(Collectors.toList());
if (prdIdList.contains(marketcellVo.getPrdId())){
throw new ParamException(RCode.PRODUCT_CLASS_HAS_ERROR,null);
}
}
marketcellVo.setUuid(Generators.randomBasedGenerator().generate().toString());
marketCells.add(marketcellVo);
redisCache.addToJsonToMinute(key, marketCells, 30);
}
@Override
public void todayActivityDeleteMarketCellReported(Integer temporaryId) {
String key = temMarketCellRedisKey(temporaryId);
redisCache.removeKey(key);
}
/** /**
* 根据店铺或打卡记录中的店铺,判断打卡距离 * 根据店铺或打卡记录中的店铺,判断打卡距离
* 经度,范围为 -180~180,负数表示西经;纬度,范围为 -90~90,负数表示南纬 * 经度,范围为 -180~180,负数表示西经;纬度,范围为 -90~90,负数表示南纬
...@@ -207,6 +236,10 @@ public class TemporaryActivityCoreServiceImpl implements TemporaryActivityCoreSe ...@@ -207,6 +236,10 @@ public class TemporaryActivityCoreServiceImpl implements TemporaryActivityCoreSe
// } // }
} }
private String temMarketCellRedisKey(Integer temporaryId){
return RedisKeys.TemporaryKeys.TEMPORARY_ACTIVITY_MARKET_CELL.getKey() + temporaryId + "_" + DateUtil.today();
}
/** /**
* 推广活动照片保存 * 推广活动照片保存
* *
......
package com.wangxiaolu.promotion.service.activity.temporary.impl; package com.wangxiaolu.promotion.service.activity.temporary.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.fasterxml.uuid.Generators;
import com.wangxiaolu.promotion.common.redis.RedisKeys;
import com.wangxiaolu.promotion.common.redis.service.RedisCache;
import com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityPhotoDao; import com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityPhotoDao;
import com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityReportedDao; import com.wangxiaolu.promotion.domain.activity.dao.TemporaryActivityReportedDao;
import com.wangxiaolu.promotion.enums.activity.ActivityPhotoType; import com.wangxiaolu.promotion.enums.activity.ActivityPhotoType;
...@@ -24,9 +29,10 @@ import java.util.Objects; ...@@ -24,9 +29,10 @@ import java.util.Objects;
@Slf4j @Slf4j
public class TemporaryActivityQueryServiceImpl implements TemporaryActivityQueryService { public class TemporaryActivityQueryServiceImpl implements TemporaryActivityQueryService {
@Autowired
RedisCache redisCache;
@Autowired @Autowired
TemporaryActivityReportedDao temporaryActivityReportedDao; TemporaryActivityReportedDao temporaryActivityReportedDao;
@Autowired @Autowired
TemporaryActivityPhotoDao temporaryActivityPhotoDao; TemporaryActivityPhotoDao temporaryActivityPhotoDao;
...@@ -56,6 +62,15 @@ public class TemporaryActivityQueryServiceImpl implements TemporaryActivityQuery ...@@ -56,6 +62,15 @@ public class TemporaryActivityQueryServiceImpl implements TemporaryActivityQuery
return dto; return dto;
} }
@Override
public JSONArray findActivityMarketCell(Integer temporaryId) {
/**
* 将数据保存到redis中Generators
*/
String key = RedisKeys.TemporaryKeys.TEMPORARY_ACTIVITY_MARKET_CELL.getKey() + temporaryId + "_" + DateUtil.today();;
return redisCache.getToJsonArray(key);
}
private void findActivityReportedPhoto(TemporaryActivityReportedDto dto) { private void findActivityReportedPhoto(TemporaryActivityReportedDto dto) {
if (Objects.isNull(dto)) { if (Objects.isNull(dto)) {
return; return;
......
...@@ -12,4 +12,8 @@ public interface QinCeDataTaskService { ...@@ -12,4 +12,8 @@ public interface QinCeDataTaskService {
void shopDetailAllTask(); void shopDetailAllTask();
void productQueryPdTypeAllTask();
void productAllTask();
} }
package com.wangxiaolu.promotion.service.user;
import com.wangxiaolu.promotion.pojo.CascadeVo;
import com.wangxiaolu.promotion.pojo.user.dto.QinceProductTypeDto;
import java.util.List;
/**
* @author : liqiulin
* @date : 2024-06-19 17
* @describe :
*/
public interface QinCeProductQueryService {
List<QinceProductTypeDto> findProductTypeList();
List<CascadeVo> findProductCascade();
}
...@@ -2,9 +2,7 @@ package com.wangxiaolu.promotion.service.user.impl; ...@@ -2,9 +2,7 @@ package com.wangxiaolu.promotion.service.user.impl;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.wangxiaolu.promotion.domain.user.dao.QinCeClienteleStoreDao; import com.wangxiaolu.promotion.domain.user.dao.*;
import com.wangxiaolu.promotion.domain.user.dao.QinCeDepartmentDao;
import com.wangxiaolu.promotion.domain.user.dao.QinCeEmployeeDao;
import com.wangxiaolu.promotion.service.user.QinCeDataTaskService; import com.wangxiaolu.promotion.service.user.QinCeDataTaskService;
import com.wangxiaolu.promotion.utils.OkHttp; import com.wangxiaolu.promotion.utils.OkHttp;
import com.wangxiaolu.promotion.utils.QinCeUtils; import com.wangxiaolu.promotion.utils.QinCeUtils;
...@@ -31,6 +29,10 @@ public class QinCeDataTaskServiceImpl implements QinCeDataTaskService { ...@@ -31,6 +29,10 @@ public class QinCeDataTaskServiceImpl implements QinCeDataTaskService {
QinCeEmployeeDao qinCeEmployeeDao; QinCeEmployeeDao qinCeEmployeeDao;
@Autowired @Autowired
QinCeClienteleStoreDao qinCeClienteleShopDao; QinCeClienteleStoreDao qinCeClienteleShopDao;
@Autowired
QinceProductTypeDao qinceProductTypeDao;
@Autowired
QinceProductInfoDao qinceProductInfoDao;
@Override @Override
public void departmentSyncTask() { public void departmentSyncTask() {
...@@ -81,6 +83,28 @@ public class QinCeDataTaskServiceImpl implements QinCeDataTaskService { ...@@ -81,6 +83,28 @@ public class QinCeDataTaskServiceImpl implements QinCeDataTaskService {
} }
} }
@Override
public void productQueryPdTypeAllTask() {
Map<String, Object> params = qinCeUtils.productQueryPdTypeParam();
String url = qinCeUtils.builderUrl(QinCeUtils.QUERY_PRODUCT_PD_TYPE, params);
// 发起请求、接收结果
JSONObject resultJson = OkHttp.postQC(url, params);
JSONArray responseDatas = resultJson.getJSONArray("response_data");
qinceProductTypeDao.productPdTypeSyncTask(responseDatas);
}
@Override
public void productAllTask() {
Map<String, Object> params = qinCeUtils.queryProductParam();
String url = qinCeUtils.builderUrl(QinCeUtils.QUERY_PRODUCT, params);
// 发起请求、接收结果
JSONObject resultJson = OkHttp.postQC(url, params);
JSONArray responseDatas = resultJson.getJSONArray("response_data");
qinceProductInfoDao.productSyncTask(responseDatas);
}
private boolean booleanshopDetailPage(Integer pageNum) { private boolean booleanshopDetailPage(Integer pageNum) {
Map<String, Object> params = qinCeUtils.queryShopParam(pageNum); Map<String, Object> params = qinCeUtils.queryShopParam(pageNum);
String url = qinCeUtils.builderUrl(QinCeUtils.QUERY_SHORE, params); String url = qinCeUtils.builderUrl(QinCeUtils.QUERY_SHORE, params);
......
package com.wangxiaolu.promotion.service.user.impl;
import com.wangxiaolu.promotion.domain.user.dao.QinceProductInfoDao;
import com.wangxiaolu.promotion.domain.user.dao.QinceProductTypeDao;
import com.wangxiaolu.promotion.pojo.CascadeVo;
import com.wangxiaolu.promotion.pojo.user.dto.QinceProductInfoDto;
import com.wangxiaolu.promotion.pojo.user.dto.QinceProductTypeDto;
import com.wangxiaolu.promotion.service.user.QinCeProductQueryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author : liqiulin
* @date : 2024-06-19 17
* @describe :
*/
@Slf4j
@Service
public class QinCeProductQueryServiceImpl implements QinCeProductQueryService {
@Autowired
QinceProductTypeDao qinceProductTypeDao;
@Autowired
QinceProductInfoDao qinceProductInfoDao;
@Override
public List<QinceProductTypeDto> findProductTypeList() {
return qinceProductTypeDao.findAll();
}
@Override
public List<CascadeVo> findProductCascade() {
List<QinceProductInfoDto> qinceProductInfoDtos = qinceProductInfoDao.selectList();
Map<String, List<CascadeVo>> casadeMap = new HashMap<>();
// 组装商品
for (QinceProductInfoDto infoDto : qinceProductInfoDtos) {
String className = infoDto.getClassName();
List<CascadeVo> cascades = null;
if (casadeMap.containsKey(className)) {
cascades = casadeMap.get(className);
} else {
cascades = new ArrayList<>();
}
cascades.add(new CascadeVo(infoDto.getPrdName(), infoDto.getPrdId()));
casadeMap.put(className, cascades);
}
List<CascadeVo> cascades = new ArrayList<>();
for (Map.Entry<String, List<CascadeVo>> entry : casadeMap.entrySet()) {
cascades.add(new CascadeVo(entry.getKey(), entry.getKey(), entry.getValue()));
}
return cascades;
}
}
...@@ -40,6 +40,10 @@ public class QinCeUtils { ...@@ -40,6 +40,10 @@ public class QinCeUtils {
public static final String QUERY_SHORE = "/api/store/v1/queryStore/"; public static final String QUERY_SHORE = "/api/store/v1/queryStore/";
// 客户位置偏差查询 // 客户位置偏差查询
public static final String CAL_DISTANCE = "/api/cmLocation/v1/calDistance/"; public static final String CAL_DISTANCE = "/api/cmLocation/v1/calDistance/";
// 商品类型查询
public static final String QUERY_PRODUCT_PD_TYPE = "/api/product/v1/queryPdType/";
// 商品列表
public static final String QUERY_PRODUCT = "/api/product/v1/queryProduct/";
public String builderUrl(String sidepath, Map<String, Object> params) { public String builderUrl(String sidepath, Map<String, Object> params) {
String msgId = UUID.randomUUID().toString(); String msgId = UUID.randomUUID().toString();
...@@ -59,6 +63,16 @@ public class QinCeUtils { ...@@ -59,6 +63,16 @@ public class QinCeUtils {
return builder.toString(); return builder.toString();
} }
/**
* 查询[部门]参数
*/
public Map<String, Object> productQueryPdTypeParam() {
Map<String, Object> params = new HashMap<>();
params.put("type_name", "");
params.put("type_id", "");
return params;
}
/** /**
* 查询[部门]参数 * 查询[部门]参数
*/ */
...@@ -163,4 +177,9 @@ public class QinCeUtils { ...@@ -163,4 +177,9 @@ public class QinCeUtils {
return digest; return digest;
} }
public Map<String, Object> queryProductParam() {
Map<String, Object> params = new HashMap<>();
params.put("prd_id", "");
return params;
}
} }
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wangxiaolu.promotion.domain.user.mapper.QinceProductInfoMapper">
<resultMap id="BaseResultMap" type="com.wangxiaolu.promotion.domain.user.mapper.entity.QinceProductInfoDO">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="prdId" column="prd_id" jdbcType="VARCHAR"/>
<result property="prdWaiqin365Id" column="prd_waiqin365_id" jdbcType="VARCHAR"/>
<result property="prdName" column="prd_name" jdbcType="VARCHAR"/>
<result property="classId" column="class_id" jdbcType="VARCHAR"/>
<result property="className" column="class_name" jdbcType="VARCHAR"/>
<result property="classFullPath" column="class_full_path" jdbcType="VARCHAR"/>
<result property="prdUnit" column="prd_unit" jdbcType="VARCHAR"/>
<result property="prdSpec" column="prd_spec" jdbcType="VARCHAR"/>
<result property="classification" column="classification" jdbcType="VARCHAR"/>
<result property="prdCode" column="prd_code" jdbcType="VARCHAR"/>
<result property="prdSaleStatus" column="prd_sale_status" jdbcType="VARCHAR"/>
<result property="saleStatus" column="sale_status" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="modifyTime" column="modify_time" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id,prd_id,prd_waiqin365_id,
prd_name,class_id,class_name,
class_full_path,prd_unit,prd_spec,
classification,prd_code,prd_sale_status,
sale_status,status,create_time,
modify_time
</sql>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wangxiaolu.promotion.domain.user.mapper.QinceProductTypeMapper">
<resultMap id="BaseResultMap" type="com.wangxiaolu.promotion.domain.user.mapper.entity.QinceProductTypeDO">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="prdWaiqin365Id" column="prd_waiqin365_id" jdbcType="VARCHAR"/>
<result property="parentId" column="parent_id" jdbcType="VARCHAR"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="INTEGER"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="modifyTime" column="modify_time" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id,prd_waiqin365_id,parent_id,
name,status,create_time,
modify_time
</sql>
</mapper>
...@@ -33,4 +33,9 @@ class QinCeDataTaskControllerTest { ...@@ -33,4 +33,9 @@ class QinCeDataTaskControllerTest {
void shopDetailAllTask() { void shopDetailAllTask() {
qinCeDataTaskController.shopDetailAllTask(); qinCeDataTaskController.shopDetailAllTask();
} }
@Test
void productAllTask() {
qinCeDataTaskController.productAllTask();
}
} }
\ No newline at end of file
package com.wangxiaolu.promotion.service.activity.temporary.impl; package com.wangxiaolu.promotion.service.activity.temporary.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论