Browse Source

Merge branch 'dev/2024/0517/update-admin-Y' of feifan/mall-backend-admin into master

添加查询消费者的签到记录及获取所有的店铺
Yangzw 9 months ago
parent
commit
d6437b1b16
19 changed files with 562 additions and 1 deletions
  1. 1 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ErrorCodeConstants.java
  2. 7 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/socialstatuschangelog/SocialStatusChangeLogController.java
  3. 23 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/socialstatuschangelog/vo/UserSignSocialLogRespVO.java
  4. 94 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usersigninlog/UserSignInLogController.java
  5. 27 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usersigninlog/vo/UserSignInLogPageReqVO.java
  6. 29 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usersigninlog/vo/UserSignInLogRespVO.java
  7. 22 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usersigninlog/vo/UserSignInLogSaveReqVO.java
  8. 36 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/usersigninlog/UserSignInLogDO.java
  9. 8 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/socialstatuschangelog/SocialStatusChangeLogMapper.java
  10. 27 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/usersigninlog/UserSignInLogMapper.java
  11. 2 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/socialstatuschangelog/SocialStatusChangeLogService.java
  12. 6 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/socialstatuschangelog/SocialStatusChangeLogServiceImpl.java
  13. 53 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/usersigninlog/UserSignInLogService.java
  14. 70 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/usersigninlog/UserSignInLogServiceImpl.java
  15. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/usersigninlog/UserSignInLogMapper.xml
  16. 131 0
      feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/usersigninlog/UserSignInLogServiceImplTest.java
  17. 6 1
      feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/controller/admin/shop/ShopController.java
  18. 2 0
      feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/service/shop/ShopService.java
  19. 6 0
      feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/service/shop/ShopServiceImpl.java

+ 1 - 0
feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ErrorCodeConstants.java

@@ -27,5 +27,6 @@ public interface ErrorCodeConstants {
     ErrorCode PT_PROFIT_DAILY_STATISTICS_LOG_NOT_EXISTS = new ErrorCode(1_002_030_020, "查询该日的记录不存在");
     ErrorCode SOCIAL_STATUS_CHANGE_LOG_NOT_EXISTS = new ErrorCode(1_002_030_021, "查询日志记录不存在");
     ErrorCode GROSS_PROFIT_BONUS_QUOTA_PERC_EXCEED_MAXIMUM_LIMIT = new ErrorCode(1_002_030_022, "合赢奖不能超过最大限制");
+    ErrorCode USER_SIGN_IN_LOG_NOT_EXISTS = new ErrorCode(1_002_030_023, "签到日志不存在");
 
 }

+ 7 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/socialstatuschangelog/SocialStatusChangeLogController.java

@@ -91,4 +91,11 @@ public class SocialStatusChangeLogController {
                         BeanUtils.toBean(list, SocialStatusChangeLogRespVO.class));
     }
 
+    @GetMapping("/getUserSignLog")
+    @Operation(summary = "获得会员身价变化日志分页")
+    @PreAuthorize("@ss.hasPermission('distri:social-status-change-log:create')")
+    public CommonResult<PageResult<UserSignSocialLogRespVO>> getUserSignLog(@Valid SocialStatusChangeLogPageReqVO pageReqVO) {
+        return success(socialStatusChangeLogService.getUserSignLog(pageReqVO));
+    }
+
 }

+ 23 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/socialstatuschangelog/vo/UserSignSocialLogRespVO.java

@@ -0,0 +1,23 @@
+package cn.newfeifan.mall.module.distri.controller.admin.socialstatuschangelog.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.newfeifan.mall.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 会员签到身价变化日志分页 Request VO")
+@Data
+public class UserSignSocialLogRespVO {
+    @Schema(description = "编号", example = "8042")
+    private Long id;
+
+    @Schema(description = "身价点数在本类别操作的变化值")
+    private Long variationValue;
+
+    @Schema(description = "操作时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+}

+ 94 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usersigninlog/UserSignInLogController.java

@@ -0,0 +1,94 @@
+package cn.newfeifan.mall.module.distri.controller.admin.usersigninlog;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.CommonResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
+
+import cn.newfeifan.mall.framework.excel.core.util.ExcelUtils;
+
+import cn.newfeifan.mall.framework.operatelog.core.annotations.OperateLog;
+import static cn.newfeifan.mall.framework.operatelog.core.enums.OperateTypeEnum.*;
+
+import cn.newfeifan.mall.module.distri.controller.admin.usersigninlog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.usersigninlog.UserSignInLogDO;
+import cn.newfeifan.mall.module.distri.service.usersigninlog.UserSignInLogService;
+
+@Tag(name = "管理后台 - 用户签到日志")
+@RestController
+@RequestMapping("/distri/user-sign-in-log")
+@Validated
+public class UserSignInLogController {
+
+    @Resource
+    private UserSignInLogService userSignInLogService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建用户签到日志")
+    @PreAuthorize("@ss.hasPermission('distri:user-sign-in-log:create')")
+    public CommonResult<Long> createUserSignInLog(@Valid @RequestBody UserSignInLogSaveReqVO createReqVO) {
+        return success(userSignInLogService.createUserSignInLog(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新用户签到日志")
+    @PreAuthorize("@ss.hasPermission('distri:user-sign-in-log:update')")
+    public CommonResult<Boolean> updateUserSignInLog(@Valid @RequestBody UserSignInLogSaveReqVO updateReqVO) {
+        userSignInLogService.updateUserSignInLog(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除用户签到日志")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('distri:user-sign-in-log:delete')")
+    public CommonResult<Boolean> deleteUserSignInLog(@RequestParam("id") Long id) {
+        userSignInLogService.deleteUserSignInLog(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得用户签到日志")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('distri:user-sign-in-log:query')")
+    public CommonResult<UserSignInLogRespVO> getUserSignInLog(@RequestParam("id") Long id) {
+        UserSignInLogDO userSignInLog = userSignInLogService.getUserSignInLog(id);
+        return success(BeanUtils.toBean(userSignInLog, UserSignInLogRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得用户签到日志分页")
+    @PreAuthorize("@ss.hasPermission('distri:user-sign-in-log:query')")
+    public CommonResult<PageResult<UserSignInLogRespVO>> getUserSignInLogPage(@Valid UserSignInLogPageReqVO pageReqVO) {
+        PageResult<UserSignInLogDO> pageResult = userSignInLogService.getUserSignInLogPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, UserSignInLogRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出用户签到日志 Excel")
+    @PreAuthorize("@ss.hasPermission('distri:user-sign-in-log:export')")
+    @OperateLog(type = EXPORT)
+    public void exportUserSignInLogExcel(@Valid UserSignInLogPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<UserSignInLogDO> list = userSignInLogService.getUserSignInLogPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "用户签到日志.xls", "数据", UserSignInLogRespVO.class,
+                        BeanUtils.toBean(list, UserSignInLogRespVO.class));
+    }
+
+}

+ 27 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usersigninlog/vo/UserSignInLogPageReqVO.java

@@ -0,0 +1,27 @@
+package cn.newfeifan.mall.module.distri.controller.admin.usersigninlog.vo;
+
+import lombok.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.newfeifan.mall.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 用户签到日志分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class UserSignInLogPageReqVO extends PageParam {
+
+    @Schema(description = "签到的用户ID", example = "29837")
+    private Long userId;
+
+    @Schema(description = "连续签到天数")
+    private Integer runningDays;
+
+    @Schema(description = "操作时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 29 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usersigninlog/vo/UserSignInLogRespVO.java

@@ -0,0 +1,29 @@
+package cn.newfeifan.mall.module.distri.controller.admin.usersigninlog.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 用户签到日志 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class UserSignInLogRespVO {
+
+    @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24258")
+    @ExcelProperty("主键id")
+    private Long id;
+
+    @Schema(description = "签到的用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "29837")
+    @ExcelProperty("签到的用户ID")
+    private Long userId;
+
+    @Schema(description = "连续签到天数", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("连续签到天数")
+    private Integer runningDays;
+
+    @Schema(description = "操作时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("操作时间")
+    private LocalDateTime createTime;
+
+}

+ 22 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usersigninlog/vo/UserSignInLogSaveReqVO.java

@@ -0,0 +1,22 @@
+package cn.newfeifan.mall.module.distri.controller.admin.usersigninlog.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 用户签到日志新增/修改 Request VO")
+@Data
+public class UserSignInLogSaveReqVO {
+
+    @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24258")
+    private Long id;
+
+    @Schema(description = "签到的用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "29837")
+    @NotNull(message = "签到的用户ID不能为空")
+    private Long userId;
+
+    @Schema(description = "连续签到天数", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "连续签到天数不能为空")
+    private Integer runningDays;
+
+}

+ 36 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/usersigninlog/UserSignInLogDO.java

@@ -0,0 +1,36 @@
+package cn.newfeifan.mall.module.distri.dal.dataobject.usersigninlog;
+
+import lombok.*;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 用户签到日志 DO
+ *
+ * @author 非繁人
+ */
+@TableName("distri_user_sign_in_log")
+@KeySequence("distri_user_sign_in_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class UserSignInLogDO extends BaseDO {
+
+    /**
+     * 主键id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 签到的用户ID
+     */
+    private Long userId;
+    /**
+     * 连续签到天数
+     */
+    private Integer runningDays;
+
+}

+ 8 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/socialstatuschangelog/SocialStatusChangeLogMapper.java

@@ -5,9 +5,11 @@ import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
 import cn.newfeifan.mall.module.distri.dal.dataobject.socialstatuschangelog.SocialStatusChangeLogDO;
+import cn.newfeifan.mall.module.distri.enums.SocialStatusEnum;
 import org.apache.ibatis.annotations.Mapper;
 import cn.newfeifan.mall.module.distri.controller.admin.socialstatuschangelog.vo.*;
 
+
 /**
  * 会员身价变化日志 Mapper
  *
@@ -30,4 +32,10 @@ public interface SocialStatusChangeLogMapper extends BaseMapperX<SocialStatusCha
                 .orderByDesc(SocialStatusChangeLogDO::getId));
     }
 
+     default PageResult<SocialStatusChangeLogDO> getUserSignLog(SocialStatusChangeLogPageReqVO pageReqVO){
+        return selectPage(pageReqVO ,new LambdaQueryWrapperX<SocialStatusChangeLogDO>()
+                .eq(SocialStatusChangeLogDO::getUserId, pageReqVO.getUserId())
+                .eq(SocialStatusChangeLogDO::getSocialStatusChangeCategoryId, SocialStatusEnum.SIGN_IN_SOCIAL.getStatus())
+        );
+     }
 }

+ 27 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/usersigninlog/UserSignInLogMapper.java

@@ -0,0 +1,27 @@
+package cn.newfeifan.mall.module.distri.dal.mysql.usersigninlog;
+
+
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
+import cn.newfeifan.mall.module.distri.dal.dataobject.usersigninlog.UserSignInLogDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.distri.controller.admin.usersigninlog.vo.*;
+
+/**
+ * 用户签到日志 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface UserSignInLogMapper extends BaseMapperX<UserSignInLogDO> {
+
+    default PageResult<UserSignInLogDO> selectPage(UserSignInLogPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<UserSignInLogDO>()
+                .eqIfPresent(UserSignInLogDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(UserSignInLogDO::getRunningDays, reqVO.getRunningDays())
+                .betweenIfPresent(UserSignInLogDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(UserSignInLogDO::getId));
+    }
+
+}

+ 2 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/socialstatuschangelog/SocialStatusChangeLogService.java

@@ -1,6 +1,7 @@
 package cn.newfeifan.mall.module.distri.service.socialstatuschangelog;
 
 import javax.validation.*;
+
 import cn.newfeifan.mall.module.distri.controller.admin.socialstatuschangelog.vo.*;
 import cn.newfeifan.mall.module.distri.dal.dataobject.socialstatuschangelog.SocialStatusChangeLogDO;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
@@ -63,4 +64,5 @@ public interface SocialStatusChangeLogService {
      */
     PageResult<SocialStatusChangeLogDO> getSocialStatusChangeLogPage(SocialStatusChangeLogPageReqVO pageReqVO);
 
+    PageResult<UserSignSocialLogRespVO> getUserSignLog(SocialStatusChangeLogPageReqVO pageReqVO);
 }

+ 6 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/socialstatuschangelog/SocialStatusChangeLogServiceImpl.java

@@ -87,4 +87,10 @@ public class SocialStatusChangeLogServiceImpl implements SocialStatusChangeLogSe
         return socialStatusChangeLogMapper.selectPage(pageReqVO);
     }
 
+    @Override
+    public PageResult<UserSignSocialLogRespVO> getUserSignLog(SocialStatusChangeLogPageReqVO pageReqVO) {
+        PageResult<SocialStatusChangeLogDO> userSignLog = socialStatusChangeLogMapper.getUserSignLog(pageReqVO);
+        return BeanUtils.toBean(userSignLog, UserSignSocialLogRespVO.class);
+    }
+
 }

+ 53 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/usersigninlog/UserSignInLogService.java

@@ -0,0 +1,53 @@
+package cn.newfeifan.mall.module.distri.service.usersigninlog;
+
+import javax.validation.*;
+import cn.newfeifan.mall.module.distri.controller.admin.usersigninlog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.usersigninlog.UserSignInLogDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+/**
+ * 用户签到日志 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface UserSignInLogService {
+
+    /**
+     * 创建用户签到日志
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createUserSignInLog(@Valid UserSignInLogSaveReqVO createReqVO);
+
+    /**
+     * 更新用户签到日志
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateUserSignInLog(@Valid UserSignInLogSaveReqVO updateReqVO);
+
+    /**
+     * 删除用户签到日志
+     *
+     * @param id 编号
+     */
+    void deleteUserSignInLog(Long id);
+
+    /**
+     * 获得用户签到日志
+     *
+     * @param id 编号
+     * @return 用户签到日志
+     */
+    UserSignInLogDO getUserSignInLog(Long id);
+
+    /**
+     * 获得用户签到日志分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 用户签到日志分页
+     */
+    PageResult<UserSignInLogDO> getUserSignInLogPage(UserSignInLogPageReqVO pageReqVO);
+
+}

+ 70 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/usersigninlog/UserSignInLogServiceImpl.java

@@ -0,0 +1,70 @@
+package cn.newfeifan.mall.module.distri.service.usersigninlog;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import cn.newfeifan.mall.module.distri.controller.admin.usersigninlog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.usersigninlog.UserSignInLogDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+
+import cn.newfeifan.mall.module.distri.dal.mysql.usersigninlog.UserSignInLogMapper;
+
+import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
+
+/**
+ * 用户签到日志 Service 实现类
+ *
+ * @author 非繁人
+ */
+@Service
+@Validated
+public class UserSignInLogServiceImpl implements UserSignInLogService {
+
+    @Resource
+    private UserSignInLogMapper userSignInLogMapper;
+
+    @Override
+    public Long createUserSignInLog(UserSignInLogSaveReqVO createReqVO) {
+        // 插入
+        UserSignInLogDO userSignInLog = BeanUtils.toBean(createReqVO, UserSignInLogDO.class);
+        userSignInLogMapper.insert(userSignInLog);
+        // 返回
+        return userSignInLog.getId();
+    }
+
+    @Override
+    public void updateUserSignInLog(UserSignInLogSaveReqVO updateReqVO) {
+        // 校验存在
+        validateUserSignInLogExists(updateReqVO.getId());
+        // 更新
+        UserSignInLogDO updateObj = BeanUtils.toBean(updateReqVO, UserSignInLogDO.class);
+        userSignInLogMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteUserSignInLog(Long id) {
+        // 校验存在
+        validateUserSignInLogExists(id);
+        // 删除
+        userSignInLogMapper.deleteById(id);
+    }
+
+    private void validateUserSignInLogExists(Long id) {
+        if (userSignInLogMapper.selectById(id) == null) {
+            throw exception(USER_SIGN_IN_LOG_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public UserSignInLogDO getUserSignInLog(Long id) {
+        return userSignInLogMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<UserSignInLogDO> getUserSignInLogPage(UserSignInLogPageReqVO pageReqVO) {
+        return userSignInLogMapper.selectPage(pageReqVO);
+    }
+
+}

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/usersigninlog/UserSignInLogMapper.xml

@@ -0,0 +1,12 @@
+<?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="cn.newfeifan.mall.module.distri.dal.mysql.usersigninlog.UserSignInLogMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 131 - 0
feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/usersigninlog/UserSignInLogServiceImplTest.java

@@ -0,0 +1,131 @@
+package cn.newfeifan.mall.module.distri.service.usersigninlog;
+
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+import javax.annotation.Resource;
+
+import cn.newfeifan.mall.framework.test.core.ut.BaseDbUnitTest;
+
+import cn.newfeifan.mall.module.distri.controller.admin.usersigninlog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.usersigninlog.UserSignInLogDO;
+import cn.newfeifan.mall.module.distri.dal.mysql.usersigninlog.UserSignInLogMapper;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+import org.springframework.context.annotation.Import;
+
+import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
+import static cn.newfeifan.mall.framework.test.core.util.AssertUtils.*;
+import static cn.newfeifan.mall.framework.test.core.util.RandomUtils.*;
+import static cn.newfeifan.mall.framework.common.util.date.LocalDateTimeUtils.*;
+import static cn.newfeifan.mall.framework.common.util.object.ObjectUtils.*;
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * {@link UserSignInLogServiceImpl} 的单元测试类
+ *
+ * @author 非繁人
+ */
+@Import(UserSignInLogServiceImpl.class)
+public class UserSignInLogServiceImplTest extends BaseDbUnitTest {
+
+    @Resource
+    private UserSignInLogServiceImpl userSignInLogService;
+
+    @Resource
+    private UserSignInLogMapper userSignInLogMapper;
+
+    @Test
+    public void testCreateUserSignInLog_success() {
+        // 准备参数
+        UserSignInLogSaveReqVO createReqVO = randomPojo(UserSignInLogSaveReqVO.class).setId(null);
+
+        // 调用
+        Long userSignInLogId = userSignInLogService.createUserSignInLog(createReqVO);
+        // 断言
+        assertNotNull(userSignInLogId);
+        // 校验记录的属性是否正确
+        UserSignInLogDO userSignInLog = userSignInLogMapper.selectById(userSignInLogId);
+        assertPojoEquals(createReqVO, userSignInLog, "id");
+    }
+
+    @Test
+    public void testUpdateUserSignInLog_success() {
+        // mock 数据
+        UserSignInLogDO dbUserSignInLog = randomPojo(UserSignInLogDO.class);
+        userSignInLogMapper.insert(dbUserSignInLog);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        UserSignInLogSaveReqVO updateReqVO = randomPojo(UserSignInLogSaveReqVO.class, o -> {
+            o.setId(dbUserSignInLog.getId()); // 设置更新的 ID
+        });
+
+        // 调用
+        userSignInLogService.updateUserSignInLog(updateReqVO);
+        // 校验是否更新正确
+        UserSignInLogDO userSignInLog = userSignInLogMapper.selectById(updateReqVO.getId()); // 获取最新的
+        assertPojoEquals(updateReqVO, userSignInLog);
+    }
+
+    @Test
+    public void testUpdateUserSignInLog_notExists() {
+        // 准备参数
+        UserSignInLogSaveReqVO updateReqVO = randomPojo(UserSignInLogSaveReqVO.class);
+
+        // 调用, 并断言异常
+        assertServiceException(() -> userSignInLogService.updateUserSignInLog(updateReqVO), USER_SIGN_IN_LOG_NOT_EXISTS);
+    }
+
+    @Test
+    public void testDeleteUserSignInLog_success() {
+        // mock 数据
+        UserSignInLogDO dbUserSignInLog = randomPojo(UserSignInLogDO.class);
+        userSignInLogMapper.insert(dbUserSignInLog);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        Long id = dbUserSignInLog.getId();
+
+        // 调用
+        userSignInLogService.deleteUserSignInLog(id);
+       // 校验数据不存在了
+       assertNull(userSignInLogMapper.selectById(id));
+    }
+
+    @Test
+    public void testDeleteUserSignInLog_notExists() {
+        // 准备参数
+        Long id = randomLongId();
+
+        // 调用, 并断言异常
+        assertServiceException(() -> userSignInLogService.deleteUserSignInLog(id), USER_SIGN_IN_LOG_NOT_EXISTS);
+    }
+
+    @Test
+    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+    public void testGetUserSignInLogPage() {
+       // mock 数据
+       UserSignInLogDO dbUserSignInLog = randomPojo(UserSignInLogDO.class, o -> { // 等会查询到
+           o.setUserId(null);
+           o.setRunningDays(null);
+           o.setCreateTime(null);
+       });
+       userSignInLogMapper.insert(dbUserSignInLog);
+       // 测试 userId 不匹配
+       userSignInLogMapper.insert(cloneIgnoreId(dbUserSignInLog, o -> o.setUserId(null)));
+       // 测试 runningDays 不匹配
+       userSignInLogMapper.insert(cloneIgnoreId(dbUserSignInLog, o -> o.setRunningDays(null)));
+       // 测试 createTime 不匹配
+       userSignInLogMapper.insert(cloneIgnoreId(dbUserSignInLog, o -> o.setCreateTime(null)));
+       // 准备参数
+       UserSignInLogPageReqVO reqVO = new UserSignInLogPageReqVO();
+       reqVO.setUserId(null);
+       reqVO.setRunningDays(null);
+       reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+
+       // 调用
+       PageResult<UserSignInLogDO> pageResult = userSignInLogService.getUserSignInLogPage(reqVO);
+       // 断言
+       assertEquals(1, pageResult.getTotal());
+       assertEquals(1, pageResult.getList().size());
+       assertPojoEquals(dbUserSignInLog, pageResult.getList().get(0));
+    }
+
+}

+ 6 - 1
feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/controller/admin/shop/ShopController.java

@@ -5,7 +5,6 @@ import cn.newfeifan.mall.sale.controller.admin.shop.vo.ShopPageReqVO;
 import cn.newfeifan.mall.sale.controller.admin.shop.vo.ShopRespVO;
 import cn.newfeifan.mall.sale.controller.admin.shop.vo.ShopSaveReqVO;
 import cn.newfeifan.mall.sale.dal.redis.ShopMessage;
-import cn.newfeifan.mall.sale.service.merchant.MerchantService;
 import cn.newfeifan.mall.sale.service.shop.ShopService;
 import org.springframework.web.bind.annotation.*;
 
@@ -183,4 +182,10 @@ public class ShopController {
         return success(ids);
     }
 
+    @GetMapping("/get-All-Shop")
+    @Operation(summary = "获取所有的用户")
+    @PreAuthorize("@ss.hasPermission('sale:merchant:query')")
+    public CommonResult<List<UserRespVO>> getAllUser() {
+        return success(shopService.selectAllList());
+    }
 }

+ 2 - 0
feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/service/shop/ShopService.java

@@ -104,4 +104,6 @@ public interface ShopService {
     List<ShopRespVO> getAllShopByUserId(Long loginUserId);
 
     List<Long> getShopByName(String shopName);
+
+    List<UserRespVO> selectAllList();
 }

+ 6 - 0
feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/service/shop/ShopServiceImpl.java

@@ -172,4 +172,10 @@ public class ShopServiceImpl implements ShopService {
         return shopMapper.selectShopIds(shopName);
     }
 
+    @Override
+    public List<UserRespVO> selectAllList() {
+        List<ShopDO> shopDOS = shopMapper.selectList();
+        return BeanUtils.toBean(shopDOS, UserRespVO.class);
+    }
+
 }