From 4dab41eef4ffde0c2631fbc7147cd2eee3cd0780 Mon Sep 17 00:00:00 2001 From: jyy <935090232@qq.com> Date: Thu, 04 Mar 2021 18:57:56 +0800 Subject: [PATCH] 优化订单业绩 --- zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java | 176 +++++++++++++++++++++++++++++++--------------------------- 1 files changed, 93 insertions(+), 83 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 cd33744..48d6665 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 @@ -4,7 +4,7 @@ import com.matrix.core.constance.MatrixConstance; import com.matrix.core.exception.GlobleException; import com.matrix.core.pojo.PaginationVO; -import com.matrix.core.tools.LogUtil; +import com.matrix.core.tools.DateUtil; import com.matrix.core.tools.StringUtils; import com.matrix.core.tools.WebUtil; import com.matrix.system.app.dto.OrderListDto; @@ -17,12 +17,9 @@ import com.matrix.system.common.dao.BusParameterSettingsDao; import com.matrix.system.common.dao.SysUsersDao; import com.matrix.system.constance.Dictionary; -import com.matrix.system.constance.SystemConstance; import com.matrix.system.hive.bean.*; import com.matrix.system.hive.dao.*; -import com.matrix.system.hive.hievEnum.PayMethodEnum; import com.matrix.system.hive.plugin.util.CollectionUtils; -import com.matrix.core.tools.DateUtil; import com.matrix.system.hive.plugin.util.MoneyUtil; import com.matrix.system.hive.pojo.CzXkVo; import com.matrix.system.hive.pojo.ShoppingCarItem; @@ -38,7 +35,9 @@ import javax.servlet.http.HttpSession; import javax.validation.constraints.NotEmpty; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; /** * @date 2016-07-03 20:53 @@ -113,7 +112,7 @@ @Value("${evn}") - private String evn; + private String evn; @Autowired private RabiitMqTemplate rabiitMqTemplate; @@ -147,7 +146,7 @@ @Override public List<SysOrder> findInPage(SysOrder sysOrder, PaginationVO pageVo) { - if(pageVo!=null){ + if (pageVo != null) { pageVo.setSort("desc"); pageVo.setSort("orderTime"); } @@ -211,7 +210,7 @@ // 订单欠款减去支付金额 设置实际欠款 Double itemZkTotal = MoneyUtil.mul(item.getZkPrice(), Double.valueOf(item.getCount())); - zkTotal=MoneyUtil.add(zkTotal, itemZkTotal); + zkTotal = MoneyUtil.add(zkTotal, itemZkTotal); item.setStatus(orderStatus); } @@ -221,13 +220,13 @@ sysOrder.setStaffId(source != null ? source.getStaffId() : user.getSuId()); sysOrder.setCompanyId(source != null ? source.getCompanyId() : user.getCompanyId()); - sysOrder.setPayTime(new Date()); - if(sysOrder.getId()==null){ + + if (sysOrder.getId() == null) { //新增订单 sysOrder.setOrderNo(codeService.getOrderCode()); sysOrderDao.insert(sysOrder); - }else{ + } else { //更新订单 sysOrderDao.update(sysOrder); //删除原有订单明细 @@ -253,8 +252,6 @@ /** * 取消订单 - * 本方法无法退回多次不同卡项收款的订单 - * * @param id * @return */ @@ -269,9 +266,9 @@ order.setArrears(0D); //发送微信公众号提醒 - UniformMsgParam uniformMsgParam=new UniformMsgParam(order.getCompanyId(),UniformMsgParam.GZH_DDQX); - uniformMsgParam.put("orderId",order.getId()); - rabiitMqTemplate.sendMsg(MQTaskRouting.SEND_UNIFORM_TEMPLATE_MSG+evn,uniformMsgParam.toJSONString()); + UniformMsgParam uniformMsgParam = new UniformMsgParam(order.getCompanyId(), UniformMsgParam.GZH_DDQX); + uniformMsgParam.put("orderId", order.getId()); + rabiitMqTemplate.sendMsg(MQTaskRouting.SEND_UNIFORM_TEMPLATE_MSG + evn, uniformMsgParam.toJSONString()); return sysOrderDao.update(order); @@ -296,12 +293,12 @@ // 根据订单明细判断是赠送金额购买还是本金购买 - moneyCardUseFlow.setTotal(orderItem.getCardPay()); - moneyCardUse.setRealMoney(MoneyUtil.add(moneyCardUse.getRealMoney(), orderItem.getCardPay())); + moneyCardUseFlow.setTotal(orderItem.getCardPay()); + moneyCardUse.setRealMoney(MoneyUtil.add(moneyCardUse.getRealMoney(), orderItem.getCardPay())); //TODO 目前无法退回到具体的赠送金额还是本金 if (!moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_YES_Y)) { - if(moneyCardUse.getLastCount()!=null) { + if (moneyCardUse.getLastCount() != null) { moneyCardUse.setLastCount(moneyCardUse.getLastCount() + 1); moneyCardUseFlow.setTimes(1); } @@ -316,7 +313,7 @@ moneyCardUseFlow.setCreateTime(new Date()); moneyCardUseFlow.setOperationId(user.getSuId()); moneyCardUseFlow.setContent(moneyCardUse.getChangeRemark()); - moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney()+moneyCardUse.getRealMoney()); + moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney()); moneyCardUseFlowDao.insert(moneyCardUseFlow); } } @@ -366,6 +363,10 @@ AchieveNew achieveNew = new AchieveNew(); achieveNew.setOrderId(id); achieveNewService.removeByModel(achieveNew); + + // 删除收款记录 + sysOrderFlowDao.deleteByOrderId(id); + // 取消订单 order.setStatu(Dictionary.ORDER_STATU_YQX); @@ -484,7 +485,6 @@ @Transactional(rollbackFor = Exception.class) public void updateReceiptMoney(SysOrder pageOrder) throws GlobleException { - if (!Dictionary.ORDER_STATU_DFK.equals(pageOrder.getStatu())) { throw new GlobleException("该订单已经收过款,请刷新页面再试!"); } @@ -497,79 +497,94 @@ sysVipInfoDao.update(vipInfo); } + //设置订单的成交状态 changeOrderStatu(pageOrder); + // 设置会员充值卡使用情况 addMoneyCardUse(pageOrder); - // 新增出库单 - addOutStore(pageOrder); - // 改变客户项目套餐使用情况 addTaocanProj(pageOrder); + + // 新增出库单 + addOutStore(pageOrder); // 设置业绩 achieveNewService.addAchaeveByOrder(pageOrder); setShopSelCount(pageOrder); - } /** * 收款改变订单状态,划扣金额 + * * @author:姜友瑶 */ private void changeOrderStatu(SysOrder sourceOrder) { - int i = 1; + String orderStatus = Dictionary.ORDER_STATU_YFK; String flowType = SysOrderFlow.FLOW_TYPE_BUY; double cashPayTotal = 0D; double cardPayTotal = 0D; + + //处理支付流水 + int flowCount = 1; for (SysOrderFlow flow : sourceOrder.getFlows()) { - flow.setFlowNo(codeService.getFlowCode() + "-" + i); + + //支付内容摘要设置 Long goodsId = sourceOrder.getItems().get(0).getGoodsId(); ShoppingGoods goods = shoppingGoodsDao.selectById(goodsId); flow.setFlowContent(goods.getName() + "等" + sourceOrder.getItems().size() + "件产品"); + // 若是退款,则取负数 if (Dictionary.ORDER_STATU_TK.equals(sourceOrder.getStatu())) { flowType = SysOrderFlow.FLOW_TYPE_REFUND; - // 若是退款,则取负数 flow.setAmount(flow.getAmount().negate()); flow.setOrderId(sourceOrder.getOldOrderId()); } else { flow.setOrderId(sourceOrder.getId()); } - flow.setVipId(sourceOrder.getVipId()); - flow.setFlowType(flowType); - // 若使用储值卡付款 - if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) { - if (flow.getCardId() != null) { - MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(flow.getCardId()); - cardPaySk(moneyCardUse, sourceOrder, flow); - cardPayTotal += flow.getAmount().doubleValue(); - } - } - + //欠款处理 if (SysOrderFlow.PAY_METHOD_ARREARS.equals(flow.getPayMethod())) { orderStatus = Dictionary.ORDER_STATU_QK; sourceOrder.setArrears(flow.getAmount().doubleValue()); } - if (!SysOrderFlow.PAY_METHOD_ARREARS.equals(flow.getPayMethod()) && !SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) { + //统计储值卡支付 + if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) { + if (flow.getCardId() != null) { + MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(flow.getCardId()); + cardPayTotal += flow.getAmount().doubleValue(); + + //修改储值卡余额 + cardPaySk(moneyCardUse, sourceOrder, flow); + }else{ + throw new GlobleException("无效的储值卡支付方式"); + } + } + //统计现金支付 + if (!SysOrderFlow.PAY_METHOD_ARREARS.equals(flow.getPayMethod()) + && !SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) { cashPayTotal += flow.getAmount().doubleValue(); } + + flow.setFlowNo(codeService.getFlowCode() + "-" + flowCount); + flow.setVipId(sourceOrder.getVipId()); + flow.setFlowType(flowType); flow.setShopId(sourceOrder.getShopId()); flow.setCompanyId(sourceOrder.getCompanyId()); sysOrderFlowDao.insert(flow); - i++; + flowCount++; } + //修改订单信息 if (Dictionary.ORDER_STATU_TK.equals(sourceOrder.getStatu())) { orderStatus = Dictionary.ORDER_STATU_TK; } - // 更新收款状态 + sourceOrder.setPayTime(new Date()); sourceOrder.setStatu(orderStatus); sourceOrder.setCardPay(cardPayTotal); sourceOrder.setCashPay(cashPayTotal); @@ -606,7 +621,6 @@ } - /** * 使用充值卡付款操作 * @@ -624,9 +638,9 @@ SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); - MoneyCardUseFlow moneyCardUseFlow=new MoneyCardUseFlow(); + MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow(); if (SysOrderFlow.IS_GIFT_Y.equals(flow.getIsGift())) { - if(moneyCardUse.getGiftMoney() >= flow.getAmount().doubleValue()) { + if (moneyCardUse.getGiftMoney() >= flow.getAmount().doubleValue()) { double surplus = MoneyUtil.sub(moneyCardUse.getGiftMoney(), flow.getAmount().doubleValue()); moneyCardUse.setGiftMoney(surplus); moneyCardUseFlow.setGiftMoney(0D - flow.getAmount().doubleValue()); @@ -634,7 +648,7 @@ throw new GlobleException(moneyCardUse.getCardName() + "余额不足"); } } else { - if(moneyCardUse.getRealMoney() >= flow.getAmount().doubleValue()) { + if (moneyCardUse.getRealMoney() >= flow.getAmount().doubleValue()) { double surplus = MoneyUtil.sub(moneyCardUse.getRealMoney(), flow.getAmount().doubleValue()); moneyCardUse.setRealMoney(surplus); moneyCardUseFlow.setTotal(0 - flow.getAmount().doubleValue()); @@ -645,7 +659,7 @@ if (moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_NO_N)) { //余额为0时充值卡变为无效 - if(moneyCardUse.getRealMoney().equals(0D) && moneyCardUse.getGiftMoney().equals(0D)){ + if (moneyCardUse.getRealMoney().equals(0D) && moneyCardUse.getGiftMoney().equals(0D)) { moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y); moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX); } @@ -666,7 +680,7 @@ moneyCardUseFlow.setType(MoneyCardUseFlow.USE_TYPE_CONSUMER); moneyCardUseFlow.setCreateTime(new Date()); moneyCardUseFlow.setOperationId(user.getSuId()); - moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney()+moneyCardUse.getRealMoney()); + moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney()); moneyCardUseFlowDao.insert(moneyCardUseFlow); } @@ -740,7 +754,7 @@ // 如果购买的是充值卡 if (sysOrderItem.getType().equals(Dictionary.SHOPPING_GOODS_TYPE_CZK)) { - for(int i = 0; i < sysOrderItem.getCount(); i++) { + for (int i = 0; i < sysOrderItem.getCount(); i++) { ShoppingGoods moneyCar = shoppingGoodsDao.selectById(sysOrderItem.getGoodsId()); MoneyCardUse moneyCardUse = new MoneyCardUse(); moneyCardUse.setVipId(sourceOrder.getVipId()); @@ -752,13 +766,8 @@ moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_GM); moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX); moneyCardUse.setCardName(moneyCar.getName()); - - if (Dictionary.FLAG_YES.equals(moneyCar.getCarIsAll())) { - moneyCardUse.setIsVipCar(Dictionary.FLAG_YES_Y); - } else { - // 非会籍卡 - moneyCardUse.setIsVipCar(Dictionary.FLAG_NO_N); - } + moneyCardUse.setIsVipCar(Dictionary.FLAG_NO_N); + moneyCardUse.setVipId(sourceOrder.getVipId()); // 是否为赠送 if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_YES)) { @@ -766,6 +775,7 @@ } else { moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_GM); } + //余次处理 if (moneyCar.getCarUseCount() == null || moneyCar.getCarUseCount() == 0) { moneyCardUse.setUseTotal(999999999); moneyCardUse.setLastCount(999999999); @@ -773,8 +783,7 @@ moneyCardUse.setUseTotal(moneyCar.getCarUseCount()); moneyCardUse.setLastCount(moneyCar.getCarUseCount()); } - moneyCardUse.setVipId(sourceOrder.getVipId()); - + //失效时间处理 Date invalidTime = shoppingGoodsService.calInvalidTime(sysOrderItem.getShoppingGoods(), 1, null); moneyCardUse.setFailTime(invalidTime); @@ -824,16 +833,16 @@ i++; } - boolean haQk=false; + boolean haQk = false; if (refundTotal == pageOrder.getArrears()) { haQk = true; } //更新收款状态 - if(haQk){ + if (haQk) { sourceOrder.setStatu(Dictionary.ORDER_STATU_YFK); - }else{ + } else { sourceOrder.setStatu(Dictionary.ORDER_STATU_QK); } @@ -921,6 +930,7 @@ ShoppingGoods sysGoods = shoppingGoodsDao.selectById(outStoreItem.getSkuId()); if (sysGoods != null) { throw new GlobleException("出库失败:【" + sysGoods.getName() + "库存不足】"); + } else { throw new GlobleException("出库失败没有找到出库产品"); } @@ -993,7 +1003,8 @@ //综合卡中包含的项目 List<ShoppingGoodsAssemble> assembleList = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_XM); assembleList.forEach(item -> { - createProjuseByAssemble(order, sysOrderItem, item, null); + //TODO 补综合卡逻辑 + createProjuseByAssemble(order, sysOrderItem, item, null, null); }); //处理综合卡中包含的套餐 @@ -1014,9 +1025,9 @@ * 通过组合关系创建用户项目余次 */ private SysProjUse createProjuseByAssemble(SysOrder order, SysOrderItem sysOrderItem, - ShoppingGoodsAssemble goodsAssemble, Long taocanId) { + ShoppingGoodsAssemble goodsAssemble, Long taocanId, Date failTime) { //计算折扣 - Double zk=sysOrderItem.getZkPrice()/sysOrderItem.getPrice(); + Double zk = sysOrderItem.getZkPrice() / sysOrderItem.getPrice(); SysProjUse puse = new SysProjUse(); puse.setIsOver(Dictionary.DELETED_N); @@ -1030,9 +1041,9 @@ puse.setTaocanId(taocanId); puse.setType(Dictionary.SHOPPING_GOODS_TYPE_XM); if (taocanId == null) { - puse.setPrice(goodsAssemble.getShoppingGoods().getPrice() * zk ); + puse.setPrice(goodsAssemble.getShoppingGoods().getPrice() * zk); } else { - puse.setPrice(goodsAssemble.getPrice() * zk ); + puse.setPrice(goodsAssemble.getPrice() * zk); } puse.setBalance(MoneyUtil.mul(puse.getPrice(), Double.valueOf(puse.getSurplusCount()))); // 赠送和打折后金额为0的都视为赠送项目 @@ -1041,10 +1052,7 @@ } else { puse.setSource(Dictionary.TAOCAN_SOURCE_ZS); } - // 设置失效时间 - Calendar cal = Calendar.getInstance(); - cal.set(2200, 1, 1); - puse.setFailTime(cal.getTime()); + puse.setFailTime(failTime); sysProjUseDao.insert(puse); return puse; } @@ -1086,20 +1094,20 @@ taocanProjUse.setFailTime(invalidTime); sysProjUseDao.insert(taocanProjUse); //计划次数 - int surplusCount=0; + int surplusCount = 0; //总余额 Double sumBanance = 0D; //创建套餐绑定的项目 List<ShoppingGoodsAssemble> assembleList = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(projId, ShoppingGoods.SHOPPING_GOODS_TYPE_XM); for (ShoppingGoodsAssemble assemble : assembleList) { - SysProjUse tempUse = createProjuseByAssemble(order, sysOrderItem, assemble, taocanProjUse.getId()); + SysProjUse tempUse = createProjuseByAssemble(order, sysOrderItem, assemble, taocanProjUse.getId(),taocanProjUse.getFailTime()); sumBanance += tempUse.getBalance(); - surplusCount+=tempUse.getSurplusCount(); + surplusCount += tempUse.getSurplusCount(); } - if(Dictionary.FLAG_NO_N.equals(taocanShoppingGoods.getIsCourse())){ + if (Dictionary.FLAG_NO_N.equals(taocanShoppingGoods.getIsCourse())) { //固定套餐,剩余次数等于绑定项目的次数 taocanProjUse.setSurplusCount(surplusCount); - }else{ + } else { //任选套餐剩余次数等于最大使用次数 taocanProjUse.setSurplusCount(taocanShoppingGoods.getCarUseCount()); } @@ -1123,7 +1131,7 @@ puse.setVipId(order.getVipId()); puse.setStatus(Dictionary.TAOCAN_STATUS_YX); puse.setType(Dictionary.SHOPPING_GOODS_TYPE_XM); - puse.setBalance(MoneyUtil.add(sysOrderItem.getCardPay(), sysOrderItem.getCashPay())); + puse.setBalance(sysOrderItem.getZkPrice()); puse.setPrice(sysOrderItem.getZkPrice()); puse.setProjName(sysOrderItem.getShoppingGoods().getName()); // 赠送和打折后金额为0的都视为赠送项目 @@ -1141,6 +1149,7 @@ /** * 会员卡充值 + * * @param czVo */ @Override @@ -1190,7 +1199,7 @@ orderItem.setOrderId(order.getId()); orderItem.setOrderNo(order.getOrderNo()); orderItem.setArrears(0D); - ShoppingGoods shoppingGoods= shoppingGoodsDao.selectVipCzGoods(); + ShoppingGoods shoppingGoods = shoppingGoodsDao.selectVipCzGoods(); orderItem.setGoodsId(shoppingGoods.getId()); orderItem.setPayMethod(Dictionary.PAY_TYPE_MOENY); orderItem.setCashPay(czVo.getBjmoney()); @@ -1201,7 +1210,7 @@ orderItem.setIsFree(Dictionary.FLAG_NO); orderItem.setPrice(czVo.getBjmoney()); orderItem.setStatus(Dictionary.ORDER_STATU_YFK); - orderItem.setAchaeveList(czVo.getAchaeveList()); + orderItem.setAchieveList(czVo.getAchaeveList()); orderItemDao.insert(orderItem); List<SysOrderItem> items = new ArrayList<>(); items.add(orderItem); @@ -1209,7 +1218,7 @@ //设置卡项使用流水 - MoneyCardUseFlow moneyCardUseFlow=new MoneyCardUseFlow(); + MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow(); moneyCardUseFlow.setTotal(czVo.getBjmoney()); moneyCardUseFlow.setGiftMoney(czVo.getGiftMoney()); moneyCardUseFlow.setCarUseId(czVo.getCardId()); @@ -1218,7 +1227,7 @@ moneyCardUseFlow.setOrderNo(order.getOrderNo()); moneyCardUseFlow.setCreateTime(new Date()); moneyCardUseFlow.setOperationId(user.getSuId()); - moneyCardUseFlow.setBalance(cardUser.getGiftMoney()+cardUser.getRealMoney()); + moneyCardUseFlow.setBalance(cardUser.getGiftMoney() + cardUser.getRealMoney()); moneyCardUseFlowDao.insert(moneyCardUseFlow); order.setFlows(czVo.getFlows()); @@ -1274,7 +1283,8 @@ @Override public void refundOrderMoney(SysOrder pageOrder) { SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); - // 插入订单流水 + + // 修改订单状态 changeOrderStatu(pageOrder); List<SysOrderItem> returnItems = new ArrayList<>(); @@ -1318,7 +1328,7 @@ throw new GlobleException("数据异常"); } - for(int i = 0; i < item.getCount(); i++) { + for (int i = 0; i < item.getCount(); i++) { SysProjUse sysProjUse = sysProjUses.get(i); sysProjUse.setIsOver(Dictionary.FLAG_YES_Y); sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX); @@ -1340,7 +1350,7 @@ queryCardUse.setOrderItemId(item.getOldItemId()); List<MoneyCardUse> moneyCardUses = moneyCardUseDao.selectByModel(queryCardUse); - for(int i = 0; i < item.getCount(); i++) { + for (int i = 0; i < item.getCount(); i++) { MoneyCardUse moneyCardUse = moneyCardUses.get(i); moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y); moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX); -- Gitblit v1.9.1