From 8fe37f0f7af3667b60e0f29a1ce8188c08c35bb1 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Tue, 09 Mar 2021 15:33:34 +0800 Subject: [PATCH] modify --- zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java | 163 ++++++++++++++++++++++++++++++++--------------------- 1 files changed, 98 insertions(+), 65 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 fc36595..bfd0009 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,6 +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.DateUtil; import com.matrix.core.tools.StringUtils; import com.matrix.core.tools.WebUtil; import com.matrix.system.app.dto.OrderListDto; @@ -19,7 +20,6 @@ import com.matrix.system.hive.bean.*; import com.matrix.system.hive.dao.*; 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; @@ -33,10 +33,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; 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 @@ -175,11 +176,6 @@ @Override public SysOrder checkAndSaveOrder(SysOrder sysOrder) { - // 收款改变订单状态 - SysOrder source = null; - if (sysOrder.getId() != null) { - source = sysOrderDao.selectById(sysOrder.getId()); - } // 计算订单折扣金额,收款情况下 计算订单总额 double zkTotal = 0.0; @@ -216,10 +212,14 @@ 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()); - sysOrder.setPayTime(new Date()); + if (sysOrder.getId() == null) { //新增订单 sysOrder.setOrderNo(codeService.getOrderCode()); @@ -251,8 +251,6 @@ /** * 取消订单 - * 本方法无法退回多次不同卡项收款的订单 - * * @param id * @return */ @@ -364,6 +362,10 @@ AchieveNew achieveNew = new AchieveNew(); achieveNew.setOrderId(id); achieveNewService.removeByModel(achieveNew); + + // 删除收款记录 + sysOrderFlowDao.deleteByOrderId(id); + // 取消订单 order.setStatu(Dictionary.ORDER_STATU_YQX); @@ -485,6 +487,10 @@ if (!Dictionary.ORDER_STATU_DFK.equals(pageOrder.getStatu())) { throw new GlobleException("该订单已经收过款,请刷新页面再试!"); } + // 更新收款时间 + pageOrder.setPayTime(new Date()); + pageOrder.setStatu(Dictionary.ORDER_STATU_YFK); + sysOrderDao.update(pageOrder); // 获取用户信息 SysVipInfo vipInfo = sysVipInfoDao.selectById(pageOrder.getVipId()); @@ -494,8 +500,8 @@ sysVipInfoDao.update(vipInfo); } - //设置订单的成交状态 - changeOrderStatu(pageOrder); + //添加支付流水 + addOrderFlow(pageOrder); // 设置会员充值卡使用情况 addMoneyCardUse(pageOrder); @@ -514,77 +520,56 @@ } /** - * 收款改变订单状态,划扣金额 + * 创建支付流水 * * @author:姜友瑶 */ - private void changeOrderStatu(SysOrder sourceOrder) { + private void addOrderFlow(SysOrder sourceOrder) { - 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()) { - //支付内容摘要设置 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; + if (SysOrder.ORDER_TYPE_REFUND==sourceOrder.getOrderType()) { + flow.setFlowType(SysOrderFlow.FLOW_TYPE_REFUND); flow.setAmount(flow.getAmount().negate()); flow.setOrderId(sourceOrder.getOldOrderId()); } else { + flow.setFlowType(SysOrderFlow.FLOW_TYPE_BUY); flow.setOrderId(sourceOrder.getId()); } //欠款处理 if (SysOrderFlow.PAY_METHOD_ARREARS.equals(flow.getPayMethod())) { - orderStatus = Dictionary.ORDER_STATU_QK; sourceOrder.setArrears(flow.getAmount().doubleValue()); + sysOrderDao.update(sourceOrder); } //统计储值卡支付 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); flowCount++; } - //修改订单信息 - if (Dictionary.ORDER_STATU_TK.equals(sourceOrder.getStatu())) { - orderStatus = Dictionary.ORDER_STATU_TK; - } - // 更新收款状态 - sourceOrder.setStatu(orderStatus); - sourceOrder.setCardPay(cardPayTotal); - sourceOrder.setCashPay(cashPayTotal); - sysOrderDao.update(sourceOrder); + } @@ -926,6 +911,7 @@ ShoppingGoods sysGoods = shoppingGoodsDao.selectById(outStoreItem.getSkuId()); if (sysGoods != null) { throw new GlobleException("出库失败:【" + sysGoods.getName() + "库存不足】"); + } else { throw new GlobleException("出库失败没有找到出库产品"); } @@ -1126,7 +1112,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的都视为赠送项目 @@ -1205,7 +1191,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); @@ -1226,7 +1212,7 @@ moneyCardUseFlowDao.insert(moneyCardUseFlow); order.setFlows(czVo.getFlows()); - changeOrderStatu(order); + addOrderFlow(order); // 添加员工业绩 achieveNewService.addAchaeveByOrder(order); return order; @@ -1276,37 +1262,90 @@ @Transactional(rollbackFor = Exception.class) @Override - public void refundOrderMoney(SysOrder pageOrder) { + public void refundOrderMoney(SysOrder sysOrder) { SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); - // 修改订单状态 - changeOrderStatu(pageOrder); + //原订单设置为退款状态 + SysOrder sourceOrder=new SysOrder(); + sourceOrder.setId(sysOrder.getOldOrderId()); + sourceOrder.setIsHasRefund(SysOrder.IS_HAS_REFUND_Y); +// sourceOrder.setStatu(Dictionary.ORDER_STATU_TK); + sysOrderDao.update(sourceOrder); - List<SysOrderItem> returnItems = new ArrayList<>(); - for (SysOrderItem item : pageOrder.getItems()) { + sysOrder.setId(null); + sysOrder.setStaffId(user.getSuId()); + sysOrder.setCompanyId(user.getCompanyId()); + sysOrder.setShopId(user.getShopId()); + sysOrder.setOrderType(SysOrder.ORDER_TYPE_REFUND); + sysOrder.setStatu(Dictionary.ORDER_STATU_YFK); + Date now = new Date(); + sysOrder.setOrderTime(now); + sysOrder.setPayTime(now); + sysOrder.setOrderNo(codeService.getRefundOrderNo()); + sysOrder.setZkTotal(-sysOrder.getZkTotal()); + sysOrder.setOrderType(SysOrder.ORDER_TYPE_REFUND); + //新增订单 + sysOrderDao.insert(sysOrder); + //插入明细 + for (SysOrderItem item : sysOrder.getItems()) { + + //更新原订单明细的可退数量 + SysOrderItem oldItem=new SysOrderItem(); + oldItem.setId(item.getId()); + oldItem.setRefundCount(item.getCount()); + orderItemDao.update(oldItem); + + //插入新的订单明细 + item.setId(null); + item.setCount(-item.getCount()); + item.setOrderId(sysOrder.getId()); + orderItemDao.insert(item); + } + + + // 添加订单收款流水 + addOrderFlow(sysOrder); + //退款退套餐退项目 + refundProjUse(sysOrder); + + // 设置业绩 + achieveNewService.addAchaeveByOrder(sysOrder); + + } + + /** + * 退款退项目,套餐,卡项 + * @param sysOrder + */ + private void refundProjUse(SysOrder sysOrder) { + SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); + + //记录需要退库存的产品 + List<SysOrderItem> returnGoodsList = new ArrayList<>(); + + for (SysOrderItem item : sysOrder.getItems()) { SysProjUse queryProjUse = new SysProjUse(); - queryProjUse.setIsOver(Dictionary.FLAG_NO_N); - queryProjUse.setStatus(Dictionary.TAOCAN_STATUS_YX); queryProjUse.setOrderItemId(item.getOldItemId()); // 修改项目信息 if (Dictionary.SHOPPING_GOODS_TYPE_XM.equals(item.getType()) || Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(item.getType())) { if (Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(item.getType())) { if (Dictionary.FLAG_YES_Y.equals(item.getIsReturnStore())) { - returnItems.add(item); + returnGoodsList.add(item); } } else { SysProjUse sysProjUse = sysProjUseDao.selectByModel(queryProjUse).get(0); int sub = sysProjUse.getSurplusCount() - item.getCount(); - sysProjUse.setSurplusCount(sub); - if (sub <= 0) { + if (sub < 0) { + throw new GlobleException("项目余次不足"); + }else if(sub==0){ sysProjUse.setIsOver(Dictionary.FLAG_YES_Y); sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX); } + sysProjUse.setSurplusCount(sub); sysProjUseDao.update(sysProjUse); - SysProjUseFlow sysProjUseFlow = SysProjUseMapper.INSTANCE.projUseToFlow(sysProjUse); sysProjUseFlow.setOptionType("退款修改"); sysProjUseFlow.setId(null); @@ -1319,15 +1358,13 @@ if (Dictionary.SHOPPING_GOODS_TYPE_TC.equals(item.getType())) { queryProjUse.setTaocanId(-1L); List<SysProjUse> sysProjUses = sysProjUseDao.selectByModel(queryProjUse); - if (item.getCount() > sysProjUses.size()) { - throw new GlobleException("数据异常"); - } + 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); - sysProjUseDao.update(sysProjUse); SysProjUseFlow sysProjUseFlow = SysProjUseMapper.INSTANCE.projUseToFlow(sysProjUse); sysProjUseFlow.setOptionType("退款修改"); @@ -1365,13 +1402,9 @@ } // 家居产品退库存 - if (CollectionUtils.isNotEmpty(returnItems)) { - refundInstore(returnItems); + if (CollectionUtils.isNotEmpty(returnGoodsList)) { + refundInstore(returnGoodsList); } - - // 设置业绩 - achieveNewService.addAchaeveByOrder(pageOrder); - } /** -- Gitblit v1.9.1