消费返现相关
This commit is contained in:
parent
5de49a0912
commit
0c34fd0959
|
|
@ -0,0 +1,63 @@
|
|||
package com.czg.controller.admin;
|
||||
|
||||
import com.czg.annotation.SaAdminCheckPermission;
|
||||
import com.czg.market.dto.MkConsumeCashbackDTO;
|
||||
import com.czg.market.service.MkConsumeCashbackRecordService;
|
||||
import com.czg.market.service.MkConsumeCashbackService;
|
||||
import com.czg.market.vo.MkConsumeCashbackVO;
|
||||
import com.czg.resp.CzgResult;
|
||||
import com.czg.sa.StpKit;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 消费返现
|
||||
* @author Administrator
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/admin/consumeCashback")
|
||||
public class ConsumeCashbackController {
|
||||
|
||||
@Resource
|
||||
private MkConsumeCashbackService service;
|
||||
@Resource
|
||||
private MkConsumeCashbackRecordService consumeCashbackRecordService;
|
||||
|
||||
/**
|
||||
* 配置信息获取
|
||||
* 权限标识: activate:list
|
||||
*/
|
||||
@SaAdminCheckPermission(value = "consumeDiscount:detail", name = "消费返现详情")
|
||||
@GetMapping
|
||||
public CzgResult<MkConsumeCashbackVO> detail() {
|
||||
return CzgResult.success(service.detail(StpKit.USER.getShopId()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置信息修改
|
||||
* @return 是否成功
|
||||
*/
|
||||
@SaAdminCheckPermission(value = "consumeDiscount:edit", name = "消费返现修改")
|
||||
@PostMapping
|
||||
public CzgResult<Boolean> edit(@Validated @RequestBody MkConsumeCashbackDTO consumeDiscountDTO) {
|
||||
return CzgResult.success(service.edit(StpKit.USER.getShopId(), consumeDiscountDTO));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 记录获取
|
||||
* @return 是否成功
|
||||
*/
|
||||
@SaAdminCheckPermission(value = "consumeDiscount:record", name = "消费返现记录")
|
||||
@GetMapping("/record")
|
||||
public CzgResult<Map<String, Object>> record(@RequestParam(required = false) Long shopId, @RequestParam(required = false) String key,
|
||||
@RequestParam(required = false)LocalDateTime startTime, @RequestParam(required = false) LocalDateTime endTime) {
|
||||
return CzgResult.success(consumeCashbackRecordService.getRecord(StpKit.USER.getShopId(), shopId, key, startTime, endTime));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package com.czg.annotation;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 权限认证(User版):必须具有指定权限才能进入该方法
|
||||
* <p> 可标注在函数、类上(效果等同于标注在此类的所有方法上)
|
||||
* @author click33
|
||||
*
|
||||
*/
|
||||
//@SaCheckPermission(type = "user")
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target({ ElementType.METHOD, ElementType.TYPE})
|
||||
public @interface SaCheckMainShop {
|
||||
|
||||
/**
|
||||
* 需要校验的权限码
|
||||
* @return 需要校验的权限码
|
||||
*/
|
||||
String value() default "";
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
package com.czg.handler;
|
||||
|
||||
import cn.dev33.satoken.annotation.handler.SaAnnotationHandlerInterface;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.czg.annotation.SaCheckMainShop;
|
||||
import com.czg.annotation.SaStaffCheckPermission;
|
||||
import com.czg.exception.ApiNotPrintException;
|
||||
import com.czg.sa.StpKit;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/**
|
||||
* 员工权限校验
|
||||
* @author Administrator
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class SaCheckMainShopHandler implements SaAnnotationHandlerInterface<SaCheckMainShop> {
|
||||
|
||||
@Override
|
||||
public Class<SaCheckMainShop> getHandlerAnnotationClass() {
|
||||
return SaCheckMainShop.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkMethod(SaCheckMainShop at, Method method) {
|
||||
boolean mainShop = StpKit.USER.isMainShop();
|
||||
if (!mainShop) {
|
||||
throw new ApiNotPrintException("此接口仅主店可操作");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -7,6 +7,7 @@ import com.mybatisflex.annotation.Table;
|
|||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
|
@ -24,6 +25,7 @@ import java.time.LocalDateTime;
|
|||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table("tb_shop_info")
|
||||
@Accessors(chain = true)
|
||||
public class ShopInfo implements Serializable {
|
||||
|
||||
@Serial
|
||||
|
|
|
|||
|
|
@ -0,0 +1,73 @@
|
|||
|
||||
package com.czg.market.dto;
|
||||
|
||||
import com.czg.market.entity.MkConsumeCashbackStep;
|
||||
import com.czg.market.entity.MkConsumeDiscountRandom;
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 新客立减 实体类。
|
||||
*
|
||||
* @author zs
|
||||
* @since 2025-09-16
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class MkConsumeCashbackDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* all 全部可用 part部分门店可用
|
||||
*/
|
||||
@NotBlank(message = "适用门店不为空")
|
||||
private String useType;
|
||||
|
||||
/**
|
||||
* 门店列表
|
||||
*/
|
||||
@NotEmpty(message = "门店列表不为空")
|
||||
private List<Long> shopIdList;
|
||||
|
||||
/**
|
||||
* 适用用户 all全部用户 new新用户 vip会员
|
||||
*/
|
||||
@NotBlank(message = "适用用户不为空")
|
||||
private String applicableUser;
|
||||
|
||||
/**
|
||||
* 返现类型 percentage比例 fix固定
|
||||
*/
|
||||
@NotBlank(message = "返现类型不为空")
|
||||
private String cashbackType;
|
||||
|
||||
/**
|
||||
* 返现配置
|
||||
*/
|
||||
@Valid
|
||||
private List<MkConsumeCashbackStep> cashbackStepList;
|
||||
|
||||
/**
|
||||
* 是否启用
|
||||
*/
|
||||
@NotNull
|
||||
private Integer isEnable;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
package com.czg.market.entity;
|
||||
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 实体类。
|
||||
*
|
||||
* @author zs
|
||||
* @since 2025-10-13
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table("mk_consume_cashback")
|
||||
public class MkConsumeCashback implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Id(keyType = KeyType.Auto)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 主店id
|
||||
*/
|
||||
private Long mainShopId;
|
||||
|
||||
/**
|
||||
* all 全部可用 part部分门店可用
|
||||
*/
|
||||
private String useType;
|
||||
|
||||
/**
|
||||
* 门店列表
|
||||
*/
|
||||
private String shopIdList;
|
||||
|
||||
/**
|
||||
* 适用用户 all全部用户 new新用户 vip会员
|
||||
*/
|
||||
private String applicableUser;
|
||||
|
||||
/**
|
||||
* 返现类型 percentage比例 fix固定
|
||||
*/
|
||||
private String cashbackType;
|
||||
|
||||
/**
|
||||
* 返现配置
|
||||
*/
|
||||
private String cashbackStepList;
|
||||
|
||||
/**
|
||||
* 是否启用
|
||||
*/
|
||||
private Integer isEnable;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@Column(onInsertValue = "now()")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 修改时间
|
||||
*/
|
||||
@Column(onInsertValue = "now()", onUpdateValue = "now()")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
package com.czg.market.entity;
|
||||
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 消费返现明细 实体类。
|
||||
*
|
||||
* @author zs
|
||||
* @since 2025-10-13
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table("mk_consume_cashback_record")
|
||||
public class MkConsumeCashbackRecord implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Id(keyType = KeyType.Auto)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 订单号
|
||||
*/
|
||||
private String orderNo;
|
||||
|
||||
/**
|
||||
* 主店id
|
||||
*/
|
||||
private Long mainShopId;
|
||||
|
||||
/**
|
||||
* 分店id
|
||||
*/
|
||||
private Long shopId;
|
||||
|
||||
/**
|
||||
* 支付金额
|
||||
*/
|
||||
private BigDecimal amount;
|
||||
|
||||
/**
|
||||
* 返现金额
|
||||
*/
|
||||
private BigDecimal cashbackAmount;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 店铺用户id
|
||||
*/
|
||||
private Long shopUserId;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@Column(onInsertValue = "now()")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 订单id
|
||||
*/
|
||||
private Long orderId;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
|
||||
package com.czg.market.entity;
|
||||
|
||||
import jakarta.validation.constraints.DecimalMin;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 新客立减 实体类。
|
||||
*
|
||||
* @author zs
|
||||
* @since 2025-09-16
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class MkConsumeCashbackStep implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* ID
|
||||
*/
|
||||
@NotNull(message = "id不为空")
|
||||
private BigDecimal amount;
|
||||
|
||||
/**
|
||||
* 是否开启
|
||||
*/
|
||||
@NotNull(message = "返现金额/比例不为空")
|
||||
@DecimalMin(value = "0.01",message = "返现金额/比例不能为0")
|
||||
private BigDecimal cashbackAmount;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package com.czg.market.service;
|
||||
|
||||
import com.mybatisflex.core.service.IService;
|
||||
import com.czg.market.entity.MkConsumeCashbackRecord;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 消费返现明细 服务层。
|
||||
*
|
||||
* @author zs
|
||||
* @since 2025-10-13
|
||||
*/
|
||||
public interface MkConsumeCashbackRecordService extends IService<MkConsumeCashbackRecord> {
|
||||
|
||||
Map<String, Object> getRecord(Long mainShopId, Long shopId, String key, LocalDateTime startTime, LocalDateTime endTime);
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
package com.czg.market.service;
|
||||
|
||||
import com.czg.exception.ApiNotPrintException;
|
||||
import com.czg.market.dto.MkConsumeCashbackDTO;
|
||||
import com.czg.market.dto.MkConsumeDiscountDTO;
|
||||
import com.czg.market.vo.MkConsumeCashbackVO;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
import com.czg.market.entity.MkConsumeCashback;
|
||||
|
||||
/**
|
||||
* 服务层。
|
||||
*
|
||||
* @author zs
|
||||
* @since 2025-10-13
|
||||
*/
|
||||
public interface MkConsumeCashbackService extends IService<MkConsumeCashback> {
|
||||
MkConsumeCashbackVO detail(Long shopId);
|
||||
|
||||
Boolean edit(Long shopId, MkConsumeCashbackDTO consumeDiscountDTO) throws ApiNotPrintException;
|
||||
}
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
package com.czg.market.vo;
|
||||
|
||||
import com.czg.market.entity.MkConsumeCashbackStep;
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Administrator
|
||||
*/
|
||||
@Data
|
||||
public class MkConsumeCashbackRecordVO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 订单号
|
||||
*/
|
||||
private String orderNo;
|
||||
|
||||
/**
|
||||
* 主店id
|
||||
*/
|
||||
private Long mainShopId;
|
||||
|
||||
/**
|
||||
* 分店id
|
||||
*/
|
||||
private Long shopId;
|
||||
|
||||
/**
|
||||
* 支付金额
|
||||
*/
|
||||
private BigDecimal amount;
|
||||
|
||||
/**
|
||||
* 返现金额
|
||||
*/
|
||||
private BigDecimal cashbackAmount;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 店铺用户id
|
||||
*/
|
||||
private Long shopUserId;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 订单id
|
||||
*/
|
||||
private Long orderId;
|
||||
|
||||
private String shopName;
|
||||
private String phone;
|
||||
private String nickName;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
package com.czg.market.vo;
|
||||
|
||||
import com.czg.market.entity.MkConsumeCashbackStep;
|
||||
import com.czg.market.entity.MkConsumeDiscountRandom;
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Administrator
|
||||
*/
|
||||
@Data
|
||||
public class MkConsumeCashbackVO implements Serializable {
|
||||
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 主店id
|
||||
*/
|
||||
private Long mainShopId;
|
||||
|
||||
/**
|
||||
* all 全部可用 part部分门店可用
|
||||
*/
|
||||
private String useType;
|
||||
|
||||
/**
|
||||
* 门店列表
|
||||
*/
|
||||
private String shopIdList;
|
||||
|
||||
/**
|
||||
* 适用用户 all全部用户 new新用户 vip会员
|
||||
*/
|
||||
private String applicableUser;
|
||||
|
||||
/**
|
||||
* 返现类型 percentage比例 fix固定
|
||||
*/
|
||||
private String cashbackType;
|
||||
|
||||
/**
|
||||
* 返现配置
|
||||
*/
|
||||
private List<MkConsumeCashbackStep> cashbackStepList;
|
||||
|
||||
/**
|
||||
* 是否启用
|
||||
*/
|
||||
private Integer isEnable;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 修改时间
|
||||
*/
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
package com.czg.service.market.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import com.czg.market.entity.MkConsumeCashback;
|
||||
|
||||
/**
|
||||
* 映射层。
|
||||
*
|
||||
* @author zs
|
||||
* @since 2025-10-13
|
||||
*/
|
||||
public interface MkConsumeCashbackMapper extends BaseMapper<MkConsumeCashback> {
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package com.czg.service.market.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import com.czg.market.entity.MkConsumeCashbackRecord;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 消费返现明细 映射层。
|
||||
*
|
||||
* @author zs
|
||||
* @since 2025-10-13
|
||||
*/
|
||||
public interface MkConsumeCashbackRecordMapper extends BaseMapper<MkConsumeCashbackRecord> {
|
||||
|
||||
BigDecimal sumCachbackAmount();
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
package com.czg.service.market.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.czg.account.entity.ShopInfo;
|
||||
import com.czg.account.entity.ShopUser;
|
||||
import com.czg.market.vo.MkConsumeCashbackRecordVO;
|
||||
import com.czg.order.entity.OrderInfo;
|
||||
import com.czg.utils.MyQueryWrapper;
|
||||
import com.czg.utils.PageUtil;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.czg.market.entity.MkConsumeCashbackRecord;
|
||||
import com.czg.market.service.MkConsumeCashbackRecordService;
|
||||
import com.czg.service.market.mapper.MkConsumeCashbackRecordMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 消费返现明细 服务层实现。
|
||||
*
|
||||
* @author zs
|
||||
* @since 2025-10-13
|
||||
*/
|
||||
@Service
|
||||
public class MkConsumeCashbackRecordServiceImpl extends ServiceImpl<MkConsumeCashbackRecordMapper, MkConsumeCashbackRecord> implements MkConsumeCashbackRecordService{
|
||||
@Override
|
||||
public Map<String, Object> getRecord(Long mainShopId, Long shopId, String key, LocalDateTime startTime, LocalDateTime endTime) {
|
||||
QueryWrapper queryWrapper = new MyQueryWrapper().eq(MkConsumeCashbackRecord::getMainShopId, mainShopId)
|
||||
.selectAll(MkConsumeCashbackRecord.class)
|
||||
.select(ShopInfo::getShopName)
|
||||
.select(ShopUser::getPhone, ShopUser::getNickName)
|
||||
.leftJoin(ShopInfo.class).on(ShopInfo::getId, MkConsumeCashbackRecord::getShopId)
|
||||
.leftJoin(OrderInfo.class).on(OrderInfo::getId, MkConsumeCashbackRecord::getOrderId)
|
||||
.leftJoin(ShopUser.class).on(ShopUser::getId, MkConsumeCashbackRecord::getShopUserId)
|
||||
.eq(MkConsumeCashbackRecord::getShopId, shopId);
|
||||
QueryWrapper totalQuery = new QueryWrapper()
|
||||
.leftJoin(ShopInfo.class).on(ShopInfo::getId, MkConsumeCashbackRecord::getShopId)
|
||||
.leftJoin(OrderInfo.class).on(OrderInfo::getId, MkConsumeCashbackRecord::getOrderId)
|
||||
.leftJoin(ShopUser.class).on(ShopUser::getId, MkConsumeCashbackRecord::getShopUserId)
|
||||
.eq(MkConsumeCashbackRecord::getMainShopId, mainShopId).eq(MkConsumeCashbackRecord::getShopId, shopId);
|
||||
if (StrUtil.isNotBlank(key)) {
|
||||
totalQuery.and(and -> {
|
||||
and.or(or -> {
|
||||
or.like(ShopInfo::getShopName, key);
|
||||
}).or(or -> {
|
||||
or.like(OrderInfo::getOrderNo, key);
|
||||
}).or(or -> {
|
||||
or.like(ShopUser::getPhone, key);
|
||||
}).or(or -> {
|
||||
or.like(ShopUser::getNickName, key);
|
||||
});
|
||||
});
|
||||
queryWrapper.and(and -> {
|
||||
and.or(or -> {
|
||||
or.like(ShopInfo::getShopName, key);
|
||||
}).or(or -> {
|
||||
or.like(OrderInfo::getOrderNo, key);
|
||||
}).or(or -> {
|
||||
or.like(ShopUser::getPhone, key);
|
||||
}).or(or -> {
|
||||
or.like(ShopUser::getNickName, key);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
BigDecimal amount = getOneAs(totalQuery.select("SUM(cashback_amount)"), BigDecimal.class);
|
||||
Map<String, Object> map = BeanUtil.beanToMap(pageAs(PageUtil.buildPage(), queryWrapper, MkConsumeCashbackRecordVO.class));
|
||||
map.put("totalAmount", amount);
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
package com.czg.service.market.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import com.czg.account.entity.ShopInfo;
|
||||
import com.czg.account.service.ShopInfoService;
|
||||
import com.czg.constant.TableValueConstant;
|
||||
import com.czg.exception.ApiNotPrintException;
|
||||
import com.czg.market.dto.MkConsumeCashbackDTO;
|
||||
import com.czg.market.dto.MkConsumeDiscountDTO;
|
||||
import com.czg.market.entity.MkConsumeCashbackStep;
|
||||
import com.czg.market.entity.MkConsumeDiscount;
|
||||
import com.czg.market.entity.MkConsumeDiscountRandom;
|
||||
import com.czg.market.vo.MkConsumeCashbackVO;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.core.update.UpdateWrapper;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.czg.market.entity.MkConsumeCashback;
|
||||
import com.czg.market.service.MkConsumeCashbackService;
|
||||
import com.czg.service.market.mapper.MkConsumeCashbackMapper;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 服务层实现。
|
||||
*
|
||||
* @author zs
|
||||
* @since 2025-10-13
|
||||
*/
|
||||
@Service
|
||||
public class MkConsumeCashbackServiceImpl extends ServiceImpl<MkConsumeCashbackMapper, MkConsumeCashback> implements MkConsumeCashbackService{
|
||||
@DubboReference
|
||||
private ShopInfoService shopInfoService;
|
||||
@Override
|
||||
public MkConsumeCashbackVO detail(Long shopId) {
|
||||
MkConsumeCashback consumeCashback = getOne(new QueryWrapper().eq(MkConsumeCashback::getMainShopId, shopId));
|
||||
if (consumeCashback == null) {
|
||||
consumeCashback = new MkConsumeCashback();
|
||||
consumeCashback.setMainShopId(shopId);
|
||||
save(consumeCashback);
|
||||
consumeCashback = getOne(new QueryWrapper().eq(MkConsumeCashback::getMainShopId, shopId));
|
||||
}
|
||||
MkConsumeCashbackVO consumeCashbackVO = BeanUtil.copyProperties(consumeCashback, MkConsumeCashbackVO.class, "cashbackInfo");
|
||||
if (StrUtil.isNotBlank(consumeCashback.getCashbackStepList())) {
|
||||
consumeCashbackVO.setCashbackStepList(JSONArray.parseArray(consumeCashback.getCashbackStepList()).toList(MkConsumeCashbackStep.class));
|
||||
}
|
||||
|
||||
return consumeCashbackVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean edit(Long shopId, MkConsumeCashbackDTO consumeDiscountDTO) {
|
||||
MkConsumeCashback consumeCashback = getOne(new QueryWrapper().eq(MkConsumeCashback::getMainShopId, shopId));
|
||||
BeanUtil.copyProperties(consumeDiscountDTO, consumeCashback);
|
||||
// 包含的店铺开启余额支付
|
||||
if ("all".equals(consumeDiscountDTO.getUseType())) {
|
||||
shopInfoService.update(new ShopInfo().setIsAccountPay(1), new QueryWrapper().eq(ShopInfo::getMainId, shopId));
|
||||
}else {
|
||||
if (consumeDiscountDTO.getShopIdList() != null) {
|
||||
shopInfoService.update(new ShopInfo().setIsAccountPay(1), new QueryWrapper().eq(ShopInfo::getMainId, shopId).in(ShopInfo::getId, consumeDiscountDTO.getShopIdList()));
|
||||
consumeCashback.setShopIdList(JSONArray.toJSONString(consumeDiscountDTO.getShopIdList()));
|
||||
}
|
||||
}
|
||||
|
||||
if (consumeDiscountDTO.getCashbackStepList() != null && !consumeDiscountDTO.getCashbackStepList().isEmpty()) {
|
||||
consumeCashback.setCashbackStepList(JSONArray.toJSONString(consumeDiscountDTO));
|
||||
}
|
||||
return updateById(consumeCashback);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<?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.czg.service.market.mapper.MkConsumeCashbackMapper">
|
||||
|
||||
</mapper>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?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.czg.service.market.mapper.MkConsumeCashbackRecordMapper">
|
||||
|
||||
<select id="sumCachbackAmount" resultType="java.math.BigDecimal">
|
||||
|
||||
</select>
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue