From 3868b706ee3ee115a400d77abc3b69b83ea448c7 Mon Sep 17 00:00:00 2001 From: jyy <jyy> Date: Fri, 03 Sep 2021 14:15:36 +0800 Subject: [PATCH] bug123 --- zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java | 211 ++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 153 insertions(+), 58 deletions(-) diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java index 647ead9..eace5b4 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java @@ -401,8 +401,6 @@ //获取折扣----- Double zk = zk = 1.0; - //验证商品是否只购买了一次 - checkBuyOnce(car, info.getId()); SysOrder order = new SysOrder(); SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); @@ -433,8 +431,7 @@ int count = 0; // 设置订单条目 for (ShoppingCarItem carItem : car.getCarItems()) { - // 检测最大销售数量 - checkIsArrivedMax(carItem); + SysOrderItem orderItem = new SysOrderItem(); orderItem.setOrderId(order.getId()); orderItem.setCount(carItem.getCount()); @@ -472,20 +469,6 @@ } - /** - * 验证商品是否购买过一次 - * - * @Title: checkBuyOnce @author:jyy @param car void 返回类型 @date - * 2016年9月22日 上午10:05:33 @throws - */ - private void checkBuyOnce(ShoppingCarItemsVo car, Long vipId) { - for (ShoppingCarItem carItem : car.getCarItems()) { - if (shoppingGoodsDao.selectBuyCount(carItem.getGoodsId(), vipId) > 0) { - ShoppingGoods goods = shoppingGoodsDao.selectById(carItem.getGoodsId()); - throw new GlobleException(goods.getName() + "只能购买一次!"); - } - } - } /** * jyy 收款 @@ -497,6 +480,11 @@ if (!Dictionary.ORDER_STATU_DFK.equals(pageOrder.getStatu())) { throw new GlobleException("该订单已经收过款,请刷新页面再试!"); } + + //检查交易限制调整 + checkSealLimit(pageOrder); + + // 更新收款时间 pageOrder.setPayTime(new Date()); pageOrder.setStatu(Dictionary.ORDER_STATU_YFK); @@ -533,6 +521,43 @@ } /** + * 检查产品销售次数 + */ + private void checkSealLimit(SysOrder pageOrder) { + pageOrder.getItems().forEach(item->{ + ShoppingGoods shopGoods = shoppingGoodsDao.selectById(item.getGoodsId()); + + //最大销售次数检测 + Integer maxNum = shopGoods.getCarMaxSaleCount(); + if (maxNum != null && maxNum != 0) { + Integer buyNum = orderItemDao.selectByGoodsId(shopGoods.getId(),null); + if ((buyNum + item.getCount()) > maxNum) { + throw new GlobleException(shopGoods.getName() + "已超过最大销售数量"); + } + if ((buyNum + item.getCount()) == maxNum) { + if (!shopGoods.getStaus().equals(Dictionary.BUSINESS_STATE_DOWN)) { + shopGoods.setStaus(Dictionary.BUSINESS_STATE_DOWN); + shoppingGoodsDao.update(shopGoods); + } + } + } + //每人限购次数检测 + Integer onceCount = shopGoods.getIsOnce(); + if(onceCount!=null && onceCount!=0){ + Integer buyOnceCount = orderItemDao.selectByGoodsId(shopGoods.getId(),pageOrder.getVipId()); + + if ((buyOnceCount + item.getCount()) > onceCount) { + throw new GlobleException(shopGoods.getName() + "每人限购"+onceCount+"次"); + } + } + + }); + + } + + + + /** * 设置会员消费积分 * @param pageOrder */ @@ -552,16 +577,24 @@ &&StringUtils.isNotBlank(cashConsumption.getParamValue())){ BigDecimal scoreSetting0 = new BigDecimal(cashConsumption.getParamValue()); - cashScore[0]= cashPayAmount.divide(scoreSetting0).intValue(); + if(scoreSetting0.compareTo(BigDecimal.ZERO)>0) { + cashScore[0] = cashPayAmount.divide(scoreSetting0).intValue(); + } if(StringUtils.isNotBlank(cashConsumption.getParamValue1())){ BigDecimal scoreSetting1 = new BigDecimal(cashConsumption.getParamValue1()); - cashScore[1]= cashPayAmount.divide(scoreSetting1).intValue(); + if(scoreSetting1.compareTo(BigDecimal.ZERO)>0){ + cashScore[1]= cashPayAmount.divide(scoreSetting1).intValue(); + } + } if(StringUtils.isNotBlank(cashConsumption.getParamValue2())){ BigDecimal scoreSetting2 = new BigDecimal(cashConsumption.getParamValue2()); - cashScore[2]= cashPayAmount.divide(scoreSetting2).intValue(); + if(scoreSetting2.compareTo(BigDecimal.ZERO)>0){ + cashScore[2]= cashPayAmount.divide(scoreSetting2).intValue(); + } + } } @@ -577,16 +610,22 @@ &&StringUtils.isNotBlank(principalBalanceConsumption.getParamValue())){ BigDecimal scoreSetting0 = new BigDecimal(principalBalanceConsumption.getParamValue()); - cardScore[0]= cardPayAmount.divide(scoreSetting0).intValue(); + if(scoreSetting0.compareTo(BigDecimal.ZERO)>0) { + cardScore[0] = cardPayAmount.divide(scoreSetting0).intValue(); + } if(StringUtils.isNotBlank(principalBalanceConsumption.getParamValue1())){ BigDecimal scoreSetting1 = new BigDecimal(principalBalanceConsumption.getParamValue1()); - cardScore[1]= cardPayAmount.divide(scoreSetting1).intValue(); + if(scoreSetting1.compareTo(BigDecimal.ZERO)>0) { + cardScore[1] = cardPayAmount.divide(scoreSetting1).intValue(); + } } if(StringUtils.isNotBlank(principalBalanceConsumption.getParamValue2())){ BigDecimal scoreSetting2 = new BigDecimal(principalBalanceConsumption.getParamValue2()); - cardScore[2]= cardPayAmount.divide(scoreSetting2).intValue(); + if(scoreSetting2.compareTo(BigDecimal.ZERO)>0) { + cardScore[2] = cardPayAmount.divide(scoreSetting2).intValue(); + } } } @@ -601,16 +640,22 @@ &&StringUtils.isNotBlank(bonusBalanceConsumption.getParamValue())){ BigDecimal scoreSetting0 = new BigDecimal(bonusBalanceConsumption.getParamValue()); - giftScore[0]= giftPayAmount.divide(scoreSetting0).intValue(); + if(scoreSetting0.compareTo(BigDecimal.ZERO)>0) { + giftScore[0] = giftPayAmount.divide(scoreSetting0).intValue(); + } if(StringUtils.isNotBlank(bonusBalanceConsumption.getParamValue1())){ BigDecimal scoreSetting1 = new BigDecimal(bonusBalanceConsumption.getParamValue1()); - giftScore[1]= giftPayAmount.divide(scoreSetting1).intValue(); + if(scoreSetting1.compareTo(BigDecimal.ZERO)>0) { + giftScore[1] = giftPayAmount.divide(scoreSetting1).intValue(); + } } if(StringUtils.isNotBlank(bonusBalanceConsumption.getParamValue2())){ BigDecimal scoreSetting2 = new BigDecimal(bonusBalanceConsumption.getParamValue2()); - giftScore[2]= giftPayAmount.divide(scoreSetting2).intValue(); + if(scoreSetting2.compareTo(BigDecimal.ZERO)>0) { + giftScore[2] = giftPayAmount.divide(scoreSetting2).intValue(); + } } } @@ -621,15 +666,15 @@ //添加自己的积分 if(selfScore>0){ - scoreVipDetailService.addScore( - vipInfo.getId(), - pageOrder.getStaffId(), - pageOrder.getShopId(), - selfScore, - pageOrder.getId(), - ScoreVipDetail.SCORE_VIP_TYPE_CASH, - "消费奖励" - ); + scoreVipDetailService.addScore( + vipInfo.getId(), + pageOrder.getStaffId(), + pageOrder.getShopId(), + selfScore, + pageOrder.getId(), + ScoreVipDetail.SCORE_VIP_TYPE_CASH, + "消费奖励" + ); } if(vipInfo.getRecommendId()!=null){ @@ -732,7 +777,7 @@ // 最大发卡数量为0代表不做限制 if (maxNum != null && maxNum != 0) { // 查询该商品已经被购买的次数 - Integer buyNum = orderItemDao.selectByGoodsId(shopGoods.getId()); + Integer buyNum = orderItemDao.selectByGoodsId(shopGoods.getId(),null); buyNum = (buyNum == null ? 0 : buyNum); if ((buyNum + carItem.getCount()) > maxNum) { throw new GlobleException(shopGoods.getName() + "已超过最大销售数量"); @@ -896,7 +941,6 @@ moneyCardUse.setGiftMoney(moneyCar.getReferencePice()); moneyCardUse.setRealMoney(moneyCar.getSealPice()); moneyCardUse.setGoodsId(moneyCar.getId()); - moneyCardUse.setIsOver(Dictionary.FLAG_NO_N); moneyCardUse.setOrderItemId(sysOrderItem.getId()); moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_GM); moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX); @@ -1144,7 +1188,7 @@ List<ShoppingGoodsAssemble> assembleList = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_XM); assembleList.forEach(item -> { //TODO 补综合卡逻辑 - createProjuseByAssemble(order, sysOrderItem, item, null, null); + createProjuseByAssemble(order, sysOrderItem, item, null, null,null,0); }); //处理综合卡中包含的套餐 @@ -1165,7 +1209,7 @@ * 通过组合关系创建用户项目余次 */ private SysProjUse createProjuseByAssemble(SysOrder order, SysOrderItem sysOrderItem, - ShoppingGoodsAssemble goodsAssemble, Long taocanId, Date failTime) { + ShoppingGoodsAssemble goodsAssemble, Long taocanId, Date failTime,String source,int maxCount) { //计算折扣 Double zk = sysOrderItem.getZkPrice() / sysOrderItem.getPrice(); @@ -1173,25 +1217,38 @@ puse.setIsOver(Dictionary.DELETED_N); puse.setOrderItemId(sysOrderItem.getId()); puse.setProjId(goodsAssemble.getAssembleGoodId()); - puse.setSurplusCount(goodsAssemble.getTotal()); + puse.setSurplusCount(goodsAssemble.getTotal()==null?maxCount: goodsAssemble.getTotal()); puse.setDeductionNum(goodsAssemble.getDeductionNum()); puse.setProjName(goodsAssemble.getShoppingGoods().getName()); puse.setVipId(order.getVipId()); puse.setStatus(Dictionary.TAOCAN_STATUS_YX); puse.setTaocanId(taocanId); puse.setType(Dictionary.SHOPPING_GOODS_TYPE_XM); + puse.setSource(source); + if (taocanId == null) { puse.setPrice(goodsAssemble.getShoppingGoods().getPrice() * zk); } else { puse.setPrice(goodsAssemble.getPrice() * zk); } - puse.setBalance(MoneyUtil.mul(puse.getPrice(), Double.valueOf(puse.getSurplusCount()))); - // 赠送和打折后金额为0的都视为赠送项目 - if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_NO) && sysOrderItem.getZkPrice() > 0) { - puse.setSource(Dictionary.TAOCAN_SOURCE_GM); - } else { - puse.setSource(Dictionary.TAOCAN_SOURCE_ZS); + + + //赠送项目是否计算消耗业绩否则 赠送产品按原价计算消耗 + boolean zsConsumeAchieve = projServicesService.skipServiceOrderStep(Dictionary.ZS_CONSUME_ACHIEVE); + if(zsConsumeAchieve){ + if(sysOrderItem.getPrice()<=0){ + //等于0取原价 + if (taocanId == null) { + puse.setPrice(goodsAssemble.getShoppingGoods().getPrice() ); + } else { + puse.setPrice(goodsAssemble.getPrice()); + } + } + }else{ + puse.setPrice(0D); } + + puse.setBalance(MoneyUtil.mul(puse.getPrice(), Double.valueOf(puse.getSurplusCount()))); puse.setFailTime(failTime); sysProjUseDao.insert(puse); return puse; @@ -1224,7 +1281,7 @@ taocanProjUse.setIsCourse(taocanShoppingGoods.getIsCourse()); taocanProjUse.setIsInfinite(taocanShoppingGoods.getIsInfinite()); // 赠送和打折后金额为0的都视为赠送项目 - if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_NO) && sysOrderItem.getZkPrice() > 0) { + if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_NO) && sysOrderItem.getZkPrice() > 0 && !isGiftMoneyPay(order)) { taocanProjUse.setSource(Dictionary.TAOCAN_SOURCE_GM); } else { taocanProjUse.setSource(Dictionary.TAOCAN_SOURCE_ZS); @@ -1240,21 +1297,26 @@ //创建套餐绑定的项目 List<ShoppingGoodsAssemble> assembleList = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(projId, ShoppingGoods.SHOPPING_GOODS_TYPE_XM); for (ShoppingGoodsAssemble assemble : assembleList) { - SysProjUse tempUse = createProjuseByAssemble(order, sysOrderItem, assemble, taocanProjUse.getId(),taocanProjUse.getFailTime()); + SysProjUse tempUse = createProjuseByAssemble(order, sysOrderItem, assemble, taocanProjUse.getId(),taocanProjUse.getFailTime(),taocanProjUse.getSource(),taocanShoppingGoods.getCarUseCount()); sumBanance += tempUse.getBalance(); surplusCount += tempUse.getSurplusCount(); } if (Dictionary.FLAG_NO_N.equals(taocanShoppingGoods.getIsCourse())) { //固定套餐,剩余次数等于绑定项目的次数 taocanProjUse.setSurplusCount(surplusCount); + //合计套餐余额 + taocanProjUse.setBalance(sumBanance); } else { //任选套餐剩余次数等于最大使用次数 taocanProjUse.setSurplusCount(taocanShoppingGoods.getCarUseCount()); + taocanProjUse.setBalance(sysOrderItem.getZkPrice()); } - //合计套餐余额 - taocanProjUse.setBalance(sumBanance); + sysProjUseDao.update(taocanProjUse); } + + @Autowired + private SysProjServicesService projServicesService; /** * 根据订单创建用户项目使用情况 @@ -1271,19 +1333,49 @@ puse.setVipId(order.getVipId()); puse.setStatus(Dictionary.TAOCAN_STATUS_YX); puse.setType(Dictionary.SHOPPING_GOODS_TYPE_XM); - puse.setBalance(sysOrderItem.getZkPrice()); - puse.setPrice(sysOrderItem.getZkPrice()); + + puse.setProjName(sysOrderItem.getShoppingGoods().getName()); + + // 赠送和打折后金额为0的都视为赠送项目 - if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_NO) && sysOrderItem.getZkPrice() > 0) { + if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_NO) && sysOrderItem.getZkPrice() > 0 && !isGiftMoneyPay(order)) { puse.setSource(Dictionary.TAOCAN_SOURCE_GM); + puse.setPrice(sysOrderItem.getZkPrice()); } else { puse.setSource(Dictionary.TAOCAN_SOURCE_ZS); + //赠送项目是否计算消耗业绩否则 赠送产品按原价计算消耗 + boolean zsConsumeAchieve = projServicesService.skipServiceOrderStep(Dictionary.ZS_CONSUME_ACHIEVE); + if(zsConsumeAchieve){ + puse.setPrice(sysOrderItem.getShoppingGoods().getSealPice()); + }else{ + puse.setPrice(0D); + } + + } // 设置失效时间 Date invalidTime = shoppingGoodsService.calInvalidTime(sysOrderItem.getShoppingGoods(), 1, null); puse.setFailTime(invalidTime); + puse.setBalance(sysOrderItem.getShoppingGoods().getSealPice()*puse.getSurplusCount()); sysProjUseDao.insert(puse); + } + + /** + * 全是赠送金额,且配置了赠送金额购买计算为赠送 + * @param order + * @return + */ + private boolean isGiftMoneyPay(SysOrder order) { + BusParameterSettings giftiIsfree = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.SHOP_MANAGE_GIFTISFREE, order.getCompanyId()); + if(giftiIsfree.getParamValue().equals("是")){ + return order.getFlows().stream().allMatch(item -> SysOrderFlow.IS_GIFT_Y.equals(item.getIsGift()) + && item.getAmount().doubleValue() >0D); + }else{ + return false; + } + + } @@ -1352,6 +1444,7 @@ orderItem.setPrice(czVo.getBjmoney()); orderItem.setStatus(Dictionary.ORDER_STATU_YFK); orderItem.setAchieveList(czVo.getAchaeveList()); + orderItem.setShoppingGoods(shoppingGoods); orderItemDao.insert(orderItem); List<SysOrderItem> items = new ArrayList<>(); items.add(orderItem); @@ -1372,9 +1465,12 @@ moneyCardUseFlowDao.insert(moneyCardUseFlow); order.setFlows(czVo.getFlows()); + addOrderFlow(order); + // 添加员工业绩 achieveNewService.addAchaeveByOrder(order); + return order; } @@ -1431,7 +1527,7 @@ sourceOrder.setIsHasRefund(SysOrder.IS_HAS_REFUND_Y); // sourceOrder.setStatu(Dictionary.ORDER_STATU_TK); sysOrderDao.update(sourceOrder); - SysOrder oldOrder=sysOrderDao.selectById( sysOrder.getOldOrderId()); + SysOrder oldOrder=sysOrderDao.selectById(sysOrder.getOldOrderId()); sysOrder.setId(null); sysOrder.setStaffId(user.getSuId()); @@ -1583,7 +1679,7 @@ int sub = sysProjUse.getSurplusCount() - item.getCount(); if (sub < 0) { - throw new GlobleException("项目余次不足"); + throw new GlobleException("项目余次不足"); }else if(sub==0){ sysProjUse.setIsOver(Dictionary.FLAG_YES_Y); sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX); @@ -1604,7 +1700,7 @@ List<SysProjUse> sysProjUses = sysProjUseDao.selectByModel(queryProjUse); - for (int i = 0; i < item.getCount(); i++) { + for (int i = 0; i < sysProjUses.size(); i++) { SysProjUse sysProjUse = sysProjUses.get(i); sysProjUse.setIsOver(Dictionary.FLAG_YES_Y); @@ -1621,7 +1717,6 @@ if (Dictionary.SHOPPING_GOODS_TYPE_CZK.equals(item.getType())) { MoneyCardUse queryCardUse = new MoneyCardUse(); - queryCardUse.setIsOver(Dictionary.FLAG_NO_N); queryCardUse.setStatus(Dictionary.TAOCAN_STATUS_YX); queryCardUse.setOrderItemId(item.getOldItemId()); -- Gitblit v1.9.1