|
|
|
|
@@ -1,9 +1,15 @@
|
|
|
|
|
package cn.ysk.cashier.service.impl.productimpl;
|
|
|
|
|
|
|
|
|
|
import cn.ysk.cashier.dto.rabbit.StockRecordMsg;
|
|
|
|
|
import cn.ysk.cashier.mybatis.mapper.TbProducSkutMapper;
|
|
|
|
|
import cn.ysk.cashier.mybatis.mapper.TbProductMapper;
|
|
|
|
|
import cn.ysk.cashier.pojo.product.TbProduct;
|
|
|
|
|
import cn.ysk.cashier.pojo.shop.TbShopPurveyor;
|
|
|
|
|
import cn.ysk.cashier.pojo.shop.TbShopUnit;
|
|
|
|
|
import cn.ysk.cashier.repository.product.TbProductRepository;
|
|
|
|
|
import cn.ysk.cashier.repository.product.TbProductStockDetailRepository;
|
|
|
|
|
import cn.ysk.cashier.repository.shop.TbShopPurveyorRepository;
|
|
|
|
|
import cn.ysk.cashier.repository.shop.TbShopUnitRepository;
|
|
|
|
|
import cn.ysk.cashier.utils.*;
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
|
|
@@ -23,12 +29,14 @@ import cn.ysk.cashier.repository.shop.TbShopInfoRepository;
|
|
|
|
|
import cn.ysk.cashier.pojo.shop.TbShopPurveyorTransact;
|
|
|
|
|
import cn.ysk.cashier.repository.shop.TbShopPurveyorTransactRepository;
|
|
|
|
|
import com.alipay.api.domain.Product;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import cn.ysk.cashier.repository.product.TbProductStockOperateRepository;
|
|
|
|
|
import cn.ysk.cashier.service.TbProductStockOperateService;
|
|
|
|
|
import cn.ysk.cashier.dto.product.TbProductStockOperateDto;
|
|
|
|
|
import cn.ysk.cashier.dto.product.TbProductStockOperateQueryCriteria;
|
|
|
|
|
import cn.ysk.cashier.mapper.product.TbProductStockOperateMapper;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
|
import org.springframework.data.domain.PageRequest;
|
|
|
|
|
import org.springframework.data.domain.Sort;
|
|
|
|
|
@@ -53,6 +61,7 @@ import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
**/
|
|
|
|
|
@Service
|
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
|
@Slf4j
|
|
|
|
|
public class TbProductStockOperateServiceImpl implements TbProductStockOperateService {
|
|
|
|
|
|
|
|
|
|
private final TbProductStockOperateRepository tbProductStockOperateRepository;
|
|
|
|
|
@@ -429,4 +438,90 @@ public class TbProductStockOperateServiceImpl implements TbProductStockOperateSe
|
|
|
|
|
}
|
|
|
|
|
FileUtil.downloadExcel(list, response);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final TbProductMapper productMapper;
|
|
|
|
|
private final TbProducSkutMapper producSkutMapper;
|
|
|
|
|
private final TbShopUnitRepository shopUnitRepository;
|
|
|
|
|
private final TbProductStockOperateRepository productStockOperateRepository;
|
|
|
|
|
private final TbProductStockDetailRepository productStockDetailRepository;
|
|
|
|
|
@Override
|
|
|
|
|
public void addStockRecord(StockRecordMsg stockRecordMsg) {
|
|
|
|
|
TbShopInfo byId = shopInfoRepository.findById(stockRecordMsg.getShopId()).orElseGet(TbShopInfo::new);
|
|
|
|
|
if (byId.getId() == null) {
|
|
|
|
|
throw new BadRequestException("商户号有误");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TbProduct product = productMapper.selectOne(new LambdaUpdateWrapper<TbProduct>()
|
|
|
|
|
.eq(TbProduct::getShopId, stockRecordMsg.getShopId())
|
|
|
|
|
.eq(TbProduct::getId, stockRecordMsg.getProductId())
|
|
|
|
|
.eq(TbProduct::getIsDel, 0));
|
|
|
|
|
|
|
|
|
|
TbProductSku productSku = producSkutMapper.selectOne(new LambdaUpdateWrapper<TbProductSku>()
|
|
|
|
|
.eq(TbProductSku::getShopId, stockRecordMsg.getShopId())
|
|
|
|
|
.eq(TbProductSku::getId, stockRecordMsg.getSkuId())
|
|
|
|
|
.eq(TbProductSku::getIsDel, 0));
|
|
|
|
|
if (product == null || productSku == null) {
|
|
|
|
|
log.info("商品或sku不存在");
|
|
|
|
|
throw new BadRequestException("商品或sku不存在");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double difference = product.getIsDistribute().equals(1) ? stockRecordMsg.getCurrentNumber() - product.getStockNumber()
|
|
|
|
|
: stockRecordMsg.getCurrentNumber() - productSku.getStockNumber();
|
|
|
|
|
|
|
|
|
|
TbShopUnit tbShopUnit = shopUnitRepository.findById(product.getUnitId()).orElse(null);
|
|
|
|
|
|
|
|
|
|
//增加操作日志
|
|
|
|
|
long times = Instant.now().toEpochMilli();
|
|
|
|
|
HashMap<String, Object> snapItem = new HashMap<>();
|
|
|
|
|
snapItem.put("stockNumber", product.getIsDistribute().equals(1) ? product.getStockNumber() : productSku.getStockNumber());
|
|
|
|
|
snapItem.put("number", product.getIsDistribute().equals(1) ? stockRecordMsg.getCurrentNumber() - product.getStockNumber()
|
|
|
|
|
: stockRecordMsg.getCurrentNumber() - productSku.getStockNumber());
|
|
|
|
|
snapItem.put("coverImg", product.getCoverImg());
|
|
|
|
|
snapItem.put("productId", product.getId());
|
|
|
|
|
snapItem.put("name", product.getName());
|
|
|
|
|
snapItem.put("unitName", tbShopUnit == null ? "" : tbShopUnit.getName());
|
|
|
|
|
|
|
|
|
|
ArrayList<HashMap<String, Object>> stockSnap = new ArrayList<>();
|
|
|
|
|
stockSnap.add(snapItem);
|
|
|
|
|
|
|
|
|
|
TbProductStockOperate stockOperate = new TbProductStockOperate();
|
|
|
|
|
stockOperate.setShopId(String.valueOf(stockRecordMsg.getShopId()));
|
|
|
|
|
stockOperate.setStockSnap(JSONObject.toJSONString(stockSnap));
|
|
|
|
|
stockOperate.setType(stockRecordMsg.getType());
|
|
|
|
|
|
|
|
|
|
Map<String, String> operatorSnapMap = new HashMap<>();
|
|
|
|
|
operatorSnapMap.put("name", byId.getShopName());
|
|
|
|
|
operatorSnapMap.put("account", byId.getAccount());
|
|
|
|
|
|
|
|
|
|
stockOperate.setOperatorSnap(JSON.toJSONString(operatorSnapMap));
|
|
|
|
|
stockOperate.setStockTime(times);
|
|
|
|
|
stockOperate.setCreatedAt(times);
|
|
|
|
|
stockOperate.setUpdatedAt(times);
|
|
|
|
|
stockOperate.setStatus("normal");
|
|
|
|
|
productStockOperateRepository.save(stockOperate);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TbProductStockDetail productStockDetail = new TbProductStockDetail();
|
|
|
|
|
productStockDetail.setCreatedAt(times);
|
|
|
|
|
productStockDetail.setUpdatedAt(times);
|
|
|
|
|
productStockDetail.setIsStock(1);
|
|
|
|
|
productStockDetail.setProductId(String.valueOf(product.getId()));
|
|
|
|
|
productStockDetail.setProductName(product.getName());
|
|
|
|
|
productStockDetail.setUnitName(tbShopUnit == null ? null : tbShopUnit.getName());
|
|
|
|
|
productStockDetail.setShopId(String.valueOf(stockRecordMsg.getShopId()));
|
|
|
|
|
productStockDetail.setSkuId(String.valueOf(stockRecordMsg.getSkuId()));
|
|
|
|
|
productStockDetail.setSubType(product.getIsDistribute().equals(1) ? stockRecordMsg.getCurrentNumber() - product.getStockNumber() > 0 ? 1 : -1
|
|
|
|
|
: stockRecordMsg.getCurrentNumber() - productSku.getStockNumber() > 0 ? 1 : -1);
|
|
|
|
|
productStockDetail.setType(stockRecordMsg.getType());
|
|
|
|
|
productStockDetail.setSpecSnap(productSku.getSpecSnap());
|
|
|
|
|
productStockDetail.setStockNumber(difference);
|
|
|
|
|
productStockDetail.setCostAmount(productSku.getSalePrice().multiply(BigDecimal.valueOf(Math.abs(difference))));
|
|
|
|
|
productStockDetail.setLeftNumber(product.getIsDistribute().equals(1) ? product.getStockNumber() : productSku.getStockNumber().intValue());
|
|
|
|
|
productStockDetail.setRecordId(stockOperate.getId().toString());
|
|
|
|
|
productStockDetail.setStockSnap(JSONObject.toJSONString(snapItem));
|
|
|
|
|
productStockDetail.setSourcePath("NORMAL");
|
|
|
|
|
productStockDetailRepository.save(productStockDetail);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|