puzhibing
2023-10-08 22199bbdda579861736420fe26c2873ab0f5d21c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package com.sinata.shop.modular.mall.service.impl;
 
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.SqlHelper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import com.ijpay.core.kit.WxPayKit;
import com.sinata.common.enums.EnumPayType;
import com.sinata.common.enums.EnumUserBankDetailDoneType;
import com.sinata.common.enums.EnumUserBankDetailType;
import com.sinata.common.enums.mall.EnumMallOrderState;
import com.sinata.core.exception.GunsException;
import com.sinata.core.util.Convert;
import com.sinata.shop.config.properties.WxPayProperties;
import com.sinata.shop.core.common.exception.BizExceptionEnum;
import com.sinata.shop.core.shiro.ShiroKit;
import com.sinata.shop.core.util.PayUtil;
import com.sinata.shop.modular.mall.dao.MallOrderMapper;
import com.sinata.shop.modular.mall.dto.OrderClassPriceVo;
import com.sinata.shop.modular.mall.dto.OrderPriceVo;
import com.sinata.shop.modular.mall.model.MallOrder;
import com.sinata.shop.modular.mall.model.MallOrderDetail;
import com.sinata.shop.modular.mall.service.IMallOrderDetailService;
import com.sinata.shop.modular.mall.service.IMallOrderService;
import com.sinata.shop.modular.mall.service.IMemMerchantService;
import com.sinata.shop.modular.member.model.MemUserBankDetail;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.RowBounds;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
 
/**
 * <p>
 * 商品订单 服务实现类
 * </p>
 *
 * @author frankevil
 * @since 2023-03-19
 */
@Slf4j
@Service
public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder> implements IMallOrderService {
 
    @Resource
    private IMemMerchantService merchantService;
 
    @Resource
    private WxPayProperties wxPayProperties;
 
    @Resource
    private IMallOrderDetailService mallOrderDetailService;
 
    @Override
    public List<OrderClassPriceVo> orderIndex(Integer merchantId) {
        return baseMapper.orderIndex(merchantId);
    }
 
    @Override
    public OrderPriceVo orderPriceIndex(Integer merchantId) {
        return baseMapper.orderPriceIndex(merchantId);
    }
 
    @Override
    public Integer orderUse(Integer merchantId) {
        return baseMapper.orderUse(merchantId);
    }
 
    @Override
    public Page<MallOrder> findPage(Page<MallOrder> page, Wrapper<?> wrapper) {
        wrapper = SqlHelper.fillWrapper(page, wrapper);
        page.setRecords(baseMapper.findList(page, wrapper));
        return page;
    }
 
    @Override
    public List<MallOrder> findList(Wrapper<?> wrapper) {
        return this.baseMapper.findList(RowBounds.DEFAULT, wrapper);
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void cancelOrder(String orderNo) {
        MallOrder order = this.selectById(orderNo);
 
        List<Integer> noState = Lists.newArrayList(EnumMallOrderState.WAIT_PAY.getIndex(), EnumMallOrderState.WAIT_CHECK.getIndex());
        if (order == null || noState.stream().noneMatch(s -> s.equals(order.getState()))) {
            throw new GunsException(BizExceptionEnum.REQUEST_NULL.getCode(), "只有未支付或未核销的订单才能取消");
        }
 
 
        order.setCancelType(1);
        order.setCancelTime(new Date());
        order.setState(EnumMallOrderState.CANCEL.getIndex());
 
        //修改状态
        this.updateById(order);
    }
 
    @Override
    public boolean fullRefund(String orderNo) {
        Object obj = this.mallOrderDetailService.selectObj(new EntityWrapper<MallOrderDetail>()
                .setSqlSelect("IFNULL(SUM(goods_num-refund_num),0)")
                .eq("order_no", orderNo));
        return Convert.toInt(obj, 0) <= 0;
    }
 
    @Override
    public String getFirstGoodsImag(String orderNo) {
        return (String) this.mallOrderDetailService.selectObj(new EntityWrapper<MallOrderDetail>()
                .setSqlSelect("goods_image")
                .eq("order_no", orderNo)
                .last("LIMIT 1"));
    }
 
    @Override
    public List<Map<String, Object>> countOrderIncome(Wrapper<?> wrapper) {
        return this.baseMapper.countOrderIncome(wrapper);
    }
 
    @Override
    public List<Map<String, Object>> getDataTrend(Integer dataType,Integer merchantId, String startTime, String endTime,String dateFormat) {
        return baseMapper.getDataTrend(dataType,merchantId,startTime,endTime,dateFormat);
    }
    public List<Map<String, Object>> getDataTrend2(Integer dataType,Integer merchantId, String startTime, String endTime,String dateFormat) {
        return baseMapper.getDataTrend2(dataType,merchantId,startTime,endTime,dateFormat);
    }
}