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<SysOrderItem> 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<RefundOrderItemVo> refundOrderItemVoList = new ArrayList<>();
|
List<Long> 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<RefundOrderItemVo> refundOrderItemVoList = new ArrayList<>();
|
List<Long> 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<RefundOrderItemVo> refundOrderItemVoList = new ArrayList<>();
|
//校验订单状态,只有已付款的订单可以进行退款
|
SysOrder order = orderService.findById(itemVo.getOrderId());
|
if (!Dictionary.ORDER_STATU_YFK.equals(order.getStatu())) {
|
return new AjaxResult(AjaxResult.STATUS_FAIL, "该订单没有完成付款");
|
}
|
List<SysOrderItem> 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);
|
}
|
}
|
|
|
}
|