提交 a4207003 authored 作者: Whispa's avatar Whispa

improvements

上级 2cffbc94
...@@ -160,11 +160,18 @@ public class OrderController extends Controller { ...@@ -160,11 +160,18 @@ public class OrderController extends Controller {
orderPrice = orderPrice.add(cart.getItemPrice().multiply(new BigDecimal(cart.getItemNum()))); orderPrice = orderPrice.add(cart.getItemPrice().multiply(new BigDecimal(cart.getItemNum())));
} }
Map<String, Object> couponMap = queryUserAvailableCoupons(orderPrice); Map<String, Object> couponMap = queryUserAvailableCoupons(orderPrice);
int code = ResultCodeEnum.VALIDATE_ERROR.getCode();
if (allByUserId.isEmpty()) { if (allByUserId.isEmpty()) {
return new Result<>(ResultCodeEnum.VALIDATE_ERROR.getCode(), "There are no items in the shopping cart"); return new Result<>(code, "There are no items in the shopping cart");
} }
//Check that one of items in the cart run out of stock
////Check whether the inventory is greater than the purchased quantity before placing an order
boolean anyMatch = allByUserId.stream().anyMatch(TbCfCartRecordR::isOutOfStock);
if( anyMatch ) return new Result<>(code, "Items run out of stock");
TbCfOrder order = new TbCfOrder(); TbCfOrder order = new TbCfOrder();
order.setCouponMap(couponMap); order.setCouponMap(couponMap);
Optional<TbCfExpressTemplate> templateOptional = templateRepository.findFirstByIsDefault(1); Optional<TbCfExpressTemplate> templateOptional = templateRepository.findFirstByIsDefault(1);
...@@ -269,6 +276,13 @@ public class OrderController extends Controller { ...@@ -269,6 +276,13 @@ public class OrderController extends Controller {
} }
// Map<String, Object> map = queryUserAvailableCoupons(orderPrice); // Map<String, Object> map = queryUserAvailableCoupons(orderPrice);
//Check that one of items in the cart run out of stock
//Check whether the inventory is greater than the purchased quantity before placing an order
boolean anyMatch = allByUserId.stream().anyMatch(TbCfCartRecordR::isOutOfStock);
if( anyMatch ) return new Result<>(v_code, "Items run out of stock");
String addressId = tbCfOrder.getDeliveryAddressId(); String addressId = tbCfOrder.getDeliveryAddressId();
if (addressId == null || addressId.isEmpty()) return new Result<>(v_code, "Address id is required"); if (addressId == null || addressId.isEmpty()) return new Result<>(v_code, "Address id is required");
...@@ -345,10 +359,15 @@ public class OrderController extends Controller { ...@@ -345,10 +359,15 @@ public class OrderController extends Controller {
String[] strings = collect.toArray(new String[]{}); String[] strings = collect.toArray(new String[]{});
if (payNow) { if (payNow) {
//Automatically remove the shelf when the stock is insufficient
cartRepository.updateItemShelf_(itemId,itemNum);
//Inventory reduction for pay now item //Inventory reduction for pay now item
cartRepository.updateItemQuantity_(itemId, itemNum); cartRepository.updateItemQuantity_(itemId, itemNum);
cartRepository.updateSkuQuantity_(itemSkuId, itemNum); cartRepository.updateSkuQuantity_(itemSkuId, itemNum);
} else { } else {
//Automatically remove the shelf when the stock is insufficient
cartRepository.updateItemsShelf(strings);
//Inventory reduction for cart items //Inventory reduction for cart items
cartRepository.updateSkuQuantity(strings); cartRepository.updateSkuQuantity(strings);
cartRepository.updateItemQuantity(strings); cartRepository.updateItemQuantity(strings);
......
package com.example.afrishop_v3.models; package com.example.afrishop_v3.models;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Formula; import org.hibernate.annotations.Formula;
import org.hibernate.annotations.Where; import org.hibernate.annotations.Where;
...@@ -94,6 +95,10 @@ public class TbCfCartRecordR { ...@@ -94,6 +95,10 @@ public class TbCfCartRecordR {
@Formula(value = "(SELECT st.discount_price FROM tb_cf_station_item st WHERE st.item_id=item_id limit 1)") @Formula(value = "(SELECT st.discount_price FROM tb_cf_station_item st WHERE st.item_id=item_id limit 1)")
private BigDecimal realItemPrice; private BigDecimal realItemPrice;
@JsonIgnore
@Formula(value = "(SELECT st.item_count FROM tb_cf_station_item st WHERE st.item_id=item_id limit 1)")
private Integer itemCount;
@Formula(value = "(SELECT sk.sku_price FROM tb_cf_item_skus sk WHERE sk.id=item_sku_id limit 1)") @Formula(value = "(SELECT sk.sku_price FROM tb_cf_item_skus sk WHERE sk.id=item_sku_id limit 1)")
private BigDecimal skuPrice; private BigDecimal skuPrice;
...@@ -119,6 +124,10 @@ public class TbCfCartRecordR { ...@@ -119,6 +124,10 @@ public class TbCfCartRecordR {
return skuPrice != null ? skuPrice : realItemPrice !=null ? realItemPrice : itemPrice; return skuPrice != null ? skuPrice : realItemPrice !=null ? realItemPrice : itemPrice;
} }
public boolean isOutOfStock(){
return itemCount != null && itemNum != null && itemCount < itemNum;
}
public BigDecimal getItemPriceTotal() { public BigDecimal getItemPriceTotal() {
return itemPrice.multiply(BigDecimal.valueOf(itemNum)); return itemPrice.multiply(BigDecimal.valueOf(itemNum));
} }
......
...@@ -812,6 +812,11 @@ public class TbCfOrder { ...@@ -812,6 +812,11 @@ public class TbCfOrder {
this.couponId = couponId; this.couponId = couponId;
} }
public void setOpen(boolean open) {
this.open = open;
}
/** /**
* 获取:优惠券id * 获取:优惠券id
*/ */
......
...@@ -18,8 +18,10 @@ public interface TbCfCartRecordRRepository extends PagingAndSortingRepository<Tb ...@@ -18,8 +18,10 @@ public interface TbCfCartRecordRRepository extends PagingAndSortingRepository<Tb
Optional<TbCfCartRecordR> findFirstByUserIdAndItemImgAndItemSku(String userId, String itemImg, String itemSku); Optional<TbCfCartRecordR> findFirstByUserIdAndItemImgAndItemSku(String userId, String itemImg, String itemSku);
Optional<TbCfCartRecordR> findFirstByUserIdAndSourceItemIdAndItemSku(String userId, String sourceItemId, String itemSku); Optional<TbCfCartRecordR> findFirstByUserIdAndSourceItemIdAndItemSku(String userId, String sourceItemId, String itemSku);
@Query(value = "select a from #{#entityName} a left join TbCfStationItem x on a.itemId=x.itemId WHERE a.userId=:userId and (x.enableFlag =1 or x.enableFlag IS NULL) order by a.createTime desc ")
@Query(value = "select a from #{#entityName} a left join TbCfStationItem x on a.itemId=x.itemId WHERE a.userId=:userId and ((x.enableFlag = 1 and x.itemCount >= a.itemNum) or x.enableFlag IS NULL) order by a.createTime desc ")
List<TbCfCartRecordR> findAllByUserIdOrderByCreateTimeDesc(@Param("userId") String userId); List<TbCfCartRecordR> findAllByUserIdOrderByCreateTimeDesc(@Param("userId") String userId);
List<TbCfCartRecordR> findAllByCartRecordIdIn(String[] ids); List<TbCfCartRecordR> findAllByCartRecordIdIn(String[] ids);
...@@ -28,18 +30,27 @@ public interface TbCfCartRecordRRepository extends PagingAndSortingRepository<Tb ...@@ -28,18 +30,27 @@ public interface TbCfCartRecordRRepository extends PagingAndSortingRepository<Tb
void deleteAllByCartRecordIdIn(String[] ids); void deleteAllByCartRecordIdIn(String[] ids);
@Modifying @Modifying
@Query(value = "update tb_cf_item_skus sk INNER JOIN tb_cf_cart_record_r r ON r.item_sku_id=sk.id set sk.sku_count=sk.sku_count-r.item_num WHERE r.cart_record_id IN :ids ",nativeQuery = true) @Query(value = "update tb_cf_item_skus sk INNER JOIN tb_cf_cart_record_r r ON r.item_sku_id=sk.id set sk.sku_count=sk.sku_count-r.item_num WHERE r.cart_record_id IN :ids ", nativeQuery = true)
void updateSkuQuantity(@Param("ids") String[] ids); void updateSkuQuantity(@Param("ids") String[] ids);
@Modifying @Modifying
@Query(value = "update tb_cf_station_item sk INNER JOIN tb_cf_cart_record_r r ON r.item_id=sk.item_id set sk.item_count=sk.item_count-r.item_num WHERE r.cart_record_id IN :ids ",nativeQuery = true) @Query(value = "update tb_cf_station_item sk INNER JOIN tb_cf_cart_record_r r ON r.item_id=sk.item_id set sk.item_count=sk.item_count-r.item_num WHERE r.cart_record_id IN :ids ", nativeQuery = true)
void updateItemQuantity(@Param("ids") String[] ids); void updateItemQuantity(@Param("ids") String[] ids);
@Modifying @Modifying
@Query(value = "update tb_cf_item_skus sk set sk.sku_count=sk.sku_count-:val WHERE sk.id = :id ",nativeQuery = true) @Query(value = "update tb_cf_station_item sk INNER JOIN tb_cf_cart_record_r r ON r.item_id=sk.item_id set sk.enable_flag=0 WHERE sk.item_count-r.item_num<=0 and r.cart_record_id IN :ids ", nativeQuery = true)
void updateSkuQuantity_(@Param("id") String id,@Param("val") int count); void updateItemsShelf(@Param("ids") String[] ids);
@Modifying
@Query(value = "update tb_cf_item_skus sk set sk.sku_count=sk.sku_count-:val WHERE sk.id = :id ", nativeQuery = true)
void updateSkuQuantity_(@Param("id") String id, @Param("val") int count);
@Modifying
@Query(value = "update tb_cf_station_item sk set sk.item_count=sk.item_count-:val WHERE sk.item_id = :id ", nativeQuery = true)
void updateItemQuantity_(@Param("id") String id, @Param("val") int count);
@Modifying @Modifying
@Query(value = "update tb_cf_station_item sk set sk.item_count=sk.item_count-:val WHERE sk.item_id = :id ",nativeQuery = true) @Query(value = "update tb_cf_station_item sk set sk.enable_flag=0 WHERE sk.item_id = :id and sk.item_count-:val<=0 ", nativeQuery = true)
void updateItemQuantity_(@Param("id") String id,@Param("val") int count); void updateItemShelf_(@Param("id") String id, @Param("val") int count);
} }
...@@ -17,4 +17,11 @@ public class Condition { ...@@ -17,4 +17,11 @@ public class Condition {
private double key; private double key;
private double value; private double value;
public double getKey() {
return key;
}
public double getValue() {
return value;
}
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论