feat: 点单支持套餐商品

This commit is contained in:
张松
2024-12-04 11:42:26 +08:00
parent 2eeb90758a
commit a365c5b56e
6 changed files with 83 additions and 5 deletions

View File

@@ -20,6 +20,23 @@ public interface TableConstant {
}
}
class Product {
@Getter
public enum Type {
NORMAL("normal"), PACKAGE("package");
private final String value;
Type(String value) {
this.value = value;
}
public boolean equalsVals(String value) {
return this.value.equals(value);
}
}
}
class ShopTable {
@Getter
public enum State {

View File

@@ -42,7 +42,7 @@ public class OrderController {
String userId = jsonObject.getString("accountId");
return orderService.createCart(cartVo.getMasterId(), cartVo.getProductId(), cartVo.getShopId(), cartVo.getSkuId(),
cartVo.getNumber(), userId, clientType, cartVo.getCartId(), cartVo.getIsGift(),
cartVo.getIsPack(), cartVo.getUuid(), cartVo.getType(), cartVo.getTableId(), cartVo.getIsPrint());
cartVo.getIsPack(), cartVo.getUuid(), cartVo.getType(), cartVo.getTableId(), cartVo.getIsPrint(), cartVo.getGroupProductIdList());
}
@PutMapping("/print")

View File

@@ -86,6 +86,7 @@ public class TbCashierCart implements Serializable {
private Integer isPrint;
private String useCouponInfo;
private int isThirdCoupon;
private String proGroupInfo;
public void copy(TbCashierCart source) {
BeanUtil.copyProperties(source, this, CopyOptions.create().setIgnoreNullValue(true));

View File

@@ -62,7 +62,6 @@ public class TbOrderDetail implements Serializable {
private BigDecimal discountSaleAmount;
private String discountSaleNote;
private String proGroupInfo;
}

View File

@@ -7,6 +7,7 @@ import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
@Data
public class CartVo {
@@ -27,4 +28,7 @@ public class CartVo {
private String tableId;
private Integer orderId;
private Integer isPrint;
// 套餐商品选择的id信息
private List<Integer> groupProductIdList;
}

View File

@@ -23,6 +23,7 @@ import com.chaozhanggui.system.cashierservice.entity.po.OrderPo;
import com.chaozhanggui.system.cashierservice.entity.po.QueryCartPo;
import com.chaozhanggui.system.cashierservice.entity.po.SkuInfoPo;
import com.chaozhanggui.system.cashierservice.entity.vo.CartVo;
import com.chaozhanggui.system.cashierservice.entity.vo.ProductGroupVo;
import com.chaozhanggui.system.cashierservice.exception.MsgException;
import com.chaozhanggui.system.cashierservice.exception.NotPrintException;
import com.chaozhanggui.system.cashierservice.mybatis.*;
@@ -31,7 +32,6 @@ import com.chaozhanggui.system.cashierservice.rabbit.RabbitProducer;
import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
import com.chaozhanggui.system.cashierservice.sign.Result;
import com.chaozhanggui.system.cashierservice.util.*;
import com.fasterxml.jackson.core.io.BigDecimalParser;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -215,9 +215,56 @@ public class OrderService {
shopId, tableId, isTakeout ? OrderSendTypeEnums.TAKE_SELF.getValue() : OrderSendTypeEnums.TABLE.getValue());
}
/**
* 重置购物车套餐商品信息
*/
private void resetGroupProductCart(List<Integer> productIds, TbProduct product, TbCashierCart cashierCart) {
boolean isChoseGroup = TableConstant.Product.Type.PACKAGE.equalsVals(product.getType()) && product.getGroupType() == 1;
boolean isFixGroup = TableConstant.Product.Type.PACKAGE.equalsVals(product.getType()) && product.getGroupType() == 0;
if (isChoseGroup && productIds != null && !productIds.isEmpty()) {
String groupSnap = product.getGroupSnap();
if (StrUtil.isNotBlank(groupSnap)) {
ArrayList<ProductGroupVo.Food> foods = new ArrayList<>();
HashMap<String, ProductGroupVo.Food> groupVoHashMap = new HashMap<>();
JSONObject.parseArray(groupSnap).forEach(item -> {
ProductGroupVo productGroupVo = ((JSONObject) item).toJavaObject(ProductGroupVo.class);
productGroupVo.getGoods().forEach(goods -> {
groupVoHashMap.put(goods.getProId().toString(), goods);
});
});
productIds.forEach(item -> {
ProductGroupVo.Food food = groupVoHashMap.get(item.toString());
if (food == null) {
throw new MsgException("存在无效套餐商品");
}
foods.add(food);
});
cashierCart.setProGroupInfo(JSONObject.toJSONString(foods));
}
}else if (isFixGroup) {
String groupSnap = product.getGroupSnap();
if (StrUtil.isNotBlank(groupSnap)) {
ArrayList<ProductGroupVo.Food> foods = new ArrayList<>();
HashMap<String, ProductGroupVo.Food> groupVoHashMap = new HashMap<>();
JSONObject.parseArray(groupSnap).forEach(item -> {
ProductGroupVo productGroupVo = ((JSONObject) item).toJavaObject(ProductGroupVo.class);
productGroupVo.getGoods().forEach(goods -> {
groupVoHashMap.put(goods.getProId().toString(), goods);
});
});
cashierCart.setProGroupInfo(JSONObject.toJSONString(groupVoHashMap.values()));
}
}
}
@Transactional(rollbackFor = Exception.class)
public Result createCart(String masterId, Integer productId, Integer shopId, Integer skuId, BigDecimal number,
String userId, String clientType, Integer cartId, String isGift, String isPack, String uuid, String type, String tableId, Integer isPrint) {
String userId, String clientType, Integer cartId, String isGift, String isPack, String uuid,
String type, String tableId, Integer isPrint, List<Integer> groupProductIdList) {
if (number == null) {
return Result.fail(CodeEnum.PARAM);
}
@@ -353,6 +400,9 @@ public class OrderService {
cart.resetTotalAmount();
cart.setUuid(uuid);
cart.setIsPrint(isPrint);
if (product != null) {
resetGroupProductCart(groupProductIdList, product, cart);
}
cashierCartMapper.updateByPrimaryKeySelective(cart);
} else {
List<TbCashierCart> list = cashierCartMapper.selectALlByMasterId(masterId, "create");
@@ -409,6 +459,9 @@ public class OrderService {
cashierCart.setUuid(uuid);
cashierCart.setTableId(tableId);
cashierCart.setPlatformType(OrderPlatformTypeEnum.CASH.getValue());
if (product != null) {
resetGroupProductCart(groupProductIdList, product, cashierCart);
}
list.add(cashierCart);
mpCashierCartMapper.insert(cashierCart);
} else {
@@ -417,6 +470,9 @@ public class OrderService {
} else {
cashierCart.setNumber(number);
}
if (product != null) {
resetGroupProductCart(groupProductIdList, product, cashierCart);
}
cashierCart.setIsPrint(isPrint);
cashierCart.resetTotalAmount();
mpCashierCartMapper.updateById(cashierCart);
@@ -943,6 +999,7 @@ public class OrderService {
saleAmount = saleAmount.add(shopInfo.getTableFee());
}
orderDetail.setProGroupInfo(cashierCart.getProGroupInfo());
orderDetail.setIsTemporary(cashierCart.getIsTemporary());
orderDetail.setDiscountSaleNote(cashierCart.getDiscountSaleNote());
orderDetail.setDiscountSaleAmount(cashierCart.getDiscountSaleAmount());