Przeglądaj źródła

退货时减去红包金额

liyuan 2 dni temu
rodzic
commit
222279769b

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

@@ -427,4 +427,7 @@ public class PjOrderItems implements Serializable {
 
 	private String couponIds;
 
+	@TableField(exist = false)
+	private BigDecimal redPacketAmount;
+
 }

+ 11 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/coupon/mapper/TireUserCouponMapper.java

@@ -40,4 +40,15 @@ public interface TireUserCouponMapper extends BaseMapper<TireUserCoupon> {
 	 * @return 结果
 	 */
 	int restoreCoupon(@Param("id") Long id, @Param("status") int status, @Param("tenantId") String tenantId);
+
+
+	/**
+	 * 获取用户优惠券列表, 不限制日期
+	 *
+	 * @param shopId   用户ID
+	 * @param tenantId 租户ID
+	 * @return 结果
+	 */
+	@TenantIgnore
+	List<TireUserCouponDto> getUserCouponNotDateList(@Param("shopId") Long shopId, @Param("tenantId") String tenantId);
 }

+ 18 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/coupon/mapper/TireUserCouponMapper.xml

@@ -67,6 +67,7 @@
         SELECT
             tuc.id,
             tuc.user_id,
+            tuc.corps_id,
             tuc.coupon_id,
             tuc.effective_start,
             tuc.effective_end,
@@ -81,4 +82,21 @@
           AND tuc.`status` = 0
           AND  CURDATE() BETWEEN tuc.effective_start AND tuc.effective_end;
     </select>
+    <select id="getUserCouponNotDateList" resultMap="userCouponResultMap">
+        SELECT
+            tuc.id,
+            tuc.user_id,
+            tuc.corps_id,
+            tuc.coupon_id,
+            tuc.effective_start,
+            tuc.effective_end,
+            tc.title,
+            tc.`value` AS couponValue
+        FROM
+            tire_user_coupon tuc
+                INNER JOIN tire_coupon tc ON tuc.coupon_id = tc.id
+        WHERE
+            tuc.corps_id = #{shopId}
+          AND tuc.tenant_id = #{tenantId}
+    </select>
 </mapper>

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

@@ -49,7 +49,10 @@ import org.springblade.salesPart.check.service.IAuditPathsActsService;
 import org.springblade.salesPart.check.service.IAuditPathsLevelsService;
 import org.springblade.salesPart.check.service.IAuditProecessService;
 import org.springblade.salesPart.corps.mapper.CorpsDescMapper;
+import org.springblade.salesPart.coupon.dto.TireUserCouponDto;
+import org.springblade.salesPart.coupon.entity.TireCoupon;
 import org.springblade.salesPart.coupon.entity.TireUserCoupon;
+import org.springblade.salesPart.coupon.mapper.TireCouponMapper;
 import org.springblade.salesPart.coupon.mapper.TireUserCouponMapper;
 import org.springblade.salesPart.dto.FinancingProcurement;
 import org.springblade.salesPart.dto.SaleDetail;
@@ -206,6 +209,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 
 	private final TireUserCouponMapper tireUserCouponMapper;
 
+	private final TireCouponMapper tireCouponMapper;
+
 
 	/**
 	 * 获取销售订单详情
@@ -1440,15 +1445,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
 			return R.fail(500, "生成系统编号失败");
 		}
-
+		BladeUser returnUser = AuthUtil.getUser();
 		if (order.getBsType().equals(OrderTypeEnum.TKSALES.getType())) {//销售
 			if (order.getId() == null) {
 				order.setOrdNo(billNo);
 				order.setSrcOrdNo(billNo);
 				order.setCreateTime(new Date());
-				order.setCreateUser(AuthUtil.getUserId());
-				order.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
-				order.setTenantId(AuthUtil.getTenantId());
+				order.setCreateUser(returnUser.getUserId());
+				order.setCreateDept(Long.valueOf(returnUser.getDeptId()));
+				order.setTenantId(returnUser.getTenantId());
 				order.setStatus(OrderTypeEnum.XSLR.getType());
 				order.setBusinessSource(OrderTypeEnum.WEB.getType());
 				order.setActualPaymentStatus(1);
@@ -1469,7 +1474,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					throw new RuntimeException("订单数据已被修改,请返回列表重新操作!");
 				}
 				order.setVersion(order.getVersion() + 1);
-				order.setUpdateUser(AuthUtil.getUserId());
+				order.setUpdateUser(returnUser.getUserId());
 				order.setUpdateTime(new Date());
 				baseMapper.updateById(order);
 			}
@@ -1509,6 +1514,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 						}
 					}
 				}
+				List<TireUserCouponDto> tireUserCouponDtoList = tireUserCouponMapper.getUserCouponNotDateList(order.getCustomerId(), returnUser.getTenantId());
 				for (PjOrderItems item : order.getOrderItemsList()) {
 					item.setBillKey(item.getGoodsId() + item.getDot());
 				}
@@ -1535,6 +1541,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					}
 					//计算小计
 					item.setReturnsAmount(item.getReturnsNumber().multiply(item.getPrice()));
+					if (StringUtil.isNotBlank(item.getCouponIds())) {
+						List<Long> useCouponIds = Arrays.stream(item.getCouponIds().split(",")).map(Long::parseLong).collect(Collectors.toList());
+						List<TireUserCouponDto> useCouponList = tireUserCouponDtoList.stream().filter(e -> useCouponIds.contains(e.getId())).collect(Collectors.toList());
+						if (useCouponIds.size() != useCouponList.size()) {
+							throw new NullPointerException("该订单使用的红包,但无法找到红包数据,故不能生成退货单");
+						}
+						BigDecimal userCouponAmount = useCouponList.stream().map(TireUserCouponDto::getCouponValue).reduce(BigDecimal.ZERO, BigDecimal::add);
+						item.setReturnsAmount(item.getReturnsAmount().subtract(userCouponAmount));
+					}
 					//获得商品
 					PjGoodsDesc goodsDesc = goodsDescMapper.selectById(item.getGoodsId());
 					if (ObjectUtil.isEmpty(goodsDesc)) {
@@ -2419,6 +2434,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		List<PjOrderItems> list = orderItemsService.list(itemsLambdaQueryWrapper);
 		List<PjOrderItems> pjOrderItemsList = new ArrayList<>();
 		if (!list.isEmpty()) {
+			List<TireUserCouponDto> tireUserCouponDtoList = tireUserCouponMapper.getUserCouponNotDateList(detail.getCustomerId(), detail.getTenantId());
 			List<Long> goodsId = list.stream().map(PjOrderItems::getGoodsId).distinct().collect(Collectors.toList());
 			List<PjStockDesc> pjStockDescList = stockDescService.list(new LambdaQueryWrapper<PjStockDesc>()
 				.eq(ObjectUtils.isNotNull(detail.getStorageId()), PjStockDesc::getStorageId, detail.getStorageId())
@@ -2429,8 +2445,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				PjOrderItems pjOrderItems = new PjOrderItems();
 				BeanUtil.copyProperties(item, pjOrderItems);
 				pjOrderItems.setReturnsNumber(item.getGoodsNum().subtract(item.getReturnsNumber()));
-				pjOrderItems.setReturnsAmount(item.getReturnsNumber().multiply(item.getPrice()));
-				pjOrderItems.setSendNum(new BigDecimal("0.00"));
+				pjOrderItems.setReturnsAmount(pjOrderItems.getReturnsNumber().multiply(item.getPrice()));
+				pjOrderItems.setSendNum(FinalMap.ZERO_POINT_ZERO);
 				pjOrderItems.setId(null);
 				pjOrderItems.setPid(null);
 				pjOrderItems.setBsType(details.getBsType());
@@ -2451,6 +2467,16 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				if (stockDesc != null) {
 					pjOrderItems.setInventory(stockDesc.getBalanceQuantity());
 				}
+				if (StringUtil.isNotBlank(item.getCouponIds())) {
+					List<Long> useCouponIds = Arrays.stream(item.getCouponIds().split(",")).map(Long::parseLong).collect(Collectors.toList());
+					List<TireUserCouponDto> useCouponList = tireUserCouponDtoList.stream().filter(e -> useCouponIds.contains(e.getId())).collect(Collectors.toList());
+					if (useCouponIds.size() != useCouponList.size()) {
+						throw new NullPointerException("该订单使用的红包,但无法找到红包数据,故不能生成退货单");
+					}
+					BigDecimal userCouponAmount = useCouponList.stream().map(TireUserCouponDto::getCouponValue).reduce(BigDecimal.ZERO, BigDecimal::add);
+					pjOrderItems.setRedPacketAmount(BigDecimal.ZERO.compareTo(userCouponAmount) < 0 ? userCouponAmount.divide(new BigDecimal(useCouponList.size()), RoundingMode.HALF_UP) : userCouponAmount);
+					pjOrderItems.setReturnsAmount(pjOrderItems.getReturnsAmount().subtract(userCouponAmount));
+				}
 				pjOrderItemsList.add(pjOrderItems);
 			}
 		}