package com.matrix.system.hive.action;
|
|
import cn.hutool.core.collection.CollUtil;
|
import com.matrix.component.rabbitmq.RabiitMqTemplate;
|
import com.matrix.core.constance.MatrixConstance;
|
import com.matrix.core.exception.GlobleException;
|
import com.matrix.core.pojo.AjaxResult;
|
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.core.tools.excl.ExcelSheetPO;
|
import com.matrix.core.tools.excl.ExcelUtil;
|
import com.matrix.core.tools.excl.ExcelVersion;
|
import com.matrix.system.common.bean.SysUsers;
|
import com.matrix.system.common.tools.ResponseHeadUtil;
|
import com.matrix.system.constance.Dictionary;
|
import com.matrix.system.hive.bean.*;
|
import com.matrix.system.hive.dao.*;
|
import com.matrix.system.hive.plugin.util.CollectionUtils;
|
import com.matrix.system.hive.service.*;
|
import com.matrix.system.shopXcx.mqTask.MQTaskRouting;
|
import com.matrix.system.wechart.templateMsg.UniformMsgParam;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.ui.ModelMap;
|
import org.springframework.web.bind.annotation.PathVariable;
|
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 javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.io.OutputStream;
|
import java.math.BigDecimal;
|
import java.net.URLEncoder;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.List;
|
|
/**
|
* 线下订单
|
*
|
* @author jiangyouyao
|
* @date 2016-09-08
|
*/
|
@Controller
|
@RequestMapping(value = "admin/order")
|
public class OrderController extends BaseController {
|
@Resource
|
private SysOrderService orderService;
|
@Autowired
|
ShoppingGoodsDao shoppingGoodsDao;
|
|
@Autowired
|
private CodeService codeService;
|
|
@Autowired
|
private SysOrderItemDao orderItemDao;
|
|
@Resource
|
private MoneyCardUseService cardUseService;
|
|
@Autowired
|
private MoneyCardUseDao moneyCardUseDao;
|
|
@Autowired
|
private SysOrderItemService orderItemService;
|
|
@Autowired
|
private SysOrderDao sysOrderDao;
|
|
@Autowired
|
private AchieveNewService achieveNewService;
|
|
@Autowired
|
SysShopInfoDao shopInfoDao;
|
|
@Autowired
|
private SysVipInfoService sysVipInfoService;
|
|
@Autowired
|
private SysOrderFlowService sysOrderFlowService;
|
|
@Autowired
|
private SysOrderFlowDao sysOrderFlowDao;
|
|
@Autowired
|
RabiitMqTemplate rabiitMqTemplate;
|
|
@Autowired
|
private SysProjServicesDao sysProjServicesDao;
|
|
@Value("${evn}")
|
private String evn;
|
|
/**
|
* 计算订单金额
|
*/
|
@RequestMapping(value = "/calculationOrder")
|
public @ResponseBody
|
AjaxResult calculationOrder(@RequestBody SysOrder sysOrder) {
|
BigDecimal total = BigDecimal.ZERO;
|
BigDecimal zkTotal = BigDecimal.ZERO;
|
//默认排序
|
List<SysOrderItem> items = sysOrder.getItems();
|
|
for (int i = 0; i < items.size(); i++) {
|
SysOrderItem item = items.get(i);
|
zkTotal = zkTotal.add(new BigDecimal(item.getZkPrice() * item.getCount()));
|
total = total.add(new BigDecimal(item.getPrice() * item.getCount()));
|
}
|
SysOrder sysOrderResult = new SysOrder();
|
sysOrderResult.setZkTotal(zkTotal.setScale(2,BigDecimal.ROUND_DOWN).doubleValue());
|
sysOrderResult.setTotal(total.doubleValue());
|
|
return AjaxResult.buildSuccessInstance(Arrays.asList(sysOrderResult));
|
}
|
|
|
/**
|
* 订单支付
|
*/
|
@RequestMapping(value = "/payOrder")
|
@Transactional(rollbackFor = Exception.class)
|
public @ResponseBody
|
AjaxResult payOrder(@RequestBody SysOrder sysOrder) {
|
SysUsers user = getMe();
|
sysOrder.setShopId(user.getShopId());
|
sysOrder.setOrderType(SysOrder.ORDER_TYPE_SEAL);
|
sysOrder.setIsHasRefund(SysOrder.IS_HAS_REFUND_N);
|
//校验订单是否满足结算调价,新订单则保存订单,已有订单则删除后更新
|
sysOrder = orderService.checkAndSaveOrder(sysOrder);
|
orderService.updateReceiptMoney(sysOrder);
|
|
//发送微信公众号提醒
|
UniformMsgParam uniformMsgParam=new UniformMsgParam(user.getCompanyId(),UniformMsgParam.GZH_GMCG);
|
uniformMsgParam.put("orderId",sysOrder.getId());
|
rabiitMqTemplate.sendMsg(MQTaskRouting.SEND_UNIFORM_TEMPLATE_MSG+evn,uniformMsgParam.toJSONString());
|
|
|
//处理用户购买的产品
|
return AjaxResult.buildSuccessInstance(Arrays.asList(sysOrder), "订单结算成功");
|
}
|
|
|
/**
|
* 退款
|
*
|
* @param sysOrder
|
* @return
|
*/
|
@RequestMapping(value = "/refundOrder")
|
@ResponseBody
|
public AjaxResult refundOrder(@RequestBody SysOrder sysOrder) {
|
//储值卡订单不能通过退款渠道退款
|
if(CollectionUtils.isNotEmpty(sysOrder.getItems())){
|
List<SysOrderItem> orderItem = orderItemService.findByOrderId(sysOrder.getItems().get(0).getOrderId());
|
if(orderItem.size()==1){
|
if(orderItem.get(0).getShoppingGoods().getCode().equals("vipCzk")){
|
return AjaxResult.buildFailInstance("充值订单请直接冲负数金额退款!");
|
}
|
}
|
}
|
orderService.refundOrderMoney(sysOrder);
|
//处理用户购买的产品
|
return AjaxResult.buildSuccessInstance(Arrays.asList(sysOrder), "订单退款成功");
|
}
|
|
|
/**
|
* 订单保存接口
|
*/
|
@RequestMapping(value = "/saveOrder")
|
@Transactional(rollbackFor = Exception.class)
|
public @ResponseBody
|
AjaxResult saveOrder(@RequestBody SysOrder sysOrder) {
|
SysUsers user = getMe();
|
sysOrder.setShopId(user.getShopId());
|
//校验保存订单
|
sysOrder = orderService.checkAndSaveOrder(sysOrder);
|
//处理用户购买的产品
|
return AjaxResult.buildSuccessInstance(Arrays.asList(sysOrder), "订单保存成功");
|
}
|
|
|
|
/**
|
* 列表显示
|
*/
|
@RequestMapping(value = "/showList")
|
public @ResponseBody
|
AjaxResult showList(SysOrder sysOrder, PaginationVO pageVo) {
|
//默认排序
|
if (StringUtils.isBlank(pageVo.getSort())) {
|
pageVo.setSort("order_time");
|
}
|
if (StringUtils.isBlank(pageVo.getOrder())) {
|
pageVo.setOrder("desc");
|
}
|
sysOrder.setShopId(getMe().getShopId());
|
return new AjaxResult(AjaxResult.STATUS_SUCCESS, orderService.findInPage(sysOrder, pageVo),
|
orderService.findTotal(sysOrder));
|
}
|
|
/**
|
* 展示员工创建的订单列表显示
|
*/
|
@RequestMapping(value = "/showStaffOrder")
|
public @ResponseBody
|
AjaxResult showStaffOrder(SysOrder sysOrder, PaginationVO pageVo) {
|
sysOrder.setStaffId(getMe().getSuId());
|
return showList(sysOrder, pageVo);
|
}
|
|
|
/**
|
* 收款
|
*/
|
@RequestMapping(value = "sk")
|
public @ResponseBody
|
AjaxResult sk(SysOrder order) throws GlobleException {
|
orderService.updateReceiptMoney(order);
|
return new AjaxResult(AjaxResult.STATUS_SUCCESS, "收款成功");
|
}
|
|
|
/**
|
* 更新订单的
|
*/
|
@RequestMapping(value = "/updateOrderTime")
|
public @ResponseBody
|
AjaxResult updateOrderTime(SysOrder sysOrder) {
|
|
sysOrderDao.updateOrderTime(sysOrder.getPayTime(), sysOrder.getId());
|
// 修改业绩时间
|
// 更新业绩时间
|
AchieveNew achieveNew = new AchieveNew();
|
achieveNew.setOrderId(sysOrder.getId());
|
achieveNew.setDatatime(sysOrder.getPayTime());
|
achieveNewService.modifyAchieveTime(achieveNew);
|
//更新收款流水时间
|
sysOrderFlowDao.updateTimeByOrderId(sysOrder.getId(),sysOrder.getPayTime());
|
|
|
return new AjaxResult(AjaxResult.STATUS_SUCCESS, "修改成功");
|
}
|
|
/**
|
* 根据订单ID查询订单信息
|
*/
|
@RequestMapping(value = "/getShopOrder")
|
public @ResponseBody
|
AjaxResult getShopOrder(Long id) {
|
SysOrder order = orderService.findById(id);
|
order.setItems(orderItemDao.selectByOrderId(id));
|
AjaxResult result = AjaxResult.buildSuccessInstance("");
|
result.putInMap("order", order);
|
MoneyCardUse cardUseInfo = cardUseService.findByVipId(order.getVipId());
|
|
if (cardUseInfo == null) {
|
cardUseInfo=sysVipInfoService.addVipDefaultCard(order.getVipId());
|
}
|
|
//打印需求加入门店信息
|
result.putInMap("shopInfo", shopInfoDao.selectById(order.getShopId()));
|
|
result.putInMap("moneyCar", cardUseInfo);
|
|
//查询会有所有有效的会员卡
|
result.putInMap("totalMoney", moneyCardUseDao.selectVipCardTotalMoney(order.getVipId()));
|
|
|
|
return result;
|
}
|
|
/**
|
* 根据订单ID查询订单信息
|
*/
|
@RequestMapping(value = "/findOrderById/{id}")
|
@ResponseBody
|
public AjaxResult findOrderById(@PathVariable Long id) {
|
SysOrder order = orderService.findById(id);
|
order.setItems(orderItemDao.selectByOrderId(id));
|
return AjaxResult.buildSuccessInstance(Arrays.asList(order));
|
}
|
|
|
//=======================================页面转发==================================
|
|
|
/**
|
* 根据订单ID查询订单信息
|
*/
|
@RequestMapping(value = "/findOrderDetailById")
|
public String findOrderDetailById(Long id) {
|
SysOrder order = orderService.findById(id);
|
order.setItems(orderItemDao.selectByOrderId(id));
|
WebUtil.getRequest().setAttribute("order", order);
|
return "admin/hive/mobile/order-history-msg";
|
}
|
|
/**
|
* 跳转 收款页面
|
*
|
* @author jyy
|
*/
|
@RequestMapping(value = "/editFormSk1")
|
public String editFormSk1(Long id) {
|
// 根据id查到对应的订单信息
|
SysOrder order = orderService.findById(id);
|
|
//查询出订单明细
|
List<SysOrderItem> sysOrderItems = orderItemDao.selectByOrderId(id);
|
|
order.setItems(sysOrderItems);
|
WebUtil.getRequest().setAttribute("order", order);
|
|
MoneyCardUse moneyCardUse = new MoneyCardUse();
|
moneyCardUse.setVipId(order.getVipId());
|
moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
|
List<MoneyCardUse> cards = cardUseService.findByModel(moneyCardUse);
|
|
WebUtil.getRequest().setAttribute("cards", cards);
|
|
return "admin/hive/beautySalon/sk-form";
|
}
|
|
/**
|
* 查询订单信息
|
*
|
* @throws GlobleException
|
* @author jyy
|
*/
|
@RequestMapping(value = "/getOrder")
|
public String getOrder(Long id) {
|
SysOrder order = orderService.findById(id);
|
MoneyCardUse moneyCardUse = new MoneyCardUse();
|
moneyCardUse.setVipId(order.getVipId());
|
moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
|
List<MoneyCardUse> cards = cardUseService.findByModel(moneyCardUse);
|
WebUtil.getRequest().setAttribute("cards", cards);
|
WebUtil.getRequest().setAttribute("order", order);
|
return "admin/hive/beautySalon/point-order";
|
}
|
|
@RequestMapping(value = "/findOrderDetailByIdOrNo")
|
@ResponseBody
|
public AjaxResult findOrderDetailByIdOrNo(SysOrder orderVo) {
|
// 根据id查到对应的订单信息
|
SysOrder order=null;
|
if(orderVo.getId()!=null){
|
order = orderService.findById(orderVo.getId());
|
}else if(StringUtils.isNotBlank(orderVo.getOrderNo())){
|
List<SysOrder> byModel = orderService.findByModel(orderVo);
|
if(byModel.size()==1){
|
order=orderService.findById(byModel.get(0).getId());
|
}
|
}
|
List<SysOrderItem> sysOrderItems = orderItemDao.selectByOrderId(order.getId());
|
order.setItems(sysOrderItems);
|
|
SysVipInfo vipInfo = sysVipInfoService.findById(order.getVipId());
|
// 根据会员Id查到会员有效的会员卡
|
// 根据订单号查找订单条目
|
List<SysOrderItem> orderItems = orderItemService.findByOrderId(order.getId());
|
|
MoneyCardUse moneyCardUse = new MoneyCardUse();
|
moneyCardUse.setVipId(order.getVipId());
|
List<MoneyCardUse> cards = cardUseService.findByModel(moneyCardUse);
|
|
List<SysOrderFlow> flows = sysOrderFlowService.findByOrderId(order.getId());
|
order.setFlows(flows);
|
|
List<SysOrderFlow> payMethods = sysOrderFlowService.findPayMethodsAmount(order.getId());
|
|
List<AchieveNew> achieveList = achieveNewService.findOrderItemAchieve(order.getId());
|
|
AjaxResult ajaxResult = AjaxResult.buildSuccessInstance("获取成功");
|
ajaxResult.putInMap("orderItems", orderItems);
|
ajaxResult.putInMap("order", order);
|
ajaxResult.putInMap("cards", cards);
|
ajaxResult.putInMap("vipInfo", vipInfo);
|
ajaxResult.putInMap("payMethods", payMethods);
|
ajaxResult.putInMap("achieveList", achieveList);
|
return ajaxResult;
|
}
|
|
/**
|
* 跳转 消费流水详情页面
|
*
|
* @author jyy
|
*/
|
@RequestMapping(value = "/orderItem")
|
public String orderItem(SysOrder orderVo) {
|
|
if(orderVo.getId()!=null){
|
WebUtil.getRequest().setAttribute("orderParam", orderVo.getId());
|
WebUtil.getRequest().setAttribute("orderId", orderVo.getId());
|
}else if(StringUtils.isNotBlank(orderVo.getOrderNo())){
|
WebUtil.getRequest().setAttribute("orderParam", orderVo.getOrderNo());
|
WebUtil.getRequest().setAttribute("orderNo", orderVo.getOrderNo());
|
}
|
return "admin/hive/beautySalon/orderXq-form";
|
}
|
|
|
@RequestMapping(value = "/toUpdateTime")
|
public String toUpdateTime(Long id) {
|
// 根据id查到对应的订单信息
|
SysOrder order = orderService.findById(id);
|
WebUtil.getRequest().setAttribute("order", order);
|
return "admin/hive/beautySalon/updateOrderTime";
|
}
|
//=======================================页面转发END==================================
|
|
|
/**
|
* 取消订单
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
@RequestMapping(value = "/cancelOrder")
|
public @ResponseBody
|
AjaxResult cancelOrder(Long id, Integer del) {
|
|
AjaxResult result = new AjaxResult();
|
SysOrder order = orderService.findById(id);
|
if (order == null) {
|
return new AjaxResult(AjaxResult.STATUS_FAIL, "订单不存在!");
|
}
|
|
List<SysOrderItem> items = orderItemDao.selectByOrderId(id);
|
for (SysOrderItem item : items) {
|
List<SysProjServices> sysProjServices = sysProjServicesDao.selectProjServicesByOrderItemId(item.getId());
|
if (CollUtil.isNotEmpty(sysProjServices)) {
|
return new AjaxResult(AjaxResult.STATUS_FAIL, "订单存在进行中的服务单无法取消/删除");
|
}
|
}
|
|
orderService.cancelOrder(id);
|
// if (del > 0) {
|
// orderService.removeById(id);
|
// result.setInfo("删除成功!");
|
// } else {
|
result.setInfo("取消成功!");
|
// }
|
result.setStatus(AjaxResult.STATUS_SUCCESS);
|
|
return result;
|
}
|
|
@RequestMapping(value = "/exportExcel")
|
public void report(ModelMap model, HttpServletRequest request, HttpServletResponse response,
|
SysOrder sysOrder) throws Exception {
|
SysUsers sysUsers = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
|
sysOrder.setShopId(sysUsers.getShopId());
|
doExportOrder(response, sysOrder);
|
return;
|
|
}
|
|
/**
|
* 总部订单导出
|
*/
|
@RequestMapping(value = "/erpExportExcel")
|
public void erpExportExcel(ModelMap model, HttpServletRequest request, HttpServletResponse response,
|
SysOrder sysOrder) throws Exception {
|
doExportOrder(response, sysOrder);
|
return;
|
|
}
|
|
|
|
|
/**
|
* 执行订单导出,总部和门店共用,但是搜索条件不一样
|
* @param response
|
* @param sysOrder
|
* @throws IOException
|
*/
|
private void doExportOrder(HttpServletResponse response, SysOrder sysOrder) throws IOException {
|
List<ExcelSheetPO> res = new ArrayList<>();
|
ExcelSheetPO orderSheet = new ExcelSheetPO();
|
String title = "订单记录";
|
orderSheet.setSheetName(title);
|
orderSheet.setTitle(title);
|
String[] header = {"订单号", "客户姓名", "客户手机", "下单时间", "订单总价", "折后价", "现金付款", "卡付款", "顾问姓名", "所属门店", "订单状态"};
|
orderSheet.setHeaders(header);
|
//门店只能查询本店自己的订单
|
List<SysOrder> dataList = orderService.findInPage(sysOrder, null);
|
List<List<Object>> list = new ArrayList<>();
|
if (dataList.size() > 0) {
|
for (SysOrder item : dataList) {
|
List<Object> temp = new ArrayList<>();
|
temp.add(item.getOrderNo());
|
temp.add(item.getVipName());
|
temp.add(item.getVipPhone());
|
temp.add(DateUtil.dateToString(item.getOrderTime(), DateUtil.DATE_FORMAT_MM));
|
temp.add(item.getTotal());
|
temp.add(item.getZkTotal());
|
temp.add(item.getCashPay());
|
temp.add(item.getCardPay());
|
temp.add(item.getStaffName());
|
temp.add(item.getShopName());
|
temp.add(item.getStatu());
|
list.add(temp);
|
}
|
}
|
orderSheet.setDataList(list);
|
res.add(orderSheet);
|
response = ResponseHeadUtil.setExcelHead(response);
|
response.setHeader("Content-Disposition",
|
"attachment;filename=" + URLEncoder.encode(title + DateUtil.getTimeMark() + ".xlsx".trim(), "UTF-8"));
|
OutputStream os = response.getOutputStream();
|
ExcelUtil.createWorkbookAtOutStream(ExcelVersion.V2007, res, os, true);
|
}
|
|
|
}
|