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 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 items = sysOutStore.getOutStoreItems(); List delItems = sysOutStoreDao.selectById(sysOutStore.getId()).getOutStoreItems(); List 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 list) { return sysOutStoreDao.deleteByIds(list); } @Override public int removeById(Long id) { return sysOutStoreDao.deleteById(id); } @Override public List findInPage(SysOutStore sysOutStore, PaginationVO pageVo) { return sysOutStoreDao.selectInPage(sysOutStore, pageVo); } @Override public List 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 list = sysOutStoreItemDao.selectByOrderId(id); sysOutStore.setOutStoreItems(list); return sysOutStore; } @Override public int checkInfo(SysOutStore sysOutStore) { SysOutStore queryStore = sysOutStoreDao.selectById(sysOutStore.getId()); List 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; } }