Commit f25fd26f authored by shiyu's avatar shiyu

分销商购买样品

parent f66382b5
...@@ -166,6 +166,91 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -166,6 +166,91 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
return Result.failed("分销订单下单失败"); return Result.failed("分销订单下单失败");
} }
@Override
public Result buySample(DistributionOrderRequestDto dto) {
try {
String shareRecordId = dto.getShareRecordId();
DistributorShareRecord distributorShareRecord = null;
long itemId = 0;
if (com.xxdxxs.utils.StringUtils.isEmpty(shareRecordId) && dto.getItemId() == null) {
return Result.failed("商品信息为空");
} else if (com.xxdxxs.utils.StringUtils.hasLength(shareRecordId)) {
distributorShareRecord = distributorShareRecordDao.findById(shareRecordId);
if (distributorShareRecord == null || !distributorShareRecord.getEnabled()) {
return Result.failed("该商品已下架");
} else {
itemId = distributorShareRecord.getItemId();
}
} else {
itemId = dto.getItemId();
}
//查询商品信息,检查商品库存
SupplierItem supplierItem = supplierItemDao.findById(distributorShareRecord.getItemId());
int stock = supplierItem.getStock();
if (stock <= 0) {
return Result.failed("商品库存不足");
}
String distributionOrderId = IdUtils.getOrderNumber(DISTRIBUTION_ORDER_PREFIX);
DistributionOrderRequestDto prePayDto = new DistributionOrderRequestDto();
prePayDto.setDistributionOrderId(distributionOrderId);
prePayDto.setAmount(String.valueOf(distributorShareRecord.getPrice() * dto.getItemNum()));
prePayDto.setBuyerOpenid(dto.getBuyerOpenid());
prePayDto.setItemName(supplierItem.getName());
Result prePayResult = wxPayServiceApi.createPrepareOrder(prePayDto);
if (!prePayResult.getSuccess()) {
return Result.failed("预下单失败");
}
String prepayId = (String) prePayResult.getData();
DistributionOrder distributionOrder = new DistributionOrder();
distributionOrder.setItemId(itemId);
distributionOrder.setItemNum(1);
distributionOrder.setShareRecordId(StringUtils.isEmpty(distributorShareRecord.getShareId())? ("DA" + SYSTEM_ACCOUNT) : distributorShareRecord.getShareId());
distributionOrder.setDistributionOrderId(distributionOrderId);
distributionOrder.setPrepayId(prepayId);
distributionOrder.setBuyerId(dto.getBuyerId());
distributionOrder.setBuyerOpenid(dto.getBuyerOpenid());
distributionOrder.setShopId(SYSTEM_ACCOUNT);
distributionOrder.setSellerId(SYSTEM_ACCOUNT);
distributionOrder.setAmount(supplierItem.getDistributionPrice());
distributionOrder.setAddressId(dto.getAddressId());
distributionOrder.setReceiverAddress(dto.getReceiverAddress());
distributionOrder.setReceiverName(dto.getReceiverName());
distributionOrder.setReceiverPhone(dto.getReceiverPhone());
distributionOrder.setCreateTime(new Date());
distributionOrder.setUpdateTime(new Date());
distributionOrder.setState(DistributionEnum.DistributionOrderStateEnum.PRE_PAY.getCode());
distributionOrderDao.insert(distributionOrder);
Map<String, String> map = new HashMap<>();
map.put("distributionOrderId", distributionOrderId);
map.put("prepayId", prepayId);
//计算系统账号的利润,分销商购买的价格 减去 进货成本价
DistributorProfit distributorProfit = new DistributorProfit();
//供货成本价
Long distributionTotalPrice = supplierItem.getDistributionPrice() * distributionOrder.getItemNum();
Double profit = distributionOrder.getAmount().doubleValue() - supplierItem.getSupplyPrice().doubleValue();
distributorProfit.setDistributionOrderId(distributionOrderId);
distributorProfit.setDistributorId(distributionOrder.getSellerId());
distributorProfit.setItemId(distributionOrder.getItemId());
distributorProfit.setItemNum(distributionOrder.getItemNum());
distributorProfit.setAmount(distributionOrder.getAmount());
distributorProfit.setItemCost(distributionTotalPrice);
distributorProfit.setProfit((long) Math.floor(profit));
distributorProfit.setCreateTime(new Date());
distributorProfit.setIsValid(false);
distributorProfitDao.insert(distributorProfit);
return Result.success(map);
} catch (Exception e) {
logger.error("分销商购买失败 error : {}", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
return Result.failed("分销商购买失败");
}
@Override @Override
public Result checkPayState(DistributionOrderRequestDto dto) { public Result checkPayState(DistributionOrderRequestDto dto) {
try { try {
......
...@@ -13,6 +13,14 @@ public interface DistributionOrderService { ...@@ -13,6 +13,14 @@ public interface DistributionOrderService {
Result createDistributionOrder(DistributionOrderRequestDto dto); Result createDistributionOrder(DistributionOrderRequestDto dto);
/**
* 分销商购买样品
* @param dto
* @return
*/
Result buySample(DistributionOrderRequestDto dto);
/** /**
* 检查订单是否支付成功 * 检查订单是否支付成功
* @param dto * @param dto
......
...@@ -47,6 +47,21 @@ public class DistributionOrderController { ...@@ -47,6 +47,21 @@ public class DistributionOrderController {
} }
@ApiOperation(value = "分销商购买样品,尚未付款")
@PostMapping("/buySample")
public Result buySample(@RequestBody DistributionOrderRequestDto dto) {
logger.info("分销商购买样品,请求参数:{}", JSON.toJSONString(dto));
Validator validator = new Validator(FormHandler.ofEntity(dto));
validator.set("buyerId", "买方id").must().number()
.set("buyerOpenid", "买方微信openid").must().string()
.end();
if (!validator.isValid()) {
return Result.failed(validator.getErrorInfo());
}
return distributionOrderService.buySample(dto);
}
@ApiOperation(value = "前端获取支付所需参数") @ApiOperation(value = "前端获取支付所需参数")
@PostMapping("/getPayParam") @PostMapping("/getPayParam")
public Result getPayParam(@RequestBody DistributionOrderRequestDto dto) { public Result getPayParam(@RequestBody DistributionOrderRequestDto dto) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment