From baa1c7ecdc47c5da14790b422007ce21e0547ffa Mon Sep 17 00:00:00 2001 From: 935090232@qq.com <ak473600000> Date: Fri, 18 Mar 2022 00:50:23 +0800 Subject: [PATCH] 重构:订单创建和修改方法 --- zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java | 395 ++------------------------------------------------------ 1 files changed, 15 insertions(+), 380 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 ed9cb4b..72f57c1 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 @@ -37,12 +37,9 @@ import com.matrix.system.hive.pojo.ShoppingCarItem; import com.matrix.system.hive.pojo.ShoppingCarItemsVo; import com.matrix.system.hive.service.*; -import com.matrix.system.score.constant.ScoreSettingConstant; -import com.matrix.system.score.entity.ScoreVipDetail; import com.matrix.system.score.service.ScoreVipDetailService; import com.matrix.system.shopXcx.mqTask.AsyncMessageRouting; import com.matrix.system.wechart.templateMsg.UniformMsgParam; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -145,10 +142,6 @@ @Autowired private SysOrderServiceHelper sysOrderServiceHelper; - @Autowired - private SysProjServicesService projServicesService; - - @Autowired MoneyCardUseService moneyCardUseService; @@ -160,91 +153,15 @@ @Transactional(rollbackFor = Exception.class) public SysOrder checkAndSaveOrder(SysOrder sysOrder) { - // 计算订单折扣金额,收款情况下 计算订单总额 - double zkTotal = 0.0; - - // 判断是否为退款 - String orderStatus = Dictionary.ORDER_STATU_DFK; - if (Dictionary.ORDER_STATU_TK.equals(sysOrder.getStatu())) { - orderStatus = Dictionary.ORDER_STATU_TK; - } - - // 页面的pageOrder 参数只包含支付金额信息,不带有购买商品 - for (SysOrderItem item : sysOrder.getItems()) { - // 若为退款,则先更新原有数量 - if (orderStatus.equals(Dictionary.ORDER_STATU_TK)) { - SysOrderItem sysOrderItem = new SysOrderItem(); - sysOrderItem.setId(item.getId()); - sysOrderItem.setCount(item.getPreCount() - item.getCount()); - orderItemDao.update(sysOrderItem); - } - item.setId(null); - - ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(item.getGoodsId()); - item.setType(shoppingGoods.getGoodType()); - if (item.getZkPrice() == 0) { - item.setIsFree(Dictionary.FLAG_YES); - } - - // 订单欠款减去支付金额 设置实际欠款 - Double itemZkTotal = MoneyUtil.mul(item.getZkPrice(), Double.valueOf(item.getCount())); - zkTotal = MoneyUtil.add(zkTotal, itemZkTotal); - item.setStatus(orderStatus); - } - - SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); - sysOrder.setZkTotal(zkTotal); - sysOrder.setStatu(orderStatus); - SysOrder source = null; - if (sysOrder.getId() != null) { - source = sysOrderDao.selectById(sysOrder.getId()); - } - sysOrder.setStaffId(source != null ? source.getStaffId() : user.getSuId()); - sysOrder.setCompanyId(source != null ? source.getCompanyId() : user.getCompanyId()); - - - if (sysOrder.getId() == null) { - //新增订单 - sysOrder.setOrderNo(codeService.getOrderCode()); - sysOrderDao.insert(sysOrder); - //保存单据日志 - operationLogService.saveOperation(sysOrder.getCompanyId(), sysOrder.getShopId(), user.getSuId(), - OperationFunctionEnum.ORDER, - OperationButtonEnum.CREATE, - sysOrder.getId(), - sysOrder.getOrderNo(), - sysOrder.getVipId()); - + if (Objects.isNull(sysOrder.getId())) { + LogUtil.info("新增正向订单"); + return sysOrderServiceHelper.saveOrder(sysOrder); } else { - //更新订单 - sysOrderDao.update(sysOrder); - //删除原有订单明细 - orderItemDao.deleteByOrderId(sysOrder.getId()); - //保存单据日志 - operationLogService.saveOperation(sysOrder.getCompanyId(), sysOrder.getShopId(), user.getSuId(), - OperationFunctionEnum.ORDER, - OperationButtonEnum.UPDATE, - sysOrder.getId(), - sysOrder.getOrderNo(), - sysOrder.getVipId(), - "修改订单内容"); + LogUtil.info("修改订单"); + return sysOrderServiceHelper.modifyOrder(sysOrder); } - sysOrder.getItems().forEach(sysOrderItem -> { - sysOrderItem.setOrderId(sysOrder.getId()); - if (sysOrder.getStatu().equals(Dictionary.ORDER_STATU_TK)) { - // 取负数 - sysOrderItem.setCount(-sysOrderItem.getCount()); - orderItemDao.insert(sysOrderItem); - // 调整回来 - sysOrderItem.setCount(-sysOrderItem.getCount()); - } else { - orderItemDao.insert(sysOrderItem); - } - }); - - return sysOrder; } /** @@ -489,7 +406,7 @@ sysVipInfoService.updateDealStatus(pageOrder.getVipId(), BooleanEnum.TRUE.getValue()); //添加支付流水 - sysOrderServiceHelper.addOrderFlow(pageOrder,false); + sysOrderServiceHelper.addOrderFlow(pageOrder, false); //扣除储值卡余额 sysOrderServiceHelper.cardPaySk(pageOrder); @@ -501,14 +418,13 @@ sysOrderServiceHelper.addTaocanProj(pageOrder); // 新增出库单 - addOutStore(pageOrder); + sysOrderServiceHelper.addOutStore(pageOrder); // 设置业绩 achieveNewService.addAchaeveByOrder(pageOrder); - //设置会员积分 - addVipScore(pageOrder); + sysOrderServiceHelper.addVipScore(pageOrder); //保存订单收款日志 saveOrderSkLog(pageOrder); @@ -538,7 +454,7 @@ * @param pageOrder */ private void updateOrderInfo(SysOrder pageOrder) { - LogUtil.info("付款更新订单信息 id={}",pageOrder.getId()); + LogUtil.info("付款更新订单信息 id={}", pageOrder.getId()); SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); pageOrder.setCashierId(user.getSuId()); @@ -599,7 +515,7 @@ //检查业绩设置 checkOrderAchieve(pageOrder); - LogUtil.info("订单满足支付条件 id={}",pageOrder.getId()); + LogUtil.info("订单满足支付条件 id={}", pageOrder.getId()); } @@ -637,164 +553,8 @@ /** - * 设置会员消费积分 - * @param pageOrder - */ - private void addVipScore(SysOrder pageOrder) { - - SysVipInfo vipInfo = sysVipInfoDao.selectById(pageOrder.getVipId()); - - List<SysOrderFlow> flows = pageOrder.getFlows(); - int[] cashScore = {0, 0, 0}; - //现金支付金额 - BigDecimal cashPayAmount = flows.stream() - .filter(item -> (!item.getPayMethod().equals("储值卡")) && (!item.getPayMethod().equals("欠款"))) - .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add); - BusParameterSettings cashConsumption = busParameterSettingsDao.selectCompanyParamByCode(ScoreSettingConstant.CASH_CONSUMPTION, vipInfo.getCompanyId()); - if (cashPayAmount != null - && cashPayAmount.compareTo(BigDecimal.ZERO) > 0 - && StringUtils.isNotBlank(cashConsumption.getParamValue())) { - - BigDecimal scoreSetting0 = new BigDecimal(cashConsumption.getParamValue()); - if (scoreSetting0.compareTo(BigDecimal.ZERO) > 0) { - cashScore[0] = cashPayAmount.divide(scoreSetting0).intValue(); - } - - if (StringUtils.isNotBlank(cashConsumption.getParamValue1())) { - BigDecimal scoreSetting1 = new BigDecimal(cashConsumption.getParamValue1()); - if (scoreSetting1.compareTo(BigDecimal.ZERO) > 0) { - cashScore[1] = cashPayAmount.divide(scoreSetting1).intValue(); - } - - } - - if (StringUtils.isNotBlank(cashConsumption.getParamValue2())) { - BigDecimal scoreSetting2 = new BigDecimal(cashConsumption.getParamValue2()); - if (scoreSetting2.compareTo(BigDecimal.ZERO) > 0) { - cashScore[2] = cashPayAmount.divide(scoreSetting2).intValue(); - } - - } - } - - int[] cardScore = {0, 0, 0}; - //储值卡本金支付金额 - BigDecimal cardPayAmount = flows.stream() - .filter(item -> item.getPayMethod().equals("储值卡") && item.getIsGift().equals("N")) - .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add); - - BusParameterSettings principalBalanceConsumption = busParameterSettingsDao.selectCompanyParamByCode(ScoreSettingConstant.PRINCIPAL_BALANCE_CONSUMPTION, vipInfo.getCompanyId()); - if (cardPayAmount != null - && cardPayAmount.compareTo(BigDecimal.ZERO) > 0 - && StringUtils.isNotBlank(principalBalanceConsumption.getParamValue())) { - - BigDecimal scoreSetting0 = new BigDecimal(principalBalanceConsumption.getParamValue()); - if (scoreSetting0.compareTo(BigDecimal.ZERO) > 0) { - cardScore[0] = cardPayAmount.divide(scoreSetting0).intValue(); - } - - if (StringUtils.isNotBlank(principalBalanceConsumption.getParamValue1())) { - BigDecimal scoreSetting1 = new BigDecimal(principalBalanceConsumption.getParamValue1()); - if (scoreSetting1.compareTo(BigDecimal.ZERO) > 0) { - cardScore[1] = cardPayAmount.divide(scoreSetting1).intValue(); - } - } - - if (StringUtils.isNotBlank(principalBalanceConsumption.getParamValue2())) { - BigDecimal scoreSetting2 = new BigDecimal(principalBalanceConsumption.getParamValue2()); - if (scoreSetting2.compareTo(BigDecimal.ZERO) > 0) { - cardScore[2] = cardPayAmount.divide(scoreSetting2).intValue(); - } - } - } - - int[] giftScore = {0, 0, 0}; - //储值卡本赠送付金额 - BigDecimal giftPayAmount = flows.stream() - .filter(item -> item.getPayMethod().equals("储值卡") && item.getIsGift().equals("Y")) - .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add); - BusParameterSettings bonusBalanceConsumption = busParameterSettingsDao.selectCompanyParamByCode(ScoreSettingConstant.BONUS_BALANCE_CONSUMPTION, vipInfo.getCompanyId()); - if (giftPayAmount != null - && giftPayAmount.compareTo(BigDecimal.ZERO) > 0 - && StringUtils.isNotBlank(bonusBalanceConsumption.getParamValue())) { - - BigDecimal scoreSetting0 = new BigDecimal(bonusBalanceConsumption.getParamValue()); - if (scoreSetting0.compareTo(BigDecimal.ZERO) > 0) { - giftScore[0] = giftPayAmount.divide(scoreSetting0).intValue(); - } - - if (StringUtils.isNotBlank(bonusBalanceConsumption.getParamValue1())) { - BigDecimal scoreSetting1 = new BigDecimal(bonusBalanceConsumption.getParamValue1()); - if (scoreSetting1.compareTo(BigDecimal.ZERO) > 0) { - giftScore[1] = giftPayAmount.divide(scoreSetting1).intValue(); - } - } - - if (StringUtils.isNotBlank(bonusBalanceConsumption.getParamValue2())) { - BigDecimal scoreSetting2 = new BigDecimal(bonusBalanceConsumption.getParamValue2()); - if (scoreSetting2.compareTo(BigDecimal.ZERO) > 0) { - giftScore[2] = giftPayAmount.divide(scoreSetting2).intValue(); - } - } - } - - int selfScore = cashScore[0] + cardScore[0] + giftScore[0]; - int parentScore = cashScore[1] + cardScore[1] + giftScore[1]; - int topParentScore = cashScore[2] + cardScore[2] + giftScore[2]; - - - //添加自己的积分 - if (selfScore > 0) { - scoreVipDetailService.addScore( - vipInfo.getId(), - pageOrder.getStaffId(), - pageOrder.getShopId(), - selfScore, - pageOrder.getId(), - ScoreVipDetail.SCORE_VIP_TYPE_CASH, - "消费奖励" - ); - } - - if (vipInfo.getRecommendId() != null) { - //推荐注册老带新积分奖励 - SysVipInfo referrerVip = sysVipInfoDao.selectById(vipInfo.getRecommendId()); - if (parentScore > 0) { - scoreVipDetailService.addScore( - referrerVip.getId(), - pageOrder.getStaffId(), - pageOrder.getShopId(), - parentScore, - pageOrder.getId(), - ScoreVipDetail.SCORE_VIP_TYPE_CASH, - "推荐消费奖励" - ); - } - //推荐注册二级带新积分奖励 - if (referrerVip.getRecommendId() != null) { - SysVipInfo topVipInfo = sysVipInfoDao.selectById(referrerVip.getRecommendId()); - if (topParentScore > 0) { - scoreVipDetailService.addScore( - topVipInfo.getId(), - pageOrder.getStaffId(), - pageOrder.getShopId(), - topParentScore, - pageOrder.getId(), - ScoreVipDetail.SCORE_VIP_TYPE_CASH, - "推荐消费奖励" - ); - } - } - } - } - - - - - - - /** * 补交 + * * @author:姜友瑶 * @date 2016年9月19日 */ @@ -803,9 +563,8 @@ public void updateAfterMoney(SysOrder pageOrder) { SysOrder sourceOrder = sysOrderDao.selectById(pageOrder.getId()); - //添加支付流水 - sysOrderServiceHelper.addOrderFlow(pageOrder,true); + sysOrderServiceHelper.addOrderFlow(pageOrder, true); //扣除储值卡余额 sysOrderServiceHelper.cardPaySk(pageOrder); @@ -826,7 +585,7 @@ if (refundTotal == pageOrder.getArrears()) { sourceOrder.setStatu(Dictionary.ORDER_STATU_YFK); - }else{ + } else { sourceOrder.setStatu(Dictionary.ORDER_STATU_QK); } sourceOrder.setArrears(sourceOrder.getArrears() - refundTotal); @@ -834,130 +593,6 @@ sourceOrder.setCashPay(sourceOrder.getCashPay() == null ? 0 : sourceOrder.getCashPay() + cashPayTotal); sysOrderDao.update(sourceOrder); } - - - /** - * @param order 新增出库单并更新本店库存 - * @author:姜友瑶 - * @date 2016年9月2日 - */ - @Override - public void addOutStore(SysOrder order) { - - BusParameterSettings manageStockSetting = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WAREHOUSE_MANAGE_STOCK, order.getCompanyId()); - if (AppConstance.IS_Y.equals(manageStockSetting.getParamValue())) { - - List<SysOutStoreItem> storeItemList = new ArrayList<>(); - - for (SysOrderItem sysOrderItem : order.getItems()) { - - if (ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP.equals(sysOrderItem.getType())) { - - SysOutStoreItem storeItem = new SysOutStoreItem(); - storeItem.setSkuId(sysOrderItem.getGoodsId()); - storeItem.setAmount(Double.valueOf(sysOrderItem.getCount())); - storeItemList.add(storeItem); - - } else if (ShoppingGoods.SHOPPING_GOODS_TYPE_TC.equals(sysOrderItem.getType()) - - || ShoppingGoods.SHOPPING_GOODS_TYPE_ZHK.equals(sysOrderItem.getType())) { - - List<ShoppingGoodsAssemble> goodsList = new ArrayList<>(); - - 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); - }); - } - } - - 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<>(); - - storeItemList.forEach(outStoreItem -> { - - //设置出库主键 - 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() + "库存不足】"); - - } 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); - - //每次扣减库存都创建一个出库记录 - 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); - } - } - }); - sysOutStoreItemDao.batchInsert(realOutStoreItemList); - } - - } else { - LogUtil.debug("不管理库存"); - } - - - } - - - - - - /** @@ -1048,7 +683,7 @@ order.setFlows(czVo.getFlows()); - sysOrderServiceHelper.addOrderFlow(order,false); + sysOrderServiceHelper.addOrderFlow(order, false); // 添加员工业绩 achieveNewService.addAchaeveByOrder(order); @@ -1142,7 +777,7 @@ // 添加订单收款流水 - sysOrderServiceHelper.addOrderFlow(sysOrder,false); + sysOrderServiceHelper.addOrderFlow(sysOrder, false); //退款退套餐退项目 refundProjUse(sysOrder); //删除积分 -- Gitblit v1.9.1