结算单报表模块项目复盘,随手记录

结算单报表

页面需要进行列表操作,需要selectForList操作,返回list集合,但是泛型中没有现有domain对象进行封装,怎么办?
    
做统计计算,没有现有的domain
    
方案一:自定义类,封装上面的数据,有几个需要字段就封装几个 class Report{
     
    groupType count totalAmount payAmount
        discountAmount
}
    
方案二: 使用map集合
    hashmap
    map.put("groupType",xx)
    ....
    map.put("discountAmount",xx)
public interface ConsumptionReportMapper {
     
    //使用Map集合来容纳key,value
    List<Map<String,Object>> selectForList(ConsumptionReportQueryObject qo);}

返回类型区别

resultType
resultMap  :一些没有办法处理的列,映射到类型中  

Echars

listBar 准备好表格视图
    x轴 --->groupType [....]
    总消费金额--分组维度 为 门店分组查询出来所有总消费金额列
    总优惠金额 ====总优惠金额列
    总实收金额 ====总实收金额列
    订单数   ======所有订单数列

$ 和 # 区别

如果sql语句中取值使用 # ,那么mapper方法多参数使用@Param表示,mybatis将所有数据封装成map集合
    如果是单个参数,mybatis将所有数据封装成map集合,明确将传入参数作为 占位符的参数
    
如果sql语句中取值使用 $ ,那么mapper方法多参数使用@Param表示,mybatis将所有数据封装成map集合
    如果是单个参数,mybatis将所有数据封装成map集合,mybatis会将这个数据当成一个对象看待,那么需要贴上注解 @Param("...") 将数据转换map对象再使用

mapper



<mapper namespace="cn.k.mapper.ConsumptionReportMapper">
    <select id="selectForList" resultType="java.util.Map">
        SELECT ${groupTypeDisplay}    as groupType,
               count(c.id)            as count,
               sum(c.total_amount)    as totalAmount,
               sum(c.pay_amount)      as payAmount,
               sum(c.discount_amount) as discountAmount
        from consumption c
                     LEFT JOIN business b on c.business_id = b.id

        <where>
            c.status = 2
            <if test="businessId >= 0">
                and c.business_id =#{businessId}
            if>
            <if test="beginDate != null">
                and c.pay_time >=#{beginDate}
            if>
            <if test="endDate != null">
                and c.pay_time <=#{endDate}
            if>
        where>
        group by ${groupTypeDisplay}
    select>
mapper>

使用${其中的属性关联到自定义qo 类}

@Setter
@Getter
public class ConsumptionReportQueryObject extends QueryObject {
     
    public int groupTypeId = 1;

    public String getGroupTypeDisplay() {
     
        if (groupTypeId == 1) {
     
            return "b.name";  //门店
        } else if (groupTypeId == 2) {
     
            return "YEAR(c.pay_time)";  //年
        } else if (groupTypeId == 3) {
     
            return "DATE_FORMAT(c.pay_time,'%Y-%m')";  //月
        } else if (groupTypeId==4){
     
            return "DATE_FORMAT(c.pay_time,'%Y-%m-%d')"; //日
        }else {
     
            return "不符合要求";
        }
    }
    public int businessId = -1;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    public Date beginDate;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    public Date endDate;
}

通过数字来控制页面分组类型查询与回显

 <div class="form-group">
     <label for="status">分组类型:label>