| | |
| | | import cn.lili.common.event.TransactionCommitSendMQEvent; |
| | | import cn.lili.common.exception.ServiceException; |
| | | import cn.lili.common.properties.RocketmqCustomProperties; |
| | | import cn.lili.common.security.AuthUser; |
| | | import cn.lili.common.security.OperationalJudgment; |
| | | import cn.lili.common.security.context.UserContext; |
| | | import cn.lili.common.security.enums.UserEnums; |
| | | import cn.lili.common.utils.CurrencyUtil; |
| | | import cn.lili.common.utils.SnowFlake; |
| | | import cn.lili.common.utils.StringUtils; |
| | | import cn.lili.common.vo.ResultMessage; |
| | | 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.enums.general.AdminRoleEnum; |
| | | import cn.lili.modules.member.entity.dos.Member; |
| | | import cn.lili.modules.member.entity.dto.MemberAddressDTO; |
| | | import cn.lili.modules.member.mapper.MemberMapper; |
| | | import cn.lili.modules.order.cart.entity.dto.TradeDTO; |
| | | import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum; |
| | | import cn.lili.modules.order.order.aop.OrderLogPoint; |
| | |
| | | import cn.lili.modules.order.trade.entity.dos.OrderLog; |
| | | import cn.lili.modules.order.trade.service.OrderLogService; |
| | | import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; |
| | | import cn.lili.modules.permission.entity.dos.AdminUser; |
| | | import cn.lili.modules.permission.service.AdminUserService; |
| | | import cn.lili.modules.permission.service.RoleService; |
| | | import cn.lili.modules.promotion.entity.dos.Pintuan; |
| | | import cn.lili.modules.promotion.service.PintuanService; |
| | | import cn.lili.modules.store.entity.dto.StoreDeliverGoodsAddressDTO; |
| | |
| | | import cn.lili.trigger.model.TimeTriggerMsg; |
| | | import cn.lili.trigger.util.DelayQueueTools; |
| | | import cn.lili.utils.COSUtil; |
| | | import cn.lili.utils.CommonUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.Wrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | |
| | | import org.apache.poi.ss.util.CellRangeAddressList; |
| | | import org.apache.poi.xssf.usermodel.XSSFWorkbook; |
| | | import org.apache.rocketmq.spring.core.RocketMQTemplate; |
| | | import org.redisson.api.RedissonClient; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.ApplicationEventPublisher; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.ServletOutputStream; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.InputStream; |
| | | import java.net.URLEncoder; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import cn.lili.modules.permission.entity.dos.Role; |
| | | /** |
| | | * 子订单业务层实现 |
| | | * |
| | |
| | | |
| | | private static final String ORDER_SN_COLUMN = "order_sn"; |
| | | |
| | | @Autowired |
| | | private MemberMapper memberMapperMapper; |
| | | /** |
| | | * 延时任务 |
| | | */ |
| | |
| | | private GoodsService goodsService; |
| | | @Autowired |
| | | private COSUtil cosUtil; |
| | | @Autowired |
| | | private AdminUserService adminUserService; |
| | | |
| | | @Resource |
| | | private RedisTemplate<Object,Object> redisTemplate; |
| | | |
| | | private final static String LOCK_ORDER_NO_MQ="lock_order_no_mq:"; |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void intoDB(TradeDTO tradeDTO) { |
| | |
| | | } |
| | | |
| | | @Override |
| | | public IPage<OrderSimpleVO> queryByParams(OrderSearchParams orderSearchParams) { |
| | | public IPage<OrderSimpleVO> queryByParams(OrderSearchParams orderSearchParams,Boolean needHide) { |
| | | QueryWrapper queryWrapper = orderSearchParams.queryWrapper(); |
| | | queryWrapper.groupBy("o.id"); |
| | | queryWrapper.orderByDesc("o.id"); |
| | | return this.baseMapper.queryByParams(PageUtil.initPage(orderSearchParams), queryWrapper); |
| | | IPage<OrderSimpleVO> page = this.baseMapper.queryByParams(PageUtil.initPage(orderSearchParams), queryWrapper); |
| | | if (needHide){ |
| | | if (!adminUserService.havePermissionRole(AdminRoleEnum.ORDER_INFO_PERMISSION)){ |
| | | for (OrderSimpleVO vo : page.getRecords()){ |
| | | vo.setConsigneeName(CommonUtil.maskName(vo.getConsigneeName())); |
| | | vo.setConsigneeMobile(CommonUtil.maskMobile(vo.getConsigneeMobile())); |
| | | } |
| | | } |
| | | } |
| | | |
| | | 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(OrderSearchParams orderSearchParams) { |
| | | public IPage<OrderSimpleXcxVO> queryByXcxParams(OrderSearchXcxParams orderSearchParams) { |
| | | QueryWrapper queryWrapper = orderSearchParams.queryWrapper(); |
| | | queryWrapper.groupBy("o.id"); |
| | | queryWrapper.orderByDesc("o.id"); |
| | | IPage<OrderSimpleXcxVO> iPage = this.baseMapper.queryByXcxParams(PageUtil.initPage(orderSearchParams), queryWrapper); |
| | | Set<String> goodsIds = new HashSet<>(); |
| | | for (OrderSimpleXcxVO orderSimpleVO : iPage.getRecords()) { |
| | | orderSimpleVO.setOrderItems(orderSimpleVO.initOrderItems()); |
| | | String groupGoodsId = orderSimpleVO.getGroupGoodsId(); |
| | | if (StringUtils.isNotBlank(groupGoodsId)) { |
| | | goodsIds.addAll(Arrays.asList(groupGoodsId.split(","))); |
| | | } |
| | | } |
| | | if (CollectionUtil.isNotEmpty(goodsIds)) { |
| | | List<Goods> list = goodsService.list(Wrappers.<Goods>lambdaQuery().in(Goods::getId, goodsIds)); |
| | | Map<String, String> goodsVideos = list |
| | | .stream().collect(Collectors.toMap(Goods::getId, g-> |
| | | StringUtils.isNotBlank(g.getGoodsVideo())?g.getGoodsVideo():"" |
| | | )); |
| | | iPage.getRecords().forEach(orderSimpleVO -> { |
| | | orderSimpleVO.getOrderItems().forEach(orderItem -> { |
| | | String videoUrl = goodsVideos.get(orderItem.getGoodsId()); |
| | | if (StringUtils.isNotBlank(videoUrl)&&!videoUrl.contains("http")) { |
| | | orderItem.setVideo(cosUtil.getPreviewUrl(videoUrl)); |
| | | } |
| | | String image = orderItem.getImage(); |
| | | if (StringUtils.isNotBlank(image)&&!image.contains("http")) { |
| | | orderItem.setImage(cosUtil.getPreviewUrl(image)); |
| | | } |
| | | }); |
| | | }); |
| | | } |
| | | return iPage; |
| | | } |
| | | |
| | | @Override |
| | | public IPage<OrderSimpleXcxVO> querySupplierOrderParams(SupplierOrderSearchParams orderSearchParams) { |
| | | QueryWrapper queryWrapper = orderSearchParams.queryWrapper(); |
| | | queryWrapper.groupBy("o.id"); |
| | | queryWrapper.orderByDesc("o.id"); |
| | | IPage<OrderSimpleXcxVO> iPage = this.baseMapper.querySupplierOrderParams(PageUtil.initPage(orderSearchParams), queryWrapper); |
| | | Set<String> goodsIds = new HashSet<>(); |
| | | for (OrderSimpleXcxVO orderSimpleVO : iPage.getRecords()) { |
| | | orderSimpleVO.setOrderItems(orderSimpleVO.initOrderItems()); |
| | |
| | | |
| | | @Override |
| | | public void queryExportOrder(HttpServletResponse response, OrderSearchParams orderSearchParams) { |
| | | List<OrderExportDTO> orderExportDTOS = this.baseMapper.queryExportOrder(orderSearchParams.queryWrapper()); |
| | | |
| | | XSSFWorkbook workbook = initOrderExportData(this.baseMapper.queryExportOrder(orderSearchParams.queryWrapper())); |
| | | if (!adminUserService.havePermissionRole(AdminRoleEnum.ORDER_INFO_PERMISSION)){ |
| | | for (OrderExportDTO vo : orderExportDTOS){ |
| | | vo.setConsigneeName(CommonUtil.maskName(vo.getConsigneeName())); |
| | | vo.setConsigneeMobile(CommonUtil.maskMobile(vo.getConsigneeMobile())); |
| | | } |
| | | } |
| | | |
| | | |
| | | XSSFWorkbook workbook = initOrderExportData(orderExportDTOS); |
| | | try { |
| | | // 设置响应头 |
| | | String fileName = URLEncoder.encode("订单列表", "UTF-8"); |
| | |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public String sendMqMessage(String snNo) { |
| | | //限制30秒只能请求一次避免出现重新提交问题 |
| | | Boolean b = redisTemplate.opsForValue().setIfAbsent(LOCK_ORDER_NO_MQ + snNo, snNo,30, TimeUnit.SECONDS); |
| | | if ( Boolean.FALSE.equals(b)){ |
| | | throw new ServiceException("请在30秒后重试"); |
| | | } |
| | | Order order = this.getBySn(snNo); |
| | | if (order == null) { |
| | | throw new ServiceException(ResultCode.ORDER_NOT_EXIST); |
| | | } |
| | | if (!OrderStatusEnum.PAID.name().equals(order.getOrderStatus())) { |
| | | throw new ServiceException("订单状态不是已支付状态"); |
| | | } |
| | | OrderMessage orderMessage = new OrderMessage(); |
| | | //发送订单已付款消息 |
| | | orderMessage.setOrderSn(order.getSn()); |
| | | orderMessage.setPaymentMethod(order.getPaymentMethod()); |
| | | orderMessage.setNewStatus(OrderStatusEnum.PAID); |
| | | this.sendUpdateStatusMessage(orderMessage); |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | @OrderLogPoint(description = "'订单['+#orderSn+']取消,原因为:'+#reason", orderSn = "#orderSn") |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Order cancel(String orderSn, String reason) { |