Browse Source

2023年11月21日17:37:18

纪新园 2 years ago
parent
commit
468347f941

+ 18 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjCorpsDesc.java

@@ -266,4 +266,22 @@ public class PjCorpsDesc implements Serializable {
 	@ApiModelProperty(value = "客户状态")
 	private String checkStatus;
 
+	/**
+	 * 推荐人id
+	 */
+	@ApiModelProperty(value = "推荐人id")
+	private String referenceId;
+
+	/**
+	 * 客户状态
+	 */
+	@ApiModelProperty(value = "推荐人")
+	private String referenceName;
+
+	/**
+	 * 积分余额
+	 */
+	@ApiModelProperty(value = "积分余额")
+	private BigDecimal pointsBalance;
+
 }

+ 21 - 2
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjGoodsDesc.java

@@ -16,13 +16,11 @@
  */
 package org.springblade.salesPart.entity;
 
-import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import org.springblade.core.secure.utils.AuthUtil;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -265,5 +263,26 @@ public class PjGoodsDesc implements Serializable {
 	 */
 	@ApiModelProperty(value = "配套标记")
 	private String matchedMarkings;
+	/**
+	 * 是否是积分商品
+	 */
+	@ApiModelProperty(value = "是否是积分商品")
+	private String whetherIntegral;
+
+	/**
+	 * 兑换积分(推荐人)
+	 */
+	@ApiModelProperty(value = "兑换积分(推荐人)")
+	private BigDecimal referenceIntegral;
+	/**
+	 * 兑换积分(业务员)
+	 */
+	@ApiModelProperty(value = "兑换积分(业务员)")
+	private BigDecimal salesmanIntegral;
+	/**
+	 * 兑换积分
+	 */
+	@ApiModelProperty(value = "兑换积分")
+	private BigDecimal integral;
 
 }

+ 6 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjOrder.java

@@ -422,6 +422,12 @@ public class PjOrder implements Serializable {
 	@ApiModelProperty(value = "二维码交易地址")
 	private String payUrl;
 
+	/**
+	 * 是否是积分商品
+	 */
+	@ApiModelProperty(value = "是否是积分商品")
+	private String whetherIntegral;
+
 	//小程序检索
 	@TableField(exist = false)
 	private String retrieval;

+ 14 - 8
blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescController.java

@@ -103,11 +103,14 @@ public class CorpsDescController extends BladeController {
 			}
 			corpIds.add(descVO.getId());
 		}
-		List<CorpsAddr> corpsAddrList = corpsAddrService.list(new LambdaQueryWrapper<CorpsAddr>()
-			.in(CorpsAddr::getPid, corpIds)
-			.eq(CorpsAddr::getIsDeleted, 0)
-			.eq(CorpsAddr::getStatus, 0)
-			.eq(CorpsAddr::getType, 0));
+		List<CorpsAddr> corpsAddrList = new ArrayList<>();
+		if (corpIds.size() > 0) {
+			corpsAddrList = corpsAddrService.list(new LambdaQueryWrapper<CorpsAddr>()
+				.in(CorpsAddr::getPid, corpIds)
+				.eq(CorpsAddr::getIsDeleted, 0)
+				.eq(CorpsAddr::getStatus, 0)
+				.eq(CorpsAddr::getType, 0));
+		}
 		List<CorpsDesc> corpsDescList = corpsDescService.selectByCorpIds(belongtocompany);
 		List<User> updateUserList = new ArrayList<>();
 		if (adminProfilesIds.length() > 0) {
@@ -128,6 +131,7 @@ public class CorpsDescController extends BladeController {
 		if (CollectionUtils.isNotEmpty(pages.getRecords())) {
 			List<User> finalUpdateUserList = updateUserList;
 			List<CorpsType> finalCorpsTypeList = corpsTypeList;
+			List<CorpsAddr> finalCorpsAddrList = corpsAddrList;
 			pages.getRecords().forEach(item -> {
 				if (StringUtils.isNotBlank(item.getAdminProfiles())) {
 					StringBuilder adminProfilesName = new StringBuilder();
@@ -153,9 +157,11 @@ public class CorpsDescController extends BladeController {
 				}
 				if (!"577435".equals(AuthUtil.getTenantId())) {
 					//获取客户地址
-					List<CorpsAddr> corpsAddrs = corpsAddrList.stream().filter(e -> e.getPid().equals(item.getId())).collect(Collectors.toList());
-					if (corpsAddrs.size() > 0) {
-						item.setAddr(corpsAddrs.get(0).getDetailedAddress());
+					if (finalCorpsAddrList.size()>0){
+						List<CorpsAddr> corpsAddrs = finalCorpsAddrList.stream().filter(e -> e.getPid().equals(item.getId())).collect(Collectors.toList());
+						if (corpsAddrs.size() > 0) {
+							item.setAddr(corpsAddrs.get(0).getDetailedAddress());
+						}
 					}
 				}
 			});

+ 5 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -509,6 +509,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			order.setOrderModifyList(orderModifyList);
 		}
 		if (!order.getTradeType().equals(OrderTypeEnum.IMPORT.getType())) {
+			String status = sysClient.getParamService("rebateRate");
+			BigDecimal rebateRate = new BigDecimal(status).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP);
+			if (order.getAmount().multiply(rebateRate).compareTo(order.getThisUsedProfit()) >= 0) {
+				throw new RuntimeException("使用返利超限" + status + "%");
+			}
 			// 生成毛利润 毛利额
 			List<OrderItems> list = orderItemsService.list(new QueryWrapper<OrderItems>().eq("pid", order.getId()).eq("good_type", 0).eq("is_deleted", 0));
 //			Order orderMessage = new Order();

+ 15 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/controller/OrderController.java

@@ -337,6 +337,20 @@ public class OrderController extends BladeController {
 		return orderService.saveOrderMessage(order);
 	}
 
+	/**
+	 * 小程序积分兑换
+	 */
+	@PostMapping("/integralExchange")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "小程序积分兑换", notes = "传入order")
+	@RepeatSubmit
+	public R integralExchange(@Valid @RequestBody PjOrder order) {
+		if (StringUtils.isBlank(order.getBsType())) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		return orderService.integralExchange(order);
+	}
+
 
 	/**
 	 * 删除 配件销售采购表
@@ -414,7 +428,7 @@ public class OrderController extends BladeController {
 	public R appUpdate(@Valid @RequestBody PjOrder order) {
 		order.setXcxStatus(OrderTypeEnum.RECEIVEDGOODS.getType());
 		order.setStatus(OrderTypeEnum.RECEIVEDGOODS.getType());
-		orderService.updateById(order);
+		orderService.appUpdate(order);
 		return R.success("操作成功");
 	}
 

+ 9 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/IOrderService.java

@@ -156,4 +156,13 @@ public interface IOrderService extends IService<PjOrder> {
 	R todayIncome(PjOrder order);
 
     int corpAnalysis(PjOrder order);
+
+    void appUpdate(PjOrder order);
+
+	/**
+	 * 小程序积分兑换
+	 * @param order
+	 * @return
+	 */
+	R integralExchange(PjOrder order);
 }

+ 235 - 12
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java

@@ -347,6 +347,179 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		return baseMapper.corpAnalysis(order);
 	}
 
+	@Override
+	public void appUpdate(PjOrder order) {
+		if (order.getId() == null || ObjectUtils.isNotNull(order.getCustomerId())) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		PjCorpsDesc corpsDesc = corpsDescMapper.selectById(order.getCustomerId());
+		if (corpsDesc == null) {
+			throw new RuntimeException("未查到客户信息");
+		}
+		PjCorpsDesc reference = null;
+		if (ObjectUtils.isNotNull(corpsDesc.getReferenceId())) {
+			reference = corpsDescMapper.selectById(corpsDesc.getReferenceId());
+		}
+		User user = null;
+		if (ObjectUtils.isNotNull(corpsDesc.getSalesmanId())) {
+			R<User> r = userClient.userInfoById(corpsDesc.getSalesmanId());
+			if (r.isSuccess()) {
+				user = r.getData();
+			}
+		}
+		List<PjOrderItems> pjOrderItemsList = orderItemsMapper.selectList(new LambdaQueryWrapper<PjOrderItems>()
+			.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
+			.eq(PjOrderItems::getIsDeleted, 0)
+			.eq(PjOrderItems::getPid, order.getId()));
+		if (pjOrderItemsList.size() > 0) {
+			List<Long> goodsIds = pjOrderItemsList.stream().map(PjOrderItems::getGoodsId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+			List<PjGoodsDesc> pjGoodsDescList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
+				.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjGoodsDesc::getIsDeleted, 0)
+				.eq(PjGoodsDesc::getEnableOrNot, 0)
+				.in(PjGoodsDesc::getId, goodsIds));
+			for (PjOrderItems item : pjOrderItemsList) {
+				PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(e -> e.getId().equals(item.getGoodsId())).findFirst().orElse(null);
+				if (goodsDesc != null) {
+					//业务员积分
+					if (user != null && ObjectUtils.isNotNull(goodsDesc.getSalesmanIntegral())) {
+						user.setPointsBalance(user.getPointsBalance().add(goodsDesc.getSalesmanIntegral().multiply(item.getGoodsNum())));
+					}
+					//推荐人积分
+					if (reference != null && ObjectUtils.isNotNull(goodsDesc.getReferenceIntegral())) {
+						reference.setPointsBalance(reference.getPointsBalance().add(goodsDesc.getReferenceIntegral().multiply(item.getGoodsNum())));
+					}
+					//客户门店积分
+					corpsDesc.setPointsBalance(corpsDesc.getPointsBalance().add(goodsDesc.getIntegral().multiply(item.getGoodsNum())));
+				}
+			}
+		}
+		if (reference != null) {
+			corpsDescMapper.updateById(reference);
+		}
+		if (user != null) {
+			userClient.updateUser(user);
+		}
+		corpsDescMapper.updateById(corpsDesc);
+		baseMapper.updateById(order);
+	}
+
+	@Override
+	public R integralExchange(PjOrder order) {
+		//客户名称
+		PjCorpsDesc corpsDesc = corpsDescMapper.selectById(order.getCustomerId());
+		order.setCustomerName(corpsDesc.getCname());
+
+		// 获取系统编号
+		R billNo = serialClient.getBillNo(order.getBsType(), order.getBsType(), order.getBsType());
+		if (billNo.getCode() != 200) {
+			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+			return R.fail(500, "生成系统编号失败");
+		}
+		if (order.getId() == null) {
+			if (ObjectUtils.isNull(order.getBillType())) {
+				if (ObjectUtils.isNotNull(order.getStorageId())) {
+					order.setBillType(0);
+					//仓库名称
+					order.setStorageName(storageDescMapper.selectById(order.getStorageId()).getCname());
+				} else {
+					order.setBillType(1);
+				}
+			}
+			order.setWhetherIntegral("1");
+			order.setOrdNo((String) billNo.getData());
+			order.setSrcOrdNo((String) billNo.getData());
+			order.setCreateTime(new Date());
+			order.setCreateUser(AuthUtil.getUserId());
+			order.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+			order.setTenantId(AuthUtil.getTenantId());
+			order.setStatus(OrderTypeEnum.XSLR.getType());
+			order.setBusinessSource(OrderTypeEnum.WEB.getType());
+			order.setActualPaymentStatus(1);
+			baseMapper.insert(order);
+		} else {
+			order.setUpdateUser(AuthUtil.getUserId());
+			order.setUpdateTime(new Date());
+			baseMapper.updateById(order);
+		}
+		// 保存订单明细
+		if (CollectionUtils.isNotEmpty(order.getOrderItemsList())) {
+			//所属公司
+			R<Dept> dept = sysClient.getDept(Long.valueOf(AuthUtil.getDeptId()));
+			if (ObjectUtil.isNotEmpty(dept)) {
+				order.setSalesCompanyId(dept.getData().getId());
+				order.setSalesCompanyName(dept.getData().getFullName());
+				if (ObjectUtils.isNotNull(order.getBillType()) && 1 != order.getBillType()) {
+					order.setSharedCompanyId(dept.getData().getId());
+					order.setSharedCompanyName(dept.getData().getFullName());
+				} else {
+					order.setSharedCompanyId(order.getSharedCompanyId());
+					order.setSharedCompanyName(order.getSharedCompanyName());
+				}
+			} else {
+				throw new SecurityException("未维护所属公司");
+			}
+			StringBuilder goodsName = new StringBuilder();
+			StringBuilder retrieval = new StringBuilder();
+			for (PjOrderItems item : order.getOrderItemsList()) {
+				item.setBizType(order.getBsType());
+				item.setBillNo(order.getOrdNo());
+				if (item.getId() == null) {
+					item.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+					item.setCreateTime(new Date());
+					item.setCreateUser(AuthUtil.getUserId());
+					item.setPid(order.getId());
+					item.setTenantId(AuthUtil.getTenantId());
+					orderItemsMapper.insert(item);
+				} else {
+					item.setUpdateTime(new Date());
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setPid(order.getId());
+					orderItemsMapper.updateById(item);
+				}
+				//计算小计
+				item.setSubTotalMoney(item.getGoodsNum().multiply(item.getPrice()));
+
+				//获得商品
+				PjGoodsDesc goodsDesc = goodsDescMapper.selectById(item.getGoodsId());
+				if (ObjectUtil.isEmpty(goodsDesc)) {
+					throw new RuntimeException("商品数据异常");
+				}
+				item.setBrandName(goodsDesc.getBrandName());
+				goodsName = goodsName.append(goodsDesc.getCname()).append(",");
+				retrieval = retrieval.append(goodsDesc.getCnameInt()).append(",");
+				orderItemsMapper.updateById(item);
+			}
+			if (goodsName.length() > 0) {
+				order.setGoodsNameJoin(goodsName.substring(0, goodsName.length() - 1));
+			}
+			if (retrieval.length() > 0) {
+				order.setShortcutJoin(retrieval.substring(0, retrieval.length() - 1));
+			}
+			BigDecimal totalMoney = BigDecimal.ZERO;
+			order.setNumberRows(order.getOrderItemsList().size());//行数
+			//总数量
+			order.setGoodsTotalNum(order.getOrderItemsList().stream().filter(e -> e.getGoodsNum() != null).map(PjOrderItems::getGoodsNum).reduce(BigDecimal.ZERO, BigDecimal::add));
+			//总已发数量
+			order.setGoodsTotalShipNum(order.getOrderItemsList().stream().filter(e -> e.getSendNum() != null).map(PjOrderItems::getSendNum).reduce(BigDecimal.ZERO, BigDecimal::add));
+			//总金额
+			totalMoney = order.getOrderItemsList().stream().reduce(BigDecimal.ZERO, (x, y) -> {
+				return x.add(y.getGoodsNum().multiply(y.getPrice()));
+			}, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+
+			if (totalMoney.compareTo(corpsDesc.getPointsBalance()) > 0) {
+				throw new RuntimeException("积分余额不足,兑换失败");
+			} else {
+				corpsDesc.setPointsBalance(corpsDesc.getPointsBalance().subtract(totalMoney));
+			}
+			order.setSalesAmount(totalMoney);
+			order.setTotalMoney(totalMoney);
+		}
+		corpsDescMapper.updateById(corpsDesc);
+		baseMapper.updateById(order);
+		return R.data(order);
+	}
+
 	/**
 	 * 保存订单信息
 	 *
@@ -1094,6 +1267,54 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 			throw new SecurityException("审批通过失败");
 		}
 		if ("XS".equals(order.getBsType())) {
+			PjCorpsDesc corpsDesc = corpsDescMapper.selectById(order.getCustomerId());
+			if (corpsDesc == null) {
+				throw new RuntimeException("未查到客户信息");
+			}
+			PjCorpsDesc reference = null;
+			if (ObjectUtils.isNotNull(corpsDesc.getReferenceId())) {
+				reference = corpsDescMapper.selectById(corpsDesc.getReferenceId());
+			}
+			User user = null;
+			if (ObjectUtils.isNotNull(corpsDesc.getSalesmanId())) {
+				R<User> r = userClient.userInfoById(corpsDesc.getSalesmanId());
+				if (r.isSuccess()) {
+					user = r.getData();
+				}
+			}
+			//根据主表id获得明细数据
+			List<PjOrderItems> list = orderItemsMapper.selectList(new QueryWrapper<PjOrderItems>()
+				.eq("pid", order.getId())
+				.eq("is_deleted", 0)
+				.eq("tenant_id", AuthUtil.getTenantId()));
+			List<Long> goodsIds = list.stream().map(PjOrderItems::getGoodsId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+			List<PjGoodsDesc> pjGoodsDescList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
+				.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjGoodsDesc::getIsDeleted, 0)
+				.eq(PjGoodsDesc::getEnableOrNot, 0)
+				.in(PjGoodsDesc::getId, goodsIds));
+			for (PjOrderItems e : list) {
+				PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(item -> item.getId().equals(e.getGoodsId())).findFirst().orElse(null);
+				if (goodsDesc != null) {
+					//业务员积分
+					if (user != null && ObjectUtils.isNotNull(goodsDesc.getSalesmanIntegral())) {
+						user.setPointsBalance(user.getPointsBalance().subtract(goodsDesc.getSalesmanIntegral().multiply(e.getGoodsNum())));
+					}
+					//推荐人积分
+					if (reference != null && ObjectUtils.isNotNull(goodsDesc.getReferenceIntegral())) {
+						reference.setPointsBalance(reference.getPointsBalance().subtract(goodsDesc.getReferenceIntegral().multiply(e.getGoodsNum())));
+					}
+					//客户门店积分
+					corpsDesc.setPointsBalance(corpsDesc.getPointsBalance().subtract(goodsDesc.getIntegral().multiply(e.getGoodsNum())));
+				}
+			}
+			if (reference != null) {
+				corpsDescMapper.updateById(reference);
+			}
+			if (user != null) {
+				userClient.updateUser(user);
+			}
+			corpsDescMapper.updateById(corpsDesc);
 			if (OrderTypeEnum.SHIPED.getType().equals(order.getOriginalStatus())
 				|| OrderTypeEnum.RECEIVEDGOODS.getType().equals(order.getOriginalStatus())) {//已发货
 				if ("已取消".equals(order.getStatus())) {
@@ -1129,13 +1350,21 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				pjShip.setCreateUser(AuthUtil.getUserId());
 				pjShip.setCreateTime(new Date());
 				shipMapper.insert(pjShip);
-				//根据主表id获得明细数据
-				List<PjOrderItems> list = orderItemsMapper.selectList(new QueryWrapper<PjOrderItems>()
-					.eq("pid", order.getId())
-					.eq("is_deleted", 0)
-					.eq("tenant_id", AuthUtil.getTenantId()));
 				if (ObjectUtil.isNotEmpty(list)) {
 					for (PjOrderItems e : list) {
+						PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(item -> item.getId().equals(e.getGoodsId())).findFirst().orElse(null);
+						if (goodsDesc != null) {
+							//业务员积分
+							if (user != null && ObjectUtils.isNotNull(goodsDesc.getSalesmanIntegral())) {
+								user.setPointsBalance(user.getPointsBalance().add(goodsDesc.getSalesmanIntegral().multiply(e.getGoodsNum())));
+							}
+							//推荐人积分
+							if (reference != null && ObjectUtils.isNotNull(goodsDesc.getReferenceIntegral())) {
+								reference.setPointsBalance(reference.getPointsBalance().add(goodsDesc.getReferenceIntegral().multiply(e.getGoodsNum())));
+							}
+							//客户门店积分
+							corpsDesc.setPointsBalance(corpsDesc.getPointsBalance().add(goodsDesc.getIntegral().multiply(e.getGoodsNum())));
+						}
 						if (ObjectUtils.isNull(e.getSendNum()) || e.getSendNum().compareTo(new BigDecimal("0.00")) == 0) {
 							continue;
 						} else {
@@ -1174,13 +1403,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					List<Long> ids = shipList.stream().map(PjShip::getId).collect(Collectors.toList());
 					shipMapper.deleteBatchIds(ids);
 				}
-
 				//修改库存账信息
-				//根据主表id获得明细数据
-				List<PjOrderItems> list = orderItemsMapper.selectList(new QueryWrapper<PjOrderItems>()
-					.eq("pid", order.getId())
-					.eq("is_deleted", 0)
-					.eq("tenant_id", AuthUtil.getTenantId()));
 				if (CollectionUtils.isNotEmpty(list)) {
 					list.forEach(item -> {
 						if (item.getId() == null) {
@@ -1342,7 +1565,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		BigDecimal amount = orderList.stream().map(PjOrder::getTotalMoney).filter(ObjectUtils::isNotNull).reduce(BigDecimal.ZERO, BigDecimal::add);
 		List<PjOrderItems> pjOrderItems = orderItemsMapper.selectList(new LambdaQueryWrapper<PjOrderItems>().in(PjOrderItems::getPid, ids));
 		String goodsNames = pjOrderItems.stream().map(PjOrderItems::getGoodsName).collect(Collectors.joining());
-		return payService.payPrepay(orderId.substring(0, orderId.length() - 1), amount, srcOrderNo, 1, goodsNames,null);
+		return payService.payPrepay(orderId.substring(0, orderId.length() - 1), amount, srcOrderNo, 1, goodsNames, null);
 	}
 
 	/**