feat(mall): 优化活动订单列表接口和导出功能
- 新增 AdminHappyActivityOrderItemVo 类用于订单项展示
- 实现活动订单列表 V2 版本,增加订单项信息
- 更新订单导出功能,增加报名人、报名电话等信息
- 调整前端订单列表显示,增加新字段
7 files modified
1 files added
| | |
| | | import cc.mrbird.febs.mall.entity.HappyActivityOrder; |
| | | import cc.mrbird.febs.mall.service.IAdminHappyActivityService; |
| | | import cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderCheckVo; |
| | | import cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderItemVo; |
| | | import cn.hutool.core.date.DatePattern; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 订单 |
| | | * @return |
| | | */ |
| | | @GetMapping("activityOrderListV2") |
| | | public FebsResponse activityOrderListV2(AdminHappyActivityOrderDto dto, QueryRequest request) { |
| | | |
| | | Map<String, Object> data = getDataTable(adminHappyActivityService.activityOrderListV2(dto, request)); |
| | | return new FebsResponse().success().data(data); |
| | | } |
| | | |
| | | /** |
| | | * 订单-手动核销 |
| | | */ |
| | | @PostMapping("checkOrder") |
| | |
| | | String title = happyActivity.getName() + "的订单"; |
| | | orderSheet.setTitle(title); |
| | | |
| | | String[] header = {"序号","用户", "编号", "单价", "数量","总价","使用状态", "支付方式"}; |
| | | String[] header = {"序号","用户", "报名人", "报名电话", "报名地址", "编号", "单价", "数量","总价","使用状态", "支付方式"}; |
| | | orderSheet.setHeaders(header); |
| | | |
| | | List<HappyActivityOrder> orderListForExport = adminHappyActivityService.getOrderListForExport(params); |
| | | // List<HappyActivityOrder> orderListForExport = adminHappyActivityService.getOrderListForExport(params); |
| | | List<AdminHappyActivityOrderItemVo> orderListForExport = adminHappyActivityService.getOrderListForExportV2(params); |
| | | List<List<Object>> list = new ArrayList<>(); |
| | | if (orderListForExport.size() > 0) { |
| | | int i = 0; |
| | | for (HappyActivityOrder item : orderListForExport) { |
| | | for (AdminHappyActivityOrderItemVo item : orderListForExport) { |
| | | i++; |
| | | List<Object> temp = new ArrayList<>(); |
| | | temp.add(i); |
| | | temp.add(item.getName()); |
| | | temp.add(item.getMemberName()); |
| | | temp.add(item.getConnectName()); |
| | | temp.add(item.getConnectPhone()); |
| | | temp.add(item.getConnectAddress()); |
| | | temp.add(item.getOrderNo()); |
| | | temp.add(item.getPrice()); |
| | | temp.add(item.getNumCnt()); |
| | |
| | | import cc.mrbird.febs.mall.entity.HappyActivity; |
| | | import cc.mrbird.febs.mall.dto.ApiActivityInfoDto; |
| | | import cc.mrbird.febs.mall.entity.HappyActivityOrder; |
| | | import cc.mrbird.febs.mall.entity.HappyActivityOrderItem; |
| | | import cc.mrbird.febs.mall.vo.ApiActivityInfoVo; |
| | | import cc.mrbird.febs.mall.dto.ApiVoteRecordInPageDto; |
| | | import cc.mrbird.febs.mall.vo.ApiActivityOptionListVo; |
| | | import cc.mrbird.febs.mall.vo.ApiVoteRecordInPageVo; |
| | | import cc.mrbird.febs.mall.vo.activity.AdminActivityCommentVo; |
| | | import cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderCheckVo; |
| | | import cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderItemVo; |
| | | import cc.mrbird.febs.mall.vo.activity.ApiActivityCommentVo; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | |
| | | |
| | | Page<HappyActivityOrder> selectOrderInPage(Page<HappyActivityOrder> page, @Param("record")AdminHappyActivityOrderDto dto); |
| | | |
| | | Page<AdminHappyActivityOrderItemVo> selectOrderItemInPage(Page<AdminHappyActivityOrderItemVo> page, @Param("record")AdminHappyActivityOrderDto dto); |
| | | |
| | | Page<ApiActivityOptionListVo> getVoteOptionRecordInPage(Page<ApiActivityOptionListVo> page, @Param("record")ApiVoteOptionRecordInPageDto dto); |
| | | |
| | | List<ApiActivityCommentVo> selectActivityCommentPage(Page<ApiActivityCommentVo> page, @Param("record")ApiActivityCommentDto dto); |
| | |
| | | import cc.mrbird.febs.mall.entity.*; |
| | | import cc.mrbird.febs.mall.vo.activity.AdminActivityCommentVo; |
| | | import cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderCheckVo; |
| | | import cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderItemVo; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | |
| | |
| | | |
| | | IPage<HappyActivityOrder> activityOrderList(AdminHappyActivityOrderDto dto, QueryRequest request); |
| | | |
| | | IPage<AdminHappyActivityOrderItemVo> activityOrderListV2(AdminHappyActivityOrderDto dto, QueryRequest request); |
| | | |
| | | FebsResponse checkOrder(List<Long> dto); |
| | | |
| | | FebsResponse activityOrderDel(Long id); |
| | |
| | | |
| | | List<HappyActivityOrder> getOrderListForExport(Map<String, String> params); |
| | | |
| | | List<AdminHappyActivityOrderItemVo> getOrderListForExportV2(Map<String, String> params); |
| | | |
| | | IPage<AdminHappyActivityOrderCheckVo> activityOrderCheckList(AdminHappyActivityOrderCheckDto dto, QueryRequest request); |
| | | |
| | | FebsResponse checkOrderItem(List<Long> dto); |
| | |
| | | import cc.mrbird.febs.mall.vo.AdminMallGoodsCommentVo; |
| | | import cc.mrbird.febs.mall.vo.activity.AdminActivityCommentVo; |
| | | import cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderCheckVo; |
| | | import cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderItemVo; |
| | | import cc.mrbird.febs.rabbit.producter.AgentProducer; |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import cn.hutool.core.collection.CollUtil; |
| | |
| | | private final HappyActivityOrderMapper happyActivityOrderMapper; |
| | | private final HappyActivityCommentMapper happyActivityCommentMapper; |
| | | private final HappyActivityOrderItemMapper happyActivityOrderItemMapper; |
| | | private final HappyActivityConnectMapper happyActivityConnectMapper; |
| | | private final HappyFollowMapper happyFollowMapper; |
| | | private final MallMemberMapper mallMemberMapper; |
| | | private final AgentProducer agentProducer; |
| | |
| | | } |
| | | |
| | | @Override |
| | | public IPage<AdminHappyActivityOrderItemVo> activityOrderListV2(AdminHappyActivityOrderDto dto, QueryRequest request) { |
| | | Page<AdminHappyActivityOrderItemVo> page = new Page<>(request.getPageNum(), request.getPageSize()); |
| | | Page<AdminHappyActivityOrderItemVo> adminOptionVoIPage = this.baseMapper.selectOrderItemInPage(page, dto); |
| | | return adminOptionVoIPage; |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse checkOrder(List<Long> ids) { |
| | | |
| | | if (CollUtil.isEmpty(ids)){ |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<AdminHappyActivityOrderItemVo> getOrderListForExportV2(Map<String, String> params) { |
| | | List<AdminHappyActivityOrderItemVo> list = new ArrayList<>(); |
| | | |
| | | LambdaQueryWrapper<HappyActivityOrder> queryWrapper = new LambdaQueryWrapper<>(); |
| | | if(ObjectUtil.isNotEmpty(params.get("activityId"))){ |
| | | queryWrapper.eq(HappyActivityOrder::getActivityId, Long.valueOf(params.get("activityId"))); |
| | | } |
| | | List<Integer> stateList = Arrays.asList(StateUpDownEnum.ORDER_STATE_WAIT_USE.getCode(), StateUpDownEnum.ORDER_STATE_USED.getCode()); |
| | | queryWrapper.in(HappyActivityOrder::getState, stateList); |
| | | queryWrapper.eq(HappyActivityOrder::getDeleteFlag, StateUpDownEnum.DOWN.getCode()); |
| | | queryWrapper.orderByDesc(HappyActivityOrder::getState); |
| | | queryWrapper.orderByDesc(HappyActivityOrder::getId); |
| | | List<HappyActivityOrder> happyActivityOrders = happyActivityOrderMapper.selectList(queryWrapper); |
| | | |
| | | if(CollUtil.isNotEmpty(happyActivityOrders)){ |
| | | |
| | | Map<Long, HappyActivityOrder> happyActivityOrderMap = happyActivityOrders.stream().collect(Collectors.toMap(HappyActivityOrder::getId, order -> order)); |
| | | |
| | | Set<Long> orderIds = happyActivityOrders.stream().map(HappyActivityOrder::getId).collect(Collectors.toSet()); |
| | | List<HappyActivityOrderItem> happyActivityOrderItems = happyActivityOrderItemMapper.selectList( |
| | | new LambdaQueryWrapper<HappyActivityOrderItem>() |
| | | .select(HappyActivityOrderItem::getConnectId) |
| | | .in(HappyActivityOrderItem::getOrderId, orderIds) |
| | | ); |
| | | Set<Long> connectIds = happyActivityOrderItems.stream().map(HappyActivityOrderItem::getConnectId).collect(Collectors.toSet()); |
| | | List<HappyActivityConnect> happyActivityConnects = happyActivityConnectMapper.selectList( |
| | | new LambdaQueryWrapper<HappyActivityConnect>() |
| | | .select(HappyActivityConnect::getId,HappyActivityConnect::getName,HappyActivityConnect::getPhone,HappyActivityConnect::getAddress) |
| | | .in(HappyActivityConnect::getId, connectIds) |
| | | ); |
| | | Map<Long, HappyActivityConnect> happyActivityConnectMap = happyActivityConnects.stream().collect(Collectors.toMap(HappyActivityConnect::getId, happyActivityConnect -> happyActivityConnect)); |
| | | |
| | | |
| | | Set<Long> collect = happyActivityOrders.stream().map(HappyActivityOrder::getMemberId).collect(Collectors.toSet()); |
| | | List<MallMember> mallMembers = mallMemberMapper.selectList( |
| | | new LambdaQueryWrapper<MallMember>() |
| | | .select(MallMember::getId,MallMember::getName) |
| | | .in(MallMember::getId, collect) |
| | | ); |
| | | Map<Long, MallMember> mallMemberMap = mallMembers.stream().collect(Collectors.toMap(MallMember::getId, mallMember -> mallMember)); |
| | | |
| | | happyActivityOrderItems.forEach(happyActivityOrderItem -> { |
| | | AdminHappyActivityOrderItemVo vo = new AdminHappyActivityOrderItemVo(); |
| | | HappyActivityConnect happyActivityConnect = happyActivityConnectMap.get(happyActivityOrderItem.getConnectId()); |
| | | vo.setConnectName(happyActivityConnect.getName()); |
| | | vo.setConnectPhone(happyActivityConnect.getPhone()); |
| | | vo.setConnectAddress(happyActivityConnect.getAddress()); |
| | | |
| | | HappyActivityOrder happyActivityOrder = happyActivityOrderMap.get(happyActivityOrderItem.getOrderId()); |
| | | vo.setId(happyActivityOrder.getId()); |
| | | vo.setCreatedTime(happyActivityOrder.getCreatedTime()); |
| | | vo.setMemberId(happyActivityOrder.getMemberId()); |
| | | vo.setActivityId(happyActivityOrder.getActivityId()); |
| | | vo.setPrice(happyActivityOrder.getPrice()); |
| | | vo.setNumCnt(happyActivityOrder.getNumCnt()); |
| | | vo.setAmount(happyActivityOrder.getAmount()); |
| | | vo.setPayState(happyActivityOrder.getPayState()); |
| | | vo.setPayType(happyActivityOrder.getPayType()); |
| | | vo.setPayTime(happyActivityOrder.getPayTime()); |
| | | vo.setDeleteFlag(happyActivityOrder.getDeleteFlag()); |
| | | vo.setOrderNo(happyActivityOrder.getOrderNo()); |
| | | vo.setPayOrderNo(happyActivityOrder.getPayOrderNo()); |
| | | vo.setWxOrderNo(happyActivityOrder.getWxOrderNo()); |
| | | vo.setState(happyActivityOrder.getState()); |
| | | vo.setFailTime(happyActivityOrder.getFailTime()); |
| | | MallMember mallMember = mallMemberMap.get(happyActivityOrderItem.getMemberId()); |
| | | if (ObjectUtil.isNotEmpty(mallMember)){ |
| | | vo.setMemberName(mallMember.getName()); |
| | | }else{ |
| | | vo.setMemberName(""); |
| | | } |
| | | }); |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | @Override |
| | | public IPage<AdminHappyActivityOrderCheckVo> activityOrderCheckList(AdminHappyActivityOrderCheckDto dto, QueryRequest request) { |
| | | |
| | | Page<AdminHappyActivityOrderCheckVo> page = new Page<>(request.getPageNum(), request.getPageSize()); |
| | |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public FebsResponse createOrder(ApiCreateOrderDto dto) { |
| | | Long memberId = LoginUserUtil.getLoginUser().getId(); |
| | | if(CollUtil.isEmpty(dto.getConnectIds())){ |
New file |
| | |
| | | package cc.mrbird.febs.mall.vo.activity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | @Data |
| | | public class AdminHappyActivityOrderItemVo { |
| | | |
| | | private Long id; |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date createdTime; |
| | | private Long memberId; |
| | | private Long activityId; |
| | | private BigDecimal price; |
| | | private Integer numCnt; |
| | | private BigDecimal amount; |
| | | private Integer payState; |
| | | private Integer payType; |
| | | private Date payTime; |
| | | private Integer deleteFlag; |
| | | private String orderNo; |
| | | private String payOrderNo; |
| | | private String wxOrderNo; |
| | | private Integer state; |
| | | private Date failTime; |
| | | |
| | | private String connectName; |
| | | private String connectPhone; |
| | | private String connectAddress; |
| | | |
| | | private String memberName;// |
| | | private String activityName;// |
| | | } |
| | |
| | | order by a.id desc |
| | | </select> |
| | | |
| | | <select id="selectOrderItemInPage" resultType="cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderItemVo"> |
| | | select |
| | | a.*, |
| | | e.name as connectName, |
| | | e.phone as connectPhone, |
| | | e.address as connectAddress, |
| | | b.name as memberName, |
| | | c.name as activityName |
| | | from happy_activity_order_item d |
| | | left join happy_activity_connect e on e.id = d.connect_id |
| | | left join happy_activity_order a on a.id = d.order_id |
| | | left join mall_member b on a.member_id = b.id |
| | | left join happy_activity c on a.activity_id = c.id |
| | | <where> |
| | | and a.DELETE_FLAG = 0 |
| | | <if test="record != null"> |
| | | <if test="record.name != null and record.name != ''"> |
| | | and b.name like CONCAT('%', CONCAT(#{record.name}, '%')) |
| | | </if> |
| | | <if test="record.state != null"> |
| | | and a.state=#{record.state} |
| | | </if> |
| | | <if test="record.activityId != null"> |
| | | and a.activity_id=#{record.activityId} |
| | | </if> |
| | | </if> |
| | | </where> |
| | | order by a.id desc |
| | | </select> |
| | | |
| | | |
| | | |
| | | <select id="getVoteOptionRecordInPage" resultType="cc.mrbird.febs.mall.vo.ApiActivityOptionListVo"> |
| | |
| | | tableIns = febs.table.init({ |
| | | elem: $view.find('table'), |
| | | id: 'orderActivityTable', |
| | | url: ctx + 'admin/happyActivity/activityOrderList', |
| | | url: ctx + 'admin/happyActivity/activityOrderListV2', |
| | | toolbar:"#orderActivityToolbar", |
| | | defaultToolbar:[], |
| | | cols: [[ |
| | | {type: 'checkbox'}, |
| | | {type: 'numbers', title: '', width: 80}, |
| | | {title: '操作', toolbar: '#orderActivityOption', minWidth: 200, align: 'center'}, |
| | | {field: 'name', title: '名称', minWidth: 100,align:'center'}, |
| | | {field: 'memberName', title: '名称', minWidth: 100,align:'center'}, |
| | | {field: 'orderNo', title: '订单编号', minWidth: 100,align:'center'}, |
| | | {field: 'activityName', title: '活动名称', minWidth: 100,align:'center'}, |
| | | {field: 'connectName', title: '报名人', minWidth: 100,align:'center'}, |
| | | {field: 'connectPhone', title: '报名电话', minWidth: 100,align:'center'}, |
| | | {field: 'connectAddress', title: '报名地址', minWidth: 100,align:'center'}, |
| | | {field: 'price', title: '单价', minWidth: 100,align:'center'}, |
| | | {field: 'numCnt', title: '数量', minWidth: 100,align:'center'}, |
| | | {field: 'amount', title: '总价', minWidth: 100,align:'center'}, |