Pārlūkot izejas kodu

用户中心API

chao 3 gadi atpakaļ
vecāks
revīzija
e995991959

+ 0 - 8
src/main/java/com/caimei365/user/controller/ShopApi.java

@@ -8,7 +8,6 @@ import com.caimei365.user.model.vo.ShopHomeVo;
 import com.caimei365.user.service.ShopService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -170,11 +169,4 @@ public class ShopApi {
         return shopService.getShopPersonalData(userId);
     }
 
-
-
-    /**
-     * 【Y1】/supplier/saveShopBanner 供应商-添加,修改主页广告图
-     * 【Y1】/supplier/deleteShopBanner 供应商-删除主页广告图
-     */
-
 }

+ 132 - 0
src/main/java/com/caimei365/user/controller/UserCenterApi.java

@@ -0,0 +1,132 @@
+package com.caimei365.user.controller;
+
+import com.caimei365.user.model.ResponseJson;
+import com.caimei365.user.model.dto.AvatarDto;
+import com.caimei365.user.model.dto.MessageDto;
+import com.caimei365.user.model.vo.HelpPageVo;
+import com.caimei365.user.model.vo.PaginationVo;
+import com.caimei365.user.service.UserCenterService;
+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.apache.commons.lang.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/10/22
+ */
+@Api(tags = "用户中心API")
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/user/center")
+public class UserCenterApi {
+
+    private final UserCenterService userCenterService;
+
+    /**
+     * 查看帮助页信息(注册协议)
+     * @param helpPageId 帮助页Id
+     */
+    @ApiOperation("查看帮助页信息(注册协议)(旧:/club/protocol)")
+    @ApiImplicitParam(required = true, name = "helpPageId", value = "帮助页Id")
+    @GetMapping("/protocol")
+    public ResponseJson<HelpPageVo> getUserProtocol(Integer helpPageId) {
+        if (null == helpPageId) {
+            return ResponseJson.error("参数异常:帮助页Id不能为空!", null);
+        }
+        return userCenterService.getUserProtocol(helpPageId);
+    }
+
+    /**
+     * 保存用户头像
+     * @param avatarDto {
+     *                   userId 用户id
+     *                   image  头像图片
+     * }
+     */
+    @ApiOperation("保存用户头像(旧:/user/uploadAvatar)")
+    @PostMapping("/avatar/save")
+    public ResponseJson<Void> uploadAvatar(AvatarDto avatarDto) {
+        if (null == avatarDto.getUserId()) {
+            return ResponseJson.error("参数异常:用户Id不能为空!", null);
+        }
+        if (StringUtils.isBlank(avatarDto.getImage())) {
+            return ResponseJson.error("参数异常:用户头像不能为空!", null);
+        }
+        return userCenterService.saveUserAvatar(avatarDto.getUserId(), avatarDto.getImage());
+    }
+
+    /**
+     * 我的站内消息
+     */
+    @ApiOperation("我的站内消息(旧:/user/messageList)")
+    @GetMapping("/messages")
+    public ResponseJson<PaginationVo<Map<String, Object>>> getMessageList(Integer userId,
+                                                                          @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                                                                          @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
+        if (null == userId) {
+            return ResponseJson.error("参数异常:用户Id不能为空!", null);
+        }
+        return userCenterService.getMessageList(userId, pageNum, pageSize);
+    }
+
+    /**
+     * 站内消息-标为已读
+     * @param messageDto {
+     *                   messageIds 站内消息Id集合
+     * }
+     */
+    @ApiOperation("站内消息-标为已读(旧:/user/markAsRead)")
+    @PostMapping("/messages/read")
+    public ResponseJson<Void> markMessageAsRead(MessageDto messageDto) {
+        if (StringUtils.isBlank(messageDto.getMessageIds())) {
+            return ResponseJson.error("参数异常:消息Id不能为空!", null);
+        }
+        return userCenterService.markMessageAsRead(messageDto.getMessageIds());
+    }
+
+    /**
+     * 站内消息-删除
+     * @param messageDto {
+     *                   messageIds 站内消息Id集合
+     * }
+     */
+    @ApiOperation("站内消息-删除(旧:/user/deleteMessage)")
+    @PostMapping("/messages/delete")
+    public ResponseJson<Void> deleteMessages(MessageDto messageDto) {
+        if (StringUtils.isBlank(messageDto.getMessageIds())) {
+            return ResponseJson.error("参数异常:消息Id不能为空!", null);
+        }
+        return userCenterService.deleteMessages(messageDto.getMessageIds());
+    }
+
+    /**
+     * 我的账户余额明细
+     */
+    @ApiOperation("账户余额明细(旧:/personalCenter/touchBalance)")
+    @ApiImplicitParams({
+        @ApiImplicitParam(required = true, name = "userId", value = "用户Id"),
+        @ApiImplicitParam(required = false, name = "year", value = "年份"),
+        @ApiImplicitParam(required = false, name = "month", value = "月份"),
+        @ApiImplicitParam(required = false, name = "type", value = "收支类型:1收入,2支出"),
+        @ApiImplicitParam(required = false, name = "pageNum", value = "第几页"),
+        @ApiImplicitParam(required = false, name = "pageSize", value = "一页多少条")
+    })
+    @GetMapping("/balance")
+    public ResponseJson<Map<String, Object>> getBalanceRecord(Integer userId, String type, Integer year, Integer month,
+                                                                          @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                                                                          @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
+        if (null == userId) {
+            return ResponseJson.error("参数异常:用户Id不能为空!", null);
+        }
+        return userCenterService.getBalanceRecord(userId, type, year, month, pageNum, pageSize);
+    }
+
+}

+ 48 - 0
src/main/java/com/caimei365/user/mapper/UserCenterMapper.java

@@ -0,0 +1,48 @@
+package com.caimei365.user.mapper;
+
+import com.caimei365.user.model.vo.BalanceRecordVo;
+import com.caimei365.user.model.vo.HelpPageVo;
+import org.apache.ibatis.annotations.MapKey;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/10/22
+ */
+@Mapper
+public interface UserCenterMapper {
+    /**
+     * 查看帮助页信息(注册协议)
+     */
+    HelpPageVo getUserProtocol(Integer helpPageId);
+    /**
+     * 保存用户头像
+     */
+    void saveUserAvatar(Integer userId, String image);
+    /**
+     * 获取我的站内消息
+     */
+    @MapKey("messageId")
+    List<Map<String, Object>> getMessageList(Integer userId);
+    /**
+     * 站内消息-标为已读
+     */
+    void updateMessageAsRead(String messageId);
+    /**
+     * 删除消息
+     */
+    void deleteMessage(String messageId);
+    /**
+     * 我的账户余额明细
+     */
+    List<BalanceRecordVo> getBalanceRecord(BalanceRecordVo balanceRecord);
+    /**
+     * 可用余额
+     */
+    Double getAbleUserMoney(Integer userId);
+}

+ 28 - 0
src/main/java/com/caimei365/user/model/dto/AvatarDto.java

@@ -0,0 +1,28 @@
+package com.caimei365.user.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/10/22
+ */
+@ApiModel("上传头像")
+@Data
+public class AvatarDto implements Serializable {
+    /**
+     * 用户Id
+     */
+    @ApiModelProperty("用户Id")
+    private Integer userId;
+    /**
+     * 头像
+     */
+    @ApiModelProperty("头像")
+    private String image;
+}

+ 23 - 0
src/main/java/com/caimei365/user/model/dto/MessageDto.java

@@ -0,0 +1,23 @@
+package com.caimei365.user.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/10/22
+ */
+@ApiModel("站内消息")
+@Data
+public class MessageDto implements Serializable {
+    /**
+     * 站内消息Id集合
+     */
+    @ApiModelProperty("站内消息Id集合")
+    private String messageIds;
+}

+ 2 - 0
src/main/java/com/caimei365/user/model/dto/ShopBannerDto.java

@@ -1,5 +1,6 @@
 package com.caimei365.user.model.dto;
 
+import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -11,6 +12,7 @@ import java.io.Serializable;
  * @author : Charles
  * @date : 2021/10/22
  */
+@ApiModel("供应商轮播图")
 @Data
 public class ShopBannerDto implements Serializable {
     /**

+ 72 - 0
src/main/java/com/caimei365/user/model/vo/BalanceRecordVo.java

@@ -0,0 +1,72 @@
+package com.caimei365.user.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/10/22
+ */
+@Data
+public class BalanceRecordVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private Integer id;
+    /**
+     * 用户ID
+     */
+    private Integer userId;
+    /**
+     * 收支类型:1收入,2支出
+     */
+    private String type;
+    /**
+     * 余额类型:1余额抵扣,2多收退款到余额,3申请退款,4余额充值,5余额提现,6订金订单充值,7余额订单充值,8订金订单退款,9余额订单退款
+     */
+    private String balanceType;
+    /**
+     * 添加时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date addDate;
+    /**
+     * 金额
+     */
+    private Double amount;
+    /**
+     * 主订单ID(适用余额类型1,3[类型为3多次退款存在相同记录ID则需通过退款ID唯一区分])
+     */
+    private Integer orderId;
+    /**
+     * 收款ID(适用余额类型2)
+     */
+    private Integer receiptId;
+    /**
+     * 退货退款ID(适用余额类型3)
+     */
+    private Integer returnedId;
+    /**
+     * 用户提现ID对应表(cm_user_balance_withdrawals)
+     */
+    private Integer withdrawalsId;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 删除标记 0 否,其余是
+     */
+    private String delFlag;
+    /**
+     * 开始时间
+     */
+    private String startTime;
+    /**
+     * 结束时间
+     */
+    private String endTime;
+}

+ 31 - 0
src/main/java/com/caimei365/user/model/vo/HelpPageVo.java

@@ -0,0 +1,31 @@
+package com.caimei365.user.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class HelpPageVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private Integer helpPageId;
+
+    private Integer helpPageTypeId;
+
+    private String title;
+
+    private String content;
+
+    private String contentTxt;
+
+    private String linkName;
+
+    private Integer sortIndex;
+
+    private String validFlag;
+
+    private String showFlag;
+}

+ 50 - 0
src/main/java/com/caimei365/user/service/UserCenterService.java

@@ -0,0 +1,50 @@
+package com.caimei365.user.service;
+
+import com.caimei365.user.model.ResponseJson;
+import com.caimei365.user.model.vo.HelpPageVo;
+import com.caimei365.user.model.vo.PaginationVo;
+
+import java.util.Map;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/10/22
+ */
+public interface UserCenterService {
+    /**
+     * 查看帮助页信息(注册协议)
+     * @param helpPageId 帮助页Id
+     */
+    ResponseJson<HelpPageVo> getUserProtocol(Integer helpPageId);
+    /**
+     * 保存用户头像
+     * @param userId 用户id
+     * @param image  头像图片
+     */
+    ResponseJson<Void> saveUserAvatar(Integer userId, String image);
+    /**
+     * 我的站内消息
+     * @param userId 用户Id
+     */
+    ResponseJson<PaginationVo<Map<String, Object>>> getMessageList(Integer userId, int pageNum, int pageSize);
+    /**
+     * 站内消息-标为已读
+     * @param messageIds 站内消息Id集合
+     */
+    ResponseJson<Void> markMessageAsRead(String messageIds);
+    /**
+     * 站内消息-删除
+     * @param messageIds 站内消息Id集合
+     */
+    ResponseJson<Void> deleteMessages(String messageIds);
+    /**
+     * 我的账户余额明细
+     * @param userId  用户Id
+     * @param type    收支类型:1收入,2支出
+     * @param year    年
+     * @param month   月
+     */
+    ResponseJson<Map<String, Object>> getBalanceRecord(Integer userId, String type, Integer year, Integer month, int pageNum, int pageSize);
+}

+ 137 - 0
src/main/java/com/caimei365/user/service/impl/UserCenterServiceImpl.java

@@ -0,0 +1,137 @@
+package com.caimei365.user.service.impl;
+
+import com.caimei365.user.mapper.UserCenterMapper;
+import com.caimei365.user.model.ResponseJson;
+import com.caimei365.user.model.vo.BalanceRecordVo;
+import com.caimei365.user.model.vo.HelpPageVo;
+import com.caimei365.user.model.vo.PaginationVo;
+import com.caimei365.user.service.UserCenterService;
+import com.github.pagehelper.PageHelper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/10/22
+ */
+@Slf4j
+@Service
+public class UserCenterServiceImpl implements UserCenterService {
+    @Resource
+    private UserCenterMapper userCenterMapper;
+
+    /**
+     * 查看帮助页信息(注册协议)
+     *
+     * @param helpPageId 帮助页Id
+     */
+    @Override
+    public ResponseJson<HelpPageVo> getUserProtocol(Integer helpPageId) {
+        HelpPageVo helpPage = userCenterMapper.getUserProtocol(helpPageId);
+        return ResponseJson.success(helpPage);
+    }
+
+    /**
+     * 保存用户头像
+     *
+     * @param userId 用户id
+     * @param image  头像图片
+     */
+    @Override
+    public ResponseJson<Void> saveUserAvatar(Integer userId, String image) {
+        userCenterMapper.saveUserAvatar(userId, image);
+        return ResponseJson.success(null);
+    }
+
+    /**
+     * 我的站内消息
+     *
+     * @param userId   用户Id
+     */
+    @Override
+    public ResponseJson<PaginationVo<Map<String, Object>>> getMessageList(Integer userId, int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        List<Map<String, Object>> messageList = userCenterMapper.getMessageList(userId);
+        PaginationVo<Map<String, Object>> pageData = new PaginationVo<>(messageList);
+        return ResponseJson.success(pageData);
+    }
+
+    /**
+     * 站内消息-标为已读
+     *
+     * @param messageIds 站内消息Id集合
+     */
+    @Override
+    public ResponseJson<Void> markMessageAsRead(String messageIds) {
+        String[] split = messageIds.split(",");
+        for (String messageId : split) {
+            if (StringUtils.isNotBlank(messageId)) {
+                userCenterMapper.updateMessageAsRead(messageId);
+            }
+        }
+        return ResponseJson.success(null);
+    }
+
+    /**
+     * 站内消息-删除
+     *
+     * @param messageIds 站内消息Id集合
+     */
+    @Override
+    public ResponseJson<Void> deleteMessages(String messageIds) {
+        String[] split = messageIds.split(",");
+        for (String messageId : split) {
+            if (StringUtils.isNotBlank(messageId)) {
+                userCenterMapper.deleteMessage(messageId);
+            }
+        }
+        return ResponseJson.success(null);
+    }
+
+    /**
+     * 我的账户余额明细
+     *
+     * @param userId   用户Id
+     * @param type     收支类型:1收入,2支出
+     * @param year     年
+     * @param month    月
+     */
+    @Override
+    public ResponseJson<Map<String, Object>> getBalanceRecord(Integer userId, String type, Integer year, Integer month, int pageNum, int pageSize) {
+        BalanceRecordVo balanceRecord = new BalanceRecordVo();
+        balanceRecord.setUserId(userId);
+        balanceRecord.setType(type);
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.YEAR, year);
+        calendar.set(Calendar.MONTH, month - 1);
+        calendar.set(Calendar.DAY_OF_MONTH, calendar.getMinimum(Calendar.DATE));
+        String startTime = format.format(calendar.getTime()) + " 00:00:00";
+        balanceRecord.setStartTime(startTime);
+        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DATE));
+        String endTime = format.format(calendar.getTime()) + " 23:59:59";
+        balanceRecord.setEndTime(endTime);
+        PageHelper.startPage(pageNum, pageSize);
+        List<BalanceRecordVo> balanceRecordList = userCenterMapper.getBalanceRecord(balanceRecord);
+        PaginationVo<BalanceRecordVo> pageDate = new PaginationVo<>(balanceRecordList);
+        Double ableUserMoney = userCenterMapper.getAbleUserMoney(userId);
+        Map<String, Object> map = new HashMap<>();
+        if (null != ableUserMoney && ableUserMoney > 0d) {
+            map.put("ableUserMoney", String.format("%.2f", ableUserMoney));
+        } else {
+            map.put("ableUserMoney", "0.00");
+        }
+        map.put("pageDate", pageDate);
+        return ResponseJson.success(map);
+    }
+}

+ 64 - 0
src/main/resources/mapper/UserCenterMapper.xml

@@ -0,0 +1,64 @@
+<?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.caimei365.user.mapper.UserCenterMapper">
+    <update id="saveUserAvatar">
+        UPDATE user SET image = #{image} WHERE userID = #{userId}
+    </update>
+    <update id="updateMessageAsRead">
+        UPDATE message SET readFlag = '1' WHERE messageID = #{messageId}
+    </update>
+    <delete id="deleteMessage">
+        DELETE FROM message WHERE messageID = #{messageId}
+    </delete>
+    <select id="getUserProtocol" resultType="com.caimei365.user.model.vo.HelpPageVo">
+        SELECT helpPageID AS helpPageId,
+               helpPageTypeID AS helpPageTypeId,
+               title,
+               content,
+               contentTxt,
+               linkName,
+               sortIndex,
+               validFlag,
+               showFlag
+        FROM helppage WHERE helpPageID = #{helpPageId}
+    </select>
+    <select id="getMessageList" resultType="java.util.Map">
+        SELECT
+            messageID AS messageId,
+            content,
+            addTime,
+            readFlag
+        FROM message
+        WHERE toUserID = #{userId}
+        ORDER BY addTime DESC
+    </select>
+    <select id="getBalanceRecord" resultType="com.caimei365.user.model.vo.BalanceRecordVo">
+        SELECT
+            id,
+            userId,
+            type,
+            balanceType,
+            addDate,
+            amount,
+            orderId,
+            receiptId,
+            returnedId,
+            withdrawalsId,
+            remark,
+            delFlag
+        FROM cm_user_balance_record
+        <where>
+            <if test="type != null and type != ''">
+                AND type = #{type}
+            </if>
+            AND addDate <![CDATA[ >= ]]> #{startTime}
+            AND addDate <![CDATA[ <= ]]> #{endTime}
+            AND userId = #{userId}
+            AND delFlag = '0'
+        </where>
+        ORDER BY addDate DESC
+    </select>
+    <select id="getAbleUserMoney" resultType="java.lang.Double">
+        SELECT ableUserMoney FROM user WHERE userID = #{userId}
+    </select>
+</mapper>