Browse Source

国内贸易积分增加减少功能

lazhaoqian 4 years ago
parent
commit
4f55ad6f09
27 changed files with 412 additions and 44 deletions
  1. 5 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/Delivery.java
  2. 4 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/DeliveryItems.java
  3. 16 0
      blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/feign/IBusinessOverpaymentClient.java
  4. 44 0
      blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/feign/IBusinessPointsClient.java
  5. 5 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/Order.java
  6. 4 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/OrderItems.java
  7. 6 0
      blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/Order.java
  8. 4 0
      blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/OrderItems.java
  9. 3 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsAttnController.java
  10. 6 0
      blade-service/blade-deliver-goods/pom.xml
  11. 2 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/DeliveryItemsMapper.xml
  12. 2 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/DeliveryMapper.xml
  13. 98 41
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryItemsServiceImpl.java
  14. 2 1
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java
  15. 16 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/feign/BusinessOverpaymentClient.java
  16. 35 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/feign/BusinessPointsClient.java
  17. 3 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessPointsItemMapper.java
  18. 3 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessPointsItemMapper.xml
  19. 20 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessPointsMapper.java
  20. 22 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/mapper/BusinessPointsMapper.xml
  21. 16 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/IBusinessPointsService.java
  22. 85 1
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/BusinessPointsServiceImpl.java
  23. 1 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/PriceBankServiceImpl.java
  24. 4 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderItemsMapper.xml
  25. 2 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.xml
  26. 2 0
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/mapper/OrderItemsMapper.xml
  27. 2 0
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/mapper/OrderMapper.xml

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

@@ -355,4 +355,9 @@ public class Delivery implements Serializable {
 	private String storageList;
 
 	private String creditList;
+	@ApiModelProperty(value = "本次兑换积分")
+	private BigDecimal convertIntegral;
+
+	@ApiModelProperty(value = "本次赠送积分")
+	private BigDecimal presenterIntegral;
 }

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

@@ -307,6 +307,10 @@ public class DeliveryItems implements Serializable {
 	 */
 	@ApiModelProperty(value = "商品类型 默认0 为商品 1 为赠品")
 		private int goodType;
+	@ApiModelProperty(value = "商品叫积分倍数 正品叫积分数")
+	private BigDecimal integralMultiples;
+	@ApiModelProperty(value = "商品叫赠送积分 赠品叫兑换积分")
+	private BigDecimal integral;
 
 
 }

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

@@ -0,0 +1,16 @@
+package org.springblade.mocha.feign;
+
+import org.springblade.common.constant.LauncherConstant;
+import org.springframework.cloud.openfeign.FeignClient;
+
+/**
+ * 溢付款对外访问接口
+ */
+@FeignClient(
+	value = LauncherConstant.APPLICATION_MOCHA_ITEM_NAME
+)
+public interface IBusinessOverpaymentClient {
+	String API_PREFIX = "/client";
+
+	// todo 暂定一个接口对客户溢付款进行管理 新增或减少
+}

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

@@ -0,0 +1,44 @@
+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.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 积分对外访问接口
+ */
+@FeignClient(
+	value = LauncherConstant.APPLICATION_MOCHA_ITEM_NAME
+)
+public interface IBusinessPointsClient {
+	String API_PREFIX = "/client";
+	String UPDATE_POINTS = API_PREFIX + "/updatePoints";
+
+
+	//todo 暂定 一个对外访问接口新增或者修改客户积分
+
+	/**
+	 * 操作客户积分
+	 * @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);
+}

+ 5 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/Order.java

@@ -682,5 +682,10 @@ public class Order implements Serializable {
 	private BigDecimal foreignSettlmentAmount;
 	@ApiModelProperty(value = "单票毛利")
 	private BigDecimal singleTicketMargin;
+	@ApiModelProperty(value = "本次兑换积分")
+	private BigDecimal convertIntegral;
+
+	@ApiModelProperty(value = "本次赠送积分")
+	private BigDecimal presenterIntegral;
 
 }

+ 4 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/OrderItems.java

@@ -399,4 +399,8 @@ public class OrderItems implements Serializable {
 	private int goodType;
 	@ApiModelProperty(value = "单品毛利率")
 	private BigDecimal itemMargin;
+	@ApiModelProperty(value = "商品叫积分倍数 正品叫积分数")
+	private BigDecimal integralMultiples;
+	@ApiModelProperty(value = "商品叫赠送积分 赠品叫兑换积分")
+	private BigDecimal integral;
 }

+ 6 - 0
blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/Order.java

@@ -605,4 +605,10 @@ public class Order extends OrderBase {
 	@ApiModelProperty(value = "单票毛利")
 	private BigDecimal singleTicketMargin;
 
+	@ApiModelProperty(value = "本次兑换积分")
+	private BigDecimal convertIntegral;
+
+	@ApiModelProperty(value = "本次赠送积分")
+	private BigDecimal presenterIntegral;
+
 }

+ 4 - 0
blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/OrderItems.java

@@ -368,4 +368,8 @@ public class OrderItems extends OrderBase {
 	private int goodType;
 	@ApiModelProperty(value = "单品毛利率")
 	private BigDecimal itemMargin;
+	@ApiModelProperty(value = "商品叫积分倍数 正品叫积分数")
+	private BigDecimal integralMultiples;
+	@ApiModelProperty(value = "商品叫赠送积分 赠品叫兑换积分")
+	private BigDecimal integral;
 }

+ 3 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsAttnController.java

@@ -12,6 +12,7 @@ import org.springblade.client.vo.CorpsAttnVO;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
@@ -50,6 +51,8 @@ public class CorpsAttnController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入corpsAttn")
 	public R<IPage<CorpsAttn>> list(CorpsAttn corpsAttn, Query query) {
+		corpsAttn.setTenantId(SecureUtil.getTenantId());
+		corpsAttn.setIsDeleted(0);
 		IPage<CorpsAttn> pages = corpsAttnService.page(Condition.getPage(query), Condition.getQueryWrapper(corpsAttn));
 		return R.data(pages);
 	}

+ 6 - 0
blade-service/blade-deliver-goods/pom.xml

@@ -72,6 +72,12 @@
             <version>2.8.2.RELEASE</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-mocha-item-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
 </project>

+ 2 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/DeliveryItemsMapper.xml

@@ -47,6 +47,8 @@
         <result column="corp_id" property="corpId"/>
         <result column="corp_name" property="corpName"/>
         <result column="good_type" property="goodType"/>
+        <result column="integral_multiples" property="integralMultiples"/>
+        <result column="integral" property="integral"/>
     </resultMap>
 
 

+ 2 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/DeliveryMapper.xml

@@ -45,6 +45,8 @@
         <result column="purchase_mode" property="purchaseMode"/>
         <result column="arrival_tel" property="arrivalTel"/>
         <result column="delivery_status" property="deliveryStatus"/>
+        <result column="convert_integral" property="convertIntegral"/>
+        <result column="presenter_integral" property="presenterIntegral"/>
     </resultMap>
 
 

+ 98 - 41
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryItemsServiceImpl.java

@@ -37,6 +37,8 @@ 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.feign.IFinanceClient;
+import org.springblade.mocha.entity.BusinessPointsItem;
+import org.springblade.mocha.feign.IBusinessPointsClient;
 import org.springblade.purchase.sales.entity.Order;
 import org.springblade.purchase.sales.entity.OrderItems;
 import org.springblade.purchase.sales.feign.IOrderDescClient;
@@ -49,10 +51,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * 发货明细 服务实现类
@@ -69,6 +73,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 	private IOrderItemsClient orderItemsClient;//订单对外访问接口
 	private IOrderDescClient orderDescClient;//订单
 	private final IFinanceClient financeClient;
+	private final IBusinessPointsClient businessPointsClient;
 	@Override
 	public IPage<DeliveryItemsVO> selectDeliveryItemsPage(IPage<DeliveryItemsVO> page, DeliveryItemsVO deliveryItems) {
 		return page.setRecords(baseMapper.selectDeliveryItemsPage(page, deliveryItems));
@@ -132,56 +137,67 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 	 * @return
 	 */
 	public List<DeliveryItems> affirmDeliveryItemsList(Long pId,Delivery delivery,List<DeliveryItems> deliveryItemsList){
+		List<DeliveryItems> collect = deliveryItemsList.stream().filter(e -> e.getGoodType() == 0).collect(Collectors.toList());//发货商品
+		List<DeliveryItems> itemsList = deliveryItemsList.stream().filter(e -> e.getGoodType() == 1).collect(Collectors.toList());//赠送商品
 		//判断要发货物的金额和已收金额的大小
-		/*R amount = this.deliveryAmount(deliveryItemsList, delivery.getTradeType());
+		/*R amount = this.deliveryAmount(collect, delivery.getTradeType());
 		if (!amount.isSuccess()){
 			throw  new RuntimeException(amount.getMsg());
 		}*/
-		for (DeliveryItems deliveryItems : deliveryItemsList) {
-			if (deliveryItems.getItemId() == null){
-				throw new RuntimeException("发货明细中商品id不能为空");
-			}
-			deliveryItems.setPid(pId);//父级ID
-			deliveryItems.setTenantId(SecureUtil.getTenantId());//租户id
-			deliveryItems.setDeliveryStatus(delivery.getDeliveryStatus());
-			if (deliveryItems.getId() == null){
-				deliveryItems.setCreateUser(SecureUtil.getUserId());
-				deliveryItems.setCreateTime(new Date());
-				baseMapper.insert(deliveryItems);
-			}else {
-				deliveryItems.setUpdateTime(new Date());
-				deliveryItems.setUpdateUser(SecureUtil.getUserId());
-				baseMapper.updateById(deliveryItems);
-			}
-			StockGoods stockGoods=null;
-			StockGoodsVO stock = this.getStock(delivery.getTradeType(), deliveryItems.getCorpId(), delivery.getStorageId(), deliveryItems);
-			if (stock != null && delivery.getDeliveryType() == DeliveryEnum.DELIVER.getType()){//发货
-				//更新库存账
-				stockGoods = this.deliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems);
+		if (CollectionUtils.isNotEmpty(collect)){
+			for (DeliveryItems deliveryItems : collect) {
+				if (deliveryItems.getItemId() == null){
+					throw new RuntimeException("发货明细中商品id不能为空");
+				}
+				deliveryItems.setPid(pId);//父级ID
+				deliveryItems.setTenantId(SecureUtil.getTenantId());//租户id
+				deliveryItems.setDeliveryStatus(delivery.getDeliveryStatus());
+				if (deliveryItems.getId() == null){
+					deliveryItems.setCreateUser(SecureUtil.getUserId());
+					deliveryItems.setCreateTime(new Date());
+					baseMapper.insert(deliveryItems);
+				}else {
+					deliveryItems.setUpdateTime(new Date());
+					deliveryItems.setUpdateUser(SecureUtil.getUserId());
+					baseMapper.updateById(deliveryItems);
+				}
+				StockGoods stockGoods=null;
+				StockGoodsVO stock = this.getStock(delivery.getTradeType(), deliveryItems.getCorpId(), delivery.getStorageId(), deliveryItems);
+				if (stock != null && delivery.getDeliveryType() == DeliveryEnum.DELIVER.getType()){//发货
+					//更新库存账
+					stockGoods = this.deliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems);
 
-			}else if (stock != null && delivery.getDeliveryType() == DeliveryEnum.REPEAL.getType()){ //撤销发货
-				stockGoods = this.revocationDeliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems);
+				}else if (stock != null && delivery.getDeliveryType() == DeliveryEnum.REPEAL.getType()){ //撤销发货
+					stockGoods = this.revocationDeliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems);
 
-			}else {
-				//新增库存账
-				throw  new RuntimeException("库存为空");
-			}
-			// todo 更新订单明细中发货数量  采购和销售可能需要调不同接口
-			R actualQuantity = orderItemsClient.updateActualQuantity(deliveryItems.getSrcId(), deliveryItems.getActualQuantity(),delivery.getDeliveryType());
-			if (!actualQuantity.isSuccess()){
-				throw new RuntimeException("更新订单发货数量出错");
-			}
-			// todo 出口贸易确认发货修改发票重量
-			if (delivery.getTradeType().equals(OrderTypeEnum.IMPORT.getType())){
-				R actualWeight = orderItemsClient.updateActualWeight(deliveryItems.getSrcId(), deliveryItems.getInvoiceWeight(), delivery.getDeliveryType());
-				if (!actualWeight.isSuccess()){
-					throw new RuntimeException("更新订单发票重量出错");
+				}else {
+					//新增库存账
+					throw  new RuntimeException("库存为空");
 				}
+				// todo 更新订单明细中发货数量  采购和销售可能需要调不同接口
+				R actualQuantity = orderItemsClient.updateActualQuantity(deliveryItems.getSrcId(), deliveryItems.getActualQuantity(),delivery.getDeliveryType());
+				if (!actualQuantity.isSuccess()){
+					throw new RuntimeException("更新订单发货数量出错");
+				}
+				// todo 出口贸易确认发货修改发票重量
+				if (delivery.getTradeType().equals(OrderTypeEnum.IMPORT.getType())){
+					R actualWeight = orderItemsClient.updateActualWeight(deliveryItems.getSrcId(), deliveryItems.getInvoiceWeight(), delivery.getDeliveryType());
+					if (!actualWeight.isSuccess()){
+						throw new RuntimeException("更新订单发票重量出错");
+					}
+				}
+				//更新发货明细库存字段
+				deliveryItems.setInventoryNumber(stockGoods.getSurplusRouteQuantity());
+				baseMapper.updateById(deliveryItems);
 			}
-			//更新发货明细库存字段
-			deliveryItems.setInventoryNumber(stockGoods.getSurplusRouteQuantity());
-			baseMapper.updateById(deliveryItems);
 		}
+		//发货只会消费积分
+		/*if (delivery.getTradeType().equals(OrderTypeEnum.DOMESTIC.getType())){
+			R updatePoints = this.updatePoints(delivery, null, itemsList);
+			if (!updatePoints.isSuccess()){
+				throw  new RuntimeException(updatePoints.getMsg());
+			}
+		}*/
 		return deliveryItemsList;
 	}
 	/**
@@ -509,4 +525,45 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 	public void updateByPid(Long id) {
 		baseMapper.updateByPid(id);
 	}
+
+	/**
+	 * 修改客户积分信息
+	 * @param delivery 发货主表信息
+	 * @param list 赠送积分明细
+	 * @param itemsList 消费积分明细
+	 * @return
+	 */
+	public R updatePoints(Delivery delivery,List<DeliveryItems> list,List<DeliveryItems> itemsList){
+		int type = 0;
+		if (delivery.getDeliveryType() == DeliveryEnum.REPEAL.getType()){
+			type = 1;
+		}
+		//赠送积分明细
+		List<BusinessPointsItem> businessPointsItemList = new ArrayList<>();
+		if (CollectionUtils.isNotEmpty(list)){
+			list.stream().forEach(item ->{
+				BusinessPointsItem businessPointsItem = new BusinessPointsItem();
+				businessPointsItem.setBillNo(delivery.getSysNo());
+				businessPointsItem.setOrderNo(item.getContractNumber());
+				businessPointsItem.setSrcPid(delivery.getId());
+				businessPointsItem.setSrcId(item.getId());
+				businessPointsItem.setPoints(item.getIntegral());
+				businessPointsItemList.add(businessPointsItem);
+			});
+		}
+		//消费积分明细
+		List<BusinessPointsItem> pointsItemList = new ArrayList<>();
+		if (CollectionUtils.isNotEmpty(itemsList)){
+			itemsList.stream().forEach(item ->{
+				BusinessPointsItem businessPointsItem = new BusinessPointsItem();
+				businessPointsItem.setBillNo(delivery.getSysNo());
+				businessPointsItem.setOrderNo(item.getContractNumber());
+				businessPointsItem.setSrcPid(delivery.getId());
+				businessPointsItem.setSrcId(item.getId());
+				businessPointsItem.setPoints(item.getIntegral());
+				pointsItemList.add(businessPointsItem);
+			});
+		}
+		return businessPointsClient.updatePoints(delivery.getCorpId(),delivery.getConvertIntegral(),delivery.getPresenterIntegral(),type,delivery.getId(),businessPointsItemList,pointsItemList);
+	}
 }

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

@@ -85,7 +85,8 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 	 * @return
 	 */
 	@Override
-	@Transactional
+	@GlobalTransactional
+	@Transactional(rollbackFor = Exception.class)
 	public R submitDelivery(Delivery delivery) {
 		if (delivery.getId() == null){
 			R billNo = serialClient.getBillNo(delivery.getBillType(),delivery.getTradeType(),delivery.getBillType());

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

@@ -0,0 +1,16 @@
+package org.springblade.mocha.feign;
+
+import lombok.AllArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.mocha.service.IBusinessOverpaymentService;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+@NonDS
+@ApiIgnore()
+@RestController
+@AllArgsConstructor
+public class BusinessOverpaymentClient implements IBusinessOverpaymentClient{
+
+	private final IBusinessOverpaymentService businessOverpaymentService;
+}

+ 35 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/feign/BusinessPointsClient.java

@@ -0,0 +1,35 @@
+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.BusinessPointsItem;
+import org.springblade.mocha.service.IBusinessPointsService;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@NonDS
+@ApiIgnore()
+@RestController
+@AllArgsConstructor
+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);
+	}
+}

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

@@ -16,6 +16,7 @@
  */
 package org.springblade.mocha.mapper;
 
+import org.apache.ibatis.annotations.Param;
 import org.springblade.mocha.entity.BusinessPointsItem;
 import org.springblade.mocha.vo.BusinessPointsItemVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -39,4 +40,6 @@ public interface BusinessPointsItemMapper extends BaseMapper<BusinessPointsItem>
 	 */
 	List<BusinessPointsItemVO> selectBusinessPointsItemPage(IPage page, BusinessPointsItemVO businessPointsItem);
 
+	void updateItem(@Param("pid") Long pid,@Param("pointsType") int pointsType);
+
 }

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

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

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

@@ -16,10 +16,14 @@
  */
 package org.springblade.mocha.mapper;
 
+import org.apache.ibatis.annotations.Param;
 import org.springblade.mocha.entity.BusinessPoints;
 import org.springblade.mocha.vo.BusinessPointsVO;
 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;
 
 /**
@@ -39,4 +43,20 @@ public interface BusinessPointsMapper extends BaseMapper<BusinessPoints> {
 	 */
 	List<BusinessPointsVO> selectBusinessPointsPage(IPage page, BusinessPointsVO businessPoints);
 
+	/**
+	 * 更改客户积分
+	 * @param convertIntegral 本次兑换积分
+	 * @param presenterIntegral 本地赠送积分
+	 * @param date 操作日期
+	 * @param userId 操作人
+	 * @param id 积分主表id
+	 * @param type 操作类型
+	 */
+	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);
+
 }

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

@@ -25,5 +25,27 @@
     <select id="selectBusinessPointsPage" resultMap="businessPointsResultMap">
         select * from business_points where is_deleted = 0
     </select>
+    <update id="updatePoints" parameterType="object">
+        update business_points
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="type == 0">
+                in_points = in_points + #{presenterIntegral},
+                out_points = out_points + #{convertIntegral},
+                balance_points = balance_points + #{presenterIntegral} - #{convertIntegral}
+            </if>
+            <if test="type == 1">
+                in_points = in_points - #{presenterIntegral},
+                out_points = out_points - #{convertIntegral},
+                balance_points = balance_points - #{presenterIntegral} + #{convertIntegral}
+            </if>
+            <if test="userId != null">
+                update_user = #{userId}
+            </if>
+            <if test="date != null">
+                update_time = #{date}
+            </if>
+        </trim>
+        where id = #{id}
+    </update>
 
 </mapper>

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

@@ -16,11 +16,16 @@
  */
 package org.springblade.mocha.service;
 
+import org.springblade.core.tool.api.R;
 import org.springblade.mocha.entity.BusinessPoints;
+import org.springblade.mocha.entity.BusinessPointsItem;
 import org.springblade.mocha.vo.BusinessPointsVO;
 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,16 @@ public interface IBusinessPointsService extends IService<BusinessPoints> {
 	 * @return
 	 */
 	IPage<BusinessPointsVO> selectBusinessPointsPage(IPage<BusinessPointsVO> page, BusinessPointsVO businessPoints);
+	/**
+	 * 操作客户积分
+	 * @param corpId 客户id
+	 * @param convertIntegral 本次兑换积分
+	 * @param presenterIntegral 本地赠送积分
+	 * @param type 操作类型  0 确认发货 赠送增加  消费积分增加 1 撤销发货 赠送积分增加 消费积分减少
+	 * @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);
 
 }

+ 85 - 1
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/BusinessPointsServiceImpl.java

@@ -16,7 +16,16 @@
  */
 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.BusinessPoints;
+import org.springblade.mocha.entity.BusinessPointsItem;
+import org.springblade.mocha.mapper.BusinessPointsItemMapper;
 import org.springblade.mocha.vo.BusinessPointsVO;
 import org.springblade.mocha.mapper.BusinessPointsMapper;
 import org.springblade.mocha.service.IBusinessPointsService;
@@ -24,6 +33,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 +44,82 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
  * @since 2021-12-28
  */
 @Service
+@AllArgsConstructor
 public class BusinessPointsServiceImpl extends ServiceImpl<BusinessPointsMapper, BusinessPoints> implements IBusinessPointsService {
-
+	private final ICorpsDescClient corpsDescClient;
+	private final BusinessPointsItemMapper businessPointsItemMapper;
 	@Override
 	public IPage<BusinessPointsVO> selectBusinessPointsPage(IPage<BusinessPointsVO> page, BusinessPointsVO businessPoints) {
 		return page.setRecords(baseMapper.selectBusinessPointsPage(page, businessPoints));
 	}
+	/**
+	 * 操作客户积分
+	 * @param corpId 客户id
+	 * @param convertIntegral 本次兑换积分
+	 * @param presenterIntegral 本地赠送积分
+	 * @param type 操作类型  0 增加  1减少
+	 * @param srcPid 发货主表id
+	 * @param list 赠送积分明细数据
+	 * @param itemList 消费积分明细数据
+	 * 计算逻辑 新增: 1先根据客户id查询数据是否存在 存在则 更新客户新增的积分和余额 反之新增积分信息
+	 *         消费: 1现根据客户id查询数据是否存在 不存在提示客户 存在判断余额是否能够支付积分消费 不能提示客户 反之 在消费积分上加消费积分 积分余额 减去消费积分
+	 */
+	@Override
+	public R updatePoints(Long corpId, BigDecimal convertIntegral,BigDecimal presenterIntegral, int type,Long srcPid, List<BusinessPointsItem> list,List<BusinessPointsItem> itemList) {
+		//获取客户名称
+		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 (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);
+			}else {
+				if ((((convertIntegral !=null && convertIntegral.compareTo(BigDecimal.ZERO) != 0)) || CollectionUtils.isNotEmpty(itemList))&&businessPoints.getBalancePoints().compareTo(convertIntegral)<0){ //有积分有消费积分余额不够不能兑换
+					throw new SecurityException("目前积分少于兑换,"+"目前可兑换积分"+businessPoints.getBalancePoints());
+				}
+				baseMapper.updatePoints(convertIntegral,presenterIntegral,new Date(),SecureUtil.getUserId(),businessPoints.getId(),type);
+			}
+		}else if (type == 1){
+			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(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);
+		}
+		return R.success("操作成功");
+	}
 
 }

+ 1 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/PriceBankServiceImpl.java

@@ -163,6 +163,7 @@ public class PriceBankServiceImpl extends ServiceImpl<PriceBankMapper, PriceBank
 						priceBank.setItemId(goodName.getId());//商品id
 						priceBank.setCode(goodName.getCode());//商品编码
 						priceBank.setSpecs(goodName.getTypeno());//商品中文规格
+						priceBank.setCnameDescription(goodName.getCnameDescription());//英文描述
 						//查询是否存在
 						LambdaQueryWrapper<PriceBank> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 						lambdaQueryWrapper.eq(PriceBank::getCorpId,priceBank.getCorpId());

+ 4 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderItemsMapper.xml

@@ -67,6 +67,8 @@
         <result column="product_price" property="productPrice"/>
         <result column="good_type" property="goodType"/>
         <result column="item_margin" property="itemMargin"/>
+        <result column="integral_multiples" property="integralMultiples"/>
+        <result column="integral" property="integral"/>
     </resultMap>
 
 
@@ -80,7 +82,8 @@
         bg.cname AS cname,
         bg.Typeno AS typeno,
         bc.cname AS corp,
-        od.busines_date AS businesDate
+        od.busines_date AS businesDate,
+        od.order_no AS orderNo
         FROM
         business_order_items item
         LEFT JOIN business_order od ON item.pid = od.id

+ 2 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.xml

@@ -101,6 +101,8 @@
         <result column="coefficient" property="coefficient"/>
         <result column="special_offer_of" property="specialOfferOf"/>
         <result column="single_ticket_margin" property="singleTicketMargin"/>
+        <result column="convert_integral" property="convertIntegral"/>
+        <result column="presenter_integral" property="presenterIntegral"/>
     </resultMap>
 
 

+ 2 - 0
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/mapper/OrderItemsMapper.xml

@@ -58,6 +58,8 @@
         <result column="product_price" property="productPrice"/>
         <result column="good_type" property="goodType"/>
         <result column="item_margin" property="itemMargin"/>
+        <result column="integral_multiples" property="integralMultiples"/>
+        <result column="integral" property="integral"/>
     </resultMap>
 
 

+ 2 - 0
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/mapper/OrderMapper.xml

@@ -99,6 +99,8 @@
         <result column="sell_pricing_remarks" property="sellPricingRemarks"/>
         <result column="special_offer_of" property="specialOfferOf"/>
         <result column="single_ticket_margin" property="singleTicketMargin"/>
+        <result column="convert_integral" property="convertIntegral"/>
+        <result column="presenter_integral" property="presenterIntegral"/>
     </resultMap>