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;
|
}
|
|
|
}
|