package com.matrix.system.hive.action; 
 | 
  
 | 
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.constance.SystemConstance; 
 | 
import com.matrix.system.hive.action.util.QueryUtil; 
 | 
import com.matrix.system.hive.bean.AchieveNew; 
 | 
import com.matrix.system.hive.bean.MoneyCardUse; 
 | 
import com.matrix.system.hive.bean.SysOrder; 
 | 
import com.matrix.system.hive.bean.SysOrderItem; 
 | 
import com.matrix.system.hive.dao.MoneyCardUseDao; 
 | 
import com.matrix.system.hive.dao.SysOrderDao; 
 | 
import com.matrix.system.hive.dao.SysOrderItemDao; 
 | 
import com.matrix.system.hive.dao.SysShopInfoDao; 
 | 
import com.matrix.core.tools.DateUtil; 
 | 
import com.matrix.system.hive.pojo.ShoppingCarItem; 
 | 
import com.matrix.system.hive.pojo.ShoppingCarItemsVo; 
 | 
import com.matrix.system.hive.service.AchieveNewService; 
 | 
import com.matrix.system.hive.service.MoneyCardUseService; 
 | 
import com.matrix.system.hive.service.SysOrderItemService; 
 | 
import com.matrix.system.hive.service.SysOrderService; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
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 
 | 
    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; 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 计算订单金额 
 | 
     */ 
 | 
    @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.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 = orderService.checkAndSaveOrder(sysOrder); 
 | 
        orderService.updateReceiptMoney(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), "订单保存成功"); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 新建订单 
 | 
     * 
 | 
     * @author jiangyouyao 
 | 
     */ 
 | 
    @RequestMapping(value = "/addOrder") 
 | 
    public @ResponseBody 
 | 
    AjaxResult addOrder(ShoppingCarItemsVo car) { 
 | 
  
 | 
        List<ShoppingCarItem> sessionCarItems = (List<ShoppingCarItem>) WebUtil.getSession().getAttribute( 
 | 
                SystemConstance.SHOPPING_CAR); 
 | 
  
 | 
        List<ShoppingCarItem> carItems = new ArrayList<>(); 
 | 
  
 | 
        // 设置购车中的具体类型信息,过滤没有被选中的商品 
 | 
        for (ShoppingCarItem carItem : car.getCarItems()) { 
 | 
  
 | 
            for (ShoppingCarItem sessionCar : sessionCarItems) { 
 | 
  
 | 
                if (carItem.getId().equals(sessionCar.getId())) { 
 | 
                    //已最后提交的数量为准 
 | 
                    sessionCar.setCount(carItem.getCount()); 
 | 
                    carItems.add(sessionCar); 
 | 
                    break; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        //设置过滤后的购物车条目 
 | 
        car.setCarItems(carItems); 
 | 
  
 | 
        // 添加新订单 
 | 
        int i = orderService.createOrder(WebUtil.getSession(), car); 
 | 
  
 | 
        if (i > 0) { 
 | 
            WebUtil.getSession().removeAttribute(SystemConstance.SHOPPING_CAR); 
 | 
            return new AjaxResult(AjaxResult.STATUS_SUCCESS, "下单成功"); 
 | 
        } else { 
 | 
            return new AjaxResult(AjaxResult.STATUS_FAIL, "下单添加失败"); 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 列表显示 
 | 
     */ 
 | 
    @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.getOrderTime(), sysOrder.getId()); 
 | 
        // 修改业绩时间 
 | 
        // 更新业绩时间 
 | 
        AchieveNew achieveNew = new AchieveNew(); 
 | 
        achieveNew.setOrderId(sysOrder.getId()); 
 | 
        achieveNew.setDatatime(sysOrder.getOrderTime()); 
 | 
        achieveNewService.modifyAchieveTime(achieveNew); 
 | 
        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 = new MoneyCardUse(); 
 | 
            cardUseInfo.setVipId(order.getVipId()); 
 | 
            cardUseInfo.setCardName("储值卡"); 
 | 
            cardUseInfo.setIsVipCar(Dictionary.FLAG_YES_Y); 
 | 
            cardUseInfo.setRealMoney(0D); 
 | 
            cardUseInfo.setGiftMoney(0D); 
 | 
            cardUseInfo.setSource("-"); 
 | 
            cardUseInfo.setStatus(Dictionary.MONEYCARD_STATUS_YX); 
 | 
            cardUseInfo.setFailTime(DateUtil.stringToDate("2050-01-01 00:00",DateUtil.DATE_FORMAT_MM)); 
 | 
            moneyCardUseDao.insert(cardUseInfo); 
 | 
        } 
 | 
  
 | 
        //打印需求加入门店信息 
 | 
        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"; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 跳转 消费流水详情页面 
 | 
     * 
 | 
     * @author jyy 
 | 
     */ 
 | 
    @RequestMapping(value = "/orderItem") 
 | 
    public String orderItem(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); 
 | 
  
 | 
        WebUtil.getRequest().setAttribute("order", order); 
 | 
        // 根据会员Id查到会员有效的会员卡 
 | 
        // 根据订单号查找订单条目 
 | 
        SysOrderItem orderItem = new SysOrderItem(); 
 | 
        orderItem.setOrderId(order.getId()); 
 | 
        List<SysOrderItem> orderItems = orderItemService.findByModel(orderItem); 
 | 
        WebUtil.getRequest().setAttribute("orderItems", orderItems); 
 | 
  
 | 
        MoneyCardUse moneyCardUse = new MoneyCardUse(); 
 | 
        moneyCardUse.setVipId(order.getVipId()); 
 | 
        List<MoneyCardUse> cards = cardUseService.findByModel(moneyCardUse); 
 | 
  
 | 
        WebUtil.getRequest().setAttribute("cards", cards); 
 | 
        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, "订单不存在!"); 
 | 
        } 
 | 
        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); 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |