|
@@ -19,11 +19,16 @@ import com.sckw.core.web.response.HttpResult;
|
|
|
import com.sckw.mongo.model.SckwTradeOrder;
|
|
import com.sckw.mongo.model.SckwTradeOrder;
|
|
|
import com.sckw.order.dao.KwoTradeOrderMapper;
|
|
import com.sckw.order.dao.KwoTradeOrderMapper;
|
|
|
import com.sckw.order.model.*;
|
|
import com.sckw.order.model.*;
|
|
|
|
|
+import com.sckw.order.model.dto.OrderCheckDTO;
|
|
|
import com.sckw.order.model.vo.req.*;
|
|
import com.sckw.order.model.vo.req.*;
|
|
|
import com.sckw.order.model.vo.res.AddressInfoDetailRes;
|
|
import com.sckw.order.model.vo.res.AddressInfoDetailRes;
|
|
|
import com.sckw.order.model.vo.res.GoodsInfoDetailRes;
|
|
import com.sckw.order.model.vo.res.GoodsInfoDetailRes;
|
|
|
import com.sckw.order.model.vo.res.OrderDetailRes;
|
|
import com.sckw.order.model.vo.res.OrderDetailRes;
|
|
|
import com.sckw.order.model.vo.res.UnitInfoDetailRes;
|
|
import com.sckw.order.model.vo.res.UnitInfoDetailRes;
|
|
|
|
|
+import com.sckw.payment.api.dubbo.PayCenterDubboService;
|
|
|
|
|
+import com.sckw.payment.api.model.constant.ChannelEnum;
|
|
|
|
|
+import com.sckw.payment.api.model.dto.R;
|
|
|
|
|
+import com.sckw.payment.api.model.dto.WalletDto;
|
|
|
import com.sckw.product.api.dubbo.GoodsInfoService;
|
|
import com.sckw.product.api.dubbo.GoodsInfoService;
|
|
|
import com.sckw.product.api.model.KwpGoods;
|
|
import com.sckw.product.api.model.KwpGoods;
|
|
|
import com.sckw.stream.model.SckwBusSum;
|
|
import com.sckw.stream.model.SckwBusSum;
|
|
@@ -58,6 +63,9 @@ public class KwoTradeOrderService {
|
|
|
@DubboReference(version = "2.0.0", group = "design", check = false)
|
|
@DubboReference(version = "2.0.0", group = "design", check = false)
|
|
|
private RemoteContractService remoteContractService;
|
|
private RemoteContractService remoteContractService;
|
|
|
|
|
|
|
|
|
|
+ @DubboReference(version = "2.0.0", group = "design", check = false)
|
|
|
|
|
+ private PayCenterDubboService payCenterDubboService;
|
|
|
|
|
+
|
|
|
private final KwoTradeOrderMapper kwoTradeOrderMapper;
|
|
private final KwoTradeOrderMapper kwoTradeOrderMapper;
|
|
|
private final StreamBridge streamBridge;
|
|
private final StreamBridge streamBridge;
|
|
|
private final KwoTradeOrderAddressService kwoTradeOrderAddressService;
|
|
private final KwoTradeOrderAddressService kwoTradeOrderAddressService;
|
|
@@ -100,7 +108,6 @@ public class KwoTradeOrderService {
|
|
|
Long id = tradeOrder.getId();
|
|
Long id = tradeOrder.getId();
|
|
|
String tOrderNo = tradeOrder.getTOrderNo();
|
|
String tOrderNo = tradeOrder.getTOrderNo();
|
|
|
SckwTradeOrder order = new SckwTradeOrder();
|
|
SckwTradeOrder order = new SckwTradeOrder();
|
|
|
- //提前填充这些参数防止初始创建mongodb集合没有这些字段
|
|
|
|
|
order.setFirmName(LoginUserHolder.getEntName()).setTOrderId(id).setCreateByName(LoginUserHolder.getUserName())
|
|
order.setFirmName(LoginUserHolder.getEntName()).setTOrderId(id).setCreateByName(LoginUserHolder.getUserName())
|
|
|
.setUpdateByName(LoginUserHolder.getUserName());
|
|
.setUpdateByName(LoginUserHolder.getUserName());
|
|
|
BeanUtils.copyProperties(tradeOrder, order);
|
|
BeanUtils.copyProperties(tradeOrder, order);
|
|
@@ -122,16 +129,14 @@ public class KwoTradeOrderService {
|
|
|
Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntTreeByIds(entIds);
|
|
Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntTreeByIds(entIds);
|
|
|
unitInfos.forEach(e -> {
|
|
unitInfos.forEach(e -> {
|
|
|
KwoTradeOrderUnit unit = BeanUtils.copyProperties(e, KwoTradeOrderUnit.class);
|
|
KwoTradeOrderUnit unit = BeanUtils.copyProperties(e, KwoTradeOrderUnit.class);
|
|
|
- //todo:目前获取顶级企业dubbo接口有bug,暂时取自身企业id
|
|
|
|
|
-// unit.setTOrderId(id).setTOrderNo(tOrderNo).setTopEntId(entMap.get(e.getEntId()).getId());
|
|
|
|
|
- unit.setTOrderId(id).setTOrderNo(tOrderNo).setTopEntId(e.getEntId());
|
|
|
|
|
|
|
+ unit.setTOrderId(id).setTOrderNo(tOrderNo).setTopEntId(entMap.get(e.getEntId()).getId());
|
|
|
list.add(unit);
|
|
list.add(unit);
|
|
|
if (Objects.equals(e.getUnitType(), DictEnum.TORDER_UNIT_TYPE_1.getValue())) {
|
|
if (Objects.equals(e.getUnitType(), DictEnum.TORDER_UNIT_TYPE_1.getValue())) {
|
|
|
- order.setSupplyEntId(e.getEntId()).setSupplyTopEntId(e.getEntId()).setSupplyFirmName(e.getFirmName())
|
|
|
|
|
- .setSupplyContacts(e.getContacts()).setSupplyPhone(e.getPhone());
|
|
|
|
|
- } else {
|
|
|
|
|
- order.setProcureEntId(e.getEntId()).setProcureTopEntId(e.getEntId()).setProcureFirmName(e.getFirmName())
|
|
|
|
|
|
|
+ order.setProcureEntId(e.getEntId()).setProcureTopEntId(unit.getTopEntId()).setProcureFirmName(e.getFirmName())
|
|
|
.setProcureContacts(e.getContacts()).setProcurePhone(e.getPhone());
|
|
.setProcureContacts(e.getContacts()).setProcurePhone(e.getPhone());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ order.setSupplyEntId(e.getEntId()).setSupplyTopEntId(unit.getTopEntId()).setSupplyFirmName(e.getFirmName())
|
|
|
|
|
+ .setSupplyContacts(e.getContacts()).setSupplyPhone(e.getPhone());
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
kwoTradeOrderUnitService.insertBatch(list);
|
|
kwoTradeOrderUnitService.insertBatch(list);
|
|
@@ -218,7 +223,10 @@ public class KwoTradeOrderService {
|
|
|
* @return: void
|
|
* @return: void
|
|
|
*/
|
|
*/
|
|
|
public void addPurchaseOrderSubmit(PurchaseOrderParam param) {
|
|
public void addPurchaseOrderSubmit(PurchaseOrderParam param) {
|
|
|
- orderCheck(param.getGoodsInfo().getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount(), param.getGoodsInfo().getUnitPrice(), false);
|
|
|
|
|
|
|
+ OrderCheckDTO orderCheckDTO = BeanUtils.copyProperties(param, OrderCheckDTO.class);
|
|
|
|
|
+ getTopEnt(orderCheckDTO, param.getUnitInfo());
|
|
|
|
|
+ orderCheckDTO.setGoodsId(param.getGoodsInfo().getGoodsId()).setUnitPrice(param.getGoodsInfo().getUnitPrice());
|
|
|
|
|
+ orderCheck(orderCheckDTO, false);
|
|
|
KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
|
|
KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
|
|
|
order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
|
|
order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
|
|
|
.setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_1.getValue())
|
|
.setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_1.getValue())
|
|
@@ -232,33 +240,67 @@ public class KwoTradeOrderService {
|
|
|
addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
|
|
addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * @desc: 获取采购销售顶级企业id
|
|
|
|
|
+ * @author: yzc
|
|
|
|
|
+ * @date: 2023-07-25 10:03
|
|
|
|
|
+ * @Param orderCheckDTO:
|
|
|
|
|
+ * @Param unitInfo:
|
|
|
|
|
+ * @return: void
|
|
|
|
|
+ */
|
|
|
|
|
+ private void getTopEnt(OrderCheckDTO orderCheckDTO, List<UnitInfo> unitInfo) {
|
|
|
|
|
+ List<Long> entIds = unitInfo.stream().map(UnitInfo::getEntId).toList();
|
|
|
|
|
+ Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntTreeByIds(entIds);
|
|
|
|
|
+ unitInfo.forEach(e -> {
|
|
|
|
|
+ if (Objects.equals(e.getUnitType(), DictEnum.TORDER_UNIT_TYPE_1.getValue())) {
|
|
|
|
|
+ orderCheckDTO.setProcureTopEntId(entMap.get(e.getEntId()).getId());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ orderCheckDTO.setSupplyTopEntId(entMap.get(e.getEntId()).getId());
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* @desc: 订单提交校验
|
|
* @desc: 订单提交校验
|
|
|
* @author: yzc
|
|
* @author: yzc
|
|
|
* @date: 2023-07-14 14:46
|
|
* @date: 2023-07-14 14:46
|
|
|
- * @Param goodId: 商品id
|
|
|
|
|
- * @Param trading: 交易方式
|
|
|
|
|
- * @Param price: 订单金额
|
|
|
|
|
- * @Param amount: 订单总量
|
|
|
|
|
- * @Param unitPrice: 成交价格
|
|
|
|
|
|
|
+ * @Param param: 订单校验参数
|
|
|
|
|
+ * @Param isAcceptanceOrder: 是否受理订单
|
|
|
* @return: void
|
|
* @return: void
|
|
|
*/
|
|
*/
|
|
|
- private void orderCheck(Long goodId, String trading, BigDecimal price, BigDecimal amount, BigDecimal unitPrice, Boolean isAcceptanceOrder) {
|
|
|
|
|
- if (!isAcceptanceOrder && price.compareTo(amount.multiply(unitPrice)) != 0) {
|
|
|
|
|
|
|
+ private void orderCheck(OrderCheckDTO param, Boolean isAcceptanceOrder) {
|
|
|
|
|
+ BigDecimal amount = param.getAmount();
|
|
|
|
|
+ String trading = param.getTrading();
|
|
|
|
|
+ BigDecimal price = param.getPrice();
|
|
|
|
|
+ if (!isAcceptanceOrder && price.compareTo(amount.multiply(param.getUnitPrice())) != 0) {
|
|
|
throw new BusinessException("订单总金额不等于商品单价*订单总量!");
|
|
throw new BusinessException("订单总金额不等于商品单价*订单总量!");
|
|
|
}
|
|
}
|
|
|
- //todo: 则先校验是否存在对供应企业的预付钱包 ;【预计采购金额】是否大于预付清单的【可用预付】金额
|
|
|
|
|
- KwpGoods goods = goodsInfoService.getGoodsById(goodId);
|
|
|
|
|
|
|
+ KwpGoods goods = goodsInfoService.getGoodsById(param.getGoodsId());
|
|
|
if (Objects.isNull(goods) || Objects.equals(goods.getDelFlag(), Global.YES) || !Objects.equals(goods.getStatus(), 1)) {
|
|
if (Objects.isNull(goods) || Objects.equals(goods.getDelFlag(), Global.YES) || !Objects.equals(goods.getStatus(), 1)) {
|
|
|
throw new BusinessException("商品不存在或已下架!");
|
|
throw new BusinessException("商品不存在或已下架!");
|
|
|
}
|
|
}
|
|
|
if (goods.getAmount().compareTo(amount) < 0) {
|
|
if (goods.getAmount().compareTo(amount) < 0) {
|
|
|
throw new BusinessException("商品库存不足,请联系供应方!");
|
|
throw new BusinessException("商品库存不足,请联系供应方!");
|
|
|
}
|
|
}
|
|
|
|
|
+ BigDecimal advancePrice = goods.getAdvancePrice().multiply(new BigDecimal(10000));
|
|
|
//受理订单不校验预付款限额
|
|
//受理订单不校验预付款限额
|
|
|
- if (!isAcceptanceOrder && Objects.equals(trading, DictEnum.TRADE_TYPE_0.getValue()) && price.compareTo(goods.getAdvancePrice()) < 0) {
|
|
|
|
|
|
|
+ if (!isAcceptanceOrder && trading.startsWith("0") && price.compareTo(advancePrice) < 0) {
|
|
|
throw new BusinessException("您的订单总额未达到预付限额,请确认");
|
|
throw new BusinessException("您的订单总额未达到预付限额,请确认");
|
|
|
}
|
|
}
|
|
|
|
|
+ if (trading.startsWith("0")) {
|
|
|
|
|
+ R<List<WalletDto>> wallet = payCenterDubboService.wallet(param.getProcureTopEntId(), ChannelEnum.getByCode(trading), param.getSupplyTopEntId());
|
|
|
|
|
+ if (Objects.isNull(wallet) || Objects.equals(wallet.getCode(), 0)) {
|
|
|
|
|
+ throw new BusinessException("校验预付钱包异常,请联系管理员!");
|
|
|
|
|
+ }
|
|
|
|
|
+ List<WalletDto> data = wallet.getData();
|
|
|
|
|
+ if (CollectionUtils.isEmpty(data)) {
|
|
|
|
|
+ throw new BusinessException("检测尚未创建对应预付款清单,请先创建!");
|
|
|
|
|
+ }
|
|
|
|
|
+ long money = data.get(0).getMoney();
|
|
|
|
|
+ if (money < advancePrice.multiply(new BigDecimal(100)).longValueExact()) {
|
|
|
|
|
+ throw new BusinessException("您的预付清单可用余额不足,请先充值!");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -270,7 +312,10 @@ public class KwoTradeOrderService {
|
|
|
*/
|
|
*/
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void addValetOrderSubmit(ValetOrderParam param) {
|
|
public void addValetOrderSubmit(ValetOrderParam param) {
|
|
|
- orderCheck(param.getGoodsInfo().getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount(), param.getGoodsInfo().getUnitPrice(), false);
|
|
|
|
|
|
|
+ OrderCheckDTO orderCheck = BeanUtils.copyProperties(param, OrderCheckDTO.class);
|
|
|
|
|
+ getTopEnt(orderCheck, param.getUnitInfo());
|
|
|
|
|
+ orderCheck.setGoodsId(param.getGoodsInfo().getGoodsId()).setUnitPrice(param.getGoodsInfo().getUnitPrice());
|
|
|
|
|
+ orderCheck(orderCheck, false);
|
|
|
KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
|
|
KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
|
|
|
order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
|
|
order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
|
|
|
.setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_2.getValue());
|
|
.setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_2.getValue());
|
|
@@ -403,7 +448,10 @@ public class KwoTradeOrderService {
|
|
|
throw new BusinessException("Invalid contract status");
|
|
throw new BusinessException("Invalid contract status");
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- orderCheck(param.getGoodsInfo().getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount(), param.getGoodsInfo().getUnitPrice(), false);
|
|
|
|
|
|
|
+ OrderCheckDTO orderCheck = BeanUtils.copyProperties(param, OrderCheckDTO.class);
|
|
|
|
|
+ getTopEnt(orderCheck, param.getUnitInfo());
|
|
|
|
|
+ orderCheck.setGoodsId(param.getGoodsInfo().getGoodsId()).setUnitPrice(param.getGoodsInfo().getUnitPrice());
|
|
|
|
|
+ orderCheck(orderCheck, false);
|
|
|
//扣减库存
|
|
//扣减库存
|
|
|
HttpResult updateResult = goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
|
|
HttpResult updateResult = goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
|
|
|
if (!Objects.equals(HttpStatus.SUCCESS_CODE, updateResult.getCode())) {
|
|
if (!Objects.equals(HttpStatus.SUCCESS_CODE, updateResult.getCode())) {
|
|
@@ -588,8 +636,16 @@ public class KwoTradeOrderService {
|
|
|
throw new BusinessException("订单商品信息异常!");
|
|
throw new BusinessException("订单商品信息异常!");
|
|
|
}
|
|
}
|
|
|
//受理订单总量-原订单总量=订单变化量
|
|
//受理订单总量-原订单总量=订单变化量
|
|
|
|
|
+ List<KwoTradeOrderUnit> units = kwoTradeOrderUnitService.getByOrderId(order.getId());
|
|
|
|
|
+ List<UnitInfo> unitInfos = BeanUtils.copyToList(units, UnitInfo.class);
|
|
|
|
|
+ if (CollectionUtils.isEmpty(unitInfos)) {
|
|
|
|
|
+ throw new BusinessException("订单企业信息异常!");
|
|
|
|
|
+ }
|
|
|
BigDecimal amount = param.getAmount().subtract(order.getAmount());
|
|
BigDecimal amount = param.getAmount().subtract(order.getAmount());
|
|
|
- orderCheck(goods.getGoodsId(), param.getTrading(), param.getPrice(), amount, param.getUnitPrice(), true);
|
|
|
|
|
|
|
+ OrderCheckDTO orderCheck = BeanUtils.copyProperties(param, OrderCheckDTO.class);
|
|
|
|
|
+ getTopEnt(orderCheck, unitInfos);
|
|
|
|
|
+ orderCheck.setGoodsId(goods.getGoodsId()).setAmount(amount);
|
|
|
|
|
+ orderCheck(orderCheck, true);
|
|
|
//更新订单信息
|
|
//更新订单信息
|
|
|
BeanUtils.copyProperties(param, order);
|
|
BeanUtils.copyProperties(param, order);
|
|
|
String contractStatus = param.getContractInfo().getContractStatus();
|
|
String contractStatus = param.getContractInfo().getContractStatus();
|