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