com.zb.app.web.controller.order.OrderController.java Source code

Java tutorial

Introduction

Here is the source code for com.zb.app.web.controller.order.OrderController.java

Source

/*
 * Copyright 2011-2016 ZuoBian.com All right reserved. This software is the confidential and proprietary information of
 * ZuoBian.com ("Confidential Information"). You shall not disclose such Confidential Information and shall use it only
 * in accordance with the terms of the license agreement you entered into with ZuoBian.com.
 */
package com.zb.app.web.controller.order;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.zb.app.biz.cons.CompanyTypeEnum;
import com.zb.app.biz.cons.GuestAgeTypeEnum;
import com.zb.app.biz.cons.LogTableEnum;
import com.zb.app.biz.cons.OrderStateEnum;
import com.zb.app.biz.domain.TravelCompanyDO;
import com.zb.app.biz.domain.TravelLineDO;
import com.zb.app.biz.domain.TravelOperationLogDO;
import com.zb.app.biz.domain.TravelOrderCountDO;
import com.zb.app.biz.domain.TravelOrderDO;
import com.zb.app.biz.domain.TravelOrderFullDO;
import com.zb.app.biz.domain.TravelOrderGuestDO;
import com.zb.app.biz.domain.TravelOrderGuestFullDO;
import com.zb.app.biz.domain.TravelRouteDO;
import com.zb.app.biz.domain.TravelServiceDO;
import com.zb.app.biz.query.TravelLineQuery;
import com.zb.app.biz.query.TravelOrderQuery;
import com.zb.app.biz.query.TravelRouteQuery;
import com.zb.app.biz.query.TravelServiceQuery;
import com.zb.app.biz.service.combiz.ICallBack;
import com.zb.app.common.authority.AuthorityPolicy;
import com.zb.app.common.authority.Right;
import com.zb.app.common.component.annotation.FormBean;
import com.zb.app.common.core.lang.Argument;
import com.zb.app.common.core.lang.ArrayUtils;
import com.zb.app.common.core.lang.BeanUtils;
import com.zb.app.common.interceptor.annotation.ExportWordFile;
import com.zb.app.common.result.JsonResultUtils;
import com.zb.app.common.result.JsonResultUtils.JsonResult;
import com.zb.app.common.util.PushSMSUtils;
import com.zb.app.common.velocity.CustomVelocityLayoutView;
import com.zb.app.web.controller.BaseController;
import com.zb.app.web.tools.WebUserTools;
import com.zb.app.web.vo.TravelLineVO;
import com.zb.app.web.vo.TravelOrderFullVO;

/**
 * ?? 
 * 
 * @author zxc Jul 25, 2014 5:20:34 PM
 */
@Controller
@RequestMapping(value = "/order")
public class OrderController extends BaseController implements ICallBack {

    // callback
    private static final int ADD_ORDER_CALLBACK = 1;
    private static final int UPDATE_ORDER_CALLBACK = 2;
    private static final int DELETE_ORDER_CALLBACK = 3;

    /**
     * ????
     * 
     * @param mav
     * @param id
     * @return
     */
    @RequestMapping(value = "/payment.htm")
    public String payment() {
        return "";
    }

    /**
     * ??
     * 
     * @param id
     * @return
     */
    @RequestMapping("/print/confirm.htm")
    public String printConfirm() {
        return "/print/confirm";
    }

    /**
     * 
     * 
     * @param id
     * @return
     */
    @RequestMapping("/print/line.htm")
    public String printLine() {
        return "/print/line";
    }

    /**
     * ???
     * 
     * @param mav
     * @param id
     * @return
     */
    @RequestMapping(value = "/print/guest.htm")
    public ModelAndView showOrderGuest(ModelAndView mav, Long id) {
        // Id,?
        TravelLineDO lineDO = lineService.find(new TravelLineQuery(id));
        TravelCompanyDO companyDO = companyService.getById(lineDO.getcId());
        List<TravelOrderGuestFullDO> guestDOFulls = orderService.getByLIdAndPrice(id);

        mav.addObject("line", new TravelLineVO(lineDO));
        mav.addObject("company", companyDO);
        mav.addObject("guestFullDOs", guestDOFulls);
        mav.setViewName("/print/guest");
        return mav;
    }

    /**
     * ????
     * 
     * @param mav
     * @param id
     * @return
     */
    @RequestMapping(value = "/print/ticket.htm")
    public ModelAndView printTicket(ModelAndView mav, Long id) {
        // Id,?
        TravelLineDO lineDO = lineService.find(new TravelLineQuery(id));
        TravelCompanyDO companyDO = companyService.getById(lineDO.getcId());
        List<TravelOrderGuestDO> guestDOs = orderService.getByLId(id);

        mav.addObject("line", new TravelLineVO(lineDO));
        mav.addObject("company", companyDO);
        mav.addObject("guestDOs", guestDOs);
        mav.setViewName("/print/ticket");
        return mav;
    }

    /**
     * ???
     * 
     * @param mav
     * @param id
     * @return
     */
    @RequestMapping(value = "/print/goticket.htm")
    public ModelAndView printGoticket(ModelAndView mav, Long id) {
        // Id,?
        TravelLineDO lineDO = lineService.find(new TravelLineQuery(id));
        TravelCompanyDO companyDO = companyService.getById(lineDO.getcId());
        List<TravelOrderGuestDO> guestDOs = orderService.getByLId(id);

        mav.addObject("company", companyDO);
        mav.addObject("line", new TravelLineVO(lineDO));
        mav.addObject("guestDOs", guestDOs);
        mav.setViewName("/print/goticket");
        return mav;
    }

    /**
     * ????word
     * 
     * @param id
     * @return
     */
    @RequestMapping("/exportTicket/{id}.htm")
    @ExportWordFile(value = "????")
    public ModelAndView exportTicket(@PathVariable("id") Long id, ModelAndView mav) {
        if (Argument.isNotPositive(id)) {
            return createErrorJsonMav("?!", null);
        }
        // Id,?
        TravelLineDO lineDO = lineService.find(new TravelLineQuery(id));
        TravelCompanyDO companyDO = companyService.getById(lineDO.getcId());
        List<TravelOrderGuestDO> guestDOs = orderService.getByLId(id);

        mav.addObject("line", new TravelLineVO(lineDO));
        mav.addObject("company", companyDO);
        mav.addObject("guestDOs", guestDOs);
        mav.setViewName("word/exportTicket");
        mav.getModel().put(CustomVelocityLayoutView.USE_LAYOUT, "false");
        return mav;
    }

    /**
     * ???word
     * 
     * @param id
     * @return
     */
    @RequestMapping("/exportGoTicket/{id}.htm")
    @ExportWordFile(value = "???")
    public ModelAndView exportGoTicket(@PathVariable("id") Long id, ModelAndView mav) {
        if (Argument.isNotPositive(id)) {
            return createErrorJsonMav("?!", null);
        }
        // Id,?
        TravelLineDO lineDO = lineService.find(new TravelLineQuery(id));
        TravelCompanyDO companyDO = companyService.getById(lineDO.getcId());
        List<TravelOrderGuestDO> guestDOs = orderService.getByLId(id);

        mav.addObject("line", new TravelLineVO(lineDO));
        mav.addObject("company", companyDO);
        mav.addObject("guestDOs", guestDOs);
        mav.setViewName("word/exportGoTicket");
        mav.getModel().put(CustomVelocityLayoutView.USE_LAYOUT, "false");
        return mav;
    }

    /**
     * ???word
     * 
     * @param id
     * @return
     */
    @RequestMapping("/exportGuest/{id}.htm")
    @ExportWordFile(value = "???")
    public ModelAndView exportGuest(@PathVariable("id") Long id, ModelAndView mav) {
        if (Argument.isNotPositive(id)) {
            return createErrorJsonMav("?!", null);
        }
        // Id,?
        TravelLineDO lineDO = lineService.find(new TravelLineQuery(id));
        TravelCompanyDO companyDO = companyService.getById(lineDO.getcId());
        List<TravelOrderGuestFullDO> guestDOFulls = orderService.getByLIdAndPrice(id);

        mav.addObject("line", new TravelLineVO(lineDO));
        mav.addObject("company", companyDO);
        mav.addObject("guestFullDOs", guestDOFulls);
        mav.setViewName("word/exportGuest");
        mav.getModel().put(CustomVelocityLayoutView.USE_LAYOUT, "false");
        return mav;
    }

    /**
     * 
     * 
     * @param mav
     * @param id
     * @return
     */
    @RequestMapping(value = "/queryCount.htm", produces = "application/json")
    @ResponseBody
    public JsonResult queryCount(Long lId) {
        TravelLineDO lineDO = lineService.find(new TravelLineQuery(lId));
        Integer shenyu = lineDO.getlRenCount() - lineDO.getlCrCount() - lineDO.getlXhCount();
        return JsonResultUtils.success(shenyu);
    }

    @RequestMapping(value = "/count_view.htm")
    public ModelAndView count_view(ModelAndView mav, Integer id) {
        mav.setViewName("order/count_view");
        if (id == null) {
            return mav;
        }
        TravelOrderQuery query = new TravelOrderQuery();
        query.setOrState(id);
        if (WebUserTools.getCompanyType().getValue() == CompanyTypeEnum.TOUR.getValue()) {
            query.setCustomCompanyId(WebUserTools.getCid());
        } else {
            query.setcId(WebUserTools.getCid());
        }
        List<TravelOrderFullDO> list = orderService.showOrderQuery(query);
        if (list == null || list.size() == 0) {
            return mav;
        }
        TravelOrderCountDO orderCountDO = new TravelOrderCountDO(0);
        for (TravelOrderFullDO orderFullDO : list) {
            orderCountDO.setOrAdultCount(orderFullDO.getOrAdultCount() + orderCountDO.getOrAdultCount());
            orderCountDO.setOrBabyCount(orderFullDO.getOrBabyCount() + orderCountDO.getOrBabyCount());
            orderCountDO.setOrChildCount(orderFullDO.getOrChildCount() + orderCountDO.getOrChildCount());
            orderCountDO.setOrPirceCount(orderFullDO.getOrPirceCount() + orderCountDO.getOrPirceCount());
        }
        orderCountDO.setAllCount(
                orderCountDO.getOrAdultCount() + orderCountDO.getOrBabyCount() + orderCountDO.getOrChildCount());
        mav.addObject("list", list);
        mav.addObject("orderCount", orderCountDO);
        return mav;
    }

    /**
     * ?
     * 
     * @return
     */
    @RequestMapping(value = "/linecart.htm")
    public ModelAndView linecart(TravelLineVO trvo, ModelAndView mav) {
        if (trvo == null) {
            return createErrorJsonMav("error", null);
        }
        TravelLineDO lineDO = lineService.find(new TravelLineQuery(trvo.getlId()));
        Integer shenyu = lineDO.getlRenCount() - lineDO.getlCrCount() - lineDO.getlXhCount();
        Integer[] ren = trvo.getlPeople();
        Integer yudin = ren[0] + ren[1];
        if (yudin > shenyu) {
            return createErrorJsonMav("", null);
        }

        mav.addObject("line", new TravelLineVO(lineDO));
        mav.addObject("people", trvo.getlPeople());
        mav.addObject("cType", WebUserTools.getCompanyType().getValue());
        mav.addObject("member", memberService.getById(WebUserTools.getMid()));
        mav.setViewName("line/linecart");
        return mav;
    }

    /**
     * ??
     * 
     * @return
     */
    @RequestMapping(value = "/orderdetails.htm")
    public ModelAndView showOrderDetails(Long id, ModelAndView mav) {
        TravelOrderFullDO order = orderService.find(new TravelOrderQuery(id));
        TravelLineDO line = lineService.getTravelLineById(order.getlId());
        List<TravelOrderGuestDO> guestList = orderService.getByOrId(id);
        mav.addObject("cType", WebUserTools.getCompanyType().getValue());
        mav.addObject("guests", guestList);
        mav.addObject("line", new TravelLineVO(line));
        mav.addObject("order", new TravelOrderFullVO(order));
        mav.setViewName("order/orderdetails");
        return mav;
    }

    /**
     * ?
     * 
     * @return
     */
    @RequestMapping(value = "/addOrder.htm", produces = "application/json")
    @ResponseBody
    public JsonResult addOrder(TravelOrderDO orderVO, @FormBean(value = "guestVOs") TravelOrderGuestDO[] guestVOs) {
        // ?
        ArrayUtils.removeNullElement(guestVOs);
        if (Argument.isEmptyArray(guestVOs)) {
            return JsonResultUtils.error("??!");
        }
        if (Argument.isNotPositive(orderVO.getlId())) {
            return JsonResultUtils.error("?!??!");
        }
        TravelLineDO line = lineService.find(new TravelLineQuery(orderVO.getlId()));
        if (line == null) {
            return JsonResultUtils.error("??!");
        }
        Integer shenyu = line.getlRenCount() - line.getlCrCount() - line.getlXhCount();
        Integer yudin = orderVO.getOrAdultCount() + orderVO.getOrChildCount();
        if (yudin > shenyu) {
            return JsonResultUtils.error("!");
        }
        // ??
        if (WebUserTools.getCompanyType().getValue() == CompanyTypeEnum.TOUR.getValue()) {
            orderVO.setCustomId(WebUserTools.getMid());
            orderVO.setCustomCompanyId(WebUserTools.getCid());
        } else if (WebUserTools.getCompanyType().getValue() == CompanyTypeEnum.ACCOUNT.getValue()) {
            orderVO.setmId(WebUserTools.getMid());
        }
        orderVO.setOrPirceCount(orderVO.getOrAdultCount() * orderVO.getOrFirstJcrPrice()
                + orderVO.getOrChildCount() * orderVO.getOrFirstJxhPrice()
                + orderVO.getOrBabyCount() * orderVO.getOrFirstJyPrice());
        orderVO.setOrState(OrderStateEnum.UN_CONFIRM.getValue());
        for (TravelOrderGuestDO guestVO : guestVOs) {
            guestVO.setgDangFangPrice(orderVO.getOrDangFangPrice());
            if (StringUtils.isEmpty(guestVO.getgName()) && !Argument.isPositive(orderVO.getOrState())) {
                orderVO.setOrState(OrderStateEnum.INCOMPLETE.getValue());
            }
        }
        TravelLineDO upLine = new TravelLineDO(orderVO.getlId());
        upLine.setlCrCount(line.getlCrCount() + orderVO.getOrAdultCount());
        upLine.setlXhCount(line.getlXhCount() + orderVO.getOrChildCount());
        upLine.setlYCount(line.getlYCount() + orderVO.getOrBabyCount());

        return (JsonResult) bizCommonService.transactionDoAction(ADD_ORDER_CALLBACK, this, orderVO, guestVOs,
                upLine);
    }

    /**
     * ?
     * 
     * @return
     */
    @AuthorityPolicy(authorityTypes = { Right.MODIFY_ORDER })
    @RequestMapping(value = "/updateOrder.htm", produces = "application/json", method = RequestMethod.POST)
    @ResponseBody
    public JsonResult updateOrder(TravelOrderDO orderVO,
            @FormBean(value = "guestVOs") TravelOrderGuestDO[] guestVOs) {
        // ?
        ArrayUtils.removeNullElement(guestVOs);
        if (Argument.isEmptyArray(guestVOs)) {
            return JsonResultUtils.error("??!");
        }
        if (Argument.isNotPositive(orderVO.getOrId()) || Argument.isNotPositive(orderVO.getlId())) {
            return JsonResultUtils.error("?!??!");
        }
        TravelOrderDO order = orderService.getById(orderVO.getOrId());
        TravelLineDO line = lineService.getTravelLineById(orderVO.getlId());
        if (order == null || line == null) {
            return JsonResultUtils.error("??!");
        }
        // ??
        List<TravelOrderGuestDO> addList = new ArrayList<TravelOrderGuestDO>();
        List<TravelOrderGuestDO> upList = new ArrayList<TravelOrderGuestDO>();
        orderVO.setOrState(OrderStateEnum.UN_CONFIRM.getValue());
        orderVO.setOrAdultCount(order.getOrAdultCount());
        orderVO.setOrChildCount(order.getOrChildCount());
        orderVO.setOrBabyCount(order.getOrBabyCount());
        TravelLineDO upLine = new TravelLineDO(orderVO.getlId(), line.getlCrCount(), line.getlXhCount(),
                line.getlYCount());
        for (TravelOrderGuestDO guest : guestVOs) {
            if (StringUtils.isEmpty(guest.getgName()) && !Argument.isPositive(orderVO.getOrState())) {
                orderVO.setOrState(OrderStateEnum.INCOMPLETE.getValue());
            }
            if (!Argument.isNotPositive(guest.getgId())) {
                upList.add(guest);
                continue;
            }
            guest.setOrId(orderVO.getOrId());
            addList.add(guest);
            if (guest.getgType() == GuestAgeTypeEnum.ADULT.value) {
                orderVO.setOrAdultCount(orderVO.getOrAdultCount() + 1);
                upLine.setlCrCount(upLine.getlCrCount() + 1);
            } else if (guest.getgType() == GuestAgeTypeEnum.CHILDREN.value) {
                orderVO.setOrChildCount(orderVO.getOrChildCount() + 1);
                upLine.setlXhCount(upLine.getlXhCount() + 1);
            } else if (guest.getgType() == GuestAgeTypeEnum.BABY.value) {
                orderVO.setOrBabyCount(orderVO.getOrBabyCount() + 1);
                upLine.setlYCount(upLine.getlYCount() + 1);
            }
        }
        return (JsonResult) bizCommonService.transactionDoAction(UPDATE_ORDER_CALLBACK, this, orderVO, upLine,
                addList, upList);
    }

    /**
     * ?
     * 
     * @return
     */
    @RequestMapping(value = "/deleteOrder.htm", produces = "application/json", method = RequestMethod.POST)
    @ResponseBody
    public JsonResult deleteOrder(Long id) {
        // ?
        if (Argument.isNotPositive(id)) {
            return JsonResultUtils.error("?!??!");
        }
        TravelOrderGuestDO guest = orderService.getTravelOrderGuestById(id);
        if (guest == null || Argument.isNotPositive(guest.getOrId())) {
            return JsonResultUtils.error("??!");
        }
        TravelOrderDO order = orderService.getTravelOrderById(guest.getOrId());
        if (order == null || Argument.isNotPositive(order.getlId())) {
            return JsonResultUtils.error("??!");
        }
        TravelLineDO line = lineService.getTravelLineById(order.getlId());
        if (line == null) {
            return JsonResultUtils.error("??!");
        }
        // ??
        TravelOrderDO orderDO = new TravelOrderDO(order.getOrId());
        TravelLineDO lineDO = new TravelLineDO(line.getlId());
        if (guest.getgType() == 0) {
            orderDO.setOrAdultCount(order.getOrAdultCount() - 1);
            lineDO.setlCrCount(line.getlCrCount() - 1);
        } else if (guest.getgType() == 1) {
            orderDO.setOrChildCount(order.getOrChildCount() - 1);
            lineDO.setlXhCount(line.getlXhCount() - 1);
        } else if (guest.getgType() == 2) {
            orderDO.setOrBabyCount(order.getOrBabyCount() - 1);
            lineDO.setlYCount(line.getlYCount() - 1);
        }
        return (JsonResult) bizCommonService.transactionDoAction(DELETE_ORDER_CALLBACK, this, id, orderDO, lineDO);
    }

    @SuppressWarnings("unchecked")
    @Override
    public Object callback(int actionType, Object... params) {
        if (actionType == ADD_ORDER_CALLBACK) {
            TravelOrderDO order = (TravelOrderDO) params[0];
            TravelOrderGuestDO[] guestList = (TravelOrderGuestDO[]) params[1];
            TravelLineDO line = (TravelLineDO) params[2];

            orderService.addTravelOrder(order);

            for (TravelOrderGuestDO guestVO : guestList) {
                guestVO.setOrId(order.getOrId());
            }
            TravelOrderDO upOrder = new TravelOrderDO(order.getOrId(), order.getOrId());
            orderService.addTravelOrderGuest(guestList);
            orderService.updateTravelOrder(upOrder);
            lineService.updateTravelLine(line);
            List<TravelServiceDO> serviceDOs = companyService.list(new TravelServiceQuery(order.getcId()));
            List<String> mobiles = new ArrayList<String>();
            for (TravelServiceDO travelServiceDO : serviceDOs) {
                if (travelServiceDO.getsIsReceive() == 1) {
                    mobiles.add(travelServiceDO.getsMobile());
                }
            }
            logger.debug("???");
            PushSMSUtils.getInstance().sendNewOrderSMS(upOrder.getOrOrderId(),
                    mobiles.toArray(new String[mobiles.size()]));
            return JsonResultUtils.success("?!");
        } else if (actionType == UPDATE_ORDER_CALLBACK) {
            TravelOrderDO orderDO = (TravelOrderDO) params[0];
            TravelLineDO lineDO = (TravelLineDO) params[1];
            List<TravelOrderGuestDO> addList = (List<TravelOrderGuestDO>) params[2];
            List<TravelOrderGuestDO> upList = (List<TravelOrderGuestDO>) params[3];

            if (Argument.isNotEmpty(addList)) {
                lineService.updateTravelLine(lineDO);
                orderService.addTravelOrderGuest(addList.toArray(new TravelOrderGuestDO[addList.size()]));
            }
            if (Argument.isNotEmpty(upList)) {
                orderService.updateTravelOrderGuest(upList.toArray(new TravelOrderGuestDO[upList.size()]));
            }
            orderService.updateTravelOrder(orderDO);

            // 
            TravelOrderDO newOrder = orderService.getById(orderDO.getOrId());
            // ?
            Map<String, String> map = BeanUtils.fieldEditable(orderDO, newOrder);
            TravelOperationLogDO operationLogDO = new TravelOperationLogDO(LogTableEnum.ORDERLOG.value,
                    orderDO.getOrId(), orderDO.getOrOrderId(), map.get("oldString"), map.get("newString"),
                    WebUserTools.getMid(), WebUserTools.getCid());
            // 
            operationLogService.insertTravelOperationLog(operationLogDO);
            if (orderDO.getOrMobile() != null) {
                logger.debug("???");
                PushSMSUtils.getInstance().sendOrderModifySMS(newOrder.getOrOrderId(), orderDO.getOrMobile());
            }
            return JsonResultUtils.success("?!");
        } else if (actionType == DELETE_ORDER_CALLBACK) {
            Long id = (Long) params[0];
            TravelOrderDO order = (TravelOrderDO) params[1];
            TravelLineDO line = (TravelLineDO) params[2];

            orderService.deleteTravelOrderGuest(id);
            orderService.updateTravelOrder(order);
            lineService.updateTravelLine(line);
            return JsonResultUtils.success(id, "?!");
        }
        return JsonResultUtils.success("?!");
    }

    /***
     * 
     * 
     * @param id
     * @param mav
     * @return
     */
    @RequestMapping(value = "/printDocOrder/{id}.htm")
    @ExportWordFile(value = "OrderEnter")
    public ModelAndView ExportWord(@PathVariable Long id, ModelAndView mav) {
        // ?
        TravelOrderDO order = orderService.getById(id);
        // ???
        List<TravelOrderGuestDO> guestlist = orderService.getByOrId(id);
        // 
        TravelLineDO line = lineService.getTravelLineById(order.getlId());
        TravelLineVO lines = new TravelLineVO(line);
        // 
        TravelRouteQuery query = new TravelRouteQuery();
        query.setlId(lines.getlId());
        List<TravelRouteDO> routelist = lineService.list(query);
        lines.setRoutelist(routelist);
        // ?
        TravelCompanyDO comp = companyService.getById(order.getcId());
        mav.addObject("comp", comp);
        mav.addObject("line", lines);
        mav.addObject("order", order);
        mav.addObject("list", guestlist);
        mav.getModel().put(CustomVelocityLayoutView.USE_LAYOUT, "false");
        mav.setViewName("word/OrderEnter");
        return mav;
    }
}