|
@@ -4,17 +4,16 @@ import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.ym.mec.auth.api.client.SysUserFeignService;
|
|
|
import com.ym.mec.auth.api.entity.SysUser;
|
|
|
-import com.ym.mec.biz.dal.dao.GoodsDao;
|
|
|
-import com.ym.mec.biz.dal.dao.GoodsProcurementDao;
|
|
|
-import com.ym.mec.biz.dal.dao.SysConfigDao;
|
|
|
-import com.ym.mec.biz.dal.dao.TeacherDao;
|
|
|
+import com.ym.mec.biz.dal.dao.*;
|
|
|
import com.ym.mec.biz.dal.dto.BasicUserDto;
|
|
|
import com.ym.mec.biz.dal.dto.GoodsBatchNoDto;
|
|
|
import com.ym.mec.biz.dal.dto.GoodsSellDto;
|
|
|
import com.ym.mec.biz.dal.entity.Goods;
|
|
|
import com.ym.mec.biz.dal.entity.GoodsProcurement;
|
|
|
+import com.ym.mec.biz.dal.entity.SellOrder;
|
|
|
import com.ym.mec.biz.dal.enums.*;
|
|
|
import com.ym.mec.biz.service.GoodsService;
|
|
|
+import com.ym.mec.biz.service.SellOrderService;
|
|
|
import com.ym.mec.biz.service.SysMessageService;
|
|
|
import com.ym.mec.biz.service.UploadFileService;
|
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
@@ -41,7 +40,6 @@ import org.springframework.web.multipart.MultipartFile;
|
|
|
import java.io.ByteArrayInputStream;
|
|
|
import java.io.InputStream;
|
|
|
import java.util.*;
|
|
|
-import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -63,6 +61,8 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods> implement
|
|
|
private SysMessageService sysMessageService;
|
|
|
@Autowired
|
|
|
private TeacherDao teacherDao;
|
|
|
+ @Autowired
|
|
|
+ private SellOrderDao sellOrderDao;
|
|
|
|
|
|
@Override
|
|
|
public BaseDAO<Integer, Goods> getDAO() {
|
|
@@ -304,8 +304,14 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods> implement
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ public List<SellOrder> goodsBatchNoAllot(Goods goods) {
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
|
- public List<GoodsProcurement> subtractStock(List<Integer> goodsIds, AccountType accountType) {
|
|
|
+ public List<SellOrder> subtractStock(List<Integer> goodsIds, AccountType accountType) {
|
|
|
if(CollectionUtils.isEmpty(goodsIds)){
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
@@ -314,77 +320,103 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods> implement
|
|
|
|
|
|
List<Goods> tempGoodsList = goodsDao.lockGoods(new ArrayList<>(goodsIds));
|
|
|
Map<Integer, Goods> idTempGoodsMap = tempGoodsList.stream().collect(Collectors.toMap(Goods::getId, g -> g));
|
|
|
- List<Integer> singleGoodsIds = new ArrayList<>();
|
|
|
+ List<SellOrder> goodsBatchNoDtos = new ArrayList<>();
|
|
|
for (Integer goodsId : goodsIds) {
|
|
|
Goods tempGoods = idTempGoodsMap.get(goodsId);
|
|
|
+ List<Goods> childGoods = new ArrayList<>();
|
|
|
if(StringUtils.isBlank(tempGoods.getComplementGoodsIdList())){
|
|
|
- singleGoodsIds.add(tempGoods.getId());
|
|
|
+ childGoods.add(tempGoods);
|
|
|
}else{
|
|
|
List<Integer> complementGoodsIds = Arrays.stream(tempGoods.getComplementGoodsIdList().split(",")).map(s -> Integer.valueOf(s)).collect(Collectors.toList());
|
|
|
- singleGoodsIds.addAll(complementGoodsIds);
|
|
|
+ childGoods = goodsDao.getGoodies(complementGoodsIds);
|
|
|
}
|
|
|
tempGoods.setSellCount((int) (tempGoods.getSellCount() + goodsSellNumMap.get(tempGoods.getId())));
|
|
|
-// goodsDao.update(tempGoods);
|
|
|
- }
|
|
|
- goodsDao.batchUpdate(tempGoodsList);
|
|
|
- List<Goods> singleGoodsList = goodsDao.getGoodies(singleGoodsIds);
|
|
|
- Map<Integer, Goods> idSingleGoodsMap = singleGoodsList.stream().collect(Collectors.toMap(Goods::getId, g -> g));
|
|
|
- List<GoodsProcurement> goodsBatchNoDtos = new ArrayList<>();
|
|
|
- for (Integer singleGoodsId : singleGoodsIds) {
|
|
|
- Goods goods = idSingleGoodsMap.get(singleGoodsId);
|
|
|
- GoodsProcurement goodsProcurement = null;
|
|
|
- if(StockType.INTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.INTERNAL.equals(accountType))){
|
|
|
- goodsProcurement = goodsProcurementDao.getWithStockSurplusProcurement(goods.getId());
|
|
|
- goods.setStockCount(new AtomicInteger(goods.getStockCount()).decrementAndGet());
|
|
|
- if(Objects.nonNull(goodsProcurement)){
|
|
|
- goodsProcurement.setStockCount(new AtomicInteger(goodsProcurement.getStockCount()).decrementAndGet());
|
|
|
- goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).incrementAndGet());
|
|
|
+ for (Goods goods : childGoods) {
|
|
|
+ GoodsProcurement goodsProcurement = null;
|
|
|
+ if(StockType.INTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.INTERNAL.equals(accountType))){
|
|
|
+ goodsProcurement = goodsProcurementDao.getWithStockSurplusProcurement(goods.getId());
|
|
|
+ goods.setStockCount(new AtomicInteger(goods.getStockCount()).decrementAndGet());
|
|
|
+ if(Objects.nonNull(goodsProcurement)){
|
|
|
+ goodsProcurement.setStockCount(new AtomicInteger(goodsProcurement.getStockCount()).decrementAndGet());
|
|
|
+ goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).incrementAndGet());
|
|
|
+ }
|
|
|
+ }else if(StockType.EXTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.EXTERNAL.equals(accountType))){
|
|
|
+ goodsProcurement = goodsProcurementDao.getWithTaxStockSurplusProcurement(goods.getId());
|
|
|
+ goods.setTaxStockCount(new AtomicInteger(goods.getTaxStockCount()).decrementAndGet());
|
|
|
+ if(Objects.nonNull(goodsProcurement)){
|
|
|
+ goodsProcurement.setTaxStockCount(new AtomicInteger(goodsProcurement.getTaxStockCount()).decrementAndGet());
|
|
|
+ goodsProcurement.setTaxStockSoldNum(new AtomicInteger(goodsProcurement.getTaxStockSoldNum()).incrementAndGet());
|
|
|
+ }
|
|
|
}
|
|
|
- }else if(StockType.EXTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.EXTERNAL.equals(accountType))){
|
|
|
- goodsProcurement = goodsProcurementDao.getWithTaxStockSurplusProcurement(goods.getId());
|
|
|
- goods.setTaxStockCount(new AtomicInteger(goods.getTaxStockCount()).decrementAndGet());
|
|
|
+
|
|
|
+ goodsDao.update(goods);
|
|
|
if(Objects.nonNull(goodsProcurement)){
|
|
|
- goodsProcurement.setTaxStockCount(new AtomicInteger(goodsProcurement.getTaxStockCount()).decrementAndGet());
|
|
|
- goodsProcurement.setTaxStockSoldNum(new AtomicInteger(goodsProcurement.getTaxStockSoldNum()).incrementAndGet());
|
|
|
+ goodsProcurementDao.update(goodsProcurement);
|
|
|
+ }else{
|
|
|
+ goodsProcurement = new GoodsProcurement(goods.getId());
|
|
|
+ }
|
|
|
+ if(StringUtils.isNotBlank(tempGoods.getComplementGoodsIdList())){
|
|
|
+ goodsProcurement.setParentGoodsId(tempGoods.getId());
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- goodsDao.update(goods);
|
|
|
- if(Objects.nonNull(goodsProcurement)){
|
|
|
- goodsBatchNoDtos.add(goodsProcurement);
|
|
|
- goodsProcurementDao.update(goodsProcurement);
|
|
|
- }else{
|
|
|
- goodsBatchNoDtos.add(new GoodsProcurement(goods.getId()));
|
|
|
+// goodsBatchNoDtos.add(goodsProcurement);
|
|
|
}
|
|
|
+// goodsDao.update(tempGoods);
|
|
|
}
|
|
|
-
|
|
|
+ goodsDao.batchUpdate(tempGoodsList);
|
|
|
return goodsBatchNoDtos;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
|
- public void increaseStock(List<GoodsBatchNoDto> goodsBatchNoDtos, List<Integer> goodsIdsList, AccountType accountType) {
|
|
|
- Set<Integer> goodsIds = goodsBatchNoDtos.stream().map(GoodsBatchNoDto::getGoodsId).collect(Collectors.toSet());
|
|
|
- List<Goods> goodsList = goodsDao.lockGoods(new ArrayList<>(goodsIds));
|
|
|
+ public void increaseStock(List<SellOrder> sellOrders, AccountType accountType) {
|
|
|
+ if(CollectionUtils.isEmpty(sellOrders)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Set<Integer> goodsIdList = new HashSet<>();
|
|
|
+ sellOrders.forEach(so -> {
|
|
|
+ if(Objects.nonNull(so.getParentGoodsId())){
|
|
|
+ goodsIdList.add(so.getParentGoodsId());
|
|
|
+ }else{
|
|
|
+ goodsIdList.add(so.getGoodsId());
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ List<Goods> goodsList = goodsDao.lockGoods(new ArrayList<>(goodsIdList));
|
|
|
Map<Integer, Goods> idGoodsMap = goodsList.stream().collect(Collectors.toMap(Goods::getId, g -> g));
|
|
|
- for (GoodsBatchNoDto goodsBatchNoDto : goodsBatchNoDtos) {
|
|
|
- Goods goods = idGoodsMap.get(goodsBatchNoDto.getGoodsId());
|
|
|
- GoodsProcurement goodsProcurement = goodsProcurementDao.getWithGoodsAndBatchNo(goods.getId(), goodsBatchNoDto.getBatchNo());
|
|
|
+
|
|
|
+ for (SellOrder sellOrder : sellOrders) {
|
|
|
+ Goods goods = goodsDao.get(sellOrder.getGoodsId());
|
|
|
+ GoodsProcurement goodsProcurement = goodsProcurementDao.getWithGoodsAndBatchNo(sellOrder.getGoodsId(), sellOrder.getBatchNo());
|
|
|
if(StockType.INTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.INTERNAL.equals(accountType))){
|
|
|
- goods.setStockCount(new AtomicInteger(goods.getStockCount()).incrementAndGet());
|
|
|
+ goods.setStockCount(new AtomicInteger(goods.getStockCount()).addAndGet(sellOrder.getNum()));
|
|
|
if(Objects.nonNull(goodsProcurement)){
|
|
|
- goodsProcurement.setStockCount(new AtomicInteger(goodsProcurement.getStockCount()).incrementAndGet());
|
|
|
- goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).decrementAndGet());
|
|
|
+ goodsProcurement.setStockCount(new AtomicInteger(goodsProcurement.getStockCount()).addAndGet(sellOrder.getNum()));
|
|
|
+ goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).addAndGet(-sellOrder.getNum()));
|
|
|
}
|
|
|
}else if(StockType.EXTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.EXTERNAL.equals(accountType))){
|
|
|
- goods.setTaxStockCount(new AtomicInteger(goods.getTaxStockCount()).incrementAndGet());
|
|
|
+ goods.setTaxStockCount(new AtomicInteger(goods.getTaxStockCount()).addAndGet(sellOrder.getNum()));
|
|
|
if(Objects.nonNull(goodsProcurement)){
|
|
|
- goodsProcurement.setTaxStockCount(new AtomicInteger(goodsProcurement.getTaxStockCount()).incrementAndGet());
|
|
|
- goodsProcurement.setTaxStockSoldNum(new AtomicInteger(goodsProcurement.getTaxStockSoldNum()).decrementAndGet());
|
|
|
+ goodsProcurement.setTaxStockCount(new AtomicInteger(goodsProcurement.getTaxStockCount()).addAndGet(sellOrder.getNum()));
|
|
|
+ goodsProcurement.setTaxStockSoldNum(new AtomicInteger(goodsProcurement.getTaxStockSoldNum()).addAndGet(-sellOrder.getNum()));
|
|
|
}
|
|
|
}
|
|
|
+ if(Objects.isNull(sellOrder.getParentGoodsId())){
|
|
|
+ goods.setSellCount(new AtomicInteger(goods.getSellCount()).addAndGet(-sellOrder.getNum()));
|
|
|
+ }
|
|
|
goodsDao.update(goods);
|
|
|
goodsProcurementDao.update(goodsProcurement);
|
|
|
}
|
|
|
+
|
|
|
+ //处理组合商品
|
|
|
+ Map<Integer, Long> goodsNumMap = sellOrders.stream().filter(so -> Objects.nonNull(so.getParentGoodsId())).collect(Collectors.groupingBy(SellOrder::getId, Collectors.counting()));
|
|
|
+ for (Map.Entry<Integer, Long> goodsIdNumMapEntry : goodsNumMap.entrySet()) {
|
|
|
+ Goods goods = idGoodsMap.get(goodsIdNumMapEntry.getKey());
|
|
|
+ int complementGoodsSize = goods.getComplementGoodsIdList().split(",").length;
|
|
|
+ int sellNum = (int) (goodsIdNumMapEntry.getValue()/complementGoodsSize);
|
|
|
+ goods.setSellCount(new AtomicInteger(goods.getSellCount()).addAndGet(-sellNum));
|
|
|
+ goodsDao.update(goods);
|
|
|
+ }
|
|
|
}
|
|
|
}
|