|
|
@@ -24,6 +24,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
import com.trade.purchase.order.enums.OrderTypeEnum;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.springblade.client.entity.GoodsDesc;
|
|
|
+import org.springblade.client.feign.IFeesDescClient;
|
|
|
import org.springblade.client.feign.IGoodsDescClient;
|
|
|
import org.springblade.client.vo.GoodsDescVO;
|
|
|
import org.springblade.core.secure.utils.SecureUtil;
|
|
|
@@ -36,8 +37,14 @@ import org.springblade.deliver.goods.vo.DeliveryItemsVO;
|
|
|
import org.springblade.deliver.goods.mapper.DeliveryItemsMapper;
|
|
|
import org.springblade.deliver.goods.service.IDeliveryItemsService;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import org.springblade.finance.entity.Acc;
|
|
|
import org.springblade.finance.feign.IFinanceClient;
|
|
|
+import org.springblade.mocha.entity.BusinessOverpaymentItem;
|
|
|
import org.springblade.mocha.entity.BusinessPointsItem;
|
|
|
+import org.springblade.mocha.entity.Overpayment;
|
|
|
+import org.springblade.mocha.entity.Points;
|
|
|
+import org.springblade.mocha.enums.OverpaymentEnum;
|
|
|
+import org.springblade.mocha.feign.IBusinessOverpaymentClient;
|
|
|
import org.springblade.mocha.feign.IBusinessPointsClient;
|
|
|
import org.springblade.purchase.sales.entity.Order;
|
|
|
import org.springblade.purchase.sales.entity.OrderItems;
|
|
|
@@ -74,6 +81,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
private IOrderDescClient orderDescClient;//订单
|
|
|
private final IFinanceClient financeClient;
|
|
|
private final IBusinessPointsClient businessPointsClient;
|
|
|
+ private final IBusinessOverpaymentClient businessOverpaymentClient;
|
|
|
@Override
|
|
|
public IPage<DeliveryItemsVO> selectDeliveryItemsPage(IPage<DeliveryItemsVO> page, DeliveryItemsVO deliveryItems) {
|
|
|
return page.setRecords(baseMapper.selectDeliveryItemsPage(page, deliveryItems));
|
|
|
@@ -208,12 +216,12 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
});
|
|
|
}
|
|
|
//发货只会消费积分
|
|
|
- /*if (delivery.getTradeType().equals(OrderTypeEnum.DOMESTIC.getType())){
|
|
|
- R updatePoints = this.updatePoints(delivery, null, itemsList);
|
|
|
+ if (delivery.getTradeType().equals(OrderTypeEnum.DOMESTIC.getType())){
|
|
|
+ R updatePoints = this.updatePoints(delivery, collect, itemsList);
|
|
|
if (!updatePoints.isSuccess()){
|
|
|
throw new RuntimeException(updatePoints.getMsg());
|
|
|
}
|
|
|
- }*/
|
|
|
+ }
|
|
|
return deliveryItemsList;
|
|
|
}
|
|
|
/**
|
|
|
@@ -232,7 +240,11 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
throw new RuntimeException(updatePoints.getMsg());
|
|
|
}
|
|
|
}
|
|
|
- //溢付款功能未开发
|
|
|
+ // todo 溢付款
|
|
|
+ R overpayment = this.updateOverpayment(delivery, collect);
|
|
|
+ if (!overpayment.isSuccess()){
|
|
|
+ throw new RuntimeException(overpayment.getMsg());
|
|
|
+ }
|
|
|
return deliveryItemsList;
|
|
|
}
|
|
|
/**
|
|
|
@@ -529,23 +541,23 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
//先获取发货明细中的订单号,并将其分组
|
|
|
//获取每个订单号的已发货金额 和每个订单的已收金额
|
|
|
//若已发货金额加本次发货金额小于等于订单已收金额可以发货反之不能发货
|
|
|
- List<String> collect = deliveryItemsList.stream().map(DeliveryItems::getContractNumber).collect(Collectors.toList());
|
|
|
+ List<String> collect = deliveryItemsList.stream().map(DeliveryItems::getSrcOrderNo).collect(Collectors.toList());
|
|
|
if (CollectionUtils.isNotEmpty(collect)){
|
|
|
- for (String contractNumber : collect) {
|
|
|
+ for (String srcOrderNo : collect) {
|
|
|
BigDecimal newDelivery = new BigDecimal(BigInteger.ZERO);//本次发货金额
|
|
|
- BigDecimal oldDelivery = new BigDecimal(BigInteger.ZERO);//本次发货金额
|
|
|
- BigDecimal gathering = new BigDecimal(BigInteger.ZERO);//本次发货金额
|
|
|
- R financeAcc = financeClient.getFinanceAcc(contractNumber);
|
|
|
- if (financeAcc.isSuccess() && financeAcc.getData() != null){
|
|
|
- gathering = (BigDecimal) financeAcc.getData();
|
|
|
+ BigDecimal oldDelivery = new BigDecimal(BigInteger.ZERO);//已发货金额
|
|
|
+ BigDecimal gathering = new BigDecimal(BigInteger.ZERO);//已收金额
|
|
|
+ R<BigDecimal> financeAcc = financeClient.getFinanceAcc(srcOrderNo);
|
|
|
+ if (financeAcc.isSuccess() && financeAcc.getData() != null && financeAcc.getData().compareTo(BigDecimal.ZERO) >0){
|
|
|
+ gathering = financeAcc.getData();
|
|
|
}else {
|
|
|
throw new RuntimeException("未找到收款记录");
|
|
|
}
|
|
|
//本次金额
|
|
|
- List<DeliveryItems> itemsList = deliveryItemsList.stream().filter(e -> e.getContractNumber().equals(contractNumber)).collect(Collectors.toList());
|
|
|
+ List<DeliveryItems> itemsList = deliveryItemsList.stream().filter(e -> e.getSrcOrderNo().equals(srcOrderNo)).collect(Collectors.toList());
|
|
|
//已收金额
|
|
|
LambdaQueryWrapper<DeliveryItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
- lambdaQueryWrapper.eq(DeliveryItems::getContractNumber,contractNumber);
|
|
|
+ lambdaQueryWrapper.eq(DeliveryItems::getContractNumber,srcOrderNo);
|
|
|
lambdaQueryWrapper.eq(DeliveryItems::getTenantId,SecureUtil.getTenantId());
|
|
|
lambdaQueryWrapper.eq(DeliveryItems::getIsDeleted,0);
|
|
|
lambdaQueryWrapper.eq(DeliveryItems::getDeliveryStatus, DeliveryStatusEnum.DELIVER.getType());
|
|
|
@@ -553,7 +565,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
newDelivery = itemsList.stream().reduce(BigDecimal.ZERO,(x,y) ->{ return x.add(y.getContractAmount().multiply(y.getExRate())); },BigDecimal::add);//本次发货金额
|
|
|
oldDelivery = deliveryItems.stream().reduce(BigDecimal.ZERO,(x,y) ->{ return x.add(y.getContractAmount().multiply(y.getExRate())); },BigDecimal::add);//历史发货金额
|
|
|
if (gathering.compareTo((newDelivery.add(oldDelivery))) < 0){
|
|
|
- throw new RuntimeException("订单"+contractNumber+"可发货金额为:"+gathering.subtract(newDelivery.add(oldDelivery)));
|
|
|
+ throw new RuntimeException("订单"+srcOrderNo+"可发货金额为:"+gathering.subtract(oldDelivery));
|
|
|
}
|
|
|
}
|
|
|
return R.success("可以发货");
|
|
|
@@ -575,13 +587,19 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
* @return
|
|
|
*/
|
|
|
public R updatePoints(Delivery delivery,List<DeliveryItems> list,List<DeliveryItems> itemsList){
|
|
|
- int type = 0;
|
|
|
- if (delivery.getDeliveryType() == DeliveryEnum.REPEAL.getType()){
|
|
|
- type = 1;
|
|
|
+ String type = null;
|
|
|
+ if (delivery.getOverpayment().equals(OverpaymentEnum.REDUCE.getType())){//收货赠送积分
|
|
|
+ type = OverpaymentEnum.ADD.getType();
|
|
|
+ }else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALREDUCE.getType())){//撤销收货撤销赠送积分
|
|
|
+ type = OverpaymentEnum.REPEALADD.getType();
|
|
|
+ }else if (delivery.getOverpayment().equals(OverpaymentEnum.ADD.getType())){//确认发货消费积分
|
|
|
+ type = OverpaymentEnum.REDUCE.getType();
|
|
|
+ }else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALADD.getType())){//撤销发货撤销消费积分
|
|
|
+ type = OverpaymentEnum.REPEALREDUCE.getType();
|
|
|
}
|
|
|
//赠送积分明细
|
|
|
List<BusinessPointsItem> businessPointsItemList = new ArrayList<>();
|
|
|
- if (CollectionUtils.isNotEmpty(list)){
|
|
|
+ if (CollectionUtils.isNotEmpty(list) && (delivery.getOverpayment().equals(OverpaymentEnum.REDUCE.getType()) || delivery.getOverpayment().equals(OverpaymentEnum.REPEALREDUCE.getType()))){
|
|
|
list.stream().forEach(item ->{
|
|
|
BusinessPointsItem businessPointsItem = new BusinessPointsItem();
|
|
|
businessPointsItem.setBillNo(delivery.getSysNo());
|
|
|
@@ -594,7 +612,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
}
|
|
|
//消费积分明细
|
|
|
List<BusinessPointsItem> pointsItemList = new ArrayList<>();
|
|
|
- if (CollectionUtils.isNotEmpty(itemsList)){
|
|
|
+ if (CollectionUtils.isNotEmpty(itemsList) && (delivery.getOverpayment().equals(OverpaymentEnum.ADD.getType()) || delivery.getOverpayment().equals(OverpaymentEnum.REPEALADD.getType()))){
|
|
|
itemsList.stream().forEach(item ->{
|
|
|
BusinessPointsItem businessPointsItem = new BusinessPointsItem();
|
|
|
businessPointsItem.setBillNo(delivery.getSysNo());
|
|
|
@@ -605,6 +623,53 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
pointsItemList.add(businessPointsItem);
|
|
|
});
|
|
|
}
|
|
|
- return businessPointsClient.updatePoints(delivery.getCorpId(),delivery.getConvertIntegral(),delivery.getPresenterIntegral(),type,delivery.getId(),businessPointsItemList,pointsItemList);
|
|
|
+ if (CollectionUtils.isNotEmpty(businessPointsItemList) || CollectionUtils.isNotEmpty(pointsItemList)){
|
|
|
+ Points points = new Points();
|
|
|
+ points.setCorpId(delivery.getCorpId());
|
|
|
+ points.setConvertIntegral(delivery.getConvertIntegral());
|
|
|
+ points.setPresenterIntegral(delivery.getPresenterIntegral());
|
|
|
+ points.setType(type);
|
|
|
+ points.setList(businessPointsItemList);
|
|
|
+ points.setItemList(pointsItemList);
|
|
|
+ return businessPointsClient.updatePoints(points);
|
|
|
+ }
|
|
|
+ return R.success("操作成功");
|
|
|
+ }
|
|
|
+ public R updateOverpayment(Delivery delivery,List<DeliveryItems> list){
|
|
|
+ String type = null;
|
|
|
+ if (delivery.getOverpayment().equals(OverpaymentEnum.REDUCE.getType())){//收货赠送积分
|
|
|
+ type = OverpaymentEnum.ADD.getType();
|
|
|
+ }else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALREDUCE.getType())){//撤销收货撤销赠送积分
|
|
|
+ type = OverpaymentEnum.REPEALADD.getType();
|
|
|
+ }else if (delivery.getOverpayment().equals(OverpaymentEnum.ADD.getType())){//确认发货消费积分
|
|
|
+ type = OverpaymentEnum.REDUCE.getType();
|
|
|
+ }else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALADD.getType())){//撤销发货撤销消费积分
|
|
|
+ type = OverpaymentEnum.REPEALREDUCE.getType();
|
|
|
+ }
|
|
|
+ BigDecimal amount = new BigDecimal(BigInteger.ZERO);
|
|
|
+ //对发货明细数据进行筛选 发货数量减去到货数量大于0 的
|
|
|
+ List<DeliveryItems> collect = list.stream().filter(e -> (e.getActualQuantity().subtract(e.getArrivalQuantity())).compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList());
|
|
|
+ if (CollectionUtils.isNotEmpty(collect)){
|
|
|
+ //获取溢付款金额 溢付款金额等于发货数量-到货数量的值 乘以单价 等于溢付款
|
|
|
+ amount = collect.stream().filter(e -> e.getPrice() != null).reduce(BigDecimal.ZERO,(x,y) ->{ return x.add((y.getActualQuantity().subtract(y.getArrivalQuantity())).multiply(y.getPrice())); },BigDecimal::add);
|
|
|
+ List<BusinessOverpaymentItem> businessOverpaymentItemList = new ArrayList<>();
|
|
|
+ collect.stream().forEach(item ->{
|
|
|
+ BusinessOverpaymentItem overpaymentItem = new BusinessOverpaymentItem();
|
|
|
+ overpaymentItem.setBillNo(delivery.getSysNo());
|
|
|
+ overpaymentItem.setOrderNo(item.getContractNumber());
|
|
|
+ overpaymentItem.setSrcPid(delivery.getId());
|
|
|
+ overpaymentItem.setSrcId(item.getId());
|
|
|
+ overpaymentItem.setOverpayment((item.getActualQuantity().subtract(item.getArrivalQuantity())).multiply(item.getPrice()));
|
|
|
+ businessOverpaymentItemList.add(overpaymentItem);
|
|
|
+ });
|
|
|
+ Overpayment overpayment = new Overpayment();
|
|
|
+ overpayment.setCorpId(delivery.getCorpId());
|
|
|
+ overpayment.setAmount(amount);
|
|
|
+ overpayment.setSrcPid(delivery.getId());
|
|
|
+ overpayment.setType(type);
|
|
|
+ overpayment.setList(businessOverpaymentItemList);
|
|
|
+ return businessOverpaymentClient.updateOverpayment(overpayment);
|
|
|
+ }
|
|
|
+ return R.success("操作成功");
|
|
|
}
|
|
|
}
|