- j3_liuliang
- 上期写了商家员工的相关功能,现在我们来实现一下快捷餐饮店家后台最后的一项功能系统相关的功能
项目相关文章导航:
- 快捷点餐项目简介
- 餐饮系统设计概括
- 餐饮系统店家后端基础功能构建
- 快捷餐饮之店家后台OSS文件管理实现
- 快捷餐饮之店家后台厨艺秀实现
- 快捷餐饮之店家后台菜品分类及菜品管理实现
- 快捷餐饮之店家后台评论管理及餐桌管理实现
- 快捷餐饮之店家后台订单管理实现
- 快捷餐饮之店家后台员工管理实现
- 快捷餐饮之店家系统相关功能
项目Git地址: 点这里哦!
一、系统管理
1.1 编写系统数据相关信息DTO

/**
 * @Package: cn.liuliang.quickdinesysstore.entity.dto
 * @Author: liuliang
 * @CreateTime: 2020/11/27 - 8:32
 * @Description:
 */
@Data
@ApiModel(value="系统数据相关信息DTO", description="")
public class SysDataDTO {
    @ApiModelProperty(value = "系统客户数量相关信息DTO")
    private SysUserDataDTO sysUserDataDTO;
    @ApiModelProperty(value = "系统评论相关数据DTO")
    private SysDiscussDataDTO sysDiscussDataDTO;
    @ApiModelProperty(value = "系统交易相关数据DTO")
    private SysTransactionDataDTO sysTransactionDataDTO;
    @ApiModelProperty(value = "系统订单相关数据DTO")
    private SysOrderDataDTO sysOrderDataDTO;
}1.2 编写系统客户数量相关信息DTO
/**
 * @Package: cn.liuliang.quickdinesysstore.entity.dto
 * @Author: liuliang
 * @CreateTime: 2020/11/27 - 8:34
 * @Description:
 */
@Data
@ApiModel(value = "系统客户数量相关信息DTO", description = "")
public class SysUserDataDTO {
    @ApiModelProperty(value = "用户总数")
    private Integer[] userTotal;
    @ApiModelProperty(value = "会员数")
    private Integer[] memberNumber;
    @ApiModelProperty(value = "用户数")
    private Integer[] userNumber;
    @ApiModelProperty(value = "游客数")
    private Integer[] touristNumber;
}1.3 编写系统评论相关数据DTO
/**
 * @Package: cn.liuliang.quickdinesysstore.entity.dto
 * @Author: liuliang
 * @CreateTime: 2020/11/27 - 8:35
 * @Description:
 */
@Data
@ApiModel(value="系统评论相关数据DTO", description="")
public class SysDiscussDataDTO {
    @ApiModelProperty(value = "评论总数")
    private Integer[] discussTotal;
    @ApiModelProperty(value = "会员评论数")
    private Integer[] memberDiscussNumber;
    @ApiModelProperty(value = "用户评论数")
    private Integer[] userDiscussNumber;
    @ApiModelProperty(value = "游客评论数")
    private Integer[] touristDiscussNumber;
}1.4 编写系统交易相关数据DTO
/**
 * @Package: cn.liuliang.quickdinesysstore.entity.dto
 * @Author: liuliang
 * @CreateTime: 2020/11/27 - 8:37
 * @Description:
 */
@Data
@ApiModel(value = "系统交易相关数据DTO", description = "")
public class SysTransactionDataDTO {
    @ApiModelProperty(value = "总交易额")
    private BigDecimal[] transactionAmountTotal;
    @ApiModelProperty(value = "会员交易额")
    private BigDecimal[] memberTransactionAmount;
    @ApiModelProperty(value = "用户交易额")
    private BigDecimal[] userTransactionAmount;
    @ApiModelProperty(value = "游客交易额")
    private BigDecimal[] touristTransactionAmount;
}1.5 编写系统订单相关数据DTO
/**
 * @Package: cn.liuliang.quickdinesysstore.entity.dto
 * @Author: liuliang
 * @CreateTime: 2020/11/27 - 8:41
 * @Description:
 */
@Data
@ApiModel(value="系统订单相关数据DTO", description="")
public class SysOrderDataDTO {
    @ApiModelProperty(value = "订单总数")
    private Integer[] orderTotal;
    @ApiModelProperty(value = "会员订单数")
    private Integer[] memberOrderNumber;
    @ApiModelProperty(value = "用户订单数")
    private Integer[] userOrderNumber;
    @ApiModelProperty(value = "游客订单数")
    private Integer[] touristOrderNumber;
}1.6 编写系统控制器层

/**
 * @Package: cn.liuliang.quickdinesysstore.controller
 * @Author: liuliang
 * @CreateTime: 2020/11/8 - 13:27
 * @Description:
 */
@Api(value = "系统管理", tags = "系统管理")
@CrossOrigin
@RestController
@RequestMapping("/sys")
public class SysController {
    @Autowired
    private SysService sysService;
    @ApiOperation(value = "获取系统的结账时积分计算比例", notes = "获取系统的结账时积分计算比例")
    @GetMapping("/get-integral-ratio")
    public ResultDTO getIntegralRatio(){
        return sysService.getIntegralRatio();
    }
    @ApiOperation(value = "修改结账时积分计算比例", notes = "修改结账时积分计算比例")
    @GetMapping("/update-integral-ratio")
    public ResultDTO updateIntegralRatio(@ApiParam("积分比例") @RequestParam(value = "integralRatio", required = true) Integer integralRatio){
        return sysService.updateIntegralRatio(integralRatio);
    }
    @ApiOperation(value = "获取系统相关数据", notes = "获取系统相关数据")
    @ApiResponses({@ApiResponse(code = 200, message = "请求成功!", response = SysDataDTO.class)})
    @GetMapping("/get-data")
    public ResultDTO getData(@ApiParam("时间字符串") @RequestParam(value = "strTime", required = false, defaultValue = "") String strTime){
        return sysService.getData(strTime);
    }
}1.7 编写系统业务层

/**
 * @Package: cn.liuliang.quickdinesysstore.service
 * @Author: liuliang
 * @CreateTime: 2020/11/26 - 20:05
 * @Description:
 */
public interface SysService {
    /**
     * 获取系统的结账时积分计算比例
     * @return
     */
    ResultDTO getIntegralRatio();
    /**
     * 修改结账时积分计算比例
     * @param integralRatio
     * @return
     */
    ResultDTO updateIntegralRatio(Integer integralRatio);
    /**
     * 获取系统相关数据
     * @param strTime 时间范围字符串
     * @return
     */
    ResultDTO getData(String strTime);
}@Service
public class SysServiceImpl implements SysService {
    @Autowired
    private SysMapper sysMapper;
    @Override
    public ResultDTO getIntegralRatio() {
        Integer proportionIntegral = sysMapper.getIntegralRatio();
        return ResultDTO.success().data("data", proportionIntegral);
    }
    @Override
    public ResultDTO updateIntegralRatio(Integer integralRatio) {
        sysMapper.updateIntegralRatio(integralRatio);
        return ResultDTO.success();
    }
    @Override
    public ResultDTO getData(String strTime) {
        // 查询标识,1:查询所有数据(默认查所有),2:查询对应时间范围内数据
        int per = 1;
        // 开始时间
        String startTime = "";
        // 结束时间
        String endTime = "";
        if (!StringUtils.isEmpty(strTime)) {
            // 查询对应时间范围内数据
            per = 2;
            startTime = strTime.split(";")[0];
            endTime = strTime.split(";")[1];
        }
        SysDataDTO sysDataDTO = new SysDataDTO();
        // 设置用户相关数据
        sysDataDTO.setSysUserDataDTO(userData(per, startTime, endTime));
        // 设置评论相关数据
        sysDataDTO.setSysDiscussDataDTO(discussData(per, startTime, endTime));
        // 设置交易额相关数据
        sysDataDTO.setSysTransactionDataDTO(transactionData(per, startTime, endTime));
        // 设置订单相关数据
        sysDataDTO.setSysOrderDataDTO(orderData(per, startTime, endTime));
        return ResultDTO.success("data", sysDataDTO);
    }
    private SysOrderDataDTO orderData(int per, String startTime, String endTime) {
        SysOrderDataDTO sysOrderDataDTO = new SysOrderDataDTO();
        Integer[] orderTotal = new Integer[8];
        Integer[] memberOrderNumber = new Integer[8];
        Integer[] userOrderNumber = new Integer[8];
        Integer[] touristOrderNumber = new Integer[8];
        // 查询数据
        for (int i = 1; i <= 8; i++) {
            // 查询星期一 到 星期日的数据 及 总数据
            orderTotal[i - 1] = sysMapper.getOrderData(i, 1, per, startTime, endTime);
            memberOrderNumber[i - 1] = sysMapper.getOrderData(i, 2, per, startTime, endTime);
            userOrderNumber[i - 1] = sysMapper.getOrderData(i, 3, per, startTime, endTime);
            touristOrderNumber[i - 1] = sysMapper.getOrderData(i, 4, per, startTime, endTime);
        }
        sysOrderDataDTO.setOrderTotal(orderTotal);
        sysOrderDataDTO.setMemberOrderNumber(memberOrderNumber);
        sysOrderDataDTO.setUserOrderNumber(userOrderNumber);
        sysOrderDataDTO.setTouristOrderNumber(touristOrderNumber);
        return sysOrderDataDTO;
    }
    private SysDiscussDataDTO discussData(int per, String startTime, String endTime) {
        SysDiscussDataDTO sysDiscussDataDTO = new SysDiscussDataDTO();
        Integer[] discussTotal = new Integer[8];
        Integer[] memberDiscussNumber = new Integer[8];
        Integer[] userDiscussNumber = new Integer[8];
        Integer[] touristDiscussNumber = new Integer[8];
        // 查询数据
        for (int i = 1; i <= 8; i++) {
            // 查询星期一 到 星期日的数据 及 总数据
            discussTotal[i - 1] = sysMapper.getDiscussData(i, 1, per, startTime, endTime);
            memberDiscussNumber[i - 1] = sysMapper.getDiscussData(i, 2, per, startTime, endTime);
            userDiscussNumber[i - 1] = sysMapper.getDiscussData(i, 3, per, startTime, endTime);
            touristDiscussNumber[i - 1] = sysMapper.getDiscussData(i, 4, per, startTime, endTime);
        }
        sysDiscussDataDTO.setDiscussTotal(discussTotal);
        sysDiscussDataDTO.setMemberDiscussNumber(memberDiscussNumber);
        sysDiscussDataDTO.setUserDiscussNumber(userDiscussNumber);
        sysDiscussDataDTO.setTouristDiscussNumber(touristDiscussNumber);
        return sysDiscussDataDTO;
    }
    private SysUserDataDTO userData(int per, String startTime, String endTime) {
        SysUserDataDTO sysUserDataDTO = new SysUserDataDTO();
        Integer[] userData = new Integer[8];
        Integer[] memberNumber = new Integer[8];
        Integer[] userNumber = new Integer[8];
        Integer[] touristNumber = new Integer[8];
        // 查询数据
        for (int i = 1; i <= 8; i++) {
            // 查询星期一 到 星期日的数据 及 总数据
            userData[i - 1] = sysMapper.getUserData(i, 1, per, startTime, endTime);
            memberNumber[i - 1] = sysMapper.getUserData(i, 2, per, startTime, endTime);
            userNumber[i - 1] = sysMapper.getUserData(i, 3, per, startTime, endTime);
            touristNumber[i - 1] = sysMapper.getUserData(i, 4, per, startTime, endTime);
        }
        sysUserDataDTO.setUserTotal(userData);
        sysUserDataDTO.setMemberNumber(memberNumber);
        sysUserDataDTO.setUserNumber(userNumber);
        sysUserDataDTO.setTouristNumber(touristNumber);
        return sysUserDataDTO;
    }
    private SysTransactionDataDTO transactionData(int per, String startTime, String endTime) {
        SysTransactionDataDTO sysTransactionDataDTO = new SysTransactionDataDTO();
        BigDecimal[] transactionAmountTotal = new BigDecimal[8];
        BigDecimal[] memberTransactionAmount = new BigDecimal[8];
        BigDecimal[] userTransactionAmount = new BigDecimal[8];
        BigDecimal[] touristTransactionAmount = new BigDecimal[8];
        // 查询数据
        for (int i = 1; i <= 8; i++) {
            // 查询星期一 到 星期日的数据 及 总数据
            transactionAmountTotal[i - 1] = sysMapper.getTransactionData(i, 1, per, startTime, endTime);
            if (null == transactionAmountTotal[i - 1]) {
                transactionAmountTotal[i - 1] = new BigDecimal(0);
            }
            memberTransactionAmount[i - 1] = sysMapper.getTransactionData(i, 2, per, startTime, endTime);
            if (null == memberTransactionAmount[i - 1]) {
                memberTransactionAmount[i - 1] = new BigDecimal(0);
            }
            userTransactionAmount[i - 1] = sysMapper.getTransactionData(i, 3, per, startTime, endTime);
            if (null == userTransactionAmount[i - 1]) {
                userTransactionAmount[i - 1] = new BigDecimal(0);
            }
            touristTransactionAmount[i - 1] = sysMapper.getTransactionData(i, 4, per, startTime, endTime);
            if (null == touristTransactionAmount[i - 1]) {
                touristTransactionAmount[i - 1] = new BigDecimal(0);
            }
        }
        sysTransactionDataDTO.setTransactionAmountTotal(transactionAmountTotal);
        sysTransactionDataDTO.setMemberTransactionAmount(memberTransactionAmount);
        sysTransactionDataDTO.setUserTransactionAmount(userTransactionAmount);
        sysTransactionDataDTO.setTouristTransactionAmount(touristTransactionAmount);
        return sysTransactionDataDTO;
    }
}1.8 编写系统mapper
/**
 * @Package: cn.liuliang.quickdinesysstore.mapper
 * @Author: liuliang
 * @CreateTime: 2020/11/26 - 20:08
 * @Description:
 */
public interface SysMapper {
    /**
     * 获取系统的结账时积分计算比例
     *
     * @return
     */
    Integer getIntegralRatio();
    /**
     * 修改结账时积分计算比例
     *
     * @param integralRatio
     * @return
     */
    void updateIntegralRatio(@Param("integralRatio") Integer integralRatio);
    /**
     * 查询用户数据
     *
     * @param weekPer   查询星期几的数据
     * @param level     身份:1全部,2会员,3用户,4游客
     * @param per       1全查,2时间范围查询
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return
     */
    Integer getUserData(@Param("weekPer") int weekPer, @Param("level") int level, @Param("per") int per, @Param("startTime") String startTime, @Param("endTime") String endTime);
    /**
     * 查询评论数据
     *
     * @param weekPer   查询星期几的数据
     * @param level     身份:1全部,2会员,3用户,4游客
     * @param per       1全查,2时间范围查询
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return
     */
    Integer getDiscussData(@Param("weekPer") int weekPer, @Param("level") int level, @Param("per") int per, @Param("startTime") String startTime, @Param("endTime") String endTime);
    /**
     * 查询交易数据
     *
     * @param weekPer   查询星期几的数据
     * @param level     身份:1全部,2会员,3用户,4游客
     * @param per       1全查,2时间范围查询
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return
     */
    BigDecimal getTransactionData(@Param("weekPer") int weekPer, @Param("level") int level, @Param("per") int per, @Param("startTime") String startTime, @Param("endTime") String endTime);
    /**
     * 查询订单数据
     *
     * @param weekPer   查询星期几的数据
     * @param level     身份:1全部,2会员,3用户,4游客
     * @param per       1全查,2时间范围查询
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return
     */
    Integer getOrderData(@Param("weekPer") int weekPer, @Param("level") int level, @Param("per") int per, @Param("startTime") String startTime, @Param("endTime") String endTime);
}<?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.liuliang.quickdinesysstore.mapper.SysMapper">
    <select id="getIntegralRatio" resultType="java.lang.Integer">
        SELECT t_sys.`proportion_integral` FROM t_sys WHERE t_sys.`id` = 1
    </select>
    <update id="updateIntegralRatio">
        UPDATE t_sys SET t_sys.`proportion_integral` = #{integralRatio} WHERE t_sys.`id` = 1
    </update>
    <sql id="findCondition">
        <where>
            <if test="per == 1 and level == 1">
                AND 1=1
            </if>
            <if test="per == 1 and level == 2">
                AND user_info_id = '1321703619577257986'
            </if>
            <if test="per == 1 and level == 3">
                AND user_info_id = '1321703632667680770'
            </if>
            <if test="per == 1 and level == 4">
                AND user_info_id = '1321703592666603521'
            </if>
            <if test="per == 2 and level == 1">
                AND STR_TO_DATE(#{startTime}, '%Y-%m-%d') <= STR_TO_DATE(create_time, '%Y-%m-%d')
                AND STR_TO_DATE(create_time, '%Y-%m-%d') <= STR_TO_DATE(#{endTime}, '%Y-%m-%d')
            </if>
            <if test="per == 2 and level == 2">
                AND STR_TO_DATE(#{startTime}, '%Y-%m-%d') <= STR_TO_DATE(create_time, '%Y-%m-%d')
                AND STR_TO_DATE(create_time, '%Y-%m-%d') <= STR_TO_DATE(#{endTime}, '%Y-%m-%d')
                AND user_info_id = '1321703619577257986'
            </if>
            <if test="per == 2 and level == 3">
                AND STR_TO_DATE(#{startTime}, '%Y-%m-%d') <= STR_TO_DATE(create_time, '%Y-%m-%d')
                AND STR_TO_DATE(create_time, '%Y-%m-%d') <= STR_TO_DATE(#{endTime}, '%Y-%m-%d')
                AND user_info_id = '1321703632667680770'
            </if>
            <if test="per == 2 and level == 4">
                AND STR_TO_DATE(#{startTime}, '%Y-%m-%d') <= STR_TO_DATE(create_time, '%Y-%m-%d')
                AND STR_TO_DATE(create_time, '%Y-%m-%d') <= STR_TO_DATE(#{endTime}, '%Y-%m-%d')
                AND user_info_id = '1321703592666603521'
            </if>
            <if test="weekPer != 8">
                AND WEEKDAY(create_time) + 1 = #{weekPer}
            </if>
        </where>
    </sql>
    <select id="getUserData" resultType="java.lang.Integer">
        SELECT COUNT(*) FROM t_user_login
        <include refid="findCondition"></include>
    </select>
    <select id="getDiscussData" resultType="java.lang.Integer">
        SELECT COUNT(*) FROM t_evaluate
        <include refid="findCondition"></include>
    </select>
    <sql id="orderFindCondition">
        <where>
            <if test="per == 1 and level == 1">
                AND 1=1
            </if>
            <if test="per == 1 and level == 2">
                AND t_user_login.`user_info_id` = '1321703619577257986'
            </if>
            <if test="per == 1 and level == 3">
                AND t_user_login.`user_info_id` = '1321703632667680770'
            </if>
            <if test="per == 1 and level == 4">
                AND t_user_login.`user_info_id` = '1321703592666603521'
            </if>
            <if test="per == 2 and level == 1">
                AND STR_TO_DATE(#{startTime}, '%Y-%m-%d') <= STR_TO_DATE(t_order.`create_time`, '%Y-%m-%d')
                AND STR_TO_DATE(t_order.`create_time`, '%Y-%m-%d') <= STR_TO_DATE(#{endTime}, '%Y-%m-%d')
            </if>
            <if test="per == 2 and level == 2">
                AND STR_TO_DATE(#{startTime}, '%Y-%m-%d') <= STR_TO_DATE(t_order.`create_time`, '%Y-%m-%d')
                AND STR_TO_DATE(t_order.`create_time`, '%Y-%m-%d') <= STR_TO_DATE(#{endTime}, '%Y-%m-%d')
                AND t_user_login.`user_info_id`= '1321703619577257986'
            </if>
            <if test="per == 2 and level == 3">
                AND STR_TO_DATE(#{startTime}, '%Y-%m-%d') <= STR_TO_DATE(t_order.`create_time`, '%Y-%m-%d')
                AND STR_TO_DATE(t_order.`create_time`, '%Y-%m-%d') <= STR_TO_DATE(#{endTime}, '%Y-%m-%d')
                AND t_user_login.`user_info_id` = '1321703632667680770'
            </if>
            <if test="per == 2 and level == 4">
                AND STR_TO_DATE(#{startTime}, '%Y-%m-%d') <= STR_TO_DATE(t_order.`create_time`, '%Y-%m-%d')
                AND STR_TO_DATE(t_order.`create_time`, '%Y-%m-%d') <= STR_TO_DATE(#{endTime}, '%Y-%m-%d')
                AND t_user_login.`user_info_id` = '1321703592666603521'
            </if>
            <if test="weekPer != 8">
                AND WEEKDAY(t_order.`create_time`) + 1 = #{weekPer}
            </if>
        </where>
    </sql>
    <select id="getTransactionData" resultType="java.math.BigDecimal">
        SELECT SUM(t_order.`actual_money`) FROM t_order
        LEFT JOIN t_user_login ON t_user_login.`id` = t_order.`user_id`
        <include refid="orderFindCondition"></include>
    </select>
    <select id="getOrderData" resultType="java.lang.Integer">
        SELECT COUNT(*) FROM t_order
        LEFT JOIN t_user_login ON t_user_login.`id` = t_order.`user_id`
        <include refid="orderFindCondition"></include>
    </select>
</mapper>1.9 运行项目swager测试

结束语
- 由于博主才疏学浅,难免会有纰漏,假如你发现了错误或偏见的地方,还望留言给我指出来,我会对其加以修正。
- 如果你觉得文章还不错,你的转发、分享、点赞、留言就是对我最大的鼓励。
- 感谢您的阅读,十分欢迎并感谢您的关注。










