From 393d296e43f0e5f11e524cab5446bcd3eee94e89 Mon Sep 17 00:00:00 2001 From: jyy <jyy> Date: Sat, 12 Jun 2021 17:47:38 +0800 Subject: [PATCH] 新增赠送项目是否计算消耗控制 --- zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java | 264 ++++++++++++++++++++++++++++++++++------------------ 1 files changed, 170 insertions(+), 94 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 f91cbfd..0384cfd 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 @@ -5,6 +5,7 @@ import com.matrix.core.exception.GlobleException; import com.matrix.core.pojo.PaginationVO; import com.matrix.core.tools.DateUtil; +import com.matrix.core.tools.LogUtil; import com.matrix.core.tools.StringUtils; import com.matrix.core.tools.WebUtil; import com.matrix.system.app.dto.OrderListDto; @@ -15,6 +16,7 @@ import com.matrix.system.app.vo.RankingVo; import com.matrix.system.common.bean.BusParameterSettings; import com.matrix.system.common.bean.SysUsers; +import com.matrix.system.common.constance.AppConstance; import com.matrix.system.common.dao.BusParameterSettingsDao; import com.matrix.system.common.dao.SysUsersDao; import com.matrix.system.constance.Dictionary; @@ -119,6 +121,8 @@ @Autowired private SysInstoreInfoService sysInstoreInfoService; + @Autowired + BusParameterSettingsDao parameterSettingsDao; @Value("${evn}") private String evn; @@ -493,6 +497,12 @@ if (!Dictionary.ORDER_STATU_DFK.equals(pageOrder.getStatu())) { throw new GlobleException("该订单已经收过款,请刷新页面再试!"); } + + //交易业绩设置是否合理 + + checkAchieveIsOk(pageOrder); + + // 更新收款时间 pageOrder.setPayTime(new Date()); pageOrder.setStatu(Dictionary.ORDER_STATU_YFK); @@ -529,6 +539,28 @@ } /** + * 交易业绩设置是否合理 + * @param pageOrder + */ + private void checkAchieveIsOk(SysOrder pageOrder) { + double huakouSum = pageOrder.getItems().stream() + .mapToDouble( + item -> + item.getAchieveList().stream() + .filter(achieveNew -> "划扣".equals(achieveNew.getPayMethod())) + .mapToDouble(achieve -> achieve.getGoodsCash()).sum() + ).sum(); + + double czkPay= pageOrder.getFlows().stream() + .filter(sysOrderFlow -> "储值卡".equals(sysOrderFlow.getPayMethod())) + .mapToDouble(sysOrderFlow ->sysOrderFlow.getAmount().doubleValue()).sum(); + + if(czkPay!=huakouSum){ + throw new GlobleException("划扣业绩不等于储值卡扣款金额,请修改业绩设置!"); + } + } + + /** * 设置会员消费积分 * @param pageOrder */ @@ -548,16 +580,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(); + } + } } @@ -573,16 +613,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(); + } } } @@ -597,16 +643,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(); + } } } @@ -676,7 +728,7 @@ ShoppingGoods goods = shoppingGoodsDao.selectById(goodsId); flow.setFlowContent(goods.getName() + "等" + sourceOrder.getItems().size() + "件产品"); // 若是退款,则取负数 - if (Dictionary.ORDER_STATU_TK.equals(sourceOrder.getStatu())) { + if (SysOrder.ORDER_TYPE_REFUND== sourceOrder.getOrderType()) { flow.setFlowType(SysOrderFlow.FLOW_TYPE_REFUND); flow.setAmount(flow.getAmount().negate()); flow.setOrderId(sourceOrder.getOldOrderId()); @@ -984,8 +1036,6 @@ } - @Autowired - BusParameterSettingsDao parameterSettingsDao; /** * @param order 新增出库单并更新本店库存 @@ -995,103 +1045,110 @@ @Override public void addOutStore(SysOrder order) { - List<SysOutStoreItem> storeItemList = new ArrayList<>(); + BusParameterSettings manageStockSetting = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WAREHOUSE_MANAGE_STOCK, order.getCompanyId()); + if(AppConstance.IS_Y.equals(manageStockSetting.getParamValue())){ - for (SysOrderItem sysOrderItem : order.getItems()) { + List<SysOutStoreItem> storeItemList = new ArrayList<>(); - if (ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP.equals(sysOrderItem.getType())) { + for (SysOrderItem sysOrderItem : order.getItems()) { - SysOutStoreItem storeItem = new SysOutStoreItem(); - storeItem.setSkuId(sysOrderItem.getGoodsId()); - storeItem.setAmount(Double.valueOf(sysOrderItem.getCount())); - storeItemList.add(storeItem); + if (ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP.equals(sysOrderItem.getType())) { - } else if (ShoppingGoods.SHOPPING_GOODS_TYPE_TC.equals(sysOrderItem.getType()) + SysOutStoreItem storeItem = new SysOutStoreItem(); + storeItem.setSkuId(sysOrderItem.getGoodsId()); + storeItem.setAmount(Double.valueOf(sysOrderItem.getCount())); + storeItemList.add(storeItem); - || ShoppingGoods.SHOPPING_GOODS_TYPE_ZHK.equals(sysOrderItem.getType())) { + } else if (ShoppingGoods.SHOPPING_GOODS_TYPE_TC.equals(sysOrderItem.getType()) - List<ShoppingGoodsAssemble> goodsList = new ArrayList<>(); + || ShoppingGoods.SHOPPING_GOODS_TYPE_ZHK.equals(sysOrderItem.getType())) { - goodsList.addAll(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP)); + List<ShoppingGoodsAssemble> goodsList = new ArrayList<>(); - if (ShoppingGoods.SHOPPING_GOODS_TYPE_ZHK.equals(sysOrderItem.getType())) { - //综合卡处理,中的套餐,中的家居产品 - List<ShoppingGoodsAssemble> zhkAssemble = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_TC); - zhkAssemble.forEach(item -> { - goodsList.addAll(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(item.getAssembleGoodId(), ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP)); + goodsList.addAll(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP)); + + if (ShoppingGoods.SHOPPING_GOODS_TYPE_ZHK.equals(sysOrderItem.getType())) { + //综合卡处理,中的套餐,中的家居产品 + List<ShoppingGoodsAssemble> zhkAssemble = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_TC); + zhkAssemble.forEach(item -> { + goodsList.addAll(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(item.getAssembleGoodId(), ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP)); + }); + } + + goodsList.forEach(item -> { + SysOutStoreItem storeItem = new SysOutStoreItem(); + storeItem.setSkuId(item.getAssembleGoodId()); + storeItem.setAmount(Double.valueOf(item.getTotal())); + storeItemList.add(storeItem); }); } - - goodsList.forEach(item -> { - SysOutStoreItem storeItem = new SysOutStoreItem(); - storeItem.setSkuId(item.getAssembleGoodId()); - storeItem.setAmount(Double.valueOf(item.getTotal())); - storeItemList.add(storeItem); - }); } - } - if (CollectionUtils.isNotEmpty(storeItemList)) { - Long warehouseId = warehouseDao.findShopWarehouse(order.getShopId()).get(0).getId(); - SysOutStore outStore = new SysOutStore(); - outStore.setOutStoreNo(codeService.getOutStoreCode()); - outStore.setOrderId(order.getId()); - outStore.setShopId(order.getShopId()); - outStore.setShopId(order.getShopId()); - outStore.setStaffId(order.getStaffId()); - outStore.setType(Dictionary.OUT_STORE_JJCPCK); - outStore.setServiceNo(order.getOrderNo()); - outStore.setTime(new Date()); - outStore.setCheckStatus(Dictionary.CHECK_STATUS_DSH); - outStore.setCompanyId(order.getCompanyId()); - sysOutStoreDao.insert(outStore); + if (CollectionUtils.isNotEmpty(storeItemList)) { + Long warehouseId = warehouseDao.findShopWarehouse(order.getShopId()).get(0).getId(); + SysOutStore outStore = new SysOutStore(); + outStore.setOutStoreNo(codeService.getOutStoreCode()); + outStore.setOrderId(order.getId()); + outStore.setShopId(order.getShopId()); + outStore.setShopId(order.getShopId()); + outStore.setStaffId(order.getStaffId()); + outStore.setType(Dictionary.OUT_STORE_JJCPCK); + outStore.setServiceNo(order.getOrderNo()); + outStore.setTime(new Date()); + outStore.setCheckStatus(Dictionary.CHECK_STATUS_DSH); + outStore.setCompanyId(order.getCompanyId()); + sysOutStoreDao.insert(outStore); - //出库明细,根据批次维度定义 - List<SysOutStoreItem> realOutStoreItemList = new ArrayList<>(); + //出库明细,根据批次维度定义 + List<SysOutStoreItem> realOutStoreItemList = new ArrayList<>(); - storeItemList.forEach(outStoreItem -> { + storeItemList.forEach(outStoreItem -> { - //设置出库主键 - outStoreItem.setOutStoreId(outStore.getId()); + //设置出库主键 + outStoreItem.setOutStoreId(outStore.getId()); - //计算库存总数是否满足本次扣减的需求 - List<SysStoreInfo> stores = storeInfoDao.selectStoInfoBySku(outStoreItem.getSkuId(), warehouseId); - double sum = stores.stream().mapToDouble(item -> item.getStoreTotal()).sum(); - if (sum < outStoreItem.getAmount()) { - ShoppingGoods sysGoods = shoppingGoodsDao.selectById(outStoreItem.getSkuId()); - if (sysGoods != null) { - throw new GlobleException("出库失败:【" + sysGoods.getName() + "库存不足】"); + //计算库存总数是否满足本次扣减的需求 + List<SysStoreInfo> stores = storeInfoDao.selectStoInfoBySku(outStoreItem.getSkuId(), warehouseId); + double sum = stores.stream().mapToDouble(item -> item.getStoreTotal()).sum(); + if (sum < outStoreItem.getAmount()) { + ShoppingGoods sysGoods = shoppingGoodsDao.selectById(outStoreItem.getSkuId()); + if (sysGoods != null) { + throw new GlobleException("出库失败:【" + sysGoods.getName() + "库存不足】"); - } else { - throw new GlobleException("出库失败没有找到出库产品"); + } else { + throw new GlobleException("出库失败没有找到出库产品"); + } } - } - //循环获取所有批次产品,并扣减库存 - Double number = outStoreItem.getAmount(); - for (SysStoreInfo storeInfo : stores) { - Double oldStoreTotal = storeInfo.getStoreTotal(); - Double surplus = storeInfo.getStoreTotal() - number; - //更新库存 - storeInfo.setStoreTotal(surplus < 0 ? 0 : surplus); + //循环获取所有批次产品,并扣减库存 + Double number = outStoreItem.getAmount(); + for (SysStoreInfo storeInfo : stores) { + Double oldStoreTotal = storeInfo.getStoreTotal(); + Double surplus = storeInfo.getStoreTotal() - number; + //更新库存 + storeInfo.setStoreTotal(surplus < 0 ? 0 : surplus); - //每次扣减库存都创建一个出库记录 - SysOutStoreItem sysOutStoreItem = new SysOutStoreItem(); - BeanUtils.copyProperties(outStoreItem, sysOutStoreItem); - sysOutStoreItem.setStoreId(storeInfo.getId()); - sysOutStoreItem.setAmount(oldStoreTotal - storeInfo.getStoreTotal()); - realOutStoreItemList.add(sysOutStoreItem); + //每次扣减库存都创建一个出库记录 + SysOutStoreItem sysOutStoreItem = new SysOutStoreItem(); + BeanUtils.copyProperties(outStoreItem, sysOutStoreItem); + sysOutStoreItem.setStoreId(storeInfo.getId()); + sysOutStoreItem.setAmount(oldStoreTotal - storeInfo.getStoreTotal()); + realOutStoreItemList.add(sysOutStoreItem); - storeInfoDao.update(storeInfo); - //扣除后剩余库存大于0则跳出扣除,否则剩余数量的负数的绝对值就是再次扣减的数量 - if (surplus > 0) { - break; - } else { - number = Math.abs(surplus); + storeInfoDao.update(storeInfo); + //扣除后剩余库存大于0则跳出扣除,否则剩余数量的负数的绝对值就是再次扣减的数量 + if (surplus > 0) { + break; + } else { + number = Math.abs(surplus); + } } - } - }); - sysOutStoreItemDao.batchInsert(realOutStoreItemList); + }); + sysOutStoreItemDao.batchInsert(realOutStoreItemList); + } + + }else{ + LogUtil.debug("不管理库存"); } @@ -1176,13 +1233,20 @@ } 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); + if (taocanId == null) { + puse.setPrice(goodsAssemble.getShoppingGoods().getPrice() ); + } else { + puse.setPrice(goodsAssemble.getPrice()); + } } + puse.setBalance(MoneyUtil.mul(puse.getPrice(), Double.valueOf(puse.getSurplusCount()))); puse.setFailTime(failTime); sysProjUseDao.insert(puse); return puse; @@ -1262,18 +1326,22 @@ 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) { puse.setSource(Dictionary.TAOCAN_SOURCE_GM); + puse.setPrice(sysOrderItem.getZkPrice()); } else { puse.setSource(Dictionary.TAOCAN_SOURCE_ZS); + //赠送产品按原价计算消耗 + puse.setPrice(sysOrderItem.getShoppingGoods().getSealPice()); } // 设置失效时间 Date invalidTime = shoppingGoodsService.calInvalidTime(sysOrderItem.getShoppingGoods(), 1, null); puse.setFailTime(invalidTime); + puse.setBalance(sysOrderItem.getShoppingGoods().getSealPice()*puse.getSurplusCount()); sysProjUseDao.insert(puse); } @@ -1322,6 +1390,7 @@ order.setRemark(cardUser.getCardName()); order.setStaffId(user.getSuId()); order.setIsCross(2 + ""); + order.setOrderType(SysOrder.ORDER_TYPE_SEAL); order.setStatu(Dictionary.ORDER_STATU_YFK); order.setCompanyId(user.getCompanyId()); sysOrderDao.insert(order); @@ -1342,6 +1411,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); @@ -1362,9 +1432,12 @@ moneyCardUseFlowDao.insert(moneyCardUseFlow); order.setFlows(czVo.getFlows()); + addOrderFlow(order); + // 添加员工业绩 achieveNewService.addAchaeveByOrder(order); + return order; } @@ -1434,7 +1507,6 @@ sysOrder.setPayTime(now); sysOrder.setOrderNo(codeService.getRefundOrderNo()); sysOrder.setZkTotal(-sysOrder.getZkTotal()); - sysOrder.setOrderType(SysOrder.ORDER_TYPE_REFUND); //新增订单 sysOrderDao.insert(sysOrder); //插入明细 @@ -1636,10 +1708,14 @@ shoppingGoodsDao.update(goods); } - // 家居产品退库存 - if (CollectionUtils.isNotEmpty(returnGoodsList)) { - refundInstore(returnGoodsList); + BusParameterSettings manageStockSetting = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WAREHOUSE_MANAGE_STOCK, sysOrder.getCompanyId()); + if(AppConstance.IS_Y.equals(manageStockSetting.getParamValue())){ + // 家居产品退库存 + if (CollectionUtils.isNotEmpty(returnGoodsList)) { + refundInstore(returnGoodsList); + } } + } /** -- Gitblit v1.9.1