935090232@qq.com
2021-04-03 00efd2e4db8157ece4116c956c314803ed073042
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
package com.matrix.system.hive.service.imp;
 
import com.matrix.core.constance.MatrixConstance;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.pojo.PaginationVO;
 
 
import com.matrix.core.tools.DateUtil;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.WebUtil;
import com.matrix.system.common.bean.SysUsers;
import com.matrix.system.constance.Dictionary;
import com.matrix.system.hive.bean.SysOutStore;
import com.matrix.system.hive.bean.SysOutStoreItem;
import com.matrix.system.hive.bean.SysShopInfo;
import com.matrix.system.hive.bean.SysStoreInfo;
import com.matrix.system.hive.dao.SysOutStoreDao;
import com.matrix.system.hive.dao.SysOutStoreItemDao;
import com.matrix.system.hive.dao.SysStoreInfoDao;
import com.matrix.system.hive.service.CodeService;
import com.matrix.system.hive.service.SysOutStoreService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
 
/**
 * @date 2016-07-25 12:43
 */
@Service("sysOutStoreService")
public class SysOutStoreServiceImpl implements SysOutStoreService {
 
    @Autowired
    private SysOutStoreDao sysOutStoreDao;
    @Autowired
    private SysOutStoreItemDao sysOutStoreItemDao;
    @Autowired
    private SysStoreInfoDao storeInfoDao;
    @Autowired
    private CodeService codeService;
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int add(SysOutStore sysOutStore) {
        SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
        sysOutStore.setStaffId(sysUsers.getSuId());
        sysOutStore.setOutStoreNo(codeService.getOutStoreCode());
        sysOutStore.setShopId(sysUsers.getShopId());
        sysOutStore.setCompanyId(sysUsers.getCompanyId());
        List<SysOutStoreItem> items = sysOutStore.getOutStoreItems();
 
 
        int i = sysOutStoreDao.insert(sysOutStore);
        //添加新的明细
        for (SysOutStoreItem item : items) {
            if (item.getSkuId() != null) {
                item.setOutStoreId(sysOutStore.getId());
 
                SysStoreInfo storeInfo = storeInfoDao.selectById(item.getStoreId());
                if (storeInfo.getStoreTotal() < item.getAmount()) {
                    throw new GlobleException("存在产品消耗量大于库存量");
                }
                storeInfo.setStoreTotal(storeInfo.getStoreTotal() - item.getAmount());
                sysOutStoreItemDao.insert(item);
                storeInfoDao.update(storeInfo);
            }
        }
        return i;
 
    }
 
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int modify(SysOutStore sysOutStore) {
 
        List<SysOutStoreItem> items = sysOutStore.getOutStoreItems();
        List<SysOutStoreItem> delItems = sysOutStoreDao.selectById(sysOutStore.getId()).getOutStoreItems();
        List<Long> ids = new ArrayList<>();
        //批量删除原有的明细,把id放到一个集合中,在数据库中使用批量删除
        for (SysOutStoreItem delObj : delItems) {
            ids.add(delObj.getId());
            sysOutStoreItemDao.deleteByIds(ids);
        }
        //添加新的明细
        for (SysOutStoreItem item : items) {
            if (item.getSkuId() != null) {
                item.setOutStoreId(sysOutStore.getId());
                sysOutStoreItemDao.insert(item);
            }
        }
 
        return sysOutStoreDao.update(sysOutStore);
 
    }
 
    @Override
    public int remove(List<Long> list) {
 
        return sysOutStoreDao.deleteByIds(list);
 
    }
 
    @Override
    public int removeById(Long id) {
 
        return sysOutStoreDao.deleteById(id);
 
    }
 
    @Override
    public List<SysOutStore> findInPage(SysOutStore sysOutStore, PaginationVO pageVo) {
 
        return sysOutStoreDao.selectInPage(sysOutStore, pageVo);
 
    }
 
    @Override
    public List<SysOutStore> findByModel(SysOutStore sysOutStore) {
 
        return sysOutStoreDao.selectByModel(sysOutStore);
 
    }
 
    @Override
    public int findTotal(SysOutStore sysOutStore) {
 
        return sysOutStoreDao.selectTotalRecord(sysOutStore);
 
    }
 
    @Override
    public SysOutStore findById(Long id) {
        SysOutStore sysOutStore = sysOutStoreDao.selectById(id);
        List<SysOutStoreItem> list = sysOutStoreItemDao.selectByOrderId(id);
        sysOutStore.setOutStoreItems(list);
        return sysOutStore;
 
    }
 
    @Override
    public int checkInfo(SysOutStore sysOutStore) {
        SysOutStore queryStore = sysOutStoreDao.selectById(sysOutStore.getId());
        List<SysOutStoreItem> list = queryStore.getOutStoreItems();
        int flag = 0;
        for (SysOutStoreItem item : list) {
            SysStoreInfo storeInfo = null;// storeInfoDao.selectStoInfo(item.getSkuId(), queryStore.getShopId());
            if (storeInfo != null) {
                Double total = storeInfo.getStoreTotal() - (item.getAmount() / storeInfo.getGoods().getVolume());
                if (total >= 0) {
                    flag++;
                    // 计算剩余瓶数
                    storeInfo.setStoreTotal(total);
                    storeInfoDao.update(storeInfo);
                } else {
                    throw new GlobleException("配料失败:【" + storeInfo.getGoods().getName() + "库存不足】");
                }
            } else {
                throw new GlobleException(
                        "配料失败:【" + item.getGoods().getName() + "本店不存在】");
            }
        }
        queryStore.setCheckStatus(Dictionary.OUT_STORE_ALREADY_CHECK);
        sysOutStoreDao.update(queryStore);
        return flag;
    }
 
 
}