package com.matrix.system.hive.action; import com.matrix.core.constance.MatrixConstance; import com.matrix.core.pojo.AjaxResult; import com.matrix.core.tools.StringUtils; import com.matrix.core.tools.WebUtil; import com.matrix.system.common.bean.SysUsers; import com.matrix.system.constance.Dictionary; import com.matrix.system.hive.bean.*; import com.matrix.system.hive.dao.MoneyCardUseFlowDao; import com.matrix.system.hive.dao.SysOrderDao; import com.matrix.system.hive.dao.SysOrderItemDao; import com.matrix.system.hive.plugin.util.MoneyUtil; import com.matrix.system.hive.pojo.RefundOrderItemVo; import com.matrix.system.hive.pojo.RefundOrderVo; import com.matrix.system.hive.service.*; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 线下订单 * * @author jiangyouyao * @date 2016-09-08 */ @Controller @RequestMapping(value = "admin/refundOrder") public class RefundOrderController extends BaseController { @Resource private SysOrderService orderService; @Autowired private SysOrderItemDao orderItemDao; @Resource private MoneyCardUseService cardUseService; @Autowired private SysOrderItemService orderItemService; @Autowired private SysOrderDao sysOrderDao; @Autowired private AchieveNewService achieveNewService; @Autowired private SysProjUseService projUseService; @Autowired private ShoppingGoodsService shoppingGoodsService; @Autowired private MoneyCardUseService moneyCardUseService; @Autowired private CodeService codeService; @Autowired private MoneyCardUseFlowDao moneyCardUseFlowDao; /** * 订单退款 */ @RequestMapping(value = "/refundOrder") @Transactional public @ResponseBody AjaxResult refundOrder(@RequestBody RefundOrderVo refundOrderVo) { SysUsers loginUser = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); if (CollectionUtils.isEmpty(refundOrderVo.getItems())) { return new AjaxResult(AjaxResult.STATUS_FAIL, "请添加退款明细"); } SysOrder order = new SysOrder(); order.setOrderNo(codeService.getRefundOrderNo()); Double total =0D; for(RefundOrderItemVo itemVo:refundOrderVo.getItems()){ total=MoneyUtil.add(total,MoneyUtil.add(itemVo.getCardPay(),itemVo.getCashPay())); } order.setTotal(0-total); order.setZkTotal(total); order.setVipId(refundOrderVo.getVipId()); order.setOrderTime(new Date()); order.setPayTime(new Date()); order.setStaffId(getMe().getSuId()); order.setShopId(getMe().getShopId()); order.setStatu(Dictionary.ORDER_STATU_TK); order.setRemark(refundOrderVo.getRemark()); orderService.add(order); List orderItemList = new ArrayList<>(); for (RefundOrderItemVo itemVo : refundOrderVo.getItems()) { //设置订单明细基础信息 SysOrderItem orderItem = new SysOrderItem(); orderItem.setOrderId(order.getId()); orderItem.setCount(itemVo.getCount()); orderItem.setZkPrice(itemVo.getZkPrice()); orderItem.setIsFree(Dictionary.FLAG_NO); orderItem.setGoodsId(itemVo.getGoodsId()); if ( itemVo.getCardPay() > 0) { orderItem.setPayMethod(Dictionary.PAY_TYPE_CARD); //退回卡内余额 MoneyCardUse moneyCardUse=moneyCardUseService.findById(itemVo.getCardId()); moneyCardUse.setRealMoney(MoneyUtil.add(moneyCardUse.getRealMoney(),itemVo.getCardPay()) ); moneyCardUse.setIsOver(Dictionary.FLAG_NO_N); moneyCardUseService.modify(moneyCardUse); //充值卡使用流水 MoneyCardUseFlow moneyCardUseFlow=new MoneyCardUseFlow(); moneyCardUseFlow.setTotal(itemVo.getCardPay()); moneyCardUseFlow.setCarUseId(itemVo.getCardId()); moneyCardUseFlow.setVipId(order.getVipId()); moneyCardUseFlow.setType(MoneyCardUseFlow.USE_TYPE_CZ); moneyCardUseFlow.setOrderNo(order.getOrderNo()); moneyCardUseFlow.setCreateTime(new Date()); moneyCardUseFlow.setOperationId(loginUser.getSuId()); moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney()+moneyCardUse.getRealMoney()); moneyCardUseFlowDao.insert(moneyCardUseFlow); } else { orderItem.setPayMethod(Dictionary.PAY_TYPE_MOENY); } orderItem.setCashPay(itemVo.getCashPay()); orderItem.setCardPay(itemVo.getCardPay()); orderItem.setStatus(Dictionary.ORDER_STATU_TK); orderItem.setPayMethodDetail(itemVo.getCardId() + ""); //扣减项目余次 if (RefundOrderItemVo.REFUND_TYPE_GOODS.equals(itemVo.getRefundType())) { orderItem.setType(Dictionary.SHOPPING_GOODS_TYPE_JJCP); } else if (RefundOrderItemVo.REFUND_TYPE_PROJECT.equals(itemVo.getRefundType())) { orderItem.setType(Dictionary.SHOPPING_GOODS_TYPE_TC); //扣减项目余次 SysProjUse projUse = projUseService.findById(itemVo.getBusId()); int surplusCount = projUse.getSurplusCount() - itemVo.getCount(); if (surplusCount <= 0 ) { projUse.setStatus(Dictionary.TAOCAN_STATUS_WX); projUse.setIsOver(Dictionary.FLAG_YES_Y); } projUse.setSurplusCount(surplusCount); projUse.setBalance(surplusCount * projUse.getPrice()); if (Dictionary.SHOPPING_GOODS_TYPE_TCK.equals(projUse.getType())) { projUse.setOrderItemId(itemVo.getOrderItemId()); projUseService.updateProjUseTck(projUse); } else { projUseService.modify(projUse); } } else if (RefundOrderItemVo.REFUND_TYPE_CARD.equals(itemVo.getRefundType())) { orderItem.setType(Dictionary.SHOPPING_GOODS_TYPE_CZK); MoneyCardUse moneyCardUse = moneyCardUseService.findById(itemVo.getBusId()); moneyCardUse.setRealMoney(MoneyUtil.sub(moneyCardUse.getRealMoney(), (itemVo.getCardPay() + itemVo.getCashPay()))); if (moneyCardUse.getRealMoney() <= 0 && Dictionary.DELETED_N.equals(moneyCardUse.getIsVipCar()) ) { moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y); moneyCardUse.setStatus(Dictionary.TAOCAN_STATUS_WX); } moneyCardUseService.modify(moneyCardUse); } orderItem.setCardPay(0-orderItem.getCardPay()); orderItem.setCashPay(0-orderItem.getCashPay()); orderItemDao.insert(orderItem); } return new AjaxResult(AjaxResult.STATUS_SUCCESS, "退款成功"); } /** * 创建退款明细 */ @RequestMapping(value = "/createItem") public @ResponseBody AjaxResult createItem(@RequestBody RefundOrderItemVo itemVo) { if (RefundOrderItemVo.REFUND_TYPE_GOODS.equals(itemVo.getRefundType())) { return createGoodsItem(itemVo); } else if (RefundOrderItemVo.REFUND_TYPE_PROJECT.equals(itemVo.getRefundType())) { return createProjctItem(itemVo); } else if (RefundOrderItemVo.REFUND_TYPE_CARD.equals(itemVo.getRefundType())) { return createMoneyCarItem(itemVo); } else { return new AjaxResult(AjaxResult.STATUS_FAIL, "type参数错误"); } } /** * 生成充值卡退款明细 * TODO 考虑退款业绩如何处理 * @param itemVo * @return */ private AjaxResult createMoneyCarItem(RefundOrderItemVo itemVo) { List refundOrderItemVoList = new ArrayList<>(); List moneyCardIdList = StringUtils.strToCollToLong(itemVo.getIds(), ","); for (Long cardId : moneyCardIdList) { RefundOrderItemVo refundOrderItemVo = new RefundOrderItemVo(); MoneyCardUse moneyCardUse = moneyCardUseService.findById(cardId); SysOrderItem orderItem = orderItemDao.selectById(moneyCardUse.getOrderItemId()); refundOrderItemVo.setOrderItemId(orderItem.getId()); refundOrderItemVo.setPrice(moneyCardUse.getRealMoney()); refundOrderItemVo.setZkPrice(moneyCardUse.getRealMoney()); refundOrderItemVo.setCount(1); refundOrderItemVo.setMaxCount(1); refundOrderItemVo.setRefundType(RefundOrderItemVo.REFUND_TYPE_CARD); refundOrderItemVo.setBusId(cardId); ShoppingGoods shoppingGoods = shoppingGoodsService.findById(moneyCardUse.getGoodsId()); refundOrderItemVo.setGoodsName(shoppingGoods.getName()); refundOrderItemVo.setGoodsId(moneyCardUse.getGoodsId()); if (orderItem.getCardPay() != null && orderItem.getCardPay() != 0 && orderItem.getPayMethodDetail() != null) { //查询付款的卡项 MoneyCardUse payMoneyCardUse = cardUseService.findById(Long.parseLong(orderItem.getPayMethodDetail())); refundOrderItemVo.setCardId(payMoneyCardUse.getId()); refundOrderItemVo.setCardName(payMoneyCardUse.getCardName() + "-余:" + payMoneyCardUse.getMoney()); } refundOrderItemVoList.add(refundOrderItemVo); } return new AjaxResult(AjaxResult.STATUS_SUCCESS, refundOrderItemVoList); } /** * 生成套餐项目退款明细 */ private AjaxResult createProjctItem(RefundOrderItemVo itemVo) { List refundOrderItemVoList = new ArrayList<>(); List projUseIdList = StringUtils.strToCollToLong(itemVo.getIds(), ","); for (Long projUseId : projUseIdList) { SysProjUse sysProjUse = projUseService.findById(projUseId); RefundOrderItemVo refundOrderItemVo = new RefundOrderItemVo(); SysOrderItem orderItem = orderItemDao.selectById(sysProjUse.getOrderItemId()); refundOrderItemVo.setOrderItemId(orderItem.getId()); refundOrderItemVo.setGoodsId(orderItem.getGoodsId()); refundOrderItemVo.setPrice(sysProjUse.getPrice()); refundOrderItemVo.setZkPrice(sysProjUse.getPrice()); refundOrderItemVo.setCount(sysProjUse.getSurplusCount()); refundOrderItemVo.setBusId(projUseId); refundOrderItemVo.setCashPay(sysProjUse.getBalance()); refundOrderItemVo.setRefundType(RefundOrderItemVo.REFUND_TYPE_PROJECT); refundOrderItemVo.setMaxCount(sysProjUse.getSurplusCount()); ShoppingGoods projInfo = shoppingGoodsService.findById(sysProjUse.getProjId()); refundOrderItemVo.setGoodsName(projInfo.getName()); if (orderItem.getCardPay() != null && orderItem.getPayMethodDetail() != null) { //查询付款的卡项 MoneyCardUse moneyCardUse = cardUseService.findById(Long.parseLong(orderItem.getPayMethodDetail())); refundOrderItemVo.setCardId(moneyCardUse.getId()); refundOrderItemVo.setCardName(moneyCardUse.getCardName() + "-余:" + moneyCardUse.getMoney()); } refundOrderItemVoList.add(refundOrderItemVo); } return new AjaxResult(AjaxResult.STATUS_SUCCESS, refundOrderItemVoList); } /** * 生成家居产品退款明细 */ private AjaxResult createGoodsItem(RefundOrderItemVo itemVo) { List refundOrderItemVoList = new ArrayList<>(); //校验订单状态,只有已付款的订单可以进行退款 SysOrder order = orderService.findById(itemVo.getOrderId()); if (!Dictionary.ORDER_STATU_YFK.equals(order.getStatu())) { return new AjaxResult(AjaxResult.STATUS_FAIL, "该订单没有完成付款"); } List sysOrderItems = orderItemDao.selectByOrderId(itemVo.getOrderId()); for (SysOrderItem orderItem : sysOrderItems) { //只有家居产品支持消费退款 if (Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(orderItem.getType())) { RefundOrderItemVo refundOrderItemVo = new RefundOrderItemVo(); //同属性赋值 BeanUtils.copyProperties(orderItem, refundOrderItemVo); refundOrderItemVo.setMaxCount(orderItem.getCount()); refundOrderItemVo.setGoodsName(orderItem.getShoppingGoods().getName()); refundOrderItemVo.setBusId(orderItem.getGoodsId()); refundOrderItemVo.setRefundType(RefundOrderItemVo.REFUND_TYPE_GOODS); if (orderItem.getCardPay() != null && orderItem.getPayMethodDetail() != null) { //查询付款的卡项 MoneyCardUse moneyCardUse = cardUseService.findById(Long.parseLong(orderItem.getPayMethodDetail())); refundOrderItemVo.setCardId(moneyCardUse.getId()); refundOrderItemVo.setCardName(moneyCardUse.getCardName() + "-余:" + moneyCardUse.getMoney()); } refundOrderItemVoList.add(refundOrderItemVo); } } if (CollectionUtils.isEmpty(refundOrderItemVoList)) { return new AjaxResult(AjaxResult.STATUS_FAIL, "该订单中不存在家居产品"); } else { return new AjaxResult(AjaxResult.STATUS_SUCCESS, refundOrderItemVoList); } } }