|
|
@@ -35,7 +35,6 @@ import org.springblade.core.tool.utils.BeanUtil;
|
|
|
import org.springblade.core.tool.utils.ObjectUtil;
|
|
|
import org.springblade.pay.tonglianPayment.entity.WechatMark;
|
|
|
import org.springblade.pay.tonglianPayment.fegin.IPaymentClient;
|
|
|
-import org.springblade.purchase.sales.entity.BidingItems;
|
|
|
import org.springblade.purchase.sales.entity.IntegralDetail;
|
|
|
import org.springblade.purchase.sales.feign.IIntegralDetailClient;
|
|
|
import org.springblade.salesPart.brand.service.IBrandFilesService;
|
|
|
@@ -49,6 +48,7 @@ import org.springblade.salesPart.corps.mapper.CorpsDescMapper;
|
|
|
import org.springblade.salesPart.entity.*;
|
|
|
import org.springblade.salesPart.enums.OrderTypeEnum;
|
|
|
import org.springblade.salesPart.excel.PjOrderStatisticsExcel;
|
|
|
+import org.springblade.salesPart.excel.StockExportExcel;
|
|
|
import org.springblade.salesPart.goods.mapper.GoodsDescMapper;
|
|
|
import org.springblade.salesPart.goods.mapper.GoodsTypeMapper;
|
|
|
import org.springblade.salesPart.goods.service.IGoodsFilesService;
|
|
|
@@ -802,6 +802,194 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
|
|
|
return R.data(pjOrder);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public R submitInventory(PjOrder order) {
|
|
|
+ // 获取系统编号
|
|
|
+ R billNo = serialClient.getBillNo(order.getBsType(), order.getBsType(), order.getBsType());
|
|
|
+ if (billNo.getCode() != 200) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ return R.fail(500, "生成系统编号失败");
|
|
|
+ }
|
|
|
+ //仓库名称
|
|
|
+ if (ObjectUtils.isNotNull(order.getStorageId())) {
|
|
|
+ order.setStorageName(storageDescMapper.selectById(order.getStorageId()).getCname());
|
|
|
+ }
|
|
|
+ if (order.getId() == null) {
|
|
|
+ order.setOrdNo((String) billNo.getData());
|
|
|
+ order.setCreateTime(new Date());
|
|
|
+ order.setCreateUser(AuthUtil.getUserId());
|
|
|
+ order.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ order.setTenantId(AuthUtil.getTenantId());
|
|
|
+ order.setStatus(OrderTypeEnum.XSLR.getType());
|
|
|
+ //所属公司
|
|
|
+ R<Dept> dept = sysClient.getDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ if (ObjectUtil.isNotEmpty(dept)) {
|
|
|
+ order.setSalesCompanyId(dept.getData().getId());
|
|
|
+ order.setSalesCompanyName(dept.getData().getFullName());
|
|
|
+ } else {
|
|
|
+ throw new SecurityException("未维护所属公司");
|
|
|
+ }
|
|
|
+ baseMapper.insert(order);
|
|
|
+ } else {
|
|
|
+ order.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ order.setUpdateTime(new Date());
|
|
|
+ baseMapper.updateById(order);
|
|
|
+ }
|
|
|
+ // 保存订单明细
|
|
|
+ if (CollectionUtils.isNotEmpty(order.getOrderItemsList())) {
|
|
|
+ order.getOrderItemsList().forEach(item -> {
|
|
|
+ item.setBizType(order.getBsType());
|
|
|
+ item.setBillNo(order.getOrdNo());
|
|
|
+ BigDecimal profitLossNum = new BigDecimal("0.00");
|
|
|
+ profitLossNum = item.getSendNum().subtract(item.getInventory());
|
|
|
+ item.setTotalAmount(item.getInventory().multiply(item.getCostprie()));
|
|
|
+ item.setSubTotalMoney(item.getSendNum().multiply(item.getCostprie()));
|
|
|
+ BigDecimal profitLossAmount = new BigDecimal("0.00");
|
|
|
+ profitLossAmount = profitLossNum.multiply(item.getCostprie());
|
|
|
+ item.setProfitLossNum(profitLossNum);
|
|
|
+ item.setProfitLossAmount(profitLossAmount);
|
|
|
+ if (item.getId() == null) {
|
|
|
+ item.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ item.setCreateTime(new Date());
|
|
|
+ item.setCreateUser(AuthUtil.getUserId());
|
|
|
+ item.setPid(order.getId());
|
|
|
+ item.setTenantId(AuthUtil.getTenantId());
|
|
|
+ } else {
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setPid(order.getId());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ orderItemsService.saveOrUpdateBatch(order.getOrderItemsList());
|
|
|
+ order.setNumberRows(order.getOrderItemsList().size());
|
|
|
+ //明细总数量
|
|
|
+ order.setGoodsTotalNum(order.getOrderItemsList().stream().map(PjOrderItems::getInventory).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ order.setGoodsTotalShipNum(order.getOrderItemsList().stream().map(PjOrderItems::getSendNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ order.setProfitLossNum(order.getOrderItemsList().stream().map(PjOrderItems::getProfitLossNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ order.setSalesAmount(order.getOrderItemsList().stream().map(PjOrderItems::getSubTotalMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ order.setTotalMoney(order.getOrderItemsList().stream().map(PjOrderItems::getTotalAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ order.setProfitLossAmount(order.getOrderItemsList().stream().map(PjOrderItems::getProfitLossAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ } else {
|
|
|
+ order.setNumberRows(0);
|
|
|
+ order.setGoodsTotalNum(new BigDecimal("0.00"));
|
|
|
+ order.setGoodsTotalShipNum(new BigDecimal("0.00"));
|
|
|
+ order.setProfitLossNum(new BigDecimal("0.00"));
|
|
|
+ order.setSalesAmount(new BigDecimal("0.00"));
|
|
|
+ order.setTotalMoney(new BigDecimal("0.00"));
|
|
|
+ order.setProfitLossAmount(new BigDecimal("0.00"));
|
|
|
+ }
|
|
|
+ baseMapper.updateById(order);
|
|
|
+ return R.data(order);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R confirmInventory(PjOrder order) {
|
|
|
+ PjOrder pjOrder = baseMapper.selectById(order.getId());
|
|
|
+ // 保存订单明细
|
|
|
+ if (CollectionUtils.isNotEmpty(order.getOrderItemsList())) {
|
|
|
+ List<PjStockDesc> pjStockDescArrayList = new ArrayList<>();
|
|
|
+ List<Long> goodsIds = order.getOrderItemsList().stream().map(PjOrderItems::getGoodsId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
|
|
+ List<PjGoodsDesc> pjGoodsDescList = new ArrayList<>();
|
|
|
+ List<PjStockDesc> pjStockDescList = new ArrayList<>();
|
|
|
+ if (goodsIds.size() > 0) {
|
|
|
+ pjGoodsDescList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
|
|
|
+ .eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjGoodsDesc::getIsDeleted, 0)
|
|
|
+ .in(PjGoodsDesc::getId, goodsIds));
|
|
|
+ pjStockDescList = stockDescService.list(new LambdaQueryWrapper<PjStockDesc>()
|
|
|
+ .eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjStockDesc::getIsDeleted, 0)
|
|
|
+ .eq(PjStockDesc::getSalesCompanyId, pjOrder.getSalesCompanyId())
|
|
|
+ .in(PjStockDesc::getGoodsId, goodsIds)
|
|
|
+ .eq(PjStockDesc::getStorageId, pjOrder.getStorageId()));
|
|
|
+ }
|
|
|
+ List<PjGoodsDesc> finalPjGoodsDescList = pjGoodsDescList;
|
|
|
+ List<PjStockDesc> finalPjStockDescList = pjStockDescList;
|
|
|
+ order.getOrderItemsList().forEach(item -> {
|
|
|
+ //获得商品
|
|
|
+ PjGoodsDesc goodsDesc = finalPjGoodsDescList.stream().filter(e -> e.getId().equals(item.getGoodsId()))
|
|
|
+ .findFirst().orElse(null);
|
|
|
+ if (ObjectUtil.isEmpty(goodsDesc)) {
|
|
|
+ throw new RuntimeException("商品数据异常");
|
|
|
+ }
|
|
|
+ if ("1".equals(goodsDesc.getWhether()) && ObjectUtils.isNull(item.getDot())) {
|
|
|
+ throw new RuntimeException("商品:" + goodsDesc.getCname() + ",请求选择批次号");
|
|
|
+ }
|
|
|
+ //管理批次号
|
|
|
+ PjStockDesc stockOne = null;
|
|
|
+ if (ObjectUtil.isNotEmpty(goodsDesc.getWhether()) && "1".equals(goodsDesc.getWhether())) {
|
|
|
+ stockOne = finalPjStockDescList.stream().filter(e -> e.getGoodsId().equals(item.getGoodsId()) &&
|
|
|
+ e.getDot().equals(item.getDot())).findFirst().orElse(null);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ stockOne = finalPjStockDescList.stream().filter(e -> e.getGoodsId().equals(item.getGoodsId()) &&
|
|
|
+ ObjectUtils.isNotNull(e.getDot())).findFirst().orElse(null);
|
|
|
+ }
|
|
|
+ if (stockOne != null) {
|
|
|
+ stockOne.setBalanceQuantity(item.getSendNum());
|
|
|
+ stockOne.setStoreInventory(stockOne.getBalanceQuantity());
|
|
|
+ stockOne.setInventoryAmount(item.getSubTotalMoney());
|
|
|
+ stockOne.setVersion(stockOne.getVersion());
|
|
|
+ pjStockDescArrayList.add(stockOne);
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("商品:" + goodsDesc.getCname() + "未查到库存信息");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ R res = stockDescService.updateBatchByIdNew(pjStockDescArrayList);
|
|
|
+ if (!res.isSuccess()) {
|
|
|
+ throw new RuntimeException(res.getMsg());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ order.setStatus("已确认");
|
|
|
+ baseMapper.updateById(order);
|
|
|
+ return R.data(order);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R<List<PjOrderItems>> importItem(List<StockExportExcel> excelList) {
|
|
|
+ if (CollectionUtils.isEmpty(excelList)) {
|
|
|
+ throw new SecurityException("导入数据不能为空");
|
|
|
+ }
|
|
|
+ List<PjOrderItems> list = new ArrayList<>();
|
|
|
+ List<String> storage = excelList.stream().map(StockExportExcel::getStorageName).distinct().collect(Collectors.toList());
|
|
|
+ if (storage.size() > 1) {
|
|
|
+ throw new RuntimeException("导入数据存在多个库存数据,请修改");
|
|
|
+ }
|
|
|
+ for (int i = 0; i < excelList.size(); i++) {
|
|
|
+ //判断必填项是否为空
|
|
|
+ StockExportExcel itemExcel = excelList.get(i);
|
|
|
+ if (ObjectUtil.isEmpty(itemExcel.getProfitLossNum())) {
|
|
|
+ throw new SecurityException("第" + (i + 2) + "行,盘点库存为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ PjOrderItems item = new PjOrderItems();
|
|
|
+ //查询商品信息
|
|
|
+ LambdaQueryWrapper<PjGoodsDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjGoodsDesc::getIsDeleted, 0)
|
|
|
+ .eq(PjGoodsDesc::getCname, itemExcel.getCname());
|
|
|
+ PjGoodsDesc goodsDesc = goodsDescMapper.selectOne(lambdaQueryWrapper);
|
|
|
+ if (ObjectUtil.isNotEmpty(goodsDesc)) {
|
|
|
+ item.setGoodsId(goodsDesc.getId());
|
|
|
+ item.setGoodsName(goodsDesc.getCname());
|
|
|
+ item.setGoodsNo(goodsDesc.getCode());
|
|
|
+ item.setBrandId(goodsDesc.getBrandId());
|
|
|
+ item.setBrandName(goodsDesc.getBrandName());
|
|
|
+ item.setPropertyName(goodsDesc.getSpecificationAndModel());
|
|
|
+ item.setPattern(goodsDesc.getBrandItem());
|
|
|
+ item.setGoodsDescription(goodsDesc.getGoodsDescription());
|
|
|
+ item.setUnits(goodsDesc.getUnit());
|
|
|
+ item.setSendNum(itemExcel.getProfitLossNum());
|
|
|
+ item.setCostprie(itemExcel.getInventoryCostPrice());
|
|
|
+ item.setInventory(itemExcel.getBalanceQuantity());
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("第" + (i + 2) + "行,商品名称不存在");
|
|
|
+ }
|
|
|
+ list.add(item);
|
|
|
+ }
|
|
|
+ return R.data(list);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 保存订单信息
|
|
|
*
|