com.zb.app.web.controller.account.AccountLineController.java Source code

Java tutorial

Introduction

Here is the source code for com.zb.app.web.controller.account.AccountLineController.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.account;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Random;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
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.IntegralSourceEnum;
import com.zb.app.biz.cons.LineStateEnum;
import com.zb.app.biz.cons.LineTemplateEnum;
import com.zb.app.biz.cons.LogTableEnum;
import com.zb.app.biz.domain.TravelIntegralDO;
import com.zb.app.biz.domain.TravelLineDO;
import com.zb.app.biz.domain.TravelLineThinDO;
import com.zb.app.biz.domain.TravelOperationLogDO;
import com.zb.app.biz.domain.TravelOrderDO;
import com.zb.app.biz.domain.TravelPhotoDO;
import com.zb.app.biz.domain.TravelRouteDO;
import com.zb.app.biz.domain.TravelSiteFullDO;
import com.zb.app.biz.domain.TravelTrafficDO;
import com.zb.app.biz.query.TravelIntegralQuery;
import com.zb.app.biz.query.TravelLineQuery;
import com.zb.app.biz.query.TravelOrderQuery;
import com.zb.app.biz.query.TravelPhotoQuery;
import com.zb.app.biz.query.TravelRouteQuery;
import com.zb.app.biz.query.TravelTrafficQuery;
import com.zb.app.common.authority.AuthorityPolicy;
import com.zb.app.common.authority.Right;
import com.zb.app.common.core.lang.Argument;
import com.zb.app.common.core.lang.BeanUtils;
import com.zb.app.common.core.lang.CollectionUtils;
import com.zb.app.common.pagination.PagesPagination;
import com.zb.app.common.pagination.PaginationList;
import com.zb.app.common.pagination.PaginationParser;
import com.zb.app.common.pagination.PaginationParser.DefaultIpageUrl;
import com.zb.app.common.pagination.PaginationParser.IPageUrl;
import com.zb.app.common.result.JsonResultUtils;
import com.zb.app.common.result.JsonResultUtils.JsonResult;
import com.zb.app.common.result.Result;
import com.zb.app.common.util.DateViewTools;
import com.zb.app.common.velocity.CustomVelocityLayoutView;
import com.zb.app.external.lucene.search.pojo.ProductSearchField;
import com.zb.app.external.lucene.search.query.ProductSearchQuery;
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.TravelRouteVO;
import com.zb.app.web.vo.TravelTrafficVO;

/**
 * Account ??,?,
 * 
 * @author zxc Fun 16, 2014 5:44:33 PM
 */
@Controller
@RequestMapping("/account")
public class AccountLineController extends BaseController {

    /**
     * 
     * 
     * @return
     * @throws Exception
     */
    @AuthorityPolicy(authorityTypes = { Right.CREATE_PRODUCT })
    @RequestMapping(value = "/addLine.htm", method = RequestMethod.POST)
    @ResponseBody
    public JsonResult addLine(@Valid TravelLineVO line, BindingResult result) throws Exception {
        if (line.getlCrPrice() == null || line.getlXhPrice() == null || line.getlYPrice() == null
                || line.getlJCrPrice() == null || line.getlJXhPrice() == null || line.getlJYPrice() == null
                || line.getlFangPrice() == null) {
            return JsonResultUtils.error("?!");
        }
        TravelIntegralDO integralDO = null;
        int integral = 0;
        // ?
        Result rs = showErrors(result);
        if (rs.isFailed()) {
            return JsonResultUtils.error(rs.getMessage());
        }
        Calendar date = Calendar.getInstance();
        String[] groupTimes = line.getlGoGroupTimeString().split(",");
        // ?
        if (line.getlIsIntegral() == 1) {
            if (line.getlAdultIntegral() == null || line.getlChildrenIntegral() == null) {
                return JsonResultUtils.error("?!");
            }
            // ??
            TravelIntegralQuery integralQuery = new TravelIntegralQuery();
            integralQuery.setcId(WebUserTools.getCid());
            integralDO = integralService.queryBala(integralQuery);
            if (integralDO == null) {
                return JsonResultUtils.error("?");
            }
            Integer cintegral = integralDO.getiBalance();
            integral = line.getlAdultIntegral() > line.getlChildrenIntegral()
                    ? line.getlRenCount() * groupTimes.length * line.getlAdultIntegral()
                    : line.getlRenCount() * groupTimes.length * line.getlChildrenIntegral();
            if (cintegral < integral) {
                return JsonResultUtils.error("?");
            }
        }
        int tlid = 0, roid = 0;
        String rom = getSerialNumber();
        TravelLineDO tr = null;
        for (String groupTime : groupTimes) {
            if (org.apache.commons.lang.StringUtils.isEmpty(groupTime)) {
                continue;
            }
            if (groupTimes.length == 1) {
                return JsonResultUtils.success(null, "?!");
            }
            // 
            Date gogrouptime = null;
            try {
                gogrouptime = DateViewTools.parseSimple(groupTime);
            } catch (Exception e) {
                return JsonResultUtils.success(null, "??");
            }
            line.setlGoGroupTime(gogrouptime);
            // 
            date.setTime(gogrouptime);
            date.add(Calendar.DAY_OF_MONTH, -line.getlEndTimeInteger());
            line.setlEndTime(date.getTime());
            // ?
            tr = new TravelLineDO();
            BeanUtils.copyProperties(tr, line);
            // 
            tr.setlTemplateState(LineTemplateEnum.Line.getValue());
            // 
            tr.setlProduct(rom);
            // ?ID
            tr.setcId(WebUserTools.getCid());
            // id
            tr.setmId(WebUserTools.getMid());
            // 
            tlid = lineService.addTravelLine(tr);
            // 
            if (line.getRoutelist() != null || line.getRoutelist().size() != 0) {
                int nullroute = line.getlDay() - line.getRoutelist().size();
                for (TravelRouteDO route : line.getRoutelist()) {
                    route.setlId(tr.getlId());
                    roid = lineService.addTravelRoute(route);
                }
                if (nullroute != 0) {
                    for (int i = 0; i < nullroute; i++) {
                        TravelRouteDO route = new TravelRouteDO();
                        route.setlId(tr.getlId());
                        roid = lineService.addTravelRoute(route);
                    }
                }
            }
        }
        boolean bool = tlid != 0 && roid != 0;
        if (bool) {
            // ?
            PaginationList<ProductSearchField> list = lineService.listProductSearch(new TravelLineQuery(rom));
            solrClient.addBeans("zuobian", list);
            // 
            if (line.getlIsIntegral() == 1) {
                TravelIntegralDO integralDJ = new TravelIntegralDO();
                integralDJ.setiSource(IntegralSourceEnum.release.value);
                integralDJ.setcId(WebUserTools.getCid());
                integralDJ.setiBalance(integralDO.getiBalance() - integral);
                integralDJ.setiFrozen(integralDO.getiFrozen() + integral);
                integralDJ.setiAltogether(integralDJ.getiBalance() + integralDJ.getiFrozen());
                integralService.addTravelIntegral(integralDJ);
            }
        }

        return bool
                ? JsonResultUtils.success(lineService.getTravelLineById(tr.getlId()).getlGroupNumber(),
                        "?!")
                : JsonResultUtils.error("!");
    }

    /**
     * ?
     * 
     * @param ids
     * @return
     */
    @RequestMapping(value = "updateLines.htm", method = RequestMethod.POST)
    @ResponseBody
    public JsonResult updateLines(String id, Integer state) {
        if (id == null || id.equals("")) {
            return JsonResultUtils.error("?!");
        }
        // Long
        String[] ids = id.substring(1, id.length()).split(",");
        Long[] lids = new Long[ids.length];
        for (int i = 0; i < ids.length; i++) {
            lids[i] = Long.parseLong(ids[i]);
        }
        // ?
        TravelLineThinDO trdo = new TravelLineThinDO();
        trdo.setlState(state);
        // ?ID
        trdo.setlEditUserId(WebUserTools.getMid().intValue());
        // ??
        List<TravelLineDO> oldlineDOs = new ArrayList<TravelLineDO>();
        for (Long lid : lids) {
            TravelLineDO oldLine = lineService.getTravelLineById(lid);
            oldlineDOs.add(oldLine);
        }
        // ?
        int result = lineService.updateLines(lids, trdo);

        if (result == 0) {
            return JsonResultUtils.error("!");
        } else {
            // ?
            List<TravelLineDO> newlineDOs = new ArrayList<TravelLineDO>();
            for (Long lid : lids) {
                TravelLineDO oldLine = lineService.getTravelLineById(lid);
                newlineDOs.add(oldLine);
                //
                updateSolr(oldLine);
            }
            // ?
            List<Map<String, String>> lst = BeanUtils.fieldEditableList(oldlineDOs, newlineDOs);
            for (int i = 0; i < lst.size(); i++) {
                TravelOperationLogDO operationLogDO = new TravelOperationLogDO(LogTableEnum.LINELOG.value,
                        newlineDOs.get(i).getlId(), newlineDOs.get(i).getlGroupNumber(),
                        lst.get(i).get("oldString"), lst.get(i).get("newString"), WebUserTools.getMid(),
                        WebUserTools.getCid());
                // 
                operationLogService.insertTravelOperationLog(operationLogDO);
            }
            return JsonResultUtils.success(null, "?!");
        }
    }

    /**
     * 
     * 
     * @param mav
     * @return
     */
    @AuthorityPolicy(authorityTypes = { Right.MODIFY_PRODUCT })
    @RequestMapping(value = "/linegetvalue.htm")
    public ModelAndView lineUpdateGetValue(Long lId, ModelAndView mav) {
        // ?
        TravelLineDO lineDO = lineService.find(new TravelLineQuery(lId));
        TravelLineVO lineVO = new TravelLineVO();
        BeanUtils.copyProperties(lineVO, lineDO);
        // 
        TravelRouteQuery routq = new TravelRouteQuery();
        routq.setlId(lineVO.getlId());
        List<TravelRouteDO> rlistp = lineService.list(routq);
        List<TravelRouteVO> rlist = BeanUtils.convert(TravelRouteVO.class, rlistp);
        // 
        mav.addObject("line", lineVO);
        mav.addObject("route", rlist);
        mav.addObject("type", "update");
        mav.setViewName("account/line/lineadd");
        return mav;
    }

    /**
     * ?
     * 
     * @param mav
     * @return
     */
    @AuthorityPolicy(authorityTypes = { Right.SAVE_PRODUCT })
    @RequestMapping(value = "/linecopyvalue.htm")
    public ModelAndView lineCopyGetValue(Long lId, ModelAndView mav) {
        // ?
        TravelLineDO lineDO = lineService.find(new TravelLineQuery(lId));
        TravelLineVO lineVO = new TravelLineVO();
        BeanUtils.copyProperties(lineVO, lineDO);
        // 
        TravelRouteQuery routq = new TravelRouteQuery();
        routq.setlId(lineVO.getlId());
        List<TravelRouteDO> rlistp = lineService.list(routq);
        List<TravelRouteVO> rlist = BeanUtils.convert(TravelRouteVO.class, rlistp);
        // 
        mav.addObject("line", lineVO);
        mav.addObject("route", rlist);
        mav.addObject("type", "copy");
        mav.setViewName("account/line/lineadd");
        return mav;
    }

    /**
     * 
     * 
     * @param line
     * @param result
     * @return
     * @throws Exception
     */
    @AuthorityPolicy(authorityTypes = { Right.MODIFY_PRODUCT })
    @RequestMapping(value = "/lineupdate.htm", method = RequestMethod.POST)
    @ResponseBody
    public JsonResult lineUpdate(TravelLineVO line) throws Exception {
        if (line.getlCrPrice() == null || line.getlXhPrice() == null || line.getlYPrice() == null
                || line.getlJCrPrice() == null || line.getlJXhPrice() == null || line.getlJYPrice() == null
                || line.getlFangPrice() == null) {
            return JsonResultUtils.error("?!");
        }
        // 
        Calendar date = Calendar.getInstance();
        date.setTime(line.getlGoGroupTime());
        date.add(Calendar.DAY_OF_MONTH, -line.getlEndTimeInteger());
        line.setlEndTime(date.getTime());
        // 
        lineService.deleteTravelRouteByLineid(line.getlId());
        // ?ID
        line.setlEditUserId(WebUserTools.getMid().intValue());
        // 
        int roid = 0;
        if (line.getRoutelist() != null || line.getRoutelist().size() != 0) {
            for (TravelRouteDO route : line.getRoutelist()) {
                route.setlId(line.getlId());
                roid = lineService.addTravelRoute(route);
            }
        }
        // ?
        TravelLineDO oldLine = lineService.getTravelLineById(line.getlId());
        boolean bool = lineService.updateTravelLine(line) && roid != 0;
        if (bool) {
            // *****************?
            // 
            TravelLineDO newLine = lineService.getTravelLineById(line.getlId());
            // ?
            Map<String, String> map = BeanUtils.fieldEditable(oldLine, newLine);
            TravelOperationLogDO operationLogDO = new TravelOperationLogDO(LogTableEnum.LINELOG.value,
                    line.getlId(), line.getlGroupNumber(), map.get("oldString"), map.get("newString"),
                    WebUserTools.getMid(), WebUserTools.getCid());
            // 
            operationLogService.insertTravelOperationLog(operationLogDO);
            // *****************?
            updateSolr(newLine);
            return JsonResultUtils.success(null, "?!");
        } else {
            return JsonResultUtils.error("!");
        }
    }

    /**
     *  
     * 
     * @param mav
     * @return
     */
    @RequestMapping(value = "/showlist.htm", method = RequestMethod.POST)
    public ModelAndView line(ModelAndView mav, TravelLineQuery query, String lGoGroupTime, String lGoGroupEndTime,
            Integer page, Integer pagesize) {
        List<TravelSiteFullDO> sitelist = siteService.getSiteFull(WebUserTools.getCid());
        Long[] zids = CollectionUtils.getLongValueArrays(sitelist, "zId");
        if (query.getzId() != null) {
            query.setzIds(query.getzId());
        } else {
            query.setzIds(zids);
        }
        TravelLineQuery.parse(query, lGoGroupTime, lGoGroupEndTime, page, pagesize,
                LineTemplateEnum.Line.getValue());
        query.setcId(WebUserTools.getCid());

        PaginationList<TravelLineDO> list = lineService.listPagination(query, new DefaultIpageUrl());
        List<TravelLineVO> lists = BeanUtils.convert(TravelLineVO.class, list);

        mav.getModel().put(CustomVelocityLayoutView.USE_LAYOUT, "false");
        mav.addObject("list", lists);
        mav.addObject("pagination", list.getQuery());
        mav.setViewName("account/line/linelist");
        return mav;
    }

    /**
     * ?
     * 
     * @return
     */
    @RequestMapping(value = "/line.htm")
    public String showline() {
        return "account/line/index";
    }

    /**
     * ?
     * 
     * @return
     */
    @AuthorityPolicy(authorityTypes = { Right.CREATE_PRODUCT })
    @RequestMapping(value = "/lineadd.htm")
    public String lineadd() {
        return "account/line/lineadd";
    }

    /***
     * 
     * 
     * @param id
     * @return
     */
    @AuthorityPolicy(authorityTypes = { Right.REMOVE_PRODUCT })
    @RequestMapping("/deleteline.htm")
    @ResponseBody
    public JsonResult deleteline(Long id) {
        // ??
        TravelOrderQuery query = new TravelOrderQuery();
        query.setlId(id);
        List<TravelOrderDO> list = orderService.list(query);
        if (Argument.isNotEmpty(list)) {
            return JsonResultUtils.error("?,!");
        }
        TravelLineDO tr = lineService.getTravelLineById(id);
        tr.setlDelState(1);
        lineService.deleteTravelRouteByLineid(tr.getlId());
        boolean bool = lineService.updateTravelLine(tr);
        // ?
        if (bool) {
            updateSolr(tr);
        }
        return bool ? JsonResultUtils.success(null, "?!") : JsonResultUtils.error("!");
    }

    /**
     * ??
     * 
     * @return
     */
    @RequestMapping(value = "/trafficlist.htm")
    public ModelAndView traffic(ModelAndView mav, TravelTrafficQuery query, String type, Integer page,
            Integer pagesize) {
        query.setcId(WebUserTools.getCid());
        query.setPageSize(pagesize = Argument.isNotPositive(pagesize) ? 8 : pagesize);
        query.setNowPageIndex(page = Argument.isNotPositive(page) ? 0 : page - 1);

        PaginationList<TravelTrafficDO> trafficlist = lineService.listPagination(query, new DefaultIpageUrl());
        PagesPagination pagination = PaginationParser.getPaginationList(page, pagesize, query.getAllRecordNum(),
                new IPageUrl() {

                    @Override
                    public String parsePageUrl(Object... objs) {
                        return "/account/trafficlist.htm?page=" + (Integer) objs[1];
                    }

                });
        List<TravelTrafficVO> trafficlistvo = BeanUtils.convert(TravelTrafficVO.class, trafficlist);

        mav.addObject("trafficlist", trafficlistvo);
        mav.addObject("pagination", pagination);
        mav.addObject("type", type);
        mav.setViewName("account/line/trafficlist");
        return mav;
    }

    /**
     * ??
     * 
     * @return
     */
    @RequestMapping(value = "/templatelist.htm")
    public ModelAndView template(ModelAndView mv, TravelLineQuery query, Integer page, Integer pagesize) {
        query.setcId(WebUserTools.getCid());
        query.setlTemplateState(LineTemplateEnum.Template.getValue());
        query.setPageSize(pagesize = Argument.isNotPositive(pagesize) ? 8 : pagesize);
        query.setNowPageIndex(page = Argument.isNotPositive(page) ? 0 : page - 1);

        PaginationList<TravelLineDO> list = lineService.listPagination(query, new DefaultIpageUrl());
        PagesPagination pagination = PaginationParser.getPaginationList(page, pagesize, query.getAllRecordNum(),
                new IPageUrl() {

                    @Override
                    public String parsePageUrl(Object... objs) {
                        return "/account/templatelist.htm?page=" + (Integer) objs[1];
                    }

                });
        List<TravelLineVO> lists = BeanUtils.convert(TravelLineVO.class, list);

        mv.addObject("pagination", pagination);
        mv.addObject("template", lists);
        mv.setViewName("account/line/templatelist");
        return mv;
    }

    /**
     * ??
     * 
     * @param id
     * @return
     */
    @RequestMapping(value = "/getTraffic.htm")
    @ResponseBody
    public JsonResult getTraffic(Long id) {
        TravelTrafficDO traf = lineService.getTravelTrafficById(id);
        return traf != null ? JsonResultUtils.success(traf) : JsonResultUtils.error("!");
    }

    /**
     * ??
     * 
     * @param id
     * @return
     */
    @RequestMapping(value = "/getTemplate.htm")
    @ResponseBody
    public JsonResult getTemplate(Long id) {
        TravelLineDO tral = lineService.getTravelLineById(id);
        if (tral == null) {
            return JsonResultUtils.error("?!");
        }
        TravelLineVO trvo = new TravelLineVO(tral);
        TravelRouteQuery query = new TravelRouteQuery();
        query.setlId(trvo.getlId());
        List<TravelRouteDO> listrout = lineService.list(query);
        trvo.setRoutelist(listrout);
        return trvo != null ? JsonResultUtils.success(trvo) : JsonResultUtils.error("!");
    }

    @RequestMapping(value = "/road.htm")
    public String Road() {
        return "account/line/road";
    }

    @RequestMapping(value = "/roadadd.htm")
    public String roadadd() {
        return "account/line/roadadd";
    }

    /***
     * 
     * 
     * @param name
     * @return
     */
    @RequestMapping(value = "/resourcelist.htm")
    public String resourcelist(String name) {
        return "account/line/resourcelist";
    }

    /***
     * LIST
     * 
     * @param query
     * @param pagesize
     * @param page
     * @param model
     * @return
     */
    @RequestMapping(value = "/photodiv.htm")
    public ModelAndView photolist(TravelPhotoQuery query, Integer pagesize, Integer page, ModelAndView model) {
        query.setPageSize(pagesize = Argument.isNotPositive(pagesize) ? 8 : pagesize);
        query.setNowPageIndex(page = Argument.isNotPositive(page) ? 0 : page - 1);
        query.setcId(WebUserTools.getCid());

        PaginationList<TravelPhotoDO> list = photoService.listPagination(query, new DefaultIpageUrl());
        PagesPagination pagination = PaginationParser.getPaginationList(page, pagesize, query.getAllRecordNum(),
                new IPageUrl() {

                    @Override
                    public String parsePageUrl(Object... objs) {
                        return "/account/photodiv.htm?page=" + (Integer) objs[1];
                    }

                });
        model.getModel().put(CustomVelocityLayoutView.USE_LAYOUT, "false");
        model.addObject("list", list);
        model.addObject("type", "div");
        model.addObject("pagination", pagination);
        model.setViewName("account/photo/list");
        return model;
    }

    @RequestMapping(value = "/order.htm")
    public ModelAndView showOrder(Long id, ModelAndView mav) {
        mav.setViewName("account/order/order");
        if (Argument.isNotPositive(id)) {
            return mav;
        }
        TravelLineDO lineDO = lineService.find(new TravelLineQuery(id));

        mav.addObject("line", new TravelLineVO(lineDO));
        return mav;
    }

    /**
     * ???
     * 
     * @return
     */
    private String getSerialNumber() {
        String now = DateViewTools.format(new Date(), "yyyyMMddHHmmssSSS");
        int num = new Random().nextInt(50000) + 10000;
        return now + num;
    }

    /***
     * 
     * 
     * @param line
     */
    private void updateSolr(TravelLineDO line) {
        ProductSearchQuery query = new ProductSearchQuery(null, line.getlProduct());
        solrClient.del("zuobian", query.toSolrQuery());
        TravelLineQuery queryline = new TravelLineQuery();
        queryline.setlTemplateState(LineTemplateEnum.Line.getValue());
        queryline.setlState(LineStateEnum.NORMAL.getValue());
        queryline.setlProduct(line.getlProduct());
        PaginationList<ProductSearchField> field = lineService.listProductSearch(queryline);
        if (Argument.isNotEmpty(field)) {
            solrClient.addBeans("zuobian", field);
        }
    }
}