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.WebUtil;
|
import com.matrix.system.common.bean.SysUsers;
|
import com.matrix.system.constance.Dictionary;
|
import com.matrix.system.hive.bean.SysInstoreDetail;
|
import com.matrix.system.hive.bean.SysInstoreInfo;
|
import com.matrix.system.hive.bean.SysShopInfo;
|
import com.matrix.system.hive.bean.SysStoreInfo;
|
import com.matrix.system.hive.dao.*;
|
import com.matrix.system.hive.plugin.util.CollectionUtils;
|
import com.matrix.system.hive.plugin.util.MoneyUtil;
|
import com.matrix.system.hive.service.SysInstoreInfoService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
|
/**
|
* @date 2016-07-15 13:10
|
*/
|
@Service("sysInstoreInfoService")
|
public class SysInstoreInfoServiceImpl implements SysInstoreInfoService {
|
|
@Autowired
|
private SysInstoreInfoDao sysInstoreInfoDao;
|
@Autowired
|
private SysInstoreDetailDao sysInstoreDetailDao;
|
@Autowired
|
private SysStoreInfoDao sysStoreInfoDao;
|
@Autowired
|
private SysGoodsDao goodsDao;
|
@Autowired
|
private SysShopInfoDao shopInfoDao;
|
@Autowired
|
private SysInstoreDetailDao instoreDetailDao;
|
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public int add(SysInstoreInfo sysInstoreInfo) {
|
sysInstoreInfo.setCheckStatus(Dictionary.CHECK_STATUS_DSH);
|
// 设置入库单编号
|
sysInstoreInfo.setInstoreId(DateUtil.getTimeMark());
|
// SysShopInfo info = shopInfoDao.selectByShopName(Dictionary.SHOP_NAME_ZONGDIAN);
|
// // 系统限制入库只能入库到总店,总店不存在则
|
// if (info == null) {
|
// throw new GlobleException("总店仓库不存在,请添加!");
|
// }
|
// 插入
|
int i = sysInstoreInfoDao.insert(sysInstoreInfo);
|
// 设置总金额,并更新
|
sysInstoreInfo.setSumall(savevDetatil(sysInstoreInfo));
|
sysInstoreInfoDao.update(sysInstoreInfo);
|
return i;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public int modify(SysInstoreInfo sysInstoreInfo) {
|
Long id = sysInstoreInfo.getId();
|
SysInstoreInfo getInstoreInfo = sysInstoreInfoDao.selectById(id);
|
// 已经审核过的单据不能在修改
|
if (!getInstoreInfo.getCheckStatus().equals(Dictionary.CHECK_STATUS_DSH) && !getInstoreInfo.getCheckStatus().equals(Dictionary.CHECK_STATUS_SHWTG)) {
|
throw new GlobleException("已审核,不能再修改");
|
}
|
sysInstoreInfo.setCheckStatus(Dictionary.CHECK_STATUS_DSH);
|
// 设置总金额
|
sysInstoreInfo.setSumall(savevDetatil(sysInstoreInfo));
|
return sysInstoreInfoDao.update(sysInstoreInfo);
|
}
|
|
/**
|
* 保存入库单明细,返回总价
|
*
|
* @param sysInstoreInfo
|
* @author jiangyouyao
|
*/
|
private double savevDetatil(SysInstoreInfo sysInstoreInfo) {
|
// 1.删除入库单的明细
|
sysInstoreDetailDao.deleteByInstoreId(sysInstoreInfo.getId());
|
// 计算入库总额
|
Double total = 0.0;
|
// 2.添加新的入库明细
|
List<SysInstoreDetail> instoreDetailsFromObj = sysInstoreInfo.getInstoreDetails();
|
List<SysInstoreDetail> addList = new ArrayList<SysInstoreDetail>();
|
if (!instoreDetailsFromObj.isEmpty()) {
|
for (SysInstoreDetail sysInstoreDetail : instoreDetailsFromObj) {
|
if (sysInstoreDetail.getSkuId() != null && (!sysInstoreDetail.getSkuId().equals(""))) {
|
// 计算金额
|
total = MoneyUtil.add(MoneyUtil.mul(Double.parseDouble(sysInstoreDetail.getAmount() + ""),
|
sysInstoreDetail.getPrice()), total);
|
sysInstoreDetail.setInstoreId(sysInstoreInfo.getId());
|
// 设置小计
|
sysInstoreDetail.setPriceTotal(MoneyUtil.mul(Double.parseDouble(sysInstoreDetail.getAmount() + ""),
|
sysInstoreDetail.getPrice()));
|
addList.add(sysInstoreDetail);
|
}
|
}
|
sysInstoreDetailDao.batchInsert(addList);
|
}
|
return total;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public int remove(List<Long> list) {
|
for (Long id : list) {
|
// 取出入库单
|
SysInstoreInfo sysInstoreInfo = this.sysInstoreInfoDao.selectById(id);
|
// 验证状态是否为待审核,待审核的才能删除
|
if (!sysInstoreInfo.getCheckStatus().equals(Dictionary.CHECK_STATUS_DSH)) {
|
throw new GlobleException("编号为" + sysInstoreInfo.getInstoreId() + "的入库单已审核,不能被删除");
|
}
|
// 如果存在明细,把明细也删除
|
sysInstoreDetailDao.deleteByInstoreId(sysInstoreInfo.getId());
|
}
|
return sysInstoreInfoDao.deleteByIds(list);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public int removeById(Long id) {
|
|
SysInstoreInfo sysInstoreInfo = this.sysInstoreInfoDao.selectById(id);
|
|
// 验证状态是否为待审核,待审核的才能删除
|
if (!sysInstoreInfo.getCheckStatus().equals(Dictionary.CHECK_STATUS_DSH)) {
|
throw new GlobleException("编号为" + sysInstoreInfo.getInstoreId() + "的入库单已审核,不能被删除");
|
}
|
List<SysInstoreDetail> instoreDetails = instoreDetailDao.selectByOrderId(sysInstoreInfo.getId());
|
|
if (CollectionUtils.isNotEmpty(instoreDetails)) {
|
sysInstoreDetailDao.deleteByInstoreId(id);
|
return sysInstoreInfoDao.deleteById(id);
|
} else {
|
return 0;
|
}
|
}
|
|
@Override
|
public List<SysInstoreInfo> findInPage(SysInstoreInfo sysInstoreInfo, PaginationVO pageVo) {
|
|
return sysInstoreInfoDao.selectInPage(sysInstoreInfo, pageVo);
|
|
}
|
|
@Override
|
public List<SysInstoreInfo> findByModel(SysInstoreInfo sysInstoreInfo) {
|
|
return sysInstoreInfoDao.selectByModel(sysInstoreInfo);
|
|
}
|
|
@Override
|
public int findTotal(SysInstoreInfo sysInstoreInfo) {
|
|
return sysInstoreInfoDao.selectTotalRecord(sysInstoreInfo);
|
|
}
|
|
@Override
|
public SysInstoreInfo findById(Long id) {
|
|
return sysInstoreInfoDao.selectById(id);
|
|
}
|
|
/**
|
* 入库单审核
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public int check(SysInstoreInfo sysInstoreInfo) {
|
// 验证权限
|
SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
|
sysInstoreInfo.setAppmanId(user.getSuId());
|
sysInstoreInfo.setShopId(user.getShopId());
|
sysInstoreInfo.setCompanyId(user.getCompanyId());
|
|
SysInstoreInfo checkInStore = sysInstoreInfoDao.selectById(sysInstoreInfo.getId());
|
// if (!checkInStore.getAppmanId().equals(user.getSuId())) {
|
// throw new GlobleException("无权审核该单据!");
|
// }
|
if (!checkInStore.getCheckStatus().equals(Dictionary.CHECK_STATUS_DSH)) {
|
throw new GlobleException("该单据状态为" + checkInStore.getCheckStatus() + ",不可审核!");
|
}
|
sysInstoreInfo.setStoreId(checkInStore.getStoreId());
|
// 修改入库单状态
|
sysInstoreInfo.setCheckStatus(Dictionary.CHECK_STATUS_SHTG);
|
sysInstoreInfoDao.update(sysInstoreInfo);
|
List<SysInstoreDetail> instoreDetails = instoreDetailDao.selectByOrderId(sysInstoreInfo.getId());
|
|
// 需要插入的库存
|
List<SysStoreInfo> newStore = new ArrayList<>();
|
for (SysInstoreDetail instoreDetail : instoreDetails) {
|
SysStoreInfo sysStoreInfo = new SysStoreInfo();
|
sysStoreInfo.setSkuId(instoreDetail.getSkuId());
|
sysStoreInfo.setGoodsPrice(instoreDetail.getPrice());
|
// 所属仓库id
|
sysStoreInfo.setStoreId(sysInstoreInfo.getStoreId());
|
sysStoreInfo.setStoreTotal(new Double(instoreDetail.getAmount() + ""));
|
// 设置批次号
|
int num = sysStoreInfoDao.countDetail(instoreDetail.getSkuId());
|
String batch=DateUtil.dateToString(new Date(), DateUtil.DATE_FORMAT_NO_SPLITE_DD)+"-"+ num;
|
|
sysStoreInfo.setBatch(batch);
|
sysStoreInfo.setTime(new Date());
|
sysStoreInfo.setShopId(user.getShopId());
|
sysStoreInfo.setCompanyId(user.getCompanyId());
|
newStore.add(sysStoreInfo);
|
|
//更新入库记录批次
|
instoreDetail.setBatch(batch);
|
sysInstoreDetailDao.update(instoreDetail);
|
|
}
|
if (!newStore.isEmpty()) {
|
sysStoreInfoDao.batchInsert(newStore);
|
}
|
return 1;
|
}
|
|
/**
|
* 入库单弃审
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public int unCheck(SysInstoreInfo sysInstoreInfo) {
|
// 验证权限
|
SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
|
sysInstoreInfo.setAppmanId(user.getSuId());
|
sysInstoreInfo.setShopId(user.getShopId());
|
sysInstoreInfo.setCompanyId(user.getCompanyId());
|
|
SysInstoreInfo checkInStore = sysInstoreInfoDao.selectById(sysInstoreInfo.getId());
|
// if (!checkInStore.getAppmanId().equals(user.getSuId())) {
|
// throw new GlobleException("无权撤销该单据!");
|
// }
|
if (!checkInStore.getCheckStatus().equals(Dictionary.CHECK_STATUS_SHTG)) {
|
throw new GlobleException("该单据状态为" + checkInStore.getCheckStatus() + ",不可审核!");
|
}
|
|
// 修改入库单状态
|
sysInstoreInfo.setCheckStatus(Dictionary.CHECK_STATUS_DSH);
|
if (sysInstoreInfo.getAppRemark() != null) {
|
sysInstoreInfo.setAppRemark(sysInstoreInfo.getAppRemark().replace("[弃审]", "") + "[弃审]");
|
} else {
|
sysInstoreInfo.setAppRemark("[弃审]");
|
}
|
sysInstoreInfo.setStoreId(checkInStore.getStoreId());
|
sysInstoreInfoDao.update(sysInstoreInfo);
|
|
// 遍历入库单明细,将产品写入库存
|
List<SysInstoreDetail> instoreDetails = instoreDetailDao.selectByOrderId(sysInstoreInfo.getId());
|
int i = 0;
|
for (SysInstoreDetail instoreDetail : instoreDetails) {
|
SysStoreInfo sysStoreInfo = new SysStoreInfo();
|
sysStoreInfo.setSkuId(instoreDetail.getSkuId());
|
// 所属仓库id
|
sysStoreInfo.setStoreId(checkInStore.getStoreId());
|
sysStoreInfo.setStoreTotal((double) instoreDetail.getAmount());
|
SysStoreInfo storeInfo = sysStoreInfoDao.getStoreByGoodsId(sysStoreInfo);
|
if (storeInfo.getStoreTotal() - sysStoreInfo.getStoreTotal() < 0) {
|
throw new GlobleException(storeInfo.getGoods().getName() + "库存不足,不能撤销该条记录!");
|
}
|
storeInfo.setStoreTotal(storeInfo.getStoreTotal() - sysStoreInfo.getStoreTotal());
|
i = this.sysStoreInfoDao.update(storeInfo);
|
}
|
return i;
|
}
|
|
@Override
|
public int update(SysInstoreInfo sysInstoreInfo) {
|
return sysInstoreInfoDao.update(sysInstoreInfo);
|
}
|
|
|
}
|