Helius
2021-06-28 2b3cf8e87398099ba0818ea84e6c751871beac1c
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
package com.xzx.gc.order.service;
 
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xzx.gc.common.constant.Constants;
import com.xzx.gc.common.exception.RestException;
import com.xzx.gc.common.utils.IdUtils;
import com.xzx.gc.entity.*;
import com.xzx.gc.order.dto.AddJhyOrderDto;
import com.xzx.gc.order.dto.JhyOrderListDto;
import com.xzx.gc.order.mapper.*;
import com.xzx.gc.order.vo.JhyOrderDetailsVo;
import com.xzx.gc.order.vo.JhyOrderListVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
@Slf4j
@Service
@Transactional
public class JhyOrderService {
 
    @Autowired
    private JhyOrderMapper jhyOrderMapper;
 
    @Autowired
    private AddressMapper addressMapper;
 
    @Autowired
    private SysEnvironmentalInfoMapper environmentalInfoMapper;
 
    @Autowired
    private JhyOrderItemsMapper jhyOrderItemsMapper;
 
    @Autowired
    private JhyInfoMapper jhyInfoMapper;
 
    @Autowired
    private IdUtils idUtils;
 
    public void addJhyOrder(AddJhyOrderDto orderDto) {
//        JhyInfo jhyInfo = jhyInfoMapper.selectJhyInfoByUserId(orderDto.getUserId());
//        if (jhyInfo != null && JhyInfo.CHECK_PASS.equals(jhyInfo.getStatus())) {
//            throw new RestException(-3, "集货员不能下单");
//        }
 
        // TODO 判断地址附近500米是否有集物员
        String orderNo = idUtils.generate("JW", 10);
 
        JhyOrder jhyOrder = new JhyOrder();
        AddressInfo addressInfo = addressMapper.selectByPrimaryKey(orderDto.getAddressId());
 
        jhyOrder.setOrderNo(orderNo);
        jhyOrder.setArea(addressInfo.getAddressArea());
 
        StringBuffer address = new StringBuffer();
        address.append(addressInfo.getDetailAddress());
        if (StrUtil.isNotBlank(addressInfo.getTagName())) {
            address.append(StrUtil.isNotBlank(addressInfo.getHouseName()) ? addressInfo.getHouseName() : "");
            if (Constants.ADDRESS_TYPE_HOME.equals(addressInfo.getTagName())) {
                address.append(StrUtil.isNotBlank(addressInfo.getHouseNumber()) ? addressInfo.getHouseNumber() : "");
                address.append(StrUtil.isNotBlank(addressInfo.getUnitName()) ? addressInfo.getUnitName() : "");
            }
        }
        jhyOrder.setAddress(address.toString());
 
        jhyOrder.setUsername(addressInfo.getRelaName());
        jhyOrder.setPhone(addressInfo.getMobilePhone());
        jhyOrder.setLongitude(addressInfo.getLongitude());
        jhyOrder.setLatitude(addressInfo.getLatitude());
        jhyOrder.setReserveDate(orderDto.getReserveDate());
        jhyOrder.setReserveTime(orderDto.getReserveTime());
        jhyOrder.setWeight(orderDto.getWeight());
        jhyOrder.setStatus(JhyOrder.ORDER_STATUS_WAITING);
        jhyOrder.setCreatedTime(new Date());
        jhyOrder.setUserId(orderDto.getUserId());
        jhyOrderMapper.insert(jhyOrder);
 
        long[] typeIds = StrUtil.splitToLong(orderDto.getTypeIds(), ",");
        for (long typeId : typeIds) {
            SysEnvironmentalInfo environmentalInfo = environmentalInfoMapper.selectByPrimaryKey(typeId);
 
            JhyOrderItems item = new JhyOrderItems();
            item.setOrderId(jhyOrder.getId());
            item.setPicture(environmentalInfo.getPicture());
            item.setItemType(typeId);
            item.setTitle(environmentalInfo.getTitle());
            item.setPrice(new BigDecimal(environmentalInfo.getPrice()));
            jhyOrderItemsMapper.insert(item);
        }
    }
 
    public PageInfo<JhyOrderListVo> orderList(JhyOrderListDto orderListDto) {
        JhyInfo jhyInfo = jhyInfoMapper.selectJhyInfoByUserId(orderListDto.getUserId());
        if (jhyInfo == null || !JhyInfo.CHECK_PASS.equals(jhyInfo.getStatus())) {
            throw new RestException(-3, "不是集货员");
        }
 
        PageHelper.startPage(orderListDto.getPageNo(), orderListDto.getPageSize());
        List<JhyOrderListVo> data = jhyOrderMapper.selectJhyOrderList(orderListDto);
        return new PageInfo<>(data);
    }
 
    public JhyOrderDetailsVo orderDetails(Long orderId, String userId) {
        JhyOrder order = jhyOrderMapper.selectByPrimaryKey(orderId);
        List<JhyOrderItems> items = jhyOrderItemsMapper.selectOrderItems(orderId);
 
        BigDecimal total = BigDecimal.ZERO;
        for (JhyOrderItems item : items) {
            total = total.add(StrUtil.isNotBlank(item.getScore()) ? new BigDecimal(item.getScore()) : BigDecimal.ZERO);
        }
 
        JhyOrderDetailsVo detailsVo = new JhyOrderDetailsVo();
        BeanUtil.copyProperties(order, detailsVo);
 
        detailsVo.setAddress(order.getArea() + order.getAddress());
        detailsVo.setTotalPrice(total);
        detailsVo.setItems(items);
        return detailsVo;
    }
 
    public void grabOrder(Long orderId, String userId) {
        JhyInfo jhyInfo = jhyInfoMapper.selectJhyInfoByUserId(userId);
        if (jhyInfo == null || !JhyInfo.CHECK_PASS.equals(jhyInfo.getStatus())) {
            throw new RestException(-3, "不是集货员");
        }
 
        JhyOrder order = jhyOrderMapper.selectByPrimaryKey(orderId);
        if (order == null) {
            throw new RestException(-3, "订单不存在");
        }
 
        order.setJhyId(userId);
        order.setStatus(JhyOrder.ORDER_STATUS_IMG);
        jhyOrderMapper.updateByPrimaryKey(order);
    }
 
    public void cancelOrder(Long orderId, String userId) {
        JhyOrder order = jhyOrderMapper.selectByPrimaryKey(orderId);
 
        if (!userId.equals(order.getUserId()) && !userId.equals(order.getJhyId())) {
            throw new RestException(-3, "无权限操作");
        }
 
        order.setStatus(JhyOrder.ORDER_STATUS_CANCEL);
        jhyOrderMapper.updateByPrimaryKey(order);
    }
}