PickAction.java 9.6 KB
package com.cjs.site.action.user.pick;

import java.math.BigDecimal;
import java.util.List;

import javax.servlet.http.HttpSession;

import com.cjs.site.model.user.account.UserInfo;
import com.cjs.site.util.lang.DateUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.cjs.site.biz.user.pick.PickBiz;
import com.cjs.site.biz.user.pick.WarehouseBiz;
import com.cjs.site.dao.user.account.UserAddressDao;
import com.cjs.site.dao.user.pick.PickPackageDao;
import com.cjs.site.dao.user.pick.WarehouseDao;
import com.cjs.site.model.pub.ResultInfo;
import com.cjs.site.model.user.pick.OutpropApplyInfo;
import com.cjs.site.model.user.pick.OutpropApplyPickInfo;
import com.cjs.site.model.user.pick.WarehouseInfo;
import com.cjs.site.util.lang.JsonUtil;
import com.cjs.site.util.web.ActionUtil;

/**
 * 提货
 *
 * @author tongyufu
 */
@Controller
@RequestMapping("/user/pick")
public class PickAction {

    Logger log = LogManager.getLogger();
    @Autowired
    private PickBiz pickBiz;
    @Autowired
    private UserAddressDao addressDao;
    @Autowired
    private PickPackageDao pickPackageDao;
    @Autowired
    private WarehouseDao warehouseDao;
    @Autowired
    private WarehouseBiz warehouseBiz;

    /**
     * 提货方式选择
     */
    @SuppressWarnings("unchecked")
    @RequestMapping("")
    public String pickView(@RequestParam String applys, @RequestParam String pickType,
                           @RequestParam String pack, Integer packageId, HttpSession session) {
        applys = applys.replace("\'", "\"");
        session.setAttribute("applyList",
                JsonUtil.fromJson(applys, List.class, OutpropApplyInfo.class));
        session.setAttribute("pack", pack);
        session.setAttribute("packageId", packageId);
        return "redirect:/user/pick/tab?pickType=" + pickType;
    }

    /**
     * 提货方式选择
     */
    @SuppressWarnings("unchecked")
    @RequestMapping("tab")
    public String pickTab(@RequestParam String pickType, HttpSession session, Model model) {
        String userId = ActionUtil.getUser().getUserId();

        //封装提货
        if (session.getAttribute("packageId") != null) {
            //包装方式
            Integer packageId = Integer.valueOf(session.getAttribute("packageId").toString());
            model.addAttribute("pickPackage", pickPackageDao.queryById(packageId));
            model.addAttribute("pickPackFeeAmount", pickBiz.pickPackFeeAmount());
        }
        //自提
        if ("1".equals(pickType)) {
            return "user/pick/self.jsp";
        } else if ("2".equals(pickType)) { //顺丰到付
            List<OutpropApplyInfo> applyList = (List<OutpropApplyInfo>) session
                    .getAttribute("applyList");
            int pickTotal = 0;
            for (OutpropApplyInfo apply : applyList) {
                pickTotal += apply.getOccurAmount();
            }
            model.addAttribute("pickTotal", pickTotal);
            model.addAttribute("addresses", JsonUtil.toJson(addressDao.queryByUserId(userId)));
            return "user/pick/express.jsp";
        }
        return "user/pick/zhaoonline.jsp";
    }

    /**
     * 自提
     */
    @RequestMapping("self")
    public String selfPick(OutpropApplyPickInfo pickInfo, Model model,
                           RedirectAttributes attributes, HttpSession session) {
        ResultInfo resultInfo = pickBiz.selfPickNew(pickInfo);
        session.setAttribute("pickInfo",pickInfo);
        this.putApplys(resultInfo, pickInfo, "2", model, attributes);
        if (resultInfo.getCode() == 0) {
            return "user/pick/self.jsp";
        }
        return "redirect:/user/pick/payInfo?pickType=1";
    }

    /**
     * 网点自提
     */
    @RequestMapping("warehouse")
    public String warehousePick(OutpropApplyPickInfo pickInfo, Model model,
                                RedirectAttributes attributes) {
        ResultInfo resultInfo = pickBiz.selfPick(pickInfo);
        this.putApplys(resultInfo, pickInfo, "2", model, attributes);
        if (resultInfo.getCode() == 0) {
            return "user/pick/warehouseDetail.jsp";
        }
        attributes.addFlashAttribute("warehouse",
                warehouseDao.queryByCode(pickInfo.getWarehouseCode()));
        return "redirect:/user/pick/payInfo?pickType=1";
    }

    /**
     * 顺丰到付
     */
    @RequestMapping("express")
    public String expressPick(OutpropApplyPickInfo pickInfo, Integer addressId, Model model,
                              RedirectAttributes attributes, HttpSession session) {
        ResultInfo resultInfo = pickBiz.expressPick(pickInfo, addressId);
        session.setAttribute("pickInfo",pickInfo);
        this.putApplys(resultInfo, pickInfo, "3", model, attributes);
        if (resultInfo.getCode() == 0) {
            model.addAttribute("addresses", addressDao.queryByUserId(ActionUtil.getUser().getClient_id()));
            return "/user/pick/express.jsp";
        }
        attributes.addFlashAttribute("address", addressDao.queryById(addressId));
        return "redirect:/user/pick/payInfo?pickType=2";
    }

    /**
     * 转赵涌在线拍卖
     */
    @RequestMapping("zhaoonline")//
    public String zhaoonlinePick(OutpropApplyPickInfo pickInfo, Model model,
                                 RedirectAttributes attributes, HttpSession session) {
        session.setAttribute("pickInfo",pickInfo);
        ResultInfo resultInfo = pickBiz.zhaoonlinePickNew(pickInfo);

        this.putApplys(resultInfo, pickInfo, "1", model, attributes);
        if (resultInfo.getCode() == 0) {
            return "user/pick/zhaoonline.jsp";
        }
        return "redirect:/user/pick/payInfo?pickType=3";
    }

    /**
     * 网点自提
     */
    @SuppressWarnings("unchecked")
    @RequestMapping("warehouseDetail")
    public String warehousePickView(@RequestParam("warehouseCode") String warehouseCode,
                                    @RequestParam("applys") String applys, HttpSession session,
                                    Model model) {
        WarehouseInfo warehouse = warehouseDao.queryByCode(warehouseCode);

        applys = applys.replace("\'", "\"");
        session.setAttribute("applyList",
                JsonUtil.fromJson(applys, List.class, OutpropApplyInfo.class));
        warehouse = warehouseBiz.parseWarehouseTime(warehouse);
        model.addAttribute("warehouse", warehouse);
        return "user/pick/warehouseDetail.jsp";
    }

    @RequestMapping("success")
    public String pickSuccess(String pickType) {
        System.out.println(pickType);
        return "user/pick/" + pickType + "Success.jsp";
    }

    @RequestMapping("payInfo")
    @SuppressWarnings("unchecked")
    public String payInfo(HttpSession session, Model model, String pickType,
                          OutpropApplyPickInfo pickInfo, Integer addressId) {
        List<OutpropApplyInfo> applyList = (List<OutpropApplyInfo>) session.getAttribute("applyList");
        int pickTotal = 0;
        Integer trusteeshipCycle = DateUtil.getTrustCycle();
        for (OutpropApplyInfo apply : applyList) {
            apply.setTrusteeshipCycle(trusteeshipCycle);
            apply.setWarehousingCharges(apply.getOccurAmount() * apply.getTrusteeshipCycle() * 0.01D);
            pickTotal += apply.getOccurAmount();
        }
        BigDecimal totalAmount = new BigDecimal("0.01").multiply(new BigDecimal(trusteeshipCycle)).
                multiply(new BigDecimal(pickTotal));
        if ("1".equals(pickType)){//上门自提
            pickInfo = (OutpropApplyPickInfo)session.getAttribute("pickInfo");
            if (pickInfo.getPickType().equals("01")){
                UserInfo userInfo = (UserInfo)session.getAttribute("USER_INFO");
                model.addAttribute("pickName", userInfo.getClient_id());
                pickInfo.setPickType("0");
            }else {
                pickInfo.setPickType("1");
                model.addAttribute("pickName", pickInfo.getDelegateName());
            }
        }else if ("2".equals(pickType)){//顺丰到付
            pickInfo.setPickType(pickType);
            pickInfo.setCreateDate(String.valueOf(addressId));
            model.addAttribute("pickName", addressDao.queryById(addressId).getUserName());
        }else if ("3".equals(pickType)){//转赵涌在线
            pickInfo = (OutpropApplyPickInfo)session.getAttribute("pickInfo");
            pickInfo.setPickType(pickType);
            model.addAttribute("pickName", pickInfo.getZhaoonlineId());
        }
        session.setAttribute("pickInfo", pickInfo);
        model.addAttribute("pickDate", pickInfo.getPickDate());
        model.addAttribute("applyList", applyList);
        model.addAttribute("warehousingCharges", totalAmount);
        model.addAttribute("totalAmount", totalAmount.add(new BigDecimal("6")));
        return "user/pick/payInfo.jsp";
    }

    private void putApplys(ResultInfo resultInfo, OutpropApplyPickInfo pickInfo, String pickType,
                           Model model, RedirectAttributes attributes) {
        if (resultInfo.getCode() == 0) {
            model.addAttribute("pickType", pickType);
            model.addAttribute("resultInfo", resultInfo);
            model.addAttribute("pickInfo", pickInfo);
        } else {
            attributes.addFlashAttribute("pickInfo", pickInfo);
            attributes.addFlashAttribute("resultInfo", resultInfo);
        }
    }
}