为了加强实体类中,特殊字段类型的可读性和省去数据类型的转换,我们今天尝试把Int类型,例如状态这种整型字段换做枚举, 下面是旧代码
@Data@EqualsAndHashCode(callSuper=false)@Accessors(chain=true)@TableName("gdt_targeting")@ApiModel(value="Targeting对象", description="定向数据")publicclassTargetingextendsBaseEntity{@ApiModelProperty(value="主键")@TableId(value="id", type= IdType.ID_WORKER)private Long id;@ApiModelProperty(value="定向ID")@TableField("targeting_id")private Long targetingId;@ApiModelProperty(value="定向名称")@TableField("targeting_name")private String targetingName;@ApiModelProperty(value="定向所属广告主账号ID")@TableField("account_id")private Long accountId;@ApiModelProperty(value="定向保存类型, 0: 平台引用,1: 平台新建")@TableField("targeting_type")private Integer targetingType;@ApiModelProperty(value="是否撤销:0-正常 1-撤销")@TableField("is_deleted")@TableLogicprivate Integer deleted;@ApiModelProperty(value="广点通状态:0-失败 1-成功")@TableField("gdt_status")private Integer gdtStatus;}
下面我们只需要配置下文件就行了
yml 文件类型
mybatis-plus:typeEnumsPackage: com.xxx.enums
properties 文件类型
mybatis-plus.type-enums-package=com.xxx.enums
下面我们要对gdtStatus
参数进行转换,下面是相关的枚举类型,@EnumValue
必须带上
/**
* 广点通状态枚举
*/@Getter@AllArgsConstructorpublicenum GdtStatusEnum{INIT(0),SUCCESS(1),FAIL(2);@EnumValueprivate Integer status;}
实体类也更新一下
@ApiModelProperty(value="广点通状态")@TableField("gdt_status")private GdtStatusEnum gdtStatus;
下面我们会提供业务实现
publicinterfaceITargetingServiceextendsIService<Targeting>{/**
* 保存定向
* @param batchCreate 请求参数
* @param batchId 批次id
* @return boolean
*/
BooleanaddTargeting(TencentadBatchCreate batchCreate, Long batchId);}
@ServicepublicclassTargetingServiceImplextendsServiceImpl<TargetingMapper, Targeting>implementsITargetingService{@Overridepublic BooleanaddTargeting(TencentadBatchCreate batchCreate, Long batchId){
TencentadLineItemCondition lineItemTargeting= batchCreate.getLineitem().getCondition();
Long accountId= batchCreate.getAccountId();
Targeting targeting;if(lineItemTargeting.getTargetingId()!= null){
QueryWrapper queryWrapper=newQueryWrapper();
queryWrapper.select("id");
queryWrapper.eq("batch_id", batchId);
targeting=getOne(queryWrapper);if(targeting== null){
targeting=newTargeting();
targeting.setAccountId(accountId);
targeting.setTargetingId(lineItemTargeting.getTargetingId());
targeting.setGdtStatus(GdtStatusEnum.INIT);
targeting.setBatchId(batchId);save(targeting);}returntrue;}else{// todo invoke maketing targetings/add}returnfalse;}}
下面是测试代码
publicclassAddTergetingTestextendsBaseTest{@Autowiredprivate ITargetingService targetingService;@TestpublicvoidaddTargetingSuccessful(){
TencentadBatchCreate batchCreate=newTencentadBatchCreate();
TencentadLineItem lineItem=newTencentadLineItem();
batchCreate.setLineitem(lineItem);
batchCreate.setAccountId(accountId);
TencentadLineItemCondition targeting=newTencentadLineItemCondition();
targeting.setTargetingId(1L);
lineItem.setCondition(targeting);
Boolean flag= targetingService.addTargeting(batchCreate,1L);assert flag;
QueryWrapper<Targeting> queryWrapper=newQueryWrapper();
queryWrapper.select("id");
queryWrapper.eq("batch_id",1L);
Targeting entity= targetingService.getOne(queryWrapper);assert entity!= null;}}
执行后的结果