framework/src/main/java/cn/lili/modules/lmk/domain/vo/OrderCountVO.java
New file @@ -0,0 +1,27 @@ package cn.lili.modules.lmk.domain.vo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * lmk-shop-java * * @author : zxl * @date : 2025-09-02 16:06 **/ @Data @AllArgsConstructor @NoArgsConstructor public class OrderCountVO { /** * 订单总流水金额 */ private Double orderPriceCount; /** * 订单总数量 */ private Integer orderNumCount; } framework/src/main/java/cn/lili/modules/member/entity/vo/MemberSearchVO.java
@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * 会员搜索VO * @@ -27,4 +29,7 @@ */ @ApiModelProperty(value = "会员状态") private String disabled; private List<String> tagIds; } framework/src/main/java/cn/lili/modules/member/service/MemberService.java
@@ -241,6 +241,8 @@ */ Token refreshStoreToken(String refreshToken); IPage<MemberVO> getMemberPageAndTag(MemberSearchVO memberSearchVO, PageVO page); /** * 会员积分变动 * framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java
@@ -4,7 +4,6 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.digest.MD5; import cn.lili.base.Result; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; @@ -57,7 +56,6 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.catalina.security.SecurityUtil; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; @@ -70,6 +68,7 @@ import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** * 会员接口业务层实现 @@ -578,8 +577,36 @@ queryWrapper.eq(CharSequenceUtil.isNotBlank(memberSearchVO.getDisabled()), "disabled", memberSearchVO.getDisabled().equals(SwitchEnum.OPEN.name()) ? 1 : 0); queryWrapper.orderByDesc("create_time"); return this.baseMapper.pageByMemberVO(PageUtil.initPage(page), queryWrapper); } @Override public IPage<MemberVO> getMemberPageAndTag(MemberSearchVO memberSearchVO, PageVO page) { QueryWrapper<Member> queryWrapper = Wrappers.query(); //用户名查询 queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getUsername()), "username", memberSearchVO.getUsername()); //用户名查询 queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getNickName()), "nick_name", memberSearchVO.getNickName()); //按照电话号码查询 queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getMobile()), "mobile", memberSearchVO.getMobile()); //按照会员状态查询 queryWrapper.eq(CharSequenceUtil.isNotBlank(memberSearchVO.getDisabled()), "disabled", memberSearchVO.getDisabled().equals(SwitchEnum.OPEN.name()) ? 1 : 0); queryWrapper.orderByDesc("create_time"); if (CollectionUtils.isNotEmpty(memberSearchVO.getTagIds())) { // 使用inSql方法进行安全的子查询 String tagIdsStr = memberSearchVO.getTagIds().stream() .map(String::valueOf) .collect(Collectors.joining(",")); queryWrapper.inSql("id", "SELECT DISTINCT member_id FROM lmk_member_tag WHERE tag_id IN (" + tagIdsStr + ")"); return this.baseMapper.pageByMemberVO(PageUtil.initPage(page), queryWrapper); } return this.baseMapper.pageByMemberVO(PageUtil.initPage(page),queryWrapper); } @Override @PointLogPoint @@ -832,7 +859,6 @@ if(StringUtils.isNotBlank(member.getFace()) && !member.getFace().contains("https")){ member.setFace(cosUtil.getPreviewUrl(member.getFace())); } } return member; } framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderExportDTO.java
@@ -87,4 +87,6 @@ private Date completeTime; @ApiModelProperty(value = "店铺") private String storeName; private String nickName; } framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderExportDetailDTO.java
@@ -90,4 +90,6 @@ private String completeTime; @ApiModelProperty(value = "店铺") private String storeName; private String nickName; } framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java
@@ -53,6 +53,8 @@ @ApiModelProperty(value = "买家昵称") private String buyerName; @ApiModelProperty(value = "用户昵称") private String nickName; @ApiModelProperty(value = "订单状态") private String orderStatus; @@ -172,6 +174,9 @@ //订单来源 wrapper.like(CharSequenceUtil.isNotEmpty(clientType), "o.client_type", clientType); //用户昵称 wrapper.like(CharSequenceUtil.isNotEmpty(nickName),"m.nick_name",nickName); //按评价状态 wrapper.eq(CharSequenceUtil.isNotEmpty(commentStatus), "oi.comment_status", commentStatus); framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java
@@ -60,8 +60,11 @@ "oi.after_sale_status AS after_sale_status," + "o.logistics_time AS logistics_time," + "o.complete_time AS complete_time," + "o.store_name AS store_name " + " FROM li_order o LEFT JOIN li_order_item oi ON oi.order_sn = o.sn ${ew.customSqlSegment}") "o.store_name AS store_name, " + "m.nick_name AS nickName" + " FROM li_order o LEFT JOIN li_order_item oi ON oi.order_sn = o.sn " + "LEFT JOIN li_member m on m.id = o.member_id " + "${ew.customSqlSegment}") List<OrderExportDTO> queryExportOrder(@Param(Constants.WRAPPER) Wrapper<OrderSimpleVO> queryWrapper); /** @@ -102,8 +105,33 @@ " FROM li_order o LEFT JOIN li_order_item AS oi on o.sn = oi.order_sn " + "LEFT JOIN li_member m on m.id = o.member_id " + "${ew.customSqlSegment}") IPage<OrderSimpleVO> queryByParams(IPage<OrderSimpleVO> page, @Param(Constants.WRAPPER) Wrapper<OrderSimpleVO> queryWrapper); /** * 获得指定用户的订单 * @param queryWrapper * @return */ @Select("select o.sn,o.flow_price,o.create_time,o.order_status,o.pay_status,o.payment_method,o.payment_time,o.member_name,o.store_name as " + "store_name,o.store_id as store_id,o.client_type,o.order_type,o.deliver_status,o.order_promotion_type,o.seller_remark, " + "o.consignee_name AS consigneeName," + "o.consignee_mobile AS consigneeMobile," + "o.member_id AS memberId," + " GROUP_CONCAT(oi.goods_id) as group_goods_id," + " GROUP_CONCAT(oi.sku_id) as group_sku_id," + " GROUP_CONCAT(oi.num) as group_num" + ",GROUP_CONCAT(oi.image) as group_images" + ",GROUP_CONCAT(oi.goods_name) as group_name " + ",GROUP_CONCAT(oi.after_sale_status) as group_after_sale_status" + ",GROUP_CONCAT(oi.complain_status) as group_complain_status" + ",GROUP_CONCAT(oi.comment_status) as group_comment_status" + ",GROUP_CONCAT(oi.sn) as group_order_items_sn " + ",GROUP_CONCAT(oi.goods_price) as group_goods_price " + ",GROUP_CONCAT(oi.is_refund) as group_is_refund " + ",GROUP_CONCAT(oi.refund_price) as group_refund_price " + " FROM li_order o LEFT JOIN li_order_item AS oi on o.sn = oi.order_sn " + "${ew.customSqlSegment}") List<OrderSimpleVO> queryByParamsCount(@Param(Constants.WRAPPER) Wrapper<OrderSimpleVO> queryWrapper); /** * 查询订单简短信息分页 * framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java
@@ -1,6 +1,7 @@ package cn.lili.modules.order.order.service; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.lmk.domain.vo.OrderCountVO; import cn.lili.modules.member.entity.dto.MemberAddressDTO; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.order.entity.dos.Order; @@ -45,6 +46,13 @@ */ Order getBySn(String orderSn); /** * 统计用户的总金额以及订单已完成数 * * @param id 会员id * @return */ OrderCountVO countByIdOrder(String id); /** * 订单查询 @@ -338,4 +346,6 @@ * @return 订单 */ Order updateSellerRemark(String orderSn, String sellerRemark); } framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
@@ -27,6 +27,7 @@ import cn.lili.modules.goods.entity.dos.Goods; import cn.lili.modules.goods.entity.dto.GoodsCompleteMessage; import cn.lili.modules.goods.service.GoodsService; import cn.lili.modules.lmk.domain.vo.OrderCountVO; import cn.lili.modules.lmk.enums.general.AdminRoleEnum; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dto.MemberAddressDTO; @@ -251,6 +252,36 @@ } @Override public OrderCountVO countByIdOrder(String id) { OrderSearchParams orderSearchParams = new OrderSearchParams(); orderSearchParams.setOrderStatus(OrderStatusEnum.COMPLETED.name()); orderSearchParams.setMemberId(id); QueryWrapper queryWrapper = orderSearchParams.queryWrapper(); queryWrapper.groupBy("o.id"); queryWrapper.orderByDesc("o.id"); List<OrderSimpleVO> list = this.baseMapper.queryByParamsCount(queryWrapper); OrderCountVO orderCountVO = new OrderCountVO(); orderCountVO.setOrderNumCount(0); orderCountVO.setOrderPriceCount(0.0); if (CollectionUtil.isEmpty(list)) { return orderCountVO; }else { for (OrderSimpleVO vo : list) { if (vo == null) { System.out.println("出现空元素"); continue; // 跳过null元素,或根据业务处理 } orderCountVO.setOrderNumCount(orderCountVO.getOrderNumCount() + 1); Double flowPrice = vo.getFlowPrice() != null ? vo.getFlowPrice() : 0.0; orderCountVO.setOrderPriceCount(orderCountVO.getOrderPriceCount() + flowPrice);; } } return orderCountVO; } @Override public IPage<OrderSimpleVO> queryByParams(OrderSearchParams orderSearchParams,Boolean needHide) { QueryWrapper queryWrapper = orderSearchParams.queryWrapper(); queryWrapper.groupBy("o.id"); @@ -265,17 +296,8 @@ } } // for (OrderSimpleVO vo : page.getRecords()){ // Member member = memberMapperMapper.selectById(vo.getMemberId()); // if (member != null){ // vo.setNickName(member.getNickName()); // } // } return page; } @Override public IPage<OrderSimpleXcxVO> queryByXcxParams(OrderSearchXcxParams orderSearchParams) { QueryWrapper queryWrapper = orderSearchParams.queryWrapper(); @@ -424,8 +446,6 @@ vo.setConsigneeMobile(CommonUtil.maskMobile(vo.getConsigneeMobile())); } } XSSFWorkbook workbook = initOrderExportData(orderExportDTOS); try { // 设置响应头 @@ -517,6 +537,7 @@ throw new ServiceException(ResultCode.ORDER_CAN_NOT_CANCEL); } } @Override @@ -1436,7 +1457,7 @@ // 创建表头 Row header = sheet.createRow(0); String[] headers = {"主订单编号", "子订单编号", "选购商品", "商品数量", "商品ID", "商品单价", "订单应付金额", "运费", "优惠总金额", "平台优惠", "商家优惠", "商家改价", "支付方式", "收件人", "收件人手机号", "运费", "优惠总金额", "平台优惠", "商家优惠", "商家改价", "支付方式","卖家名称", "收件人", "收件人手机号", "省", "市", "区", "街道", "详细地址", "买家留言", "订单提交时间", "支付完成时间", "来源", "订单状态", "订单类型", "售后状态", "取消原因", "发货时间", "完成时间", "店铺"}; @@ -1461,24 +1482,27 @@ row.createCell(10).setCellValue(dto.getStoreMarketingCost()!=null?dto.getStoreMarketingCost():0); row.createCell(11).setCellValue(dto.getUpdatePrice()!=null?dto.getUpdatePrice():0); row.createCell(12).setCellValue(dto.getPaymentMethod()); row.createCell(13).setCellValue(dto.getConsigneeName()); row.createCell(14).setCellValue(dto.getConsigneeMobile()); row.createCell(15).setCellValue(dto.getProvince()); row.createCell(16).setCellValue(dto.getCity()); row.createCell(17).setCellValue(dto.getDistrict()); row.createCell(18).setCellValue(dto.getStreet()); row.createCell(19).setCellValue(dto.getConsigneeDetail()); row.createCell(20).setCellValue(dto.getRemark()); row.createCell(21).setCellValue(dto.getCreateTime()); row.createCell(22).setCellValue(dto.getPaymentTime()); row.createCell(23).setCellValue(dto.getClientType()); row.createCell(24).setCellValue(dto.getOrderStatus()); row.createCell(25).setCellValue(dto.getOrderType()); row.createCell(26).setCellValue(dto.getAfterSaleStatus()); row.createCell(27).setCellValue(dto.getCancelReason()); row.createCell(28).setCellValue(dto.getLogisticsTime()); row.createCell(29).setCellValue(dto.getCompleteTime()); row.createCell(30).setCellValue(dto.getStoreName()); row.createCell(13).setCellValue(dto.getNickName()); row.createCell(14).setCellValue(dto.getConsigneeName()); row.createCell(15).setCellValue(dto.getConsigneeMobile()); row.createCell(16).setCellValue(dto.getProvince()); row.createCell(17).setCellValue(dto.getCity()); row.createCell(18).setCellValue(dto.getDistrict()); row.createCell(19).setCellValue(dto.getStreet()); row.createCell(20).setCellValue(dto.getConsigneeDetail()); row.createCell(21).setCellValue(dto.getRemark()); row.createCell(22).setCellValue(dto.getCreateTime()); row.createCell(23).setCellValue(dto.getPaymentTime()); row.createCell(24).setCellValue(dto.getClientType()); row.createCell(25).setCellValue(dto.getOrderStatus()); row.createCell(26).setCellValue(dto.getOrderType()); row.createCell(27).setCellValue(dto.getAfterSaleStatus()); row.createCell(28).setCellValue(dto.getCancelReason()); row.createCell(29).setCellValue(dto.getLogisticsTime()); row.createCell(30).setCellValue(dto.getCompleteTime()); row.createCell(31).setCellValue(dto.getStoreName()); } //修改列宽 framework/src/main/resources/mapper/lmk/MemberMapper.xml
@@ -23,6 +23,7 @@ <result column="last_login_date" property="lastLoginDate"/> <result column="grade_id" property="gradeId"/> <result column="experience" property="experience"/> <result column="create_time" property="createTime"/> <collection property="tags" ofType="cn.lili.modules.lmk.domain.vo.MemberTagVO"> <id column="member_tag_id" property="id"/> <result column="tag_name" property="tagName"/> manager-api/src/main/java/cn/lili/controller/order/OrderManagerController.java
@@ -8,6 +8,7 @@ import cn.lili.common.enums.ResultUtil; import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.lmk.domain.vo.OrderCountVO; import cn.lili.modules.member.entity.dto.MemberAddressDTO; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dto.OrderExportDTO; @@ -64,6 +65,12 @@ Boolean needHide = true; return ResultUtil.data(orderService.queryByParams(orderSearchParams,needHide)); } @ApiOperation(value = "查询订单并统计金额与订单数") @GetMapping("/countOrder/{id}") public ResultMessage<OrderCountVO> countByIdOrder(@PathVariable("id") String id){ return ResultUtil.data(orderService.countByIdOrder(id)); } @ApiOperation(value = "更新订单状态") @GetMapping("/sendMessage/{snNo}") public ResultMessage<String> sendMqMessage(@PathVariable String snNo) { manager-api/src/main/java/cn/lili/controller/passport/MemberManagerController.java
@@ -39,7 +39,7 @@ @ApiOperation(value = "会员分页列表") @GetMapping public ResultMessage<IPage<MemberVO>> getByPage(MemberSearchVO memberSearchVO, PageVO page) { return ResultUtil.data(memberService.getMemberPage(memberSearchVO, page)); return ResultUtil.data(memberService.getMemberPageAndTag(memberSearchVO, page)); } @@ -47,7 +47,8 @@ @ApiImplicitParam(name = "id", value = "会员ID", required = true, dataType = "String", paramType = "path") @GetMapping(value = "/{id}") public ResultMessage<MemberVO> get(@PathVariable String id) { return ResultUtil.data(memberService.getMember(id)); MemberVO memberVO = memberService.getMember(id); return ResultUtil.data(memberVO); } @ApiOperation(value = "添加会员")