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