Browse Source

Merge branch 'dev' of http://git.echepei.com/lazhaoqian/bladex into dev

ioioio 4 years ago
parent
commit
936ef714dc
29 changed files with 565 additions and 114 deletions
  1. 3 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/Delivery.java
  2. 20 2
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/enums/DeliveryStatusEnum.java
  3. 3 3
      blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/entity/BusinessOverpayment.java
  4. 1 1
      blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/entity/BusinessOverpaymentItem.java
  5. 32 0
      blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/entity/Overpayment.java
  6. 43 0
      blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/entity/Points.java
  7. 46 0
      blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/enums/OverpaymentEnum.java
  8. 18 0
      blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/feign/IBusinessOverpaymentClient.java
  9. 5 15
      blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/feign/IBusinessPointsClient.java
  10. 2 1
      blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/feign/IFinanceClient.java
  11. 4 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryController.java
  12. 85 20
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryItemsServiceImpl.java
  13. 9 2
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java
  14. 19 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/feign/BusinessOverpaymentClient.java
  15. 5 9
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/feign/BusinessPointsClient.java
  16. 7 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessOverpaymentItemMapper.java
  17. 3 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessOverpaymentItemMapper.xml
  18. 17 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessOverpaymentMapper.java
  19. 24 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessOverpaymentMapper.xml
  20. 1 1
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessPointsItemMapper.xml
  21. 2 2
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessPointsMapper.java
  22. 12 10
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessPointsMapper.xml
  23. 15 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/IBusinessOverpaymentService.java
  24. 3 3
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/IBusinessPointsService.java
  25. 103 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/BusinessOverpaymentServiceImpl.java
  26. 75 42
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/BusinessPointsServiceImpl.java
  27. 5 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderItemsController.java
  28. 1 1
      blade-service/trade-finance/src/main/java/org/springblade/finance/controller/SettlementController.java
  29. 2 1
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/component/impl/DefaultOrderSaveImpl.java

+ 3 - 0
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/Delivery.java

@@ -360,4 +360,7 @@ public class Delivery implements Serializable {
 
 	@ApiModelProperty(value = "本次赠送积分")
 	private BigDecimal presenterIntegral;
+	@ApiModelProperty("积分/溢付款处理类型 add 增加积分  repealAdd 撤销增加溢积分  reduce 消费溢积分  repealReduce 撤销消费溢积分")
+	@TableField(exist = false)
+	private String overpayment;
 }

+ 20 - 2
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/enums/DeliveryStatusEnum.java

@@ -18,9 +18,27 @@ public enum DeliveryStatusEnum {
 	 */
 	REPEAL("录入"),
 	/**
-	 * 
+	 * 
 	 */
-	REVOCATION("已收货"),
+	REVOCATION("已到货"),
+	/**
+	 * 增加溢付款
+	 */
+	ADD("add"),
+
+	/**
+	 * 撤销增加溢付款
+	 */
+	REPEALADD("repealAdd"),
+	/**
+	 * 消费溢付款
+	 */
+	REDUCE("reduce"),
+
+	/**
+	 * 撤销消费溢付款
+	 */
+	REPEALREDUCE("repealReduce"),
 
 	;
 	private final String type;

+ 3 - 3
blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/entity/BusinessOverpayment.java

@@ -55,17 +55,17 @@ public class BusinessOverpayment implements Serializable {
 	/**
 	* 增加积分
 	*/
-		@ApiModelProperty(value = "增加积分")
+		@ApiModelProperty(value = "增加金额")
 		private BigDecimal inOverpayment;
 	/**
 	* 消费积分
 	*/
-		@ApiModelProperty(value = "消费积分")
+		@ApiModelProperty(value = "消费金额")
 		private BigDecimal outOverpaymen;
 	/**
 	* 积分余额
 	*/
-		@ApiModelProperty(value = "积分余额")
+		@ApiModelProperty(value = "剩余金额")
 		private BigDecimal balanceOverpaymen;
 	/**
 	* 备注

+ 1 - 1
blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/entity/BusinessOverpaymentItem.java

@@ -70,7 +70,7 @@ public class BusinessOverpaymentItem implements Serializable {
 	/**
 	* 积分
 	*/
-		@ApiModelProperty(value = "积分")
+		@ApiModelProperty(value = "金额")
 		private BigDecimal overpayment;
 	/**
 	* 消费类型 0 增加 1 消费

+ 32 - 0
blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/entity/Overpayment.java

@@ -0,0 +1,32 @@
+package org.springblade.mocha.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class Overpayment implements Serializable {
+	private static final long serialVersionUID = 1L;
+	/**
+	 * 客户id
+	 */
+	private Long corpId;
+	/**
+	 * 处理金额
+	 */
+	private BigDecimal amount;
+	/**
+	 *操作类型  add 增加积分  repealAdd 撤销增加溢积分  reduce 消费溢积分  repealReduce 撤销消费溢积分
+	 */
+	private String type;
+	/**
+	 *发货主表id
+	 */
+	private Long srcPid;
+	/**
+	 *溢付款明细信息
+	 */
+	private List<BusinessOverpaymentItem> list;
+}

+ 43 - 0
blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/entity/Points.java

@@ -0,0 +1,43 @@
+package org.springblade.mocha.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 操作客户积分对象
+ */
+@Data
+public class Points implements Serializable {
+	private static final long serialVersionUID = 1L;
+	/**
+	 * 客户id
+	 */
+	private Long corpId;
+	/**
+	 * 本次兑换积分
+	 */
+	private BigDecimal convertIntegral;
+	/**
+	 *本次赠送积分
+	 */
+	private BigDecimal presenterIntegral;
+	/**
+	 *操作类型  add 增加积分  repealAdd 撤销增加溢积分  reduce 消费溢积分  repealReduce 撤销消费溢积分
+	 */
+	private String type;
+	/**
+	 *发货主表id
+	 */
+	private Long srcPid;
+	/**
+	 *赠送积分明细数据
+	 */
+	private List<BusinessPointsItem> list;
+	/**
+	 * 消费积分明细数据
+	 */
+	private List<BusinessPointsItem> itemList;
+}

+ 46 - 0
blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/enums/OverpaymentEnum.java

@@ -0,0 +1,46 @@
+package org.springblade.mocha.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Objects;
+
+/**
+ * 客户溢付款操作类型
+ */
+@Getter
+@AllArgsConstructor
+public enum OverpaymentEnum {
+
+
+	/**
+	 * 增加溢付款
+	 */
+	ADD("add"),
+
+	/**
+	 * 撤销增加溢付款
+	 */
+	REPEALADD("repealAdd"),
+	/**
+	 * 消费溢付款
+	 */
+	REDUCE("reduce"),
+
+	/**
+	 * 撤销消费溢付款
+	 */
+	REPEALREDUCE("repealReduce"),
+
+	;
+	private final String type;
+
+	public static OverpaymentEnum fromType(String overpayment) {
+		for (OverpaymentEnum type : OverpaymentEnum.values()) {
+			if (Objects.equals(type.getType(), overpayment)) {
+				return type;
+			}
+		}
+		throw new IllegalArgumentException("order status not exist");
+	}
+}

+ 18 - 0
blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/feign/IBusinessOverpaymentClient.java

@@ -1,7 +1,17 @@
 package org.springblade.mocha.feign;
 
 import org.springblade.common.constant.LauncherConstant;
+import org.springblade.core.tool.api.R;
+import org.springblade.mocha.entity.BusinessOverpaymentItem;
+import org.springblade.mocha.entity.Overpayment;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * 溢付款对外访问接口
@@ -11,6 +21,14 @@ import org.springframework.cloud.openfeign.FeignClient;
 )
 public interface IBusinessOverpaymentClient {
 	String API_PREFIX = "/client";
+	String UPDATE_OVERPAYMENT = API_PREFIX + "updateOverpayment";
 
 	// todo 暂定一个接口对客户溢付款进行管理 新增或减少
+
+	/**
+	 * 客户溢付款处理
+	 * @return
+	 */
+	@PostMapping(UPDATE_OVERPAYMENT)
+	R updateOverpayment(@RequestBody Overpayment overpayment);
 }

+ 5 - 15
blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/feign/IBusinessPointsClient.java

@@ -3,8 +3,11 @@ package org.springblade.mocha.feign;
 import org.springblade.common.constant.LauncherConstant;
 import org.springblade.core.tool.api.R;
 import org.springblade.mocha.entity.BusinessPointsItem;
+import org.springblade.mocha.entity.Points;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import java.math.BigDecimal;
@@ -25,20 +28,7 @@ public interface IBusinessPointsClient {
 
 	/**
 	 * 操作客户积分
-	 * @param corpId 客户id
-	 * @param convertIntegral 本次兑换积分
-	 * @param presenterIntegral 本地赠送积分
-	 * @param type 操作类型  0 确认发货 赠送增加  消费积分增加 1 撤销发货 赠送积分增加 消费积分减少
-	 * @param srcPid 发货主表id
-	 * @param list 赠送积分明细数据
-	 * @param itemList 消费积分明细数据
 	 */
-	@GetMapping(UPDATE_POINTS)
-	R updatePoints(@RequestParam("corpId") Long corpId,
-				   @RequestParam("convertIntegral") BigDecimal convertIntegral,
-				   @RequestParam("presenterIntegral") BigDecimal presenterIntegral,
-				   @RequestParam("type") int type,
-				   @RequestParam("srcPid") Long srcPid,
-				   @RequestParam("list") List<BusinessPointsItem> list,
-				   @RequestParam("itemList") List<BusinessPointsItem> itemList);
+	@PostMapping(UPDATE_POINTS)
+	R updatePoints(@RequestBody Points points);
 }

+ 2 - 1
blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/feign/IFinanceClient.java

@@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 
 
 import javax.validation.Valid;
+import java.math.BigDecimal;
 import java.util.List;
 
 @FeignClient(
@@ -29,7 +30,7 @@ public interface IFinanceClient
 	 R passCancel(@RequestParam("id") Long id);
 
     @GetMapping("/settlement/getFinanceAcc")
-	R getFinanceAcc(@RequestParam("accSysNo")String accSysNo);
+	R<BigDecimal> getFinanceAcc(@RequestParam("accSysNo")String accSysNo);
 
 	@GetMapping("/settlement/detail")
 	R<Settlement> detail(Settlement settlement);

+ 4 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryController.java

@@ -167,6 +167,7 @@ public class DeliveryController extends BladeController {
 		delivery.setBillType(OrderTypeEnum.SHIP.getType());
 		delivery.setTradeType(OrderTypeEnum.DOMESTIC.getType());
 		delivery.setDeliveryType(DeliveryEnum.DELIVER.getType());
+		delivery.setOverpayment(DeliveryStatusEnum.ADD.getType());
 		return deliveryService.submit(delivery);
 	}
 	/**
@@ -179,6 +180,7 @@ public class DeliveryController extends BladeController {
 		delivery.setBillType(OrderTypeEnum.SHIP.getType());
 		delivery.setTradeType(OrderTypeEnum.DOMESTIC.getType());
 		delivery.setDeliveryType(DeliveryEnum.REPEAL.getType());
+		delivery.setOverpayment(DeliveryStatusEnum.REPEALADD.getType());
 		return deliveryService.submit(delivery);
 	}
 	/**
@@ -191,6 +193,7 @@ public class DeliveryController extends BladeController {
 		delivery.setBillType(OrderTypeEnum.SHIP.getType());
 		delivery.setTradeType(OrderTypeEnum.DOMESTIC.getType());
 		delivery.setDeliveryType(DeliveryEnum.TAKE.getType());
+		delivery.setOverpayment(DeliveryStatusEnum.REDUCE.getType());
 		return deliveryService.revocation(delivery);
 	}
 	/**
@@ -203,6 +206,7 @@ public class DeliveryController extends BladeController {
 		delivery.setBillType(OrderTypeEnum.SHIP.getType());
 		delivery.setTradeType(OrderTypeEnum.DOMESTIC.getType());
 		delivery.setDeliveryType(DeliveryEnum.REVOCATION.getType());
+		delivery.setOverpayment(DeliveryStatusEnum.REPEALREDUCE.getType());
 		return deliveryService.revocation(delivery);
 	}
 

+ 85 - 20
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryItemsServiceImpl.java

@@ -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("操作成功");
 	}
 }

+ 9 - 2
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java

@@ -19,6 +19,7 @@ package org.springblade.deliver.goods.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.BeanUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.client.entity.CorpsDesc;
@@ -88,6 +89,12 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 	@GlobalTransactional
 	@Transactional(rollbackFor = Exception.class)
 	public R submitDelivery(Delivery delivery) {
+		String status = null;//订单状态
+		if (StringUtils.isBlank(delivery.getDeliveryStatus())){
+			status = DeliveryStatusEnum.REPEAL.getType();
+		}else {
+			status = delivery.getDeliveryStatus();
+		}
 		if (delivery.getId() == null){
 			R billNo = serialClient.getBillNo(delivery.getBillType(),delivery.getTradeType(),delivery.getBillType());
 			if (billNo.isSuccess() && billNo.getData() != null){
@@ -98,12 +105,12 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			delivery.setCreateUser(SecureUtil.getUserId());
 			delivery.setCreateTime(new Date());
 			delivery.setTenantId(SecureUtil.getTenantId());
-			delivery.setDeliveryStatus(DeliveryStatusEnum.REPEAL.getType());
+			delivery.setDeliveryStatus(status);
 			baseMapper.insert(delivery);
 		}else {
 			delivery.setUpdateUser(SecureUtil.getUserId());
 			delivery.setUpdateTime(new Date());
-			delivery.setDeliveryStatus(DeliveryStatusEnum.REPEAL.getType());
+			delivery.setDeliveryStatus(status);
 			baseMapper.updateById(delivery);
 		}
 		//保存发货明细信息

+ 19 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/feign/BusinessOverpaymentClient.java

@@ -2,10 +2,18 @@ package org.springblade.mocha.feign;
 
 import lombok.AllArgsConstructor;
 import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.mocha.entity.BusinessOverpaymentItem;
+import org.springblade.mocha.entity.Overpayment;
 import org.springblade.mocha.service.IBusinessOverpaymentService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 @NonDS
 @ApiIgnore()
 @RestController
@@ -13,4 +21,15 @@ import springfox.documentation.annotations.ApiIgnore;
 public class BusinessOverpaymentClient implements IBusinessOverpaymentClient{
 
 	private final IBusinessOverpaymentService businessOverpaymentService;
+
+	/**
+	 * 客户溢付款处理
+	 * @return
+	 */
+	@Override
+	@PostMapping(UPDATE_OVERPAYMENT)
+	public R updateOverpayment(Overpayment overpayment) {
+		return businessOverpaymentService.updateOverpayment(overpayment.getCorpId(),overpayment.getAmount(),overpayment.getType(),
+			overpayment.getSrcPid(),overpayment.getList());
+	}
 }

+ 5 - 9
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/feign/BusinessPointsClient.java

@@ -4,6 +4,7 @@ import lombok.AllArgsConstructor;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
 import org.springblade.mocha.entity.BusinessPointsItem;
+import org.springblade.mocha.entity.Points;
 import org.springblade.mocha.service.IBusinessPointsService;
 import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
@@ -20,16 +21,11 @@ public class BusinessPointsClient implements IBusinessPointsClient{
 	private final IBusinessPointsService businessPointsService;
 	/**
 	 * 操作客户积分
-	 * @param corpId 客户id
-	 * @param convertIntegral 本次兑换积分
-	 * @param presenterIntegral 本地赠送积分
-	 * @param type 操作类型  0 确认发货 赠送增加  消费积分增加 1 撤销发货 赠送积分增加 消费积分减少
-	 * @param srcPid 发货主表id
-	 * @param list 赠送积分明细数据
-	 * @param itemList 消费积分明细数据
+
 	 */
 	@Override
-	public R updatePoints(Long corpId, BigDecimal convertIntegral,BigDecimal presenterIntegral, int type,Long srcPid, List<BusinessPointsItem> list,List<BusinessPointsItem> itemList) {
-		return businessPointsService.updatePoints(corpId,convertIntegral,presenterIntegral,type,srcPid,list,itemList);
+	public R updatePoints(Points points) {
+		return businessPointsService.updatePoints(points.getCorpId(),points.getConvertIntegral(),
+			points.getPresenterIntegral(),points.getType(),points.getSrcPid(),points.getList(),points.getItemList());
 	}
 }

+ 7 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessOverpaymentItemMapper.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.mocha.mapper;
 
+import org.apache.ibatis.annotations.Param;
 import org.springblade.mocha.entity.BusinessOverpaymentItem;
 import org.springblade.mocha.vo.BusinessOverpaymentItemVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -38,5 +39,11 @@ public interface BusinessOverpaymentItemMapper extends BaseMapper<BusinessOverpa
 	 * @return
 	 */
 	List<BusinessOverpaymentItemVO> selectBusinessOverpaymentItemPage(IPage page, BusinessOverpaymentItemVO businessOverpaymentItem);
+	/**
+	 * 撤销增加溢付款或者消费溢付款
+	 * @param pid
+	 * @param overpaymentType
+	 */
+	void updateItem(@Param("pid") Long pid, @Param("overpaymentType") int overpaymentType);
 
 }

+ 3 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessOverpaymentItemMapper.xml

@@ -27,5 +27,8 @@
     <select id="selectBusinessOverpaymentItemPage" resultMap="businessOverpaymentItemResultMap">
         select * from business_overpayment_item where is_deleted = 0
     </select>
+    <update id="updateItem" parameterType="object">
+        update business_overpayment_item set is_deleted = '0' where pid = #{pid} and overpayment_type = #{overpaymentType}
+    </update>
 
 </mapper>

+ 17 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessOverpaymentMapper.java

@@ -16,10 +16,14 @@
  */
 package org.springblade.mocha.mapper;
 
+import org.apache.ibatis.annotations.Param;
 import org.springblade.mocha.entity.BusinessOverpayment;
 import org.springblade.mocha.vo.BusinessOverpaymentVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -38,5 +42,18 @@ public interface BusinessOverpaymentMapper extends BaseMapper<BusinessOverpaymen
 	 * @return
 	 */
 	List<BusinessOverpaymentVO> selectBusinessOverpaymentPage(IPage page, BusinessOverpaymentVO businessOverpayment);
+	/**
+	 * 更改客户溢付款
+	 * @param convertIntegral 溢付款
+	 * @param date 操作日期
+	 * @param userId 操作人
+	 * @param id 积分主表id
+	 * @param type 操作类型 add 增加溢付款  repealAdd 撤销增加溢付款  reduce 消费溢付款  repealReduce 撤销消费溢付款
+	 */
+	void updatePoints(@Param("convertIntegral") BigDecimal convertIntegral,
+					  @Param("date") Date date,
+					  @Param("userId") Long userId,
+					  @Param("id") Long id,
+					  @Param("type") String type);
 
 }

+ 24 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessOverpaymentMapper.xml

@@ -25,5 +25,29 @@
     <select id="selectBusinessOverpaymentPage" resultMap="businessOverpaymentResultMap">
         select * from business_overpayment where is_deleted = 0
     </select>
+    <update id="updatePoints" parameterType="object">
+        update business_overpayment
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="type == 'add'">
+                in_overpayment = in_overpayment + #{convertIntegral},
+                balance_overpaymen = balance_overpaymen + #{convertIntegral},
+            </if>
+            <if test="type =='repealAdd'">
+                in_overpayment = in_overpayment - #{convertIntegral},
+                balance_overpaymen = balance_overpaymen - #{convertIntegral},
+            </if>
+            <if test="type == 'reduce'">
+                out_overpaymen = out_overpaymen + #{convertIntegral},
+                balance_overpaymen = balance_overpaymen - #{convertIntegral},
+            </if>
+            <if test="type == 'repealReduce'">
+                out_overpaymen = out_overpaymen - #{convertIntegral},
+                balance_overpaymen = balance_overpaymen + #{convertIntegral},
+            </if>
+            update_user = #{userId},
+            update_time = #{date}
+        </trim>
+        where id = #{id}
+    </update>
 
 </mapper>

+ 1 - 1
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessPointsItemMapper.xml

@@ -27,7 +27,7 @@
     <select id="selectBusinessPointsItemPage" resultMap="businessPointsItemResultMap">
         select * from business_points_item where is_deleted = 0
     </select>
-    <update id="updateItem" parameterType="long">
+    <update id="updateItem" parameterType="object">
         update business_points_item set is_deleted = '0' where pid = #{pid} and points_type = #{pointsType}
     </update>
 

+ 2 - 2
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessPointsMapper.java

@@ -50,13 +50,13 @@ public interface BusinessPointsMapper extends BaseMapper<BusinessPoints> {
 	 * @param date 操作日期
 	 * @param userId 操作人
 	 * @param id 积分主表id
-	 * @param type 操作类型
+	 * @param type 操作类型 add 增加积分  repealAdd 撤销增加溢积分  reduce 消费溢积分  repealReduce 撤销消费溢积分
 	 */
 	void updatePoints(@Param("convertIntegral")BigDecimal convertIntegral,
 					  @Param("presenterIntegral")BigDecimal presenterIntegral,
 					  @Param("date")Date date,
 					  @Param("userId") Long userId,
 					  @Param("id") Long id,
-					  @Param("type") int type);
+					  @Param("type") String type);
 
 }

+ 12 - 10
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessPointsMapper.xml

@@ -28,22 +28,24 @@
     <update id="updatePoints" parameterType="object">
         update business_points
         <trim prefix="SET" suffixOverrides=",">
-            <if test="type == 0">
+            <if test="type == 'add'">
                 in_points = in_points + #{presenterIntegral},
-                out_points = out_points + #{convertIntegral},
-                balance_points = balance_points + #{presenterIntegral} - #{convertIntegral}
+                balance_points = balance_points + #{presenterIntegral},
             </if>
-            <if test="type == 1">
+            <if test="type == 'repealAdd'">
                 in_points = in_points - #{presenterIntegral},
-                out_points = out_points - #{convertIntegral},
-                balance_points = balance_points - #{presenterIntegral} + #{convertIntegral}
+                balance_points = balance_points - #{presenterIntegral},
             </if>
-            <if test="userId != null">
-                update_user = #{userId}
+            <if test="type == 'reduce'">
+                out_points = out_points + #{convertIntegral},
+                balance_points = balance_points - #{convertIntegral},
             </if>
-            <if test="date != null">
-                update_time = #{date}
+            <if test="type == 'repealReduce'">
+                out_points = out_points - #{convertIntegral},
+                balance_points = balance_points + #{convertIntegral},
             </if>
+            update_user = #{userId},
+            update_time = #{date}
         </trim>
         where id = #{id}
     </update>

+ 15 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/IBusinessOverpaymentService.java

@@ -16,11 +16,16 @@
  */
 package org.springblade.mocha.service;
 
+import org.springblade.core.tool.api.R;
 import org.springblade.mocha.entity.BusinessOverpayment;
+import org.springblade.mocha.entity.BusinessOverpaymentItem;
 import org.springblade.mocha.vo.BusinessOverpaymentVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 /**
  * 客户溢付款主表 服务类
  *
@@ -37,5 +42,15 @@ public interface IBusinessOverpaymentService extends IService<BusinessOverpaymen
 	 * @return
 	 */
 	IPage<BusinessOverpaymentVO> selectBusinessOverpaymentPage(IPage<BusinessOverpaymentVO> page, BusinessOverpaymentVO businessOverpayment);
+	/**
+	 * 客户溢付款处理
+	 * @param corpId 客户id
+	 * @param amount 处理金额
+	 * @param type 处理类型 add 增加溢付款  repealAdd 撤销增加溢付款  reduce 消费溢付款  repealReduce 撤销消费溢付款
+	 * @param srcPid 来源主表id
+	 * @param list 溢付款明细信息
+	 * @return
+	 */
+	R updateOverpayment(Long corpId, BigDecimal amount, String type, Long srcPid, List<BusinessOverpaymentItem> list);
 
 }

+ 3 - 3
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/IBusinessPointsService.java

@@ -46,12 +46,12 @@ public interface IBusinessPointsService extends IService<BusinessPoints> {
 	 * 操作客户积分
 	 * @param corpId 客户id
 	 * @param convertIntegral 本次兑换积分
-	 * @param presenterIntegral 本赠送积分
-	 * @param type 操作类型  0 确认发货 赠送增加  消费积分增加 1 撤销发货 赠送积分增加 消费积分减少
+	 * @param presenterIntegral 本赠送积分
+	 * @param type 操作类型  add 增加积分  repealAdd 撤销增加溢积分  reduce 消费溢积分  repealReduce 撤销消费溢积分
 	 * @param srcPid 发货主表id
 	 * @param list 赠送积分明细数据
 	 * @param itemList 消费积分明细数据
 	 */
-	R updatePoints(Long corpId, BigDecimal convertIntegral,BigDecimal presenterIntegral, int type,Long srcPid, List<BusinessPointsItem> list,List<BusinessPointsItem> itemList);
+	R updatePoints(Long corpId, BigDecimal convertIntegral,BigDecimal presenterIntegral, String type,Long srcPid, List<BusinessPointsItem> list,List<BusinessPointsItem> itemList);
 
 }

+ 103 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/BusinessOverpaymentServiceImpl.java

@@ -16,7 +16,17 @@
  */
 package org.springblade.mocha.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import lombok.AllArgsConstructor;
+import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.feign.ICorpsDescClient;
+import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.core.tool.api.R;
 import org.springblade.mocha.entity.BusinessOverpayment;
+import org.springblade.mocha.entity.BusinessOverpaymentItem;
+import org.springblade.mocha.enums.OverpaymentEnum;
+import org.springblade.mocha.mapper.BusinessOverpaymentItemMapper;
 import org.springblade.mocha.vo.BusinessOverpaymentVO;
 import org.springblade.mocha.mapper.BusinessOverpaymentMapper;
 import org.springblade.mocha.service.IBusinessOverpaymentService;
@@ -24,6 +34,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
 /**
  * 客户溢付款主表 服务实现类
  *
@@ -31,11 +45,100 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
  * @since 2021-12-28
  */
 @Service
+@AllArgsConstructor
 public class BusinessOverpaymentServiceImpl extends ServiceImpl<BusinessOverpaymentMapper, BusinessOverpayment> implements IBusinessOverpaymentService {
 
+	private final ICorpsDescClient corpsDescClient;
+	private final BusinessOverpaymentItemMapper businessOverpaymentItemMapper;
 	@Override
 	public IPage<BusinessOverpaymentVO> selectBusinessOverpaymentPage(IPage<BusinessOverpaymentVO> page, BusinessOverpaymentVO businessOverpayment) {
 		return page.setRecords(baseMapper.selectBusinessOverpaymentPage(page, businessOverpayment));
 	}
 
+	/**
+	 * 客户溢付款处理
+	 * @param corpId 客户id
+	 * @param amount 处理金额
+	 * @param type 处理类型 add 增加溢付款  repealAdd 撤销增加溢付款  reduce 消费溢付款  repealReduce 撤销消费溢付款
+	 * @param srcPid 来源主表id
+	 * @param list 溢付款明细信息
+	 * @return
+	 */
+	@Override
+	public R updateOverpayment(Long corpId, BigDecimal amount, String type, Long srcPid, List<BusinessOverpaymentItem> list) {
+		Long pid = null;
+		R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(corpId);
+		Integer itemType = null;
+		BusinessOverpayment businessOverpayment = baseMapper.selectOne(new QueryWrapper<BusinessOverpayment>().eq("corp_id", corpId).eq("tenant_id", SecureUtil.getTenantId()).eq("is_deleted", 0));
+		if (type.equals(OverpaymentEnum.ADD.getType())){ //增加溢付款
+			itemType = 0;
+			if (businessOverpayment==null){
+				BusinessOverpayment overpayment = new BusinessOverpayment();
+				overpayment.setCorpId(corpId);
+				overpayment.setCorpName(corpMessage.getData().getCname());
+				overpayment.setInOverpayment(amount);
+				overpayment.setOutOverpaymen(BigDecimal.ZERO);
+				overpayment.setBalanceOverpaymen(amount);
+				overpayment.setCreateUser(SecureUtil.getUserId());
+				overpayment.setCreateTime(new Date());
+				baseMapper.insert(overpayment);
+				pid = overpayment.getId();
+			}else {
+				pid = businessOverpayment.getId();
+				baseMapper.updatePoints(amount,new Date(),SecureUtil.getUserId(),businessOverpayment.getId(),type);
+			}
+
+		}else if (type.equals(OverpaymentEnum.REPEALADD.getType())){ //撤销溢付款
+			itemType = 0;
+			if (businessOverpayment == null){
+				throw new RuntimeException("未找到客户的溢付款信息");
+			}
+			if (amount.compareTo(businessOverpayment.getBalanceOverpaymen()) >0){
+				throw new RuntimeException("暂时不能撤销溢付款,目前可撤销溢付款金额为:"+businessOverpayment.getBalanceOverpaymen());
+			}
+			pid = businessOverpayment.getId();
+			baseMapper.updatePoints(amount,new Date(),SecureUtil.getUserId(),businessOverpayment.getId(),type);
+		}else if (type.equals(OverpaymentEnum.REDUCE.getType())){ //消费溢付款
+			itemType = 1;
+			if (businessOverpayment == null){
+				throw new RuntimeException("未找到客户的溢付款信息");
+			}
+			if (amount.compareTo(businessOverpayment.getBalanceOverpaymen()) >0){
+				throw new RuntimeException("暂时不能消费溢付款,目前可消费溢付款金额为:"+businessOverpayment.getBalanceOverpaymen());
+			}
+			pid = businessOverpayment.getId();
+			baseMapper.updatePoints(amount,new Date(),SecureUtil.getUserId(),businessOverpayment.getId(),type);
+		}else if (type.equals(OverpaymentEnum.REPEALREDUCE.getType())){ //撤销消费溢付款
+			itemType = 1;
+			pid = businessOverpayment.getId();
+			baseMapper.updatePoints(amount,new Date(),SecureUtil.getUserId(),businessOverpayment.getId(),type);
+		}
+		//处理明细数据  新增溢付款和消费溢付款 添加消费明细
+		if (CollectionUtils.isNotEmpty(list) && (type.equals(OverpaymentEnum.ADD.getType())||type.equals(OverpaymentEnum.REDUCE.getType()))){
+			for (BusinessOverpaymentItem businessOverpaymentItem : list) {
+				businessOverpaymentItem.setOverpaymentType(itemType);
+				if (businessOverpaymentItem.getId() == null){
+					businessOverpaymentItem.setPid(pid);
+					businessOverpaymentItem.setCreateUser(SecureUtil.getUserId());
+					businessOverpaymentItem.setCreateTime(new Date());
+					businessOverpaymentItem.setTenantId(SecureUtil.getTenantId());
+					businessOverpaymentItemMapper.insert(businessOverpaymentItem);
+				}else {
+					businessOverpaymentItem.setPid(pid);
+					businessOverpaymentItem.setUpdateUser(SecureUtil.getUserId());
+					businessOverpaymentItem.setUpdateTime(new Date());
+					businessOverpaymentItem.setTenantId(SecureUtil.getTenantId());
+					businessOverpaymentItemMapper.updateById(businessOverpaymentItem);
+				}
+			}
+		}
+		//撤销新增溢付款和消费溢付款逻辑删除溢付款明细数据
+		if (type.equals(OverpaymentEnum.REPEALADD.getType())){
+			businessOverpaymentItemMapper.updateItem(pid,0);
+		}else if (type.equals(OverpaymentEnum.REPEALREDUCE.getType())){
+			businessOverpaymentItemMapper.updateItem(pid,1);
+		}
+		return R.success("操作成功");
+	}
+
 }

+ 75 - 42
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/BusinessPointsServiceImpl.java

@@ -25,6 +25,7 @@ import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.mocha.entity.BusinessPoints;
 import org.springblade.mocha.entity.BusinessPointsItem;
+import org.springblade.mocha.enums.OverpaymentEnum;
 import org.springblade.mocha.mapper.BusinessPointsItemMapper;
 import org.springblade.mocha.vo.BusinessPointsVO;
 import org.springblade.mocha.mapper.BusinessPointsMapper;
@@ -56,8 +57,8 @@ public class BusinessPointsServiceImpl extends ServiceImpl<BusinessPointsMapper,
 	 * 操作客户积分
 	 * @param corpId 客户id
 	 * @param convertIntegral 本次兑换积分
-	 * @param presenterIntegral 本赠送积分
-	 * @param type 操作类型  0 增加  1减少
+	 * @param presenterIntegral 本赠送积分
+	 * @param type 操作类型  add 增加积分  repealAdd 撤销增加溢积分  reduce 消费溢积分  repealReduce 撤销消费溢积分
 	 * @param srcPid 发货主表id
 	 * @param list 赠送积分明细数据
 	 * @param itemList 消费积分明细数据
@@ -65,59 +66,91 @@ public class BusinessPointsServiceImpl extends ServiceImpl<BusinessPointsMapper,
 	 *         消费: 1现根据客户id查询数据是否存在 不存在提示客户 存在判断余额是否能够支付积分消费 不能提示客户 反之 在消费积分上加消费积分 积分余额 减去消费积分
 	 */
 	@Override
-	public R updatePoints(Long corpId, BigDecimal convertIntegral,BigDecimal presenterIntegral, int type,Long srcPid, List<BusinessPointsItem> list,List<BusinessPointsItem> itemList) {
+	public R updatePoints(Long corpId, BigDecimal convertIntegral,BigDecimal presenterIntegral, String type,Long srcPid, List<BusinessPointsItem> list,List<BusinessPointsItem> itemList) {
+		Long pid = null;
 		//获取客户名称
 		R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(corpId);
 		//根据客户id查询客户积分是否存在
 		BusinessPoints businessPoints = baseMapper.selectOne(new QueryWrapper<BusinessPoints>().eq("corp_id", corpId).eq("tenant_id", SecureUtil.getTenantId()).eq("is_deleted", 0));
-		if (type == 0){
+		if (type.equals(OverpaymentEnum.ADD.getType())){ //增加积分
 			if (businessPoints == null){
-				if ((convertIntegral !=null && convertIntegral.compareTo(BigDecimal.ZERO) != 0) || CollectionUtils.isNotEmpty(itemList)){ //没积分有消费不能兑换
-					throw new SecurityException("目前暂未有积分,不支持兑换");
-				}
-				businessPoints.setCorpId(corpId);
-				businessPoints.setCorpName(corpMessage.getData().getCname());
-				businessPoints.setInPoints(presenterIntegral);
-				businessPoints.setOutPoints(convertIntegral);
-				businessPoints.setBalancePoints(presenterIntegral);
-				businessPoints.setCreateTime(new Date());
-				businessPoints.setCreateUser(SecureUtil.getUserId());
-				businessPoints.setTenantId(SecureUtil.getTenantId());
-				baseMapper.insert(businessPoints);
+				BusinessPoints points = new BusinessPoints();
+				points.setCorpId(corpId);
+				points.setCorpName(corpMessage.getData().getCname());
+				points.setInPoints(presenterIntegral);
+				points.setOutPoints(BigDecimal.ZERO);
+				points.setBalancePoints(presenterIntegral);
+				points.setCreateTime(new Date());
+				points.setCreateUser(SecureUtil.getUserId());
+				points.setTenantId(SecureUtil.getTenantId());
+				baseMapper.insert(points);
+				pid = points.getId();
 			}else {
-				if ((((convertIntegral !=null && convertIntegral.compareTo(BigDecimal.ZERO) != 0)) || CollectionUtils.isNotEmpty(itemList))&&businessPoints.getBalancePoints().compareTo(convertIntegral)<0){ //有积分有消费积分余额不够不能兑换
-					throw new SecurityException("目前积分少于兑换,"+"目前可兑换积分"+businessPoints.getBalancePoints());
-				}
+				pid = businessPoints.getId();
 				baseMapper.updatePoints(convertIntegral,presenterIntegral,new Date(),SecureUtil.getUserId(),businessPoints.getId(),type);
 			}
-		}else if (type == 1){
+		}else if (type.equals(OverpaymentEnum.REPEALADD.getType())){//撤销增加积分
+			if (businessPoints == null){
+				throw new RuntimeException("未找到客户积分信息");
+			}
+			if (presenterIntegral.compareTo(businessPoints.getBalancePoints()) >0){
+				throw new RuntimeException("暂时不能撤销,目前可撤销积分为:"+businessPoints.getBalancePoints());
+			}
+			pid = businessPoints.getId();
+			baseMapper.updatePoints(convertIntegral,presenterIntegral,new Date(),SecureUtil.getUserId(),businessPoints.getId(),type);
+		}else if (type.equals(OverpaymentEnum.REDUCE.getType())){ //消费积分
+			if (businessPoints == null){
+				throw new RuntimeException("未找到客户积分信息");
+			}
+			if (convertIntegral.compareTo(businessPoints.getBalancePoints()) >0){
+				throw new RuntimeException("暂时不能消费,目前可消费积分为:"+businessPoints.getBalancePoints());
+			}
+			pid = businessPoints.getId();
+		}else if (type.equals(OverpaymentEnum.REPEALREDUCE.getType())){ //撤销消费积分
+			pid = businessPoints.getId();
 			baseMapper.updatePoints(convertIntegral,presenterIntegral,new Date(),SecureUtil.getUserId(),businessPoints.getId(),type);
 		}
 		//赠送积分明细
-		if (CollectionUtils.isNotEmpty(list) && type == 0){
-			list.stream().forEach(item ->{
-				item.setPid(businessPoints.getId());
-				item.setCreateTime(new Date());
-				item.setCreateUser(SecureUtil.getUserId());
-				item.setTenantId(SecureUtil.getTenantId());
-				item.setPointsType(0);
-				businessPointsItemMapper.insert(item);
-			});
-		}else if (CollectionUtils.isNotEmpty(list) && type == 1){
-			businessPointsItemMapper.updateItem(srcPid,0);
+		if (CollectionUtils.isNotEmpty(list) && type.equals(OverpaymentEnum.ADD.getType())){
+			for (BusinessPointsItem businessPointsItem : list) {
+				if (businessPointsItem.getId() == null){
+					businessPointsItem.setPid(pid);
+					businessPointsItem.setCreateTime(new Date());
+					businessPointsItem.setCreateUser(SecureUtil.getUserId());
+					businessPointsItem.setTenantId(SecureUtil.getTenantId());
+					businessPointsItem.setPointsType(0);
+					businessPointsItemMapper.insert(businessPointsItem);
+				}else {
+					businessPointsItem.setPid(pid);
+					businessPointsItem.setUpdateTime(new Date());
+					businessPointsItem.setUpdateUser(SecureUtil.getUserId());
+					businessPointsItem.setTenantId(SecureUtil.getTenantId());
+					businessPointsItem.setPointsType(0);
+					businessPointsItemMapper.updateById(businessPointsItem);
+				}
+			}
+		}else if (CollectionUtils.isNotEmpty(list) && type.equals(OverpaymentEnum.REDUCE.getType())){
+			for (BusinessPointsItem businessPointsItem : itemList) {
+				if (businessPointsItem.getId() == null){
+					businessPointsItem.setPid(pid);
+					businessPointsItem.setCreateTime(new Date());
+					businessPointsItem.setPointsType(1);
+					businessPointsItem.setCreateUser(SecureUtil.getUserId());
+					businessPointsItem.setTenantId(SecureUtil.getTenantId());
+					businessPointsItemMapper.insert(businessPointsItem);
+				}else {
+					businessPointsItem.setPid(pid);
+					businessPointsItem.setUpdateTime(new Date());
+					businessPointsItem.setPointsType(1);
+					businessPointsItem.setUpdateUser(SecureUtil.getUserId());
+					businessPointsItem.setTenantId(SecureUtil.getTenantId());
+					businessPointsItemMapper.updateById(businessPointsItem);
+				}
+			}
 		}
 		//消费积分明细
-		if (CollectionUtils.isNotEmpty(itemList) && type == 0){
-			itemList.stream().forEach(item ->{
-				item.setPid(businessPoints.getId());
-				item.setCreateTime(new Date());
-				item.setPointsType(1);
-				item.setCreateUser(SecureUtil.getUserId());
-				item.setTenantId(SecureUtil.getTenantId());
-				businessPointsItemMapper.insert(item);
-			});
-		}else if (CollectionUtils.isNotEmpty(itemList) && type == 1){
-			businessPointsItemMapper.updateItem(srcPid,1);
+		if (type.equals(OverpaymentEnum.REPEALADD.getType()) || type.equals(OverpaymentEnum.REPEALREDUCE.getType())){
+			businessPointsItemMapper.updateItem(pid,1);
 		}
 		return R.success("操作成功");
 	}

+ 5 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderItemsController.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.purchase.sales.controller;
 
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import org.springblade.core.excel.util.ExcelUtil;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import io.swagger.annotations.Api;
@@ -163,8 +164,11 @@ public class OrderItemsController extends BladeController {
 	 */
 	@GetMapping("/orderItemsList")
 	@ApiOperationSupport(order = 13)
-	@ApiOperation(value = "下拉获取订单明细", notes = "传入order的id")
+	@ApiOperation(value = "下拉获取订单明细", notes = "传入order的id,tradeType GN,CK,JK")
 	public R<List<OrderItems>> orderItemsList(Order order) {
+		if (StringUtils.isBlank(order.getTradeType())){
+			throw new SecurityException("缺少必要的参数");
+		}
 		return R.data(orderItemsService.getOrderItems(order));
 	}
 

+ 1 - 1
blade-service/trade-finance/src/main/java/org/springblade/finance/controller/SettlementController.java

@@ -321,7 +321,7 @@ public class SettlementController extends BladeController {
 	}
 
 	@GetMapping("/getFinanceAcc")
-	public R getFinanceAcc(@RequestParam(value = "accSysNo",required = true)String accSysNo)
+	public R<BigDecimal> getFinanceAcc(@RequestParam(value = "accSysNo",required = true)String accSysNo)
 	{
 		LambdaQueryWrapper<Acc> accLambdaQueryWrapper=new LambdaQueryWrapper<>();
 		accLambdaQueryWrapper

+ 2 - 1
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/component/impl/DefaultOrderSaveImpl.java

@@ -2,6 +2,7 @@ package com.trade.purchase.order.component.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.trade.purchase.order.assemble.mapstruct.OrderItemMapstructMapper;
 import com.trade.purchase.order.component.IOrderCodeMaker;
 import com.trade.purchase.order.component.IOrderSave;
@@ -80,7 +81,7 @@ public class DefaultOrderSaveImpl implements IOrderSave {
 	 */
 	private Order saveOrder(OrderSubmitDto order) {
         //校验单号重复-新增
-		if(order.getId()==null)
+		if(order.getId()==null && StringUtils.isNotBlank(order.getOrderNo()))
 		{
 			LambdaQueryWrapper<Order> orderLambdaQueryWrapper=new LambdaQueryWrapper<>();
 			orderLambdaQueryWrapper