From 265a4d7ca3ee0c418a610db52fc862920140cafe Mon Sep 17 00:00:00 2001
From: 935090232@qq.com <ak473600000>
Date: Sun, 21 Mar 2021 10:18:08 +0800
Subject: [PATCH] 新增积分付款模块
---
zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesSecKillServiceImpl.java | 4
zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderItemDto.java | 47 ++
zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopCouponServiceImpl.java | 52 +-
zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartVo.java | 106 ---
zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java | 228 ---------
zq-erp/src/main/java/com/matrix/system/shopXcx/api/tools/WxShopOrderUtil.java | 25
zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java | 244 ++++++---
zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderCouponGroup.java | 43 +
zq-erp/src/main/java/com/matrix/system/shopXcx/dto/DiscountExplain.java | 50 -
/dev/null | 34 -
zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShoppingCartAction.java | 21
zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartGroupVo.java | 46 ++
zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/ShoppingCartService.java | 79 --
zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/ShopOrderDto.java | 52 ++
zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WxShopCouponService.java | 6
zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/CalculatePostagePOJO.java | 6
zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/OrderCouponGroupService.java | 282 ++++++++++++
zq-erp/src/main/java/com/matrix/system/shopXcx/dao/ShopShoppingCartDao.java | 2
zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WXShopOrderService.java | 15
zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesGroupServiceImpl.java | 4
zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopOrderDetailsDao.xml | 4
21 files changed, 758 insertions(+), 592 deletions(-)
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java
index 00e55eb..f1e3fe5 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java
@@ -2,40 +2,28 @@
import com.matrix.biz.bean.BizUser;
import com.matrix.component.redis.RedisUserLoginUtils;
-import com.matrix.component.tools.WxUtils;
import com.matrix.component.wechat.externalInterface.protocol.paramProtocol.BrandWCPayRequestData;
import com.matrix.component.wechat.externalInterface.weixinUtil.WeixinServiceUtil;
import com.matrix.core.constance.SystemErrorCode;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.pojo.AjaxResult;
-import com.matrix.core.tools.StringUtils;
-import com.matrix.system.common.constance.AppConstance;
-import com.matrix.system.constance.Dictionary;
-import com.matrix.system.hive.bean.ShoppingGoods;
import com.matrix.system.hive.dao.ShoppingGoodsDao;
-import com.matrix.system.shopXcx.api.pojo.AddShopOrderPOJO;
-import com.matrix.system.shopXcx.api.pojo.CreateOrderDto;
import com.matrix.system.shopXcx.api.pojo.OrderInfoQueryPOJO;
+import com.matrix.system.shopXcx.api.pojo.ShopOrderDto;
+import com.matrix.system.shopXcx.api.service.OrderCouponGroupService;
import com.matrix.system.shopXcx.api.service.ShoppingCartService;
import com.matrix.system.shopXcx.api.service.WXShopOrderService;
import com.matrix.system.shopXcx.api.service.WxShopCouponService;
import com.matrix.system.shopXcx.api.tools.WxShopCouponUtil;
import com.matrix.system.shopXcx.api.tools.WxShopOrderUtil;
-import com.matrix.system.shopXcx.api.vo.CouponReceiveInfoVO;
-import com.matrix.system.shopXcx.api.vo.ShopCartVo;
-import com.matrix.system.shopXcx.bean.*;
+import com.matrix.system.shopXcx.bean.ShopOrder;
import com.matrix.system.shopXcx.dao.*;
-import com.matrix.system.shopXcx.dto.DiscountExplain;
-import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
/**
@@ -82,105 +70,25 @@
private ShopOrderDetailsDao shopOrderDetailsDao;
@Autowired
+ OrderCouponGroupService orderCouponGroupService;
+
+ @Autowired
ShopOrderDao shopOrderDao;
/**
* 计算购物车订单价格
*
- * @param addShopOrderPOJO
+ * @param shopOrderDto
* @return
* @throws Exception
*/
@PostMapping(value = "/calculationCartOrder")
public
@ResponseBody
- AjaxResult calculationCartOrder(@RequestBody AddShopOrderPOJO addShopOrderPOJO) throws Exception {
- BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class); //计算购物车中物品的优惠信息
-
- List<ShopCartVo> cartList = shoppingCartService.findUserCartList(addShopOrderPOJO.getShopId(),ShopShoppingCart.CAR_TYPE_MICRO);
+ AjaxResult calculationCartOrder(@RequestBody ShopOrderDto shopOrderDto) throws Exception {
- //取出购物车中选中的产品
- List<ShopShoppingCart> buyCart = new ArrayList<>();
-
- //取出购物车中没有参加店铺活动的产品,和参加了店铺活动但是活动没有达到标准的产品,用来计算是否可以使用优惠券
- List<ShopShoppingCart> notCouponuyCart = new ArrayList<>();
- for (ShopCartVo shopCartVo : cartList) {
- for (ShopShoppingCart shopShoppingCart : shopCartVo.getCartList()) {
- if (shopShoppingCart.getIsSelected() == 1) {
- buyCart.add(shopShoppingCart);
- if (shopCartVo.getCoupon() == null || !shopCartVo.isSatisfactionCoupon()) {
- notCouponuyCart.add(shopShoppingCart);
- }
- }
- }
- }
- //获取当前购物车产品可用的优惠券
- List<CouponReceiveInfoVO> usefulCoupon = wxShopCouponService.getCartVoCouponList(bizUser.getCompanyId(),notCouponuyCart);
-
- //获取用户使用的优惠券
- CouponReceiveInfoVO shopCoupon = new CouponReceiveInfoVO();
- if (addShopOrderPOJO.getCouponReceiveId() == null) {
- //如果用户没有选择优惠券则默认选优惠金额最高的
- //计算使用优惠券后的价格
- if (CollectionUtils.isNotEmpty(usefulCoupon)) {
- //根据优惠券ID用户ID查询优惠券信息
- shopCoupon = usefulCoupon.get(0);
- }
- } else if (addShopOrderPOJO.getCouponReceiveId() != 1) {
- //用户选择了优惠券
- shopCoupon = shopCouponRecordDao.selectMyCouponByReceiveId(addShopOrderPOJO.getCouponReceiveId());
- } else {
- //用户不使用优惠券
- }
-
-
- //计算收货地址:
-
- ShopReceiveAddress shopReceiveAddress = null;
- if (addShopOrderPOJO.getReceiveAddrId() == null) {
- //如果没有传收货地址则默认收货地址
- shopReceiveAddress = shopReceiveAddressDao.selectDefaultAddress(bizUser.getOpenId());
- if (shopReceiveAddress != null) {
- addShopOrderPOJO.setReceiveAddrId(shopReceiveAddress.getAddrId());
- }
- } else {
- shopReceiveAddress = shopReceiveAddressDao.selectById(addShopOrderPOJO.getReceiveAddrId());
- addShopOrderPOJO.setReceiveAddrId(shopReceiveAddress.getAddrId());
-
- }
-
-
- //得到订单计价说明
- DiscountExplain discountExplain = shopOrderService.buildDiscountExplain(cartList, shopCoupon.getReceiveId(), bizUser.getCompanyId());
-
- AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, buyCart, buyCart.size());
- //结算金额信息
- result.putInMap("discountExplain", discountExplain);
-
-
- //用户优惠券
- result.putInMap("usefulCoupon", usefulCoupon);
- //用户选中的优惠券
- result.putInMap("shopCoupon", shopCoupon);
-
-
- //默认地址
- String deliverySelect = "立即配送";
- if (shopReceiveAddress != null) {
- if (StringUtils.isNotBlank(shopReceiveAddress.getSchool())) {
- deliverySelect = "立即配送";
- } else {
- deliverySelect = "物流配送";
- }
- }
- result.putInMap("defaultAddress", shopReceiveAddress);
- //配送方式
- result.putInMap("deliverySelect", deliverySelect);
-
-
- result.setRows(buyCart);
- return result;
+ return shopOrderService.buildDiscountExplain(shopOrderDto);
}
@@ -190,129 +98,17 @@
/**
* 新增订单
*
- * @param addShopOrderPOJO
+ * @param shopOrderDto
* @return
*/
@PostMapping(value = "/addShopOrder")
public
@ResponseBody
- AjaxResult addShopOrder(@RequestBody AddShopOrderPOJO addShopOrderPOJO) throws Exception {
- return shopOrderService.createShopOrder(addShopOrderPOJO);
+ AjaxResult addShopOrder(@RequestBody ShopOrderDto shopOrderDto) throws Exception {
+ return shopOrderService.createShopOrder(shopOrderDto);
}
- /**
- * 新增订单
- * 本方法抛弃,不再使用,本方法是单单个产品购买
- * 在多产品的时候不适合
- * @return
- */
- @Deprecated
- @PostMapping(value = "/addShopOrder2")
- public
- @ResponseBody
- AjaxResult addShopOrder2(@RequestBody CreateOrderDto createOrderDto) throws Exception {
-
-
- //校验收货地址
- ShopReceiveAddress shopReceiveAddress = shopReceiveAddressDao.selectById(createOrderDto.getReceiveAddrId());
- if (shopReceiveAddress == null) {
- return new AjaxResult(AjaxResult.STATUS_FAIL, "请选择正确的收获地址");
- }
-
-
- BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class);
- ShopSku shopSku = shopSkuDao.selectById(createOrderDto.getSkuId());
- ShopProduct shopProduct = shopProductDao.selectById(createOrderDto.getProductId());
- String stokCode = shopSku.getStockCode();
-
- ShopOrder shopOrder = new ShopOrder();
- //查询绑定的产品是否为家居产品
- if (StringUtils.isNotBlank(stokCode)) {
- ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(Long.parseLong(stokCode));
- if (shoppingGoods != null) {
- //根据购买的产品设置订单类型
- if (Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(shoppingGoods.getGoodType())) {
- shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS);
- } else {
- shopOrder.setOrderType(ShopOrder.ORDER_TYPE_SERVICE);
- }
- } else {
- shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS);
- }
- }
-
- List<ShopOrderDetails> details = new ArrayList<>();
- Integer cartCount = 0;
- ShopOrderDetails shopOrderDetails = new ShopOrderDetails();
- shopOrderDetails.setCreateBy(AppConstance.SYSTEM_USER);
- shopOrderDetails.setUpdateBy(AppConstance.SYSTEM_USER);
- shopOrderDetails.setpId(createOrderDto.getProductId());
- shopOrderDetails.setsId(createOrderDto.getSkuId());
- shopOrderDetails.setPrice(shopSku.getPrice());
- shopOrderDetails.setCount(createOrderDto.getNumber());
- shopOrderDetails.setsTitle(shopProduct.getTitle() + shopSku.getName());
- shopOrderDetails.setDiscountAmount(BigDecimal.ZERO);
- shopOrderDetails.setTotalPrice(shopOrderDetails.getPrice().multiply(BigDecimal.valueOf(shopOrderDetails.getCount())));
- details.add(shopOrderDetails);
- cartCount += shopOrderDetails.getCount();
-
-
- //TODO 更新库存和销量[考虑和erp库存联动]
- wxShopOrderUtil.updateProductAndSkuInfo(details);
-
- //用户openId
- shopOrder.setUserId(bizUser.getOpenId());
- shopOrder.setCreateBy("微信小程序生成");
- shopOrder.setUpdateBy("微信小程序生成");
- shopOrder.setCommodityPrice(shopOrderDetails.getTotalPrice());
- shopOrder.setPurchaseQuantity(cartCount);
- //购买方式
- shopOrder.setShippingMethod("物流配送");
- //生成订单号
- shopOrder.setOrderNo(WxUtils.getOrderNum());
- //设置支付状态
- shopOrder.setPayStatus(ShopOrder.ORDER_STATUS_WAIT_PAY);
- //设置订单状态
- shopOrder.setOrderStatus(ShopOrder.ORDER_STATUS_WAIT_SEND);
-
- //设置退款费用(注:下次优化从数据字典表获取)
- shopOrder.setRefundCharge(BigDecimal.ZERO);
- //客户电话
- shopOrder.setUserTel(shopReceiveAddress.getAddrTelephone());
- //客户姓名
- shopOrder.setUserName(shopReceiveAddress.getAddrLiaisonman());
- //备注
- shopOrder.setRemarks(createOrderDto.getRemarks());
- //删除标识
- shopOrder.setDelFlag(AppConstance.DATA_USEABLE);
- //微信订单号
- shopOrder.setWxOrderNo("");
- //微信支付结果
- shopOrder.setPayResult(ShopOrder.ORDER_WX_STATUS_WAIT_PAY);
- //如果没有提交购买方式或配送方式不是物流
- //获取邮费
- shopOrder.setOrderMoney(shopOrderDetails.getTotalPrice());
- shopOrder.setStoreId(createOrderDto.getShopId());
-
- shopOrderDao.insert(shopOrder);
-
- wxShopOrderUtil.insertSendPackageInfo(shopOrder, "物流配送", shopReceiveAddress);
-
- //给订单详情表添加订单ID
- shopOrderDetails.setOrderId(shopOrder.getId());
-
- shopOrderDetailsDao.insert(shopOrderDetails);
-
-
- BrandWCPayRequestData payData = startPayment(shopOrder);
- AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, Arrays.asList(payData));
- result.putInMap("orderId", shopOrder.getId());
-
- return result;
-
-
- }
@Value("${wx_pay_debug_onoff}")
private boolean isDebug;
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShoppingCartAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShoppingCartAction.java
index 91eeace..4508e1c 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShoppingCartAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShoppingCartAction.java
@@ -9,6 +9,7 @@
import com.matrix.core.tools.StringUtils;
import com.matrix.system.common.constance.AppConstance;
import com.matrix.system.common.interceptor.HostInterceptor;
+import com.matrix.system.shopXcx.api.service.OrderCouponGroupService;
import com.matrix.system.shopXcx.api.service.ShoppingCartService;
import com.matrix.system.shopXcx.api.service.WxShopCouponService;
import com.matrix.system.shopXcx.api.vo.ShopCartBillVo;
@@ -51,7 +52,8 @@
@Autowired
ShopSkuDao skuDao;
-
+ @Autowired
+ OrderCouponGroupService orderCouponGroupService;
@ApiOperation(value = "根据ID删除购物车", notes = "")
@PostMapping("/deleteByCartId/{cartId}")
@@ -69,9 +71,12 @@
@PostMapping("/findShoppingCart")
@ResponseBody
public AjaxResult getShoppingCartByUserId(@RequestBody ShopShoppingCart shoppingCart) {
- List<ShopCartVo> cartList = shoppingCartService.findUserCartList(shoppingCart.getShopId(),ShopShoppingCart.CAR_TYPE_MICRO);
- AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, cartList, cartList.size());
- ShopCartBillVo shopCartBill = shoppingCartService.buildShopCartBillVo(cartList);
+ BizUser loginUser = redisUserLoginUtils.getLoginUser(BizUser.class);
+ String userId = loginUser.getOpenId();
+ List<ShopShoppingCart> list = shoppingCartDao.selectByCartUserId(shoppingCart.getShopId(),userId);
+ List<ShopCartVo> shopCartVoList = shoppingCartService.buildShopCart(list);
+ AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, shopCartVoList, shopCartVoList.size());
+ ShopCartBillVo shopCartBill = shoppingCartService.buildShopCartBillVo(shopCartVoList);
result.putInMap("billTotal", shopCartBill.getBillTotal().stripTrailingZeros().toPlainString());
result.putInMap("selectCount", shopCartBill.getSelectCount());
result.putInMap("cartCount", shopCartBill.getCartCount());
@@ -119,9 +124,9 @@
AjaxResult saveShoppingCart(@RequestBody ShopShoppingCart shoppingCart) {
//查询到sku设置对应的产品id
- ShopSku sku= skuDao.selectById(shoppingCart.getCartSkuId());
- if(sku==null){
- return new AjaxResult(AjaxResult.STATUS_FAIL,"无效的产品id");
+ ShopSku sku = skuDao.selectById(shoppingCart.getCartSkuId());
+ if (sku == null) {
+ return new AjaxResult(AjaxResult.STATUS_FAIL, "无效的产品id");
}
shoppingCart.setCartProductId(sku.getpId());
@@ -274,7 +279,7 @@
public AjaxResult updateCartAllSelected(@PathVariable("isSelected") Integer isSelected,
@PathVariable("shopId") Long shopId) {
BizUser user = redisUserLoginUtils.getLoginUser(BizUser.class);
- shoppingCartDao.updateAllSelected(user.getOpenId(),shopId, isSelected);
+ shoppingCartDao.updateAllSelected(user.getOpenId(), shopId, isSelected);
return new AjaxResult(AjaxResult.STATUS_SUCCESS, "修改成功");
}
}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/AddShopOrderPOJO.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/AddShopOrderPOJO.java
deleted file mode 100644
index 3398072..0000000
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/AddShopOrderPOJO.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package com.matrix.system.shopXcx.api.pojo;
-
-import java.util.List;
-
-/**
- * @author jyy
- */
-public class AddShopOrderPOJO {
-
-
- /**
- * 收货地址ID
- */
- private Integer receiveAddrId;
-
- /**
- * 配送方式(1=物流,2=门店自取)
- */
- private String deliverySelect;
-
- /**
- * 配送门店ID
- */
- private Long shopId;
-
- /**
- * 优惠券记录id
- */
- private Integer couponReceiveId;
-
-
-
- /**
- * 订单备注
- */
- private String remarks;
-
- /**
- * 购买商品规格列表详情
- */
- private List<OrderProductSkuPOJO> skuList;
-
-
- public Integer getReceiveAddrId() {
- return receiveAddrId;
- }
-
- public void setReceiveAddrId(Integer receiveAddrId) {
- this.receiveAddrId = receiveAddrId;
- }
-
- public String getDeliverySelect() {
- return deliverySelect;
- }
-
- public void setDeliverySelect(String deliverySelect) {
- this.deliverySelect = deliverySelect;
- }
-
- public Long getShopId() {
- return shopId;
- }
-
- public void setShopId(Long shopId) {
- this.shopId = shopId;
- }
-
- public Integer getCouponReceiveId() {
- return couponReceiveId;
- }
-
- public void setCouponReceiveId(Integer couponReceiveId) {
- this.couponReceiveId = couponReceiveId;
- }
-
- public String getRemarks() {
- return remarks;
- }
-
- public void setRemarks(String remarks) {
- this.remarks = remarks;
- }
-
- public List<OrderProductSkuPOJO> getSkuList() {
- return skuList;
- }
-
- public void setSkuList(List<OrderProductSkuPOJO> skuList) {
- this.skuList = skuList;
- }
-}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/CalculatePostagePOJO.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/CalculatePostagePOJO.java
index ca95377..ccf8fef 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/CalculatePostagePOJO.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/CalculatePostagePOJO.java
@@ -19,7 +19,7 @@
/**
* 购买规格信息列表
*/
- private List<OrderProductSkuPOJO> skuList;
+ private List<OrderItemDto> skuList;
public Integer getAddrId() {
@@ -38,11 +38,11 @@
this.couponId = couponId;
}
- public List<OrderProductSkuPOJO> getSkuList() {
+ public List<OrderItemDto> getSkuList() {
return skuList;
}
- public void setSkuList(List<OrderProductSkuPOJO> skuList) {
+ public void setSkuList(List<OrderItemDto> skuList) {
this.skuList = skuList;
}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderCouponGroup.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderCouponGroup.java
new file mode 100644
index 0000000..7de34e4
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderCouponGroup.java
@@ -0,0 +1,43 @@
+package com.matrix.system.shopXcx.api.pojo;
+
+import com.matrix.system.shopXcx.api.vo.CouponReceiveInfoVO;
+import com.matrix.system.shopXcx.bean.ShopCoupon;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 购物车前台展示对象
+ */
+@Data
+public class OrderCouponGroup {
+
+ private ShopCoupon coupon;
+
+ //是否满足优惠
+ private boolean satisfactionCoupon;
+
+ private List<OrderItemDto> orderItemDtos;
+
+ //提示语
+ private String msg="";
+
+ //优惠小计金额
+ private BigDecimal subtotal=BigDecimal.ZERO;
+
+ //原价
+ private BigDecimal srcPrice=BigDecimal.ZERO;
+
+ //优惠金额
+ private BigDecimal couponPrice=BigDecimal.ZERO;
+ /**
+ * 抵用积分
+ */
+ private BigDecimal scorePay = BigDecimal.ZERO;
+
+ private CouponReceiveInfoVO couponReceiveInfoVO;
+
+
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderItemDto.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderItemDto.java
new file mode 100644
index 0000000..de86b06
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderItemDto.java
@@ -0,0 +1,47 @@
+package com.matrix.system.shopXcx.api.pojo;
+
+import com.matrix.system.shopXcx.bean.ShopCoupon;
+import com.matrix.system.shopXcx.bean.ShopProduct;
+import com.matrix.system.shopXcx.bean.ShopSku;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author jyy
+ */
+@Data
+public class OrderItemDto {
+ /**
+ * 产品ID
+ */
+ private Integer productId;
+ /**
+ * 产品规格ID
+ */
+ private Integer skuId;
+
+ private ShopProduct shopProduct;
+
+ private ShopSku shopSku;
+
+ /**
+ * 购买数量
+ */
+ private Integer count;
+
+ /**
+ * 支付方式1 直接购买 2,积分兑换
+ */
+ private Integer payType;
+
+ /**
+ * 购物车id
+ */
+ private Integer cartId;
+
+
+ private List<ShopCoupon> shopCoupons;
+
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderProductSkuPOJO.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderProductSkuPOJO.java
deleted file mode 100644
index 3e0b92b..0000000
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderProductSkuPOJO.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.matrix.system.shopXcx.api.pojo;
-
-/**
- * @author jyy
- */
-public class OrderProductSkuPOJO {
-
- /**
- * 产品规格ID
- */
- private Integer skuId;
-
- /**
- * 购买数量
- */
- private Integer count;
-
-
- public Integer getSkuId() {
- return skuId;
- }
-
- public void setSkuId(Integer skuId) {
- this.skuId = skuId;
- }
-
- public Integer getCount() {
- return count;
- }
-
- public void setCount(Integer count) {
- this.count = count;
- }
-}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/ShopOrderDto.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/ShopOrderDto.java
new file mode 100644
index 0000000..ad131b4
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/ShopOrderDto.java
@@ -0,0 +1,52 @@
+package com.matrix.system.shopXcx.api.pojo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author jyy
+ */
+@Data
+public class ShopOrderDto {
+
+
+ public static final Integer JOIN_ACTIVE = 1;
+ /**
+ * 收货地址ID
+ */
+ private Integer receiveAddrId;
+
+ /**
+ * 配送方式(1=物流,2=门店自取)
+ */
+ private String deliverySelect;
+
+ /**
+ * 配送门店ID
+ */
+ private Long shopId;
+
+ /**
+ * 优惠券记录id
+ */
+ private Integer couponReceiveId;
+
+ /**
+ * 参加店铺活动 1参加 2不参加
+ */
+ private Integer joinActive;
+
+
+
+ /**
+ * 订单备注
+ */
+ private String remarks;
+
+ /**
+ * 购买商品规格列表详情
+ */
+ private List<OrderItemDto> orderItemList;
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/OrderCouponGroupService.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/OrderCouponGroupService.java
new file mode 100644
index 0000000..8519518
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/OrderCouponGroupService.java
@@ -0,0 +1,282 @@
+package com.matrix.system.shopXcx.api.service;
+
+import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.core.exception.GlobleException;
+import com.matrix.core.tools.LogUtil;
+import com.matrix.system.common.dao.BusParameterSettingsDao;
+import com.matrix.system.shopXcx.api.pojo.OrderCouponGroup;
+import com.matrix.system.shopXcx.api.pojo.OrderItemDto;
+import com.matrix.system.shopXcx.bean.ShopCoupon;
+import com.matrix.system.shopXcx.bean.ShopShoppingCart;
+import com.matrix.system.shopXcx.dao.ShopProductDao;
+import com.matrix.system.shopXcx.dao.ShopShoppingCartDao;
+import com.matrix.system.shopXcx.dao.ShopSkuDao;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * 购物车前台展示对象
+ */
+@Service
+public class OrderCouponGroupService {
+ @Autowired
+ private ShopShoppingCartDao shoppingCartDao;
+ @Autowired
+ private RedisUserLoginUtils redisUserLoginUtils;
+
+ @Autowired
+ WxShopCouponService shopCouponService;
+
+ @Autowired
+ BusParameterSettingsDao busParameterSettingsDao;
+
+ @Autowired
+ ShopProductDao shopProductDao;
+
+ @Autowired
+ ShopSkuDao shopSkuDao;
+
+ /**
+ * 初始化OrderCouponElement
+ * @param skuId
+ * @param count
+ * @param payType
+ * @return
+ */
+ public OrderItemDto buildOrderCouponElement(OrderItemDto orderItemDto){
+ orderItemDto.setShopSku(shopSkuDao.selectById(orderItemDto.getSkuId()));
+ orderItemDto.setShopProduct(shopProductDao.selectById(orderItemDto.getProductId()));
+ return orderItemDto;
+ }
+
+ /**
+ * 计算用户的产品可以参与的店铺优惠活动分组
+ */
+ public List<OrderCouponGroup> buildOrderCouponGroupList(List<OrderItemDto> list) {
+
+ //定义购物车优惠分组
+ List<OrderCouponGroup> orderCouponGroupList = new ArrayList<>();
+ // 1表示没有优惠的默认分组
+ OrderCouponGroup def = new OrderCouponGroup();
+ def.setSatisfactionCoupon(true);
+ def.setMsg("商城");
+ def.setOrderItemDtos(new ArrayList<>());
+ // 组合默认分组
+ orderCouponGroupList.add(def);
+
+ // 记录所有优惠券,一个优惠券(活动)表示一组
+ Map<Integer, ShopCoupon> shopCouponMap = new HashMap<>();
+
+ //查询购物车中的产品匹配上的所有优惠活动
+ for (OrderItemDto orderItemDto : list) {
+
+ if(orderItemDto.getPayType()== ShopShoppingCart.CAR_TYPE_SCORE){
+ // 积分兑换产品不参加优惠
+ def.getOrderItemDtos().add(orderItemDto);
+ }else{
+ List<ShopCoupon> shopCouponList = shopCouponService.getHdListByProductId(orderItemDto.getProductId());
+ if (CollectionUtils.isNotEmpty(shopCouponList)) {
+ // 把所有的优惠券和购物车条目先关联一下,后续可以计算优惠升级的情况
+ orderItemDto.setShopCoupons(shopCouponList);
+ for (ShopCoupon shopCoupon : shopCouponList) {
+ shopCouponMap.put(shopCoupon.getId(), shopCoupon);
+ }
+ } else {
+ // 该产品没有参加优惠券
+ def.getOrderItemDtos().add(orderItemDto);
+ }
+ }
+
+ }
+
+ //计算没有优惠组的价格
+ countPrice(def);
+
+
+ /*
+ * 计算优惠券分组 1、获取到所有的优惠券,从最高满减开始,找寻合适的产品,找到后加入对应的购物车组
+ * 2、计算组内价格
+ */
+ Set<Integer> keys = shopCouponMap.keySet();
+ List<ShopCoupon> allShopCoupons = new ArrayList<>();
+ for (Integer key : keys) {
+ allShopCoupons.add(shopCouponMap.get(key));
+ }
+
+ //根据优惠力度排序,优惠力度大的先参与计算
+ Collections.sort(allShopCoupons, new Comparator() {
+ @Override
+ public int compare(Object o1, Object o2) {
+ ShopCoupon e1 = (ShopCoupon) o1;
+ ShopCoupon e2 = (ShopCoupon) o2;
+ return e2.getMinAmount().compareTo(e1.getMinAmount());
+ }
+ });
+
+
+ // 进行购物车和优惠券的匹配,匹配成功的加入到优惠组中,
+ for (int i = 0; i < allShopCoupons.size(); i++) {
+ ShopCoupon shopCoupon = allShopCoupons.get(i);
+ OrderCouponGroup shopCarVo = new OrderCouponGroup();
+ shopCarVo.setCoupon(shopCoupon);
+ shopCarVo.setOrderItemDtos(new ArrayList<>());
+ orderCouponGroupList.add(i, shopCarVo);
+
+ // 获取所有购物车条目
+ for (OrderItemDto orderItemDto : list) {
+ // 如果匹配到的产品已经出现在其他优惠组中,则需要判断是否移除之前的组
+ boolean needRemove = false;
+
+ // 判断当前购物车条目是否已经在合适的组里了
+ if (isInGroupAndSatisfaction(orderItemDto, orderCouponGroupList)) {
+ continue;
+
+ } else if (isInGroupNotSatisfaction(orderItemDto, orderCouponGroupList)) {
+ needRemove = true;
+ }
+
+ List<ShopCoupon> cartCouons = orderItemDto.getShopCoupons();
+ if (cartCouons != null) {
+ // 获取每个购物车条目满足的优惠
+ for (ShopCoupon cartCouon : cartCouons) {
+ if (cartCouon.getId().equals(shopCoupon.getId())) {
+ //匹配成功,加入本组
+ LogUtil.debug("购物车" + orderItemDto.getProductId() + "和优惠券" + cartCouon.getCName() + "匹配");
+ if (needRemove) {
+ removeNotSatisfaction(orderItemDto, orderCouponGroupList);
+ }
+ shopCarVo.getOrderItemDtos().add(orderItemDto);
+ break;
+ }
+ }
+ }
+
+ }
+
+ // 计算本组优惠券是否已经满足优惠条件
+ countPrice(shopCarVo);
+ }
+
+
+ // 因为有些优惠中可能没有产品,所以要去除cartList中没有产品的分组
+ List<OrderCouponGroup> cartListCopy = new ArrayList<>();
+ for (OrderCouponGroup orderCouponGroup : orderCouponGroupList) {
+ if (CollectionUtils.isNotEmpty(orderCouponGroup.getOrderItemDtos())) {
+ cartListCopy.add(orderCouponGroup);
+ }
+ }
+ return cartListCopy;
+ }
+
+
+ /**
+ * 购车条目在组中并且组是否已经满足优惠的
+ *
+ * @param cartList
+ * @return
+ */
+ private boolean isInGroupAndSatisfaction(OrderItemDto orderItemDto, List<OrderCouponGroup> cartList) {
+ boolean result = false;
+ for (OrderCouponGroup cartVo : cartList) {
+ if (cartVo.isSatisfactionCoupon() && cartVo.getOrderItemDtos().contains(orderItemDto)) {
+ result = true;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 购物车条目在组中,但是组中产品没有达到优惠条件
+ * @param cartList
+ * @return
+ */
+ private boolean isInGroupNotSatisfaction(OrderItemDto orderItemDto, List<OrderCouponGroup> cartList) {
+ boolean result = false;
+ for (OrderCouponGroup cartVo : cartList) {
+ if (!cartVo.isSatisfactionCoupon() && cartVo.getOrderItemDtos().contains(orderItemDto)) {
+ result = true;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 删除购物车条目所在分组中的引用
+ *
+ * @param cartList
+ */
+ private void removeNotSatisfaction(OrderItemDto orderItemDto, List<OrderCouponGroup> cartList) {
+ for (OrderCouponGroup cartVo : cartList) {
+ if (cartVo.getOrderItemDtos().remove(orderItemDto)) {
+ LogUtil.debug("删除购物车所在组" + cartVo.getCoupon().getCName() + "," + orderItemDto.getProductId());
+ }
+ }
+ }
+
+ /**
+ * 计算购物车价格和优惠信息
+ *
+ * @author JIANGYOUYAO
+ * @email 935090232@qq.com
+ * @date 2019年8月27日
+ */
+ private void countPrice(OrderCouponGroup orderCouponGroup) {
+ List<OrderItemDto> orderItemDtoList = orderCouponGroup.getOrderItemDtos();
+ // 计算总价
+ BigDecimal sum = BigDecimal.ZERO;
+ //抵扣总积分
+ BigDecimal scoreSum = BigDecimal.ZERO;
+
+ for (OrderItemDto orderCouponElement : orderItemDtoList) {
+ if(ShopShoppingCart.CAR_TYPE_MICRO==orderCouponElement.getPayType()){
+ //直接购买
+ sum = sum.add(orderCouponElement.getShopSku().getPrice().multiply(BigDecimal.valueOf(orderCouponElement.getCount())));
+
+ }else if(ShopShoppingCart.CAR_TYPE_SCORE==orderCouponElement.getPayType()){
+ //积分兑换
+ sum = sum.add(orderCouponElement.getShopSku().getScorePrice().multiply(BigDecimal.valueOf(orderCouponElement.getCount())));
+ scoreSum = scoreSum.add(new BigDecimal(orderCouponElement.getShopSku().getScoreCount() * orderCouponElement.getCount()));
+ }else{
+ throw new GlobleException("参数错误");
+ }
+ }
+
+ if (orderCouponGroup.getCoupon() != null) {
+ // 存在优惠券
+ if (sum.compareTo(orderCouponGroup.getCoupon().getMinAmount()) >= 0) {
+ //标记为合理分组
+ orderCouponGroup.setSatisfactionCoupon(true);
+ if (sum.compareTo(orderCouponGroup.getCoupon().getMinAmount()) >= 0) {
+ orderCouponGroup.setSubtotal(sum.subtract(orderCouponGroup.getCoupon().getOffsetAmount()));
+ orderCouponGroup.setSrcPrice(sum);
+ orderCouponGroup.setCouponPrice(orderCouponGroup.getCoupon().getOffsetAmount());
+ orderCouponGroup.setMsg(orderCouponGroup.getCoupon().getCName() + ",已优惠"
+ + orderCouponGroup.getCoupon().getOffsetAmount().stripTrailingZeros().toPlainString() + "元");
+ }
+ }
+ if (sum.compareTo(orderCouponGroup.getCoupon().getMinAmount()) < 0) {
+ orderCouponGroup.setSatisfactionCoupon(false);
+ orderCouponGroup.setSubtotal(sum);
+ orderCouponGroup.setSrcPrice(sum);
+ orderCouponGroup.setMsg(orderCouponGroup.getCoupon().getCName());
+ if (sum.doubleValue() > 0) {
+ orderCouponGroup.setMsg(orderCouponGroup.getCoupon().getCName() + ",再买"
+ + (orderCouponGroup.getCoupon().getMinAmount().subtract(sum)).stripTrailingZeros()
+ .toPlainString()
+ + "元立减" + orderCouponGroup.getCoupon().getOffsetAmount().stripTrailingZeros().toPlainString()
+ + "元");
+ }
+ }
+ } else {
+ orderCouponGroup.setSubtotal(sum);
+ orderCouponGroup.setSrcPrice(sum);
+ orderCouponGroup.setSatisfactionCoupon(true);
+ }
+ orderCouponGroup.setScorePay(scoreSum);
+ }
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/ShoppingCartService.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/ShoppingCartService.java
index ab83b88..3cf7afd 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/ShoppingCartService.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/ShoppingCartService.java
@@ -1,8 +1,6 @@
package com.matrix.system.shopXcx.api.service;
-import com.matrix.biz.bean.BizUser;
import com.matrix.component.redis.RedisUserLoginUtils;
-import com.matrix.core.exception.GlobleException;
import com.matrix.core.tools.LogUtil;
import com.matrix.system.common.dao.BusParameterSettingsDao;
import com.matrix.system.shopXcx.api.vo.ShopCartBillVo;
@@ -33,7 +31,7 @@
@Autowired
BusParameterSettingsDao busParameterSettingsDao;
-
+ //计算购车选中项总价以及优惠金额
public ShopCartBillVo buildShopCartBillVo(List<ShopCartVo> cartList) {
ShopCartBillVo shopCartBillVo = new ShopCartBillVo();
@@ -65,23 +63,10 @@
}
shopCartBillVo.setCartCount(cartCount);
shopCartBillVo.setSelectCount(selectCount);
-
return shopCartBillVo;
}
- /**
- * 计算用户的购物车产品优惠分组
- *
- * @return
- * @param shopId
- */
- public List<ShopCartVo> findUserCartList(Long shopId,Integer cartType) {
- BizUser loginUser = redisUserLoginUtils.getLoginUser(BizUser.class);
- String userId = loginUser.getOpenId();
- List<ShopShoppingCart> list = shoppingCartDao.selectByCartUserId(shopId,userId,cartType);
- List<ShopCartVo> cartList = buildShopCart(list);
- return cartList;
- }
+
/**
@@ -91,7 +76,7 @@
* @return
*/
@SuppressWarnings("unchecked")
- private List<ShopCartVo> buildShopCart(List<ShopShoppingCart> list) {
+ public List<ShopCartVo> buildShopCart(List<ShopShoppingCart> list) {
//定义购物车优惠分组
@@ -112,23 +97,19 @@
//查询购物车中的产品匹配上的所有优惠活动
for (ShopShoppingCart shoppingCart : list) {
- if(shoppingCart.getCartType()==ShopShoppingCart.CAR_TYPE_SCORE){
- // 积分兑换产品不参加优惠
- def.getCartList().add(shoppingCart);
- }else{
- List<ShopCoupon> shopCoupons = shopCouponService.getHdListByProductId(shoppingCart.getCartProductId());
- if (CollectionUtils.isNotEmpty(shopCoupons)) {
- // 把所有的优惠券和购物车条目先关联一下,后续可以计算优惠升级的情况
- shoppingCart.setShopCoupons(shopCoupons);
- for (ShopCoupon shopCoupon : shopCoupons) {
- shopCouponMap.put(shopCoupon.getId(), shopCoupon);
- }
- } else {
- // 该产品没有参加优惠券
- def.getCartList().add(shoppingCart);
- }
- }
+ List<ShopCoupon> shopCoupons = shopCouponService.getHdListByProductId(shoppingCart.getCartProductId());
+ if (CollectionUtils.isNotEmpty(shopCoupons)) {
+ // 把所有的优惠券和购物车条目先关联一下,后续可以计算优惠升级的情况
+ shoppingCart.setShopCoupons(shopCoupons);
+ for (ShopCoupon shopCoupon : shopCoupons) {
+ shopCouponMap.put(shopCoupon.getId(), shopCoupon);
+ }
+ } else {
+ // 该产品没有参加优惠券
+ def.getCartList().add(shoppingCart);
+
+ }
}
//计算没有优惠组的价格
@@ -270,28 +251,13 @@
List<ShopShoppingCart> cartList = shopCartVo.getCartList();
// 计算总价
BigDecimal sum = BigDecimal.ZERO;
- //抵扣总积分
- BigDecimal scoreSum = BigDecimal.ZERO;
// 选中项总价
BigDecimal selectSum = BigDecimal.ZERO;
for (ShopShoppingCart shopShoppingCart : cartList) {
- if(ShopShoppingCart.CAR_TYPE_MICRO==shopShoppingCart.getCartType()){
- //直接购买
- sum = sum.add(shopShoppingCart.getPrice().multiply(BigDecimal.valueOf(shopShoppingCart.getCartNumber())));
- if (shopShoppingCart.getIsSelected() == 1) {
- selectSum = selectSum
- .add(shopShoppingCart.getPrice().multiply(BigDecimal.valueOf(shopShoppingCart.getCartNumber())));
- }
- }else if(ShopShoppingCart.CAR_TYPE_SCORE==shopShoppingCart.getCartType()){
- //积分兑换
- sum = sum.add(shopShoppingCart.getScorePrice().multiply(BigDecimal.valueOf(shopShoppingCart.getCartNumber())));
- if (shopShoppingCart.getIsSelected() == 1) {
- selectSum = selectSum
- .add(shopShoppingCart.getScorePrice().multiply(BigDecimal.valueOf(shopShoppingCart.getCartNumber())));
- scoreSum = scoreSum.add(new BigDecimal(shopShoppingCart.getScoreCount() * shopShoppingCart.getCartNumber()));
- }
- }else{
- throw new GlobleException("参数错误");
+ sum = sum.add(shopShoppingCart.getPrice().multiply(BigDecimal.valueOf(shopShoppingCart.getCartNumber())));
+ if (shopShoppingCart.getIsSelected() == 1) {
+ selectSum = selectSum
+ .add(shopShoppingCart.getPrice().multiply(BigDecimal.valueOf(shopShoppingCart.getCartNumber())));
}
}
@@ -322,10 +288,9 @@
}
}
} else {
- shopCartVo.setSubtotal(selectSum);
- shopCartVo.setSrcPrice(selectSum);
- shopCartVo.setSatisfactionCoupon(true);
+ shopCartVo.setSubtotal(selectSum);
+ shopCartVo.setSrcPrice(selectSum);
+ shopCartVo.setSatisfactionCoupon(true);
}
- shopCartVo.setScorePay(scoreSum);
}
}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WXShopOrderService.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WXShopOrderService.java
index 3dabe15..da0f5e4 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WXShopOrderService.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WXShopOrderService.java
@@ -1,15 +1,12 @@
package com.matrix.system.shopXcx.api.service;
-import com.matrix.core.pojo.AjaxResult;
import com.matrix.component.wechat.externalInterface.protocol.paramProtocol.BrandWCPayRequestData;
-import com.matrix.system.shopXcx.bean.ShopOrder;
-import com.matrix.system.shopXcx.dto.DiscountExplain;
-import com.matrix.system.shopXcx.api.pojo.AddShopOrderPOJO;
+import com.matrix.core.pojo.AjaxResult;
import com.matrix.system.shopXcx.api.pojo.OrderInfoQueryPOJO;
-import com.matrix.system.shopXcx.api.vo.ShopCartVo;
+import com.matrix.system.shopXcx.api.pojo.ShopOrderDto;
+import com.matrix.system.shopXcx.bean.ShopOrder;
import java.math.BigDecimal;
-import java.util.List;
/**
* @author jyy
@@ -22,11 +19,11 @@
/**
* 创建订单
- * @param addShopOrderPOJO
+ * @param shopOrderDto
* @return
* @throws Exception
*/
- AjaxResult createShopOrder(AddShopOrderPOJO addShopOrderPOJO) throws Exception;
+ AjaxResult createShopOrder(ShopOrderDto shopOrderDto) throws Exception;
/**
* 订单结算
@@ -93,5 +90,5 @@
*/
AjaxResult updateStockAndVolumeById(Integer orderId);
- DiscountExplain buildDiscountExplain(List<ShopCartVo> cartList, Integer id, Long companyId);
+ AjaxResult buildDiscountExplain(ShopOrderDto shopOrderDto);
}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WxShopCouponService.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WxShopCouponService.java
index 13d6e99..fd92862 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WxShopCouponService.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WxShopCouponService.java
@@ -2,9 +2,9 @@
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.pojo.PaginationVO;
-import com.matrix.system.shopXcx.bean.ShopCoupon;
-import com.matrix.system.shopXcx.bean.ShopShoppingCart;
+import com.matrix.system.shopXcx.api.pojo.OrderItemDto;
import com.matrix.system.shopXcx.api.vo.CouponReceiveInfoVO;
+import com.matrix.system.shopXcx.bean.ShopCoupon;
import java.util.List;
@@ -18,7 +18,7 @@
* 根据购物车选中的产品
* @return
*/
- public List<CouponReceiveInfoVO> getCartVoCouponList(Long companyId,List<ShopShoppingCart> shopShoppingCarts);
+ public List<CouponReceiveInfoVO> getCartVoCouponList(Long companyId,List<OrderItemDto> OrderItemDtos);
/**
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java
index 51bfc9b..d4a5664 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java
@@ -1,5 +1,6 @@
package com.matrix.system.shopXcx.api.service.impl;
+import cn.hutool.core.collection.CollUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.matrix.biz.bean.BizUser;
@@ -11,26 +12,24 @@
import com.matrix.core.exception.GlobleException;
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.tools.LogUtil;
-import com.matrix.core.tools.StringUtils;
import com.matrix.system.common.bean.BusParameterSettings;
import com.matrix.system.common.constance.AppConstance;
import com.matrix.system.common.dao.BusParameterSettingsDao;
import com.matrix.system.common.dao.CustomerDataDictionaryDao;
import com.matrix.system.common.interceptor.HostInterceptor;
-import com.matrix.system.constance.Dictionary;
-import com.matrix.system.hive.bean.ShoppingGoods;
import com.matrix.system.hive.dao.ShoppingGoodsDao;
import com.matrix.system.shopXcx.api.action.PayThreadPool;
-import com.matrix.system.shopXcx.api.pojo.AddShopOrderPOJO;
+import com.matrix.system.shopXcx.api.pojo.OrderCouponGroup;
import com.matrix.system.shopXcx.api.pojo.OrderInfoQueryPOJO;
+import com.matrix.system.shopXcx.api.pojo.OrderItemDto;
+import com.matrix.system.shopXcx.api.pojo.ShopOrderDto;
+import com.matrix.system.shopXcx.api.service.OrderCouponGroupService;
import com.matrix.system.shopXcx.api.service.ShoppingCartService;
import com.matrix.system.shopXcx.api.service.WXShopOrderService;
import com.matrix.system.shopXcx.api.service.WxShopCouponService;
import com.matrix.system.shopXcx.api.tools.WxShopCouponUtil;
import com.matrix.system.shopXcx.api.tools.WxShopOrderUtil;
import com.matrix.system.shopXcx.api.vo.CouponReceiveInfoVO;
-import com.matrix.system.shopXcx.api.vo.ShopCartBillVo;
-import com.matrix.system.shopXcx.api.vo.ShopCartVo;
import com.matrix.system.shopXcx.bean.*;
import com.matrix.system.shopXcx.dao.*;
import com.matrix.system.shopXcx.dto.DiscountExplain;
@@ -42,6 +41,7 @@
import java.math.BigDecimal;
import java.util.*;
+import java.util.stream.Collectors;
/**
* @author jyy
@@ -90,6 +90,9 @@
private ShopActivitiesGroupJoinUserDao shopActivitiesGroupJoinUserDao;
@Autowired
+ OrderCouponGroupService orderCouponGroupService;
+
+ @Autowired
CustomerDataDictionaryDao dataDictionaryDao;
@Value("${wx_pay_debug_onoff}")
private boolean isDebug;
@@ -98,111 +101,84 @@
private BusParameterSettingsDao busParameterSettingsDao;
@Override
- public BigDecimal calculationPostage(BigDecimal payPrice,Long companyId) {
+ public BigDecimal calculationPostage(BigDecimal payPrice, Long companyId) {
BigDecimal postage = BigDecimal.ZERO;
BusParameterSettings yf = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.PACKAGE_PRICE, companyId);
BusParameterSettings myje = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.FREE_PACKAGE_PRICE, companyId);
- if(yf!=null&&myje!=null){
+ if (yf != null && myje != null) {
if (Double.parseDouble(myje.getParamValue()) > payPrice.doubleValue()) {
postage = new BigDecimal(yf.getParamValue());
}
}
-
return postage;
}
-
-
/**
* 创建订单
*
- * @param addShopOrderPOJO
+ * @param shopOrderDto
* @return
* @throws Exception
*/
@Transactional(rollbackFor = Exception.class)
@Override
- public AjaxResult createShopOrder(AddShopOrderPOJO addShopOrderPOJO) throws Exception {
+ public AjaxResult createShopOrder(ShopOrderDto shopOrderDto) throws Exception {
BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class);
//校验收货地址
- ShopReceiveAddress shopReceiveAddress = shopReceiveAddressDao.selectById(addShopOrderPOJO.getReceiveAddrId());
+ ShopReceiveAddress shopReceiveAddress = shopReceiveAddressDao.selectById(shopOrderDto.getReceiveAddrId());
if (shopReceiveAddress == null) {
return new AjaxResult(AjaxResult.STATUS_FAIL, "请选择正确的收获地址");
}
+ AjaxResult caculateResult= buildDiscountExplain(shopOrderDto);
- List<ShopCartVo> cartList = shoppingCartService.findUserCartList(addShopOrderPOJO.getShopId(),ShopShoppingCart.CAR_TYPE_MICRO);
- //购物车不能为空
- if (CollectionUtils.isEmpty(cartList)) {
- return new AjaxResult(AjaxResult.STATUS_FAIL, "请选择您需要购买的产品");
- }
+
+ //计算订单优惠信息
+ DiscountExplain discountExplain= (DiscountExplain) caculateResult.getMapInfo().get("discountExplain");
+
//取出购物车中选中的产品
List<ShopShoppingCart> buyCart = new ArrayList<>();
//取出购物车中没有参加店铺活动的产品,和参加了店铺活动但是活动没有达到标准的产品,用来计算是否可以使用优惠券
List<ShopShoppingCart> notCouponuyCart = new ArrayList<>();
- for (ShopCartVo shopCartVo : cartList) {
- for (ShopShoppingCart shopShoppingCart : shopCartVo.getCartList()) {
- if (shopShoppingCart.getIsSelected() == 1) {
- buyCart.add(shopShoppingCart);
- if (shopCartVo.getCoupon() == null || !shopCartVo.isSatisfactionCoupon()) {
- notCouponuyCart.add(shopShoppingCart);
- }
- }
- }
- }
-
- //计算订单优惠信息
- DiscountExplain discountExplain = buildDiscountExplain(cartList, addShopOrderPOJO.getCouponReceiveId(), bizUser.getCompanyId());
ShopOrder shopOrder = new ShopOrder();
shopOrder.setCompanyId(bizUser.getCompanyId());
- shopOrder.setStoreId(Integer.parseInt(addShopOrderPOJO.getShopId().toString()));
+ shopOrder.setStoreId(Integer.parseInt(shopOrderDto.getShopId().toString()));
//默认设置为产品类型
shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS);
List<ShopOrderDetails> details = new ArrayList<>();
Integer cartCount = 0;
- for (ShopShoppingCart shopShoppingCart : buyCart) {
+ for (OrderItemDto orderItemDto : shopOrderDto.getOrderItemList()) {
ShopOrderDetails shopOrderDetails = new ShopOrderDetails();
shopOrderDetails.setCreateBy(AppConstance.SYSTEM_USER);
shopOrderDetails.setUpdateBy(AppConstance.SYSTEM_USER);
- shopOrderDetails.setpId(shopShoppingCart.getCartProductId());
- shopOrderDetails.setsId(shopShoppingCart.getCartSkuId());
- shopOrderDetails.setPrice(shopShoppingCart.getPrice());
- shopOrderDetails.setPayType(shopShoppingCart.getCartType());
- shopOrderDetails.setCount(shopShoppingCart.getCartNumber());
- shopOrderDetails.setsTitle(shopShoppingCart.getTitle() + shopShoppingCart.getName());
- shopOrderDetails.setDiscountAmount(BigDecimal.ZERO);
+ shopOrderDetails.setpId(orderItemDto.getProductId());
+ shopOrderDetails.setsId(orderItemDto.getSkuId());
+ shopOrderDetails.setCount(orderItemDto.getCount());
+ if(ShopOrderDetails.PAYTYPE_MICRO==orderItemDto.getPayType()){
+ shopOrderDetails.setPrice(orderItemDto.getShopSku().getPrice());
+ }else{
+ shopOrderDetails.setPrice(orderItemDto.getShopSku().getScorePrice());
+ shopOrderDetails.setScoreCount(BigDecimal.valueOf(orderItemDto.getShopSku().getScoreCount()));
+ shopOrderDetails.setTotalScoreCount(shopOrderDetails.getScoreCount().multiply(BigDecimal.valueOf(shopOrderDetails.getCount())));
+ }
shopOrderDetails.setTotalPrice(shopOrderDetails.getPrice().multiply(BigDecimal.valueOf(shopOrderDetails.getCount())));
+
+ shopOrderDetails.setPayType(orderItemDto.getPayType());
+
+ shopOrderDetails.setsTitle(orderItemDto.getShopProduct().getTitle() + orderItemDto.getShopSku().getName());
+
+ shopOrderDetails.setDiscountAmount(BigDecimal.ZERO);
+
details.add(shopOrderDetails);
cartCount += shopOrderDetails.getCount();
-
- //查询绑定的产品是否为家居产品,如果已经含家具产品则不再比较
- if (ShopOrder.ORDER_TYPE_GOODS != shopOrder.getOrderType()) {
- ShopSku shopSku = shopSkuDao.selectById(shopShoppingCart.getCartSkuId());
- String stokCode = shopSku.getStockCode();
- if (StringUtils.isNotBlank(stokCode)) {
- ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(Long.parseLong(stokCode));
- if (shoppingGoods != null) {
- //根据购买的产品设置订单类型
- if (Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(shoppingGoods.getGoodType())) {
- shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS);
- } else {
-
- }
- } else {
- shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS);
- }
- }
- }
-
-
}
//校验商品是否限购
@@ -215,8 +191,9 @@
shopOrder.setUpdateBy("微信小程序生成");
shopOrder.setCommodityPrice(discountExplain.getBillPrice());
shopOrder.setPurchaseQuantity(cartCount);
+ shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS);
//购买方式
- shopOrder.setShippingMethod(addShopOrderPOJO.getDeliverySelect());
+ shopOrder.setShippingMethod(shopOrderDto.getDeliverySelect());
//生成订单号
shopOrder.setOrderNo(WxUtils.getOrderNum());
//设置支付状态
@@ -231,7 +208,7 @@
//客户姓名
shopOrder.setUserName(shopReceiveAddress.getAddrLiaisonman());
//备注
- shopOrder.setRemarks(addShopOrderPOJO.getRemarks());
+ shopOrder.setRemarks(shopOrderDto.getRemarks());
//删除标识
shopOrder.setDelFlag(AppConstance.DATA_USEABLE);
//微信订单号
@@ -244,11 +221,11 @@
shopOrder.setOrderMoney(discountExplain.getPayPrice());
Gson g = new GsonBuilder().create();
shopOrder.setDiscountExplain(g.toJson(discountExplain));
- shopOrder.setDiscountAmount(discountExplain.getActivity().add(discountExplain.getCoupon()));
+ shopOrder.setDiscountAmount(discountExplain.getActivityPrice().add(discountExplain.getCouponPrice()));
shopOrder.setCompanyId(HostInterceptor.getCompanyId());
shopOrderDao.insert(shopOrder);
- wxShopOrderUtil.insertSendPackageInfo(shopOrder, addShopOrderPOJO.getDeliverySelect(), shopReceiveAddress);
+ wxShopOrderUtil.insertSendPackageInfo(shopOrder, shopOrderDto.getDeliverySelect(), shopReceiveAddress);
//给订单详情表添加订单ID
for (ShopOrderDetails shopOrderDetails : details) {
shopOrderDetails.setOrderId(shopOrder.getId());
@@ -257,11 +234,11 @@
shopOrderDetailsDao.batchInsert(details);
}
//更新使用的优惠券状态
- if (addShopOrderPOJO.getCouponReceiveId() != null) {
+ if (shopOrderDto.getCouponReceiveId() != null) {
ShopCouponRecord record = new ShopCouponRecord();
record.setIsUsing(AppConstance.MY_COUPON_USE);
record.setOrderId(shopOrder.getId());
- record.setId(addShopOrderPOJO.getCouponReceiveId());
+ record.setId(shopOrderDto.getCouponReceiveId());
shopCouponRecordDao.updateByModel(record);
}
@@ -277,28 +254,121 @@
}
@Override
- public DiscountExplain buildDiscountExplain(List<ShopCartVo> cartList, Integer receiveId, Long companyId) {
- ShopCartBillVo shopCartBill = shoppingCartService.buildShopCartBillVo(cartList);
- DiscountExplain discountExplain = new DiscountExplain();
- discountExplain.setActivity(shopCartBill.getBillCouponTotal());
- discountExplain.setBillPrice(shopCartBill.getSrcTotal());
- discountExplain.setPayPrice(shopCartBill.getBillTotal());
- //计算优惠券
- if (receiveId != null) {
- CouponReceiveInfoVO couponReceiveInfoVO = shopCouponRecordDao.selectMyCouponByReceiveId(receiveId);
- if (couponReceiveInfoVO != null) {
- BigDecimal payPrice = discountExplain.getPayPrice().subtract(couponReceiveInfoVO.getOffsetAmount());
- payPrice = payPrice.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : payPrice;
- discountExplain.setPayPrice(payPrice);
- discountExplain.setCoupon(couponReceiveInfoVO.getOffsetAmount());
- }
+ public AjaxResult buildDiscountExplain(ShopOrderDto shopOrderDto) {
+
+ if(CollUtil.isEmpty(shopOrderDto.getOrderItemList())){
+ return AjaxResult.buildFailInstance("请选择购买的明细");
}
- discountExplain.setPostage(calculationPostage(discountExplain.getPayPrice(),companyId));
+ //订单计价说明
+ DiscountExplain discountExplain = new DiscountExplain();
+ //账单总金额
+ BigDecimal billPrice = BigDecimal.ZERO;
+ //活动优惠金额
+ BigDecimal activityTotal = BigDecimal.ZERO;
+ //优惠券惠金额
+ BigDecimal couponPrice = BigDecimal.ZERO;
+ //支付总积分
+ Integer scoreCount=0;
- //计算实际支付
- discountExplain.setPayPrice(discountExplain.getPayPrice().add(discountExplain.getPostage()));
- return discountExplain;
+ BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class);
+
+ //计算购物车中物品的优惠信息
+ List<OrderItemDto> orderItemDtos = shopOrderDto.getOrderItemList()
+ .stream().map(orderItemDto -> {
+ return orderCouponGroupService.buildOrderCouponElement(orderItemDto);
+ })
+ .collect(Collectors.toList());
+ //计算未优惠的总金额
+ for (OrderItemDto orderItemDto :orderItemDtos ){
+ if(orderItemDto.getPayType()==ShopShoppingCart.CAR_TYPE_MICRO){
+ billPrice=billPrice.add(orderItemDto.getShopSku().getPrice().multiply(new BigDecimal(orderItemDto.getCount())));
+ }else{
+ billPrice=billPrice.add(orderItemDto.getShopSku().getScorePrice().multiply(new BigDecimal(orderItemDto.getCount())));
+ scoreCount+=orderItemDto.getShopSku().getScoreCount()*orderItemDto.getCount();
+ }
+ }
+ discountExplain.setScorePay(scoreCount);
+
+
+ //计算用户的产品可以参与的店铺优惠活动分组
+ List<ShopCoupon> shopActiveList = new ArrayList<>();//记录用户可以参与的门店活动
+ List<OrderCouponGroup> orderCouponGroupList = new ArrayList<>();
+ int conditionsGroupCount = 0;
+ if (shopOrderDto.getJoinActive() == ShopOrderDto.JOIN_ACTIVE) {//用户参与优惠活动
+ orderCouponGroupList = orderCouponGroupService.buildOrderCouponGroupList(orderItemDtos);
+ conditionsGroupCount = orderCouponGroupList.stream().map(orderCouponGroup -> {
+ if (orderCouponGroup.isSatisfactionCoupon()&&orderCouponGroup.getCoupon()!=null) {
+ shopActiveList.add(orderCouponGroup.getCoupon());
+ return 1;
+ } else {
+ return 0;
+ }
+ }).mapToInt(Integer::intValue).sum();
+ }
+ if(CollUtil.isNotEmpty(shopActiveList)){
+ activityTotal=shopActiveList.stream().map(ShopCoupon:: getOffsetAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
+ }
+
+ //门店活动优惠金额
+ discountExplain.setActivityPrice(activityTotal);
+
+
+ List<CouponReceiveInfoVO> usefulCoupon = new ArrayList<>();
+ CouponReceiveInfoVO shopCoupon = new CouponReceiveInfoVO();
+ //满足店铺活动的订单不能使用优惠券
+ if (conditionsGroupCount > 0) {
+ //计算可用优惠券
+ usefulCoupon = wxShopCouponService.getCartVoCouponList(bizUser.getCompanyId(), orderItemDtos);
+ //获取用户使用的优惠券
+ if (shopOrderDto.getCouponReceiveId() == null) {
+ //如果用户没有选择优惠券则默认选优惠金额最高的
+ //计算使用优惠券后的价格
+ if (CollectionUtils.isNotEmpty(usefulCoupon)) {
+ //根据优惠券ID用户ID查询优惠券信息
+ shopCoupon = usefulCoupon.get(0);
+ }
+ } else if (shopOrderDto.getCouponReceiveId() != 1) {
+ //用户选择了优惠券
+ shopCoupon = shopCouponRecordDao.selectMyCouponByReceiveId(shopOrderDto.getCouponReceiveId());
+ } else {
+ //用户不使用优惠券
+ }
+ //计算优惠券
+ if (shopCoupon.getCouponId() != null) {
+ couponPrice=shopCoupon.getOffsetAmount();
+ }
+ //优惠券金额
+ discountExplain.setCouponPrice(couponPrice);
+ }
+
+
+
+ //计算运费
+ discountExplain.setPostage(calculationPostage(discountExplain.getPayPrice(), HostInterceptor.getCompanyId()));
+
+
+
+ //账单总金额
+ discountExplain.setBillPrice(billPrice.add(discountExplain.getPostage()));
+
+ BigDecimal payPrice=discountExplain.getBillPrice().subtract(activityTotal).subtract(couponPrice);
+ //应付金额
+ discountExplain.setPayPrice(payPrice.doubleValue()>0?payPrice:BigDecimal.ONE);
+
+ AjaxResult result = AjaxResult.buildSuccessInstance("");
+ //结算金额信息
+ result.putInMap("discountExplain", discountExplain);
+ //用户优惠券
+ result.putInMap("usefulCoupon", usefulCoupon);
+ //用户选中的优惠券
+ result.putInMap("shopCoupon", shopCoupon);
+
+ //店铺优惠活动
+ result.putInMap("shopActiveList", shopActiveList);
+
+ return result;
+
}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesGroupServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesGroupServiceImpl.java
index 755f560..0e06b76 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesGroupServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesGroupServiceImpl.java
@@ -396,8 +396,8 @@
DiscountExplain discountExplain = new DiscountExplain();
discountExplain.setPayPrice(payPrice);
discountExplain.setPostage(postPrice);
- discountExplain.setActivity(BigDecimal.ZERO);
- discountExplain.setCoupon(BigDecimal.ZERO);
+ discountExplain.setActivityPrice(BigDecimal.ZERO);
+ discountExplain.setCouponPrice(BigDecimal.ZERO);
discountExplain.setBillPrice(payPrice);
Gson g = new GsonBuilder().create();
shopOrder.setDiscountExplain(g.toJson(discountExplain));
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesSecKillServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesSecKillServiceImpl.java
index 1453dca..b79a20b 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesSecKillServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesSecKillServiceImpl.java
@@ -210,8 +210,8 @@
DiscountExplain discountExplain = new DiscountExplain();
discountExplain.setPayPrice(payPrice);
discountExplain.setPostage(postPrice);
- discountExplain.setActivity(BigDecimal.ZERO);
- discountExplain.setCoupon(BigDecimal.ZERO);
+ discountExplain.setActivityPrice(BigDecimal.ZERO);
+ discountExplain.setCouponPrice(BigDecimal.ZERO);
discountExplain.setBillPrice(payPrice);
Gson g = new GsonBuilder().create();
shopOrder.setDiscountExplain(g.toJson(discountExplain));
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopCouponServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopCouponServiceImpl.java
index bf87285..088d320 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopCouponServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopCouponServiceImpl.java
@@ -1,20 +1,20 @@
package com.matrix.system.shopXcx.api.service.impl;
+import com.matrix.biz.bean.BizUser;
+import com.matrix.component.redis.RedisUserLoginUtils;
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.pojo.PaginationVO;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.StringUtils;
-import com.matrix.biz.bean.BizUser;
-import com.matrix.component.redis.RedisUserLoginUtils;
import com.matrix.system.common.constance.AppConstance;
-
-import com.matrix.system.shopXcx.bean.*;
-import com.matrix.system.shopXcx.dao.*;
+import com.matrix.system.shopXcx.api.pojo.OrderCouponGroup;
+import com.matrix.system.shopXcx.api.pojo.OrderItemDto;
import com.matrix.system.shopXcx.api.service.WxShopCouponService;
import com.matrix.system.shopXcx.api.tools.WxShopCouponUtil;
import com.matrix.system.shopXcx.api.tools.WxShopOrderUtil;
import com.matrix.system.shopXcx.api.vo.CouponReceiveInfoVO;
-import com.matrix.system.shopXcx.api.vo.ShopCartVo;
+import com.matrix.system.shopXcx.bean.*;
+import com.matrix.system.shopXcx.dao.*;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -54,9 +54,10 @@
*
* @return
*/
- public List<CouponReceiveInfoVO> getCartVoCouponList(Long companyId,List<ShopShoppingCart> shopShoppingCarts) {
+ public List<CouponReceiveInfoVO> getCartVoCouponList(Long companyId,List<OrderItemDto> OrderItemDtos){
- //可用优惠券列表
+
+ //可用优惠券列表
List<CouponReceiveInfoVO> shopCoupons = new ArrayList<>();
@@ -77,7 +78,7 @@
//定义购物车优惠分组
- List<ShopCartVo> cartList = new ArrayList<>();
+ List<OrderCouponGroup> cartList = new ArrayList<>();
// 记录所有优惠券,一个优惠券(活动)表示一组
Map<Integer, ShopCoupon> shopCouponMap = new HashMap<>();
@@ -86,24 +87,24 @@
for (int i = 0; i < userAllCoupon.size(); i++) {
CouponReceiveInfoVO couponReceiveInfoVO = userAllCoupon.get(i);
- ShopCartVo shopCarVo = new ShopCartVo();
+ OrderCouponGroup shopCarVo = new OrderCouponGroup();
shopCarVo.setCouponReceiveInfoVO(couponReceiveInfoVO);
- shopCarVo.setCartList(new ArrayList<>());
+ shopCarVo.setOrderItemDtos(new ArrayList<>());
cartList.add(i, shopCarVo);
- for (ShopShoppingCart shoppingCart : shopShoppingCarts) {
+ for (OrderItemDto orderItemDto : OrderItemDtos) {
// 如果匹配到的产品已经出现在其他优惠组中,则需要判断是否移除之前的组
boolean needRemove = false;
//找到产品所有的优惠券
- List<ShopCoupon> productShopCoupons = getCouponListByProductId(shoppingCart.getCartProductId());
+ List<ShopCoupon> productShopCoupons = getCouponListByProductId(orderItemDto.getProductId());
for (ShopCoupon productShopCoupon : productShopCoupons) {
if (couponReceiveInfoVO.getCouponId().equals(productShopCoupon.getId())) {
- LogUtil.debug("购物车" + shoppingCart.getName() + "和优惠券" + couponReceiveInfoVO.getcName() + "匹配");
- shopCarVo.getCartList().add(shoppingCart);
+ LogUtil.debug("购物车" + orderItemDto.getProductId() + "和优惠券" + couponReceiveInfoVO.getcName() + "匹配");
+ shopCarVo.getOrderItemDtos().add(orderItemDto);
break;
}
}
@@ -113,9 +114,9 @@
}
//3.计算各组的金额是否满足,把满足的优惠券全部返回
- for (ShopCartVo shopCartVo : cartList) {
- if (shopCartVo.isSatisfactionCoupon() && CollectionUtils.isNotEmpty(shopCartVo.getCartList())) {
- shopCoupons.add(shopCartVo.getCouponReceiveInfoVO());
+ for (OrderCouponGroup orderCouponGroup : cartList) {
+ if (orderCouponGroup.isSatisfactionCoupon() && CollectionUtils.isNotEmpty(orderCouponGroup.getOrderItemDtos())) {
+ shopCoupons.add(orderCouponGroup.getCouponReceiveInfoVO());
}
}
}
@@ -125,19 +126,19 @@
- private void countPrice(ShopCartVo shopCartVo) {
- List<ShopShoppingCart> cartList = shopCartVo.getCartList();
+ private void countPrice(OrderCouponGroup orderCouponGroup) {
+ List<OrderItemDto> orderItemDtoList = orderCouponGroup.getOrderItemDtos();
// 计算总价
BigDecimal sum = BigDecimal.ZERO;
- for (ShopShoppingCart shopShoppingCart : cartList) {
- sum = sum.add(shopShoppingCart.getPrice().multiply(BigDecimal.valueOf(shopShoppingCart.getCartNumber())));
+ for (OrderItemDto orderItemDto : orderItemDtoList) {
+ sum = sum.add(orderItemDto.getShopSku().getPrice().multiply(BigDecimal.valueOf(orderItemDto.getCount())));
}
// 存在优惠券
- if (sum.compareTo(shopCartVo.getCouponReceiveInfoVO().getMinAmount()) >= 0) {
+ if (sum.compareTo(orderCouponGroup.getCouponReceiveInfoVO().getMinAmount()) >= 0) {
//标记为合理分组
- shopCartVo.setSatisfactionCoupon(true);
+ orderCouponGroup.setSatisfactionCoupon(true);
} else {
- shopCartVo.setSatisfactionCoupon(false);
+ orderCouponGroup.setSatisfactionCoupon(false);
}
}
@@ -299,7 +300,6 @@
* 通过优惠券标签获取优惠券列表
*
* @param tag 标签名称
- * @param shopId
* @return
*/
@Override
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/tools/WxShopOrderUtil.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/tools/WxShopOrderUtil.java
index 7c9a66b..e0b6c40 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/tools/WxShopOrderUtil.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/tools/WxShopOrderUtil.java
@@ -1,16 +1,15 @@
package com.matrix.system.shopXcx.api.tools;
import com.matrix.system.common.bean.CustomerDataDictionary;
-import com.matrix.system.common.dao.CustomerDataDictionaryDao;
import com.matrix.biz.service.BizUserService;
import com.matrix.component.tools.WxTempLateMsgUtil;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.StringUtils;
import com.matrix.system.common.constance.AppConstance;
-import com.matrix.system.shopXcx.api.pojo.AddShopOrderPOJO;
+import com.matrix.system.shopXcx.api.pojo.ShopOrderDto;
import com.matrix.system.shopXcx.api.pojo.OrderPostageInfoPOJO;
-import com.matrix.system.shopXcx.api.pojo.OrderProductSkuPOJO;
+import com.matrix.system.shopXcx.api.pojo.OrderItemDto;
import com.matrix.system.shopXcx.api.service.WxShopMemberDayService;
import com.matrix.system.shopXcx.bean.*;
import com.matrix.system.shopXcx.dao.*;
@@ -95,12 +94,12 @@
/**
* 处理产品规格信息
- * @param addShopOrderPOJO
+ * @param shopOrderDto
*/
- public List<ShopOrderDetails> processProductSkuInfo(ShopOrder shopOrder, AddShopOrderPOJO addShopOrderPOJO,
+ public List<ShopOrderDetails> processProductSkuInfo(ShopOrder shopOrder, ShopOrderDto shopOrderDto,
ShopCoupon shopCoupon) {
List<ShopOrderDetails> resList = new ArrayList<>();
- List<OrderProductSkuPOJO> skuList = addShopOrderPOJO.getSkuList();
+ List<OrderItemDto> skuList = shopOrderDto.getOrderItemList();
if (CollectionUtils.isEmpty(skuList)) {
return resList;
}
@@ -108,9 +107,9 @@
//设置购买数量
int total = 0;
BigDecimal commodityMoney = new BigDecimal("0");
- for (OrderProductSkuPOJO orderProductSkuPOJO : skuList) {
- ids.add(orderProductSkuPOJO.getSkuId());
- total += orderProductSkuPOJO.getCount();
+ for (OrderItemDto orderItemDto : skuList) {
+ ids.add(orderItemDto.getSkuId());
+ total += orderItemDto.getCount();
}
shopOrder.setPurchaseQuantity(total);
List<ShopSku> contrastList = shopSkuDao.selectByIds(ids);
@@ -131,10 +130,10 @@
BigDecimal couponTotalMoney = new BigDecimal("0");
Double discountRate = wxShopMemberDayService.getMemberDay();
- for (OrderProductSkuPOJO orderProductSkuPOJO : skuList) {
+ for (OrderItemDto orderItemDto : skuList) {
boolean isExist = false;
for (ShopSku shopSku : contrastList) {
- if (shopSku.getId().equals(orderProductSkuPOJO.getSkuId())) {
+ if (shopSku.getId().equals(orderItemDto.getSkuId())) {
isExist = true;
ShopOrderDetails shopOrderDetails = new ShopOrderDetails();
shopOrderDetails.setCreateBy(AppConstance.SYSTEM_USER);
@@ -142,9 +141,9 @@
shopOrderDetails.setpId(shopSku.getPId());
shopOrderDetails.setsId(shopSku.getId());
shopOrderDetails.setPrice(shopSku.getPrice());
- shopOrderDetails.setCount(orderProductSkuPOJO.getCount());
+ shopOrderDetails.setCount(orderItemDto.getCount());
BigDecimal price = new BigDecimal(shopSku.getPrice().toString());
- BigDecimal count = new BigDecimal(orderProductSkuPOJO.getCount().toString());
+ BigDecimal count = new BigDecimal(orderItemDto.getCount().toString());
shopOrderDetails.setsTitle(shopSku.getName());
resList.add(shopOrderDetails);
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartGroupVo.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartGroupVo.java
new file mode 100644
index 0000000..0658267
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartGroupVo.java
@@ -0,0 +1,46 @@
+package com.matrix.system.shopXcx.api.vo;
+
+import com.matrix.system.shopXcx.bean.ShopCoupon;
+import com.matrix.system.shopXcx.bean.ShopShoppingCart;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 购物车前台展示对象
+ */
+@Data
+public class ShopCartGroupVo {
+
+ private ShopCoupon coupon;
+
+ //是否满足优惠
+ private boolean satisfactionCoupon;
+
+
+ private List<ShopShoppingCart> cartList=new ArrayList<>();
+
+
+ //提示语
+ private String msg="";
+
+ //优惠小计金额
+ private BigDecimal subtotal=BigDecimal.ZERO;
+
+ //原价
+ private BigDecimal srcPrice=BigDecimal.ZERO;
+
+ //优惠金额
+ private BigDecimal couponPrice=BigDecimal.ZERO;
+ /**
+ * 抵用积分
+ */
+ private BigDecimal scorePay = BigDecimal.ZERO;
+
+ private CouponReceiveInfoVO couponReceiveInfoVO;
+
+
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartVo.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartVo.java
index 90324ed..6d1733e 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartVo.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartVo.java
@@ -2,6 +2,7 @@
import com.matrix.system.shopXcx.bean.ShopCoupon;
import com.matrix.system.shopXcx.bean.ShopShoppingCart;
+import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@@ -9,102 +10,33 @@
/**
* 购物车前台展示对象
*/
+@Data
public class ShopCartVo {
- private ShopCoupon coupon;
+ private ShopCoupon coupon;
- private CouponReceiveInfoVO couponReceiveInfoVO;
+ private CouponReceiveInfoVO couponReceiveInfoVO;
- public CouponReceiveInfoVO getCouponReceiveInfoVO() {
- return couponReceiveInfoVO;
- }
- public void setCouponReceiveInfoVO(CouponReceiveInfoVO couponReceiveInfoVO) {
- this.couponReceiveInfoVO = couponReceiveInfoVO;
- }
+ //是否满足优惠
+ private boolean satisfactionCoupon;
- //是否满足优惠
- private boolean satisfactionCoupon;
+ private List<ShopShoppingCart> cartList;
- private List<ShopShoppingCart> cartList;
+ //提示语
+ private String msg = "";
- //提示语
- private String msg="";
+ //优惠小计金额
+ private BigDecimal subtotal = BigDecimal.ZERO;
- //优惠小计金额
- private BigDecimal subtotal=BigDecimal.ZERO;
+ //原价
+ private BigDecimal srcPrice = BigDecimal.ZERO;
- //原价
- private BigDecimal srcPrice=BigDecimal.ZERO;
+ //优惠金额
+ private BigDecimal couponPrice = BigDecimal.ZERO;
+ /**
+ * 抵用积分
+ */
+ private BigDecimal scorePay = BigDecimal.ZERO;
- //优惠金额
- private BigDecimal couponPrice=BigDecimal.ZERO;
- /**
- * 抵用积分
- */
- private BigDecimal scorePay = BigDecimal.ZERO;
-
- public ShopCoupon getCoupon() {
- return coupon;
- }
-
- public void setCoupon(ShopCoupon coupon) {
- this.coupon = coupon;
- }
-
- public boolean isSatisfactionCoupon() {
- return satisfactionCoupon;
- }
-
- public void setSatisfactionCoupon(boolean satisfactionCoupon) {
- this.satisfactionCoupon = satisfactionCoupon;
- }
-
- public List<ShopShoppingCart> getCartList() {
- return cartList;
- }
-
- public void setCartList(List<ShopShoppingCart> cartList) {
- this.cartList = cartList;
- }
-
- public String getMsg() {
- return msg;
- }
-
- public void setMsg(String msg) {
- this.msg = msg;
- }
-
- public BigDecimal getSubtotal() {
- return subtotal;
- }
-
- public void setSubtotal(BigDecimal subtotal) {
- this.subtotal = subtotal;
- }
-
- public BigDecimal getSrcPrice() {
- return srcPrice;
- }
-
- public void setSrcPrice(BigDecimal srcPrice) {
- this.srcPrice = srcPrice;
- }
-
- public BigDecimal getCouponPrice() {
- return couponPrice;
- }
-
- public BigDecimal getScorePay() {
- return scorePay;
- }
-
- public void setScorePay(BigDecimal scorePay) {
- this.scorePay = scorePay;
- }
-
- public void setCouponPrice(BigDecimal couponPrice) {
- this.couponPrice = couponPrice;
- }
}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/dao/ShopShoppingCartDao.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/dao/ShopShoppingCartDao.java
index d8ef5de..c568f5b 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/dao/ShopShoppingCartDao.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/dao/ShopShoppingCartDao.java
@@ -36,7 +36,7 @@
public ShopShoppingCart selectById(Integer cartId);
- public List<ShopShoppingCart> selectByCartUserId(@Param("shopId")Long shopId, @Param("cartUserId") String cartUserId,@Param("cartType") Integer cartType);
+ public List<ShopShoppingCart> selectByCartUserId(@Param("shopId")Long shopId, @Param("cartUserId") String cartUserId);
public ShopShoppingCart selectForUpdate(Integer cartId);
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/dto/DiscountExplain.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/dto/DiscountExplain.java
index fb48cdf..a9519aa 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/dto/DiscountExplain.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/dto/DiscountExplain.java
@@ -1,10 +1,13 @@
package com.matrix.system.shopXcx.dto;
+import lombok.Data;
+
import java.math.BigDecimal;
/**
* 订单优惠说明
*/
+@Data
public class DiscountExplain {
/**
@@ -15,13 +18,13 @@
/**
* 优惠券金额
*/
- private BigDecimal coupon=BigDecimal.ZERO;
+ private BigDecimal couponPrice =BigDecimal.ZERO;
/**
* 活动满减金额
*/
- private BigDecimal activity=BigDecimal.ZERO;
+ private BigDecimal activityPrice =BigDecimal.ZERO;
/**
* 运费
@@ -32,44 +35,9 @@
* 最终支付金额
*/
private BigDecimal payPrice=BigDecimal.ZERO;
+ /**
+ * 最终支付积分
+ */
+ private Integer scorePay;
- public BigDecimal getBillPrice() {
- return billPrice;
- }
-
- public void setBillPrice(BigDecimal billPrice) {
- this.billPrice = billPrice;
- }
-
- public BigDecimal getCoupon() {
- return coupon;
- }
-
- public void setCoupon(BigDecimal coupon) {
- this.coupon = coupon;
- }
-
- public BigDecimal getActivity() {
- return activity;
- }
-
- public void setActivity(BigDecimal activity) {
- this.activity = activity;
- }
-
- public BigDecimal getPostage() {
- return postage;
- }
-
- public void setPostage(BigDecimal postage) {
- this.postage = postage;
- }
-
- public BigDecimal getPayPrice() {
- return payPrice;
- }
-
- public void setPayPrice(BigDecimal payPrice) {
- this.payPrice = payPrice;
- }
}
diff --git a/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopOrderDetailsDao.xml b/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopOrderDetailsDao.xml
index ffb89a5..46254ee 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopOrderDetailsDao.xml
+++ b/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopOrderDetailsDao.xml
@@ -50,9 +50,7 @@
<!--规格信息-->
<association property="shopSku" column="s_id"
select="com.matrix.system.shopXcx.dao.ShopSkuDao.selectById"/>
- <!--查询生产企业-->
- <association property="productionEnterprise" column="{pId=p_id}"
- select="selectProductionEnterpriseByPid"/>
+
</resultMap>
--
Gitblit v1.9.1