Merge branch '2.0' of http://120.76.84.145:10101/gitblit/r/java/HongRuiTang into 2.0
| | |
| | | |
| | | <modules> |
| | | <module>ruoyi-api-system</module> |
| | | <module>ruoyi-api-goods</module> |
| | | </modules> |
| | | |
| | | <artifactId>ruoyi-api</artifactId> |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-api</artifactId> |
| | | <version>3.6.2</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | | <artifactId>ruoyi-api-goods</artifactId> |
| | | |
| | | <description> |
| | | ruoyi-api-goods系统接口模块 |
| | | </description> |
| | | |
| | | <dependencies> |
| | | |
| | | <!-- RuoYi Common Core--> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common-core</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- MYBATIS PLUS--> |
| | | <dependency> |
| | | <groupId>com.baomidou</groupId> |
| | | <artifactId>mybatis-plus-boot-starter</artifactId> |
| | | <version>3.4.1</version> |
| | | <!-- pagehelper 包含该依赖存在版本冲突,因此不建议和 mp 一起混用 --> |
| | | <exclusions> |
| | | <exclusion> |
| | | <groupId>com.github.jsqlparser</groupId> |
| | | <artifactId>jsqlparser</artifactId> |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.baomidou</groupId> |
| | | <artifactId>mybatis-plus-annotation</artifactId> |
| | | <version>3.4.1</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.baomidou</groupId> |
| | | <artifactId>mybatis-plus-generate</artifactId> |
| | | <version>2.3.3</version> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
New file |
| | |
| | | package com.ruoyi.goods.api.domain; |
| | | |
| | | 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 io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/8 17:03 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = false) |
| | | @Accessors(chain = true) |
| | | @TableName("t_lottery_event") |
| | | public class LotteryEvent { |
| | | /** |
| | | * 主键 |
| | | */ |
| | | @TableId(value = "id", type = IdType.INPUT) |
| | | @ApiModelProperty("活动id") |
| | | private String id; |
| | | /** |
| | | * 门店id |
| | | */ |
| | | @TableField("shop_id") |
| | | @ApiModelProperty("门店id") |
| | | private Integer shopId; |
| | | /** |
| | | * 抽奖名称 |
| | | */ |
| | | @TableField("name") |
| | | @ApiModelProperty("抽奖名称") |
| | | private String name; |
| | | /** |
| | | * 活动简介名称 |
| | | */ |
| | | @TableField("activity_profile") |
| | | @ApiModelProperty("活动简介名称") |
| | | private String activityProfile; |
| | | /** |
| | | * 开启方式(1=新注册用户,2=下单,3=分享小程序,4=普通抽奖,5=答题抽奖) |
| | | */ |
| | | @TableField("activity_type") |
| | | @ApiModelProperty("开启方式(1=新注册用户,2=下单,3=分享小程序,4=普通抽奖,5=答题抽奖)") |
| | | private Integer activityType; |
| | | /** |
| | | * 可抽奖次数 |
| | | */ |
| | | @TableField("times") |
| | | @ApiModelProperty("可抽奖次数") |
| | | private Integer times; |
| | | /** |
| | | * 活动开始时间 |
| | | */ |
| | | @TableField("start_time") |
| | | @ApiModelProperty("活动开始时间") |
| | | private LocalDateTime startTime; |
| | | /** |
| | | * 活动结束时间 |
| | | */ |
| | | @TableField("end_time") |
| | | @ApiModelProperty("活动结束时间") |
| | | private LocalDateTime endTime; |
| | | /** |
| | | * 分享抽奖间隔天数 |
| | | */ |
| | | @TableField("interval_time") |
| | | @ApiModelProperty("分享抽奖间隔天数") |
| | | private Integer intervalTime; |
| | | /** |
| | | * 下单支付金额 |
| | | */ |
| | | @TableField("pay_money") |
| | | @ApiModelProperty("下单支付金额") |
| | | private BigDecimal payMoney; |
| | | /** |
| | | * 答题抽奖正确率% |
| | | */ |
| | | @TableField("accuracy") |
| | | @ApiModelProperty("答题抽奖正确率%") |
| | | private BigDecimal accuracy; |
| | | /** |
| | | * 答题时间限制(分钟) |
| | | */ |
| | | @TableField("answering_time") |
| | | @ApiModelProperty("答题时间限制(分钟)") |
| | | private Integer answeringTime; |
| | | /** |
| | | * 封面图 |
| | | */ |
| | | @TableField("cover_image") |
| | | @ApiModelProperty("封面图") |
| | | private String coverImage; |
| | | /** |
| | | * 详情介绍 |
| | | */ |
| | | @TableField("activity_content") |
| | | @ApiModelProperty("详情介绍") |
| | | private String activityContent; |
| | | /** |
| | | * 删除标记 |
| | | */ |
| | | @TableField("del_flag") |
| | | private Integer delFlag; |
| | | /** |
| | | * 创建用户id |
| | | */ |
| | | @TableField("create_user_id") |
| | | private Integer createUserId; |
| | | /** |
| | | * 创建时间 |
| | | */ |
| | | @TableField("create_time") |
| | | private LocalDateTime createTime; |
| | | /** |
| | | * 更新用户id |
| | | */ |
| | | @TableField("update_user_id") |
| | | private Long updateUserId; |
| | | /** |
| | | * 更新时间 |
| | | */ |
| | | @TableField("update_time") |
| | | private LocalDateTime updateTime; |
| | | |
| | | @ApiModelProperty("奖品列表") |
| | | private List<LotteryEventPrize> prizes; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.api.domain; |
| | | |
| | | import com.baomidou.mybatisplus.annotations.TableField; |
| | | import com.baomidou.mybatisplus.annotations.TableId; |
| | | import com.baomidou.mybatisplus.annotations.TableName; |
| | | import com.baomidou.mybatisplus.enums.IdType; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/12 9:50 |
| | | */ |
| | | @Data |
| | | @TableName("t_lottery_event_prize") |
| | | public class LotteryEventPrize { |
| | | /** |
| | | * 主键 |
| | | */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | @ApiModelProperty("奖品id") |
| | | private String id; |
| | | /** |
| | | * 抽奖id |
| | | */ |
| | | @TableField("lottery_event_id") |
| | | @ApiModelProperty("抽奖id") |
| | | private String lotteryEventId; |
| | | /** |
| | | * 奖品类型(1=优惠券,2=平台商品,3=线下商品,4=积分) |
| | | */ |
| | | @TableField("prize_type") |
| | | @ApiModelProperty("奖品类型(1=优惠券,2=平台商品,3=线下商品,4=积分)") |
| | | private Integer prizeType; |
| | | /** |
| | | * 奖品id |
| | | */ |
| | | @TableField("object_id") |
| | | @ApiModelProperty("奖品id") |
| | | private String objectId; |
| | | /** |
| | | * 奖品名称 |
| | | */ |
| | | @TableField("object_name") |
| | | @ApiModelProperty("奖品名称") |
| | | private String objectName; |
| | | /** |
| | | * 奖品数量 |
| | | */ |
| | | @TableField("number") |
| | | @ApiModelProperty("奖品数量") |
| | | private Integer number; |
| | | /** |
| | | * 中奖率% |
| | | */ |
| | | @TableField("win_rate") |
| | | @ApiModelProperty("中奖率%") |
| | | private BigDecimal winRate; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.api.domain; |
| | | |
| | | 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 lombok.Data; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 18:00 |
| | | */ |
| | | @Data |
| | | @TableName("t_lottery_event_questions") |
| | | public class LotteryEventQuestions { |
| | | /** |
| | | * 数据id |
| | | */ |
| | | @TableId(value = "id", type = IdType.INPUT) |
| | | private String id; |
| | | /** |
| | | * 抽奖活动id |
| | | */ |
| | | @TableField(value = "lottery_event_id") |
| | | private String lotteryEventId; |
| | | /** |
| | | * 题干名称 |
| | | */ |
| | | @TableField(value = "name") |
| | | private String name; |
| | | /** |
| | | * 排序 |
| | | */ |
| | | @TableField(value = "sort") |
| | | private Integer sort; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.api.domain; |
| | | |
| | | 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 lombok.Data; /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/19 16:15 |
| | | */ |
| | | @Data |
| | | @TableName("t_lottery_event_questions_answers") |
| | | public class LotteryEventQuestionsAnswers { |
| | | /** |
| | | * id |
| | | */ |
| | | @TableId(value = "id", type = IdType.INPUT) |
| | | private String id; |
| | | /** |
| | | * 抽奖id |
| | | */ |
| | | @TableField(value = "lottery_event_id") |
| | | private String lotteryEventId; |
| | | /** |
| | | * 抽奖答题id |
| | | */ |
| | | @TableField(value = "lottery_event_questions_id") |
| | | private String lotteryEventQuestionsId; |
| | | /** |
| | | * 答案 |
| | | */ |
| | | @TableField(value = "answer") |
| | | private String answer; |
| | | /** |
| | | * 是否是正确答案(0=否,1=是) |
| | | */ |
| | | @TableField(value = "is_right") |
| | | private Integer isRight; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.api.domain; |
| | | |
| | | import com.baomidou.mybatisplus.annotations.TableField; |
| | | import com.baomidou.mybatisplus.annotations.TableId; |
| | | import com.baomidou.mybatisplus.annotations.TableName; |
| | | import com.baomidou.mybatisplus.enums.IdType; |
| | | import lombok.Data; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/12 10:34 |
| | | */ |
| | | @Data |
| | | @TableName("t_user_lottery_event") |
| | | public class UserLotteryEvent { |
| | | /** |
| | | * 主键 |
| | | */ |
| | | @TableId(value = "id", type = IdType.INPUT) |
| | | private String id; |
| | | /** |
| | | * 用户id |
| | | */ |
| | | @TableField(value = "user_id") |
| | | private Long userId; |
| | | /** |
| | | * 抽奖id |
| | | */ |
| | | @TableField(value = "lottery_event_id") |
| | | private String lotteryEventId; |
| | | /** |
| | | * 抽奖奖品id |
| | | */ |
| | | @TableField(value = "lottery_event_prize_id") |
| | | private String lotteryEventPrizeId; |
| | | /** |
| | | * 奖品类型(1=优惠券,2=平台商品,3=线下商品,4=积分,5=未中奖) |
| | | */ |
| | | @TableField(value = "prize_type") |
| | | private Integer prizeType; |
| | | /** |
| | | * 奖品id |
| | | */ |
| | | @TableField(value = "object_id") |
| | | private String objectId; |
| | | /** |
| | | * 奖品名称 |
| | | */ |
| | | @TableField(value = "object_name") |
| | | private String objectName; |
| | | /** |
| | | * 奖品数量 |
| | | */ |
| | | @TableField(value = "number") |
| | | private Integer number; |
| | | /** |
| | | * 中奖时间 |
| | | */ |
| | | @TableField(value = "create_time") |
| | | private LocalDateTime createTime; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.api.domain; |
| | | |
| | | 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 lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * 用户抽奖答题记录 |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/19 16:01 |
| | | */ |
| | | @Data |
| | | @TableName("t_user_lottery_event_questions") |
| | | public class UserLotteryEventQuestions { |
| | | /** |
| | | * id |
| | | */ |
| | | @TableId(value = "id", type = IdType.INPUT) |
| | | private String id; |
| | | /** |
| | | * 用户id |
| | | */ |
| | | @TableField(value = "user_id") |
| | | private Long userId; |
| | | /** |
| | | * 抽奖活动id |
| | | */ |
| | | @TableField(value = "lottery_event_id") |
| | | private String lotteryEventId; |
| | | /** |
| | | * 答题开始时间 |
| | | */ |
| | | @TableField(value = "create_time") |
| | | private LocalDateTime createTime; |
| | | /** |
| | | * 答题结束时间 |
| | | */ |
| | | @TableField(value = "end_time") |
| | | private LocalDateTime endTime; |
| | | /** |
| | | * 状态(1=已开始,2=已结束) |
| | | */ |
| | | @TableField(value = "status") |
| | | private Integer status; |
| | | /** |
| | | * 正确率 |
| | | */ |
| | | @TableField(value = "correct_answer_rate") |
| | | private BigDecimal correctAnswerRate; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.api.domain; |
| | | |
| | | 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 lombok.Data; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * 用户抽奖答题记录 |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/19 16:01 |
| | | */ |
| | | @Data |
| | | @TableName("t_user_lottery_event_questions_answers") |
| | | public class UserLotteryEventQuestionsAnswers { |
| | | /** |
| | | * id |
| | | */ |
| | | @TableId(value = "id", type = IdType.INPUT) |
| | | private String id; |
| | | /** |
| | | * 用户id |
| | | */ |
| | | @TableField(value = "user_id") |
| | | private Long userId; |
| | | /** |
| | | * 抽奖活动id |
| | | */ |
| | | @TableField(value = "lottery_event_id") |
| | | private String lotteryEventId; |
| | | /** |
| | | * 抽奖活动题干id |
| | | */ |
| | | @TableField(value = "lottery_event_question_id") |
| | | private String lotteryEventQuestionId; |
| | | /** |
| | | * 抽奖活动题干选项id |
| | | */ |
| | | @TableField(value = "lottery_event_questions_answers_id") |
| | | private String lotteryEventQuestionsAnswersId; |
| | | /** |
| | | * 是否正确(0=否,1=是) |
| | | */ |
| | | @TableField(value = "is_correct") |
| | | private Integer isCorrect; |
| | | /** |
| | | * 创建时间 |
| | | */ |
| | | @TableField(value = "create_time") |
| | | private LocalDateTime createTime; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.api.factory; |
| | | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.goods.api.domain.LotteryEvent; |
| | | import com.ruoyi.goods.api.service.LotteryEventClient; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/8 18:12 |
| | | */ |
| | | public class LotteryEventFallbackFactory implements FallbackFactory<LotteryEventClient> { |
| | | @Override |
| | | public LotteryEventClient create(Throwable cause) { |
| | | return new LotteryEventClient() { |
| | | |
| | | @Override |
| | | public R<List<LotteryEvent>> getLotteryEventList(Integer activityType) { |
| | | return R.fail("根据开启方式获取活动列表失败:" + cause.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.api.service; |
| | | |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.goods.api.domain.LotteryEvent; |
| | | import com.ruoyi.goods.api.factory.LotteryEventFallbackFactory; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/8 18:11 |
| | | */ |
| | | @FeignClient(contextId = "LotteryEventClient", value = ServiceNameConstants.GOODS_SERVICE, fallbackFactory = LotteryEventFallbackFactory.class) |
| | | public interface LotteryEventClient { |
| | | |
| | | |
| | | /** |
| | | * 根据开启方式获取活动列表 |
| | | * @param activityType |
| | | * @return |
| | | */ |
| | | @PostMapping("/lotteryEvent/getLotteryEventList") |
| | | R<List<LotteryEvent>> getLotteryEventList(@RequestParam("activityType") Integer activityType); |
| | | } |
New file |
| | |
| | | com.ruoyi.goods.api.factory.LotteryEventFallbackFactory |
| | |
| | | HOME_STYLE("HOME_STYLE", 2,"首页风格"), |
| | | HOME_SLOGAN("HOME_SLOGAN", 1,"首页广告语"), |
| | | HOME_LOGO("HOME_LOGO", 1,"首页logo"), |
| | | SHOP_COMMON_PROPORTION("SHOP_COMMON_PROPORTION", 3,"商户统一分成"); |
| | | SHOP_COMMON_PROPORTION("SHOP_COMMON_PROPORTION", 3,"商户统一分成"), |
| | | STORE_COURSE_DISPLAY_NAME("STORE_COURSE_DISPLAY_NAME", 2,"门店课程设置-展示名称"), |
| | | STORE_COURSE_DISPLAY_PASSWORD("STORE_COURSE_DISPLAY_PASSWORD", 2,"门店课程设置-验证密码"); |
| | | |
| | | |
| | | |
| | |
| | | COUPON_SEND_DELAY_TASK("优惠券延时任务","定时启动优惠券发送"), |
| | | ACTIVITY_START_TASK("活动延时任务","定时开始任务"), |
| | | ACTIVITY_END_TASK("活动延时任务","定时结束任务"), |
| | | LIVE_APPOINTMENT_TASK("直播预约任务","直播预约任务") |
| | | ; |
| | | |
| | | String name; |
New file |
| | |
| | | package com.ruoyi.system.api.domain.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 14:49 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class AppointmentTimeDto { |
| | | @ApiModelProperty("门店id") |
| | | private Integer shopId; |
| | | @ApiModelProperty("预约时间(2025-01-01 14:00:00)") |
| | | private String time; |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 16:20 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class LotteryEventListDto extends AppBaseDto { |
| | | |
| | | @ApiModelProperty(name = "pagenum", value = "页码") |
| | | private Integer pageNum = 1; |
| | | |
| | | |
| | | @ApiModelProperty(name = "pagesize", value = "每页显示条数") |
| | | private Integer pageSize = 20; |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain.dto; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 14:38 |
| | | */ |
| | | @Data |
| | | public class ShopAppointmentTimeDto extends AppBaseDto{ |
| | | |
| | | @ApiModelProperty(value = "请求对象id") |
| | | private String id; |
| | | |
| | | @ApiModelProperty(value = "查询时间(2025-01-01)") |
| | | private String date; |
| | | } |
| | |
| | | */ |
| | | @TableField("belong_district") |
| | | private String belongDistrict; |
| | | |
| | | |
| | | @TableField("frozen_flag") |
| | | private Integer frozenFlag; |
| | | |
| | | |
| | | /** |
| | | * 绑定类型1商城订单2活动订单3线下订单4核销优惠券5核销奖品6商户创建7平台变动8商户绑定 |
| | | */ |
| | | @TableField("binding_type") |
| | | private Integer bindingType; |
| | | |
| | | /** |
| | | * 上次确认服务的id |
| | | */ |
| | | @TableField("last_service_id") |
| | | private String lastServiceId; |
| | | |
| | | @Override |
| | | protected Serializable pkVal() { |
| | | return this.userId; |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | @TableField("coupon_name") |
| | | private String couponName; |
| | | /** |
| | | * 发送类型1.手动领取2.指定发放 |
| | | * 发送类型1.手动领取2.指定发放,3.抽奖领取 |
| | | */ |
| | | @TableField("send_type") |
| | | private Integer sendType; |
| | |
| | | * 礼品id |
| | | */ |
| | | @TableField("gift_id") |
| | | private Long giftId; |
| | | private String giftId; |
| | | /** |
| | | * 礼物来源1平台2商户 |
| | | */ |
| | | @TableField("gift_from") |
| | | private Integer giftFrom; |
| | | /** |
| | | * 奖品来源(1=生日卡,2=抽奖) |
| | | */ |
| | | @TableField("prize_from") |
| | | private Integer prizeFrom; |
| | | /** |
| | | * 商户id |
| | | */ |
| | | @TableField("shop_id") |
| | | private Long shopId; |
| | | /** |
| | | * 礼物类型1优惠券2商品3现金4实物 |
| | | * 礼物类型1优惠券2商品3现金4实物5积分 |
| | | */ |
| | | @TableField("gift_type") |
| | | private Integer giftType; |
| | |
| | | */ |
| | | private BigDecimal money; |
| | | /** |
| | | * 积分数量 |
| | | */ |
| | | @TableField("integral_number") |
| | | private Integer integralNumber; |
| | | /** |
| | | * 创建时间 |
| | | */ |
| | | @TableField("create_time") |
| | |
| | | @TableField("platform_birthday_flag") |
| | | private Integer platformBirthdayFlag; |
| | | /** |
| | | * 抽奖1开2关 |
| | | */ |
| | | @TableField("lottery_draw_flag") |
| | | private Integer lotteryDrawFlag; |
| | | /** |
| | | * 店铺设置状态 |
| | | */ |
| | | @TableField("shop_custom_status") |
| | |
| | | */ |
| | | @TableField("shop_code") |
| | | private String shopCode; |
| | | |
| | | |
| | | |
| | | /** |
| | | * 小鹅通讲师id |
| | | */ |
| | | @TableField("xiaoe_user_id") |
| | | private String xiaoeUserId; |
| | | |
| | | /** |
| | | * 预约状态(0=关,1=开) |
| | | */ |
| | | @TableField("subscribe") |
| | | private Integer subscribe; |
| | | |
| | | /** |
| | | * 修改价格权限(0=关,1=开) |
| | | */ |
| | | @TableField("modify_price_permission") |
| | | private Integer modifyPricePermission; |
| | | |
| | | /** |
| | | * 抖音门店id |
| | | */ |
| | | @TableField("poi_id") |
| | | private String poiId; |
| | | |
| | | |
| | | @Override |
| | | protected Serializable pkVal() { |
| | | return this.shopId; |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain.poji.shop; |
| | | |
| | | 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 lombok.Data; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 14:54 |
| | | */ |
| | | @Data |
| | | @TableName |
| | | public class ShopAppointableTime { |
| | | /** |
| | | * 主键 |
| | | */ |
| | | @TableId(value = "id", type = IdType.INPUT) |
| | | private String id; |
| | | /** |
| | | * 商户id |
| | | */ |
| | | @TableField("shop_id") |
| | | private Integer shopId; |
| | | /** |
| | | * 用户id |
| | | */ |
| | | @TableField("user_id") |
| | | private Long userId; |
| | | /** |
| | | * 预约时间 |
| | | */ |
| | | @TableField("appointable_time") |
| | | private LocalDateTime appointableTime; |
| | | /** |
| | | * 状态(0=已取消,1=待确认,2=等待中,3=已结束) |
| | | */ |
| | | @TableField("status") |
| | | private Integer status; |
| | | /** |
| | | * 添加时间 |
| | | */ |
| | | @TableField("create_time") |
| | | private LocalDateTime createTime; |
| | | /** |
| | | * 商家取消原因 |
| | | */ |
| | | @TableField("reason") |
| | | private String reason; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain.poji.shop; |
| | | |
| | | 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 io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 14:25 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | @TableName("t_shop_non_appointable_time") |
| | | public class ShopNonAppointableTime { |
| | | /** |
| | | * 主键 |
| | | */ |
| | | @TableId(value = "id", type = IdType.INPUT) |
| | | private String id; |
| | | /** |
| | | * 商户id |
| | | */ |
| | | @TableField("shop_id") |
| | | private Integer shopId; |
| | | /** |
| | | * 不可预约开始时间 |
| | | */ |
| | | @TableField("non_appointable_start_time") |
| | | @ApiModelProperty("不可预约开始时间") |
| | | private LocalDateTime nonAppointableStartTime; |
| | | /** |
| | | * 不可预约结束时间 |
| | | */ |
| | | @TableField("non_appointable_end_time") |
| | | @ApiModelProperty("不可预约结束时间") |
| | | private LocalDateTime nonAppointableEndTime; |
| | | } |
| | |
| | | |
| | | @ApiModelProperty(value = "剩余周期人数") |
| | | private Integer cycleSurp; |
| | | |
| | | |
| | | @ApiModelProperty(value = "剩余体验人数") |
| | | private Integer explorationSurp; |
| | | |
| | | |
| | | @ApiModelProperty(value = "领券1开2关") |
| | | private Integer platformCouponFlag; |
| | | |
| | | |
| | | @ApiModelProperty(value = "生日卡1开2关") |
| | | private Integer platformBirthdayFlag; |
| | | |
| | | |
| | | @ApiModelProperty(value = "待处理预约单数量") |
| | | private Integer unHandleReserve; |
| | | |
| | | } |
| | |
| | | |
| | | @Data |
| | | public class ShopRelUserVo { |
| | | |
| | | @ApiModelProperty(value="商户id") |
| | | |
| | | @ApiModelProperty(value = "商户id") |
| | | private Long shopId; |
| | | |
| | | @ApiModelProperty(value="用户姓名") |
| | | |
| | | @ApiModelProperty(value = "商户数量") |
| | | private Integer shopNum; |
| | | |
| | | @ApiModelProperty(value = "商户名称") |
| | | private String shopName; |
| | | |
| | | @ApiModelProperty(value = "用户姓名") |
| | | private String userName; |
| | | } |
| | |
| | | |
| | | |
| | | @Override |
| | | public R<String> getStoreCurriculumPassword() { |
| | | return R.fail("获取门店课程验证密码失败:" + throwable.getMessage()); |
| | | } |
| | | @Override |
| | | public R<String> getStoreCurriculumName() { |
| | | return R.fail("获取门店课程展示名称失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<SysTag>> listSysTag(Integer tagType) { |
| | | return R.fail("获取标签失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public R<List<Activeness>> listActiveness() { |
| | | return R.fail("获取活跃度列表失败:" + throwable.getMessage()); |
| | |
| | | public R useMemberCoupon(String memberCouponIds) { |
| | | return R.fail("使用优惠券失败" + throwable.getMessage()); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public R backMemberCoupon(String memberCouponIds) { |
| | | return R.fail("回退优惠券失败" + throwable.getMessage()); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public R sureMemberCoupon(MerVerifyMemberCouponDto merVerifyMemberCouponDto) { |
| | | return R.fail("确认核销优惠券失败" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R addMemberCoupon(String couponId, Integer number, Long userId) { |
| | | return R.fail("手动添加用户优惠券失败:" + throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | |
| | |
| | | public R<List<String>> listGoodsNameByGoodsClass(Long classId) { |
| | | return R.fail("获取分类商品列表失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<?> push(Long appointmentId) { |
| | | return R.fail("推送小程序订阅消息失败:" + throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
| | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.domain.dto.*; |
| | | import com.ruoyi.system.api.domain.poji.member.BirthdayCard; |
| | | import com.ruoyi.system.api.domain.poji.member.Member; |
| | | import com.ruoyi.system.api.domain.poji.member.MemberGiftRecord; |
| | | import com.ruoyi.system.api.domain.vo.*; |
| | | import com.ruoyi.system.api.service.RemoteMemberService; |
| | | import com.ruoyi.system.api.domain.poji.member.Member; |
| | | import com.ruoyi.system.api.model.AppMiniLoginDto; |
| | | import com.ruoyi.system.api.model.AppMiniLoginVo; |
| | | import com.ruoyi.system.api.service.RemoteMemberService; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | |
| | | public R<Integer> getUnReplaySuggestVo() { |
| | | return null; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public R<MemberGiftRecord> getVerifyPrize(String verifyPrize) { |
| | | return R.fail("获取核销奖品信息失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | |
| | | |
| | | @Override |
| | | public R<MemberGiftRecord> getVerifyPrizeByGiftId(String giftId) { |
| | | return R.fail("根据礼品id获取数据失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R signShare(IntegralChangeDto integralChangeDto) { |
| | | return R.fail("积分变动失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public R<Integer> getAreaNewMember(List<Long> shopIdList) { |
| | | return null; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public R updateMemberShopName(MgtMemberShopNameDto mgtMemberShopNameDto) { |
| | | return R.fail("更新商户绑定会员失败:" + throwable.getMessage()); |
| | |
| | | public R verifyPrize(MerVerifyPrizeFinalDto merVerifyPrizeFinalDto) { |
| | | return R.fail("核销奖品失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public R<List<Long>> listUserIdByAgeType(Integer ageType) { |
| | | return R.fail("获取用户id列表失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public R<MgtBulletinBoardVo> boardMemberTotal(BoardMemberTotalDto boardMemberTotalDto) { |
| | | return R.fail(throwable.getMessage()); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public R addIntegralRecord(Integer integral, Long userId, String orderId) { |
| | | return R.fail("手动添加用户积分失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R saveMemberGiftRecord(MemberGiftRecord memberGiftRecord) { |
| | | return R.fail("添加奖品数据失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R editMember(Member member) { |
| | | return R.fail("修改会员失败:" + throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.factory; |
| | | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.domain.dto.AGStockChangeDto; |
| | | import com.ruoyi.system.api.domain.dto.ActivityGoodsGetDto; |
| | | import com.ruoyi.system.api.domain.dto.ActivityTotalChangeDto; |
| | | import com.ruoyi.system.api.domain.dto.MerActivityShopDto; |
| | | import com.ruoyi.system.api.domain.poji.activity.Activity; |
| | | import com.ruoyi.system.api.domain.poji.activity.ActivityGoods; |
| | | import com.ruoyi.system.api.domain.poji.activity.ActivityRecord; |
| | | import com.ruoyi.system.api.domain.vo.ActivityGoodsGetVo; |
| | | import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; |
| | | import com.ruoyi.system.api.service.RemoteActivityService; |
| | | import com.ruoyi.system.api.service.RemoteRegionService; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 省市区三级联动服务 |
| | | * |
| | | * @author jqs |
| | | */ |
| | | @Component |
| | | public class RemoteRegionFallbackFactory implements FallbackFactory<RemoteRegionService> |
| | | { |
| | | private static final Logger log = LoggerFactory.getLogger(RemoteRegionFallbackFactory.class); |
| | | |
| | | @Override |
| | | public RemoteRegionService create(Throwable throwable) |
| | | { |
| | | log.error("省市区三级联动服务:{}", throwable.getMessage()); |
| | | return new RemoteRegionService() |
| | | { |
| | | |
| | | |
| | | }; |
| | | } |
| | | } |
| | |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | public List<Shop> getShopBySysUserIds(BoardMemberTotalDto boardMemberTotalDto) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<Shop> getFranchiseeIdsBYDealerId(Long shopId) { |
| | | return Collections.emptyList(); |
| | | } |
| | | }; |
| | | } |
| | | } |
| | |
| | | |
| | | @Data |
| | | public class OauthUserVo { |
| | | |
| | | @ApiModelProperty(value="商户id") |
| | | |
| | | @ApiModelProperty(value = "商户id") |
| | | private Long shopId; |
| | | |
| | | @ApiModelProperty(value="成员UserID") |
| | | |
| | | @ApiModelProperty(value = "商户数量") |
| | | private Integer shopNum; |
| | | |
| | | @ApiModelProperty(value = "商户名称") |
| | | private String shopName; |
| | | |
| | | @ApiModelProperty(value = "成员UserID") |
| | | private String userid; |
| | | |
| | | @ApiModelProperty(value="手机") |
| | | |
| | | @ApiModelProperty(value = "手机") |
| | | private String mobile; |
| | | |
| | | @ApiModelProperty(value="token凭证") |
| | | |
| | | @ApiModelProperty(value = "token凭证") |
| | | private String token; |
| | | |
| | | @ApiModelProperty(value="过期时间") |
| | | |
| | | @ApiModelProperty(value = "过期时间") |
| | | private Long expiresIn; |
| | | } |
| | |
| | | |
| | | @Data |
| | | public class QwH5LoginVo { |
| | | |
| | | @ApiModelProperty(value="成员UserID") |
| | | |
| | | @ApiModelProperty(value = "成员UserID") |
| | | private String userid; |
| | | |
| | | @ApiModelProperty(value="商户id") |
| | | |
| | | @ApiModelProperty(value = "商户id") |
| | | private Long shopId; |
| | | |
| | | @ApiModelProperty(value="手机") |
| | | |
| | | @ApiModelProperty(value = "商户数量") |
| | | private Integer shopNum; |
| | | |
| | | @ApiModelProperty(value = "商户名称") |
| | | private String shopName; |
| | | |
| | | @ApiModelProperty(value = "手机") |
| | | private String mobile; |
| | | |
| | | |
| | | @ApiModelProperty(value = "用户信息") |
| | | private SysUser sysUser; |
| | | } |
| | |
| | | */ |
| | | @PostMapping("/config/createFileRecord") |
| | | public R createFileRecord(@RequestBody FileRecord fileRecord); |
| | | |
| | | |
| | | |
| | | /** |
| | | * 获取门店课程验证密码 |
| | | * @return |
| | | */ |
| | | @PostMapping("/config/getStoreCurriculumPassword") |
| | | public R<String> getStoreCurriculumPassword(); |
| | | |
| | | |
| | | |
| | | /** |
| | | * 获取门店课程展示名称 |
| | | * @return |
| | | */ |
| | | @PostMapping("/config/getStoreCurriculumName") |
| | | public R<String> getStoreCurriculumName(); |
| | | } |
| | |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | |
| | | import java.util.List; |
| | | |
| | |
| | | */ |
| | | @PostMapping("/coupon/backMemberCoupon") |
| | | public R backMemberCoupon(@RequestBody String memberCouponIds); |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * @description 确认核销优惠券 |
| | | * @author jqs |
| | | * @date 2023/8/15 11:37 |
| | | * @param merVerifyMemberCouponDto |
| | | * @return R |
| | | * @return R |
| | | * @description 确认核销优惠券 |
| | | * @author jqs |
| | | * @date 2023/8/15 11:37 |
| | | */ |
| | | @PostMapping("/coupon/verifyMemberCoupon") |
| | | public R sureMemberCoupon(@RequestBody MerVerifyMemberCouponDto merVerifyMemberCouponDto); |
| | | |
| | | |
| | | /** |
| | | * 手动添加用户优惠券 |
| | | * |
| | | * @param couponId |
| | | * @param number |
| | | * @return |
| | | */ |
| | | @PostMapping("/coupon/addMemberCoupon") |
| | | R addMemberCoupon(@RequestParam("couponId") String couponId, @RequestParam("number") Integer number, @RequestParam("userId") Long userId); |
| | | } |
| | |
| | | import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo; |
| | | import com.ruoyi.system.api.factory.RemoteGoodsFallbackFactory; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | |
| | |
| | | */ |
| | | @PostMapping("/goods/listGoodsNameByGoodsClass") |
| | | public R<List<String>> listGoodsNameByGoodsClass(@RequestBody Long classId); |
| | | |
| | | /** |
| | | * 推送微信小程序订阅消息 |
| | | * @param appointmentId |
| | | * @return |
| | | */ |
| | | @GetMapping("/live/push/{appointmentId}") |
| | | R<?> push(@PathVariable("appointmentId") Long appointmentId); |
| | | } |
| | |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | |
| | | import java.util.List; |
| | | |
| | | @FeignClient(contextId = "remoteMemberService", value = ServiceNameConstants.MEMBER_SERVICE, fallbackFactory = RemoteMemberFallbackFactory.class) |
| | | public interface RemoteMemberService { |
| | | |
| | | |
| | | @PostMapping("/member/getMember") |
| | | public R<Member> getMember(@RequestBody Long userId); |
| | | |
| | | |
| | | /** |
| | | * 小程序登录 |
| | | * |
| | |
| | | */ |
| | | @PostMapping("/member/miniLogin") |
| | | public R<AppMiniLoginVo> miniLogin(@RequestBody AppMiniLoginDto appMiniLoginDto); |
| | | |
| | | |
| | | /** |
| | | * 小程序注册 |
| | | * |
| | |
| | | */ |
| | | @PostMapping("/member/miniRegister") |
| | | public R<AppMiniRegisterVo> miniRegister(@RequestBody AppMiniRegisterDto appUserRegisterDto); |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 更新绑定 |
| | | * |
| | |
| | | */ |
| | | @PostMapping("/member/updateMemberBinding") |
| | | public R updateMemberBinding(@RequestBody AppMemberBindingDto appMemberBindingDto); |
| | | |
| | | |
| | | /** |
| | | * 更新会员商品类型 |
| | | * |
| | |
| | | */ |
| | | @PostMapping("/member/updateMemberGoodsType") |
| | | public R updateMemberGoodsType(@RequestBody AppMemberGoodsTypeDto appMemberGoodsTypeDto); |
| | | |
| | | |
| | | /** |
| | | * 通过手机号获取会员 |
| | | * |
| | |
| | | */ |
| | | @PostMapping("/member/getMemberByMobile") |
| | | public R<Member> getMemberByMobile(@RequestBody String mobile); |
| | | |
| | | |
| | | /** |
| | | * 订单创建新用户 |
| | | * |
| | |
| | | */ |
| | | @PostMapping("/member/createNewMember") |
| | | public R createNewMember(@RequestBody Member member); |
| | | |
| | | |
| | | /** |
| | | * @param tag |
| | | * @return R |
| | |
| | | */ |
| | | @PostMapping("/member/deleteMemberTag") |
| | | public R deleteMemberTag(@RequestBody String tag); |
| | | |
| | | |
| | | /** |
| | | * @param suggestTag |
| | | * @return R |
| | |
| | | */ |
| | | @PostMapping("/member/deleteMemberSuggestTag") |
| | | public R deleteMemberSuggestTag(@RequestBody String suggestTag); |
| | | |
| | | |
| | | /** |
| | | * @param mgtBaseBathDto |
| | | * @return R<List < MgtSimpleMemberVo>> |
| | |
| | | */ |
| | | @PostMapping("/member/listSimpleVoByIds") |
| | | public R<List<MgtSimpleMemberVo>> listSimpleVoByIds(@RequestBody String userIds); |
| | | |
| | | |
| | | /** |
| | | * @param mgtUserIdByKeywordDto |
| | | * @return R<MgtUserIdByKeywordVo> |
| | |
| | | */ |
| | | @PostMapping("/member/getUserIdByKeyword") |
| | | public R<MgtUserIdByKeywordVo> getUserIdByKeyword(@RequestBody MgtUserIdByKeywordDto mgtUserIdByKeywordDto); |
| | | |
| | | |
| | | /** |
| | | * @param |
| | | * @return R<MgtBulletinBoardVo> |
| | |
| | | */ |
| | | @PostMapping("/member/boardMemberTotal") |
| | | public R<MgtBulletinBoardVo> boardMemberTotal(@RequestBody BoardMemberTotalDto boardMemberTotalDto); |
| | | |
| | | |
| | | /** |
| | | * @param mgtActivityAgeDto |
| | | * @return R<List < Long>> |
| | |
| | | */ |
| | | @PostMapping("/member/listUserIdByAge") |
| | | public R<List<Long>> listUserIdByAge(@RequestBody MgtActivityAgeDto mgtActivityAgeDto); |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * @param shopIdlist |
| | | * @return R<List < Long>> |
| | |
| | | */ |
| | | @PostMapping("/member/listUserIdByShopId") |
| | | public R<List<Long>> listUserIdByShopId(@RequestBody List<Long> shopIdlist); |
| | | |
| | | |
| | | /** |
| | | * @param shopIdlist |
| | | * @return R<MgtShopTotalMemberVo> |
| | |
| | | */ |
| | | @PostMapping("/member/getUserTotalByShopId") |
| | | public R<MgtShopTotalMemberVo> getUserTotalByShopId(@RequestBody List<Long> shopIdlist); |
| | | |
| | | |
| | | /** |
| | | * @param memberTotalChangeDto |
| | | * @return R |
| | |
| | | */ |
| | | @PostMapping("/member/changeMemberTotal") |
| | | public R changeMemberTotal(@RequestBody MemberTotalChangeDto memberTotalChangeDto); |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * @param merTotalDto |
| | | * @return R<MerOrderAgeUserVo> |
| | |
| | | */ |
| | | @PostMapping("/member/listOrderAgeUser") |
| | | public R<List<MerOrderAgeUserVo>> listOrderAgeUser(@RequestBody MerTotalDto merTotalDto); |
| | | |
| | | |
| | | /** |
| | | * @param |
| | | * @return R<Integer> |
| | |
| | | */ |
| | | @PostMapping("/member/getUnReplaySuggestVo") |
| | | public R<Integer> getUnReplaySuggestVo(); |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * @param verifyPrize |
| | | * @return R<MemberGiftRecord> |
| | |
| | | */ |
| | | @PostMapping("/member/getVerifyPrize") |
| | | public R<MemberGiftRecord> getVerifyPrize(@RequestBody String verifyPrize); |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * @param giftId |
| | | * @return R<MemberGiftRecord> |
| | | * @description 根据礼品id获取数据 |
| | | * @author jqs |
| | | * @date 2023/7/8 17:43 |
| | | */ |
| | | @PostMapping("/member/getVerifyPrizeByGiftId") |
| | | public R<MemberGiftRecord> getVerifyPrizeByGiftId(@RequestBody String giftId); |
| | | |
| | | |
| | | /** |
| | | * @param integralChangeDto |
| | | * @return R |
| | |
| | | */ |
| | | @PostMapping("/member/changeIntegral") |
| | | public R signShare(@RequestBody IntegralChangeDto integralChangeDto); |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * @param shopIdList |
| | | * @return R<Integer> |
| | |
| | | */ |
| | | @PostMapping("/member/getAreaNewMember") |
| | | public R<Integer> getAreaNewMember(@RequestBody List<Long> shopIdList); |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * @param mgtMemberShopNameDto |
| | | * @return R |
| | |
| | | */ |
| | | @PostMapping("/member/updateMemberShopName") |
| | | public R updateMemberShopName(@RequestBody MgtMemberShopNameDto mgtMemberShopNameDto); |
| | | |
| | | |
| | | /** |
| | | * @description |
| | | * @author jqs |
| | |
| | | */ |
| | | @PostMapping("/member/getBirthdayCard") |
| | | public R<BirthdayCard> getBirthdayCard(); |
| | | |
| | | |
| | | /** |
| | | * @description 核销奖品 |
| | | * @author jqs |
| | |
| | | */ |
| | | @PostMapping("/member/verifyPrize") |
| | | public R verifyPrize(@RequestBody MerVerifyPrizeFinalDto merVerifyPrizeFinalDto); |
| | | |
| | | |
| | | /** |
| | | * @description |
| | | * @author jqs |
| | | * @date 2023/8/23 19:06 |
| | | * @param ageType |
| | | * @return R<List<Long>> |
| | | * @return R<List < Long>> |
| | | * @description |
| | | * @author jqs |
| | | * @date 2023/8/23 19:06 |
| | | */ |
| | | @PostMapping("/member/listUserIdByAgeType") |
| | | public R<List<Long>> listUserIdByAgeType(@RequestBody Integer ageType); |
| | | |
| | | /** |
| | | * 手动添加用户积分 |
| | | * |
| | | * @param integral |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | @PostMapping("/member/addIntegralRecord") |
| | | R addIntegralRecord(@RequestParam("integral") Integer integral, @RequestParam("userId") Long userId, @RequestParam("orderId") String orderId); |
| | | |
| | | /** |
| | | * 添加奖品数据 |
| | | * |
| | | * @param memberGiftRecord |
| | | * @return |
| | | */ |
| | | @PostMapping("/member/saveMemberGiftRecord") |
| | | R saveMemberGiftRecord(@RequestBody MemberGiftRecord memberGiftRecord); |
| | | |
| | | /** |
| | | * 修改会员数据 |
| | | * |
| | | * @param member |
| | | * @return |
| | | */ |
| | | @PostMapping("/member/editMember") |
| | | R editMember(@RequestBody Member member); |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.service; |
| | | |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.domain.dto.AGStockChangeDto; |
| | | import com.ruoyi.system.api.domain.dto.ActivityGoodsGetDto; |
| | | import com.ruoyi.system.api.domain.dto.ActivityTotalChangeDto; |
| | | import com.ruoyi.system.api.domain.dto.MerActivityShopDto; |
| | | import com.ruoyi.system.api.domain.poji.activity.Activity; |
| | | import com.ruoyi.system.api.domain.poji.activity.ActivityGoods; |
| | | import com.ruoyi.system.api.domain.poji.activity.ActivityRecord; |
| | | import com.ruoyi.system.api.domain.vo.ActivityGoodsGetVo; |
| | | import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; |
| | | import com.ruoyi.system.api.factory.RemoteActivityFallbackFactory; |
| | | import com.ruoyi.system.api.factory.RemoteRegionFallbackFactory; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author jqs34 |
| | | * @version 1.0 |
| | | * @classname RemoteRegionService |
| | | * @description: TODO |
| | | * @date 2023 2025/6/12 15:12 |
| | | */ |
| | | @FeignClient(contextId = "remoteRegionService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteRegionFallbackFactory.class) |
| | | public interface RemoteRegionService { |
| | | |
| | | |
| | | } |
| | |
| | | */ |
| | | @PostMapping("/shop/getShopBySysUserIds") |
| | | List<Shop> getShopBySysUserIds(@RequestBody BoardMemberTotalDto boardMemberTotalDto); |
| | | |
| | | /** |
| | | * 根据经销商id查询加盟商ids |
| | | * @param shopId |
| | | * @return |
| | | */ |
| | | @PostMapping("/shop/getFranchiseeIdsBYDealerId") |
| | | List<Shop> getFranchiseeIdsBYDealerId(@RequestBody Long shopId); |
| | | } |
| | |
| | | com.ruoyi.system.api.factory.RemoteUserFallbackFactory |
| | | com.ruoyi.system.api.factory.RemoteMemberFallbackFactory |
| | | com.ruoyi.system.api.factory.RemoteStaffFallbackFactory |
| | | com.ruoyi.system.api.factory.RemoteRegionFallbackFactory |
| | |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common-swagger</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-api-goods</artifactId> |
| | | <version>3.6.2</version> |
| | | <scope>compile</scope> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | | |
| | |
| | | // 2、生成Token |
| | | return R.ok(tokenService.createQwH5Token(qwH5LoginVo)); |
| | | } |
| | | |
| | | |
| | | @GetMapping("/h5/oauthUser") |
| | | @ApiOperation("通过code获取商户端用户登录") |
| | | @ApiOperation("通过code获取商户端用户登录【2.0】") |
| | | public R<OauthUserVo> oauthUser(@ApiParam(value = "成员授权获取到的code", required = true) @RequestParam("code") String code) throws IOException { |
| | | // 通过code获取访问用户敏感信息 |
| | | JSONObject result = qywxInnerService.getOauthUser(code); |
| | |
| | | package com.ruoyi.auth.controller; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | import com.ruoyi.goods.api.domain.LotteryEvent; |
| | | import com.ruoyi.goods.api.service.LotteryEventClient; |
| | | import com.ruoyi.system.api.domain.dto.AppMiniRegisterDto; |
| | | import com.ruoyi.system.api.model.AppMiniLoginDto; |
| | | import com.ruoyi.system.api.model.AppMiniLoginVo; |
| | |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.system.api.model.LoginUser; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * token 控制 |
| | | * |
| | | * |
| | | * @author jqs |
| | | */ |
| | | @RestController |
| | | @Api(value = "系统和小程序登录", tags = "系统和小程序登录") |
| | | |
| | | public class TokenController |
| | | { |
| | | @Autowired |
| | | private TokenService tokenService; |
| | | |
| | | @Autowired |
| | | private SysLoginService sysLoginService; |
| | | |
| | | @ApiOperation("系统登录") |
| | | @PostMapping("login") |
| | | public R<?> login(@RequestBody LoginBody form) |
| | | { |
| | | // 用户登录 |
| | | LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword()); |
| | | // 获取登录token |
| | | return R.ok(tokenService.createToken(userInfo)); |
| | | } |
| | | |
| | | @ApiOperation("小程序登录") |
| | | @PostMapping("miniLogin") |
| | | public R<?> miniLogin(@RequestBody AppMiniLoginDto appMiniLoginDto) |
| | | { |
| | | // 小程序用户登录 |
| | | AppMiniLoginVo appMiniLoginVo = sysLoginService.miniLogin(appMiniLoginDto); |
| | | // 获取登录token |
| | | return R.ok(tokenService.createMiniToken(appMiniLoginVo)); |
| | | } |
| | | |
| | | @ApiOperation("小程序注册") |
| | | @PostMapping("miniRegister") |
| | | public R<?> miniRegister(@RequestBody AppMiniRegisterDto appUserRegisterDto) |
| | | { |
| | | // 小程序用户登录 |
| | | AppMiniLoginVo appMiniLoginVo = sysLoginService.miniRegister(appUserRegisterDto); |
| | | // 获取登录token |
| | | return R.ok(tokenService.createMiniToken(appMiniLoginVo)); |
| | | } |
| | | |
| | | @DeleteMapping("logout") |
| | | public R<?> logout(HttpServletRequest request) |
| | | { |
| | | String token = SecurityUtils.getToken(request); |
| | | if (StringUtils.isNotEmpty(token)) |
| | | { |
| | | String username = JwtUtils.getUserName(token); |
| | | // 删除用户缓存记录 |
| | | AuthUtil.logoutByToken(token); |
| | | // 记录用户退出日志 |
| | | sysLoginService.logout(username); |
| | | public class TokenController { |
| | | @Autowired |
| | | private TokenService tokenService; |
| | | |
| | | @Autowired |
| | | private SysLoginService sysLoginService; |
| | | |
| | | @Resource |
| | | private LotteryEventClient lotteryEventClient; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | @ApiOperation("系统登录") |
| | | @PostMapping("login") |
| | | public R<?> login(@RequestBody LoginBody form) { |
| | | // 用户登录 |
| | | LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword()); |
| | | // 获取登录token |
| | | return R.ok(tokenService.createToken(userInfo)); |
| | | } |
| | | |
| | | @ApiOperation("小程序登录") |
| | | @PostMapping("miniLogin") |
| | | public R<?> miniLogin(@RequestBody AppMiniLoginDto appMiniLoginDto) { |
| | | // 小程序用户登录 |
| | | AppMiniLoginVo appMiniLoginVo = sysLoginService.miniLogin(appMiniLoginDto); |
| | | Map<String, Object> miniToken = tokenService.createMiniToken(appMiniLoginVo); |
| | | return R.ok(miniToken); |
| | | } |
| | | |
| | | @ApiOperation("小程序注册【2.0】") |
| | | @PostMapping("miniRegister") |
| | | public R<?> miniRegister(@RequestBody AppMiniRegisterDto appUserRegisterDto) { |
| | | // 小程序用户登录 |
| | | AppMiniLoginVo appMiniLoginVo = sysLoginService.miniRegister(appUserRegisterDto); |
| | | // 获取登录token |
| | | Map<String, Object> miniToken = tokenService.createMiniToken(appMiniLoginVo); |
| | | //判断新用户是都符合抽奖条件 |
| | | miniToken.put("lotteryDraw", false); |
| | | List<LotteryEvent> data = lotteryEventClient.getLotteryEventList(1).getData(); |
| | | if (data.size() > 0) { |
| | | miniToken.put("lotteryDraw", true); |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | @PostMapping("refresh") |
| | | public R<?> refresh(HttpServletRequest request) |
| | | { |
| | | LoginUser loginUser = tokenService.getLoginUser(request); |
| | | if (StringUtils.isNotNull(loginUser)) |
| | | { |
| | | // 刷新令牌有效期 |
| | | tokenService.refreshToken(loginUser); |
| | | return R.ok(); |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | @PostMapping("register") |
| | | public R<?> register(@RequestBody RegisterBody registerBody) |
| | | { |
| | | // 用户注册 |
| | | sysLoginService.register(registerBody.getUsername(), registerBody.getPassword()); |
| | | return R.ok(); |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | @DeleteMapping("logout") |
| | | public R<?> logout(HttpServletRequest request) { |
| | | String token = SecurityUtils.getToken(request); |
| | | if (StringUtils.isNotEmpty(token)) { |
| | | String username = JwtUtils.getUserName(token); |
| | | // 删除用户缓存记录 |
| | | AuthUtil.logoutByToken(token); |
| | | // 记录用户退出日志 |
| | | sysLoginService.logout(username); |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | @PostMapping("refresh") |
| | | public R<?> refresh(HttpServletRequest request) { |
| | | LoginUser loginUser = tokenService.getLoginUser(request); |
| | | if (StringUtils.isNotNull(loginUser)) { |
| | | // 刷新令牌有效期 |
| | | tokenService.refreshToken(loginUser); |
| | | return R.ok(); |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | @PostMapping("register") |
| | | public R<?> register(@RequestBody RegisterBody registerBody) { |
| | | // 用户注册 |
| | | sysLoginService.register(registerBody.getUsername(), registerBody.getPassword()); |
| | | return R.ok(); |
| | | } |
| | | } |
| | |
| | | throw new ServiceException(userResult.getMsg()); |
| | | } |
| | | ShopRelUserVo shopInfo = shopResult.getData(); |
| | | if(null == shopInfo){ |
| | | if (null == shopInfo) { |
| | | throw new ServiceException("未查询到商户信息"); |
| | | } |
| | | Long shopId = shopInfo.getShopId(); |
| | | Shop shop = remoteShopService.getShop(shopId).getData(); |
| | | if(-1 == shop.getShopStatus()){ |
| | | recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对应商户已删除,请联系管理员",Constants.FROM_SHOP); |
| | | if (-1 == shop.getShopStatus()) { |
| | | recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对应商户已删除,请联系管理员", Constants.FROM_SHOP); |
| | | throw new ServiceException("对应商户已删除,请联系管理员"); |
| | | } |
| | | if(0 == shop.getShopStatus()){ |
| | | recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对应商户已冻结,请联系管理员",Constants.FROM_SHOP); |
| | | if (0 == shop.getShopStatus()) { |
| | | recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对应商户已冻结,请联系管理员", Constants.FROM_SHOP); |
| | | throw new ServiceException("对应商户已冻结,请联系管理员"); |
| | | } |
| | | if(2 == shop.getShopStatus()){ |
| | | recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对应商户已终止合作,请联系管理员",Constants.FROM_SHOP); |
| | | if (2 == shop.getShopStatus()) { |
| | | recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对应商户已终止合作,请联系管理员", Constants.FROM_SHOP); |
| | | throw new ServiceException("对应商户已终止合作,请联系管理员"); |
| | | } |
| | | |
| | | userInfo.setShopId(shopInfo.getShopId()); |
| | | recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功",Constants.FROM_SHOP); |
| | | userInfo.setShopName(shopInfo.getShopName()); |
| | | userInfo.setShopNum(shopInfo.getShopNum()); |
| | | recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功", Constants.FROM_SHOP); |
| | | return userInfo; |
| | | } |
| | | |
| | |
| | | <groupId>org.projectlombok</groupId> |
| | | <artifactId>lombok</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>cn.hutool</groupId> |
| | | <artifactId>hutool-all</artifactId> |
| | | <version>5.8.22</version> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | | |
| | |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | public static Date getTodayStartTime() { |
| | | // 获取今天的日期 |
| | | LocalDate today = LocalDate.now(); |
| | | |
| | | // 获取当天的开始时间(00:00:00) |
| | | LocalDateTime startOfDay = today.atStartOfDay(); |
| | | |
| | | // 转换为 Date 类型 |
| | | return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant()); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.redis.configure; |
| | | |
| | | import org.redisson.Redisson; |
| | | import org.redisson.api.RedissonClient; |
| | | import org.redisson.codec.JsonJacksonCodec; |
| | | import org.redisson.config.Config; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * redis配置 |
| | | * |
| | | * @author jqs |
| | | */ |
| | | @Configuration |
| | | public class RedissonConfig { |
| | | |
| | | @Value("${spring.redis.host}") |
| | | private String redisHost; |
| | | |
| | | @Value("${spring.redis.password}") |
| | | private String password; |
| | | |
| | | @Value("${spring.redis.port}") |
| | | private int port = 6379; |
| | | |
| | | @Bean |
| | | public RedissonClient getRedisson() { |
| | | Config config = new Config(); |
| | | config.useSingleServer(). |
| | | setAddress("redis://" + redisHost + ":" + port). |
| | | setPassword(password); |
| | | config.setCodec(new JsonJacksonCodec()); |
| | | return Redisson.create(config); |
| | | } |
| | | |
| | | } |
| | |
| | | loginUser.setUsername(userName); |
| | | loginUser.setIpaddr(IpUtils.getIpAddr()); |
| | | refreshToken(loginUser); |
| | | |
| | | |
| | | // Jwt存储信息 |
| | | Map<String, Object> claimsMap = new HashMap<String, Object>(); |
| | | claimsMap.put(SecurityConstants.USER_KEY, token); |
| | |
| | | // 接口返回信息 |
| | | OauthUserVo oauthUserVo = new OauthUserVo(); |
| | | oauthUserVo.setShopId(qwH5LoginVo.getShopId()); |
| | | oauthUserVo.setShopNum(qwH5LoginVo.getShopNum()); |
| | | oauthUserVo.setShopName(qwH5LoginVo.getShopName()); |
| | | oauthUserVo.setToken(JwtUtils.createToken(claimsMap)); |
| | | oauthUserVo.setExpiresIn(EXPIRE_TIME); |
| | | oauthUserVo.setUserid(qwH5LoginVo.getUserid()); |
| | |
| | | <version>4.13.1</version> |
| | | <scope>test</scope> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-api-goods</artifactId> |
| | | <version>3.6.2</version> |
| | | <scope>compile</scope> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | | |
New file |
| | |
| | | package com.ruoyi.goods.controller.business; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.goods.domain.dto.XiaoeCourseQueryDto; |
| | | import com.ruoyi.goods.domain.vo.XiaoeCourseChapterVO; |
| | | import com.ruoyi.goods.domain.vo.XiaoeCourseGroupVO; |
| | | import com.ruoyi.goods.domain.vo.XiaoeCourseVO; |
| | | import com.ruoyi.goods.service.biz.XiaoeCourseService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.ApiParam; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import javax.validation.Valid; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2025/1/10 |
| | | */ |
| | | @Api(tags = {"商户端海恒课程相关接口"}) |
| | | @Validated |
| | | @RestController |
| | | @RequestMapping("/mer/course") |
| | | @RequiredArgsConstructor |
| | | public class MerCourseController { |
| | | private final XiaoeCourseService xiaoeCourseService; |
| | | |
| | | /** |
| | | * 课程列表 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | @ApiOperation("课程列表") |
| | | @PostMapping("/page") |
| | | public R<Page<XiaoeCourseVO>> page(@Valid @RequestBody XiaoeCourseQueryDto dto) { |
| | | return R.ok(xiaoeCourseService.getCoursePageList(dto,0)); |
| | | } |
| | | |
| | | /** |
| | | * 课程章节详情 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | @ApiOperation("课程章节详情") |
| | | @GetMapping("/detail/{id}") |
| | | public R<List<XiaoeCourseChapterVO>> detail(@ApiParam(name = "id",value = "课程id",required = true)@PathVariable("id") String id) { |
| | | return R.ok(xiaoeCourseService.getCourseDetail(id)); |
| | | } |
| | | |
| | | /** |
| | | * 获取课程分组列表 |
| | | * @return |
| | | */ |
| | | @ApiOperation("获取课程分组列表") |
| | | @GetMapping("/group") |
| | | public R<List<XiaoeCourseGroupVO>> getCourseGroupList() { |
| | | return R.ok(xiaoeCourseService.getCourseGroupList(0)); |
| | | } |
| | | } |
| | |
| | | package com.ruoyi.goods.controller.business; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | |
| | | import com.ruoyi.goods.domain.dto.MgtSelectGoodsPageDto; |
| | | import com.ruoyi.goods.domain.vo.MerGoodsPageVo; |
| | | import com.ruoyi.goods.service.goods.GoodsService; |
| | | import com.ruoyi.goods.service.goods.ShopGoodsService; |
| | | import com.ruoyi.system.api.domain.dto.MerBaseDto; |
| | | import com.ruoyi.system.api.domain.poji.goods.ShopGoods; |
| | | import com.ruoyi.system.api.domain.poji.shop.Shop; |
| | | import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo; |
| | | import com.ruoyi.system.api.service.RemoteShopService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | |
| | | @RestController |
| | | @RequestMapping("/mer/goods") |
| | | public class MerGoodsController { |
| | | |
| | | |
| | | @Resource |
| | | private GoodsService goodsService; |
| | | |
| | | |
| | | @Resource |
| | | private RemoteShopService remoteShopService; |
| | | |
| | | @Resource |
| | | private ShopGoodsService shopGoodsService; |
| | | |
| | | |
| | | @RequestMapping(value = "/pageMerShopGoods", method = RequestMethod.POST) |
| | | @ApiOperation(value = "分页获取商户商品列表") |
| | | @ApiOperation(value = "分页获取商户商品列表【2.0】") |
| | | public R<Page<MerGoodsPageVo>> pageMerShopGoods(@RequestBody MerGoodsPageDto merGoodsPageDto) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | Page<MerGoodsPageVo> page = new Page<>(); |
| | | page.setSize(merGoodsPageDto.getPageSize()); |
| | | page.setCurrent(merGoodsPageDto.getPageNum()); |
| | | page.setOptimizeCountSql(false); |
| | | List<MerGoodsPageVo> merGoodsPageVoList = goodsService.pageMerShopGoods(page,merGoodsPageDto); |
| | | List<MerGoodsPageVo> merGoodsPageVoList = goodsService.pageMerShopGoods(page, merGoodsPageDto); |
| | | Shop shop = remoteShopService.getShop(merGoodsPageDto.getShopId()).getData(); |
| | | Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData(); |
| | | merGoodsPageVoList.forEach(merGoodsPageVo -> { |
| | | ShopGoods shopGoods = shopGoodsService.getByShopIdAndGoodsId(belongShop.getShopId(), merGoodsPageVo.getGoodsId()); |
| | | //后台开启经销商统一售价,且经销商设置了统一售价,加盟商不能修改价格 |
| | | if (1 == belongShop.getModifyPricePermission() && null != shopGoods) { |
| | | merGoodsPageVo.setModifyPricePermission(0); |
| | | merGoodsPageVo.setIsUnifiedPrice(1); |
| | | merGoodsPageVo.setUnifiedPrice(shopGoods.getSalesPrice()); |
| | | merGoodsPageVo.setUnifiedServerNum(shopGoods.getServiceNum()); |
| | | } else { |
| | | merGoodsPageVo.setModifyPricePermission(1); |
| | | merGoodsPageVo.setIsUnifiedPrice(0); |
| | | } |
| | | }); |
| | | return R.ok(page.setRecords(merGoodsPageVoList)); |
| | | } |
| | | |
| | |
| | | List<MerGoodsPageVo> merGoodsPageVoList = goodsService.listMerCycleGoods(merBaseDto.getShopId()); |
| | | return R.ok(merGoodsPageVoList); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/editMerShopGoods", method = RequestMethod.POST) |
| | | @ApiOperation(value = "编辑商户商品价格") |
| | | @ApiOperation(value = "编辑商户商品价格【2.0】") |
| | | public R editMerShopGoods(@RequestBody MerShopGoodsEditDto merShopGoodsEditDto) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | merShopGoodsEditDto.setUserId(userId); |
| | | goodsService.editMerShopGoods(merShopGoodsEditDto); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | |
| | | @RequestMapping(value = "/cancelUniformPrice", method = RequestMethod.POST) |
| | | @ApiOperation(value = "取消统一售价【2.0】") |
| | | public R cancelUniformPrice(@RequestBody MerShopGoodsEditDto merShopGoodsEditDto) { |
| | | shopGoodsService.remove(new LambdaUpdateWrapper<ShopGoods>().eq(ShopGoods::getShopId, merShopGoodsEditDto.getShopId()) |
| | | .eq(ShopGoods::getGoodsId, merShopGoodsEditDto.getGoodsId())); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/pageMerSelectGoods", method = RequestMethod.POST) |
| | | @ApiOperation(value = "分页获取商品选择列表") |
| | | public R<Page<MgtSelectGoodsPageVo>> pageMerSelectGoods(@RequestBody MgtSelectGoodsPageDto mgtSelectGoodsPageDto) { |
| | |
| | | page.setSize(mgtSelectGoodsPageDto.getPageSize()); |
| | | page.setCurrent(mgtSelectGoodsPageDto.getPageNum()); |
| | | page.setOptimizeCountSql(false); |
| | | List<MgtSelectGoodsPageVo> mgtSelectGoodsPageVos = goodsService.pageMgtSelectGoods(page,mgtSelectGoodsPageDto); |
| | | List<MgtSelectGoodsPageVo> mgtSelectGoodsPageVos = goodsService.pageMgtSelectGoods(page, mgtSelectGoodsPageDto); |
| | | return R.ok(page.setRecords(mgtSelectGoodsPageVos)); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.controller.business; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.goods.domain.dto.XiaoeLiveDto; |
| | | import com.ruoyi.goods.domain.dto.XiaoeLiveQueryDto; |
| | | import com.ruoyi.goods.domain.vo.XiaoeLiveDetailVOV2; |
| | | import com.ruoyi.goods.domain.vo.XiaoeLiveVo; |
| | | import com.ruoyi.goods.service.biz.XiaoeLiveService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.ApiParam; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import javax.validation.Valid; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2025/1/9 |
| | | */ |
| | | @Validated |
| | | @RestController |
| | | @RequiredArgsConstructor |
| | | @Api(tags = "商户端直播相关接口") |
| | | @RequestMapping("/mer/live") |
| | | public class MerLiveController { |
| | | private final XiaoeLiveService xiaoeLiveService; |
| | | |
| | | /** |
| | | * 直播首页分页列表 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | @ApiOperation("直播首页分页列表") |
| | | @PostMapping("/page") |
| | | public R<Page<XiaoeLiveVo>> page(@Valid @RequestBody XiaoeLiveQueryDto dto) { |
| | | return R.ok(xiaoeLiveService.getLivePage(dto)); |
| | | } |
| | | |
| | | /** |
| | | * 直播详情 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | @ApiOperation("直播详情") |
| | | @GetMapping("/detail/{id}") |
| | | public R<XiaoeLiveDetailVOV2> detail(@ApiParam(name = "id",value = "直播id", required = true) @PathVariable("id") String id) { |
| | | return R.ok(xiaoeLiveService.getLiveDetail(id)); |
| | | } |
| | | |
| | | /** |
| | | * 预约直播 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | @ApiOperation("预约") |
| | | @GetMapping("/appointment/{id}") |
| | | public R<Boolean> appointment(@ApiParam(name = "id",value = "直播id", required = true) @PathVariable("id") String id) { |
| | | return R.ok(xiaoeLiveService.appointment(id)); |
| | | } |
| | | |
| | | /** |
| | | * 我的直播 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | @ApiOperation("我的直播") |
| | | @PostMapping("/mine") |
| | | public R<Page<XiaoeLiveVo>> minePage(@Valid @RequestBody XiaoeLiveQueryDto dto) { |
| | | return R.ok(xiaoeLiveService.getMineLivePage(dto)); |
| | | } |
| | | |
| | | /** |
| | | * 获取当前店铺讲师id列表/创建直播前校验讲师信息 |
| | | * @return |
| | | */ |
| | | @ApiOperation("获取当前店铺讲师id列表/创建直播前校验讲师信息") |
| | | @GetMapping("/xiaoe/ids") |
| | | public R<List<String>> getShopXiaoeUserIdList() { |
| | | return R.ok(xiaoeLiveService.getShopXiaoeUserIdList()); |
| | | } |
| | | /** |
| | | * 创建直播 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | @ApiOperation("创建直播") |
| | | @PostMapping("/create") |
| | | public R<?> create(@Valid @RequestBody XiaoeLiveDto dto) { |
| | | xiaoeLiveService.create(dto,2); |
| | | return R.ok(); |
| | | } |
| | | |
| | | /** |
| | | * 编辑直播 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | @ApiOperation("编辑直播") |
| | | @PostMapping |
| | | public R<Boolean> edit(@Valid @RequestBody XiaoeLiveDto dto) { |
| | | return R.ok(xiaoeLiveService.edit(dto)); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.controller.business; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.utils.uuid.IdUtils; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.goods.api.domain.LotteryEvent; |
| | | import com.ruoyi.goods.api.domain.LotteryEventPrize; |
| | | import com.ruoyi.goods.domain.dto.DelShopLotteryDrawDto; |
| | | import com.ruoyi.goods.domain.dto.ShopLotteryDrawListDto; |
| | | import com.ruoyi.goods.domain.dto.ShopWinningRecordDto; |
| | | import com.ruoyi.goods.domain.vo.ShopLotteryDrawListVo; |
| | | import com.ruoyi.goods.domain.vo.ShopLotteryDrawVo; |
| | | import com.ruoyi.goods.domain.vo.ShopWinningRecordVo; |
| | | import com.ruoyi.goods.service.goods.GoodsService; |
| | | import com.ruoyi.goods.service.lottery.ILotteryEventPrizeService; |
| | | import com.ruoyi.goods.service.lottery.ILotteryEventService; |
| | | import com.ruoyi.goods.service.lottery.IUserLotteryEventService; |
| | | import com.ruoyi.system.api.domain.poji.goods.Goods; |
| | | import com.ruoyi.system.api.domain.poji.shop.Shop; |
| | | import com.ruoyi.system.api.service.RemoteShopService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.apache.commons.lang.StringUtils; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RequestMethod; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/8 18:13 |
| | | */ |
| | | @Api(value = "商户端商户相关接口", tags = "商户端商户相关接口", description = "商户端商户相关接口") |
| | | @RestController |
| | | @RequestMapping("/mer/lotteryEvent") |
| | | public class MerLotteryEventController { |
| | | |
| | | @Resource |
| | | private ILotteryEventService lotteryEventService; |
| | | |
| | | @Resource |
| | | private RemoteShopService remoteShopService; |
| | | |
| | | @Resource |
| | | private ILotteryEventPrizeService lotteryEventPrizeService; |
| | | |
| | | @Resource |
| | | private IUserLotteryEventService userLotteryEventService; |
| | | |
| | | @Resource |
| | | private GoodsService goodsService; |
| | | |
| | | |
| | | @RequestMapping(value = "/getShopLotteryDrawList", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取门店抽奖活动列表【2.0】") |
| | | public R<ShopLotteryDrawVo> getShopLotteryDrawList(@RequestBody ShopLotteryDrawListDto dto) { |
| | | Page<ShopLotteryDrawListVo> page = new Page<>(); |
| | | page.setSize(dto.getPageSize()); |
| | | page.setCurrent(dto.getPageNum()); |
| | | Shop shop = remoteShopService.getShop(dto.getShopId()).getData(); |
| | | ShopLotteryDrawVo shopLotteryDrawVo = new ShopLotteryDrawVo(); |
| | | shopLotteryDrawVo.setLotteryDrawFlag(shop.getLotteryDrawFlag()); |
| | | List<ShopLotteryDrawListVo> shopLotteryDrawList = lotteryEventService.getShopLotteryDrawList(page, dto.getShopId()); |
| | | page.setRecords(shopLotteryDrawList); |
| | | shopLotteryDrawVo.setPage(page); |
| | | return R.ok(shopLotteryDrawVo); |
| | | } |
| | | |
| | | @RequestMapping(value = "/delShopLotteryDraw", method = RequestMethod.POST) |
| | | @ApiOperation(value = "门店删除抽奖活动【2.0】") |
| | | public R delShopLotteryDraw(@RequestBody DelShopLotteryDrawDto dto) { |
| | | LotteryEvent lotteryEvent = lotteryEventService.getById(dto.getId()); |
| | | if (null == lotteryEvent) { |
| | | return R.fail("抽奖活动不存在"); |
| | | } |
| | | if (LocalDateTime.now().isAfter(lotteryEvent.getStartTime())) { |
| | | return R.fail("删除失败"); |
| | | } |
| | | if (!lotteryEvent.getShopId().equals(dto.getShopId())) { |
| | | return R.fail("删除失败"); |
| | | } |
| | | lotteryEvent.setDelFlag(1); |
| | | lotteryEventService.updateById(lotteryEvent); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/getShopLotteryDrawInfo", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取门店抽奖详情【2.0】") |
| | | public R<LotteryEvent> getShopLotteryDrawInfo(@RequestBody DelShopLotteryDrawDto dto) { |
| | | LotteryEvent lotteryEvent = lotteryEventService.getById(dto.getId()); |
| | | if (null == lotteryEvent) { |
| | | return R.fail("抽奖活动不存在"); |
| | | } |
| | | if (!lotteryEvent.getShopId().equals(dto.getShopId())) { |
| | | return R.fail("查询失败"); |
| | | } |
| | | List<LotteryEventPrize> list = lotteryEventPrizeService.list(new LambdaQueryWrapper<LotteryEventPrize>().eq(LotteryEventPrize::getLotteryEventId, dto.getId())); |
| | | lotteryEvent.setPrizes(list); |
| | | return R.ok(lotteryEvent); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/editShopLotteryDraw", method = RequestMethod.POST) |
| | | @ApiOperation(value = "保存门店抽奖【2.0】") |
| | | public R editShopLotteryDraw(@RequestBody LotteryEvent lotteryEvent) { |
| | | if (lotteryEvent.getId() == null) { |
| | | lotteryEvent.setId(IdUtils.simpleUUID()); |
| | | } |
| | | lotteryEvent.setUpdateTime(LocalDateTime.now()); |
| | | lotteryEvent.setUpdateUserId(SecurityUtils.getUserId()); |
| | | lotteryEventService.saveOrUpdate(lotteryEvent); |
| | | //先删除原有的奖品 |
| | | lotteryEventPrizeService.remove(new LambdaQueryWrapper<LotteryEventPrize>().eq(LotteryEventPrize::getLotteryEventId, lotteryEvent.getId())); |
| | | //添加新的奖品 |
| | | List<LotteryEventPrize> prizes = lotteryEvent.getPrizes(); |
| | | prizes.forEach(s -> { |
| | | s.setId(IdUtils.simpleUUID()); |
| | | if (s.getPrizeType() == 2 && StringUtils.isEmpty(s.getObjectName())) { |
| | | Goods goods = goodsService.getById(s.getObjectId()); |
| | | s.setObjectName(goods.getGoodsName()); |
| | | } |
| | | s.setLotteryEventId(lotteryEvent.getId()); |
| | | }); |
| | | lotteryEventPrizeService.saveOrUpdateBatch(prizes); |
| | | return R.ok(); |
| | | } |
| | | |
| | | @RequestMapping(value = "/getShopWinningRecord", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取中奖记录列表【2.0】") |
| | | public R<Page<ShopWinningRecordVo>> getShopWinningRecord(@RequestBody ShopWinningRecordDto dto) { |
| | | LotteryEvent lotteryEvent = lotteryEventService.getById(dto.getId()); |
| | | if (null == lotteryEvent) { |
| | | return R.fail("抽奖活动不存在"); |
| | | } |
| | | if (!lotteryEvent.getShopId().equals(dto.getShopId())) { |
| | | return R.fail("查询失败"); |
| | | } |
| | | Page<ShopWinningRecordVo> page = new Page<>(); |
| | | page.setSize(dto.getPageSize()); |
| | | page.setCurrent(dto.getPageNum()); |
| | | List<ShopWinningRecordVo> shopWinningRecordVoList = userLotteryEventService.getShopWinningRecord(page, dto.getId()); |
| | | return R.ok(page.setRecords(shopWinningRecordVoList)); |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.controller.concole; |
| | | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.goods.service.live.IXiaoeLiveAppointmentService; |
| | | import com.ruoyi.goods.utils.XiaoeUtils; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2025/1/10 |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/live") |
| | | @RequiredArgsConstructor |
| | | public class LiveController { |
| | | private final XiaoeUtils xiaoeUtils; |
| | | private final IXiaoeLiveAppointmentService xiaoeLiveAppointmentService; |
| | | |
| | | /** |
| | | * 推送微信小程序订阅消息 |
| | | * @param appointmentId |
| | | * @return |
| | | */ |
| | | @GetMapping("/push/{appointmentId}") |
| | | public R<?> push(@PathVariable("appointmentId") Long appointmentId) { |
| | | xiaoeLiveAppointmentService.push(appointmentId); |
| | | return R.ok(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.controller.concole; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.goods.api.domain.LotteryEvent; |
| | | import com.ruoyi.goods.service.lottery.ILotteryEventService; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/8 18:13 |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/lotteryEvent") |
| | | public class MerLotteryEventController { |
| | | |
| | | @Resource |
| | | private ILotteryEventService lotteryEventService; |
| | | |
| | | |
| | | /** |
| | | * 根据开启方式获取活动列表 |
| | | * |
| | | * @param activityType |
| | | * @return |
| | | */ |
| | | @ResponseBody |
| | | @PostMapping("/getLotteryEventList") |
| | | public R<List<LotteryEvent>> getLotteryEventList(@RequestParam("activityType") Integer activityType) { |
| | | List<LotteryEvent> list = lotteryEventService.list(new LambdaQueryWrapper<LotteryEvent>().eq(LotteryEvent::getActivityType, activityType) |
| | | .eq(LotteryEvent::getDelFlag, 0).last(" and now() between start_time and end_time")); |
| | | return R.ok(list); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | import com.ruoyi.goods.domain.vo.MgtGoodsEditInfoVo; |
| | | import com.ruoyi.goods.domain.vo.MgtGoodsPageVo; |
| | | import com.ruoyi.goods.domain.vo.MgtGoodsTotalVo; |
| | | import com.ruoyi.goods.domain.vo.PageShopMgtGoodsVO; |
| | | import com.ruoyi.goods.service.goods.GoodsService; |
| | | import com.ruoyi.system.api.domain.dto.MgtBaseGetDto; |
| | | import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo; |
| | |
| | | MgtGoodsEditInfoVo mgtGoodsEditInfoVo = goodsService.getMgtGoodsEditInfo(mgtBaseGetDto); |
| | | return R.ok(mgtGoodsEditInfoVo); |
| | | } |
| | | |
| | | @RequestMapping(value = "/pageShopMgtGoods", method = RequestMethod.POST) |
| | | @ApiOperation(value = "分页获取门店内商品信息",tags = "管理台商户相关接口") |
| | | public R<Page<PageShopMgtGoodsVO>> pageShopMgtGoods(@RequestBody PageShopMgtGoodsDTO pageShopMgtGoodsDTO) { |
| | | Page<PageShopMgtGoodsVO> page = new Page<>(); |
| | | page.setSize(pageShopMgtGoodsDTO.getPageSize()); |
| | | page.setCurrent(pageShopMgtGoodsDTO.getPageNum()); |
| | | page.setOptimizeCountSql(false); |
| | | List<PageShopMgtGoodsVO> pageShopMgtGoods = goodsService.pageShopMgtGoods(page,pageShopMgtGoodsDTO); |
| | | return R.ok(page.setRecords(pageShopMgtGoods)); |
| | | } |
| | | |
| | | //修改价格 转为经销商 |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.controller.management; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.goods.domain.dto.XiaoeLiveDto; |
| | | import com.ruoyi.goods.domain.dto.XiaoeLiveQueryDto; |
| | | import com.ruoyi.goods.domain.vo.XiaoeLiveDetailVOV2; |
| | | import com.ruoyi.goods.domain.vo.XiaoeLiveVo; |
| | | import com.ruoyi.goods.service.biz.XiaoeLiveService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.ApiParam; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.web.bind.annotation.DeleteMapping; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.PutMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import javax.validation.Valid; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2025/1/12 |
| | | */ |
| | | @Api(tags = {"管理后台直播相关接口"}) |
| | | @RestController |
| | | @RequestMapping("/mgt/live") |
| | | @RequiredArgsConstructor |
| | | public class MgtLiveController { |
| | | private final XiaoeLiveService xiaoeLiveService; |
| | | |
| | | /** |
| | | * 直播分页列表 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | @ApiOperation("直播分页列表") |
| | | @PostMapping("/page") |
| | | public R<Page<XiaoeLiveVo>> page(@Valid @RequestBody XiaoeLiveQueryDto dto) { |
| | | return R.ok(xiaoeLiveService.getMgtLivePage(dto)); |
| | | } |
| | | /** |
| | | * 直播详情 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | @ApiOperation("直播详情") |
| | | @GetMapping("/detail/{id}") |
| | | public R<XiaoeLiveDetailVOV2> detail(@ApiParam(name = "id",value = "直播id", required = true) @PathVariable("id") String id) { |
| | | return R.ok(xiaoeLiveService.getLiveDetail(id)); |
| | | } |
| | | /** |
| | | * 创建直播 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | @ApiOperation("添加直播") |
| | | @PostMapping("/create") |
| | | public R<?> create(@Valid @RequestBody XiaoeLiveDto dto) { |
| | | xiaoeLiveService.create(dto,1); |
| | | return R.ok(); |
| | | } |
| | | |
| | | /** |
| | | * 编辑直播 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | @ApiOperation("编辑直播") |
| | | @PutMapping |
| | | public R<Boolean> edit(@Valid @RequestBody XiaoeLiveDto dto) { |
| | | return R.ok(xiaoeLiveService.edit(dto)); |
| | | } |
| | | |
| | | /** |
| | | * 删除直播 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | @ApiOperation("删除") |
| | | @DeleteMapping("/{id}") |
| | | public R<?> delete(@ApiParam(name = "id",value = "直播id", required = true) @PathVariable("id") String id) { |
| | | xiaoeLiveService.deleteLive(id); |
| | | return R.ok(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.controller.miniapp; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.goods.domain.dto.XiaoeCourseQueryDto; |
| | | import com.ruoyi.goods.domain.vo.XiaoeCourseChapterVO; |
| | | import com.ruoyi.goods.domain.vo.XiaoeCourseGroupVO; |
| | | import com.ruoyi.goods.domain.vo.XiaoeCourseVO; |
| | | import com.ruoyi.goods.service.biz.XiaoeCourseService; |
| | | import com.ruoyi.system.api.service.RemoteConfigService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.ApiParam; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.validation.Valid; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2025/1/10 |
| | | */ |
| | | @Api(tags = {"小程序海恒课程相关接口"}) |
| | | @Validated |
| | | @RestController |
| | | @RequestMapping("/app/course") |
| | | @RequiredArgsConstructor |
| | | public class AppCourseController { |
| | | private final XiaoeCourseService xiaoeCourseService; |
| | | |
| | | private final RemoteConfigService remoteConfigService; |
| | | |
| | | |
| | | /** |
| | | * 课程列表 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | @ApiOperation("课程列表") |
| | | @PostMapping("/page") |
| | | public R<Page<XiaoeCourseVO>> page(@Valid @RequestBody XiaoeCourseQueryDto dto) { |
| | | return R.ok(xiaoeCourseService.getCoursePageList(dto,1)); |
| | | } |
| | | |
| | | /** |
| | | * 课程章节详情 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | @ApiOperation("课程章节详情") |
| | | @GetMapping("/detail/{id}") |
| | | public R<List<XiaoeCourseChapterVO>> detail(@ApiParam(name = "id",value = "课程id",required = true)@PathVariable("id") String id) { |
| | | return R.ok(xiaoeCourseService.getCourseDetail(id)); |
| | | } |
| | | |
| | | /** |
| | | * 获取课程分组列表 |
| | | * @return |
| | | */ |
| | | @ApiOperation("获取课程分组列表") |
| | | @GetMapping("/group") |
| | | public R<List<XiaoeCourseGroupVO>> getCourseGroupList() { |
| | | return R.ok(xiaoeCourseService.getCourseGroupList(1)); |
| | | } |
| | | |
| | | |
| | | |
| | | @ApiOperation("门店身份校验") |
| | | @PostMapping("/storeIdentityVerification") |
| | | public R storeIdentityVerification(@RequestParam("password") String password){ |
| | | String data = remoteConfigService.getStoreCurriculumPassword().getData(); |
| | | if(StringUtils.isNotEmpty(data)){ |
| | | if(password.equals(data)){ |
| | | return R.ok(); |
| | | } |
| | | } |
| | | return R.fail("身份校验失败"); |
| | | } |
| | | |
| | | |
| | | @ApiOperation("门店身份校验展示名称") |
| | | @PostMapping("/getStoreCurriculumName") |
| | | public R getStoreCurriculumName(){ |
| | | String data = remoteConfigService.getStoreCurriculumName().getData(); |
| | | return R.ok(data); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.controller.miniapp; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.goods.domain.dto.XiaoeLiveQueryDto; |
| | | import com.ruoyi.goods.domain.vo.XiaoeLiveVo; |
| | | import com.ruoyi.goods.service.biz.XiaoeLiveService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.ApiParam; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import javax.validation.Valid; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2025/1/10 |
| | | */ |
| | | @Validated |
| | | @RestController |
| | | @RequiredArgsConstructor |
| | | @Api(tags = "小程序直播相关接口") |
| | | @RequestMapping("/app/live") |
| | | public class AppLiveController { |
| | | private final XiaoeLiveService xiaoeLiveService; |
| | | /** |
| | | * 直播首页分页列表 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | @ApiOperation("直播首页分页列表") |
| | | @PostMapping("/page") |
| | | public R<Page<XiaoeLiveVo>> page(@Valid @RequestBody XiaoeLiveQueryDto dto) { |
| | | return R.ok(xiaoeLiveService.getLivePage(dto)); |
| | | } |
| | | |
| | | /** |
| | | * 预约直播 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | @ApiOperation("预约") |
| | | @GetMapping("/appointment/{id}") |
| | | public R<Boolean> appointment(@ApiParam(name = "id",value = "直播id", required = true) @PathVariable("id") String id) { |
| | | return R.ok(xiaoeLiveService.appointment(id)); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.controller.miniapp; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.utils.uuid.IdUtils; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.goods.api.domain.*; |
| | | import com.ruoyi.goods.domain.dto.AnswerQuestionDto; |
| | | import com.ruoyi.goods.domain.dto.LotteryEventQuestionsDto; |
| | | import com.ruoyi.goods.domain.vo.AppLotteryEventPageVo; |
| | | import com.ruoyi.goods.domain.vo.LotteryEventInfoVo; |
| | | import com.ruoyi.goods.domain.vo.LotteryEventQuestionsVo; |
| | | import com.ruoyi.goods.domain.vo.LotteryEventVo; |
| | | import com.ruoyi.goods.service.lottery.*; |
| | | import com.ruoyi.system.api.domain.dto.LotteryEventListDto; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiImplicitParam; |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 15:26 |
| | | */ |
| | | @Validated |
| | | @RestController |
| | | @RequiredArgsConstructor |
| | | @Api(tags = "小程序抽奖相关接口") |
| | | @RequestMapping("/app/lotteryEvent") |
| | | public class AppLotteryEventController { |
| | | |
| | | @Resource |
| | | private ILotteryEventService lotteryEventService; |
| | | |
| | | @Resource |
| | | private IUserLotteryEventService userLotteryEventService; |
| | | |
| | | @Resource |
| | | private IUserLotteryEventQuestionsService userLotteryEventQuestionsService; |
| | | |
| | | @Resource |
| | | private IUserLotteryEventQuestionsAnswersService userLotteryEventQuestionsAnswersService; |
| | | |
| | | @Resource |
| | | private ILotteryEventQuestionsService lotteryEventServiceQuestionsService; |
| | | |
| | | @Resource |
| | | private ILotteryEventQuestionsAnswersService lotteryEventQuestionsAnswersService; |
| | | |
| | | |
| | | @ResponseBody |
| | | @PostMapping("/getLotteryEvent/{id}") |
| | | @ApiOperation(value = "获取抽奖页详情【2.0】", tags = "抽奖活动") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "id", value = "抽奖活动id", required = true, dataType = "String", paramType = "path") |
| | | }) |
| | | public R<LotteryEventVo> getLotteryEvent(@PathVariable("id") String id) { |
| | | LotteryEventVo lotteryEvent = lotteryEventService.getLotteryEvent(id); |
| | | return R.ok(lotteryEvent); |
| | | } |
| | | |
| | | |
| | | @ResponseBody |
| | | @PostMapping("/lotteryDraw/{id}") |
| | | @ApiOperation(value = "抽奖操作【2.0】", tags = "抽奖活动", notes = "返回奖品ID") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "id", value = "抽奖活动id", required = true, dataType = "String", paramType = "path") |
| | | }) |
| | | public R lotteryDraw(@PathVariable("id") String id) { |
| | | return lotteryEventService.lotteryDraw(id); |
| | | } |
| | | |
| | | |
| | | @ResponseBody |
| | | @PostMapping("/getLotteryEventList") |
| | | @ApiOperation(value = "获取普通抽奖列表【2.0】", tags = "抽奖活动") |
| | | public R<Page<AppLotteryEventPageVo>> getLotteryEventList(@RequestBody LotteryEventListDto dto){ |
| | | Long userId = SecurityUtils.getUserId(); |
| | | Page<AppLotteryEventPageVo> page = new Page<>(); |
| | | page.setSize(dto.getPageSize()); |
| | | page.setCurrent(dto.getPageNum()); |
| | | List<AppLotteryEventPageVo> activityPageVoList = lotteryEventService.pageAppLotteryEvent(page,userId); |
| | | return R.ok(page.setRecords(activityPageVoList)); |
| | | } |
| | | |
| | | |
| | | @ResponseBody |
| | | @PostMapping("/getLotteryEventInfo/{id}") |
| | | @ApiOperation(value = "获取抽奖活动详情【2.0】", tags = "抽奖活动") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "id", value = "抽奖活动id", required = true, dataType = "String", paramType = "path") |
| | | }) |
| | | public R<LotteryEventInfoVo> getLotteryEventInfo(@PathVariable("id") String id){ |
| | | Long userId = SecurityUtils.getUserId(); |
| | | LotteryEvent lotteryEvent = lotteryEventService.getById(id); |
| | | LotteryEventInfoVo vo = new LotteryEventInfoVo(); |
| | | vo.setId(lotteryEvent.getId()); |
| | | vo.setName(lotteryEvent.getName()); |
| | | vo.setActivityProfile(lotteryEvent.getActivityProfile()); |
| | | vo.setStartTime(lotteryEvent.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); |
| | | vo.setActivityContent(lotteryEvent.getActivityContent()); |
| | | int count = userLotteryEventService.count(new QueryWrapper<UserLotteryEvent>().eq("lottery_event_id", id).eq("user_id", userId)); |
| | | vo.setParticipation(count > 0); |
| | | //答题抽奖需要判断是否答题完成 |
| | | if (5 == lotteryEvent.getActivityType()) { |
| | | UserLotteryEventQuestions questionsServiceOne = userLotteryEventQuestionsService.getOne(new QueryWrapper<UserLotteryEventQuestions>().eq("lottery_event_id", id).eq("user_id", userId)); |
| | | vo.setContinueAnswer(null != questionsServiceOne ? questionsServiceOne.getStatus() : 0); |
| | | vo.setAnswerStartTime(null != questionsServiceOne ? questionsServiceOne.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : null); |
| | | vo.setAnswerTimeLimit(lotteryEvent.getAnsweringTime()); |
| | | } |
| | | return R.ok(vo); |
| | | } |
| | | |
| | | @ResponseBody |
| | | @PostMapping("/getLotteryEventQuestions") |
| | | @ApiOperation(value = "获取答题题目【2.0】", tags = "抽奖活动") |
| | | public R<LotteryEventQuestionsVo> getLotteryEventQuestions(@RequestBody LotteryEventQuestionsDto dto) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | UserLotteryEventQuestions questionsServiceOne = userLotteryEventQuestionsService.getOne(new QueryWrapper<UserLotteryEventQuestions>().eq("lottery_event_id", dto.getId()).eq("user_id", userId)); |
| | | LotteryEventQuestionsVo vo = new LotteryEventQuestionsVo(); |
| | | int count = lotteryEventServiceQuestionsService.count(new QueryWrapper<LotteryEventQuestions>().eq("lottery_event_id", dto.getId())); |
| | | vo.setTotal(count); |
| | | //没有答题,直接从第一题开始 |
| | | if (null == questionsServiceOne) { |
| | | if (-1 == dto.getStepOrDown()) { |
| | | return R.fail("操作失败"); |
| | | } |
| | | LotteryEventQuestions questions = lotteryEventServiceQuestionsService.getOne(new QueryWrapper<LotteryEventQuestions>().eq("lottery_event_id", dto.getId()).orderByAsc("sort")); |
| | | vo.setCurrent(1); |
| | | vo.setName(questions.getName()); |
| | | List<LotteryEventQuestionsAnswers> list = lotteryEventQuestionsAnswersService.list(new QueryWrapper<LotteryEventQuestionsAnswers>().eq("lottery_event_questions_id", questions.getId())); |
| | | //封装答题 |
| | | List<Map<String, String>> options = list.stream().map(item -> { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("id", item.getId()); |
| | | map.put("name", item.getAnswer()); |
| | | return map; |
| | | }).collect(Collectors.toList()); |
| | | vo.setOptions(options); |
| | | } else { |
| | | //上一题 |
| | | Integer current = dto.getCurrent(); |
| | | if (-1 == dto.getStepOrDown()) { |
| | | if (current - 1 <= 0) { |
| | | return R.fail("操作失败"); |
| | | } |
| | | current--; |
| | | } else { |
| | | //下一题 |
| | | if (current >= count) { |
| | | return R.fail("操作失败"); |
| | | } |
| | | current++; |
| | | } |
| | | List<LotteryEventQuestions> list = lotteryEventServiceQuestionsService.list(new QueryWrapper<LotteryEventQuestions>().eq("lottery_event_id", dto.getId()).orderByAsc("sort")); |
| | | LotteryEventQuestions lotteryEventQuestions = list.get(current); |
| | | vo.setCurrent(current); |
| | | vo.setName(lotteryEventQuestions.getName()); |
| | | List<LotteryEventQuestionsAnswers> list1 = lotteryEventQuestionsAnswersService.list(new QueryWrapper<LotteryEventQuestionsAnswers>().eq("lottery_event_questions_id", lotteryEventQuestions.getId())); |
| | | //封装答题 |
| | | List<Map<String, String>> options = list1.stream().map(item -> { |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("id", item.getId()); |
| | | map.put("name", item.getAnswer()); |
| | | return map; |
| | | }).collect(Collectors.toList()); |
| | | if (-1 == dto.getStepOrDown()) { |
| | | UserLotteryEventQuestionsAnswers one = userLotteryEventQuestionsAnswersService.getOne(new QueryWrapper<UserLotteryEventQuestionsAnswers>().eq("lottery_event_id", dto.getId()).eq("user_id", userId).orderByDesc("create_time").last(" limit 0, 1")); |
| | | if (null != one) { |
| | | vo.setAnswer(lotteryEventQuestionsAnswersService.getById(one.getLotteryEventQuestionsAnswersId()).getAnswer()); |
| | | } |
| | | } |
| | | vo.setOptions(options); |
| | | } |
| | | return R.ok(vo); |
| | | } |
| | | |
| | | @ResponseBody |
| | | @PostMapping("/answerQuestion") |
| | | @ApiOperation(value = "答题操作【2.0】", tags = "抽奖活动") |
| | | public R answerQuestion(@RequestBody AnswerQuestionDto dto) { |
| | | List<LotteryEventQuestions> list = lotteryEventServiceQuestionsService.list(new QueryWrapper<LotteryEventQuestions>().eq("lottery_event_id", dto.getId()).orderByAsc("sort")); |
| | | LotteryEventQuestions lotteryEventQuestions = list.get(dto.getCurrent()); |
| | | List<LotteryEventQuestionsAnswers> list1 = lotteryEventQuestionsAnswersService.list(new QueryWrapper<LotteryEventQuestionsAnswers>().eq("lottery_event_questions_id", lotteryEventQuestions.getId())); |
| | | LotteryEventQuestionsAnswers lotteryEventQuestionsAnswers = list1.stream().filter(item -> item.getAnswer().equals(dto.getAnswer())).findAny().orElse(null); |
| | | //构建答题数据 |
| | | Long userId = SecurityUtils.getUserId(); |
| | | UserLotteryEventQuestions questionsServiceOne = userLotteryEventQuestionsService.getOne(new QueryWrapper<UserLotteryEventQuestions>().eq("lottery_event_id", dto.getId()).eq("user_id", userId)); |
| | | if (null == questionsServiceOne) { |
| | | questionsServiceOne = new UserLotteryEventQuestions(); |
| | | questionsServiceOne.setId(IdUtils.simpleUUID()); |
| | | questionsServiceOne.setUserId(userId); |
| | | questionsServiceOne.setLotteryEventId(dto.getId()); |
| | | questionsServiceOne.setStatus(1); |
| | | questionsServiceOne.setCreateTime(LocalDateTime.now()); |
| | | userLotteryEventQuestionsService.save(questionsServiceOne); |
| | | } |
| | | //构建或者修改答题数据 |
| | | UserLotteryEventQuestionsAnswers one = userLotteryEventQuestionsAnswersService.getOne(new QueryWrapper<UserLotteryEventQuestionsAnswers>().eq("lottery_event_question_id", lotteryEventQuestions.getId()).eq("user_id", userId)); |
| | | if (null == one) { |
| | | one = new UserLotteryEventQuestionsAnswers(); |
| | | one.setId(IdUtils.simpleUUID()); |
| | | one.setLotteryEventId(dto.getId()); |
| | | one.setUserId(userId); |
| | | one.setLotteryEventQuestionId(lotteryEventQuestions.getId()); |
| | | one.setLotteryEventQuestionsAnswersId(lotteryEventQuestionsAnswers.getId()); |
| | | one.setCreateTime(LocalDateTime.now()); |
| | | } |
| | | one.setIsCorrect(0); |
| | | //答案正确 |
| | | if (null != lotteryEventQuestionsAnswers && 1 == lotteryEventQuestionsAnswers.getIsRight()) { |
| | | one.setIsCorrect(1); |
| | | } |
| | | userLotteryEventQuestionsAnswersService.saveOrUpdate(one); |
| | | return R.ok(); |
| | | } |
| | | |
| | | @ResponseBody |
| | | @PostMapping("/endAnswerQuestion/{id}") |
| | | @ApiOperation(value = "结束答题【2.0】", tags = "抽奖活动") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "id", value = "抽奖活动id", required = true, dataType = "String", paramType = "path") |
| | | }) |
| | | public R<Boolean> endAnswerQuestion(@PathVariable("id") String id) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | LotteryEvent lotteryEvent = lotteryEventService.getById(id); |
| | | UserLotteryEventQuestions questionsServiceOne = userLotteryEventQuestionsService.getOne(new QueryWrapper<UserLotteryEventQuestions>().eq("lottery_event_id", id).eq("user_id", userId)); |
| | | questionsServiceOne.setStatus(2); |
| | | questionsServiceOne.setEndTime(LocalDateTime.now()); |
| | | //计算正确率 |
| | | List<UserLotteryEventQuestionsAnswers> list = userLotteryEventQuestionsAnswersService.list(new QueryWrapper<UserLotteryEventQuestionsAnswers>().eq("lottery_event_id", id).eq("user_id", userId)); |
| | | int count = list.size(); |
| | | int right = list.stream().filter(item -> 1 == item.getIsCorrect()).collect(Collectors.toList()).size(); |
| | | BigDecimal multiply = new BigDecimal(right).divide(new BigDecimal(count), 4, BigDecimal.ROUND_HALF_UP).setScale(4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)); |
| | | questionsServiceOne.setCorrectAnswerRate(multiply); |
| | | userLotteryEventQuestionsService.updateById(questionsServiceOne); |
| | | if (multiply.compareTo(lotteryEvent.getAccuracy()) >= 0) { |
| | | return R.ok(true); |
| | | } |
| | | return R.ok(false); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.controller.staff; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.goods.domain.dto.XiaoeLiveQueryDto; |
| | | import com.ruoyi.goods.domain.vo.XiaoeLiveVo; |
| | | import com.ruoyi.goods.service.biz.XiaoeLiveService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import javax.validation.Valid; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2025/1/15 |
| | | */ |
| | | @Api(tags = {"员工端直播相关接口"}) |
| | | @RestController |
| | | @RequestMapping("/staff/live") |
| | | @RequiredArgsConstructor |
| | | public class StaffLiveController { |
| | | private final XiaoeLiveService xiaoeLiveService; |
| | | |
| | | /** |
| | | * 员工端直播列表 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | @ApiOperation("直播列表") |
| | | @PostMapping("/page") |
| | | public R<Page<XiaoeLiveVo>> minePage(@Valid @RequestBody XiaoeLiveQueryDto dto) { |
| | | return R.ok(xiaoeLiveService.getStaffLivePage(dto)); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/27 10:45 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class AnswerQuestionDto { |
| | | @ApiModelProperty(value = "抽奖id") |
| | | private String id; |
| | | @ApiModelProperty(value = "当前题号") |
| | | private Integer current; |
| | | @ApiModelProperty(value = "答案") |
| | | private String answer; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/5 10:32 |
| | | */ |
| | | @ApiModel |
| | | @Data |
| | | public class DelShopLotteryDrawDto { |
| | | @ApiModelProperty("门店id") |
| | | private Long shopId; |
| | | @ApiModelProperty("抽奖活动id") |
| | | private String id; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/27 10:22 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class LotteryEventQuestionsDto { |
| | | @ApiModelProperty(value = "抽奖id") |
| | | private String id; |
| | | @ApiModelProperty(value = "当前题号") |
| | | private Integer current; |
| | | @ApiModelProperty(value = "-1=上一题,1=下一题") |
| | | private Integer stepOrDown; |
| | | } |
| | |
| | | |
| | | @ApiModelProperty(value = "创建时间") |
| | | private String createEndTime; |
| | | |
| | | @ApiModelProperty(value = "商品状态-1删除1上架2下架") |
| | | private Integer goodsStatus; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.dto; |
| | | |
| | | import com.ruoyi.system.api.domain.dto.MgtPageDto; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author jqs34 |
| | | * @ClassName MerGoodsPageDto |
| | | * @description: TODO |
| | | * @date 2023年05月04日 |
| | | * @version: 1.0 |
| | | */ |
| | | @Data |
| | | public class PageShopMgtGoodsDTO extends MgtPageDto { |
| | | |
| | | @ApiModelProperty(value = "商品名称") |
| | | private String goodsName; |
| | | |
| | | @ApiModelProperty(value = "商品类型1周期2服务3体验4单品") |
| | | private Integer goodsType; |
| | | |
| | | @ApiModelProperty(value = "商品分类id") |
| | | private Long goodsClassId; |
| | | |
| | | @ApiModelProperty(value = "创建时间") |
| | | private String createStartTime; |
| | | |
| | | @ApiModelProperty(value = "创建时间") |
| | | private String createEndTime; |
| | | |
| | | @ApiModelProperty(value = "商品状态-1删除1上架2下架") |
| | | private Integer goodsStatus; |
| | | |
| | | @ApiModelProperty(value = "所属门店") |
| | | private String shopName; |
| | | |
| | | @ApiModelProperty(value = "商户id") |
| | | private Long shopId; |
| | | |
| | | private List<Long> shopIds; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.dto; |
| | | |
| | | import com.ruoyi.system.api.domain.dto.MgtPageDto; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/5 9:23 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class ShopLotteryDrawListDto extends MgtPageDto { |
| | | @ApiModelProperty(value = "商户id") |
| | | private Long shopId; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.dto; |
| | | |
| | | import com.ruoyi.system.api.domain.dto.MgtPageDto; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/5 11:24 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class ShopWinningRecordDto extends MgtPageDto { |
| | | @ApiModelProperty("门店id") |
| | | private Long shopId; |
| | | @ApiModelProperty("抽奖id") |
| | | private String id; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.dto; |
| | | |
| | | import com.alibaba.fastjson2.annotation.JSONField; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import javax.validation.constraints.NotNull; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2025/1/9 |
| | | */ |
| | | @Data |
| | | @ApiModel("小鹅通课程列表查询参数") |
| | | public class XiaoeCourseQueryDto { |
| | | |
| | | @ApiModelProperty(value = "课程名字模糊搜索") |
| | | @JSONField(name = "search_content") |
| | | private String searchContent; |
| | | |
| | | @ApiModelProperty(value = "课程创建来源 0:全部,1:课程,2:圈子") |
| | | @JSONField(name = "created_source") |
| | | private Integer createdSource; |
| | | |
| | | @ApiModelProperty("课程分组id数组") |
| | | @JSONField(name = "tags") |
| | | private List<String> tags; |
| | | |
| | | @ApiModelProperty(value = "当前页") |
| | | @JSONField(name = "page_index") |
| | | private Integer pageNo; |
| | | |
| | | @ApiModelProperty("每页条数") |
| | | @JSONField(name = "page_size") |
| | | private Integer pageSize; |
| | | |
| | | @ApiModelProperty("排序类型 1:创建时间倒序 2:开始时间升序") |
| | | @NotNull(message = "排序类型不能为空") |
| | | private Integer sortBy; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.dto; |
| | | |
| | | import com.alibaba.fastjson2.annotation.JSONField; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.hibernate.validator.constraints.Length; |
| | | |
| | | import javax.validation.constraints.NotBlank; |
| | | import javax.validation.constraints.NotNull; |
| | | |
| | | @ApiModel(description = "资源信息") |
| | | @Data |
| | | public class XiaoeLiveDto { |
| | | |
| | | @ApiModelProperty(value = "直播id",notes = "添加不传,编辑必传") |
| | | @JSONField(name = "id") |
| | | private String id; |
| | | |
| | | @ApiModelProperty(value = "直播标题", required = true, notes = "字符长度必须小于45") |
| | | @NotBlank(message = "直播标题不能为空") |
| | | @JSONField(name = "title") |
| | | private String title; |
| | | |
| | | @ApiModelProperty(value = "直播简介", notes = "字符长度必须小于256,默认为空") |
| | | @NotBlank(message = "直播简介不能为空") |
| | | @Length(max = 256, message = "直播简介长度不能超过256") |
| | | @JSONField(name = "summary") |
| | | private String summary; |
| | | |
| | | @ApiModelProperty(value = "预设直播开始时间", required = true, notes = "距离当前时间不能超过五年", example = "2023-05-31 18:00:00") |
| | | @NotBlank(message = "预设直播开始时间不能为空") |
| | | @JSONField(name = "zb_start_at") |
| | | private String zbStartAt; |
| | | |
| | | @ApiModelProperty(value = "预设直播时长,单位:秒", required = true, notes = "距离预设直播开始时间不能超过十年") |
| | | @JSONField(name = "zb_stop_at") |
| | | private Integer zbStopAt; |
| | | |
| | | @ApiModelProperty(value = "直播类型 0-语音,1-录播直播,2-推流直播,默认为0-语音直播") |
| | | @NotNull(message = "直播类型不能为空") |
| | | @JSONField(name = "alive_type") |
| | | private Integer aliveType; |
| | | |
| | | @ApiModelProperty(value = "直播模式:0-横屏直播,1-竖屏直播(默认为0-横屏直播)", example = "0") |
| | | @NotNull(message = "直播模式不能为空") |
| | | @JSONField(name = "alive_mode") |
| | | private Integer aliveMode; |
| | | |
| | | @ApiModelProperty(value = "讲师用户id") |
| | | @NotBlank(message = "讲师用户id不能为空") |
| | | @JSONField(name = "user_id") |
| | | private String userId; |
| | | |
| | | @ApiModelProperty(value = "支付类型:1-免费,3-加密,仅当goods_info.sale_type=2时才可用", example = "1") |
| | | @NotNull(message = "直播类型不能为空") |
| | | @JSONField(name = "payment_type") |
| | | private Integer paymentType; |
| | | |
| | | @ApiModelProperty(value = "密码(paymentType为3时必填,否则该字段无效)") |
| | | @JSONField(name = "resource_password") |
| | | private String resourcePassword; |
| | | |
| | | @ApiModelProperty(value = "直播详情", notes = "仅允许纯文本,不得超过5000个字符,默认为空") |
| | | @NotBlank(message = "直播详情不能为空") |
| | | @Length(max = 5000, message = "直播详情长度不能超过5000") |
| | | @JSONField(name = "descrb") |
| | | private String descrb; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2025/1/8 |
| | | */ |
| | | @Data |
| | | @ApiModel("直播分页查询参数") |
| | | public class XiaoeLiveQueryDto { |
| | | |
| | | @ApiModelProperty(value = "直播名称关键字") |
| | | private String searchContent; |
| | | |
| | | @ApiModelProperty(value = "直播课程类型 -1 全部;0 店铺课程; 1 转播课程;默认-1") |
| | | private Integer createMode; |
| | | |
| | | @ApiModelProperty(value = "直播商品状态 -1 全部; 0 已上架; 1 已下架;2 待上架;默认-1") |
| | | private Integer state; |
| | | |
| | | @ApiModelProperty(value = "直播模式:-1 全部;10 横屏直播;11竖屏直播;12语音直播;13录播直播;默认-1") |
| | | private Integer searchAliveType; |
| | | |
| | | @ApiModelProperty(value = "直播状态:-1全部;0未开始;1直播中;2已结束;默认-1") |
| | | private Integer alivePlayState; |
| | | |
| | | @ApiModelProperty(value = "页码,表示第几页,从1开始;默认1") |
| | | private Integer page; |
| | | |
| | | @ApiModelProperty(value = "每页条数,最大50条;默认10") |
| | | private Integer pageSize; |
| | | |
| | | @ApiModelProperty("门店id") |
| | | private Long shopId; |
| | | |
| | | @ApiModelProperty("直播类型 1:平台直播 2:商家直播") |
| | | private Integer liveType; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.pojo.live; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.FieldFill; |
| | | 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 lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * <p> |
| | | * 直播预约记录 |
| | | * </p> |
| | | * |
| | | * @author mitao |
| | | * @since 2025-01-09 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = false) |
| | | @Accessors(chain = true) |
| | | @TableName("t_xiaoe_live_appointment") |
| | | public class XiaoeLiveAppointment implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * 主键id |
| | | */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | |
| | | /** |
| | | * 直播id |
| | | */ |
| | | private String liveId; |
| | | |
| | | /** |
| | | * 预约人id |
| | | */ |
| | | private Long userId; |
| | | /** |
| | | * 直播开始时间 |
| | | */ |
| | | private Date aliveStartAt; |
| | | |
| | | /** |
| | | * 直播标题 |
| | | */ |
| | | private String title; |
| | | |
| | | /** |
| | | * 预约时间 |
| | | */ |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private Date createTime; |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.pojo.live; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.FieldFill; |
| | | 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 lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * <p> |
| | | * 小鹅通直播添加记录表 |
| | | * </p> |
| | | * |
| | | * @author mitao |
| | | * @since 2025-01-09 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = false) |
| | | @Accessors(chain = true) |
| | | @TableName("t_xiaoe_live_record") |
| | | public class XiaoeLiveRecord implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * 主键id |
| | | */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | /** |
| | | * 记录类型(1:平台 2:经销商) |
| | | */ |
| | | private Integer type; |
| | | |
| | | /** |
| | | * 直播id |
| | | */ |
| | | private String liveId; |
| | | |
| | | /** |
| | | * 店铺(仅记录类型为经销商时使用) |
| | | */ |
| | | private Long shopId; |
| | | |
| | | /** |
| | | * 店铺名称 |
| | | */ |
| | | private String shopName; |
| | | |
| | | /** |
| | | * 添加时间 |
| | | */ |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private Date createTime; |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 16:25 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class AppLotteryEventPageVo { |
| | | @ApiModelProperty("数据id") |
| | | private String id; |
| | | @ApiModelProperty("抽奖名称") |
| | | private String name; |
| | | @ApiModelProperty("活动简介名称") |
| | | private String activityProfile; |
| | | @ApiModelProperty("开启方式(1=新注册用户,2=下单,3=分享小程序,4=普通抽奖,5=答题抽奖)") |
| | | private Integer activityType; |
| | | @ApiModelProperty("活动开始时间") |
| | | private String startTime; |
| | | @ApiModelProperty("活动结束时间") |
| | | private String endTime; |
| | | @ApiModelProperty("封面图") |
| | | private String coverImage; |
| | | @ApiModelProperty("参与状态") |
| | | private Boolean participation; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 17:42 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class LotteryEventInfoVo { |
| | | @ApiModelProperty(value = "抽奖id") |
| | | private String id; |
| | | @ApiModelProperty(value = "抽奖名称") |
| | | private String name; |
| | | @ApiModelProperty(value = "活动简介名称") |
| | | private String activityProfile; |
| | | @ApiModelProperty(value = "开始时间") |
| | | private String startTime; |
| | | @ApiModelProperty(value = "活动详情") |
| | | private String activityContent; |
| | | @ApiModelProperty(value = "是否参与") |
| | | private Boolean participation; |
| | | @ApiModelProperty(value = "是否继续答题(0=未开始,1=已开始,2=已结束)") |
| | | private Integer continueAnswer; |
| | | @ApiModelProperty(value = "答题开始时间") |
| | | private String answerStartTime; |
| | | @ApiModelProperty(value = "答题时限") |
| | | private Integer answerTimeLimit; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/27 10:05 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class LotteryEventQuestionsVo { |
| | | @ApiModelProperty(value = "抽奖id") |
| | | private String id; |
| | | @ApiModelProperty("题干名称") |
| | | private String name; |
| | | @ApiModelProperty("总提数") |
| | | private Integer total; |
| | | @ApiModelProperty("当前题数") |
| | | private Integer current; |
| | | @ApiModelProperty("已答答案") |
| | | private String answer; |
| | | @ApiModelProperty("答题选项") |
| | | private List<Map<String, String>> options; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.vo; |
| | | |
| | | import com.ruoyi.goods.api.domain.LotteryEventPrize; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/12 9:39 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class LotteryEventVo { |
| | | @ApiModelProperty(value = "抽奖id") |
| | | private String id; |
| | | @ApiModelProperty(value = "抽奖名称") |
| | | private String name; |
| | | @ApiModelProperty(value = "活动简介名称") |
| | | private String activityProfile; |
| | | @ApiModelProperty(value = "奖品列表") |
| | | private List<LotteryEventPrize> prizeList; |
| | | @ApiModelProperty(value = "剩余次数") |
| | | private Integer laveTimes; |
| | | @ApiModelProperty(value = "答题正确率") |
| | | private BigDecimal correctAnswerRate; |
| | | @ApiModelProperty(value = "您的奖品") |
| | | private List<UserLotteryEventVo> yourPrizeList; |
| | | } |
| | |
| | | |
| | | @ApiModelProperty(value = "商品图片") |
| | | private String goodsPicture; |
| | | |
| | | |
| | | @ApiModelProperty(value = "商品类型1周期2服务3体验4单品") |
| | | private Integer goodsType; |
| | | |
| | | |
| | | @ApiModelProperty(value = "商品调理问题") |
| | | private String goodsNurses; |
| | | |
| | | |
| | | @ApiModelProperty(value = "商品建议售价") |
| | | @JsonSerialize(using = ToStringSerializer.class) |
| | | private BigDecimal suggestSalesPrice;; |
| | | |
| | | private BigDecimal suggestSalesPrice; |
| | | |
| | | @ApiModelProperty(value = "商品售价") |
| | | @JsonSerialize(using = ToStringSerializer.class) |
| | | private BigDecimal salesPrice;; |
| | | |
| | | @ApiModelProperty(value="周期次数标记0否1是") |
| | | private BigDecimal salesPrice; |
| | | |
| | | @ApiModelProperty(value = "周期次数标记0否1是") |
| | | private Integer cycleNumFlag; |
| | | |
| | | |
| | | @ApiModelProperty(value = "商品默认服务次数") |
| | | private Integer defaultServiceNum;; |
| | | |
| | | private Integer defaultServiceNum; |
| | | |
| | | @ApiModelProperty(value = "服务次数") |
| | | private Integer serviceNum;; |
| | | private Integer serviceNum; |
| | | |
| | | @ApiModelProperty(value = "加盟商修改价格权限(0=关,1=开)") |
| | | private Integer modifyPricePermission; |
| | | |
| | | @ApiModelProperty("是否设置统一售价(0=否,1=是)") |
| | | private Integer isUnifiedPrice; |
| | | |
| | | @ApiModelProperty("统一售价") |
| | | private BigDecimal unifiedPrice; |
| | | |
| | | @ApiModelProperty("统一服务次数") |
| | | private Integer unifiedServerNum; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.vo; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.fasterxml.jackson.databind.annotation.JsonSerialize; |
| | | import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * @author huliguo |
| | | * @ClassName PageShopMgtGoodsVO |
| | | * @description: TODO |
| | | * @date 2025年06月13日 |
| | | * @version: 2.0 |
| | | */ |
| | | @Data |
| | | public class PageShopMgtGoodsVO { |
| | | |
| | | @Excel(name = "序号", width = 30, sort = 1) |
| | | @ApiModelProperty(value = "商品id") |
| | | private String goodsId; |
| | | |
| | | @Excel(name = "商品名称", width = 30, sort = 3) |
| | | @ApiModelProperty(value = "商品名称") |
| | | private String goodsName; |
| | | |
| | | @Excel(name = "商品简介", width = 30, sort = 4) |
| | | @ApiModelProperty(value = "商品简介") |
| | | private String goodsIntroduction; |
| | | |
| | | @Excel(name = "所属分类", width = 30, sort = 6) |
| | | @ApiModelProperty(value = "商品分类") |
| | | private String goodsClass; |
| | | |
| | | @Excel(name = "标签", width = 30, sort = 7) |
| | | @ApiModelProperty(value = "商品标签") |
| | | private String goodsTags; |
| | | |
| | | @Excel(name = "商品封面", width = 30, sort = 2) |
| | | @ApiModelProperty(value = "商品图片") |
| | | private String goodsPicture; |
| | | |
| | | @Excel(name = "商品类型", width = 30, sort = 6) |
| | | @ApiModelProperty(value = "商品类型1周期2服务3体验4单品") |
| | | private String goodsType; |
| | | |
| | | @Excel(name = "建议售价", width = 30, sort = 8) |
| | | @ApiModelProperty(value = "商品建议售价") |
| | | @JsonSerialize(using = ToStringSerializer.class) |
| | | private BigDecimal suggestSalesPrice;; |
| | | |
| | | @Excel(name = "门店售价", width = 30, sort = 9) |
| | | @ApiModelProperty(value = "门店售价") |
| | | @JsonSerialize(using = ToStringSerializer.class) |
| | | private BigDecimal shopPrice;; |
| | | |
| | | @Excel(name = "所属门店", width = 30, sort = 10) |
| | | @ApiModelProperty(value = "所属门店") |
| | | private String shopName; |
| | | |
| | | |
| | | @Excel(name = "状态", width = 30, sort = 13) |
| | | @ApiModelProperty(value = "商品状态") |
| | | private String goodsStatus; |
| | | |
| | | @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", sort = 14) |
| | | @ApiModelProperty(value = "创建时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | @ApiModelProperty("修改价格权限(0=关,1=开)") |
| | | private Integer modifyPricePermission; |
| | | |
| | | private Long shopId; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/5 9:27 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class ShopLotteryDrawListVo { |
| | | @ApiModelProperty("数据id") |
| | | private String id; |
| | | @ApiModelProperty("抽奖名称") |
| | | private String name; |
| | | @ApiModelProperty("简介") |
| | | private String activityProfile; |
| | | @ApiModelProperty("抽奖图片") |
| | | private String coverImage; |
| | | @ApiModelProperty("抽奖开始时间") |
| | | private String startTime; |
| | | @ApiModelProperty("抽奖结束时间") |
| | | private String endTime; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.vo; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/5 9:25 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class ShopLotteryDrawVo { |
| | | @ApiModelProperty(value = "抽奖1开2关") |
| | | private Integer lotteryDrawFlag; |
| | | @ApiModelProperty("抽奖列表") |
| | | private Page<ShopLotteryDrawListVo> page; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/5 11:09 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class ShopWinningRecordVo { |
| | | @ApiModelProperty("用户名") |
| | | private String userName; |
| | | @ApiModelProperty("用户电话") |
| | | private String userPhone; |
| | | @ApiModelProperty("抽奖时间") |
| | | private String lotteryTime; |
| | | @ApiModelProperty("奖品名称") |
| | | private String awardName; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/12 10:44 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class UserLotteryEventVo { |
| | | @ApiModelProperty("奖品名称") |
| | | private String name; |
| | | @ApiModelProperty("奖品类型(1=优惠券,2=平台商品,3=线下商品,4=积分)") |
| | | private Integer prizeType; |
| | | @ApiModelProperty("奖品数量") |
| | | private Integer number; |
| | | @ApiModelProperty("核销码") |
| | | private String verifyCode; |
| | | @ApiModelProperty("是否已核销(0=否,1=是)") |
| | | private Integer isVerify; |
| | | @ApiModelProperty("核销时间") |
| | | private String verifyTime; |
| | | @ApiModelProperty("核销门店") |
| | | private String verifyShop; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.vo; |
| | | |
| | | import com.alibaba.fastjson2.annotation.JSONField; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2025/1/9 |
| | | */ |
| | | @Data |
| | | @ApiModel("课程目录小节视图对象") |
| | | public class XiaoeCourseChapterVO { |
| | | @ApiModelProperty(value = "章节id") |
| | | @JSONField(name = "chapter_id") |
| | | private String chapterId; |
| | | |
| | | @ApiModelProperty(value = "章节名称") |
| | | @JSONField(name = "chapter_title") |
| | | private String chapterTitle; |
| | | |
| | | @ApiModelProperty(value = "章节类型 0-无 1-章 2-节") |
| | | @JSONField(name = "chapter_type") |
| | | private Integer chapterType; |
| | | |
| | | @ApiModelProperty(value = "关联资源的种类(1:图文,2:音频,3:视频,4:直播,20:电子书,45:AI互动课,34练习,27考试,51文档,15作业,13表单,14测试互动)") |
| | | @JSONField(name = "resource_type") |
| | | private Integer resourceType; |
| | | |
| | | @ApiModelProperty(value = "子章节集合") |
| | | @JSONField(name = "children") |
| | | private List<XiaoeCourseChapterVO> children; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2025/1/9 |
| | | */ |
| | | @Data |
| | | @ApiModel("商品分组视图对象") |
| | | public class XiaoeCourseGroupVO { |
| | | |
| | | @ApiModelProperty("商品分组id") |
| | | private String id; |
| | | |
| | | @ApiModelProperty("商品分组名称") |
| | | private String name; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.vo; |
| | | |
| | | import com.alibaba.fastjson2.annotation.JSONField; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2025/1/9 |
| | | */ |
| | | @Data |
| | | @ApiModel("小鹅通课程视图对象") |
| | | public class XiaoeCourseVO { |
| | | @ApiModelProperty("课程id") |
| | | @JSONField(name = "resource_id") |
| | | private String resourceId; |
| | | |
| | | @ApiModelProperty("课程id") |
| | | @JSONField(name = "resource_type") |
| | | private Integer resourceType; |
| | | |
| | | @ApiModelProperty("课程名称") |
| | | @JSONField(name = "title") |
| | | private String title; |
| | | |
| | | @ApiModelProperty("课程封面") |
| | | @JSONField(name = "img_url") |
| | | private String imgUrl; |
| | | |
| | | @ApiModelProperty("用户数") |
| | | @JSONField(name = "user_count") |
| | | private Integer userCount; |
| | | |
| | | @ApiModelProperty("内容数") |
| | | @JSONField(name = "resource_cnt") |
| | | private Integer resourceCnt; |
| | | |
| | | @ApiModelProperty("开课时间") |
| | | @JSONField(name = "curriculum_time") |
| | | private Date curriculumTime; |
| | | |
| | | @ApiModelProperty("更新时间") |
| | | @JSONField(name = "last_updated_at") |
| | | private Date lastUpdatedAt; |
| | | |
| | | @ApiModelProperty("开课结束时间") |
| | | @JSONField(name = "curriculum_end_time") |
| | | private Date curriculumEndTime; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.vo; |
| | | |
| | | import com.alibaba.fastjson2.annotation.JSONField; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2025/1/14 |
| | | */ |
| | | @Data |
| | | @ApiModel("直播详情2.0视图对象") |
| | | public class XiaoeLiveDetailVOV2 { |
| | | @ApiModelProperty(value = "资源信息") |
| | | @JSONField(name = "resource_info") |
| | | private ResourceInfo resourceInfo; |
| | | @ApiModelProperty(value = "配置信息") |
| | | @JSONField(name = "module_info") |
| | | private ModuleInfo moduleInfo; |
| | | @ApiModelProperty(value = "商品信息") |
| | | @JSONField(name = "goods_info") |
| | | private GoodsInfo goodsInfo; |
| | | @ApiModelProperty(value = "关联信息") |
| | | @JSONField(name = "relation_info") |
| | | private RelationInfo relationInfo; |
| | | @ApiModelProperty(value = "讲师信息") |
| | | @JSONField(name = "role_info") |
| | | private List<RelationInfo.RoleInfo> roleInfo; |
| | | |
| | | @Data |
| | | @ApiModel(description = "资源信息") |
| | | public static class ResourceInfo { |
| | | @ApiModelProperty(value = "店铺id", example = "app_id") |
| | | @JSONField(name = "app_id") |
| | | private String appId; |
| | | @ApiModelProperty(value = "直播ID", example = "id") |
| | | @JSONField(name = "id") |
| | | private String id; |
| | | @ApiModelProperty(value = "直播标题", example = "title") |
| | | @JSONField(name = "title") |
| | | private String title; |
| | | @ApiModelProperty(value = "直播简介", example = "summary") |
| | | @JSONField(name = "summary") |
| | | private String summary; |
| | | @ApiModelProperty(value = "直播详情(仅允许纯文本)", example = "descrb") |
| | | @JSONField(name = "descrb") |
| | | private String descrb; |
| | | @ApiModelProperty(value = "直播类型:0-语音,1-录播直播,2-推流直播", example = "2") |
| | | @JSONField(name = "alive_type") |
| | | private Integer aliveType; |
| | | @ApiModelProperty(value = "预设直播开始时间", example = "2023-05-31 18:00:00") |
| | | @JSONField(name = "zb_start_at") |
| | | private String zbStartAt; |
| | | @ApiModelProperty(value = "预设直播时长,单位:秒", example = "3600") |
| | | @JSONField(name = "zb_stop_at") |
| | | private Integer zbStopAt; |
| | | @ApiModelProperty(value = "详情封面图素材ID", example = "img_material_id") |
| | | @JSONField(name = "img_material_id") |
| | | private String imgMaterialId; |
| | | @ApiModelProperty(value = "宣传封面图素材ID", example = "alive_img_material_id") |
| | | @JSONField(name = "alive_img_material_id") |
| | | private String aliveImgMaterialId; |
| | | @ApiModelProperty(value = "暖场封面图素材ID", example = "aliveroom_img_material_id") |
| | | @JSONField(name = "aliveroom_img_material_id") |
| | | private String aliveroomImgMaterialId; |
| | | @ApiModelProperty(value = "暖场视频封面图素材ID", example = "warm_up_video_cover_material_id") |
| | | @JSONField(name = "warm_up_video_cover_material_id") |
| | | private String warmUpVideoCoverMaterialId; |
| | | @ApiModelProperty(value = "暖场视频素材ID", example = "warm_up_video_material_id") |
| | | @JSONField(name = "warm_up_video_material_id") |
| | | private String warmUpVideoMaterialId; |
| | | @ApiModelProperty(value = "录播视频素材ID", example = "alive_video_material_id") |
| | | @JSONField(name = "alive_video_material_id") |
| | | private String aliveVideoMaterialId; |
| | | |
| | | } |
| | | |
| | | @Data |
| | | @ApiModel(description = "配置信息") |
| | | public static class ModuleInfo { |
| | | @ApiModelProperty(value = "是否开启回放:0-开启,1-关闭", example = "0") |
| | | @JSONField(name = "is_lookback") |
| | | private Integer isLookback; |
| | | @ApiModelProperty(value = "回放是否允许倍速播放或快进:0-允许,1-禁止", example = "0") |
| | | @JSONField(name = "play_fast_state_switch") |
| | | private Integer playFastStateSwitch; |
| | | @ApiModelProperty(value = "直播模式:0-横屏直播,1-竖屏直播", example = "0") |
| | | @JSONField(name = "alive_mode") |
| | | private Integer aliveMode; |
| | | @ApiModelProperty(value = "回放有效期设置:1-永久,2-限时", example = "1") |
| | | @JSONField(name = "expire_type") |
| | | private Integer expireType; |
| | | @ApiModelProperty(value = "回放过期时间", example = "2023-06-30") |
| | | @JSONField(name = "expire") |
| | | private String expire; |
| | | @ApiModelProperty(value = "暖场设置:1-暖场图,2-暖场视频", example = "1") |
| | | @JSONField(name = "warm_up") |
| | | private Integer warmUp; |
| | | @ApiModelProperty(value = "是否开启完成条件:0-关闭,1-开启", example = "0") |
| | | @JSONField(name = "is_open_complete_time") |
| | | private Integer isOpenCompleteTime; |
| | | @ApiModelProperty(value = "设置最短学习时间(单位:分钟)", example = "0") |
| | | @JSONField(name = "complete_time") |
| | | private Integer completeTime; |
| | | @ApiModelProperty(value = "是否开启联系学员:0-关闭,1-开启", example = "0") |
| | | @JSONField(name = "is_contact_on") |
| | | private Integer isContactOn; |
| | | } |
| | | |
| | | @Data |
| | | @ApiModel(description = "商品信息") |
| | | public static class GoodsInfo { |
| | | @ApiModelProperty(value = "售卖类型:1-单独售卖、2-关联售卖", example = "1") |
| | | @JSONField(name = "sale_type") |
| | | private Integer saleType; |
| | | @ApiModelProperty(value = "支付类型:1-免费,2-收费,3-加密,4-指定学员可用,5-仅关联上级资源", example = "1") |
| | | @JSONField(name = "payment_type") |
| | | private Integer paymentType; |
| | | @ApiModelProperty(value = "价格(单位:分)", example = "0") |
| | | @JSONField(name = "piece_price") |
| | | private Integer piecePrice; |
| | | @ApiModelProperty(value = "划线价格(单位:分)", example = "0") |
| | | @JSONField(name = "line_price") |
| | | private Integer linePrice; |
| | | @ApiModelProperty(value = "密码", example = "resource_password") |
| | | @JSONField(name = "resource_password") |
| | | private String resourcePassword; |
| | | @ApiModelProperty(value = "上下架:1-下架,0-上架", example = "0") |
| | | @JSONField(name = "recycle_bin_state") |
| | | private Integer recycleBinState; |
| | | @ApiModelProperty(value = "定时上架时间", example = "2023-05-31 17:19:26") |
| | | @JSONField(name = "start_at") |
| | | private String startAt; |
| | | @ApiModelProperty(value = "是否停售:0-否,1-是", example = "0") |
| | | @JSONField(name = "is_stop_sell") |
| | | private Integer isStopSell; |
| | | @ApiModelProperty(value = "商品编码", example = "goods_sn") |
| | | @JSONField(name = "goods_sn") |
| | | private String goodsSn; |
| | | @ApiModelProperty(value = "商品状态:0-可见,1-隐藏,2-删除", example = "0") |
| | | @JSONField(name = "state") |
| | | private Integer state; |
| | | } |
| | | |
| | | @Data |
| | | @ApiModel(description = "关联信息") |
| | | public static class RelationInfo { |
| | | @ApiModelProperty(value = "资源id") |
| | | @JSONField(name = "package") |
| | | private List<String> packageIds; |
| | | @ApiModelProperty(value = "预留字段,暂未支持") |
| | | @JSONField(name = "attach_goods") |
| | | private List<String> attachGoods; |
| | | @ApiModelProperty(value = "预留字段,暂未支持") |
| | | @JSONField(name = "tags") |
| | | private List<String> tags; |
| | | |
| | | @Data |
| | | @ApiModel(description = "讲师信息列表") |
| | | public static class RoleInfo { |
| | | @ApiModelProperty(value = "自定义身份标签", example = "讲师") |
| | | @JSONField(name = "role_name") |
| | | private String roleName; |
| | | @ApiModelProperty(value = "用户id", example = "u_6688888888889999999") |
| | | @JSONField(name = "user_id") |
| | | private String userId; |
| | | @ApiModelProperty(value = "用户昵称", example = "测试") |
| | | @JSONField(name = "nickname") |
| | | private String nickname; |
| | | @ApiModelProperty(value = "用户头像", example = "avator") |
| | | @JSONField(name = "avator") |
| | | private String avator; |
| | | @ApiModelProperty(value = "是否接受打赏:1-接受打赏,0-不接受打赏", example = "1") |
| | | @JSONField(name = "is_can_exceptional") |
| | | private Integer isCanExceptional; |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.vo; |
| | | |
| | | import com.alibaba.fastjson2.annotation.JSONField; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @ApiModel(description = "讲师信息") |
| | | @Data |
| | | public class XiaoeLiveTeacherVo { |
| | | |
| | | @ApiModelProperty(value = "讲师ID") |
| | | @JSONField(name = "user_id") |
| | | private String userId; // 讲师ID |
| | | |
| | | @ApiModelProperty(value = "讲师昵称") |
| | | @JSONField(name = "user_name") |
| | | private String userName; // 讲师昵称 |
| | | |
| | | @ApiModelProperty(value = "讲师绑定手机号") |
| | | @JSONField(name = "phone") |
| | | private String phone; // 讲师绑定手机号 |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.vo; |
| | | |
| | | import com.alibaba.fastjson2.annotation.JSONField; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2025/1/8 |
| | | */ |
| | | @Data |
| | | @ApiModel("小鹅通直播视图对象") |
| | | public class XiaoeLiveVo { |
| | | |
| | | @ApiModelProperty(value = "直播ID") |
| | | @JSONField(name = "id") |
| | | private String id; // 直播ID |
| | | |
| | | @ApiModelProperty(value = "直播手动结束时间") |
| | | @JSONField(name = "alive_manual_stop_at") |
| | | private String aliveManualStopAt; // 直播手动结束时间 |
| | | |
| | | @ApiModelProperty(value = "直播结束时间") |
| | | @JSONField(name = "alive_stop_at") |
| | | private String aliveStopAt; // 直播结束时间 |
| | | |
| | | @ApiModelProperty(value = "直播名称") |
| | | @JSONField(name = "title") |
| | | private String title; // 直播名称 |
| | | |
| | | @ApiModelProperty(value = "直播观看人次,每5分钟同步一次数据") |
| | | @JSONField(name = "view_count") |
| | | private Integer viewCount; // 直播观看人次 |
| | | |
| | | @ApiModelProperty(value = "直播类型:10 横屏直播;11竖屏直播;12语音直播;13录播直播") |
| | | @JSONField(name = "alive_type") |
| | | private Integer aliveType; // 直播类型 |
| | | |
| | | @ApiModelProperty(value = "订阅量") |
| | | @JSONField(name = "purchase_count") |
| | | private Integer purchaseCount; // 订阅量 |
| | | |
| | | @ApiModelProperty(value = "打赏金额(元)") |
| | | @JSONField(name = "reward_sum") |
| | | private String rewardSum; // 打赏金额(元) |
| | | |
| | | @ApiModelProperty(value = "直播商品状态:-1 全部; 0 已上架; 1 已下架;2 待上架") |
| | | @JSONField(name = "recycle_bin_state") |
| | | private Integer recycleBinState; // 直播商品状态 |
| | | |
| | | @ApiModelProperty(value = "直播开始时间") |
| | | @JSONField(name = "alive_start_at") |
| | | private String aliveStartAt; // 直播开始时间 |
| | | |
| | | @ApiModelProperty(value = "直播状态:-1全部;0未开始;1直播中;2已结束") |
| | | @JSONField(name = "alive_state") |
| | | private Integer aliveState; // 直播状态 |
| | | |
| | | @ApiModelProperty(value = "直播显隐状态:0-显示,1-隐藏") |
| | | @JSONField(name = "resource_state") |
| | | private Integer resourceState; // 直播显隐状态 |
| | | |
| | | @ApiModelProperty(value = "店铺直播详情页地址") |
| | | @JSONField(name = "page_url") |
| | | private String pageUrl; // 店铺直播详情页地址 |
| | | |
| | | @ApiModelProperty(value = "直播课程类型:-1 全部;0 店铺课程; 1 转播课程") |
| | | @JSONField(name = "create_mode") |
| | | private Integer createMode; // 直播课程类型 |
| | | |
| | | @ApiModelProperty(value = "封面地址") |
| | | @JSONField(name = "img_url") |
| | | private String imgUrl; // 封面地址 |
| | | |
| | | @ApiModelProperty(value = "直播宣传图地址") |
| | | @JSONField(name = "alive_img_url") |
| | | private String aliveImgUrl; // 直播宣传图地址 |
| | | |
| | | @ApiModelProperty(value = "讲师列表") |
| | | @JSONField(name = "guest_list") |
| | | private List<XiaoeLiveTeacherVo> guestList; |
| | | |
| | | @ApiModelProperty("评论数") |
| | | @JSONField(name = "comment_count") |
| | | private Integer commentCount; |
| | | |
| | | @ApiModelProperty("评论用户数") |
| | | @JSONField(name = "comment_user_count") |
| | | private Integer commentUserCount; |
| | | |
| | | @ApiModelProperty("打赏次数") |
| | | @JSONField(name = "reward_count") |
| | | private Integer rewardCount; |
| | | |
| | | @ApiModelProperty("打赏人数") |
| | | @JSONField(name = "reward_user_count") |
| | | private Integer rewardUserCount; |
| | | |
| | | @ApiModelProperty("直播简介") |
| | | @JSONField(name = "summary") |
| | | private String summary; |
| | | |
| | | @ApiModelProperty("预约状态 1:已预约 0:未预约") |
| | | private Integer appointmentState=0; |
| | | |
| | | @ApiModelProperty("创建门店") |
| | | private String shopName; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.domain.vo; |
| | | |
| | | import lombok.Data; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import com.alibaba.fastjson2.annotation.JSONField; |
| | | |
| | | @Data |
| | | @ApiModel(description = "小鹅通直播视图对象2.0") |
| | | public class XiaoeLiveVoV2 { |
| | | |
| | | @ApiModelProperty(value = "店铺ID", example = "app_id") |
| | | @JSONField(name = "app_id") |
| | | private String appId; |
| | | |
| | | @ApiModelProperty(value = "直播ID", example = "id") |
| | | @JSONField(name = "id") |
| | | private String id; |
| | | |
| | | @ApiModelProperty(value = "房间ID", example = "room_id") |
| | | @JSONField(name = "room_id") |
| | | private String roomId; |
| | | |
| | | @ApiModelProperty(value = "直播标题", example = "title") |
| | | @JSONField(name = "title") |
| | | private String title; |
| | | |
| | | @ApiModelProperty(value = "直播封面图", example = "img_url") |
| | | @JSONField(name = "img_url") |
| | | private String imgUrl; |
| | | |
| | | @ApiModelProperty(value = "页面url", example = "page_url") |
| | | @JSONField(name = "page_url") |
| | | private String pageUrl; |
| | | |
| | | @ApiModelProperty(value = "封面压缩后的路径", example = "img_url_compressed") |
| | | @JSONField(name = "img_url_compressed") |
| | | private String imgUrlCompressed; |
| | | |
| | | @ApiModelProperty(value = "评论数量", example = "comment_count") |
| | | @JSONField(name = "comment_count") |
| | | private Integer commentCount; |
| | | |
| | | @ApiModelProperty(value = "带货开关:1=开,0=关", example = "1") |
| | | @JSONField(name = "is_takegoods") |
| | | private Integer isTakegoods; |
| | | |
| | | @ApiModelProperty(value = "带货商品分组ID", example = "takegoods") |
| | | @JSONField(name = "takegoods") |
| | | private String takegoods; |
| | | |
| | | @ApiModelProperty(value = "付费类型:1-免费、2-单笔、3-付费产品包", example = "1") |
| | | @JSONField(name = "payment_type") |
| | | private Integer paymentType; |
| | | |
| | | @ApiModelProperty(value = "是否公开售卖,1公开,0不公开", example = "1") |
| | | @JSONField(name = "is_public") |
| | | private Integer isPublic; |
| | | |
| | | @ApiModelProperty(value = "是否停售,0-否、1-是", example = "0") |
| | | @JSONField(name = "is_stop_sell") |
| | | private Integer isStopSell; |
| | | |
| | | @ApiModelProperty(value = "视频是否转码,0-表示未转码,1-表示已转码,2-转码失败", example = "0") |
| | | @JSONField(name = "is_transcode") |
| | | private Integer isTranscode; |
| | | |
| | | @ApiModelProperty(value = "payment_type为2时,单笔价格(分);payment_type为3时,专栏价格(分)", example = "0") |
| | | @JSONField(name = "piece_price") |
| | | private Integer piecePrice; |
| | | |
| | | @ApiModelProperty(value = "划线价", example = "0") |
| | | @JSONField(name = "line_price") |
| | | private Integer linePrice; |
| | | |
| | | @ApiModelProperty(value = "该资源是否需要密码", example = "0") |
| | | @JSONField(name = "have_password") |
| | | private Integer havePassword; |
| | | |
| | | @ApiModelProperty(value = "直播类型:0-语音直播,1-视频直播,2-推流直播,3-ppt直播", example = "1") |
| | | @JSONField(name = "alive_type") |
| | | private Integer aliveType; |
| | | |
| | | @ApiModelProperty(value = "订阅量", example = "0") |
| | | @JSONField(name = "purchase_count") |
| | | private Integer purchaseCount; |
| | | |
| | | @ApiModelProperty(value = "打赏金额", example = "0") |
| | | @JSONField(name = "reward_sum") |
| | | private Integer rewardSum; |
| | | |
| | | @ApiModelProperty(value = "强制封禁:0-否 1-是", example = "0") |
| | | @JSONField(name = "is_ban") |
| | | private Integer isBan; |
| | | |
| | | @ApiModelProperty(value = "强制下架:0-否 1-是", example = "0") |
| | | @JSONField(name = "on_shelf") |
| | | private Integer onShelf; |
| | | |
| | | @ApiModelProperty(value = "上下架状态:0-上架,1-下架", example = "0") |
| | | @JSONField(name = "recycle_bin_state") |
| | | private Integer recycleBinState; |
| | | |
| | | @ApiModelProperty(value = "推流状态,0断流,1推流中,2推流未开始", example = "0") |
| | | @JSONField(name = "push_state") |
| | | private Integer pushState; |
| | | |
| | | @ApiModelProperty(value = "直播状态:0-可见,1-关闭,2-删除", example = "0") |
| | | @JSONField(name = "state") |
| | | private Integer state; |
| | | |
| | | @ApiModelProperty(value = "上架时间", example = "2023-05-31 17:19:26") |
| | | @JSONField(name = "start_at") |
| | | private String startAt; |
| | | |
| | | @ApiModelProperty(value = "直播开始时间", example = "2023-05-31 17:19:26") |
| | | @JSONField(name = "zb_start_at") |
| | | private String zbStartAt; |
| | | |
| | | @ApiModelProperty(value = "手动结束直播时间", example = "2023-05-31 17:19:26") |
| | | @JSONField(name = "manual_stop_at") |
| | | private String manualStopAt; |
| | | |
| | | @ApiModelProperty(value = "转播店铺名称", example = "source_shop_name") |
| | | @JSONField(name = "source_shop_name") |
| | | private String sourceShopName; |
| | | |
| | | @ApiModelProperty(value = "素材状态", example = "0") |
| | | @JSONField(name = "material_state") |
| | | private Integer materialState; |
| | | |
| | | @ApiModelProperty(value = "视频时长(s)", example = "0") |
| | | @JSONField(name = "video_length") |
| | | private Integer videoLength; |
| | | |
| | | @ApiModelProperty(value = "直播状态", example = "0") |
| | | @JSONField(name = "alive_state") |
| | | private Integer aliveState; |
| | | |
| | | @ApiModelProperty(value = "直播模式:0.无;1竖屏直播", example = "0") |
| | | @JSONField(name = "alive_mode") |
| | | private Integer aliveMode; |
| | | |
| | | @ApiModelProperty(value = "创建类型:0-自创建,1-转播创建", example = "0") |
| | | @JSONField(name = "create_mode") |
| | | private Integer createMode; |
| | | |
| | | @ApiModelProperty(value = "圆桌会议功能是否开启", example = "0") |
| | | @JSONField(name = "is_round_table_on") |
| | | private Integer isRoundTableOn; |
| | | |
| | | @ApiModelProperty(value = "关联商品", example = "query_package_list") |
| | | @JSONField(name = "query_package_list") |
| | | private String queryPackageList; |
| | | |
| | | @ApiModelProperty(value = "售卖有效期", example = "course_expire") |
| | | @JSONField(name = "course_expire") |
| | | private CourseExpire courseExpire; |
| | | |
| | | @ApiModelProperty("预约状态 1:已预约 0:未预约") |
| | | private Integer appointmentState=0; |
| | | |
| | | @ApiModelProperty("创建门店") |
| | | private String shopName; |
| | | |
| | | @Data |
| | | @ApiModel(description = "Course Expire Information") |
| | | public static class CourseExpire { |
| | | |
| | | @ApiModelProperty(value = "有效期类型:0=永久有效,1=固定有效期,2=自定义有效期", example = "0") |
| | | @JSONField(name = "period_type") |
| | | private Integer periodType; |
| | | |
| | | @ApiModelProperty(value = "自定义有效时长", example = "period_value") |
| | | @JSONField(name = "period_value") |
| | | private String periodValue; |
| | | |
| | | @ApiModelProperty(value = "是否允许重复购买:1=是,0=否", example = "0") |
| | | @JSONField(name = "is_allow_repeat_purchase") |
| | | private Integer isAllowRepeatPurchase; |
| | | } |
| | | } |
| | |
| | | * @return List<String> |
| | | */ |
| | | List<String> listGoodsNameByGoodsClass(@Param("classId") Long classId); |
| | | |
| | | List<PageShopMgtGoodsVO> pageShopMgtGoods(Page<PageShopMgtGoodsVO> page,@Param("dto") PageShopMgtGoodsDTO dto); |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.mapper.live; |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.goods.domain.pojo.live.XiaoeLiveAppointment; |
| | | |
| | | /** |
| | | * <p> |
| | | * 直播预约记录 Mapper 接口 |
| | | * </p> |
| | | * |
| | | * @author mitao |
| | | * @since 2025-01-09 |
| | | */ |
| | | public interface XiaoeLiveAppointmentMapper extends BaseMapper<XiaoeLiveAppointment> { |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.mapper.live; |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.goods.domain.pojo.live.XiaoeLiveRecord; |
| | | |
| | | /** |
| | | * <p> |
| | | * 小鹅通直播添加记录表 Mapper 接口 |
| | | * </p> |
| | | * |
| | | * @author mitao |
| | | * @since 2025-01-09 |
| | | */ |
| | | public interface XiaoeLiveRecordMapper extends BaseMapper<XiaoeLiveRecord> { |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.mapper.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.goods.api.domain.LotteryEvent; |
| | | import com.ruoyi.goods.domain.vo.AppLotteryEventPageVo; |
| | | import com.ruoyi.goods.domain.vo.ShopLotteryDrawListVo; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/8 18:00 |
| | | */ |
| | | public interface LotteryEventMapper extends BaseMapper<LotteryEvent> { |
| | | |
| | | |
| | | /** |
| | | * 查询APP端普通抽奖列表数据 |
| | | * |
| | | * @param page |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | List<AppLotteryEventPageVo> pageAppLotteryEvent(Page<AppLotteryEventPageVo> page, @Param("userId") Long userId); |
| | | |
| | | |
| | | /** |
| | | * 获取门店抽奖列表 |
| | | * |
| | | * @param page |
| | | * @param shopId |
| | | * @return |
| | | */ |
| | | List<ShopLotteryDrawListVo> getShopLotteryDrawList(Page<ShopLotteryDrawListVo> page, @Param("shopId") Long shopId); |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.mapper.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.goods.api.domain.LotteryEventPrize; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/12 9:55 |
| | | */ |
| | | public interface LotteryEventPrizeMapper extends BaseMapper<LotteryEventPrize> { |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.mapper.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.goods.api.domain.LotteryEventQuestionsAnswers; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/19 16:18 |
| | | */ |
| | | public interface LotteryEventQuestionsAnswersMapper extends BaseMapper<LotteryEventQuestionsAnswers> { |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.mapper.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.goods.api.domain.LotteryEventQuestions; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 18:03 |
| | | */ |
| | | public interface LotteryEventQuestionsMapper extends BaseMapper<LotteryEventQuestions> { |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.mapper.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.goods.api.domain.UserLotteryEvent; |
| | | import com.ruoyi.goods.domain.vo.ShopWinningRecordVo; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/12 10:40 |
| | | */ |
| | | public interface UserLotteryEventMapper extends BaseMapper<UserLotteryEvent> { |
| | | |
| | | |
| | | /** |
| | | * 获取门店中奖记录 |
| | | * |
| | | * @param page |
| | | * @param id |
| | | * @return |
| | | */ |
| | | List<Map<String, Object>> getShopWinningRecord(Page<ShopWinningRecordVo> page, @Param("id") String id); |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.mapper.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.goods.api.domain.UserLotteryEventQuestionsAnswers; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/19 16:06 |
| | | */ |
| | | public interface UserLotteryEventQuestionsAnswersMapper extends BaseMapper<UserLotteryEventQuestionsAnswers> { |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.mapper.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.goods.api.domain.UserLotteryEventQuestions; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 18:19 |
| | | */ |
| | | public interface UserLotteryEventQuestionsMapper extends BaseMapper<UserLotteryEventQuestions> { |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.biz; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.goods.domain.dto.XiaoeCourseQueryDto; |
| | | import com.ruoyi.goods.domain.vo.XiaoeCourseChapterVO; |
| | | import com.ruoyi.goods.domain.vo.XiaoeCourseGroupVO; |
| | | import com.ruoyi.goods.domain.vo.XiaoeCourseVO; |
| | | import com.ruoyi.goods.utils.XiaoeUtils; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.Arrays; |
| | | import java.util.Collections; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Optional; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2025/1/10 |
| | | */ |
| | | @Service |
| | | @RequiredArgsConstructor |
| | | public class XiaoeCourseService { |
| | | private final XiaoeUtils xiaoeUtils; |
| | | |
| | | /** |
| | | * 课程列表 |
| | | * @param dto |
| | | * @param appletFlag 是否小程序端 1:是 0:否 |
| | | * @return |
| | | */ |
| | | public Page<XiaoeCourseVO> getCoursePageList(XiaoeCourseQueryDto dto, Integer appletFlag) { |
| | | if (1 == appletFlag && CollUtil.isEmpty(dto.getTags())) { |
| | | dto.setTags(Arrays.asList("20275808", "20275805", "20275707", "20249173", "2406002")); |
| | | } |
| | | return xiaoeUtils.getCoursePageList(dto); |
| | | } |
| | | |
| | | /** |
| | | * 获取课程章节详情 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | public List<XiaoeCourseChapterVO> getCourseDetail(String id) { |
| | | return xiaoeUtils.getCourseChapterDetail(id); |
| | | } |
| | | |
| | | /** |
| | | * 获取课程分组列表 |
| | | * @Param appletFlag 是否为小程序端 1:是 0:否 |
| | | * @return |
| | | */ |
| | | public List<XiaoeCourseGroupVO> getCourseGroupList(Integer appletFlag) { |
| | | List<XiaoeCourseGroupVO> courseGroupList = Optional.ofNullable(xiaoeUtils.getCourseGroupList()).orElse(Collections.emptyList()); |
| | | if (1 == appletFlag) { |
| | | //健康评估:20275808 中医手法小妙招:20275805 女性呵护:20275707 饮食/运动:20249173 节气小贴士:2406002 |
| | | Set<String> permissionList = new HashSet<>(Arrays.asList("20275808", "20275805", "20275707", "20249173", "2406002")); |
| | | courseGroupList = courseGroupList.stream().filter(item -> permissionList.contains(item.getId())).collect(Collectors.toList()); |
| | | } |
| | | return courseGroupList; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.biz; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.collection.CollectionUtil; |
| | | import cn.hutool.core.date.DatePattern; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.core.utils.DateUtils; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.redis.service.RedisService; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.goods.domain.dto.XiaoeLiveDto; |
| | | import com.ruoyi.goods.domain.dto.XiaoeLiveQueryDto; |
| | | import com.ruoyi.goods.domain.pojo.live.XiaoeLiveAppointment; |
| | | import com.ruoyi.goods.domain.pojo.live.XiaoeLiveRecord; |
| | | import com.ruoyi.goods.domain.vo.XiaoeLiveDetailVOV2; |
| | | import com.ruoyi.goods.domain.vo.XiaoeLiveVo; |
| | | import com.ruoyi.goods.service.live.IXiaoeLiveAppointmentService; |
| | | import com.ruoyi.goods.service.live.IXiaoeLiveRecordService; |
| | | import com.ruoyi.goods.utils.XiaoeUtils; |
| | | import com.ruoyi.system.api.constant.DelayTaskEnum; |
| | | import com.ruoyi.system.api.domain.poji.config.DelayTask; |
| | | import com.ruoyi.system.api.domain.poji.shop.Shop; |
| | | import com.ruoyi.system.api.domain.poji.sys.SysUser; |
| | | import com.ruoyi.system.api.domain.vo.ShopRelUserVo; |
| | | import com.ruoyi.system.api.service.RemoteConfigService; |
| | | import com.ruoyi.system.api.service.RemoteShopService; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.Arrays; |
| | | import java.util.Comparator; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.Set; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2025/1/9 |
| | | */ |
| | | @Service |
| | | @RequiredArgsConstructor |
| | | public class XiaoeLiveService { |
| | | private final IXiaoeLiveRecordService xiaoeLiveRecordService; |
| | | private final XiaoeUtils xiaoeUtils; |
| | | private final IXiaoeLiveAppointmentService xiaoeLiveAppointmentService; |
| | | private final RedisService redisService; |
| | | private final RemoteConfigService remoteConfigService; |
| | | private final RemoteShopService remoteShopService; |
| | | |
| | | |
| | | /** |
| | | * 直播首页分页列表 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | public Page<XiaoeLiveVo> getLivePage(XiaoeLiveQueryDto dto) { |
| | | //当前登录用户id |
| | | Long userId = SecurityUtils.getUserId(); |
| | | Page<XiaoeLiveVo> livePageList = xiaoeUtils.getLivePageList(dto); |
| | | if (CollectionUtil.isEmpty(livePageList.getRecords())) { |
| | | return new Page<>(); |
| | | } |
| | | //已预约的记录 |
| | | List<XiaoeLiveAppointment> appointments = xiaoeLiveAppointmentService.lambdaQuery() |
| | | .gt(XiaoeLiveAppointment::getAliveStartAt, DateUtils.getNowDate()).eq(XiaoeLiveAppointment::getUserId, userId).list(); |
| | | Map<String, XiaoeLiveAppointment> appointmentMap = appointments.stream().collect(Collectors.toMap(XiaoeLiveAppointment::getLiveId, appointment -> appointment)); |
| | | // 处理直播数据 |
| | | List<XiaoeLiveVo> filteredRecords = livePageList.getRecords().stream() |
| | | .filter(item -> !item.getAliveState().equals(2)) // 过滤直播状态为已结束的记录 |
| | | .peek(item -> { |
| | | // 查找对应的预约记录 |
| | | XiaoeLiveAppointment appointment = appointmentMap.get(item.getId()); |
| | | |
| | | // 如果预约记录存在且直播状态为未开始,则设置状态为已预约 |
| | | if (item.getAliveState().equals(0) && appointment != null) { |
| | | item.setAppointmentState(1); // 设置为已预约 |
| | | } |
| | | }) |
| | | .sorted(Comparator.comparing(XiaoeLiveVo::getAliveState).reversed()) // 按照直播状态排序 |
| | | .collect(Collectors.toList()); |
| | | //根据直播类型过滤平台和店铺直播 |
| | | if (Objects.nonNull(dto.getLiveType())) { |
| | | List<XiaoeLiveRecord> liveRecordList = xiaoeLiveRecordService.lambdaQuery().eq(XiaoeLiveRecord::getType, dto.getLiveType()).list(); |
| | | if (CollUtil.isEmpty(liveRecordList)) { |
| | | return new Page<>(); |
| | | } |
| | | List<String> liveIdList = liveRecordList.stream().map(XiaoeLiveRecord::getLiveId).collect(Collectors.toList()); |
| | | filteredRecords = filteredRecords.stream().filter(item -> liveIdList.contains(item.getId())).collect(Collectors.toList()); |
| | | } |
| | | |
| | | livePageList.setRecords(filteredRecords); |
| | | return livePageList; |
| | | } |
| | | |
| | | /** |
| | | * 直播详情 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | public XiaoeLiveDetailVOV2 getLiveDetail(String id) { |
| | | return xiaoeUtils.getLiveDetailV2(id); |
| | | } |
| | | /** |
| | | * 预约直播 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | public Boolean appointment(String id) { |
| | | //当前登录用户 |
| | | SysUser sysUser = SecurityUtils.getSysUser(); |
| | | Long userId = sysUser.getUserId(); |
| | | //查询预约记录 |
| | | Integer count = xiaoeLiveAppointmentService.lambdaQuery().eq(XiaoeLiveAppointment::getLiveId, id).gt(XiaoeLiveAppointment::getAliveStartAt, DateUtils.getNowDate()).eq(XiaoeLiveAppointment::getUserId, userId).count(); |
| | | if (count > 0) { |
| | | throw new ServiceException("您已预约过该直播,请勿重复预约"); |
| | | } |
| | | XiaoeLiveVo liveDetail = xiaoeUtils.getLiveDetail(id); |
| | | if (Objects.isNull(liveDetail)) { |
| | | throw new ServiceException("直播不存在"); |
| | | } |
| | | XiaoeLiveAppointment xiaoeLiveAppointment = new XiaoeLiveAppointment(); |
| | | xiaoeLiveAppointment.setLiveId(id); |
| | | xiaoeLiveAppointment.setUserId(userId); |
| | | Date aliveStartAt = DateUtil.parse(liveDetail.getAliveStartAt(), DatePattern.NORM_DATETIME_PATTERN); |
| | | xiaoeLiveAppointment.setAliveStartAt(aliveStartAt); |
| | | xiaoeLiveAppointment.setCreateTime(DateUtils.getNowDate()); |
| | | xiaoeLiveAppointment.setTitle(liveDetail.getTitle()); |
| | | xiaoeLiveAppointmentService.save(xiaoeLiveAppointment); |
| | | /// 若为C端用户向 redis 添加预约记录 |
| | | if (sysUser.getUserType().equals("03")) { |
| | | // 获取当前时间 |
| | | Date nowTime = new Date(); |
| | | |
| | | // 计算直播开始时间与当前时间的差值 |
| | | long startTimeDifference = aliveStartAt.getTime() - nowTime.getTime(); |
| | | startTimeDifference = Math.max(startTimeDifference, 3000L); // 确保差值至少为3秒 |
| | | |
| | | // 获取延时任务 |
| | | DelayTask startDelayTask = remoteConfigService.getDelayTask(DelayTaskEnum.LIVE_APPOINTMENT_TASK.getCode() + "-" + xiaoeLiveAppointment.getId()).getData(); |
| | | // 创建或者更新延时任务 |
| | | if (startDelayTask == null || !startDelayTask.getEndTime().equals(aliveStartAt)) { |
| | | // 删除旧的延时任务及缓存 |
| | | if (startDelayTask != null) { |
| | | remoteConfigService.deleteDelayTask(DelayTaskEnum.LIVE_APPOINTMENT_TASK.getCode() + "-" + xiaoeLiveAppointment.getId()); |
| | | redisService.deleteObject(DelayTaskEnum.LIVE_APPOINTMENT_TASK.getCode() + "-" + xiaoeLiveAppointment.getId()); |
| | | } |
| | | // 设置新的延时任务 |
| | | redisService.setCacheObject(DelayTaskEnum.LIVE_APPOINTMENT_TASK.getCode() + "-" + xiaoeLiveAppointment.getId(), aliveStartAt, startTimeDifference, TimeUnit.MILLISECONDS); |
| | | startDelayTask = new DelayTask(); |
| | | startDelayTask.setDelFlag(0); |
| | | startDelayTask.setCreateTime(new Date()); |
| | | startDelayTask.setEndTime(aliveStartAt); |
| | | startDelayTask.setRedisKey(DelayTaskEnum.LIVE_APPOINTMENT_TASK.getCode() + "-" + xiaoeLiveAppointment.getId()); |
| | | |
| | | // 添加新的延时任务 |
| | | remoteConfigService.addDelayTask(startDelayTask); |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 我的直播 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | public Page<XiaoeLiveVo> getMineLivePage(XiaoeLiveQueryDto dto) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | Page<XiaoeLiveVo> page = new Page<>(); |
| | | ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(userId).getData(); |
| | | if (Objects.isNull(shopRelUserVo)) { |
| | | return page; |
| | | } |
| | | List<XiaoeLiveRecord> xiaoeLiveRecordList = xiaoeLiveRecordService.getListByShopId(shopRelUserVo.getShopId()); |
| | | if (CollectionUtil.isEmpty(xiaoeLiveRecordList)) { |
| | | return page; |
| | | } |
| | | Page<XiaoeLiveVo> livePageList = xiaoeUtils.getLivePageList(dto); |
| | | if (CollectionUtil.isEmpty(livePageList.getRecords())) { |
| | | return page; |
| | | } |
| | | //当前商家创建的直播 |
| | | Set<String> liveIdSet = xiaoeLiveRecordList.stream().map(XiaoeLiveRecord::getLiveId).collect(Collectors.toSet()); |
| | | //过滤数据 |
| | | List<XiaoeLiveVo> filteredRecords = livePageList.getRecords().stream() |
| | | .filter(item -> liveIdSet.contains(item.getId()) && !item.getAliveState().equals(2)) |
| | | // 按照直播状态排序 |
| | | .sorted(Comparator.comparing(XiaoeLiveVo::getAliveState).reversed()).collect(Collectors.toList()); |
| | | livePageList.setRecords(filteredRecords); |
| | | return livePageList; |
| | | } |
| | | |
| | | /** |
| | | * 获取当前店铺讲师id列表 |
| | | * @return |
| | | */ |
| | | public List<String> getShopXiaoeUserIdList() { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | //获取用户所属店铺 |
| | | ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(userId).getData(); |
| | | if (Objects.isNull(shopRelUserVo)) { |
| | | throw new ServiceException("当前用户未关联店铺,请先关联店铺"); |
| | | } |
| | | //查询店铺信息 |
| | | Shop shop = remoteShopService.getShop(shopRelUserVo.getShopId()).getData(); |
| | | if (Objects.isNull(shop)) { |
| | | throw new ServiceException("店铺不存在"); |
| | | } |
| | | if (StringUtils.isBlank(shop.getXiaoeUserId())) { |
| | | throw new ServiceException("创建失败,请联系平台添加讲师。"); |
| | | } |
| | | return Arrays.asList(shop.getXiaoeUserId().split(",")); |
| | | } |
| | | /** |
| | | * 创建直播 |
| | | * @param dto |
| | | * @param type 创建类型 1:平台 2:经销商 |
| | | * @return |
| | | */ |
| | | public void create(XiaoeLiveDto dto,Integer type) { |
| | | if (dto.getPaymentType().equals(3) && StringUtils.isBlank(dto.getResourcePassword())){ |
| | | throw new ServiceException("密码不能为空"); |
| | | } |
| | | if (type.equals(2)) { |
| | | //获取当前登录用户 |
| | | Long userId = SecurityUtils.getUserId(); |
| | | //获取用户所属店铺 |
| | | ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(userId).getData(); |
| | | if (Objects.isNull(shopRelUserVo)) { |
| | | throw new ServiceException("当前用户未关联店铺,请先关联店铺"); |
| | | } |
| | | //查询店铺信息 |
| | | Shop shop = remoteShopService.getShop(shopRelUserVo.getShopId()).getData(); |
| | | if (Objects.isNull(shop)) { |
| | | throw new ServiceException("店铺不存在"); |
| | | } |
| | | String liveId = xiaoeUtils.addLive(dto); |
| | | if (StringUtils.isBlank(liveId)) { |
| | | throw new ServiceException("创建直播失败,请联系平台管理员"); |
| | | } |
| | | Long shopId = shop.getShopId(); |
| | | String shopName = shop.getShopName(); |
| | | //添加直播创建记录 |
| | | xiaoeLiveRecordService.add(shopId, type, shopName, liveId); |
| | | } else { |
| | | String liveId = xiaoeUtils.addLive(dto); |
| | | if (StringUtils.isBlank(liveId)) { |
| | | throw new ServiceException("创建直播失败,请联系平台管理员"); |
| | | } |
| | | //添加直播创建记录 |
| | | xiaoeLiveRecordService.add(null, type, "鸿瑞堂", liveId); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 编辑直播 |
| | | * @param dto |
| | | */ |
| | | public Boolean edit(XiaoeLiveDto dto) { |
| | | if (StringUtils.isBlank(dto.getId())) { |
| | | throw new ServiceException("直播id不能为空"); |
| | | } |
| | | return xiaoeUtils.editLive(dto); |
| | | } |
| | | |
| | | /** |
| | | * 管理后台直播分页列表 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | public Page<XiaoeLiveVo> getMgtLivePage(XiaoeLiveQueryDto dto) { |
| | | Page<XiaoeLiveVo> livePageList = xiaoeUtils.getLivePageList(dto); |
| | | Long shopId = dto.getShopId(); |
| | | if (Objects.nonNull(shopId)) { |
| | | List<XiaoeLiveRecord> xiaoeLiveRecords = xiaoeLiveRecordService.getListByShopId(shopId); |
| | | if (CollUtil.isEmpty(xiaoeLiveRecords)) { |
| | | return new Page<>(); |
| | | } |
| | | List<String> liveIdList = xiaoeLiveRecords.stream().map(XiaoeLiveRecord::getLiveId).collect(Collectors.toList()); |
| | | List<XiaoeLiveVo> filteredList = livePageList.getRecords().stream().filter(item -> liveIdList.contains(item.getId())).collect(Collectors.toList()); |
| | | livePageList.setRecords(filteredList); |
| | | } |
| | | List<XiaoeLiveRecord> shopRecordList = xiaoeLiveRecordService.lambdaQuery().eq(XiaoeLiveRecord::getType, 2).list(); |
| | | Map<String, String> shopNameMap = shopRecordList.stream().collect(Collectors.toMap(XiaoeLiveRecord::getLiveId, XiaoeLiveRecord::getShopName)); |
| | | livePageList.setRecords(livePageList.getRecords().stream().peek(item -> { |
| | | String name = shopNameMap.get(item.getId()); |
| | | if (StringUtils.isNotBlank(name)) { |
| | | item.setShopName(name); |
| | | } |
| | | }).collect(Collectors.toList())); |
| | | return livePageList; |
| | | } |
| | | |
| | | /** |
| | | * 删除直播 |
| | | * @param id |
| | | */ |
| | | public void deleteLive(String id) { |
| | | Boolean flag = xiaoeUtils.deleteLive(id); |
| | | if (flag) { |
| | | //删除直播添加记录 |
| | | xiaoeLiveRecordService.lambdaUpdate().eq(XiaoeLiveRecord::getLiveId, id).remove(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 员工端直播列表 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | public Page<XiaoeLiveVo> getStaffLivePage(XiaoeLiveQueryDto dto) { |
| | | Page<XiaoeLiveVo> page = new Page<>(); |
| | | List<XiaoeLiveRecord> xiaoeLiveRecordList = xiaoeLiveRecordService.getMgtRecord(); |
| | | if (CollectionUtil.isEmpty(xiaoeLiveRecordList)) { |
| | | return page; |
| | | } |
| | | Page<XiaoeLiveVo> livePageList = xiaoeUtils.getLivePageList(dto); |
| | | if (CollectionUtil.isEmpty(livePageList.getRecords())) { |
| | | return page; |
| | | } |
| | | //筛选平台创建的直播 |
| | | Set<String> liveIdSet = xiaoeLiveRecordList.stream().map(XiaoeLiveRecord::getLiveId).collect(Collectors.toSet()); |
| | | //过滤数据 |
| | | List<XiaoeLiveVo> filteredRecords = livePageList.getRecords().stream().filter(item -> liveIdSet.contains(item.getId()) && !item.getAliveState().equals(2)).collect(Collectors.toList()); |
| | | livePageList.setRecords(filteredRecords); |
| | | return livePageList; |
| | | } |
| | | } |
| | |
| | | * @return List<String> |
| | | */ |
| | | List<String> listGoodsNameByGoodsClass(Long classId); |
| | | |
| | | /** |
| | | * @description 分页获取门店内的商品信息 |
| | | * @author huliguo |
| | | * @date 2025/6/13 |
| | | * @param pageShopMgtGoodsDTO |
| | | * @return List<PageShopMgtGoodsVO> |
| | | */ |
| | | List<PageShopMgtGoodsVO> pageShopMgtGoods(Page<PageShopMgtGoodsVO> page, PageShopMgtGoodsDTO pageShopMgtGoodsDTO); |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.core.utils.bean.BeanUtils; |
| | | import com.ruoyi.common.core.utils.uuid.IdUtils; |
| | | import com.ruoyi.common.security.utils.CodeFactoryUtil; |
| | | import com.ruoyi.goods.domain.dto.*; |
| | | import com.ruoyi.system.api.domain.poji.activity.Activity; |
| | | import com.ruoyi.goods.domain.pojo.goods.GoodsTotal; |
| | | import com.ruoyi.goods.domain.vo.*; |
| | | import com.ruoyi.goods.mapper.goods.GoodsMapper; |
| | |
| | | import com.ruoyi.system.api.domain.dto.MerGoodsPriceListDto; |
| | | import com.ruoyi.system.api.domain.dto.MgtBaseGetDto; |
| | | import com.ruoyi.system.api.domain.dto.MgtClassNumDto; |
| | | import com.ruoyi.system.api.domain.poji.activity.Activity; |
| | | import com.ruoyi.system.api.domain.poji.activity.ActivityGoods; |
| | | import com.ruoyi.system.api.domain.poji.config.SysClassification; |
| | | import com.ruoyi.system.api.domain.poji.goods.Goods; |
| | | import com.ruoyi.system.api.domain.poji.goods.GoodsFile; |
| | | import com.ruoyi.system.api.domain.poji.goods.ShopGoods; |
| | | import com.ruoyi.system.api.domain.poji.shop.Shop; |
| | | import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo; |
| | | import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo; |
| | | import com.ruoyi.system.api.domain.vo.ShopRelUserVo; |
| | | import com.ruoyi.system.api.service.RemoteConfigService; |
| | | import com.ruoyi.system.api.service.RemoteShopService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | |
| | | @Resource |
| | | private ActivityRecordService activityRecordService; |
| | | |
| | | @Resource |
| | | private RemoteShopService remoteShopService; |
| | | |
| | | |
| | | /** |
| | | * @description 获取推荐商品列表 |
| | | * @param page shopId |
| | | * @return List<AppSimpleGoodsVo> |
| | | * @author jqs34 |
| | | * @date 2023/6/4 16:27 |
| | | */ |
| | | * @param page shopId |
| | | * @return List<AppSimpleGoodsVo> |
| | | * @description 获取推荐商品列表 |
| | | * @author jqs34 |
| | | * @date 2023/6/4 16:27 |
| | | */ |
| | | @Override |
| | | public List<AppSimpleGoodsVo> pageRecommendGoods(Page page, Long shopId){ |
| | | List<AppSimpleGoodsVo> appSimpleGoodsVoList = goodsMapper.pageRecommendGoods(page,shopId); |
| | | public List<AppSimpleGoodsVo> pageRecommendGoods(Page page, Long shopId) { |
| | | List<AppSimpleGoodsVo> appSimpleGoodsVoList = goodsMapper.pageRecommendGoods(page, shopId); |
| | | return appSimpleGoodsVoList; |
| | | } |
| | | |
| | |
| | | BeanUtils.copyProperties(goods, appGoodsInfoVo); |
| | | //商户定制价格 |
| | | ShopGoods shopGoods = shopGoodsService.getByShopIdAndGoodsId(appGoodsInfoGetDto.getShopId(),goods.getGoodsId()); |
| | | if(shopGoods!=null){ |
| | | if (shopGoods != null) { |
| | | appGoodsInfoVo.setSalesPrice(shopGoods.getSalesPrice()); |
| | | appGoodsInfoVo.setServiceNum(shopGoods.getServiceNum()); |
| | | } else { |
| | | //经销商定制价格 |
| | | Shop shop = remoteShopService.getShop(appGoodsInfoGetDto.getShopId()).getData(); |
| | | Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData(); |
| | | shopGoods = shopGoodsService.getByShopIdAndGoodsId(belongShop.getShopId(), goods.getGoodsId()); |
| | | if (1 == belongShop.getModifyPricePermission() && null != shopGoods) { |
| | | appGoodsInfoVo.setSalesPrice(shopGoods.getSalesPrice()); |
| | | appGoodsInfoVo.setServiceNum(shopGoods.getServiceNum()); |
| | | } |
| | | } |
| | | |
| | | |
| | | GoodsTotal goodsTotal = goodsTotalService.getById(goods.getGoodsId()); |
| | | appGoodsInfoVo.setSalesNum(goodsTotal.getBuyNumCount()); |
| | | //活动商品判断 |
| | |
| | | |
| | | /** |
| | | * 修改商户商品 |
| | | * |
| | | * @param merShopGoodsEditDto |
| | | */ |
| | | @Override |
| | | public void editMerShopGoods(MerShopGoodsEditDto merShopGoodsEditDto){ |
| | | public void editMerShopGoods(MerShopGoodsEditDto merShopGoodsEditDto) { |
| | | Shop shop = remoteShopService.getShop(merShopGoodsEditDto.getShopId()).getData(); |
| | | if (2 == shop.getShopType()) { |
| | | Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData(); |
| | | ShopGoods shopGoods = shopGoodsService.getByShopIdAndGoodsId(shop.getBelongShopId(), merShopGoodsEditDto.getGoodsId()); |
| | | if (1 == belongShop.getModifyPricePermission() && null != shopGoods) { |
| | | throw new ServiceException("经销商开启了统一价格管理"); |
| | | } |
| | | } |
| | | |
| | | Goods goods = this.getById(merShopGoodsEditDto.getGoodsId()); |
| | | if(merShopGoodsEditDto.getSalePrice().compareTo(goods.getMininumPrice())<0){ |
| | | throw new ServiceException(AppErrorConstant.SALESPRICE_MIN+goods.getMininumPrice().toString()+"元"); |
| | | if (merShopGoodsEditDto.getSalePrice().compareTo(goods.getMininumPrice()) < 0) { |
| | | throw new ServiceException(AppErrorConstant.SALESPRICE_MIN + goods.getMininumPrice().toString() + "元"); |
| | | } |
| | | //商户定制价格 |
| | | ShopGoods shopGoods = shopGoodsService.getByShopIdAndGoodsId(merShopGoodsEditDto.getShopId(),goods.getGoodsId()); |
| | | if(shopGoods!=null){ |
| | | ShopGoods shopGoods = shopGoodsService.getByShopIdAndGoodsId(merShopGoodsEditDto.getShopId(), goods.getGoodsId()); |
| | | if (shopGoods != null) { |
| | | shopGoods.setSalesPrice(merShopGoodsEditDto.getSalePrice()); |
| | | shopGoods.setServiceNum(merShopGoodsEditDto.getServiceNum()); |
| | | shopGoods.setUpdateTime(new Date()); |
| | | shopGoods.setUpdateUserId(merShopGoodsEditDto.getUserId()); |
| | | }else{ |
| | | } else { |
| | | shopGoods = new ShopGoods(); |
| | | shopGoods.setDelFlag(0); |
| | | shopGoods.setShopId(merShopGoodsEditDto.getShopId()); |
| | |
| | | List<String> goodsNameList = goodsMapper.listGoodsNameByGoodsClass(classId); |
| | | return goodsNameList; |
| | | } |
| | | |
| | | @Override |
| | | public List<PageShopMgtGoodsVO> pageShopMgtGoods(Page<PageShopMgtGoodsVO> page,PageShopMgtGoodsDTO pageShopMgtGoodsDTO) { |
| | | //1.查找门店 |
| | | Shop shop = remoteShopService.getShop(pageShopMgtGoodsDTO.getShopId()).getData(); |
| | | if (null == shop || shop.getDelFlag() != 0) { |
| | | return Collections.emptyList(); |
| | | } |
| | | List<Shop> shops = new ArrayList<>(); |
| | | //2.判断门店是否经销商 |
| | | if (shop.getShopType()==1){ |
| | | //经销商 获取下级-加盟商ids |
| | | shops = remoteShopService.getFranchiseeIdsBYDealerId(shop.getShopId()); |
| | | } |
| | | //将该门店加入 |
| | | shops.add(shop); |
| | | List<Long> shopIds = shops.stream().map(Shop::getShopId).collect(Collectors.toList()); |
| | | //查询信息 |
| | | pageShopMgtGoodsDTO.setShopIds(shopIds); |
| | | //3.根据shopId查询商品信息 |
| | | List<PageShopMgtGoodsVO> list= goodsMapper.pageShopMgtGoods(page,pageShopMgtGoodsDTO); |
| | | |
| | | if (list != null && !list.isEmpty()) { |
| | | //4.商品分类 |
| | | // 获取所有商品分类的ID |
| | | List<Long> goodsClassIds = list.stream() |
| | | .map(PageShopMgtGoodsVO::getGoodsClass) |
| | | .map(Long::valueOf) |
| | | .collect(Collectors.toList()); |
| | | // 通过远程服务获取商品分类 |
| | | Map<Long, SysClassification> sysClassificationMap = remoteConfigService.getSysClassificationList(goodsClassIds).getData(); |
| | | // 遍历所有商品 |
| | | list.forEach(mgtGoodsPageVo -> { |
| | | // 获取商品分类 |
| | | SysClassification sysClassification = sysClassificationMap.get(Long.valueOf(mgtGoodsPageVo.getGoodsClass())); |
| | | // 如果商品分类不为空,则设置商品分类名称 |
| | | if (sysClassification != null) { |
| | | mgtGoodsPageVo.setGoodsClass(sysClassification.getClassName()); |
| | | } |
| | | }); |
| | | Map<Long, Shop> shopMap = shops.stream() |
| | | .collect(Collectors.toMap( |
| | | Shop::getShopId, // 键映射函数 |
| | | shop1 -> shop1 // 值映射函数 |
| | | )); |
| | | //5.门店信息 |
| | | list.forEach(mgtGoodsPageVo -> { |
| | | // 获取门店信息 |
| | | Shop shopInfo = shopMap.get(Long.valueOf(mgtGoodsPageVo.getShopId())); |
| | | // 如果门店信息不为空,则设置门店信息 |
| | | if (shopInfo != null) { |
| | | mgtGoodsPageVo.setShopName(shopInfo.getShopName()); |
| | | mgtGoodsPageVo.setModifyPricePermission(shop.getModifyPricePermission()); |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | return list; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.impl.live; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.goods.domain.pojo.live.XiaoeLiveAppointment; |
| | | import com.ruoyi.goods.domain.pojo.live.XiaoeLiveRecord; |
| | | import com.ruoyi.goods.mapper.live.XiaoeLiveAppointmentMapper; |
| | | import com.ruoyi.goods.service.live.IXiaoeLiveAppointmentService; |
| | | import com.ruoyi.goods.service.live.IXiaoeLiveRecordService; |
| | | import com.ruoyi.goods.utils.WeChatSubscribeMessageSender; |
| | | import com.ruoyi.system.api.domain.poji.member.Member; |
| | | import com.ruoyi.system.api.service.RemoteMemberService; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.Objects; |
| | | |
| | | /** |
| | | * <p> |
| | | * 直播预约记录 服务实现类 |
| | | * </p> |
| | | * |
| | | * @author mitao |
| | | * @since 2025-01-09 |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | @RequiredArgsConstructor |
| | | public class XiaoeLiveAppointmentServiceImpl extends ServiceImpl<XiaoeLiveAppointmentMapper, XiaoeLiveAppointment> implements IXiaoeLiveAppointmentService { |
| | | private final RemoteMemberService remoteMemberService; |
| | | private final IXiaoeLiveRecordService xiaoeLiveRecordService; |
| | | |
| | | /** |
| | | * 推送微信小程序订阅消息 |
| | | * @param appointmentId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public void push(Long appointmentId) { |
| | | log.info("开始推送预约id为:{}的订阅消息",appointmentId); |
| | | XiaoeLiveAppointment appointment = getById(appointmentId); |
| | | if (Objects.nonNull(appointment)) { |
| | | Member member = remoteMemberService.getMember(appointment.getUserId()).getData(); |
| | | if (Objects.isNull(member)){ |
| | | return; |
| | | } |
| | | XiaoeLiveRecord record = xiaoeLiveRecordService.getByLiveId(appointment.getLiveId()); |
| | | if (Objects.isNull(record)) { |
| | | return; |
| | | } |
| | | //推送微信小程序订阅消息 |
| | | WeChatSubscribeMessageSender.push(member.getMiniOpenid(), appointment.getTitle(), record.getShopName(), appointment.getAliveStartAt()); |
| | | } |
| | | log.info("预约id为:{}的订阅消息推送成功",appointmentId); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.impl.live; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.core.utils.DateUtils; |
| | | import com.ruoyi.goods.domain.pojo.live.XiaoeLiveRecord; |
| | | import com.ruoyi.goods.mapper.live.XiaoeLiveRecordMapper; |
| | | import com.ruoyi.goods.service.live.IXiaoeLiveRecordService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | | * 小鹅通直播添加记录表 服务实现类 |
| | | * </p> |
| | | * |
| | | * @author mitao |
| | | * @since 2025-01-09 |
| | | */ |
| | | @Service |
| | | public class XiaoeLiveRecordServiceImpl extends ServiceImpl<XiaoeLiveRecordMapper, XiaoeLiveRecord> implements IXiaoeLiveRecordService { |
| | | /** |
| | | * 根据直播id查询记录 |
| | | * |
| | | * @param liveId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public XiaoeLiveRecord getByLiveId(String liveId) { |
| | | return lambdaQuery().eq(XiaoeLiveRecord::getLiveId, liveId).one(); |
| | | } |
| | | |
| | | /** |
| | | * 根据店铺id查询记录 |
| | | * |
| | | * @param shopId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<XiaoeLiveRecord> getListByShopId(Long shopId) { |
| | | return lambdaQuery().eq(XiaoeLiveRecord::getType, 2).eq(XiaoeLiveRecord::getShopId, shopId).list(); |
| | | } |
| | | |
| | | /** |
| | | * 添加直播创建记录 |
| | | * @param shopId |
| | | * @param type |
| | | * @param shopName |
| | | * @param liveId |
| | | */ |
| | | @Override |
| | | public void add(Long shopId, Integer type, String shopName, String liveId) { |
| | | XiaoeLiveRecord xiaoeLiveRecord = new XiaoeLiveRecord(); |
| | | xiaoeLiveRecord.setShopId(shopId); |
| | | xiaoeLiveRecord.setType(type); |
| | | xiaoeLiveRecord.setShopName(shopName); |
| | | xiaoeLiveRecord.setLiveId(liveId); |
| | | xiaoeLiveRecord.setCreateTime(DateUtils.getNowDate()); |
| | | save(xiaoeLiveRecord); |
| | | } |
| | | |
| | | /** |
| | | * 平台直播哦添加记录 |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<XiaoeLiveRecord> getMgtRecord() { |
| | | return lambdaQuery().eq(XiaoeLiveRecord::getType, 1).list(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.impl.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.goods.api.domain.LotteryEventPrize; |
| | | import com.ruoyi.goods.mapper.lottery.LotteryEventPrizeMapper; |
| | | import com.ruoyi.goods.service.lottery.ILotteryEventPrizeService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/12 9:56 |
| | | */ |
| | | @Service |
| | | public class LotteryEventPrizeServiceImpl extends ServiceImpl<LotteryEventPrizeMapper, LotteryEventPrize> implements ILotteryEventPrizeService { |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.impl.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.goods.api.domain.LotteryEventQuestionsAnswers; |
| | | import com.ruoyi.goods.mapper.lottery.LotteryEventQuestionsAnswersMapper; |
| | | import com.ruoyi.goods.service.lottery.ILotteryEventQuestionsAnswersService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/19 16:19 |
| | | */ |
| | | @Service |
| | | public class LotteryEventQuestionsAnswersServiceImpl extends ServiceImpl<LotteryEventQuestionsAnswersMapper, LotteryEventQuestionsAnswers> implements ILotteryEventQuestionsAnswersService { |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.impl.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.goods.api.domain.LotteryEventQuestions; |
| | | import com.ruoyi.goods.mapper.lottery.LotteryEventQuestionsMapper; |
| | | import com.ruoyi.goods.service.lottery.ILotteryEventQuestionsService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 18:04 |
| | | */ |
| | | @Service |
| | | public class LotteryEventQuestionsServiceImpl extends ServiceImpl<LotteryEventQuestionsMapper, LotteryEventQuestions> implements ILotteryEventQuestionsService { |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.impl.lottery; |
| | | |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.utils.uuid.IdUtils; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.goods.api.domain.LotteryEvent; |
| | | import com.ruoyi.goods.api.domain.LotteryEventPrize; |
| | | import com.ruoyi.goods.api.domain.UserLotteryEvent; |
| | | import com.ruoyi.goods.api.domain.UserLotteryEventQuestions; |
| | | import com.ruoyi.goods.domain.vo.AppLotteryEventPageVo; |
| | | import com.ruoyi.goods.domain.vo.LotteryEventVo; |
| | | import com.ruoyi.goods.domain.vo.ShopLotteryDrawListVo; |
| | | import com.ruoyi.goods.domain.vo.UserLotteryEventVo; |
| | | import com.ruoyi.goods.mapper.lottery.LotteryEventMapper; |
| | | import com.ruoyi.goods.service.lottery.ILotteryEventPrizeService; |
| | | import com.ruoyi.goods.service.lottery.ILotteryEventService; |
| | | import com.ruoyi.goods.service.lottery.IUserLotteryEventQuestionsService; |
| | | import com.ruoyi.goods.service.lottery.IUserLotteryEventService; |
| | | import com.ruoyi.system.api.domain.poji.member.Member; |
| | | import com.ruoyi.system.api.domain.poji.member.MemberGiftRecord; |
| | | import com.ruoyi.system.api.domain.poji.shop.Shop; |
| | | import com.ruoyi.system.api.service.RemoteCouponService; |
| | | import com.ruoyi.system.api.service.RemoteMemberService; |
| | | import com.ruoyi.system.api.service.RemoteShopService; |
| | | import org.redisson.api.RLock; |
| | | import org.redisson.api.RedissonClient; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDateTime; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/8 18:05 |
| | | */ |
| | | @Service |
| | | public class LotteryEventServiceImpl extends ServiceImpl<LotteryEventMapper, LotteryEvent> implements ILotteryEventService { |
| | | |
| | | @Resource |
| | | private IUserLotteryEventService userLotteryEventService; |
| | | |
| | | @Resource |
| | | private ILotteryEventPrizeService lotteryEventPrizeService; |
| | | |
| | | @Resource |
| | | private RemoteCouponService remoteCouponService; |
| | | |
| | | @Resource |
| | | private RemoteMemberService remoteMemberService; |
| | | |
| | | @Resource |
| | | private RedissonClient redissonClient; |
| | | |
| | | @Resource |
| | | private IUserLotteryEventQuestionsService userLotteryEventQuestionsAnswersService; |
| | | |
| | | @Resource |
| | | private RemoteShopService remoteShopService; |
| | | |
| | | |
| | | /** |
| | | * 根据id查询抽奖活动信息 |
| | | * |
| | | * @param id |
| | | * @return |
| | | */ |
| | | @Override |
| | | public LotteryEventVo getLotteryEvent(String id) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | LotteryEvent lotteryEvent = this.getById(id); |
| | | //构建返回结果 |
| | | LotteryEventVo vo = new LotteryEventVo(); |
| | | vo.setId(lotteryEvent.getId()); |
| | | vo.setName(lotteryEvent.getName()); |
| | | vo.setActivityProfile(lotteryEvent.getActivityProfile()); |
| | | List<UserLotteryEvent> userLotteryEvents = userLotteryEventService.list(new QueryWrapper<UserLotteryEvent>().eq("lottery_event_id", id)); |
| | | vo.setLaveTimes(lotteryEvent.getTimes() - userLotteryEvents.size()); |
| | | //查询抽检活动奖品 |
| | | List<LotteryEventPrize> lotteryEventPrizeList = lotteryEventPrizeService.list(new QueryWrapper<LotteryEventPrize>().eq("lottery_event_id", id)); |
| | | vo.setPrizeList(lotteryEventPrizeList); |
| | | //答题正确率 |
| | | if (5 == lotteryEvent.getActivityType()) { |
| | | UserLotteryEventQuestions questionsServiceOne = userLotteryEventQuestionsAnswersService.getOne(new QueryWrapper<UserLotteryEventQuestions>().eq("lottery_event_id", id).eq("user_id", userId)); |
| | | if (null == questionsServiceOne) { |
| | | vo.setCorrectAnswerRate(questionsServiceOne.getCorrectAnswerRate()); |
| | | } |
| | | } |
| | | //构建我的奖品明细 |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm"); |
| | | List<UserLotteryEventVo> collect = userLotteryEvents.stream().map(s -> { |
| | | UserLotteryEventVo userLotteryEventVo = new UserLotteryEventVo(); |
| | | userLotteryEventVo.setName(s.getObjectName()); |
| | | userLotteryEventVo.setPrizeType(s.getPrizeType()); |
| | | userLotteryEventVo.setNumber(s.getNumber()); |
| | | MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrizeByGiftId(s.getId()).getData(); |
| | | userLotteryEventVo.setVerifyCode("3-" + memberGiftRecord.getPrizeId()); |
| | | userLotteryEventVo.setIsVerify(1 == memberGiftRecord.getVerifyStatus() ? 0 : 1); |
| | | userLotteryEventVo.setVerifyTime(null == memberGiftRecord.getVerifyTime() ? "" : sdf.format(memberGiftRecord.getVerifyTime())); |
| | | Member member = remoteMemberService.getMember(userId).getData(); |
| | | userLotteryEventVo.setVerifyShop("全部门店"); |
| | | if (null != member && null != member.getRelationShopId()) { |
| | | Shop shop = remoteShopService.getShop(member.getRelationShopId()).getData(); |
| | | userLotteryEventVo.setVerifyShop(shop.getShopName()); |
| | | } |
| | | return userLotteryEventVo; |
| | | }).collect(Collectors.toList()); |
| | | vo.setYourPrizeList(collect); |
| | | return vo; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 抽奖操作 |
| | | * |
| | | * @param id |
| | | * @return |
| | | */ |
| | | @Override |
| | | public R lotteryDraw(String id) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | Member member = remoteMemberService.getMember(userId).getData(); |
| | | LotteryEvent lotteryEvent = this.getById(id); |
| | | //判断答题抽奖是否满足抽奖条件 |
| | | if (lotteryEvent.getActivityType() == 5) { |
| | | UserLotteryEventQuestions questionsServiceOne = userLotteryEventQuestionsAnswersService.getOne(new QueryWrapper<UserLotteryEventQuestions>().eq("lottery_event_id", id).eq("user_id", userId)); |
| | | if (questionsServiceOne.getCorrectAnswerRate().compareTo(lotteryEvent.getAccuracy()) < 0) { |
| | | return R.fail("答题抽奖失败,答题正确率低于活动要求"); |
| | | } |
| | | } |
| | | |
| | | //使用redis锁处理高并发 |
| | | RLock lock = redissonClient.getLock("lottery_event::" + userId + "::" + id); |
| | | try { |
| | | boolean tryLock = lock.tryLock(30, TimeUnit.SECONDS); |
| | | if (tryLock) { |
| | | //判断抽奖次数是否用完 |
| | | int count = userLotteryEventService.count(new QueryWrapper<UserLotteryEvent>().eq("lottery_event_id", id).eq("user_id", userId)); |
| | | if (lotteryEvent.getTimes() <= count) { |
| | | return R.fail("抽奖次数已用完"); |
| | | } |
| | | List<LotteryEventPrize> lotteryEventPrizeList = lotteryEventPrizeService.list(new QueryWrapper<LotteryEventPrize>().eq("lottery_event_id", id)); |
| | | //开始抽奖,根据中奖概率来抽奖 |
| | | List<LotteryEventPrize> list = new ArrayList<>(); |
| | | for (LotteryEventPrize lotteryEventPrize : lotteryEventPrizeList) { |
| | | int winRate = lotteryEventPrize.getWinRate().intValue(); |
| | | for (int i = 0; i < winRate; i++) { |
| | | LotteryEventPrize event = new LotteryEventPrize(); |
| | | BeanUtil.copyProperties(lotteryEventPrize, event); |
| | | list.add(event); |
| | | } |
| | | } |
| | | //将待抽奖的集合进行随机排序 |
| | | Collections.shuffle(list); |
| | | //开始获取随机数 |
| | | int random = new Random().nextInt(list.size()); |
| | | LotteryEventPrize lotteryEventPrize = lotteryEventPrizeList.get(random); |
| | | //添加中奖商品 |
| | | UserLotteryEvent userLotteryEvent = new UserLotteryEvent(); |
| | | userLotteryEvent.setId(IdUtils.simpleUUID()); |
| | | userLotteryEvent.setUserId(userId); |
| | | userLotteryEvent.setLotteryEventId(id); |
| | | userLotteryEvent.setLotteryEventPrizeId(lotteryEventPrize.getId()); |
| | | userLotteryEvent.setPrizeType(lotteryEventPrize.getPrizeType()); |
| | | userLotteryEvent.setObjectId(lotteryEventPrize.getObjectId()); |
| | | userLotteryEvent.setObjectName(lotteryEventPrize.getObjectName()); |
| | | userLotteryEvent.setNumber(lotteryEventPrize.getNumber()); |
| | | //中奖优惠券 |
| | | if (1 == lotteryEventPrize.getPrizeType()) { |
| | | remoteCouponService.addMemberCoupon(lotteryEventPrize.getObjectId(), lotteryEventPrize.getNumber(), userId); |
| | | } |
| | | //中奖积分 |
| | | if (4 == lotteryEventPrize.getPrizeType()) { |
| | | remoteMemberService.addIntegralRecord(lotteryEventPrize.getNumber(), userId, id); |
| | | } |
| | | userLotteryEvent.setCreateTime(LocalDateTime.now()); |
| | | userLotteryEventService.save(userLotteryEvent); |
| | | //添加奖品数据 |
| | | MemberGiftRecord memberGiftRecord = new MemberGiftRecord(); |
| | | memberGiftRecord.setPrizeId(IdUtils.simpleUUID()); |
| | | memberGiftRecord.setDelFlag(0); |
| | | memberGiftRecord.setUserId(userId); |
| | | memberGiftRecord.setGiftId(userLotteryEvent.getId()); |
| | | memberGiftRecord.setGiftFrom(1); |
| | | memberGiftRecord.setShopId(member.getRelationShopId()); |
| | | switch (lotteryEventPrize.getPrizeType()) { |
| | | case 1: |
| | | memberGiftRecord.setGiftType(1); |
| | | memberGiftRecord.setCouponId(userLotteryEvent.getObjectId()); |
| | | memberGiftRecord.setCouponNumber(userLotteryEvent.getNumber()); |
| | | break; |
| | | case 2: |
| | | memberGiftRecord.setGiftType(2); |
| | | memberGiftRecord.setGoodsId(userLotteryEvent.getObjectId()); |
| | | memberGiftRecord.setGiftName(userLotteryEvent.getObjectName()); |
| | | memberGiftRecord.setGoodsNumber(userLotteryEvent.getNumber()); |
| | | break; |
| | | case 3: |
| | | memberGiftRecord.setGiftType(4); |
| | | memberGiftRecord.setGiftName(userLotteryEvent.getObjectName()); |
| | | memberGiftRecord.setGiftNumber(userLotteryEvent.getNumber()); |
| | | break; |
| | | case 4: |
| | | memberGiftRecord.setGiftType(5); |
| | | memberGiftRecord.setIntegralNumber(userLotteryEvent.getNumber()); |
| | | break; |
| | | } |
| | | memberGiftRecord.setPrizeFrom(2); |
| | | memberGiftRecord.setCreateTime(new Date()); |
| | | memberGiftRecord.setVerifyStatus(1); |
| | | remoteMemberService.saveMemberGiftRecord(memberGiftRecord); |
| | | return R.ok(); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | lock.unlock(); |
| | | } |
| | | return R.fail("抽奖失败"); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取APP抽奖列表 |
| | | * |
| | | * @param page |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<AppLotteryEventPageVo> pageAppLotteryEvent(Page<AppLotteryEventPageVo> page, Long userId) { |
| | | return this.baseMapper.pageAppLotteryEvent(page, userId); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取门店抽奖列表 |
| | | * |
| | | * @param page |
| | | * @param shopId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<ShopLotteryDrawListVo> getShopLotteryDrawList(Page<ShopLotteryDrawListVo> page, Long shopId) { |
| | | return this.baseMapper.getShopLotteryDrawList(page, shopId); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.impl.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.goods.api.domain.LotteryEventQuestionsAnswers; |
| | | import com.ruoyi.goods.api.domain.UserLotteryEventQuestionsAnswers; |
| | | import com.ruoyi.goods.mapper.lottery.UserLotteryEventQuestionsAnswersMapper; |
| | | import com.ruoyi.goods.service.lottery.ILotteryEventQuestionsAnswersService; |
| | | import com.ruoyi.goods.service.lottery.IUserLotteryEventQuestionsAnswersService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | |
| | | |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/19 16:08 |
| | | */ |
| | | @Service |
| | | public class UserLotteryEventQuestionsAnswersServiceImpl extends ServiceImpl<UserLotteryEventQuestionsAnswersMapper, UserLotteryEventQuestionsAnswers> implements IUserLotteryEventQuestionsAnswersService { |
| | | |
| | | @Resource |
| | | private ILotteryEventQuestionsAnswersService lotteryEventQuestionsAnswersService; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 获取答题正确率 |
| | | * @param userId |
| | | * @param lotteryEventId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public BigDecimal getCorrectAnswerRate(Long userId, String lotteryEventId) { |
| | | int count = this.count(new QueryWrapper<UserLotteryEventQuestionsAnswers>().eq("user_id", userId).eq("lottery_event_id", lotteryEventId).eq("is_correct", 1)); |
| | | if (count > 0) { |
| | | int count1 = lotteryEventQuestionsAnswersService.count(new QueryWrapper<LotteryEventQuestionsAnswers>().eq("lottery_event_id", lotteryEventId)); |
| | | return new BigDecimal(count).divide(new BigDecimal(count1), 2, BigDecimal.ROUND_HALF_UP); |
| | | } |
| | | return BigDecimal.ZERO; |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.impl.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.goods.api.domain.UserLotteryEventQuestions; |
| | | import com.ruoyi.goods.mapper.lottery.UserLotteryEventQuestionsMapper; |
| | | import com.ruoyi.goods.service.lottery.IUserLotteryEventQuestionsService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 18:19 |
| | | */ |
| | | @Service |
| | | public class UserLotteryEventQuestionsServiceImpl extends ServiceImpl<UserLotteryEventQuestionsMapper, UserLotteryEventQuestions> implements IUserLotteryEventQuestionsService { |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.impl.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.goods.api.domain.UserLotteryEvent; |
| | | import com.ruoyi.goods.domain.vo.ShopWinningRecordVo; |
| | | import com.ruoyi.goods.mapper.lottery.UserLotteryEventMapper; |
| | | import com.ruoyi.goods.service.lottery.IUserLotteryEventService; |
| | | import com.ruoyi.system.api.domain.poji.member.Member; |
| | | import com.ruoyi.system.api.service.RemoteMemberService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.StringJoiner; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/12 10:41 |
| | | */ |
| | | @Service |
| | | public class UserLotteryEventServiceImpl extends ServiceImpl<UserLotteryEventMapper, UserLotteryEvent> implements IUserLotteryEventService { |
| | | |
| | | @Resource |
| | | private RemoteMemberService remoteMemberService; |
| | | |
| | | |
| | | /** |
| | | * 获取店铺中中奖记录 |
| | | * |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<ShopWinningRecordVo> getShopWinningRecord(Page<ShopWinningRecordVo> page, String id) { |
| | | List<Map<String, Object>> shopWinningRecord = this.baseMapper.getShopWinningRecord(page, id); |
| | | List<ShopWinningRecordVo> collect = shopWinningRecord.stream().map(item -> { |
| | | Long user_id = Long.valueOf(item.get("user_id").toString()); |
| | | Member member = remoteMemberService.getMember(user_id).getData(); |
| | | |
| | | String create_time = item.get("create_time").toString(); |
| | | String content = item.get("content").toString(); |
| | | String[] prizes = content.split(","); |
| | | StringJoiner awardName = new StringJoiner("、"); |
| | | for (String prize : prizes) { |
| | | String[] split = prize.split("_"); |
| | | String name = ""; |
| | | switch (split[0]) { |
| | | case "1": |
| | | name = "优惠券"; |
| | | break; |
| | | case "2": |
| | | name = split[2] + "x" + split[3]; |
| | | break; |
| | | case "3": |
| | | name = split[2] + "x" + split[3]; |
| | | break; |
| | | case "4": |
| | | name = "积分"; |
| | | break; |
| | | } |
| | | awardName.add(name); |
| | | } |
| | | ShopWinningRecordVo shopWinningRecordVo = new ShopWinningRecordVo(); |
| | | shopWinningRecordVo.setUserName(member.getRealName()); |
| | | shopWinningRecordVo.setUserPhone(member.getMobile()); |
| | | shopWinningRecordVo.setLotteryTime(create_time); |
| | | shopWinningRecordVo.setAwardName(awardName.toString()); |
| | | return shopWinningRecordVo; |
| | | }).collect(Collectors.toList()); |
| | | return collect; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.live; |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.goods.domain.pojo.live.XiaoeLiveAppointment; |
| | | |
| | | /** |
| | | * <p> |
| | | * 直播预约记录 服务类 |
| | | * </p> |
| | | * |
| | | * @author mitao |
| | | * @since 2025-01-09 |
| | | */ |
| | | public interface IXiaoeLiveAppointmentService extends IService<XiaoeLiveAppointment> { |
| | | /** |
| | | * 推送微信小程序订阅消息 |
| | | * @param appointmentId |
| | | * @return |
| | | */ |
| | | void push(Long appointmentId); |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.live; |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.goods.domain.pojo.live.XiaoeLiveRecord; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | | * 小鹅通直播添加记录表 服务类 |
| | | * </p> |
| | | * |
| | | * @author mitao |
| | | * @since 2025-01-09 |
| | | */ |
| | | public interface IXiaoeLiveRecordService extends IService<XiaoeLiveRecord> { |
| | | /** |
| | | * 根据直播id查询记录 |
| | | * @param liveId |
| | | * @return |
| | | */ |
| | | XiaoeLiveRecord getByLiveId(String liveId); |
| | | |
| | | /** |
| | | * 根据店铺id查询记录 |
| | | * @param shopId |
| | | * @return |
| | | */ |
| | | List<XiaoeLiveRecord> getListByShopId(Long shopId); |
| | | /** |
| | | * 添加直播创建记录 |
| | | * @param shopId |
| | | * @param type |
| | | * @param shopName |
| | | * @param liveId |
| | | */ |
| | | void add(Long shopId, Integer type, String shopName, String liveId); |
| | | |
| | | List<XiaoeLiveRecord> getMgtRecord(); |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.goods.api.domain.LotteryEventPrize; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/12 9:56 |
| | | */ |
| | | public interface ILotteryEventPrizeService extends IService<LotteryEventPrize> { |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.goods.api.domain.LotteryEventQuestionsAnswers; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/19 16:18 |
| | | */ |
| | | public interface ILotteryEventQuestionsAnswersService extends IService<LotteryEventQuestionsAnswers> { |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.goods.api.domain.LotteryEventQuestions; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 18:03 |
| | | */ |
| | | public interface ILotteryEventQuestionsService extends IService<LotteryEventQuestions> { |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.goods.api.domain.LotteryEvent; |
| | | import com.ruoyi.goods.domain.vo.AppLotteryEventPageVo; |
| | | import com.ruoyi.goods.domain.vo.LotteryEventVo; |
| | | import com.ruoyi.goods.domain.vo.ShopLotteryDrawListVo; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/8 18:05 |
| | | */ |
| | | public interface ILotteryEventService extends IService<LotteryEvent> { |
| | | |
| | | |
| | | /** |
| | | * 获取抽奖活动详情 |
| | | * |
| | | * @param id |
| | | * @return |
| | | */ |
| | | LotteryEventVo getLotteryEvent(String id); |
| | | |
| | | |
| | | /** |
| | | * 抽奖操作 |
| | | * |
| | | * @param id |
| | | * @return |
| | | */ |
| | | R lotteryDraw(String id); |
| | | |
| | | |
| | | /** |
| | | * 获取APP抽奖列表 |
| | | * |
| | | * @param page |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | List<AppLotteryEventPageVo> pageAppLotteryEvent(Page<AppLotteryEventPageVo> page, Long userId); |
| | | |
| | | |
| | | /** |
| | | * 获取门店的抽奖列表 |
| | | * |
| | | * @param page |
| | | * @return |
| | | */ |
| | | List<ShopLotteryDrawListVo> getShopLotteryDrawList(Page<ShopLotteryDrawListVo> page, Long shopId); |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.goods.api.domain.UserLotteryEventQuestionsAnswers; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/19 16:07 |
| | | */ |
| | | public interface IUserLotteryEventQuestionsAnswersService extends IService<UserLotteryEventQuestionsAnswers> { |
| | | |
| | | |
| | | /** |
| | | * 获取用户答题正确率 |
| | | * @param userId |
| | | * @param lotteryEventId |
| | | * @return |
| | | */ |
| | | BigDecimal getCorrectAnswerRate(Long userId, String lotteryEventId); |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.goods.api.domain.UserLotteryEventQuestions; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 18:19 |
| | | */ |
| | | public interface IUserLotteryEventQuestionsService extends IService<UserLotteryEventQuestions> { |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.service.lottery; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.goods.api.domain.UserLotteryEvent; |
| | | import com.ruoyi.goods.domain.vo.ShopWinningRecordVo; |
| | | |
| | | import java.util.List; |
| | | |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/12 10:40 |
| | | */ |
| | | public interface IUserLotteryEventService extends IService<UserLotteryEvent> { |
| | | |
| | | |
| | | /** |
| | | * 获取店铺中中奖记录 |
| | | */ |
| | | List<ShopWinningRecordVo> getShopWinningRecord(Page<ShopWinningRecordVo> page, String id); |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.utils; |
| | | |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.http.HttpUtil; |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2025/1/10 |
| | | */ |
| | | @Slf4j |
| | | public class WeChatSubscribeMessageSender { |
| | | private static final String ACCESS_TOKEN_HOST = "https://api.weixin.qq.com/cgi-bin/token"; |
| | | private static final String STABLE_ACCESS_TOKEN_HOST = "https://api.weixin.qq.com/cgi-bin/stable_token"; |
| | | private static final String API_URL = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send"; |
| | | |
| | | private static final String WX_APPID = "wxb7f0ea286fc4e535"; |
| | | |
| | | private static final String WX_SECRET = "852a2512a6ab559cafc68bae5d4160ac"; |
| | | private static final String TEMPLATE_ID = "EFeu75n2GMmOg33PxL1HNoyftp16ukco5DUbBfNBytE"; |
| | | |
| | | /** |
| | | *发送消息 |
| | | * @param touser 接收者(用户)的 openid |
| | | * @param title 直播主题 |
| | | * @param shopName 直播间名称 |
| | | * @param aliveStartAt 直播时间 |
| | | */ |
| | | public static void push(String touser, String title, String shopName, Date aliveStartAt) { |
| | | |
| | | //1,获取access_token |
| | | String accessToken = getAccessTokenByWX(); |
| | | String url = API_URL + "?access_token=" + accessToken; |
| | | Map<String, Object> params = new HashMap<>(); |
| | | params.put("template_id", TEMPLATE_ID); |
| | | params.put("page", null); |
| | | params.put("touser", touser); |
| | | // 构建订阅消息内容的JSON对象 |
| | | JSONObject messageData = new JSONObject(); |
| | | messageData.put("time5", createDataItem("直播时间", DateUtil.format(aliveStartAt, "MM-dd HH:mm:ss"))); |
| | | messageData.put("thing4", createDataItem("直播间名称", shopName)); |
| | | messageData.put("thing1", createDataItem("直播主题", title)); |
| | | params.put("data", messageData); |
| | | params.put("miniprogram_state", "trial"); |
| | | params.put("lang", "zh_CN"); |
| | | try { |
| | | log.info("发送消息参数:{}", JSONObject.toJSONString(params)); |
| | | String post = HttpUtil.post(url, JSONObject.toJSONString(params)); |
| | | log.info("发送消息返回结果:{}", post); |
| | | } catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取access_token |
| | | * @return |
| | | */ |
| | | private static String getAccessTokenByWX() { |
| | | Map<String, Object> params = new HashMap<>(); |
| | | params.put("appid", WX_APPID); |
| | | params.put("secret", WX_SECRET); |
| | | params.put("grant_type", "client_credential"); |
| | | String token = HttpUtil.post(STABLE_ACCESS_TOKEN_HOST,JSONObject.toJSONString(params)); |
| | | log.info("token:{}", token); |
| | | JSONObject jsonObject = JSONObject.parseObject(token); |
| | | return jsonObject.getString("access_token"); |
| | | } |
| | | private static Map<String, Object> createDataItem(String name, String value) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("value", value); |
| | | return item; |
| | | } |
| | | |
| | | public static void main(String[] args) throws Exception { |
| | | push("oL-gp5Fn7BobtFZCsQ3ZTY7QGU84", "直播推送", "鸿瑞堂", new Date()); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.utils; |
| | | |
| | | import cn.hutool.core.collection.CollectionUtil; |
| | | import cn.hutool.core.date.DatePattern; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.http.HttpUtil; |
| | | import com.alibaba.fastjson2.JSONArray; |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.utils.DateUtils; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.redis.service.RedisService; |
| | | import com.ruoyi.goods.domain.dto.XiaoeCourseQueryDto; |
| | | import com.ruoyi.goods.domain.dto.XiaoeLiveDto; |
| | | import com.ruoyi.goods.domain.dto.XiaoeLiveQueryDto; |
| | | import com.ruoyi.goods.domain.vo.XiaoeCourseChapterVO; |
| | | import com.ruoyi.goods.domain.vo.XiaoeCourseGroupVO; |
| | | import com.ruoyi.goods.domain.vo.XiaoeCourseVO; |
| | | import com.ruoyi.goods.domain.vo.XiaoeLiveDetailVOV2; |
| | | import com.ruoyi.goods.domain.vo.XiaoeLiveVo; |
| | | import com.ruoyi.goods.domain.vo.XiaoeLiveVoV2; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.IOException; |
| | | import java.io.InputStreamReader; |
| | | import java.net.HttpURLConnection; |
| | | import java.net.MalformedURLException; |
| | | import java.net.URL; |
| | | import java.util.ArrayList; |
| | | import java.util.Comparator; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | /** |
| | | * 小鹅通工具类 |
| | | * @author mitao |
| | | * @date 2025/1/8 |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class XiaoeUtils { |
| | | @Resource |
| | | private RedisService redisService; |
| | | private static final String BASE_URL = "https://api.xiaoe-tech.com/token"; |
| | | //店铺的业务id |
| | | private String app_id = "appwmuwNWD48082"; |
| | | //应用的唯一标识,通过 client_id 来鉴别应用的身份 |
| | | private String client_id = "xopYwOAqNI36444"; |
| | | //应用的凭证秘钥,即client_secret,用来保证应用来源的可靠性,防止被伪造 |
| | | private String secret_key = "qKFxbGR0OlKX85PVyfCvkRF1P6fLRBEu"; |
| | | //固定填写client_credential |
| | | private String grant_type = "client_credential"; |
| | | //获取直播列表 |
| | | private static final String LIVE_PAGE_LIST = "https://api.xiaoe-tech.com/xe.alive.list.get/1.0.0"; |
| | | private static final String LIVE_PAGE_LIST_V2 = "https://api.xiaoe-tech.com/xe.alive.list.get/2.0.0"; |
| | | //获取直播详情 |
| | | private static final String LIVE_DETAIL = "https://api.xiaoe-tech.com/xe.alive.detail.get/1.0.0"; |
| | | private static final String LIVE_DETAIL_V2 = "https://api.xiaoe-tech.com/xe.alive.detail.get/2.0.0"; |
| | | //创建直播 |
| | | private static final String LIVE_ADD = "https://api.xiaoe-tech.com/xe.alive.live.create/1.0.0"; |
| | | //编辑直播 |
| | | private static final String LIVE_EDIT = "https://api.xiaoe-tech.com/xe.alive.live.update/1.0.0"; |
| | | //删除直播 |
| | | private static final String LIVE_DELETE = "https://api.xiaoe-tech.com/xe.alive.live.delete/1.0.0"; |
| | | //课程列表 |
| | | private static final String COURSE_PAGE_LIST = "https://api.xiaoe-tech.com/xe.course.course.list/1.0.0"; |
| | | //课程小节 |
| | | private static final String COURSE_CHAPTER = "https://api.xiaoe-tech.com/xe.course.course.chapter.get/1.0.0"; |
| | | //获取店铺商品分组列表 |
| | | private static final String COURSE_GROUP_LIST = "https://api.xiaoe-tech.com/xe.resource_tags.list/1.0.0"; |
| | | |
| | | |
| | | /** |
| | | * 获取小鹅通access_token |
| | | * @return |
| | | */ |
| | | private String getAccessToken() { |
| | | Boolean flag = redisService.hasKey("xiaoe:access_token"); |
| | | String accessToken = ""; |
| | | if (flag) { |
| | | accessToken = redisService.getCacheObject("xiaoe:access_token"); |
| | | } else { |
| | | String urlString = BASE_URL + |
| | | "?app_id=" + this.app_id + |
| | | "&client_id=" + this.client_id + |
| | | "&secret_key=" + this.secret_key + |
| | | "&grant_type=" + this.grant_type; |
| | | String result = null; |
| | | try { |
| | | URL reqURL = new URL(urlString); |
| | | HttpURLConnection httpURLConnection = (HttpURLConnection) reqURL.openConnection(); |
| | | InputStreamReader isr = new InputStreamReader(httpURLConnection.getInputStream()); |
| | | char[] chars = new char[1024]; |
| | | result = ""; |
| | | int len; |
| | | while ((len = isr.read(chars)) != -1) { |
| | | result += new String(chars, 0, len); |
| | | } |
| | | isr.close(); |
| | | } catch (MalformedURLException e) { |
| | | e.printStackTrace(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | JSONObject jsonObject = JSONObject.parseObject(result); |
| | | log.info("获取access_token返回结果:{}", result); |
| | | Map data = (Map) jsonObject.get("data"); |
| | | accessToken = (String)data.get("access_token"); |
| | | Integer expiresIn = (int) data.get("expires_in"); |
| | | redisService.setCacheObject("xiaoe:access_token", accessToken,Long.parseLong(expiresIn.toString()), TimeUnit.SECONDS); |
| | | } |
| | | return accessToken; |
| | | } |
| | | |
| | | /** |
| | | * 获取直播列表 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | public Page<XiaoeLiveVo> getLivePageList(XiaoeLiveQueryDto dto) { |
| | | Map<String,Object> postParams = new HashMap<>(); |
| | | postParams.put("search_content", dto.getSearchContent()); |
| | | postParams.put("create_mode", dto.getCreateMode()); |
| | | postParams.put("state", 0); |
| | | postParams.put("search_alive_type", dto.getSearchAliveType()); |
| | | postParams.put("alive_play_state", dto.getAlivePlayState()); |
| | | postParams.put("page", dto.getPage()); |
| | | postParams.put("page_size", dto.getPageSize()); |
| | | postParams.put("access_token", getAccessToken()); |
| | | String post = HttpUtil.post(LIVE_PAGE_LIST, JSONObject.toJSONString(postParams)); |
| | | Page<XiaoeLiveVo> xiaoeLiveVOPage = new Page<>(); |
| | | if (StringUtils.isNotBlank(post)) { |
| | | log.info("获取直播列表返回结果:{}", post); |
| | | JSONObject jsonObject = JSONObject.parseObject(post); |
| | | if (jsonObject.get("code").equals(0) ) { |
| | | JSONObject data = jsonObject.getJSONObject("data"); |
| | | JSONArray list = data.getJSONArray("list"); |
| | | if (CollectionUtil.isNotEmpty(list)) { |
| | | List<XiaoeLiveVo> xiaoeLiveVos = JSONArray.parseArray(list.toJSONString(), XiaoeLiveVo.class); |
| | | xiaoeLiveVOPage.setRecords(xiaoeLiveVos); |
| | | xiaoeLiveVOPage.setCurrent(dto.getPage()); |
| | | xiaoeLiveVOPage.setPages(data.getLong("page_count")); |
| | | } |
| | | } |
| | | } |
| | | return xiaoeLiveVOPage; |
| | | } |
| | | |
| | | /** |
| | | *获取直播详情 |
| | | * @param id 直播ID |
| | | * @return |
| | | */ |
| | | public XiaoeLiveVo getLiveDetail(String id) { |
| | | Map<String, Object> postParams = new HashMap<>(); |
| | | postParams.put("id", id); |
| | | postParams.put("access_token", getAccessToken()); |
| | | String post = HttpUtil.post(LIVE_DETAIL, JSONObject.toJSONString(postParams)); |
| | | XiaoeLiveVo xiaoeLiveVO = null; |
| | | if (StringUtils.isNotBlank(post)) { |
| | | JSONObject jsonObject = JSONObject.parseObject(post); |
| | | if (jsonObject.get("code").equals(0)) { |
| | | JSONObject data = jsonObject.getJSONObject("data"); |
| | | xiaoeLiveVO = JSONObject.parseObject(data.toJSONString(), XiaoeLiveVo.class); |
| | | } |
| | | } |
| | | return xiaoeLiveVO; |
| | | } |
| | | |
| | | /** |
| | | * 获取直播列表2.0 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | public Page<XiaoeLiveVoV2> getLivePageListV2(XiaoeLiveQueryDto dto) { |
| | | Map<String,Object> postParams = new HashMap<>(); |
| | | postParams.put("search_content", dto.getSearchContent()); |
| | | postParams.put("create_mode", dto.getCreateMode()); |
| | | postParams.put("state", 0); |
| | | postParams.put("search_alive_type", dto.getSearchAliveType()); |
| | | postParams.put("alive_play_state", dto.getAlivePlayState()); |
| | | postParams.put("page", dto.getPage()); |
| | | postParams.put("page_size", dto.getPageSize()); |
| | | postParams.put("access_token", getAccessToken()); |
| | | postParams.put("zb_start_at_min", DateUtil.format(DateUtils.getTodayStartTime(), DatePattern.NORM_DATETIME_PATTERN)); |
| | | String post = HttpUtil.post(LIVE_PAGE_LIST_V2, JSONObject.toJSONString(postParams)); |
| | | Page<XiaoeLiveVoV2> xiaoeLiveVOPage = new Page<>(); |
| | | if (StringUtils.isNotBlank(post)) { |
| | | log.info("获取直播详情2.0返回结果:{}", post); |
| | | JSONObject jsonObject = JSONObject.parseObject(post); |
| | | if (jsonObject.get("code").equals(0)) { |
| | | JSONObject data = jsonObject.getJSONObject("data"); |
| | | JSONArray list = data.getJSONArray("live_list"); |
| | | if (!list.isEmpty()){ |
| | | List<XiaoeLiveVoV2> xiaoeLiveVos = JSONArray.parseArray(list.toJSONString(), XiaoeLiveVoV2.class); |
| | | xiaoeLiveVOPage.setRecords(xiaoeLiveVos); |
| | | xiaoeLiveVOPage.setCurrent(dto.getPage()); |
| | | xiaoeLiveVOPage.setTotal(data.getLong("total_count")); |
| | | } |
| | | } |
| | | } |
| | | return xiaoeLiveVOPage; |
| | | } |
| | | |
| | | /** |
| | | *获取直播详情 |
| | | * @param id 直播ID |
| | | * @return |
| | | */ |
| | | public XiaoeLiveDetailVOV2 getLiveDetailV2(String id) { |
| | | Map<String, Object> postParams = new HashMap<>(); |
| | | postParams.put("id", id); |
| | | postParams.put("access_token", getAccessToken()); |
| | | String post = HttpUtil.post(LIVE_DETAIL_V2, JSONObject.toJSONString(postParams)); |
| | | XiaoeLiveDetailVOV2 vo = null; |
| | | if (StringUtils.isNotBlank(post)) { |
| | | JSONObject jsonObject = JSONObject.parseObject(post); |
| | | if (jsonObject.get("code").equals(0)) { |
| | | JSONObject data = jsonObject.getJSONObject("data"); |
| | | vo = JSONObject.parseObject(data.toJSONString(), XiaoeLiveDetailVOV2.class); |
| | | } |
| | | } |
| | | return vo; |
| | | } |
| | | /** |
| | | * 创建直播 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | public String addLive(XiaoeLiveDto dto) { |
| | | Map<String, Object> requestParams = new HashMap<>(); |
| | | Map<String, Object> resourceInfoMap = new HashMap<>(); |
| | | resourceInfoMap.put("title", dto.getTitle()); |
| | | resourceInfoMap.put("summary", dto.getSummary()); |
| | | resourceInfoMap.put("zb_start_at", dto.getZbStartAt()); |
| | | resourceInfoMap.put("zb_stop_at", dto.getZbStopAt()); |
| | | resourceInfoMap.put("alive_type", dto.getAliveType()); |
| | | resourceInfoMap.put("descrb", dto.getDescrb()); |
| | | requestParams.put("resource_info", resourceInfoMap); |
| | | // 配置信息 |
| | | Map<String, Object> moudleInfoMap = new HashMap<>(); |
| | | moudleInfoMap.put("alive_mode", dto.getAliveMode()); |
| | | requestParams.put("module_info", moudleInfoMap); |
| | | //讲师信息 |
| | | List<Map<String, Object>> roleList = new ArrayList<>(); |
| | | Map<String, Object> roleInfoMap = new HashMap<>(); |
| | | roleInfoMap.put("role_name", "讲师"); |
| | | roleInfoMap.put("user_id", dto.getUserId()); |
| | | roleList.add(roleInfoMap); |
| | | requestParams.put("role_info", roleList); |
| | | //商品信息 |
| | | Map<String, Object> goodsInfoMap = new HashMap<>(); |
| | | goodsInfoMap.put("sale_type", 1);//售卖类型:1-单独售卖、2-关联售卖 |
| | | goodsInfoMap.put("payment_type", dto.getPaymentType()); |
| | | if (dto.getPaymentType().equals(3)) { |
| | | goodsInfoMap.put("resource_password", dto.getResourcePassword()); |
| | | } |
| | | requestParams.put("goods_info", goodsInfoMap); |
| | | requestParams.put("access_token", getAccessToken()); |
| | | log.info("创建直播参数:{}" ,JSONObject.toJSONString(requestParams)); |
| | | String post = HttpUtil.post(LIVE_ADD, JSONObject.toJSONString(requestParams)); |
| | | if (StringUtils.isNotBlank(post)) { |
| | | JSONObject jsonObject = JSONObject.parseObject(post); |
| | | log.info("创建直播返回结果:{}" ,post); |
| | | if (jsonObject.get("code").equals(0)) { |
| | | JSONObject data = jsonObject.getJSONObject("data"); |
| | | return data.getString("id"); |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | /** |
| | | * 编辑直播 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | public Boolean editLive(XiaoeLiveDto dto) { |
| | | boolean flag = false; |
| | | Map<String, Object> requestParams = new HashMap<>(); |
| | | Map<String, Object> resourceInfoMap = new HashMap<>(); |
| | | resourceInfoMap.put("id", dto.getId()); |
| | | resourceInfoMap.put("title", dto.getTitle()); |
| | | resourceInfoMap.put("summary", dto.getSummary()); |
| | | resourceInfoMap.put("zb_start_at", dto.getZbStartAt()); |
| | | resourceInfoMap.put("zb_stop_at", dto.getZbStopAt()); |
| | | resourceInfoMap.put("alive_type", dto.getAliveType()); |
| | | resourceInfoMap.put("descrb", dto.getDescrb()); |
| | | requestParams.put("resource_info", resourceInfoMap); |
| | | // 配置信息 |
| | | Map<String, Object> moudleInfoMap = new HashMap<>(); |
| | | moudleInfoMap.put("alive_mode", dto.getAliveMode()); |
| | | requestParams.put("module_info", moudleInfoMap); |
| | | //讲师信息 |
| | | List<Map<String, Object>> roleList = new ArrayList<>(); |
| | | Map<String, Object> roleInfoMap = new HashMap<>(); |
| | | roleInfoMap.put("role_name", "讲师"); |
| | | roleInfoMap.put("user_id", dto.getUserId()); |
| | | roleList.add(roleInfoMap); |
| | | requestParams.put("role_info", roleList); |
| | | //商品信息 |
| | | Map<String, Object> goodsInfoMap = new HashMap<>(); |
| | | goodsInfoMap.put("sale_type", 1);//售卖类型:1-单独售卖、2-关联售卖 |
| | | goodsInfoMap.put("payment_type", dto.getPaymentType()); |
| | | if (dto.getPaymentType().equals(3)) { |
| | | goodsInfoMap.put("resource_password", dto.getResourcePassword()); |
| | | } |
| | | requestParams.put("goods_info", goodsInfoMap); |
| | | requestParams.put("access_token", getAccessToken()); |
| | | log.info("编辑直播参数:{}" ,JSONObject.toJSONString(requestParams)); |
| | | String post = HttpUtil.post(LIVE_EDIT, JSONObject.toJSONString(requestParams)); |
| | | if (StringUtils.isNotBlank(post)) { |
| | | JSONObject jsonObject = JSONObject.parseObject(post); |
| | | log.info("编辑直播返回结果:{}" ,post); |
| | | if (jsonObject.get("code").equals(0)) { |
| | | flag = true; |
| | | } |
| | | } |
| | | return flag; |
| | | } |
| | | |
| | | /** |
| | | * 删除直播 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | public Boolean deleteLive(String id) { |
| | | boolean flag = false; |
| | | Map<String, Object> requestParams = new HashMap<>(); |
| | | requestParams.put("id", id); |
| | | requestParams.put("access_token", getAccessToken()); |
| | | String post = HttpUtil.post(LIVE_DELETE, JSONObject.toJSONString(requestParams)); |
| | | if (StringUtils.isNotBlank(post)) { |
| | | JSONObject jsonObject = JSONObject.parseObject(post); |
| | | log.info("删除直播返回结果:{}" ,post); |
| | | if (jsonObject.get("code").equals(0)) { |
| | | flag = true; |
| | | } |
| | | } |
| | | return flag; |
| | | } |
| | | |
| | | /** |
| | | * 获取商品分组列表 |
| | | * @return |
| | | */ |
| | | public List<XiaoeCourseGroupVO> getCourseGroupList(){ |
| | | Map<String, Object> requestParams = new HashMap<>(); |
| | | requestParams.put("page", 1); |
| | | requestParams.put("page_size", 50); |
| | | requestParams.put("access_token", getAccessToken()); |
| | | String post = HttpUtil.post(COURSE_GROUP_LIST, JSONObject.toJSONString(requestParams)); |
| | | List<XiaoeCourseGroupVO> xiaoeCourseGroupVOList = new ArrayList<>(); |
| | | if (StringUtils.isNotBlank(post)) { |
| | | JSONObject jsonObject = JSONObject.parseObject(post); |
| | | log.info("获取商品分组返回结果:{}" ,post); |
| | | if (jsonObject.get("code").equals(0)) { |
| | | JSONObject data = jsonObject.getJSONObject("data"); |
| | | JSONArray jsonArray = data.getJSONArray("list"); |
| | | xiaoeCourseGroupVOList = JSONArray.parseArray(jsonArray.toJSONString(), XiaoeCourseGroupVO.class); |
| | | } |
| | | } |
| | | return xiaoeCourseGroupVOList; |
| | | } |
| | | |
| | | /** |
| | | * 获取课程列表 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | public Page<XiaoeCourseVO> getCoursePageList(XiaoeCourseQueryDto dto) { |
| | | Map<String, Object> requestParams = new HashMap<>(); |
| | | requestParams.put("search_content", dto.getSearchContent()); |
| | | requestParams.put("page_index", dto.getPageNo()); |
| | | requestParams.put("page_size", dto.getPageSize()); |
| | | requestParams.put("created_source", dto.getCreatedSource()); |
| | | requestParams.put("tags", dto.getTags()); |
| | | if (dto.getSortBy().equals(1)) { |
| | | requestParams.put("order_by", "modify");//根据创建时间排序 |
| | | requestParams.put("order_type",1); |
| | | } |
| | | |
| | | requestParams.put("sale_status", 1); |
| | | requestParams.put("access_token", getAccessToken()); |
| | | String post = HttpUtil.post(COURSE_PAGE_LIST, JSONObject.toJSONString(requestParams)); |
| | | Page<XiaoeCourseVO> page = new Page<>(); |
| | | if (StringUtils.isNotBlank(post)) { |
| | | log.info("获取课程列表返回结果:{}" ,post); |
| | | JSONObject jsonObject = JSONObject.parseObject(post); |
| | | if (jsonObject.get("code").equals(0)) { |
| | | JSONObject data = jsonObject.getJSONObject("data"); |
| | | JSONArray jsonArray = data.getJSONArray("list"); |
| | | List<XiaoeCourseVO> xiaoeCourseVOList = JSONArray.parseArray(jsonArray.toJSONString(), XiaoeCourseVO.class); |
| | | if (dto.getSortBy().equals(2)){ |
| | | xiaoeCourseVOList.sort(Comparator.comparing(XiaoeCourseVO::getCurriculumTime)); |
| | | } |
| | | page.setRecords(xiaoeCourseVOList); |
| | | page.setTotal(data.getLong("total")); |
| | | } |
| | | } |
| | | return page; |
| | | } |
| | | |
| | | /** |
| | | * 查询课程目录小节 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | public List<XiaoeCourseChapterVO> getCourseChapterDetail(String id) { |
| | | Map<String, Object> requestParams = new HashMap<>(); |
| | | requestParams.put("course_id", id); |
| | | requestParams.put("access_token", getAccessToken()); |
| | | String post = HttpUtil.post(COURSE_CHAPTER, JSONObject.toJSONString(requestParams)); |
| | | List<XiaoeCourseChapterVO> courseChapterVOList = new ArrayList<>(); |
| | | if (StringUtils.isNotBlank(post)) { |
| | | log.info("查询课程目录小节返回结果:{}" ,post); |
| | | JSONObject jsonObject = JSONObject.parseObject(post); |
| | | if (jsonObject.get("code").equals(0)) { |
| | | JSONObject data = jsonObject.getJSONObject("data"); |
| | | courseChapterVOList = JSONArray.parseArray(data.getString("list"), XiaoeCourseChapterVO.class); |
| | | } |
| | | } |
| | | return courseChapterVOList; |
| | | } |
| | | public static void main(String[] args) { |
| | | String urlString = BASE_URL + |
| | | "?app_id=appwmuwNWD48082" + |
| | | "&client_id=xopYwOAqNI36444"+ |
| | | "&secret_key=qKFxbGR0OlKX85PVyfCvkRF1P6fLRBEu" + |
| | | "&grant_type=client_credential"; |
| | | String result = null; |
| | | try { |
| | | URL reqURL = new URL(urlString); |
| | | HttpURLConnection httpURLConnection = (HttpURLConnection) reqURL.openConnection(); |
| | | InputStreamReader isr = new InputStreamReader(httpURLConnection.getInputStream()); |
| | | char[] chars = new char[1024]; |
| | | result = ""; |
| | | int len; |
| | | while ((len = isr.read(chars)) != -1) { |
| | | result += new String(chars, 0, len); |
| | | } |
| | | isr.close(); |
| | | } catch (MalformedURLException e) { |
| | | e.printStackTrace(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | JSONObject jsonObject = JSONObject.parseObject(result); |
| | | System.out.println(jsonObject); |
| | | Map data = (Map) jsonObject.get("data"); |
| | | String accessToken = (String) data.get("access_token"); |
| | | System.out.println(accessToken); |
| | | } |
| | | |
| | | } |
| | |
| | | <if test="param.goodsName != null and param.goodsName != ''"> |
| | | AND tg.goods_name LIKE CONCAT('%',#{param.goodsName},'%') |
| | | </if> |
| | | <if test="param.goodsStatus != null and param.goodsStatus != ''"> |
| | | AND tg.goods_status = #{param.goodsStatus} |
| | | </if> |
| | | ORDER BY tg.create_time DESC |
| | | </select> |
| | | |
| | |
| | | FROM t_goods |
| | | WHERE del_flag = 0 AND goods_class_id = #{classId} |
| | | </select> |
| | | <select id="pageShopMgtGoods" resultType="com.ruoyi.goods.domain.vo.PageShopMgtGoodsVO"> |
| | | select |
| | | tg.goods_id, |
| | | tg.goods_name, |
| | | tg.goods_introduction, |
| | | tg.goods_class_id, |
| | | tg.goods_tags, |
| | | tgf.file_url goodsPicture, |
| | | CASE tg.goods_type |
| | | WHEN 1 THEN "周期" |
| | | WHEN 2 THEN "服务" |
| | | WHEN 3 THEN "体验" |
| | | WHEN 4 THEN "单品" |
| | | END goodsType, |
| | | tg.sales_price suggestSalesPrice, |
| | | CASE tg.goods_status |
| | | WHEN 1 THEN "上架中" |
| | | WHEN 2 THEN "下架中" |
| | | ELSE "下架中" |
| | | END goodsStatus, |
| | | tg.create_time, |
| | | tsg.shop_id, |
| | | tsg.sales_price shopPrice |
| | | from t_goods tg |
| | | LEFT JOIN t_goods_file tgf ON tg.goods_id = tgf.goods_id AND tgf.del_flag = 0 AND tgf.file_type = 1 |
| | | LEFT JOIN t_shop_goods tsg on tg.goods_id = tsg.goods_id and tsg.del_flag = 0 |
| | | WHERE tg.del_flag = 0 |
| | | <if test="dto.goodsType != null and dto.goodsType != ''"> |
| | | AND tg.goods_type = #{dto.goodsType} |
| | | </if> |
| | | <if test="dto.goodsClassId != null and dto.goodsClassId != ''"> |
| | | AND tg.goods_class_id = #{dto.goodsClassId} |
| | | </if> |
| | | <if test="dto.createStartTime!=null and dto.createStartTime != ''"> |
| | | AND Date(tg.create_time) >= #{dto.createStartTime} |
| | | </if> |
| | | <if test="dto.createEndTime!=null and dto.createEndTime != ''"> |
| | | AND Date(tg.create_time) <= #{dto.createEndTime} |
| | | </if> |
| | | <if test="dto.goodsName != null and dto.goodsName != ''"> |
| | | AND tg.goods_name LIKE CONCAT('%',#{dto.goodsName},'%') |
| | | </if> |
| | | <if test="dto.goodsStatus != null and dto.goodsStatus != ''"> |
| | | AND tg.goods_status = #{dto.goodsStatus} |
| | | </if> |
| | | <if test="dto.shopIds != null and dto.shopIds.size() > 0"> |
| | | AND tsg.shop_id IN |
| | | <foreach collection="param.shopIds" item="item" open="(" separator="," close=")"> |
| | | #{item} |
| | | </foreach> |
| | | </if> |
| | | |
| | | ORDER BY tg.create_time DESC |
| | | </select> |
| | | </mapper> |
New file |
| | |
| | | <?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.ruoyi.goods.mapper.live.XiaoeLiveAppointmentMapper"> |
| | | |
| | | </mapper> |
New file |
| | |
| | | <?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.ruoyi.goods.mapper.live.XiaoeLiveRecordMapper"> |
| | | |
| | | </mapper> |
New file |
| | |
| | | <?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.ruoyi.goods.mapper.lottery.LotteryEventMapper"> |
| | | |
| | | |
| | | <select id="pageAppLotteryEvent" resultType="com.ruoyi.goods.domain.vo.AppLotteryEventPageVo"> |
| | | select * |
| | | from (select a.id, |
| | | a.name, |
| | | a.activity_profile as activityProfile, |
| | | a.activity_type as activityType, |
| | | date_format(a.start_time, '%Y-%m-%d %H:%i:%s') as startTime, |
| | | date_format(a.end_time, '%Y-%m-%d %H:%i:%s') as endTime, |
| | | a.cover_image as coverImage, |
| | | if(ifnull(b.num, 0) = 0, false, true) as participation, |
| | | CASE |
| | | WHEN NOW() > a.start_time and now() <= a.end_time and ifnull(b.num, 0) > 0 THEN 1 |
| | | WHEN NOW() > a.start_time and now() <= a.end_time and ifnull(b.num, 0) = 0 THEN 2 |
| | | ELSE 3 END as sort |
| | | from t_lottery_event a |
| | | left join (select count(1) as num, lottery_event_id |
| | | from t_user_lottery_event |
| | | where user_id = #{userId} |
| | | group by lottery_event_id) b on a.id = b.lottery_event_id |
| | | where a.del_flag = 0 |
| | | and now() > a.end_time |
| | | and a.activity_type in (4, 5)) as aa |
| | | order by aa.sort, aa.startTime |
| | | </select> |
| | | |
| | | |
| | | <select id="getShopLotteryDrawList" resultType="com.ruoyi.goods.domain.vo.ShopLotteryDrawListVo"> |
| | | select id, |
| | | `name`, |
| | | activity_profile as activityProfile, |
| | | cover_image as coverImage, |
| | | DATE_FORMAT(start_time, '%Y-%m-%d %H:%i') as startTime, |
| | | DATE_FORMAT(end_time, '%Y-%m-%d %H:%i') as endTime |
| | | from t_lottery_event |
| | | where shop_id = #{shopId} |
| | | order by create_time desc |
| | | </select> |
| | | </mapper> |
New file |
| | |
| | | <?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.ruoyi.goods.mapper.lottery.LotteryEventPrizeMapper"> |
| | | |
| | | </mapper> |
New file |
| | |
| | | <?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.ruoyi.goods.mapper.lottery.UserLotteryEventMapper"> |
| | | |
| | | <select id="getShopWinningRecord" resultType="map"> |
| | | select aa.user_id, |
| | | DATE_FORMAT(any_value(aa.create_time), '%Y-%m-%d %H:%i') as create_time, |
| | | GROUP_CONCAT(CONCAT(aa.prize_type, '_', aa.object_id, '_', aa.object_name, '_', aa.number)) as content |
| | | from (select * |
| | | from t_user_lottery_event |
| | | where prize_type != 5 and lottery_event_id = #{id} |
| | | order by create_time) as aa |
| | | group by aa.user_id |
| | | </select> |
| | | </mapper> |
New file |
| | |
| | | <?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.ruoyi.goods.mapper.lottery.UserLotteryEventQuestionsMapper"> |
| | | |
| | | </mapper> |
| | |
| | | <artifactId>spring-boot-starter-test</artifactId> |
| | | <scope>test</scope> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.mapstruct</groupId> |
| | | <artifactId>mapstruct-jdk8</artifactId> |
| | | <version>1.3.0.Final</version> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>org.mapstruct</groupId> |
| | | <artifactId>mapstruct-processor</artifactId> |
| | | <version>1.3.0.Final</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-api-goods</artifactId> |
| | | <version>3.6.2</version> |
| | | <scope>compile</scope> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | <build> |
| | |
| | | } |
| | | |
| | | @RequestMapping(value = "/getMerCouponVo", method = RequestMethod.POST) |
| | | @ApiOperation(value = "商户获取优惠券编辑信息") |
| | | @ApiOperation(value = "商户获取优惠券编辑信息【2.0】") |
| | | public R<MerCouponGetVo> getMerCouponVo(@RequestBody MerBaseGetDto merBaseGetDto) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | merBaseGetDto.setUserId(userId); |
| | | MerCouponGetVo couponGetVo = couponService.getMerCouponVo(merBaseGetDto); |
| | | return R.ok(couponGetVo); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/editMerCoupon", method = RequestMethod.POST) |
| | | @ApiOperation(value = "商户编辑优惠券") |
| | | @ApiOperation(value = "商户编辑优惠券【2.0】") |
| | | public R editMerCoupon(@RequestBody MerCouponEditDto merCouponEditDto) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | merCouponEditDto.setUserId(userId); |
| | |
| | | } |
| | | |
| | | @RequestMapping(value = "/pageMerMember", method = RequestMethod.POST) |
| | | @ApiOperation(value = "分页获取商户绑定会员列表") |
| | | @ApiOperation(value = "分页获取商户绑定会员列表【2.0】") |
| | | public R<Page<MerMemberPageVo>> pageMerMember(@RequestBody MerMemberPageDto merMemberPageDto) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | Page<MerMemberPageVo> page = new Page<>(); |
| | |
| | | package com.ruoyi.member.controller.console; |
| | | |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.controller.BaseController; |
| | | import com.ruoyi.member.service.coupon.CouponService; |
| | |
| | | import com.ruoyi.system.api.domain.dto.MerVerifyMemberCouponDto; |
| | | import com.ruoyi.system.api.domain.vo.AppMemberCouponVo; |
| | | import com.ruoyi.system.api.domain.vo.MerVerifyCouponGetVo; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | |
| | | * @Date 2023/6/27 15:00 |
| | | * @Version 1.0 |
| | | */ |
| | | @Slf4j |
| | | @RestController |
| | | @RequestMapping("/coupon") |
| | | public class CouponController extends BaseController { |
| | |
| | | */ |
| | | @PostMapping("/useMemberCoupon") |
| | | public R useMemberCoupon(@RequestBody String memberCouponIds){ |
| | | log.info("修改优惠券使用状态:{}", JSON.toJSONString(memberCouponIds)); |
| | | memberCouponService.useMemberCoupon(memberCouponIds); |
| | | return R.ok(); |
| | | } |
| | |
| | | memberCouponService.sureMemberCoupon(merVerifyMemberCouponDto.getCouponId(),merVerifyMemberCouponDto.getShopId()); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 回退优惠券 |
| | | * @author jqs |
| | | * @date 2023/7/13 19:38 |
| | | * @param memberCouponIds |
| | | * @return R |
| | | * @return R |
| | | * @description 回退优惠券 |
| | | * @author jqs |
| | | * @date 2023/7/13 19:38 |
| | | */ |
| | | @PostMapping("/backMemberCoupon") |
| | | public R backMemberCoupon(@RequestBody String memberCouponIds){ |
| | | public R backMemberCoupon(@RequestBody String memberCouponIds) { |
| | | memberCouponService.backMemberCoupon(memberCouponIds); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 手动添加用户优惠券 |
| | | * |
| | | * @param couponId |
| | | * @param number |
| | | * @return |
| | | */ |
| | | @PostMapping("/addMemberCoupon") |
| | | public R addMemberCoupon(@RequestParam("couponId") String couponId, @RequestParam("number") Integer number, @RequestParam("userId") Long userId) { |
| | | return memberCouponService.addMemberCoupon(couponId, number, userId); |
| | | } |
| | | } |
| | |
| | | package com.ruoyi.member.controller.console; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.controller.BaseController; |
| | | import com.ruoyi.member.service.birthday.BirthdayCardService; |
| | |
| | | import com.ruoyi.system.api.model.AppMiniLoginVo; |
| | | import com.ruoyi.system.api.service.RemoteShopService; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | |
| | | @RestController |
| | | @RequestMapping("/member") |
| | | public class MemberController extends BaseController { |
| | | |
| | | |
| | | @Resource |
| | | private MemberService memberService; |
| | | |
| | | |
| | | @Resource |
| | | private MemberSuggestService memberSuggestService; |
| | | |
| | | |
| | | @Resource |
| | | private MemberGiftRecordService memberGiftRecordService; |
| | | |
| | | |
| | | @Resource |
| | | private BirthdayCardService birthdayCardService; |
| | | |
| | | |
| | | @Resource |
| | | private RemoteShopService remoteShopService; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * @description: getMember |
| | | * @param: userId |
| | | * @return: R<Member> |
| | | * @author jqs34 |
| | | * @date: 2023/4/30 12:49 |
| | | */ |
| | | * @description: getMember |
| | | * @param: userId |
| | | * @return: R<Member> |
| | | * @author jqs34 |
| | | * @date: 2023/4/30 12:49 |
| | | */ |
| | | |
| | | @PostMapping("/getMember") |
| | | public R<Member> getMember(@RequestBody Long userId) |
| | | { |
| | | public R<Member> getMember(@RequestBody Long userId) { |
| | | Member member = memberService.getByUserId(userId); |
| | | if(member ==null){ |
| | | if (member == null) { |
| | | return R.fail("获取会员失败!"); |
| | | } |
| | | return R.ok(member); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 修改会员数据 |
| | | * |
| | | * @param member |
| | | * @return |
| | | */ |
| | | @PostMapping("/editMember") |
| | | public R editMember(@RequestBody Member member) { |
| | | memberService.updateById(member); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 小程序登录 |
| | | */ |
| | | @PostMapping("/miniLogin") |
| | | @ApiOperation("小程序登录") |
| | | public R<AppMiniLoginVo> getMemberByCode(@RequestBody AppMiniLoginDto appMiniLoginDto) |
| | | { |
| | | public R<AppMiniLoginVo> getMemberByCode(@RequestBody AppMiniLoginDto appMiniLoginDto) { |
| | | AppMiniLoginVo appMiniLoginVo = memberService.getMemberByCode(appMiniLoginDto); |
| | | if(appMiniLoginVo ==null){ |
| | | if (appMiniLoginVo == null) { |
| | | return R.fail("登录失败!"); |
| | | } |
| | | return R.ok(appMiniLoginVo); |
| | | } |
| | | |
| | | |
| | | @PostMapping(value = "/miniRegister") |
| | | @ApiOperation(value = "小程序注册") |
| | | public R<AppMiniRegisterVo> miniRegister(@RequestBody AppMiniRegisterDto appUserRegisterDto) { |
| | |
| | | } |
| | | return R.ok(appUserRegisterVo); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 更新会员绑定商户 |
| | | * |
| | | * @param appMemberBindingDto |
| | | * @return |
| | | */ |
| | | @PostMapping("/updateMemberBinding") |
| | | public R updateMemberBinding(@RequestBody AppMemberBindingDto appMemberBindingDto) |
| | | { |
| | | public R updateMemberBinding(@RequestBody AppMemberBindingDto appMemberBindingDto) { |
| | | memberService.updateMemberBinding(appMemberBindingDto); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 更新会员商品类型 |
| | | * |
| | | * @param appMemberGoodsTypeDto |
| | | * @return |
| | | */ |
| | | @PostMapping("/updateMemberGoodsType") |
| | | public R updateMemberGoodsType(@RequestBody AppMemberGoodsTypeDto appMemberGoodsTypeDto) |
| | | { |
| | | public R updateMemberGoodsType(@RequestBody AppMemberGoodsTypeDto appMemberGoodsTypeDto) { |
| | | memberService.updateMemberGoodsType(appMemberGoodsTypeDto); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 通过手机号获取会员 |
| | | * |
| | | * @param mobile |
| | | * @return |
| | | */ |
| | | @PostMapping("/getMemberByMobile") |
| | | public R<Member> getMemberByMobile(@RequestBody String mobile) |
| | | { |
| | | public R<Member> getMemberByMobile(@RequestBody String mobile) { |
| | | Member member = memberService.getByMobile(mobile); |
| | | return R.ok(member); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 订单创建新用户 |
| | | * |
| | | * @param member |
| | | * @return |
| | | */ |
| | | @PostMapping("/createNewMember") |
| | | public R createNewMember(@RequestBody Member member) |
| | | { |
| | | public R createNewMember(@RequestBody Member member) { |
| | | memberService.createNewMember(member); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 删除用户标签 |
| | | * @author jqs |
| | | * @date 2023/6/8 15:17 |
| | | * @param tag |
| | | * @return R |
| | | * @return R |
| | | * @description 删除用户标签 |
| | | * @author jqs |
| | | * @date 2023/6/8 15:17 |
| | | */ |
| | | @PostMapping("/deleteMemberTag") |
| | | public R deleteMemberTag(@RequestBody String tag) |
| | | { |
| | | public R deleteMemberTag(@RequestBody String tag) { |
| | | memberService.deleteMemberTag(tag); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 删除会员建议标签 |
| | | * @author jqs |
| | | * @date 2023/6/9 9:43 |
| | | * @param suggestTag |
| | | * @return R |
| | | * @return R |
| | | * @description 删除会员建议标签 |
| | | * @author jqs |
| | | * @date 2023/6/9 9:43 |
| | | */ |
| | | @PostMapping("/deleteMemberSuggestTag") |
| | | public R deleteMemberSuggestTag(@RequestBody String suggestTag) |
| | | { |
| | | public R deleteMemberSuggestTag(@RequestBody String suggestTag) { |
| | | memberSuggestService.deleteMemberSuggestTag(suggestTag); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * @description 通过ids获取用户简易返回 |
| | | * @author jqs |
| | | * @date 2023/6/16 11:05 |
| | | * @param mgtBaseBathDto |
| | | * @return R<List<MgtSimpleMemberVo>> |
| | | * @return R<List < MgtSimpleMemberVo>> |
| | | * @description 通过ids获取用户简易返回 |
| | | * @author jqs |
| | | * @date 2023/6/16 11:05 |
| | | */ |
| | | @PostMapping("/listSimpleVoByIds") |
| | | public R<List<MgtSimpleMemberVo>> listSimpleVoByIds(@RequestBody String userIds) |
| | | {List<MgtSimpleMemberVo> simpleMemberVoList = memberService.listSimpleVoByIds(userIds); |
| | | public R<List<MgtSimpleMemberVo>> listSimpleVoByIds(@RequestBody String userIds) { |
| | | List<MgtSimpleMemberVo> simpleMemberVoList = memberService.listSimpleVoByIds(userIds); |
| | | return R.ok(simpleMemberVoList); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description |
| | | * @author jqs |
| | | * @date 2023/6/16 12:47 |
| | | * @param mgtUserIdByKeywordDto |
| | | * @return R<MgtUserIdByKeywordVo> |
| | | * @return R<MgtUserIdByKeywordVo> |
| | | * @description |
| | | * @author jqs |
| | | * @date 2023/6/16 12:47 |
| | | */ |
| | | @PostMapping("/getUserIdByKeyword") |
| | | public R<MgtUserIdByKeywordVo> getUserIdByKeyword(@RequestBody MgtUserIdByKeywordDto mgtUserIdByKeywordDto) |
| | | { |
| | | public R<MgtUserIdByKeywordVo> getUserIdByKeyword(@RequestBody MgtUserIdByKeywordDto mgtUserIdByKeywordDto) { |
| | | MgtUserIdByKeywordVo mgtUserIdByKeywordVo = memberService.getUserIdByKeyword(mgtUserIdByKeywordDto); |
| | | return R.ok(mgtUserIdByKeywordVo); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description boardMemberTotal |
| | | * @param |
| | | * @return R<MgtBulletinBoardVo> |
| | | * @author jqs34 |
| | | * @date 2023/6/18 16:45 |
| | | */ |
| | | * @param |
| | | * @return R<MgtBulletinBoardVo> |
| | | * @description boardMemberTotal |
| | | * @author jqs34 |
| | | * @date 2023/6/18 16:45 |
| | | */ |
| | | @PostMapping("/boardMemberTotal") |
| | | public R<MgtBulletinBoardVo> boardMemberTotal(@RequestBody BoardMemberTotalDto boardMemberTotalDto) |
| | | { |
| | | public R<MgtBulletinBoardVo> boardMemberTotal(@RequestBody BoardMemberTotalDto boardMemberTotalDto) { |
| | | List<Shop> shopList = remoteShopService.getShopBySysUserIds(boardMemberTotalDto); |
| | | List<Long> shopIds = shopList.stream().map(Shop::getShopId).collect(Collectors.toList()); |
| | | MgtBulletinBoardVo bulletinBoardVo = memberService.boardMemberTotal(shopIds); |
| | | return R.ok(bulletinBoardVo); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 筛选userId年龄段 |
| | | * @author jqs |
| | | * @date 2023/6/20 14:31 |
| | | * @param mgtActivityAgeDto |
| | | * @return R<List<Long>> |
| | | * @return R<List < Long>> |
| | | * @description 筛选userId年龄段 |
| | | * @author jqs |
| | | * @date 2023/6/20 14:31 |
| | | */ |
| | | @PostMapping("/listUserIdByAge") |
| | | public R<List<Long>> listUserIdByAge(@RequestBody MgtActivityAgeDto mgtActivityAgeDto) |
| | | { |
| | | public R<List<Long>> listUserIdByAge(@RequestBody MgtActivityAgeDto mgtActivityAgeDto) { |
| | | List<Long> userIdList = memberService.listUserIdByAge(mgtActivityAgeDto); |
| | | return R.ok(userIdList); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 通过shopId获取userId |
| | | * @author jqs |
| | | * @date 2023/6/21 17:11 |
| | | * @param shopIdlist |
| | | * @return R<List<Long>> |
| | | * @return R<List < Long>> |
| | | * @description 通过shopId获取userId |
| | | * @author jqs |
| | | * @date 2023/6/21 17:11 |
| | | */ |
| | | @PostMapping("/listUserIdByShopId") |
| | | public R<List<Long>> listUserIdByShopId(@RequestBody List<Long> shopIdlist) |
| | | { |
| | | public R<List<Long>> listUserIdByShopId(@RequestBody List<Long> shopIdlist) { |
| | | List<Long> userIdList = memberService.listUserIdByShopId(shopIdlist); |
| | | return R.ok(userIdList); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 通过shopId获取user统计 |
| | | * @author jqs |
| | | * @date 2023/6/21 17:22 |
| | | * @param shopIdlist |
| | | * @return R<MgtShopTotalMemberVo> |
| | | * @return R<MgtShopTotalMemberVo> |
| | | * @description 通过shopId获取user统计 |
| | | * @author jqs |
| | | * @date 2023/6/21 17:22 |
| | | */ |
| | | @PostMapping("/getUserTotalByShopId") |
| | | public R<MgtShopTotalMemberVo> getUserTotalByShopId(@RequestBody List<Long> shopIdlist) |
| | | { |
| | | public R<MgtShopTotalMemberVo> getUserTotalByShopId(@RequestBody List<Long> shopIdlist) { |
| | | MgtShopTotalMemberVo shopTotalMemberVo = memberService.getUserTotalByShopId(shopIdlist); |
| | | return R.ok(shopTotalMemberVo); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 更新会员统计 |
| | | * @author jqs |
| | | * @date 2023/6/28 17:52 |
| | | * @param memberTotalChangeDto |
| | | * @return R |
| | | * @return R |
| | | * @description 更新会员统计 |
| | | * @author jqs |
| | | * @date 2023/6/28 17:52 |
| | | */ |
| | | @PostMapping("/changeMemberTotal") |
| | | public R changeMemberTotal(@RequestBody MemberTotalChangeDto memberTotalChangeDto) |
| | | { |
| | | public R changeMemberTotal(@RequestBody MemberTotalChangeDto memberTotalChangeDto) { |
| | | memberService.changeMemberTotal(memberTotalChangeDto); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 获取各年龄层userId |
| | | * @author jqs |
| | | * @date 2023/7/4 9:49 |
| | | * @param merTotalDto |
| | | * @return R<MerOrderAgeUserVo> |
| | | * @return R<MerOrderAgeUserVo> |
| | | * @description 获取各年龄层userId |
| | | * @author jqs |
| | | * @date 2023/7/4 9:49 |
| | | */ |
| | | @PostMapping("/listOrderAgeUser") |
| | | public R<List<MerOrderAgeUserVo>> listOrderAgeUser(@RequestBody MerTotalDto merTotalDto) |
| | | { |
| | | public R<List<MerOrderAgeUserVo>> listOrderAgeUser(@RequestBody MerTotalDto merTotalDto) { |
| | | List<MerOrderAgeUserVo> orderAgeUserVoList = memberService.listOrderAgeUser(merTotalDto); |
| | | return R.ok(orderAgeUserVoList); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 获取未回复数量 |
| | | * @author jqs |
| | | * @date 2023/7/5 12:49 |
| | | * @param |
| | | * @return R<Integer> |
| | | * @return R<Integer> |
| | | * @description 获取未回复数量 |
| | | * @author jqs |
| | | * @date 2023/7/5 12:49 |
| | | */ |
| | | @PostMapping("/getUnReplaySuggestVo") |
| | | public R<Integer> getUnReplaySuggestVo() |
| | | { |
| | | public R<Integer> getUnReplaySuggestVo() { |
| | | Integer count = memberSuggestService.getUnReplaySuggestVo(); |
| | | return R.ok(count); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 获取核销奖品 |
| | | * @author jqs |
| | | * @date 2023/7/8 17:43 |
| | | * @param verifyPrize |
| | | * @return R<MemberGiftRecord> |
| | | * @return R<MemberGiftRecord> |
| | | * @description 获取核销奖品 |
| | | * @author jqs |
| | | * @date 2023/7/8 17:43 |
| | | */ |
| | | @PostMapping("/getVerifyPrize") |
| | | public R<MemberGiftRecord> getVerifyPrize(@RequestBody String verifyPrize) |
| | | { |
| | | public R<MemberGiftRecord> getVerifyPrize(@RequestBody String verifyPrize) { |
| | | MemberGiftRecord memberGiftRecord = memberGiftRecordService.getById(verifyPrize); |
| | | return R.ok(memberGiftRecord); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * @description 核销奖品 |
| | | * @author jqs |
| | | * @date 2023/8/10 11:56 |
| | | * 根据礼品id获取数据 |
| | | * |
| | | * @param giftId |
| | | * @return |
| | | */ |
| | | @PostMapping("/getVerifyPrizeByGiftId") |
| | | public R<MemberGiftRecord> getVerifyPrizeByGiftId(@RequestBody String giftId) { |
| | | MemberGiftRecord memberGiftRecord = memberGiftRecordService.getOne(new QueryWrapper<MemberGiftRecord>().eq("gift_id", giftId)); |
| | | return R.ok(memberGiftRecord); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @param merVerifyPrizeFinalDto |
| | | * @return R |
| | | * @return R |
| | | * @description 核销奖品 |
| | | * @author jqs |
| | | * @date 2023/8/10 11:56 |
| | | */ |
| | | @PostMapping("/verifyPrize") |
| | | public R verifyPrize(@RequestBody MerVerifyPrizeFinalDto merVerifyPrizeFinalDto) |
| | | { |
| | | public R verifyPrize(@RequestBody MerVerifyPrizeFinalDto merVerifyPrizeFinalDto) { |
| | | memberGiftRecordService.verifyPrize(merVerifyPrizeFinalDto); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 积分变动 |
| | | * @author jqs |
| | |
| | | memberService.changeIntegral(integralChangeDto); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 统计商户今日新增会员 |
| | | * @author jqs |
| | | * @date 2023/7/14 20:00 |
| | | * @param shopIdList |
| | | * @return R<Integer> |
| | | * @return R<Integer> |
| | | * @description 统计商户今日新增会员 |
| | | * @author jqs |
| | | * @date 2023/7/14 20:00 |
| | | */ |
| | | @PostMapping("/getAreaNewMember") |
| | | public R<Integer> getAreaNewMember(@RequestBody List<Long> shopIdList) |
| | | { |
| | | public R<Integer> getAreaNewMember(@RequestBody List<Long> shopIdList) { |
| | | Integer count = memberService.getAreaNewMember(shopIdList); |
| | | return R.ok(count); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * @description 更新会员绑定商户名 |
| | | * @author jqs |
| | | * @date 2023/7/26 17:07 |
| | | * @description 更新会员绑定商户名 |
| | | * @author jqs |
| | | * @date 2023/7/26 17:07 |
| | | * @param mgtMemberShopNameDto |
| | | * @return R |
| | | * @return R |
| | | */ |
| | | @PostMapping("/updateMemberShopName") |
| | | public R updateMemberShopName(@RequestBody MgtMemberShopNameDto mgtMemberShopNameDto) { |
| | | memberService.updateMemberShopName(mgtMemberShopNameDto); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | @PostMapping("/getBirthdayCard") |
| | | public R<BirthdayCard> getBirthdayCard() |
| | | { |
| | | public R<BirthdayCard> getBirthdayCard() { |
| | | BirthdayCard birthdayCard = birthdayCardService.getBirthdayCard(); |
| | | return R.ok(birthdayCard); |
| | | } |
| | | |
| | | |
| | | @PostMapping("/listUserIdByAgeType") |
| | | public R<List<Long>> listUserIdByAgeType(@RequestBody Integer ageType){ |
| | | public R<List<Long>> listUserIdByAgeType(@RequestBody Integer ageType) { |
| | | List<Long> userIdList = memberService.listUserIdByAgeType(ageType); |
| | | return R.ok(userIdList); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 手动添加用户积分 |
| | | * |
| | | * @param integral |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | @PostMapping("/addIntegralRecord") |
| | | public R addIntegralRecord(@RequestParam("integral") Integer integral, @RequestParam("userId") Long userId, @RequestParam("orderId") String orderId) { |
| | | return memberService.addIntegralRecord(integral, userId, orderId); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 添加奖品记录 |
| | | * |
| | | * @param memberGiftRecord |
| | | * @return |
| | | */ |
| | | @PostMapping("/saveMemberGiftRecord") |
| | | public R saveMemberGiftRecord(@RequestBody MemberGiftRecord memberGiftRecord) { |
| | | memberGiftRecordService.save(memberGiftRecord); |
| | | return R.ok(); |
| | | } |
| | | } |
| | |
| | | package com.ruoyi.member.controller.miniapp; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.goods.api.domain.LotteryEvent; |
| | | import com.ruoyi.goods.api.service.LotteryEventClient; |
| | | import com.ruoyi.member.domain.dto.AppMemberCouponPageDto; |
| | | import com.ruoyi.member.domain.pojo.coupon.Coupon; |
| | | import com.ruoyi.member.domain.vo.AppGetAbleCouponPageVo; |
| | | import com.ruoyi.member.domain.vo.AppMemberCouponPageVo; |
| | | import com.ruoyi.member.domain.vo.CouponInfoVo; |
| | | import com.ruoyi.member.service.coupon.CouponService; |
| | | import com.ruoyi.member.service.member.MemberCouponService; |
| | | import com.ruoyi.member.service.member.MemberService; |
| | | import com.ruoyi.system.api.domain.dto.AppBaseGetDto; |
| | | import com.ruoyi.system.api.domain.dto.AppPageDto; |
| | | import com.ruoyi.system.api.domain.poji.goods.Goods; |
| | | import com.ruoyi.system.api.domain.poji.member.Member; |
| | | import com.ruoyi.system.api.domain.poji.member.MemberCoupon; |
| | | import com.ruoyi.system.api.service.RemoteGoodsService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiImplicitParam; |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RequestMethod; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | @RestController |
| | | @RequestMapping("/app/coupon") |
| | | public class AppCouponController { |
| | | |
| | | |
| | | |
| | | |
| | | @Resource |
| | | private CouponService couponService; |
| | | |
| | | |
| | | @Resource |
| | | private MemberService memberService; |
| | | |
| | | |
| | | @Resource |
| | | private MemberCouponService memberCouponService; |
| | | |
| | | |
| | | @Resource |
| | | private RemoteGoodsService remoteGoodsService; |
| | | |
| | | @Resource |
| | | private LotteryEventClient lotteryEventClient; |
| | | |
| | | |
| | | @RequestMapping(value = "/pageAppUserGetAbleCoupon", method = RequestMethod.POST) |
| | | @ApiOperation(value = "用户分页获取可领取优惠券列表") |
| | | public R<Page<AppGetAbleCouponPageVo>> pagePlatformMerCoupon(@RequestBody AppPageDto appPageDto) { |
| | |
| | | Page<AppGetAbleCouponPageVo> page = new Page<>(); |
| | | page.setSize(appPageDto.getPageSize()); |
| | | page.setCurrent(appPageDto.getPageNum()); |
| | | List<AppGetAbleCouponPageVo> unGetCouponPageVoList = couponService.pageAppUserGetAbleCoupon(page,appPageDto,member); |
| | | List<AppGetAbleCouponPageVo> unGetCouponPageVoList = couponService.pageAppUserGetAbleCoupon(page, appPageDto, member); |
| | | return R.ok(page.setRecords(unGetCouponPageVoList)); |
| | | } |
| | | |
| | |
| | | Page<AppMemberCouponPageVo> page = new Page<>(); |
| | | page.setSize(appMemberCouponPageDto.getPageSize()); |
| | | page.setCurrent(appMemberCouponPageDto.getPageNum()); |
| | | List<AppMemberCouponPageVo> memberCouponPageVoList = memberCouponService.pageAppUserGetCoupon(page,appMemberCouponPageDto, member); |
| | | List<AppMemberCouponPageVo> memberCouponPageVoList = memberCouponService.pageAppUserGetCoupon(page, appMemberCouponPageDto, member); |
| | | return R.ok(page.setRecords(memberCouponPageVoList)); |
| | | } |
| | | |
| | | @ResponseBody |
| | | @PostMapping("/getCouponInfo/{couponId}") |
| | | @ApiOperation(value = "获取优惠券详情【2.0】", tags = "领券中心") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "id", value = "优惠券id", required = true, dataType = "String", paramType = "path") |
| | | }) |
| | | public R<CouponInfoVo> getCouponInfo(@PathVariable("couponId") String couponId) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | Coupon coupon = couponService.getById(couponId); |
| | | CouponInfoVo vo = new CouponInfoVo(); |
| | | vo.setId(coupon.getCouponId()); |
| | | vo.setName(coupon.getCouponName()); |
| | | vo.setType(coupon.getCouponType()); |
| | | vo.setMoneyThreshold(coupon.getMoneyThreshold()); |
| | | vo.setDiscountPercent(coupon.getDiscountPercent()); |
| | | vo.setDiscountMoney(coupon.getDiscountMoney()); |
| | | vo.setValidType(coupon.getValidTimeType()); |
| | | vo.setValidDays(coupon.getValidDay()); |
| | | vo.setValidStartTime(sdf.format(coupon.getValidStartTime())); |
| | | vo.setValidEndTime(sdf.format(coupon.getValidEndTime())); |
| | | vo.setPropagandaPoster(coupon.getPropagandaPoster()); |
| | | vo.setUseGoods(""); |
| | | //构建特定商品数据 |
| | | if (StringUtils.isNotEmpty(coupon.getRelGoodsIds())) { |
| | | String relGoodsIds = coupon.getRelGoodsIds(); |
| | | List<Goods> data = remoteGoodsService.listGoodsByGoodsId(relGoodsIds).getData(); |
| | | StringBuilder sb = new StringBuilder(); |
| | | for (Goods goods : data) { |
| | | sb.append(goods.getGoodsName()).append(","); |
| | | } |
| | | vo.setUseGoods(sb.substring(0, sb.length() - 1)); |
| | | } |
| | | vo.setLaveNum(coupon.getSendLimitFlag()); |
| | | vo.setReceiveNum(coupon.getSendLimitNumber()); |
| | | int count = memberCouponService.count(new QueryWrapper<MemberCoupon>().eq("coupon_id", couponId).eq("del_flag", 0)); |
| | | vo.setLaveNum(coupon.getSendLimitNumber() - count); |
| | | MemberCoupon one = memberCouponService.getOne(new QueryWrapper<MemberCoupon>().eq("coupon_id", couponId).eq("user_id", SecurityUtils.getUserId())); |
| | | if (one != null) { |
| | | vo.setStatus(one.getCouponStatus()); |
| | | } |
| | | return R.ok(vo); |
| | | } |
| | | |
| | | |
| | | @ResponseBody |
| | | @PostMapping("/shareCoupon/{couponId}") |
| | | @ApiOperation(value = "分享优惠券【2.0】", tags = "领券中心") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "id", value = "优惠券id", required = true, dataType = "String", paramType = "path") |
| | | }) |
| | | public R<Boolean> shareCoupon(@PathVariable("couponId") String couponId) { |
| | | //检测是否可以抽奖 |
| | | List<LotteryEvent> data = lotteryEventClient.getLotteryEventList(3).getData(); |
| | | if (data.size() > 0) { |
| | | return R.ok(true); |
| | | } |
| | | return R.ok(false); |
| | | } |
| | | } |
| | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.goods.api.domain.LotteryEvent; |
| | | import com.ruoyi.goods.api.service.LotteryEventClient; |
| | | import com.ruoyi.member.domain.vo.AppIntegralRecordPageVo; |
| | | import com.ruoyi.member.domain.vo.AppIntegralTaskListVo; |
| | | import com.ruoyi.member.service.member.IntegralRecordService; |
| | |
| | | @RestController |
| | | @RequestMapping("/app/integral") |
| | | public class AppIntegralController { |
| | | |
| | | |
| | | @Resource |
| | | private MemberService memberService; |
| | | |
| | | |
| | | @Resource |
| | | private IntegralRecordService integralRecordService; |
| | | |
| | | |
| | | |
| | | @Resource |
| | | private LotteryEventClient lotteryEventClient; |
| | | |
| | | |
| | | @RequestMapping(value = "/pageAppMemberIntegralRecord", method = RequestMethod.POST) |
| | | @ApiOperation(value = "分页获取用户积分明细列表") |
| | | public R<Page<AppIntegralRecordPageVo>> pageAppMemberIntegralRecord(@RequestBody AppPageDto appPageDto) { |
| | |
| | | Page<AppIntegralRecordPageVo> page = new Page<>(); |
| | | page.setSize(appPageDto.getPageSize()); |
| | | page.setCurrent(appPageDto.getPageNum()); |
| | | List<AppIntegralRecordPageVo> integralRecordPageVoList = integralRecordService.pageAppMemberIntegralRecord(page,userId); |
| | | List<AppIntegralRecordPageVo> integralRecordPageVoList = integralRecordService.pageAppMemberIntegralRecord(page, userId); |
| | | return R.ok(page.setRecords(integralRecordPageVoList)); |
| | | } |
| | | |
| | |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/signShare", method = RequestMethod.POST) |
| | | @ApiOperation(value = "今日分享") |
| | | public R signShare() { |
| | | @ApiOperation(value = "今日分享【2.0】") |
| | | public R<Boolean> signShare() { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | IntegralChangeDto integralChangeDto = new IntegralChangeDto(); |
| | | integralChangeDto.setIntegralType(1); |
| | | integralChangeDto.setUserId(userId); |
| | | Boolean complete = memberService.changeIntegral(integralChangeDto); |
| | | if(complete){ |
| | | if (complete) { |
| | | throw new ServiceException(AppErrorConstant.DOUBLE_INTEGRAL_TASK); |
| | | } |
| | | return R.ok(); |
| | | //判断是否可以抽奖 |
| | | List<LotteryEvent> data = lotteryEventClient.getLotteryEventList(3).getData(); |
| | | return R.ok(data.size() > 0); |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | @RequestMapping(value = "/pageAppMemberPrize", method = RequestMethod.POST) |
| | | @ApiOperation(value = "分页获取用户奖品列表") |
| | | @ApiOperation(value = "分页获取用户奖品列表【2.0】") |
| | | public R<Page<AppMemberPrizePageVo>> pageAppMemberPrize(@RequestBody AppPageDto appPageDto) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | appPageDto.setUserId(userId); |
| | |
| | | @ApiModelProperty(value="优惠券名称") |
| | | private String couponName; |
| | | |
| | | @ApiModelProperty(value = "发送类型1.手动领取2.指定发放") |
| | | @ApiModelProperty(value = "发送类型1.手动领取2.指定发放3.抽奖领取") |
| | | private Integer sendType; |
| | | |
| | | @ApiModelProperty(value = "发送对象2.全部用户3.会员用户4非会员用户5自定义") |
| | |
| | | @TableField(value = "user_id") |
| | | private Long userId; |
| | | /** |
| | | * 变动类型1分享获取2平台建议获取3门店建议获取4每日签到5消费得积分 |
| | | * 变动类型1分享获取2平台建议获取3门店建议获取4每日签到5消费得积分6抽奖获得 |
| | | */ |
| | | @TableField("change_type") |
| | | private Integer changeType; |
New file |
| | |
| | | package com.ruoyi.member.domain.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/27 12:01 |
| | | */ |
| | | @ApiModel |
| | | @Data |
| | | public class CouponInfoVo { |
| | | @ApiModelProperty(value = "优惠券id") |
| | | private String id; |
| | | @ApiModelProperty(value = "优惠券名称") |
| | | private String name; |
| | | @ApiModelProperty(value = "优惠券类型1.满减2.折扣3.代金4.商品") |
| | | private Integer type; |
| | | @ApiModelProperty(value = "门槛金额") |
| | | private BigDecimal moneyThreshold; |
| | | @ApiModelProperty(value = "折扣") |
| | | private BigDecimal discountPercent; |
| | | @ApiModelProperty(value = "优惠金额") |
| | | private BigDecimal discountMoney; |
| | | @ApiModelProperty(value = "有效期类型1.时间段2.领取之日起") |
| | | private Integer validType; |
| | | @ApiModelProperty(value = "有效期") |
| | | private Integer validDays; |
| | | @ApiModelProperty(value = "有效期开始时间") |
| | | private String validStartTime; |
| | | @ApiModelProperty(value = "有效期结束时间") |
| | | private String validEndTime; |
| | | @ApiModelProperty(value = "使用范围商品") |
| | | private String useGoods; |
| | | @ApiModelProperty(value = "发放限制0否1是") |
| | | private Integer limitFlag; |
| | | @ApiModelProperty(value = "可领数量") |
| | | private Integer receiveNum; |
| | | @ApiModelProperty(value = "剩余数量") |
| | | private Integer laveNum; |
| | | @ApiModelProperty(value = "宣传海报") |
| | | private String propagandaPoster; |
| | | @ApiModelProperty(value = "优惠券状态-1删除0已过期1已领取2已使用") |
| | | private Integer status; |
| | | } |
| | |
| | | @ApiModelProperty(value="优惠券名称") |
| | | private String couponName; |
| | | |
| | | @ApiModelProperty(value = "发送类型1.手动领取2.指定发放") |
| | | @ApiModelProperty(value = "发送类型1.手动领取2.指定发放3.抽奖领取") |
| | | private Integer sendType; |
| | | |
| | | @ApiModelProperty(value = "发送对象2.全部用户3.会员用户4非会员用户5自定义") |
| | |
| | | @ApiModelProperty(value="优惠券名称") |
| | | private String couponName; |
| | | |
| | | @ApiModelProperty(value="优惠券类型1.满减2.折扣3.代金4.商品") |
| | | @ApiModelProperty(value = "优惠券类型1.满减2.折扣3.代金4.商品") |
| | | private Integer couponType; |
| | | |
| | | @ApiModelProperty(value = "使用限制") |
| | |
| | | |
| | | @ApiModelProperty(value = "用户标签") |
| | | private String userTags; |
| | | |
| | | |
| | | @ApiModelProperty(value = "商品类型") |
| | | private String goodsType; |
| | | |
| | | @ApiModelProperty(value = "最近消费时间",hidden = true) |
| | | |
| | | @ApiModelProperty(value = "最近消费时间", hidden = true) |
| | | private Date lastPayTime; |
| | | |
| | | |
| | | @ApiModelProperty(value = "活跃度") |
| | | private String memberActiveness; |
| | | |
| | | @ApiModelProperty(value = "调理问题") |
| | | private String memberNurse; |
| | | } |
| | |
| | | memberGiftRecord.setDelFlag(0); |
| | | memberGiftRecord.setVerifyStatus(1); |
| | | memberGiftRecord.setGiftFrom(1); |
| | | memberGiftRecord.setPrizeFrom(1); |
| | | memberGiftRecord.setGiftYear(currentYear); |
| | | memberGiftRecord.setCreateTime(new Date()); |
| | | memberGiftRecord.setUserId(userId); |
| | |
| | | memberGiftRecord.setDelFlag(0); |
| | | memberGiftRecord.setVerifyStatus(1); |
| | | memberGiftRecord.setGiftFrom(2); |
| | | memberGiftRecord.setPrizeFrom(1); |
| | | memberGiftRecord.setShopId(shopId); |
| | | memberGiftRecord.setGiftYear(currentYear); |
| | | memberGiftRecord.setCreateTime(new Date()); |
| | |
| | | appBirthdayCardVo.setBirthdayGiftVoList(birthdayGiftVoList); |
| | | return appBirthdayCardVo; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description |
| | | * @author jqs |
| | | * @date 2023/7/11 18:02 |
| | | * @param page |
| | | * @param userId |
| | | * @return List<AppMemberPrizePageVo> |
| | | * @return List<AppMemberPrizePageVo> |
| | | * @description |
| | | * @author jqs |
| | | * @date 2023/7/11 18:02 |
| | | */ |
| | | @Override |
| | | public List<AppMemberPrizePageVo> pageAppMemberPrize(Page page, Long userId){ |
| | | public List<AppMemberPrizePageVo> pageAppMemberPrize(Page page, Long userId) { |
| | | List<AppMemberPrizePageVo> memberPrizePageVoList = birthdayCardMapper.pageAppMemberPrize(page, userId); |
| | | if(memberPrizePageVoList!=null&&!memberPrizePageVoList.isEmpty()){ |
| | | if (memberPrizePageVoList != null && !memberPrizePageVoList.isEmpty()) { |
| | | HashSet<Long> shopIdSet = new HashSet<>(); |
| | | for(AppMemberPrizePageVo appMemberPrizePageVo : memberPrizePageVoList){ |
| | | appMemberPrizePageVo.setVerifyCode("3-"+appMemberPrizePageVo.getPrizeId()); |
| | | if(appMemberPrizePageVo.getShopId()!=null){ |
| | | for (AppMemberPrizePageVo appMemberPrizePageVo : memberPrizePageVoList) { |
| | | appMemberPrizePageVo.setVerifyCode("3-" + appMemberPrizePageVo.getPrizeId()); |
| | | if (appMemberPrizePageVo.getShopId() != null) { |
| | | shopIdSet.add(appMemberPrizePageVo.getShopId()); |
| | | } |
| | | } |
| | |
| | | List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData(); |
| | | Map<Long, MgtSimpleShopVo> shopMap = simpleShopVoList.stream() |
| | | .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); |
| | | for(AppMemberPrizePageVo appMemberPrizePageVo : memberPrizePageVoList){ |
| | | if(appMemberPrizePageVo.getShopId()!=null){ |
| | | for (AppMemberPrizePageVo appMemberPrizePageVo : memberPrizePageVoList) { |
| | | if (appMemberPrizePageVo.getShopId() != null) { |
| | | appMemberPrizePageVo.setVerifyShopName(shopMap.get(appMemberPrizePageVo.getShopId()).getShopName()); |
| | | } |
| | | } |
| | |
| | | CouponTotal couponTotal; |
| | | if(StringUtils.isNotBlank(merCouponEditDto.getCouponId())){ |
| | | coupon = this.getById(merCouponEditDto.getCouponId()); |
| | | if(coupon.getAuditStatus()!=3){ |
| | | throw new ServiceException(AppErrorConstant.COUPON_AUDIT_EDIT); |
| | | } |
| | | // if(coupon.getAuditStatus()!=3){ |
| | | // throw new ServiceException(AppErrorConstant.COUPON_AUDIT_EDIT); |
| | | // } |
| | | couponRelUserService.deleteCouponRelByCouponId(coupon.getCouponId()); |
| | | couponRelGoodsService.deleteCouponRelByCouponId(coupon.getCouponId()); |
| | | coupon.setCouponStatus(1); |
| | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.core.utils.DateUtils; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.member.domain.dto.AppMemberCouponPageDto; |
| | | import com.ruoyi.member.domain.dto.MemberSelectCouponDto; |
| | | import com.ruoyi.member.domain.dto.MerGoodsCouponListDto; |
| | | import com.ruoyi.member.domain.pojo.coupon.Coupon; |
| | | import com.ruoyi.member.domain.vo.AppMemberCouponPageVo; |
| | | import com.ruoyi.member.mapper.coupon.CouponMapper; |
| | | import com.ruoyi.member.mapper.member.MemberCouponMapper; |
| | | import com.ruoyi.member.service.coupon.CouponService; |
| | | import com.ruoyi.member.service.coupon.MemberCouponRecordService; |
| | | import com.ruoyi.member.service.member.MemberCouponService; |
| | | import com.ruoyi.system.api.constant.AppErrorConstant; |
| | | import com.ruoyi.system.api.domain.dto.MerBaseDto; |
| | |
| | | @Service |
| | | @DS("sharding") |
| | | public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, MemberCoupon> implements MemberCouponService { |
| | | |
| | | |
| | | @Resource |
| | | private MemberCouponMapper memberCouponMapper; |
| | | |
| | | |
| | | @Resource |
| | | private RemoteGoodsService remoteGoodsService; |
| | | |
| | | |
| | | @Resource |
| | | private RemoteShopService remoteShopService; |
| | | |
| | | |
| | | |
| | | @Resource |
| | | private CouponService couponService; |
| | | |
| | | @Resource |
| | | private MemberCouponRecordService memberCouponRecordService; |
| | | |
| | | @Resource |
| | | private CouponMapper couponMapper; |
| | | |
| | | |
| | | /** |
| | | * @description: TODO |
| | | * @author jqs34 |
| | |
| | | * @version 1.0 |
| | | */ |
| | | @Override |
| | | public List<AppMemberCouponVo> listVoMemberCouponByUserId(MerBaseDto merBaseDto){ |
| | | public List<AppMemberCouponVo> listVoMemberCouponByUserId(MerBaseDto merBaseDto) { |
| | | List<AppMemberCouponVo> appMemberCouponVoList = memberCouponMapper.listVoMemberCouponByUserId(merBaseDto); |
| | | return appMemberCouponVoList; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 核销优惠券 |
| | | * @author jqs |
| | |
| | | merVerifyCouponGetVo.setMemberCoupon(memberCoupon); |
| | | return merVerifyCouponGetVo; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 核销优惠券 |
| | | * @author jqs |
| | |
| | | merVerifyCouponGetVo.setCouponFrom("平台"); |
| | | } |
| | | memberCoupon.setCouponStatus(2); |
| | | |
| | | |
| | | memberCoupon.setUseTime(new Date()); |
| | | this.saveOrUpdate(memberCoupon); |
| | | merVerifyCouponGetVo.setMemberCoupon(memberCoupon); |
| | | return merVerifyCouponGetVo; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description |
| | | * @author jqs |
| | |
| | | Integer total = this.count(queryWrapper); |
| | | return total; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 用户分页获取已领取优惠券列表 |
| | | * @author jqs |
| | |
| | | } |
| | | return memberCouponPageVoList; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 定时检查优惠券过期 |
| | | * @author jqs |
| | |
| | | public void timingCheckMemberCoupon(){ |
| | | memberCouponMapper.timingCheckMemberCoupon(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 使用优惠券 |
| | | * @author jqs |
| | |
| | | public void useMemberCoupon(String memberCouponIds){ |
| | | memberCouponMapper.useMemberCoupon(memberCouponIds); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 使用优惠券 |
| | | * @author jqs |
| | |
| | | public void backMemberCoupon(String memberCouponIds){ |
| | | memberCouponMapper.backMemberCoupon(memberCouponIds); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description |
| | | * @author jqs |
| | |
| | | } |
| | | return merMemberCouponVoList; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * @description 确认核销优惠券 |
| | | * @author jqs |
| | | * @date 2023/8/15 11:21 |
| | | * @param memberCouponId |
| | | * @param shopId |
| | | * @return void |
| | | * @return void |
| | | * @description 确认核销优惠券 |
| | | * @author jqs |
| | | * @date 2023/8/15 11:21 |
| | | */ |
| | | @Override |
| | | public void sureMemberCoupon(Long memberCouponId, Long shopId){ |
| | | public void sureMemberCoupon(Long memberCouponId, Long shopId) { |
| | | memberCouponMapper.sureMemberCoupon(memberCouponId, shopId); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) |
| | | public void insert(MemberCoupon memberCoupon) { |
| | | this.baseMapper.insert(memberCoupon); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 手动添加用户优惠券 |
| | | * |
| | | * @param couponId |
| | | * @param number |
| | | * @return |
| | | */ |
| | | @Override |
| | | public R addMemberCoupon(String couponId, Integer number, Long userId) { |
| | | Coupon coupon = couponService.getById(couponId); |
| | | if (null == coupon) { |
| | | return R.fail("优惠券不存在"); |
| | | } |
| | | List<MemberCoupon> memberCouponList = new ArrayList<>(); |
| | | MemberCoupon memberCoupon; |
| | | Integer sendTotal = 0; |
| | | Integer sendPerson = 0; |
| | | Integer sendUserTotal; |
| | | for (int i = 0; i < number; i++) { |
| | | memberCoupon = new MemberCoupon(); |
| | | memberCoupon.setDelFlag(0); |
| | | memberCoupon.setCouponId(coupon.getCouponId()); |
| | | memberCoupon.setUserId(userId); |
| | | memberCoupon.setShopId(coupon.getShopId()); |
| | | memberCoupon.setCouponType(coupon.getCouponType()); |
| | | if (coupon.getCouponType() == 1) { |
| | | memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold()); |
| | | memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); |
| | | } else if (coupon.getCouponType() == 2) { |
| | | memberCoupon.setDiscountPercent(coupon.getDiscountPercent()); |
| | | } else if (coupon.getCouponType() == 3) { |
| | | memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); |
| | | } else { |
| | | memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); |
| | | } |
| | | memberCoupon.setCouponStatus(coupon.getCouponStatus()); |
| | | memberCoupon.setCouponName(coupon.getCouponName()); |
| | | memberCoupon.setSendType(coupon.getSendType()); |
| | | memberCoupon.setSendTarget(coupon.getSendTarget()); |
| | | memberCoupon.setSendTimeType(coupon.getSendTimeType()); |
| | | memberCoupon.setSendTime(coupon.getSendTime()); |
| | | memberCoupon.setUseScope(coupon.getUseScope()); |
| | | if (memberCoupon.getUseScope() == 2) { |
| | | memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); |
| | | } |
| | | memberCoupon.setValidTimeType(coupon.getValidTimeType()); |
| | | memberCoupon.setValidStartTime(coupon.getValidStartTime()); |
| | | memberCoupon.setValidEndTime(coupon.getValidEndTime()); |
| | | memberCoupon.setValidDay(coupon.getValidDay()); |
| | | memberCoupon.setCouponFrom(coupon.getCouponFrom()); |
| | | memberCoupon.setReceiveTime(new Date()); |
| | | //有效期处理1.时间段2.领取之日起 |
| | | if (coupon.getValidTimeType() == 1) { |
| | | memberCoupon.setDeadlineTime(coupon.getValidEndTime()); |
| | | } else if (coupon.getValidTimeType() == 2) { |
| | | memberCoupon.setDeadlineTime(DateUtils.addDays(new Date(), coupon.getValidDay())); |
| | | } |
| | | memberCouponList.add(memberCoupon); |
| | | sendTotal = sendTotal + 1; |
| | | if (coupon.getSendType() == 1) { |
| | | sendUserTotal = this.totalMemberCouponByUserAndCoupon(userId, coupon.getCouponId()); |
| | | if (sendUserTotal != null && sendUserTotal > 0) { |
| | | } else { |
| | | sendPerson = sendPerson + 1; |
| | | } |
| | | } |
| | | memberCouponRecordService.updateMemberCouponRecord(coupon, userId, 1); |
| | | } |
| | | this.saveBatch(memberCouponList); |
| | | //处理优惠券统计 |
| | | if (sendTotal > 0) { |
| | | couponMapper.updateCouponTotal(coupon.getCouponId(), sendTotal, sendPerson); |
| | | } |
| | | return R.ok(); |
| | | } |
| | | } |
| | |
| | | package com.ruoyi.member.service.impl.member; |
| | | import com.google.common.collect.Lists; |
| | | import cn.binarywang.wx.miniapp.api.WxMaService; |
| | | import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; |
| | | import com.alibaba.fastjson.JSONObject; |
| | |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.google.common.collect.Lists; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.core.utils.DateUtils; |
| | |
| | | import com.ruoyi.member.domain.pojo.member.IntegralRecord; |
| | | import com.ruoyi.member.domain.pojo.member.MemberArchive; |
| | | import com.ruoyi.member.domain.pojo.member.MemberTotal; |
| | | import com.ruoyi.member.domain.vo.MerMemberTotalVo; |
| | | import com.ruoyi.member.domain.vo.*; |
| | | import com.ruoyi.member.mapper.member.MemberMapper; |
| | | import com.ruoyi.member.service.member.IntegralRecordService; |
| | |
| | | List<Member> mobileList = memberMapper.listTodayBirthday(); |
| | | if(mobileList!=null&&!mobileList.isEmpty()){ |
| | | log.info("生日祝福发送短信---"+mobileList.toString()); |
| | | for(Member member : mobileList){ |
| | | for (Member member : mobileList) { |
| | | try { |
| | | String msg = "{\"name\":\"" + (StringUtils.isEmpty(member.getRealName()) ? member.getNickName() : member.getRealName()) + "\"}"; |
| | | MsgUtils.sendMsg(member.getMobile(),null, msg); |
| | | MsgUtils.sendMsg(member.getMobile(), null, msg); |
| | | } catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 手动添加用户积分 |
| | | * |
| | | * @param integral |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public R addIntegralRecord(Integer integral, Long userId, String orderId) { |
| | | Member member = this.getByUserId(userId); |
| | | MemberTotal memberTotal = memberTotalService.getById(member.getMemberId()); |
| | | IntegralRecord integralRecord = new IntegralRecord(); |
| | | integralRecord.setDelFlag(0); |
| | | integralRecord.setUserId(userId); |
| | | integralRecord.setChangeType(6); |
| | | integralRecord.setChangeIntegral(integral); |
| | | integralRecord.setSurpIntegral(memberTotal.getUseableIntegral() + integral); |
| | | integralRecord.setCreateTime(new Date()); |
| | | integralRecord.setOrderId(orderId); |
| | | integralRecord.setChangeReason("抽奖活动获得"); |
| | | integralRecordService.save(integralRecord); |
| | | memberTotal.setTotalIntegral(memberTotal.getTotalIntegral() + integral); |
| | | memberTotal.setUseableIntegral(memberTotal.getUseableIntegral() + integral); |
| | | memberTotal.setPlSuggestFlag(1); |
| | | memberTotalService.saveOrUpdate(memberTotal); |
| | | return R.ok(); |
| | | } |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.member.domain.dto.AppMemberCouponPageDto; |
| | | import com.ruoyi.member.domain.dto.MerGoodsCouponListDto; |
| | | import com.ruoyi.member.domain.vo.AppMemberCouponPageVo; |
| | |
| | | * @return List<MerMemberCouponVo> |
| | | */ |
| | | List<MerMemberCouponVo> listMerShopGoodsMemberCoupon(MerGoodsCouponListDto merGoodsCouponListDto); |
| | | |
| | | |
| | | /** |
| | | * @description 确认核销优惠券 |
| | | * @author jqs |
| | | * @date 2023/8/15 11:21 |
| | | * @param memberCouponId |
| | | * @param shopId |
| | | * @return void |
| | | * @return void |
| | | * @description 确认核销优惠券 |
| | | * @author jqs |
| | | * @date 2023/8/15 11:21 |
| | | */ |
| | | void sureMemberCoupon(Long memberCouponId,Long shopId); |
| | | |
| | | void sureMemberCoupon(Long memberCouponId, Long shopId); |
| | | |
| | | void insert(MemberCoupon memberCoupon); |
| | | |
| | | |
| | | /** |
| | | * 手动添加用户优惠券 |
| | | * |
| | | * @param couponId |
| | | * @param number |
| | | * @return |
| | | */ |
| | | R addMemberCoupon(String couponId, Integer number, Long userId); |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.member.domain.dto.*; |
| | | import com.ruoyi.member.domain.vo.*; |
| | | import com.ruoyi.system.api.domain.dto.*; |
| | |
| | | * @return void |
| | | */ |
| | | void updateMemberShopName(MgtMemberShopNameDto mgtMemberShopNameDto); |
| | | |
| | | |
| | | /** |
| | | * @description 发送生日祝福 |
| | | * @author jqs |
| | | * @date 2023/8/7 15:40 |
| | | * @param |
| | | * @return void |
| | | * @return void |
| | | * @description 发送生日祝福 |
| | | * @author jqs |
| | | * @date 2023/8/7 15:40 |
| | | */ |
| | | void sendBirthdayBless(); |
| | | |
| | | |
| | | /** |
| | | * 手动添加用户积分 |
| | | * |
| | | * @param integral |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | R addIntegralRecord(Integer integral, Long userId, String orderId); |
| | | } |
| | |
| | | </select> |
| | | |
| | | <select id="pageAppMemberPrize" resultType="com.ruoyi.member.domain.vo.AppMemberPrizePageVo"> |
| | | SELECT |
| | | prize_id prizeId, |
| | | CASE gift_type |
| | | WHEN 1 THEN CONCAT(coupon_name,"优惠券") |
| | | WHEN 2 THEN CONCAT(goods_name,"商品") |
| | | WHEN 4 THEN CONCAT(gift_name,"实物") |
| | | WHEN 3 THEN CONCAT("现金",money,"元") |
| | | END prizeName, |
| | | "生日卡" prizeFrom, |
| | | verify_status verifyStatus, |
| | | create_time createTime, |
| | | verify_time verifyTime, |
| | | shop_id shopId |
| | | SELECT prize_id prizeId, |
| | | CASE gift_type |
| | | WHEN 1 THEN CONCAT(coupon_name, "优惠券") |
| | | WHEN 2 THEN CONCAT(goods_name, "商品") |
| | | WHEN 4 THEN CONCAT(gift_name, "实物") |
| | | WHEN 3 THEN CONCAT("现金", money, "元") |
| | | WHEN 5 THEN "积分" |
| | | END prizeName, |
| | | CASE prize_from |
| | | WHEN 1 THEN "生日卡" |
| | | ELSE "抽奖" |
| | | END prizeFrom, |
| | | verify_status verifyStatus, |
| | | create_time createTime, |
| | | verify_time verifyTime, |
| | | shop_id shopId |
| | | FROM t_member_gift_record |
| | | WHERE del_flag = 0 AND user_id = #{userId} |
| | | WHERE del_flag = 0 |
| | | AND user_id = #{userId} |
| | | ORDER BY verify_status ASC |
| | | </select> |
| | | </mapper> |
| | |
| | | tm.birthday birthday, |
| | | tm.user_tags userTags, |
| | | tm.goods_type goodsType, |
| | | tmt.last_service_time lastPayTime |
| | | tmt.last_service_time lastPayTime, |
| | | tm.memberNurse |
| | | FROM t_member tm |
| | | INNER JOIN t_member_total tmt ON tm.member_id = tmt.member_id |
| | | WHERE tm.relation_shop_id = #{param.shopId} AND tm.binding_flag = 1 |
| | |
| | | <version>4.13.1</version> |
| | | <scope>test</scope> |
| | | </dependency> |
| | | |
| | | |
| | | <dependency> |
| | | <groupId>cn.hutool</groupId> |
| | | <artifactId>hutool-all</artifactId> |
| | | <version>5.8.22</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-api-goods</artifactId> |
| | | <version>3.6.2</version> |
| | | <scope>compile</scope> |
| | | </dependency> |
| | | <!--抖音sdk--> |
| | | <dependency> |
| | | <groupId>com.douyin.openapi</groupId> |
| | | <artifactId>sdk</artifactId> |
| | | <version>1.0.0</version> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | |
| | | </plugin> |
| | | </plugins> |
| | | </build> |
| | | |
| | | <repositories> |
| | | <!--抖音sdk--> |
| | | <repository> |
| | | <id>douyin-openapi-repo</id> |
| | | <url>https://artifacts-cn-beijing.volces.com/repository/douyin-openapi/</url> |
| | | </repository> |
| | | </repositories> |
| | | </project> |
| | |
| | | private UserServiceRecordService userServiceRecordService; |
| | | |
| | | @RequestMapping(value = "/listMerConsumerGoods", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取用户服务列表") |
| | | @ApiOperation(value = "获取用户服务列表【2.0】") |
| | | public R<MerConsumerGoodsVo> listMerConsumerGoods(@RequestBody MerConsumerGoodsDto merConsumerGoodsDto) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | merConsumerGoodsDto.setUserId(userId); |
| | |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.order.domain.dto.*; |
| | | import com.ruoyi.order.domain.pojo.order.Order; |
| | | import com.ruoyi.order.domain.vo.*; |
| | | import com.ruoyi.order.service.order.OrderService; |
| | | import com.ruoyi.system.api.constant.AppErrorConstant; |
| | |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | Long userId = SecurityUtils.getUserId(); |
| | | merVerifyCodeDto.setUserId(userId); |
| | | String verifyCode = merVerifyCodeDto.getVerifyCode(); |
| | | MerVerifyOrderVo merVerifyOrderVo = orderService.verifyOrder(verifyCode,merVerifyCodeDto.getShopId()); |
| | | MerVerifyOrderVo merVerifyOrderVo = null; |
| | | if (!verifyCode.contains("https")) { |
| | | merVerifyOrderVo = orderService.verifyOrder(verifyCode, merVerifyCodeDto.getShopId()); |
| | | } else { |
| | | //三方订单 |
| | | //抖音 |
| | | if (verifyCode.contains("douyin")) { |
| | | merVerifyOrderVo = orderService.verifyOrderDouYin(verifyCode, merVerifyCodeDto.getShopId()); |
| | | } |
| | | } |
| | | return R.ok(merVerifyOrderVo); |
| | | } |
| | | |
| | |
| | | public R<MerVerifyOrderVo> sureVerifyOrder(@RequestBody MerVerifyOrderDto merVerifyOrderDto) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | merVerifyOrderDto.setUserId(userId); |
| | | MerVerifyOrderVo merVerifyOrderVo = orderService.sureVerifyOrder(merVerifyOrderDto); |
| | | MerVerifyOrderVo merVerifyOrderVo = null; |
| | | if (!merVerifyOrderDto.getOrderId().contains("https")) { |
| | | merVerifyOrderVo = orderService.sureVerifyOrder(merVerifyOrderDto); |
| | | } else { |
| | | //三方订单 |
| | | //抖音 |
| | | if (merVerifyOrderDto.getOrderId().contains("douyin")) { |
| | | merVerifyOrderVo = orderService.sureVerifyOrderDouYin(merVerifyOrderDto); |
| | | } |
| | | } |
| | | return R.ok(merVerifyOrderVo); |
| | | } |
| | | |
| | |
| | | orderService.createNewOrder(merNewOrderDto); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/pageMerOrder", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取商户端订单列表") |
| | | @ApiOperation(value = "获取商户端订单列表【2.0】") |
| | | public R<Page<MerOrderPageVo>> pageMerOrder(@RequestBody MerOrderPageDto merOrderPageDto) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | merOrderPageDto.setUserId(userId); |
| | | Page<MerOrderPageVo> page = new Page<>(); |
| | | page.setSize(merOrderPageDto.getPageSize()); |
| | | page.setCurrent(merOrderPageDto.getPageNum()); |
| | | List<MerOrderPageVo> merOrderPageVoList = orderService.pageMerOrder(page,merOrderPageDto); |
| | | List<MerOrderPageVo> merOrderPageVoList = orderService.pageMerOrder(page, merOrderPageDto); |
| | | return R.ok(page.setRecords(merOrderPageVoList)); |
| | | } |
| | | |
| | | |
| | | |
| | | @RequestMapping(value = "/cancelMerOrder", method = RequestMethod.POST) |
| | | @ApiOperation(value = "商户端取消线下订单【2.0】") |
| | | public R cancelMerOrder(@RequestBody CancelMerOrderDto dto) { |
| | | Order order = orderService.getById(dto.getOrderId()); |
| | | if (null == order) { |
| | | return R.fail("订单不存在"); |
| | | } |
| | | if (order.getOrderStatus() == 0) { |
| | | return R.fail("订单已取消"); |
| | | } |
| | | if (!order.getShopId().equals(dto.getShopId())) { |
| | | return R.fail("取消失败"); |
| | | } |
| | | if (3 != order.getOrderFrom()) { |
| | | return R.fail("取消失败"); |
| | | } |
| | | order.setOrderStatus(0); |
| | | order.setCancelTime(new Date()); |
| | | orderService.updateById(order); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/totalMerOrder", method = RequestMethod.POST) |
| | | @ApiOperation(value = "商户端订单管理统计") |
| | | public R<MerTotalOrderVo> totalMerOrder(@RequestBody MerOrderPageDto merOrderPageDto) { |
| | |
| | | MerTotalOrderVo totalOrderVo = orderService.totalMerOrder(merOrderPageDto); |
| | | return R.ok(totalOrderVo); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/pageMerMemberOrder", method = RequestMethod.POST) |
| | | @ApiOperation(value = "分页商户端用户收银记录") |
| | | @ApiOperation(value = "分页商户端用户收银记录【2.0】") |
| | | public R<Page<MerMemberOrderVo>> pageMerMemberOrder(@RequestBody MerMemberNoClearOrderDto merMemberNoClearOrderDto) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | merMemberNoClearOrderDto.setUserId(userId); |
| | |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.core.web.controller.BaseController; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.order.domain.dto.*; |
| | |
| | | } |
| | | |
| | | @RequestMapping(value = "/payOrder", method = RequestMethod.POST) |
| | | @ApiOperation(value = "支付订单") |
| | | @ApiOperation(value = "支付订单【2.0】") |
| | | public R<AppPlaceOrderVo> payOrder(@RequestBody AppBaseGetDto appBaseGetDto) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | AppPlaceOrderVo appPlaceOrderVo = orderService.payOrder(appBaseGetDto.getId()); |
New file |
| | |
| | | package com.ruoyi.order.domain.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/5 17:53 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class CancelMerOrderDto { |
| | | @ApiModelProperty("商户id") |
| | | private Long shopId; |
| | | @ApiModelProperty("订单id") |
| | | private String orderId; |
| | | } |
| | |
| | | @ApiModelProperty(value = "搜索关键词") |
| | | private String keyword; |
| | | |
| | | @ApiModelProperty(value = "1.全部2.待核销3.已核销") |
| | | @ApiModelProperty(value = "0.已取消1.全部2.待核销3.已核销") |
| | | private Integer type; |
| | | |
| | | @ApiModelProperty(value = "订单开始时间") |
| | |
| | | |
| | | @ApiModelProperty(value = "订单结束时间") |
| | | private String endOrderDate; |
| | | |
| | | @ApiModelProperty(value = "订单来源1.店铺商品2.平台秒杀活动3.线下创建") |
| | | |
| | | @ApiModelProperty(value = "订单来源1.商城2.秒杀活动3.线下创建4.抽奖5.美团6.抖音7.快手") |
| | | private Integer orderFrom; |
| | | } |
| | |
| | | */ |
| | | @Data |
| | | public class MerVerifyOrderDto extends MerBaseDto { |
| | | |
| | | |
| | | @ApiModelProperty(value = "订单id") |
| | | private String orderId; |
| | | |
| | | |
| | | @ApiModelProperty(value = "核销用户电话号码") |
| | | private String phone; |
| | | |
| | | @ApiModelProperty(value = "实收金额") |
| | | private BigDecimal relReceiveMoney; |
| | | |
| | | |
| | | @ApiModelProperty(value = "实付金额") |
| | | private BigDecimal relPayMoney; |
| | | |
| | | |
| | | @ApiModelProperty(value = "支付方式1微信2现金3支付宝") |
| | | private Integer payType; |
| | | } |
| | |
| | | private String outTradeNo; |
| | | |
| | | /** |
| | | * 订单来源1.商城2.秒杀活动3.线下创建 |
| | | * 订单来源1.商城2.秒杀活动3.线下创建4.抽奖 |
| | | */ |
| | | @TableField("order_from") |
| | | private Integer orderFrom; |
| | |
| | | */ |
| | | @TableField("new_member_flag") |
| | | private Integer newMemberFlag; |
| | | |
| | | |
| | | /** |
| | | * @description 未绑定标记 |
| | | * @author jqs |
| | | * @date 2023/9/8 10:45 |
| | | * @description 未绑定标记 |
| | | * @author jqs |
| | | * @date 2023/9/8 10:45 |
| | | * @param null |
| | | * @return null |
| | | * @return null |
| | | */ |
| | | @TableField("unbinding_flag") |
| | | private Integer unbindingFlag; |
| | | |
| | | |
| | | /** |
| | | * 三方平台订单id |
| | | */ |
| | | @TableField("tripartite_order_id") |
| | | private String tripartiteOrderId; |
| | | |
| | | |
| | | @Override |
| | | protected Serializable pkVal() { |
| | | return this.orderId; |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "package") |
| | | @JsonProperty("package") |
| | | private String packageStr; |
| | | |
| | | |
| | | @ApiModelProperty(value = "签名方式") |
| | | private String signType; |
| | | |
| | | |
| | | @ApiModelProperty(value = "签名") |
| | | private String paySign; |
| | | |
| | | |
| | | @ApiModelProperty(value = "预支付回话标识") |
| | | private String prepayId; |
| | | |
| | | |
| | | |
| | | @ApiModelProperty(value = "是否可抽奖(0=否,1=是)") |
| | | private Boolean lotteryDraw; |
| | | } |
| | |
| | | |
| | | @ApiModelProperty(value="商品类型1周期2服务3体验4单品") |
| | | private Integer goodsType; |
| | | |
| | | @ApiModelProperty(value="商品名称") |
| | | |
| | | @ApiModelProperty(value = "商品名称") |
| | | private String goodsName; |
| | | |
| | | @ApiModelProperty(value="商品标签") |
| | | |
| | | @ApiModelProperty(value = "商品标签") |
| | | private String goodsTags; |
| | | |
| | | |
| | | @ApiModelProperty(value = "商品简介") |
| | | private String goodsIntroduction; |
| | | |
| | | @ApiModelProperty(value="商品图片") |
| | | |
| | | @ApiModelProperty(value = "商品图片") |
| | | private String goodsPicture; |
| | | |
| | | @ApiModelProperty(value="商品调理问题") |
| | | |
| | | @ApiModelProperty(value = "商品调理问题") |
| | | private String goodsNurses; |
| | | |
| | | @ApiModelProperty(value="周期标记") |
| | | |
| | | @ApiModelProperty(value = "周期标记") |
| | | private Integer cycleNumFlag; |
| | | |
| | | @ApiModelProperty(value="服务次数") |
| | | |
| | | @ApiModelProperty(value = "服务次数") |
| | | private Integer serviceNum; |
| | | |
| | | @ApiModelProperty(value="消耗次数") |
| | | |
| | | @ApiModelProperty(value = "消耗次数") |
| | | private Integer usedNum; |
| | | |
| | | @ApiModelProperty(value="待确认次数") |
| | | |
| | | @ApiModelProperty(value = "待确认次数") |
| | | private Integer sureNum; |
| | | |
| | | @ApiModelProperty(value = "是否选中") |
| | | private Boolean optionFlag; |
| | | } |
| | |
| | | package com.ruoyi.order.domain.vo; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.ruoyi.system.api.domain.vo.MerCouponGoodsListVo; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @ClassName MerMemberOrderVo |
| | |
| | | @ApiModelProperty(value="未收金额") |
| | | |
| | | private BigDecimal unPaidMoney; |
| | | |
| | | @ApiModelProperty(value="收款时间") |
| | | |
| | | @ApiModelProperty(value = "收款时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date receiveMoneyTime; |
| | | |
| | | @ApiModelProperty(value="收款金额") |
| | | |
| | | @ApiModelProperty(value = "收款金额") |
| | | private BigDecimal thisReceiveMoney; |
| | | |
| | | @ApiModelProperty(value="收款方式") |
| | | |
| | | @ApiModelProperty(value = "收款方式") |
| | | private String thisReceiveType; |
| | | |
| | | @ApiModelProperty(value = "商品信息") |
| | | private List<MerCouponGoodsListVo> goodsList; |
| | | } |
| | |
| | | @ApiModelProperty(value = "奖品来源") |
| | | private String giftFrom; |
| | | |
| | | @ApiModelProperty(value = "礼物类型1优惠券2商品3现金4实物") |
| | | @ApiModelProperty(value = "礼物类型1优惠券2商品3现金4实物5积分") |
| | | private Integer giftType; |
| | | |
| | | @ApiModelProperty(value = "奖品名称") |
| | |
| | | @ApiModelProperty(value = "订单状态0.已取消1.待支付2.待核销3.已完成") |
| | | private Integer orderStatus; |
| | | |
| | | @ApiModelProperty(value="订单来源1.商城2.秒杀活动3.线下创建") |
| | | @ApiModelProperty(value = "订单来源1.商城2.秒杀活动3.线下创建4.抽奖5.美团6.抖音7.快手") |
| | | private Integer orderFrom; |
| | | |
| | | @ApiModelProperty(value = "商品总价") |
| | |
| | | |
| | | @ApiModelProperty(value = "用户姓名") |
| | | private String userName; |
| | | |
| | | |
| | | @ApiModelProperty(value = "用户电话") |
| | | private String userMobile; |
| | | |
| | | @ApiModelProperty(value="实收金额") |
| | | |
| | | @ApiModelProperty(value = "实收金额") |
| | | |
| | | private BigDecimal realReceiveMoney; |
| | | |
| | | @ApiModelProperty(value="已收金额") |
| | | |
| | | @ApiModelProperty(value = "已收金额") |
| | | |
| | | private BigDecimal receiveMoney; |
| | | |
| | | @ApiModelProperty(value="未收金额") |
| | | |
| | | @ApiModelProperty(value = "未收金额") |
| | | |
| | | private BigDecimal unReceiveMoney; |
| | | |
| | | @ApiModelProperty(value="支付方式1.全款2订金") |
| | | |
| | | @ApiModelProperty(value = "支付方式1.全款2订金") |
| | | private Integer payType; |
| | | |
| | | @ApiModelProperty(value="结清标记0否1是") |
| | | |
| | | @ApiModelProperty(value = "结清标记0否1是") |
| | | private Integer closeFlag; |
| | | |
| | | @ApiModelProperty(value = "剩余可核销次数") |
| | | private Integer laveTime; |
| | | } |
| | |
| | | package com.ruoyi.order.service.impl.order; |
| | | |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.core.domain.R; |
| | |
| | | public List<AppConsumerPageVo> pageUserConsumerGoods(Page page, AppConsumerPageDto appConsumerPageDto){ |
| | | return consumerGoodsMapper.pageUserConsumerGoods(page, appConsumerPageDto); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取会员服务商品 |
| | | * |
| | | * @param merConsumerGoodsDto |
| | | * @return |
| | | */ |
| | | @Override |
| | | public MerConsumerGoodsVo listMerConsumerGoods(MerConsumerGoodsDto merConsumerGoodsDto){ |
| | | public MerConsumerGoodsVo listMerConsumerGoods(MerConsumerGoodsDto merConsumerGoodsDto) { |
| | | MerConsumerGoodsVo merConsumerGoodsVo = new MerConsumerGoodsVo(); |
| | | if(merConsumerGoodsDto.getGoodsType()==1){ |
| | | if (merConsumerGoodsDto.getGoodsType() == 1) { |
| | | List<MerConsumerGoodsListVo> noSureList = consumerGoodsMapper.listMerNoSureConsumerGoods(merConsumerGoodsDto); |
| | | merConsumerGoodsVo.setNoSureList(noSureList); |
| | | } |
| | | List<MerConsumerGoodsListVo> sureList = consumerGoodsMapper.listMerConsumerGoods(merConsumerGoodsDto); |
| | | Member member = remoteMemberService.getMember(merConsumerGoodsDto.getUserId()).getData(); |
| | | String lastServiceId = member.getLastServiceId(); |
| | | if (StringUtils.isNotEmpty(lastServiceId)) { |
| | | List<String> list = JSON.parseArray(lastServiceId, String.class); |
| | | sureList.forEach(s -> { |
| | | s.setOptionFlag(list.contains(s.getConsumerGoodsId())); |
| | | }); |
| | | } |
| | | merConsumerGoodsVo.setSureList(sureList); |
| | | return merConsumerGoodsVo; |
| | | } |
| | |
| | | } |
| | | } |
| | | //判断商品确认次数 |
| | | if(sureNum>oldConsumerGoods.getSureNum()){ |
| | | if (sureNum > oldConsumerGoods.getSureNum()) { |
| | | throw new ServiceException(AppErrorConstant.GOODS_SURE_FAILED); |
| | | }else{ |
| | | } else { |
| | | int surpNum = oldConsumerGoods.getSureNum(); |
| | | surpNum = surpNum - sureNum; |
| | | oldConsumerGoods.setSureNum(surpNum); |
| | | if(surpNum==0){ |
| | | if (surpNum == 0) { |
| | | oldConsumerGoods.setDelFlag(1); |
| | | } |
| | | this.saveOrUpdate(oldConsumerGoods); |
| | |
| | | serviceRecord.setConsumerGoodsNames(goodsNames); |
| | | userServiceRecordService.saveOrUpdate(serviceRecord); |
| | | //服务记录详情 |
| | | for(ServiceRecordDetail serviceRecordDetail1 : serviceRecordDetailList){ |
| | | for (ServiceRecordDetail serviceRecordDetail1 : serviceRecordDetailList) { |
| | | serviceRecordDetail1.setRecordId(serviceRecord.getId()); |
| | | } |
| | | serviceRecordDetailService.saveBatch(serviceRecordDetailList); |
| | | |
| | | //保存本次确认的服务商品id,用于下次进入页面后默认勾选上 |
| | | List<String> collect = goodsList.stream().map(MerSureConsumerGoodsListDto::getConsumerGoodsId).collect(Collectors.toList()); |
| | | Member member = remoteMemberService.getMember(merSureConsumerGoodsDto.getUserId()).getData(); |
| | | member.setLastServiceId(JSON.toJSONString(collect)); |
| | | remoteMemberService.editMember(member); |
| | | |
| | | //更新商户和会员服务统计 |
| | | MemberTotalChangeDto memberTotalChange = new MemberTotalChangeDto(); |
| | | memberTotalChange.setUserId(merSureConsumerGoodsDto.getMemberUserId()); |
| | | memberTotalChange.setTypeService(2); |
| | | memberTotalChange.setServiceCount(serviceCount); |
| | | remoteMemberService.changeMemberTotal(memberTotalChange); |
| | | if(!sendData.isEmpty()){ |
| | | Member member = remoteMemberService.getMember(userId).getData(); |
| | | if (!sendData.isEmpty()) { |
| | | R<Shop> r = remoteShopService.getShop(shopId); |
| | | if(r.getCode() != 200){ |
| | | if (r.getCode() != 200) { |
| | | throw new ServiceException(r.getMsg()); |
| | | } |
| | | Shop shop = r.getData(); |
| | |
| | | Integer number = Integer.valueOf(sendDatum.get("number").toString()); |
| | | String msg = "{\"name\":\"" + (StringUtils.isEmpty(member.getRealName()) ? member.getNickName() : member.getRealName()) + "\"," + |
| | | "\"store\":\"" + shop.getShopName() + "\",\"product\":\"" + product + "\"}"; |
| | | if(number == 2){ |
| | | MsgUtils.sendMsg(member.getMobile(),"SMS_464376210",msg); |
| | | } |
| | | if(number == 0){ |
| | | MsgUtils.sendMsg(member.getMobile(),"SMS_464321234",msg); |
| | | if (number == 0) { |
| | | MsgUtils.sendMsg(member.getMobile(), "SMS_464321234", msg); |
| | | } else { |
| | | MsgUtils.sendMsg(member.getMobile(), "SMS_464376210", msg); |
| | | } |
| | | } |
| | | |
| | |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.douyin.openapi.client.models.*; |
| | | import com.github.binarywang.wxpay.bean.ecommerce.*; |
| | | import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum; |
| | | import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult; |
| | |
| | | import com.google.common.collect.Lists; |
| | | import com.google.gson.Gson; |
| | | import com.ruoyi.common.core.constant.CacheConstants; |
| | | import com.ruoyi.common.core.constant.Constants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.enums.UserStatus; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | |
| | | import com.ruoyi.common.redis.service.RedisService; |
| | | import com.ruoyi.common.security.utils.CodeFactoryUtil; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.goods.api.domain.LotteryEvent; |
| | | import com.ruoyi.goods.api.service.LotteryEventClient; |
| | | import com.ruoyi.order.config.WxPayConfiguration; |
| | | import com.ruoyi.order.domain.dto.*; |
| | | import com.ruoyi.order.domain.pojo.account.OrderPayment; |
| | |
| | | import com.ruoyi.order.service.account.ProfitSharingService; |
| | | import com.ruoyi.order.service.order.*; |
| | | import com.ruoyi.order.util.HuiFuTianXiaUtil; |
| | | import com.ruoyi.order.util.douyin.OrderUtil; |
| | | import com.ruoyi.order.util.douyin.VerifyUtil; |
| | | import com.ruoyi.system.api.constant.AppErrorConstant; |
| | | import com.ruoyi.system.api.constant.DelayTaskEnum; |
| | | import com.ruoyi.system.api.constant.SecurityConstant; |
| | |
| | | import lombok.extern.log4j.Log4j2; |
| | | import org.redisson.api.RLock; |
| | | import org.redisson.api.RedissonClient; |
| | | 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; |
| | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.text.NumberFormat; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDate; |
| | | import java.time.format.DateTimeFormatter; |
| | |
| | | |
| | | @Resource |
| | | private OrderPaymentService orderPaymentService; |
| | | |
| | | |
| | | @Resource |
| | | private ProfitSharingService profitSharingService; |
| | | |
| | | |
| | | @Resource |
| | | private OrderRefundService orderRefundService; |
| | | |
| | | |
| | | @Value("${wx.pay.callbackPath}") |
| | | private String callbackPath; |
| | | |
| | | |
| | | |
| | | @Resource |
| | | private LotteryEventClient lotteryEventClient; |
| | | |
| | | |
| | | /** |
| | | * @description: buyGoods |
| | | * @param: appSureOrderDto |
| | |
| | | if(shop!=null&&shop.getShopStatus()!=1){ |
| | | throw new ServiceException(AppErrorConstant.SHOP_CLOSED); |
| | | } |
| | | Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData(); |
| | | // 初始化订单对象 |
| | | AppSureOrderVo appSureOrderVo = new AppSureOrderVo(); |
| | | // 初始化订单商品列表 |
| | |
| | | ShopGoods shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData(); |
| | | if (shopGoods != null) { |
| | | goodsPrice = shopGoods.getSalesPrice(); |
| | | } else { |
| | | //经销商定制价格 |
| | | appShopGoodsGetDto.setGoodsId(goods.getGoodsId()); |
| | | appShopGoodsGetDto.setShopId(belongShop.getShopId()); |
| | | shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData(); |
| | | if (1 == belongShop.getModifyPricePermission() && null != shopGoods) { |
| | | goodsPrice = shopGoods.getSalesPrice(); |
| | | } |
| | | } |
| | | appSureOrderGoodsVo.setGoodsPrice(goodsPrice); |
| | | buyNumBig = BigDecimal.valueOf(buyNum); |
| | |
| | | ShopGoods shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData(); |
| | | if (shopGoods != null) { |
| | | goodsPrice = shopGoods.getSalesPrice(); |
| | | } else { |
| | | //经销商定制价格 |
| | | Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData(); |
| | | appShopGoodsGetDto = new AppShopGoodsGetDto(); |
| | | appShopGoodsGetDto.setGoodsId(goods.getGoodsId()); |
| | | appShopGoodsGetDto.setShopId(belongShop.getShopId()); |
| | | shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData(); |
| | | if (1 == belongShop.getModifyPricePermission() && null != shopGoods) { |
| | | goodsPrice = shopGoods.getSalesPrice(); |
| | | } |
| | | } |
| | | appPanicBuyVo.setGoodsPrice(goodsPrice); |
| | | buyNumBig = BigDecimal.valueOf(buyNum); |
| | |
| | | if (shopGoods != null) { |
| | | goodsPrice = shopGoods.getSalesPrice(); |
| | | serviceNum = shopGoods.getServiceNum(); |
| | | } else { |
| | | //经销商定制价格 |
| | | Shop shop = remoteShopService.getShop(appPlaceOrderDto.getShopId()).getData(); |
| | | Shop belongShop = remoteShopService.getShop(shop.getBelongShopId()).getData(); |
| | | appShopGoodsGetDto = new AppShopGoodsGetDto(); |
| | | appShopGoodsGetDto.setGoodsId(goods.getGoodsId()); |
| | | appShopGoodsGetDto.setShopId(belongShop.getShopId()); |
| | | shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData(); |
| | | if (1 == belongShop.getModifyPricePermission() && null != shopGoods) { |
| | | goodsPrice = shopGoods.getSalesPrice(); |
| | | serviceNum = shopGoods.getServiceNum(); |
| | | } |
| | | } |
| | | appSureOrderGoodsVo.setGoodsPrice(goodsPrice); |
| | | // 计算商品总价 |
| | |
| | | appPlaceOrderVo.setPaySign(payArr[5]); |
| | | appPlaceOrderVo.setPrepayId(orderPayment.getPrepayId()); |
| | | // 返回AppPlaceOrderVo对象 |
| | | List<LotteryEvent> data = lotteryEventClient.getLotteryEventList(2).getData(); |
| | | if (data.size() > 0) { |
| | | long count = data.stream().filter(s -> s.getPayMoney().compareTo(order.getPayMoney()) >= 0).count(); |
| | | appPlaceOrderVo.setLotteryDraw(count > 0); |
| | | } else { |
| | | appPlaceOrderVo.setLotteryDraw(false); |
| | | } |
| | | return appPlaceOrderVo; |
| | | } |
| | | |
| | |
| | | merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); |
| | | merVerifyOrderVo.setPayType(order.getPayType()); |
| | | merVerifyOrderVo.setRealReceiveMoney(order.getChangeReceivableMoney()); |
| | | if(order.getPayType()==1){ |
| | | if (order.getPayType() == 1) { |
| | | merVerifyOrderVo.setReceiveMoney(order.getPayMoney()); |
| | | }else{ |
| | | if(order.getOfflinePayMoney()!=null){ |
| | | } else { |
| | | if (order.getOfflinePayMoney() != null) { |
| | | merVerifyOrderVo.setReceiveMoney(order.getOfflinePayMoney()); |
| | | }else{ |
| | | } else { |
| | | merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO); |
| | | } |
| | | } |
| | |
| | | // 返回结果 |
| | | return merVerifyOrderVo; |
| | | } |
| | | |
| | | |
| | | |
| | | @Override |
| | | public MerVerifyOrderVo verifyOrderDouYin(String orderId, Long shopId) { |
| | | CertificatePrepareResponseData data = VerifyUtil.certificatePrepare(orderId); |
| | | if (null == data) { |
| | | throw new ServiceException("查询券信息失败"); |
| | | } |
| | | List<CertificatePrepareResponseDataCertificatesItem> itemList = data.getCertificates(); |
| | | if (null == itemList || itemList.isEmpty()) { |
| | | throw new ServiceException("查询券信息失败"); |
| | | } |
| | | CertificatePrepareResponseDataCertificatesItem certificatesItem = itemList.get(0); |
| | | //商品信息 |
| | | CertificatePrepareResponseDataCertificatesItemSku sku = certificatesItem.getSku(); |
| | | //次卡信息 |
| | | CertificatePrepareResponseDataCertificatesItemTimeCard timeCard = certificatesItem.getTimeCard(); |
| | | //券的状态 |
| | | Number status = certificatesItem.getStatus(); |
| | | // 创建返回对象 |
| | | MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); |
| | | // 设置返回对象的属性值 |
| | | merVerifyOrderVo.setOrderId(orderId); |
| | | merVerifyOrderVo.setOrderFrom(6); |
| | | merVerifyOrderVo.setOrderStatus(status.intValue() == 1 ? 2 : 3); |
| | | List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = new ArrayList<>(); |
| | | AppUserOrderGoodsPageVo orderGoodsPageVo = new AppUserOrderGoodsPageVo(); |
| | | orderGoodsPageVo.setGoodsName(sku.getTitle()); |
| | | appUserOrderGoodsPageVoList.add(orderGoodsPageVo); |
| | | merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); |
| | | merVerifyOrderVo.setLaveTime(timeCard.getTimesCount() - timeCard.getTimesUsed()); |
| | | // 返回结果 |
| | | return merVerifyOrderVo; |
| | | } |
| | | |
| | | /** |
| | | * 确认核销订单 |
| | | * |
| | |
| | | remoteMemberService.changeMemberTotal(memberTotalChangeDto); |
| | | return merVerifyOrderVo; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * @description 分账实现 |
| | | * @author jqs |
| | | * @date 2023/9/8 11:56 |
| | | * 核销抖音券 |
| | | * |
| | | * @return |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | @GlobalTransactional(rollbackFor = Exception.class) |
| | | public MerVerifyOrderVo sureVerifyOrderDouYin(MerVerifyOrderDto merVerifyOrderDto) { |
| | | String phone = merVerifyOrderDto.getPhone(); |
| | | String orderId = merVerifyOrderDto.getOrderId(); |
| | | Long shopId = merVerifyOrderDto.getShopId(); |
| | | //获取核销商户 |
| | | Shop shop = remoteShopService.getShop(shopId).getData(); |
| | | CertificatePrepareResponseData data = VerifyUtil.certificatePrepare(orderId); |
| | | if (null == data) { |
| | | throw new ServiceException("查询券信息失败"); |
| | | } |
| | | List<CertificatePrepareResponseDataCertificatesItem> itemList = data.getCertificates(); |
| | | if (null == itemList || itemList.isEmpty()) { |
| | | throw new ServiceException("查询券信息失败"); |
| | | } |
| | | CertificatePrepareResponseDataCertificatesItem certificatesItem = itemList.get(0); |
| | | Number status = certificatesItem.getStatus(); |
| | | if (status.intValue() == 2) { |
| | | throw new ServiceException("该抖音券不能重复核销"); |
| | | } |
| | | if (status.intValue() != 1) { |
| | | throw new ServiceException("抖音券核销失败"); |
| | | } |
| | | String encryptedCode = certificatesItem.getEncryptedCode(); |
| | | List<CertificateVerifyResponseDataVerifyResultsItem> items = VerifyUtil.certificateVerify(data.getVerifyToken(), shop.getPoiId(), new ArrayList<String>() {{ |
| | | add(encryptedCode); |
| | | }}); |
| | | if (null == items || items.isEmpty()) { |
| | | throw new ServiceException("抖音券核销失败"); |
| | | } |
| | | Order one = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getTripartiteOrderId, data.getOrderId())); |
| | | if (null != one) { |
| | | throw new ServiceException("该抖音券不能重复核销"); |
| | | } |
| | | |
| | | TradeOrderQueryResponseData tradeOrderQueryResponseData = OrderUtil.queryOrderList(1, 10, data.getOrderId()); |
| | | //原始金额 |
| | | BigDecimal originAmount = BigDecimal.ZERO; |
| | | //支付金额 |
| | | BigDecimal payAmount = BigDecimal.ZERO; |
| | | //优惠金额 |
| | | BigDecimal payDiscountAmount = BigDecimal.ZERO; |
| | | if (null != tradeOrderQueryResponseData) { |
| | | TradeOrderQueryResponseDataOrdersItem ordersItem = tradeOrderQueryResponseData.getOrders().get(0); |
| | | TradeOrderQueryResponseDataOrdersItemAmountInfo amountInfo = ordersItem.getAmountInfo(); |
| | | originAmount = BigDecimal.valueOf(amountInfo.getOriginAmount()).divide(new BigDecimal(100)); |
| | | payAmount = BigDecimal.valueOf(amountInfo.getPayAmount()).divide(new BigDecimal(100)); |
| | | payDiscountAmount = BigDecimal.valueOf(amountInfo.getPayDiscountAmount()).divide(new BigDecimal(100)); |
| | | } |
| | | |
| | | Date nowTime = new Date(); |
| | | Member member = remoteMemberService.getMemberByMobile(phone).getData(); |
| | | //开始添加订单数据 |
| | | Order order = new Order(); |
| | | order.setOrderId(IdUtils.fastSimpleUUID()); |
| | | order.setDelFlag(0); |
| | | order.setOrderStatus(3); |
| | | order.setOrderNo(CodeFactoryUtil.getShopOrderNo()); |
| | | order.setOrderFrom(6); |
| | | order.setShopId(shopId); |
| | | order.setUserId(member.getUserId()); |
| | | order.setOrderMoney(originAmount); |
| | | order.setDiscountMoney(payDiscountAmount); |
| | | order.setReceivableMoney(payAmount); |
| | | order.setPayType(1); |
| | | order.setPayMoney(payAmount); |
| | | order.setOnlinePayMoney(payAmount); |
| | | order.setOrderRemark("抖音订单"); |
| | | order.setCreateTime(nowTime); |
| | | order.setPayTime(nowTime); |
| | | order.setTripartiteOrderId(data.getOrderId()); |
| | | |
| | | //绑定用户判断核销商户 |
| | | if (member.getBindingFlag() == 1) { |
| | | if (!member.getRelationShopId().equals(shopId)) { |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | } |
| | | order.setUseTime(nowTime); |
| | | order.setUseUserId(merVerifyOrderDto.getUserId()); |
| | | order.setCloseFlag(1); |
| | | this.save(order); |
| | | //创建服务商品 |
| | | //获取商品信息(商品简介,调理问题) |
| | | //商品信息 |
| | | CertificatePrepareResponseDataCertificatesItemSku sku = certificatesItem.getSku(); |
| | | //次卡信息 |
| | | CertificatePrepareResponseDataCertificatesItemTimeCard timeCard = certificatesItem.getTimeCard(); |
| | | |
| | | OrderGoods orderGoods = new OrderGoods(); |
| | | orderGoods.setOrderGoodsId(IdUtils.simpleUUID()); |
| | | orderGoods.setDelFlag(0); |
| | | orderGoods.setOrderId(order.getOrderId()); |
| | | orderGoods.setBuyNum(timeCard.getTimesCount()); |
| | | orderGoods.setCycleNumFlag(1); |
| | | orderGoods.setServiceNum(timeCard.getTimesCount()); |
| | | orderGoods.setGoodsType(2); |
| | | orderGoods.setGoodsName(sku.getTitle()); |
| | | orderGoodsService.save(orderGoods); |
| | | |
| | | ConsumerGoods consumerGoods = new ConsumerGoods(); |
| | | consumerGoods.setConsumerGoodsId(IdUtils.simpleUUID()); |
| | | consumerGoods.setDelFlag(0); |
| | | consumerGoods.setServiceStatus(1); |
| | | consumerGoods.setShopId(order.getShopId()); |
| | | consumerGoods.setUserId(order.getUserId()); |
| | | consumerGoods.setOrderId(orderId); |
| | | consumerGoods.setOrderGoodsId(orderGoods.getOrderGoodsId()); |
| | | consumerGoods.setGoodsName(sku.getTitle()); |
| | | consumerGoods.setCycleNumFlag(1); |
| | | consumerGoods.setServiceNum(timeCard.getTimesCount()); |
| | | consumerGoods.setCreateTime(nowTime); |
| | | consumerGoods.setGoodsType(2); |
| | | consumerGoods.setSourceFrom(1); |
| | | consumerGoodsService.save(consumerGoods); |
| | | //生成返回 |
| | | MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); |
| | | merVerifyOrderVo.setOrderId(orderId); |
| | | merVerifyOrderVo.setOrderNo(order.getOrderNo()); |
| | | merVerifyOrderVo.setOrderStatus(order.getOrderStatus()); |
| | | merVerifyOrderVo.setOrderFrom(order.getOrderFrom()); |
| | | merVerifyOrderVo.setOrderGoodsMoney(order.getOrderMoney()); |
| | | merVerifyOrderVo.setCouponDiscount(order.getCouponMoney()); |
| | | merVerifyOrderVo.setReceivableDeposit(order.getReceivableDeposit()); |
| | | merVerifyOrderVo.setPayMoney(order.getPayMoney()); |
| | | merVerifyOrderVo.setOrderRemark(order.getOrderRemark()); |
| | | merVerifyOrderVo.setAppUserOrderGoodsPageVoList(new ArrayList<AppUserOrderGoodsPageVo>() {{ |
| | | add(new AppUserOrderGoodsPageVo() {{ |
| | | setOrderGoodsId(orderGoods.getOrderGoodsId()); |
| | | setGoodsName(orderGoods.getGoodsName()); |
| | | setGoodsType(orderGoods.getGoodsType()); |
| | | setBuyNum(orderGoods.getBuyNum()); |
| | | }}); |
| | | }}); |
| | | merVerifyOrderVo.setCreateTime(order.getCreateTime()); |
| | | merVerifyOrderVo.setPayTime(order.getPayTime()); |
| | | merVerifyOrderVo.setUseTime(order.getUseTime()); |
| | | merVerifyOrderVo.setPayType(order.getPayType()); |
| | | merVerifyOrderVo.setRealReceiveMoney(order.getChangeReceivableMoney()); |
| | | //根据支付方式返回应收金额和已收金额 |
| | | if (order.getPayType() == 1) { |
| | | merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getPayMoney())); |
| | | merVerifyOrderVo.setReceiveMoney(order.getPayMoney()); |
| | | } else { |
| | | merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getCouponMoney()).subtract(order.getReceivableDeposit())); |
| | | if (order.getOfflinePayMoney() != null) { |
| | | merVerifyOrderVo.setReceiveMoney(order.getOfflinePayMoney()); |
| | | } else { |
| | | merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO); |
| | | } |
| | | } |
| | | merVerifyOrderVo.setUnReceiveMoney(merVerifyOrderVo.getRealReceiveMoney().subtract(merVerifyOrderVo.getReceiveMoney())); |
| | | merVerifyOrderVo.setUserId(order.getUserId()); |
| | | merVerifyOrderVo.setUserName(member.getRealName()); |
| | | merVerifyOrderVo.setUserMobile(member.getMobile()); |
| | | merVerifyOrderVo.setCloseFlag(order.getCloseFlag()); |
| | | //判断用户是否绑定 2023-09-05需求改变核销时绑定用户 |
| | | if (member.getBindingFlag() != 1) { |
| | | //绑定商户 |
| | | AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto(); |
| | | appMemberBindingDto.setShopId(order.getShopId()); |
| | | appMemberBindingDto.setUserId(order.getUserId()); |
| | | appMemberBindingDto.setBindingFlag(1); |
| | | if (order.getOrderFrom() == 1) { |
| | | appMemberBindingDto.setBindingType(1); |
| | | } else if (order.getOrderFrom() == 2) { |
| | | appMemberBindingDto.setBindingType(2); |
| | | } |
| | | remoteMemberService.updateMemberBinding(appMemberBindingDto); |
| | | order.setNewMemberFlag(1); |
| | | } else { |
| | | order.setNewMemberFlag(0); |
| | | } |
| | | this.saveOrUpdate(order); |
| | | //更新用户积分和消费统计 |
| | | MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); |
| | | memberTotalChangeDto.setUserId(order.getUserId()); |
| | | // 如果存在积分兑换比例,则计算积分 |
| | | if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) { |
| | | Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL); |
| | | BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue); |
| | | BigDecimal integralBig = moneyValueBig.multiply(order.getOnlinePayMoney()).setScale(0, BigDecimal.ROUND_HALF_UP); |
| | | Integer integral = Integer.valueOf(integralBig.toString()); |
| | | if (integral > 0) { |
| | | memberTotalChangeDto.setChangeIntegral(integral); |
| | | memberTotalChangeDto.setTypeIntegral(1); |
| | | memberTotalChangeDto.setOrderId(orderId); |
| | | memberTotalChangeDto.setOrderNo(order.getOrderNo()); |
| | | } |
| | | } |
| | | //更新消费时间 |
| | | memberTotalChangeDto.setConsumeTime(nowTime); |
| | | remoteMemberService.changeMemberTotal(memberTotalChangeDto); |
| | | return merVerifyOrderVo; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @param orderId |
| | | * @param orderNo |
| | | * @param shopId |
| | | * @param orderMoney |
| | | * @param orderFrom |
| | | * @return void |
| | | * @return void |
| | | * @description 分账实现 |
| | | * @author jqs |
| | | * @date 2023/9/8 11:56 |
| | | */ |
| | | private void submitProfitSharing(String orderId, String orderNo, Long shopId, BigDecimal orderMoney, Integer orderFrom) { |
| | | String sendMessage = ""; |
| | |
| | | Long shopId = shopRelUserVo.getShopId(); |
| | | Shop shop = remoteShopService.getShop(shopId).getData(); |
| | | //平台奖品判断 |
| | | if (memberGiftRecord.getGiftFrom() == 1) { |
| | | if (memberGiftRecord.getGiftFrom() == 1 && memberGiftRecord.getPrizeFrom() == 1) { |
| | | BirthdayCard birthdayCard = remoteMemberService.getBirthdayCard().getData(); |
| | | //判断生日活动状态 |
| | | if(birthdayCard!=null&&birthdayCard.getCardStatus()==1){ |
| | | if (birthdayCard != null && birthdayCard.getCardStatus() == 1) { |
| | | shop = remoteShopService.getShop(shopId).getData(); |
| | | //判断指定区域全部店铺 |
| | | if(birthdayCard.getAreaFlag()==2&&birthdayCard.getShopFlag()==1&&!StringUtils.checkString(birthdayCard.getDesignatedArea(),shop.getShopCityCode())){ |
| | | if (birthdayCard.getAreaFlag() == 2 && birthdayCard.getShopFlag() == 1 && !StringUtils.checkString(birthdayCard.getDesignatedArea(), shop.getShopCityCode())) { |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | //判断指定店铺 |
| | | if(birthdayCard.getShopFlag()==2&&!StringUtils.checkString(birthdayCard.getApplicableShop(),shopId.toString())){ |
| | | if (birthdayCard.getShopFlag() == 2 && !StringUtils.checkString(birthdayCard.getApplicableShop(), shopId.toString())) { |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | }else{ |
| | | } else { |
| | | throw new ServiceException(AppErrorConstant.BIRTHDAY_CARD_ERROR); |
| | | } |
| | | } |
| | |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData(); |
| | | |
| | | |
| | | merVerifyAwardVo.setUserName(member.getRealName()); |
| | | merVerifyAwardVo.setUserMobile(member.getMobile()); |
| | | if (memberGiftRecord.getGiftFrom() == 1) { |
| | | merVerifyAwardVo.setGiftFrom("平台生日卡"); |
| | | if (memberGiftRecord.getPrizeFrom() == 1) { |
| | | if (memberGiftRecord.getGiftFrom() == 1) { |
| | | merVerifyAwardVo.setGiftFrom("平台生日卡"); |
| | | } else { |
| | | merVerifyAwardVo.setGiftFrom("商户生日卡"); |
| | | } |
| | | } else { |
| | | merVerifyAwardVo.setGiftFrom("商户生日卡"); |
| | | merVerifyAwardVo.setGiftFrom("抽奖"); |
| | | } |
| | | merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType()); |
| | | List<BirthdayGiftSendDto> giftSendDtoList = new ArrayList<>(); |
| | | BirthdayGiftSendDto birthdayGiftSendDto = new BirthdayGiftSendDto(); |
| | | switch (memberGiftRecord.getGiftType()) { |
| | | case 1: |
| | | merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName()); |
| | | merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber())); |
| | | birthdayGiftSendDto.setUserId(memberGiftRecord.getUserId()); |
| | | birthdayGiftSendDto.setGiftType(memberGiftRecord.getGiftType()); |
| | | birthdayGiftSendDto.setGiftFrom(memberGiftRecord.getGiftFrom()); |
| | | birthdayGiftSendDto.setShopId(memberGiftRecord.getShopId()); |
| | | birthdayGiftSendDto.setCouponId(memberGiftRecord.getCouponId()); |
| | | birthdayGiftSendDto.setCouponNumber(memberGiftRecord.getCouponNumber()); |
| | | giftSendDtoList.add(birthdayGiftSendDto); |
| | | remoteCouponService.sendCouponGift(giftSendDtoList); |
| | | if (memberGiftRecord.getPrizeFrom() == 1) { |
| | | merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName()); |
| | | merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber())); |
| | | birthdayGiftSendDto.setUserId(memberGiftRecord.getUserId()); |
| | | birthdayGiftSendDto.setGiftType(memberGiftRecord.getGiftType()); |
| | | birthdayGiftSendDto.setGiftFrom(memberGiftRecord.getGiftFrom()); |
| | | birthdayGiftSendDto.setShopId(memberGiftRecord.getShopId()); |
| | | birthdayGiftSendDto.setCouponId(memberGiftRecord.getCouponId()); |
| | | birthdayGiftSendDto.setCouponNumber(memberGiftRecord.getCouponNumber()); |
| | | giftSendDtoList.add(birthdayGiftSendDto); |
| | | remoteCouponService.sendCouponGift(giftSendDtoList); |
| | | } |
| | | break; |
| | | case 2: |
| | | Goods goods = remoteGoodsService.getGoods(memberGiftRecord.getGoodsId()).getData(); |
| | |
| | | birthdayGiftSendDto.setGoodsNumber(memberGiftRecord.getGoodsNumber()); |
| | | giftSendDtoList.add(birthdayGiftSendDto); |
| | | consumerGoodsService.sendGoodsGift(giftSendDtoList); |
| | | //抽奖奖品中的平台商品需要生成订单数据 |
| | | if (memberGiftRecord.getPrizeFrom() == 2) { |
| | | addOrder(memberGiftRecord.getShopId(), memberGiftRecord.getUserId(), goods, memberGiftRecord.getGoodsNumber(), memberGiftRecord.getGiftId()); |
| | | } |
| | | break; |
| | | case 3: |
| | | merVerifyAwardVo.setGiftName("现金"); |
| | | merVerifyAwardVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue()); |
| | | if (memberGiftRecord.getPrizeFrom() == 1) { |
| | | merVerifyAwardVo.setGiftName("现金"); |
| | | merVerifyAwardVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue()); |
| | | } |
| | | break; |
| | | case 4: |
| | | merVerifyAwardVo.setGiftName(memberGiftRecord.getGiftName()); |
| | |
| | | merVerifyAwardVo.setVerifyStatus(2); |
| | | return merVerifyAwardVo; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 核销抽奖的平台商品生成订单 |
| | | * |
| | | * @param shopId |
| | | * @param userId |
| | | * @param goods |
| | | * @param goodsNum |
| | | */ |
| | | public void addOrder(Long shopId, Long userId, Goods goods, Integer goodsNum, String giftId) { |
| | | Order order = new Order(); |
| | | order.setOrderId(IdUtils.simpleUUID()); |
| | | order.setDelFlag(0); |
| | | order.setOrderStatus(3); |
| | | order.setOrderNo(CodeFactoryUtil.getShopOrderNo()); |
| | | order.setOrderFrom(4); |
| | | order.setShopId(shopId); |
| | | order.setUserId(userId); |
| | | order.setOrderMoney(BigDecimal.ZERO); |
| | | order.setCouponMoney(BigDecimal.ZERO); |
| | | order.setDiscountMoney(BigDecimal.ZERO); |
| | | order.setReceivableMoney(BigDecimal.ZERO); |
| | | order.setPayType(1); |
| | | order.setPayMoney(BigDecimal.ZERO); |
| | | order.setOrderRemark("抽奖订单"); |
| | | order.setCreateTime(new Date()); |
| | | order.setPayTime(new Date()); |
| | | order.setUseTime(new Date()); |
| | | order.setUseUserId(userId); |
| | | order.setGoodsNum(goodsNum); |
| | | order.setReceivableDeposit(BigDecimal.ZERO); |
| | | order.setCloseFlag(1); |
| | | order.setActivityId(giftId); |
| | | this.save(order); |
| | | OrderGoods orderGoods = new OrderGoods(); |
| | | orderGoods.setOrderGoodsId(IdUtils.simpleUUID()); |
| | | orderGoods.setDelFlag(0); |
| | | orderGoods.setOrderId(order.getOrderId()); |
| | | orderGoods.setGoodsId(goods.getGoodsId()); |
| | | orderGoods.setBuyNum(goodsNum); |
| | | orderGoods.setGoodsPrice(goods.getSalesPrice()); |
| | | orderGoods.setGoodsDeposit(goods.getSubscription()); |
| | | orderGoods.setGoodsTotalMoney(goods.getSalesPrice().multiply(new BigDecimal(goodsNum))); |
| | | orderGoods.setGoodsReceivableMoney(BigDecimal.ZERO); |
| | | orderGoods.setCycleNumFlag(goods.getCycleNumFlag()); |
| | | orderGoods.setServiceNum(goods.getServiceNum()); |
| | | orderGoods.setGoodsType(goods.getGoodsType()); |
| | | orderGoods.setGoodsName(goods.getGoodsName()); |
| | | GoodsFile goodsFile = remoteGoodsService.getGoodsFile(goods.getGoodsId()).getData(); |
| | | if (null != goodsFile) { |
| | | orderGoods.setGoodsPicture(goodsFile.getFileUrl()); |
| | | } |
| | | orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); |
| | | orderGoods.setGoodsTag(goods.getGoodsTags()); |
| | | orderGoodsService.save(orderGoods); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 收银未结清订单列表 |
| | | * |
| | |
| | | if (merMemberNoClearOrderVo.getUnPaidMoney() == null) { |
| | | merMemberNoClearOrderVo.setUnPaidMoney(zeroBig); |
| | | } |
| | | if(merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig)<0){ |
| | | if (merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig) < 0) { |
| | | merMemberNoClearOrderVo.setUnPaidMoney(zeroBig); |
| | | } |
| | | } |
| | | } |
| | | return merMemberNoClearOrderVoList; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 结清订单 |
| | | * |
| | |
| | | goodsRealPrice = goodsTotalPrice; |
| | | //优惠券计算 |
| | | if (memberCouponId != null) { |
| | | appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId); |
| | | log.info("使用优惠券:{}", memberCouponId); |
| | | appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId.toString()); |
| | | log.info("匹配的优惠券:{}", JSON.toJSONString(appMemberCouponVo)); |
| | | if (null != appMemberCouponVo && (StringUtils.isBlank(appMemberCouponVo.getRelGoodsIds()) || appMemberCouponVo.getRelGoodsIds().contains(goodsId))) { |
| | | log.info("可以使用优惠券:{}", JSON.toJSONString(appMemberCouponVo)); |
| | | couponType = appMemberCouponVo.getCouponType(); |
| | | couponType = appMemberCouponVo.getCouponType(); |
| | | if (couponType == 1 && appMemberCouponVo.getMoneyThreshold() != null && appMemberCouponVo.getDiscountMoney() != null) { |
| | | moneyThreshold = appMemberCouponVo.getMoneyThreshold(); |
| | |
| | | consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList); |
| | | //减去优惠券 |
| | | if (StringUtils.isNotBlank(memberCouponSJ.toString())) { |
| | | log.info("修改优惠券使用状态:{}", JSON.toJSONString(memberCouponSJ)); |
| | | remoteCouponService.useMemberCoupon(memberCouponSJ.toString()); |
| | | } |
| | | //更新会员消费记录 |
| | |
| | | if (merMemberNoClearOrderVo.getUnPaidMoney() == null) { |
| | | merMemberNoClearOrderVo.setUnPaidMoney(zeroBig); |
| | | } |
| | | if(merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig)<0){ |
| | | if (merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig) < 0) { |
| | | merMemberNoClearOrderVo.setUnPaidMoney(zeroBig); |
| | | } |
| | | List<MerCouponGoodsListVo> goodsList = new ArrayList<>(); |
| | | orderGoodsService.listByOrderId(merMemberNoClearOrderVo.getOrderId()).forEach(orderGoodsVo -> { |
| | | MerCouponGoodsListVo merCouponGoodsListVo = new MerCouponGoodsListVo(); |
| | | merCouponGoodsListVo.setGoodsId(orderGoodsVo.getGoodsId()); |
| | | merCouponGoodsListVo.setGoodsName(orderGoodsVo.getGoodsName()); |
| | | merCouponGoodsListVo.setGoodsNum(orderGoodsVo.getBuyNum()); |
| | | if (orderGoodsVo.getGoodsType() == 1) { |
| | | merCouponGoodsListVo.setGoodsType("周期"); |
| | | } else if (orderGoodsVo.getGoodsType() == 2) { |
| | | merCouponGoodsListVo.setGoodsType("服务"); |
| | | } else if (orderGoodsVo.getGoodsType() == 3) { |
| | | merCouponGoodsListVo.setGoodsType("体验"); |
| | | } else if (orderGoodsVo.getGoodsType() == 4) { |
| | | merCouponGoodsListVo.setGoodsType("单品"); |
| | | } |
| | | goodsList.add(merCouponGoodsListVo); |
| | | }); |
| | | merMemberNoClearOrderVo.setGoodsList(goodsList); |
| | | } |
| | | } |
| | | return merMemberNoClearOrderVoList; |
| | |
| | | if (memberGiftRecord.getGiftFrom() == 1) { |
| | | BirthdayCard birthdayCard = remoteMemberService.getBirthdayCard().getData(); |
| | | //判断生日活动状态 |
| | | if(birthdayCard!=null&&birthdayCard.getCardStatus()==1){ |
| | | if (birthdayCard != null && birthdayCard.getCardStatus() == 1) { |
| | | shop = remoteShopService.getShop(shopId).getData(); |
| | | //判断指定区域全部店铺 |
| | | if(birthdayCard.getAreaFlag()==2&&birthdayCard.getShopFlag()==1&&!StringUtils.checkString(birthdayCard.getDesignatedArea(),shop.getShopCityCode())){ |
| | | if (birthdayCard.getAreaFlag() == 2 && birthdayCard.getShopFlag() == 1 && !StringUtils.checkString(birthdayCard.getDesignatedArea(), shop.getShopCityCode())) { |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | //判断指定店铺 |
| | | if(birthdayCard.getShopFlag()==2&&!StringUtils.checkString(birthdayCard.getApplicableShop(),shopId.toString())){ |
| | | if (birthdayCard.getShopFlag() == 2 && !StringUtils.checkString(birthdayCard.getApplicableShop(), shopId.toString())) { |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | }else{ |
| | | } else { |
| | | throw new ServiceException(AppErrorConstant.BIRTHDAY_CARD_ERROR); |
| | | } |
| | | } |
| | |
| | | if (memberGiftRecord.getGiftFrom() == 2 && !memberGiftRecord.getShopId().equals(shopId)) { |
| | | throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); |
| | | } |
| | | |
| | | |
| | | merVerifyAwardVo.setUserName(member.getRealName()); |
| | | merVerifyAwardVo.setUserMobile(member.getMobile()); |
| | | if (memberGiftRecord.getGiftFrom() == 1) { |
| | | merVerifyAwardVo.setGiftFrom("平台生日卡"); |
| | | if (1 == memberGiftRecord.getPrizeFrom()) { |
| | | if (memberGiftRecord.getGiftFrom() == 1) { |
| | | merVerifyAwardVo.setGiftFrom("平台生日卡"); |
| | | } else { |
| | | merVerifyAwardVo.setGiftFrom("商户生日卡"); |
| | | } |
| | | } else { |
| | | merVerifyAwardVo.setGiftFrom("商户生日卡"); |
| | | merVerifyAwardVo.setGiftFrom("平台抽奖"); |
| | | } |
| | | merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType()); |
| | | //礼物类型1优惠券2商品3现金4实物 |
| | | //礼物类型1优惠券2商品3现金4实物5积分 |
| | | switch (memberGiftRecord.getGiftType()) { |
| | | case 1: |
| | | merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName()); |
| | |
| | | import com.github.binarywang.wxpay.bean.ecommerce.RefundNotifyResult; |
| | | import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult; |
| | | import com.github.binarywang.wxpay.exception.WxPayException; |
| | | import com.ruoyi.order.domain.dto.MerVerifyPrizeDto; |
| | | import com.ruoyi.order.domain.dto.*; |
| | | import com.ruoyi.order.domain.pojo.order.Order; |
| | | import com.ruoyi.order.domain.vo.*; |
| | |
| | | * @return |
| | | */ |
| | | MerHomeShopTotalVo getMerHomeTotal(MerHomeShopTotalVo merHomeShopTotalVo); |
| | | |
| | | |
| | | /** |
| | | * 获取核销订单 |
| | | * |
| | | * @param orderId |
| | | * @return |
| | | */ |
| | | MerVerifyOrderVo verifyOrder(String orderId,Long shopId); |
| | | |
| | | MerVerifyOrderVo verifyOrder(String orderId, Long shopId); |
| | | |
| | | /** |
| | | * 获取抖音的核销订单 |
| | | * |
| | | * @param orderId |
| | | * @param shopId |
| | | * @return |
| | | */ |
| | | MerVerifyOrderVo verifyOrderDouYin(String orderId, Long shopId); |
| | | |
| | | /** |
| | | * 确认核销订单 |
| | | * |
| | | * @param merVerifyOrderDto |
| | | * @return |
| | | */ |
| | | MerVerifyOrderVo sureVerifyOrder(MerVerifyOrderDto merVerifyOrderDto); |
| | | |
| | | |
| | | /** |
| | | * @description 确认核销优惠券 |
| | | * @author jqs |
| | | * @date 2023/6/28 11:26 |
| | | * 核销抖音券 |
| | | * |
| | | * @return |
| | | */ |
| | | MerVerifyOrderVo sureVerifyOrderDouYin(MerVerifyOrderDto merVerifyOrderDto); |
| | | |
| | | |
| | | /** |
| | | * @param merVerifyCouponDto |
| | | * @return MerVerifyCouponVo |
| | | * @return MerVerifyCouponVo |
| | | * @description 确认核销优惠券 |
| | | * @author jqs |
| | | * @date 2023/6/28 11:26 |
| | | */ |
| | | MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto); |
| | | |
| | | |
| | | /** |
| | | * @description 确认核销奖品 |
| | | * @author jqs |
| | | * @date 2023/7/9 9:54 |
| | | * @param merVerifyPrizeDto |
| | | * @return MerVerifyAwardVo |
| | | * @return MerVerifyAwardVo |
| | | * @description 确认核销奖品 |
| | | * @author jqs |
| | | * @date 2023/7/9 9:54 |
| | | */ |
| | | MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto); |
| | | |
New file |
| | |
| | | package com.ruoyi.order.util.douyin; |
| | | |
| | | import com.aliyun.tea.TeaException; |
| | | import com.douyin.openapi.client.Client; |
| | | import com.douyin.openapi.client.models.OauthClientTokenRequest; |
| | | import com.douyin.openapi.client.models.OauthClientTokenResponse; |
| | | import com.douyin.openapi.client.models.OauthClientTokenResponseData; |
| | | import com.douyin.openapi.credential.models.Config; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneOffset; |
| | | |
| | | /** |
| | | * 抖音获取client_token工具类 |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/11 18:46 |
| | | */ |
| | | @Slf4j |
| | | public class ClientTokenUtil { |
| | | |
| | | public static String token = ""; |
| | | |
| | | public static Long expiration_time = 0L; |
| | | |
| | | |
| | | /** |
| | | * 获取client_token |
| | | */ |
| | | public static void getClientToken() { |
| | | try { |
| | | Config config = new Config().setClientKey(DouyinConfig.CLIENT_KEY).setClientSecret(DouyinConfig.CLIENT_SECRET); // 改成自己的app_id跟secret |
| | | Client client = new Client(config); |
| | | /* 构建请求参数,该代码示例中只给出部分参数,请用户根据需要自行构建参数值 |
| | | token: |
| | | 1.若用户自行维护token,将用户维护的token赋值给该参数即可 |
| | | 2.SDK包中有获取token的函数,请根据接口path在《OpenAPI SDK 总览》文档中查找获取token函数的名字 |
| | | 在使用过程中,请注意token互刷问题 |
| | | header: |
| | | sdk中默认填充content-type请求头,若不需要填充除content-type之外的请求头,删除该参数即可 |
| | | */ |
| | | OauthClientTokenRequest sdkRequest = new OauthClientTokenRequest(); |
| | | sdkRequest.setClientKey(DouyinConfig.CLIENT_KEY); |
| | | sdkRequest.setClientSecret(DouyinConfig.CLIENT_SECRET); |
| | | sdkRequest.setGrantType("client_credential"); |
| | | OauthClientTokenResponse sdkResponse = client.OauthClientToken(sdkRequest); |
| | | String message = sdkResponse.getMessage(); |
| | | if("success".equals(message)){ |
| | | OauthClientTokenResponseData data = sdkResponse.getData(); |
| | | if(data.getErrorCode() != 0){ |
| | | log.error("【抖音】获取client_token失败:{}", data.getDescription()); |
| | | throw new RuntimeException("【抖音】获取client_token失败:" + data.getDescription()); |
| | | } |
| | | token = data.getAccessToken(); |
| | | long second = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")); |
| | | expiration_time = second + data.getExpiresIn() - 30; |
| | | }else{ |
| | | OauthClientTokenResponseData data = sdkResponse.getData(); |
| | | if(data.getErrorCode() != 0){ |
| | | log.error("【抖音】获取client_token失败:{}", data.getDescription()); |
| | | throw new RuntimeException("【抖音】获取client_token失败:" + data.getDescription()); |
| | | } |
| | | } |
| | | } catch (TeaException e) { |
| | | System.out.println(e.getMessage()); |
| | | } catch (Exception e) { |
| | | System.out.println(e.getMessage()); |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.order.util.douyin; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.ruoyi.common.redis.service.RedisService; |
| | | import com.ruoyi.order.util.douyin.model.OrderWebHook; |
| | | import com.ruoyi.order.util.douyin.model.WebHook; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.codec.digest.DigestUtils; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.ResponseBody; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.BufferedReader; |
| | | import java.io.PrintWriter; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/11 19:36 |
| | | */ |
| | | @Slf4j |
| | | @RestController |
| | | @RequestMapping("/douyin") |
| | | public class DYWebHookController { |
| | | |
| | | @Resource |
| | | private RedisService redisService; |
| | | |
| | | |
| | | /** |
| | | * 抖音webhook |
| | | * @param request |
| | | * @param response |
| | | */ |
| | | @ResponseBody |
| | | @PostMapping("/webhook") |
| | | public void orderWebHook(HttpServletRequest request, HttpServletResponse response) { |
| | | // 获取消息中body |
| | | String str, wholeStr = ""; |
| | | try{ |
| | | BufferedReader br = request.getReader(); |
| | | while((str = br.readLine()) != null){ |
| | | wholeStr += str; |
| | | } |
| | | log.info("【抖音】webhook获取请求内容:{}", wholeStr); |
| | | } catch (Exception e){ |
| | | log.error("【抖音】webhook获取请求内容失败"); |
| | | return; |
| | | } |
| | | // 获取请求头中的加签信息 |
| | | String msgId = request.getHeader("Msg-Id"); |
| | | String signature = request.getHeader("X-Douyin-Signature"); |
| | | String data = DouyinConfig.CLIENT_SECRET + wholeStr; |
| | | String sign = DigestUtils.sha1Hex(data); |
| | | if(!sign.equals(signature)){ |
| | | log.error("【抖音】webhook验签失败"); |
| | | return; |
| | | } |
| | | if(redisService.hasKey(msgId)){ |
| | | return; |
| | | } |
| | | redisService.setCacheObject(msgId, "", 60L, TimeUnit.SECONDS); |
| | | WebHook webHook = JSON.parseObject(wholeStr, WebHook.class); |
| | | String event = webHook.getEvent(); |
| | | switch (event){ |
| | | // 验证 |
| | | case "verify_webhook": |
| | | verifyWebhook(webHook, response); |
| | | break; |
| | | //订单消息通知 |
| | | case "life_trade_order_notify": |
| | | lifeTradeOrderNotify(webHook, response); |
| | | break; |
| | | //券消息通知 |
| | | case "life_trade_certificate_notify": |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 校验webhook |
| | | * @param webHook |
| | | * @param response |
| | | */ |
| | | public void verifyWebhook(WebHook webHook, HttpServletResponse response){ |
| | | JSONObject jsonObject = JSON.parseObject(webHook.getContent()); |
| | | //响应 |
| | | PrintWriter out = null; |
| | | try { |
| | | out = response.getWriter(); |
| | | out.print(jsonObject); |
| | | out.flush(); |
| | | out.close(); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | }finally { |
| | | if(null != out){ |
| | | out.close(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 生活服务订单webhook |
| | | * @param webHook |
| | | * @param response |
| | | */ |
| | | public void lifeTradeOrderNotify(WebHook webHook, HttpServletResponse response){ |
| | | OrderWebHook orderWebHook = JSON.parseObject(webHook.getContent(), OrderWebHook.class); |
| | | |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.order.util.douyin; |
| | | |
| | | /** |
| | | * 抖音配置文件 |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/11 18:41 |
| | | */ |
| | | public interface DouyinConfig { |
| | | |
| | | String APP_ID = "awhqgkio6uhnx28e"; |
| | | /** |
| | | * 应用唯一标识 |
| | | */ |
| | | String CLIENT_KEY = "awhqgkio6uhnx28e"; |
| | | /** |
| | | * 应用的密钥 |
| | | */ |
| | | String CLIENT_SECRET = "fbe8067d93660d6468d6c408ab2a7c46"; |
| | | /** |
| | | * 来客商户根账户ID |
| | | */ |
| | | String ACCOUNT_ID = "7215050221296814140"; |
| | | } |
New file |
| | |
| | | package com.ruoyi.order.util.douyin; |
| | | |
| | | import com.douyin.openapi.client.Client; |
| | | import com.douyin.openapi.client.models.TradeOrderQueryRequest; |
| | | import com.douyin.openapi.client.models.TradeOrderQueryResponse; |
| | | import com.douyin.openapi.client.models.TradeOrderQueryResponseData; |
| | | import com.douyin.openapi.client.models.TradeOrderQueryResponseExtra; |
| | | import com.douyin.openapi.credential.models.Config; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneOffset; |
| | | |
| | | /** |
| | | * 抖音订单工具类 |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/11 18:58 |
| | | */ |
| | | @Slf4j |
| | | public class OrderUtil { |
| | | |
| | | |
| | | /** |
| | | * 查询订单列表 |
| | | * |
| | | * @param page |
| | | * @param pageSize |
| | | * @return |
| | | */ |
| | | public static TradeOrderQueryResponseData queryOrderList(Integer page, Integer pageSize, String order_id) { |
| | | //判断token是否过期 |
| | | long now = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")); |
| | | if (ClientTokenUtil.expiration_time < now) { |
| | | ClientTokenUtil.getClientToken(); |
| | | } |
| | | try { |
| | | Config config = new Config().setClientKey(DouyinConfig.CLIENT_KEY).setClientSecret(DouyinConfig.CLIENT_SECRET); // 改成自己的app_id跟secret |
| | | Client client = new Client(config); |
| | | TradeOrderQueryRequest queryRequest = new TradeOrderQueryRequest(); |
| | | queryRequest.setAccessToken(ClientTokenUtil.token); |
| | | queryRequest.setAccountId(DouyinConfig.ACCOUNT_ID); |
| | | queryRequest.setPageNum(page); |
| | | queryRequest.setPageSize(pageSize); |
| | | if (StringUtils.isNotEmpty(order_id)) { |
| | | queryRequest.setOrderId(order_id); |
| | | } |
| | | TradeOrderQueryResponse tradeOrderQueryResponse = client.TradeOrderQuery(queryRequest); |
| | | TradeOrderQueryResponseExtra extra = tradeOrderQueryResponse.getExtra(); |
| | | Integer errorCode = extra.getErrorCode(); |
| | | if (0 != errorCode) { |
| | | log.error("【抖音】查询订单失败:" + extra.getDescription()); |
| | | return null; |
| | | } |
| | | return tradeOrderQueryResponse.getData(); |
| | | }catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.order.util.douyin; |
| | | |
| | | import cn.hutool.http.HttpRequest; |
| | | import cn.hutool.http.HttpResponse; |
| | | import cn.hutool.http.HttpUtil; |
| | | import com.douyin.openapi.client.Client; |
| | | import com.douyin.openapi.client.models.*; |
| | | import com.douyin.openapi.credential.models.Config; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneOffset; |
| | | import java.util.List; /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/16 10:28 |
| | | */ |
| | | @Slf4j |
| | | public class VerifyUtil { |
| | | |
| | | |
| | | /** |
| | | * 验券准备 |
| | | * @param code 短链地址 |
| | | * @return |
| | | */ |
| | | public static CertificatePrepareResponseData certificatePrepare(String code){ |
| | | //判断token是否过期 |
| | | long now = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")); |
| | | if(ClientTokenUtil.expiration_time < now){ |
| | | ClientTokenUtil.getClientToken(); |
| | | } |
| | | try { |
| | | //用户短链地址获取长链地址,获取encryptedData参数 |
| | | HttpRequest get = HttpUtil.createGet(code); |
| | | HttpResponse execute = get.execute(); |
| | | int status = execute.getStatus(); |
| | | String encryptedData = ""; |
| | | if(302 == status){ |
| | | String location = execute.header("Location"); |
| | | location = location.substring(location.indexOf("object_id=") + 1); |
| | | location = location.substring(0, location.indexOf("&")); |
| | | encryptedData = location; |
| | | } |
| | | |
| | | Config config = new Config().setClientKey(DouyinConfig.CLIENT_KEY).setClientSecret(DouyinConfig.CLIENT_SECRET); // 改成自己的app_id跟secret |
| | | Client client = new Client(config); |
| | | CertificatePrepareRequest request = new CertificatePrepareRequest(); |
| | | request.setAccessToken(ClientTokenUtil.token); |
| | | request.setEncryptedData(encryptedData); |
| | | CertificatePrepareResponse response = client.CertificatePrepare(request); |
| | | CertificatePrepareResponseExtra extra = response.getExtra(); |
| | | Integer errorCode = extra.getErrorCode(); |
| | | if(0 != errorCode){ |
| | | log.error("【抖音】验券准备失败"); |
| | | return null; |
| | | } |
| | | return response.getData(); |
| | | }catch (Exception e) { |
| | | log.error("【抖音】验券准备失败"); |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 验券 |
| | | * @param poiId 抖音门店id |
| | | * @param encryptedCodes 加密券码 |
| | | * @return |
| | | */ |
| | | public static List<CertificateVerifyResponseDataVerifyResultsItem> certificateVerify(String verify_token, String poiId, List<String> encryptedCodes){ |
| | | //判断token是否过期 |
| | | long now = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")); |
| | | if(ClientTokenUtil.expiration_time < now){ |
| | | ClientTokenUtil.getClientToken(); |
| | | } |
| | | try { |
| | | Config config = new Config().setClientKey(DouyinConfig.CLIENT_KEY).setClientSecret(DouyinConfig.CLIENT_SECRET); // 改成自己的app_id跟secret |
| | | Client client = new Client(config); |
| | | CertificateVerifyRequest request = new CertificateVerifyRequest(); |
| | | request.setAccessToken(ClientTokenUtil.token); |
| | | request.setVerifyToken(verify_token); |
| | | request.setPoiId(poiId); |
| | | request.setEncryptedCodes(encryptedCodes); |
| | | CertificateVerifyResponse response = client.CertificateVerify(request); |
| | | CertificateVerifyResponseExtra extra = response.getExtra(); |
| | | Integer errorCode = extra.getErrorCode(); |
| | | if(0 != errorCode){ |
| | | log.error("【抖音】验券失败"); |
| | | return null; |
| | | } |
| | | CertificateVerifyResponseData data = response.getData(); |
| | | List<CertificateVerifyResponseDataVerifyResultsItem> verifyResults = data.getVerifyResults(); |
| | | return verifyResults; |
| | | }catch (Exception e) { |
| | | log.error("【抖音】验券失败"); |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.order.util.douyin.model; |
| | | |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/11 19:34 |
| | | */ |
| | | @Data |
| | | public class Order { |
| | | /** |
| | | * 商家账号id |
| | | */ |
| | | private String account_id; |
| | | /** |
| | | * 创单时间,秒级时间戳 |
| | | */ |
| | | private Long create_time; |
| | | /** |
| | | * 订单id |
| | | */ |
| | | private String order_id; |
| | | /** |
| | | * 售卖价格(分) |
| | | */ |
| | | private Long original_amount; |
| | | /** |
| | | * 用户支付价格(分) |
| | | */ |
| | | private Long pay_amount; |
| | | /** |
| | | * 支付时间,秒级时间戳 |
| | | */ |
| | | private Long pay_time; |
| | | } |
New file |
| | |
| | | package com.ruoyi.order.util.douyin.model; |
| | | |
| | | import lombok.Data; /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/11 19:32 |
| | | */ |
| | | @Data |
| | | public class OrderWebHook { |
| | | /** |
| | | * 事件类型 |
| | | */ |
| | | private String action; |
| | | /** |
| | | * 消息发送时间 |
| | | */ |
| | | private Long msg_time; |
| | | /** |
| | | * 订单信息 |
| | | */ |
| | | private Order order; |
| | | } |
New file |
| | |
| | | package com.ruoyi.order.util.douyin.model; |
| | | |
| | | import lombok.Data; /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/11 19:42 |
| | | */ |
| | | @Data |
| | | public class WebHook { |
| | | /** |
| | | * 消息类型,用于区分各类消息 |
| | | */ |
| | | private String event; |
| | | /** |
| | | * 对应服务商平台或开发者平台中的APPID,应用ID |
| | | */ |
| | | private String client_key; |
| | | /** |
| | | * 标识用户身份的openId,同一用户在不同的APPID中openId不相同 |
| | | */ |
| | | private String from_user_id; |
| | | /** |
| | | * 消息内容,根据需要解析消息内容,不同类型的消息内容不同 |
| | | */ |
| | | private String content; |
| | | /** |
| | | * 抖音内部日志id,可提供给抖音方便排查问题 |
| | | */ |
| | | private String log_id; |
| | | } |
| | |
| | | toc.order_status orderStatus, |
| | | toc.order_money orderGoodsMoney, |
| | | toc.coupon_money couponDiscount, |
| | | CASE toc.pay_type WHEN 1 THEN toc.order_money-toc.coupon_money WHEN 2 THEN toc.order_money-toc.coupon_money-toc.online_pay_money END receivableMoney, |
| | | CASE toc.pay_type WHEN 1 THEN toc.order_money-toc.coupon_money WHEN 2 THEN |
| | | toc.order_money-toc.coupon_money-toc.online_pay_money END receivableMoney, |
| | | toc.receivable_deposit receivableDeposit, |
| | | toc.pay_money payMoney, |
| | | (CASE WHEN null = toc.change_receivable_money or toc.change_receivable_money = 0 THEN toc.receivable_money ELSE toc.change_receivable_money END) relReceiveMoney, |
| | | (CASE WHEN null = toc.change_receivable_money or toc.change_receivable_money = 0 THEN toc.receivable_money ELSE |
| | | toc.change_receivable_money END) relReceiveMoney, |
| | | CASE toc.pay_type WHEN 1 THEN toc.pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END receiveMoney, |
| | | (CASE WHEN null = toc.change_receivable_money or toc.change_receivable_money = 0 THEN toc.receivable_money ELSE toc.change_receivable_money END) - (CASE toc.pay_type WHEN 1 THEN toc.pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END) unPaidMoney, |
| | | (CASE WHEN null = toc.change_receivable_money or toc.change_receivable_money = 0 THEN toc.receivable_money ELSE |
| | | toc.change_receivable_money END) - (CASE toc.pay_type WHEN 1 THEN toc.pay_money WHEN 2 THEN |
| | | IFNULL(toc.offline_pay_money,0) END) unPaidMoney, |
| | | toc.order_remark orderRemark, |
| | | toc.create_time createTime, |
| | | toc.order_from orderFrom, |
| | | CASE toc.order_from WHEN 1 THEN '商城订单' WHEN 2 THEN CONCAT('平台秒杀活动(',toc.activity_name,')') WHEN 3 THEN '线下创建' END orderFromDesc, |
| | | CASE toc.order_from WHEN 1 THEN '商城订单' WHEN 2 THEN CONCAT('平台秒杀活动(',toc.activity_name,')') WHEN 3 THEN |
| | | '线下创建' END orderFromDesc, |
| | | toc.activity_name activityName |
| | | FROM t_order toc |
| | | WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} and if(toc.order_from = 1, 1 = 1, toc.order_status = 3)<!--临时增加过滤--> |
| | | WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} |
| | | <if test="param.memberUserId != null and param.memberUserId != ''"> |
| | | AND toc.user_id = #{param.memberUserId} |
| | | </if> |
| | | <if test="param.type != null and param.type ==0 "> |
| | | AND toc.order_status = 0 |
| | | </if> |
| | | <if test="param.type != null and param.type ==1 "> |
| | | AND (toc.order_status = 2 OR toc.order_status = 3) |
| | | AND toc.order_status in(0, 2, 3) |
| | | </if> |
| | | <if test="param.type != null and param.type ==2 "> |
| | | AND toc.order_status = 2 |
| | |
| | | package com.ruoyi.shop.controller.business; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.shop.domain.dto.*; |
| | | import com.ruoyi.shop.domain.pojo.shop.ShopRelUser; |
| | | import com.ruoyi.shop.domain.vo.MerAgencyPageVo; |
| | | import com.ruoyi.shop.domain.vo.MerShopCertificateListVo; |
| | | import com.ruoyi.shop.domain.vo.MerShopSuggestVo; |
| | | import com.ruoyi.shop.domain.vo.MerchantBasicdataSettlementVo; |
| | | import com.ruoyi.shop.domain.vo.*; |
| | | import com.ruoyi.shop.service.shop.*; |
| | | import com.ruoyi.system.api.domain.dto.*; |
| | | import com.ruoyi.system.api.domain.dto.MerBaseDto; |
| | | import com.ruoyi.system.api.domain.dto.MerBaseGetDto; |
| | | import com.ruoyi.system.api.domain.dto.MerEditUserDto; |
| | | import com.ruoyi.system.api.domain.dto.MerPageDto; |
| | | import com.ruoyi.system.api.domain.poji.shop.Shop; |
| | | import com.ruoyi.system.api.domain.poji.shop.ShopAppointableTime; |
| | | import com.ruoyi.system.api.domain.poji.shop.ShopNonAppointableTime; |
| | | import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo; |
| | | import com.ruoyi.system.api.domain.vo.MerStaffInfoVo; |
| | | import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiImplicitParam; |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.Comparator; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author jqs34 |
| | |
| | | |
| | | @Resource |
| | | private ShopCertificateService shopCertificateService; |
| | | |
| | | |
| | | @Resource |
| | | private ShopStaffService shopStaffService; |
| | | |
| | | |
| | | @Resource |
| | | private ShopRelUserService shopRelUserService; |
| | | |
| | | |
| | | @Resource |
| | | private ShopSuggestService shopSuggestService; |
| | | |
| | | |
| | | @Resource |
| | | private ShopNonAppointableTimeService shopNonAppointableTimeService; |
| | | |
| | | @Resource |
| | | private ShopAppointableTimeService shopAppointableTimeService; |
| | | |
| | | |
| | | /** |
| | | * 未完成实际统计 |
| | | * |
| | | * @param merBaseDto |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "/getMerHomeTotal", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取商户端商业统计") |
| | | @ApiOperation(value = "获取商户端商业统计【2.0】") |
| | | public R<MerHomeShopTotalVo> getMerHomeTotal(@RequestBody MerBaseDto merBaseDto) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | merBaseDto.setUserId(userId); |
| | |
| | | shopCertificateService.deleteShopCertificate(Long.valueOf(merBaseGetDto.getId())); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/getShopStaffInfo", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取员工信息") |
| | | public R<MerStaffInfoVo> getShopStaffInfo() { |
| | | @ApiOperation(value = "获取员工信息【2.0】") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(value = "当前商户id", name = "shopId", required = true, dataType = "Long", paramType = "query") |
| | | }) |
| | | public R<MerStaffInfoVo> getShopStaffInfo(@RequestParam("shopId") Long shopId) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | ShopRelUser shopRelUser = shopRelUserService.getByUserId(userId); |
| | | Shop shop = shopService.getByShopId(shopRelUser.getShopId()); |
| | | MerStaffInfoVo merStaffInfoVo = shopStaffService.getShopStaffInfo(userId,shop); |
| | | Shop shop = shopService.getByShopId(shopId); |
| | | MerStaffInfoVo merStaffInfoVo = shopStaffService.getShopStaffInfo(userId, shop); |
| | | return R.ok(merStaffInfoVo); |
| | | } |
| | | |
| | |
| | | shopSuggestService.suggest(merShopSuggestDto); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | @RequestMapping(value = "/listShopByShop", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取商户下属代理商") |
| | | public R<List<MgtSimpleShopVo>> listShopByShop(@RequestBody MerBaseDto merBaseDto) |
| | | { |
| | | public R<List<MgtSimpleShopVo>> listShopByShop(@RequestBody MerBaseDto merBaseDto) { |
| | | List<MgtSimpleShopVo> mgtShopListSimpleVos = shopService.listShopByShop(merBaseDto.getShopId()); |
| | | return R.ok(mgtShopListSimpleVos); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | @RequestMapping(value = "/getShopMerchantBasicDataSettlement", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取提现记录(汇付天下)") |
| | | public R<List<MerchantBasicdataSettlementVo>> getMerchantBasicDataSettlement(@Validated @RequestBody MerchantBasicdataSettlementDto mgtShopShareRatioSetDto){ |
| | | public R<List<MerchantBasicdataSettlementVo>> getMerchantBasicDataSettlement(@Validated @RequestBody MerchantBasicdataSettlementDto mgtShopShareRatioSetDto) { |
| | | return shopService.getMerchantBasicDataSettlement(mgtShopShareRatioSetDto); |
| | | } |
| | | |
| | | @RequestMapping(value = "/getUserShopList", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取切换门店列表【2.0】") |
| | | public R<List<Shop>> getUserShopList() { |
| | | List<ShopRelUser> shopRelUsers = shopRelUserService.getByUserId(SecurityUtils.getUserId()); |
| | | shopRelUsers.sort(Comparator.comparing(ShopRelUser::getIsDefault)); |
| | | List<Shop> collect = shopRelUsers.stream().map(shopRelUser -> { |
| | | Shop shop = shopService.getById(shopRelUser.getShopId()); |
| | | return shop; |
| | | }).collect(Collectors.toList()); |
| | | return R.ok(collect); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/getShopReservationConfig/{shopId}", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取门店预约管理配置【2.0】") |
| | | public R<ShopReservationConfigVo> getShopReservationConfig(@PathVariable("shopId") Long shopId) { |
| | | Shop shop = shopService.getById(shopId); |
| | | Integer subscribe = shop.getSubscribe(); |
| | | ShopReservationConfigVo vo = new ShopReservationConfigVo(); |
| | | vo.setSubscribe(subscribe); |
| | | List<ShopNonAppointableTime> list = shopNonAppointableTimeService.list(new LambdaQueryWrapper<ShopNonAppointableTime>().eq(ShopNonAppointableTime::getShopId, shopId) |
| | | .orderByAsc(ShopNonAppointableTime::getNonAppointableStartTime)); |
| | | vo.setUnsubscribeTime(list.stream().map(shopNonAppointableTime -> { |
| | | Map<String, String> map = new HashMap<>(); |
| | | String time = shopNonAppointableTime.getNonAppointableStartTime().format(DateTimeFormatter.ofPattern("MM月dd日 HH:mm")) + "-" + shopNonAppointableTime.getNonAppointableEndTime().format(DateTimeFormatter.ofPattern("HH:mm")); |
| | | map.put("time", time); |
| | | map.put("id", shopNonAppointableTime.getId()); |
| | | return map; |
| | | }).collect(Collectors.toList())); |
| | | return R.ok(vo); |
| | | } |
| | | |
| | | @RequestMapping(value = "/addShopNonAppointableTime", method = RequestMethod.POST) |
| | | @ApiOperation(value = "门店添加不可预约时间段【2.0】") |
| | | public R addShopNonAppointableTime(@RequestBody ShopNonAppointableTimeDto dto) { |
| | | ShopNonAppointableTime shopNonAppointableTime = new ShopNonAppointableTime(); |
| | | shopNonAppointableTime.setShopId(dto.getShopId()); |
| | | shopNonAppointableTime.setNonAppointableStartTime(dto.getNonAppointableStartTime()); |
| | | shopNonAppointableTime.setNonAppointableEndTime(dto.getNonAppointableEndTime()); |
| | | shopNonAppointableTimeService.save(shopNonAppointableTime); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/switchAppointment/{shopId}/{subscribe}", method = RequestMethod.POST) |
| | | @ApiOperation(value = "开关门店预约配置【2.0】") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(value = "门店id", name = "shopId", required = true, dataType = "Long", paramType = "path"), |
| | | @ApiImplicitParam(value = "预约开关(0=关,1=开)", name = "subscribe", required = true, dataType = "Integer", paramType = "path") |
| | | }) |
| | | public R switchAppointment(@PathVariable("shopId") Long shopId, @PathVariable("subscribe") Integer subscribe) { |
| | | Shop shop = shopService.getById(shopId); |
| | | shop.setSubscribe(subscribe); |
| | | shopService.updateById(shop); |
| | | return R.ok(); |
| | | } |
| | | |
| | | @RequestMapping(value = "/getShopAppointableTimeList", method = RequestMethod.POST) |
| | | @ApiOperation(value = "商户获取预约列表【2.0】") |
| | | public R<Page<ShopAppointableTimeListVo>> getShopAppointableTimeList(@RequestBody ShopAppointableTimeListDto dto) { |
| | | Page<ShopAppointableTimeListVo> page = new Page<>(); |
| | | page.setSize(dto.getPageSize()); |
| | | page.setCurrent(dto.getPageNum()); |
| | | List<ShopAppointableTimeListVo> shopAppointableTimeList = shopAppointableTimeService.getShopAppointableTimeList(page, dto); |
| | | return R.ok(page.setRecords(shopAppointableTimeList)); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/confirmReservation/{id}", method = RequestMethod.POST) |
| | | @ApiOperation(value = "商户确认预约【2.0】") |
| | | public R confirmReservation(@PathVariable("id") String id) { |
| | | ShopAppointableTime shopAppointableTime = shopAppointableTimeService.getById(id); |
| | | if (null == shopAppointableTime) { |
| | | return R.fail("预约不存在"); |
| | | } |
| | | if (1 != shopAppointableTime.getStatus()) { |
| | | return R.fail("确认预约失败"); |
| | | } |
| | | shopAppointableTime.setStatus(2); |
| | | shopAppointableTimeService.updateById(shopAppointableTime); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/cancelReservation", method = RequestMethod.POST) |
| | | @ApiOperation(value = "商户取消预约【2.0】") |
| | | public R cancelReservation(@RequestBody CancelReservationDto dto) { |
| | | ShopAppointableTime shopAppointableTime = shopAppointableTimeService.getById(dto.getId()); |
| | | if (null == shopAppointableTime) { |
| | | return R.fail("预约不存在"); |
| | | } |
| | | if (0 == shopAppointableTime.getStatus()) { |
| | | return R.fail("不能重复操作"); |
| | | } |
| | | shopAppointableTime.setStatus(0); |
| | | shopAppointableTime.setReason(dto.getReason()); |
| | | shopAppointableTimeService.updateById(shopAppointableTime); |
| | | return R.ok(); |
| | | } |
| | | |
| | | @RequestMapping(value = "/getMyShopList", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取当前账户可切换的门店列表【2.0】") |
| | | public R<List<Shop>> getMyShopList() { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | List<ShopRelUser> shopRelUser = shopRelUserService.getByUserId(userId); |
| | | List<Shop> collect = shopRelUser.stream().map(e -> { |
| | | Shop shop = shopService.getById(e.getShopId()); |
| | | return shop; |
| | | }).collect(Collectors.toList()); |
| | | return R.ok(collect); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | package com.ruoyi.shop.controller.console; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.ruoyi.common.core.constant.CacheConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | |
| | | import com.ruoyi.system.api.constant.AppErrorConstant; |
| | | import com.ruoyi.system.api.domain.dto.*; |
| | | import com.ruoyi.system.api.domain.poji.shop.Shop; |
| | | import com.ruoyi.system.api.domain.vo.ShopProportionVo; |
| | | import com.ruoyi.system.api.domain.poji.sys.SysUser; |
| | | import com.ruoyi.system.api.domain.vo.*; |
| | | import com.ruoyi.system.api.model.QwH5LoginVo; |
| | |
| | | import java.util.List; |
| | | import java.util.Optional; |
| | | import java.util.stream.Collectors; |
| | | import java.util.stream.Stream; |
| | | |
| | | /** |
| | | * @author jqs34 |
| | |
| | | @PostMapping("/getShopByUserId") |
| | | public R<ShopRelUserVo> getShopByUserId(@RequestBody Long userId) |
| | | { |
| | | ShopRelUser shopRelUser = shopRelUserService.getByUserId(userId); |
| | | List<ShopRelUser> shopRelUser = shopRelUserService.getByUserId(userId); |
| | | Optional.ofNullable(shopRelUser).orElseThrow(() -> new ServiceException("未查询到用户关联商户")); |
| | | ShopRelUserVo shopRelUserVo = new ShopRelUserVo(); |
| | | shopRelUserVo.setShopId(shopRelUser.getShopId()); |
| | | shopRelUserVo.setUserName(shopRelUser.getUserName()); |
| | | ShopRelUser shopRelUser1 = shopRelUser.stream().filter(s -> s.getIsDefault() == 1).collect(Collectors.toList()).get(0); |
| | | shopRelUserVo.setShopId(shopRelUser1.getShopId()); |
| | | shopRelUserVo.setUserName(shopRelUser1.getUserName()); |
| | | Shop shop = shopService.getById(shopRelUser1.getShopId()); |
| | | shopRelUserVo.setShopName(shop.getShopName()); |
| | | shopRelUserVo.setShopNum(shopRelUser.size()); |
| | | return R.ok(shopRelUserVo); |
| | | } |
| | | |
| | | |
| | | @PostMapping("/getShopByBelongUserId") |
| | | public R<ShopRelUserVo> getShopByBelongUserId(@RequestBody Long userId) |
| | | { |
| | | public R<ShopRelUserVo> getShopByBelongUserId(@RequestBody Long userId) { |
| | | List<Shop> shopList = shopService.getShopByBelongUserId(userId); |
| | | Optional.ofNullable(shopList.get(0)).orElseThrow(() -> new ServiceException("未查询到商户信息")); |
| | | ShopRelUserVo shopRelUserVo = new ShopRelUserVo(); |
| | |
| | | public List<Shop> getShopBySysUserIds(@RequestBody BoardMemberTotalDto boardMemberTotalDto){ |
| | | return shopService.getShopBySysUserIds(boardMemberTotalDto.getUserIds()); |
| | | } |
| | | |
| | | /** |
| | | * 根据经销商id查询加盟商ids |
| | | * @param shopId |
| | | * @return |
| | | */ |
| | | @PostMapping("/shop/getFranchiseeIdsBYDealerId") |
| | | List<Shop> getFranchiseeIdsBYDealerId(@RequestBody Long shopId){ |
| | | return shopService.getFranchiseeIdsBYDealerId(shopId); |
| | | } |
| | | } |
| | |
| | | package com.ruoyi.shop.controller.miniapp; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.shop.domain.dto.AppNearbyShopDto; |
| | | import com.ruoyi.shop.domain.dto.MyAppointmentListDto; |
| | | import com.ruoyi.shop.domain.vo.AppNearbyShopVo; |
| | | import com.ruoyi.shop.domain.vo.AppShopInfoVo; |
| | | import com.ruoyi.shop.domain.vo.MyAppointmentListVo; |
| | | import com.ruoyi.shop.service.shop.ShopAppointableTimeService; |
| | | import com.ruoyi.shop.service.shop.ShopNonAppointableTimeService; |
| | | import com.ruoyi.shop.service.shop.ShopService; |
| | | import com.ruoyi.system.api.domain.dto.AppBaseGetDto; |
| | | import com.ruoyi.system.api.domain.dto.AppointmentTimeDto; |
| | | import com.ruoyi.system.api.domain.dto.ShopAppointmentTimeDto; |
| | | import com.ruoyi.system.api.domain.poji.member.Member; |
| | | import com.ruoyi.system.api.domain.poji.shop.ShopAppointableTime; |
| | | import com.ruoyi.system.api.domain.poji.shop.ShopNonAppointableTime; |
| | | import com.ruoyi.system.api.service.RemoteMemberService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.log4j.Log4j2; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RequestMethod; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author jqs34 |
| | |
| | | @RequestMapping("/app/home") |
| | | @Log4j2 |
| | | public class AppHomeController { |
| | | |
| | | |
| | | |
| | | @Resource |
| | | private RemoteMemberService memberService; |
| | | |
| | | |
| | | |
| | | @Resource |
| | | private ShopService shopService; |
| | | |
| | | |
| | | @Resource |
| | | private ShopNonAppointableTimeService shopNonAppointableTimeService; |
| | | |
| | | @Resource |
| | | private ShopAppointableTimeService shopAppointableTimeService; |
| | | |
| | | |
| | | @RequestMapping(value = "/getNearbyShop", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取最近商户") |
| | | public R<AppNearbyShopVo> getNearbyShop(@RequestBody AppNearbyShopDto appNearbyShopDto) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | Member member = null; |
| | | if(userId!=null){ |
| | | if (userId != null) { |
| | | member = memberService.getMember(userId).getData(); |
| | | } |
| | | log.info("获取最近商户:userId=" + userId + "&appNearbyShopDto=" + JSON.toJSONString(appNearbyShopDto)); |
| | |
| | | AppNearbyShopVo appNearbyShopVo = shopService.getNearbyShop(appNearbyShopDto,member); |
| | | return R.ok(appNearbyShopVo); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | @RequestMapping(value = "/getShopInfo", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取商户详情") |
| | | public R<AppShopInfoVo> getShopInfo(@RequestBody AppBaseGetDto appBaseGetDto) { |
| | | AppShopInfoVo appShopInfoVo = shopService.getAppShopInfo(Long.valueOf(appBaseGetDto.getId())); |
| | | return R.ok(appShopInfoVo); |
| | | } |
| | | |
| | | |
| | | |
| | | @RequestMapping(value = "/getShopAppointmentTime", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取商户不可预约时间段【2.0】") |
| | | public R<List<ShopNonAppointableTime>> getShopAppointmentTime(@RequestBody ShopAppointmentTimeDto dto) { |
| | | List<ShopNonAppointableTime> list = shopNonAppointableTimeService.list(new QueryWrapper<ShopNonAppointableTime>().eq("shop_id", dto.getId()) |
| | | .last(" and '" + dto.getDate() + "' = DATE(non_appointable_start_time) order by non_appointable_start_time")); |
| | | return R.ok(list); |
| | | } |
| | | |
| | | @RequestMapping(value = "/appointmentTime", method = RequestMethod.POST) |
| | | @ApiOperation(value = "门店详情预约操作【2.0】") |
| | | public R appointmentTime(@RequestBody AppointmentTimeDto dto) { |
| | | ShopAppointableTime one = shopAppointableTimeService.getOne(new LambdaQueryWrapper<ShopAppointableTime>().eq(ShopAppointableTime::getShopId, dto.getShopId()) |
| | | .last(" and DATE_FORMAT(appointable_time, '%Y-%m-%d %H:%i') = '" + dto.getTime() + "'")); |
| | | if (null != one) { |
| | | return R.fail("不能重复预约"); |
| | | } |
| | | Long userId = SecurityUtils.getUserId(); |
| | | one = new ShopAppointableTime(); |
| | | one.setShopId(dto.getShopId()); |
| | | one.setAppointableTime(LocalDateTime.parse(dto.getTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))); |
| | | one.setUserId(userId); |
| | | one.setStatus(1); |
| | | one.setCreateTime(LocalDateTime.now()); |
| | | shopAppointableTimeService.save(one); |
| | | return R.ok(); |
| | | } |
| | | |
| | | @RequestMapping(value = "/getMyAppointmentList", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取我的预约列表【2.0】") |
| | | public R<Page<MyAppointmentListVo>> getMyAppointmentList(@RequestBody MyAppointmentListDto dto) { |
| | | Page<MyAppointmentListVo> page = new Page<>(); |
| | | page.setSize(dto.getPageSize()); |
| | | page.setCurrent(dto.getPageNum()); |
| | | List<MyAppointmentListVo> myAppointmentListVos = shopAppointableTimeService.pageMyAppointmentList(page, dto); |
| | | return R.ok(page.setRecords(myAppointmentListVos)); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/cancelAppointmentTime/{id}", method = RequestMethod.POST) |
| | | @ApiOperation(value = "取消预约【2.0】") |
| | | public R cancelAppointmentTime(@PathVariable("id") String id) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | ShopAppointableTime one = shopAppointableTimeService.getById(id); |
| | | if (null == one) { |
| | | return R.fail("预约不存在"); |
| | | } |
| | | if (!one.getUserId().equals(userId)) { |
| | | return R.fail("不能取消别人的预约"); |
| | | } |
| | | one.setStatus(0); |
| | | shopAppointableTimeService.updateById(one); |
| | | return R.ok(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.shop.domain.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/3 16:08 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class CancelReservationDto { |
| | | @ApiModelProperty(value = "预约id") |
| | | private String id; |
| | | @ApiModelProperty(value = "取消原因") |
| | | private String reason; |
| | | } |
| | |
| | | @ApiModelProperty(value="店主联系方式") |
| | | private String shopownerPhone; |
| | | |
| | | @ApiModelProperty(value="签约省区域") |
| | | @ApiModelProperty(value="签约省区域(多个以分号相隔)") |
| | | private String signProvinceCode; |
| | | |
| | | @ApiModelProperty(value="签约市区域") |
| | | @ApiModelProperty(value="签约市区域(多个以分号相隔)") |
| | | private String signCityCode; |
| | | |
| | | @ApiModelProperty(value="签约区域") |
| | | @ApiModelProperty(value="签约区域(多个以分号相隔)") |
| | | private String signAreaCode; |
| | | |
| | | @ApiModelProperty(value="签约区域全称") |
| | | @ApiModelProperty(value="签约区域全称(多个以分号相隔)") |
| | | private String signAreaName; |
| | | |
| | | @ApiModelProperty(value="商户服务电话") |
| | |
| | | |
| | | @ApiModelProperty(value="商户banner 多个用,隔开") |
| | | private String shopBanners; |
| | | |
| | | @ApiModelProperty(value="小鹅通讲师id 多个用,隔开") |
| | | private String xiaoeUserId; |
| | | |
| | | @ApiModelProperty("修改价格权限(0=关,1=开)") |
| | | private Integer modifyPricePermission; |
| | | } |
New file |
| | |
| | | package com.ruoyi.shop.domain.dto; |
| | | |
| | | import com.ruoyi.system.api.domain.dto.MgtBaseDto; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/27 14:29 |
| | | */ |
| | | @ApiModel |
| | | @Data |
| | | public class MyAppointmentListDto extends MgtBaseDto { |
| | | @ApiModelProperty("页码,首页1") |
| | | private Integer pageNum; |
| | | @ApiModelProperty("页查询条数") |
| | | private Integer pageSize; |
| | | @ApiModelProperty("状态(0=已取消,1=待确认,2=等待中,3=已结束)") |
| | | private Integer status; |
| | | } |
New file |
| | |
| | | package com.ruoyi.shop.domain.dto; |
| | | |
| | | import com.ruoyi.system.api.domain.dto.MgtPageDto; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/3 15:17 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class ShopAppointableTimeListDto extends MgtPageDto { |
| | | @ApiModelProperty(value = "商户id") |
| | | private Integer shopId; |
| | | @ApiModelProperty(value = "状态(0=已取消,1=待确认,2=等待中,3=已结束)") |
| | | private Integer status; |
| | | } |
New file |
| | |
| | | package com.ruoyi.shop.domain.dto; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.time.LocalDateTime; /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/3 14:59 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class ShopNonAppointableTimeDto { |
| | | @ApiModelProperty("门店id") |
| | | private Integer shopId; |
| | | @ApiModelProperty("不可预约开始时间(yyyy-MM-dd HH:mm:ss)") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private LocalDateTime nonAppointableStartTime; |
| | | @ApiModelProperty("不可预约结束时间(yyyy-MM-dd HH:mm:ss)") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private LocalDateTime nonAppointableEndTime; |
| | | } |
| | |
| | | package com.ruoyi.shop.domain.pojo.shop; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.baomidou.mybatisplus.activerecord.Model; |
| | | 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 lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | @TableField("shop_id") |
| | | private Long shopId; |
| | | /** |
| | | * 默认门店(0=否,1=是) |
| | | */ |
| | | @TableField("is_default") |
| | | private Integer isDefault; |
| | | /** |
| | | * 用户id |
| | | */ |
| | | @TableField("user_id") |
| | |
| | | @ApiModelProperty(value="证书list") |
| | | private List<ShopCertificate> shopCertificateList; |
| | | |
| | | @ApiModelProperty(value="小鹅通讲师id 多个用,隔开") |
| | | private String xiaoeUserId; |
| | | |
| | | @ApiModelProperty("修改价格权限(0=关,1=开)") |
| | | private Integer modifyPricePermission; |
| | | |
| | | |
| | | |
New file |
| | |
| | | package com.ruoyi.shop.domain.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/27 14:32 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class MyAppointmentListVo { |
| | | @ApiModelProperty(value = "预约id") |
| | | private String id; |
| | | @ApiModelProperty(value = "预约时间") |
| | | private String appointmentTime; |
| | | @ApiModelProperty(value = "预约状态(0=已取消,1=待确认,2=等待中,3=已结束)") |
| | | private Integer status; |
| | | @ApiModelProperty(value = "预约门店") |
| | | private String shopName; |
| | | @ApiModelProperty(value = "商家取消原因") |
| | | private String cancelReason; |
| | | } |
New file |
| | |
| | | package com.ruoyi.shop.domain.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/3 15:19 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class ShopAppointableTimeListVo { |
| | | @ApiModelProperty("预约数据id") |
| | | private String id; |
| | | @ApiModelProperty("预约时间") |
| | | private LocalDateTime appointableTime; |
| | | @ApiModelProperty("预约状态(0=已取消,1=待确认,2=等待中,3=已结束)") |
| | | private Integer status; |
| | | @ApiModelProperty("预约人") |
| | | private String userName; |
| | | @ApiModelProperty("预约人手机号") |
| | | private String mobile; |
| | | @ApiModelProperty("预约人性别") |
| | | private String sex; |
| | | } |
New file |
| | |
| | | package com.ruoyi.shop.domain.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/3 14:26 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class ShopReservationConfigVo { |
| | | @ApiModelProperty("预约开关(0=关,1=开)") |
| | | private Integer subscribe; |
| | | @ApiModelProperty("不可预约时段") |
| | | private List<Map<String, String>> unsubscribeTime; |
| | | } |
New file |
| | |
| | | package com.ruoyi.shop.mapper.shop; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.shop.domain.dto.ShopAppointableTimeListDto; |
| | | import com.ruoyi.shop.domain.vo.MyAppointmentListVo; |
| | | import com.ruoyi.shop.domain.vo.ShopAppointableTimeListVo; |
| | | import com.ruoyi.system.api.domain.poji.shop.ShopAppointableTime; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 15:13 |
| | | */ |
| | | public interface ShopAppointableTimeMapper extends BaseMapper<ShopAppointableTime> { |
| | | |
| | | |
| | | /** |
| | | * 分页查询我的预约列表 |
| | | * |
| | | * @param page |
| | | * @param userId |
| | | * @param status |
| | | * @return |
| | | */ |
| | | List<MyAppointmentListVo> pageMyAppointmentList(Page<MyAppointmentListVo> page, @Param("userId") Long userId, @Param("status") Integer status); |
| | | |
| | | |
| | | /** |
| | | * 商户端获取预约列表数据 |
| | | * |
| | | * @param page |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | List<ShopAppointableTime> getShopAppointableTimeList(Page<ShopAppointableTimeListVo> page, @Param("item") ShopAppointableTimeListDto dto); |
| | | |
| | | |
| | | /** |
| | | * 定时任务修改预约状态 |
| | | */ |
| | | void taskUpdateStatus(); |
| | | } |
| | |
| | | * @return List<Long> |
| | | */ |
| | | List<Shop> listShopByCityCode(@Param("cityCodes")List<String> cityCodes); |
| | | |
| | | List<Shop> getFranchiseeIdsBYDealerId(@Param("shopId")Long shopId); |
| | | } |
New file |
| | |
| | | package com.ruoyi.shop.mapper.shop; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.system.api.domain.poji.shop.ShopNonAppointableTime; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 14:31 |
| | | */ |
| | | public interface ShopNonAppointableTimeMapper extends BaseMapper<ShopNonAppointableTime> { |
| | | |
| | | |
| | | /** |
| | | * 每天凌晨3点删除3天前的数据 |
| | | */ |
| | | void taskDelData(); |
| | | } |
New file |
| | |
| | | package com.ruoyi.shop.service.impl.shop; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.shop.domain.dto.MyAppointmentListDto; |
| | | import com.ruoyi.shop.domain.dto.ShopAppointableTimeListDto; |
| | | import com.ruoyi.shop.domain.vo.MyAppointmentListVo; |
| | | import com.ruoyi.shop.domain.vo.ShopAppointableTimeListVo; |
| | | import com.ruoyi.shop.mapper.shop.ShopAppointableTimeMapper; |
| | | import com.ruoyi.shop.service.shop.ShopAppointableTimeService; |
| | | import com.ruoyi.system.api.domain.poji.member.Member; |
| | | import com.ruoyi.system.api.domain.poji.shop.ShopAppointableTime; |
| | | import com.ruoyi.system.api.service.RemoteMemberService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 15:15 |
| | | */ |
| | | @Service |
| | | public class ShopAppointableTimeServiceImpl extends ServiceImpl<ShopAppointableTimeMapper, ShopAppointableTime> implements ShopAppointableTimeService { |
| | | |
| | | @Resource |
| | | private RemoteMemberService remoteMemberService; |
| | | |
| | | |
| | | /** |
| | | * 分页查询我的预约 |
| | | * |
| | | * @param page |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<MyAppointmentListVo> pageMyAppointmentList(Page<MyAppointmentListVo> page, MyAppointmentListDto dto) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | return this.baseMapper.pageMyAppointmentList(page, userId, dto.getStatus()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 商户端获取预约列表 |
| | | * |
| | | * @param page |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<ShopAppointableTimeListVo> getShopAppointableTimeList(Page<ShopAppointableTimeListVo> page, ShopAppointableTimeListDto dto) { |
| | | List<ShopAppointableTime> shopAppointableTimeList = this.baseMapper.getShopAppointableTimeList(page, dto); |
| | | List<ShopAppointableTimeListVo> list = new ArrayList<>(); |
| | | shopAppointableTimeList.forEach(shopAppointableTime -> { |
| | | ShopAppointableTimeListVo shopAppointableTimeListVo = new ShopAppointableTimeListVo(); |
| | | shopAppointableTimeListVo.setId(shopAppointableTime.getId()); |
| | | shopAppointableTimeListVo.setAppointableTime(shopAppointableTime.getAppointableTime()); |
| | | shopAppointableTimeListVo.setStatus(shopAppointableTime.getStatus()); |
| | | Member member = remoteMemberService.getMember(shopAppointableTime.getUserId()).getData(); |
| | | shopAppointableTimeListVo.setUserName(member.getRealName()); |
| | | shopAppointableTimeListVo.setMobile(member.getMobile()); |
| | | shopAppointableTimeListVo.setSex(member.getGender() == 1 ? "女" : member.getGender() == 0 ? "男" : "未知"); |
| | | list.add(shopAppointableTimeListVo); |
| | | }); |
| | | return list; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 定时任务修改预约状态 |
| | | */ |
| | | @Override |
| | | public void taskUpdateStatus() { |
| | | this.baseMapper.taskUpdateStatus(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.shop.service.impl.shop; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.shop.mapper.shop.ShopNonAppointableTimeMapper; |
| | | import com.ruoyi.shop.service.shop.ShopNonAppointableTimeService; |
| | | import com.ruoyi.system.api.domain.poji.shop.ShopNonAppointableTime; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 14:31 |
| | | */ |
| | | @Service |
| | | public class ShopNonAppointableTimeServiceImpl extends ServiceImpl<ShopNonAppointableTimeMapper, ShopNonAppointableTime> implements ShopNonAppointableTimeService { |
| | | |
| | | |
| | | /** |
| | | * 每天凌晨3点删除3天前的数据 |
| | | */ |
| | | @Override |
| | | public void taskDelData() { |
| | | this.baseMapper.taskDelData(); |
| | | } |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.shop.domain.pojo.shop.ShopRelUser; |
| | | import com.ruoyi.shop.mapper.shop.ShopRelUserMapper; |
| | | import com.ruoyi.shop.service.shop.ShopRelUserService; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | |
| | | |
| | | |
| | | /** |
| | | * |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public ShopRelUser getByUserId(Long userId){ |
| | | public List<ShopRelUser> getByUserId(Long userId) { |
| | | LambdaQueryWrapper<ShopRelUser> queryWrapper = Wrappers.lambdaQuery(); |
| | | queryWrapper.eq(ShopRelUser::getDelFlag, 0).eq(ShopRelUser::getUserId, userId); |
| | | return this.getOne(queryWrapper,false); |
| | | return this.list(queryWrapper); |
| | | } |
| | | |
| | | /** |
| | |
| | | package com.ruoyi.shop.service.impl.shop; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsResult; |
| | | import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsStatusResult; |
| | | import com.github.binarywang.wxpay.bean.ecommerce.ProfitSharingReceiverRequest; |
| | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.core.utils.DateUtils; |
| | | import com.ruoyi.common.core.utils.ExceptionUtil; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.core.utils.bean.BeanUtils; |
| | | import com.ruoyi.common.core.utils.uuid.IdUtils; |
| | |
| | | import com.ruoyi.system.api.domain.poji.config.SysTag; |
| | | import com.ruoyi.system.api.domain.poji.member.Member; |
| | | import com.ruoyi.system.api.domain.poji.shop.Shop; |
| | | import com.ruoyi.system.api.domain.poji.shop.ShopAppointableTime; |
| | | import com.ruoyi.system.api.domain.poji.sys.SysUser; |
| | | import com.ruoyi.system.api.domain.vo.*; |
| | | import com.ruoyi.system.api.service.*; |
| | | import lombok.extern.log4j.Log4j2; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.rmi.ServerException; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | |
| | | |
| | | @Resource |
| | | private RedisService redisService; |
| | | |
| | | |
| | | @Resource |
| | | private WechatPayUtils wechatPayUtils; |
| | | |
| | | |
| | | @Resource |
| | | private ShopDetailService shopDetailService; |
| | | |
| | | |
| | | @Resource |
| | | private RemoteUserService remoteUserService; |
| | | |
| | | |
| | | @Resource |
| | | private ShopAppointableTimeService shopAppointableTimeService; |
| | | |
| | | @Value("${callback_path}") |
| | | private String callback_path; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 获取商户详情 |
| | | * |
| | |
| | | } |
| | | return appShopInfoVo; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 创建商户 |
| | | * |
| | | * @param mgtEditShopDto |
| | | */ |
| | | @Override |
| | | public void createShop(MgtEditShopDto mgtEditShopDto){ |
| | | public void createShop(MgtEditShopDto mgtEditShopDto) { |
| | | Shop shop = new Shop(); |
| | | Boolean newShop = false; |
| | | BigDecimal zeroBig = BigDecimal.ZERO; |
| | | //验证关联账号唯一 |
| | | String relUserIds = mgtEditShopDto.getRelUserIds(); |
| | | if(StringUtils.isNotBlank(relUserIds)) { |
| | | if(relUserIds.startsWith(",")){ |
| | | relUserIds = relUserIds.substring(1); |
| | | } |
| | | String[] relUserIdArray = relUserIds.split(","); |
| | | ShopRelUser shopRelUser; |
| | | Long userId; |
| | | if(mgtEditShopDto.getShopId()!=null){ |
| | | for (String str : relUserIdArray) { |
| | | userId = Long.valueOf(str); |
| | | shopRelUser = shopRelUserService.getByUserId(userId); |
| | | if(shopRelUser!=null&&!shopRelUser.getShopId().equals(mgtEditShopDto.getShopId())){ |
| | | throw new ServiceException(AppErrorConstant.SHOP_USER_DOUBLE); |
| | | } |
| | | } |
| | | }else { |
| | | for (String str : relUserIdArray) { |
| | | userId = Long.valueOf(str); |
| | | shopRelUser = shopRelUserService.getByUserId(userId); |
| | | if(shopRelUser!=null){ |
| | | throw new ServiceException(AppErrorConstant.SHOP_USER_DOUBLE); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | // if(StringUtils.isNotBlank(relUserIds)) { |
| | | // if(relUserIds.startsWith(",")){ |
| | | // relUserIds = relUserIds.substring(1); |
| | | // } |
| | | // String[] relUserIdArray = relUserIds.split(","); |
| | | // ShopRelUser shopRelUser; |
| | | // Long userId; |
| | | // if(mgtEditShopDto.getShopId()!=null){ |
| | | // for (String str : relUserIdArray) { |
| | | // userId = Long.valueOf(str); |
| | | // shopRelUser = shopRelUserService.getByUserId(userId); |
| | | // if(shopRelUser!=null&&!shopRelUser.getShopId().equals(mgtEditShopDto.getShopId())){ |
| | | // throw new ServiceException(AppErrorConstant.SHOP_USER_DOUBLE); |
| | | // } |
| | | // } |
| | | // }else { |
| | | // for (String str : relUserIdArray) { |
| | | // userId = Long.valueOf(str); |
| | | // shopRelUser = shopRelUserService.getByUserId(userId); |
| | | // if(shopRelUser!=null){ |
| | | // throw new ServiceException(AppErrorConstant.SHOP_USER_DOUBLE); |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // } |
| | | //验证商户名唯一 |
| | | //Shop shopSame = this.getOne(new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag,0).eq(Shop::getShopName,mgtEditShopDto.getShopName())); |
| | | if(mgtEditShopDto.getShopId()!=null){ |
| | | if (mgtEditShopDto.getShopId() != null) { |
| | | //取消验重 |
| | | /*if(shopSame!=null&&!Objects.equals(shopSame.getShopId(),mgtEditShopDto.getShopId())){ |
| | | throw new ServiceException(AppErrorConstant.SHOP_DOUBLE); |
| | |
| | | staffHomeShopTotalVo.setShopTask(shopTaskCount); |
| | | return staffHomeShopTotalVo; |
| | | } |
| | | |
| | | /** |
| | | * 获取商户端 |
| | | * |
| | | * @param merBaseDto |
| | | * @return |
| | | */ |
| | | @Override |
| | | public MerHomeShopTotalVo getMerHomeTotal(MerBaseDto merBaseDto){ |
| | | public MerHomeShopTotalVo getMerHomeTotal(MerBaseDto merBaseDto) { |
| | | Long userId = merBaseDto.getUserId(); |
| | | MerHomeShopTotalVo merHomeShopTotalVo = new MerHomeShopTotalVo(); |
| | | ShopRelUser shopRelUser = shopRelUserService.getByUserId(userId); |
| | | Long shopId = shopRelUser.getShopId(); |
| | | Long shopId = merBaseDto.getShopId(); |
| | | //如果商户变动刷新token |
| | | if(!shopId.equals(merBaseDto.getShopId())){ |
| | | String userKey = SecurityUtils.getUserKey(); |
| | | redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY+userKey); |
| | | throw new ServiceException("登录状态已过期",401); |
| | | } |
| | | // if(!shopId.equals(merBaseDto.getShopId())){ |
| | | // String userKey = SecurityUtils.getUserKey(); |
| | | // redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY+userKey); |
| | | // throw new ServiceException("登录状态已过期",401); |
| | | // } |
| | | merHomeShopTotalVo.setShopId(shopId); |
| | | Shop shop = this.getById(shopId); |
| | | if(shop.getFrozenFlag()==1){ |
| | | if (shop.getFrozenFlag() == 1) { |
| | | String userKey = SecurityUtils.getUserKey(); |
| | | redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY+userKey); |
| | | throw new ServiceException("商户已被冻结,请联系管理员",401); |
| | | redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + userKey); |
| | | throw new ServiceException("商户已被冻结,请联系管理员", 401); |
| | | } |
| | | merHomeShopTotalVo.setShopType(shop.getShopType()); |
| | | MerHomeShopTotalVo orderVo = remoteOrderService.getMerHomeTotal(merHomeShopTotalVo).getData(); |
| | |
| | | merHomeShopTotalVo.setExplorationSurp(orderVo.getExplorationSurp()); |
| | | merHomeShopTotalVo.setPlatformBirthdayFlag(shop.getPlatformBirthdayFlag()); |
| | | merHomeShopTotalVo.setPlatformCouponFlag(shop.getPlatformCouponFlag()); |
| | | int unHandleReserve = shopAppointableTimeService.count(new LambdaQueryWrapper<ShopAppointableTime>().eq(ShopAppointableTime::getShopId, shopId).eq(ShopAppointableTime::getStatus, 1)); |
| | | merHomeShopTotalVo.setUnHandleReserve(unHandleReserve); |
| | | return merHomeShopTotalVo; |
| | | } |
| | | |
| | |
| | | }).collect(Collectors.toList()); |
| | | return simpleShopVoList; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description 获取用户管理商户 |
| | | * @author jqs |
| | | * @date 2023/7/14 10:00 |
| | | * @param userId |
| | | * @return Shop |
| | | * @return Shop |
| | | * @description 获取用户管理商户 |
| | | * @author jqs |
| | | * @date 2023/7/14 10:00 |
| | | */ |
| | | @Override |
| | | public List<Shop> getShopByBelongUserId(Long userId){ |
| | | public List<Shop> getShopByBelongUserId(Long userId) { |
| | | LambdaQueryWrapper<Shop> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(Shop::getDelFlag,0); |
| | | queryWrapper.eq(Shop::getBelongUserId,userId); |
| | | queryWrapper.eq(Shop::getDelFlag, 0); |
| | | queryWrapper.eq(Shop::getBelongUserId, userId); |
| | | return this.list(queryWrapper); |
| | | } |
| | | |
| | |
| | | List<Shop> list = this.list(queryWrapper); |
| | | return list; |
| | | } |
| | | |
| | | @Override |
| | | public List<Shop> getFranchiseeIdsBYDealerId(Long shopId) { |
| | | return shopMapper.getFranchiseeIdsBYDealerId(shopId); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.shop.service.shop; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.shop.domain.dto.MyAppointmentListDto; |
| | | import com.ruoyi.shop.domain.dto.ShopAppointableTimeListDto; |
| | | import com.ruoyi.shop.domain.vo.MyAppointmentListVo; |
| | | import com.ruoyi.shop.domain.vo.ShopAppointableTimeListVo; |
| | | import com.ruoyi.system.api.domain.poji.shop.ShopAppointableTime; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 15:14 |
| | | */ |
| | | public interface ShopAppointableTimeService extends IService<ShopAppointableTime> { |
| | | |
| | | |
| | | /** |
| | | * 获取用户预约列表 |
| | | * |
| | | * @param page |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | List<MyAppointmentListVo> pageMyAppointmentList(Page<MyAppointmentListVo> page, MyAppointmentListDto dto); |
| | | |
| | | |
| | | /** |
| | | * 商户端获取预约列表 |
| | | * |
| | | * @param page |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | List<ShopAppointableTimeListVo> getShopAppointableTimeList(Page<ShopAppointableTimeListVo> page, ShopAppointableTimeListDto dto); |
| | | |
| | | |
| | | /** |
| | | * 定时任务修改预约状态 |
| | | */ |
| | | void taskUpdateStatus(); |
| | | } |
New file |
| | |
| | | package com.ruoyi.shop.service.shop; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.system.api.domain.poji.shop.ShopNonAppointableTime; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/5/26 14:30 |
| | | */ |
| | | public interface ShopNonAppointableTimeService extends IService<ShopNonAppointableTime> { |
| | | |
| | | |
| | | /** |
| | | * 每天凌晨3点删除3天前的数据 |
| | | */ |
| | | void taskDelData(); |
| | | } |
| | |
| | | package com.ruoyi.shop.service.shop; |
| | | |
| | | import com.ruoyi.shop.domain.pojo.shop.ShopRelUser; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.shop.domain.pojo.shop.ShopRelUser; |
| | | |
| | | import java.util.List; |
| | | |
| | |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | ShopRelUser getByUserId(Long userId); |
| | | List<ShopRelUser> getByUserId(Long userId); |
| | | |
| | | /** |
| | | * 通过用户id删除关联 |
| | |
| | | * @return |
| | | */ |
| | | List<Shop> getShopBySysUserIds(List<Long> userIds); |
| | | |
| | | /** |
| | | * 根据经销商id查询加盟商ids |
| | | * @param shopId |
| | | * @return |
| | | */ |
| | | List<Shop> getFranchiseeIdsBYDealerId(Long shopId); |
| | | } |
New file |
| | |
| | | package com.ruoyi.shop.util; |
| | | |
| | | import com.ruoyi.shop.service.shop.ShopAppointableTimeService; |
| | | import com.ruoyi.shop.service.shop.ShopNonAppointableTimeService; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2025/6/3 16:11 |
| | | */ |
| | | @Component |
| | | public class TaskUtil { |
| | | |
| | | @Resource |
| | | private ShopAppointableTimeService shopAppointableTimeService; |
| | | |
| | | @Resource |
| | | private ShopNonAppointableTimeService shopNonAppointableTimeService; |
| | | |
| | | |
| | | /** |
| | | * 每天3点执行的定时任务 |
| | | */ |
| | | @Scheduled(cron="0 0 3 * * ?") |
| | | public void timingTask(){ |
| | | shopNonAppointableTimeService.taskDelData(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 每分钟执行的定时任务 |
| | | */ |
| | | @Scheduled(cron="0 0/1 * * * ?") |
| | | public void timingTask1(){ |
| | | shopAppointableTimeService.taskUpdateStatus(); |
| | | } |
| | | } |
New file |
| | |
| | | <?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.ruoyi.shop.mapper.shop.ShopAppointableTimeMapper"> |
| | | |
| | | |
| | | <select id="pageMyAppointmentList" resultType="com.ruoyi.shop.domain.vo.MyAppointmentListVo"> |
| | | select * from ( |
| | | select |
| | | a.id, |
| | | DATE_FORMAT(a.appointable_time, '%Y-%m-%d %H:%i') as appointmentTime, |
| | | a.status, |
| | | b.shop_name as shopName, |
| | | a.reason as cancelReason, |
| | | CASE WHEN a.`status` in (1, 2) THEN 1 WHEN a.`status` = 3 THEN 2 ELSE 3 END as sort |
| | | from t_shop_appointable_time a |
| | | left join t_shop b on (a.shop_id = b.shop_id) |
| | | where a.user_id = #{userId} |
| | | <if test="status != null"> |
| | | and a.status = #{status} |
| | | </if> |
| | | ) as aa order by aa.sort, aa.appointmentTime |
| | | </select> |
| | | |
| | | |
| | | |
| | | |
| | | <select id="getShopAppointableTimeList" resultType="com.ruoyi.system.api.domain.poji.shop.ShopAppointableTime"> |
| | | select * from ( |
| | | select |
| | | a.*, |
| | | CASE WHEN a.`status` = 3 THEN 3 WHEN a.`status` = 0 THEN 2 ELSE 1 END as sort |
| | | from t_shop_appointable_time a where shop_id = #{item.shopId} |
| | | <if test="null != item.status"> |
| | | and a.status = #{item.status} |
| | | </if> |
| | | ) as aa order by aa.sort,aa.appointable_time |
| | | </select> |
| | | |
| | | |
| | | |
| | | <update id="taskUpdateStatus"> |
| | | update t_shop_appointable_time set status = 3 where status in (1, 2) and appointment_time < now() |
| | | </update> |
| | | </mapper> |
| | |
| | | <result property="shopSource" column="shop_source" /> |
| | | <result property="frozenFlag" column="frozen_flag" /> |
| | | <result property="cooperativeFlag" column="cooperative_flag" /> |
| | | <result property="modifyPricePermission" column="modify_price_permission" /> |
| | | |
| | | </resultMap> |
| | | |
| | | <sql id="selectShopVo"> |
| | |
| | | <if test="shopSource != null and shopSource != ''"> and shop_source = #{shopSource}</if> |
| | | <if test="frozenFlag != null and frozenFlag != ''"> and frozen_flag = #{frozenFlag}</if> |
| | | <if test="cooperativeFlag != null and cooperativeFlag != ''"> and cooperative_flag = #{cooperativeFlag}</if> |
| | | <if test="modifyPricePermission != null and modifyPricePermission != ''">and modify_price_permission = #{modifyPricePermission}</if> |
| | | </where> |
| | | </select> |
| | | |
| | |
| | | <if test="shopTags != null">shop_tags,</if> |
| | | <if test="signUserId != null">sign_user_id,</if> |
| | | <if test="shopSource != null">shop_source,</if> |
| | | <if test="modifyPricePermission != null">modify_price_permission,</if> |
| | | </trim> |
| | | <trim prefix="values (" suffix=")" suffixOverrides=","> |
| | | <if test="delFlag != null">#{delFlag},</if> |
| | |
| | | <if test="shopTags != null">#{shopTags},</if> |
| | | <if test="signUserId != null">#{signUserId},</if> |
| | | <if test="shopSource != null">#{shopSource},</if> |
| | | <if test="modifyPricePermission != null">#{modifyPricePermission},</if> |
| | | </trim> |
| | | </insert> |
| | | |
| | |
| | | <if test="shopTags != null">shop_tags = #{shopTags},</if> |
| | | <if test="signUserId != null">sign_user_id = #{signUserId},</if> |
| | | <if test="shopSource != null">shop_source = #{shopSource},</if> |
| | | <if test="modifyPricePermission != null">modify_price_permission = #{modifyPricePermission},</if> |
| | | </trim> |
| | | where shop_id = #{shopId} |
| | | </update> |
| | |
| | | AND Date(ts.sign_time) <= #{param.signEndTime} |
| | | </if> |
| | | <if test="param.signProvinceCode!=null and param.signProvinceCode!=''"> |
| | | AND ts.sign_province_code = #{param.signProvinceCode} |
| | | AND ts.sign_province_code REGEXP CONCAT('(^|;)' , #{param.signProvinceCode} , '(;|$)') -- 正则表达式 (^|;) 匹配字符串开头或分号,(;|$) 匹配分号或字符串结尾。 |
| | | </if> |
| | | <if test="param.signCityCode!=null and param.signCityCode!=''"> |
| | | AND ts.sign_city_code = #{param.signCityCode} |
| | | AND ts.sign_city_code = REGEXP CONCAT('(^|;)' ,#{param.signCityCode} , '(;|$)') |
| | | </if> |
| | | <if test="param.signAreaCode!=null and param.signAreaCode!=''"> |
| | | AND ts.sign_area_code = #{param.signAreaCode} |
| | | AND ts.sign_area_code = REGEXP CONCAT('(^|;)' ,#{param.signAreaCode}, '(;|$)') |
| | | </if> |
| | | <if test="param.shopStatus!=null and param.shopStatus==0"> |
| | | AND ts.frozen_flag = 1 |
| | |
| | | AND Date(ts.sign_time) <= #{param.signEndTime} |
| | | </if> |
| | | <if test="param.signProvinceCode!=null and param.signProvinceCode!=''"> |
| | | AND ts.sign_province_code = #{param.signProvinceCode} |
| | | AND ts.sign_province_code = REGEXP CONCAT('(^|;)' ,#{param.signProvinceCode}, '(;|$)') |
| | | </if> |
| | | <if test="param.signCityCode!=null and param.signCityCode!=''"> |
| | | AND ts.sign_city_code = #{param.signCityCode} |
| | | AND ts.sign_city_code = REGEXP CONCAT('(^|;)' ,#{param.signCityCode}, '(;|$)') |
| | | </if> |
| | | <if test="param.signAreaCode!=null and param.signAreaCode!=''"> |
| | | AND ts.sign_area_code = #{param.signAreaCode} |
| | | AND ts.sign_area_code = REGEXP CONCAT('(^|;)' ,#{param.signAreaCode}, '(;|$)') |
| | | </if> |
| | | <if test="param.recommendPerson!=null and param.recommendPerson!=''"> |
| | | AND ts.recommend_person = #{param.recommendPerson} |
| | |
| | | GROUP BY userId |
| | | </select> |
| | | |
| | | <select id="getFranchiseeIdsBYDealerId" resultType="com.ruoyi.system.api.domain.poji.shop.Shop"> |
| | | select |
| | | * |
| | | from t_shop |
| | | where |
| | | del_flag=0 |
| | | and |
| | | belong_shop_id = #{shopId} |
| | | </select> |
| | | |
| | | </mapper> |
New file |
| | |
| | | <?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.ruoyi.shop.mapper.shop.ShopNonAppointableTimeMapper"> |
| | | |
| | | |
| | | <delete id="taskDelData"> |
| | | delete from t_shop_non_appointable_time where DATE(non_appointable_start_time) < DATE(DATE_SUB(NOW(), INTERVAL 3 DAY)) |
| | | </delete> |
| | | |
| | | </mapper> |
| | |
| | | // 全局配置 |
| | | GlobalConfig globalConfig = new GlobalConfig(); |
| | | //生成文件的输出目录 |
| | | String path="D:/hrt"; |
| | | String path="F:\\DeskTop"; |
| | | globalConfig.setOutputDir(path); |
| | | // Author设置作者 |
| | | globalConfig.setAuthor("mybatis-plus"); |
| | |
| | | globalConfig.setXmlName("%sMapper"); |
| | | globalConfig.setServiceName("%sService"); |
| | | globalConfig.setServiceImplName("%sServiceImpl"); |
| | | globalConfig.setAuthor("jqs"); |
| | | globalConfig.setAuthor("mitao"); |
| | | // globalConfig.setEntityName("%s"); |
| | | globalConfig.setControllerName("%sController"); |
| | | autoGenerator.setGlobalConfig(globalConfig); |
| | |
| | | DataSourceConfig dataSourceConfig = new DataSourceConfig(); |
| | | dataSourceConfig.setDbType(DbType.MYSQL); |
| | | dataSourceConfig.setTypeConvert(new MySqlTypeConvert()); |
| | | dataSourceConfig.setUrl("jdbc:mysql://47.109.78.184:10010/hrt_sys?tinyInt1isBit=false"); |
| | | dataSourceConfig.setUrl("jdbc:mysql://127.0.0.1:3306/hrt_goods?tinyInt1isBit=false"); |
| | | dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver"); |
| | | dataSourceConfig.setUsername("root"); |
| | | dataSourceConfig.setPassword("hrt123456"); |
| | | dataSourceConfig.setPassword("123456"); |
| | | autoGenerator.setDataSource(dataSourceConfig); |
| | | |
| | | // 包名配置 |
| | | PackageConfig packageConfig = new PackageConfig(); |
| | | // 父包和子包名分开处理 |
| | | packageConfig.setParent("com.ruoyi.system"); |
| | | packageConfig.setParent("com.ruoyi.goods"); |
| | | packageConfig.setController("app"); |
| | | packageConfig.setEntity("domain.pojo"); |
| | | packageConfig.setMapper("mapper"); |
| | |
| | | strategy.setControllerMappingHyphenStyle(true); |
| | | //表和前缀处理 |
| | | String[] table = { |
| | | "t_file_record" |
| | | "t_xiaoe_live_record" |
| | | }; |
| | | strategy.setInclude(table); |
| | | String[] tablePre = new String[]{"t_"}; |
| | |
| | | package com.ruoyi.system.controller.conslole; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.constant.ConfigEnum; |
| | | import com.ruoyi.system.api.domain.dto.MgtBaseBathDto; |
| | | import com.ruoyi.system.api.domain.dto.MgtClassNumDto; |
| | | import com.ruoyi.system.api.domain.dto.MgtUserIdByDept; |
| | |
| | | import com.ruoyi.system.api.domain.vo.AppOtherConfigGetVo; |
| | | import com.ruoyi.system.api.domain.vo.MgtSysSimpleUserVo; |
| | | import com.ruoyi.system.domain.dto.MgtCustomConfigDto; |
| | | import com.ruoyi.system.domain.pojo.config.CustomConfig; |
| | | import com.ruoyi.system.service.config.*; |
| | | import com.ruoyi.system.service.staff.SysStaffService; |
| | | import com.ruoyi.system.service.sys.ISysUserService; |
| | |
| | | fileRecordService.createFileRecord(fileRecord); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取门店课程验证密码 |
| | | * @return |
| | | */ |
| | | @PostMapping("/getStoreCurriculumPassword") |
| | | public R<String> getStoreCurriculumPassword(){ |
| | | CustomConfig one = customConfigService.getOne(new QueryWrapper<CustomConfig>().eq("config_type", ConfigEnum.STORE_COURSE_DISPLAY_PASSWORD.getKeyType()) |
| | | .eq("config_key", ConfigEnum.STORE_COURSE_DISPLAY_PASSWORD.getKey())); |
| | | return R.ok(one.getConfigValue()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取门店课程展示名称 |
| | | * @return |
| | | */ |
| | | @PostMapping("/getStoreCurriculumName") |
| | | public R<String> getStoreCurriculumName(){ |
| | | CustomConfig one = customConfigService.getOne(new QueryWrapper<CustomConfig>().eq("config_type", ConfigEnum.STORE_COURSE_DISPLAY_NAME.getKeyType()) |
| | | .eq("config_key", ConfigEnum.STORE_COURSE_DISPLAY_NAME.getKey())); |
| | | return R.ok(one.getConfigValue()); |
| | | } |
| | | } |
| | |
| | | log.info("企业微信回调参数xml解析"+reponseStr); |
| | | return reponseStr; |
| | | } |
| | | return "SUCCESS"; |
| | | return echostr; |
| | | } |
| | | |
| | | |
| | |
| | | import com.ruoyi.system.api.domain.dto.MgtPageDto; |
| | | import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; |
| | | import com.ruoyi.system.domain.dto.*; |
| | | import com.ruoyi.system.domain.pojo.config.BottomNav; |
| | | import com.ruoyi.system.domain.vo.*; |
| | | import com.ruoyi.system.service.config.*; |
| | | import io.swagger.annotations.Api; |
| | |
| | | |
| | | @Resource |
| | | private RecommendCooperationService recommendCooperationService; |
| | | |
| | | @Resource |
| | | private BottomNavService bottomNavService; |
| | | |
| | | |
| | | @RequestMapping(value = "/getCustomConfig", method = RequestMethod.POST) |
| | |
| | | return R.ok(); |
| | | } |
| | | |
| | | @RequestMapping(value = "/getBottomNav", method = RequestMethod.GET) |
| | | @ApiOperation(value = "获取底部导航栏配置数据") |
| | | public R<List<BottomNav>> getBottomNav() { |
| | | List<BottomNav> list = bottomNavService.getAllBottomNav(); |
| | | return R.ok(list); |
| | | } |
| | | @RequestMapping(value = "/editBottomNav", method = RequestMethod.PUT) |
| | | @ApiOperation(value = "获取底部导航栏配置数据") |
| | | public R<Void> editBottomNav(@RequestBody BottomNavDto bottomNavDto) { |
| | | return bottomNavService.editBottomNav(bottomNavDto); |
| | | } |
| | | |
| | | @RequestMapping(value = "/pageQuickEntry", method = RequestMethod.POST) |
| | | @ApiOperation(value = "分页获取快速入口") |
| | | public R<Page<MgtQuickEntryPageVo>> pageQuickEntry(@RequestBody MgtPageDto mgtPageDto) { |
| | |
| | | customConfigService.editOtherConfig(mgtOtherConfigEditDto); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/editStoreCurriculum", method = RequestMethod.POST) |
| | | @Log(title = "其它设置管理", businessType = BusinessType.UPDATE,operContent = "修改门店课程设置") |
| | | @ApiOperation(value = "修改门店课程设置") |
| | | public R editStoreCurriculum(@Validated @RequestBody MgtStoreCurriculumEditDto mgtStoreCurriculumEditDto) { |
| | | customConfigService.editStoreCurriculum(mgtStoreCurriculumEditDto); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/editShopConfig", method = RequestMethod.POST) |
| | | @Log(title = "其它设置管理", businessType = BusinessType.UPDATE,operContent = "修改合作商配置") |
| | |
| | | package com.ruoyi.system.controller.miniapp; |
| | | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.domain.vo.AppAdvertVo; |
| | | import com.ruoyi.system.domain.vo.AppBannerVo; |
| | | import com.ruoyi.system.domain.vo.AppPopVo; |
| | | import com.ruoyi.system.domain.vo.AppQuickEntryVo; |
| | | import com.ruoyi.system.service.config.AdvertService; |
| | | import com.ruoyi.system.service.config.BannerService; |
| | | import com.ruoyi.system.service.config.PopService; |
| | | import com.ruoyi.system.service.config.QuickEntryService; |
| | | import com.ruoyi.system.domain.vo.*; |
| | | import com.ruoyi.system.service.config.*; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | |
| | | @Resource |
| | | private PopService popService; |
| | | |
| | | @Resource |
| | | private BottomNavService bottomNavService; |
| | | |
| | | |
| | | |
| | | |
| | | @RequestMapping(value = "/getHomeBanner", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取首页banner") |
| | | @ApiOperation(value = "获取首页banner【2.0】") |
| | | public R<List<AppBannerVo>> getHomeBanner() { |
| | | List<AppBannerVo> appBannerVoList = bannerService.listHomeBannerVo(); |
| | | return R.ok(appBannerVoList); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/getQuickEntry", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取首页快速入口") |
| | | @ApiOperation(value = "获取首页快速入口【2.0】") |
| | | public R<List<AppQuickEntryVo>> getQuickEntry() { |
| | | List<AppQuickEntryVo> appQuickEntryVoList = quickEntryService.listQuickEntryVo(); |
| | | return R.ok(appQuickEntryVoList); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/getAdvert", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取首页广告") |
| | | @ApiOperation(value = "获取首页广告【2.0】") |
| | | public R<AppAdvertVo> getAdvert() { |
| | | AppAdvertVo appAdvertVo = advertService.getAdvertVo(); |
| | | return R.ok(appAdvertVo); |
| | | } |
| | | |
| | | |
| | | @RequestMapping(value = "/getPop", method = RequestMethod.POST) |
| | | @ApiOperation(value = "获取弹窗") |
| | | @ApiOperation(value = "获取弹窗【2.0】") |
| | | public R<AppPopVo> getAppPop() { |
| | | AppPopVo appPopVo = popService.getAppPop(); |
| | | return R.ok(appPopVo); |
| | |
| | | |
| | | |
| | | |
| | | @RequestMapping(value = "/getBottomNav", method = RequestMethod.GET) |
| | | @ApiOperation(value = "获取底部导航栏") |
| | | public R<List<AppBottomNavVO>> getBottomNav() { |
| | | List<AppBottomNavVO> list = bottomNavService.getAppBottomNav(); |
| | | return R.ok(list); |
| | | } |
| | | |
| | | } |
| | |
| | | package com.ruoyi.system.controller.sys; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | |
| | | import com.ruoyi.system.api.domain.dto.MgtFrozenMemberDto; |
| | | import com.ruoyi.system.api.domain.poji.sys.SysDept; |
| | | import com.ruoyi.system.api.domain.poji.sys.SysRole; |
| | | import com.ruoyi.system.api.domain.poji.sys.SysStaff; |
| | | import com.ruoyi.system.api.domain.poji.sys.SysUser; |
| | | import com.ruoyi.system.api.model.LoginUser; |
| | | import com.ruoyi.system.api.model.QwH5LoginVo; |
| | | import com.ruoyi.system.api.model.QwUserDetailDto; |
| | | import com.ruoyi.system.domain.dto.UserMenuEditDto; |
| | | import com.ruoyi.system.api.domain.poji.sys.SysStaff; |
| | | import com.ruoyi.system.service.staff.SysStaffService; |
| | | import com.ruoyi.system.service.sys.*; |
| | | import com.ruoyi.system.service.sys.ISysConfigService; |
| | | import com.ruoyi.system.service.sys.ISysDeptService; |
| | | import com.ruoyi.system.service.sys.ISysPermissionService; |
| | | import com.ruoyi.system.service.sys.ISysPostService; |
| | | import com.ruoyi.system.service.sys.ISysRoleService; |
| | | import com.ruoyi.system.service.sys.ISysUserService; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.apache.commons.lang3.ArrayUtils; |
| | | 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.DeleteMapping; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.PutMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | |
| | | * @return R<QwH5LoginVo> |
| | | */ |
| | | @PostMapping("/qwH5StaffLogin") |
| | | @ApiOperation(value = "员工端登录") |
| | | public R<QwH5LoginVo> qwH5StaffLogin(@RequestBody QwUserDetailDto qwUserDetail) |
| | | { |
| | | String mobile = qwUserDetail.getMobile(); |
New file |
| | |
| | | package com.ruoyi.system.domain.dto; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class BottomNavDto { |
| | | @ApiModelProperty(value = "导航栏id") |
| | | private Integer id; |
| | | } |
| | |
| | | @Data |
| | | public class MgtAdvertEditDto extends MgtBaseDto { |
| | | |
| | | @ApiModelProperty(value = "首页广告语") |
| | | private String homeSlogan; |
| | | |
| | | |
| | | @ApiModelProperty(value = "首页logo") |
| | | private String homeLogo; |
| | |
| | | @ApiModelProperty(value = "跳转id") |
| | | private String jumpId; |
| | | |
| | | @ApiModelProperty(value = "小程序APPID") |
| | | private String appid; |
| | | |
| | | |
| | | @ApiModelProperty(value = "首页广告语") |
| | | private String homeSlogan; |
| | | |
| | | @ApiModelProperty(value = "广告语- 链接类型1.外部2.内部3.无") |
| | | private Integer targetTypeSlogan; |
| | | |
| | | @ApiModelProperty(value = "广告语- 链接类型1.手动输入2.选择已有") |
| | | private Integer linkTypeSlogan; |
| | | |
| | | @ApiModelProperty(value = "广告语- 链接地址") |
| | | private String linkUrlSlogan; |
| | | |
| | | @ApiModelProperty(value = "广告语- 跳转类型1.门店详情2.秒杀活动3领券中心4.商城列表5.关于洪瑞堂6.赚取积分7.建议有奖") |
| | | private Integer jumpTypeSlogan; |
| | | |
| | | @ApiModelProperty(value = "广告语- 跳转id") |
| | | private String jumpIdSlogan; |
| | | |
| | | @ApiModelProperty(value = "广告语- 小程序APPID") |
| | | private String appidSlogan; |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "banner图片") |
| | | private String bannerUrl; |
| | | |
| | | @ApiModelProperty(value = "banner位置1.小程序首页") |
| | | @ApiModelProperty(value = "banner位置1.小程序首页 2.鸿瑞学堂") |
| | | private Integer bannerPosition; |
| | | |
| | | @ApiModelProperty(value = "链接类型1.外部2.内部3.无") |
| | | private Integer targetType; |
| | | |
| | | @ApiModelProperty(value = "链接类型1.手动输入2.选择已有") |
| | | @ApiModelProperty(value = "链接类型1.手动输入/跳转地址 2.选择已有/跳转小程序") |
| | | private Integer linkType; |
| | | |
| | | @ApiModelProperty(value = "链接地址") |
| | |
| | | @ApiModelProperty(value = "banner排序") |
| | | private Integer bannerSort; |
| | | |
| | | @ApiModelProperty(value = "小程序APPID") |
| | | private String appid; |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "跳转类型1.门店详情2.秒杀活动3领券中心4.商城列表5.关于洪瑞堂6.赚取积分7.建议有奖") |
| | | private Integer jumpType; |
| | | |
| | | @ApiModelProperty(value = "链接类型1.手动输入2.选择已有") |
| | | @ApiModelProperty(value = "链接类型1.手动输入/跳转地址 2.选择已有/跳转小程序") |
| | | private Integer linkType; |
| | | |
| | | @ApiModelProperty(value = "跳转id") |
| | |
| | | @ApiModelProperty(value = "展示结束时间 yyyy-MM-dd") |
| | | private String showEndTime; |
| | | |
| | | @ApiModelProperty(value = "小程序APPID") |
| | | private String appid; |
| | | |
| | | } |
| | |
| | | package com.ruoyi.system.domain.dto; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.ruoyi.system.api.domain.dto.MgtBaseDto; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | |
| | | @ApiModelProperty(value = "链接类型1.外部2.内部3.无") |
| | | private Integer targetType; |
| | | |
| | | @ApiModelProperty(value = "链接类型1.手动输入2.选择已有") |
| | | @ApiModelProperty(value = "链接类型1.手动输入/跳转地址 2.选择已有/跳转小程序") |
| | | private Integer linkType; |
| | | |
| | | @ApiModelProperty(value = "链接地址") |
| | |
| | | |
| | | @ApiModelProperty(value = "快速入口排序") |
| | | private Integer entrySort; |
| | | |
| | | @ApiModelProperty(value = "小程序APPID") |
| | | private String appid; |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.domain.dto; |
| | | |
| | | import com.ruoyi.system.api.domain.dto.MgtBaseDto; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import javax.validation.constraints.NotNull; |
| | | |
| | | /** |
| | | * @ClassName MgtActivenessEditDto |
| | | * @Description TODO |
| | | * @Author jqs |
| | | * @Date 2023/6/7 17:40 |
| | | * @Version 1.0 |
| | | */ |
| | | @Data |
| | | public class MgtStoreCurriculumEditDto extends MgtBaseDto { |
| | | |
| | | @ApiModelProperty(value = "门店课程设置-展示名称") |
| | | @NotNull(message = "门店课程设置-展示名称不能为空") |
| | | private String storeCourseDisplayName; |
| | | |
| | | @ApiModelProperty(value = "门店课程设置-验证密码") |
| | | @NotNull(message = "门店课程设置-验证密码不能为空") |
| | | private String storeCourseDisplayPassword; |
| | | |
| | | } |
| | |
| | | @TableField("target_type") |
| | | private Integer targetType; |
| | | /** |
| | | * 链接类型1.手动输入2.选择已有 |
| | | * 链接类型1.跳转地址,2=跳转小程序 |
| | | */ |
| | | @TableField("link_type") |
| | | private Integer linkType; |
| | | /** |
| | | * 小程序appid |
| | | */ |
| | | @TableField("appid") |
| | | private String appid; |
| | | /** |
| | | * 链接地址 |
| | | */ |
| | | @TableField("link_url") |
| | | private String linkUrl; |
| | | |
| | | |
| | | /** |
| | | * 跳转类型1.门店详情2.秒杀活动3领券中心4.商城列表5.关于洪瑞堂6.赚取积分7.建议有奖 |
| | | */ |
| | |
| | | @TableField("create_user_id") |
| | | private Long createUserId; |
| | | |
| | | /** |
| | | * 小程序APPID |
| | | */ |
| | | @TableField("appid") |
| | | private String appid; |
| | | |
| | | /** |
| | | * 广告语- 链接类型1.外部2.内部3.无 |
| | | */ |
| | | @TableField("target_type_slogan") |
| | | private Integer targetTypeSlogan; |
| | | |
| | | /** |
| | | * 广告语- 链接类型1.手动输入2.选择已有 |
| | | */ |
| | | @TableField("link_type_slogan") |
| | | private Integer linkTypeSlogan; |
| | | |
| | | /** |
| | | * 广告语- 链接地址 |
| | | */ |
| | | @TableField("link_url_slogan") |
| | | private String linkUrlSlogan; |
| | | |
| | | /** |
| | | * 广告语- 跳转类型1.门店详情2.秒杀活动3领券中心4.商城列表5.关于洪瑞堂6.赚取积分7.建议有奖 |
| | | */ |
| | | @TableField("jump_type_slogan") |
| | | private Integer jumpTypeSlogan; |
| | | |
| | | /** |
| | | * 广告语- 跳转id |
| | | */ |
| | | @TableField("jump_id_slogan") |
| | | private String jumpIdSlogan; |
| | | |
| | | /** |
| | | * 广告语- 小程序APPID |
| | | */ |
| | | @TableField("appid_slogan") |
| | | private String appidSlogan; |
| | | |
| | | |
| | | @Override |
| | | protected Serializable pkVal() { |
| | |
| | | @TableField("target_type") |
| | | private Integer targetType; |
| | | /** |
| | | * 链接类型1.手动输入2.选择已有 |
| | | * 链接类型1.手动输入/跳转地址 2.选择已有/跳转小程序 |
| | | */ |
| | | @TableField("link_type") |
| | | private Integer linkType; |
| | | /** |
| | | * 小程序appid |
| | | */ |
| | | @TableField("appid") |
| | | private String appid; |
| | | /** |
| | | * 链接地址 |
| | | */ |
| | | @TableField("link_url") |
New file |
| | |
| | | package com.ruoyi.system.domain.pojo.config; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.*; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @TableName("t_bottom_nav") |
| | | @ApiModel(value = "BottomNav对象", description = "底部导航配置表") |
| | | public class BottomNav { |
| | | |
| | | @TableId(type = IdType.AUTO) |
| | | @ApiModelProperty(value = "主键ID") |
| | | private Integer id; |
| | | |
| | | @TableField("name") |
| | | @ApiModelProperty(value = "导航名称") |
| | | private String name; |
| | | |
| | | @TableField("status") |
| | | @ApiModelProperty(value = "展示状态(0=关闭,1=开启)") |
| | | private Integer status; |
| | | |
| | | } |
| | |
| | | @TableField("link_url") |
| | | private String linkUrl; |
| | | /** |
| | | * 链接类型1.手动输入2.选择已有 |
| | | * 链接类型1.跳转地址,2=跳转小程序 |
| | | */ |
| | | @TableField("link_type") |
| | | private Integer linkType; |
| | | /** |
| | | * 小程序appid |
| | | */ |
| | | @TableField("appid") |
| | | private String appid; |
| | | /** |
| | | * 跳转活动id |
| | | */ |
| | |
| | | @TableField("jump_type") |
| | | private Integer jumpType; |
| | | |
| | | /** |
| | | * 小程序APPID |
| | | */ |
| | | @TableField("appid") |
| | | private String appid; |
| | | |
| | | @Override |
| | | protected Serializable pkVal() { |
| | | return this.popId; |
| | |
| | | @TableField("target_type") |
| | | private Integer targetType; |
| | | /** |
| | | * 链接类型1.手动输入2.选择已有 |
| | | * 链接类型1.跳转地址,2、跳转小程序 |
| | | */ |
| | | @TableField("link_type") |
| | | private Integer linkType; |
| | | /** |
| | | * 小程序appid |
| | | */ |
| | | @TableField("appid") |
| | | private String appid; |
| | | /** |
| | | * 链接地址 |
| | | */ |
| | |
| | | @TableField("jump_type") |
| | | private Integer jumpType; |
| | | |
| | | /** |
| | | * 小程序appid |
| | | */ |
| | | @TableField("appid") |
| | | private String appid; |
| | | |
| | | @Override |
| | | protected Serializable pkVal() { |
| | | return this.entryId; |
| | |
| | | |
| | | @ApiModelProperty(value = "广告入口") |
| | | private Long adId; |
| | | |
| | | |
| | | @ApiModelProperty(value = "广告图片地址") |
| | | private String adUrl; |
| | | |
| | | |
| | | @ApiModelProperty(value = "广告语") |
| | | private String adContent; |
| | | |
| | | |
| | | @ApiModelProperty(value = "对象类型1.外链2.内链3.无") |
| | | private Integer targetType; |
| | | |
| | | @ApiModelProperty(value = "链接类型1.手动输入2.选择已有") |
| | | |
| | | @ApiModelProperty(value = "链接类型1.跳转地址,2、跳转小程序") |
| | | private Integer linkType; |
| | | |
| | | |
| | | @ApiModelProperty(value = "小程序appid") |
| | | private String appid; |
| | | |
| | | @ApiModelProperty(value = "链接地址") |
| | | private String linkUrl; |
| | | |
| | | |
| | | @ApiModelProperty(value = "跳转类型1.门店详情2.秒杀活动3领券中心4.商城列表5.关于洪瑞堂6.赚取积分7.建议有奖") |
| | | private Integer jumpType; |
| | | |
| | | |
| | | @ApiModelProperty(value = "跳转id") |
| | | private String jumpId; |
| | | |
| | | |
| | | @ApiModelProperty(value = "logo地址") |
| | | private String logoUrl; |
| | | |
| | | @ApiModelProperty(value = "小程序APPID") |
| | | private String appid; |
| | | |
| | | @ApiModelProperty(value = "广告语- 链接类型1.外部2.内部3.无") |
| | | private Integer targetTypeSlogan; |
| | | |
| | | @ApiModelProperty(value = "广告语- 链接类型1.手动输入2.选择已有") |
| | | private Integer linkTypeSlogan; |
| | | |
| | | @ApiModelProperty(value = "广告语- 链接地址") |
| | | private String linkUrlSlogan; |
| | | |
| | | @ApiModelProperty(value = "广告语- 跳转类型1.门店详情2.秒杀活动3领券中心4.商城列表5.关于洪瑞堂6.赚取积分7.建议有奖") |
| | | private Integer jumpTypeSlogan; |
| | | |
| | | @ApiModelProperty(value = "广告语- 跳转id") |
| | | private String jumpIdSlogan; |
| | | |
| | | @ApiModelProperty(value = "广告语- 小程序APPID") |
| | | private String appidSlogan; |
| | | |
| | | } |
| | |
| | | |
| | | @ApiModelProperty(value = "bannerid") |
| | | private Long bannerId; |
| | | |
| | | |
| | | @ApiModelProperty(value = "banner图片地址") |
| | | private String bannerUrl; |
| | | |
| | | |
| | | @ApiModelProperty(value = "链接类型1.外部2.内部3.无") |
| | | private Integer targetType; |
| | | |
| | | @ApiModelProperty(value = "链接类型1.手动输入2.选择已有") |
| | | |
| | | @ApiModelProperty(value = "链接类型1.跳转地址,2、跳转小程序") |
| | | private Integer linkType; |
| | | |
| | | |
| | | @ApiModelProperty(value = "小程序appid") |
| | | private String appid; |
| | | |
| | | @ApiModelProperty(value = "链接地址") |
| | | private String linkUrl; |
| | | |
| | | |
| | | @ApiModelProperty(value = "跳转类型1.门店详情2.秒杀活动3领券中心4.商城列表5.关于洪瑞堂6.赚取积分7.建议有奖") |
| | | private Integer jumpType; |
| | | |
| | | |
| | | @ApiModelProperty(value = "跳转id") |
| | | private String jumpId; |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.domain.vo; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class AppBottomNavVO { |
| | | @ApiModelProperty(value = "导航栏id") |
| | | private Integer id; |
| | | @ApiModelProperty(value = "导航栏名称") |
| | | private String name; |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "对象类型1.外链2.内链3.无") |
| | | private Integer targetType; |
| | | |
| | | @ApiModelProperty(value = "链接类型1.手动输入2.选择已有") |
| | | @ApiModelProperty(value = "链接类型1.手动输入/跳转地址 2.选择已有/跳转小程序") |
| | | private Integer linkType; |
| | | |
| | | @ApiModelProperty(value = "小程序appid") |
| | | private String appid; |
| | | |
| | | @ApiModelProperty(value = "链接地址") |
| | | private String linkUrl; |
| | | |
| | |
| | | |
| | | @ApiModelProperty(value = "快速入口") |
| | | private Long entryId; |
| | | |
| | | |
| | | @ApiModelProperty(value = "入口图片地址") |
| | | private String entryUrl; |
| | | |
| | | |
| | | @ApiModelProperty(value = "入口名称") |
| | | private String entryName; |
| | | |
| | | |
| | | @ApiModelProperty(value = "对象类型1.外链2.内链3.无") |
| | | private Integer targetType; |
| | | |
| | | @ApiModelProperty(value = "链接类型1.手动输入2.选择已有") |
| | | |
| | | @ApiModelProperty(value = "链接类型1.跳转地址,2、跳转小程序") |
| | | private Integer linkType; |
| | | |
| | | |
| | | @ApiModelProperty(value = "小程序appid") |
| | | private String appid; |
| | | |
| | | @ApiModelProperty(value = "链接地址") |
| | | private String linkUrl; |
| | | |
| | | |
| | | @ApiModelProperty(value = "跳转类型1.门店详情2.秒杀活动3领券中心4.商城列表5.关于洪瑞堂6.赚取积分7.建议有奖") |
| | | private Integer jumpType; |
| | | |
| | | |
| | | @ApiModelProperty(value = "跳转id") |
| | | private String jumpId; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "跳转id") |
| | | private String jumpId; |
| | | |
| | | @ApiModelProperty(value = "小程序APPID") |
| | | private String appid; |
| | | |
| | | @ApiModelProperty(value = "广告语- 链接类型1.外部2.内部3.无") |
| | | private Integer targetTypeSlogan; |
| | | |
| | | @ApiModelProperty(value = "广告语- 链接类型1.手动输入2.选择已有") |
| | | private Integer linkTypeSlogan; |
| | | |
| | | @ApiModelProperty(value = "广告语- 链接地址") |
| | | private String linkUrlSlogan; |
| | | |
| | | @ApiModelProperty(value = "广告语- 跳转类型1.门店详情2.秒杀活动3领券中心4.商城列表5.关于洪瑞堂6.赚取积分7.建议有奖") |
| | | private Integer jumpTypeSlogan; |
| | | |
| | | @ApiModelProperty(value = "广告语- 跳转id") |
| | | private String jumpIdSlogan; |
| | | |
| | | @ApiModelProperty(value = "广告语- 小程序APPID") |
| | | private String appidSlogan; |
| | | |
| | | @ApiModelProperty(value = "活跃度list") |
| | | private List<MgtActivenessVo> mgtActivenessVoList; |
| | | |
| | | @ApiModelProperty(value = "门店课程设置-展示名称") |
| | | private String storeCourseDisplayName; |
| | | |
| | | @ApiModelProperty(value = "门店课程设置-验证密码") |
| | | private String storeCourseDisplayPassword; |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "链接类型1.外部2.内部3.无") |
| | | private Integer targetType; |
| | | |
| | | @ApiModelProperty(value = "链接类型1.手动输入2.选择已有") |
| | | @ApiModelProperty(value = "链接类型1.手动输入/跳转地址 2.选择已有/跳转小程序") |
| | | private Integer linkType; |
| | | |
| | | @ApiModelProperty(value = "链接地址") |
| | |
| | | |
| | | @ApiModelProperty(value = "banner排序") |
| | | private Integer bannerSort; |
| | | |
| | | @ApiModelProperty(value = "小程序APPID") |
| | | private String appid; |
| | | } |
| | |
| | | @ApiModelProperty(value = "链接类型1.外部2.内部3.无") |
| | | private Integer targetType; |
| | | |
| | | @ApiModelProperty(value = "链接类型1.手动输入2.选择已有") |
| | | @ApiModelProperty(value = "链接类型1.手动输入/跳转地址 2.选择已有/跳转小程序") |
| | | private Integer linkType; |
| | | |
| | | |
| | |
| | | @ApiModelProperty(value = "展示结束时间 yyyy-MM-dd") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date showEndTime; |
| | | |
| | | @ApiModelProperty(value = "小程序APPID") |
| | | private String appid; |
| | | } |
| | |
| | | @ApiModelProperty(value = "链接类型1.外部2.内部3.无") |
| | | private Integer targetType; |
| | | |
| | | @ApiModelProperty(value = "链接类型1.手动输入2.选择已有") |
| | | @ApiModelProperty(value = "链接类型1.手动输入/跳转地址 2.选择已有/跳转小程序") |
| | | private Integer linkType; |
| | | |
| | | @ApiModelProperty(value = "链接地址") |
| | |
| | | @ApiModelProperty(value = "快速入口排序") |
| | | private Integer entrySort; |
| | | |
| | | @ApiModelProperty(value = "小程序APPID") |
| | | private String appid; |
| | | |
| | | } |
| | |
| | | import com.ruoyi.system.api.service.RemoteActivityService; |
| | | import com.ruoyi.system.api.service.RemoteConfigService; |
| | | import com.ruoyi.system.api.service.RemoteCouponService; |
| | | import com.ruoyi.system.api.service.RemoteGoodsService; |
| | | import com.ruoyi.system.api.service.RemoteOrderService; |
| | | import lombok.extern.log4j.Log4j2; |
| | | import org.springframework.data.redis.connection.Message; |
| | |
| | | @Resource |
| | | private RemoteOrderService remoteOrderService; |
| | | |
| | | @Resource |
| | | private RemoteGoodsService remoteGoodsService; |
| | | |
| | | public RedisListener(RedisMessageListenerContainer listenerContainer, |
| | | RedisTemplate redisTemplate) { |
| | | super(listenerContainer); |
| | |
| | | }else if(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode().equals(operation)){ |
| | | //自动结束任务 |
| | | autoCancelOrder(split[1]); |
| | | } else if (DelayTaskEnum.LIVE_APPOINTMENT_TASK.getCode().equals(operation)) { |
| | | push(Long.valueOf(split[1])); |
| | | } |
| | | |
| | | //删除失效的key |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 推送消息 |
| | | * @param appointmentId |
| | | */ |
| | | private void push(Long appointmentId) { |
| | | remoteGoodsService.push(appointmentId); |
| | | //删除定时任务 |
| | | remoteConfigService.deleteDelayTask(DelayTaskEnum.LIVE_APPOINTMENT_TASK.getCode()+"-"+appointmentId); |
| | | } |
| | | |
| | | public <T> T getAndSet(final String key, T value){ |
| | | T oldValue=null; |
| | | try { |
New file |
| | |
| | | package com.ruoyi.system.mapper.config; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.system.domain.pojo.config.BottomNav; |
| | | import com.ruoyi.system.domain.vo.AppBottomNavVO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.util.List; |
| | | |
| | | |
| | | public interface BottomNavMapper extends BaseMapper<BottomNav> { |
| | | List<AppBottomNavVO> getAppBottomNav(); |
| | | } |
| | |
| | | import com.ruoyi.system.api.domain.dto.MgtBaseGetDto; |
| | | import com.ruoyi.system.api.domain.poji.config.Activeness; |
| | | import com.ruoyi.system.domain.dto.MgtActivenessEditDto; |
| | | import com.ruoyi.system.domain.dto.MgtStoreCurriculumEditDto; |
| | | import com.ruoyi.system.domain.vo.MgtActivenessListVo; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | |
| | | import java.util.List; |
| | | |
New file |
| | |
| | | package com.ruoyi.system.service.config; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.domain.dto.BottomNavDto; |
| | | import com.ruoyi.system.domain.pojo.config.BottomNav; |
| | | import com.ruoyi.system.domain.vo.AppBottomNavVO; |
| | | |
| | | import java.util.List; |
| | | |
| | | public interface BottomNavService extends IService<BottomNav> { |
| | | List<AppBottomNavVO> getAppBottomNav(); |
| | | |
| | | List<BottomNav> getAllBottomNav(); |
| | | |
| | | R editBottomNav(BottomNavDto bottomNavDto); |
| | | } |
| | |
| | | * @return void |
| | | */ |
| | | void editOtherConfig(MgtOtherConfigEditDto mgtOtherConfigEditDto); |
| | | |
| | | /** |
| | | * 修改门店课程配置 |
| | | * @param mgtStoreCurriculumEditDto |
| | | */ |
| | | void editStoreCurriculum(MgtStoreCurriculumEditDto mgtStoreCurriculumEditDto); |
| | | |
| | | /** |
| | | * @description 修改合作商配置 |
| | |
| | | import com.ruoyi.system.api.domain.dto.MgtBaseGetDto; |
| | | import com.ruoyi.system.api.domain.poji.config.Activeness; |
| | | import com.ruoyi.system.domain.dto.MgtActivenessEditDto; |
| | | import com.ruoyi.system.domain.vo.MgtActivenessListVo; |
| | | import com.ruoyi.system.domain.dto.MgtStoreCurriculumEditDto;import com.ruoyi.system.domain.vo.MgtActivenessListVo; |
| | | import com.ruoyi.system.mapper.config.ActivenessMapper; |
| | | import com.ruoyi.system.service.config.ActivenessService; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | activeness.setEndDay(mgtActivenessEditDto.getEndDay()); |
| | | this.saveOrUpdate(activeness); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * @description 删除活跃度 |
| | | * @author jqs |
| | |
| | | advert.setLogoUrl(mgtAdvertEditDto.getHomeLogo()); |
| | | advert.setCreateTime(new Date()); |
| | | advert.setCreateUserId(mgtAdvertEditDto.getUserId()); |
| | | advert.setAppid(mgtAdvertEditDto.getAppid()); |
| | | //广告语配置 |
| | | advert.setTargetTypeSlogan(mgtAdvertEditDto.getTargetTypeSlogan()); |
| | | advert.setLinkTypeSlogan(mgtAdvertEditDto.getLinkTypeSlogan()); |
| | | advert.setLinkUrlSlogan(mgtAdvertEditDto.getLinkUrlSlogan()); |
| | | advert.setJumpTypeSlogan(mgtAdvertEditDto.getJumpTypeSlogan()); |
| | | advert.setJumpIdSlogan(mgtAdvertEditDto.getJumpIdSlogan()); |
| | | advert.setAppidSlogan(mgtAdvertEditDto.getAppidSlogan()); |
| | | this.save(advert); |
| | | } |
| | | } |
| | |
| | | // 将DTO中的属性值复制到横幅对象中 |
| | | BeanUtils.copyProperties(mgtBannerEditDto, banner); |
| | | if(banner.getTargetType()==1){ |
| | | banner.setJumpType(null); |
| | | banner.setJumpId(null); |
| | | banner.setLinkType(null); |
| | | //外链 |
| | | if (banner.getLinkType()==1){ |
| | | //外链-链接 |
| | | banner.setJumpType(null); |
| | | banner.setJumpId(null); |
| | | banner.setAppid(null); |
| | | }else{ |
| | | //外链-小程序 |
| | | banner.setJumpType(null); |
| | | banner.setJumpId(null); |
| | | } |
| | | }else if(banner.getTargetType()==2){ |
| | | if(banner.getLinkType()==1){ |
| | | banner.setJumpType(null); |
New file |
| | |
| | | package com.ruoyi.system.service.impl.config; |
| | | |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.domain.dto.BottomNavDto; |
| | | import com.ruoyi.system.domain.pojo.config.BottomNav; |
| | | import com.ruoyi.system.domain.vo.AppBottomNavVO; |
| | | import com.ruoyi.system.mapper.config.BottomNavMapper; |
| | | import com.ruoyi.system.service.config.BottomNavService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | |
| | | @Service |
| | | public class BottomNavServiceImpl extends ServiceImpl<BottomNavMapper, BottomNav> implements BottomNavService { |
| | | |
| | | @Override |
| | | public List<AppBottomNavVO> getAppBottomNav() { |
| | | return this.baseMapper.getAppBottomNav(); |
| | | } |
| | | |
| | | @Override |
| | | public List<BottomNav> getAllBottomNav() { |
| | | return this.baseMapper.selectList(null); |
| | | } |
| | | |
| | | @Override |
| | | public R editBottomNav(BottomNavDto bottomNavDto) { |
| | | BottomNav bottomNav = this.baseMapper.selectById(bottomNavDto.getId()); |
| | | if (bottomNav == null) { |
| | | return R.fail("该导航不存在"); |
| | | } |
| | | //修改状态 |
| | | bottomNav.setStatus(bottomNav.getStatus()==0?1:0); |
| | | |
| | | if (bottomNav.getStatus() == 1) { |
| | | //判断当前开启数量是否超过四个 |
| | | Integer count = this.baseMapper.selectCount(new LambdaQueryWrapper<BottomNav>().eq(BottomNav::getStatus, 1)); |
| | | if (count >= 4) { |
| | | return R.fail("操作失败,当前已有四个导航展示"); |
| | | } |
| | | } |
| | | this.baseMapper.updateById(bottomNav); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ibm.icu.util.LocaleData; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.redis.service.RedisService; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | |
| | | case "NURSE_PROBLEM": |
| | | mgtAllCustomConfigVo.setNurseProblem(value.getConfigValue()); |
| | | break; |
| | | case "STORE_COURSE_DISPLAY_NAME": |
| | | mgtAllCustomConfigVo.setStoreCourseDisplayName(value.getConfigValue()); |
| | | break; |
| | | case "STORE_COURSE_DISPLAY_PASSWORD": |
| | | mgtAllCustomConfigVo.setStoreCourseDisplayPassword(value.getConfigValue()); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | |
| | | mgtAllCustomConfigVo.setLinkUrl(advert.getLinkUrl()); |
| | | mgtAllCustomConfigVo.setJumpType(advert.getJumpType()); |
| | | mgtAllCustomConfigVo.setJumpId(advert.getJumpId()); |
| | | mgtAllCustomConfigVo.setAppid(advert.getAppid()); |
| | | //广告语 |
| | | mgtAllCustomConfigVo.setTargetTypeSlogan(advert.getTargetTypeSlogan()); |
| | | mgtAllCustomConfigVo.setLinkTypeSlogan(advert.getLinkTypeSlogan()); |
| | | mgtAllCustomConfigVo.setLinkUrlSlogan(advert.getLinkUrlSlogan()); |
| | | mgtAllCustomConfigVo.setJumpTypeSlogan(advert.getJumpTypeSlogan()); |
| | | mgtAllCustomConfigVo.setJumpIdSlogan(advert.getJumpIdSlogan()); |
| | | mgtAllCustomConfigVo.setAppidSlogan(advert.getAppidSlogan()); |
| | | } |
| | | //获取活跃度配置 |
| | | List<Activeness> activenessList = activenessService.listActiveness(); |
| | |
| | | // 新建配置 |
| | | createNewConfig(mgtOtherConfigEditDto, updateTime); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 修改门店课程配置 |
| | | * @param mgtStoreCurriculumEditDto |
| | | */ |
| | | @Override |
| | | public void editStoreCurriculum(MgtStoreCurriculumEditDto mgtStoreCurriculumEditDto) { |
| | | customConfigMapper.delete(new QueryWrapper<CustomConfig>().eq("config_type", ConfigEnum.STORE_COURSE_DISPLAY_NAME.getKeyType()) |
| | | .eq("config_key", ConfigEnum.STORE_COURSE_DISPLAY_NAME.getKey())); |
| | | customConfigMapper.delete(new QueryWrapper<CustomConfig>().eq("config_type", ConfigEnum.STORE_COURSE_DISPLAY_PASSWORD.getKeyType()) |
| | | .eq("config_key", ConfigEnum.STORE_COURSE_DISPLAY_PASSWORD.getKey())); |
| | | |
| | | CustomConfig customConfig = new CustomConfig(); |
| | | customConfig.setDelFlag(0); |
| | | customConfig.setConfigType(2); |
| | | customConfig.setConfigKey(ConfigEnum.STORE_COURSE_DISPLAY_NAME.getKey()); |
| | | customConfig.setConfigName(ConfigEnum.STORE_COURSE_DISPLAY_NAME.getKeyName()); |
| | | customConfig.setCreateTime(new Date()); |
| | | customConfig.setUpdateTime(new Date()); |
| | | customConfig.setConfigValue(mgtStoreCurriculumEditDto.getStoreCourseDisplayName()); |
| | | this.saveOrUpdate(customConfig); |
| | | |
| | | customConfig = new CustomConfig(); |
| | | customConfig.setDelFlag(0); |
| | | customConfig.setConfigType(2); |
| | | customConfig.setConfigKey(ConfigEnum.STORE_COURSE_DISPLAY_PASSWORD.getKey()); |
| | | customConfig.setConfigName(ConfigEnum.STORE_COURSE_DISPLAY_PASSWORD.getKeyName()); |
| | | customConfig.setCreateTime(new Date()); |
| | | customConfig.setUpdateTime(new Date()); |
| | | customConfig.setConfigValue(mgtStoreCurriculumEditDto.getStoreCourseDisplayPassword()); |
| | | this.saveOrUpdate(customConfig); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * @param updateTime |
| | |
| | | public MgtQuickEntryGetVo getMgtQuickEntry(Long quickEntryId){ |
| | | QuickEntry quickEntry = this.getById(quickEntryId); |
| | | if(quickEntry.getTargetType()==1){ |
| | | //外链 只要linkType URL APPID |
| | | quickEntry.setJumpType(null); |
| | | quickEntry.setJumpId(null); |
| | | quickEntry.setLinkType(null); |
| | | }else if(quickEntry.getTargetType()==2){ |
| | | if(quickEntry.getLinkType()==1){ |
| | | quickEntry.setJumpType(null); |
| | |
| | | |
| | | <select id="getAdvertVo" resultType="com.ruoyi.system.domain.vo.AppAdvertVo"> |
| | | SELECT |
| | | ad_id adId, |
| | | ad_url adUrl, |
| | | ad_content adContent, |
| | | link_type linkType, |
| | | ad_id adId, |
| | | ad_url adUrl, |
| | | ad_content adContent, |
| | | link_type linkType, |
| | | appid, |
| | | target_type targetType, |
| | | link_url linkUrl, |
| | | jump_type jumpType, |
| | | jump_id jumpId, |
| | | logo_url logoUrl |
| | | link_url linkUrl, |
| | | jump_type jumpType, |
| | | jump_id jumpId, |
| | | logo_url logoUrl |
| | | FROM t_advert WHERE del_flag = 0 ORDER BY create_time DESC LIMIT 1 |
| | | </select> |
| | | </mapper> |
| | |
| | | |
| | | <select id="listHomeBannerVo" resultType="com.ruoyi.system.domain.vo.AppBannerVo"> |
| | | SELECT |
| | | banner_id bannerId, |
| | | banner_url bannerUrl, |
| | | banner_id bannerId, |
| | | banner_url bannerUrl, |
| | | target_type targetType, |
| | | link_type linkType, |
| | | link_url linkUrl, |
| | | jump_type jumpType, |
| | | jump_id jumpId |
| | | link_type linkType, |
| | | appid, |
| | | link_url linkUrl, |
| | | jump_type jumpType, |
| | | jump_id jumpId |
| | | FROM t_banner WHERE del_flag = 0 AND banner_position = 1 |
| | | ORDER BY banner_sort DESC,create_time DESC LIMIT 5 |
| | | </select> |
New file |
| | |
| | | <?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.ruoyi.system.mapper.config.BottomNavMapper"> |
| | | |
| | | |
| | | <select id="getAppBottomNav" resultType="com.ruoyi.system.domain.vo.AppBottomNavVO"> |
| | | select |
| | | id,name |
| | | from |
| | | `t_bottom_nav` |
| | | where |
| | | status = 1 |
| | | </select> |
| | | </mapper> |
| | |
| | | target_type targetType, |
| | | link_url linkUrl, |
| | | jump_type jumpType, |
| | | jump_id jumpId |
| | | jump_id jumpId, |
| | | appid appid |
| | | FROM t_pop |
| | | WHERE del_flag = 0 AND CURDATE() BETWEEN show_start_time AND show_end_time |
| | | ORDER BY pop_sort,create_time DESC LIMIT 1 |
| | |
| | | target_type targetType, |
| | | link_url linkUrl, |
| | | jump_type jumpType, |
| | | jump_id jumpId |
| | | jump_id jumpId , |
| | | appid appid |
| | | FROM t_quick_entry WHERE del_flag = 0 |
| | | ORDER BY entry_sort,create_time DESC |
| | | </select> |