Administrator
2018-10-30 7bf6a0582c7c62c90ee2ed8a88654f11d0479092
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
package com.yeshi.fanli.service.impl.order;
 
import java.io.Serializable;
import java.util.List;
import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
 
import javax.annotation.Resource;
 
import org.springframework.stereotype.Service;
 
import com.yeshi.fanli.dao.order.LostOrderDao;
import com.yeshi.fanli.dao.order.PidOrderDao;
import com.yeshi.fanli.entity.bus.user.LostOrder;
import com.yeshi.fanli.entity.bus.user.Order;
import com.yeshi.fanli.service.inter.order.LostOrderService;
import com.yeshi.fanli.service.inter.order.OrderService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.Utils;
import org.yeshi.utils.NumberUtil;
 
@Service
public class LostOrderServiceImpl implements LostOrderService {
 
    @Resource
    private OrderService orderService;
 
    @Resource
    private LostOrderDao lostOrderDao;
 
    @Resource
    private PidOrderDao pidOrderDao;
 
    @Override
    public int addLostOrder(LostOrder lostOrder) {
        String orderId = lostOrder.getOrderId();
        Integer type = lostOrder.getType();
        if (type == null) { // 默认为淘宝订单
            lostOrder.setType(1);
            type = 1;
        }
 
        Order order = orderService.findOrderByOrderIdAndType(orderId, type);
        if (order != null) {
            return -3;
        }
 
        // 查询是否为分享赚订单
        if (pidOrderDao.list("from PidOrder p where p.orderId=?", new Serializable[] { orderId }).size() > 0)
            return -5;
 
        WriteLock lostOrderwriteLock = lostOrderLock.writeLock();
        ReadLock lostOrderReadLock = lostOrderLock.readLock();
        try {
            try {
                lostOrderwriteLock.lock();
                List<LostOrder> list = lostOrderDao.list(
                        "from LostOrder lo where lo.orderId= ? and lo.type = ? and (lo.state = 0 or lo.state = 1)", 0,
                        1, new Serializable[] { orderId, type });
                if (list.size() > 0) {
                    LostOrder find = list.get(0);
                    Integer state = find.getState();
                    if (state == 0) {
                        return -2;
                    } else if (state == 1) {
                        return -1;
                    }
                }
            } finally {
                lostOrderReadLock.lock();
                lostOrderwriteLock.unlock();
            }
            lostOrder.setState(0);
            lostOrder.setHandleTime(0L);
            lostOrder.setCreateTime(System.currentTimeMillis());
            Order or = orderService.getSystemOrderByUid(Constant.TAOBAO, lostOrder.getUserInfo().getId());
            if (or != null) {
                boolean b = Utils.isUserOrder(or.getOrderId(), lostOrder.getOrderId());
                if (b) {
                    lostOrder.setJudge("匹配");
 
                } else {
                    lostOrder.setJudge("不匹配");
                }
            } else {
                lostOrder.setJudge("不匹配");
            }
            lostOrderDao.save(lostOrder);
        } finally {
            lostOrderReadLock.unlock();
        }
        return 0;
    }
 
    public void pass(LostOrder lostOrder) {
        Order order = new Order();
        order.setBeizhu("补单");
        order.setCreatetime(lostOrder.getCreateTime());
        order.setOrderId(lostOrder.getOrderId());
        order.setOrderType(lostOrder.getType());
        order.setState(1);
        order.setUserInfo(lostOrder.getUserInfo());
        try {
            boolean b = orderService.addOrder(order);
            if (b) {
                lostOrder.setRemake("处理成功");
                lostOrder.setState(1);
                lostOrder.setOrder(order);
            } else {
                lostOrder.setRemake("订单已存在!");
                lostOrder.setState(2);
            }
        } catch (Exception e) {
            e.printStackTrace();
            String message = e.getMessage();
            if (message.length() > 255) {
                message = message.substring(0, 255);
            }
            lostOrder.setRemake(e.getMessage());
            lostOrder.setState(2);
        }
        lostOrder.setHandleTime(System.currentTimeMillis());
        lostOrderDao.update(lostOrder);
    }
 
    public void reject(LostOrder lostOrder) {
        lostOrder.setHandleTime(System.currentTimeMillis());
        lostOrder.setState(2);
        lostOrderDao.update(lostOrder);
    }
 
    @Override
    public List<LostOrder> findLostOrderList(String key, int page) {
        List<LostOrder> list;
        if (key == null || "".equals(key.trim())) {
            list = lostOrderDao.list("from LostOrder lo order by id desc", (page - 1) * Constant.PAGE_SIZE,
                    Constant.PAGE_SIZE, new Serializable[] {});
        } else {
            if (NumberUtil.isNumeric(key) && key.length() >= 18) {
                // long id = Long.parseLong(key);
                list = lostOrderDao.list("from LostOrder lo where lo.orderId like ? order by id desc",
                        (page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE, new Serializable[] { "%" + key + "%" });
 
            } else {
 
                list = lostOrderDao.list("from LostOrder lo where lo.userInfo.nickName like ? order by id desc",
                        (page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE, new Serializable[] { "%" + key + "%" });
            }
 
        }
        return list;
    }
 
    @Override
    public int getCount(String key) {
        int count = 0;
        if (key == null || "".equals(key.trim())) {
            count = (int) lostOrderDao.getCount("select count(*) from LostOrder");
        } else {
 
            if (NumberUtil.isNumeric(key) && key.length() >= 18) {
                // long id = Long.parseLong(key);
                count = (int) lostOrderDao.getCount("select count(*) from LostOrder lo where lo.orderId like ?",
                        new Serializable[] { "%" + key + "%" });
            } else {
 
                count = (int) lostOrderDao.getCount(
                        "select count(*) from LostOrder lo where lo.userInfo.nickName like ?",
                        new Serializable[] { "%" + key + "%" });
            }
        }
        return count;
    }
 
    @Override
    public LostOrder getOne(long id) {
        return lostOrderDao.find(LostOrder.class, id);
    }
 
}