动态表格快速实现统计和非实体字段拼接

动态表格快速实现统计和非实体字段拼接

一、销售订单界面效果案例

image.png

image.png

image.png

image.png

二、代码样例

1. 动态表格快速实现数量 / 金额统计

基于物料维度统计已发货数量

//屏蔽前端传的统计字段
SelectData selectData = getProcessData(PageDataUtil.removeColumns(pageData, "finishQty"));
this.returnData = getSelectService().process(selectData);
GridDataMode gridData = (GridDataMode) returnData.getData();
List<Map<String,Object>> list = (List<Map<String, Object>>) gridData.getRows();
if (CollectionUtils.isNotEmpty(list)) {
    //交货信息统计
    ((ReturnDataAddSum) (dao, keySet) -> {
        String hql = "select new map(t.produCode as produCode,t.qty as finishQty) from SaleDeliveryRecord t left join SaleOrder so on t.saleCode = so.code where t.isDelete = 0 and t.isActive = 0 and so.id = :orderId";
        List<Map<String, Object>> details = dao.createQuery(hql).setParameter("orderId",orderId).setReadOnly(true).list();
        return details;
    }).handle(getSelectService().getDao(), list, 0,"produCode", "finishQty");
}

2. 动态表格快速实现非实体字段拼接

基于订单维度统计数量、金额、已发货状态、是否延期交货

//屏蔽前端传的统计字段
SelectData selectData = getProcessData(PageDataUtil.removeColumns(pageData, "qty","amount","finishQty","overdueState"));
returnData = process(selectData);
GridDataMode gridData = (GridDataMode) returnData.getData();
List<Map<String, Object>> list = (List<Map<String, Object>>) gridData.getRows();
if (CollectionUtils.isNotEmpty(list)) {
    //交货信息、交货状态统计
    ((ReturnDataAddSum) (dao, keySet) -> {
        String sql = "select o.gid as id,d.qty as qty,d.amount as amount,r.finish_qty as \"finishQty\",case when o.due_date-date(r.operate_time)>=0 && finish_qty-qty>=0 then 1 else 0 end as \"overdueState\" from sale_order o " +
                " left join (" +
                " select order_id,sum(qty) as qty,max(amount) as amount from sale_order_detail where is_delete=0 and is_active=0 group by order_id" +
                " ) d on o.gid = d.order_id" +
                " left join (" +
                " select sale_code,sum(qty) as finish_qty,max(operate_time) as operate_time from sale_delivery_record where is_delete=0 and is_active=0 group by sale_code" +
                " ) r on o.code = r.sale_code where o.is_delete=0 and o.is_active=0 and o.type = 10 and (o.gid in (:orderId))";
        sql = sql.replace(":orderId", CommonMethodUtils.getInParameter(Lists.newArrayList(keySet), "o.gid"));
        List<Map<String, Object>> details = dao.getCurrentSession().createSQLQuery(sql).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).setReadOnly(true).list();
        return details;
    }).handle(dao, list, 0,"id", "qty","amount","finishQty","overdueState");
}

3. 动态表格快速实现比值计算

计算百分比

//屏蔽前端传的统计字段
SelectData selectData = getProcessData(PageDataUtil.removeColumns(pageData,"purProgress"));
returnData = process(selectData);
GridDataMode gridData = (GridDataMode) returnData.getData();
List<Map<String,Object>> list = (List<Map<String, Object>>) gridData.getRows();
PageDataUtil.caculateRatio(list,"purProgress","receivedQty","demandQty");

详细内容及源代码解析见附件