|
|
@@ -83,6 +83,8 @@ import org.springblade.salesPart.productLaunch.service.IProductLaunchService;
|
|
|
import org.springblade.salesPart.serial.service.IPjpfSerialService;
|
|
|
import org.springblade.salesPart.settlement.mapper.SettlementMapper;
|
|
|
import org.springblade.salesPart.settlement.service.ISettlementItemsService;
|
|
|
+import org.springblade.salesPart.share.entity.ShareSalesItems;
|
|
|
+import org.springblade.salesPart.share.service.IShareSalesItemsService;
|
|
|
import org.springblade.salesPart.ship.mapper.ShipMapper;
|
|
|
import org.springblade.salesPart.ship.service.IShipItemsRecordService;
|
|
|
import org.springblade.salesPart.ship.service.IShipItemsService;
|
|
|
@@ -186,6 +188,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
|
|
|
|
|
|
private final IAdvanceChargeItemService advanceChargeItemService;
|
|
|
|
|
|
+ private final IShareSalesItemsService shareSalesItemsService;
|
|
|
+
|
|
|
/**
|
|
|
* 获取销售订单详情
|
|
|
*
|
|
|
@@ -1397,7 +1401,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
|
|
|
order.setSalesCompanyId(dept.getData().getId());
|
|
|
order.setSalesCompanyName(dept.getData().getFullName());
|
|
|
if (ObjectUtils.isNotNull(order.getBillType()) && 1 != order.getBillType()) {
|
|
|
- order.setSharedCompanyId(dept.getData().getId());
|
|
|
+ order.setSharedCompanyId(dept.getData().getId() + "");
|
|
|
order.setSharedCompanyName(dept.getData().getFullName());
|
|
|
} else {
|
|
|
order.setSharedCompanyId(order.getSharedCompanyId());
|
|
|
@@ -3473,7 +3477,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
|
|
|
pjShip.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
pjShip.setCreateUser(AuthUtil.getUserId());
|
|
|
pjShip.setCreateTime(new Date());
|
|
|
- pjShip.setSalesCompanyId(pjOrder.getSharedCompanyId());
|
|
|
+ pjShip.setSalesCompanyId(Long.parseLong(pjOrder.getSharedCompanyId()));
|
|
|
pjShip.setSalesCompanyName(pjOrder.getSharedCompanyName());
|
|
|
pjShip.setSourceCompanyId(pjOrder.getSalesCompanyId());
|
|
|
pjShip.setSourceCompanyName(pjOrder.getSalesCompanyName());
|
|
|
@@ -3853,6 +3857,276 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
|
|
|
return R.data(order);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R submitShareSales(PjOrder order) {
|
|
|
+ //客户名称
|
|
|
+ PjCorpsDesc corpsDesc = corpsDescMapper.selectById(order.getCustomerId());
|
|
|
+ order.setCustomerName(corpsDesc.getCname());
|
|
|
+ // 获取系统编号
|
|
|
+ String billNo = serialService.getBillNo(order.getBsType(), order.getBsType(), order.getBsType());
|
|
|
+ if (ObjectUtils.isNull(billNo)) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ return R.fail(500, "生成系统编号失败");
|
|
|
+ }
|
|
|
+ order.setBillType(1);
|
|
|
+ if (order.getId() == null) {
|
|
|
+ if (ObjectUtils.isNull(order.getBillType())) {
|
|
|
+ if (ObjectUtils.isNotNull(order.getStorageId())) {
|
|
|
+ order.setBillType(0);
|
|
|
+ //仓库名称
|
|
|
+ order.setStorageName(storageDescMapper.selectById(order.getStorageId()).getCname());
|
|
|
+ } else {
|
|
|
+ order.setBillType(1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ order.setOrdNo(billNo);
|
|
|
+ order.setSrcOrdNo(billNo);
|
|
|
+ order.setCreateTime(new Date());
|
|
|
+ order.setCreateUser(AuthUtil.getUserId());
|
|
|
+ order.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ order.setTenantId(AuthUtil.getTenantId());
|
|
|
+ order.setStatus(OrderTypeEnum.XSLR.getType());
|
|
|
+ order.setBusinessSource(OrderTypeEnum.WEB.getType());
|
|
|
+ order.setActualPaymentStatus(1);
|
|
|
+ //根据客户账期计算应结日期
|
|
|
+ if (ObjectUtil.isNotEmpty(corpsDesc.getAccountPeriod()) && ObjectUtils.isNotNull(order.getBusinesDate())) {
|
|
|
+ Date now = order.getBusinesDate();
|
|
|
+ long sevenDays = corpsDesc.getAccountPeriod() * 24 * 60 * 60 * 1000L;
|
|
|
+ Date afterSevenDays = new Date(now.getTime() + sevenDays);
|
|
|
+ order.setDueDate(afterSevenDays);
|
|
|
+ } else {
|
|
|
+ order.setDueDate(new Date());
|
|
|
+ }
|
|
|
+ baseMapper.insert(order);
|
|
|
+ } else {
|
|
|
+ PjOrder orderVersion = baseMapper.selectById(order.getId());
|
|
|
+ if (orderVersion != null && !orderVersion.getVersion().equals(order.getVersion())) {
|
|
|
+ throw new RuntimeException("订单数据已被修改,请返回列表重新操作!");
|
|
|
+ }
|
|
|
+ order.setVersion(order.getVersion() + 1);
|
|
|
+ order.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ order.setUpdateTime(new Date());
|
|
|
+ baseMapper.updateById(order);
|
|
|
+ }
|
|
|
+ // 保存订单明细
|
|
|
+ if (CollectionUtils.isNotEmpty(order.getOrderItemsList())) {
|
|
|
+ //所属公司
|
|
|
+ R<Dept> dept = sysClient.getDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ if (ObjectUtil.isNotEmpty(dept)) {
|
|
|
+ order.setSalesCompanyId(dept.getData().getId());
|
|
|
+ order.setSalesCompanyName(dept.getData().getFullName());
|
|
|
+ if (ObjectUtils.isNotNull(order.getBillType()) && 1 != order.getBillType()) {
|
|
|
+ order.setSharedCompanyId(dept.getData().getId() + "");
|
|
|
+ order.setSharedCompanyName(dept.getData().getFullName());
|
|
|
+ } else {
|
|
|
+ order.setSharedCompanyId(order.getSharedCompanyId());
|
|
|
+ order.setSharedCompanyName(order.getSharedCompanyName());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ throw new SecurityException("未维护所属公司");
|
|
|
+ }
|
|
|
+ StringBuilder goodsName = new StringBuilder();
|
|
|
+ StringBuilder retrieval = new StringBuilder();
|
|
|
+ List<Long> goodsId = order.getOrderItemsList().stream().map(PjOrderItems::getGoodsId).distinct().collect(Collectors.toList());
|
|
|
+ List<String> goodsNames = order.getOrderItemsList().stream().map(PjOrderItems::getGoodsName).distinct().collect(Collectors.toList());
|
|
|
+ for (PjOrderItems item : order.getOrderItemsList()) {
|
|
|
+ item.setBillKey(item.getGoodsId() + item.getDot());
|
|
|
+ }
|
|
|
+ List<PjOrderItems> reducelList = order.getOrderItemsList().stream().filter(distinctByKey(PjOrderItems::getBillKey)).collect(Collectors.toList());
|
|
|
+ if (reducelList.size() != order.getOrderItemsList().size()) {
|
|
|
+ throw new RuntimeException("明细数据存在重复商品,请先处理后再保存");
|
|
|
+ }
|
|
|
+ if (goodsId.size() != goodsNames.size()) {
|
|
|
+ throw new RuntimeException("明细数据存在改名并重名商品,请联系管理员处理");
|
|
|
+ }
|
|
|
+ for (PjOrderItems item : order.getOrderItemsList()) {
|
|
|
+ item.setBizType(order.getBsType());
|
|
|
+ item.setBillNo(order.getOrdNo());
|
|
|
+ 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());
|
|
|
+ }
|
|
|
+ //计算小计
|
|
|
+ item.setSubTotalMoney(item.getGoodsNum().multiply(item.getPrice()));
|
|
|
+ if (ObjectUtils.isNull(order.getStatus()) || "录入".equals(order.getStatus())) {
|
|
|
+ item.setPrimaryGoodsTotalNum(item.getGoodsNum());
|
|
|
+ }
|
|
|
+ //获得商品
|
|
|
+ PjGoodsDesc goodsDesc = goodsDescMapper.selectById(item.getGoodsId());
|
|
|
+ if (ObjectUtil.isEmpty(goodsDesc)) {
|
|
|
+ throw new RuntimeException("商品数据异常");
|
|
|
+ }
|
|
|
+ item.setBrandName(goodsDesc.getBrandName());
|
|
|
+ //计算成本
|
|
|
+ goodsName.append(goodsDesc.getCname()).append(",");
|
|
|
+ retrieval.append(goodsDesc.getCnameInt()).append(",");
|
|
|
+ item.setCostprie(item.getGoodsNum().multiply(item.getCostpriePrice()));
|
|
|
+ item.setRebateCostprie(item.getGoodsNum().multiply(item.getRebatePrice()));
|
|
|
+ //计算毛利
|
|
|
+ item.setGrossProfit(item.getSubTotalMoney().subtract(item.getCostprie()));
|
|
|
+ item.setRebateProfit(item.getSubTotalMoney().subtract(item.getRebateCostprie()));
|
|
|
+ orderItemsService.saveOrUpdate(item);
|
|
|
+ }
|
|
|
+ if (goodsName.length() > 0) {
|
|
|
+ order.setGoodsNameJoin(goodsName.substring(0, goodsName.length() - 1));
|
|
|
+ }
|
|
|
+ if (retrieval.length() > 0) {
|
|
|
+ order.setShortcutJoin(retrieval.substring(0, retrieval.length() - 1));
|
|
|
+ }
|
|
|
+ BigDecimal totalMoney = BigDecimal.ZERO;
|
|
|
+ order.setNumberRows(order.getOrderItemsList().size());//行数
|
|
|
+ //总数量
|
|
|
+ order.setGoodsTotalNum(order.getOrderItemsList().stream().map(PjOrderItems::getGoodsNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ if (ObjectUtils.isNull(order.getStatus()) || "录入".equals(order.getStatus())) {
|
|
|
+ order.setPrimaryGoodsTotalNum(order.getGoodsTotalNum());
|
|
|
+ }
|
|
|
+ //总已发数量
|
|
|
+ order.setGoodsTotalShipNum(order.getOrderItemsList().stream().map(PjOrderItems::getSendNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ //实际金额
|
|
|
+ order.setGoodsTotalShipAmount(order.getOrderItemsList().stream().map(PjOrderItems::getGoodsTotalShipAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ //总金额
|
|
|
+ totalMoney = order.getOrderItemsList().stream().reduce(BigDecimal.ZERO, (x, y) -> {
|
|
|
+ return x.add(y.getGoodsNum().multiply(y.getPrice()));
|
|
|
+ }, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ order.setSalesAmount(totalMoney);
|
|
|
+ order.setTotalMoney(totalMoney);
|
|
|
+ if (order.getGoodsTotalNum().compareTo(new BigDecimal(1)) == 0) {//只有一条轮胎加5元运费
|
|
|
+ String freight = sysClient.getParamService("freight");
|
|
|
+ if (ObjectUtils.isNotNull(freight)) {
|
|
|
+ try {
|
|
|
+ BigDecimal freightAmount = new BigDecimal(freight);
|
|
|
+ order.setTotalMoney(totalMoney.add(freightAmount));
|
|
|
+ order.setFreight(freightAmount);
|
|
|
+ } catch (Exception ignored) {
|
|
|
+ order.setFreight(new BigDecimal(0));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ order.setFreight(new BigDecimal(0));
|
|
|
+ }
|
|
|
+ //毛利
|
|
|
+ order.setGrossProfit(order.getOrderItemsList().stream().map(PjOrderItems::getGrossProfit).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ //成本
|
|
|
+ order.setCost(order.getOrderItemsList().stream().map(PjOrderItems::getCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ order.setRebateGrossProfit(order.getOrderItemsList().stream().map(PjOrderItems::getRebateProfit).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ //成本
|
|
|
+ order.setRebateCost(order.getOrderItemsList().stream().map(PjOrderItems::getRebateCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ } else {
|
|
|
+ order.setNumberRows(0);//行数
|
|
|
+ //总数量
|
|
|
+ order.setGoodsTotalNum(new BigDecimal("0"));
|
|
|
+ order.setSalesAmount(new BigDecimal("0.00"));
|
|
|
+ order.setTotalMoney(new BigDecimal("0.00"));
|
|
|
+ }
|
|
|
+ baseMapper.updateById(order);
|
|
|
+ return R.data(order);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R distributeShareSales(PjOrder order) {
|
|
|
+ if (order.getId() == null) {
|
|
|
+ throw new RuntimeException("缺少必填项");
|
|
|
+ }
|
|
|
+ if (ObjectUtils.isNull(order.getSharedCompanyId())) {
|
|
|
+ throw new RuntimeException("青选择共享公司");
|
|
|
+ }
|
|
|
+ if (ObjectUtils.isNull(order.getOrderItemsList()) || order.getOrderItemsList().isEmpty()) {
|
|
|
+ throw new RuntimeException("请选择明细数据");
|
|
|
+ }
|
|
|
+ PjOrder pjOrder = baseMapper.selectById(order.getId());
|
|
|
+ if (ObjectUtils.isNotNull(pjOrder.getSharedCompanyId())) {
|
|
|
+ pjOrder.setSharedCompanyId(pjOrder.getSharedCompanyId() + "," + order.getSharedCompanyId());
|
|
|
+ pjOrder.setSharedCompanyName(pjOrder.getSharedCompanyName() + "," + order.getSharedCompanyName());
|
|
|
+ } else {
|
|
|
+ pjOrder.setSharedCompanyId(order.getSharedCompanyId());
|
|
|
+ pjOrder.setSharedCompanyName(order.getSharedCompanyName());
|
|
|
+ }
|
|
|
+ baseMapper.updateById(pjOrder);
|
|
|
+ List<ShareSalesItems> shareSalesItemsList = new ArrayList<>();
|
|
|
+ for (PjOrderItems item : order.getOrderItemsList()) {
|
|
|
+ ShareSalesItems shareSalesItems = new ShareSalesItems();
|
|
|
+ shareSalesItems.setPid(order.getId());
|
|
|
+ shareSalesItems.setSrcPid(item.getId());
|
|
|
+ shareSalesItems.setTenantId(item.getTenantId());
|
|
|
+ shareSalesItems.setCreateUser(AuthUtil.getUserId());
|
|
|
+ shareSalesItems.setCreateTime(new Date());
|
|
|
+ shareSalesItems.setGoodsId(item.getGoodsId());
|
|
|
+ shareSalesItems.setGoodsName(item.getGoodsName());
|
|
|
+ shareSalesItems.setGoodsNum(item.getOutGoodsTotalShipNum());
|
|
|
+ shareSalesItems.setPrice(item.getPrice());
|
|
|
+ shareSalesItems.setSubTotalMoney(item.getOutGoodsTotalShipNum().multiply(item.getPrice()));
|
|
|
+ shareSalesItems.setCostpriePrice(item.getCostpriePrice());
|
|
|
+ shareSalesItems.setCostprie(item.getOutGoodsTotalShipNum().multiply(item.getCostpriePrice()));
|
|
|
+ shareSalesItems.setGrossProfit(item.getSubTotalMoney().subtract(item.getCostprie()));
|
|
|
+ shareSalesItems.setSharedCompanyId(Long.parseLong(order.getSharedCompanyId()));
|
|
|
+ shareSalesItems.setSharedCompanyName(order.getSharedCompanyName());
|
|
|
+ shareSalesItems.setSharedStatus("已派发");
|
|
|
+ shareSalesItemsList.add(shareSalesItems);
|
|
|
+
|
|
|
+ item.setSendNum(item.getSendNum().add(item.getOutGoodsTotalShipNum()));
|
|
|
+ item.setGoodsTotalShipAmount(item.getOutGoodsTotalShipNum().multiply(item.getPrice()));
|
|
|
+
|
|
|
+ }
|
|
|
+ if (!shareSalesItemsList.isEmpty()) {
|
|
|
+ shareSalesItemsService.saveBatch(shareSalesItemsList);
|
|
|
+ }
|
|
|
+ if (!order.getOrderItemsList().isEmpty()) {
|
|
|
+ orderItemsService.saveBatch(order.getOrderItemsList());
|
|
|
+ }
|
|
|
+ boolean status = generateSharePjOrder(order.getSharedCompanyId(), order.getOrderItemsList(), pjOrder.getTenantId() + "-" + pjOrder.getOrdNo());
|
|
|
+ if (!status) {
|
|
|
+ throw new RuntimeException("派发失败,请联系管理员");
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean generateSharePjOrder(String sharedCompanyId, List<PjOrderItems> orderItemsList, String srcOrdNo) {
|
|
|
+ Dept dept = sysClient.getDeptById(sharedCompanyId);
|
|
|
+ if (dept == null) {
|
|
|
+ throw new RuntimeException("未找到共享公司");
|
|
|
+ }
|
|
|
+ PjCorpsDesc corpsDesc = corpsDescMapper.selectByName(dept.getDeptName(), dept.getTenantId());
|
|
|
+ if (corpsDesc == null) {
|
|
|
+ corpsDesc = new PjCorpsDesc();
|
|
|
+ corpsDesc.setCname(dept.getDeptName());
|
|
|
+ corpsDesc.setTenantId(dept.getTenantId());
|
|
|
+ corpsDesc.setRemarks("来源共享共享公司:" + dept.getDeptName());
|
|
|
+ int count = corpsDescMapper.insertCorps(corpsDesc);
|
|
|
+ if (count == 0) {
|
|
|
+ throw new RuntimeException("派发失败,创建客户错误");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ PjOrder sharePjOrder = new PjOrder();
|
|
|
+ sharePjOrder.setTenantId(dept.getTenantId());
|
|
|
+ sharePjOrder.setCustomerId(corpsDesc.getId());
|
|
|
+ sharePjOrder.setCustomerName(corpsDesc.getCname());
|
|
|
+ sharePjOrder.setBsType("XS");
|
|
|
+ sharePjOrder.setBillType(1);
|
|
|
+ // 获取系统编号
|
|
|
+ String billNo = serialService.getBillNoByTenantId(sharePjOrder.getBsType(), sharePjOrder.getBsType(), sharePjOrder.getBsType(), dept.getTenantId());
|
|
|
+ if (ObjectUtils.isNull(billNo)) {
|
|
|
+ throw new RuntimeException("生成系统编号失败");
|
|
|
+ }
|
|
|
+ sharePjOrder.setOrdNo(billNo);
|
|
|
+ sharePjOrder.setSrcOrdNo(billNo);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R revokeDistributeShareSales(PjOrder order) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 保存订单信息
|
|
|
*/
|
|
|
@@ -3928,7 +4202,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
|
|
|
order.setSalesCompanyId(dept.getData().getId());
|
|
|
order.setSalesCompanyName(dept.getData().getFullName());
|
|
|
if (ObjectUtils.isNotNull(order.getBillType()) && 1 != order.getBillType()) {
|
|
|
- order.setSharedCompanyId(dept.getData().getId());
|
|
|
+ order.setSharedCompanyId(dept.getData().getId() + "");
|
|
|
order.setSharedCompanyName(dept.getData().getFullName());
|
|
|
} else {
|
|
|
order.setSharedCompanyId(order.getSharedCompanyId());
|
|
|
@@ -4444,7 +4718,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
|
|
|
order.setSalesCompanyId(dept.getData().getId());
|
|
|
order.setSalesCompanyName(dept.getData().getFullName());
|
|
|
if (ObjectUtils.isNotNull(order.getBillType()) && 1 != order.getBillType()) {
|
|
|
- order.setSharedCompanyId(dept.getData().getId());
|
|
|
+ order.setSharedCompanyId(dept.getData().getId() + "");
|
|
|
order.setSharedCompanyName(dept.getData().getFullName());
|
|
|
} else {
|
|
|
order.setSharedCompanyId(order.getSharedCompanyId());
|
|
|
@@ -4574,7 +4848,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
|
|
|
pjShip.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
pjShip.setCreateUser(AuthUtil.getUserId());
|
|
|
pjShip.setCreateTime(new Date());
|
|
|
- pjShip.setSalesCompanyId(pjOrder.getSharedCompanyId());
|
|
|
+ pjShip.setSalesCompanyId(Long.parseLong(pjOrder.getSharedCompanyId()));
|
|
|
pjShip.setSalesCompanyName(pjOrder.getSharedCompanyName());
|
|
|
pjShip.setSourceCompanyId(pjOrder.getSalesCompanyId());
|
|
|
pjShip.setSourceCompanyName(pjOrder.getSalesCompanyName());
|
|
|
@@ -4646,7 +4920,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
|
|
|
throw new RuntimeException(res.getMsg());
|
|
|
}
|
|
|
}
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
throw new RuntimeException("商品:" + e.getGoodsName() + "未上架");
|
|
|
}
|
|
|
});
|