diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/customizeExcel/vo/OverspendingVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/customizeExcel/vo/OverspendingVO.java index a007756a..95b729d9 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/customizeExcel/vo/OverspendingVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/customizeExcel/vo/OverspendingVO.java @@ -14,6 +14,14 @@ public class OverspendingVO { @ExcelProperty("手机") private String mobile; + @ExcelProperty("食堂(元)") + @NumberFormat("#0.00") + private BigDecimal canteenAmount; + + @ExcelProperty("超市金额(元)") + @NumberFormat("#0.00") + private BigDecimal marketAmount; + @ExcelProperty("消费金额(元)") @NumberFormat("#0.00") private BigDecimal totalMoney; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/customizeExcel/CustomizeExcelMapper.xml b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/customizeExcel/CustomizeExcelMapper.xml index 832a616e..faed1c79 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/customizeExcel/CustomizeExcelMapper.xml +++ b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/customizeExcel/CustomizeExcelMapper.xml @@ -8,16 +8,17 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> - + select mu.nickname, + mu.mobile, + CASE + WHEN HOUR (mo.create_time) BETWEEN 0 AND 9 THEN '早' WHEN HOUR(mo.create_time) BETWEEN 10 AND 15 THEN '中' WHEN HOUR(mo.create_time) BETWEEN 16 AND 23 THEN '晚' ELSE '未知' - END AS timeSlot, + END + AS timeSlot, mo.total_money , md.dishes_name , md.unit_price , @@ -27,20 +28,35 @@ from member_order_detail md left join member_dish_order mo on md.order_id = mo.id left join member_user mu on mu.id = mo.user_id - where DATE_FORMAT(md.create_time, '%Y%m%d') between #{startTime} and #{endTime} and mo.store_id = #{carteenId} - order by mo.user_id,order_id + where DATE_FORMAT(md.create_time, '%Y%m%d') between + #{startTime} + and + #{endTime} + and + mo + . + store_id + = + #{carteenId} + order + by + mo + . + user_id, + order_id - + select mu.nickname, + mu.mobile, + CASE + WHEN HOUR (mo.create_time) BETWEEN 0 AND 9 THEN '早' WHEN HOUR(mo.create_time) BETWEEN 10 AND 15 THEN '中' WHEN HOUR(mo.create_time) BETWEEN 16 AND 23 THEN '晚' ELSE '未知' - END AS timeSlot, + END + AS timeSlot, mo.total_price , md.goods_name , md.custom_price , @@ -50,20 +66,49 @@ from member_store_order_detail md left join member_store_order mo on md.order_id = mo.order_id left join member_user mu on mu.id = mo.user_id - where DATE_FORMAT(md.create_time, '%Y%m%d') between #{startTime} and #{endTime} and mo.carteen_id = #{carteenId} - and md.deleted = false and mo.status != 3 - order by mo.user_id,mo.order_id + where DATE_FORMAT(md.create_time, '%Y%m%d') between + #{startTime} + and + #{endTime} + and + mo + . + carteen_id + = + #{carteenId} + and + md + . + deleted + = + false + and + mo + . + status + != + 3 + order + by + mo + . + user_id, + mo + . + order_id - select md.goods_name, md.custom_price, - sum(md.number) as sumNum, + sum(md.number) as sumNum, sum(md.number * md.custom_price) as totalPrice from member_store_order_detail md left join member_store_order mo on md.order_id = mo.order_id - where DATE_FORMAT(md.create_time, '%Y%m%d') between #{startTime} and #{endTime} and mo.carteen_id = #{carteenId} + where DATE_FORMAT(md.create_time, '%Y%m%d') between #{startTime} and #{endTime} + and mo.carteen_id = #{carteenId} and md.deleted = false and mo.deleted = false and mo.status != 3 and mo.status != 4 @@ -71,63 +116,114 @@ - select u.nickname, u.mobile, o.store_name, o.total_money, o.cash_amount, o.wx_amount, - c.stores_name as storeName, + c.stores_name as storeName, DATE_FORMAT(o.create_time, '%Y-%m-%d %H:%i:%s') as createTime, - CASE - WHEN HOUR(o.create_time) BETWEEN 0 AND 9 THEN '早上' + CASE + WHEN HOUR (o.create_time) BETWEEN 0 AND 9 THEN '早上' WHEN HOUR(o.create_time) BETWEEN 10 AND 15 THEN '中午' WHEN HOUR(o.create_time) BETWEEN 16 AND 23 THEN '晚上' - ELSE '未知' END AS timeSlot, + ELSE '未知' + END AS timeSlot, CASE WHEN o.order_status = 0 THEN '未完成' WHEN o.order_status = 1 THEN '已完成' WHEN o.order_status = 2 THEN '未完全支付' - ELSE '未知' END AS orderStatus + ELSE '未知' + END AS orderStatus from member_dish_order o left join member_user u on o.user_id = u.id left join t_carteen c on o.store_id = c.id where o.deleted = false - and o.user_id in (select member_id from member_group_member where group_id = #{groupId}) - and DATE_FORMAT(o.create_time, '%Y-%m-%d') BETWEEN #{startTime} AND #{endTime} + and o.user_id in (select member_id from member_group_member where group_id = + #{groupId} + ) + and + DATE_FORMAT + ( + o + . + create_time, + '%Y-%m-%d' + ) + BETWEEN + #{startTime} + AND + #{endTime} - select u.nickname, u.mobile, o.total_price, DATE_FORMAT(o.create_time, '%Y-%m-%d %H:%i:%s') as createTime, CASE - WHEN HOUR(o.create_time) BETWEEN 0 AND 9 THEN '早上' + WHEN HOUR (o.create_time) BETWEEN 0 AND 9 THEN '早上' WHEN HOUR(o.create_time) BETWEEN 10 AND 15 THEN '中午' WHEN HOUR(o.create_time) BETWEEN 16 AND 23 THEN '晚上' - ELSE '未知' END AS timeSlot, + ELSE '未知' + END AS timeSlot, CASE WHEN o.status = 1 THEN '已支付' WHEN o.status = 2 THEN '已完成' WHEN o.status = 3 THEN '已取消' when o.status = 4 THEN '已退款' - ELSE '未知' END AS orderStatus + ELSE '未知' + END AS orderStatus from member_store_order o left join member_user u on o.user_id = u.id - where o.carteen_id = #{carteenId} - and o.deleted = false - and o.user_id in (select member_id from member_group_member where group_id = #{groupId}) - and DATE_FORMAT(o.create_time, '%Y-%m-%d') BETWEEN #{startTime} AND #{endTime} + where o.carteen_id = + #{carteenId} + and + o + . + deleted + = + false + and + o + . + user_id + in + ( + select + member_id + from + member_group_member + where + group_id + = + #{groupId} + ) + and + DATE_FORMAT + ( + o + . + create_time, + '%Y-%m-%d' + ) + BETWEEN + #{startTime} + AND + #{endTime} - select mu.name, mu.mobile, mu.identity_card, mu.address, - mt.name as tagName, + mt.name as tagName, mdo.total_money + mdo.subsidy_amount as marketPrice, mdo.total_money, mdo.subsidy_amount, @@ -136,17 +232,31 @@ WHEN HOUR(mdo.create_time) BETWEEN 10 AND 15 THEN '中午' WHEN HOUR(mdo.create_time) BETWEEN 16 AND 23 THEN '晚上' ELSE '未知' - END AS timeSlot, + END + AS timeSlot, DATE_FORMAT(mdo.create_time, '%Y-%m-%d') as createTime from member_dish_order mdo left join member_user mu on mdo.user_id = mu.id left join member_tag mt on mu.tag_ids = mt.id where subsidy_amount > 0 and mdo.deleted = false - and mdo.store_id = #{carteenId} - and DATE_FORMAT(mdo.create_time, '%Y-%m-%d %H:%i:%s') BETWEEN #{startTime} AND #{endTime} + and mdo.store_id = + #{carteenId} + and + DATE_FORMAT + ( + mdo + . + create_time, + '%Y-%m-%d %H:%i:%s' + ) + BETWEEN + #{startTime} + AND + #{endTime} - select mu.nickname, mu.name, mu.mobile, @@ -156,72 +266,78 @@ DATE_FORMAT(mc.create_time, '%Y-%m-%d') as createTime from member_card mc left join member_user mu on mc.user_id = mu.id - where mc.type = '5' and mc.deleted = false + where mc.type = '5' + and mc.deleted = false and mc.carteen_id = #{carteenId} and DATE_FORMAT(mc.create_time, '%Y-%m-%d') BETWEEN #{startTime} AND #{endTime} - select t.id, - a.activity_name , - m.name , - t.serial_numbers , - t.price , - t.nick_name , - t.mobile , - t.reserve_time , - t.create_time - from (select * from member_activity_pay where deleted =false) t - left join member_activity_table_dish d on t.activity_id = d.activity_id and SUBSTRING_INDEX(t.serial_numbers, ',', 1) = d.serial_number + a.activity_name, + m.name, + t.serial_numbers, + t.price, + t.nick_name, + t.mobile, + t.reserve_time, + t.create_time + from (select * from member_activity_pay where deleted = false) t + left join member_activity_table_dish d on t.activity_id = d.activity_id and + SUBSTRING_INDEX(t.serial_numbers, ',', 1) = d.serial_number left join member_activity_merchant m on d.merchant_id = m.id left join member_activity a on a.id = t.activity_id - and d.deleted = false and t.deleted = false + and d.deleted = false and t.deleted = false - + SELECT m.name, + SUM(CASE WHEN t.reserve_time = '2025-06-13' THEN 1 ELSE 0 END) AS 'day1', SUM(CASE WHEN t.reserve_time = '2025-06-14' THEN 1 ELSE 0 END) AS 'day2', SUM(CASE WHEN t.reserve_time = '2025-06-15' THEN 1 ELSE 0 END) AS 'day3', SUM(CASE WHEN t.reserve_time = '2025-06-16' THEN 1 ELSE 0 END) AS 'day4', SUM(CASE WHEN t.reserve_time = '2025-06-17' THEN 1 ELSE 0 END) AS 'day5', SUM(CASE WHEN t.reserve_time = '2025-06-18' THEN 1 ELSE 0 END) AS 'day6', SUM(CASE WHEN t.reserve_time = '2025-06-19' THEN 1 ELSE 0 END) AS 'day7', SUM(CASE WHEN t.reserve_time = '2025-06-20' THEN 1 ELSE 0 END) AS 'day8', SUM(CASE WHEN t.reserve_time = '2025-06-21' THEN 1 ELSE 0 END) AS 'day9', SUM(CASE WHEN t.reserve_time = '2025-06-22' THEN 1 ELSE 0 END) AS 'day10' FROM member_activity_merchant m LEFT JOIN member_activity_table_dish d ON d.merchant_id = m.id AND d.deleted = 0 LEFT JOIN (select * from member_activity_pay_table where reserve_time is not null and deleted = 0) t ON t.activity_id = d.activity_id AND t.serial_numbers = d.serial_number AND t.reserve_time BETWEEN '2025-06-13' AND '2025-06-22' - WHERE - m.deleted = 0 + WHERE m.deleted = 0 GROUP BY m.name ORDER BY m.name - + + SELECT u.nickname, + u.mobile, + SUM(CASE WHEN source = 'canteen' THEN amount ELSE 0 END) AS canteenAmount, + SUM(CASE WHEN source = 'market' THEN amount ELSE 0 END) AS marketAmount, + consume_date AS createTime, + SUM(amount) AS totalMoney, + SUM(amount) - 37 AS overMoney + FROM ( + SELECT user_id, DATE (create_time) AS consume_date, + total_money AS amount, 'canteen' AS source + FROM member_dish_order + WHERE deleted = 0 + AND create_time IS NOT NULL + AND order_status = '1' + AND user_id IS NOT NULL + UNION ALL + SELECT user_id, DATE (create_time) AS consume_date, total_price AS amount, 'market' AS source + FROM member_store_order + WHERE deleted = 0 + AND create_time IS NOT NULL + AND status = '2' + AND user_id IS NOT NULL + ) AS ao left join member_user u + on u.id = ao.user_id + where ao.user_id in (select member_id from member_group_member m where m.group_id =#{groupId}) + and ao.consume_date between #{startTime} and #{endTime} + GROUP BY ao.user_id, ao.consume_date + HAVING SUM (ao.amount) > 37 + ORDER BY createTime; \ No newline at end of file